History

Merge tag 'v5.1-rc6' into for-5.2/block

Pull in v5.1-rc6 to resolve two conflicts. One is in BFQ, in just a comment, and is trivial. The other one is a conflict due to a later fix in the bio multi-page work, and needs a bit more care. * tag 'v5.1-rc6': (770 commits) Linux 5.1-rc6 block: make sure that bvec length can't be overflow block: kill all_q_node in request_queue x86/cpu/intel: Lower the "ENERGY_PERF_BIAS: Set to normal" message's log priority coredump: fix race condition between mmget_not_zero()/get_task_mm() and core dumping mm/kmemleak.c: fix unused-function warning init: initialize jump labels before command line option parsing kernel/watchdog_hld.c: hard lockup message should end with a newline kcov: improve CONFIG_ARCH_HAS_KCOV help text mm: fix inactive list balancing between NUMA nodes and cgroups mm/hotplug: treat CMA pages as unmovable proc: fixup proc-pid-vm test proc: fix map_files test on F29 mm/vmstat.c: fix /proc/vmstat format for CONFIG_DEBUG_TLBFLUSH=y CONFIG_SMP=n mm/memory_hotplug: do not unlock after failing to take the device_hotplug_lock mm: swapoff: shmem_unuse() stop eviction without igrab() mm: swapoff: take notice of completion sooner mm: swapoff: remove too limiting SWAP_UNUSE_MAX_TRIES mm: swapoff: shmem_find_swap_entries() filter out other types slab: store tagged freelist for off-slab slabmgmt ...

Jens Axboe committed 7 years ago

Commit 5c61ee22 parents cdf3e3d 085b775777 files · +8118 −4465Browse files

Unified · Split

777 files
  1. .clang-format +24 −0
  2. .mailmap +2 −0
  3. Documentation/accounting/psi.txt +6 −6
  4. Documentation/bpf/btf.rst +4 −4
  5. Documentation/devicetree/bindings/arm/cpus.yaml +1 −1
  6. Documentation/devicetree/bindings/hwmon/adc128d818.txt +2 −2
  7. Documentation/lzo.txt +5 −3
  8. Documentation/media/uapi/rc/rc-tables.rst +2 −2
  9. Documentation/networking/bpf_flow_dissector.rst +126 −0
  10. Documentation/networking/index.rst +1 −0
  11. Documentation/networking/rxrpc.txt +9 −7
  12. MAINTAINERS +22 −9
  13. Makefile +1 −1
  14. arch/arc/include/asm/syscall.h +3 −4
  15. arch/arm/boot/dts/am335x-evm.dts +22 −4
  16. arch/arm/boot/dts/am335x-evmsk.dts +22 −4
  17. arch/arm/boot/dts/am33xx-l4.dtsi +2 −2
  18. arch/arm/boot/dts/rk3288-tinker.dtsi +2 −1
  19. arch/arm/boot/dts/rk3288-veyron.dtsi +0 −2
  20. arch/arm/boot/dts/rk3288.dtsi +9 −11
  21. arch/arm/boot/dts/sama5d2-pinfunc.h +1 −1
  22. arch/arm/boot/dts/ste-nomadik-nhk15.dts +4 −5
  23. arch/arm/include/asm/syscall.h +8 −39
  24. arch/arm/mach-at91/pm.c +4 −2
  25. arch/arm/mach-iop13xx/setup.c +4 −4
  26. arch/arm/mach-iop13xx/tpmi.c +5 −5
  27. arch/arm/mach-milbeaut/platsmp.c +4 −0
  28. arch/arm/mach-omap1/board-ams-delta.c +2 −0
  29. arch/arm/mach-omap2/display.c +3 −1
  30. arch/arm/plat-iop/adma.c +3 −3
  31. arch/arm/plat-orion/common.c +2 −2
  32. arch/arm64/boot/dts/altera/socfpga_stratix10.dtsi +3 −0
  33. arch/arm64/boot/dts/rockchip/rk3328-roc-cc.dts +2 −2
  34. arch/arm64/boot/dts/rockchip/rk3328-rock64.dts +1 −2
  35. arch/arm64/boot/dts/rockchip/rk3328.dtsi +29 −29
  36. arch/arm64/boot/dts/rockchip/rk3399-rock-pi-4.dts +1 −0
  37. arch/arm64/include/asm/futex.h +7 −7
  38. arch/arm64/include/asm/module.h +5 −0
  39. arch/arm64/include/asm/syscall.h +8 −38
  40. arch/arm64/kernel/ftrace.c +1 −2
  41. arch/arm64/kernel/sdei.c +6 −0
  42. arch/arm64/kernel/traps.c +9 −6
  43. arch/c6x/include/asm/syscall.h +14 −65
  44. arch/csky/include/asm/syscall.h +8 −18
  45. arch/h8300/include/asm/syscall.h +7 −27
  46. arch/hexagon/include/asm/syscall.h +1 −3
  47. arch/ia64/include/asm/syscall.h +3 −10
  48. arch/ia64/kernel/ptrace.c +3 −4
  49. arch/microblaze/include/asm/syscall.h +6 −2
  50. arch/mips/configs/generic/board-ocelot.config +8 −0
  51. arch/mips/include/asm/syscall.h +2 −1
  52. arch/mips/kernel/kgdb.c +2 −1
  53. arch/mips/kernel/ptrace.c +1 −1
  54. arch/mips/sgi-ip27/ip27-irq.c +1 −2
  55. arch/nds32/include/asm/syscall.h +11 −51
  56. arch/nios2/include/asm/syscall.h +14 −70
  57. arch/openrisc/include/asm/syscall.h +4 −8
  58. arch/parisc/include/asm/ptrace.h +3 −2
  59. arch/parisc/include/asm/syscall.h +8 −22
  60. arch/parisc/kernel/process.c +0 −6
  61. arch/parisc/kernel/setup.c +3 −0
  62. arch/powerpc/include/asm/mmu.h +1 −1
  63. arch/powerpc/include/asm/syscall.h +5 −10
  64. arch/powerpc/kernel/exceptions-64s.S +12 −0
  65. arch/powerpc/kernel/head_32.S +0 −8
  66. arch/powerpc/kernel/kvm.c +7 −0
  67. arch/powerpc/kernel/vdso32/gettimeofday.S +1 −1
  68. arch/riscv/configs/rv32_defconfig +84 −0
  69. arch/riscv/include/asm/fixmap.h +1 −1
  70. arch/riscv/include/asm/syscall.h +6 −18
  71. arch/riscv/include/asm/uaccess.h +1 −1
  72. arch/riscv/kernel/Makefile +0 −3
  73. arch/riscv/kernel/module.c +1 −1
  74. arch/riscv/kernel/setup.c +0 −8
  75. arch/riscv/mm/Makefile +6 −0
  76. arch/riscv/mm/init.c +36 −0
  77. arch/s390/boot/mem_detect.c +1 −1
  78. arch/s390/include/asm/syscall.h +10 −18
  79. arch/s390/kernel/fpu.c +1 −1
  80. arch/s390/kernel/vtime.c +4 −4
  81. arch/sh/boards/of-generic.c +2 −2
  82. arch/sh/include/asm/syscall_32.h +12 −35
  83. arch/sh/include/asm/syscall_64.h +2 −6
  84. arch/sparc/include/asm/syscall.h +5 −6
  85. arch/sparc/kernel/pci_sun4v.c +11 −9
  86. arch/um/include/asm/syscall-generic.h +12 −66
  87. arch/x86/Kconfig +1 −1
  88. arch/x86/crypto/poly1305-avx2-x86_64.S +10 −4
  89. arch/x86/crypto/poly1305-sse2-x86_64.S +14 −8
  90. arch/x86/events/amd/core.c +161 −14
  91. arch/x86/events/core.c +3 −10
  92. arch/x86/events/intel/core.c +8 −2
  93. arch/x86/events/perf_event.h +19 −19
  94. arch/x86/include/asm/bitops.h +18 −23
  95. arch/x86/include/asm/kvm_emulate.h +3 −1
  96. arch/x86/include/asm/kvm_host.h +10 −7
  97. arch/x86/include/asm/syscall.h +33 −109
  98. arch/x86/include/asm/xen/hypercall.h +3 −0
  99. arch/x86/include/uapi/asm/vmx.h +1 −0
  100. arch/x86/kernel/cpu/bugs.c +3 −3
  101. arch/x86/kernel/cpu/intel.c +2 −2
  102. arch/x86/kernel/cpu/resctrl/rdtgroup.c +5 −4
  103. arch/x86/kernel/kprobes/core.c +46 −2
  104. arch/x86/kernel/process.c +6 −2
  105. arch/x86/kernel/reboot.c +21 −0
  106. arch/x86/kernel/vmlinux.lds.S +1 −1
  107. arch/x86/kvm/emulate.c +102 −89
  108. arch/x86/kvm/lapic.c +3 −1
  109. arch/x86/kvm/mmu.c +7 −8
  110. arch/x86/kvm/mmu.h +1 −1
  111. arch/x86/kvm/pmu.c +4 −0
  112. arch/x86/kvm/svm.c +47 −32
  113. arch/x86/kvm/trace.h +2 −2
  114. arch/x86/kvm/vmx/nested.c +81 −40
  115. arch/x86/kvm/vmx/vmx.c +31 −4
  116. arch/x86/kvm/vmx/vmx.h +2 −0
  117. arch/x86/kvm/x86.c +31 −33
  118. arch/x86/kvm/x86.h +2 −0
  119. arch/x86/mm/dump_pagetables.c +2 −1
  120. arch/x86/mm/ioremap.c +1 −1
  121. arch/x86/mm/kaslr.c +1 −1
  122. arch/x86/mm/tlb.c +1 −1
  123. arch/xtensa/include/asm/processor.h +12 −9
  124. arch/xtensa/include/asm/syscall.h +6 −27
  125. arch/xtensa/kernel/entry.S +6 −0
  126. arch/xtensa/kernel/stacktrace.c +5 −1
  127. arch/xtensa/mm/mmu.c +1 −1
  128. block/bfq-iosched.c +14 −9
  129. block/bfq-iosched.h +1 −1
  130. block/bfq-wf2q.c +15 −2
  131. block/bio.c +4 −1
  132. block/blk-core.c +1 −3
  133. block/blk-mq-sched.c +5 −3
  134. block/blk-mq.c +77 −61
  135. block/blk-mq.h +2 −4
  136. crypto/testmgr.h +43 −1
  137. drivers/acpi/acpica/evgpe.c +5 −1
  138. drivers/acpi/acpica/nsobject.c +4 −0
  139. drivers/acpi/nfit/core.c +6 −6
  140. drivers/acpi/nfit/intel.c +4 −6
  141. drivers/base/memory.c +1 −1
  142. drivers/block/null_blk_main.c +5 −0
  143. drivers/block/paride/pcd.c +13 −1
  144. drivers/block/paride/pf.c +11 −1
  145. drivers/block/virtio_blk.c +2 −0
  146. drivers/block/xsysace.c +2 −0
  147. drivers/bluetooth/btusb.c +1 −1
  148. drivers/char/Kconfig +1 −1
  149. drivers/char/ipmi/ipmi_dmi.c +0 −1
  150. drivers/char/ipmi/ipmi_msghandler.c +17 −2
  151. drivers/char/ipmi/ipmi_si_hardcode.c +2 −0
  152. drivers/char/tpm/eventlog/tpm2.c +2 −2
  153. drivers/char/tpm/tpm-dev-common.c +8 −1
  154. drivers/char/tpm/tpm-interface.c +6 −8
  155. drivers/clk/at91/clk-programmable.c +43 −14
  156. drivers/clk/at91/pmc.h +2 −0
  157. drivers/clk/at91/sama5d2.c +9 −1
  158. drivers/clk/imx/clk-pll14xx.c +1 −1
  159. drivers/clk/mediatek/clk-gate.c +1 −2
  160. drivers/clk/meson/clk-pll.c +1 −1
  161. drivers/clk/meson/g12a.c +3 −3
  162. drivers/clk/meson/gxbb.c +2 −0
  163. drivers/clk/meson/vid-pll-div.c +2 −2
  164. drivers/clk/x86/clk-pmc-atom.c +11 −3
  165. drivers/clocksource/Kconfig +1 −0
  166. drivers/clocksource/arm_arch_timer.c +1 −4
  167. drivers/clocksource/timer-oxnas-rps.c +1 −1
  168. drivers/clocksource/timer-ti-dm.c +0 −28
  169. drivers/cpufreq/intel_pstate.c +4 −1
  170. drivers/crypto/caam/caamhash.c +6 −7
  171. drivers/extcon/Kconfig +1 −1
  172. drivers/gpu/drm/amd/amdgpu/amdgpu_device.c +15 −4
  173. drivers/gpu/drm/amd/amdgpu/amdgpu_ib.c +3 −0
  174. drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c +0 −2
  175. drivers/gpu/drm/amd/amdgpu/mmhub_v1_0.c +1 −0
  176. drivers/gpu/drm/amd/amdkfd/kfd_device.c +1 −0
  177. drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c +1 −0
  178. drivers/gpu/drm/amd/display/dc/core/dc.c +19 −0
  179. drivers/gpu/drm/amd/display/dc/core/dc_link.c +6 −0
  180. drivers/gpu/drm/amd/display/dc/dc.h +3 −0
  181. drivers/gpu/drm/amd/display/dc/dce/dce_aux.c +6 −3
  182. drivers/gpu/drm/amd/display/dc/dce/dce_aux.h +3 −3
  183. drivers/gpu/drm/amd/display/dc/dcn10/dcn10_hubp.c +2 −21
  184. drivers/gpu/drm/amd/powerplay/hwmgr/vega20_hwmgr.c +18 −2
  185. drivers/gpu/drm/amd/powerplay/hwmgr/vega20_hwmgr.h +1 −0
  186. drivers/gpu/drm/amd/powerplay/inc/smu11_driver_if.h +3 −2
  187. drivers/gpu/drm/bridge/synopsys/dw-hdmi.c +30 −4
  188. drivers/gpu/drm/drm_atomic_helper.c +2 −3
  189. drivers/gpu/drm/i915/gvt/display.c +1 −1
  190. drivers/gpu/drm/i915/gvt/dmabuf.c +6 −7
  191. drivers/gpu/drm/i915/gvt/gtt.c +10 −4
  192. drivers/gpu/drm/i915/gvt/kvmgt.c +3 −3
  193. drivers/gpu/drm/i915/gvt/scheduler.c +3 −2
  194. drivers/gpu/drm/i915/i915_debugfs.c +4 −1
  195. drivers/gpu/drm/i915/icl_dsi.c +27 −21
  196. drivers/gpu/drm/i915/intel_ddi.c +11 −12
  197. drivers/gpu/drm/i915/intel_display.c +1 −5
  198. drivers/gpu/drm/i915/intel_dp.c +10 −59
  199. drivers/gpu/drm/i915/intel_drv.h +6 −4
  200. drivers/gpu/drm/i915/vlv_dsi.c +24 −0
  201. drivers/gpu/drm/mediatek/mtk_dpi.c +3 −5
  202. drivers/gpu/drm/mediatek/mtk_drm_drv.c +7 −0
  203. drivers/gpu/drm/mediatek/mtk_drm_gem.c +46 −0
  204. drivers/gpu/drm/mediatek/mtk_drm_gem.h +3 −0
  205. drivers/gpu/drm/mediatek/mtk_hdmi.c +1 −1
  206. drivers/gpu/drm/mediatek/mtk_hdmi_phy.c +5 −30
  207. drivers/gpu/drm/mediatek/mtk_hdmi_phy.h +1 −4
  208. drivers/gpu/drm/mediatek/mtk_mt2701_hdmi_phy.c +43 −6
  209. drivers/gpu/drm/mediatek/mtk_mt8173_hdmi_phy.c +23 −0
  210. drivers/gpu/drm/omapdrm/dss/hdmi4_cec.c +19 −7
  211. drivers/gpu/drm/omapdrm/dss/hdmi4_core.c +1 −1
  212. drivers/gpu/drm/sun4i/sun8i_dw_hdmi.c +7 −2
  213. drivers/gpu/drm/sun4i/sun8i_tcon_top.c +3 −2
  214. drivers/gpu/drm/tegra/hdmi.c +9 −3
  215. drivers/gpu/drm/ttm/ttm_bo.c +3 −1
  216. drivers/gpu/drm/ttm/ttm_page_alloc.c +7 −6
  217. drivers/gpu/drm/udl/udl_drv.c +1 −0
  218. drivers/gpu/drm/udl/udl_drv.h +1 −0
  219. drivers/gpu/drm/udl/udl_main.c +7 −1
  220. drivers/gpu/host1x/hw/channel_hw.c +5 −1
  221. drivers/hid/Kconfig +1 −0
  222. drivers/hid/hid-core.c +3 −3
  223. drivers/hid/hid-debug.c +5 −0
  224. drivers/hid/hid-ids.h +1 −0
  225. drivers/hid/hid-input.c +17 −1
  226. drivers/hid/hid-logitech-hidpp.c +10 −3
  227. drivers/hid/hid-quirks.c +7 −4
  228. drivers/hid/hid-steam.c +19 −7
  229. drivers/hid/hid-uclogic-params.c +0 −4
  230. drivers/hid/i2c-hid/i2c-hid-core.c +2 −0
  231. drivers/hwmon/Kconfig +1 −0
  232. drivers/hwmon/ntc_thermistor.c +1 −1
  233. drivers/hwmon/occ/common.c +4 −2
  234. drivers/i2c/busses/i2c-imx.c +3 −1
  235. drivers/i3c/master.c +2 −3
  236. drivers/i3c/master/dw-i3c-master.c +1 −1
  237. drivers/iio/accel/kxcjk-1013.c +2 −0
  238. drivers/iio/adc/ad_sigma_delta.c +1 −0
  239. drivers/iio/adc/at91_adc.c +17 −11
  240. drivers/iio/adc/xilinx-xadc-core.c +2 −1
  241. drivers/iio/chemical/Kconfig +14 −0
  242. drivers/iio/chemical/bme680.h +2 −4
  243. drivers/iio/chemical/bme680_core.c +45 −9
  244. drivers/iio/chemical/bme680_i2c.c +0 −21
  245. drivers/iio/chemical/bme680_spi.c +78 −37
  246. drivers/iio/common/cros_ec_sensors/cros_ec_sensors.c +4 −3
  247. drivers/iio/dac/mcp4725.c +1 −0
  248. drivers/iio/gyro/bmg160_core.c +3 −3
  249. drivers/iio/gyro/mpu3050-core.c +5 −3
  250. drivers/iio/industrialio-buffer.c +2 −3
  251. drivers/iio/industrialio-core.c +2 −2
  252. drivers/infiniband/core/uverbs_main.c +3 −0
  253. drivers/infiniband/hw/hfi1/chip.c +19 −7
  254. drivers/infiniband/hw/hfi1/qp.c +3 −1
  255. drivers/infiniband/hw/hfi1/rc.c +2 −2
  256. drivers/infiniband/hw/hfi1/tid_rdma.c +8 −23
  257. drivers/infiniband/hw/hns/hns_roce_hem.c +4 −2
  258. drivers/infiniband/hw/hns/hns_roce_mr.c +2 −2
  259. drivers/infiniband/hw/hns/hns_roce_qp.c +0 −3
  260. drivers/infiniband/hw/mlx5/odp.c +2 −1
  261. drivers/infiniband/hw/vmw_pvrdma/pvrdma_main.c +2 −0
  262. drivers/input/keyboard/snvs_pwrkey.c +3 −3
  263. drivers/input/mouse/elan_i2c_core.c +25 −0
  264. drivers/iommu/amd_iommu_init.c +1 −1
  265. drivers/irqchip/irq-ls1x.c +1 −0
  266. drivers/isdn/mISDN/socket.c +2 −2
  267. drivers/lightnvm/pblk-read.c +28 −22
  268. drivers/md/dm-core.h +1 −0
  269. drivers/md/dm-init.c +1 −1
  270. drivers/md/dm-integrity.c +7 −9
  271. drivers/md/dm-rq.c +7 −4
  272. drivers/md/dm-table.c +39 −0
  273. drivers/md/dm.c +17 −13
  274. drivers/mfd/Kconfig +1 −1
  275. drivers/mfd/sprd-sc27xx-spi.c +21 −21
  276. drivers/mfd/twl-core.c +23 −0
  277. drivers/misc/fastrpc.c +6 −1
  278. drivers/misc/habanalabs/goya/goya.c +4 −5
  279. drivers/mmc/host/alcor.c +13 −21
  280. drivers/mmc/host/sdhci-omap.c +38 −0
  281. drivers/mtd/chips/cfi_cmdset_0002.c +5 −1
  282. drivers/net/bonding/bond_main.c +5 −1
  283. drivers/net/bonding/bond_sysfs_slave.c +3 −1
  284. drivers/net/dsa/mv88e6xxx/port.c +16 −8
  285. drivers/net/ethernet/broadcom/bnx2x/bnx2x_vfpf.c +1 −1
  286. drivers/net/ethernet/broadcom/bnxt/bnxt.c +13 −3
  287. drivers/net/ethernet/broadcom/tg3.c +4 −4
  288. drivers/net/ethernet/broadcom/tg3.h +2 −2
  289. drivers/net/ethernet/cadence/macb_main.c +3 −1
  290. drivers/net/ethernet/cavium/thunder/nicvf_main.c +32 −10
  291. drivers/net/ethernet/cavium/thunder/nicvf_queues.c +14 −16
  292. drivers/net/ethernet/chelsio/libcxgb/libcxgb_ppm.c +8 −1
  293. drivers/net/ethernet/freescale/fec_main.c +21 −9
  294. drivers/net/ethernet/hisilicon/hns/hnae.c +3 −1
  295. drivers/net/ethernet/hisilicon/hns/hnae.h +1 −1
  296. drivers/net/ethernet/hisilicon/hns/hns_dsaf_mac.c +1 −1
  297. drivers/net/ethernet/hisilicon/hns/hns_dsaf_mac.h +2 −2
  298. drivers/net/ethernet/hisilicon/hns/hns_dsaf_main.c +33 −20
  299. drivers/net/ethernet/hisilicon/hns/hns_dsaf_main.h +2 −0
  300. drivers/net/ethernet/hisilicon/hns/hns_dsaf_misc.c +1 −1
  301. drivers/net/ethernet/hisilicon/hns/hns_dsaf_ppe.c +3 −3
  302. drivers/net/ethernet/hisilicon/hns/hns_dsaf_ppe.h +2 −2
  303. drivers/net/ethernet/hisilicon/hns/hns_dsaf_rcb.c +2 −2
  304. drivers/net/ethernet/hisilicon/hns/hns_dsaf_reg.h +6 −6
  305. drivers/net/ethernet/hisilicon/hns/hns_dsaf_xgmac.c +1 −1
  306. drivers/net/ethernet/hisilicon/hns/hns_enet.c +5 −7
  307. drivers/net/ethernet/hisilicon/hns3/hns3pf/Makefile +1 −1
  308. drivers/net/ethernet/hisilicon/hns3/hns3vf/Makefile +1 −1
  309. drivers/net/ethernet/hisilicon/hns_mdio.c +7 −11
  310. drivers/net/ethernet/ibm/ibmvnic.c +28 −9
  311. drivers/net/ethernet/intel/fm10k/fm10k_main.c +2 −0
  312. drivers/net/ethernet/intel/i40e/i40e.h +2 −14
  313. drivers/net/ethernet/intel/i40e/i40e_ethtool.c +1 −2
  314. drivers/net/ethernet/intel/i40e/i40e_main.c +28 −0
  315. drivers/net/ethernet/intel/i40e/i40e_ptp.c +3 −2
  316. drivers/net/ethernet/intel/i40e/i40e_xsk.c +3 −0
  317. drivers/net/ethernet/intel/igb/e1000_defines.h +2 −0
  318. drivers/net/ethernet/intel/igb/igb_main.c +8 −49
  319. drivers/net/ethernet/intel/ixgbe/ixgbe_phy.c +9 −7
  320. drivers/net/ethernet/mellanox/mlx5/core/en.h +1 −0
  321. drivers/net/ethernet/mellanox/mlx5/core/en/port.c +0 −3
  322. drivers/net/ethernet/mellanox/mlx5/core/en/port_buffer.c +22 −17
  323. drivers/net/ethernet/mellanox/mlx5/core/en/reporter_tx.c +8 −3
  324. drivers/net/ethernet/mellanox/mlx5/core/en/tc_tun.c +4 −0
  325. drivers/net/ethernet/mellanox/mlx5/core/en_common.c +11 −2
  326. drivers/net/ethernet/mellanox/mlx5/core/en_ethtool.c +36 −19
  327. drivers/net/ethernet/mellanox/mlx5/core/en_main.c +16 −5
  328. drivers/net/ethernet/mellanox/mlx5/core/en_rx.c +75 −19
  329. drivers/net/ethernet/mellanox/mlx5/core/en_stats.c +6 −0
  330. drivers/net/ethernet/mellanox/mlx5/core/en_stats.h +4 −0
  331. drivers/net/ethernet/mellanox/mlx5/core/en_tc.c +68 −14
  332. drivers/net/ethernet/mellanox/mlx5/core/eswitch.c +5 −4
  333. drivers/net/ethernet/mellanox/mlx5/core/eswitch_offloads.c +1 −0
  334. drivers/net/ethernet/mellanox/mlx5/core/fpga/tls.c +24 −29
  335. drivers/net/ethernet/mellanox/mlx5/core/main.c +0 −20
  336. drivers/net/ethernet/mellanox/mlxsw/core.c +3 −3
  337. drivers/net/ethernet/mellanox/mlxsw/spectrum_buffers.c +11 −8
  338. drivers/net/ethernet/mellanox/mlxsw/spectrum_router.c +1 −1
  339. drivers/net/ethernet/mellanox/mlxsw/spectrum_switchdev.c +1 −1
  340. drivers/net/ethernet/mscc/ocelot.c +15 −9
  341. drivers/net/ethernet/neterion/vxge/vxge-config.c +1 −0
  342. drivers/net/ethernet/netronome/nfp/flower/action.c +1 −2
  343. drivers/net/ethernet/netronome/nfp/flower/cmsg.h +1 −2
  344. drivers/net/ethernet/netronome/nfp/flower/match.c +13 −14
  345. drivers/net/ethernet/netronome/nfp/nfp_net_repr.c +2 −2
  346. drivers/net/ethernet/qlogic/qed/qed.h +5 −2
  347. drivers/net/ethernet/qlogic/qed/qed_dev.c +34 −51
  348. drivers/net/ethernet/qlogic/qed/qed_int.c +63 −20
  349. drivers/net/ethernet/qlogic/qed/qed_int.h +2 −2
  350. drivers/net/ethernet/qlogic/qed/qed_main.c +1 −1
  351. drivers/net/ethernet/qlogic/qed/qed_sriov.c +1 −1
  352. drivers/net/ethernet/qlogic/qede/qede_ptp.c +3 −4
  353. drivers/net/ethernet/qlogic/qlcnic/qlcnic.h +1 −1
  354. drivers/net/ethernet/realtek/r8169.c +7 −1
  355. drivers/net/ethernet/stmicro/stmmac/descs_com.h +14 −8
  356. drivers/net/ethernet/stmicro/stmmac/dwmac4_descs.c +1 −1
  357. drivers/net/ethernet/stmicro/stmmac/dwxgmac2_descs.c +1 −1
  358. drivers/net/ethernet/stmicro/stmmac/enh_desc.c +16 −6
  359. drivers/net/ethernet/stmicro/stmmac/hwif.h +1 −1
  360. drivers/net/ethernet/stmicro/stmmac/norm_desc.c +7 −5
  361. drivers/net/ethernet/stmicro/stmmac/stmmac_main.c +19 −15
  362. drivers/net/hyperv/hyperv_net.h +1 −0
  363. drivers/net/hyperv/netvsc.c +4 −2
  364. drivers/net/hyperv/netvsc_drv.c +26 −6
  365. drivers/net/team/team.c +26 −0
  366. drivers/net/usb/qmi_wwan.c +1 −0
  367. drivers/net/vrf.c +7 −2
  368. drivers/net/wireless/ath/ath10k/htt_rx.c +1 −1
  369. drivers/net/wireless/ath/ath10k/mac.c +2 −2
  370. drivers/net/wireless/ath/ath9k/xmit.c +4 −1
  371. drivers/net/wireless/intel/iwlwifi/cfg/22000.c +22 −8
  372. drivers/net/wireless/intel/iwlwifi/fw/dbg.c +8 −26
  373. drivers/net/wireless/intel/iwlwifi/fw/init.c +0 −1
  374. drivers/net/wireless/intel/iwlwifi/iwl-config.h +2 −1
  375. drivers/net/wireless/intel/iwlwifi/iwl-csr.h +1 −0
  376. drivers/net/wireless/intel/iwlwifi/iwl-trans.h +6 −6
  377. drivers/net/wireless/intel/iwlwifi/mvm/mac80211.c +22 −49
  378. drivers/net/wireless/intel/iwlwifi/mvm/mvm.h +0 −1
  379. drivers/net/wireless/intel/iwlwifi/mvm/sta.c +4 −39
  380. drivers/net/wireless/intel/iwlwifi/mvm/sta.h +2 −5
  381. drivers/net/wireless/intel/iwlwifi/pcie/drv.c +7 −6
  382. drivers/net/wireless/intel/iwlwifi/pcie/internal.h +1 −1
  383. drivers/net/wireless/intel/iwlwifi/pcie/trans.c +8 −3
  384. drivers/net/wireless/intel/iwlwifi/pcie/tx-gen2.c +1 −1
  385. drivers/net/wireless/intel/iwlwifi/pcie/tx.c +1 −1
  386. drivers/net/wireless/mac80211_hwsim.c +15 −4
  387. drivers/net/wireless/mediatek/mt76/mt7603/init.c +2 −0
  388. drivers/net/wireless/mediatek/mt76/mt7603/mac.c +14 −39
  389. drivers/net/wireless/mediatek/mt76/mt7603/main.c +4 −4
  390. drivers/net/wireless/mediatek/mt76/mt7603/mt7603.h +1 −1
  391. drivers/net/wireless/mediatek/mt76/mt76x02_mac.c +8 −6
  392. drivers/net/wireless/ralink/rt2x00/rt2x00.h +0 −1
  393. drivers/net/wireless/ralink/rt2x00/rt2x00mac.c +0 −10
  394. drivers/net/wireless/ralink/rt2x00/rt2x00queue.c +9 −6
  395. drivers/nvdimm/btt_devs.c +13 −5
  396. drivers/nvdimm/namespace_devs.c +4 −1
  397. drivers/nvdimm/pmem.c +4 −4
  398. drivers/nvdimm/security.c +73 −45
  399. drivers/nvme/host/core.c +1 −1
  400. drivers/nvme/host/fc.c +15 −5
  401. drivers/nvme/target/admin-cmd.c +5 −0
  402. drivers/nvme/target/discovery.c +45 −23
  403. drivers/nvme/target/nvmet.h +1 −0
  404. drivers/parisc/iosapic.c +5 −1
  405. drivers/pci/hotplug/pciehp_ctrl.c +4 −0
  406. drivers/pci/quirks.c +2 −0
  407. drivers/platform/x86/pmc_atom.c +21 −0
  408. drivers/power/supply/goldfish_battery.c +1 −1
  409. drivers/reset/reset-meson-audio-arb.c +1 −0
  410. drivers/rtc/Kconfig +2 −2
  411. drivers/rtc/rtc-cros-ec.c +2 −2
  412. drivers/rtc/rtc-da9063.c +7 −0
  413. drivers/rtc/rtc-sh.c +1 −1
  414. drivers/s390/block/dasd_eckd.c +3 −3
  415. drivers/s390/char/con3270.c +1 −1
  416. drivers/s390/char/fs3270.c +2 −1
  417. drivers/s390/char/raw3270.c +2 −1
  418. drivers/s390/char/raw3270.h +3 −1
  419. drivers/s390/char/tty3270.c +2 −1
  420. drivers/s390/crypto/ap_queue.c +1 −1
  421. drivers/s390/crypto/pkey_api.c +2 −1
  422. drivers/scsi/aic7xxx/aic7770_osm.c +1 −0
  423. drivers/scsi/aic7xxx/aic7xxx.h +1 −0
  424. drivers/scsi/aic7xxx/aic7xxx_osm.c +4 −6
  425. drivers/scsi/aic7xxx/aic7xxx_osm_pci.c +1 −0
  426. drivers/scsi/csiostor/csio_scsi.c +4 −1
  427. drivers/scsi/libfc/fc_rport.c +0 −1
  428. drivers/scsi/lpfc/lpfc_scsi.c +3 −4
  429. drivers/scsi/qedi/qedi_main.c +2 −5
  430. drivers/scsi/scsi_devinfo.c +1 −0
  431. drivers/scsi/scsi_dh.c +1 −0
  432. drivers/scsi/scsi_lib.c +5 −1
  433. drivers/scsi/storvsc_drv.c +12 −3
  434. drivers/scsi/virtio_scsi.c +1 −0
  435. drivers/staging/comedi/drivers/ni_usb6501.c +4 −6
  436. drivers/staging/comedi/drivers/vmk80xx.c +3 −5
  437. drivers/staging/erofs/data.c +1 −1
  438. drivers/staging/iio/adc/ad7192.c +4 −4
  439. drivers/staging/iio/meter/ade7854.c +1 −1
  440. drivers/staging/most/core.c +1 −1
  441. drivers/tty/serial/sc16is7xx.c +3 −1
  442. drivers/tty/serial/sh-sci.c +4 −2
  443. drivers/tty/vt/vt.c +2 −1
  444. drivers/vfio/pci/vfio_pci.c +2 −2
  445. drivers/vfio/vfio_iommu_spapr_tce.c +1 −1
  446. drivers/vfio/vfio_iommu_type1.c +14 −0
  447. drivers/vhost/vhost.c +5 −1
  448. drivers/virtio/virtio_pci_common.c +5 −3
  449. drivers/virtio/virtio_ring.c +2 −0
  450. drivers/xen/privcmd-buf.c +1 −2
  451. drivers/xen/xenbus/xenbus_dev_frontend.c +1 −3
  452. fs/afs/callback.c +1 −2
  453. fs/afs/cmservice.c +1 −1
  454. fs/afs/inode.c +1 −3
  455. fs/afs/internal.h +1 −3
  456. fs/afs/rxrpc.c +22 −8
  457. fs/afs/server.c +0 −1
  458. fs/afs/write.c +1 −0
  459. fs/aio.c +150 −188
  460. fs/block_dev.c +4 −4
  461. fs/btrfs/ioctl.c +10 −0
  462. fs/btrfs/props.c +4 −4
  463. fs/cifs/cifsfs.c +2 −0
  464. fs/cifs/cifsglob.h +10 −0
  465. fs/cifs/connect.c +29 −1
  466. fs/cifs/file.c +25 −5
  467. fs/cifs/misc.c +23 −2
  468. fs/cifs/smb2file.c +4 −2
  469. fs/cifs/smb2misc.c +3 −3
  470. fs/cifs/smb2ops.c +44 −26
  471. fs/cifs/smb2pdu.c +40 −20
  472. fs/cifs/smb2proto.h +3 −2
  473. fs/dax.c +15 −0
  474. fs/debugfs/inode.c +9 −4
  475. fs/fuse/dev.c +6 −6
  476. fs/hugetlbfs/inode.c +14 −6
  477. fs/io_uring.c +35 −11
  478. fs/jffs2/readinode.c +0 −5
  479. fs/jffs2/super.c +4 −1
  480. fs/nfs/nfs42proc.c +0 −3
  481. fs/nfs/nfs4file.c +3 −1
  482. fs/nfs/nfs4xdr.c +2 −2
  483. fs/nfs/super.c +2 −1
  484. fs/open.c +18 −0
  485. fs/pipe.c +2 −2
  486. fs/proc/base.c +9 −8
  487. fs/proc/task_mmu.c +18 −0
  488. fs/read_write.c +3 −2
  489. fs/splice.c +10 −2
  490. fs/ubifs/super.c +1 −3
  491. fs/userfaultfd.c +9 −0
  492. include/asm-generic/syscall.h +5 −16
  493. include/drm/drm_modeset_helper_vtables.h +4 −0
  494. include/dt-bindings/clock/sifive-fu540-prci.h +18 −0
  495. include/dt-bindings/reset/amlogic,meson-g12a-reset.h +4 −1
  496. include/keys/trusted.h +1 −1
  497. include/linux/bio.h +12 −8
  498. include/linux/bitrev.h +23 −23
  499. include/linux/blk-mq.h +1 −0
  500. include/linux/blkdev.h +0 −1
  501. include/linux/bvec.h +18 −6
  502. include/linux/efi.h +6 −1
  503. include/linux/elevator.h +1 −0
  504. include/linux/fs.h +4 −0
  505. include/linux/kernel.h +2 −2
  506. include/linux/kprobes.h +1 −0
  507. include/linux/kvm_host.h +6 −4
  508. include/linux/memcontrol.h +4 −1
  509. include/linux/mii.h +1 −1
  510. include/linux/mlx5/driver.h +2 −0
  511. include/linux/mm.h +14 −1
  512. include/linux/mm_types.h +1 −1
  513. include/linux/netdevice.h +3 −0
  514. include/linux/nvme.h +7 −2
  515. include/linux/pipe_fs_i.h +6 −4
  516. include/linux/platform_data/x86/clk-pmc-atom.h +3 −0
  517. include/linux/ptrace.h +8 −3
  518. include/linux/sched/mm.h +21 −0
  519. include/linux/shmem_fs.h +1 −0
  520. include/linux/string.h +3 −0
  521. include/linux/sunrpc/sched.h +0 −8
  522. include/linux/virtio_ring.h +1 −1
  523. include/net/af_rxrpc.h +3 −1
  524. include/net/cfg80211.h +5 −0
  525. include/net/ip.h +1 −1
  526. include/net/mac80211.h +34 −29
  527. include/net/net_namespace.h +1 −0
  528. include/net/netns/hash.h +2 −8
  529. include/net/netrom.h +1 −1
  530. include/net/nfc/nci_core.h +1 −1
  531. include/net/sch_generic.h +37 −7
  532. include/net/sock.h +0 −6
  533. include/net/tls.h +3 −1
  534. include/sound/soc.h +9 −2
  535. include/trace/events/syscalls.h +1 −1
  536. include/uapi/linux/ethtool.h +1 −1
  537. include/uapi/linux/input-event-codes.h +4 −2
  538. include/uapi/sound/asound.h +1 −0
  539. init/main.c +2 −2
  540. kernel/bpf/cpumap.c +10 −3
  541. kernel/bpf/inode.c +18 −14
  542. kernel/bpf/verifier.c +3 −2
  543. kernel/dma/debug.c +1 −1
  544. kernel/events/core.c +64 −25
  545. kernel/events/ring_buffer.c +17 −20
  546. kernel/irq/chip.c +4 −0
  547. kernel/irq/irqdesc.c +1 −0
  548. kernel/kprobes.c +2 −4
  549. kernel/locking/lockdep.c +8 −12
  550. kernel/sched/deadline.c +1 −2
  551. kernel/sched/fair.c +28 −3
  552. kernel/seccomp.c +1 −1
  553. kernel/signal.c +5 −10
  554. kernel/sysctl.c +2 −1
  555. kernel/time/alarmtimer.c +1 −1
  556. kernel/time/sched_clock.c +2 −2
  557. kernel/time/tick-common.c +2 −0
  558. kernel/time/timekeeping.h +7 −0
  559. kernel/trace/ftrace.c +5 −1
  560. kernel/trace/trace.c +5 −1
  561. kernel/trace/trace_syscalls.c +6 −3
  562. kernel/watchdog_hld.c +2 −1
  563. lib/Kconfig.debug +3 −3
  564. lib/iov_iter.c +4 −0
  565. lib/lzo/lzo1x_compress.c +6 −3
  566. lib/lzo/lzo1x_decompress_safe.c +1 −3
  567. lib/string.c +20 −0
  568. lib/syscall.c +25 −32
  569. mm/compaction.c +18 −11
  570. mm/gup.c +36 −12
  571. mm/huge_memory.c +36 −0
  572. mm/hugetlb.c +13 −0
  573. mm/kmemleak.c +13 −5
  574. mm/memcontrol.c +18 −2
  575. mm/mmap.c +6 −1
  576. mm/page_alloc.c +18 −12
  577. mm/percpu.c +4 −4
  578. mm/shmem.c +27 −31
  579. mm/slab.c +2 −2
  580. mm/swapfile.c +17 −15
  581. mm/util.c +1 −1
  582. mm/vmscan.c +9 −20
  583. mm/vmstat.c +0 −5
  584. net/8021q/vlan_dev.c +15 −11
  585. net/atm/lec.c +5 −1
  586. net/batman-adv/bat_v_elp.c +4 −2
  587. net/batman-adv/bridge_loop_avoidance.c +13 −3
  588. net/batman-adv/sysfs.c +5 −2
  589. net/batman-adv/translation-table.c +24 −8
  590. net/bluetooth/sco.c +2 −2
  591. net/bridge/br_input.c +14 −9
  592. net/bridge/br_multicast.c +6 −1
  593. net/bridge/br_netlink.c +1 −1
  594. net/core/datagram.c +1 −1
  595. net/core/dev.c +18 −2
  596. net/core/ethtool.c +30 −16
  597. net/core/failover.c +3 −3
  598. net/core/filter.c +5 −13
  599. net/core/flow_dissector.c +3 −1
  600. net/core/net-sysfs.c +5 −9
  601. net/core/net_namespace.c +1 −0
  602. net/core/ptp_classifier.c +4 −3
  603. net/core/rtnetlink.c +1 −1
  604. net/core/skbuff.c +10 −2
  605. net/core/sock.c +2 −2
  606. net/dccp/feat.c +6 −1
  607. net/dsa/tag_qca.c +10 −0
  608. net/ipv4/fou.c +3 −1
  609. net/ipv4/ip_gre.c +10 −5
  610. net/ipv4/ip_input.c +3 −4
  611. net/ipv4/ip_options.c +2 −2
  612. net/ipv4/route.c +15 −1
  613. net/ipv4/tcp_dctcp.c +35 −46
  614. net/ipv4/tcp_input.c +5 −5
  615. net/ipv4/tcp_ipv4.c +2 −1
  616. net/ipv6/ila/ila_xlat.c +1 −0
  617. net/ipv6/ip6_gre.c +13 −7
  618. net/ipv6/ip6_output.c +3 −1
  619. net/ipv6/ip6_tunnel.c +2 −2
  620. net/ipv6/route.c +4 −0
  621. net/ipv6/sit.c +4 −0
  622. net/ipv6/udp.c +2 −0
  623. net/kcm/kcmsock.c +8 −8
  624. net/llc/af_llc.c +1 −2
  625. net/mac80211/driver-ops.h +3 −0
  626. net/mac80211/key.c +4 −5
  627. net/mac80211/mesh_pathtbl.c +1 −1
  628. net/mac80211/rx.c +9 −1
  629. net/mac80211/trace_msg.h +6 −1
  630. net/mac80211/tx.c +23 −30
  631. net/netlink/af_netlink.c +2 −1
  632. net/netrom/af_netrom.c +54 −22
  633. net/netrom/nr_loopback.c +1 −1
  634. net/netrom/nr_route.c +1 −1
  635. net/netrom/sysctl_net_netrom.c +4 −1
  636. net/nfc/nci/hci.c +8 −0
  637. net/openvswitch/flow_netlink.c +2 −2
  638. net/rds/af_rds.c +3 −0
  639. net/rds/bind.c +2 −0
  640. net/rds/tcp.c +1 −1
  641. net/rxrpc/af_rxrpc.c +11 −6
  642. net/rxrpc/ar-internal.h +1 −0
  643. net/rxrpc/conn_event.c +7 −4
  644. net/rxrpc/input.c +12 −6
  645. net/rxrpc/peer_event.c +5 −0
  646. net/rxrpc/sendmsg.c +12 −9
  647. net/sched/act_sample.c +8 −2
  648. net/sched/cls_matchall.c +5 −0
  649. net/sched/sch_cake.c +12 −1
  650. net/sched/sch_cbq.c +4 −6
  651. net/sched/sch_drr.c +4 −12
  652. net/sched/sch_hfsc.c +5 −14
  653. net/sched/sch_htb.c +6 −16
  654. net/sched/sch_mq.c +1 −1
  655. net/sched/sch_mqprio.c +1 −2
  656. net/sched/sch_multiq.c +4 −6
  657. net/sched/sch_prio.c +3 −7
  658. net/sched/sch_qfq.c +2 −12
  659. net/sched/sch_red.c +1 −2
  660. net/sched/sch_sfb.c +1 −2
  661. net/sched/sch_taprio.c +1 −1
  662. net/sched/sch_tbf.c +1 −2
  663. net/sctp/protocol.c +1 −0
  664. net/sctp/socket.c +2 −1
  665. net/smc/af_smc.c +39 −19
  666. net/smc/smc_close.c +21 −4
  667. net/smc/smc_close.h +1 −0
  668. net/smc/smc_ism.c +5 −0
  669. net/smc/smc_pnet.c +2 −1
  670. net/strparser/strparser.c +5 −7
  671. net/sunrpc/clnt.c +13 −39
  672. net/sunrpc/xprtrdma/verbs.c +1 −1
  673. net/tipc/link.c +2 −0
  674. net/tipc/name_table.c +2 −1
  675. net/tipc/netlink_compat.c +20 −4
  676. net/tipc/sysctl.c +6 −2
  677. net/tls/tls_device.c +11 −1
  678. net/tls/tls_main.c +24 −0
  679. net/tls/tls_sw.c +3 −14
  680. net/wireless/nl80211.c +12 −6
  681. net/wireless/reg.c +39 −0
  682. net/wireless/scan.c +1 −2
  683. net/wireless/util.c +4 −2
  684. scripts/atomic/gen-atomics.sh +1 −1
  685. scripts/coccinelle/api/stream_open.cocci +363 −0
  686. security/apparmor/lsm.c +48 −1
  687. security/device_cgroup.c +1 −1
  688. security/keys/trusted.c +25 −7
  689. sound/core/info.c +10 −2
  690. sound/core/init.c +9 −9
  691. sound/core/seq/seq_clientmgr.c +3 −3
  692. sound/hda/ext/hdac_ext_bus.c +0 −1
  693. sound/hda/hdac_bus.c +1 −0
  694. sound/hda/hdac_component.c +5 −1
  695. sound/pci/hda/hda_codec.c +1 −0
  696. sound/pci/hda/hda_intel.c +4 −0
  697. sound/pci/hda/patch_realtek.c +57 −21
  698. sound/soc/codecs/Kconfig +1 −0
  699. sound/soc/codecs/ab8500-codec.c +1 −0
  700. sound/soc/codecs/cs35l35.c +11 −0
  701. sound/soc/codecs/cs4270.c +1 −0
  702. sound/soc/codecs/hdac_hda.c +39 −14
  703. sound/soc/codecs/hdac_hda.h +1 −0
  704. sound/soc/codecs/hdmi-codec.c +59 −62
  705. sound/soc/codecs/nau8810.c +2 −2
  706. sound/soc/codecs/nau8824.c +38 −8
  707. sound/soc/codecs/rt5682.c +25 −31
  708. sound/soc/codecs/tlv320aic32x4-i2c.c +2 −2
  709. sound/soc/codecs/tlv320aic32x4-spi.c +2 −2
  710. sound/soc/codecs/tlv320aic32x4.c +2 −0
  711. sound/soc/codecs/tlv320aic3x.c +3 −1
  712. sound/soc/codecs/wm_adsp.c +33 −7
  713. sound/soc/codecs/wm_adsp.h +1 −0
  714. sound/soc/fsl/fsl_asrc.c +14 −0
  715. sound/soc/fsl/fsl_esai.c +37 −10
  716. sound/soc/generic/audio-graph-card.c +8 −3
  717. sound/soc/generic/simple-card.c +9 −3
  718. sound/soc/intel/atom/sst-mfld-platform-pcm.c +8 −0
  719. sound/soc/intel/boards/cht_bsw_max98090_ti.c +41 −6
  720. sound/soc/intel/boards/kbl_rt5663_rt5514_max98927.c +1 −1
  721. sound/soc/intel/skylake/skl-messages.c +1 −0
  722. sound/soc/intel/skylake/skl-pcm.c +22 −6
  723. sound/soc/mediatek/common/mtk-btcvsd.c +68 −1
  724. sound/soc/mediatek/mt8183/mt8183-afe-clk.c +4 −0
  725. sound/soc/rockchip/rockchip_pdm.c +3 −1
  726. sound/soc/samsung/i2s.c +6 −4
  727. sound/soc/samsung/odroid.c +2 −2
  728. sound/soc/sh/rcar/core.c +2 −0
  729. sound/soc/sh/rcar/rsnd.h +5 −0
  730. sound/soc/sh/rcar/src.c +7 −14
  731. sound/soc/soc-core.c +4 −2
  732. sound/soc/soc-dapm.c +11 −0
  733. sound/soc/soc-pcm.c +55 −11
  734. sound/soc/soc-topology.c +4 −3
  735. sound/soc/stm/stm32_adfsdm.c +34 −4
  736. sound/soc/stm/stm32_i2s.c +1 −2
  737. sound/soc/stm/stm32_sai.c +5 −3
  738. sound/soc/stm/stm32_sai_sub.c +86 −28
  739. sound/xen/xen_snd_front_alsa.c +1 −1
  740. tools/include/uapi/sound/asound.h +1 −0
  741. tools/io_uring/io_uring-bench.c +4 −28
  742. tools/lib/bpf/Makefile +4 −3
  743. tools/lib/bpf/btf.c +3 −0
  744. tools/lib/traceevent/event-parse.c +1 −1
  745. tools/objtool/check.c +1 −0
  746. tools/perf/builtin-stat.c +1 −0
  747. tools/perf/builtin-top.c +1 −0
  748. tools/perf/scripts/python/export-to-sqlite.py +1 −1
  749. tools/perf/util/env.c +6 −2
  750. tools/perf/util/evlist.c +9 −5
  751. tools/perf/util/evsel.c +6 −6
  752. tools/perf/util/header.c +13 −9
  753. tools/perf/util/map.c +17 −3
  754. tools/perf/util/map.h +3 −1
  755. tools/power/x86/turbostat/turbostat.c +219 −58
  756. tools/testing/nvdimm/test/nfit.c +13 −4
  757. tools/testing/selftests/bpf/prog_tests/flow_dissector.c +68 −0
  758. tools/testing/selftests/bpf/progs/bpf_flow.c +7 −12
  759. tools/testing/selftests/bpf/test_btf.c +47 −0
  760. tools/testing/selftests/bpf/verifier/calls.c +38 −0
  761. tools/testing/selftests/drivers/net/mlxsw/rtnetlink.sh +20 −0
  762. tools/testing/selftests/kvm/Makefile +8 −1
  763. tools/testing/selftests/kvm/include/x86_64/processor.h +27 −0
  764. tools/testing/selftests/kvm/lib/kvm_util.c +5 −0
  765. tools/testing/selftests/kvm/lib/x86_64/processor.c +14 −6
  766. tools/testing/selftests/kvm/x86_64/evmcs_test.c +3 −2
  767. tools/testing/selftests/kvm/x86_64/smm_test.c +157 −0
  768. tools/testing/selftests/kvm/x86_64/state_test.c +1 −14
  769. tools/testing/selftests/net/fib_tests.sh +40 −54
  770. tools/testing/selftests/proc/proc-pid-vm.c +2 −2
  771. tools/testing/selftests/proc/proc-self-map-files-002.c +10 −10
  772. tools/testing/selftests/tc-testing/tc-tests/actions/sample.json +24 −0
  773. tools/testing/selftests/tc-testing/tc-tests/filters/tests.json +20 −0
  774. tools/testing/selftests/tpm2/tpm2.py +3 −2
  775. tools/testing/selftests/tpm2/tpm2_tests.py +63 −0
  776. virt/kvm/irqchip.c +3 −2
  777. virt/kvm/kvm_main.c +4 −2
.clang-format+24−0
@@ -78,6 +78,8 @@ ForEachMacros: · 77 unmodified lines
78 - 'ata_qc_for_each_with_internal'78 - 'ata_qc_for_each_with_internal'
79 - 'ax25_for_each'79 - 'ax25_for_each'
80 - 'ax25_uid_for_each'80 - 'ax25_uid_for_each'
81 - '__bio_for_each_bvec'
82 - 'bio_for_each_bvec'
81 - 'bio_for_each_integrity_vec'83 - 'bio_for_each_integrity_vec'
82 - '__bio_for_each_segment'84 - '__bio_for_each_segment'
83 - 'bio_for_each_segment'85 - 'bio_for_each_segment'
@@ -118,10 +120,12 @@ ForEachMacros: · 34 unmodified lines
118 - 'drm_for_each_legacy_plane'120 - 'drm_for_each_legacy_plane'
119 - 'drm_for_each_plane'121 - 'drm_for_each_plane'
120 - 'drm_for_each_plane_mask'122 - 'drm_for_each_plane_mask'
123 - 'drm_for_each_privobj'
121 - 'drm_mm_for_each_hole'124 - 'drm_mm_for_each_hole'
122 - 'drm_mm_for_each_node'125 - 'drm_mm_for_each_node'
123 - 'drm_mm_for_each_node_in_range'126 - 'drm_mm_for_each_node_in_range'
124 - 'drm_mm_for_each_node_safe'127 - 'drm_mm_for_each_node_safe'
128 - 'flow_action_for_each'
125 - 'for_each_active_drhd_unit'129 - 'for_each_active_drhd_unit'
126 - 'for_each_active_iommu'130 - 'for_each_active_iommu'
127 - 'for_each_available_child_of_node'131 - 'for_each_available_child_of_node'
@@ -158,6 +162,9 @@ ForEachMacros: · 30 unmodified lines
158 - 'for_each_dss_dev'162 - 'for_each_dss_dev'
159 - 'for_each_efi_memory_desc'163 - 'for_each_efi_memory_desc'
160 - 'for_each_efi_memory_desc_in_map'164 - 'for_each_efi_memory_desc_in_map'
165 - 'for_each_element'
166 - 'for_each_element_extid'
167 - 'for_each_element_id'
161 - 'for_each_endpoint_of_node'168 - 'for_each_endpoint_of_node'
162 - 'for_each_evictable_lru'169 - 'for_each_evictable_lru'
163 - 'for_each_fib6_node_rt_rcu'170 - 'for_each_fib6_node_rt_rcu'
@@ -195,6 +202,7 @@ ForEachMacros: · 31 unmodified lines
195 - 'for_each_net_rcu'202 - 'for_each_net_rcu'
196 - 'for_each_new_connector_in_state'203 - 'for_each_new_connector_in_state'
197 - 'for_each_new_crtc_in_state'204 - 'for_each_new_crtc_in_state'
205 - 'for_each_new_mst_mgr_in_state'
198 - 'for_each_new_plane_in_state'206 - 'for_each_new_plane_in_state'
199 - 'for_each_new_private_obj_in_state'207 - 'for_each_new_private_obj_in_state'
200 - 'for_each_node'208 - 'for_each_node'
@@ -210,8 +218,10 @@ ForEachMacros: · 9 unmodified lines
210 - 'for_each_of_pci_range'218 - 'for_each_of_pci_range'
211 - 'for_each_old_connector_in_state'219 - 'for_each_old_connector_in_state'
212 - 'for_each_old_crtc_in_state'220 - 'for_each_old_crtc_in_state'
221 - 'for_each_old_mst_mgr_in_state'
213 - 'for_each_oldnew_connector_in_state'222 - 'for_each_oldnew_connector_in_state'
214 - 'for_each_oldnew_crtc_in_state'223 - 'for_each_oldnew_crtc_in_state'
224 - 'for_each_oldnew_mst_mgr_in_state'
215 - 'for_each_oldnew_plane_in_state'225 - 'for_each_oldnew_plane_in_state'
216 - 'for_each_oldnew_plane_in_state_reverse'226 - 'for_each_oldnew_plane_in_state_reverse'
217 - 'for_each_oldnew_private_obj_in_state'227 - 'for_each_oldnew_private_obj_in_state'
@@ -243,6 +253,9 @@ ForEachMacros: · 25 unmodified lines
243 - 'for_each_sg_dma_page'253 - 'for_each_sg_dma_page'
244 - 'for_each_sg_page'254 - 'for_each_sg_page'
245 - 'for_each_sibling_event'255 - 'for_each_sibling_event'
256 - 'for_each_subelement'
257 - 'for_each_subelement_extid'
258 - 'for_each_subelement_id'
246 - '__for_each_thread'259 - '__for_each_thread'
247 - 'for_each_thread'260 - 'for_each_thread'
248 - 'for_each_zone'261 - 'for_each_zone'
@@ -252,6 +265,8 @@ ForEachMacros: · 3 unmodified lines
252 - 'fwnode_for_each_child_node'265 - 'fwnode_for_each_child_node'
253 - 'fwnode_graph_for_each_endpoint'266 - 'fwnode_graph_for_each_endpoint'
254 - 'gadget_for_each_ep'267 - 'gadget_for_each_ep'
268 - 'genradix_for_each'
269 - 'genradix_for_each_from'
255 - 'hash_for_each'270 - 'hash_for_each'
256 - 'hash_for_each_possible'271 - 'hash_for_each_possible'
257 - 'hash_for_each_possible_rcu'272 - 'hash_for_each_possible_rcu'
@@ -293,7 +308,11 @@ ForEachMacros: · 35 unmodified lines
293 - 'key_for_each'308 - 'key_for_each'
294 - 'key_for_each_safe'309 - 'key_for_each_safe'
295 - 'klp_for_each_func'310 - 'klp_for_each_func'
311 - 'klp_for_each_func_safe'
312 - 'klp_for_each_func_static'
296 - 'klp_for_each_object'313 - 'klp_for_each_object'
314 - 'klp_for_each_object_safe'
315 - 'klp_for_each_object_static'
297 - 'kvm_for_each_memslot'316 - 'kvm_for_each_memslot'
298 - 'kvm_for_each_vcpu'317 - 'kvm_for_each_vcpu'
299 - 'list_for_each'318 - 'list_for_each'
@@ -324,6 +343,8 @@ ForEachMacros: · 24 unmodified lines
324 - 'media_device_for_each_intf'343 - 'media_device_for_each_intf'
325 - 'media_device_for_each_link'344 - 'media_device_for_each_link'
326 - 'media_device_for_each_pad'345 - 'media_device_for_each_pad'
346 - 'mp_bvec_for_each_page'
347 - 'mp_bvec_for_each_segment'
327 - 'nanddev_io_for_each_page'348 - 'nanddev_io_for_each_page'
328 - 'netdev_for_each_lower_dev'349 - 'netdev_for_each_lower_dev'
329 - 'netdev_for_each_lower_private'350 - 'netdev_for_each_lower_private'
@@ -375,6 +396,7 @@ ForEachMacros: · 45 unmodified lines
375 - 'rht_for_each_rcu'396 - 'rht_for_each_rcu'
376 - 'rht_for_each_rcu_continue'397 - 'rht_for_each_rcu_continue'
377 - '__rq_for_each_bio'398 - '__rq_for_each_bio'
399 - 'rq_for_each_bvec'
378 - 'rq_for_each_segment'400 - 'rq_for_each_segment'
379 - 'scsi_for_each_prot_sg'401 - 'scsi_for_each_prot_sg'
380 - 'scsi_for_each_sg'402 - 'scsi_for_each_sg'
@@ -410,6 +432,8 @@ ForEachMacros: · 29 unmodified lines
410 - 'v4l2_m2m_for_each_src_buf_safe'432 - 'v4l2_m2m_for_each_src_buf_safe'
411 - 'virtio_device_for_each_vq'433 - 'virtio_device_for_each_vq'
412 - 'xa_for_each'434 - 'xa_for_each'
435 - 'xa_for_each_marked'
436 - 'xa_for_each_start'
413 - 'xas_for_each'437 - 'xas_for_each'
414 - 'xas_for_each_conflict'438 - 'xas_for_each_conflict'
415 - 'xas_for_each_marked'439 - 'xas_for_each_marked'
.mailmap+2−0
@@ -156,6 +156,8 @@ Morten Welinder <welinder@darter.rentec.com> · 155 unmodified lines
156Morten Welinder <welinder@troll.com>156Morten Welinder <welinder@troll.com>
157Mythri P K <mythripk@ti.com>157Mythri P K <mythripk@ti.com>
158Nguyen Anh Quynh <aquynh@gmail.com>158Nguyen Anh Quynh <aquynh@gmail.com>
159Nicolas Pitre <nico@fluxnic.net> <nicolas.pitre@linaro.org>
160Nicolas Pitre <nico@fluxnic.net> <nico@linaro.org>
159Paolo 'Blaisorblade' Giarrusso <blaisorblade@yahoo.it>161Paolo 'Blaisorblade' Giarrusso <blaisorblade@yahoo.it>
160Patrick Mochel <mochel@digitalimplant.org>162Patrick Mochel <mochel@digitalimplant.org>
161Paul Burton <paul.burton@mips.com> <paul.burton@imgtec.com>163Paul Burton <paul.burton@mips.com> <paul.burton@imgtec.com>
Documentation/accounting/psi.txt+6−6
@@ -56,12 +56,12 @@ situation from a state where some tasks are stalled but the CPU is · 55 unmodified lines
56still doing productive work. As such, time spent in this subset of the56still doing productive work. As such, time spent in this subset of the
57stall state is tracked separately and exported in the "full" averages.57stall state is tracked separately and exported in the "full" averages.
58 58
59The ratios are tracked as recent trends over ten, sixty, and three59The ratios (in %) are tracked as recent trends over ten, sixty, and
60hundred second windows, which gives insight into short term events as60three hundred second windows, which gives insight into short term events
61well as medium and long term trends. The total absolute stall time is61as well as medium and long term trends. The total absolute stall time
62tracked and exported as well, to allow detection of latency spikes62(in us) is tracked and exported as well, to allow detection of latency
63which wouldn't necessarily make a dent in the time averages, or to63spikes which wouldn't necessarily make a dent in the time averages,
64average trends over custom time frames.64or to average trends over custom time frames.
65 65
66Cgroup2 interface66Cgroup2 interface
67=================67=================
Documentation/bpf/btf.rst+4−4
@@ -148,16 +148,16 @@ The ``btf_type.size * 8`` must be equal to or greater than ``BTF_INT_BITS()`` · 147 unmodified lines
148for the type. The maximum value of ``BTF_INT_BITS()`` is 128.148for the type. The maximum value of ``BTF_INT_BITS()`` is 128.
149 149
150The ``BTF_INT_OFFSET()`` specifies the starting bit offset to calculate values150The ``BTF_INT_OFFSET()`` specifies the starting bit offset to calculate values
151for this int. For example, a bitfield struct member has: * btf member bit151for this int. For example, a bitfield struct member has:
152offset 100 from the start of the structure, * btf member pointing to an int152 * btf member bit offset 100 from the start of the structure,
153type, * the int type has ``BTF_INT_OFFSET() = 2`` and ``BTF_INT_BITS() = 4``153 * btf member pointing to an int type,
154 * the int type has ``BTF_INT_OFFSET() = 2`` and ``BTF_INT_BITS() = 4``
154 155
155Then in the struct memory layout, this member will occupy ``4`` bits starting156Then in the struct memory layout, this member will occupy ``4`` bits starting
156from bits ``100 + 2 = 102``.157from bits ``100 + 2 = 102``.
157 158
158Alternatively, the bitfield struct member can be the following to access the159Alternatively, the bitfield struct member can be the following to access the
159same bits as the above:160same bits as the above:
160
161 * btf member bit offset 102,161 * btf member bit offset 102,
162 * btf member pointing to an int type,162 * btf member pointing to an int type,
163 * the int type has ``BTF_INT_OFFSET() = 0`` and ``BTF_INT_BITS() = 4``163 * the int type has ``BTF_INT_OFFSET() = 0`` and ``BTF_INT_BITS() = 4``
Documentation/devicetree/bindings/arm/cpus.yaml+1−1
@@ -228,7 +228,7 @@ patternProperties: · 227 unmodified lines
228 - renesas,r9a06g032-smp228 - renesas,r9a06g032-smp
229 - rockchip,rk3036-smp229 - rockchip,rk3036-smp
230 - rockchip,rk3066-smp230 - rockchip,rk3066-smp
231 - socionext,milbeaut-m10v-smp231 - socionext,milbeaut-m10v-smp
232 - ste,dbx500-smp232 - ste,dbx500-smp
233 233
234 cpu-release-addr:234 cpu-release-addr:
Documentation/devicetree/bindings/hwmon/adc128d818.txt+2−2
@@ -26,7 +26,7 @@ Required node properties: · 25 unmodified lines
26 26
27Optional node properties:27Optional node properties:
28 28
29 - ti,mode: Operation mode (see above).29 - ti,mode: Operation mode (u8) (see above).
30 30
31 31
32Example (operation mode 2):32Example (operation mode 2):
@@ -34,5 +34,5 @@ Example (operation mode 2): · 1 unmodified line
34 adc128d818@1d {34 adc128d818@1d {
35 compatible = "ti,adc128d818";35 compatible = "ti,adc128d818";
36 reg = <0x1d>;36 reg = <0x1d>;
37 ti,mode = <2>;37 ti,mode = /bits/ 8 <2>;
38 };38 };
Documentation/lzo.txt+5−3
@@ -102,9 +102,11 @@ Byte sequences · 101 unmodified lines
102 dictionary which is empty, and that it will always be102 dictionary which is empty, and that it will always be
103 invalid at this place.103 invalid at this place.
104 104
105 17 : bitstream version. If the first byte is 17, the next byte105 17 : bitstream version. If the first byte is 17, and compressed
106 gives the bitstream version (version 1 only). If the first byte106 stream length is at least 5 bytes (length of shortest possible
107 is not 17, the bitstream version is 0.107 versioned bitstream), the next byte gives the bitstream version
108 (version 1 only).
109 Otherwise, the bitstream version is 0.
108 110
109 18..21 : copy 0..3 literals111 18..21 : copy 0..3 literals
110 state = (byte - 17) = 0..3 [ copy <state> literals ]112 state = (byte - 17) = 0..3 [ copy <state> literals ]
Documentation/media/uapi/rc/rc-tables.rst+2−2
@@ -623,7 +623,7 @@ the remote via /dev/input/event devices. · 622 unmodified lines
623 623
624 - .. row 78624 - .. row 78
625 625
626 - ``KEY_SCREEN``626 - ``KEY_ASPECT_RATIO``
627 627
628 - Select screen aspect ratio628 - Select screen aspect ratio
629 629
@@ -631,7 +631,7 @@ the remote via /dev/input/event devices. · 1 unmodified line
631 631
632 - .. row 79632 - .. row 79
633 633
634 - ``KEY_ZOOM``634 - ``KEY_FULL_SCREEN``
635 635
636 - Put device into zoom/full screen mode636 - Put device into zoom/full screen mode
637 637
Documentation/networking/bpf_flow_dissector.rst+126−0
@@ -0,0 +1,126 @@
1.. SPDX-License-Identifier: GPL-2.0
2
3==================
4BPF Flow Dissector
5==================
6
7Overview
8========
9
10Flow dissector is a routine that parses metadata out of the packets. It's
11used in the various places in the networking subsystem (RFS, flow hash, etc).
12
13BPF flow dissector is an attempt to reimplement C-based flow dissector logic
14in BPF to gain all the benefits of BPF verifier (namely, limits on the
15number of instructions and tail calls).
16
17API
18===
19
20BPF flow dissector programs operate on an ``__sk_buff``. However, only the
21limited set of fields is allowed: ``data``, ``data_end`` and ``flow_keys``.
22``flow_keys`` is ``struct bpf_flow_keys`` and contains flow dissector input
23and output arguments.
24
25The inputs are:
26 * ``nhoff`` - initial offset of the networking header
27 * ``thoff`` - initial offset of the transport header, initialized to nhoff
28 * ``n_proto`` - L3 protocol type, parsed out of L2 header
29
30Flow dissector BPF program should fill out the rest of the ``struct
31bpf_flow_keys`` fields. Input arguments ``nhoff/thoff/n_proto`` should be
32also adjusted accordingly.
33
34The return code of the BPF program is either BPF_OK to indicate successful
35dissection, or BPF_DROP to indicate parsing error.
36
37__sk_buff->data
38===============
39
40In the VLAN-less case, this is what the initial state of the BPF flow
41dissector looks like::
42
43 +------+------+------------+-----------+
44 | DMAC | SMAC | ETHER_TYPE | L3_HEADER |
45 +------+------+------------+-----------+
46 ^
47 |
48 +-- flow dissector starts here
49
50
51.. code:: c
52
53 skb->data + flow_keys->nhoff point to the first byte of L3_HEADER
54 flow_keys->thoff = nhoff
55 flow_keys->n_proto = ETHER_TYPE
56
57In case of VLAN, flow dissector can be called with the two different states.
58
59Pre-VLAN parsing::
60
61 +------+------+------+-----+-----------+-----------+
62 | DMAC | SMAC | TPID | TCI |ETHER_TYPE | L3_HEADER |
63 +------+------+------+-----+-----------+-----------+
64 ^
65 |
66 +-- flow dissector starts here
67
68.. code:: c
69
70 skb->data + flow_keys->nhoff point the to first byte of TCI
71 flow_keys->thoff = nhoff
72 flow_keys->n_proto = TPID
73
74Please note that TPID can be 802.1AD and, hence, BPF program would
75have to parse VLAN information twice for double tagged packets.
76
77
78Post-VLAN parsing::
79
80 +------+------+------+-----+-----------+-----------+
81 | DMAC | SMAC | TPID | TCI |ETHER_TYPE | L3_HEADER |
82 +------+------+------+-----+-----------+-----------+
83 ^
84 |
85 +-- flow dissector starts here
86
87.. code:: c
88
89 skb->data + flow_keys->nhoff point the to first byte of L3_HEADER
90 flow_keys->thoff = nhoff
91 flow_keys->n_proto = ETHER_TYPE
92
93In this case VLAN information has been processed before the flow dissector
94and BPF flow dissector is not required to handle it.
95
96
97The takeaway here is as follows: BPF flow dissector program can be called with
98the optional VLAN header and should gracefully handle both cases: when single
99or double VLAN is present and when it is not present. The same program
100can be called for both cases and would have to be written carefully to
101handle both cases.
102
103
104Reference Implementation
105========================
106
107See ``tools/testing/selftests/bpf/progs/bpf_flow.c`` for the reference
108implementation and ``tools/testing/selftests/bpf/flow_dissector_load.[hc]``
109for the loader. bpftool can be used to load BPF flow dissector program as well.
110
111The reference implementation is organized as follows:
112 * ``jmp_table`` map that contains sub-programs for each supported L3 protocol
113 * ``_dissect`` routine - entry point; it does input ``n_proto`` parsing and
114 does ``bpf_tail_call`` to the appropriate L3 handler
115
116Since BPF at this point doesn't support looping (or any jumping back),
117jmp_table is used instead to handle multiple levels of encapsulation (and
118IPv6 options).
119
120
121Current Limitations
122===================
123BPF flow dissector doesn't support exporting all the metadata that in-kernel
124C-based implementation can export. Notable example is single VLAN (802.1Q)
125and double VLAN (802.1AD) tags. Please refer to the ``struct bpf_flow_keys``
126for a set of information that's currently can be exported from the BPF context.
Documentation/networking/index.rst+1−0
@@ -9,6 +9,7 @@ Contents: · 8 unmodified lines
9 netdev-FAQ9 netdev-FAQ
10 af_xdp10 af_xdp
11 batman-adv11 batman-adv
12 bpf_flow_dissector
12 can13 can
13 can_ucan_protocol14 can_ucan_protocol
14 device_drivers/freescale/dpaa2/index15 device_drivers/freescale/dpaa2/index
Documentation/networking/rxrpc.txt+9−7
@@ -1009,16 +1009,18 @@ The kernel interface functions are as follows: · 1008 unmodified lines
1009 1009
1010 (*) Check call still alive.1010 (*) Check call still alive.
1011 1011
1012 u32 rxrpc_kernel_check_life(struct socket *sock,1012 bool rxrpc_kernel_check_life(struct socket *sock,
1013 struct rxrpc_call *call);1013 struct rxrpc_call *call,
1014 u32 *_life);
1014 void rxrpc_kernel_probe_life(struct socket *sock,1015 void rxrpc_kernel_probe_life(struct socket *sock,
1015 struct rxrpc_call *call);1016 struct rxrpc_call *call);
1016 1017
1017 The first function returns a number that is updated when ACKs are received1018 The first function passes back in *_life a number that is updated when
1018 from the peer (notably including PING RESPONSE ACKs which we can elicit by1019 ACKs are received from the peer (notably including PING RESPONSE ACKs
1019 sending PING ACKs to see if the call still exists on the server). The1020 which we can elicit by sending PING ACKs to see if the call still exists
1020 caller should compare the numbers of two calls to see if the call is still1021 on the server). The caller should compare the numbers of two calls to see
1021 alive after waiting for a suitable interval.1022 if the call is still alive after waiting for a suitable interval. It also
1023 returns true as long as the call hasn't yet reached the completed state.
1022 1024
1023 This allows the caller to work out if the server is still contactable and1025 This allows the caller to work out if the server is still contactable and
1024 if the call is still alive on the server while waiting for the server to1026 if the call is still alive on the server while waiting for the server to
MAINTAINERS+22−9
@@ -1893,14 +1893,15 @@ T: git git://git.kernel.org/pub/scm/linux/kernel/git/linusw/linux-nomadik.git · 1892 unmodified lines
1893ARM/NUVOTON NPCM ARCHITECTURE1893ARM/NUVOTON NPCM ARCHITECTURE
1894M: Avi Fishman <avifishman70@gmail.com>1894M: Avi Fishman <avifishman70@gmail.com>
1895M: Tomer Maimon <tmaimon77@gmail.com>1895M: Tomer Maimon <tmaimon77@gmail.com>
1896M: Tali Perry <tali.perry1@gmail.com>
1896R: Patrick Venture <venture@google.com>1897R: Patrick Venture <venture@google.com>
1897R: Nancy Yuen <yuenn@google.com>1898R: Nancy Yuen <yuenn@google.com>
1898R: Brendan Higgins <brendanhiggins@google.com>1899R: Benjamin Fair <benjaminfair@google.com>
1899L: openbmc@lists.ozlabs.org (moderated for non-subscribers)1900L: openbmc@lists.ozlabs.org (moderated for non-subscribers)
1900S: Supported1901S: Supported
1901F: arch/arm/mach-npcm/1902F: arch/arm/mach-npcm/
1902F: arch/arm/boot/dts/nuvoton-npcm*1903F: arch/arm/boot/dts/nuvoton-npcm*
1903F: include/dt-bindings/clock/nuvoton,npcm7xx-clks.h1904F: include/dt-bindings/clock/nuvoton,npcm7xx-clock.h
1904F: drivers/*/*npcm*1905F: drivers/*/*npcm*
1905F: Documentation/devicetree/bindings/*/*npcm*1906F: Documentation/devicetree/bindings/*/*npcm*
1906F: Documentation/devicetree/bindings/*/*/*npcm*1907F: Documentation/devicetree/bindings/*/*/*npcm*
@@ -4129,7 +4130,7 @@ F: drivers/cpuidle/* · 2222 unmodified lines
4129F: include/linux/cpuidle.h4130F: include/linux/cpuidle.h
4130 4131
4131CRAMFS FILESYSTEM4132CRAMFS FILESYSTEM
4132M: Nicolas Pitre <nico@linaro.org>4133M: Nicolas Pitre <nico@fluxnic.net>
4133S: Maintained4134S: Maintained
4134F: Documentation/filesystems/cramfs.txt4135F: Documentation/filesystems/cramfs.txt
4135F: fs/cramfs/4136F: fs/cramfs/
@@ -5833,7 +5834,7 @@ L: netdev@vger.kernel.org · 1697 unmodified lines
5833S: Maintained5834S: Maintained
5834F: Documentation/ABI/testing/sysfs-bus-mdio5835F: Documentation/ABI/testing/sysfs-bus-mdio
5835F: Documentation/devicetree/bindings/net/mdio*5836F: Documentation/devicetree/bindings/net/mdio*
5836F: Documentation/networking/phy.txt5837F: Documentation/networking/phy.rst
5837F: drivers/net/phy/5838F: drivers/net/phy/
5838F: drivers/of/of_mdio.c5839F: drivers/of/of_mdio.c
5839F: drivers/of/of_net.c5840F: drivers/of/of_net.c
@@ -7332,7 +7333,6 @@ F: Documentation/devicetree/bindings/i3c/ · 1492 unmodified lines
7332F: Documentation/driver-api/i3c7333F: Documentation/driver-api/i3c
7333F: drivers/i3c/7334F: drivers/i3c/
7334F: include/linux/i3c/7335F: include/linux/i3c/
7335F: include/dt-bindings/i3c/
7336 7336
7337I3C DRIVER FOR SYNOPSYS DESIGNWARE7337I3C DRIVER FOR SYNOPSYS DESIGNWARE
7338M: Vitor Soares <vitor.soares@synopsys.com>7338M: Vitor Soares <vitor.soares@synopsys.com>
@@ -7515,7 +7515,7 @@ F: include/net/mac802154.h · 176 unmodified lines
7515F: include/net/af_ieee802154.h7515F: include/net/af_ieee802154.h
7516F: include/net/cfg802154.h7516F: include/net/cfg802154.h
7517F: include/net/ieee802154_netdev.h7517F: include/net/ieee802154_netdev.h
7518F: Documentation/networking/ieee802154.txt7518F: Documentation/networking/ieee802154.rst
7519 7519
7520IFE PROTOCOL7520IFE PROTOCOL
7521M: Yotam Gigi <yotam.gi@gmail.com>7521M: Yotam Gigi <yotam.gi@gmail.com>
@@ -10144,7 +10144,7 @@ F: drivers/spi/spi-at91-usart.c · 2622 unmodified lines
10144F: Documentation/devicetree/bindings/mfd/atmel-usart.txt10144F: Documentation/devicetree/bindings/mfd/atmel-usart.txt
10145 10145
10146MICROCHIP KSZ SERIES ETHERNET SWITCH DRIVER10146MICROCHIP KSZ SERIES ETHERNET SWITCH DRIVER
10147M: Woojung Huh <Woojung.Huh@microchip.com>10147M: Woojung Huh <woojung.huh@microchip.com>
10148M: Microchip Linux Driver Support <UNGLinuxDriver@microchip.com>10148M: Microchip Linux Driver Support <UNGLinuxDriver@microchip.com>
10149L: netdev@vger.kernel.org10149L: netdev@vger.kernel.org
10150S: Maintained10150S: Maintained
@@ -13981,7 +13981,7 @@ F: drivers/media/rc/serial_ir.c · 3830 unmodified lines
13981SFC NETWORK DRIVER13981SFC NETWORK DRIVER
13982M: Solarflare linux maintainers <linux-net-drivers@solarflare.com>13982M: Solarflare linux maintainers <linux-net-drivers@solarflare.com>
13983M: Edward Cree <ecree@solarflare.com>13983M: Edward Cree <ecree@solarflare.com>
13984M: Bert Kenward <bkenward@solarflare.com>13984M: Martin Habets <mhabets@solarflare.com>
13985L: netdev@vger.kernel.org13985L: netdev@vger.kernel.org
13986S: Supported13986S: Supported
13987F: drivers/net/ethernet/sfc/13987F: drivers/net/ethernet/sfc/
@@ -16508,7 +16508,7 @@ F: drivers/char/virtio_console.c · 2520 unmodified lines
16508F: include/linux/virtio_console.h16508F: include/linux/virtio_console.h
16509F: include/uapi/linux/virtio_console.h16509F: include/uapi/linux/virtio_console.h
16510 16510
16511VIRTIO CORE, NET AND BLOCK DRIVERS16511VIRTIO CORE AND NET DRIVERS
16512M: "Michael S. Tsirkin" <mst@redhat.com>16512M: "Michael S. Tsirkin" <mst@redhat.com>
16513M: Jason Wang <jasowang@redhat.com>16513M: Jason Wang <jasowang@redhat.com>
16514L: virtualization@lists.linux-foundation.org16514L: virtualization@lists.linux-foundation.org
@@ -16523,6 +16523,19 @@ F: include/uapi/linux/virtio_*.h · 8 unmodified lines
16523F: drivers/crypto/virtio/16523F: drivers/crypto/virtio/
16524F: mm/balloon_compaction.c16524F: mm/balloon_compaction.c
16525 16525
16526VIRTIO BLOCK AND SCSI DRIVERS
16527M: "Michael S. Tsirkin" <mst@redhat.com>
16528M: Jason Wang <jasowang@redhat.com>
16529R: Paolo Bonzini <pbonzini@redhat.com>
16530R: Stefan Hajnoczi <stefanha@redhat.com>
16531L: virtualization@lists.linux-foundation.org
16532S: Maintained
16533F: drivers/block/virtio_blk.c
16534F: drivers/scsi/virtio_scsi.c
16535F: include/uapi/linux/virtio_blk.h
16536F: include/uapi/linux/virtio_scsi.h
16537F: drivers/vhost/scsi.c
16538
16526VIRTIO CRYPTO DRIVER16539VIRTIO CRYPTO DRIVER
16527M: Gonglei <arei.gonglei@huawei.com>16540M: Gonglei <arei.gonglei@huawei.com>
16528L: virtualization@lists.linux-foundation.org16541L: virtualization@lists.linux-foundation.org
Makefile+1−1
@@ -2,7 +2,7 @@ · 1 unmodified line
2VERSION = 52VERSION = 5
3PATCHLEVEL = 13PATCHLEVEL = 1
4SUBLEVEL = 04SUBLEVEL = 0
5EXTRAVERSION = -rc35EXTRAVERSION = -rc6
6NAME = Shy Crocodile6NAME = Shy Crocodile
7 7
8# *DOCUMENTATION*8# *DOCUMENTATION*
arch/arc/include/asm/syscall.h+3−4
@@ -55,12 +55,11 @@ syscall_set_return_value(struct task_struct *task, struct pt_regs *regs, · 54 unmodified lines
55 */55 */
56static inline void56static inline void
57syscall_get_arguments(struct task_struct *task, struct pt_regs *regs,57syscall_get_arguments(struct task_struct *task, struct pt_regs *regs,
58 unsigned int i, unsigned int n, unsigned long *args)58 unsigned long *args)
59{59{
60 unsigned long *inside_ptregs = &(regs->r0);60 unsigned long *inside_ptregs = &(regs->r0);
61 inside_ptregs -= i;61 unsigned int n = 6;
62 62 unsigned int i = 0;
63 BUG_ON((i + n) > 6);
64 63
65 while (n--) {64 while (n--) {
66 args[i++] = (*inside_ptregs);65 args[i++] = (*inside_ptregs);
arch/arm/boot/dts/am335x-evm.dts+22−4
@@ -57,6 +57,24 @@ · 56 unmodified lines
57 enable-active-high;57 enable-active-high;
58 };58 };
59 59
60 /* TPS79501 */
61 v1_8d_reg: fixedregulator-v1_8d {
62 compatible = "regulator-fixed";
63 regulator-name = "v1_8d";
64 vin-supply = <&vbat>;
65 regulator-min-microvolt = <1800000>;
66 regulator-max-microvolt = <1800000>;
67 };
68
69 /* TPS79501 */
70 v3_3d_reg: fixedregulator-v3_3d {
71 compatible = "regulator-fixed";
72 regulator-name = "v3_3d";
73 vin-supply = <&vbat>;
74 regulator-min-microvolt = <3300000>;
75 regulator-max-microvolt = <3300000>;
76 };
77
60 matrix_keypad: matrix_keypad0 {78 matrix_keypad: matrix_keypad0 {
61 compatible = "gpio-matrix-keypad";79 compatible = "gpio-matrix-keypad";
62 debounce-delay-ms = <5>;80 debounce-delay-ms = <5>;
@@ -499,10 +517,10 @@ · 436 unmodified lines
499 status = "okay";517 status = "okay";
500 518
501 /* Regulators */519 /* Regulators */
502 AVDD-supply = <&vaux2_reg>;520 AVDD-supply = <&v3_3d_reg>;
503 IOVDD-supply = <&vaux2_reg>;521 IOVDD-supply = <&v3_3d_reg>;
504 DRVDD-supply = <&vaux2_reg>;522 DRVDD-supply = <&v3_3d_reg>;
505 DVDD-supply = <&vbat>;523 DVDD-supply = <&v1_8d_reg>;
506 };524 };
507};525};
508 526
arch/arm/boot/dts/am335x-evmsk.dts+22−4
@@ -73,6 +73,24 @@ · 72 unmodified lines
73 enable-active-high;73 enable-active-high;
74 };74 };
75 75
76 /* TPS79518 */
77 v1_8d_reg: fixedregulator-v1_8d {
78 compatible = "regulator-fixed";
79 regulator-name = "v1_8d";
80 vin-supply = <&vbat>;
81 regulator-min-microvolt = <1800000>;
82 regulator-max-microvolt = <1800000>;
83 };
84
85 /* TPS78633 */
86 v3_3d_reg: fixedregulator-v3_3d {
87 compatible = "regulator-fixed";
88 regulator-name = "v3_3d";
89 vin-supply = <&vbat>;
90 regulator-min-microvolt = <3300000>;
91 regulator-max-microvolt = <3300000>;
92 };
93
76 leds {94 leds {
77 pinctrl-names = "default";95 pinctrl-names = "default";
78 pinctrl-0 = <&user_leds_s0>;96 pinctrl-0 = <&user_leds_s0>;
@@ -501,10 +519,10 @@ · 422 unmodified lines
501 status = "okay";519 status = "okay";
502 520
503 /* Regulators */521 /* Regulators */
504 AVDD-supply = <&vaux2_reg>;522 AVDD-supply = <&v3_3d_reg>;
505 IOVDD-supply = <&vaux2_reg>;523 IOVDD-supply = <&v3_3d_reg>;
506 DRVDD-supply = <&vaux2_reg>;524 DRVDD-supply = <&v3_3d_reg>;
507 DVDD-supply = <&vbat>;525 DVDD-supply = <&v1_8d_reg>;
508 };526 };
509};527};
510 528
arch/arm/boot/dts/am33xx-l4.dtsi+2−2
@@ -1762,7 +1762,7 @@ · 1761 unmodified lines
1762 reg = <0xcc000 0x4>;1762 reg = <0xcc000 0x4>;
1763 reg-names = "rev";1763 reg-names = "rev";
1764 /* Domains (P, C): per_pwrdm, l4ls_clkdm */1764 /* Domains (P, C): per_pwrdm, l4ls_clkdm */
1765 clocks = <&l4ls_clkctrl AM3_D_CAN0_CLKCTRL 0>;1765 clocks = <&l4ls_clkctrl AM3_L4LS_D_CAN0_CLKCTRL 0>;
1766 clock-names = "fck";1766 clock-names = "fck";
1767 #address-cells = <1>;1767 #address-cells = <1>;
1768 #size-cells = <1>;1768 #size-cells = <1>;
@@ -1785,7 +1785,7 @@ · 16 unmodified lines
1785 reg = <0xd0000 0x4>;1785 reg = <0xd0000 0x4>;
1786 reg-names = "rev";1786 reg-names = "rev";
1787 /* Domains (P, C): per_pwrdm, l4ls_clkdm */1787 /* Domains (P, C): per_pwrdm, l4ls_clkdm */
1788 clocks = <&l4ls_clkctrl AM3_D_CAN1_CLKCTRL 0>;1788 clocks = <&l4ls_clkctrl AM3_L4LS_D_CAN1_CLKCTRL 0>;
1789 clock-names = "fck";1789 clock-names = "fck";
1790 #address-cells = <1>;1790 #address-cells = <1>;
1791 #size-cells = <1>;1791 #size-cells = <1>;
arch/arm/boot/dts/rk3288-tinker.dtsi+2−1
@@ -254,6 +254,7 @@ · 253 unmodified lines
254 };254 };
255 255
256 vccio_sd: LDO_REG5 {256 vccio_sd: LDO_REG5 {
257 regulator-boot-on;
257 regulator-min-microvolt = <1800000>;258 regulator-min-microvolt = <1800000>;
258 regulator-max-microvolt = <3300000>;259 regulator-max-microvolt = <3300000>;
259 regulator-name = "vccio_sd";260 regulator-name = "vccio_sd";
@@ -430,7 +431,7 @@ · 170 unmodified lines
430 bus-width = <4>;431 bus-width = <4>;
431 cap-mmc-highspeed;432 cap-mmc-highspeed;
432 cap-sd-highspeed;433 cap-sd-highspeed;
433 card-detect-delay = <200>;434 broken-cd;
434 disable-wp; /* wp not hooked up */435 disable-wp; /* wp not hooked up */
435 pinctrl-names = "default";436 pinctrl-names = "default";
436 pinctrl-0 = <&sdmmc_clk &sdmmc_cmd &sdmmc_cd &sdmmc_bus4>;437 pinctrl-0 = <&sdmmc_clk &sdmmc_cmd &sdmmc_cd &sdmmc_bus4>;
arch/arm/boot/dts/rk3288-veyron.dtsi+0−2
@@ -25,8 +25,6 @@ · 24 unmodified lines
25 25
26 gpio_keys: gpio-keys {26 gpio_keys: gpio-keys {
27 compatible = "gpio-keys";27 compatible = "gpio-keys";
28 #address-cells = <1>;
29 #size-cells = <0>;
30 28
31 pinctrl-names = "default";29 pinctrl-names = "default";
32 pinctrl-0 = <&pwr_key_l>;30 pinctrl-0 = <&pwr_key_l>;
arch/arm/boot/dts/rk3288.dtsi+9−11
@@ -70,7 +70,7 @@ · 69 unmodified lines
70 compatible = "arm,cortex-a12";70 compatible = "arm,cortex-a12";
71 reg = <0x501>;71 reg = <0x501>;
72 resets = <&cru SRST_CORE1>;72 resets = <&cru SRST_CORE1>;
73 operating-points = <&cpu_opp_table>;73 operating-points-v2 = <&cpu_opp_table>;
74 #cooling-cells = <2>; /* min followed by max */74 #cooling-cells = <2>; /* min followed by max */
75 clock-latency = <40000>;75 clock-latency = <40000>;
76 clocks = <&cru ARMCLK>;76 clocks = <&cru ARMCLK>;
@@ -80,7 +80,7 @@ · 3 unmodified lines
80 compatible = "arm,cortex-a12";80 compatible = "arm,cortex-a12";
81 reg = <0x502>;81 reg = <0x502>;
82 resets = <&cru SRST_CORE2>;82 resets = <&cru SRST_CORE2>;
83 operating-points = <&cpu_opp_table>;83 operating-points-v2 = <&cpu_opp_table>;
84 #cooling-cells = <2>; /* min followed by max */84 #cooling-cells = <2>; /* min followed by max */
85 clock-latency = <40000>;85 clock-latency = <40000>;
86 clocks = <&cru ARMCLK>;86 clocks = <&cru ARMCLK>;
@@ -90,7 +90,7 @@ · 3 unmodified lines
90 compatible = "arm,cortex-a12";90 compatible = "arm,cortex-a12";
91 reg = <0x503>;91 reg = <0x503>;
92 resets = <&cru SRST_CORE3>;92 resets = <&cru SRST_CORE3>;
93 operating-points = <&cpu_opp_table>;93 operating-points-v2 = <&cpu_opp_table>;
94 #cooling-cells = <2>; /* min followed by max */94 #cooling-cells = <2>; /* min followed by max */
95 clock-latency = <40000>;95 clock-latency = <40000>;
96 clocks = <&cru ARMCLK>;96 clocks = <&cru ARMCLK>;
@@ -1119,8 +1119,6 @@ · 1022 unmodified lines
1119 clock-names = "ref", "pclk";1119 clock-names = "ref", "pclk";
1120 power-domains = <&power RK3288_PD_VIO>;1120 power-domains = <&power RK3288_PD_VIO>;
1121 rockchip,grf = <&grf>;1121 rockchip,grf = <&grf>;
1122 #address-cells = <1>;
1123 #size-cells = <0>;
1124 status = "disabled";1122 status = "disabled";
1125 1123
1126 ports {1124 ports {
@@ -1282,27 +1280,27 @@ · 155 unmodified lines
1282 gpu_opp_table: gpu-opp-table {1280 gpu_opp_table: gpu-opp-table {
1283 compatible = "operating-points-v2";1281 compatible = "operating-points-v2";
1284 1282
1285 opp@100000000 {1283 opp-100000000 {
1286 opp-hz = /bits/ 64 <100000000>;1284 opp-hz = /bits/ 64 <100000000>;
1287 opp-microvolt = <950000>;1285 opp-microvolt = <950000>;
1288 };1286 };
1289 opp@200000000 {1287 opp-200000000 {
1290 opp-hz = /bits/ 64 <200000000>;1288 opp-hz = /bits/ 64 <200000000>;
1291 opp-microvolt = <950000>;1289 opp-microvolt = <950000>;
1292 };1290 };
1293 opp@300000000 {1291 opp-300000000 {
1294 opp-hz = /bits/ 64 <300000000>;1292 opp-hz = /bits/ 64 <300000000>;
1295 opp-microvolt = <1000000>;1293 opp-microvolt = <1000000>;
1296 };1294 };
1297 opp@400000000 {1295 opp-400000000 {
1298 opp-hz = /bits/ 64 <400000000>;1296 opp-hz = /bits/ 64 <400000000>;
1299 opp-microvolt = <1100000>;1297 opp-microvolt = <1100000>;
1300 };1298 };
1301 opp@500000000 {1299 opp-500000000 {
1302 opp-hz = /bits/ 64 <500000000>;1300 opp-hz = /bits/ 64 <500000000>;
1303 opp-microvolt = <1200000>;1301 opp-microvolt = <1200000>;
1304 };1302 };
1305 opp@600000000 {1303 opp-600000000 {
1306 opp-hz = /bits/ 64 <600000000>;1304 opp-hz = /bits/ 64 <600000000>;
1307 opp-microvolt = <1250000>;1305 opp-microvolt = <1250000>;
1308 };1306 };
arch/arm/boot/dts/sama5d2-pinfunc.h+1−1
@@ -518,7 +518,7 @@ · 517 unmodified lines
518#define PIN_PC9__GPIO PINMUX_PIN(PIN_PC9, 0, 0)518#define PIN_PC9__GPIO PINMUX_PIN(PIN_PC9, 0, 0)
519#define PIN_PC9__FIQ PINMUX_PIN(PIN_PC9, 1, 3)519#define PIN_PC9__FIQ PINMUX_PIN(PIN_PC9, 1, 3)
520#define PIN_PC9__GTSUCOMP PINMUX_PIN(PIN_PC9, 2, 1)520#define PIN_PC9__GTSUCOMP PINMUX_PIN(PIN_PC9, 2, 1)
521#define PIN_PC9__ISC_D0 PINMUX_PIN(PIN_PC9, 2, 1)521#define PIN_PC9__ISC_D0 PINMUX_PIN(PIN_PC9, 3, 1)
522#define PIN_PC9__TIOA4 PINMUX_PIN(PIN_PC9, 4, 2)522#define PIN_PC9__TIOA4 PINMUX_PIN(PIN_PC9, 4, 2)
523#define PIN_PC10 74523#define PIN_PC10 74
524#define PIN_PC10__GPIO PINMUX_PIN(PIN_PC10, 0, 0)524#define PIN_PC10__GPIO PINMUX_PIN(PIN_PC10, 0, 0)
arch/arm/boot/dts/ste-nomadik-nhk15.dts+4−5
@@ -213,13 +213,12 @@ · 212 unmodified lines
213 gpio-sck = <&gpio0 5 GPIO_ACTIVE_HIGH>;213 gpio-sck = <&gpio0 5 GPIO_ACTIVE_HIGH>;
214 gpio-mosi = <&gpio0 4 GPIO_ACTIVE_HIGH>;214 gpio-mosi = <&gpio0 4 GPIO_ACTIVE_HIGH>;
215 /*215 /*
216 * This chipselect is active high. Just setting the flags216 * It's not actually active high, but the frameworks assume
217 * to GPIO_ACTIVE_HIGH is not enough for the SPI DT bindings,217 * the polarity of the passed-in GPIO is "normal" (active
218 * it will be ignored, only the special "spi-cs-high" flag218 * high) then actively drives the line low to select the
219 * really counts.219 * chip.
220 */220 */
221 cs-gpios = <&gpio0 6 GPIO_ACTIVE_HIGH>;221 cs-gpios = <&gpio0 6 GPIO_ACTIVE_HIGH>;
222 spi-cs-high;
223 num-chipselects = <1>;222 num-chipselects = <1>;
224 223
225 /*224 /*
arch/arm/include/asm/syscall.h+8−39
@@ -55,53 +55,22 @@ static inline void syscall_set_return_value(struct task_struct *task, · 54 unmodified lines
55 55
56static inline void syscall_get_arguments(struct task_struct *task,56static inline void syscall_get_arguments(struct task_struct *task,
57 struct pt_regs *regs,57 struct pt_regs *regs,
58 unsigned int i, unsigned int n,
59 unsigned long *args)58 unsigned long *args)
60{59{
61 if (n == 0)60 args[0] = regs->ARM_ORIG_r0;
62 return;61 args++;
63 62
64 if (i + n > SYSCALL_MAX_ARGS) {63 memcpy(args, &regs->ARM_r0 + 1, 5 * sizeof(args[0]));
65 unsigned long *args_bad = args + SYSCALL_MAX_ARGS - i;
66 unsigned int n_bad = n + i - SYSCALL_MAX_ARGS;
67 pr_warn("%s called with max args %d, handling only %d\n",
68 __func__, i + n, SYSCALL_MAX_ARGS);
69 memset(args_bad, 0, n_bad * sizeof(args[0]));
70 n = SYSCALL_MAX_ARGS - i;
71 }
72
73 if (i == 0) {
74 args[0] = regs->ARM_ORIG_r0;
75 args++;
76 i++;
77 n--;
78 }
79
80 memcpy(args, &regs->ARM_r0 + i, n * sizeof(args[0]));
81}64}
82 65
83static inline void syscall_set_arguments(struct task_struct *task,66static inline void syscall_set_arguments(struct task_struct *task,
84 struct pt_regs *regs,67 struct pt_regs *regs,
85 unsigned int i, unsigned int n,
86 const unsigned long *args)68 const unsigned long *args)
87{69{
88 if (n == 0)70 regs->ARM_ORIG_r0 = args[0];
89 return;71 args++;
90 72
91 if (i + n > SYSCALL_MAX_ARGS) {73 memcpy(&regs->ARM_r0 + 1, args, 5 * sizeof(args[0]));
92 pr_warn("%s called with max args %d, handling only %d\n",
93 __func__, i + n, SYSCALL_MAX_ARGS);
94 n = SYSCALL_MAX_ARGS - i;
95 }
96
97 if (i == 0) {
98 regs->ARM_ORIG_r0 = args[0];
99 args++;
100 i++;
101 n--;
102 }
103
104 memcpy(&regs->ARM_r0 + i, args, n * sizeof(args[0]));
105}74}
106 75
107static inline int syscall_get_arch(void)76static inline int syscall_get_arch(void)
arch/arm/mach-at91/pm.c+4−2
@@ -591,13 +591,13 @@ static int __init at91_pm_backup_init(void) · 590 unmodified lines
591 591
592 np = of_find_compatible_node(NULL, NULL, "atmel,sama5d2-securam");592 np = of_find_compatible_node(NULL, NULL, "atmel,sama5d2-securam");
593 if (!np)593 if (!np)
594 goto securam_fail;594 goto securam_fail_no_ref_dev;
595 595
596 pdev = of_find_device_by_node(np);596 pdev = of_find_device_by_node(np);
597 of_node_put(np);597 of_node_put(np);
598 if (!pdev) {598 if (!pdev) {
599 pr_warn("%s: failed to find securam device!\n", __func__);599 pr_warn("%s: failed to find securam device!\n", __func__);
600 goto securam_fail;600 goto securam_fail_no_ref_dev;
601 }601 }
602 602
603 sram_pool = gen_pool_get(&pdev->dev, NULL);603 sram_pool = gen_pool_get(&pdev->dev, NULL);
@@ -620,6 +620,8 @@ static int __init at91_pm_backup_init(void) · 16 unmodified lines
620 return 0;620 return 0;
621 621
622securam_fail:622securam_fail:
623 put_device(&pdev->dev);
624securam_fail_no_ref_dev:
623 iounmap(pm_data.sfrbu);625 iounmap(pm_data.sfrbu);
624 pm_data.sfrbu = NULL;626 pm_data.sfrbu = NULL;
625 return ret;627 return ret;
arch/arm/mach-iop13xx/setup.c+4−4
@@ -300,7 +300,7 @@ static struct resource iop13xx_adma_2_resources[] = { · 299 unmodified lines
300 }300 }
301};301};
302 302
303static u64 iop13xx_adma_dmamask = DMA_BIT_MASK(64);303static u64 iop13xx_adma_dmamask = DMA_BIT_MASK(32);
304static struct iop_adma_platform_data iop13xx_adma_0_data = {304static struct iop_adma_platform_data iop13xx_adma_0_data = {
305 .hw_id = 0,305 .hw_id = 0,
306 .pool_size = PAGE_SIZE,306 .pool_size = PAGE_SIZE,
@@ -324,7 +324,7 @@ static struct platform_device iop13xx_adma_0_channel = { · 17 unmodified lines
324 .resource = iop13xx_adma_0_resources,324 .resource = iop13xx_adma_0_resources,
325 .dev = {325 .dev = {
326 .dma_mask = &iop13xx_adma_dmamask,326 .dma_mask = &iop13xx_adma_dmamask,
327 .coherent_dma_mask = DMA_BIT_MASK(64),327 .coherent_dma_mask = DMA_BIT_MASK(32),
328 .platform_data = (void *) &iop13xx_adma_0_data,328 .platform_data = (void *) &iop13xx_adma_0_data,
329 },329 },
330};330};
@@ -336,7 +336,7 @@ static struct platform_device iop13xx_adma_1_channel = { · 5 unmodified lines
336 .resource = iop13xx_adma_1_resources,336 .resource = iop13xx_adma_1_resources,
337 .dev = {337 .dev = {
338 .dma_mask = &iop13xx_adma_dmamask,338 .dma_mask = &iop13xx_adma_dmamask,
339 .coherent_dma_mask = DMA_BIT_MASK(64),339 .coherent_dma_mask = DMA_BIT_MASK(32),
340 .platform_data = (void *) &iop13xx_adma_1_data,340 .platform_data = (void *) &iop13xx_adma_1_data,
341 },341 },
342};342};
@@ -348,7 +348,7 @@ static struct platform_device iop13xx_adma_2_channel = { · 5 unmodified lines
348 .resource = iop13xx_adma_2_resources,348 .resource = iop13xx_adma_2_resources,
349 .dev = {349 .dev = {
350 .dma_mask = &iop13xx_adma_dmamask,350 .dma_mask = &iop13xx_adma_dmamask,
351 .coherent_dma_mask = DMA_BIT_MASK(64),351 .coherent_dma_mask = DMA_BIT_MASK(32),
352 .platform_data = (void *) &iop13xx_adma_2_data,352 .platform_data = (void *) &iop13xx_adma_2_data,
353 },353 },
354};354};
arch/arm/mach-iop13xx/tpmi.c+5−5
@@ -152,7 +152,7 @@ static struct resource iop13xx_tpmi_3_resources[] = { · 151 unmodified lines
152 }152 }
153};153};
154 154
155u64 iop13xx_tpmi_mask = DMA_BIT_MASK(64);155u64 iop13xx_tpmi_mask = DMA_BIT_MASK(32);
156static struct platform_device iop13xx_tpmi_0_device = {156static struct platform_device iop13xx_tpmi_0_device = {
157 .name = "iop-tpmi",157 .name = "iop-tpmi",
158 .id = 0,158 .id = 0,
@@ -160,7 +160,7 @@ static struct platform_device iop13xx_tpmi_0_device = { · 1 unmodified line
160 .resource = iop13xx_tpmi_0_resources,160 .resource = iop13xx_tpmi_0_resources,
161 .dev = {161 .dev = {
162 .dma_mask = &iop13xx_tpmi_mask,162 .dma_mask = &iop13xx_tpmi_mask,
163 .coherent_dma_mask = DMA_BIT_MASK(64),163 .coherent_dma_mask = DMA_BIT_MASK(32),
164 },164 },
165};165};
166 166
@@ -171,7 +171,7 @@ static struct platform_device iop13xx_tpmi_1_device = { · 4 unmodified lines
171 .resource = iop13xx_tpmi_1_resources,171 .resource = iop13xx_tpmi_1_resources,
172 .dev = {172 .dev = {
173 .dma_mask = &iop13xx_tpmi_mask,173 .dma_mask = &iop13xx_tpmi_mask,
174 .coherent_dma_mask = DMA_BIT_MASK(64),174 .coherent_dma_mask = DMA_BIT_MASK(32),
175 },175 },
176};176};
177 177
@@ -182,7 +182,7 @@ static struct platform_device iop13xx_tpmi_2_device = { · 4 unmodified lines
182 .resource = iop13xx_tpmi_2_resources,182 .resource = iop13xx_tpmi_2_resources,
183 .dev = {183 .dev = {
184 .dma_mask = &iop13xx_tpmi_mask,184 .dma_mask = &iop13xx_tpmi_mask,
185 .coherent_dma_mask = DMA_BIT_MASK(64),185 .coherent_dma_mask = DMA_BIT_MASK(32),
186 },186 },
187};187};
188 188
@@ -193,7 +193,7 @@ static struct platform_device iop13xx_tpmi_3_device = { · 4 unmodified lines
193 .resource = iop13xx_tpmi_3_resources,193 .resource = iop13xx_tpmi_3_resources,
194 .dev = {194 .dev = {
195 .dma_mask = &iop13xx_tpmi_mask,195 .dma_mask = &iop13xx_tpmi_mask,
196 .coherent_dma_mask = DMA_BIT_MASK(64),196 .coherent_dma_mask = DMA_BIT_MASK(32),
197 },197 },
198};198};
199 199
arch/arm/mach-milbeaut/platsmp.c+4−0
@@ -65,6 +65,7 @@ static void m10v_smp_init(unsigned int max_cpus) · 64 unmodified lines
65 writel(KERNEL_UNBOOT_FLAG, m10v_smp_base + cpu * 4);65 writel(KERNEL_UNBOOT_FLAG, m10v_smp_base + cpu * 4);
66}66}
67 67
68#ifdef CONFIG_HOTPLUG_CPU
68static void m10v_cpu_die(unsigned int l_cpu)69static void m10v_cpu_die(unsigned int l_cpu)
69{70{
70 gic_cpu_if_down(0);71 gic_cpu_if_down(0);
@@ -83,12 +84,15 @@ static int m10v_cpu_kill(unsigned int l_cpu) · 12 unmodified lines
83 84
84 return 1;85 return 1;
85}86}
87#endif
86 88
87static struct smp_operations m10v_smp_ops __initdata = {89static struct smp_operations m10v_smp_ops __initdata = {
88 .smp_prepare_cpus = m10v_smp_init,90 .smp_prepare_cpus = m10v_smp_init,
89 .smp_boot_secondary = m10v_boot_secondary,91 .smp_boot_secondary = m10v_boot_secondary,
92#ifdef CONFIG_HOTPLUG_CPU
90 .cpu_die = m10v_cpu_die,93 .cpu_die = m10v_cpu_die,
91 .cpu_kill = m10v_cpu_kill,94 .cpu_kill = m10v_cpu_kill,
95#endif
92};96};
93CPU_METHOD_OF_DECLARE(m10v_smp, "socionext,milbeaut-m10v-smp", &m10v_smp_ops);97CPU_METHOD_OF_DECLARE(m10v_smp, "socionext,milbeaut-m10v-smp", &m10v_smp_ops);
94 98
arch/arm/mach-omap1/board-ams-delta.c+2−0
@@ -182,6 +182,7 @@ static struct resource latch1_resources[] = { · 181 unmodified lines
182 182
183static struct bgpio_pdata latch1_pdata = {183static struct bgpio_pdata latch1_pdata = {
184 .label = LATCH1_LABEL,184 .label = LATCH1_LABEL,
185 .base = -1,
185 .ngpio = LATCH1_NGPIO,186 .ngpio = LATCH1_NGPIO,
186};187};
187 188
@@ -219,6 +220,7 @@ static struct resource latch2_resources[] = { · 31 unmodified lines
219 220
220static struct bgpio_pdata latch2_pdata = {221static struct bgpio_pdata latch2_pdata = {
221 .label = LATCH2_LABEL,222 .label = LATCH2_LABEL,
223 .base = -1,
222 .ngpio = LATCH2_NGPIO,224 .ngpio = LATCH2_NGPIO,
223};225};
224 226
arch/arm/mach-omap2/display.c+3−1
@@ -250,8 +250,10 @@ static int __init omapdss_init_of(void) · 249 unmodified lines
250 if (!node)250 if (!node)
251 return 0;251 return 0;
252 252
253 if (!of_device_is_available(node))253 if (!of_device_is_available(node)) {
254 of_node_put(node);
254 return 0;255 return 0;
256 }
255 257
256 pdev = of_find_device_by_node(node);258 pdev = of_find_device_by_node(node);
257 259
arch/arm/plat-iop/adma.c+3−3
@@ -143,7 +143,7 @@ struct platform_device iop3xx_dma_0_channel = { · 142 unmodified lines
143 .resource = iop3xx_dma_0_resources,143 .resource = iop3xx_dma_0_resources,
144 .dev = {144 .dev = {
145 .dma_mask = &iop3xx_adma_dmamask,145 .dma_mask = &iop3xx_adma_dmamask,
146 .coherent_dma_mask = DMA_BIT_MASK(64),146 .coherent_dma_mask = DMA_BIT_MASK(32),
147 .platform_data = (void *) &iop3xx_dma_0_data,147 .platform_data = (void *) &iop3xx_dma_0_data,
148 },148 },
149};149};
@@ -155,7 +155,7 @@ struct platform_device iop3xx_dma_1_channel = { · 5 unmodified lines
155 .resource = iop3xx_dma_1_resources,155 .resource = iop3xx_dma_1_resources,
156 .dev = {156 .dev = {
157 .dma_mask = &iop3xx_adma_dmamask,157 .dma_mask = &iop3xx_adma_dmamask,
158 .coherent_dma_mask = DMA_BIT_MASK(64),158 .coherent_dma_mask = DMA_BIT_MASK(32),
159 .platform_data = (void *) &iop3xx_dma_1_data,159 .platform_data = (void *) &iop3xx_dma_1_data,
160 },160 },
161};161};
@@ -167,7 +167,7 @@ struct platform_device iop3xx_aau_channel = { · 5 unmodified lines
167 .resource = iop3xx_aau_resources,167 .resource = iop3xx_aau_resources,
168 .dev = {168 .dev = {
169 .dma_mask = &iop3xx_adma_dmamask,169 .dma_mask = &iop3xx_adma_dmamask,
170 .coherent_dma_mask = DMA_BIT_MASK(64),170 .coherent_dma_mask = DMA_BIT_MASK(32),
171 .platform_data = (void *) &iop3xx_aau_data,171 .platform_data = (void *) &iop3xx_aau_data,
172 },172 },
173};173};
arch/arm/plat-orion/common.c+2−2
@@ -622,7 +622,7 @@ static struct platform_device orion_xor0_shared = { · 621 unmodified lines
622 .resource = orion_xor0_shared_resources,622 .resource = orion_xor0_shared_resources,
623 .dev = {623 .dev = {
624 .dma_mask = &orion_xor_dmamask,624 .dma_mask = &orion_xor_dmamask,
625 .coherent_dma_mask = DMA_BIT_MASK(64),625 .coherent_dma_mask = DMA_BIT_MASK(32),
626 .platform_data = &orion_xor0_pdata,626 .platform_data = &orion_xor0_pdata,
627 },627 },
628};628};
@@ -683,7 +683,7 @@ static struct platform_device orion_xor1_shared = { · 54 unmodified lines
683 .resource = orion_xor1_shared_resources,683 .resource = orion_xor1_shared_resources,
684 .dev = {684 .dev = {
685 .dma_mask = &orion_xor_dmamask,685 .dma_mask = &orion_xor_dmamask,
686 .coherent_dma_mask = DMA_BIT_MASK(64),686 .coherent_dma_mask = DMA_BIT_MASK(32),
687 .platform_data = &orion_xor1_pdata,687 .platform_data = &orion_xor1_pdata,
688 },688 },
689};689};
arch/arm64/boot/dts/altera/socfpga_stratix10.dtsi+3−0
@@ -162,6 +162,7 @@ · 161 unmodified lines
162 rx-fifo-depth = <16384>;162 rx-fifo-depth = <16384>;
163 snps,multicast-filter-bins = <256>;163 snps,multicast-filter-bins = <256>;
164 iommus = <&smmu 1>;164 iommus = <&smmu 1>;
165 altr,sysmgr-syscon = <&sysmgr 0x44 0>;
165 status = "disabled";166 status = "disabled";
166 };167 };
167 168
@@ -179,6 +180,7 @@ · 11 unmodified lines
179 rx-fifo-depth = <16384>;180 rx-fifo-depth = <16384>;
180 snps,multicast-filter-bins = <256>;181 snps,multicast-filter-bins = <256>;
181 iommus = <&smmu 2>;182 iommus = <&smmu 2>;
183 altr,sysmgr-syscon = <&sysmgr 0x48 0>;
182 status = "disabled";184 status = "disabled";
183 };185 };
184 186
@@ -196,6 +198,7 @@ · 11 unmodified lines
196 rx-fifo-depth = <16384>;198 rx-fifo-depth = <16384>;
197 snps,multicast-filter-bins = <256>;199 snps,multicast-filter-bins = <256>;
198 iommus = <&smmu 3>;200 iommus = <&smmu 3>;
201 altr,sysmgr-syscon = <&sysmgr 0x4c 0>;
199 status = "disabled";202 status = "disabled";
200 };203 };
201 204
arch/arm64/boot/dts/rockchip/rk3328-roc-cc.dts+2−2
@@ -108,8 +108,8 @@ · 107 unmodified lines
108 snps,reset-gpio = <&gpio1 RK_PC2 GPIO_ACTIVE_LOW>;108 snps,reset-gpio = <&gpio1 RK_PC2 GPIO_ACTIVE_LOW>;
109 snps,reset-active-low;109 snps,reset-active-low;
110 snps,reset-delays-us = <0 10000 50000>;110 snps,reset-delays-us = <0 10000 50000>;
111 tx_delay = <0x25>;111 tx_delay = <0x24>;
112 rx_delay = <0x11>;112 rx_delay = <0x18>;
113 status = "okay";113 status = "okay";
114};114};
115 115
arch/arm64/boot/dts/rockchip/rk3328-rock64.dts+1−2
@@ -46,8 +46,7 @@ · 45 unmodified lines
46 46
47 vcc_host1_5v: vcc_otg_5v: vcc-host1-5v-regulator {47 vcc_host1_5v: vcc_otg_5v: vcc-host1-5v-regulator {
48 compatible = "regulator-fixed";48 compatible = "regulator-fixed";
49 enable-active-high;49 gpio = <&gpio0 RK_PA2 GPIO_ACTIVE_LOW>;
50 gpio = <&gpio0 RK_PA2 GPIO_ACTIVE_HIGH>;
51 pinctrl-names = "default";50 pinctrl-names = "default";
52 pinctrl-0 = <&usb20_host_drv>;51 pinctrl-0 = <&usb20_host_drv>;
53 regulator-name = "vcc_host1_5v";52 regulator-name = "vcc_host1_5v";
arch/arm64/boot/dts/rockchip/rk3328.dtsi+29−29
@@ -1445,11 +1445,11 @@ · 1444 unmodified lines
1445 1445
1446 sdmmc0 {1446 sdmmc0 {
1447 sdmmc0_clk: sdmmc0-clk {1447 sdmmc0_clk: sdmmc0-clk {
1448 rockchip,pins = <1 RK_PA6 1 &pcfg_pull_none_4ma>;1448 rockchip,pins = <1 RK_PA6 1 &pcfg_pull_none_8ma>;
1449 };1449 };
1450 1450
1451 sdmmc0_cmd: sdmmc0-cmd {1451 sdmmc0_cmd: sdmmc0-cmd {
1452 rockchip,pins = <1 RK_PA4 1 &pcfg_pull_up_4ma>;1452 rockchip,pins = <1 RK_PA4 1 &pcfg_pull_up_8ma>;
1453 };1453 };
1454 1454
1455 sdmmc0_dectn: sdmmc0-dectn {1455 sdmmc0_dectn: sdmmc0-dectn {
@@ -1461,14 +1461,14 @@ · 5 unmodified lines
1461 };1461 };
1462 1462
1463 sdmmc0_bus1: sdmmc0-bus1 {1463 sdmmc0_bus1: sdmmc0-bus1 {
1464 rockchip,pins = <1 RK_PA0 1 &pcfg_pull_up_4ma>;1464 rockchip,pins = <1 RK_PA0 1 &pcfg_pull_up_8ma>;
1465 };1465 };
1466 1466
1467 sdmmc0_bus4: sdmmc0-bus4 {1467 sdmmc0_bus4: sdmmc0-bus4 {
1468 rockchip,pins = <1 RK_PA0 1 &pcfg_pull_up_4ma>,1468 rockchip,pins = <1 RK_PA0 1 &pcfg_pull_up_8ma>,
1469 <1 RK_PA1 1 &pcfg_pull_up_4ma>,1469 <1 RK_PA1 1 &pcfg_pull_up_8ma>,
1470 <1 RK_PA2 1 &pcfg_pull_up_4ma>,1470 <1 RK_PA2 1 &pcfg_pull_up_8ma>,
1471 <1 RK_PA3 1 &pcfg_pull_up_4ma>;1471 <1 RK_PA3 1 &pcfg_pull_up_8ma>;
1472 };1472 };
1473 1473
1474 sdmmc0_gpio: sdmmc0-gpio {1474 sdmmc0_gpio: sdmmc0-gpio {
@@ -1642,50 +1642,50 @@ · 167 unmodified lines
1642 rgmiim1_pins: rgmiim1-pins {1642 rgmiim1_pins: rgmiim1-pins {
1643 rockchip,pins =1643 rockchip,pins =
1644 /* mac_txclk */1644 /* mac_txclk */
1645 <1 RK_PB4 2 &pcfg_pull_none_12ma>,1645 <1 RK_PB4 2 &pcfg_pull_none_8ma>,
1646 /* mac_rxclk */1646 /* mac_rxclk */
1647 <1 RK_PB5 2 &pcfg_pull_none_2ma>,1647 <1 RK_PB5 2 &pcfg_pull_none_4ma>,
1648 /* mac_mdio */1648 /* mac_mdio */
1649 <1 RK_PC3 2 &pcfg_pull_none_2ma>,1649 <1 RK_PC3 2 &pcfg_pull_none_4ma>,
1650 /* mac_txen */1650 /* mac_txen */
1651 <1 RK_PD1 2 &pcfg_pull_none_12ma>,1651 <1 RK_PD1 2 &pcfg_pull_none_8ma>,
1652 /* mac_clk */1652 /* mac_clk */
1653 <1 RK_PC5 2 &pcfg_pull_none_2ma>,1653 <1 RK_PC5 2 &pcfg_pull_none_4ma>,
1654 /* mac_rxdv */1654 /* mac_rxdv */
1655 <1 RK_PC6 2 &pcfg_pull_none_2ma>,1655 <1 RK_PC6 2 &pcfg_pull_none_4ma>,
1656 /* mac_mdc */1656 /* mac_mdc */
1657 <1 RK_PC7 2 &pcfg_pull_none_2ma>,1657 <1 RK_PC7 2 &pcfg_pull_none_4ma>,
1658 /* mac_rxd1 */1658 /* mac_rxd1 */
1659 <1 RK_PB2 2 &pcfg_pull_none_2ma>,1659 <1 RK_PB2 2 &pcfg_pull_none_4ma>,
1660 /* mac_rxd0 */1660 /* mac_rxd0 */
1661 <1 RK_PB3 2 &pcfg_pull_none_2ma>,1661 <1 RK_PB3 2 &pcfg_pull_none_4ma>,
1662 /* mac_txd1 */1662 /* mac_txd1 */
1663 <1 RK_PB0 2 &pcfg_pull_none_12ma>,1663 <1 RK_PB0 2 &pcfg_pull_none_8ma>,
1664 /* mac_txd0 */1664 /* mac_txd0 */
1665 <1 RK_PB1 2 &pcfg_pull_none_12ma>,1665 <1 RK_PB1 2 &pcfg_pull_none_8ma>,
1666 /* mac_rxd3 */1666 /* mac_rxd3 */
1667 <1 RK_PB6 2 &pcfg_pull_none_2ma>,1667 <1 RK_PB6 2 &pcfg_pull_none_4ma>,
1668 /* mac_rxd2 */1668 /* mac_rxd2 */
1669 <1 RK_PB7 2 &pcfg_pull_none_2ma>,1669 <1 RK_PB7 2 &pcfg_pull_none_4ma>,
1670 /* mac_txd3 */1670 /* mac_txd3 */
1671 <1 RK_PC0 2 &pcfg_pull_none_12ma>,1671 <1 RK_PC0 2 &pcfg_pull_none_8ma>,
1672 /* mac_txd2 */1672 /* mac_txd2 */
1673 <1 RK_PC1 2 &pcfg_pull_none_12ma>,1673 <1 RK_PC1 2 &pcfg_pull_none_8ma>,
1674 1674
1675 /* mac_txclk */1675 /* mac_txclk */
1676 <0 RK_PB0 1 &pcfg_pull_none>,1676 <0 RK_PB0 1 &pcfg_pull_none_8ma>,
1677 /* mac_txen */1677 /* mac_txen */
1678 <0 RK_PB4 1 &pcfg_pull_none>,1678 <0 RK_PB4 1 &pcfg_pull_none_8ma>,
1679 /* mac_clk */1679 /* mac_clk */
1680 <0 RK_PD0 1 &pcfg_pull_none>,1680 <0 RK_PD0 1 &pcfg_pull_none_4ma>,
1681 /* mac_txd1 */1681 /* mac_txd1 */
1682 <0 RK_PC0 1 &pcfg_pull_none>,1682 <0 RK_PC0 1 &pcfg_pull_none_8ma>,
1683 /* mac_txd0 */1683 /* mac_txd0 */
1684 <0 RK_PC1 1 &pcfg_pull_none>,1684 <0 RK_PC1 1 &pcfg_pull_none_8ma>,
1685 /* mac_txd3 */1685 /* mac_txd3 */
1686 <0 RK_PC7 1 &pcfg_pull_none>,1686 <0 RK_PC7 1 &pcfg_pull_none_8ma>,
1687 /* mac_txd2 */1687 /* mac_txd2 */
1688 <0 RK_PC6 1 &pcfg_pull_none>;1688 <0 RK_PC6 1 &pcfg_pull_none_8ma>;
1689 };1689 };
1690 1690
1691 rmiim1_pins: rmiim1-pins {1691 rmiim1_pins: rmiim1-pins {
arch/arm64/boot/dts/rockchip/rk3399-rock-pi-4.dts+1−0
@@ -158,6 +158,7 @@ · 157 unmodified lines
158};158};
159 159
160&hdmi {160&hdmi {
161 ddc-i2c-bus = <&i2c3>;
161 pinctrl-names = "default";162 pinctrl-names = "default";
162 pinctrl-0 = <&hdmi_cec>;163 pinctrl-0 = <&hdmi_cec>;
163 status = "okay";164 status = "okay";
arch/arm64/include/asm/futex.h+7−7
@@ -30,8 +30,8 @@ do { \ · 29 unmodified lines
30" prfm pstl1strm, %2\n" \30" prfm pstl1strm, %2\n" \
31"1: ldxr %w1, %2\n" \31"1: ldxr %w1, %2\n" \
32 insn "\n" \32 insn "\n" \
33"2: stlxr %w3, %w0, %2\n" \33"2: stlxr %w0, %w3, %2\n" \
34" cbnz %w3, 1b\n" \34" cbnz %w0, 1b\n" \
35" dmb ish\n" \35" dmb ish\n" \
36"3:\n" \36"3:\n" \
37" .pushsection .fixup,\"ax\"\n" \37" .pushsection .fixup,\"ax\"\n" \
@@ -57,23 +57,23 @@ arch_futex_atomic_op_inuser(int op, int oparg, int *oval, u32 __user *_uaddr) · 19 unmodified lines
57 57
58 switch (op) {58 switch (op) {
59 case FUTEX_OP_SET:59 case FUTEX_OP_SET:
60 __futex_atomic_op("mov %w0, %w4",60 __futex_atomic_op("mov %w3, %w4",
61 ret, oldval, uaddr, tmp, oparg);61 ret, oldval, uaddr, tmp, oparg);
62 break;62 break;
63 case FUTEX_OP_ADD:63 case FUTEX_OP_ADD:
64 __futex_atomic_op("add %w0, %w1, %w4",64 __futex_atomic_op("add %w3, %w1, %w4",
65 ret, oldval, uaddr, tmp, oparg);65 ret, oldval, uaddr, tmp, oparg);
66 break;66 break;
67 case FUTEX_OP_OR:67 case FUTEX_OP_OR:
68 __futex_atomic_op("orr %w0, %w1, %w4",68 __futex_atomic_op("orr %w3, %w1, %w4",
69 ret, oldval, uaddr, tmp, oparg);69 ret, oldval, uaddr, tmp, oparg);
70 break;70 break;
71 case FUTEX_OP_ANDN:71 case FUTEX_OP_ANDN:
72 __futex_atomic_op("and %w0, %w1, %w4",72 __futex_atomic_op("and %w3, %w1, %w4",
73 ret, oldval, uaddr, tmp, ~oparg);73 ret, oldval, uaddr, tmp, ~oparg);
74 break;74 break;
75 case FUTEX_OP_XOR:75 case FUTEX_OP_XOR:
76 __futex_atomic_op("eor %w0, %w1, %w4",76 __futex_atomic_op("eor %w3, %w1, %w4",
77 ret, oldval, uaddr, tmp, oparg);77 ret, oldval, uaddr, tmp, oparg);
78 break;78 break;
79 default:79 default:
arch/arm64/include/asm/module.h+5−0
@@ -73,4 +73,9 @@ static inline bool is_forbidden_offset_for_adrp(void *place) · 72 unmodified lines
73struct plt_entry get_plt_entry(u64 dst, void *pc);73struct plt_entry get_plt_entry(u64 dst, void *pc);
74bool plt_entries_equal(const struct plt_entry *a, const struct plt_entry *b);74bool plt_entries_equal(const struct plt_entry *a, const struct plt_entry *b);
75 75
76static inline bool plt_entry_is_initialized(const struct plt_entry *e)
77{
78 return e->adrp || e->add || e->br;
79}
80
76#endif /* __ASM_MODULE_H */81#endif /* __ASM_MODULE_H */
arch/arm64/include/asm/syscall.h+8−38
@@ -65,52 +65,22 @@ static inline void syscall_set_return_value(struct task_struct *task, · 64 unmodified lines
65 65
66static inline void syscall_get_arguments(struct task_struct *task,66static inline void syscall_get_arguments(struct task_struct *task,
67 struct pt_regs *regs,67 struct pt_regs *regs,
68 unsigned int i, unsigned int n,
69 unsigned long *args)68 unsigned long *args)
70{69{
71 if (n == 0)70 args[0] = regs->orig_x0;
72 return;71 args++;
73 72
74 if (i + n > SYSCALL_MAX_ARGS) {73 memcpy(args, &regs->regs[1], 5 * sizeof(args[0]));
75 unsigned long *args_bad = args + SYSCALL_MAX_ARGS - i;
76 unsigned int n_bad = n + i - SYSCALL_MAX_ARGS;
77 pr_warning("%s called with max args %d, handling only %d\n",
78 __func__, i + n, SYSCALL_MAX_ARGS);
79 memset(args_bad, 0, n_bad * sizeof(args[0]));
80 }
81
82 if (i == 0) {
83 args[0] = regs->orig_x0;
84 args++;
85 i++;
86 n--;
87 }
88
89 memcpy(args, &regs->regs[i], n * sizeof(args[0]));
90}74}
91 75
92static inline void syscall_set_arguments(struct task_struct *task,76static inline void syscall_set_arguments(struct task_struct *task,
93 struct pt_regs *regs,77 struct pt_regs *regs,
94 unsigned int i, unsigned int n,
95 const unsigned long *args)78 const unsigned long *args)
96{79{
97 if (n == 0)80 regs->orig_x0 = args[0];
98 return;81 args++;
99 82
100 if (i + n > SYSCALL_MAX_ARGS) {83 memcpy(&regs->regs[1], args, 5 * sizeof(args[0]));
101 pr_warning("%s called with max args %d, handling only %d\n",
102 __func__, i + n, SYSCALL_MAX_ARGS);
103 n = SYSCALL_MAX_ARGS - i;
104 }
105
106 if (i == 0) {
107 regs->orig_x0 = args[0];
108 args++;
109 i++;
110 n--;
111 }
112
113 memcpy(&regs->regs[i], args, n * sizeof(args[0]));
114}84}
115 85
116/*86/*
arch/arm64/kernel/ftrace.c+1−2
@@ -107,8 +107,7 @@ int ftrace_make_call(struct dyn_ftrace *rec, unsigned long addr) · 106 unmodified lines
107 trampoline = get_plt_entry(addr, mod->arch.ftrace_trampoline);107 trampoline = get_plt_entry(addr, mod->arch.ftrace_trampoline);
108 if (!plt_entries_equal(mod->arch.ftrace_trampoline,108 if (!plt_entries_equal(mod->arch.ftrace_trampoline,
109 &trampoline)) {109 &trampoline)) {
110 if (!plt_entries_equal(mod->arch.ftrace_trampoline,110 if (plt_entry_is_initialized(mod->arch.ftrace_trampoline)) {
111 &(struct plt_entry){})) {
112 pr_err("ftrace: far branches to multiple entry points unsupported inside a single module\n");111 pr_err("ftrace: far branches to multiple entry points unsupported inside a single module\n");
113 return -EINVAL;112 return -EINVAL;
114 }113 }
arch/arm64/kernel/sdei.c+6−0
@@ -94,6 +94,9 @@ static bool on_sdei_normal_stack(unsigned long sp, struct stack_info *info) · 93 unmodified lines
94 unsigned long low = (unsigned long)raw_cpu_read(sdei_stack_normal_ptr);94 unsigned long low = (unsigned long)raw_cpu_read(sdei_stack_normal_ptr);
95 unsigned long high = low + SDEI_STACK_SIZE;95 unsigned long high = low + SDEI_STACK_SIZE;
96 96
97 if (!low)
98 return false;
99
97 if (sp < low || sp >= high)100 if (sp < low || sp >= high)
98 return false;101 return false;
99 102
@@ -111,6 +114,9 @@ static bool on_sdei_critical_stack(unsigned long sp, struct stack_info *info) · 11 unmodified lines
111 unsigned long low = (unsigned long)raw_cpu_read(sdei_stack_critical_ptr);114 unsigned long low = (unsigned long)raw_cpu_read(sdei_stack_critical_ptr);
112 unsigned long high = low + SDEI_STACK_SIZE;115 unsigned long high = low + SDEI_STACK_SIZE;
113 116
117 if (!low)
118 return false;
119
114 if (sp < low || sp >= high)120 if (sp < low || sp >= high)
115 return false;121 return false;
116 122
arch/arm64/kernel/traps.c+9−6
@@ -102,10 +102,16 @@ static void dump_instr(const char *lvl, struct pt_regs *regs) · 101 unmodified lines
102void dump_backtrace(struct pt_regs *regs, struct task_struct *tsk)102void dump_backtrace(struct pt_regs *regs, struct task_struct *tsk)
103{103{
104 struct stackframe frame;104 struct stackframe frame;
105 int skip;105 int skip = 0;
106 106
107 pr_debug("%s(regs = %p tsk = %p)\n", __func__, regs, tsk);107 pr_debug("%s(regs = %p tsk = %p)\n", __func__, regs, tsk);
108 108
109 if (regs) {
110 if (user_mode(regs))
111 return;
112 skip = 1;
113 }
114
109 if (!tsk)115 if (!tsk)
110 tsk = current;116 tsk = current;
111 117
@@ -126,7 +132,6 @@ void dump_backtrace(struct pt_regs *regs, struct task_struct *tsk) · 14 unmodified lines
126 frame.graph = 0;132 frame.graph = 0;
127#endif133#endif
128 134
129 skip = !!regs;
130 printk("Call trace:\n");135 printk("Call trace:\n");
131 do {136 do {
132 /* skip until specified stack frame */137 /* skip until specified stack frame */
@@ -176,15 +181,13 @@ static int __die(const char *str, int err, struct pt_regs *regs) · 43 unmodified lines
176 return ret;181 return ret;
177 182
178 print_modules();183 print_modules();
179 __show_regs(regs);
180 pr_emerg("Process %.*s (pid: %d, stack limit = 0x%p)\n",184 pr_emerg("Process %.*s (pid: %d, stack limit = 0x%p)\n",
181 TASK_COMM_LEN, tsk->comm, task_pid_nr(tsk),185 TASK_COMM_LEN, tsk->comm, task_pid_nr(tsk),
182 end_of_stack(tsk));186 end_of_stack(tsk));
187 show_regs(regs);
183 188
184 if (!user_mode(regs)) {189 if (!user_mode(regs))
185 dump_backtrace(regs, tsk);
186 dump_instr(KERN_EMERG, regs);190 dump_instr(KERN_EMERG, regs);
187 }
188 191
189 return ret;192 return ret;
190}193}
arch/c6x/include/asm/syscall.h+14−65
@@ -46,78 +46,27 @@ static inline void syscall_set_return_value(struct task_struct *task, · 45 unmodified lines
46}46}
47 47
48static inline void syscall_get_arguments(struct task_struct *task,48static inline void syscall_get_arguments(struct task_struct *task,
49 struct pt_regs *regs, unsigned int i,49 struct pt_regs *regs,
50 unsigned int n, unsigned long *args)50 unsigned long *args)
51{51{
52 switch (i) {52 *args++ = regs->a4;
53 case 0:53 *args++ = regs->b4;
54 if (!n--)54 *args++ = regs->a6;
55 break;55 *args++ = regs->b6;
56 *args++ = regs->a4;56 *args++ = regs->a8;
57 case 1:57 *args = regs->b8;
58 if (!n--)
59 break;
60 *args++ = regs->b4;
61 case 2:
62 if (!n--)
63 break;
64 *args++ = regs->a6;
65 case 3:
66 if (!n--)
67 break;
68 *args++ = regs->b6;
69 case 4:
70 if (!n--)
71 break;
72 *args++ = regs->a8;
73 case 5:
74 if (!n--)
75 break;
76 *args++ = regs->b8;
77 case 6:
78 if (!n--)
79 break;
80 default:
81 BUG();
82 }
83}58}
84 59
85static inline void syscall_set_arguments(struct task_struct *task,60static inline void syscall_set_arguments(struct task_struct *task,
86 struct pt_regs *regs,61 struct pt_regs *regs,
87 unsigned int i, unsigned int n,
88 const unsigned long *args)62 const unsigned long *args)
89{63{
90 switch (i) {64 regs->a4 = *args++;
91 case 0:65 regs->b4 = *args++;
92 if (!n--)66 regs->a6 = *args++;
93 break;67 regs->b6 = *args++;
94 regs->a4 = *args++;68 regs->a8 = *args++;
95 case 1:69 regs->a9 = *args;
96 if (!n--)
97 break;
98 regs->b4 = *args++;
99 case 2:
100 if (!n--)
101 break;
102 regs->a6 = *args++;
103 case 3:
104 if (!n--)
105 break;
106 regs->b6 = *args++;
107 case 4:
108 if (!n--)
109 break;
110 regs->a8 = *args++;
111 case 5:
112 if (!n--)
113 break;
114 regs->a9 = *args++;
115 case 6:
116 if (!n)
117 break;
118 default:
119 BUG();
120 }
121}70}
122 71
123#endif /* __ASM_C6X_SYSCALLS_H */72#endif /* __ASM_C6X_SYSCALLS_H */
arch/csky/include/asm/syscall.h+8−18
@@ -43,30 +43,20 @@ syscall_set_return_value(struct task_struct *task, struct pt_regs *regs, · 42 unmodified lines
43 43
44static inline void44static inline void
45syscall_get_arguments(struct task_struct *task, struct pt_regs *regs,45syscall_get_arguments(struct task_struct *task, struct pt_regs *regs,
46 unsigned int i, unsigned int n, unsigned long *args)46 unsigned long *args)
47{47{
48 BUG_ON(i + n > 6);48 args[0] = regs->orig_a0;
49 if (i == 0) {49 args++;
50 args[0] = regs->orig_a0;50 memcpy(args, &regs->a1, 5 * sizeof(args[0]));
51 args++;
52 i++;
53 n--;
54 }
55 memcpy(args, &regs->a1 + i * sizeof(regs->a1), n * sizeof(args[0]));
56}51}
57 52
58static inline void53static inline void
59syscall_set_arguments(struct task_struct *task, struct pt_regs *regs,54syscall_set_arguments(struct task_struct *task, struct pt_regs *regs,
60 unsigned int i, unsigned int n, const unsigned long *args)55 const unsigned long *args)
61{56{
62 BUG_ON(i + n > 6);57 regs->orig_a0 = args[0];
63 if (i == 0) {58 args++;
64 regs->orig_a0 = args[0];59 memcpy(&regs->a1, args, 5 * sizeof(regs->a1));
65 args++;
66 i++;
67 n--;
68 }
69 memcpy(&regs->a1 + i * sizeof(regs->a1), args, n * sizeof(regs->a0));
70}60}
71 61
72static inline int62static inline int
arch/h8300/include/asm/syscall.h+7−27
@@ -17,34 +17,14 @@ syscall_get_nr(struct task_struct *task, struct pt_regs *regs) · 16 unmodified lines
17 17
18static inline void18static inline void
19syscall_get_arguments(struct task_struct *task, struct pt_regs *regs,19syscall_get_arguments(struct task_struct *task, struct pt_regs *regs,
20 unsigned int i, unsigned int n, unsigned long *args)20 unsigned long *args)
21{21{
22 BUG_ON(i + n > 6);22 *args++ = regs->er1;
23 23 *args++ = regs->er2;
24 while (n > 0) {24 *args++ = regs->er3;
25 switch (i) {25 *args++ = regs->er4;
26 case 0:26 *args++ = regs->er5;
27 *args++ = regs->er1;27 *args = regs->er6;
28 break;
29 case 1:
30 *args++ = regs->er2;
31 break;
32 case 2:
33 *args++ = regs->er3;
34 break;
35 case 3:
36 *args++ = regs->er4;
37 break;
38 case 4:
39 *args++ = regs->er5;
40 break;
41 case 5:
42 *args++ = regs->er6;
43 break;
44 }
45 i++;
46 n--;
47 }
48}28}
49 29
50 30
arch/hexagon/include/asm/syscall.h+1−3
@@ -37,10 +37,8 @@ static inline long syscall_get_nr(struct task_struct *task, · 36 unmodified lines
37 37
38static inline void syscall_get_arguments(struct task_struct *task,38static inline void syscall_get_arguments(struct task_struct *task,
39 struct pt_regs *regs,39 struct pt_regs *regs,
40 unsigned int i, unsigned int n,
41 unsigned long *args)40 unsigned long *args)
42{41{
43 BUG_ON(i + n > 6);42 memcpy(args, &(&regs->r00)[0], 6 * sizeof(args[0]));
44 memcpy(args, &(&regs->r00)[i], n * sizeof(args[0]));
45}43}
46#endif44#endif
arch/ia64/include/asm/syscall.h+3−10
@@ -59,26 +59,19 @@ static inline void syscall_set_return_value(struct task_struct *task, · 58 unmodified lines
59}59}
60 60
61extern void ia64_syscall_get_set_arguments(struct task_struct *task,61extern void ia64_syscall_get_set_arguments(struct task_struct *task,
62 struct pt_regs *regs, unsigned int i, unsigned int n,62 struct pt_regs *regs, unsigned long *args, int rw);
63 unsigned long *args, int rw);
64static inline void syscall_get_arguments(struct task_struct *task,63static inline void syscall_get_arguments(struct task_struct *task,
65 struct pt_regs *regs,64 struct pt_regs *regs,
66 unsigned int i, unsigned int n,
67 unsigned long *args)65 unsigned long *args)
68{66{
69 BUG_ON(i + n > 6);67 ia64_syscall_get_set_arguments(task, regs, args, 0);
70
71 ia64_syscall_get_set_arguments(task, regs, i, n, args, 0);
72}68}
73 69
74static inline void syscall_set_arguments(struct task_struct *task,70static inline void syscall_set_arguments(struct task_struct *task,
75 struct pt_regs *regs,71 struct pt_regs *regs,
76 unsigned int i, unsigned int n,
77 unsigned long *args)72 unsigned long *args)
78{73{
79 BUG_ON(i + n > 6);74 ia64_syscall_get_set_arguments(task, regs, args, 1);
80
81 ia64_syscall_get_set_arguments(task, regs, i, n, args, 1);
82}75}
83 76
84static inline int syscall_get_arch(void)77static inline int syscall_get_arch(void)
arch/ia64/kernel/ptrace.c+3−4
@@ -2179,12 +2179,11 @@ static void syscall_get_set_args_cb(struct unw_frame_info *info, void *data) · 2178 unmodified lines
2179}2179}
2180 2180
2181void ia64_syscall_get_set_arguments(struct task_struct *task,2181void ia64_syscall_get_set_arguments(struct task_struct *task,
2182 struct pt_regs *regs, unsigned int i, unsigned int n,2182 struct pt_regs *regs, unsigned long *args, int rw)
2183 unsigned long *args, int rw)
2184{2183{
2185 struct syscall_get_set_args data = {2184 struct syscall_get_set_args data = {
2186 .i = i,2185 .i = 0,
2187 .n = n,2186 .n = 6,
2188 .args = args,2187 .args = args,
2189 .regs = regs,2188 .regs = regs,
2190 .rw = rw,2189 .rw = rw,
arch/microblaze/include/asm/syscall.h+6−2
@@ -82,18 +82,22 @@ static inline void microblaze_set_syscall_arg(struct pt_regs *regs, · 81 unmodified lines
82 82
83static inline void syscall_get_arguments(struct task_struct *task,83static inline void syscall_get_arguments(struct task_struct *task,
84 struct pt_regs *regs,84 struct pt_regs *regs,
85 unsigned int i, unsigned int n,
86 unsigned long *args)85 unsigned long *args)
87{86{
87 unsigned int i = 0;
88 unsigned int n = 6;
89
88 while (n--)90 while (n--)
89 *args++ = microblaze_get_syscall_arg(regs, i++);91 *args++ = microblaze_get_syscall_arg(regs, i++);
90}92}
91 93
92static inline void syscall_set_arguments(struct task_struct *task,94static inline void syscall_set_arguments(struct task_struct *task,
93 struct pt_regs *regs,95 struct pt_regs *regs,
94 unsigned int i, unsigned int n,
95 const unsigned long *args)96 const unsigned long *args)
96{97{
98 unsigned int i = 0;
99 unsigned int n = 6;
100
97 while (n--)101 while (n--)
98 microblaze_set_syscall_arg(regs, i++, *args++);102 microblaze_set_syscall_arg(regs, i++, *args++);
99}103}
arch/mips/configs/generic/board-ocelot.config+8−0
@@ -1,6 +1,10 @@
1# require CONFIG_CPU_MIPS32_R2=y1# require CONFIG_CPU_MIPS32_R2=y
2 2
3CONFIG_LEGACY_BOARD_OCELOT=y3CONFIG_LEGACY_BOARD_OCELOT=y
4CONFIG_FIT_IMAGE_FDT_OCELOT=y
5
6CONFIG_BRIDGE=y
7CONFIG_GENERIC_PHY=y
4 8
5CONFIG_MTD=y9CONFIG_MTD=y
6CONFIG_MTD_CMDLINE_PARTS=y10CONFIG_MTD_CMDLINE_PARTS=y
@@ -19,6 +23,8 @@ CONFIG_SERIAL_8250_CONSOLE=y · 12 unmodified lines
19CONFIG_SERIAL_OF_PLATFORM=y23CONFIG_SERIAL_OF_PLATFORM=y
20 24
21CONFIG_NETDEVICES=y25CONFIG_NETDEVICES=y
26CONFIG_NET_SWITCHDEV=y
27CONFIG_NET_DSA=y
22CONFIG_MSCC_OCELOT_SWITCH=y28CONFIG_MSCC_OCELOT_SWITCH=y
23CONFIG_MSCC_OCELOT_SWITCH_OCELOT=y29CONFIG_MSCC_OCELOT_SWITCH_OCELOT=y
24CONFIG_MDIO_MSCC_MIIM=y30CONFIG_MDIO_MSCC_MIIM=y
@@ -35,6 +41,8 @@ CONFIG_SPI_DESIGNWARE=y · 10 unmodified lines
35CONFIG_SPI_DW_MMIO=y41CONFIG_SPI_DW_MMIO=y
36CONFIG_SPI_SPIDEV=y42CONFIG_SPI_SPIDEV=y
37 43
44CONFIG_PINCTRL_OCELOT=y
45
38CONFIG_GPIO_SYSFS=y46CONFIG_GPIO_SYSFS=y
39 47
40CONFIG_POWER_RESET=y48CONFIG_POWER_RESET=y
arch/mips/include/asm/syscall.h+2−1
@@ -116,9 +116,10 @@ static inline void syscall_set_return_value(struct task_struct *task, · 115 unmodified lines
116 116
117static inline void syscall_get_arguments(struct task_struct *task,117static inline void syscall_get_arguments(struct task_struct *task,
118 struct pt_regs *regs,118 struct pt_regs *regs,
119 unsigned int i, unsigned int n,
120 unsigned long *args)119 unsigned long *args)
121{120{
121 unsigned int i = 0;
122 unsigned int n = 6;
122 int ret;123 int ret;
123 124
124 /* O32 ABI syscall() */125 /* O32 ABI syscall() */
arch/mips/kernel/kgdb.c+2−1
@@ -33,6 +33,7 @@ · 32 unmodified lines
33#include <asm/processor.h>33#include <asm/processor.h>
34#include <asm/sigcontext.h>34#include <asm/sigcontext.h>
35#include <linux/uaccess.h>35#include <linux/uaccess.h>
36#include <asm/irq_regs.h>
36 37
37static struct hard_trap_info {38static struct hard_trap_info {
38 unsigned char tt; /* Trap type code for MIPS R3xxx and R4xxx */39 unsigned char tt; /* Trap type code for MIPS R3xxx and R4xxx */
@@ -214,7 +215,7 @@ void kgdb_call_nmi_hook(void *ignored) · 175 unmodified lines
214 old_fs = get_fs();215 old_fs = get_fs();
215 set_fs(KERNEL_DS);216 set_fs(KERNEL_DS);
216 217
217 kgdb_nmicallback(raw_smp_processor_id(), NULL);218 kgdb_nmicallback(raw_smp_processor_id(), get_irq_regs());
218 219
219 set_fs(old_fs);220 set_fs(old_fs);
220}221}
arch/mips/kernel/ptrace.c+1−1
@@ -1419,7 +1419,7 @@ asmlinkage long syscall_trace_enter(struct pt_regs *regs, long syscall) · 1418 unmodified lines
1419 1419
1420 sd.nr = syscall;1420 sd.nr = syscall;
1421 sd.arch = syscall_get_arch();1421 sd.arch = syscall_get_arch();
1422 syscall_get_arguments(current, regs, 0, 6, args);1422 syscall_get_arguments(current, regs, args);
1423 for (i = 0; i < 6; i++)1423 for (i = 0; i < 6; i++)
1424 sd.args[i] = args[i];1424 sd.args[i] = args[i];
1425 sd.instruction_pointer = KSTK_EIP(current);1425 sd.instruction_pointer = KSTK_EIP(current);
arch/mips/sgi-ip27/ip27-irq.c+1−2
@@ -118,7 +118,6 @@ static void shutdown_bridge_irq(struct irq_data *d) · 117 unmodified lines
118{118{
119 struct hub_irq_data *hd = irq_data_get_irq_chip_data(d);119 struct hub_irq_data *hd = irq_data_get_irq_chip_data(d);
120 struct bridge_controller *bc;120 struct bridge_controller *bc;
121 int pin = hd->pin;
122 121
123 if (!hd)122 if (!hd)
124 return;123 return;
@@ -126,7 +125,7 @@ static void shutdown_bridge_irq(struct irq_data *d) · 1 unmodified line
126 disable_hub_irq(d);125 disable_hub_irq(d);
127 126
128 bc = hd->bc;127 bc = hd->bc;
129 bridge_clr(bc, b_int_enable, (1 << pin));128 bridge_clr(bc, b_int_enable, (1 << hd->pin));
130 bridge_read(bc, b_wid_tflush);129 bridge_read(bc, b_wid_tflush);
131}130}
132 131
arch/nds32/include/asm/syscall.h+11−51
@@ -108,81 +108,41 @@ void syscall_set_return_value(struct task_struct *task, struct pt_regs *regs, · 107 unmodified lines
108 * syscall_get_arguments - extract system call parameter values108 * syscall_get_arguments - extract system call parameter values
109 * @task: task of interest, must be blocked109 * @task: task of interest, must be blocked
110 * @regs: task_pt_regs() of @task110 * @regs: task_pt_regs() of @task
111 * @i: argument index [0,5]
112 * @n: number of arguments; n+i must be [1,6].
113 * @args: array filled with argument values111 * @args: array filled with argument values
114 *112 *
115 * Fetches @n arguments to the system call starting with the @i'th argument113 * Fetches 6 arguments to the system call (from 0 through 5). The first
116 * (from 0 through 5). Argument @i is stored in @args[0], and so on.114 * argument is stored in @args[0], and so on.
117 * An arch inline version is probably optimal when @i and @n are constants.
118 *115 *
119 * It's only valid to call this when @task is stopped for tracing on116 * It's only valid to call this when @task is stopped for tracing on
120 * entry to a system call, due to %TIF_SYSCALL_TRACE or %TIF_SYSCALL_AUDIT.117 * entry to a system call, due to %TIF_SYSCALL_TRACE or %TIF_SYSCALL_AUDIT.
121 * It's invalid to call this with @i + @n > 6; we only support system calls
122 * taking up to 6 arguments.
123 */118 */
124#define SYSCALL_MAX_ARGS 6119#define SYSCALL_MAX_ARGS 6
125void syscall_get_arguments(struct task_struct *task, struct pt_regs *regs,120void syscall_get_arguments(struct task_struct *task, struct pt_regs *regs,
126 unsigned int i, unsigned int n, unsigned long *args)121 unsigned long *args)
127{122{
128 if (n == 0)123 args[0] = regs->orig_r0;
129 return;124 args++;
130 if (i + n > SYSCALL_MAX_ARGS) {125 memcpy(args, &regs->uregs[0] + 1, 5 * sizeof(args[0]));
131 unsigned long *args_bad = args + SYSCALL_MAX_ARGS - i;
132 unsigned int n_bad = n + i - SYSCALL_MAX_ARGS;
133 pr_warning("%s called with max args %d, handling only %d\n",
134 __func__, i + n, SYSCALL_MAX_ARGS);
135 memset(args_bad, 0, n_bad * sizeof(args[0]));
136 memset(args_bad, 0, n_bad * sizeof(args[0]));
137 }
138
139 if (i == 0) {
140 args[0] = regs->orig_r0;
141 args++;
142 i++;
143 n--;
144 }
145
146 memcpy(args, &regs->uregs[0] + i, n * sizeof(args[0]));
147}126}
148 127
149/**128/**
150 * syscall_set_arguments - change system call parameter value129 * syscall_set_arguments - change system call parameter value
151 * @task: task of interest, must be in system call entry tracing130 * @task: task of interest, must be in system call entry tracing
152 * @regs: task_pt_regs() of @task131 * @regs: task_pt_regs() of @task
153 * @i: argument index [0,5]
154 * @n: number of arguments; n+i must be [1,6].
155 * @args: array of argument values to store132 * @args: array of argument values to store
156 *133 *
157 * Changes @n arguments to the system call starting with the @i'th argument.134 * Changes 6 arguments to the system call. The first argument gets value
158 * Argument @i gets value @args[0], and so on.135 * @args[0], and so on.
159 * An arch inline version is probably optimal when @i and @n are constants.
160 *136 *
161 * It's only valid to call this when @task is stopped for tracing on137 * It's only valid to call this when @task is stopped for tracing on
162 * entry to a system call, due to %TIF_SYSCALL_TRACE or %TIF_SYSCALL_AUDIT.138 * entry to a system call, due to %TIF_SYSCALL_TRACE or %TIF_SYSCALL_AUDIT.
163 * It's invalid to call this with @i + @n > 6; we only support system calls
164 * taking up to 6 arguments.
165 */139 */
166void syscall_set_arguments(struct task_struct *task, struct pt_regs *regs,140void syscall_set_arguments(struct task_struct *task, struct pt_regs *regs,
167 unsigned int i, unsigned int n,
168 const unsigned long *args)141 const unsigned long *args)
169{142{
170 if (n == 0)143 regs->orig_r0 = args[0];
171 return;144 args++;
172
173 if (i + n > SYSCALL_MAX_ARGS) {
174 pr_warn("%s called with max args %d, handling only %d\n",
175 __func__, i + n, SYSCALL_MAX_ARGS);
176 n = SYSCALL_MAX_ARGS - i;
177 }
178
179 if (i == 0) {
180 regs->orig_r0 = args[0];
181 args++;
182 i++;
183 n--;
184 }
185 145
186 memcpy(&regs->uregs[0] + i, args, n * sizeof(args[0]));146 memcpy(&regs->uregs[0] + 1, args, 5 * sizeof(args[0]));
187}147}
188#endif /* _ASM_NDS32_SYSCALL_H */148#endif /* _ASM_NDS32_SYSCALL_H */
arch/nios2/include/asm/syscall.h+14−70
@@ -58,81 +58,25 @@ static inline void syscall_set_return_value(struct task_struct *task, · 57 unmodified lines
58}58}
59 59
60static inline void syscall_get_arguments(struct task_struct *task,60static inline void syscall_get_arguments(struct task_struct *task,
61 struct pt_regs *regs, unsigned int i, unsigned int n,61 struct pt_regs *regs, unsigned long *args)
62 unsigned long *args)
63{62{
64 BUG_ON(i + n > 6);63 *args++ = regs->r4;
65 64 *args++ = regs->r5;
66 switch (i) {65 *args++ = regs->r6;
67 case 0:66 *args++ = regs->r7;
68 if (!n--)67 *args++ = regs->r8;
69 break;68 *args = regs->r9;
70 *args++ = regs->r4;
71 case 1:
72 if (!n--)
73 break;
74 *args++ = regs->r5;
75 case 2:
76 if (!n--)
77 break;
78 *args++ = regs->r6;
79 case 3:
80 if (!n--)
81 break;
82 *args++ = regs->r7;
83 case 4:
84 if (!n--)
85 break;
86 *args++ = regs->r8;
87 case 5:
88 if (!n--)
89 break;
90 *args++ = regs->r9;
91 case 6:
92 if (!n--)
93 break;
94 default:
95 BUG();
96 }
97}69}
98 70
99static inline void syscall_set_arguments(struct task_struct *task,71static inline void syscall_set_arguments(struct task_struct *task,
100 struct pt_regs *regs, unsigned int i, unsigned int n,72 struct pt_regs *regs, const unsigned long *args)
101 const unsigned long *args)
102{73{
103 BUG_ON(i + n > 6);74 regs->r4 = *args++;
104 75 regs->r5 = *args++;
105 switch (i) {76 regs->r6 = *args++;
106 case 0:77 regs->r7 = *args++;
107 if (!n--)78 regs->r8 = *args++;
108 break;79 regs->r9 = *args;
109 regs->r4 = *args++;
110 case 1:
111 if (!n--)
112 break;
113 regs->r5 = *args++;
114 case 2:
115 if (!n--)
116 break;
117 regs->r6 = *args++;
118 case 3:
119 if (!n--)
120 break;
121 regs->r7 = *args++;
122 case 4:
123 if (!n--)
124 break;
125 regs->r8 = *args++;
126 case 5:
127 if (!n--)
128 break;
129 regs->r9 = *args++;
130 case 6:
131 if (!n)
132 break;
133 default:
134 BUG();
135 }
136}80}
137 81
138#endif82#endif
arch/openrisc/include/asm/syscall.h+4−8
@@ -56,20 +56,16 @@ syscall_set_return_value(struct task_struct *task, struct pt_regs *regs, · 55 unmodified lines
56 56
57static inline void57static inline void
58syscall_get_arguments(struct task_struct *task, struct pt_regs *regs,58syscall_get_arguments(struct task_struct *task, struct pt_regs *regs,
59 unsigned int i, unsigned int n, unsigned long *args)59 unsigned long *args)
60{60{
61 BUG_ON(i + n > 6);61 memcpy(args, &regs->gpr[3], 6 * sizeof(args[0]));
62
63 memcpy(args, &regs->gpr[3 + i], n * sizeof(args[0]));
64}62}
65 63
66static inline void64static inline void
67syscall_set_arguments(struct task_struct *task, struct pt_regs *regs,65syscall_set_arguments(struct task_struct *task, struct pt_regs *regs,
68 unsigned int i, unsigned int n, const unsigned long *args)66 const unsigned long *args)
69{67{
70 BUG_ON(i + n > 6);68 memcpy(&regs->gpr[3], args, 6 * sizeof(args[0]));
71
72 memcpy(&regs->gpr[3 + i], args, n * sizeof(args[0]));
73}69}
74 70
75static inline int syscall_get_arch(void)71static inline int syscall_get_arch(void)
arch/parisc/include/asm/ptrace.h+3−2
@@ -22,13 +22,14 @@ unsigned long profile_pc(struct pt_regs *); · 21 unmodified lines
22 22
23static inline unsigned long regs_return_value(struct pt_regs *regs)23static inline unsigned long regs_return_value(struct pt_regs *regs)
24{24{
25 return regs->gr[20];25 return regs->gr[28];
26}26}
27 27
28static inline void instruction_pointer_set(struct pt_regs *regs,28static inline void instruction_pointer_set(struct pt_regs *regs,
29 unsigned long val)29 unsigned long val)
30{30{
31 regs->iaoq[0] = val;31 regs->iaoq[0] = val;
32 regs->iaoq[1] = val + 4;
32}33}
33 34
34/* Query offset/name of register from its name/offset */35/* Query offset/name of register from its name/offset */
arch/parisc/include/asm/syscall.h+8−22
@@ -18,29 +18,15 @@ static inline long syscall_get_nr(struct task_struct *tsk, · 17 unmodified lines
18}18}
19 19
20static inline void syscall_get_arguments(struct task_struct *tsk,20static inline void syscall_get_arguments(struct task_struct *tsk,
21 struct pt_regs *regs, unsigned int i,21 struct pt_regs *regs,
22 unsigned int n, unsigned long *args)22 unsigned long *args)
23{23{
24 BUG_ON(i);24 args[5] = regs->gr[21];
25 25 args[4] = regs->gr[22];
26 switch (n) {26 args[3] = regs->gr[23];
27 case 6:27 args[2] = regs->gr[24];
28 args[5] = regs->gr[21];28 args[1] = regs->gr[25];
29 case 5:29 args[0] = regs->gr[26];
30 args[4] = regs->gr[22];
31 case 4:
32 args[3] = regs->gr[23];
33 case 3:
34 args[2] = regs->gr[24];
35 case 2:
36 args[1] = regs->gr[25];
37 case 1:
38 args[0] = regs->gr[26];
39 case 0:
40 break;
41 default:
42 BUG();
43 }
44}30}
45 31
46static inline long syscall_get_return_value(struct task_struct *task,32static inline long syscall_get_return_value(struct task_struct *task,
arch/parisc/kernel/process.c+0−6
@@ -210,12 +210,6 @@ void __cpuidle arch_cpu_idle(void) · 209 unmodified lines
210 210
211static int __init parisc_idle_init(void)211static int __init parisc_idle_init(void)
212{212{
213 const char *marker;
214
215 /* check QEMU/SeaBIOS marker in PAGE0 */
216 marker = (char *) &PAGE0->pad0;
217 running_on_qemu = (memcmp(marker, "SeaBIOS", 8) == 0);
218
219 if (!running_on_qemu)213 if (!running_on_qemu)
220 cpu_idle_poll_ctrl(1);214 cpu_idle_poll_ctrl(1);
221 215
arch/parisc/kernel/setup.c+3−0
@@ -397,6 +397,9 @@ void __init start_parisc(void) · 396 unmodified lines
397 int ret, cpunum;397 int ret, cpunum;
398 struct pdc_coproc_cfg coproc_cfg;398 struct pdc_coproc_cfg coproc_cfg;
399 399
400 /* check QEMU/SeaBIOS marker in PAGE0 */
401 running_on_qemu = (memcmp(&PAGE0->pad0, "SeaBIOS", 8) == 0);
402
400 cpunum = smp_processor_id();403 cpunum = smp_processor_id();
401 404
402 init_cpu_topology();405 init_cpu_topology();
arch/powerpc/include/asm/mmu.h+1−1
@@ -352,7 +352,7 @@ static inline bool strict_kernel_rwx_enabled(void) · 351 unmodified lines
352#if defined(CONFIG_SPARSEMEM_VMEMMAP) && defined(CONFIG_SPARSEMEM_EXTREME) && \352#if defined(CONFIG_SPARSEMEM_VMEMMAP) && defined(CONFIG_SPARSEMEM_EXTREME) && \
353 defined (CONFIG_PPC_64K_PAGES)353 defined (CONFIG_PPC_64K_PAGES)
354#define MAX_PHYSMEM_BITS 51354#define MAX_PHYSMEM_BITS 51
355#elif defined(CONFIG_SPARSEMEM)355#elif defined(CONFIG_PPC64)
356#define MAX_PHYSMEM_BITS 46356#define MAX_PHYSMEM_BITS 46
357#endif357#endif
358 358
arch/powerpc/include/asm/syscall.h+5−10
@@ -65,22 +65,20 @@ static inline void syscall_set_return_value(struct task_struct *task, · 64 unmodified lines
65 65
66static inline void syscall_get_arguments(struct task_struct *task,66static inline void syscall_get_arguments(struct task_struct *task,
67 struct pt_regs *regs,67 struct pt_regs *regs,
68 unsigned int i, unsigned int n,
69 unsigned long *args)68 unsigned long *args)
70{69{
71 unsigned long val, mask = -1UL;70 unsigned long val, mask = -1UL;
72 71 unsigned int n = 6;
73 BUG_ON(i + n > 6);
74 72
75#ifdef CONFIG_COMPAT73#ifdef CONFIG_COMPAT
76 if (test_tsk_thread_flag(task, TIF_32BIT))74 if (test_tsk_thread_flag(task, TIF_32BIT))
77 mask = 0xffffffff;75 mask = 0xffffffff;
78#endif76#endif
79 while (n--) {77 while (n--) {
80 if (n == 0 && i == 0)78 if (n == 0)
81 val = regs->orig_gpr3;79 val = regs->orig_gpr3;
82 else80 else
83 val = regs->gpr[3 + i + n];81 val = regs->gpr[3 + n];
84 82
85 args[n] = val & mask;83 args[n] = val & mask;
86 }84 }
@@ -88,15 +86,12 @@ static inline void syscall_get_arguments(struct task_struct *task, · 1 unmodified line
88 86
89static inline void syscall_set_arguments(struct task_struct *task,87static inline void syscall_set_arguments(struct task_struct *task,
90 struct pt_regs *regs,88 struct pt_regs *regs,
91 unsigned int i, unsigned int n,
92 const unsigned long *args)89 const unsigned long *args)
93{90{
94 BUG_ON(i + n > 6);91 memcpy(&regs->gpr[3], args, 6 * sizeof(args[0]));
95 memcpy(&regs->gpr[3 + i], args, n * sizeof(args[0]));
96 92
97 /* Also copy the first argument into orig_gpr3 */93 /* Also copy the first argument into orig_gpr3 */
98 if (i == 0 && n > 0)94 regs->orig_gpr3 = args[0];
99 regs->orig_gpr3 = args[0];
100}95}
101 96
102static inline int syscall_get_arch(void)97static inline int syscall_get_arch(void)
arch/powerpc/kernel/exceptions-64s.S+12−0
@@ -656,11 +656,17 @@ EXC_COMMON_BEGIN(data_access_slb_common) · 655 unmodified lines
656 ld r4,PACA_EXSLB+EX_DAR(r13)656 ld r4,PACA_EXSLB+EX_DAR(r13)
657 std r4,_DAR(r1)657 std r4,_DAR(r1)
658 addi r3,r1,STACK_FRAME_OVERHEAD658 addi r3,r1,STACK_FRAME_OVERHEAD
659BEGIN_MMU_FTR_SECTION
660 /* HPT case, do SLB fault */
659 bl do_slb_fault661 bl do_slb_fault
660 cmpdi r3,0662 cmpdi r3,0
661 bne- 1f663 bne- 1f
662 b fast_exception_return664 b fast_exception_return
6631: /* Error case */6651: /* Error case */
666MMU_FTR_SECTION_ELSE
667 /* Radix case, access is outside page table range */
668 li r3,-EFAULT
669ALT_MMU_FTR_SECTION_END_IFCLR(MMU_FTR_TYPE_RADIX)
664 std r3,RESULT(r1)670 std r3,RESULT(r1)
665 bl save_nvgprs671 bl save_nvgprs
666 RECONCILE_IRQ_STATE(r10, r11)672 RECONCILE_IRQ_STATE(r10, r11)
@@ -705,11 +711,17 @@ EXC_COMMON_BEGIN(instruction_access_slb_common) · 38 unmodified lines
705 EXCEPTION_PROLOG_COMMON(0x480, PACA_EXSLB)711 EXCEPTION_PROLOG_COMMON(0x480, PACA_EXSLB)
706 ld r4,_NIP(r1)712 ld r4,_NIP(r1)
707 addi r3,r1,STACK_FRAME_OVERHEAD713 addi r3,r1,STACK_FRAME_OVERHEAD
714BEGIN_MMU_FTR_SECTION
715 /* HPT case, do SLB fault */
708 bl do_slb_fault716 bl do_slb_fault
709 cmpdi r3,0717 cmpdi r3,0
710 bne- 1f718 bne- 1f
711 b fast_exception_return719 b fast_exception_return
7121: /* Error case */7201: /* Error case */
721MMU_FTR_SECTION_ELSE
722 /* Radix case, access is outside page table range */
723 li r3,-EFAULT
724ALT_MMU_FTR_SECTION_END_IFCLR(MMU_FTR_TYPE_RADIX)
713 std r3,RESULT(r1)725 std r3,RESULT(r1)
714 bl save_nvgprs726 bl save_nvgprs
715 RECONCILE_IRQ_STATE(r10, r11)727 RECONCILE_IRQ_STATE(r10, r11)
arch/powerpc/kernel/head_32.S+0−8
@@ -851,10 +851,6 @@ __secondary_start: · 850 unmodified lines
851 tophys(r4,r2)851 tophys(r4,r2)
852 addi r4,r4,THREAD /* phys address of our thread_struct */852 addi r4,r4,THREAD /* phys address of our thread_struct */
853 mtspr SPRN_SPRG_THREAD,r4853 mtspr SPRN_SPRG_THREAD,r4
854#ifdef CONFIG_PPC_RTAS
855 li r3,0
856 stw r3, RTAS_SP(r4) /* 0 => not in RTAS */
857#endif
858 lis r4, (swapper_pg_dir - PAGE_OFFSET)@h854 lis r4, (swapper_pg_dir - PAGE_OFFSET)@h
859 ori r4, r4, (swapper_pg_dir - PAGE_OFFSET)@l855 ori r4, r4, (swapper_pg_dir - PAGE_OFFSET)@l
860 mtspr SPRN_SPRG_PGDIR, r4856 mtspr SPRN_SPRG_PGDIR, r4
@@ -941,10 +937,6 @@ start_here: · 80 unmodified lines
941 tophys(r4,r2)937 tophys(r4,r2)
942 addi r4,r4,THREAD /* init task's THREAD */938 addi r4,r4,THREAD /* init task's THREAD */
943 mtspr SPRN_SPRG_THREAD,r4939 mtspr SPRN_SPRG_THREAD,r4
944#ifdef CONFIG_PPC_RTAS
945 li r3,0
946 stw r3, RTAS_SP(r4) /* 0 => not in RTAS */
947#endif
948 lis r4, (swapper_pg_dir - PAGE_OFFSET)@h940 lis r4, (swapper_pg_dir - PAGE_OFFSET)@h
949 ori r4, r4, (swapper_pg_dir - PAGE_OFFSET)@l941 ori r4, r4, (swapper_pg_dir - PAGE_OFFSET)@l
950 mtspr SPRN_SPRG_PGDIR, r4942 mtspr SPRN_SPRG_PGDIR, r4
arch/powerpc/kernel/kvm.c+7−0
@@ -22,6 +22,7 @@ · 21 unmodified lines
22#include <linux/kvm_host.h>22#include <linux/kvm_host.h>
23#include <linux/init.h>23#include <linux/init.h>
24#include <linux/export.h>24#include <linux/export.h>
25#include <linux/kmemleak.h>
25#include <linux/kvm_para.h>26#include <linux/kvm_para.h>
26#include <linux/slab.h>27#include <linux/slab.h>
27#include <linux/of.h>28#include <linux/of.h>
@@ -712,6 +713,12 @@ static void kvm_use_magic_page(void) · 684 unmodified lines
712 713
713static __init void kvm_free_tmp(void)714static __init void kvm_free_tmp(void)
714{715{
716 /*
717 * Inform kmemleak about the hole in the .bss section since the
718 * corresponding pages will be unmapped with DEBUG_PAGEALLOC=y.
719 */
720 kmemleak_free_part(&kvm_tmp[kvm_tmp_index],
721 ARRAY_SIZE(kvm_tmp) - kvm_tmp_index);
715 free_reserved_area(&kvm_tmp[kvm_tmp_index],722 free_reserved_area(&kvm_tmp[kvm_tmp_index],
716 &kvm_tmp[ARRAY_SIZE(kvm_tmp)], -1, NULL);723 &kvm_tmp[ARRAY_SIZE(kvm_tmp)], -1, NULL);
717}724}
arch/powerpc/kernel/vdso32/gettimeofday.S+1−1
@@ -98,7 +98,7 @@ V_FUNCTION_BEGIN(__kernel_clock_gettime) · 97 unmodified lines
98 * can be used, r7 contains NSEC_PER_SEC.98 * can be used, r7 contains NSEC_PER_SEC.
99 */99 */
100 100
101 lwz r5,WTOM_CLOCK_SEC(r9)101 lwz r5,(WTOM_CLOCK_SEC+LOPART)(r9)
102 lwz r6,WTOM_CLOCK_NSEC(r9)102 lwz r6,WTOM_CLOCK_NSEC(r9)
103 103
104 /* We now have our offset in r5,r6. We create a fake dependency104 /* We now have our offset in r5,r6. We create a fake dependency
arch/riscv/configs/rv32_defconfig+84−0
@@ -0,0 +1,84 @@
1CONFIG_SYSVIPC=y
2CONFIG_POSIX_MQUEUE=y
3CONFIG_IKCONFIG=y
4CONFIG_IKCONFIG_PROC=y
5CONFIG_CGROUPS=y
6CONFIG_CGROUP_SCHED=y
7CONFIG_CFS_BANDWIDTH=y
8CONFIG_CGROUP_BPF=y
9CONFIG_NAMESPACES=y
10CONFIG_USER_NS=y
11CONFIG_CHECKPOINT_RESTORE=y
12CONFIG_BLK_DEV_INITRD=y
13CONFIG_EXPERT=y
14CONFIG_BPF_SYSCALL=y
15CONFIG_ARCH_RV32I=y
16CONFIG_SMP=y
17CONFIG_MODULES=y
18CONFIG_MODULE_UNLOAD=y
19CONFIG_NET=y
20CONFIG_PACKET=y
21CONFIG_UNIX=y
22CONFIG_INET=y
23CONFIG_IP_MULTICAST=y
24CONFIG_IP_ADVANCED_ROUTER=y
25CONFIG_IP_PNP=y
26CONFIG_IP_PNP_DHCP=y
27CONFIG_IP_PNP_BOOTP=y
28CONFIG_IP_PNP_RARP=y
29CONFIG_NETLINK_DIAG=y
30CONFIG_PCI=y
31CONFIG_PCIEPORTBUS=y
32CONFIG_PCI_HOST_GENERIC=y
33CONFIG_PCIE_XILINX=y
34CONFIG_DEVTMPFS=y
35CONFIG_BLK_DEV_LOOP=y
36CONFIG_VIRTIO_BLK=y
37CONFIG_BLK_DEV_SD=y
38CONFIG_BLK_DEV_SR=y
39CONFIG_ATA=y
40CONFIG_SATA_AHCI=y
41CONFIG_SATA_AHCI_PLATFORM=y
42CONFIG_NETDEVICES=y
43CONFIG_VIRTIO_NET=y
44CONFIG_MACB=y
45CONFIG_E1000E=y
46CONFIG_R8169=y
47CONFIG_MICROSEMI_PHY=y
48CONFIG_INPUT_MOUSEDEV=y
49CONFIG_SERIAL_8250=y
50CONFIG_SERIAL_8250_CONSOLE=y
51CONFIG_SERIAL_OF_PLATFORM=y
52CONFIG_SERIAL_EARLYCON_RISCV_SBI=y
53CONFIG_HVC_RISCV_SBI=y
54# CONFIG_PTP_1588_CLOCK is not set
55CONFIG_DRM=y
56CONFIG_DRM_RADEON=y
57CONFIG_FRAMEBUFFER_CONSOLE=y
58CONFIG_USB=y
59CONFIG_USB_XHCI_HCD=y
60CONFIG_USB_XHCI_PLATFORM=y
61CONFIG_USB_EHCI_HCD=y
62CONFIG_USB_EHCI_HCD_PLATFORM=y
63CONFIG_USB_OHCI_HCD=y
64CONFIG_USB_OHCI_HCD_PLATFORM=y
65CONFIG_USB_STORAGE=y
66CONFIG_USB_UAS=y
67CONFIG_VIRTIO_MMIO=y
68CONFIG_SIFIVE_PLIC=y
69CONFIG_EXT4_FS=y
70CONFIG_EXT4_FS_POSIX_ACL=y
71CONFIG_AUTOFS4_FS=y
72CONFIG_MSDOS_FS=y
73CONFIG_VFAT_FS=y
74CONFIG_TMPFS=y
75CONFIG_TMPFS_POSIX_ACL=y
76CONFIG_NFS_FS=y
77CONFIG_NFS_V4=y
78CONFIG_NFS_V4_1=y
79CONFIG_NFS_V4_2=y
80CONFIG_ROOT_NFS=y
81CONFIG_CRYPTO_USER_API_HASH=y
82CONFIG_CRYPTO_DEV_VIRTIO=y
83CONFIG_PRINTK_TIME=y
84# CONFIG_RCU_TRACE is not set
arch/riscv/include/asm/fixmap.h+1−1
@@ -26,7 +26,7 @@ enum fixed_addresses { · 25 unmodified lines
26};26};
27 27
28#define FIXADDR_SIZE (__end_of_fixed_addresses * PAGE_SIZE)28#define FIXADDR_SIZE (__end_of_fixed_addresses * PAGE_SIZE)
29#define FIXADDR_TOP (PAGE_OFFSET)29#define FIXADDR_TOP (VMALLOC_START)
30#define FIXADDR_START (FIXADDR_TOP - FIXADDR_SIZE)30#define FIXADDR_START (FIXADDR_TOP - FIXADDR_SIZE)
31 31
32#define FIXMAP_PAGE_IO PAGE_KERNEL32#define FIXMAP_PAGE_IO PAGE_KERNEL
arch/riscv/include/asm/syscall.h+6−18
@@ -72,32 +72,20 @@ static inline void syscall_set_return_value(struct task_struct *task, · 71 unmodified lines
72 72
73static inline void syscall_get_arguments(struct task_struct *task,73static inline void syscall_get_arguments(struct task_struct *task,
74 struct pt_regs *regs,74 struct pt_regs *regs,
75 unsigned int i, unsigned int n,
76 unsigned long *args)75 unsigned long *args)
77{76{
78 BUG_ON(i + n > 6);77 args[0] = regs->orig_a0;
79 if (i == 0) {78 args++;
80 args[0] = regs->orig_a0;79 memcpy(args, &regs->a1, 5 * sizeof(args[0]));
81 args++;
82 i++;
83 n--;
84 }
85 memcpy(args, &regs->a1 + i * sizeof(regs->a1), n * sizeof(args[0]));
86}80}
87 81
88static inline void syscall_set_arguments(struct task_struct *task,82static inline void syscall_set_arguments(struct task_struct *task,
89 struct pt_regs *regs,83 struct pt_regs *regs,
90 unsigned int i, unsigned int n,
91 const unsigned long *args)84 const unsigned long *args)
92{85{
93 BUG_ON(i + n > 6);86 regs->orig_a0 = args[0];
94 if (i == 0) {87 args++;
95 regs->orig_a0 = args[0];88 memcpy(&regs->a1, args, 5 * sizeof(regs->a1));
96 args++;
97 i++;
98 n--;
99 }
100 memcpy(&regs->a1 + i * sizeof(regs->a1), args, n * sizeof(regs->a0));
101}89}
102 90
103static inline int syscall_get_arch(void)91static inline int syscall_get_arch(void)
arch/riscv/include/asm/uaccess.h+1−1
@@ -300,7 +300,7 @@ do { \ · 299 unmodified lines
300 " .balign 4\n" \300 " .balign 4\n" \
301 "4:\n" \301 "4:\n" \
302 " li %0, %6\n" \302 " li %0, %6\n" \
303 " jump 2b, %1\n" \303 " jump 3b, %1\n" \
304 " .previous\n" \304 " .previous\n" \
305 " .section __ex_table,\"a\"\n" \305 " .section __ex_table,\"a\"\n" \
306 " .balign " RISCV_SZPTR "\n" \306 " .balign " RISCV_SZPTR "\n" \
arch/riscv/kernel/Makefile+0−3
@@ -4,7 +4,6 @@ · 3 unmodified lines
4 4
5ifdef CONFIG_FTRACE5ifdef CONFIG_FTRACE
6CFLAGS_REMOVE_ftrace.o = -pg6CFLAGS_REMOVE_ftrace.o = -pg
7CFLAGS_REMOVE_setup.o = -pg
8endif7endif
9 8
10extra-y += head.o9extra-y += head.o
@@ -29,8 +28,6 @@ obj-y += vdso.o · 18 unmodified lines
29obj-y += cacheinfo.o28obj-y += cacheinfo.o
30obj-y += vdso/29obj-y += vdso/
31 30
32CFLAGS_setup.o := -mcmodel=medany
33
34obj-$(CONFIG_FPU) += fpu.o31obj-$(CONFIG_FPU) += fpu.o
35obj-$(CONFIG_SMP) += smpboot.o32obj-$(CONFIG_SMP) += smpboot.o
36obj-$(CONFIG_SMP) += smp.o33obj-$(CONFIG_SMP) += smp.o
arch/riscv/kernel/module.c+1−1
@@ -141,7 +141,7 @@ static int apply_r_riscv_hi20_rela(struct module *me, u32 *location, · 140 unmodified lines
141{141{
142 s32 hi20;142 s32 hi20;
143 143
144 if (IS_ENABLED(CMODEL_MEDLOW)) {144 if (IS_ENABLED(CONFIG_CMODEL_MEDLOW)) {
145 pr_err(145 pr_err(
146 "%s: target %016llx can not be addressed by the 32-bit offset from PC = %p\n",146 "%s: target %016llx can not be addressed by the 32-bit offset from PC = %p\n",
147 me->name, (long long)v, location);147 me->name, (long long)v, location);
arch/riscv/kernel/setup.c+0−8
@@ -48,14 +48,6 @@ struct screen_info screen_info = { · 47 unmodified lines
48};48};
49#endif49#endif
50 50
51unsigned long va_pa_offset;
52EXPORT_SYMBOL(va_pa_offset);
53unsigned long pfn_base;
54EXPORT_SYMBOL(pfn_base);
55
56unsigned long empty_zero_page[PAGE_SIZE / sizeof(unsigned long)] __page_aligned_bss;
57EXPORT_SYMBOL(empty_zero_page);
58
59/* The lucky hart to first increment this variable will boot the other cores */51/* The lucky hart to first increment this variable will boot the other cores */
60atomic_t hart_lottery;52atomic_t hart_lottery;
61unsigned long boot_cpu_hartid;53unsigned long boot_cpu_hartid;
arch/riscv/mm/Makefile+6−0
@@ -1,3 +1,9 @@
1
2CFLAGS_init.o := -mcmodel=medany
3ifdef CONFIG_FTRACE
4CFLAGS_REMOVE_init.o = -pg
5endif
6
1obj-y += init.o7obj-y += init.o
2obj-y += fault.o8obj-y += fault.o
3obj-y += extable.o9obj-y += extable.o
arch/riscv/mm/init.c+36−0
@@ -25,6 +25,10 @@ · 24 unmodified lines
25#include <asm/pgtable.h>25#include <asm/pgtable.h>
26#include <asm/io.h>26#include <asm/io.h>
27 27
28unsigned long empty_zero_page[PAGE_SIZE / sizeof(unsigned long)]
29 __page_aligned_bss;
30EXPORT_SYMBOL(empty_zero_page);
31
28static void __init zone_sizes_init(void)32static void __init zone_sizes_init(void)
29{33{
30 unsigned long max_zone_pfns[MAX_NR_ZONES] = { 0, };34 unsigned long max_zone_pfns[MAX_NR_ZONES] = { 0, };
@@ -117,6 +121,14 @@ void __init setup_bootmem(void) · 86 unmodified lines
117 */121 */
118 memblock_reserve(reg->base, vmlinux_end - reg->base);122 memblock_reserve(reg->base, vmlinux_end - reg->base);
119 mem_size = min(reg->size, (phys_addr_t)-PAGE_OFFSET);123 mem_size = min(reg->size, (phys_addr_t)-PAGE_OFFSET);
124
125 /*
126 * Remove memblock from the end of usable area to the
127 * end of region
128 */
129 if (reg->base + mem_size < end)
130 memblock_remove(reg->base + mem_size,
131 end - reg->base - mem_size);
120 }132 }
121 }133 }
122 BUG_ON(mem_size == 0);134 BUG_ON(mem_size == 0);
@@ -143,6 +155,11 @@ void __init setup_bootmem(void) · 20 unmodified lines
143 }155 }
144}156}
145 157
158unsigned long va_pa_offset;
159EXPORT_SYMBOL(va_pa_offset);
160unsigned long pfn_base;
161EXPORT_SYMBOL(pfn_base);
162
146pgd_t swapper_pg_dir[PTRS_PER_PGD] __page_aligned_bss;163pgd_t swapper_pg_dir[PTRS_PER_PGD] __page_aligned_bss;
147pgd_t trampoline_pg_dir[PTRS_PER_PGD] __initdata __aligned(PAGE_SIZE);164pgd_t trampoline_pg_dir[PTRS_PER_PGD] __initdata __aligned(PAGE_SIZE);
148 165
@@ -172,6 +189,25 @@ void __set_fixmap(enum fixed_addresses idx, phys_addr_t phys, pgprot_t prot) · 23 unmodified lines
172 }189 }
173}190}
174 191
192/*
193 * setup_vm() is called from head.S with MMU-off.
194 *
195 * Following requirements should be honoured for setup_vm() to work
196 * correctly:
197 * 1) It should use PC-relative addressing for accessing kernel symbols.
198 * To achieve this we always use GCC cmodel=medany.
199 * 2) The compiler instrumentation for FTRACE will not work for setup_vm()
200 * so disable compiler instrumentation when FTRACE is enabled.
201 *
202 * Currently, the above requirements are honoured by using custom CFLAGS
203 * for init.o in mm/Makefile.
204 */
205
206#ifndef __riscv_cmodel_medany
207#error "setup_vm() is called from head.S before relocate so it should "
208 "not use absolute addressing."
209#endif
210
175asmlinkage void __init setup_vm(void)211asmlinkage void __init setup_vm(void)
176{212{
177 extern char _start;213 extern char _start;
arch/s390/boot/mem_detect.c+1−1
@@ -25,7 +25,7 @@ static void *mem_detect_alloc_extended(void) · 24 unmodified lines
25{25{
26 unsigned long offset = ALIGN(mem_safe_offset(), sizeof(u64));26 unsigned long offset = ALIGN(mem_safe_offset(), sizeof(u64));
27 27
28 if (IS_ENABLED(BLK_DEV_INITRD) && INITRD_START && INITRD_SIZE &&28 if (IS_ENABLED(CONFIG_BLK_DEV_INITRD) && INITRD_START && INITRD_SIZE &&
29 INITRD_START < offset + ENTRIES_EXTENDED_MAX)29 INITRD_START < offset + ENTRIES_EXTENDED_MAX)
30 offset = ALIGN(INITRD_START + INITRD_SIZE, sizeof(u64));30 offset = ALIGN(INITRD_START + INITRD_SIZE, sizeof(u64));
31 31
arch/s390/include/asm/syscall.h+10−18
@@ -56,40 +56,32 @@ static inline void syscall_set_return_value(struct task_struct *task, · 55 unmodified lines
56 56
57static inline void syscall_get_arguments(struct task_struct *task,57static inline void syscall_get_arguments(struct task_struct *task,
58 struct pt_regs *regs,58 struct pt_regs *regs,
59 unsigned int i, unsigned int n,
60 unsigned long *args)59 unsigned long *args)
61{60{
62 unsigned long mask = -1UL;61 unsigned long mask = -1UL;
62 unsigned int n = 6;
63 63
64 /*
65 * No arguments for this syscall, there's nothing to do.
66 */
67 if (!n)
68 return;
69
70 BUG_ON(i + n > 6);
71#ifdef CONFIG_COMPAT64#ifdef CONFIG_COMPAT
72 if (test_tsk_thread_flag(task, TIF_31BIT))65 if (test_tsk_thread_flag(task, TIF_31BIT))
73 mask = 0xffffffff;66 mask = 0xffffffff;
74#endif67#endif
75 while (n-- > 0)68 while (n-- > 0)
76 if (i + n > 0)69 if (n > 0)
77 args[n] = regs->gprs[2 + i + n] & mask;70 args[n] = regs->gprs[2 + n] & mask;
78 if (i == 0)71
79 args[0] = regs->orig_gpr2 & mask;72 args[0] = regs->orig_gpr2 & mask;
80}73}
81 74
82static inline void syscall_set_arguments(struct task_struct *task,75static inline void syscall_set_arguments(struct task_struct *task,
83 struct pt_regs *regs,76 struct pt_regs *regs,
84 unsigned int i, unsigned int n,
85 const unsigned long *args)77 const unsigned long *args)
86{78{
87 BUG_ON(i + n > 6);79 unsigned int n = 6;
80
88 while (n-- > 0)81 while (n-- > 0)
89 if (i + n > 0)82 if (n > 0)
90 regs->gprs[2 + i + n] = args[n];83 regs->gprs[2 + n] = args[n];
91 if (i == 0)84 regs->orig_gpr2 = args[0];
92 regs->orig_gpr2 = args[0];
93}85}
94 86
95static inline int syscall_get_arch(void)87static inline int syscall_get_arch(void)
arch/s390/kernel/fpu.c+1−1
@@ -23,7 +23,7 @@ void __kernel_fpu_begin(struct kernel_fpu *state, u32 flags) · 22 unmodified lines
23 23
24 if (flags & KERNEL_FPC)24 if (flags & KERNEL_FPC)
25 /* Save floating point control */25 /* Save floating point control */
26 asm volatile("stfpc %0" : "=m" (state->fpc));26 asm volatile("stfpc %0" : "=Q" (state->fpc));
27 27
28 if (!MACHINE_HAS_VX) {28 if (!MACHINE_HAS_VX) {
29 if (flags & KERNEL_VXR_V0V7) {29 if (flags & KERNEL_VXR_V0V7) {
arch/s390/kernel/vtime.c+4−4
@@ -37,7 +37,7 @@ static inline u64 get_vtimer(void) · 36 unmodified lines
37{37{
38 u64 timer;38 u64 timer;
39 39
40 asm volatile("stpt %0" : "=m" (timer));40 asm volatile("stpt %0" : "=Q" (timer));
41 return timer;41 return timer;
42}42}
43 43
@@ -48,7 +48,7 @@ static inline void set_vtimer(u64 expires) · 4 unmodified lines
48 asm volatile(48 asm volatile(
49 " stpt %0\n" /* Store current cpu timer value */49 " stpt %0\n" /* Store current cpu timer value */
50 " spt %1" /* Set new value imm. afterwards */50 " spt %1" /* Set new value imm. afterwards */
51 : "=m" (timer) : "m" (expires));51 : "=Q" (timer) : "Q" (expires));
52 S390_lowcore.system_timer += S390_lowcore.last_update_timer - timer;52 S390_lowcore.system_timer += S390_lowcore.last_update_timer - timer;
53 S390_lowcore.last_update_timer = expires;53 S390_lowcore.last_update_timer = expires;
54}54}
@@ -135,8 +135,8 @@ static int do_account_vtime(struct task_struct *tsk) · 80 unmodified lines
135#else135#else
136 " stck %1" /* Store current tod clock value */136 " stck %1" /* Store current tod clock value */
137#endif137#endif
138 : "=m" (S390_lowcore.last_update_timer),138 : "=Q" (S390_lowcore.last_update_timer),
139 "=m" (S390_lowcore.last_update_clock));139 "=Q" (S390_lowcore.last_update_clock));
140 clock = S390_lowcore.last_update_clock - clock;140 clock = S390_lowcore.last_update_clock - clock;
141 timer -= S390_lowcore.last_update_timer;141 timer -= S390_lowcore.last_update_timer;
142 142
arch/sh/boards/of-generic.c+2−2
@@ -164,10 +164,10 @@ static struct sh_machine_vector __initmv sh_of_generic_mv = { · 163 unmodified lines
164 164
165struct sh_clk_ops;165struct sh_clk_ops;
166 166
167void __init arch_init_clk_ops(struct sh_clk_ops **ops, int idx)167void __init __weak arch_init_clk_ops(struct sh_clk_ops **ops, int idx)
168{168{
169}169}
170 170
171void __init plat_irq_setup(void)171void __init __weak plat_irq_setup(void)
172{172{
173}173}
arch/sh/include/asm/syscall_32.h+12−35
@@ -48,51 +48,28 @@ static inline void syscall_set_return_value(struct task_struct *task, · 47 unmodified lines
48 48
49static inline void syscall_get_arguments(struct task_struct *task,49static inline void syscall_get_arguments(struct task_struct *task,
50 struct pt_regs *regs,50 struct pt_regs *regs,
51 unsigned int i, unsigned int n,
52 unsigned long *args)51 unsigned long *args)
53{52{
54 /*
55 * Do this simply for now. If we need to start supporting
56 * fetching arguments from arbitrary indices, this will need some
57 * extra logic. Presently there are no in-tree users that depend
58 * on this behaviour.
59 */
60 BUG_ON(i);
61 53
62 /* Argument pattern is: R4, R5, R6, R7, R0, R1 */54 /* Argument pattern is: R4, R5, R6, R7, R0, R1 */
63 switch (n) {55 args[5] = regs->regs[1];
64 case 6: args[5] = regs->regs[1];56 args[4] = regs->regs[0];
65 case 5: args[4] = regs->regs[0];57 args[3] = regs->regs[7];
66 case 4: args[3] = regs->regs[7];58 args[2] = regs->regs[6];
67 case 3: args[2] = regs->regs[6];59 args[1] = regs->regs[5];
68 case 2: args[1] = regs->regs[5];60 args[0] = regs->regs[4];
69 case 1: args[0] = regs->regs[4];
70 case 0:
71 break;
72 default:
73 BUG();
74 }
75}61}
76 62
77static inline void syscall_set_arguments(struct task_struct *task,63static inline void syscall_set_arguments(struct task_struct *task,
78 struct pt_regs *regs,64 struct pt_regs *regs,
79 unsigned int i, unsigned int n,
80 const unsigned long *args)65 const unsigned long *args)
81{66{
82 /* Same note as above applies */67 regs->regs[1] = args[5];
83 BUG_ON(i);68 regs->regs[0] = args[4];
84 69 regs->regs[7] = args[3];
85 switch (n) {70 regs->regs[6] = args[2];
86 case 6: regs->regs[1] = args[5];71 regs->regs[5] = args[1];
87 case 5: regs->regs[0] = args[4];72 regs->regs[4] = args[0];
88 case 4: regs->regs[7] = args[3];
89 case 3: regs->regs[6] = args[2];
90 case 2: regs->regs[5] = args[1];
91 case 1: regs->regs[4] = args[0];
92 break;
93 default:
94 BUG();
95 }
96}73}
97 74
98static inline int syscall_get_arch(void)75static inline int syscall_get_arch(void)
arch/sh/include/asm/syscall_64.h+2−6
@@ -47,20 +47,16 @@ static inline void syscall_set_return_value(struct task_struct *task, · 46 unmodified lines
47 47
48static inline void syscall_get_arguments(struct task_struct *task,48static inline void syscall_get_arguments(struct task_struct *task,
49 struct pt_regs *regs,49 struct pt_regs *regs,
50 unsigned int i, unsigned int n,
51 unsigned long *args)50 unsigned long *args)
52{51{
53 BUG_ON(i + n > 6);52 memcpy(args, &regs->regs[2], 6 * sizeof(args[0]));
54 memcpy(args, &regs->regs[2 + i], n * sizeof(args[0]));
55}53}
56 54
57static inline void syscall_set_arguments(struct task_struct *task,55static inline void syscall_set_arguments(struct task_struct *task,
58 struct pt_regs *regs,56 struct pt_regs *regs,
59 unsigned int i, unsigned int n,
60 const unsigned long *args)57 const unsigned long *args)
61{58{
62 BUG_ON(i + n > 6);59 memcpy(&regs->regs[2], args, 6 * sizeof(args[0]));
63 memcpy(&regs->regs[2 + i], args, n * sizeof(args[0]));
64}60}
65 61
66static inline int syscall_get_arch(void)62static inline int syscall_get_arch(void)
arch/sparc/include/asm/syscall.h+5−6
@@ -96,11 +96,11 @@ static inline void syscall_set_return_value(struct task_struct *task, · 95 unmodified lines
96 96
97static inline void syscall_get_arguments(struct task_struct *task,97static inline void syscall_get_arguments(struct task_struct *task,
98 struct pt_regs *regs,98 struct pt_regs *regs,
99 unsigned int i, unsigned int n,
100 unsigned long *args)99 unsigned long *args)
101{100{
102 int zero_extend = 0;101 int zero_extend = 0;
103 unsigned int j;102 unsigned int j;
103 unsigned int n = 6;
104 104
105#ifdef CONFIG_SPARC64105#ifdef CONFIG_SPARC64
106 if (test_tsk_thread_flag(task, TIF_32BIT))106 if (test_tsk_thread_flag(task, TIF_32BIT))
@@ -108,7 +108,7 @@ static inline void syscall_get_arguments(struct task_struct *task, · 1 unmodified line
108#endif108#endif
109 109
110 for (j = 0; j < n; j++) {110 for (j = 0; j < n; j++) {
111 unsigned long val = regs->u_regs[UREG_I0 + i + j];111 unsigned long val = regs->u_regs[UREG_I0 + j];
112 112
113 if (zero_extend)113 if (zero_extend)
114 args[j] = (u32) val;114 args[j] = (u32) val;
@@ -119,13 +119,12 @@ static inline void syscall_get_arguments(struct task_struct *task, · 4 unmodified lines
119 119
120static inline void syscall_set_arguments(struct task_struct *task,120static inline void syscall_set_arguments(struct task_struct *task,
121 struct pt_regs *regs,121 struct pt_regs *regs,
122 unsigned int i, unsigned int n,
123 const unsigned long *args)122 const unsigned long *args)
124{123{
125 unsigned int j;124 unsigned int i;
126 125
127 for (j = 0; j < n; j++)126 for (i = 0; i < 6; i++)
128 regs->u_regs[UREG_I0 + i + j] = args[j];127 regs->u_regs[UREG_I0 + i] = args[i];
129}128}
130 129
131static inline int syscall_get_arch(void)130static inline int syscall_get_arch(void)
arch/sparc/kernel/pci_sun4v.c+11−9
@@ -73,6 +73,11 @@ static inline void iommu_batch_start(struct device *dev, unsigned long prot, uns · 72 unmodified lines
73 p->npages = 0;73 p->npages = 0;
74}74}
75 75
76static inline bool iommu_use_atu(struct iommu *iommu, u64 mask)
77{
78 return iommu->atu && mask > DMA_BIT_MASK(32);
79}
80
76/* Interrupts must be disabled. */81/* Interrupts must be disabled. */
77static long iommu_batch_flush(struct iommu_batch *p, u64 mask)82static long iommu_batch_flush(struct iommu_batch *p, u64 mask)
78{83{
@@ -92,7 +97,7 @@ static long iommu_batch_flush(struct iommu_batch *p, u64 mask) · 13 unmodified lines
92 prot &= (HV_PCI_MAP_ATTR_READ | HV_PCI_MAP_ATTR_WRITE);97 prot &= (HV_PCI_MAP_ATTR_READ | HV_PCI_MAP_ATTR_WRITE);
93 98
94 while (npages != 0) {99 while (npages != 0) {
95 if (mask <= DMA_BIT_MASK(32) || !pbm->iommu->atu) {100 if (!iommu_use_atu(pbm->iommu, mask)) {
96 num = pci_sun4v_iommu_map(devhandle,101 num = pci_sun4v_iommu_map(devhandle,
97 HV_PCI_TSBID(0, entry),102 HV_PCI_TSBID(0, entry),
98 npages,103 npages,
@@ -179,7 +184,6 @@ static void *dma_4v_alloc_coherent(struct device *dev, size_t size, · 80 unmodified lines
179 unsigned long flags, order, first_page, npages, n;184 unsigned long flags, order, first_page, npages, n;
180 unsigned long prot = 0;185 unsigned long prot = 0;
181 struct iommu *iommu;186 struct iommu *iommu;
182 struct atu *atu;
183 struct iommu_map_table *tbl;187 struct iommu_map_table *tbl;
184 struct page *page;188 struct page *page;
185 void *ret;189 void *ret;
@@ -205,13 +209,11 @@ static void *dma_4v_alloc_coherent(struct device *dev, size_t size, · 19 unmodified lines
205 memset((char *)first_page, 0, PAGE_SIZE << order);209 memset((char *)first_page, 0, PAGE_SIZE << order);
206 210
207 iommu = dev->archdata.iommu;211 iommu = dev->archdata.iommu;
208 atu = iommu->atu;
209
210 mask = dev->coherent_dma_mask;212 mask = dev->coherent_dma_mask;
211 if (mask <= DMA_BIT_MASK(32) || !atu)213 if (!iommu_use_atu(iommu, mask))
212 tbl = &iommu->tbl;214 tbl = &iommu->tbl;
213 else215 else
214 tbl = &atu->tbl;216 tbl = &iommu->atu->tbl;
215 217
216 entry = iommu_tbl_range_alloc(dev, tbl, npages, NULL,218 entry = iommu_tbl_range_alloc(dev, tbl, npages, NULL,
217 (unsigned long)(-1), 0);219 (unsigned long)(-1), 0);
@@ -333,7 +335,7 @@ static void dma_4v_free_coherent(struct device *dev, size_t size, void *cpu, · 115 unmodified lines
333 atu = iommu->atu;335 atu = iommu->atu;
334 devhandle = pbm->devhandle;336 devhandle = pbm->devhandle;
335 337
336 if (dvma <= DMA_BIT_MASK(32)) {338 if (!iommu_use_atu(iommu, dvma)) {
337 tbl = &iommu->tbl;339 tbl = &iommu->tbl;
338 iotsb_num = 0; /* we don't care for legacy iommu */340 iotsb_num = 0; /* we don't care for legacy iommu */
339 } else {341 } else {
@@ -374,7 +376,7 @@ static dma_addr_t dma_4v_map_page(struct device *dev, struct page *page, · 34 unmodified lines
374 npages >>= IO_PAGE_SHIFT;376 npages >>= IO_PAGE_SHIFT;
375 377
376 mask = *dev->dma_mask;378 mask = *dev->dma_mask;
377 if (mask <= DMA_BIT_MASK(32))379 if (!iommu_use_atu(iommu, mask))
378 tbl = &iommu->tbl;380 tbl = &iommu->tbl;
379 else381 else
380 tbl = &atu->tbl;382 tbl = &atu->tbl;
@@ -510,7 +512,7 @@ static int dma_4v_map_sg(struct device *dev, struct scatterlist *sglist, · 129 unmodified lines
510 IO_PAGE_SIZE) >> IO_PAGE_SHIFT;512 IO_PAGE_SIZE) >> IO_PAGE_SHIFT;
511 513
512 mask = *dev->dma_mask;514 mask = *dev->dma_mask;
513 if (mask <= DMA_BIT_MASK(32))515 if (!iommu_use_atu(iommu, mask))
514 tbl = &iommu->tbl;516 tbl = &iommu->tbl;
515 else517 else
516 tbl = &atu->tbl;518 tbl = &atu->tbl;
arch/um/include/asm/syscall-generic.h+12−66
@@ -53,84 +53,30 @@ static inline void syscall_set_return_value(struct task_struct *task, · 52 unmodified lines
53 53
54static inline void syscall_get_arguments(struct task_struct *task,54static inline void syscall_get_arguments(struct task_struct *task,
55 struct pt_regs *regs,55 struct pt_regs *regs,
56 unsigned int i, unsigned int n,
57 unsigned long *args)56 unsigned long *args)
58{57{
59 const struct uml_pt_regs *r = &regs->regs;58 const struct uml_pt_regs *r = &regs->regs;
60 59
61 switch (i) {60 *args++ = UPT_SYSCALL_ARG1(r);
62 case 0:61 *args++ = UPT_SYSCALL_ARG2(r);
63 if (!n--)62 *args++ = UPT_SYSCALL_ARG3(r);
64 break;63 *args++ = UPT_SYSCALL_ARG4(r);
65 *args++ = UPT_SYSCALL_ARG1(r);64 *args++ = UPT_SYSCALL_ARG5(r);
66 case 1:65 *args = UPT_SYSCALL_ARG6(r);
67 if (!n--)
68 break;
69 *args++ = UPT_SYSCALL_ARG2(r);
70 case 2:
71 if (!n--)
72 break;
73 *args++ = UPT_SYSCALL_ARG3(r);
74 case 3:
75 if (!n--)
76 break;
77 *args++ = UPT_SYSCALL_ARG4(r);
78 case 4:
79 if (!n--)
80 break;
81 *args++ = UPT_SYSCALL_ARG5(r);
82 case 5:
83 if (!n--)
84 break;
85 *args++ = UPT_SYSCALL_ARG6(r);
86 case 6:
87 if (!n--)
88 break;
89 default:
90 BUG();
91 break;
92 }
93}66}
94 67
95static inline void syscall_set_arguments(struct task_struct *task,68static inline void syscall_set_arguments(struct task_struct *task,
96 struct pt_regs *regs,69 struct pt_regs *regs,
97 unsigned int i, unsigned int n,
98 const unsigned long *args)70 const unsigned long *args)
99{71{
100 struct uml_pt_regs *r = &regs->regs;72 struct uml_pt_regs *r = &regs->regs;
101 73
102 switch (i) {74 UPT_SYSCALL_ARG1(r) = *args++;
103 case 0:75 UPT_SYSCALL_ARG2(r) = *args++;
104 if (!n--)76 UPT_SYSCALL_ARG3(r) = *args++;
105 break;77 UPT_SYSCALL_ARG4(r) = *args++;
106 UPT_SYSCALL_ARG1(r) = *args++;78 UPT_SYSCALL_ARG5(r) = *args++;
107 case 1:79 UPT_SYSCALL_ARG6(r) = *args;
108 if (!n--)
109 break;
110 UPT_SYSCALL_ARG2(r) = *args++;
111 case 2:
112 if (!n--)
113 break;
114 UPT_SYSCALL_ARG3(r) = *args++;
115 case 3:
116 if (!n--)
117 break;
118 UPT_SYSCALL_ARG4(r) = *args++;
119 case 4:
120 if (!n--)
121 break;
122 UPT_SYSCALL_ARG5(r) = *args++;
123 case 5:
124 if (!n--)
125 break;
126 UPT_SYSCALL_ARG6(r) = *args++;
127 case 6:
128 if (!n--)
129 break;
130 default:
131 BUG();
132 break;
133 }
134}80}
135 81
136/* See arch/x86/um/asm/syscall.h for syscall_get_arch() definition. */82/* See arch/x86/um/asm/syscall.h for syscall_get_arch() definition. */
arch/x86/Kconfig+1−1
@@ -1499,7 +1499,7 @@ config X86_CPA_STATISTICS · 1498 unmodified lines
1499 depends on DEBUG_FS1499 depends on DEBUG_FS
1500 ---help---1500 ---help---
1501 Expose statistics about the Change Page Attribute mechanims, which1501 Expose statistics about the Change Page Attribute mechanims, which
1502 helps to determine the effectivness of preserving large and huge1502 helps to determine the effectiveness of preserving large and huge
1503 page mappings when mapping protections are changed.1503 page mappings when mapping protections are changed.
1504 1504
1505config ARCH_HAS_MEM_ENCRYPT1505config ARCH_HAS_MEM_ENCRYPT
arch/x86/crypto/poly1305-avx2-x86_64.S+10−4
@@ -323,6 +323,12 @@ ENTRY(poly1305_4block_avx2) · 322 unmodified lines
323 vpaddq t2,t1,t1323 vpaddq t2,t1,t1
324 vmovq t1x,d4324 vmovq t1x,d4
325 325
326 # Now do a partial reduction mod (2^130)-5, carrying h0 -> h1 -> h2 ->
327 # h3 -> h4 -> h0 -> h1 to get h0,h2,h3,h4 < 2^26 and h1 < 2^26 + a small
328 # amount. Careful: we must not assume the carry bits 'd0 >> 26',
329 # 'd1 >> 26', 'd2 >> 26', 'd3 >> 26', and '(d4 >> 26) * 5' fit in 32-bit
330 # integers. It's true in a single-block implementation, but not here.
331
326 # d1 += d0 >> 26332 # d1 += d0 >> 26
327 mov d0,%rax333 mov d0,%rax
328 shr $26,%rax334 shr $26,%rax
@@ -361,16 +367,16 @@ ENTRY(poly1305_4block_avx2) · 32 unmodified lines
361 # h0 += (d4 >> 26) * 5367 # h0 += (d4 >> 26) * 5
362 mov d4,%rax368 mov d4,%rax
363 shr $26,%rax369 shr $26,%rax
364 lea (%eax,%eax,4),%eax370 lea (%rax,%rax,4),%rax
365 add %eax,%ebx371 add %rax,%rbx
366 # h4 = d4 & 0x3ffffff372 # h4 = d4 & 0x3ffffff
367 mov d4,%rax373 mov d4,%rax
368 and $0x3ffffff,%eax374 and $0x3ffffff,%eax
369 mov %eax,h4375 mov %eax,h4
370 376
371 # h1 += h0 >> 26377 # h1 += h0 >> 26
372 mov %ebx,%eax378 mov %rbx,%rax
373 shr $26,%eax379 shr $26,%rax
374 add %eax,h1380 add %eax,h1
375 # h0 = h0 & 0x3ffffff381 # h0 = h0 & 0x3ffffff
376 andl $0x3ffffff,%ebx382 andl $0x3ffffff,%ebx
arch/x86/crypto/poly1305-sse2-x86_64.S+14−8
@@ -253,16 +253,16 @@ ENTRY(poly1305_block_sse2) · 252 unmodified lines
253 # h0 += (d4 >> 26) * 5253 # h0 += (d4 >> 26) * 5
254 mov d4,%rax254 mov d4,%rax
255 shr $26,%rax255 shr $26,%rax
256 lea (%eax,%eax,4),%eax256 lea (%rax,%rax,4),%rax
257 add %eax,%ebx257 add %rax,%rbx
258 # h4 = d4 & 0x3ffffff258 # h4 = d4 & 0x3ffffff
259 mov d4,%rax259 mov d4,%rax
260 and $0x3ffffff,%eax260 and $0x3ffffff,%eax
261 mov %eax,h4261 mov %eax,h4
262 262
263 # h1 += h0 >> 26263 # h1 += h0 >> 26
264 mov %ebx,%eax264 mov %rbx,%rax
265 shr $26,%eax265 shr $26,%rax
266 add %eax,h1266 add %eax,h1
267 # h0 = h0 & 0x3ffffff267 # h0 = h0 & 0x3ffffff
268 andl $0x3ffffff,%ebx268 andl $0x3ffffff,%ebx
@@ -524,6 +524,12 @@ ENTRY(poly1305_2block_sse2) · 255 unmodified lines
524 paddq t2,t1524 paddq t2,t1
525 movq t1,d4525 movq t1,d4
526 526
527 # Now do a partial reduction mod (2^130)-5, carrying h0 -> h1 -> h2 ->
528 # h3 -> h4 -> h0 -> h1 to get h0,h2,h3,h4 < 2^26 and h1 < 2^26 + a small
529 # amount. Careful: we must not assume the carry bits 'd0 >> 26',
530 # 'd1 >> 26', 'd2 >> 26', 'd3 >> 26', and '(d4 >> 26) * 5' fit in 32-bit
531 # integers. It's true in a single-block implementation, but not here.
532
527 # d1 += d0 >> 26533 # d1 += d0 >> 26
528 mov d0,%rax534 mov d0,%rax
529 shr $26,%rax535 shr $26,%rax
@@ -562,16 +568,16 @@ ENTRY(poly1305_2block_sse2) · 32 unmodified lines
562 # h0 += (d4 >> 26) * 5568 # h0 += (d4 >> 26) * 5
563 mov d4,%rax569 mov d4,%rax
564 shr $26,%rax570 shr $26,%rax
565 lea (%eax,%eax,4),%eax571 lea (%rax,%rax,4),%rax
566 add %eax,%ebx572 add %rax,%rbx
567 # h4 = d4 & 0x3ffffff573 # h4 = d4 & 0x3ffffff
568 mov d4,%rax574 mov d4,%rax
569 and $0x3ffffff,%eax575 and $0x3ffffff,%eax
570 mov %eax,h4576 mov %eax,h4
571 577
572 # h1 += h0 >> 26578 # h1 += h0 >> 26
573 mov %ebx,%eax579 mov %rbx,%rax
574 shr $26,%eax580 shr $26,%rax
575 add %eax,h1581 add %eax,h1
576 # h0 = h0 & 0x3ffffff582 # h0 = h0 & 0x3ffffff
577 andl $0x3ffffff,%ebx583 andl $0x3ffffff,%ebx
arch/x86/events/amd/core.c+161−14
@@ -3,10 +3,14 @@ · 2 unmodified lines
3#include <linux/types.h>3#include <linux/types.h>
4#include <linux/init.h>4#include <linux/init.h>
5#include <linux/slab.h>5#include <linux/slab.h>
6#include <linux/delay.h>
6#include <asm/apicdef.h>7#include <asm/apicdef.h>
8#include <asm/nmi.h>
7 9
8#include "../perf_event.h"10#include "../perf_event.h"
9 11
12static DEFINE_PER_CPU(unsigned int, perf_nmi_counter);
13
10static __initconst const u64 amd_hw_cache_event_ids14static __initconst const u64 amd_hw_cache_event_ids
11 [PERF_COUNT_HW_CACHE_MAX]15 [PERF_COUNT_HW_CACHE_MAX]
12 [PERF_COUNT_HW_CACHE_OP_MAX]16 [PERF_COUNT_HW_CACHE_OP_MAX]
@@ -113,22 +117,39 @@ static __initconst const u64 amd_hw_cache_event_ids · 100 unmodified lines
113};117};
114 118
115/*119/*
116 * AMD Performance Monitor K7 and later.120 * AMD Performance Monitor K7 and later, up to and including Family 16h:
117 */121 */
118static const u64 amd_perfmon_event_map[PERF_COUNT_HW_MAX] =122static const u64 amd_perfmon_event_map[PERF_COUNT_HW_MAX] =
119{123{
120 [PERF_COUNT_HW_CPU_CYCLES] = 0x0076,124 [PERF_COUNT_HW_CPU_CYCLES] = 0x0076,
121 [PERF_COUNT_HW_INSTRUCTIONS] = 0x00c0,125 [PERF_COUNT_HW_INSTRUCTIONS] = 0x00c0,
122 [PERF_COUNT_HW_CACHE_REFERENCES] = 0x077d,126 [PERF_COUNT_HW_CACHE_REFERENCES] = 0x077d,
123 [PERF_COUNT_HW_CACHE_MISSES] = 0x077e,127 [PERF_COUNT_HW_CACHE_MISSES] = 0x077e,
124 [PERF_COUNT_HW_BRANCH_INSTRUCTIONS] = 0x00c2,128 [PERF_COUNT_HW_BRANCH_INSTRUCTIONS] = 0x00c2,
125 [PERF_COUNT_HW_BRANCH_MISSES] = 0x00c3,129 [PERF_COUNT_HW_BRANCH_MISSES] = 0x00c3,
126 [PERF_COUNT_HW_STALLED_CYCLES_FRONTEND] = 0x00d0, /* "Decoder empty" event */130 [PERF_COUNT_HW_STALLED_CYCLES_FRONTEND] = 0x00d0, /* "Decoder empty" event */
127 [PERF_COUNT_HW_STALLED_CYCLES_BACKEND] = 0x00d1, /* "Dispatch stalls" event */131 [PERF_COUNT_HW_STALLED_CYCLES_BACKEND] = 0x00d1, /* "Dispatch stalls" event */
132};
133
134/*
135 * AMD Performance Monitor Family 17h and later:
136 */
137static const u64 amd_f17h_perfmon_event_map[PERF_COUNT_HW_MAX] =
138{
139 [PERF_COUNT_HW_CPU_CYCLES] = 0x0076,
140 [PERF_COUNT_HW_INSTRUCTIONS] = 0x00c0,
141 [PERF_COUNT_HW_CACHE_REFERENCES] = 0xff60,
142 [PERF_COUNT_HW_BRANCH_INSTRUCTIONS] = 0x00c2,
143 [PERF_COUNT_HW_BRANCH_MISSES] = 0x00c3,
144 [PERF_COUNT_HW_STALLED_CYCLES_FRONTEND] = 0x0287,
145 [PERF_COUNT_HW_STALLED_CYCLES_BACKEND] = 0x0187,
128};146};
129 147
130static u64 amd_pmu_event_map(int hw_event)148static u64 amd_pmu_event_map(int hw_event)
131{149{
150 if (boot_cpu_data.x86 >= 0x17)
151 return amd_f17h_perfmon_event_map[hw_event];
152
132 return amd_perfmon_event_map[hw_event];153 return amd_perfmon_event_map[hw_event];
133}154}
134 155
@@ -429,6 +450,132 @@ static void amd_pmu_cpu_dead(int cpu) · 294 unmodified lines
429 }450 }
430}451}
431 452
453/*
454 * When a PMC counter overflows, an NMI is used to process the event and
455 * reset the counter. NMI latency can result in the counter being updated
456 * before the NMI can run, which can result in what appear to be spurious
457 * NMIs. This function is intended to wait for the NMI to run and reset
458 * the counter to avoid possible unhandled NMI messages.
459 */
460#define OVERFLOW_WAIT_COUNT 50
461
462static void amd_pmu_wait_on_overflow(int idx)
463{
464 unsigned int i;
465 u64 counter;
466
467 /*
468 * Wait for the counter to be reset if it has overflowed. This loop
469 * should exit very, very quickly, but just in case, don't wait
470 * forever...
471 */
472 for (i = 0; i < OVERFLOW_WAIT_COUNT; i++) {
473 rdmsrl(x86_pmu_event_addr(idx), counter);
474 if (counter & (1ULL << (x86_pmu.cntval_bits - 1)))
475 break;
476
477 /* Might be in IRQ context, so can't sleep */
478 udelay(1);
479 }
480}
481
482static void amd_pmu_disable_all(void)
483{
484 struct cpu_hw_events *cpuc = this_cpu_ptr(&cpu_hw_events);
485 int idx;
486
487 x86_pmu_disable_all();
488
489 /*
490 * This shouldn't be called from NMI context, but add a safeguard here
491 * to return, since if we're in NMI context we can't wait for an NMI
492 * to reset an overflowed counter value.
493 */
494 if (in_nmi())
495 return;
496
497 /*
498 * Check each counter for overflow and wait for it to be reset by the
499 * NMI if it has overflowed. This relies on the fact that all active
500 * counters are always enabled when this function is caled and
501 * ARCH_PERFMON_EVENTSEL_INT is always set.
502 */
503 for (idx = 0; idx < x86_pmu.num_counters; idx++) {
504 if (!test_bit(idx, cpuc->active_mask))
505 continue;
506
507 amd_pmu_wait_on_overflow(idx);
508 }
509}
510
511static void amd_pmu_disable_event(struct perf_event *event)
512{
513 x86_pmu_disable_event(event);
514
515 /*
516 * This can be called from NMI context (via x86_pmu_stop). The counter
517 * may have overflowed, but either way, we'll never see it get reset
518 * by the NMI if we're already in the NMI. And the NMI latency support
519 * below will take care of any pending NMI that might have been
520 * generated by the overflow.
521 */
522 if (in_nmi())
523 return;
524
525 amd_pmu_wait_on_overflow(event->hw.idx);
526}
527
528/*
529 * Because of NMI latency, if multiple PMC counters are active or other sources
530 * of NMIs are received, the perf NMI handler can handle one or more overflowed
531 * PMC counters outside of the NMI associated with the PMC overflow. If the NMI
532 * doesn't arrive at the LAPIC in time to become a pending NMI, then the kernel
533 * back-to-back NMI support won't be active. This PMC handler needs to take into
534 * account that this can occur, otherwise this could result in unknown NMI
535 * messages being issued. Examples of this is PMC overflow while in the NMI
536 * handler when multiple PMCs are active or PMC overflow while handling some
537 * other source of an NMI.
538 *
539 * Attempt to mitigate this by using the number of active PMCs to determine
540 * whether to return NMI_HANDLED if the perf NMI handler did not handle/reset
541 * any PMCs. The per-CPU perf_nmi_counter variable is set to a minimum of the
542 * number of active PMCs or 2. The value of 2 is used in case an NMI does not
543 * arrive at the LAPIC in time to be collapsed into an already pending NMI.
544 */
545static int amd_pmu_handle_irq(struct pt_regs *regs)
546{
547 struct cpu_hw_events *cpuc = this_cpu_ptr(&cpu_hw_events);
548 int active, handled;
549
550 /*
551 * Obtain the active count before calling x86_pmu_handle_irq() since
552 * it is possible that x86_pmu_handle_irq() may make a counter
553 * inactive (through x86_pmu_stop).
554 */
555 active = __bitmap_weight(cpuc->active_mask, X86_PMC_IDX_MAX);
556
557 /* Process any counter overflows */
558 handled = x86_pmu_handle_irq(regs);
559
560 /*
561 * If a counter was handled, record the number of possible remaining
562 * NMIs that can occur.
563 */
564 if (handled) {
565 this_cpu_write(perf_nmi_counter,
566 min_t(unsigned int, 2, active));
567
568 return handled;
569 }
570
571 if (!this_cpu_read(perf_nmi_counter))
572 return NMI_DONE;
573
574 this_cpu_dec(perf_nmi_counter);
575
576 return NMI_HANDLED;
577}
578
432static struct event_constraint *579static struct event_constraint *
433amd_get_event_constraints(struct cpu_hw_events *cpuc, int idx,580amd_get_event_constraints(struct cpu_hw_events *cpuc, int idx,
434 struct perf_event *event)581 struct perf_event *event)
@@ -621,11 +768,11 @@ static ssize_t amd_event_sysfs_show(char *page, u64 config) · 186 unmodified lines
621 768
622static __initconst const struct x86_pmu amd_pmu = {769static __initconst const struct x86_pmu amd_pmu = {
623 .name = "AMD",770 .name = "AMD",
624 .handle_irq = x86_pmu_handle_irq,771 .handle_irq = amd_pmu_handle_irq,
625 .disable_all = x86_pmu_disable_all,772 .disable_all = amd_pmu_disable_all,
626 .enable_all = x86_pmu_enable_all,773 .enable_all = x86_pmu_enable_all,
627 .enable = x86_pmu_enable_event,774 .enable = x86_pmu_enable_event,
628 .disable = x86_pmu_disable_event,775 .disable = amd_pmu_disable_event,
629 .hw_config = amd_pmu_hw_config,776 .hw_config = amd_pmu_hw_config,
630 .schedule_events = x86_schedule_events,777 .schedule_events = x86_schedule_events,
631 .eventsel = MSR_K7_EVNTSEL0,778 .eventsel = MSR_K7_EVNTSEL0,
@@ -732,7 +879,7 @@ void amd_pmu_enable_virt(void) · 100 unmodified lines
732 cpuc->perf_ctr_virt_mask = 0;879 cpuc->perf_ctr_virt_mask = 0;
733 880
734 /* Reload all events */881 /* Reload all events */
735 x86_pmu_disable_all();882 amd_pmu_disable_all();
736 x86_pmu_enable_all(0);883 x86_pmu_enable_all(0);
737}884}
738EXPORT_SYMBOL_GPL(amd_pmu_enable_virt);885EXPORT_SYMBOL_GPL(amd_pmu_enable_virt);
@@ -750,7 +897,7 @@ void amd_pmu_disable_virt(void) · 11 unmodified lines
750 cpuc->perf_ctr_virt_mask = AMD64_EVENTSEL_HOSTONLY;897 cpuc->perf_ctr_virt_mask = AMD64_EVENTSEL_HOSTONLY;
751 898
752 /* Reload all events */899 /* Reload all events */
753 x86_pmu_disable_all();900 amd_pmu_disable_all();
754 x86_pmu_enable_all(0);901 x86_pmu_enable_all(0);
755}902}
756EXPORT_SYMBOL_GPL(amd_pmu_disable_virt);903EXPORT_SYMBOL_GPL(amd_pmu_disable_virt);
arch/x86/events/core.c+3−10
@@ -1349,8 +1349,9 @@ void x86_pmu_stop(struct perf_event *event, int flags) · 1348 unmodified lines
1349 struct cpu_hw_events *cpuc = this_cpu_ptr(&cpu_hw_events);1349 struct cpu_hw_events *cpuc = this_cpu_ptr(&cpu_hw_events);
1350 struct hw_perf_event *hwc = &event->hw;1350 struct hw_perf_event *hwc = &event->hw;
1351 1351
1352 if (__test_and_clear_bit(hwc->idx, cpuc->active_mask)) {1352 if (test_bit(hwc->idx, cpuc->active_mask)) {
1353 x86_pmu.disable(event);1353 x86_pmu.disable(event);
1354 __clear_bit(hwc->idx, cpuc->active_mask);
1354 cpuc->events[hwc->idx] = NULL;1355 cpuc->events[hwc->idx] = NULL;
1355 WARN_ON_ONCE(hwc->state & PERF_HES_STOPPED);1356 WARN_ON_ONCE(hwc->state & PERF_HES_STOPPED);
1356 hwc->state |= PERF_HES_STOPPED;1357 hwc->state |= PERF_HES_STOPPED;
@@ -1447,16 +1448,8 @@ int x86_pmu_handle_irq(struct pt_regs *regs) · 90 unmodified lines
1447 apic_write(APIC_LVTPC, APIC_DM_NMI);1448 apic_write(APIC_LVTPC, APIC_DM_NMI);
1448 1449
1449 for (idx = 0; idx < x86_pmu.num_counters; idx++) {1450 for (idx = 0; idx < x86_pmu.num_counters; idx++) {
1450 if (!test_bit(idx, cpuc->active_mask)) {1451 if (!test_bit(idx, cpuc->active_mask))
1451 /*
1452 * Though we deactivated the counter some cpus
1453 * might still deliver spurious interrupts still
1454 * in flight. Catch them:
1455 */
1456 if (__test_and_clear_bit(idx, cpuc->running))
1457 handled++;
1458 continue;1452 continue;
1459 }
1460 1453
1461 event = cpuc->events[idx];1454 event = cpuc->events[idx];
1462 1455
arch/x86/events/intel/core.c+8−2
@@ -3131,7 +3131,7 @@ static unsigned long intel_pmu_large_pebs_flags(struct perf_event *event) · 3130 unmodified lines
3131 flags &= ~PERF_SAMPLE_TIME;3131 flags &= ~PERF_SAMPLE_TIME;
3132 if (!event->attr.exclude_kernel)3132 if (!event->attr.exclude_kernel)
3133 flags &= ~PERF_SAMPLE_REGS_USER;3133 flags &= ~PERF_SAMPLE_REGS_USER;
3134 if (event->attr.sample_regs_user & ~PEBS_REGS)3134 if (event->attr.sample_regs_user & ~PEBS_GP_REGS)
3135 flags &= ~(PERF_SAMPLE_REGS_USER | PERF_SAMPLE_REGS_INTR);3135 flags &= ~(PERF_SAMPLE_REGS_USER | PERF_SAMPLE_REGS_INTR);
3136 return flags;3136 return flags;
3137}3137}
@@ -3185,7 +3185,7 @@ static int intel_pmu_hw_config(struct perf_event *event) · 47 unmodified lines
3185 return ret;3185 return ret;
3186 3186
3187 if (event->attr.precise_ip) {3187 if (event->attr.precise_ip) {
3188 if (!event->attr.freq) {3188 if (!(event->attr.freq || event->attr.wakeup_events)) {
3189 event->hw.flags |= PERF_X86_EVENT_AUTO_RELOAD;3189 event->hw.flags |= PERF_X86_EVENT_AUTO_RELOAD;
3190 if (!(event->attr.sample_type &3190 if (!(event->attr.sample_type &
3191 ~intel_pmu_large_pebs_flags(event)))3191 ~intel_pmu_large_pebs_flags(event)))
@@ -3575,6 +3575,12 @@ static void intel_pmu_cpu_starting(int cpu) · 383 unmodified lines
3575 3575
3576 cpuc->lbr_sel = NULL;3576 cpuc->lbr_sel = NULL;
3577 3577
3578 if (x86_pmu.flags & PMU_FL_TFA) {
3579 WARN_ON_ONCE(cpuc->tfa_shadow);
3580 cpuc->tfa_shadow = ~0ULL;
3581 intel_set_tfa(cpuc, false);
3582 }
3583
3578 if (x86_pmu.version > 1)3584 if (x86_pmu.version > 1)
3579 flip_smm_bit(&x86_pmu.attr_freeze_on_smi);3585 flip_smm_bit(&x86_pmu.attr_freeze_on_smi);
3580 3586
arch/x86/events/perf_event.h+19−19
@@ -96,25 +96,25 @@ struct amd_nb { · 95 unmodified lines
96 PERF_SAMPLE_REGS_INTR | PERF_SAMPLE_REGS_USER | \96 PERF_SAMPLE_REGS_INTR | PERF_SAMPLE_REGS_USER | \
97 PERF_SAMPLE_PERIOD)97 PERF_SAMPLE_PERIOD)
98 98
99#define PEBS_REGS \99#define PEBS_GP_REGS \
100 (PERF_REG_X86_AX | \100 ((1ULL << PERF_REG_X86_AX) | \
101 PERF_REG_X86_BX | \101 (1ULL << PERF_REG_X86_BX) | \
102 PERF_REG_X86_CX | \102 (1ULL << PERF_REG_X86_CX) | \
103 PERF_REG_X86_DX | \103 (1ULL << PERF_REG_X86_DX) | \
104 PERF_REG_X86_DI | \104 (1ULL << PERF_REG_X86_DI) | \
105 PERF_REG_X86_SI | \105 (1ULL << PERF_REG_X86_SI) | \
106 PERF_REG_X86_SP | \106 (1ULL << PERF_REG_X86_SP) | \
107 PERF_REG_X86_BP | \107 (1ULL << PERF_REG_X86_BP) | \
108 PERF_REG_X86_IP | \108 (1ULL << PERF_REG_X86_IP) | \
109 PERF_REG_X86_FLAGS | \109 (1ULL << PERF_REG_X86_FLAGS) | \
110 PERF_REG_X86_R8 | \110 (1ULL << PERF_REG_X86_R8) | \
111 PERF_REG_X86_R9 | \111 (1ULL << PERF_REG_X86_R9) | \
112 PERF_REG_X86_R10 | \112 (1ULL << PERF_REG_X86_R10) | \
113 PERF_REG_X86_R11 | \113 (1ULL << PERF_REG_X86_R11) | \
114 PERF_REG_X86_R12 | \114 (1ULL << PERF_REG_X86_R12) | \
115 PERF_REG_X86_R13 | \115 (1ULL << PERF_REG_X86_R13) | \
116 PERF_REG_X86_R14 | \116 (1ULL << PERF_REG_X86_R14) | \
117 PERF_REG_X86_R15)117 (1ULL << PERF_REG_X86_R15))
118 118
119/*119/*
120 * Per register state.120 * Per register state.
arch/x86/include/asm/bitops.h+18−23
@@ -36,16 +36,17 @@ · 35 unmodified lines
36 * bit 0 is the LSB of addr; bit 32 is the LSB of (addr+1).36 * bit 0 is the LSB of addr; bit 32 is the LSB of (addr+1).
37 */37 */
38 38
39#define BITOP_ADDR(x) "+m" (*(volatile long *) (x))39#define RLONG_ADDR(x) "m" (*(volatile long *) (x))
40#define WBYTE_ADDR(x) "+m" (*(volatile char *) (x))
40 41
41#define ADDR BITOP_ADDR(addr)42#define ADDR RLONG_ADDR(addr)
42 43
43/*44/*
44 * We do the locked ops that don't return the old value as45 * We do the locked ops that don't return the old value as
45 * a mask operation on a byte.46 * a mask operation on a byte.
46 */47 */
47#define IS_IMMEDIATE(nr) (__builtin_constant_p(nr))48#define IS_IMMEDIATE(nr) (__builtin_constant_p(nr))
48#define CONST_MASK_ADDR(nr, addr) BITOP_ADDR((void *)(addr) + ((nr)>>3))49#define CONST_MASK_ADDR(nr, addr) WBYTE_ADDR((void *)(addr) + ((nr)>>3))
49#define CONST_MASK(nr) (1 << ((nr) & 7))50#define CONST_MASK(nr) (1 << ((nr) & 7))
50 51
51/**52/**
@@ -73,7 +74,7 @@ set_bit(long nr, volatile unsigned long *addr) · 21 unmodified lines
73 : "memory");74 : "memory");
74 } else {75 } else {
75 asm volatile(LOCK_PREFIX __ASM_SIZE(bts) " %1,%0"76 asm volatile(LOCK_PREFIX __ASM_SIZE(bts) " %1,%0"
76 : BITOP_ADDR(addr) : "Ir" (nr) : "memory");77 : : RLONG_ADDR(addr), "Ir" (nr) : "memory");
77 }78 }
78}79}
79 80
@@ -88,7 +89,7 @@ set_bit(long nr, volatile unsigned long *addr) · 8 unmodified lines
88 */89 */
89static __always_inline void __set_bit(long nr, volatile unsigned long *addr)90static __always_inline void __set_bit(long nr, volatile unsigned long *addr)
90{91{
91 asm volatile(__ASM_SIZE(bts) " %1,%0" : ADDR : "Ir" (nr) : "memory");92 asm volatile(__ASM_SIZE(bts) " %1,%0" : : ADDR, "Ir" (nr) : "memory");
92}93}
93 94
94/**95/**
@@ -110,8 +111,7 @@ clear_bit(long nr, volatile unsigned long *addr) · 15 unmodified lines
110 : "iq" ((u8)~CONST_MASK(nr)));111 : "iq" ((u8)~CONST_MASK(nr)));
111 } else {112 } else {
112 asm volatile(LOCK_PREFIX __ASM_SIZE(btr) " %1,%0"113 asm volatile(LOCK_PREFIX __ASM_SIZE(btr) " %1,%0"
113 : BITOP_ADDR(addr)114 : : RLONG_ADDR(addr), "Ir" (nr) : "memory");
114 : "Ir" (nr));
115 }115 }
116}116}
117 117
@@ -131,7 +131,7 @@ static __always_inline void clear_bit_unlock(long nr, volatile unsigned long *ad · 13 unmodified lines
131 131
132static __always_inline void __clear_bit(long nr, volatile unsigned long *addr)132static __always_inline void __clear_bit(long nr, volatile unsigned long *addr)
133{133{
134 asm volatile(__ASM_SIZE(btr) " %1,%0" : ADDR : "Ir" (nr));134 asm volatile(__ASM_SIZE(btr) " %1,%0" : : ADDR, "Ir" (nr) : "memory");
135}135}
136 136
137static __always_inline bool clear_bit_unlock_is_negative_byte(long nr, volatile unsigned long *addr)137static __always_inline bool clear_bit_unlock_is_negative_byte(long nr, volatile unsigned long *addr)
@@ -139,7 +139,7 @@ static __always_inline bool clear_bit_unlock_is_negative_byte(long nr, volatile · 1 unmodified line
139 bool negative;139 bool negative;
140 asm volatile(LOCK_PREFIX "andb %2,%1"140 asm volatile(LOCK_PREFIX "andb %2,%1"
141 CC_SET(s)141 CC_SET(s)
142 : CC_OUT(s) (negative), ADDR142 : CC_OUT(s) (negative), WBYTE_ADDR(addr)
143 : "ir" ((char) ~(1 << nr)) : "memory");143 : "ir" ((char) ~(1 << nr)) : "memory");
144 return negative;144 return negative;
145}145}
@@ -155,13 +155,9 @@ static __always_inline bool clear_bit_unlock_is_negative_byte(long nr, volatile · 9 unmodified lines
155 * __clear_bit() is non-atomic and implies release semantics before the memory155 * __clear_bit() is non-atomic and implies release semantics before the memory
156 * operation. It can be used for an unlock if no other CPUs can concurrently156 * operation. It can be used for an unlock if no other CPUs can concurrently
157 * modify other bits in the word.157 * modify other bits in the word.
158 *
159 * No memory barrier is required here, because x86 cannot reorder stores past
160 * older loads. Same principle as spin_unlock.
161 */158 */
162static __always_inline void __clear_bit_unlock(long nr, volatile unsigned long *addr)159static __always_inline void __clear_bit_unlock(long nr, volatile unsigned long *addr)
163{160{
164 barrier();
165 __clear_bit(nr, addr);161 __clear_bit(nr, addr);
166}162}
167 163
@@ -176,7 +172,7 @@ static __always_inline void __clear_bit_unlock(long nr, volatile unsigned long * · 8 unmodified lines
176 */172 */
177static __always_inline void __change_bit(long nr, volatile unsigned long *addr)173static __always_inline void __change_bit(long nr, volatile unsigned long *addr)
178{174{
179 asm volatile(__ASM_SIZE(btc) " %1,%0" : ADDR : "Ir" (nr));175 asm volatile(__ASM_SIZE(btc) " %1,%0" : : ADDR, "Ir" (nr) : "memory");
180}176}
181 177
182/**178/**
@@ -196,8 +192,7 @@ static __always_inline void change_bit(long nr, volatile unsigned long *addr) · 13 unmodified lines
196 : "iq" ((u8)CONST_MASK(nr)));192 : "iq" ((u8)CONST_MASK(nr)));
197 } else {193 } else {
198 asm volatile(LOCK_PREFIX __ASM_SIZE(btc) " %1,%0"194 asm volatile(LOCK_PREFIX __ASM_SIZE(btc) " %1,%0"
199 : BITOP_ADDR(addr)195 : : RLONG_ADDR(addr), "Ir" (nr) : "memory");
200 : "Ir" (nr));
201 }196 }
202}197}
203 198
@@ -242,8 +237,8 @@ static __always_inline bool __test_and_set_bit(long nr, volatile unsigned long * · 38 unmodified lines
242 237
243 asm(__ASM_SIZE(bts) " %2,%1"238 asm(__ASM_SIZE(bts) " %2,%1"
244 CC_SET(c)239 CC_SET(c)
245 : CC_OUT(c) (oldbit), ADDR240 : CC_OUT(c) (oldbit)
246 : "Ir" (nr));241 : ADDR, "Ir" (nr) : "memory");
247 return oldbit;242 return oldbit;
248}243}
249 244
@@ -282,8 +277,8 @@ static __always_inline bool __test_and_clear_bit(long nr, volatile unsigned long · 32 unmodified lines
282 277
283 asm volatile(__ASM_SIZE(btr) " %2,%1"278 asm volatile(__ASM_SIZE(btr) " %2,%1"
284 CC_SET(c)279 CC_SET(c)
285 : CC_OUT(c) (oldbit), ADDR280 : CC_OUT(c) (oldbit)
286 : "Ir" (nr));281 : ADDR, "Ir" (nr) : "memory");
287 return oldbit;282 return oldbit;
288}283}
289 284
@@ -294,8 +289,8 @@ static __always_inline bool __test_and_change_bit(long nr, volatile unsigned lon · 4 unmodified lines
294 289
295 asm volatile(__ASM_SIZE(btc) " %2,%1"290 asm volatile(__ASM_SIZE(btc) " %2,%1"
296 CC_SET(c)291 CC_SET(c)
297 : CC_OUT(c) (oldbit), ADDR292 : CC_OUT(c) (oldbit)
298 : "Ir" (nr) : "memory");293 : ADDR, "Ir" (nr) : "memory");
299 294
300 return oldbit;295 return oldbit;
301}296}
@@ -326,7 +321,7 @@ static __always_inline bool variable_test_bit(long nr, volatile const unsigned l · 24 unmodified lines
326 asm volatile(__ASM_SIZE(bt) " %2,%1"321 asm volatile(__ASM_SIZE(bt) " %2,%1"
327 CC_SET(c)322 CC_SET(c)
328 : CC_OUT(c) (oldbit)323 : CC_OUT(c) (oldbit)
329 : "m" (*(unsigned long *)addr), "Ir" (nr));324 : "m" (*(unsigned long *)addr), "Ir" (nr) : "memory");
330 325
331 return oldbit;326 return oldbit;
332}327}
arch/x86/include/asm/kvm_emulate.h+3−1
@@ -226,7 +226,9 @@ struct x86_emulate_ops { · 225 unmodified lines
226 226
227 unsigned (*get_hflags)(struct x86_emulate_ctxt *ctxt);227 unsigned (*get_hflags)(struct x86_emulate_ctxt *ctxt);
228 void (*set_hflags)(struct x86_emulate_ctxt *ctxt, unsigned hflags);228 void (*set_hflags)(struct x86_emulate_ctxt *ctxt, unsigned hflags);
229 int (*pre_leave_smm)(struct x86_emulate_ctxt *ctxt, u64 smbase);229 int (*pre_leave_smm)(struct x86_emulate_ctxt *ctxt,
230 const char *smstate);
231 void (*post_leave_smm)(struct x86_emulate_ctxt *ctxt);
230 232
231};233};
232 234
arch/x86/include/asm/kvm_host.h+10−7
@@ -126,7 +126,7 @@ static inline gfn_t gfn_to_index(gfn_t gfn, gfn_t base_gfn, int level) · 125 unmodified lines
126}126}
127 127
128#define KVM_PERMILLE_MMU_PAGES 20128#define KVM_PERMILLE_MMU_PAGES 20
129#define KVM_MIN_ALLOC_MMU_PAGES 64129#define KVM_MIN_ALLOC_MMU_PAGES 64UL
130#define KVM_MMU_HASH_SHIFT 12130#define KVM_MMU_HASH_SHIFT 12
131#define KVM_NUM_MMU_PAGES (1 << KVM_MMU_HASH_SHIFT)131#define KVM_NUM_MMU_PAGES (1 << KVM_MMU_HASH_SHIFT)
132#define KVM_MIN_FREE_MMU_PAGES 5132#define KVM_MIN_FREE_MMU_PAGES 5
@@ -844,9 +844,9 @@ enum kvm_irqchip_mode { · 711 unmodified lines
844};844};
845 845
846struct kvm_arch {846struct kvm_arch {
847 unsigned int n_used_mmu_pages;847 unsigned long n_used_mmu_pages;
848 unsigned int n_requested_mmu_pages;848 unsigned long n_requested_mmu_pages;
849 unsigned int n_max_mmu_pages;849 unsigned long n_max_mmu_pages;
850 unsigned int indirect_shadow_pages;850 unsigned int indirect_shadow_pages;
851 struct hlist_head mmu_page_hash[KVM_NUM_MMU_PAGES];851 struct hlist_head mmu_page_hash[KVM_NUM_MMU_PAGES];
852 /*852 /*
@@ -1182,7 +1182,7 @@ struct kvm_x86_ops { · 329 unmodified lines
1182 1182
1183 int (*smi_allowed)(struct kvm_vcpu *vcpu);1183 int (*smi_allowed)(struct kvm_vcpu *vcpu);
1184 int (*pre_enter_smm)(struct kvm_vcpu *vcpu, char *smstate);1184 int (*pre_enter_smm)(struct kvm_vcpu *vcpu, char *smstate);
1185 int (*pre_leave_smm)(struct kvm_vcpu *vcpu, u64 smbase);1185 int (*pre_leave_smm)(struct kvm_vcpu *vcpu, const char *smstate);
1186 int (*enable_smi_window)(struct kvm_vcpu *vcpu);1186 int (*enable_smi_window)(struct kvm_vcpu *vcpu);
1187 1187
1188 int (*mem_enc_op)(struct kvm *kvm, void __user *argp);1188 int (*mem_enc_op)(struct kvm *kvm, void __user *argp);
@@ -1256,8 +1256,8 @@ void kvm_mmu_clear_dirty_pt_masked(struct kvm *kvm, · 67 unmodified lines
1256 gfn_t gfn_offset, unsigned long mask);1256 gfn_t gfn_offset, unsigned long mask);
1257void kvm_mmu_zap_all(struct kvm *kvm);1257void kvm_mmu_zap_all(struct kvm *kvm);
1258void kvm_mmu_invalidate_mmio_sptes(struct kvm *kvm, u64 gen);1258void kvm_mmu_invalidate_mmio_sptes(struct kvm *kvm, u64 gen);
1259unsigned int kvm_mmu_calculate_default_mmu_pages(struct kvm *kvm);1259unsigned long kvm_mmu_calculate_default_mmu_pages(struct kvm *kvm);
1260void kvm_mmu_change_mmu_pages(struct kvm *kvm, unsigned int kvm_nr_mmu_pages);1260void kvm_mmu_change_mmu_pages(struct kvm *kvm, unsigned long kvm_nr_mmu_pages);
1261 1261
1262int load_pdptrs(struct kvm_vcpu *vcpu, struct kvm_mmu *mmu, unsigned long cr3);1262int load_pdptrs(struct kvm_vcpu *vcpu, struct kvm_mmu *mmu, unsigned long cr3);
1263bool pdptrs_changed(struct kvm_vcpu *vcpu);1263bool pdptrs_changed(struct kvm_vcpu *vcpu);
@@ -1592,4 +1592,7 @@ static inline int kvm_cpu_get_apicid(int mps_cpu) · 328 unmodified lines
1592#define put_smstate(type, buf, offset, val) \1592#define put_smstate(type, buf, offset, val) \
1593 *(type *)((buf) + (offset) - 0x7e00) = val1593 *(type *)((buf) + (offset) - 0x7e00) = val
1594 1594
1595#define GET_SMSTATE(type, buf, offset) \
1596 (*(type *)((buf) + (offset) - 0x7e00))
1597
1595#endif /* _ASM_X86_KVM_HOST_H */1598#endif /* _ASM_X86_KVM_HOST_H */
arch/x86/include/asm/syscall.h+33−109
@@ -91,11 +91,9 @@ static inline void syscall_set_return_value(struct task_struct *task, · 90 unmodified lines
91 91
92static inline void syscall_get_arguments(struct task_struct *task,92static inline void syscall_get_arguments(struct task_struct *task,
93 struct pt_regs *regs,93 struct pt_regs *regs,
94 unsigned int i, unsigned int n,
95 unsigned long *args)94 unsigned long *args)
96{95{
97 BUG_ON(i + n > 6);96 memcpy(args, &regs->bx, 6 * sizeof(args[0]));
98 memcpy(args, &regs->bx + i, n * sizeof(args[0]));
99}97}
100 98
101static inline void syscall_set_arguments(struct task_struct *task,99static inline void syscall_set_arguments(struct task_struct *task,
@@ -116,124 +114,50 @@ static inline int syscall_get_arch(void) · 14 unmodified lines
116 114
117static inline void syscall_get_arguments(struct task_struct *task,115static inline void syscall_get_arguments(struct task_struct *task,
118 struct pt_regs *regs,116 struct pt_regs *regs,
119 unsigned int i, unsigned int n,
120 unsigned long *args)117 unsigned long *args)
121{118{
122# ifdef CONFIG_IA32_EMULATION119# ifdef CONFIG_IA32_EMULATION
123 if (task->thread_info.status & TS_COMPAT)120 if (task->thread_info.status & TS_COMPAT) {
124 switch (i) {121 *args++ = regs->bx;
125 case 0:122 *args++ = regs->cx;
126 if (!n--) break;123 *args++ = regs->dx;
127 *args++ = regs->bx;124 *args++ = regs->si;
128 case 1:125 *args++ = regs->di;
129 if (!n--) break;126 *args = regs->bp;
130 *args++ = regs->cx;127 } else
131 case 2:
132 if (!n--) break;
133 *args++ = regs->dx;
134 case 3:
135 if (!n--) break;
136 *args++ = regs->si;
137 case 4:
138 if (!n--) break;
139 *args++ = regs->di;
140 case 5:
141 if (!n--) break;
142 *args++ = regs->bp;
143 case 6:
144 if (!n--) break;
145 default:
146 BUG();
147 break;
148 }
149 else
150# endif128# endif
151 switch (i) {129 {
152 case 0:130 *args++ = regs->di;
153 if (!n--) break;131 *args++ = regs->si;
154 *args++ = regs->di;132 *args++ = regs->dx;
155 case 1:133 *args++ = regs->r10;
156 if (!n--) break;134 *args++ = regs->r8;
157 *args++ = regs->si;135 *args = regs->r9;
158 case 2:136 }
159 if (!n--) break;
160 *args++ = regs->dx;
161 case 3:
162 if (!n--) break;
163 *args++ = regs->r10;
164 case 4:
165 if (!n--) break;
166 *args++ = regs->r8;
167 case 5:
168 if (!n--) break;
169 *args++ = regs->r9;
170 case 6:
171 if (!n--) break;
172 default:
173 BUG();
174 break;
175 }
176}137}
177 138
178static inline void syscall_set_arguments(struct task_struct *task,139static inline void syscall_set_arguments(struct task_struct *task,
179 struct pt_regs *regs,140 struct pt_regs *regs,
180 unsigned int i, unsigned int n,
181 const unsigned long *args)141 const unsigned long *args)
182{142{
183# ifdef CONFIG_IA32_EMULATION143# ifdef CONFIG_IA32_EMULATION
184 if (task->thread_info.status & TS_COMPAT)144 if (task->thread_info.status & TS_COMPAT) {
185 switch (i) {145 regs->bx = *args++;
186 case 0:146 regs->cx = *args++;
187 if (!n--) break;147 regs->dx = *args++;
188 regs->bx = *args++;148 regs->si = *args++;
189 case 1:149 regs->di = *args++;
190 if (!n--) break;150 regs->bp = *args;
191 regs->cx = *args++;151 } else
192 case 2:
193 if (!n--) break;
194 regs->dx = *args++;
195 case 3:
196 if (!n--) break;
197 regs->si = *args++;
198 case 4:
199 if (!n--) break;
200 regs->di = *args++;
201 case 5:
202 if (!n--) break;
203 regs->bp = *args++;
204 case 6:
205 if (!n--) break;
206 default:
207 BUG();
208 break;
209 }
210 else
211# endif152# endif
212 switch (i) {153 {
213 case 0:154 regs->di = *args++;
214 if (!n--) break;155 regs->si = *args++;
215 regs->di = *args++;156 regs->dx = *args++;
216 case 1:157 regs->r10 = *args++;
217 if (!n--) break;158 regs->r8 = *args++;
218 regs->si = *args++;159 regs->r9 = *args;
219 case 2:160 }
220 if (!n--) break;
221 regs->dx = *args++;
222 case 3:
223 if (!n--) break;
224 regs->r10 = *args++;
225 case 4:
226 if (!n--) break;
227 regs->r8 = *args++;
228 case 5:
229 if (!n--) break;
230 regs->r9 = *args++;
231 case 6:
232 if (!n--) break;
233 default:
234 BUG();
235 break;
236 }
237}161}
238 162
239static inline int syscall_get_arch(void)163static inline int syscall_get_arch(void)
arch/x86/include/asm/xen/hypercall.h+3−0
@@ -206,6 +206,9 @@ xen_single_call(unsigned int call, · 205 unmodified lines
206 __HYPERCALL_DECLS;206 __HYPERCALL_DECLS;
207 __HYPERCALL_5ARG(a1, a2, a3, a4, a5);207 __HYPERCALL_5ARG(a1, a2, a3, a4, a5);
208 208
209 if (call >= PAGE_SIZE / sizeof(hypercall_page[0]))
210 return -EINVAL;
211
209 asm volatile(CALL_NOSPEC212 asm volatile(CALL_NOSPEC
210 : __HYPERCALL_5PARAM213 : __HYPERCALL_5PARAM
211 : [thunk_target] "a" (&hypercall_page[call])214 : [thunk_target] "a" (&hypercall_page[call])
arch/x86/include/uapi/asm/vmx.h+1−0
@@ -146,6 +146,7 @@ · 145 unmodified lines
146 146
147#define VMX_ABORT_SAVE_GUEST_MSR_FAIL 1147#define VMX_ABORT_SAVE_GUEST_MSR_FAIL 1
148#define VMX_ABORT_LOAD_HOST_PDPTE_FAIL 2148#define VMX_ABORT_LOAD_HOST_PDPTE_FAIL 2
149#define VMX_ABORT_VMCS_CORRUPTED 3
149#define VMX_ABORT_LOAD_HOST_MSR_FAIL 4150#define VMX_ABORT_LOAD_HOST_MSR_FAIL 4
150 151
151#endif /* _UAPIVMX_H */152#endif /* _UAPIVMX_H */
arch/x86/kernel/cpu/bugs.c+3−3
@@ -275,7 +275,7 @@ static const struct { · 274 unmodified lines
275 const char *option;275 const char *option;
276 enum spectre_v2_user_cmd cmd;276 enum spectre_v2_user_cmd cmd;
277 bool secure;277 bool secure;
278} v2_user_options[] __initdata = {278} v2_user_options[] __initconst = {
279 { "auto", SPECTRE_V2_USER_CMD_AUTO, false },279 { "auto", SPECTRE_V2_USER_CMD_AUTO, false },
280 { "off", SPECTRE_V2_USER_CMD_NONE, false },280 { "off", SPECTRE_V2_USER_CMD_NONE, false },
281 { "on", SPECTRE_V2_USER_CMD_FORCE, true },281 { "on", SPECTRE_V2_USER_CMD_FORCE, true },
@@ -419,7 +419,7 @@ static const struct { · 137 unmodified lines
419 const char *option;419 const char *option;
420 enum spectre_v2_mitigation_cmd cmd;420 enum spectre_v2_mitigation_cmd cmd;
421 bool secure;421 bool secure;
422} mitigation_options[] __initdata = {422} mitigation_options[] __initconst = {
423 { "off", SPECTRE_V2_CMD_NONE, false },423 { "off", SPECTRE_V2_CMD_NONE, false },
424 { "on", SPECTRE_V2_CMD_FORCE, true },424 { "on", SPECTRE_V2_CMD_FORCE, true },
425 { "retpoline", SPECTRE_V2_CMD_RETPOLINE, false },425 { "retpoline", SPECTRE_V2_CMD_RETPOLINE, false },
@@ -658,7 +658,7 @@ static const char * const ssb_strings[] = { · 232 unmodified lines
658static const struct {658static const struct {
659 const char *option;659 const char *option;
660 enum ssb_mitigation_cmd cmd;660 enum ssb_mitigation_cmd cmd;
661} ssb_mitigation_options[] __initdata = {661} ssb_mitigation_options[] __initconst = {
662 { "auto", SPEC_STORE_BYPASS_CMD_AUTO }, /* Platform decides */662 { "auto", SPEC_STORE_BYPASS_CMD_AUTO }, /* Platform decides */
663 { "on", SPEC_STORE_BYPASS_CMD_ON }, /* Disable Speculative Store Bypass */663 { "on", SPEC_STORE_BYPASS_CMD_ON }, /* Disable Speculative Store Bypass */
664 { "off", SPEC_STORE_BYPASS_CMD_NONE }, /* Don't touch Speculative Store Bypass */664 { "off", SPEC_STORE_BYPASS_CMD_NONE }, /* Don't touch Speculative Store Bypass */
arch/x86/kernel/cpu/intel.c+2−2
@@ -611,8 +611,8 @@ static void init_intel_energy_perf(struct cpuinfo_x86 *c) · 610 unmodified lines
611 if ((epb & 0xF) != ENERGY_PERF_BIAS_PERFORMANCE)611 if ((epb & 0xF) != ENERGY_PERF_BIAS_PERFORMANCE)
612 return;612 return;
613 613
614 pr_warn_once("ENERGY_PERF_BIAS: Set to 'normal', was 'performance'\n");614 pr_info_once("ENERGY_PERF_BIAS: Set to 'normal', was 'performance'\n");
615 pr_warn_once("ENERGY_PERF_BIAS: View and update with x86_energy_perf_policy(8)\n");615 pr_info_once("ENERGY_PERF_BIAS: View and update with x86_energy_perf_policy(8)\n");
616 epb = (epb & ~0xF) | ENERGY_PERF_BIAS_NORMAL;616 epb = (epb & ~0xF) | ENERGY_PERF_BIAS_NORMAL;
617 wrmsrl(MSR_IA32_ENERGY_PERF_BIAS, epb);617 wrmsrl(MSR_IA32_ENERGY_PERF_BIAS, epb);
618}618}
arch/x86/kernel/cpu/resctrl/rdtgroup.c+5−4
@@ -2039,14 +2039,14 @@ out: · 2038 unmodified lines
2039enum rdt_param {2039enum rdt_param {
2040 Opt_cdp,2040 Opt_cdp,
2041 Opt_cdpl2,2041 Opt_cdpl2,
2042 Opt_mba_mpbs,2042 Opt_mba_mbps,
2043 nr__rdt_params2043 nr__rdt_params
2044};2044};
2045 2045
2046static const struct fs_parameter_spec rdt_param_specs[] = {2046static const struct fs_parameter_spec rdt_param_specs[] = {
2047 fsparam_flag("cdp", Opt_cdp),2047 fsparam_flag("cdp", Opt_cdp),
2048 fsparam_flag("cdpl2", Opt_cdpl2),2048 fsparam_flag("cdpl2", Opt_cdpl2),
2049 fsparam_flag("mba_mpbs", Opt_mba_mpbs),2049 fsparam_flag("mba_MBps", Opt_mba_mbps),
2050 {}2050 {}
2051};2051};
2052 2052
@@ -2072,7 +2072,7 @@ static int rdt_parse_param(struct fs_context *fc, struct fs_parameter *param) · 19 unmodified lines
2072 case Opt_cdpl2:2072 case Opt_cdpl2:
2073 ctx->enable_cdpl2 = true;2073 ctx->enable_cdpl2 = true;
2074 return 0;2074 return 0;
2075 case Opt_mba_mpbs:2075 case Opt_mba_mbps:
2076 if (boot_cpu_data.x86_vendor != X86_VENDOR_INTEL)2076 if (boot_cpu_data.x86_vendor != X86_VENDOR_INTEL)
2077 return -EINVAL;2077 return -EINVAL;
2078 ctx->enable_mba_mbps = true;2078 ctx->enable_mba_mbps = true;
@@ -2610,9 +2610,10 @@ static int rdtgroup_init_alloc(struct rdtgroup *rdtgrp) · 531 unmodified lines
2610 rdt_last_cmd_puts("Failed to initialize allocations\n");2610 rdt_last_cmd_puts("Failed to initialize allocations\n");
2611 return ret;2611 return ret;
2612 }2612 }
2613 rdtgrp->mode = RDT_MODE_SHAREABLE;
2614 }2613 }
2615 2614
2615 rdtgrp->mode = RDT_MODE_SHAREABLE;
2616
2616 return 0;2617 return 0;
2617}2618}
2618 2619
arch/x86/kernel/kprobes/core.c+46−2
@@ -569,6 +569,7 @@ void arch_prepare_kretprobe(struct kretprobe_instance *ri, struct pt_regs *regs) · 568 unmodified lines
569 unsigned long *sara = stack_addr(regs);569 unsigned long *sara = stack_addr(regs);
570 570
571 ri->ret_addr = (kprobe_opcode_t *) *sara;571 ri->ret_addr = (kprobe_opcode_t *) *sara;
572 ri->fp = sara;
572 573
573 /* Replace the return addr with trampoline addr */574 /* Replace the return addr with trampoline addr */
574 *sara = (unsigned long) &kretprobe_trampoline;575 *sara = (unsigned long) &kretprobe_trampoline;
@@ -748,26 +749,48 @@ asm( · 173 unmodified lines
748NOKPROBE_SYMBOL(kretprobe_trampoline);749NOKPROBE_SYMBOL(kretprobe_trampoline);
749STACK_FRAME_NON_STANDARD(kretprobe_trampoline);750STACK_FRAME_NON_STANDARD(kretprobe_trampoline);
750 751
752static struct kprobe kretprobe_kprobe = {
753 .addr = (void *)kretprobe_trampoline,
754};
755
751/*756/*
752 * Called from kretprobe_trampoline757 * Called from kretprobe_trampoline
753 */758 */
754static __used void *trampoline_handler(struct pt_regs *regs)759static __used void *trampoline_handler(struct pt_regs *regs)
755{760{
761 struct kprobe_ctlblk *kcb;
756 struct kretprobe_instance *ri = NULL;762 struct kretprobe_instance *ri = NULL;
757 struct hlist_head *head, empty_rp;763 struct hlist_head *head, empty_rp;
758 struct hlist_node *tmp;764 struct hlist_node *tmp;
759 unsigned long flags, orig_ret_address = 0;765 unsigned long flags, orig_ret_address = 0;
760 unsigned long trampoline_address = (unsigned long)&kretprobe_trampoline;766 unsigned long trampoline_address = (unsigned long)&kretprobe_trampoline;
761 kprobe_opcode_t *correct_ret_addr = NULL;767 kprobe_opcode_t *correct_ret_addr = NULL;
768 void *frame_pointer;
769 bool skipped = false;
770
771 preempt_disable();
772
773 /*
774 * Set a dummy kprobe for avoiding kretprobe recursion.
775 * Since kretprobe never run in kprobe handler, kprobe must not
776 * be running at this point.
777 */
778 kcb = get_kprobe_ctlblk();
779 __this_cpu_write(current_kprobe, &kretprobe_kprobe);
780 kcb->kprobe_status = KPROBE_HIT_ACTIVE;
762 781
763 INIT_HLIST_HEAD(&empty_rp);782 INIT_HLIST_HEAD(&empty_rp);
764 kretprobe_hash_lock(current, &head, &flags);783 kretprobe_hash_lock(current, &head, &flags);
765 /* fixup registers */784 /* fixup registers */
766#ifdef CONFIG_X86_64785#ifdef CONFIG_X86_64
767 regs->cs = __KERNEL_CS;786 regs->cs = __KERNEL_CS;
787 /* On x86-64, we use pt_regs->sp for return address holder. */
788 frame_pointer = &regs->sp;
768#else789#else
769 regs->cs = __KERNEL_CS | get_kernel_rpl();790 regs->cs = __KERNEL_CS | get_kernel_rpl();
770 regs->gs = 0;791 regs->gs = 0;
792 /* On x86-32, we use pt_regs->flags for return address holder. */
793 frame_pointer = &regs->flags;
771#endif794#endif
772 regs->ip = trampoline_address;795 regs->ip = trampoline_address;
773 regs->orig_ax = ~0UL;796 regs->orig_ax = ~0UL;
@@ -789,8 +812,25 @@ static __used void *trampoline_handler(struct pt_regs *regs) · 15 unmodified lines
789 if (ri->task != current)812 if (ri->task != current)
790 /* another task is sharing our hash bucket */813 /* another task is sharing our hash bucket */
791 continue;814 continue;
815 /*
816 * Return probes must be pushed on this hash list correct
817 * order (same as return order) so that it can be poped
818 * correctly. However, if we find it is pushed it incorrect
819 * order, this means we find a function which should not be
820 * probed, because the wrong order entry is pushed on the
821 * path of processing other kretprobe itself.
822 */
823 if (ri->fp != frame_pointer) {
824 if (!skipped)
825 pr_warn("kretprobe is stacked incorrectly. Trying to fixup.\n");
826 skipped = true;
827 continue;
828 }
792 829
793 orig_ret_address = (unsigned long)ri->ret_addr;830 orig_ret_address = (unsigned long)ri->ret_addr;
831 if (skipped)
832 pr_warn("%ps must be blacklisted because of incorrect kretprobe order\n",
833 ri->rp->kp.addr);
794 834
795 if (orig_ret_address != trampoline_address)835 if (orig_ret_address != trampoline_address)
796 /*836 /*
@@ -808,14 +848,15 @@ static __used void *trampoline_handler(struct pt_regs *regs) · 11 unmodified lines
808 if (ri->task != current)848 if (ri->task != current)
809 /* another task is sharing our hash bucket */849 /* another task is sharing our hash bucket */
810 continue;850 continue;
851 if (ri->fp != frame_pointer)
852 continue;
811 853
812 orig_ret_address = (unsigned long)ri->ret_addr;854 orig_ret_address = (unsigned long)ri->ret_addr;
813 if (ri->rp && ri->rp->handler) {855 if (ri->rp && ri->rp->handler) {
814 __this_cpu_write(current_kprobe, &ri->rp->kp);856 __this_cpu_write(current_kprobe, &ri->rp->kp);
815 get_kprobe_ctlblk()->kprobe_status = KPROBE_HIT_ACTIVE;
816 ri->ret_addr = correct_ret_addr;857 ri->ret_addr = correct_ret_addr;
817 ri->rp->handler(ri, regs);858 ri->rp->handler(ri, regs);
818 __this_cpu_write(current_kprobe, NULL);859 __this_cpu_write(current_kprobe, &kretprobe_kprobe);
819 }860 }
820 861
821 recycle_rp_inst(ri, &empty_rp);862 recycle_rp_inst(ri, &empty_rp);
@@ -831,6 +872,9 @@ static __used void *trampoline_handler(struct pt_regs *regs) · 9 unmodified lines
831 872
832 kretprobe_hash_unlock(current, &flags);873 kretprobe_hash_unlock(current, &flags);
833 874
875 __this_cpu_write(current_kprobe, NULL);
876 preempt_enable();
877
834 hlist_for_each_entry_safe(ri, tmp, &empty_rp, hlist) {878 hlist_for_each_entry_safe(ri, tmp, &empty_rp, hlist) {
835 hlist_del(&ri->hlist);879 hlist_del(&ri->hlist);
836 kfree(ri);880 kfree(ri);
arch/x86/kernel/process.c+6−2
@@ -426,6 +426,8 @@ static __always_inline void __speculation_ctrl_update(unsigned long tifp, · 425 unmodified lines
426 u64 msr = x86_spec_ctrl_base;426 u64 msr = x86_spec_ctrl_base;
427 bool updmsr = false;427 bool updmsr = false;
428 428
429 lockdep_assert_irqs_disabled();
430
429 /*431 /*
430 * If TIF_SSBD is different, select the proper mitigation432 * If TIF_SSBD is different, select the proper mitigation
431 * method. Note that if SSBD mitigation is disabled or permanentely433 * method. Note that if SSBD mitigation is disabled or permanentely
@@ -477,10 +479,12 @@ static unsigned long speculation_ctrl_update_tif(struct task_struct *tsk) · 45 unmodified lines
477 479
478void speculation_ctrl_update(unsigned long tif)480void speculation_ctrl_update(unsigned long tif)
479{481{
482 unsigned long flags;
483
480 /* Forced update. Make sure all relevant TIF flags are different */484 /* Forced update. Make sure all relevant TIF flags are different */
481 preempt_disable();485 local_irq_save(flags);
482 __speculation_ctrl_update(~tif, tif);486 __speculation_ctrl_update(~tif, tif);
483 preempt_enable();487 local_irq_restore(flags);
484}488}
485 489
486/* Called from seccomp/prctl update */490/* Called from seccomp/prctl update */
arch/x86/kernel/reboot.c+21−0
@@ -81,6 +81,19 @@ static int __init set_bios_reboot(const struct dmi_system_id *d) · 80 unmodified lines
81 return 0;81 return 0;
82}82}
83 83
84/*
85 * Some machines don't handle the default ACPI reboot method and
86 * require the EFI reboot method:
87 */
88static int __init set_efi_reboot(const struct dmi_system_id *d)
89{
90 if (reboot_type != BOOT_EFI && !efi_runtime_disabled()) {
91 reboot_type = BOOT_EFI;
92 pr_info("%s series board detected. Selecting EFI-method for reboot.\n", d->ident);
93 }
94 return 0;
95}
96
84void __noreturn machine_real_restart(unsigned int type)97void __noreturn machine_real_restart(unsigned int type)
85{98{
86 local_irq_disable();99 local_irq_disable();
@@ -166,6 +179,14 @@ static const struct dmi_system_id reboot_dmi_table[] __initconst = { · 79 unmodified lines
166 DMI_MATCH(DMI_PRODUCT_NAME, "AOA110"),179 DMI_MATCH(DMI_PRODUCT_NAME, "AOA110"),
167 },180 },
168 },181 },
182 { /* Handle reboot issue on Acer TravelMate X514-51T */
183 .callback = set_efi_reboot,
184 .ident = "Acer TravelMate X514-51T",
185 .matches = {
186 DMI_MATCH(DMI_SYS_VENDOR, "Acer"),
187 DMI_MATCH(DMI_PRODUCT_NAME, "TravelMate X514-51T"),
188 },
189 },
169 190
170 /* Apple */191 /* Apple */
171 { /* Handle problems with rebooting on Apple MacBook5 */192 { /* Handle problems with rebooting on Apple MacBook5 */
arch/x86/kernel/vmlinux.lds.S+1−1
@@ -362,7 +362,7 @@ SECTIONS · 361 unmodified lines
362 .bss : AT(ADDR(.bss) - LOAD_OFFSET) {362 .bss : AT(ADDR(.bss) - LOAD_OFFSET) {
363 __bss_start = .;363 __bss_start = .;
364 *(.bss..page_aligned)364 *(.bss..page_aligned)
365 *(.bss)365 *(BSS_MAIN)
366 BSS_DECRYPTED366 BSS_DECRYPTED
367 . = ALIGN(PAGE_SIZE);367 . = ALIGN(PAGE_SIZE);
368 __bss_stop = .;368 __bss_stop = .;
arch/x86/kvm/emulate.c+102−89
@@ -2331,24 +2331,18 @@ static int em_lseg(struct x86_emulate_ctxt *ctxt) · 2330 unmodified lines
2331 2331
2332static int emulator_has_longmode(struct x86_emulate_ctxt *ctxt)2332static int emulator_has_longmode(struct x86_emulate_ctxt *ctxt)
2333{2333{
2334#ifdef CONFIG_X86_64
2334 u32 eax, ebx, ecx, edx;2335 u32 eax, ebx, ecx, edx;
2335 2336
2336 eax = 0x80000001;2337 eax = 0x80000001;
2337 ecx = 0;2338 ecx = 0;
2338 ctxt->ops->get_cpuid(ctxt, &eax, &ebx, &ecx, &edx, false);2339 ctxt->ops->get_cpuid(ctxt, &eax, &ebx, &ecx, &edx, false);
2339 return edx & bit(X86_FEATURE_LM);2340 return edx & bit(X86_FEATURE_LM);
2341#else
2342 return false;
2343#endif
2340}2344}
2341 2345
2342#define GET_SMSTATE(type, smbase, offset) \
2343 ({ \
2344 type __val; \
2345 int r = ctxt->ops->read_phys(ctxt, smbase + offset, &__val, \
2346 sizeof(__val)); \
2347 if (r != X86EMUL_CONTINUE) \
2348 return X86EMUL_UNHANDLEABLE; \
2349 __val; \
2350 })
2351
2352static void rsm_set_desc_flags(struct desc_struct *desc, u32 flags)2346static void rsm_set_desc_flags(struct desc_struct *desc, u32 flags)
2353{2347{
2354 desc->g = (flags >> 23) & 1;2348 desc->g = (flags >> 23) & 1;
@@ -2361,27 +2355,30 @@ static void rsm_set_desc_flags(struct desc_struct *desc, u32 flags) · 6 unmodified lines
2361 desc->type = (flags >> 8) & 15;2355 desc->type = (flags >> 8) & 15;
2362}2356}
2363 2357
2364static int rsm_load_seg_32(struct x86_emulate_ctxt *ctxt, u64 smbase, int n)2358static int rsm_load_seg_32(struct x86_emulate_ctxt *ctxt, const char *smstate,
2359 int n)
2365{2360{
2366 struct desc_struct desc;2361 struct desc_struct desc;
2367 int offset;2362 int offset;
2368 u16 selector;2363 u16 selector;
2369 2364
2370 selector = GET_SMSTATE(u32, smbase, 0x7fa8 + n * 4);2365 selector = GET_SMSTATE(u32, smstate, 0x7fa8 + n * 4);
2371 2366
2372 if (n < 3)2367 if (n < 3)
2373 offset = 0x7f84 + n * 12;2368 offset = 0x7f84 + n * 12;
2374 else2369 else
2375 offset = 0x7f2c + (n - 3) * 12;2370 offset = 0x7f2c + (n - 3) * 12;
2376 2371
2377 set_desc_base(&desc, GET_SMSTATE(u32, smbase, offset + 8));2372 set_desc_base(&desc, GET_SMSTATE(u32, smstate, offset + 8));
2378 set_desc_limit(&desc, GET_SMSTATE(u32, smbase, offset + 4));2373 set_desc_limit(&desc, GET_SMSTATE(u32, smstate, offset + 4));
2379 rsm_set_desc_flags(&desc, GET_SMSTATE(u32, smbase, offset));2374 rsm_set_desc_flags(&desc, GET_SMSTATE(u32, smstate, offset));
2380 ctxt->ops->set_segment(ctxt, selector, &desc, 0, n);2375 ctxt->ops->set_segment(ctxt, selector, &desc, 0, n);
2381 return X86EMUL_CONTINUE;2376 return X86EMUL_CONTINUE;
2382}2377}
2383 2378
2384static int rsm_load_seg_64(struct x86_emulate_ctxt *ctxt, u64 smbase, int n)2379#ifdef CONFIG_X86_64
2380static int rsm_load_seg_64(struct x86_emulate_ctxt *ctxt, const char *smstate,
2381 int n)
2385{2382{
2386 struct desc_struct desc;2383 struct desc_struct desc;
2387 int offset;2384 int offset;
@@ -2390,15 +2387,16 @@ static int rsm_load_seg_64(struct x86_emulate_ctxt *ctxt, u64 smbase, int n) · 2 unmodified lines
2390 2387
2391 offset = 0x7e00 + n * 16;2388 offset = 0x7e00 + n * 16;
2392 2389
2393 selector = GET_SMSTATE(u16, smbase, offset);2390 selector = GET_SMSTATE(u16, smstate, offset);
2394 rsm_set_desc_flags(&desc, GET_SMSTATE(u16, smbase, offset + 2) << 8);2391 rsm_set_desc_flags(&desc, GET_SMSTATE(u16, smstate, offset + 2) << 8);
2395 set_desc_limit(&desc, GET_SMSTATE(u32, smbase, offset + 4));2392 set_desc_limit(&desc, GET_SMSTATE(u32, smstate, offset + 4));
2396 set_desc_base(&desc, GET_SMSTATE(u32, smbase, offset + 8));2393 set_desc_base(&desc, GET_SMSTATE(u32, smstate, offset + 8));
2397 base3 = GET_SMSTATE(u32, smbase, offset + 12);2394 base3 = GET_SMSTATE(u32, smstate, offset + 12);
2398 2395
2399 ctxt->ops->set_segment(ctxt, selector, &desc, base3, n);2396 ctxt->ops->set_segment(ctxt, selector, &desc, base3, n);
2400 return X86EMUL_CONTINUE;2397 return X86EMUL_CONTINUE;
2401}2398}
2399#endif
2402 2400
2403static int rsm_enter_protected_mode(struct x86_emulate_ctxt *ctxt,2401static int rsm_enter_protected_mode(struct x86_emulate_ctxt *ctxt,
2404 u64 cr0, u64 cr3, u64 cr4)2402 u64 cr0, u64 cr3, u64 cr4)
@@ -2445,7 +2443,8 @@ static int rsm_enter_protected_mode(struct x86_emulate_ctxt *ctxt, · 40 unmodified lines
2445 return X86EMUL_CONTINUE;2443 return X86EMUL_CONTINUE;
2446}2444}
2447 2445
2448static int rsm_load_state_32(struct x86_emulate_ctxt *ctxt, u64 smbase)2446static int rsm_load_state_32(struct x86_emulate_ctxt *ctxt,
2447 const char *smstate)
2449{2448{
2450 struct desc_struct desc;2449 struct desc_struct desc;
2451 struct desc_ptr dt;2450 struct desc_ptr dt;
@@ -2453,53 +2452,55 @@ static int rsm_load_state_32(struct x86_emulate_ctxt *ctxt, u64 smbase) · 1 unmodified line
2453 u32 val, cr0, cr3, cr4;2452 u32 val, cr0, cr3, cr4;
2454 int i;2453 int i;
2455 2454
2456 cr0 = GET_SMSTATE(u32, smbase, 0x7ffc);2455 cr0 = GET_SMSTATE(u32, smstate, 0x7ffc);
2457 cr3 = GET_SMSTATE(u32, smbase, 0x7ff8);2456 cr3 = GET_SMSTATE(u32, smstate, 0x7ff8);
2458 ctxt->eflags = GET_SMSTATE(u32, smbase, 0x7ff4) | X86_EFLAGS_FIXED;2457 ctxt->eflags = GET_SMSTATE(u32, smstate, 0x7ff4) | X86_EFLAGS_FIXED;
2459 ctxt->_eip = GET_SMSTATE(u32, smbase, 0x7ff0);2458 ctxt->_eip = GET_SMSTATE(u32, smstate, 0x7ff0);
2460 2459
2461 for (i = 0; i < 8; i++)2460 for (i = 0; i < 8; i++)
2462 *reg_write(ctxt, i) = GET_SMSTATE(u32, smbase, 0x7fd0 + i * 4);2461 *reg_write(ctxt, i) = GET_SMSTATE(u32, smstate, 0x7fd0 + i * 4);
2463 2462
2464 val = GET_SMSTATE(u32, smbase, 0x7fcc);2463 val = GET_SMSTATE(u32, smstate, 0x7fcc);
2465 ctxt->ops->set_dr(ctxt, 6, (val & DR6_VOLATILE) | DR6_FIXED_1);2464 ctxt->ops->set_dr(ctxt, 6, (val & DR6_VOLATILE) | DR6_FIXED_1);
2466 val = GET_SMSTATE(u32, smbase, 0x7fc8);2465 val = GET_SMSTATE(u32, smstate, 0x7fc8);
2467 ctxt->ops->set_dr(ctxt, 7, (val & DR7_VOLATILE) | DR7_FIXED_1);2466 ctxt->ops->set_dr(ctxt, 7, (val & DR7_VOLATILE) | DR7_FIXED_1);
2468 2467
2469 selector = GET_SMSTATE(u32, smbase, 0x7fc4);2468 selector = GET_SMSTATE(u32, smstate, 0x7fc4);
2470 set_desc_base(&desc, GET_SMSTATE(u32, smbase, 0x7f64));2469 set_desc_base(&desc, GET_SMSTATE(u32, smstate, 0x7f64));
2471 set_desc_limit(&desc, GET_SMSTATE(u32, smbase, 0x7f60));2470 set_desc_limit(&desc, GET_SMSTATE(u32, smstate, 0x7f60));
2472 rsm_set_desc_flags(&desc, GET_SMSTATE(u32, smbase, 0x7f5c));2471 rsm_set_desc_flags(&desc, GET_SMSTATE(u32, smstate, 0x7f5c));
2473 ctxt->ops->set_segment(ctxt, selector, &desc, 0, VCPU_SREG_TR);2472 ctxt->ops->set_segment(ctxt, selector, &desc, 0, VCPU_SREG_TR);
2474 2473
2475 selector = GET_SMSTATE(u32, smbase, 0x7fc0);2474 selector = GET_SMSTATE(u32, smstate, 0x7fc0);
2476 set_desc_base(&desc, GET_SMSTATE(u32, smbase, 0x7f80));2475 set_desc_base(&desc, GET_SMSTATE(u32, smstate, 0x7f80));
2477 set_desc_limit(&desc, GET_SMSTATE(u32, smbase, 0x7f7c));2476 set_desc_limit(&desc, GET_SMSTATE(u32, smstate, 0x7f7c));
2478 rsm_set_desc_flags(&desc, GET_SMSTATE(u32, smbase, 0x7f78));2477 rsm_set_desc_flags(&desc, GET_SMSTATE(u32, smstate, 0x7f78));
2479 ctxt->ops->set_segment(ctxt, selector, &desc, 0, VCPU_SREG_LDTR);2478 ctxt->ops->set_segment(ctxt, selector, &desc, 0, VCPU_SREG_LDTR);
2480 2479
2481 dt.address = GET_SMSTATE(u32, smbase, 0x7f74);2480 dt.address = GET_SMSTATE(u32, smstate, 0x7f74);
2482 dt.size = GET_SMSTATE(u32, smbase, 0x7f70);2481 dt.size = GET_SMSTATE(u32, smstate, 0x7f70);
2483 ctxt->ops->set_gdt(ctxt, &dt);2482 ctxt->ops->set_gdt(ctxt, &dt);
2484 2483
2485 dt.address = GET_SMSTATE(u32, smbase, 0x7f58);2484 dt.address = GET_SMSTATE(u32, smstate, 0x7f58);
2486 dt.size = GET_SMSTATE(u32, smbase, 0x7f54);2485 dt.size = GET_SMSTATE(u32, smstate, 0x7f54);
2487 ctxt->ops->set_idt(ctxt, &dt);2486 ctxt->ops->set_idt(ctxt, &dt);
2488 2487
2489 for (i = 0; i < 6; i++) {2488 for (i = 0; i < 6; i++) {
2490 int r = rsm_load_seg_32(ctxt, smbase, i);2489 int r = rsm_load_seg_32(ctxt, smstate, i);
2491 if (r != X86EMUL_CONTINUE)2490 if (r != X86EMUL_CONTINUE)
2492 return r;2491 return r;
2493 }2492 }
2494 2493
2495 cr4 = GET_SMSTATE(u32, smbase, 0x7f14);2494 cr4 = GET_SMSTATE(u32, smstate, 0x7f14);
2496 2495
2497 ctxt->ops->set_smbase(ctxt, GET_SMSTATE(u32, smbase, 0x7ef8));2496 ctxt->ops->set_smbase(ctxt, GET_SMSTATE(u32, smstate, 0x7ef8));
2498 2497
2499 return rsm_enter_protected_mode(ctxt, cr0, cr3, cr4);2498 return rsm_enter_protected_mode(ctxt, cr0, cr3, cr4);
2500}2499}
2501 2500
2502static int rsm_load_state_64(struct x86_emulate_ctxt *ctxt, u64 smbase)2501#ifdef CONFIG_X86_64
2502static int rsm_load_state_64(struct x86_emulate_ctxt *ctxt,
2503 const char *smstate)
2503{2504{
2504 struct desc_struct desc;2505 struct desc_struct desc;
2505 struct desc_ptr dt;2506 struct desc_ptr dt;
@@ -2509,43 +2510,43 @@ static int rsm_load_state_64(struct x86_emulate_ctxt *ctxt, u64 smbase) · 3 unmodified lines
2509 int i, r;2510 int i, r;
2510 2511
2511 for (i = 0; i < 16; i++)2512 for (i = 0; i < 16; i++)
2512 *reg_write(ctxt, i) = GET_SMSTATE(u64, smbase, 0x7ff8 - i * 8);2513 *reg_write(ctxt, i) = GET_SMSTATE(u64, smstate, 0x7ff8 - i * 8);
2513 2514
2514 ctxt->_eip = GET_SMSTATE(u64, smbase, 0x7f78);2515 ctxt->_eip = GET_SMSTATE(u64, smstate, 0x7f78);
2515 ctxt->eflags = GET_SMSTATE(u32, smbase, 0x7f70) | X86_EFLAGS_FIXED;2516 ctxt->eflags = GET_SMSTATE(u32, smstate, 0x7f70) | X86_EFLAGS_FIXED;
2516 2517
2517 val = GET_SMSTATE(u32, smbase, 0x7f68);2518 val = GET_SMSTATE(u32, smstate, 0x7f68);
2518 ctxt->ops->set_dr(ctxt, 6, (val & DR6_VOLATILE) | DR6_FIXED_1);2519 ctxt->ops->set_dr(ctxt, 6, (val & DR6_VOLATILE) | DR6_FIXED_1);
2519 val = GET_SMSTATE(u32, smbase, 0x7f60);2520 val = GET_SMSTATE(u32, smstate, 0x7f60);
2520 ctxt->ops->set_dr(ctxt, 7, (val & DR7_VOLATILE) | DR7_FIXED_1);2521 ctxt->ops->set_dr(ctxt, 7, (val & DR7_VOLATILE) | DR7_FIXED_1);
2521 2522
2522 cr0 = GET_SMSTATE(u64, smbase, 0x7f58);2523 cr0 = GET_SMSTATE(u64, smstate, 0x7f58);
2523 cr3 = GET_SMSTATE(u64, smbase, 0x7f50);2524 cr3 = GET_SMSTATE(u64, smstate, 0x7f50);
2524 cr4 = GET_SMSTATE(u64, smbase, 0x7f48);2525 cr4 = GET_SMSTATE(u64, smstate, 0x7f48);
2525 ctxt->ops->set_smbase(ctxt, GET_SMSTATE(u32, smbase, 0x7f00));2526 ctxt->ops->set_smbase(ctxt, GET_SMSTATE(u32, smstate, 0x7f00));
2526 val = GET_SMSTATE(u64, smbase, 0x7ed0);2527 val = GET_SMSTATE(u64, smstate, 0x7ed0);
2527 ctxt->ops->set_msr(ctxt, MSR_EFER, val & ~EFER_LMA);2528 ctxt->ops->set_msr(ctxt, MSR_EFER, val & ~EFER_LMA);
2528 2529
2529 selector = GET_SMSTATE(u32, smbase, 0x7e90);2530 selector = GET_SMSTATE(u32, smstate, 0x7e90);
2530 rsm_set_desc_flags(&desc, GET_SMSTATE(u32, smbase, 0x7e92) << 8);2531 rsm_set_desc_flags(&desc, GET_SMSTATE(u32, smstate, 0x7e92) << 8);
2531 set_desc_limit(&desc, GET_SMSTATE(u32, smbase, 0x7e94));2532 set_desc_limit(&desc, GET_SMSTATE(u32, smstate, 0x7e94));
2532 set_desc_base(&desc, GET_SMSTATE(u32, smbase, 0x7e98));2533 set_desc_base(&desc, GET_SMSTATE(u32, smstate, 0x7e98));
2533 base3 = GET_SMSTATE(u32, smbase, 0x7e9c);2534 base3 = GET_SMSTATE(u32, smstate, 0x7e9c);
2534 ctxt->ops->set_segment(ctxt, selector, &desc, base3, VCPU_SREG_TR);2535 ctxt->ops->set_segment(ctxt, selector, &desc, base3, VCPU_SREG_TR);
2535 2536
2536 dt.size = GET_SMSTATE(u32, smbase, 0x7e84);2537 dt.size = GET_SMSTATE(u32, smstate, 0x7e84);
2537 dt.address = GET_SMSTATE(u64, smbase, 0x7e88);2538 dt.address = GET_SMSTATE(u64, smstate, 0x7e88);
2538 ctxt->ops->set_idt(ctxt, &dt);2539 ctxt->ops->set_idt(ctxt, &dt);
2539 2540
2540 selector = GET_SMSTATE(u32, smbase, 0x7e70);2541 selector = GET_SMSTATE(u32, smstate, 0x7e70);
2541 rsm_set_desc_flags(&desc, GET_SMSTATE(u32, smbase, 0x7e72) << 8);2542 rsm_set_desc_flags(&desc, GET_SMSTATE(u32, smstate, 0x7e72) << 8);
2542 set_desc_limit(&desc, GET_SMSTATE(u32, smbase, 0x7e74));2543 set_desc_limit(&desc, GET_SMSTATE(u32, smstate, 0x7e74));
2543 set_desc_base(&desc, GET_SMSTATE(u32, smbase, 0x7e78));2544 set_desc_base(&desc, GET_SMSTATE(u32, smstate, 0x7e78));
2544 base3 = GET_SMSTATE(u32, smbase, 0x7e7c);2545 base3 = GET_SMSTATE(u32, smstate, 0x7e7c);
2545 ctxt->ops->set_segment(ctxt, selector, &desc, base3, VCPU_SREG_LDTR);2546 ctxt->ops->set_segment(ctxt, selector, &desc, base3, VCPU_SREG_LDTR);
2546 2547
2547 dt.size = GET_SMSTATE(u32, smbase, 0x7e64);2548 dt.size = GET_SMSTATE(u32, smstate, 0x7e64);
2548 dt.address = GET_SMSTATE(u64, smbase, 0x7e68);2549 dt.address = GET_SMSTATE(u64, smstate, 0x7e68);
2549 ctxt->ops->set_gdt(ctxt, &dt);2550 ctxt->ops->set_gdt(ctxt, &dt);
2550 2551
2551 r = rsm_enter_protected_mode(ctxt, cr0, cr3, cr4);2552 r = rsm_enter_protected_mode(ctxt, cr0, cr3, cr4);
@@ -2553,37 +2554,49 @@ static int rsm_load_state_64(struct x86_emulate_ctxt *ctxt, u64 smbase) · 1 unmodified line
2553 return r;2554 return r;
2554 2555
2555 for (i = 0; i < 6; i++) {2556 for (i = 0; i < 6; i++) {
2556 r = rsm_load_seg_64(ctxt, smbase, i);2557 r = rsm_load_seg_64(ctxt, smstate, i);
2557 if (r != X86EMUL_CONTINUE)2558 if (r != X86EMUL_CONTINUE)
2558 return r;2559 return r;
2559 }2560 }
2560 2561
2561 return X86EMUL_CONTINUE;2562 return X86EMUL_CONTINUE;
2562}2563}
2564#endif
2563 2565
2564static int em_rsm(struct x86_emulate_ctxt *ctxt)2566static int em_rsm(struct x86_emulate_ctxt *ctxt)
2565{2567{
2566 unsigned long cr0, cr4, efer;2568 unsigned long cr0, cr4, efer;
2569 char buf[512];
2567 u64 smbase;2570 u64 smbase;
2568 int ret;2571 int ret;
2569 2572
2570 if ((ctxt->ops->get_hflags(ctxt) & X86EMUL_SMM_MASK) == 0)2573 if ((ctxt->ops->get_hflags(ctxt) & X86EMUL_SMM_MASK) == 0)
2571 return emulate_ud(ctxt);2574 return emulate_ud(ctxt);
2572 2575
2576 smbase = ctxt->ops->get_smbase(ctxt);
2577
2578 ret = ctxt->ops->read_phys(ctxt, smbase + 0xfe00, buf, sizeof(buf));
2579 if (ret != X86EMUL_CONTINUE)
2580 return X86EMUL_UNHANDLEABLE;
2581
2582 if ((ctxt->ops->get_hflags(ctxt) & X86EMUL_SMM_INSIDE_NMI_MASK) == 0)
2583 ctxt->ops->set_nmi_mask(ctxt, false);
2584
2585 ctxt->ops->set_hflags(ctxt, ctxt->ops->get_hflags(ctxt) &
2586 ~(X86EMUL_SMM_INSIDE_NMI_MASK | X86EMUL_SMM_MASK));
2587
2573 /*2588 /*
2574 * Get back to real mode, to prepare a safe state in which to load2589 * Get back to real mode, to prepare a safe state in which to load
2575 * CR0/CR3/CR4/EFER. It's all a bit more complicated if the vCPU2590 * CR0/CR3/CR4/EFER. It's all a bit more complicated if the vCPU
2576 * supports long mode.2591 * supports long mode.
2577 */2592 */
2578 cr4 = ctxt->ops->get_cr(ctxt, 4);
2579 if (emulator_has_longmode(ctxt)) {2593 if (emulator_has_longmode(ctxt)) {
2580 struct desc_struct cs_desc;2594 struct desc_struct cs_desc;
2581 2595
2582 /* Zero CR4.PCIDE before CR0.PG. */2596 /* Zero CR4.PCIDE before CR0.PG. */
2583 if (cr4 & X86_CR4_PCIDE) {2597 cr4 = ctxt->ops->get_cr(ctxt, 4);
2598 if (cr4 & X86_CR4_PCIDE)
2584 ctxt->ops->set_cr(ctxt, 4, cr4 & ~X86_CR4_PCIDE);2599 ctxt->ops->set_cr(ctxt, 4, cr4 & ~X86_CR4_PCIDE);
2585 cr4 &= ~X86_CR4_PCIDE;
2586 }
2587 2600
2588 /* A 32-bit code segment is required to clear EFER.LMA. */2601 /* A 32-bit code segment is required to clear EFER.LMA. */
2589 memset(&cs_desc, 0, sizeof(cs_desc));2602 memset(&cs_desc, 0, sizeof(cs_desc));
@@ -2597,39 +2610,39 @@ static int em_rsm(struct x86_emulate_ctxt *ctxt) · 7 unmodified lines
2597 if (cr0 & X86_CR0_PE)2610 if (cr0 & X86_CR0_PE)
2598 ctxt->ops->set_cr(ctxt, 0, cr0 & ~(X86_CR0_PG | X86_CR0_PE));2611 ctxt->ops->set_cr(ctxt, 0, cr0 & ~(X86_CR0_PG | X86_CR0_PE));
2599 2612
2600 /* Now clear CR4.PAE (which must be done before clearing EFER.LME). */2613 if (emulator_has_longmode(ctxt)) {
2601 if (cr4 & X86_CR4_PAE)2614 /* Clear CR4.PAE before clearing EFER.LME. */
2602 ctxt->ops->set_cr(ctxt, 4, cr4 & ~X86_CR4_PAE);2615 cr4 = ctxt->ops->get_cr(ctxt, 4);
2603 2616 if (cr4 & X86_CR4_PAE)
2604 /* And finally go back to 32-bit mode. */2617 ctxt->ops->set_cr(ctxt, 4, cr4 & ~X86_CR4_PAE);
2605 efer = 0;
2606 ctxt->ops->set_msr(ctxt, MSR_EFER, efer);
2607 2618
2608 smbase = ctxt->ops->get_smbase(ctxt);2619 /* And finally go back to 32-bit mode. */
2620 efer = 0;
2621 ctxt->ops->set_msr(ctxt, MSR_EFER, efer);
2622 }
2609 2623
2610 /*2624 /*
2611 * Give pre_leave_smm() a chance to make ISA-specific changes to the2625 * Give pre_leave_smm() a chance to make ISA-specific changes to the
2612 * vCPU state (e.g. enter guest mode) before loading state from the SMM2626 * vCPU state (e.g. enter guest mode) before loading state from the SMM
2613 * state-save area.2627 * state-save area.
2614 */2628 */
2615 if (ctxt->ops->pre_leave_smm(ctxt, smbase))2629 if (ctxt->ops->pre_leave_smm(ctxt, buf))
2616 return X86EMUL_UNHANDLEABLE;2630 return X86EMUL_UNHANDLEABLE;
2617 2631
2632#ifdef CONFIG_X86_64
2618 if (emulator_has_longmode(ctxt))2633 if (emulator_has_longmode(ctxt))
2619 ret = rsm_load_state_64(ctxt, smbase + 0x8000);2634 ret = rsm_load_state_64(ctxt, buf);
2620 else2635 else
2621 ret = rsm_load_state_32(ctxt, smbase + 0x8000);2636#endif
2637 ret = rsm_load_state_32(ctxt, buf);
2622 2638
2623 if (ret != X86EMUL_CONTINUE) {2639 if (ret != X86EMUL_CONTINUE) {
2624 /* FIXME: should triple fault */2640 /* FIXME: should triple fault */
2625 return X86EMUL_UNHANDLEABLE;2641 return X86EMUL_UNHANDLEABLE;
2626 }2642 }
2627 2643
2628 if ((ctxt->ops->get_hflags(ctxt) & X86EMUL_SMM_INSIDE_NMI_MASK) == 0)2644 ctxt->ops->post_leave_smm(ctxt);
2629 ctxt->ops->set_nmi_mask(ctxt, false);
2630 2645
2631 ctxt->ops->set_hflags(ctxt, ctxt->ops->get_hflags(ctxt) &
2632 ~(X86EMUL_SMM_INSIDE_NMI_MASK | X86EMUL_SMM_MASK));
2633 return X86EMUL_CONTINUE;2646 return X86EMUL_CONTINUE;
2634}2647}
2635 2648
arch/x86/kvm/lapic.c+3−1
@@ -138,6 +138,7 @@ static inline bool kvm_apic_map_get_logical_dest(struct kvm_apic_map *map, · 137 unmodified lines
138 if (offset <= max_apic_id) {138 if (offset <= max_apic_id) {
139 u8 cluster_size = min(max_apic_id - offset + 1, 16U);139 u8 cluster_size = min(max_apic_id - offset + 1, 16U);
140 140
141 offset = array_index_nospec(offset, map->max_apic_id + 1);
141 *cluster = &map->phys_map[offset];142 *cluster = &map->phys_map[offset];
142 *mask = dest_id & (0xffff >> (16 - cluster_size));143 *mask = dest_id & (0xffff >> (16 - cluster_size));
143 } else {144 } else {
@@ -901,7 +902,8 @@ static inline bool kvm_apic_map_get_dest_lapic(struct kvm *kvm, · 757 unmodified lines
901 if (irq->dest_id > map->max_apic_id) {902 if (irq->dest_id > map->max_apic_id) {
902 *bitmap = 0;903 *bitmap = 0;
903 } else {904 } else {
904 *dst = &map->phys_map[irq->dest_id];905 u32 dest_id = array_index_nospec(irq->dest_id, map->max_apic_id + 1);
906 *dst = &map->phys_map[dest_id];
905 *bitmap = 1;907 *bitmap = 1;
906 }908 }
907 return true;909 return true;
arch/x86/kvm/mmu.c+7−8
@@ -2007,7 +2007,7 @@ static int is_empty_shadow_page(u64 *spt) · 2006 unmodified lines
2007 * aggregate version in order to make the slab shrinker2007 * aggregate version in order to make the slab shrinker
2008 * faster2008 * faster
2009 */2009 */
2010static inline void kvm_mod_used_mmu_pages(struct kvm *kvm, int nr)2010static inline void kvm_mod_used_mmu_pages(struct kvm *kvm, unsigned long nr)
2011{2011{
2012 kvm->arch.n_used_mmu_pages += nr;2012 kvm->arch.n_used_mmu_pages += nr;
2013 percpu_counter_add(&kvm_total_used_mmu_pages, nr);2013 percpu_counter_add(&kvm_total_used_mmu_pages, nr);
@@ -2238,7 +2238,7 @@ static bool kvm_mmu_remote_flush_or_zap(struct kvm *kvm, · 224 unmodified lines
2238 struct list_head *invalid_list,2238 struct list_head *invalid_list,
2239 bool remote_flush)2239 bool remote_flush)
2240{2240{
2241 if (!remote_flush && !list_empty(invalid_list))2241 if (!remote_flush && list_empty(invalid_list))
2242 return false;2242 return false;
2243 2243
2244 if (!list_empty(invalid_list))2244 if (!list_empty(invalid_list))
@@ -2763,7 +2763,7 @@ static bool prepare_zap_oldest_mmu_page(struct kvm *kvm, · 518 unmodified lines
2763 * Changing the number of mmu pages allocated to the vm2763 * Changing the number of mmu pages allocated to the vm
2764 * Note: if goal_nr_mmu_pages is too small, you will get dead lock2764 * Note: if goal_nr_mmu_pages is too small, you will get dead lock
2765 */2765 */
2766void kvm_mmu_change_mmu_pages(struct kvm *kvm, unsigned int goal_nr_mmu_pages)2766void kvm_mmu_change_mmu_pages(struct kvm *kvm, unsigned long goal_nr_mmu_pages)
2767{2767{
2768 LIST_HEAD(invalid_list);2768 LIST_HEAD(invalid_list);
2769 2769
@@ -6031,10 +6031,10 @@ out: · 3261 unmodified lines
6031/*6031/*
6032 * Calculate mmu pages needed for kvm.6032 * Calculate mmu pages needed for kvm.
6033 */6033 */
6034unsigned int kvm_mmu_calculate_default_mmu_pages(struct kvm *kvm)6034unsigned long kvm_mmu_calculate_default_mmu_pages(struct kvm *kvm)
6035{6035{
6036 unsigned int nr_mmu_pages;6036 unsigned long nr_mmu_pages;
6037 unsigned int nr_pages = 0;6037 unsigned long nr_pages = 0;
6038 struct kvm_memslots *slots;6038 struct kvm_memslots *slots;
6039 struct kvm_memory_slot *memslot;6039 struct kvm_memory_slot *memslot;
6040 int i;6040 int i;
@@ -6047,8 +6047,7 @@ unsigned int kvm_mmu_calculate_default_mmu_pages(struct kvm *kvm) · 6 unmodified lines
6047 }6047 }
6048 6048
6049 nr_mmu_pages = nr_pages * KVM_PERMILLE_MMU_PAGES / 1000;6049 nr_mmu_pages = nr_pages * KVM_PERMILLE_MMU_PAGES / 1000;
6050 nr_mmu_pages = max(nr_mmu_pages,6050 nr_mmu_pages = max(nr_mmu_pages, KVM_MIN_ALLOC_MMU_PAGES);
6051 (unsigned int) KVM_MIN_ALLOC_MMU_PAGES);
6052 6051
6053 return nr_mmu_pages;6052 return nr_mmu_pages;
6054}6053}
arch/x86/kvm/mmu.h+1−1
@@ -64,7 +64,7 @@ bool kvm_can_do_async_pf(struct kvm_vcpu *vcpu); · 63 unmodified lines
64int kvm_handle_page_fault(struct kvm_vcpu *vcpu, u64 error_code,64int kvm_handle_page_fault(struct kvm_vcpu *vcpu, u64 error_code,
65 u64 fault_address, char *insn, int insn_len);65 u64 fault_address, char *insn, int insn_len);
66 66
67static inline unsigned int kvm_mmu_available_pages(struct kvm *kvm)67static inline unsigned long kvm_mmu_available_pages(struct kvm *kvm)
68{68{
69 if (kvm->arch.n_max_mmu_pages > kvm->arch.n_used_mmu_pages)69 if (kvm->arch.n_max_mmu_pages > kvm->arch.n_used_mmu_pages)
70 return kvm->arch.n_max_mmu_pages -70 return kvm->arch.n_max_mmu_pages -
arch/x86/kvm/pmu.c+4−0
@@ -281,9 +281,13 @@ static int kvm_pmu_rdpmc_vmware(struct kvm_vcpu *vcpu, unsigned idx, u64 *data) · 280 unmodified lines
281int kvm_pmu_rdpmc(struct kvm_vcpu *vcpu, unsigned idx, u64 *data)281int kvm_pmu_rdpmc(struct kvm_vcpu *vcpu, unsigned idx, u64 *data)
282{282{
283 bool fast_mode = idx & (1u << 31);283 bool fast_mode = idx & (1u << 31);
284 struct kvm_pmu *pmu = vcpu_to_pmu(vcpu);
284 struct kvm_pmc *pmc;285 struct kvm_pmc *pmc;
285 u64 ctr_val;286 u64 ctr_val;
286 287
288 if (!pmu->version)
289 return 1;
290
287 if (is_vmware_backdoor_pmc(idx))291 if (is_vmware_backdoor_pmc(idx))
288 return kvm_pmu_rdpmc_vmware(vcpu, idx, data);292 return kvm_pmu_rdpmc_vmware(vcpu, idx, data);
289 293
arch/x86/kvm/svm.c+47−32
@@ -262,6 +262,7 @@ struct amd_svm_iommu_ir { · 261 unmodified lines
262};262};
263 263
264#define AVIC_LOGICAL_ID_ENTRY_GUEST_PHYSICAL_ID_MASK (0xFF)264#define AVIC_LOGICAL_ID_ENTRY_GUEST_PHYSICAL_ID_MASK (0xFF)
265#define AVIC_LOGICAL_ID_ENTRY_VALID_BIT 31
265#define AVIC_LOGICAL_ID_ENTRY_VALID_MASK (1 << 31)266#define AVIC_LOGICAL_ID_ENTRY_VALID_MASK (1 << 31)
266 267
267#define AVIC_PHYSICAL_ID_ENTRY_HOST_PHYSICAL_ID_MASK (0xFFULL)268#define AVIC_PHYSICAL_ID_ENTRY_HOST_PHYSICAL_ID_MASK (0xFFULL)
@@ -2692,6 +2693,7 @@ static int npf_interception(struct vcpu_svm *svm) · 2424 unmodified lines
2692static int db_interception(struct vcpu_svm *svm)2693static int db_interception(struct vcpu_svm *svm)
2693{2694{
2694 struct kvm_run *kvm_run = svm->vcpu.run;2695 struct kvm_run *kvm_run = svm->vcpu.run;
2696 struct kvm_vcpu *vcpu = &svm->vcpu;
2695 2697
2696 if (!(svm->vcpu.guest_debug &2698 if (!(svm->vcpu.guest_debug &
2697 (KVM_GUESTDBG_SINGLESTEP | KVM_GUESTDBG_USE_HW_BP)) &&2699 (KVM_GUESTDBG_SINGLESTEP | KVM_GUESTDBG_USE_HW_BP)) &&
@@ -2702,6 +2704,8 @@ static int db_interception(struct vcpu_svm *svm) · 4 unmodified lines
2702 2704
2703 if (svm->nmi_singlestep) {2705 if (svm->nmi_singlestep) {
2704 disable_nmi_singlestep(svm);2706 disable_nmi_singlestep(svm);
2707 /* Make sure we check for pending NMIs upon entry */
2708 kvm_make_request(KVM_REQ_EVENT, vcpu);
2705 }2709 }
2706 2710
2707 if (svm->vcpu.guest_debug &2711 if (svm->vcpu.guest_debug &
@@ -4517,14 +4521,25 @@ static int avic_incomplete_ipi_interception(struct vcpu_svm *svm) · 1809 unmodified lines
4517 kvm_lapic_reg_write(apic, APIC_ICR, icrl);4521 kvm_lapic_reg_write(apic, APIC_ICR, icrl);
4518 break;4522 break;
4519 case AVIC_IPI_FAILURE_TARGET_NOT_RUNNING: {4523 case AVIC_IPI_FAILURE_TARGET_NOT_RUNNING: {
4524 int i;
4525 struct kvm_vcpu *vcpu;
4526 struct kvm *kvm = svm->vcpu.kvm;
4520 struct kvm_lapic *apic = svm->vcpu.arch.apic;4527 struct kvm_lapic *apic = svm->vcpu.arch.apic;
4521 4528
4522 /*4529 /*
4523 * Update ICR high and low, then emulate sending IPI,4530 * At this point, we expect that the AVIC HW has already
4524 * which is handled when writing APIC_ICR.4531 * set the appropriate IRR bits on the valid target
4532 * vcpus. So, we just need to kick the appropriate vcpu.
4525 */4533 */
4526 kvm_lapic_reg_write(apic, APIC_ICR2, icrh);4534 kvm_for_each_vcpu(i, vcpu, kvm) {
4527 kvm_lapic_reg_write(apic, APIC_ICR, icrl);4535 bool m = kvm_apic_match_dest(vcpu, apic,
4536 icrl & KVM_APIC_SHORT_MASK,
4537 GET_APIC_DEST_FIELD(icrh),
4538 icrl & KVM_APIC_DEST_MASK);
4539
4540 if (m && !avic_vcpu_is_running(vcpu))
4541 kvm_vcpu_wake_up(vcpu);
4542 }
4528 break;4543 break;
4529 }4544 }
4530 case AVIC_IPI_FAILURE_INVALID_TARGET:4545 case AVIC_IPI_FAILURE_INVALID_TARGET:
@@ -4596,7 +4611,7 @@ static void avic_invalidate_logical_id_entry(struct kvm_vcpu *vcpu) · 65 unmodified lines
4596 u32 *entry = avic_get_logical_id_entry(vcpu, svm->ldr_reg, flat);4611 u32 *entry = avic_get_logical_id_entry(vcpu, svm->ldr_reg, flat);
4597 4612
4598 if (entry)4613 if (entry)
4599 WRITE_ONCE(*entry, (u32) ~AVIC_LOGICAL_ID_ENTRY_VALID_MASK);4614 clear_bit(AVIC_LOGICAL_ID_ENTRY_VALID_BIT, (unsigned long *)entry);
4600}4615}
4601 4616
4602static int avic_handle_ldr_update(struct kvm_vcpu *vcpu)4617static int avic_handle_ldr_update(struct kvm_vcpu *vcpu)
@@ -5621,6 +5636,7 @@ static void svm_vcpu_run(struct kvm_vcpu *vcpu) · 1018 unmodified lines
5621 svm->vmcb->save.cr2 = vcpu->arch.cr2;5636 svm->vmcb->save.cr2 = vcpu->arch.cr2;
5622 5637
5623 clgi();5638 clgi();
5639 kvm_load_guest_xcr0(vcpu);
5624 5640
5625 /*5641 /*
5626 * If this vCPU has touched SPEC_CTRL, restore the guest's value if5642 * If this vCPU has touched SPEC_CTRL, restore the guest's value if
@@ -5766,6 +5782,7 @@ static void svm_vcpu_run(struct kvm_vcpu *vcpu) · 139 unmodified lines
5766 if (unlikely(svm->vmcb->control.exit_code == SVM_EXIT_NMI))5782 if (unlikely(svm->vmcb->control.exit_code == SVM_EXIT_NMI))
5767 kvm_before_interrupt(&svm->vcpu);5783 kvm_before_interrupt(&svm->vcpu);
5768 5784
5785 kvm_put_guest_xcr0(vcpu);
5769 stgi();5786 stgi();
5770 5787
5771 /* Any pending NMI will happen here */5788 /* Any pending NMI will happen here */
@@ -6215,32 +6232,24 @@ static int svm_pre_enter_smm(struct kvm_vcpu *vcpu, char *smstate) · 443 unmodified lines
6215 return 0;6232 return 0;
6216}6233}
6217 6234
6218static int svm_pre_leave_smm(struct kvm_vcpu *vcpu, u64 smbase)6235static int svm_pre_leave_smm(struct kvm_vcpu *vcpu, const char *smstate)
6219{6236{
6220 struct vcpu_svm *svm = to_svm(vcpu);6237 struct vcpu_svm *svm = to_svm(vcpu);
6221 struct vmcb *nested_vmcb;6238 struct vmcb *nested_vmcb;
6222 struct page *page;6239 struct page *page;
6223 struct {6240 u64 guest;
6224 u64 guest;6241 u64 vmcb;
6225 u64 vmcb;
6226 } svm_state_save;
6227 int ret;
6228 6242
6229 ret = kvm_vcpu_read_guest(vcpu, smbase + 0xfed8, &svm_state_save,6243 guest = GET_SMSTATE(u64, smstate, 0x7ed8);
6230 sizeof(svm_state_save));6244 vmcb = GET_SMSTATE(u64, smstate, 0x7ee0);
6231 if (ret)
6232 return ret;
6233 6245
6234 if (svm_state_save.guest) {6246 if (guest) {
6235 vcpu->arch.hflags &= ~HF_SMM_MASK;6247 nested_vmcb = nested_svm_map(svm, vmcb, &page);
6236 nested_vmcb = nested_svm_map(svm, svm_state_save.vmcb, &page);6248 if (!nested_vmcb)
6237 if (nested_vmcb)6249 return 1;
6238 enter_svm_guest_mode(svm, svm_state_save.vmcb, nested_vmcb, page);6250 enter_svm_guest_mode(svm, vmcb, nested_vmcb, page);
6239 else
6240 ret = 1;
6241 vcpu->arch.hflags |= HF_SMM_MASK;
6242 }6251 }
6243 return ret;6252 return 0;
6244}6253}
6245 6254
6246static int enable_smi_window(struct kvm_vcpu *vcpu)6255static int enable_smi_window(struct kvm_vcpu *vcpu)
@@ -6422,11 +6431,11 @@ e_free: · 175 unmodified lines
6422 return ret;6431 return ret;
6423}6432}
6424 6433
6425static int get_num_contig_pages(int idx, struct page **inpages,6434static unsigned long get_num_contig_pages(unsigned long idx,
6426 unsigned long npages)6435 struct page **inpages, unsigned long npages)
6427{6436{
6428 unsigned long paddr, next_paddr;6437 unsigned long paddr, next_paddr;
6429 int i = idx + 1, pages = 1;6438 unsigned long i = idx + 1, pages = 1;
6430 6439
6431 /* find the number of contiguous pages starting from idx */6440 /* find the number of contiguous pages starting from idx */
6432 paddr = __sme_page_pa(inpages[idx]);6441 paddr = __sme_page_pa(inpages[idx]);
@@ -6445,12 +6454,12 @@ static int get_num_contig_pages(int idx, struct page **inpages, · 12 unmodified lines
6445 6454
6446static int sev_launch_update_data(struct kvm *kvm, struct kvm_sev_cmd *argp)6455static int sev_launch_update_data(struct kvm *kvm, struct kvm_sev_cmd *argp)
6447{6456{
6448 unsigned long vaddr, vaddr_end, next_vaddr, npages, size;6457 unsigned long vaddr, vaddr_end, next_vaddr, npages, pages, size, i;
6449 struct kvm_sev_info *sev = &to_kvm_svm(kvm)->sev_info;6458 struct kvm_sev_info *sev = &to_kvm_svm(kvm)->sev_info;
6450 struct kvm_sev_launch_update_data params;6459 struct kvm_sev_launch_update_data params;
6451 struct sev_data_launch_update_data *data;6460 struct sev_data_launch_update_data *data;
6452 struct page **inpages;6461 struct page **inpages;
6453 int i, ret, pages;6462 int ret;
6454 6463
6455 if (!sev_guest(kvm))6464 if (!sev_guest(kvm))
6456 return -ENOTTY;6465 return -ENOTTY;
@@ -6799,7 +6808,8 @@ static int sev_dbg_crypt(struct kvm *kvm, struct kvm_sev_cmd *argp, bool dec) · 342 unmodified lines
6799 struct page **src_p, **dst_p;6808 struct page **src_p, **dst_p;
6800 struct kvm_sev_dbg debug;6809 struct kvm_sev_dbg debug;
6801 unsigned long n;6810 unsigned long n;
6802 int ret, size;6811 unsigned int size;
6812 int ret;
6803 6813
6804 if (!sev_guest(kvm))6814 if (!sev_guest(kvm))
6805 return -ENOTTY;6815 return -ENOTTY;
@@ -6807,6 +6817,11 @@ static int sev_dbg_crypt(struct kvm *kvm, struct kvm_sev_cmd *argp, bool dec) · 1 unmodified line
6807 if (copy_from_user(&debug, (void __user *)(uintptr_t)argp->data, sizeof(debug)))6817 if (copy_from_user(&debug, (void __user *)(uintptr_t)argp->data, sizeof(debug)))
6808 return -EFAULT;6818 return -EFAULT;
6809 6819
6820 if (!debug.len || debug.src_uaddr + debug.len < debug.src_uaddr)
6821 return -EINVAL;
6822 if (!debug.dst_uaddr)
6823 return -EINVAL;
6824
6810 vaddr = debug.src_uaddr;6825 vaddr = debug.src_uaddr;
6811 size = debug.len;6826 size = debug.len;
6812 vaddr_end = vaddr + size;6827 vaddr_end = vaddr + size;
@@ -6857,8 +6872,8 @@ static int sev_dbg_crypt(struct kvm *kvm, struct kvm_sev_cmd *argp, bool dec) · 44 unmodified lines
6857 dst_vaddr,6872 dst_vaddr,
6858 len, &argp->error);6873 len, &argp->error);
6859 6874
6860 sev_unpin_memory(kvm, src_p, 1);6875 sev_unpin_memory(kvm, src_p, n);
6861 sev_unpin_memory(kvm, dst_p, 1);6876 sev_unpin_memory(kvm, dst_p, n);
6862 6877
6863 if (ret)6878 if (ret)
6864 goto err;6879 goto err;
arch/x86/kvm/trace.h+2−2
@@ -438,13 +438,13 @@ TRACE_EVENT(kvm_apic_ipi, · 437 unmodified lines
438);438);
439 439
440TRACE_EVENT(kvm_apic_accept_irq,440TRACE_EVENT(kvm_apic_accept_irq,
441 TP_PROTO(__u32 apicid, __u16 dm, __u8 tm, __u8 vec),441 TP_PROTO(__u32 apicid, __u16 dm, __u16 tm, __u8 vec),
442 TP_ARGS(apicid, dm, tm, vec),442 TP_ARGS(apicid, dm, tm, vec),
443 443
444 TP_STRUCT__entry(444 TP_STRUCT__entry(
445 __field( __u32, apicid )445 __field( __u32, apicid )
446 __field( __u16, dm )446 __field( __u16, dm )
447 __field( __u8, tm )447 __field( __u16, tm )
448 __field( __u8, vec )448 __field( __u8, vec )
449 ),449 ),
450 450
arch/x86/kvm/vmx/nested.c+81−40
@@ -500,6 +500,17 @@ static void nested_vmx_disable_intercept_for_msr(unsigned long *msr_bitmap_l1, · 499 unmodified lines
500 }500 }
501}501}
502 502
503static inline void enable_x2apic_msr_intercepts(unsigned long *msr_bitmap) {
504 int msr;
505
506 for (msr = 0x800; msr <= 0x8ff; msr += BITS_PER_LONG) {
507 unsigned word = msr / BITS_PER_LONG;
508
509 msr_bitmap[word] = ~0;
510 msr_bitmap[word + (0x800 / sizeof(long))] = ~0;
511 }
512}
513
503/*514/*
504 * Merge L0's and L1's MSR bitmap, return false to indicate that515 * Merge L0's and L1's MSR bitmap, return false to indicate that
505 * we do not use the hardware.516 * we do not use the hardware.
@@ -541,39 +552,44 @@ static inline bool nested_vmx_prepare_msr_bitmap(struct kvm_vcpu *vcpu, · 35 unmodified lines
541 return false;552 return false;
542 553
543 msr_bitmap_l1 = (unsigned long *)kmap(page);554 msr_bitmap_l1 = (unsigned long *)kmap(page);
544 if (nested_cpu_has_apic_reg_virt(vmcs12)) {
545 /*
546 * L0 need not intercept reads for MSRs between 0x800 and 0x8ff, it
547 * just lets the processor take the value from the virtual-APIC page;
548 * take those 256 bits directly from the L1 bitmap.
549 */
550 for (msr = 0x800; msr <= 0x8ff; msr += BITS_PER_LONG) {
551 unsigned word = msr / BITS_PER_LONG;
552 msr_bitmap_l0[word] = msr_bitmap_l1[word];
553 msr_bitmap_l0[word + (0x800 / sizeof(long))] = ~0;
554 }
555 } else {
556 for (msr = 0x800; msr <= 0x8ff; msr += BITS_PER_LONG) {
557 unsigned word = msr / BITS_PER_LONG;
558 msr_bitmap_l0[word] = ~0;
559 msr_bitmap_l0[word + (0x800 / sizeof(long))] = ~0;
560 }
561 }
562 555
563 nested_vmx_disable_intercept_for_msr(556 /*
564 msr_bitmap_l1, msr_bitmap_l0,557 * To keep the control flow simple, pay eight 8-byte writes (sixteen
565 X2APIC_MSR(APIC_TASKPRI),558 * 4-byte writes on 32-bit systems) up front to enable intercepts for
566 MSR_TYPE_W);559 * the x2APIC MSR range and selectively disable them below.
560 */
561 enable_x2apic_msr_intercepts(msr_bitmap_l0);
562
563 if (nested_cpu_has_virt_x2apic_mode(vmcs12)) {
564 if (nested_cpu_has_apic_reg_virt(vmcs12)) {
565 /*
566 * L0 need not intercept reads for MSRs between 0x800
567 * and 0x8ff, it just lets the processor take the value
568 * from the virtual-APIC page; take those 256 bits
569 * directly from the L1 bitmap.
570 */
571 for (msr = 0x800; msr <= 0x8ff; msr += BITS_PER_LONG) {
572 unsigned word = msr / BITS_PER_LONG;
573
574 msr_bitmap_l0[word] = msr_bitmap_l1[word];
575 }
576 }
567 577
568 if (nested_cpu_has_vid(vmcs12)) {
569 nested_vmx_disable_intercept_for_msr(
570 msr_bitmap_l1, msr_bitmap_l0,
571 X2APIC_MSR(APIC_EOI),
572 MSR_TYPE_W);
573 nested_vmx_disable_intercept_for_msr(578 nested_vmx_disable_intercept_for_msr(
574 msr_bitmap_l1, msr_bitmap_l0,579 msr_bitmap_l1, msr_bitmap_l0,
575 X2APIC_MSR(APIC_SELF_IPI),580 X2APIC_MSR(APIC_TASKPRI),
576 MSR_TYPE_W);581 MSR_TYPE_R | MSR_TYPE_W);
582
583 if (nested_cpu_has_vid(vmcs12)) {
584 nested_vmx_disable_intercept_for_msr(
585 msr_bitmap_l1, msr_bitmap_l0,
586 X2APIC_MSR(APIC_EOI),
587 MSR_TYPE_W);
588 nested_vmx_disable_intercept_for_msr(
589 msr_bitmap_l1, msr_bitmap_l0,
590 X2APIC_MSR(APIC_SELF_IPI),
591 MSR_TYPE_W);
592 }
577 }593 }
578 594
579 if (spec_ctrl)595 if (spec_ctrl)
@@ -2857,20 +2873,27 @@ static void nested_get_vmcs12_pages(struct kvm_vcpu *vcpu) · 2277 unmodified lines
2857 /*2873 /*
2858 * If translation failed, VM entry will fail because2874 * If translation failed, VM entry will fail because
2859 * prepare_vmcs02 set VIRTUAL_APIC_PAGE_ADDR to -1ull.2875 * prepare_vmcs02 set VIRTUAL_APIC_PAGE_ADDR to -1ull.
2860 * Failing the vm entry is _not_ what the processor
2861 * does but it's basically the only possibility we
2862 * have. We could still enter the guest if CR8 load
2863 * exits are enabled, CR8 store exits are enabled, and
2864 * virtualize APIC access is disabled; in this case
2865 * the processor would never use the TPR shadow and we
2866 * could simply clear the bit from the execution
2867 * control. But such a configuration is useless, so
2868 * let's keep the code simple.
2869 */2876 */
2870 if (!is_error_page(page)) {2877 if (!is_error_page(page)) {
2871 vmx->nested.virtual_apic_page = page;2878 vmx->nested.virtual_apic_page = page;
2872 hpa = page_to_phys(vmx->nested.virtual_apic_page);2879 hpa = page_to_phys(vmx->nested.virtual_apic_page);
2873 vmcs_write64(VIRTUAL_APIC_PAGE_ADDR, hpa);2880 vmcs_write64(VIRTUAL_APIC_PAGE_ADDR, hpa);
2881 } else if (nested_cpu_has(vmcs12, CPU_BASED_CR8_LOAD_EXITING) &&
2882 nested_cpu_has(vmcs12, CPU_BASED_CR8_STORE_EXITING) &&
2883 !nested_cpu_has2(vmcs12, SECONDARY_EXEC_VIRTUALIZE_APIC_ACCESSES)) {
2884 /*
2885 * The processor will never use the TPR shadow, simply
2886 * clear the bit from the execution control. Such a
2887 * configuration is useless, but it happens in tests.
2888 * For any other configuration, failing the vm entry is
2889 * _not_ what the processor does but it's basically the
2890 * only possibility we have.
2891 */
2892 vmcs_clear_bits(CPU_BASED_VM_EXEC_CONTROL,
2893 CPU_BASED_TPR_SHADOW);
2894 } else {
2895 printk("bad virtual-APIC page address\n");
2896 dump_vmcs();
2874 }2897 }
2875 }2898 }
2876 2899
@@ -3773,8 +3796,18 @@ static void nested_vmx_restore_host_state(struct kvm_vcpu *vcpu) · 896 unmodified lines
3773 vmx_set_cr4(vcpu, vmcs_readl(CR4_READ_SHADOW));3796 vmx_set_cr4(vcpu, vmcs_readl(CR4_READ_SHADOW));
3774 3797
3775 nested_ept_uninit_mmu_context(vcpu);3798 nested_ept_uninit_mmu_context(vcpu);
3776 vcpu->arch.cr3 = vmcs_readl(GUEST_CR3);3799
3777 __set_bit(VCPU_EXREG_CR3, (ulong *)&vcpu->arch.regs_avail);3800 /*
3801 * This is only valid if EPT is in use, otherwise the vmcs01 GUEST_CR3
3802 * points to shadow pages! Fortunately we only get here after a WARN_ON
3803 * if EPT is disabled, so a VMabort is perfectly fine.
3804 */
3805 if (enable_ept) {
3806 vcpu->arch.cr3 = vmcs_readl(GUEST_CR3);
3807 __set_bit(VCPU_EXREG_CR3, (ulong *)&vcpu->arch.regs_avail);
3808 } else {
3809 nested_vmx_abort(vcpu, VMX_ABORT_VMCS_CORRUPTED);
3810 }
3778 3811
3779 /*3812 /*
3780 * Use ept_save_pdptrs(vcpu) to load the MMU's cached PDPTRs3813 * Use ept_save_pdptrs(vcpu) to load the MMU's cached PDPTRs
@@ -5722,6 +5755,14 @@ __init int nested_vmx_hardware_setup(int (*exit_handlers[])(struct kvm_vcpu *)) · 1941 unmodified lines
5722{5755{
5723 int i;5756 int i;
5724 5757
5758 /*
5759 * Without EPT it is not possible to restore L1's CR3 and PDPTR on
5760 * VMfail, because they are not available in vmcs01. Just always
5761 * use hardware checks.
5762 */
5763 if (!enable_ept)
5764 nested_early_check = 1;
5765
5725 if (!cpu_has_vmx_shadow_vmcs())5766 if (!cpu_has_vmx_shadow_vmcs())
5726 enable_shadow_vmcs = 0;5767 enable_shadow_vmcs = 0;
5727 if (enable_shadow_vmcs) {5768 if (enable_shadow_vmcs) {
arch/x86/kvm/vmx/vmx.c+31−4
@@ -5603,7 +5603,7 @@ static void vmx_dump_dtsel(char *name, uint32_t limit) · 5602 unmodified lines
5603 vmcs_readl(limit + GUEST_GDTR_BASE - GUEST_GDTR_LIMIT));5603 vmcs_readl(limit + GUEST_GDTR_BASE - GUEST_GDTR_LIMIT));
5604}5604}
5605 5605
5606static void dump_vmcs(void)5606void dump_vmcs(void)
5607{5607{
5608 u32 vmentry_ctl = vmcs_read32(VM_ENTRY_CONTROLS);5608 u32 vmentry_ctl = vmcs_read32(VM_ENTRY_CONTROLS);
5609 u32 vmexit_ctl = vmcs_read32(VM_EXIT_CONTROLS);5609 u32 vmexit_ctl = vmcs_read32(VM_EXIT_CONTROLS);
@@ -6410,6 +6410,8 @@ static void vmx_vcpu_run(struct kvm_vcpu *vcpu) · 800 unmodified lines
6410 if (vcpu->guest_debug & KVM_GUESTDBG_SINGLESTEP)6410 if (vcpu->guest_debug & KVM_GUESTDBG_SINGLESTEP)
6411 vmx_set_interrupt_shadow(vcpu, 0);6411 vmx_set_interrupt_shadow(vcpu, 0);
6412 6412
6413 kvm_load_guest_xcr0(vcpu);
6414
6413 if (static_cpu_has(X86_FEATURE_PKU) &&6415 if (static_cpu_has(X86_FEATURE_PKU) &&
6414 kvm_read_cr4_bits(vcpu, X86_CR4_PKE) &&6416 kvm_read_cr4_bits(vcpu, X86_CR4_PKE) &&
6415 vcpu->arch.pkru != vmx->host_pkru)6417 vcpu->arch.pkru != vmx->host_pkru)
@@ -6506,6 +6508,8 @@ static void vmx_vcpu_run(struct kvm_vcpu *vcpu) · 90 unmodified lines
6506 __write_pkru(vmx->host_pkru);6508 __write_pkru(vmx->host_pkru);
6507 }6509 }
6508 6510
6511 kvm_put_guest_xcr0(vcpu);
6512
6509 vmx->nested.nested_run_pending = 0;6513 vmx->nested.nested_run_pending = 0;
6510 vmx->idt_vectoring_info = 0;6514 vmx->idt_vectoring_info = 0;
6511 6515
@@ -6852,6 +6856,30 @@ static void nested_vmx_entry_exit_ctls_update(struct kvm_vcpu *vcpu) · 340 unmodified lines
6852 }6856 }
6853}6857}
6854 6858
6859static bool guest_cpuid_has_pmu(struct kvm_vcpu *vcpu)
6860{
6861 struct kvm_cpuid_entry2 *entry;
6862 union cpuid10_eax eax;
6863
6864 entry = kvm_find_cpuid_entry(vcpu, 0xa, 0);
6865 if (!entry)
6866 return false;
6867
6868 eax.full = entry->eax;
6869 return (eax.split.version_id > 0);
6870}
6871
6872static void nested_vmx_procbased_ctls_update(struct kvm_vcpu *vcpu)
6873{
6874 struct vcpu_vmx *vmx = to_vmx(vcpu);
6875 bool pmu_enabled = guest_cpuid_has_pmu(vcpu);
6876
6877 if (pmu_enabled)
6878 vmx->nested.msrs.procbased_ctls_high |= CPU_BASED_RDPMC_EXITING;
6879 else
6880 vmx->nested.msrs.procbased_ctls_high &= ~CPU_BASED_RDPMC_EXITING;
6881}
6882
6855static void update_intel_pt_cfg(struct kvm_vcpu *vcpu)6883static void update_intel_pt_cfg(struct kvm_vcpu *vcpu)
6856{6884{
6857 struct vcpu_vmx *vmx = to_vmx(vcpu);6885 struct vcpu_vmx *vmx = to_vmx(vcpu);
@@ -6940,6 +6968,7 @@ static void vmx_cpuid_update(struct kvm_vcpu *vcpu) · 82 unmodified lines
6940 if (nested_vmx_allowed(vcpu)) {6968 if (nested_vmx_allowed(vcpu)) {
6941 nested_vmx_cr_fixed1_bits_update(vcpu);6969 nested_vmx_cr_fixed1_bits_update(vcpu);
6942 nested_vmx_entry_exit_ctls_update(vcpu);6970 nested_vmx_entry_exit_ctls_update(vcpu);
6971 nested_vmx_procbased_ctls_update(vcpu);
6943 }6972 }
6944 6973
6945 if (boot_cpu_has(X86_FEATURE_INTEL_PT) &&6974 if (boot_cpu_has(X86_FEATURE_INTEL_PT) &&
@@ -7369,7 +7398,7 @@ static int vmx_pre_enter_smm(struct kvm_vcpu *vcpu, char *smstate) · 423 unmodified lines
7369 return 0;7398 return 0;
7370}7399}
7371 7400
7372static int vmx_pre_leave_smm(struct kvm_vcpu *vcpu, u64 smbase)7401static int vmx_pre_leave_smm(struct kvm_vcpu *vcpu, const char *smstate)
7373{7402{
7374 struct vcpu_vmx *vmx = to_vmx(vcpu);7403 struct vcpu_vmx *vmx = to_vmx(vcpu);
7375 int ret;7404 int ret;
@@ -7380,9 +7409,7 @@ static int vmx_pre_leave_smm(struct kvm_vcpu *vcpu, u64 smbase) · 4 unmodified lines
7380 }7409 }
7381 7410
7382 if (vmx->nested.smm.guest_mode) {7411 if (vmx->nested.smm.guest_mode) {
7383 vcpu->arch.hflags &= ~HF_SMM_MASK;
7384 ret = nested_vmx_enter_non_root_mode(vcpu, false);7412 ret = nested_vmx_enter_non_root_mode(vcpu, false);
7385 vcpu->arch.hflags |= HF_SMM_MASK;
7386 if (ret)7413 if (ret)
7387 return ret;7414 return ret;
7388 7415
arch/x86/kvm/vmx/vmx.h+2−0
@@ -517,4 +517,6 @@ static inline void decache_tsc_multiplier(struct vcpu_vmx *vmx) · 516 unmodified lines
517 vmcs_write64(TSC_MULTIPLIER, vmx->current_tsc_ratio);517 vmcs_write64(TSC_MULTIPLIER, vmx->current_tsc_ratio);
518}518}
519 519
520void dump_vmcs(void);
521
520#endif /* __KVM_X86_VMX_H */522#endif /* __KVM_X86_VMX_H */
arch/x86/kvm/x86.c+31−33
@@ -800,7 +800,7 @@ void kvm_lmsw(struct kvm_vcpu *vcpu, unsigned long msw) · 799 unmodified lines
800}800}
801EXPORT_SYMBOL_GPL(kvm_lmsw);801EXPORT_SYMBOL_GPL(kvm_lmsw);
802 802
803static void kvm_load_guest_xcr0(struct kvm_vcpu *vcpu)803void kvm_load_guest_xcr0(struct kvm_vcpu *vcpu)
804{804{
805 if (kvm_read_cr4_bits(vcpu, X86_CR4_OSXSAVE) &&805 if (kvm_read_cr4_bits(vcpu, X86_CR4_OSXSAVE) &&
806 !vcpu->guest_xcr0_loaded) {806 !vcpu->guest_xcr0_loaded) {
@@ -810,8 +810,9 @@ static void kvm_load_guest_xcr0(struct kvm_vcpu *vcpu) · 3 unmodified lines
810 vcpu->guest_xcr0_loaded = 1;810 vcpu->guest_xcr0_loaded = 1;
811 }811 }
812}812}
813EXPORT_SYMBOL_GPL(kvm_load_guest_xcr0);
813 814
814static void kvm_put_guest_xcr0(struct kvm_vcpu *vcpu)815void kvm_put_guest_xcr0(struct kvm_vcpu *vcpu)
815{816{
816 if (vcpu->guest_xcr0_loaded) {817 if (vcpu->guest_xcr0_loaded) {
817 if (vcpu->arch.xcr0 != host_xcr0)818 if (vcpu->arch.xcr0 != host_xcr0)
@@ -819,6 +820,7 @@ static void kvm_put_guest_xcr0(struct kvm_vcpu *vcpu) · 1 unmodified line
819 vcpu->guest_xcr0_loaded = 0;820 vcpu->guest_xcr0_loaded = 0;
820 }821 }
821}822}
823EXPORT_SYMBOL_GPL(kvm_put_guest_xcr0);
822 824
823static int __kvm_set_xcr(struct kvm_vcpu *vcpu, u32 index, u64 xcr)825static int __kvm_set_xcr(struct kvm_vcpu *vcpu, u32 index, u64 xcr)
824{826{
@@ -3093,7 +3095,7 @@ int kvm_vm_ioctl_check_extension(struct kvm *kvm, long ext) · 2268 unmodified lines
3093 break;3095 break;
3094 case KVM_CAP_NESTED_STATE:3096 case KVM_CAP_NESTED_STATE:
3095 r = kvm_x86_ops->get_nested_state ?3097 r = kvm_x86_ops->get_nested_state ?
3096 kvm_x86_ops->get_nested_state(NULL, 0, 0) : 0;3098 kvm_x86_ops->get_nested_state(NULL, NULL, 0) : 0;
3097 break;3099 break;
3098 default:3100 default:
3099 break;3101 break;
@@ -3528,7 +3530,7 @@ static void kvm_vcpu_ioctl_x86_get_vcpu_events(struct kvm_vcpu *vcpu, · 428 unmodified lines
3528 memset(&events->reserved, 0, sizeof(events->reserved));3530 memset(&events->reserved, 0, sizeof(events->reserved));
3529}3531}
3530 3532
3531static void kvm_set_hflags(struct kvm_vcpu *vcpu, unsigned emul_flags);3533static void kvm_smm_changed(struct kvm_vcpu *vcpu);
3532 3534
3533static int kvm_vcpu_ioctl_x86_set_vcpu_events(struct kvm_vcpu *vcpu,3535static int kvm_vcpu_ioctl_x86_set_vcpu_events(struct kvm_vcpu *vcpu,
3534 struct kvm_vcpu_events *events)3536 struct kvm_vcpu_events *events)
@@ -3588,12 +3590,13 @@ static int kvm_vcpu_ioctl_x86_set_vcpu_events(struct kvm_vcpu *vcpu, · 53 unmodified lines
3588 vcpu->arch.apic->sipi_vector = events->sipi_vector;3590 vcpu->arch.apic->sipi_vector = events->sipi_vector;
3589 3591
3590 if (events->flags & KVM_VCPUEVENT_VALID_SMM) {3592 if (events->flags & KVM_VCPUEVENT_VALID_SMM) {
3591 u32 hflags = vcpu->arch.hflags;3593 if (!!(vcpu->arch.hflags & HF_SMM_MASK) != events->smi.smm) {
3592 if (events->smi.smm)3594 if (events->smi.smm)
3593 hflags |= HF_SMM_MASK;3595 vcpu->arch.hflags |= HF_SMM_MASK;
3594 else3596 else
3595 hflags &= ~HF_SMM_MASK;3597 vcpu->arch.hflags &= ~HF_SMM_MASK;
3596 kvm_set_hflags(vcpu, hflags);3598 kvm_smm_changed(vcpu);
3599 }
3597 3600
3598 vcpu->arch.smi_pending = events->smi.pending;3601 vcpu->arch.smi_pending = events->smi.pending;
3599 3602
@@ -4270,7 +4273,7 @@ static int kvm_vm_ioctl_set_identity_map_addr(struct kvm *kvm, · 670 unmodified lines
4270}4273}
4271 4274
4272static int kvm_vm_ioctl_set_nr_mmu_pages(struct kvm *kvm,4275static int kvm_vm_ioctl_set_nr_mmu_pages(struct kvm *kvm,
4273 u32 kvm_nr_mmu_pages)4276 unsigned long kvm_nr_mmu_pages)
4274{4277{
4275 if (kvm_nr_mmu_pages < KVM_MIN_ALLOC_MMU_PAGES)4278 if (kvm_nr_mmu_pages < KVM_MIN_ALLOC_MMU_PAGES)
4276 return -EINVAL;4279 return -EINVAL;
@@ -4284,7 +4287,7 @@ static int kvm_vm_ioctl_set_nr_mmu_pages(struct kvm *kvm, · 7 unmodified lines
4284 return 0;4287 return 0;
4285}4288}
4286 4289
4287static int kvm_vm_ioctl_get_nr_mmu_pages(struct kvm *kvm)4290static unsigned long kvm_vm_ioctl_get_nr_mmu_pages(struct kvm *kvm)
4288{4291{
4289 return kvm->arch.n_max_mmu_pages;4292 return kvm->arch.n_max_mmu_pages;
4290}4293}
@@ -5958,12 +5961,18 @@ static unsigned emulator_get_hflags(struct x86_emulate_ctxt *ctxt) · 1667 unmodified lines
5958 5961
5959static void emulator_set_hflags(struct x86_emulate_ctxt *ctxt, unsigned emul_flags)5962static void emulator_set_hflags(struct x86_emulate_ctxt *ctxt, unsigned emul_flags)
5960{5963{
5961 kvm_set_hflags(emul_to_vcpu(ctxt), emul_flags);5964 emul_to_vcpu(ctxt)->arch.hflags = emul_flags;
5965}
5966
5967static int emulator_pre_leave_smm(struct x86_emulate_ctxt *ctxt,
5968 const char *smstate)
5969{
5970 return kvm_x86_ops->pre_leave_smm(emul_to_vcpu(ctxt), smstate);
5962}5971}
5963 5972
5964static int emulator_pre_leave_smm(struct x86_emulate_ctxt *ctxt, u64 smbase)5973static void emulator_post_leave_smm(struct x86_emulate_ctxt *ctxt)
5965{5974{
5966 return kvm_x86_ops->pre_leave_smm(emul_to_vcpu(ctxt), smbase);5975 kvm_smm_changed(emul_to_vcpu(ctxt));
5967}5976}
5968 5977
5969static const struct x86_emulate_ops emulate_ops = {5978static const struct x86_emulate_ops emulate_ops = {
@@ -6006,6 +6015,7 @@ static const struct x86_emulate_ops emulate_ops = { · 36 unmodified lines
6006 .get_hflags = emulator_get_hflags,6015 .get_hflags = emulator_get_hflags,
6007 .set_hflags = emulator_set_hflags,6016 .set_hflags = emulator_set_hflags,
6008 .pre_leave_smm = emulator_pre_leave_smm,6017 .pre_leave_smm = emulator_pre_leave_smm,
6018 .post_leave_smm = emulator_post_leave_smm,
6009};6019};
6010 6020
6011static void toggle_interruptibility(struct kvm_vcpu *vcpu, u32 mask)6021static void toggle_interruptibility(struct kvm_vcpu *vcpu, u32 mask)
@@ -6247,16 +6257,6 @@ static void kvm_smm_changed(struct kvm_vcpu *vcpu) · 235 unmodified lines
6247 kvm_mmu_reset_context(vcpu);6257 kvm_mmu_reset_context(vcpu);
6248}6258}
6249 6259
6250static void kvm_set_hflags(struct kvm_vcpu *vcpu, unsigned emul_flags)
6251{
6252 unsigned changed = vcpu->arch.hflags ^ emul_flags;
6253
6254 vcpu->arch.hflags = emul_flags;
6255
6256 if (changed & HF_SMM_MASK)
6257 kvm_smm_changed(vcpu);
6258}
6259
6260static int kvm_vcpu_check_hw_bp(unsigned long addr, u32 type, u32 dr7,6260static int kvm_vcpu_check_hw_bp(unsigned long addr, u32 type, u32 dr7,
6261 unsigned long *db)6261 unsigned long *db)
6262{6262{
@@ -7441,9 +7441,9 @@ static void enter_smm_save_state_32(struct kvm_vcpu *vcpu, char *buf) · 1178 unmodified lines
7441 put_smstate(u32, buf, 0x7ef8, vcpu->arch.smbase);7441 put_smstate(u32, buf, 0x7ef8, vcpu->arch.smbase);
7442}7442}
7443 7443
7444#ifdef CONFIG_X86_64
7444static void enter_smm_save_state_64(struct kvm_vcpu *vcpu, char *buf)7445static void enter_smm_save_state_64(struct kvm_vcpu *vcpu, char *buf)
7445{7446{
7446#ifdef CONFIG_X86_64
7447 struct desc_ptr dt;7447 struct desc_ptr dt;
7448 struct kvm_segment seg;7448 struct kvm_segment seg;
7449 unsigned long val;7449 unsigned long val;
@@ -7493,10 +7493,8 @@ static void enter_smm_save_state_64(struct kvm_vcpu *vcpu, char *buf) · 43 unmodified lines
7493 7493
7494 for (i = 0; i < 6; i++)7494 for (i = 0; i < 6; i++)
7495 enter_smm_save_seg_64(vcpu, buf, i);7495 enter_smm_save_seg_64(vcpu, buf, i);
7496#else
7497 WARN_ON_ONCE(1);
7498#endif
7499}7496}
7497#endif
7500 7498
7501static void enter_smm(struct kvm_vcpu *vcpu)7499static void enter_smm(struct kvm_vcpu *vcpu)
7502{7500{
@@ -7507,9 +7505,11 @@ static void enter_smm(struct kvm_vcpu *vcpu) · 4 unmodified lines
7507 7505
7508 trace_kvm_enter_smm(vcpu->vcpu_id, vcpu->arch.smbase, true);7506 trace_kvm_enter_smm(vcpu->vcpu_id, vcpu->arch.smbase, true);
7509 memset(buf, 0, 512);7507 memset(buf, 0, 512);
7508#ifdef CONFIG_X86_64
7510 if (guest_cpuid_has(vcpu, X86_FEATURE_LM))7509 if (guest_cpuid_has(vcpu, X86_FEATURE_LM))
7511 enter_smm_save_state_64(vcpu, buf);7510 enter_smm_save_state_64(vcpu, buf);
7512 else7511 else
7512#endif
7513 enter_smm_save_state_32(vcpu, buf);7513 enter_smm_save_state_32(vcpu, buf);
7514 7514
7515 /*7515 /*
@@ -7567,8 +7567,10 @@ static void enter_smm(struct kvm_vcpu *vcpu) · 51 unmodified lines
7567 kvm_set_segment(vcpu, &ds, VCPU_SREG_GS);7567 kvm_set_segment(vcpu, &ds, VCPU_SREG_GS);
7568 kvm_set_segment(vcpu, &ds, VCPU_SREG_SS);7568 kvm_set_segment(vcpu, &ds, VCPU_SREG_SS);
7569 7569
7570#ifdef CONFIG_X86_64
7570 if (guest_cpuid_has(vcpu, X86_FEATURE_LM))7571 if (guest_cpuid_has(vcpu, X86_FEATURE_LM))
7571 kvm_x86_ops->set_efer(vcpu, 0);7572 kvm_x86_ops->set_efer(vcpu, 0);
7573#endif
7572 7574
7573 kvm_update_cpuid(vcpu);7575 kvm_update_cpuid(vcpu);
7574 kvm_mmu_reset_context(vcpu);7576 kvm_mmu_reset_context(vcpu);
@@ -7865,8 +7867,6 @@ static int vcpu_enter_guest(struct kvm_vcpu *vcpu) · 290 unmodified lines
7865 goto cancel_injection;7867 goto cancel_injection;
7866 }7868 }
7867 7869
7868 kvm_load_guest_xcr0(vcpu);
7869
7870 if (req_immediate_exit) {7870 if (req_immediate_exit) {
7871 kvm_make_request(KVM_REQ_EVENT, vcpu);7871 kvm_make_request(KVM_REQ_EVENT, vcpu);
7872 kvm_x86_ops->request_immediate_exit(vcpu);7872 kvm_x86_ops->request_immediate_exit(vcpu);
@@ -7919,8 +7919,6 @@ static int vcpu_enter_guest(struct kvm_vcpu *vcpu) · 46 unmodified lines
7919 vcpu->mode = OUTSIDE_GUEST_MODE;7919 vcpu->mode = OUTSIDE_GUEST_MODE;
7920 smp_wmb();7920 smp_wmb();
7921 7921
7922 kvm_put_guest_xcr0(vcpu);
7923
7924 kvm_before_interrupt(vcpu);7922 kvm_before_interrupt(vcpu);
7925 kvm_x86_ops->handle_external_intr(vcpu);7923 kvm_x86_ops->handle_external_intr(vcpu);
7926 kvm_after_interrupt(vcpu);7924 kvm_after_interrupt(vcpu);
arch/x86/kvm/x86.h+2−0
@@ -347,4 +347,6 @@ static inline void kvm_after_interrupt(struct kvm_vcpu *vcpu) · 346 unmodified lines
347 __this_cpu_write(current_vcpu, NULL);347 __this_cpu_write(current_vcpu, NULL);
348}348}
349 349
350void kvm_load_guest_xcr0(struct kvm_vcpu *vcpu);
351void kvm_put_guest_xcr0(struct kvm_vcpu *vcpu);
350#endif352#endif
arch/x86/mm/dump_pagetables.c+2−1
@@ -259,7 +259,8 @@ static void note_wx(struct pg_state *st) · 258 unmodified lines
259#endif259#endif
260 /* Account the WX pages */260 /* Account the WX pages */
261 st->wx_pages += npages;261 st->wx_pages += npages;
262 WARN_ONCE(1, "x86/mm: Found insecure W+X mapping at address %pS\n",262 WARN_ONCE(__supported_pte_mask & _PAGE_NX,
263 "x86/mm: Found insecure W+X mapping at address %pS\n",
263 (void *)st->start_address);264 (void *)st->start_address);
264}265}
265 266
arch/x86/mm/ioremap.c+1−1
@@ -825,7 +825,7 @@ void __init __early_set_fixmap(enum fixed_addresses idx, · 824 unmodified lines
825 pte = early_ioremap_pte(addr);825 pte = early_ioremap_pte(addr);
826 826
827 /* Sanitize 'prot' against any unsupported bits: */827 /* Sanitize 'prot' against any unsupported bits: */
828 pgprot_val(flags) &= __default_kernel_pte_mask;828 pgprot_val(flags) &= __supported_pte_mask;
829 829
830 if (pgprot_val(flags))830 if (pgprot_val(flags))
831 set_pte(pte, pfn_pte(phys >> PAGE_SHIFT, flags));831 set_pte(pte, pfn_pte(phys >> PAGE_SHIFT, flags));
arch/x86/mm/kaslr.c+1−1
@@ -94,7 +94,7 @@ void __init kernel_randomize_memory(void) · 93 unmodified lines
94 if (!kaslr_memory_enabled())94 if (!kaslr_memory_enabled())
95 return;95 return;
96 96
97 kaslr_regions[0].size_tb = 1 << (__PHYSICAL_MASK_SHIFT - TB_SHIFT);97 kaslr_regions[0].size_tb = 1 << (MAX_PHYSMEM_BITS - TB_SHIFT);
98 kaslr_regions[1].size_tb = VMALLOC_SIZE_TB;98 kaslr_regions[1].size_tb = VMALLOC_SIZE_TB;
99 99
100 /*100 /*
arch/x86/mm/tlb.c+1−1
@@ -728,7 +728,7 @@ void flush_tlb_mm_range(struct mm_struct *mm, unsigned long start, · 727 unmodified lines
728{728{
729 int cpu;729 int cpu;
730 730
731 struct flush_tlb_info info __aligned(SMP_CACHE_BYTES) = {731 struct flush_tlb_info info = {
732 .mm = mm,732 .mm = mm,
733 .stride_shift = stride_shift,733 .stride_shift = stride_shift,
734 .freed_tables = freed_tables,734 .freed_tables = freed_tables,
arch/xtensa/include/asm/processor.h+12−9
@@ -187,15 +187,18 @@ struct thread_struct { · 186 unmodified lines
187 187
188/* Clearing a0 terminates the backtrace. */188/* Clearing a0 terminates the backtrace. */
189#define start_thread(regs, new_pc, new_sp) \189#define start_thread(regs, new_pc, new_sp) \
190 memset(regs, 0, sizeof(*regs)); \190 do { \
191 regs->pc = new_pc; \191 memset((regs), 0, sizeof(*(regs))); \
192 regs->ps = USER_PS_VALUE; \192 (regs)->pc = (new_pc); \
193 regs->areg[1] = new_sp; \193 (regs)->ps = USER_PS_VALUE; \
194 regs->areg[0] = 0; \194 (regs)->areg[1] = (new_sp); \
195 regs->wmask = 1; \195 (regs)->areg[0] = 0; \
196 regs->depc = 0; \196 (regs)->wmask = 1; \
197 regs->windowbase = 0; \197 (regs)->depc = 0; \
198 regs->windowstart = 1;198 (regs)->windowbase = 0; \
199 (regs)->windowstart = 1; \
200 (regs)->syscall = NO_SYSCALL; \
201 } while (0)
199 202
200/* Forward declaration */203/* Forward declaration */
201struct task_struct;204struct task_struct;
arch/xtensa/include/asm/syscall.h+6−27
@@ -59,45 +59,24 @@ static inline void syscall_set_return_value(struct task_struct *task, · 58 unmodified lines
59 59
60static inline void syscall_get_arguments(struct task_struct *task,60static inline void syscall_get_arguments(struct task_struct *task,
61 struct pt_regs *regs,61 struct pt_regs *regs,
62 unsigned int i, unsigned int n,
63 unsigned long *args)62 unsigned long *args)
64{63{
65 static const unsigned int reg[] = XTENSA_SYSCALL_ARGUMENT_REGS;64 static const unsigned int reg[] = XTENSA_SYSCALL_ARGUMENT_REGS;
66 unsigned int j;65 unsigned int i;
67 66
68 if (n == 0)67 for (i = 0; i < 6; ++i)
69 return;68 args[i] = regs->areg[reg[i]];
70
71 WARN_ON_ONCE(i + n > SYSCALL_MAX_ARGS);
72
73 for (j = 0; j < n; ++j) {
74 if (i + j < SYSCALL_MAX_ARGS)
75 args[j] = regs->areg[reg[i + j]];
76 else
77 args[j] = 0;
78 }
79}69}
80 70
81static inline void syscall_set_arguments(struct task_struct *task,71static inline void syscall_set_arguments(struct task_struct *task,
82 struct pt_regs *regs,72 struct pt_regs *regs,
83 unsigned int i, unsigned int n,
84 const unsigned long *args)73 const unsigned long *args)
85{74{
86 static const unsigned int reg[] = XTENSA_SYSCALL_ARGUMENT_REGS;75 static const unsigned int reg[] = XTENSA_SYSCALL_ARGUMENT_REGS;
87 unsigned int j;76 unsigned int i;
88
89 if (n == 0)
90 return;
91
92 if (WARN_ON_ONCE(i + n > SYSCALL_MAX_ARGS)) {
93 if (i < SYSCALL_MAX_ARGS)
94 n = SYSCALL_MAX_ARGS - i;
95 else
96 return;
97 }
98 77
99 for (j = 0; j < n; ++j)78 for (i = 0; i < 6; ++i)
100 regs->areg[reg[i + j]] = args[j];79 regs->areg[reg[i]] = args[i];
101}80}
102 81
103asmlinkage long xtensa_rt_sigreturn(struct pt_regs*);82asmlinkage long xtensa_rt_sigreturn(struct pt_regs*);
arch/xtensa/kernel/entry.S+6−0
@@ -1860,6 +1860,8 @@ ENTRY(system_call) · 1859 unmodified lines
1860 l32i a7, a2, PT_SYSCALL1860 l32i a7, a2, PT_SYSCALL
1861 1861
18621:18621:
1863 s32i a7, a1, 4
1864
1863 /* syscall = sys_call_table[syscall_nr] */1865 /* syscall = sys_call_table[syscall_nr] */
1864 1866
1865 movi a4, sys_call_table1867 movi a4, sys_call_table
@@ -1893,8 +1895,12 @@ ENTRY(system_call) · 27 unmodified lines
1893 retw1895 retw
1894 1896
18951:18971:
1898 l32i a4, a1, 4
1899 l32i a3, a2, PT_SYSCALL
1900 s32i a4, a2, PT_SYSCALL
1896 mov a6, a21901 mov a6, a2
1897 call4 do_syscall_trace_leave1902 call4 do_syscall_trace_leave
1903 s32i a3, a2, PT_SYSCALL
1898 retw1904 retw
1899 1905
1900ENDPROC(system_call)1906ENDPROC(system_call)
arch/xtensa/kernel/stacktrace.c+5−1
@@ -253,10 +253,14 @@ static int return_address_cb(struct stackframe *frame, void *data) · 252 unmodified lines
253 return 1;253 return 1;
254}254}
255 255
256/*
257 * level == 0 is for the return address from the caller of this function,
258 * not from this function itself.
259 */
256unsigned long return_address(unsigned level)260unsigned long return_address(unsigned level)
257{261{
258 struct return_addr_data r = {262 struct return_addr_data r = {
259 .skip = level + 1,263 .skip = level,
260 };264 };
261 walk_stackframe(stack_pointer(NULL), return_address_cb, &r);265 walk_stackframe(stack_pointer(NULL), return_address_cb, &r);
262 return r.addr;266 return r.addr;
arch/xtensa/mm/mmu.c+1−1
@@ -33,7 +33,7 @@ static void * __init init_pmd(unsigned long vaddr, unsigned long n_pages) · 32 unmodified lines
33 33
34 pte = memblock_alloc_low(n_pages * sizeof(pte_t), PAGE_SIZE);34 pte = memblock_alloc_low(n_pages * sizeof(pte_t), PAGE_SIZE);
35 if (!pte)35 if (!pte)
36 panic("%s: Failed to allocate %zu bytes align=%lx\n",36 panic("%s: Failed to allocate %lu bytes align=%lx\n",
37 __func__, n_pages * sizeof(pte_t), PAGE_SIZE);37 __func__, n_pages * sizeof(pte_t), PAGE_SIZE);
38 38
39 for (i = 0; i < n_pages; ++i)39 for (i = 0; i < n_pages; ++i)
block/bfq-iosched.c+14−9
@@ -3054,7 +3054,7 @@ static void bfq_dispatch_remove(struct request_queue *q, struct request *rq) · 3053 unmodified lines
3054 bfq_remove_request(q, rq);3054 bfq_remove_request(q, rq);
3055}3055}
3056 3056
3057static void __bfq_bfqq_expire(struct bfq_data *bfqd, struct bfq_queue *bfqq)3057static bool __bfq_bfqq_expire(struct bfq_data *bfqd, struct bfq_queue *bfqq)
3058{3058{
3059 /*3059 /*
3060 * If this bfqq is shared between multiple processes, check3060 * If this bfqq is shared between multiple processes, check
@@ -3089,9 +3089,11 @@ static void __bfq_bfqq_expire(struct bfq_data *bfqd, struct bfq_queue *bfqq) · 28 unmodified lines
3089 /*3089 /*
3090 * All in-service entities must have been properly deactivated3090 * All in-service entities must have been properly deactivated
3091 * or requeued before executing the next function, which3091 * or requeued before executing the next function, which
3092 * resets all in-service entities as no more in service.3092 * resets all in-service entities as no more in service. This
3093 * may cause bfqq to be freed. If this happens, the next
3094 * function returns true.
3093 */3095 */
3094 __bfq_bfqd_reset_in_service(bfqd);3096 return __bfq_bfqd_reset_in_service(bfqd);
3095}3097}
3096 3098
3097/**3099/**
@@ -3489,7 +3491,6 @@ void bfq_bfqq_expire(struct bfq_data *bfqd, · 391 unmodified lines
3489 bool slow;3491 bool slow;
3490 unsigned long delta = 0;3492 unsigned long delta = 0;
3491 struct bfq_entity *entity = &bfqq->entity;3493 struct bfq_entity *entity = &bfqq->entity;
3492 int ref;
3493 3494
3494 /*3495 /*
3495 * Check whether the process is slow (see bfq_bfqq_is_slow).3496 * Check whether the process is slow (see bfq_bfqq_is_slow).
@@ -3582,10 +3583,8 @@ void bfq_bfqq_expire(struct bfq_data *bfqd, · 86 unmodified lines
3582 * reason.3583 * reason.
3583 */3584 */
3584 __bfq_bfqq_recalc_budget(bfqd, bfqq, reason);3585 __bfq_bfqq_recalc_budget(bfqd, bfqq, reason);
3585 ref = bfqq->ref;3586 if (__bfq_bfqq_expire(bfqd, bfqq))
3586 __bfq_bfqq_expire(bfqd, bfqq);3587 /* bfqq is gone, no more actions on it */
3587
3588 if (ref == 1) /* bfqq is gone, no more actions on it */
3589 return;3588 return;
3590 3589
3591 /* mark bfqq as waiting a request only if a bic still points to it */3590 /* mark bfqq as waiting a request only if a bic still points to it */
@@ -5894,7 +5893,7 @@ static unsigned int bfq_update_depths(struct bfq_data *bfqd, · 2302 unmodified lines
5894 return min_shallow;5893 return min_shallow;
5895}5894}
5896 5895
5897static int bfq_init_hctx(struct blk_mq_hw_ctx *hctx, unsigned int index)5896static void bfq_depth_updated(struct blk_mq_hw_ctx *hctx)
5898{5897{
5899 struct bfq_data *bfqd = hctx->queue->elevator->elevator_data;5898 struct bfq_data *bfqd = hctx->queue->elevator->elevator_data;
5900 struct blk_mq_tags *tags = hctx->sched_tags;5899 struct blk_mq_tags *tags = hctx->sched_tags;
@@ -5902,6 +5901,11 @@ static int bfq_init_hctx(struct blk_mq_hw_ctx *hctx, unsigned int index) · 1 unmodified line
5902 5901
5903 min_shallow = bfq_update_depths(bfqd, &tags->bitmap_tags);5902 min_shallow = bfq_update_depths(bfqd, &tags->bitmap_tags);
5904 sbitmap_queue_min_shallow_depth(&tags->bitmap_tags, min_shallow);5903 sbitmap_queue_min_shallow_depth(&tags->bitmap_tags, min_shallow);
5904}
5905
5906static int bfq_init_hctx(struct blk_mq_hw_ctx *hctx, unsigned int index)
5907{
5908 bfq_depth_updated(hctx);
5905 return 0;5909 return 0;
5906}5910}
5907 5911
@@ -6325,6 +6329,7 @@ static struct elevator_type iosched_bfq_mq = { · 417 unmodified lines
6325 .requests_merged = bfq_requests_merged,6329 .requests_merged = bfq_requests_merged,
6326 .request_merged = bfq_request_merged,6330 .request_merged = bfq_request_merged,
6327 .has_work = bfq_has_work,6331 .has_work = bfq_has_work,
6332 .depth_updated = bfq_depth_updated,
6328 .init_hctx = bfq_init_hctx,6333 .init_hctx = bfq_init_hctx,
6329 .init_sched = bfq_init_queue,6334 .init_sched = bfq_init_queue,
6330 .exit_sched = bfq_exit_queue,6335 .exit_sched = bfq_exit_queue,
block/bfq-iosched.h+1−1
@@ -1014,7 +1014,7 @@ bool __bfq_deactivate_entity(struct bfq_entity *entity, · 1013 unmodified lines
1014 bool ins_into_idle_tree);1014 bool ins_into_idle_tree);
1015bool next_queue_may_preempt(struct bfq_data *bfqd);1015bool next_queue_may_preempt(struct bfq_data *bfqd);
1016struct bfq_queue *bfq_get_next_queue(struct bfq_data *bfqd);1016struct bfq_queue *bfq_get_next_queue(struct bfq_data *bfqd);
1017void __bfq_bfqd_reset_in_service(struct bfq_data *bfqd);1017bool __bfq_bfqd_reset_in_service(struct bfq_data *bfqd);
1018void bfq_deactivate_bfqq(struct bfq_data *bfqd, struct bfq_queue *bfqq,1018void bfq_deactivate_bfqq(struct bfq_data *bfqd, struct bfq_queue *bfqq,
1019 bool ins_into_idle_tree, bool expiration);1019 bool ins_into_idle_tree, bool expiration);
1020void bfq_activate_bfqq(struct bfq_data *bfqd, struct bfq_queue *bfqq);1020void bfq_activate_bfqq(struct bfq_data *bfqd, struct bfq_queue *bfqq);
block/bfq-wf2q.c+15−2
@@ -1605,7 +1605,8 @@ struct bfq_queue *bfq_get_next_queue(struct bfq_data *bfqd) · 1604 unmodified lines
1605 return bfqq;1605 return bfqq;
1606}1606}
1607 1607
1608void __bfq_bfqd_reset_in_service(struct bfq_data *bfqd)1608/* returns true if the in-service queue gets freed */
1609bool __bfq_bfqd_reset_in_service(struct bfq_data *bfqd)
1609{1610{
1610 struct bfq_queue *in_serv_bfqq = bfqd->in_service_queue;1611 struct bfq_queue *in_serv_bfqq = bfqd->in_service_queue;
1611 struct bfq_entity *in_serv_entity = &in_serv_bfqq->entity;1612 struct bfq_entity *in_serv_entity = &in_serv_bfqq->entity;
@@ -1629,8 +1630,20 @@ void __bfq_bfqd_reset_in_service(struct bfq_data *bfqd) · 17 unmodified lines
1629 * service tree either, then release the service reference to1630 * service tree either, then release the service reference to
1630 * the queue it represents (taken with bfq_get_entity).1631 * the queue it represents (taken with bfq_get_entity).
1631 */1632 */
1632 if (!in_serv_entity->on_st)1633 if (!in_serv_entity->on_st) {
1634 /*
1635 * If no process is referencing in_serv_bfqq any
1636 * longer, then the service reference may be the only
1637 * reference to the queue. If this is the case, then
1638 * bfqq gets freed here.
1639 */
1640 int ref = in_serv_bfqq->ref;
1633 bfq_put_queue(in_serv_bfqq);1641 bfq_put_queue(in_serv_bfqq);
1642 if (ref == 1)
1643 return true;
1644 }
1645
1646 return false;
1634}1647}
1635 1648
1636void bfq_deactivate_bfqq(struct bfq_data *bfqd, struct bfq_queue *bfqq,1649void bfq_deactivate_bfqq(struct bfq_data *bfqd, struct bfq_queue *bfqq,
block/bio.c+4−1
@@ -1333,8 +1333,11 @@ struct bio *bio_copy_user_iov(struct request_queue *q, · 1332 unmodified lines
1333 }1333 }
1334 }1334 }
1335 1335
1336 if (bio_add_pc_page(q, bio, page, bytes, offset) < bytes)1336 if (bio_add_pc_page(q, bio, page, bytes, offset) < bytes) {
1337 if (!map_data)
1338 __free_page(page);
1337 break;1339 break;
1340 }
1338 1341
1339 len -= bytes;1342 len -= bytes;
1340 offset = 0;1343 offset = 0;
block/blk-core.c+1−3
@@ -1245,8 +1245,6 @@ static int blk_cloned_rq_check_limits(struct request_queue *q, · 1244 unmodified lines
1245 */1245 */
1246blk_status_t blk_insert_cloned_request(struct request_queue *q, struct request *rq)1246blk_status_t blk_insert_cloned_request(struct request_queue *q, struct request *rq)
1247{1247{
1248 blk_qc_t unused;
1249
1250 if (blk_cloned_rq_check_limits(q, rq))1248 if (blk_cloned_rq_check_limits(q, rq))
1251 return BLK_STS_IOERR;1249 return BLK_STS_IOERR;
1252 1250
@@ -1262,7 +1260,7 @@ blk_status_t blk_insert_cloned_request(struct request_queue *q, struct request * · 9 unmodified lines
1262 * bypass a potential scheduler on the bottom device for1260 * bypass a potential scheduler on the bottom device for
1263 * insert.1261 * insert.
1264 */1262 */
1265 return blk_mq_try_issue_directly(rq->mq_hctx, rq, &unused, true, true);1263 return blk_mq_request_issue_directly(rq, true);
1266}1264}
1267EXPORT_SYMBOL_GPL(blk_insert_cloned_request);1265EXPORT_SYMBOL_GPL(blk_insert_cloned_request);
1268 1266
block/blk-mq-sched.c+5−3
@@ -423,10 +423,12 @@ void blk_mq_sched_insert_requests(struct blk_mq_hw_ctx *hctx, · 422 unmodified lines
423 * busy in case of 'none' scheduler, and this way may save423 * busy in case of 'none' scheduler, and this way may save
424 * us one extra enqueue & dequeue to sw queue.424 * us one extra enqueue & dequeue to sw queue.
425 */425 */
426 if (!hctx->dispatch_busy && !e && !run_queue_async)426 if (!hctx->dispatch_busy && !e && !run_queue_async) {
427 blk_mq_try_issue_list_directly(hctx, list);427 blk_mq_try_issue_list_directly(hctx, list);
428 else428 if (list_empty(list))
429 blk_mq_insert_requests(hctx, ctx, list);429 return;
430 }
431 blk_mq_insert_requests(hctx, ctx, list);
430 }432 }
431 433
432 blk_mq_run_hw_queue(hctx, run_queue_async);434 blk_mq_run_hw_queue(hctx, run_queue_async);
block/blk-mq.c+77−61
@@ -654,6 +654,13 @@ bool blk_mq_complete_request(struct request *rq) · 653 unmodified lines
654}654}
655EXPORT_SYMBOL(blk_mq_complete_request);655EXPORT_SYMBOL(blk_mq_complete_request);
656 656
657void blk_mq_complete_request_sync(struct request *rq)
658{
659 WRITE_ONCE(rq->state, MQ_RQ_COMPLETE);
660 rq->q->mq_ops->complete(rq);
661}
662EXPORT_SYMBOL_GPL(blk_mq_complete_request_sync);
663
657int blk_mq_request_started(struct request *rq)664int blk_mq_request_started(struct request *rq)
658{665{
659 return blk_mq_rq_state(rq) != MQ_RQ_IDLE;666 return blk_mq_rq_state(rq) != MQ_RQ_IDLE;
@@ -1711,11 +1718,12 @@ void blk_mq_flush_plug_list(struct blk_plug *plug, bool from_schedule) · 1051 unmodified lines
1711 unsigned int depth;1718 unsigned int depth;
1712 1719
1713 list_splice_init(&plug->mq_list, &list);1720 list_splice_init(&plug->mq_list, &list);
1714 plug->rq_count = 0;
1715 1721
1716 if (plug->rq_count > 2 && plug->multiple_queues)1722 if (plug->rq_count > 2 && plug->multiple_queues)
1717 list_sort(NULL, &list, plug_rq_cmp);1723 list_sort(NULL, &list, plug_rq_cmp);
1718 1724
1725 plug->rq_count = 0;
1726
1719 this_q = NULL;1727 this_q = NULL;
1720 this_hctx = NULL;1728 this_hctx = NULL;
1721 this_ctx = NULL;1729 this_ctx = NULL;
@@ -1800,74 +1808,76 @@ static blk_status_t __blk_mq_issue_directly(struct blk_mq_hw_ctx *hctx, · 78 unmodified lines
1800 return ret;1808 return ret;
1801}1809}
1802 1810
1803blk_status_t blk_mq_try_issue_directly(struct blk_mq_hw_ctx *hctx,1811static blk_status_t __blk_mq_try_issue_directly(struct blk_mq_hw_ctx *hctx,
1804 struct request *rq,1812 struct request *rq,
1805 blk_qc_t *cookie,1813 blk_qc_t *cookie,
1806 bool bypass, bool last)1814 bool bypass_insert, bool last)
1807{1815{
1808 struct request_queue *q = rq->q;1816 struct request_queue *q = rq->q;
1809 bool run_queue = true;1817 bool run_queue = true;
1810 blk_status_t ret = BLK_STS_RESOURCE;
1811 int srcu_idx;
1812 bool force = false;
1813 1818
1814 hctx_lock(hctx, &srcu_idx);
1815 /*1819 /*
1816 * hctx_lock is needed before checking quiesced flag.1820 * RCU or SRCU read lock is needed before checking quiesced flag.
1817 *1821 *
1818 * When queue is stopped or quiesced, ignore 'bypass', insert1822 * When queue is stopped or quiesced, ignore 'bypass_insert' from
1819 * and return BLK_STS_OK to caller, and avoid driver to try to1823 * blk_mq_request_issue_directly(), and return BLK_STS_OK to caller,
1820 * dispatch again.1824 * and avoid driver to try to dispatch again.
1821 */1825 */
1822 if (unlikely(blk_mq_hctx_stopped(hctx) || blk_queue_quiesced(q))) {1826 if (blk_mq_hctx_stopped(hctx) || blk_queue_quiesced(q)) {
1823 run_queue = false;1827 run_queue = false;
1824 bypass = false;1828 bypass_insert = false;
1825 goto out_unlock;1829 goto insert;
1826 }1830 }
1827 1831
1828 if (unlikely(q->elevator && !bypass))1832 if (q->elevator && !bypass_insert)
1829 goto out_unlock;1833 goto insert;
1830 1834
1831 if (!blk_mq_get_dispatch_budget(hctx))1835 if (!blk_mq_get_dispatch_budget(hctx))
1832 goto out_unlock;1836 goto insert;
1833 1837
1834 if (!blk_mq_get_driver_tag(rq)) {1838 if (!blk_mq_get_driver_tag(rq)) {
1835 blk_mq_put_dispatch_budget(hctx);1839 blk_mq_put_dispatch_budget(hctx);
1836 goto out_unlock;1840 goto insert;
1837 }1841 }
1838 1842
1839 /*1843 return __blk_mq_issue_directly(hctx, rq, cookie, last);
1840 * Always add a request that has been through1844insert:
1841 *.queue_rq() to the hardware dispatch list.1845 if (bypass_insert)
1842 */1846 return BLK_STS_RESOURCE;
1843 force = true;1847
1844 ret = __blk_mq_issue_directly(hctx, rq, cookie, last);1848 blk_mq_request_bypass_insert(rq, run_queue);
1845out_unlock:1849 return BLK_STS_OK;
1850}
1851
1852static void blk_mq_try_issue_directly(struct blk_mq_hw_ctx *hctx,
1853 struct request *rq, blk_qc_t *cookie)
1854{
1855 blk_status_t ret;
1856 int srcu_idx;
1857
1858 might_sleep_if(hctx->flags & BLK_MQ_F_BLOCKING);
1859
1860 hctx_lock(hctx, &srcu_idx);
1861
1862 ret = __blk_mq_try_issue_directly(hctx, rq, cookie, false, true);
1863 if (ret == BLK_STS_RESOURCE || ret == BLK_STS_DEV_RESOURCE)
1864 blk_mq_request_bypass_insert(rq, true);
1865 else if (ret != BLK_STS_OK)
1866 blk_mq_end_request(rq, ret);
1867
1868 hctx_unlock(hctx, srcu_idx);
1869}
1870
1871blk_status_t blk_mq_request_issue_directly(struct request *rq, bool last)
1872{
1873 blk_status_t ret;
1874 int srcu_idx;
1875 blk_qc_t unused_cookie;
1876 struct blk_mq_hw_ctx *hctx = rq->mq_hctx;
1877
1878 hctx_lock(hctx, &srcu_idx);
1879 ret = __blk_mq_try_issue_directly(hctx, rq, &unused_cookie, true, last);
1846 hctx_unlock(hctx, srcu_idx);1880 hctx_unlock(hctx, srcu_idx);
1847 switch (ret) {
1848 case BLK_STS_OK:
1849 break;
1850 case BLK_STS_DEV_RESOURCE:
1851 case BLK_STS_RESOURCE:
1852 if (force) {
1853 blk_mq_request_bypass_insert(rq, run_queue);
1854 /*
1855 * We have to return BLK_STS_OK for the DM
1856 * to avoid livelock. Otherwise, we return
1857 * the real result to indicate whether the
1858 * request is direct-issued successfully.
1859 */
1860 ret = bypass ? BLK_STS_OK : ret;
1861 } else if (!bypass) {
1862 blk_mq_sched_insert_request(rq, false,
1863 run_queue, false);
1864 }
1865 break;
1866 default:
1867 if (!bypass)
1868 blk_mq_end_request(rq, ret);
1869 break;
1870 }
1871 1881
1872 return ret;1882 return ret;
1873}1883}
@@ -1875,20 +1885,22 @@ out_unlock: · 1 unmodified line
1875void blk_mq_try_issue_list_directly(struct blk_mq_hw_ctx *hctx,1885void blk_mq_try_issue_list_directly(struct blk_mq_hw_ctx *hctx,
1876 struct list_head *list)1886 struct list_head *list)
1877{1887{
1878 blk_qc_t unused;
1879 blk_status_t ret = BLK_STS_OK;
1880
1881 while (!list_empty(list)) {1888 while (!list_empty(list)) {
1889 blk_status_t ret;
1882 struct request *rq = list_first_entry(list, struct request,1890 struct request *rq = list_first_entry(list, struct request,
1883 queuelist);1891 queuelist);
1884 1892
1885 list_del_init(&rq->queuelist);1893 list_del_init(&rq->queuelist);
1886 if (ret == BLK_STS_OK)1894 ret = blk_mq_request_issue_directly(rq, list_empty(list));
1887 ret = blk_mq_try_issue_directly(hctx, rq, &unused,1895 if (ret != BLK_STS_OK) {
1888 false,1896 if (ret == BLK_STS_RESOURCE ||
1897 ret == BLK_STS_DEV_RESOURCE) {
1898 blk_mq_request_bypass_insert(rq,
1889 list_empty(list));1899 list_empty(list));
1890 else1900 break;
1891 blk_mq_sched_insert_request(rq, false, true, false);1901 }
1902 blk_mq_end_request(rq, ret);
1903 }
1892 }1904 }
1893 1905
1894 /*1906 /*
@@ -1896,7 +1908,7 @@ void blk_mq_try_issue_list_directly(struct blk_mq_hw_ctx *hctx, · 1 unmodified line
1896 * the driver there was more coming, but that turned out to1908 * the driver there was more coming, but that turned out to
1897 * be a lie.1909 * be a lie.
1898 */1910 */
1899 if (ret != BLK_STS_OK && hctx->queue->mq_ops->commit_rqs)1911 if (!list_empty(list) && hctx->queue->mq_ops->commit_rqs)
1900 hctx->queue->mq_ops->commit_rqs(hctx);1912 hctx->queue->mq_ops->commit_rqs(hctx);
1901}1913}
1902 1914
@@ -2003,19 +2015,21 @@ static blk_qc_t blk_mq_make_request(struct request_queue *q, struct bio *bio) · 100 unmodified lines
2003 plug->rq_count--;2015 plug->rq_count--;
2004 }2016 }
2005 blk_add_rq_to_plug(plug, rq);2017 blk_add_rq_to_plug(plug, rq);
2018 trace_block_plug(q);
2006 2019
2007 blk_mq_put_ctx(data.ctx);2020 blk_mq_put_ctx(data.ctx);
2008 2021
2009 if (same_queue_rq) {2022 if (same_queue_rq) {
2010 data.hctx = same_queue_rq->mq_hctx;2023 data.hctx = same_queue_rq->mq_hctx;
2024 trace_block_unplug(q, 1, true);
2011 blk_mq_try_issue_directly(data.hctx, same_queue_rq,2025 blk_mq_try_issue_directly(data.hctx, same_queue_rq,
2012 &cookie, false, true);2026 &cookie);
2013 }2027 }
2014 } else if ((q->nr_hw_queues > 1 && is_sync) || (!q->elevator &&2028 } else if ((q->nr_hw_queues > 1 && is_sync) || (!q->elevator &&
2015 !data.hctx->dispatch_busy)) {2029 !data.hctx->dispatch_busy)) {
2016 blk_mq_put_ctx(data.ctx);2030 blk_mq_put_ctx(data.ctx);
2017 blk_mq_bio_to_request(rq, bio);2031 blk_mq_bio_to_request(rq, bio);
2018 blk_mq_try_issue_directly(data.hctx, rq, &cookie, false, true);2032 blk_mq_try_issue_directly(data.hctx, rq, &cookie);
2019 } else {2033 } else {
2020 blk_mq_put_ctx(data.ctx);2034 blk_mq_put_ctx(data.ctx);
2021 blk_mq_bio_to_request(rq, bio);2035 blk_mq_bio_to_request(rq, bio);
@@ -2332,7 +2346,7 @@ static int blk_mq_init_hctx(struct request_queue *q, · 310 unmodified lines
2332 return 0;2346 return 0;
2333 2347
2334 free_fq:2348 free_fq:
2335 kfree(hctx->fq);2349 blk_free_flush_queue(hctx->fq);
2336 exit_hctx:2350 exit_hctx:
2337 if (set->ops->exit_hctx)2351 if (set->ops->exit_hctx)
2338 set->ops->exit_hctx(hctx, hctx_idx);2352 set->ops->exit_hctx(hctx, hctx_idx);
@@ -3121,6 +3135,8 @@ int blk_mq_update_nr_requests(struct request_queue *q, unsigned int nr) · 782 unmodified lines
3121 }3135 }
3122 if (ret)3136 if (ret)
3123 break;3137 break;
3138 if (q->elevator && q->elevator->type->ops.depth_updated)
3139 q->elevator->type->ops.depth_updated(hctx);
3124 }3140 }
3125 3141
3126 if (!ret)3142 if (!ret)
block/blk-mq.h+2−4
@@ -70,10 +70,8 @@ void blk_mq_request_bypass_insert(struct request *rq, bool run_queue); · 69 unmodified lines
70void blk_mq_insert_requests(struct blk_mq_hw_ctx *hctx, struct blk_mq_ctx *ctx,70void blk_mq_insert_requests(struct blk_mq_hw_ctx *hctx, struct blk_mq_ctx *ctx,
71 struct list_head *list);71 struct list_head *list);
72 72
73blk_status_t blk_mq_try_issue_directly(struct blk_mq_hw_ctx *hctx,73/* Used by blk_insert_cloned_request() to issue request directly */
74 struct request *rq,74blk_status_t blk_mq_request_issue_directly(struct request *rq, bool last);
75 blk_qc_t *cookie,
76 bool bypass, bool last);
77void blk_mq_try_issue_list_directly(struct blk_mq_hw_ctx *hctx,75void blk_mq_try_issue_list_directly(struct blk_mq_hw_ctx *hctx,
78 struct list_head *list);76 struct list_head *list);
79 77
crypto/testmgr.h+43−1
@@ -5634,7 +5634,49 @@ static const struct hash_testvec poly1305_tv_template[] = { · 5633 unmodified lines
5634 .psize = 80,5634 .psize = 80,
5635 .digest = "\x13\x00\x00\x00\x00\x00\x00\x00"5635 .digest = "\x13\x00\x00\x00\x00\x00\x00\x00"
5636 "\x00\x00\x00\x00\x00\x00\x00\x00",5636 "\x00\x00\x00\x00\x00\x00\x00\x00",
5637 },5637 }, { /* Regression test for overflow in AVX2 implementation */
5638 .plaintext = "\xff\xff\xff\xff\xff\xff\xff\xff"
5639 "\xff\xff\xff\xff\xff\xff\xff\xff"
5640 "\xff\xff\xff\xff\xff\xff\xff\xff"
5641 "\xff\xff\xff\xff\xff\xff\xff\xff"
5642 "\xff\xff\xff\xff\xff\xff\xff\xff"
5643 "\xff\xff\xff\xff\xff\xff\xff\xff"
5644 "\xff\xff\xff\xff\xff\xff\xff\xff"
5645 "\xff\xff\xff\xff\xff\xff\xff\xff"
5646 "\xff\xff\xff\xff\xff\xff\xff\xff"
5647 "\xff\xff\xff\xff\xff\xff\xff\xff"
5648 "\xff\xff\xff\xff\xff\xff\xff\xff"
5649 "\xff\xff\xff\xff\xff\xff\xff\xff"
5650 "\xff\xff\xff\xff\xff\xff\xff\xff"
5651 "\xff\xff\xff\xff\xff\xff\xff\xff"
5652 "\xff\xff\xff\xff\xff\xff\xff\xff"
5653 "\xff\xff\xff\xff\xff\xff\xff\xff"
5654 "\xff\xff\xff\xff\xff\xff\xff\xff"
5655 "\xff\xff\xff\xff\xff\xff\xff\xff"
5656 "\xff\xff\xff\xff\xff\xff\xff\xff"
5657 "\xff\xff\xff\xff\xff\xff\xff\xff"
5658 "\xff\xff\xff\xff\xff\xff\xff\xff"
5659 "\xff\xff\xff\xff\xff\xff\xff\xff"
5660 "\xff\xff\xff\xff\xff\xff\xff\xff"
5661 "\xff\xff\xff\xff\xff\xff\xff\xff"
5662 "\xff\xff\xff\xff\xff\xff\xff\xff"
5663 "\xff\xff\xff\xff\xff\xff\xff\xff"
5664 "\xff\xff\xff\xff\xff\xff\xff\xff"
5665 "\xff\xff\xff\xff\xff\xff\xff\xff"
5666 "\xff\xff\xff\xff\xff\xff\xff\xff"
5667 "\xff\xff\xff\xff\xff\xff\xff\xff"
5668 "\xff\xff\xff\xff\xff\xff\xff\xff"
5669 "\xff\xff\xff\xff\xff\xff\xff\xff"
5670 "\xff\xff\xff\xff\xff\xff\xff\xff"
5671 "\xff\xff\xff\xff\xff\xff\xff\xff"
5672 "\xff\xff\xff\xff\xff\xff\xff\xff"
5673 "\xff\xff\xff\xff\xff\xff\xff\xff"
5674 "\xff\xff\xff\xff\xff\xff\xff\xff"
5675 "\xff\xff\xff\xff",
5676 .psize = 300,
5677 .digest = "\xfb\x5e\x96\xd8\x61\xd5\xc7\xc8"
5678 "\x78\xe5\x87\xcc\x2d\x5a\x22\xe1",
5679 }
5638};5680};
5639 5681
5640/* NHPoly1305 test vectors from https://github.com/google/adiantum */5682/* NHPoly1305 test vectors from https://github.com/google/adiantum */
drivers/acpi/acpica/evgpe.c+5−1
@@ -81,8 +81,12 @@ acpi_status acpi_ev_enable_gpe(struct acpi_gpe_event_info *gpe_event_info) · 80 unmodified lines
81 81
82 ACPI_FUNCTION_TRACE(ev_enable_gpe);82 ACPI_FUNCTION_TRACE(ev_enable_gpe);
83 83
84 /* Enable the requested GPE */84 /* Clear the GPE status */
85 status = acpi_hw_clear_gpe(gpe_event_info);
86 if (ACPI_FAILURE(status))
87 return_ACPI_STATUS(status);
85 88
89 /* Enable the requested GPE */
86 status = acpi_hw_low_set_gpe(gpe_event_info, ACPI_GPE_ENABLE);90 status = acpi_hw_low_set_gpe(gpe_event_info, ACPI_GPE_ENABLE);
87 return_ACPI_STATUS(status);91 return_ACPI_STATUS(status);
88}92}
drivers/acpi/acpica/nsobject.c+4−0
@@ -186,6 +186,10 @@ void acpi_ns_detach_object(struct acpi_namespace_node *node) · 185 unmodified lines
186 }186 }
187 }187 }
188 188
189 if (obj_desc->common.type == ACPI_TYPE_REGION) {
190 acpi_ut_remove_address_range(obj_desc->region.space_id, node);
191 }
192
189 /* Clear the Node entry in all cases */193 /* Clear the Node entry in all cases */
190 194
191 node->object = NULL;195 node->object = NULL;
drivers/acpi/nfit/core.c+6−6
@@ -567,6 +567,12 @@ int acpi_nfit_ctl(struct nvdimm_bus_descriptor *nd_desc, struct nvdimm *nvdimm, · 566 unmodified lines
567 goto out;567 goto out;
568 }568 }
569 569
570 dev_dbg(dev, "%s cmd: %s output length: %d\n", dimm_name,
571 cmd_name, out_obj->buffer.length);
572 print_hex_dump_debug(cmd_name, DUMP_PREFIX_OFFSET, 4, 4,
573 out_obj->buffer.pointer,
574 min_t(u32, 128, out_obj->buffer.length), true);
575
570 if (call_pkg) {576 if (call_pkg) {
571 call_pkg->nd_fw_size = out_obj->buffer.length;577 call_pkg->nd_fw_size = out_obj->buffer.length;
572 memcpy(call_pkg->nd_payload + call_pkg->nd_size_in,578 memcpy(call_pkg->nd_payload + call_pkg->nd_size_in,
@@ -585,12 +591,6 @@ int acpi_nfit_ctl(struct nvdimm_bus_descriptor *nd_desc, struct nvdimm *nvdimm, · 12 unmodified lines
585 return 0;591 return 0;
586 }592 }
587 593
588 dev_dbg(dev, "%s cmd: %s output length: %d\n", dimm_name,
589 cmd_name, out_obj->buffer.length);
590 print_hex_dump_debug(cmd_name, DUMP_PREFIX_OFFSET, 4, 4,
591 out_obj->buffer.pointer,
592 min_t(u32, 128, out_obj->buffer.length), true);
593
594 for (i = 0, offset = 0; i < desc->out_num; i++) {594 for (i = 0, offset = 0; i < desc->out_num; i++) {
595 u32 out_size = nd_cmd_out_size(nvdimm, cmd, desc, i, buf,595 u32 out_size = nd_cmd_out_size(nvdimm, cmd, desc, i, buf,
596 (u32 *) out_obj->buffer.pointer,596 (u32 *) out_obj->buffer.pointer,
drivers/acpi/nfit/intel.c+4−6
@@ -122,9 +122,8 @@ static int intel_security_change_key(struct nvdimm *nvdimm, · 121 unmodified lines
122 if (!test_bit(cmd, &nfit_mem->dsm_mask))122 if (!test_bit(cmd, &nfit_mem->dsm_mask))
123 return -ENOTTY;123 return -ENOTTY;
124 124
125 if (old_data)125 memcpy(nd_cmd.cmd.old_pass, old_data->data,
126 memcpy(nd_cmd.cmd.old_pass, old_data->data,126 sizeof(nd_cmd.cmd.old_pass));
127 sizeof(nd_cmd.cmd.old_pass));
128 memcpy(nd_cmd.cmd.new_pass, new_data->data,127 memcpy(nd_cmd.cmd.new_pass, new_data->data,
129 sizeof(nd_cmd.cmd.new_pass));128 sizeof(nd_cmd.cmd.new_pass));
130 rc = nvdimm_ctl(nvdimm, ND_CMD_CALL, &nd_cmd, sizeof(nd_cmd), NULL);129 rc = nvdimm_ctl(nvdimm, ND_CMD_CALL, &nd_cmd, sizeof(nd_cmd), NULL);
@@ -336,9 +335,8 @@ static int __maybe_unused intel_security_overwrite(struct nvdimm *nvdimm, · 205 unmodified lines
336 335
337 /* flush all cache before we erase DIMM */336 /* flush all cache before we erase DIMM */
338 nvdimm_invalidate_cache();337 nvdimm_invalidate_cache();
339 if (nkey)338 memcpy(nd_cmd.cmd.passphrase, nkey->data,
340 memcpy(nd_cmd.cmd.passphrase, nkey->data,339 sizeof(nd_cmd.cmd.passphrase));
341 sizeof(nd_cmd.cmd.passphrase));
342 rc = nvdimm_ctl(nvdimm, ND_CMD_CALL, &nd_cmd, sizeof(nd_cmd), NULL);340 rc = nvdimm_ctl(nvdimm, ND_CMD_CALL, &nd_cmd, sizeof(nd_cmd), NULL);
343 if (rc < 0)341 if (rc < 0)
344 return rc;342 return rc;
drivers/base/memory.c+1−1
@@ -506,7 +506,7 @@ static ssize_t probe_store(struct device *dev, struct device_attribute *attr, · 505 unmodified lines
506 506
507 ret = lock_device_hotplug_sysfs();507 ret = lock_device_hotplug_sysfs();
508 if (ret)508 if (ret)
509 goto out;509 return ret;
510 510
511 nid = memory_add_physaddr_to_nid(phys_addr);511 nid = memory_add_physaddr_to_nid(phys_addr);
512 ret = __add_memory(nid, phys_addr,512 ret = __add_memory(nid, phys_addr,
drivers/block/null_blk_main.c+5−0
@@ -1748,6 +1748,11 @@ static int __init null_init(void) · 1747 unmodified lines
1748 return -EINVAL;1748 return -EINVAL;
1749 }1749 }
1750 1750
1751 if (g_home_node != NUMA_NO_NODE && g_home_node >= nr_online_nodes) {
1752 pr_err("null_blk: invalid home_node value\n");
1753 g_home_node = NUMA_NO_NODE;
1754 }
1755
1751 if (g_queue_mode == NULL_Q_RQ) {1756 if (g_queue_mode == NULL_Q_RQ) {
1752 pr_err("null_blk: legacy IO path no longer available\n");1757 pr_err("null_blk: legacy IO path no longer available\n");
1753 return -EINVAL;1758 return -EINVAL;
drivers/block/paride/pcd.c+13−1
@@ -314,6 +314,7 @@ static void pcd_init_units(void) · 313 unmodified lines
314 disk->queue = blk_mq_init_sq_queue(&cd->tag_set, &pcd_mq_ops,314 disk->queue = blk_mq_init_sq_queue(&cd->tag_set, &pcd_mq_ops,
315 1, BLK_MQ_F_SHOULD_MERGE);315 1, BLK_MQ_F_SHOULD_MERGE);
316 if (IS_ERR(disk->queue)) {316 if (IS_ERR(disk->queue)) {
317 put_disk(disk);
317 disk->queue = NULL;318 disk->queue = NULL;
318 continue;319 continue;
319 }320 }
@@ -751,6 +752,8 @@ static int pcd_detect(void) · 431 unmodified lines
751 752
752 printk("%s: No CD-ROM drive found\n", name);753 printk("%s: No CD-ROM drive found\n", name);
753 for (unit = 0, cd = pcd; unit < PCD_UNITS; unit++, cd++) {754 for (unit = 0, cd = pcd; unit < PCD_UNITS; unit++, cd++) {
755 if (!cd->disk)
756 continue;
754 blk_cleanup_queue(cd->disk->queue);757 blk_cleanup_queue(cd->disk->queue);
755 cd->disk->queue = NULL;758 cd->disk->queue = NULL;
756 blk_mq_free_tag_set(&cd->tag_set);759 blk_mq_free_tag_set(&cd->tag_set);
@@ -1011,8 +1014,14 @@ static int __init pcd_init(void) · 254 unmodified lines
1011 pcd_probe_capabilities();1014 pcd_probe_capabilities();
1012 1015
1013 if (register_blkdev(major, name)) {1016 if (register_blkdev(major, name)) {
1014 for (unit = 0, cd = pcd; unit < PCD_UNITS; unit++, cd++)1017 for (unit = 0, cd = pcd; unit < PCD_UNITS; unit++, cd++) {
1018 if (!cd->disk)
1019 continue;
1020
1021 blk_cleanup_queue(cd->disk->queue);
1022 blk_mq_free_tag_set(&cd->tag_set);
1015 put_disk(cd->disk);1023 put_disk(cd->disk);
1024 }
1016 return -EBUSY;1025 return -EBUSY;
1017 }1026 }
1018 1027
@@ -1033,6 +1042,9 @@ static void __exit pcd_exit(void) · 14 unmodified lines
1033 int unit;1042 int unit;
1034 1043
1035 for (unit = 0, cd = pcd; unit < PCD_UNITS; unit++, cd++) {1044 for (unit = 0, cd = pcd; unit < PCD_UNITS; unit++, cd++) {
1045 if (!cd->disk)
1046 continue;
1047
1036 if (cd->present) {1048 if (cd->present) {
1037 del_gendisk(cd->disk);1049 del_gendisk(cd->disk);
1038 pi_release(cd->pi);1050 pi_release(cd->pi);
drivers/block/paride/pf.c+11−1
@@ -763,6 +763,8 @@ static int pf_detect(void) · 762 unmodified lines
763 763
764 printk("%s: No ATAPI disk detected\n", name);764 printk("%s: No ATAPI disk detected\n", name);
765 for (pf = units, unit = 0; unit < PF_UNITS; pf++, unit++) {765 for (pf = units, unit = 0; unit < PF_UNITS; pf++, unit++) {
766 if (!pf->disk)
767 continue;
766 blk_cleanup_queue(pf->disk->queue);768 blk_cleanup_queue(pf->disk->queue);
767 pf->disk->queue = NULL;769 pf->disk->queue = NULL;
768 blk_mq_free_tag_set(&pf->tag_set);770 blk_mq_free_tag_set(&pf->tag_set);
@@ -1030,8 +1032,13 @@ static int __init pf_init(void) · 261 unmodified lines
1030 pf_busy = 0;1032 pf_busy = 0;
1031 1033
1032 if (register_blkdev(major, name)) {1034 if (register_blkdev(major, name)) {
1033 for (pf = units, unit = 0; unit < PF_UNITS; pf++, unit++)1035 for (pf = units, unit = 0; unit < PF_UNITS; pf++, unit++) {
1036 if (!pf->disk)
1037 continue;
1038 blk_cleanup_queue(pf->disk->queue);
1039 blk_mq_free_tag_set(&pf->tag_set);
1034 put_disk(pf->disk);1040 put_disk(pf->disk);
1041 }
1035 return -EBUSY;1042 return -EBUSY;
1036 }1043 }
1037 1044
@@ -1052,6 +1059,9 @@ static void __exit pf_exit(void) · 14 unmodified lines
1052 int unit;1059 int unit;
1053 unregister_blkdev(major, name);1060 unregister_blkdev(major, name);
1054 for (pf = units, unit = 0; unit < PF_UNITS; pf++, unit++) {1061 for (pf = units, unit = 0; unit < PF_UNITS; pf++, unit++) {
1062 if (!pf->disk)
1063 continue;
1064
1055 if (pf->present)1065 if (pf->present)
1056 del_gendisk(pf->disk);1066 del_gendisk(pf->disk);
1057 1067
drivers/block/virtio_blk.c+2−0
@@ -513,6 +513,8 @@ static int init_vq(struct virtio_blk *vblk) · 512 unmodified lines
513 if (err)513 if (err)
514 num_vqs = 1;514 num_vqs = 1;
515 515
516 num_vqs = min_t(unsigned int, nr_cpu_ids, num_vqs);
517
516 vblk->vqs = kmalloc_array(num_vqs, sizeof(*vblk->vqs), GFP_KERNEL);518 vblk->vqs = kmalloc_array(num_vqs, sizeof(*vblk->vqs), GFP_KERNEL);
517 if (!vblk->vqs)519 if (!vblk->vqs)
518 return -ENOMEM;520 return -ENOMEM;
drivers/block/xsysace.c+2−0
@@ -1091,6 +1091,8 @@ static int ace_setup(struct ace_device *ace) · 1090 unmodified lines
1091 return 0;1091 return 0;
1092 1092
1093err_read:1093err_read:
1094 /* prevent double queue cleanup */
1095 ace->gd->queue = NULL;
1094 put_disk(ace->gd);1096 put_disk(ace->gd);
1095err_alloc_disk:1097err_alloc_disk:
1096 blk_cleanup_queue(ace->queue);1098 blk_cleanup_queue(ace->queue);
drivers/bluetooth/btusb.c+1−1
@@ -2942,6 +2942,7 @@ static int btusb_config_oob_wake(struct hci_dev *hdev) · 2941 unmodified lines
2942 return 0;2942 return 0;
2943 }2943 }
2944 2944
2945 irq_set_status_flags(irq, IRQ_NOAUTOEN);
2945 ret = devm_request_irq(&hdev->dev, irq, btusb_oob_wake_handler,2946 ret = devm_request_irq(&hdev->dev, irq, btusb_oob_wake_handler,
2946 0, "OOB Wake-on-BT", data);2947 0, "OOB Wake-on-BT", data);
2947 if (ret) {2948 if (ret) {
@@ -2956,7 +2957,6 @@ static int btusb_config_oob_wake(struct hci_dev *hdev) · 8 unmodified lines
2956 }2957 }
2957 2958
2958 data->oob_wake_irq = irq;2959 data->oob_wake_irq = irq;
2959 disable_irq(irq);
2960 bt_dev_info(hdev, "OOB Wake-on-BT configured at IRQ %u", irq);2960 bt_dev_info(hdev, "OOB Wake-on-BT configured at IRQ %u", irq);
2961 return 0;2961 return 0;
2962}2962}
drivers/char/Kconfig+1−1
@@ -348,7 +348,7 @@ config XILINX_HWICAP · 347 unmodified lines
348 348
349config R3964349config R3964
350 tristate "Siemens R3964 line discipline"350 tristate "Siemens R3964 line discipline"
351 depends on TTY351 depends on TTY && BROKEN
352 ---help---352 ---help---
353 This driver allows synchronous communication with devices using the353 This driver allows synchronous communication with devices using the
354 Siemens R3964 packet protocol. Unless you are dealing with special354 Siemens R3964 packet protocol. Unless you are dealing with special
drivers/char/ipmi/ipmi_dmi.c+0−1
@@ -66,7 +66,6 @@ static void __init dmi_add_platform_ipmi(unsigned long base_addr, · 65 unmodified lines
66 return;66 return;
67 }67 }
68 68
69 memset(&p, 0, sizeof(p));
70 p.addr = base_addr;69 p.addr = base_addr;
71 p.space = space;70 p.space = space;
72 p.regspacing = offset;71 p.regspacing = offset;
drivers/char/ipmi/ipmi_msghandler.c+17−2
@@ -214,6 +214,9 @@ struct ipmi_user { · 213 unmodified lines
214 214
215 /* Does this interface receive IPMI events? */215 /* Does this interface receive IPMI events? */
216 bool gets_events;216 bool gets_events;
217
218 /* Free must run in process context for RCU cleanup. */
219 struct work_struct remove_work;
217};220};
218 221
219static struct ipmi_user *acquire_ipmi_user(struct ipmi_user *user, int *index)222static struct ipmi_user *acquire_ipmi_user(struct ipmi_user *user, int *index)
@@ -1157,6 +1160,15 @@ static int intf_err_seq(struct ipmi_smi *intf, · 937 unmodified lines
1157 return rv;1160 return rv;
1158}1161}
1159 1162
1163static void free_user_work(struct work_struct *work)
1164{
1165 struct ipmi_user *user = container_of(work, struct ipmi_user,
1166 remove_work);
1167
1168 cleanup_srcu_struct(&user->release_barrier);
1169 kfree(user);
1170}
1171
1160int ipmi_create_user(unsigned int if_num,1172int ipmi_create_user(unsigned int if_num,
1161 const struct ipmi_user_hndl *handler,1173 const struct ipmi_user_hndl *handler,
1162 void *handler_data,1174 void *handler_data,
@@ -1200,6 +1212,8 @@ int ipmi_create_user(unsigned int if_num, · 37 unmodified lines
1200 goto out_kfree;1212 goto out_kfree;
1201 1213
1202 found:1214 found:
1215 INIT_WORK(&new_user->remove_work, free_user_work);
1216
1203 rv = init_srcu_struct(&new_user->release_barrier);1217 rv = init_srcu_struct(&new_user->release_barrier);
1204 if (rv)1218 if (rv)
1205 goto out_kfree;1219 goto out_kfree;
@@ -1260,8 +1274,9 @@ EXPORT_SYMBOL(ipmi_get_smi_info); · 54 unmodified lines
1260static void free_user(struct kref *ref)1274static void free_user(struct kref *ref)
1261{1275{
1262 struct ipmi_user *user = container_of(ref, struct ipmi_user, refcount);1276 struct ipmi_user *user = container_of(ref, struct ipmi_user, refcount);
1263 cleanup_srcu_struct(&user->release_barrier);1277
1264 kfree(user);1278 /* SRCU cleanup must happen in task context. */
1279 schedule_work(&user->remove_work);
1265}1280}
1266 1281
1267static void _ipmi_destroy_user(struct ipmi_user *user)1282static void _ipmi_destroy_user(struct ipmi_user *user)
drivers/char/ipmi/ipmi_si_hardcode.c+2−0
@@ -118,6 +118,8 @@ void __init ipmi_hardcode_init(void) · 117 unmodified lines
118 char *str;118 char *str;
119 char *si_type[SI_MAX_PARMS];119 char *si_type[SI_MAX_PARMS];
120 120
121 memset(si_type, 0, sizeof(si_type));
122
121 /* Parse out the si_type string into its components. */123 /* Parse out the si_type string into its components. */
122 str = si_type_str;124 str = si_type_str;
123 if (*str != '\0') {125 if (*str != '\0') {
drivers/char/tpm/eventlog/tpm2.c+2−2
@@ -37,8 +37,8 @@ · 36 unmodified lines
37 *37 *
38 * Returns size of the event. If it is an invalid event, returns 0.38 * Returns size of the event. If it is an invalid event, returns 0.
39 */39 */
40static int calc_tpm2_event_size(struct tcg_pcr_event2_head *event,40static size_t calc_tpm2_event_size(struct tcg_pcr_event2_head *event,
41 struct tcg_pcr_event *event_header)41 struct tcg_pcr_event *event_header)
42{42{
43 struct tcg_efi_specid_event_head *efispecid;43 struct tcg_efi_specid_event_head *efispecid;
44 struct tcg_event_field *event_field;44 struct tcg_event_field *event_field;
drivers/char/tpm/tpm-dev-common.c+8−1
@@ -233,12 +233,19 @@ __poll_t tpm_common_poll(struct file *file, poll_table *wait) · 232 unmodified lines
233 __poll_t mask = 0;233 __poll_t mask = 0;
234 234
235 poll_wait(file, &priv->async_wait, wait);235 poll_wait(file, &priv->async_wait, wait);
236 mutex_lock(&priv->buffer_mutex);
236 237
237 if (!priv->response_read || priv->response_length)238 /*
239 * The response_length indicates if there is still response
240 * (or part of it) to be consumed. Partial reads decrease it
241 * by the number of bytes read, and write resets it the zero.
242 */
243 if (priv->response_length)
238 mask = EPOLLIN | EPOLLRDNORM;244 mask = EPOLLIN | EPOLLRDNORM;
239 else245 else
240 mask = EPOLLOUT | EPOLLWRNORM;246 mask = EPOLLOUT | EPOLLWRNORM;
241 247
248 mutex_unlock(&priv->buffer_mutex);
242 return mask;249 return mask;
243}250}
244 251
drivers/char/tpm/tpm-interface.c+6−8
@@ -402,15 +402,13 @@ int tpm_pm_suspend(struct device *dev) · 401 unmodified lines
402 if (chip->flags & TPM_CHIP_FLAG_ALWAYS_POWERED)402 if (chip->flags & TPM_CHIP_FLAG_ALWAYS_POWERED)
403 return 0;403 return 0;
404 404
405 if (chip->flags & TPM_CHIP_FLAG_TPM2) {405 if (!tpm_chip_start(chip)) {
406 mutex_lock(&chip->tpm_mutex);406 if (chip->flags & TPM_CHIP_FLAG_TPM2)
407 if (!tpm_chip_start(chip)) {
408 tpm2_shutdown(chip, TPM2_SU_STATE);407 tpm2_shutdown(chip, TPM2_SU_STATE);
409 tpm_chip_stop(chip);408 else
410 }409 rc = tpm1_pm_suspend(chip, tpm_suspend_pcr);
411 mutex_unlock(&chip->tpm_mutex);410
412 } else {411 tpm_chip_stop(chip);
413 rc = tpm1_pm_suspend(chip, tpm_suspend_pcr);
414 }412 }
415 413
416 return rc;414 return rc;
drivers/clk/at91/clk-programmable.c+43−14
@@ -20,8 +20,7 @@ · 19 unmodified lines
20#define PROG_ID_MAX 720#define PROG_ID_MAX 7
21 21
22#define PROG_STATUS_MASK(id) (1 << ((id) + 8))22#define PROG_STATUS_MASK(id) (1 << ((id) + 8))
23#define PROG_PRES_MASK 0x723#define PROG_PRES(layout, pckr) ((pckr >> layout->pres_shift) & layout->pres_mask)
24#define PROG_PRES(layout, pckr) ((pckr >> layout->pres_shift) & PROG_PRES_MASK)
25#define PROG_MAX_RM9200_CSS 324#define PROG_MAX_RM9200_CSS 3
26 25
27struct clk_programmable {26struct clk_programmable {
@@ -37,20 +36,29 @@ static unsigned long clk_programmable_recalc_rate(struct clk_hw *hw, · 9 unmodified lines
37 unsigned long parent_rate)36 unsigned long parent_rate)
38{37{
39 struct clk_programmable *prog = to_clk_programmable(hw);38 struct clk_programmable *prog = to_clk_programmable(hw);
39 const struct clk_programmable_layout *layout = prog->layout;
40 unsigned int pckr;40 unsigned int pckr;
41 unsigned long rate;
41 42
42 regmap_read(prog->regmap, AT91_PMC_PCKR(prog->id), &pckr);43 regmap_read(prog->regmap, AT91_PMC_PCKR(prog->id), &pckr);
43 44
44 return parent_rate >> PROG_PRES(prog->layout, pckr);45 if (layout->is_pres_direct)
46 rate = parent_rate / (PROG_PRES(layout, pckr) + 1);
47 else
48 rate = parent_rate >> PROG_PRES(layout, pckr);
49
50 return rate;
45}51}
46 52
47static int clk_programmable_determine_rate(struct clk_hw *hw,53static int clk_programmable_determine_rate(struct clk_hw *hw,
48 struct clk_rate_request *req)54 struct clk_rate_request *req)
49{55{
56 struct clk_programmable *prog = to_clk_programmable(hw);
57 const struct clk_programmable_layout *layout = prog->layout;
50 struct clk_hw *parent;58 struct clk_hw *parent;
51 long best_rate = -EINVAL;59 long best_rate = -EINVAL;
52 unsigned long parent_rate;60 unsigned long parent_rate;
53 unsigned long tmp_rate;61 unsigned long tmp_rate = 0;
54 int shift;62 int shift;
55 int i;63 int i;
56 64
@@ -60,10 +68,18 @@ static int clk_programmable_determine_rate(struct clk_hw *hw, · 3 unmodified lines
60 continue;68 continue;
61 69
62 parent_rate = clk_hw_get_rate(parent);70 parent_rate = clk_hw_get_rate(parent);
63 for (shift = 0; shift < PROG_PRES_MASK; shift++) {71 if (layout->is_pres_direct) {
64 tmp_rate = parent_rate >> shift;72 for (shift = 0; shift <= layout->pres_mask; shift++) {
65 if (tmp_rate <= req->rate)73 tmp_rate = parent_rate / (shift + 1);
66 break;74 if (tmp_rate <= req->rate)
75 break;
76 }
77 } else {
78 for (shift = 0; shift < layout->pres_mask; shift++) {
79 tmp_rate = parent_rate >> shift;
80 if (tmp_rate <= req->rate)
81 break;
82 }
67 }83 }
68 84
69 if (tmp_rate > req->rate)85 if (tmp_rate > req->rate)
@@ -137,16 +153,23 @@ static int clk_programmable_set_rate(struct clk_hw *hw, unsigned long rate, · 67 unmodified lines
137 if (!div)153 if (!div)
138 return -EINVAL;154 return -EINVAL;
139 155
140 shift = fls(div) - 1;156 if (layout->is_pres_direct) {
157 shift = div - 1;
141 158
142 if (div != (1 << shift))159 if (shift > layout->pres_mask)
143 return -EINVAL;160 return -EINVAL;
161 } else {
162 shift = fls(div) - 1;
144 163
145 if (shift >= PROG_PRES_MASK)164 if (div != (1 << shift))
146 return -EINVAL;165 return -EINVAL;
166
167 if (shift >= layout->pres_mask)
168 return -EINVAL;
169 }
147 170
148 regmap_update_bits(prog->regmap, AT91_PMC_PCKR(prog->id),171 regmap_update_bits(prog->regmap, AT91_PMC_PCKR(prog->id),
149 PROG_PRES_MASK << layout->pres_shift,172 layout->pres_mask << layout->pres_shift,
150 shift << layout->pres_shift);173 shift << layout->pres_shift);
151 174
152 return 0;175 return 0;
@@ -202,19 +225,25 @@ at91_clk_register_programmable(struct regmap *regmap, · 49 unmodified lines
202}225}
203 226
204const struct clk_programmable_layout at91rm9200_programmable_layout = {227const struct clk_programmable_layout at91rm9200_programmable_layout = {
228 .pres_mask = 0x7,
205 .pres_shift = 2,229 .pres_shift = 2,
206 .css_mask = 0x3,230 .css_mask = 0x3,
207 .have_slck_mck = 0,231 .have_slck_mck = 0,
232 .is_pres_direct = 0,
208};233};
209 234
210const struct clk_programmable_layout at91sam9g45_programmable_layout = {235const struct clk_programmable_layout at91sam9g45_programmable_layout = {
236 .pres_mask = 0x7,
211 .pres_shift = 2,237 .pres_shift = 2,
212 .css_mask = 0x3,238 .css_mask = 0x3,
213 .have_slck_mck = 1,239 .have_slck_mck = 1,
240 .is_pres_direct = 0,
214};241};
215 242
216const struct clk_programmable_layout at91sam9x5_programmable_layout = {243const struct clk_programmable_layout at91sam9x5_programmable_layout = {
244 .pres_mask = 0x7,
217 .pres_shift = 4,245 .pres_shift = 4,
218 .css_mask = 0x7,246 .css_mask = 0x7,
219 .have_slck_mck = 0,247 .have_slck_mck = 0,
248 .is_pres_direct = 0,
220};249};
drivers/clk/at91/pmc.h+2−0
@@ -71,9 +71,11 @@ struct clk_pll_characteristics { · 70 unmodified lines
71};71};
72 72
73struct clk_programmable_layout {73struct clk_programmable_layout {
74 u8 pres_mask;
74 u8 pres_shift;75 u8 pres_shift;
75 u8 css_mask;76 u8 css_mask;
76 u8 have_slck_mck;77 u8 have_slck_mck;
78 u8 is_pres_direct;
77};79};
78 80
79extern const struct clk_programmable_layout at91rm9200_programmable_layout;81extern const struct clk_programmable_layout at91rm9200_programmable_layout;
drivers/clk/at91/sama5d2.c+9−1
@@ -125,6 +125,14 @@ static const struct { · 124 unmodified lines
125 .pll = true },125 .pll = true },
126};126};
127 127
128static const struct clk_programmable_layout sama5d2_programmable_layout = {
129 .pres_mask = 0xff,
130 .pres_shift = 4,
131 .css_mask = 0x7,
132 .have_slck_mck = 0,
133 .is_pres_direct = 1,
134};
135
128static void __init sama5d2_pmc_setup(struct device_node *np)136static void __init sama5d2_pmc_setup(struct device_node *np)
129{137{
130 struct clk_range range = CLK_RANGE(0, 0);138 struct clk_range range = CLK_RANGE(0, 0);
@@ -249,7 +257,7 @@ static void __init sama5d2_pmc_setup(struct device_node *np) · 118 unmodified lines
249 257
250 hw = at91_clk_register_programmable(regmap, name,258 hw = at91_clk_register_programmable(regmap, name,
251 parent_names, 6, i,259 parent_names, 6, i,
252 &at91sam9x5_programmable_layout);260 &sama5d2_programmable_layout);
253 if (IS_ERR(hw))261 if (IS_ERR(hw))
254 goto err_free;262 goto err_free;
255 }263 }
drivers/clk/imx/clk-pll14xx.c+1−1
@@ -362,7 +362,7 @@ struct clk *imx_clk_pll14xx(const char *name, const char *parent_name, · 361 unmodified lines
362 362
363 switch (pll_clk->type) {363 switch (pll_clk->type) {
364 case PLL_1416X:364 case PLL_1416X:
365 if (!pll->rate_table)365 if (!pll_clk->rate_table)
366 init.ops = &clk_pll1416x_min_ops;366 init.ops = &clk_pll1416x_min_ops;
367 else367 else
368 init.ops = &clk_pll1416x_ops;368 init.ops = &clk_pll1416x_ops;
drivers/clk/mediatek/clk-gate.c+1−2
@@ -169,11 +169,10 @@ struct clk *mtk_clk_register_gate( · 168 unmodified lines
169 return ERR_PTR(-ENOMEM);169 return ERR_PTR(-ENOMEM);
170 170
171 init.name = name;171 init.name = name;
172 init.flags = CLK_SET_RATE_PARENT;172 init.flags = flags | CLK_SET_RATE_PARENT;
173 init.parent_names = parent_name ? &parent_name : NULL;173 init.parent_names = parent_name ? &parent_name : NULL;
174 init.num_parents = parent_name ? 1 : 0;174 init.num_parents = parent_name ? 1 : 0;
175 init.ops = ops;175 init.ops = ops;
176 init.flags = flags;
177 176
178 cg->regmap = regmap;177 cg->regmap = regmap;
179 cg->set_ofs = set_ofs;178 cg->set_ofs = set_ofs;
drivers/clk/meson/clk-pll.c+1−1
@@ -120,7 +120,7 @@ static bool meson_clk_pll_is_better(unsigned long rate, · 119 unmodified lines
120 return true;120 return true;
121 } else {121 } else {
122 /* Round down */122 /* Round down */
123 if (now < rate && best < now)123 if (now <= rate && best < now)
124 return true;124 return true;
125 }125 }
126 126
drivers/clk/meson/g12a.c+3−3
@@ -960,14 +960,14 @@ static struct clk_regmap g12a_sd_emmc_c_clk0 = { · 959 unmodified lines
960/* VPU Clock */960/* VPU Clock */
961 961
962static const char * const g12a_vpu_parent_names[] = {962static const char * const g12a_vpu_parent_names[] = {
963 "fclk_div4", "fclk_div3", "fclk_div5", "fclk_div7",963 "fclk_div3", "fclk_div4", "fclk_div5", "fclk_div7",
964 "mpll1", "vid_pll", "hifi_pll", "gp0_pll",964 "mpll1", "vid_pll", "hifi_pll", "gp0_pll",
965};965};
966 966
967static struct clk_regmap g12a_vpu_0_sel = {967static struct clk_regmap g12a_vpu_0_sel = {
968 .data = &(struct clk_regmap_mux_data){968 .data = &(struct clk_regmap_mux_data){
969 .offset = HHI_VPU_CLK_CNTL,969 .offset = HHI_VPU_CLK_CNTL,
970 .mask = 0x3,970 .mask = 0x7,
971 .shift = 9,971 .shift = 9,
972 },972 },
973 .hw.init = &(struct clk_init_data){973 .hw.init = &(struct clk_init_data){
@@ -1011,7 +1011,7 @@ static struct clk_regmap g12a_vpu_0 = { · 37 unmodified lines
1011static struct clk_regmap g12a_vpu_1_sel = {1011static struct clk_regmap g12a_vpu_1_sel = {
1012 .data = &(struct clk_regmap_mux_data){1012 .data = &(struct clk_regmap_mux_data){
1013 .offset = HHI_VPU_CLK_CNTL,1013 .offset = HHI_VPU_CLK_CNTL,
1014 .mask = 0x3,1014 .mask = 0x7,
1015 .shift = 25,1015 .shift = 25,
1016 },1016 },
1017 .hw.init = &(struct clk_init_data){1017 .hw.init = &(struct clk_init_data){
drivers/clk/meson/gxbb.c+2−0
@@ -2216,6 +2216,7 @@ static struct clk_regmap gxbb_vdec_1_div = { · 2215 unmodified lines
2216 .offset = HHI_VDEC_CLK_CNTL,2216 .offset = HHI_VDEC_CLK_CNTL,
2217 .shift = 0,2217 .shift = 0,
2218 .width = 7,2218 .width = 7,
2219 .flags = CLK_DIVIDER_ROUND_CLOSEST,
2219 },2220 },
2220 .hw.init = &(struct clk_init_data){2221 .hw.init = &(struct clk_init_data){
2221 .name = "vdec_1_div",2222 .name = "vdec_1_div",
@@ -2261,6 +2262,7 @@ static struct clk_regmap gxbb_vdec_hevc_div = { · 39 unmodified lines
2261 .offset = HHI_VDEC2_CLK_CNTL,2262 .offset = HHI_VDEC2_CLK_CNTL,
2262 .shift = 16,2263 .shift = 16,
2263 .width = 7,2264 .width = 7,
2265 .flags = CLK_DIVIDER_ROUND_CLOSEST,
2264 },2266 },
2265 .hw.init = &(struct clk_init_data){2267 .hw.init = &(struct clk_init_data){
2266 .name = "vdec_hevc_div",2268 .name = "vdec_hevc_div",
drivers/clk/meson/vid-pll-div.c+2−2
@@ -82,8 +82,8 @@ static unsigned long meson_vid_pll_div_recalc_rate(struct clk_hw *hw, · 81 unmodified lines
82 div = _get_table_val(meson_parm_read(clk->map, &pll_div->val),82 div = _get_table_val(meson_parm_read(clk->map, &pll_div->val),
83 meson_parm_read(clk->map, &pll_div->sel));83 meson_parm_read(clk->map, &pll_div->sel));
84 if (!div || !div->divider) {84 if (!div || !div->divider) {
85 pr_info("%s: Invalid config value for vid_pll_div\n", __func__);85 pr_debug("%s: Invalid config value for vid_pll_div\n", __func__);
86 return parent_rate;86 return 0;
87 }87 }
88 88
89 return DIV_ROUND_UP_ULL(parent_rate * div->multiplier, div->divider);89 return DIV_ROUND_UP_ULL(parent_rate * div->multiplier, div->divider);
drivers/clk/x86/clk-pmc-atom.c+11−3
@@ -165,7 +165,7 @@ static const struct clk_ops plt_clk_ops = { · 164 unmodified lines
165};165};
166 166
167static struct clk_plt *plt_clk_register(struct platform_device *pdev, int id,167static struct clk_plt *plt_clk_register(struct platform_device *pdev, int id,
168 void __iomem *base,168 const struct pmc_clk_data *pmc_data,
169 const char **parent_names,169 const char **parent_names,
170 int num_parents)170 int num_parents)
171{171{
@@ -184,9 +184,17 @@ static struct clk_plt *plt_clk_register(struct platform_device *pdev, int id, · 12 unmodified lines
184 init.num_parents = num_parents;184 init.num_parents = num_parents;
185 185
186 pclk->hw.init = &init;186 pclk->hw.init = &init;
187 pclk->reg = base + PMC_CLK_CTL_OFFSET + id * PMC_CLK_CTL_SIZE;187 pclk->reg = pmc_data->base + PMC_CLK_CTL_OFFSET + id * PMC_CLK_CTL_SIZE;
188 spin_lock_init(&pclk->lock);188 spin_lock_init(&pclk->lock);
189 189
190 /*
191 * On some systems, the pmc_plt_clocks already enabled by the
192 * firmware are being marked as critical to avoid them being
193 * gated by the clock framework.
194 */
195 if (pmc_data->critical && plt_clk_is_enabled(&pclk->hw))
196 init.flags |= CLK_IS_CRITICAL;
197
190 ret = devm_clk_hw_register(&pdev->dev, &pclk->hw);198 ret = devm_clk_hw_register(&pdev->dev, &pclk->hw);
191 if (ret) {199 if (ret) {
192 pclk = ERR_PTR(ret);200 pclk = ERR_PTR(ret);
@@ -332,7 +340,7 @@ static int plt_clk_probe(struct platform_device *pdev) · 139 unmodified lines
332 return PTR_ERR(parent_names);340 return PTR_ERR(parent_names);
333 341
334 for (i = 0; i < PMC_CLK_NUM; i++) {342 for (i = 0; i < PMC_CLK_NUM; i++) {
335 data->clks[i] = plt_clk_register(pdev, i, pmc_data->base,343 data->clks[i] = plt_clk_register(pdev, i, pmc_data,
336 parent_names, data->nparents);344 parent_names, data->nparents);
337 if (IS_ERR(data->clks[i])) {345 if (IS_ERR(data->clks[i])) {
338 err = PTR_ERR(data->clks[i]);346 err = PTR_ERR(data->clks[i]);
drivers/clocksource/Kconfig+1−0
@@ -145,6 +145,7 @@ config VT8500_TIMER · 144 unmodified lines
145config NPCM7XX_TIMER145config NPCM7XX_TIMER
146 bool "NPCM7xx timer driver" if COMPILE_TEST146 bool "NPCM7xx timer driver" if COMPILE_TEST
147 depends on HAS_IOMEM147 depends on HAS_IOMEM
148 select TIMER_OF
148 select CLKSRC_MMIO149 select CLKSRC_MMIO
149 help150 help
150 Enable 24-bit TIMER0 and TIMER1 counters in the NPCM7xx architecture,151 Enable 24-bit TIMER0 and TIMER1 counters in the NPCM7xx architecture,
drivers/clocksource/arm_arch_timer.c+1−4
@@ -9,7 +9,7 @@ · 8 unmodified lines
9 * published by the Free Software Foundation.9 * published by the Free Software Foundation.
10 */10 */
11 11
12#define pr_fmt(fmt) "arm_arch_timer: " fmt12#define pr_fmt(fmt) "arch_timer: " fmt
13 13
14#include <linux/init.h>14#include <linux/init.h>
15#include <linux/kernel.h>15#include <linux/kernel.h>
@@ -33,9 +33,6 @@ · 17 unmodified lines
33 33
34#include <clocksource/arm_arch_timer.h>34#include <clocksource/arm_arch_timer.h>
35 35
36#undef pr_fmt
37#define pr_fmt(fmt) "arch_timer: " fmt
38
39#define CNTTIDR 0x0836#define CNTTIDR 0x08
40#define CNTTIDR_VIRT(n) (BIT(1) << ((n) * 4))37#define CNTTIDR_VIRT(n) (BIT(1) << ((n) * 4))
41 38
drivers/clocksource/timer-oxnas-rps.c+1−1
@@ -296,4 +296,4 @@ err_alloc: · 295 unmodified lines
296TIMER_OF_DECLARE(ox810se_rps,296TIMER_OF_DECLARE(ox810se_rps,
297 "oxsemi,ox810se-rps-timer", oxnas_rps_timer_init);297 "oxsemi,ox810se-rps-timer", oxnas_rps_timer_init);
298TIMER_OF_DECLARE(ox820_rps,298TIMER_OF_DECLARE(ox820_rps,
299 "oxsemi,ox820se-rps-timer", oxnas_rps_timer_init);299 "oxsemi,ox820-rps-timer", oxnas_rps_timer_init);
drivers/clocksource/timer-ti-dm.c+0−28
@@ -585,34 +585,6 @@ static int omap_dm_timer_set_load(struct omap_dm_timer *timer, int autoreload, · 584 unmodified lines
585 return 0;585 return 0;
586}586}
587 587
588/* Optimized set_load which removes costly spin wait in timer_start */
589static int omap_dm_timer_set_load_start(struct omap_dm_timer *timer,
590 int autoreload, unsigned int load)
591{
592 u32 l;
593
594 if (unlikely(!timer))
595 return -EINVAL;
596
597 omap_dm_timer_enable(timer);
598
599 l = omap_dm_timer_read_reg(timer, OMAP_TIMER_CTRL_REG);
600 if (autoreload) {
601 l |= OMAP_TIMER_CTRL_AR;
602 omap_dm_timer_write_reg(timer, OMAP_TIMER_LOAD_REG, load);
603 } else {
604 l &= ~OMAP_TIMER_CTRL_AR;
605 }
606 l |= OMAP_TIMER_CTRL_ST;
607
608 __omap_dm_timer_load_start(timer, l, load, timer->posted);
609
610 /* Save the context */
611 timer->context.tclr = l;
612 timer->context.tldr = load;
613 timer->context.tcrr = load;
614 return 0;
615}
616static int omap_dm_timer_set_match(struct omap_dm_timer *timer, int enable,588static int omap_dm_timer_set_match(struct omap_dm_timer *timer, int enable,
617 unsigned int match)589 unsigned int match)
618{590{
drivers/cpufreq/intel_pstate.c+4−1
@@ -2596,6 +2596,9 @@ static int __init intel_pstate_init(void) · 2595 unmodified lines
2596 const struct x86_cpu_id *id;2596 const struct x86_cpu_id *id;
2597 int rc;2597 int rc;
2598 2598
2599 if (boot_cpu_data.x86_vendor != X86_VENDOR_INTEL)
2600 return -ENODEV;
2601
2599 if (no_load)2602 if (no_load)
2600 return -ENODEV;2603 return -ENODEV;
2601 2604
@@ -2611,7 +2614,7 @@ static int __init intel_pstate_init(void) · 9 unmodified lines
2611 } else {2614 } else {
2612 id = x86_match_cpu(intel_pstate_cpu_ids);2615 id = x86_match_cpu(intel_pstate_cpu_ids);
2613 if (!id) {2616 if (!id) {
2614 pr_info("CPU ID not supported\n");2617 pr_info("CPU model not supported\n");
2615 return -ENODEV;2618 return -ENODEV;
2616 }2619 }
2617 2620
drivers/crypto/caam/caamhash.c+6−7
@@ -865,19 +865,18 @@ static int ahash_update_ctx(struct ahash_request *req) · 864 unmodified lines
865 if (ret)865 if (ret)
866 goto unmap_ctx;866 goto unmap_ctx;
867 867
868 if (mapped_nents) {868 if (mapped_nents)
869 sg_to_sec4_sg_last(req->src, mapped_nents,869 sg_to_sec4_sg_last(req->src, mapped_nents,
870 edesc->sec4_sg + sec4_sg_src_index,870 edesc->sec4_sg + sec4_sg_src_index,
871 0);871 0);
872 if (*next_buflen)872 else
873 scatterwalk_map_and_copy(next_buf, req->src,
874 to_hash - *buflen,
875 *next_buflen, 0);
876 } else {
877 sg_to_sec4_set_last(edesc->sec4_sg + sec4_sg_src_index -873 sg_to_sec4_set_last(edesc->sec4_sg + sec4_sg_src_index -
878 1);874 1);
879 }
880 875
876 if (*next_buflen)
877 scatterwalk_map_and_copy(next_buf, req->src,
878 to_hash - *buflen,
879 *next_buflen, 0);
881 desc = edesc->hw_desc;880 desc = edesc->hw_desc;
882 881
883 edesc->sec4_sg_dma = dma_map_single(jrdev, edesc->sec4_sg,882 edesc->sec4_sg_dma = dma_map_single(jrdev, edesc->sec4_sg,
drivers/extcon/Kconfig+1−1
@@ -116,7 +116,7 @@ config EXTCON_PALMAS · 115 unmodified lines
116 116
117config EXTCON_PTN5150117config EXTCON_PTN5150
118 tristate "NXP PTN5150 CC LOGIC USB EXTCON support"118 tristate "NXP PTN5150 CC LOGIC USB EXTCON support"
119 depends on I2C && GPIOLIB || COMPILE_TEST119 depends on I2C && (GPIOLIB || COMPILE_TEST)
120 select REGMAP_I2C120 select REGMAP_I2C
121 help121 help
122 Say Y here to enable support for USB peripheral and USB host122 Say Y here to enable support for USB peripheral and USB host
drivers/gpu/drm/amd/amdgpu/amdgpu_device.c+15−4
@@ -3165,6 +3165,7 @@ static int amdgpu_device_recover_vram(struct amdgpu_device *adev) · 3164 unmodified lines
3165 3165
3166 /* No need to recover an evicted BO */3166 /* No need to recover an evicted BO */
3167 if (shadow->tbo.mem.mem_type != TTM_PL_TT ||3167 if (shadow->tbo.mem.mem_type != TTM_PL_TT ||
3168 shadow->tbo.mem.start == AMDGPU_BO_INVALID_OFFSET ||
3168 shadow->parent->tbo.mem.mem_type != TTM_PL_VRAM)3169 shadow->parent->tbo.mem.mem_type != TTM_PL_VRAM)
3169 continue;3170 continue;
3170 3171
@@ -3173,11 +3174,16 @@ static int amdgpu_device_recover_vram(struct amdgpu_device *adev) · 2 unmodified lines
3173 break;3174 break;
3174 3175
3175 if (fence) {3176 if (fence) {
3176 r = dma_fence_wait_timeout(fence, false, tmo);3177 tmo = dma_fence_wait_timeout(fence, false, tmo);
3177 dma_fence_put(fence);3178 dma_fence_put(fence);
3178 fence = next;3179 fence = next;
3179 if (r <= 0)3180 if (tmo == 0) {
3181 r = -ETIMEDOUT;
3180 break;3182 break;
3183 } else if (tmo < 0) {
3184 r = tmo;
3185 break;
3186 }
3181 } else {3187 } else {
3182 fence = next;3188 fence = next;
3183 }3189 }
@@ -3188,8 +3194,8 @@ static int amdgpu_device_recover_vram(struct amdgpu_device *adev) · 4 unmodified lines
3188 tmo = dma_fence_wait_timeout(fence, false, tmo);3194 tmo = dma_fence_wait_timeout(fence, false, tmo);
3189 dma_fence_put(fence);3195 dma_fence_put(fence);
3190 3196
3191 if (r <= 0 || tmo <= 0) {3197 if (r < 0 || tmo <= 0) {
3192 DRM_ERROR("recover vram bo from shadow failed\n");3198 DRM_ERROR("recover vram bo from shadow failed, r is %ld, tmo is %ld\n", r, tmo);
3193 return -EIO;3199 return -EIO;
3194 }3200 }
3195 3201
@@ -3625,6 +3631,7 @@ static void amdgpu_device_get_min_pci_speed_width(struct amdgpu_device *adev, · 429 unmodified lines
3625 struct pci_dev *pdev = adev->pdev;3631 struct pci_dev *pdev = adev->pdev;
3626 enum pci_bus_speed cur_speed;3632 enum pci_bus_speed cur_speed;
3627 enum pcie_link_width cur_width;3633 enum pcie_link_width cur_width;
3634 u32 ret = 1;
3628 3635
3629 *speed = PCI_SPEED_UNKNOWN;3636 *speed = PCI_SPEED_UNKNOWN;
3630 *width = PCIE_LNK_WIDTH_UNKNOWN;3637 *width = PCIE_LNK_WIDTH_UNKNOWN;
@@ -3632,6 +3639,10 @@ static void amdgpu_device_get_min_pci_speed_width(struct amdgpu_device *adev, · 1 unmodified line
3632 while (pdev) {3639 while (pdev) {
3633 cur_speed = pcie_get_speed_cap(pdev);3640 cur_speed = pcie_get_speed_cap(pdev);
3634 cur_width = pcie_get_width_cap(pdev);3641 cur_width = pcie_get_width_cap(pdev);
3642 ret = pcie_bandwidth_available(adev->pdev, NULL,
3643 NULL, &cur_width);
3644 if (!ret)
3645 cur_width = PCIE_LNK_WIDTH_RESRV;
3635 3646
3636 if (cur_speed != PCI_SPEED_UNKNOWN) {3647 if (cur_speed != PCI_SPEED_UNKNOWN) {
3637 if (*speed == PCI_SPEED_UNKNOWN)3648 if (*speed == PCI_SPEED_UNKNOWN)
drivers/gpu/drm/amd/amdgpu/amdgpu_ib.c+3−0
@@ -35,6 +35,7 @@ · 34 unmodified lines
35#include "amdgpu_trace.h"35#include "amdgpu_trace.h"
36 36
37#define AMDGPU_IB_TEST_TIMEOUT msecs_to_jiffies(1000)37#define AMDGPU_IB_TEST_TIMEOUT msecs_to_jiffies(1000)
38#define AMDGPU_IB_TEST_GFX_XGMI_TIMEOUT msecs_to_jiffies(2000)
38 39
39/*40/*
40 * IB41 * IB
@@ -344,6 +345,8 @@ int amdgpu_ib_ring_tests(struct amdgpu_device *adev) · 303 unmodified lines
344 * cost waiting for it coming back under RUNTIME only345 * cost waiting for it coming back under RUNTIME only
345 */346 */
346 tmo_gfx = 8 * AMDGPU_IB_TEST_TIMEOUT;347 tmo_gfx = 8 * AMDGPU_IB_TEST_TIMEOUT;
348 } else if (adev->gmc.xgmi.hive_id) {
349 tmo_gfx = AMDGPU_IB_TEST_GFX_XGMI_TIMEOUT;
347 }350 }
348 351
349 for (i = 0; i < adev->num_rings; ++i) {352 for (i = 0; i < adev->num_rings; ++i) {
drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c+0−2
@@ -2405,8 +2405,6 @@ static int gfx_v9_0_rlc_resume(struct amdgpu_device *adev) · 2404 unmodified lines
2405 /* disable CG */2405 /* disable CG */
2406 WREG32_SOC15(GC, 0, mmRLC_CGCG_CGLS_CTRL, 0);2406 WREG32_SOC15(GC, 0, mmRLC_CGCG_CGLS_CTRL, 0);
2407 2407
2408 adev->gfx.rlc.funcs->reset(adev);
2409
2410 gfx_v9_0_init_pg(adev);2408 gfx_v9_0_init_pg(adev);
2411 2409
2412 if (adev->firmware.load_type != AMDGPU_FW_LOAD_PSP) {2410 if (adev->firmware.load_type != AMDGPU_FW_LOAD_PSP) {
drivers/gpu/drm/amd/amdgpu/mmhub_v1_0.c+1−0
@@ -182,6 +182,7 @@ static void mmhub_v1_0_init_cache_regs(struct amdgpu_device *adev) · 181 unmodified lines
182 tmp = REG_SET_FIELD(tmp, VM_L2_CNTL3,182 tmp = REG_SET_FIELD(tmp, VM_L2_CNTL3,
183 L2_CACHE_BIGK_FRAGMENT_SIZE, 6);183 L2_CACHE_BIGK_FRAGMENT_SIZE, 6);
184 }184 }
185 WREG32_SOC15(MMHUB, 0, mmVM_L2_CNTL3, tmp);
185 186
186 tmp = mmVM_L2_CNTL4_DEFAULT;187 tmp = mmVM_L2_CNTL4_DEFAULT;
187 tmp = REG_SET_FIELD(tmp, VM_L2_CNTL4, VMC_TAP_PDE_REQUEST_PHYSICAL, 0);188 tmp = REG_SET_FIELD(tmp, VM_L2_CNTL4, VMC_TAP_PDE_REQUEST_PHYSICAL, 0);
drivers/gpu/drm/amd/amdkfd/kfd_device.c+1−0
@@ -320,6 +320,7 @@ static const struct kfd_deviceid supported_devices[] = { · 319 unmodified lines
320 { 0x9876, &carrizo_device_info }, /* Carrizo */320 { 0x9876, &carrizo_device_info }, /* Carrizo */
321 { 0x9877, &carrizo_device_info }, /* Carrizo */321 { 0x9877, &carrizo_device_info }, /* Carrizo */
322 { 0x15DD, &raven_device_info }, /* Raven */322 { 0x15DD, &raven_device_info }, /* Raven */
323 { 0x15D8, &raven_device_info }, /* Raven */
323#endif324#endif
324 { 0x67A0, &hawaii_device_info }, /* Hawaii */325 { 0x67A0, &hawaii_device_info }, /* Hawaii */
325 { 0x67A1, &hawaii_device_info }, /* Hawaii */326 { 0x67A1, &hawaii_device_info }, /* Hawaii */
drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c+1−0
@@ -4533,6 +4533,7 @@ static void handle_cursor_update(struct drm_plane *plane, · 4532 unmodified lines
4533 amdgpu_crtc->cursor_width = plane->state->crtc_w;4533 amdgpu_crtc->cursor_width = plane->state->crtc_w;
4534 amdgpu_crtc->cursor_height = plane->state->crtc_h;4534 amdgpu_crtc->cursor_height = plane->state->crtc_h;
4535 4535
4536 memset(&attributes, 0, sizeof(attributes));
4536 attributes.address.high_part = upper_32_bits(address);4537 attributes.address.high_part = upper_32_bits(address);
4537 attributes.address.low_part = lower_32_bits(address);4538 attributes.address.low_part = lower_32_bits(address);
4538 attributes.width = plane->state->crtc_w;4539 attributes.width = plane->state->crtc_w;
drivers/gpu/drm/amd/display/dc/core/dc.c+19−0
@@ -1377,6 +1377,11 @@ static enum surface_update_type det_surface_update(const struct dc *dc, · 1376 unmodified lines
1377 return UPDATE_TYPE_FULL;1377 return UPDATE_TYPE_FULL;
1378 }1378 }
1379 1379
1380 if (u->surface->force_full_update) {
1381 update_flags->bits.full_update = 1;
1382 return UPDATE_TYPE_FULL;
1383 }
1384
1380 type = get_plane_info_update_type(u);1385 type = get_plane_info_update_type(u);
1381 elevate_update_type(&overall_type, type);1386 elevate_update_type(&overall_type, type);
1382 1387
@@ -1802,6 +1807,14 @@ void dc_commit_updates_for_stream(struct dc *dc, · 419 unmodified lines
1802 }1807 }
1803 1808
1804 dc_resource_state_copy_construct(state, context);1809 dc_resource_state_copy_construct(state, context);
1810
1811 for (i = 0; i < dc->res_pool->pipe_count; i++) {
1812 struct pipe_ctx *new_pipe = &context->res_ctx.pipe_ctx[i];
1813 struct pipe_ctx *old_pipe = &dc->current_state->res_ctx.pipe_ctx[i];
1814
1815 if (new_pipe->plane_state && new_pipe->plane_state != old_pipe->plane_state)
1816 new_pipe->plane_state->force_full_update = true;
1817 }
1805 }1818 }
1806 1819
1807 1820
@@ -1838,6 +1851,12 @@ void dc_commit_updates_for_stream(struct dc *dc, · 30 unmodified lines
1838 dc->current_state = context;1851 dc->current_state = context;
1839 dc_release_state(old);1852 dc_release_state(old);
1840 1853
1854 for (i = 0; i < dc->res_pool->pipe_count; i++) {
1855 struct pipe_ctx *pipe_ctx = &context->res_ctx.pipe_ctx[i];
1856
1857 if (pipe_ctx->plane_state && pipe_ctx->stream == stream)
1858 pipe_ctx->plane_state->force_full_update = false;
1859 }
1841 }1860 }
1842 /*let's use current_state to update watermark etc*/1861 /*let's use current_state to update watermark etc*/
1843 if (update_type >= UPDATE_TYPE_FULL)1862 if (update_type >= UPDATE_TYPE_FULL)
drivers/gpu/drm/amd/display/dc/core/dc_link.c+6−0
@@ -2660,12 +2660,18 @@ void core_link_enable_stream( · 2659 unmodified lines
2660void core_link_disable_stream(struct pipe_ctx *pipe_ctx, int option)2660void core_link_disable_stream(struct pipe_ctx *pipe_ctx, int option)
2661{2661{
2662 struct dc *core_dc = pipe_ctx->stream->ctx->dc;2662 struct dc *core_dc = pipe_ctx->stream->ctx->dc;
2663 struct dc_stream_state *stream = pipe_ctx->stream;
2663 2664
2664 core_dc->hwss.blank_stream(pipe_ctx);2665 core_dc->hwss.blank_stream(pipe_ctx);
2665 2666
2666 if (pipe_ctx->stream->signal == SIGNAL_TYPE_DISPLAY_PORT_MST)2667 if (pipe_ctx->stream->signal == SIGNAL_TYPE_DISPLAY_PORT_MST)
2667 deallocate_mst_payload(pipe_ctx);2668 deallocate_mst_payload(pipe_ctx);
2668 2669
2670 if (dc_is_hdmi_signal(pipe_ctx->stream->signal))
2671 dal_ddc_service_write_scdc_data(
2672 stream->link->ddc, 0,
2673 stream->timing.flags.LTE_340MCSC_SCRAMBLE);
2674
2669 core_dc->hwss.disable_stream(pipe_ctx, option);2675 core_dc->hwss.disable_stream(pipe_ctx, option);
2670 2676
2671 disable_link(pipe_ctx->stream->link, pipe_ctx->stream->signal);2677 disable_link(pipe_ctx->stream->link, pipe_ctx->stream->signal);
drivers/gpu/drm/amd/display/dc/dc.h+3−0
@@ -503,6 +503,9 @@ struct dc_plane_state { · 502 unmodified lines
503 struct dc_plane_status status;503 struct dc_plane_status status;
504 struct dc_context *ctx;504 struct dc_context *ctx;
505 505
506 /* HACK: Workaround for forcing full reprogramming under some conditions */
507 bool force_full_update;
508
506 /* private to dc_surface.c */509 /* private to dc_surface.c */
507 enum dc_irq_source irq_source;510 enum dc_irq_source irq_source;
508 struct kref refcount;511 struct kref refcount;
drivers/gpu/drm/amd/display/dc/dce/dce_aux.c+6−3
@@ -190,6 +190,12 @@ static void submit_channel_request( · 189 unmodified lines
190 1,190 1,
191 0);191 0);
192 }192 }
193
194 REG_UPDATE(AUX_INTERRUPT_CONTROL, AUX_SW_DONE_ACK, 1);
195
196 REG_WAIT(AUX_SW_STATUS, AUX_SW_DONE, 0,
197 10, aux110->timeout_period/10);
198
193 /* set the delay and the number of bytes to write */199 /* set the delay and the number of bytes to write */
194 200
195 /* The length include201 /* The length include
@@ -242,9 +248,6 @@ static void submit_channel_request( · 46 unmodified lines
242 }248 }
243 }249 }
244 250
245 REG_UPDATE(AUX_INTERRUPT_CONTROL, AUX_SW_DONE_ACK, 1);
246 REG_WAIT(AUX_SW_STATUS, AUX_SW_DONE, 0,
247 10, aux110->timeout_period/10);
248 REG_UPDATE(AUX_SW_CONTROL, AUX_SW_GO, 1);251 REG_UPDATE(AUX_SW_CONTROL, AUX_SW_GO, 1);
249}252}
250 253
drivers/gpu/drm/amd/display/dc/dce/dce_aux.h+3−3
@@ -71,11 +71,11 @@ enum { /* This is the timeout as defined in DP 1.2a, · 70 unmodified lines
71 * at most within ~240usec. That means,71 * at most within ~240usec. That means,
72 * increasing this timeout will not affect normal operation,72 * increasing this timeout will not affect normal operation,
73 * and we'll timeout after73 * and we'll timeout after
74 * SW_AUX_TIMEOUT_PERIOD_MULTIPLIER * AUX_TIMEOUT_PERIOD = 1600usec.74 * SW_AUX_TIMEOUT_PERIOD_MULTIPLIER * AUX_TIMEOUT_PERIOD = 2400usec.
75 * This timeout is especially important for75 * This timeout is especially important for
76 * resume from S3 and CTS.76 * converters, resume from S3, and CTS.
77 */77 */
78 SW_AUX_TIMEOUT_PERIOD_MULTIPLIER = 478 SW_AUX_TIMEOUT_PERIOD_MULTIPLIER = 6
79};79};
80 80
81struct dce_aux {81struct dce_aux {
drivers/gpu/drm/amd/display/dc/dcn10/dcn10_hubp.c+2−21
@@ -1150,28 +1150,9 @@ void hubp1_cursor_set_position( · 1149 unmodified lines
1150 REG_UPDATE(CURSOR_CONTROL,1150 REG_UPDATE(CURSOR_CONTROL,
1151 CURSOR_ENABLE, cur_en);1151 CURSOR_ENABLE, cur_en);
1152 1152
1153 //account for cases where we see negative offset relative to overlay plane1153 REG_SET_2(CURSOR_POSITION, 0,
1154 if (src_x_offset < 0 && src_y_offset < 0) {
1155 REG_SET_2(CURSOR_POSITION, 0,
1156 CURSOR_X_POSITION, 0,
1157 CURSOR_Y_POSITION, 0);
1158 x_hotspot -= src_x_offset;
1159 y_hotspot -= src_y_offset;
1160 } else if (src_x_offset < 0) {
1161 REG_SET_2(CURSOR_POSITION, 0,
1162 CURSOR_X_POSITION, 0,
1163 CURSOR_Y_POSITION, pos->y);
1164 x_hotspot -= src_x_offset;
1165 } else if (src_y_offset < 0) {
1166 REG_SET_2(CURSOR_POSITION, 0,
1167 CURSOR_X_POSITION, pos->x,1154 CURSOR_X_POSITION, pos->x,
1168 CURSOR_Y_POSITION, 0);1155 CURSOR_Y_POSITION, pos->y);
1169 y_hotspot -= src_y_offset;
1170 } else {
1171 REG_SET_2(CURSOR_POSITION, 0,
1172 CURSOR_X_POSITION, pos->x,
1173 CURSOR_Y_POSITION, pos->y);
1174 }
1175 1156
1176 REG_SET_2(CURSOR_HOT_SPOT, 0,1157 REG_SET_2(CURSOR_HOT_SPOT, 0,
1177 CURSOR_HOT_SPOT_X, x_hotspot,1158 CURSOR_HOT_SPOT_X, x_hotspot,
drivers/gpu/drm/amd/powerplay/hwmgr/vega20_hwmgr.c+18−2
@@ -91,6 +91,12 @@ static void vega20_set_default_registry_data(struct pp_hwmgr *hwmgr) · 90 unmodified lines
91 * MP0CLK DS91 * MP0CLK DS
92 */92 */
93 data->registry_data.disallowed_features = 0xE0041C00;93 data->registry_data.disallowed_features = 0xE0041C00;
94 /* ECC feature should be disabled on old SMUs */
95 smum_send_msg_to_smc(hwmgr, PPSMC_MSG_GetSmuVersion);
96 hwmgr->smu_version = smum_get_argument(hwmgr);
97 if (hwmgr->smu_version < 0x282100)
98 data->registry_data.disallowed_features |= FEATURE_ECC_MASK;
99
94 data->registry_data.od_state_in_dc_support = 0;100 data->registry_data.od_state_in_dc_support = 0;
95 data->registry_data.thermal_support = 1;101 data->registry_data.thermal_support = 1;
96 data->registry_data.skip_baco_hardware = 0;102 data->registry_data.skip_baco_hardware = 0;
@@ -357,6 +363,7 @@ static void vega20_init_dpm_defaults(struct pp_hwmgr *hwmgr) · 260 unmodified lines
357 data->smu_features[GNLD_DS_MP1CLK].smu_feature_id = FEATURE_DS_MP1CLK_BIT;363 data->smu_features[GNLD_DS_MP1CLK].smu_feature_id = FEATURE_DS_MP1CLK_BIT;
358 data->smu_features[GNLD_DS_MP0CLK].smu_feature_id = FEATURE_DS_MP0CLK_BIT;364 data->smu_features[GNLD_DS_MP0CLK].smu_feature_id = FEATURE_DS_MP0CLK_BIT;
359 data->smu_features[GNLD_XGMI].smu_feature_id = FEATURE_XGMI_BIT;365 data->smu_features[GNLD_XGMI].smu_feature_id = FEATURE_XGMI_BIT;
366 data->smu_features[GNLD_ECC].smu_feature_id = FEATURE_ECC_BIT;
360 367
361 for (i = 0; i < GNLD_FEATURES_MAX; i++) {368 for (i = 0; i < GNLD_FEATURES_MAX; i++) {
362 data->smu_features[i].smu_feature_bitmap =369 data->smu_features[i].smu_feature_bitmap =
@@ -3020,7 +3027,8 @@ static int vega20_get_ppfeature_status(struct pp_hwmgr *hwmgr, char *buf) · 2657 unmodified lines
3020 "FCLK_DS",3027 "FCLK_DS",
3021 "MP1CLK_DS",3028 "MP1CLK_DS",
3022 "MP0CLK_DS",3029 "MP0CLK_DS",
3023 "XGMI"};3030 "XGMI",
3031 "ECC"};
3024 static const char *output_title[] = {3032 static const char *output_title[] = {
3025 "FEATURES",3033 "FEATURES",
3026 "BITMASK",3034 "BITMASK",
@@ -3462,6 +3470,7 @@ static int vega20_apply_clocks_adjust_rules(struct pp_hwmgr *hwmgr) · 435 unmodified lines
3462 struct vega20_single_dpm_table *dpm_table;3470 struct vega20_single_dpm_table *dpm_table;
3463 bool vblank_too_short = false;3471 bool vblank_too_short = false;
3464 bool disable_mclk_switching;3472 bool disable_mclk_switching;
3473 bool disable_fclk_switching;
3465 uint32_t i, latency;3474 uint32_t i, latency;
3466 3475
3467 disable_mclk_switching = ((1 < hwmgr->display_config->num_display) &&3476 disable_mclk_switching = ((1 < hwmgr->display_config->num_display) &&
@@ -3537,13 +3546,20 @@ static int vega20_apply_clocks_adjust_rules(struct pp_hwmgr *hwmgr) · 69 unmodified lines
3537 if (hwmgr->display_config->nb_pstate_switch_disable)3546 if (hwmgr->display_config->nb_pstate_switch_disable)
3538 dpm_table->dpm_state.hard_min_level = dpm_table->dpm_levels[dpm_table->count - 1].value;3547 dpm_table->dpm_state.hard_min_level = dpm_table->dpm_levels[dpm_table->count - 1].value;
3539 3548
3549 if ((disable_mclk_switching &&
3550 (dpm_table->dpm_state.hard_min_level == dpm_table->dpm_levels[dpm_table->count - 1].value)) ||
3551 hwmgr->display_config->min_mem_set_clock / 100 >= dpm_table->dpm_levels[dpm_table->count - 1].value)
3552 disable_fclk_switching = true;
3553 else
3554 disable_fclk_switching = false;
3555
3540 /* fclk */3556 /* fclk */
3541 dpm_table = &(data->dpm_table.fclk_table);3557 dpm_table = &(data->dpm_table.fclk_table);
3542 dpm_table->dpm_state.soft_min_level = dpm_table->dpm_levels[0].value;3558 dpm_table->dpm_state.soft_min_level = dpm_table->dpm_levels[0].value;
3543 dpm_table->dpm_state.soft_max_level = VG20_CLOCK_MAX_DEFAULT;3559 dpm_table->dpm_state.soft_max_level = VG20_CLOCK_MAX_DEFAULT;
3544 dpm_table->dpm_state.hard_min_level = dpm_table->dpm_levels[0].value;3560 dpm_table->dpm_state.hard_min_level = dpm_table->dpm_levels[0].value;
3545 dpm_table->dpm_state.hard_max_level = VG20_CLOCK_MAX_DEFAULT;3561 dpm_table->dpm_state.hard_max_level = VG20_CLOCK_MAX_DEFAULT;
3546 if (hwmgr->display_config->nb_pstate_switch_disable)3562 if (hwmgr->display_config->nb_pstate_switch_disable || disable_fclk_switching)
3547 dpm_table->dpm_state.soft_min_level = dpm_table->dpm_levels[dpm_table->count - 1].value;3563 dpm_table->dpm_state.soft_min_level = dpm_table->dpm_levels[dpm_table->count - 1].value;
3548 3564
3549 /* vclk */3565 /* vclk */
drivers/gpu/drm/amd/powerplay/hwmgr/vega20_hwmgr.h+1−0
@@ -80,6 +80,7 @@ enum { · 79 unmodified lines
80 GNLD_DS_MP1CLK,80 GNLD_DS_MP1CLK,
81 GNLD_DS_MP0CLK,81 GNLD_DS_MP0CLK,
82 GNLD_XGMI,82 GNLD_XGMI,
83 GNLD_ECC,
83 84
84 GNLD_FEATURES_MAX85 GNLD_FEATURES_MAX
85};86};
drivers/gpu/drm/amd/powerplay/inc/smu11_driver_if.h+3−2
@@ -99,7 +99,7 @@ · 98 unmodified lines
99#define FEATURE_DS_MP1CLK_BIT 3099#define FEATURE_DS_MP1CLK_BIT 30
100#define FEATURE_DS_MP0CLK_BIT 31100#define FEATURE_DS_MP0CLK_BIT 31
101#define FEATURE_XGMI_BIT 32101#define FEATURE_XGMI_BIT 32
102#define FEATURE_SPARE_33_BIT 33102#define FEATURE_ECC_BIT 33
103#define FEATURE_SPARE_34_BIT 34103#define FEATURE_SPARE_34_BIT 34
104#define FEATURE_SPARE_35_BIT 35104#define FEATURE_SPARE_35_BIT 35
105#define FEATURE_SPARE_36_BIT 36105#define FEATURE_SPARE_36_BIT 36
@@ -165,7 +165,8 @@ · 59 unmodified lines
165#define FEATURE_DS_FCLK_MASK (1 << FEATURE_DS_FCLK_BIT )165#define FEATURE_DS_FCLK_MASK (1 << FEATURE_DS_FCLK_BIT )
166#define FEATURE_DS_MP1CLK_MASK (1 << FEATURE_DS_MP1CLK_BIT )166#define FEATURE_DS_MP1CLK_MASK (1 << FEATURE_DS_MP1CLK_BIT )
167#define FEATURE_DS_MP0CLK_MASK (1 << FEATURE_DS_MP0CLK_BIT )167#define FEATURE_DS_MP0CLK_MASK (1 << FEATURE_DS_MP0CLK_BIT )
168#define FEATURE_XGMI_MASK (1 << FEATURE_XGMI_BIT )168#define FEATURE_XGMI_MASK (1ULL << FEATURE_XGMI_BIT )
169#define FEATURE_ECC_MASK (1ULL << FEATURE_ECC_BIT )
169 170
170#define DPM_OVERRIDE_DISABLE_SOCCLK_PID 0x00000001171#define DPM_OVERRIDE_DISABLE_SOCCLK_PID 0x00000001
171#define DPM_OVERRIDE_DISABLE_UCLK_PID 0x00000002172#define DPM_OVERRIDE_DISABLE_UCLK_PID 0x00000002
drivers/gpu/drm/bridge/synopsys/dw-hdmi.c+30−4
@@ -1037,6 +1037,31 @@ void dw_hdmi_phy_i2c_write(struct dw_hdmi *hdmi, unsigned short data, · 1036 unmodified lines
1037}1037}
1038EXPORT_SYMBOL_GPL(dw_hdmi_phy_i2c_write);1038EXPORT_SYMBOL_GPL(dw_hdmi_phy_i2c_write);
1039 1039
1040/* Filter out invalid setups to avoid configuring SCDC and scrambling */
1041static bool dw_hdmi_support_scdc(struct dw_hdmi *hdmi)
1042{
1043 struct drm_display_info *display = &hdmi->connector.display_info;
1044
1045 /* Completely disable SCDC support for older controllers */
1046 if (hdmi->version < 0x200a)
1047 return false;
1048
1049 /* Disable if SCDC is not supported, or if an HF-VSDB block is absent */
1050 if (!display->hdmi.scdc.supported ||
1051 !display->hdmi.scdc.scrambling.supported)
1052 return false;
1053
1054 /*
1055 * Disable if display only support low TMDS rates and scrambling
1056 * for low rates is not supported either
1057 */
1058 if (!display->hdmi.scdc.scrambling.low_rates &&
1059 display->max_tmds_clock <= 340000)
1060 return false;
1061
1062 return true;
1063}
1064
1040/*1065/*
1041 * HDMI2.0 Specifies the following procedure for High TMDS Bit Rates:1066 * HDMI2.0 Specifies the following procedure for High TMDS Bit Rates:
1042 * - The Source shall suspend transmission of the TMDS clock and data1067 * - The Source shall suspend transmission of the TMDS clock and data
@@ -1055,7 +1080,7 @@ void dw_hdmi_set_high_tmds_clock_ratio(struct dw_hdmi *hdmi) · 12 unmodified lines
1055 unsigned long mtmdsclock = hdmi->hdmi_data.video_mode.mtmdsclock;1080 unsigned long mtmdsclock = hdmi->hdmi_data.video_mode.mtmdsclock;
1056 1081
1057 /* Control for TMDS Bit Period/TMDS Clock-Period Ratio */1082 /* Control for TMDS Bit Period/TMDS Clock-Period Ratio */
1058 if (hdmi->connector.display_info.hdmi.scdc.supported) {1083 if (dw_hdmi_support_scdc(hdmi)) {
1059 if (mtmdsclock > HDMI14_MAX_TMDSCLK)1084 if (mtmdsclock > HDMI14_MAX_TMDSCLK)
1060 drm_scdc_set_high_tmds_clock_ratio(hdmi->ddc, 1);1085 drm_scdc_set_high_tmds_clock_ratio(hdmi->ddc, 1);
1061 else1086 else
@@ -1579,8 +1604,9 @@ static void hdmi_av_composer(struct dw_hdmi *hdmi, · 517 unmodified lines
1579 1604
1580 /* Set up HDMI_FC_INVIDCONF */1605 /* Set up HDMI_FC_INVIDCONF */
1581 inv_val = (hdmi->hdmi_data.hdcp_enable ||1606 inv_val = (hdmi->hdmi_data.hdcp_enable ||
1582 vmode->mtmdsclock > HDMI14_MAX_TMDSCLK ||1607 (dw_hdmi_support_scdc(hdmi) &&
1583 hdmi_info->scdc.scrambling.low_rates ?1608 (vmode->mtmdsclock > HDMI14_MAX_TMDSCLK ||
1609 hdmi_info->scdc.scrambling.low_rates)) ?
1584 HDMI_FC_INVIDCONF_HDCP_KEEPOUT_ACTIVE :1610 HDMI_FC_INVIDCONF_HDCP_KEEPOUT_ACTIVE :
1585 HDMI_FC_INVIDCONF_HDCP_KEEPOUT_INACTIVE);1611 HDMI_FC_INVIDCONF_HDCP_KEEPOUT_INACTIVE);
1586 1612
@@ -1646,7 +1672,7 @@ static void hdmi_av_composer(struct dw_hdmi *hdmi, · 59 unmodified lines
1646 }1672 }
1647 1673
1648 /* Scrambling Control */1674 /* Scrambling Control */
1649 if (hdmi_info->scdc.supported) {1675 if (dw_hdmi_support_scdc(hdmi)) {
1650 if (vmode->mtmdsclock > HDMI14_MAX_TMDSCLK ||1676 if (vmode->mtmdsclock > HDMI14_MAX_TMDSCLK ||
1651 hdmi_info->scdc.scrambling.low_rates) {1677 hdmi_info->scdc.scrambling.low_rates) {
1652 /*1678 /*
drivers/gpu/drm/drm_atomic_helper.c+2−3
@@ -1034,7 +1034,7 @@ disable_outputs(struct drm_device *dev, struct drm_atomic_state *old_state) · 1033 unmodified lines
1034 funcs->atomic_disable(crtc, old_crtc_state);1034 funcs->atomic_disable(crtc, old_crtc_state);
1035 else if (funcs->disable)1035 else if (funcs->disable)
1036 funcs->disable(crtc);1036 funcs->disable(crtc);
1037 else1037 else if (funcs->dpms)
1038 funcs->dpms(crtc, DRM_MODE_DPMS_OFF);1038 funcs->dpms(crtc, DRM_MODE_DPMS_OFF);
1039 1039
1040 if (!(dev->irq_enabled && dev->num_crtcs))1040 if (!(dev->irq_enabled && dev->num_crtcs))
@@ -1277,10 +1277,9 @@ void drm_atomic_helper_commit_modeset_enables(struct drm_device *dev, · 236 unmodified lines
1277 if (new_crtc_state->enable) {1277 if (new_crtc_state->enable) {
1278 DRM_DEBUG_ATOMIC("enabling [CRTC:%d:%s]\n",1278 DRM_DEBUG_ATOMIC("enabling [CRTC:%d:%s]\n",
1279 crtc->base.id, crtc->name);1279 crtc->base.id, crtc->name);
1280
1281 if (funcs->atomic_enable)1280 if (funcs->atomic_enable)
1282 funcs->atomic_enable(crtc, old_crtc_state);1281 funcs->atomic_enable(crtc, old_crtc_state);
1283 else1282 else if (funcs->commit)
1284 funcs->commit(crtc);1283 funcs->commit(crtc);
1285 }1284 }
1286 }1285 }
drivers/gpu/drm/i915/gvt/display.c+1−1
@@ -448,7 +448,7 @@ void intel_gvt_emulate_vblank(struct intel_gvt *gvt) · 447 unmodified lines
448/**448/**
449 * intel_vgpu_emulate_hotplug - trigger hotplug event for vGPU449 * intel_vgpu_emulate_hotplug - trigger hotplug event for vGPU
450 * @vgpu: a vGPU450 * @vgpu: a vGPU
451 * @conncted: link state451 * @connected: link state
452 *452 *
453 * This function is used to trigger hotplug interrupt for vGPU453 * This function is used to trigger hotplug interrupt for vGPU
454 *454 *
drivers/gpu/drm/i915/gvt/dmabuf.c+6−7
@@ -209,7 +209,7 @@ static int vgpu_get_plane_info(struct drm_device *dev, · 208 unmodified lines
209 struct drm_i915_private *dev_priv = to_i915(dev);209 struct drm_i915_private *dev_priv = to_i915(dev);
210 struct intel_vgpu_primary_plane_format p;210 struct intel_vgpu_primary_plane_format p;
211 struct intel_vgpu_cursor_plane_format c;211 struct intel_vgpu_cursor_plane_format c;
212 int ret;212 int ret, tile_height = 1;
213 213
214 if (plane_id == DRM_PLANE_TYPE_PRIMARY) {214 if (plane_id == DRM_PLANE_TYPE_PRIMARY) {
215 ret = intel_vgpu_decode_primary_plane(vgpu, &p);215 ret = intel_vgpu_decode_primary_plane(vgpu, &p);
@@ -228,19 +228,19 @@ static int vgpu_get_plane_info(struct drm_device *dev, · 12 unmodified lines
228 break;228 break;
229 case PLANE_CTL_TILED_X:229 case PLANE_CTL_TILED_X:
230 info->drm_format_mod = I915_FORMAT_MOD_X_TILED;230 info->drm_format_mod = I915_FORMAT_MOD_X_TILED;
231 tile_height = 8;
231 break;232 break;
232 case PLANE_CTL_TILED_Y:233 case PLANE_CTL_TILED_Y:
233 info->drm_format_mod = I915_FORMAT_MOD_Y_TILED;234 info->drm_format_mod = I915_FORMAT_MOD_Y_TILED;
235 tile_height = 32;
234 break;236 break;
235 case PLANE_CTL_TILED_YF:237 case PLANE_CTL_TILED_YF:
236 info->drm_format_mod = I915_FORMAT_MOD_Yf_TILED;238 info->drm_format_mod = I915_FORMAT_MOD_Yf_TILED;
239 tile_height = 32;
237 break;240 break;
238 default:241 default:
239 gvt_vgpu_err("invalid tiling mode: %x\n", p.tiled);242 gvt_vgpu_err("invalid tiling mode: %x\n", p.tiled);
240 }243 }
241
242 info->size = (((p.stride * p.height * p.bpp) / 8) +
243 (PAGE_SIZE - 1)) >> PAGE_SHIFT;
244 } else if (plane_id == DRM_PLANE_TYPE_CURSOR) {244 } else if (plane_id == DRM_PLANE_TYPE_CURSOR) {
245 ret = intel_vgpu_decode_cursor_plane(vgpu, &c);245 ret = intel_vgpu_decode_cursor_plane(vgpu, &c);
246 if (ret)246 if (ret)
@@ -262,14 +262,13 @@ static int vgpu_get_plane_info(struct drm_device *dev, · 15 unmodified lines
262 info->x_hot = UINT_MAX;262 info->x_hot = UINT_MAX;
263 info->y_hot = UINT_MAX;263 info->y_hot = UINT_MAX;
264 }264 }
265
266 info->size = (((info->stride * c.height * c.bpp) / 8)
267 + (PAGE_SIZE - 1)) >> PAGE_SHIFT;
268 } else {265 } else {
269 gvt_vgpu_err("invalid plane id:%d\n", plane_id);266 gvt_vgpu_err("invalid plane id:%d\n", plane_id);
270 return -EINVAL;267 return -EINVAL;
271 }268 }
272 269
270 info->size = (info->stride * roundup(info->height, tile_height)
271 + PAGE_SIZE - 1) >> PAGE_SHIFT;
273 if (info->size == 0) {272 if (info->size == 0) {
274 gvt_vgpu_err("fb size is zero\n");273 gvt_vgpu_err("fb size is zero\n");
275 return -EINVAL;274 return -EINVAL;
drivers/gpu/drm/i915/gvt/gtt.c+10−4
@@ -750,14 +750,20 @@ static void ppgtt_free_spt(struct intel_vgpu_ppgtt_spt *spt) · 749 unmodified lines
750 750
751static void ppgtt_free_all_spt(struct intel_vgpu *vgpu)751static void ppgtt_free_all_spt(struct intel_vgpu *vgpu)
752{752{
753 struct intel_vgpu_ppgtt_spt *spt;753 struct intel_vgpu_ppgtt_spt *spt, *spn;
754 struct radix_tree_iter iter;754 struct radix_tree_iter iter;
755 void **slot;755 LIST_HEAD(all_spt);
756 void __rcu **slot;
756 757
758 rcu_read_lock();
757 radix_tree_for_each_slot(slot, &vgpu->gtt.spt_tree, &iter, 0) {759 radix_tree_for_each_slot(slot, &vgpu->gtt.spt_tree, &iter, 0) {
758 spt = radix_tree_deref_slot(slot);760 spt = radix_tree_deref_slot(slot);
759 ppgtt_free_spt(spt);761 list_move(&spt->post_shadow_list, &all_spt);
760 }762 }
763 rcu_read_unlock();
764
765 list_for_each_entry_safe(spt, spn, &all_spt, post_shadow_list)
766 ppgtt_free_spt(spt);
761}767}
762 768
763static int ppgtt_handle_guest_write_page_table_bytes(769static int ppgtt_handle_guest_write_page_table_bytes(
@@ -1946,7 +1952,7 @@ void _intel_vgpu_mm_release(struct kref *mm_ref) · 1182 unmodified lines
1946 */1952 */
1947void intel_vgpu_unpin_mm(struct intel_vgpu_mm *mm)1953void intel_vgpu_unpin_mm(struct intel_vgpu_mm *mm)
1948{1954{
1949 atomic_dec(&mm->pincount);1955 atomic_dec_if_positive(&mm->pincount);
1950}1956}
1951 1957
1952/**1958/**
drivers/gpu/drm/i915/gvt/kvmgt.c+3−3
@@ -905,7 +905,7 @@ static inline bool intel_vgpu_in_aperture(struct intel_vgpu *vgpu, u64 off) · 904 unmodified lines
905static int intel_vgpu_aperture_rw(struct intel_vgpu *vgpu, u64 off,905static int intel_vgpu_aperture_rw(struct intel_vgpu *vgpu, u64 off,
906 void *buf, unsigned long count, bool is_write)906 void *buf, unsigned long count, bool is_write)
907{907{
908 void *aperture_va;908 void __iomem *aperture_va;
909 909
910 if (!intel_vgpu_in_aperture(vgpu, off) ||910 if (!intel_vgpu_in_aperture(vgpu, off) ||
911 !intel_vgpu_in_aperture(vgpu, off + count)) {911 !intel_vgpu_in_aperture(vgpu, off + count)) {
@@ -920,9 +920,9 @@ static int intel_vgpu_aperture_rw(struct intel_vgpu *vgpu, u64 off, · 8 unmodified lines
920 return -EIO;920 return -EIO;
921 921
922 if (is_write)922 if (is_write)
923 memcpy(aperture_va + offset_in_page(off), buf, count);923 memcpy_toio(aperture_va + offset_in_page(off), buf, count);
924 else924 else
925 memcpy(buf, aperture_va + offset_in_page(off), count);925 memcpy_fromio(buf, aperture_va + offset_in_page(off), count);
926 926
927 io_mapping_unmap(aperture_va);927 io_mapping_unmap(aperture_va);
928 928
drivers/gpu/drm/i915/gvt/scheduler.c+3−2
@@ -1486,8 +1486,9 @@ intel_vgpu_create_workload(struct intel_vgpu *vgpu, int ring_id, · 1485 unmodified lines
1486 intel_runtime_pm_put_unchecked(dev_priv);1486 intel_runtime_pm_put_unchecked(dev_priv);
1487 }1487 }
1488 1488
1489 if (ret && (vgpu_is_vm_unhealthy(ret))) {1489 if (ret) {
1490 enter_failsafe_mode(vgpu, GVT_FAILSAFE_GUEST_ERR);1490 if (vgpu_is_vm_unhealthy(ret))
1491 enter_failsafe_mode(vgpu, GVT_FAILSAFE_GUEST_ERR);
1491 intel_vgpu_destroy_workload(workload);1492 intel_vgpu_destroy_workload(workload);
1492 return ERR_PTR(ret);1493 return ERR_PTR(ret);
1493 }1494 }
drivers/gpu/drm/i915/i915_debugfs.c+4−1
@@ -4830,7 +4830,10 @@ static int i915_dsc_fec_support_show(struct seq_file *m, void *data) · 4829 unmodified lines
4830 ret = drm_modeset_lock(&dev->mode_config.connection_mutex,4830 ret = drm_modeset_lock(&dev->mode_config.connection_mutex,
4831 &ctx);4831 &ctx);
4832 if (ret) {4832 if (ret) {
4833 ret = -EINTR;4833 if (ret == -EDEADLK && !drm_modeset_backoff(&ctx)) {
4834 try_again = true;
4835 continue;
4836 }
4834 break;4837 break;
4835 }4838 }
4836 crtc = connector->state->crtc;4839 crtc = connector->state->crtc;
drivers/gpu/drm/i915/icl_dsi.c+27−21
@@ -323,6 +323,21 @@ static void gen11_dsi_program_esc_clk_div(struct intel_encoder *encoder) · 322 unmodified lines
323 }323 }
324}324}
325 325
326static void get_dsi_io_power_domains(struct drm_i915_private *dev_priv,
327 struct intel_dsi *intel_dsi)
328{
329 enum port port;
330
331 for_each_dsi_port(port, intel_dsi->ports) {
332 WARN_ON(intel_dsi->io_wakeref[port]);
333 intel_dsi->io_wakeref[port] =
334 intel_display_power_get(dev_priv,
335 port == PORT_A ?
336 POWER_DOMAIN_PORT_DDI_A_IO :
337 POWER_DOMAIN_PORT_DDI_B_IO);
338 }
339}
340
326static void gen11_dsi_enable_io_power(struct intel_encoder *encoder)341static void gen11_dsi_enable_io_power(struct intel_encoder *encoder)
327{342{
328 struct drm_i915_private *dev_priv = to_i915(encoder->base.dev);343 struct drm_i915_private *dev_priv = to_i915(encoder->base.dev);
@@ -336,13 +351,7 @@ static void gen11_dsi_enable_io_power(struct intel_encoder *encoder) · 7 unmodified lines
336 I915_WRITE(ICL_DSI_IO_MODECTL(port), tmp);351 I915_WRITE(ICL_DSI_IO_MODECTL(port), tmp);
337 }352 }
338 353
339 for_each_dsi_port(port, intel_dsi->ports) {354 get_dsi_io_power_domains(dev_priv, intel_dsi);
340 intel_dsi->io_wakeref[port] =
341 intel_display_power_get(dev_priv,
342 port == PORT_A ?
343 POWER_DOMAIN_PORT_DDI_A_IO :
344 POWER_DOMAIN_PORT_DDI_B_IO);
345 }
346}355}
347 356
348static void gen11_dsi_power_up_lanes(struct intel_encoder *encoder)357static void gen11_dsi_power_up_lanes(struct intel_encoder *encoder)
@@ -589,6 +598,12 @@ static void gen11_dsi_map_pll(struct intel_encoder *encoder, · 240 unmodified lines
589 val |= DPCLKA_CFGCR0_DDI_CLK_SEL(pll->info->id, port);598 val |= DPCLKA_CFGCR0_DDI_CLK_SEL(pll->info->id, port);
590 }599 }
591 I915_WRITE(DPCLKA_CFGCR0_ICL, val);600 I915_WRITE(DPCLKA_CFGCR0_ICL, val);
601
602 for_each_dsi_port(port, intel_dsi->ports) {
603 val &= ~DPCLKA_CFGCR0_DDI_CLK_OFF(port);
604 }
605 I915_WRITE(DPCLKA_CFGCR0_ICL, val);
606
592 POSTING_READ(DPCLKA_CFGCR0_ICL);607 POSTING_READ(DPCLKA_CFGCR0_ICL);
593 608
594 mutex_unlock(&dev_priv->dpll_lock);609 mutex_unlock(&dev_priv->dpll_lock);
@@ -1117,7 +1132,7 @@ static void gen11_dsi_disable_port(struct intel_encoder *encoder) · 522 unmodified lines
1117 DRM_ERROR("DDI port:%c buffer not idle\n",1132 DRM_ERROR("DDI port:%c buffer not idle\n",
1118 port_name(port));1133 port_name(port));
1119 }1134 }
1120 gen11_dsi_ungate_clocks(encoder);1135 gen11_dsi_gate_clocks(encoder);
1121}1136}
1122 1137
1123static void gen11_dsi_disable_io_power(struct intel_encoder *encoder)1138static void gen11_dsi_disable_io_power(struct intel_encoder *encoder)
@@ -1218,20 +1233,11 @@ static int gen11_dsi_compute_config(struct intel_encoder *encoder, · 94 unmodified lines
1218 return 0;1233 return 0;
1219}1234}
1220 1235
1221static u64 gen11_dsi_get_power_domains(struct intel_encoder *encoder,1236static void gen11_dsi_get_power_domains(struct intel_encoder *encoder,
1222 struct intel_crtc_state *crtc_state)1237 struct intel_crtc_state *crtc_state)
1223{1238{
1224 struct intel_dsi *intel_dsi = enc_to_intel_dsi(&encoder->base);1239 get_dsi_io_power_domains(to_i915(encoder->base.dev),
1225 u64 domains = 0;1240 enc_to_intel_dsi(&encoder->base));
1226 enum port port;
1227
1228 for_each_dsi_port(port, intel_dsi->ports)
1229 if (port == PORT_A)
1230 domains |= BIT_ULL(POWER_DOMAIN_PORT_DDI_A_IO);
1231 else
1232 domains |= BIT_ULL(POWER_DOMAIN_PORT_DDI_B_IO);
1233
1234 return domains;
1235}1241}
1236 1242
1237static bool gen11_dsi_get_hw_state(struct intel_encoder *encoder,1243static bool gen11_dsi_get_hw_state(struct intel_encoder *encoder,
drivers/gpu/drm/i915/intel_ddi.c+11−12
@@ -2075,12 +2075,11 @@ intel_ddi_main_link_aux_domain(struct intel_digital_port *dig_port) · 2074 unmodified lines
2075 intel_aux_power_domain(dig_port);2075 intel_aux_power_domain(dig_port);
2076}2076}
2077 2077
2078static u64 intel_ddi_get_power_domains(struct intel_encoder *encoder,2078static void intel_ddi_get_power_domains(struct intel_encoder *encoder,
2079 struct intel_crtc_state *crtc_state)2079 struct intel_crtc_state *crtc_state)
2080{2080{
2081 struct drm_i915_private *dev_priv = to_i915(encoder->base.dev);2081 struct drm_i915_private *dev_priv = to_i915(encoder->base.dev);
2082 struct intel_digital_port *dig_port;2082 struct intel_digital_port *dig_port;
2083 u64 domains;
2084 2083
2085 /*2084 /*
2086 * TODO: Add support for MST encoders. Atm, the following should never2085 * TODO: Add support for MST encoders. Atm, the following should never
@@ -2088,10 +2087,10 @@ static u64 intel_ddi_get_power_domains(struct intel_encoder *encoder, · 1 unmodified line
2088 * hook.2087 * hook.
2089 */2088 */
2090 if (WARN_ON(intel_crtc_has_type(crtc_state, INTEL_OUTPUT_DP_MST)))2089 if (WARN_ON(intel_crtc_has_type(crtc_state, INTEL_OUTPUT_DP_MST)))
2091 return 0;2090 return;
2092 2091
2093 dig_port = enc_to_dig_port(&encoder->base);2092 dig_port = enc_to_dig_port(&encoder->base);
2094 domains = BIT_ULL(dig_port->ddi_io_power_domain);2093 intel_display_power_get(dev_priv, dig_port->ddi_io_power_domain);
2095 2094
2096 /*2095 /*
2097 * AUX power is only needed for (e)DP mode, and for HDMI mode on TC2096 * AUX power is only needed for (e)DP mode, and for HDMI mode on TC
@@ -2099,15 +2098,15 @@ static u64 intel_ddi_get_power_domains(struct intel_encoder *encoder, · 1 unmodified line
2099 */2098 */
2100 if (intel_crtc_has_dp_encoder(crtc_state) ||2099 if (intel_crtc_has_dp_encoder(crtc_state) ||
2101 intel_port_is_tc(dev_priv, encoder->port))2100 intel_port_is_tc(dev_priv, encoder->port))
2102 domains |= BIT_ULL(intel_ddi_main_link_aux_domain(dig_port));2101 intel_display_power_get(dev_priv,
2102 intel_ddi_main_link_aux_domain(dig_port));
2103 2103
2104 /*2104 /*
2105 * VDSC power is needed when DSC is enabled2105 * VDSC power is needed when DSC is enabled
2106 */2106 */
2107 if (crtc_state->dsc_params.compression_enable)2107 if (crtc_state->dsc_params.compression_enable)
2108 domains |= BIT_ULL(intel_dsc_power_domain(crtc_state));2108 intel_display_power_get(dev_priv,
2109 2109 intel_dsc_power_domain(crtc_state));
2110 return domains;
2111}2110}
2112 2111
2113void intel_ddi_enable_pipe_clock(const struct intel_crtc_state *crtc_state)2112void intel_ddi_enable_pipe_clock(const struct intel_crtc_state *crtc_state)
@@ -2825,10 +2824,10 @@ void icl_sanitize_encoder_pll_mapping(struct intel_encoder *encoder) · 711 unmodified lines
2825 return;2824 return;
2826 }2825 }
2827 /*2826 /*
2828 * DSI ports should have their DDI clock ungated when disabled2827 * For DSI we keep the ddi clocks gated
2829 * and gated when enabled.2828 * except during enable/disable sequence.
2830 */2829 */
2831 ddi_clk_needed = !encoder->base.crtc;2830 ddi_clk_needed = false;
2832 }2831 }
2833 2832
2834 val = I915_READ(DPCLKA_CFGCR0_ICL);2833 val = I915_READ(DPCLKA_CFGCR0_ICL);
drivers/gpu/drm/i915/intel_display.c+1−5
@@ -15986,8 +15986,6 @@ get_encoder_power_domains(struct drm_i915_private *dev_priv) · 15985 unmodified lines
15986 struct intel_encoder *encoder;15986 struct intel_encoder *encoder;
15987 15987
15988 for_each_intel_encoder(&dev_priv->drm, encoder) {15988 for_each_intel_encoder(&dev_priv->drm, encoder) {
15989 u64 get_domains;
15990 enum intel_display_power_domain domain;
15991 struct intel_crtc_state *crtc_state;15989 struct intel_crtc_state *crtc_state;
15992 15990
15993 if (!encoder->get_power_domains)15991 if (!encoder->get_power_domains)
@@ -16001,9 +15999,7 @@ get_encoder_power_domains(struct drm_i915_private *dev_priv) · 7 unmodified lines
16001 continue;15999 continue;
16002 16000
16003 crtc_state = to_intel_crtc_state(encoder->base.crtc->state);16001 crtc_state = to_intel_crtc_state(encoder->base.crtc->state);
16004 get_domains = encoder->get_power_domains(encoder, crtc_state);16002 encoder->get_power_domains(encoder, crtc_state);
16005 for_each_power_domain(domain, get_domains)
16006 intel_display_power_get(dev_priv, domain);
16007 }16003 }
16008}16004}
16009 16005
drivers/gpu/drm/i915/intel_dp.c+10−59
@@ -1859,42 +1859,6 @@ intel_dp_compute_link_config_wide(struct intel_dp *intel_dp, · 1858 unmodified lines
1859 return -EINVAL;1859 return -EINVAL;
1860}1860}
1861 1861
1862/* Optimize link config in order: max bpp, min lanes, min clock */
1863static int
1864intel_dp_compute_link_config_fast(struct intel_dp *intel_dp,
1865 struct intel_crtc_state *pipe_config,
1866 const struct link_config_limits *limits)
1867{
1868 struct drm_display_mode *adjusted_mode = &pipe_config->base.adjusted_mode;
1869 int bpp, clock, lane_count;
1870 int mode_rate, link_clock, link_avail;
1871
1872 for (bpp = limits->max_bpp; bpp >= limits->min_bpp; bpp -= 2 * 3) {
1873 mode_rate = intel_dp_link_required(adjusted_mode->crtc_clock,
1874 bpp);
1875
1876 for (lane_count = limits->min_lane_count;
1877 lane_count <= limits->max_lane_count;
1878 lane_count <<= 1) {
1879 for (clock = limits->min_clock; clock <= limits->max_clock; clock++) {
1880 link_clock = intel_dp->common_rates[clock];
1881 link_avail = intel_dp_max_data_rate(link_clock,
1882 lane_count);
1883
1884 if (mode_rate <= link_avail) {
1885 pipe_config->lane_count = lane_count;
1886 pipe_config->pipe_bpp = bpp;
1887 pipe_config->port_clock = link_clock;
1888
1889 return 0;
1890 }
1891 }
1892 }
1893 }
1894
1895 return -EINVAL;
1896}
1897
1898static int intel_dp_dsc_compute_bpp(struct intel_dp *intel_dp, u8 dsc_max_bpc)1862static int intel_dp_dsc_compute_bpp(struct intel_dp *intel_dp, u8 dsc_max_bpc)
1899{1863{
1900 int i, num_bpc;1864 int i, num_bpc;
@@ -2031,15 +1995,13 @@ intel_dp_compute_link_config(struct intel_encoder *encoder, · 130 unmodified lines
2031 limits.min_bpp = 6 * 3;1995 limits.min_bpp = 6 * 3;
2032 limits.max_bpp = intel_dp_compute_bpp(intel_dp, pipe_config);1996 limits.max_bpp = intel_dp_compute_bpp(intel_dp, pipe_config);
2033 1997
2034 if (intel_dp_is_edp(intel_dp) && intel_dp->edp_dpcd[0] < DP_EDP_14) {1998 if (intel_dp_is_edp(intel_dp)) {
2035 /*1999 /*
2036 * Use the maximum clock and number of lanes the eDP panel2000 * Use the maximum clock and number of lanes the eDP panel
2037 * advertizes being capable of. The eDP 1.3 and earlier panels2001 * advertizes being capable of. The panels are generally
2038 * are generally designed to support only a single clock and2002 * designed to support only a single clock and lane
2039 * lane configuration, and typically these values correspond to2003 * configuration, and typically these values correspond to the
2040 * the native resolution of the panel. With eDP 1.4 rate select2004 * native resolution of the panel.
2041 * and DSC, this is decreasingly the case, and we need to be
2042 * able to select less than maximum link config.
2043 */2005 */
2044 limits.min_lane_count = limits.max_lane_count;2006 limits.min_lane_count = limits.max_lane_count;
2045 limits.min_clock = limits.max_clock;2007 limits.min_clock = limits.max_clock;
@@ -2053,22 +2015,11 @@ intel_dp_compute_link_config(struct intel_encoder *encoder, · 7 unmodified lines
2053 intel_dp->common_rates[limits.max_clock],2015 intel_dp->common_rates[limits.max_clock],
2054 limits.max_bpp, adjusted_mode->crtc_clock);2016 limits.max_bpp, adjusted_mode->crtc_clock);
2055 2017
2056 if (intel_dp_is_edp(intel_dp))2018 /*
2057 /*2019 * Optimize for slow and wide. This is the place to add alternative
2058 * Optimize for fast and narrow. eDP 1.3 section 3.3 and eDP 1.42020 * optimization policy.
2059 * section A.1: "It is recommended that the minimum number of2021 */
2060 * lanes be used, using the minimum link rate allowed for that2022 ret = intel_dp_compute_link_config_wide(intel_dp, pipe_config, &limits);
2061 * lane configuration."
2062 *
2063 * Note that we use the max clock and lane count for eDP 1.3 and
2064 * earlier, and fast vs. wide is irrelevant.
2065 */
2066 ret = intel_dp_compute_link_config_fast(intel_dp, pipe_config,
2067 &limits);
2068 else
2069 /* Optimize for slow and wide. */
2070 ret = intel_dp_compute_link_config_wide(intel_dp, pipe_config,
2071 &limits);
2072 2023
2073 /* enable compression if the mode doesn't fit available BW */2024 /* enable compression if the mode doesn't fit available BW */
2074 DRM_DEBUG_KMS("Force DSC en = %d\n", intel_dp->force_dsc_en);2025 DRM_DEBUG_KMS("Force DSC en = %d\n", intel_dp->force_dsc_en);
drivers/gpu/drm/i915/intel_drv.h+6−4
@@ -270,10 +270,12 @@ struct intel_encoder { · 269 unmodified lines
270 * be set correctly before calling this function. */270 * be set correctly before calling this function. */
271 void (*get_config)(struct intel_encoder *,271 void (*get_config)(struct intel_encoder *,
272 struct intel_crtc_state *pipe_config);272 struct intel_crtc_state *pipe_config);
273 /* Returns a mask of power domains that need to be referenced as part273 /*
274 * of the hardware state readout code. */274 * Acquires the power domains needed for an active encoder during
275 u64 (*get_power_domains)(struct intel_encoder *encoder,275 * hardware state readout.
276 struct intel_crtc_state *crtc_state);276 */
277 void (*get_power_domains)(struct intel_encoder *encoder,
278 struct intel_crtc_state *crtc_state);
277 /*279 /*
278 * Called during system suspend after all pending requests for the280 * Called during system suspend after all pending requests for the
279 * encoder are flushed (for example for DP AUX transactions) and281 * encoder are flushed (for example for DP AUX transactions) and
drivers/gpu/drm/i915/vlv_dsi.c+24−0
@@ -256,6 +256,28 @@ static void band_gap_reset(struct drm_i915_private *dev_priv) · 255 unmodified lines
256 mutex_unlock(&dev_priv->sb_lock);256 mutex_unlock(&dev_priv->sb_lock);
257}257}
258 258
259static int bdw_get_pipemisc_bpp(struct intel_crtc *crtc)
260{
261 struct drm_i915_private *dev_priv = to_i915(crtc->base.dev);
262 u32 tmp;
263
264 tmp = I915_READ(PIPEMISC(crtc->pipe));
265
266 switch (tmp & PIPEMISC_DITHER_BPC_MASK) {
267 case PIPEMISC_DITHER_6_BPC:
268 return 18;
269 case PIPEMISC_DITHER_8_BPC:
270 return 24;
271 case PIPEMISC_DITHER_10_BPC:
272 return 30;
273 case PIPEMISC_DITHER_12_BPC:
274 return 36;
275 default:
276 MISSING_CASE(tmp);
277 return 0;
278 }
279}
280
259static int intel_dsi_compute_config(struct intel_encoder *encoder,281static int intel_dsi_compute_config(struct intel_encoder *encoder,
260 struct intel_crtc_state *pipe_config,282 struct intel_crtc_state *pipe_config,
261 struct drm_connector_state *conn_state)283 struct drm_connector_state *conn_state)
@@ -1071,6 +1093,8 @@ static void bxt_dsi_get_pipe_config(struct intel_encoder *encoder, · 809 unmodified lines
1071 bpp = mipi_dsi_pixel_format_to_bpp(1093 bpp = mipi_dsi_pixel_format_to_bpp(
1072 pixel_format_from_register_bits(fmt));1094 pixel_format_from_register_bits(fmt));
1073 1095
1096 pipe_config->pipe_bpp = bdw_get_pipemisc_bpp(crtc);
1097
1074 /* Enable Frame time stamo based scanline reporting */1098 /* Enable Frame time stamo based scanline reporting */
1075 adjusted_mode->private_flags |=1099 adjusted_mode->private_flags |=
1076 I915_MODE_FLAG_GET_SCANLINE_FROM_TIMESTAMP;1100 I915_MODE_FLAG_GET_SCANLINE_FROM_TIMESTAMP;
drivers/gpu/drm/mediatek/mtk_dpi.c+3−5
@@ -662,13 +662,11 @@ static unsigned int mt8173_calculate_factor(int clock) · 661 unmodified lines
662static unsigned int mt2701_calculate_factor(int clock)662static unsigned int mt2701_calculate_factor(int clock)
663{663{
664 if (clock <= 64000)664 if (clock <= 64000)
665 return 16;
666 else if (clock <= 128000)
667 return 8;
668 else if (clock <= 256000)
669 return 4;665 return 4;
670 else666 else if (clock <= 128000)
671 return 2;667 return 2;
668 else
669 return 1;
672}670}
673 671
674static const struct mtk_dpi_conf mt8173_conf = {672static const struct mtk_dpi_conf mt8173_conf = {
drivers/gpu/drm/mediatek/mtk_drm_drv.c+7−0
@@ -15,6 +15,7 @@ · 14 unmodified lines
15#include <drm/drmP.h>15#include <drm/drmP.h>
16#include <drm/drm_atomic.h>16#include <drm/drm_atomic.h>
17#include <drm/drm_atomic_helper.h>17#include <drm/drm_atomic_helper.h>
18#include <drm/drm_fb_helper.h>
18#include <drm/drm_gem.h>19#include <drm/drm_gem.h>
19#include <drm/drm_gem_cma_helper.h>20#include <drm/drm_gem_cma_helper.h>
20#include <drm/drm_of.h>21#include <drm/drm_of.h>
@@ -341,6 +342,8 @@ static struct drm_driver mtk_drm_driver = { · 320 unmodified lines
341 .gem_prime_get_sg_table = mtk_gem_prime_get_sg_table,342 .gem_prime_get_sg_table = mtk_gem_prime_get_sg_table,
342 .gem_prime_import_sg_table = mtk_gem_prime_import_sg_table,343 .gem_prime_import_sg_table = mtk_gem_prime_import_sg_table,
343 .gem_prime_mmap = mtk_drm_gem_mmap_buf,344 .gem_prime_mmap = mtk_drm_gem_mmap_buf,
345 .gem_prime_vmap = mtk_drm_gem_prime_vmap,
346 .gem_prime_vunmap = mtk_drm_gem_prime_vunmap,
344 .fops = &mtk_drm_fops,347 .fops = &mtk_drm_fops,
345 348
346 .name = DRIVER_NAME,349 .name = DRIVER_NAME,
@@ -376,6 +379,10 @@ static int mtk_drm_bind(struct device *dev) · 29 unmodified lines
376 if (ret < 0)379 if (ret < 0)
377 goto err_deinit;380 goto err_deinit;
378 381
382 ret = drm_fbdev_generic_setup(drm, 32);
383 if (ret)
384 DRM_ERROR("Failed to initialize fbdev: %d\n", ret);
385
379 return 0;386 return 0;
380 387
381err_deinit:388err_deinit:
drivers/gpu/drm/mediatek/mtk_drm_gem.c+46−0
@@ -241,3 +241,49 @@ err_gem_free: · 240 unmodified lines
241 kfree(mtk_gem);241 kfree(mtk_gem);
242 return ERR_PTR(ret);242 return ERR_PTR(ret);
243}243}
244
245void *mtk_drm_gem_prime_vmap(struct drm_gem_object *obj)
246{
247 struct mtk_drm_gem_obj *mtk_gem = to_mtk_gem_obj(obj);
248 struct sg_table *sgt;
249 struct sg_page_iter iter;
250 unsigned int npages;
251 unsigned int i = 0;
252
253 if (mtk_gem->kvaddr)
254 return mtk_gem->kvaddr;
255
256 sgt = mtk_gem_prime_get_sg_table(obj);
257 if (IS_ERR(sgt))
258 return NULL;
259
260 npages = obj->size >> PAGE_SHIFT;
261 mtk_gem->pages = kcalloc(npages, sizeof(*mtk_gem->pages), GFP_KERNEL);
262 if (!mtk_gem->pages)
263 goto out;
264
265 for_each_sg_page(sgt->sgl, &iter, sgt->orig_nents, 0) {
266 mtk_gem->pages[i++] = sg_page_iter_page(&iter);
267 if (i > npages)
268 break;
269 }
270 mtk_gem->kvaddr = vmap(mtk_gem->pages, npages, VM_MAP,
271 pgprot_writecombine(PAGE_KERNEL));
272
273out:
274 kfree((void *)sgt);
275
276 return mtk_gem->kvaddr;
277}
278
279void mtk_drm_gem_prime_vunmap(struct drm_gem_object *obj, void *vaddr)
280{
281 struct mtk_drm_gem_obj *mtk_gem = to_mtk_gem_obj(obj);
282
283 if (!mtk_gem->pages)
284 return;
285
286 vunmap(vaddr);
287 mtk_gem->kvaddr = 0;
288 kfree((void *)mtk_gem->pages);
289}
drivers/gpu/drm/mediatek/mtk_drm_gem.h+3−0
@@ -37,6 +37,7 @@ struct mtk_drm_gem_obj { · 36 unmodified lines
37 dma_addr_t dma_addr;37 dma_addr_t dma_addr;
38 unsigned long dma_attrs;38 unsigned long dma_attrs;
39 struct sg_table *sg;39 struct sg_table *sg;
40 struct page **pages;
40};41};
41 42
42#define to_mtk_gem_obj(x) container_of(x, struct mtk_drm_gem_obj, base)43#define to_mtk_gem_obj(x) container_of(x, struct mtk_drm_gem_obj, base)
@@ -52,5 +53,7 @@ int mtk_drm_gem_mmap_buf(struct drm_gem_object *obj, · 9 unmodified lines
52struct sg_table *mtk_gem_prime_get_sg_table(struct drm_gem_object *obj);53struct sg_table *mtk_gem_prime_get_sg_table(struct drm_gem_object *obj);
53struct drm_gem_object *mtk_gem_prime_import_sg_table(struct drm_device *dev,54struct drm_gem_object *mtk_gem_prime_import_sg_table(struct drm_device *dev,
54 struct dma_buf_attachment *attach, struct sg_table *sg);55 struct dma_buf_attachment *attach, struct sg_table *sg);
56void *mtk_drm_gem_prime_vmap(struct drm_gem_object *obj);
57void mtk_drm_gem_prime_vunmap(struct drm_gem_object *obj, void *vaddr);
55 58
56#endif59#endif
drivers/gpu/drm/mediatek/mtk_hdmi.c+1−1
@@ -1480,7 +1480,6 @@ static int mtk_hdmi_dt_parse_pdata(struct mtk_hdmi *hdmi, · 1479 unmodified lines
1480 if (IS_ERR(regmap))1480 if (IS_ERR(regmap))
1481 ret = PTR_ERR(regmap);1481 ret = PTR_ERR(regmap);
1482 if (ret) {1482 if (ret) {
1483 ret = PTR_ERR(regmap);
1484 dev_err(dev,1483 dev_err(dev,
1485 "Failed to get system configuration registers: %d\n",1484 "Failed to get system configuration registers: %d\n",
1486 ret);1485 ret);
@@ -1516,6 +1515,7 @@ static int mtk_hdmi_dt_parse_pdata(struct mtk_hdmi *hdmi, · 29 unmodified lines
1516 of_node_put(remote);1515 of_node_put(remote);
1517 1516
1518 hdmi->ddc_adpt = of_find_i2c_adapter_by_node(i2c_np);1517 hdmi->ddc_adpt = of_find_i2c_adapter_by_node(i2c_np);
1518 of_node_put(i2c_np);
1519 if (!hdmi->ddc_adpt) {1519 if (!hdmi->ddc_adpt) {
1520 dev_err(dev, "Failed to get ddc i2c adapter by node\n");1520 dev_err(dev, "Failed to get ddc i2c adapter by node\n");
1521 return -EINVAL;1521 return -EINVAL;
drivers/gpu/drm/mediatek/mtk_hdmi_phy.c+5−30
@@ -15,28 +15,6 @@ static const struct phy_ops mtk_hdmi_phy_dev_ops = { · 14 unmodified lines
15 .owner = THIS_MODULE,15 .owner = THIS_MODULE,
16};16};
17 17
18long mtk_hdmi_pll_round_rate(struct clk_hw *hw, unsigned long rate,
19 unsigned long *parent_rate)
20{
21 struct mtk_hdmi_phy *hdmi_phy = to_mtk_hdmi_phy(hw);
22
23 hdmi_phy->pll_rate = rate;
24 if (rate <= 74250000)
25 *parent_rate = rate;
26 else
27 *parent_rate = rate / 2;
28
29 return rate;
30}
31
32unsigned long mtk_hdmi_pll_recalc_rate(struct clk_hw *hw,
33 unsigned long parent_rate)
34{
35 struct mtk_hdmi_phy *hdmi_phy = to_mtk_hdmi_phy(hw);
36
37 return hdmi_phy->pll_rate;
38}
39
40void mtk_hdmi_phy_clear_bits(struct mtk_hdmi_phy *hdmi_phy, u32 offset,18void mtk_hdmi_phy_clear_bits(struct mtk_hdmi_phy *hdmi_phy, u32 offset,
41 u32 bits)19 u32 bits)
42{20{
@@ -110,13 +88,11 @@ mtk_hdmi_phy_dev_get_ops(const struct mtk_hdmi_phy *hdmi_phy) · 67 unmodified lines
110 return NULL;88 return NULL;
111}89}
112 90
113static void mtk_hdmi_phy_clk_get_ops(struct mtk_hdmi_phy *hdmi_phy,91static void mtk_hdmi_phy_clk_get_data(struct mtk_hdmi_phy *hdmi_phy,
114 const struct clk_ops **ops)92 struct clk_init_data *clk_init)
115{93{
116 if (hdmi_phy && hdmi_phy->conf && hdmi_phy->conf->hdmi_phy_clk_ops)94 clk_init->flags = hdmi_phy->conf->flags;
117 *ops = hdmi_phy->conf->hdmi_phy_clk_ops;95 clk_init->ops = hdmi_phy->conf->hdmi_phy_clk_ops;
118 else
119 dev_err(hdmi_phy->dev, "Failed to get clk ops of phy\n");
120}96}
121 97
122static int mtk_hdmi_phy_probe(struct platform_device *pdev)98static int mtk_hdmi_phy_probe(struct platform_device *pdev)
@@ -129,7 +105,6 @@ static int mtk_hdmi_phy_probe(struct platform_device *pdev) · 6 unmodified lines
129 struct clk_init_data clk_init = {105 struct clk_init_data clk_init = {
130 .num_parents = 1,106 .num_parents = 1,
131 .parent_names = (const char * const *)&ref_clk_name,107 .parent_names = (const char * const *)&ref_clk_name,
132 .flags = CLK_SET_RATE_PARENT | CLK_SET_RATE_GATE,
133 };108 };
134 109
135 struct phy *phy;110 struct phy *phy;
@@ -167,7 +142,7 @@ static int mtk_hdmi_phy_probe(struct platform_device *pdev) · 31 unmodified lines
167 hdmi_phy->dev = dev;142 hdmi_phy->dev = dev;
168 hdmi_phy->conf =143 hdmi_phy->conf =
169 (struct mtk_hdmi_phy_conf *)of_device_get_match_data(dev);144 (struct mtk_hdmi_phy_conf *)of_device_get_match_data(dev);
170 mtk_hdmi_phy_clk_get_ops(hdmi_phy, &clk_init.ops);145 mtk_hdmi_phy_clk_get_data(hdmi_phy, &clk_init);
171 hdmi_phy->pll_hw.init = &clk_init;146 hdmi_phy->pll_hw.init = &clk_init;
172 hdmi_phy->pll = devm_clk_register(dev, &hdmi_phy->pll_hw);147 hdmi_phy->pll = devm_clk_register(dev, &hdmi_phy->pll_hw);
173 if (IS_ERR(hdmi_phy->pll)) {148 if (IS_ERR(hdmi_phy->pll)) {
drivers/gpu/drm/mediatek/mtk_hdmi_phy.h+1−4
@@ -21,6 +21,7 @@ struct mtk_hdmi_phy; · 20 unmodified lines
21 21
22struct mtk_hdmi_phy_conf {22struct mtk_hdmi_phy_conf {
23 bool tz_disabled;23 bool tz_disabled;
24 unsigned long flags;
24 const struct clk_ops *hdmi_phy_clk_ops;25 const struct clk_ops *hdmi_phy_clk_ops;
25 void (*hdmi_phy_enable_tmds)(struct mtk_hdmi_phy *hdmi_phy);26 void (*hdmi_phy_enable_tmds)(struct mtk_hdmi_phy *hdmi_phy);
26 void (*hdmi_phy_disable_tmds)(struct mtk_hdmi_phy *hdmi_phy);27 void (*hdmi_phy_disable_tmds)(struct mtk_hdmi_phy *hdmi_phy);
@@ -48,10 +49,6 @@ void mtk_hdmi_phy_set_bits(struct mtk_hdmi_phy *hdmi_phy, u32 offset, · 21 unmodified lines
48void mtk_hdmi_phy_mask(struct mtk_hdmi_phy *hdmi_phy, u32 offset,49void mtk_hdmi_phy_mask(struct mtk_hdmi_phy *hdmi_phy, u32 offset,
49 u32 val, u32 mask);50 u32 val, u32 mask);
50struct mtk_hdmi_phy *to_mtk_hdmi_phy(struct clk_hw *hw);51struct mtk_hdmi_phy *to_mtk_hdmi_phy(struct clk_hw *hw);
51long mtk_hdmi_pll_round_rate(struct clk_hw *hw, unsigned long rate,
52 unsigned long *parent_rate);
53unsigned long mtk_hdmi_pll_recalc_rate(struct clk_hw *hw,
54 unsigned long parent_rate);
55 52
56extern struct platform_driver mtk_hdmi_phy_driver;53extern struct platform_driver mtk_hdmi_phy_driver;
57extern struct mtk_hdmi_phy_conf mtk_hdmi_phy_8173_conf;54extern struct mtk_hdmi_phy_conf mtk_hdmi_phy_8173_conf;
drivers/gpu/drm/mediatek/mtk_mt2701_hdmi_phy.c+43−6
@@ -79,7 +79,6 @@ static int mtk_hdmi_pll_prepare(struct clk_hw *hw) · 78 unmodified lines
79 mtk_hdmi_phy_set_bits(hdmi_phy, HDMI_CON0, RG_HDMITX_EN_SLDO_MASK);79 mtk_hdmi_phy_set_bits(hdmi_phy, HDMI_CON0, RG_HDMITX_EN_SLDO_MASK);
80 usleep_range(80, 100);80 usleep_range(80, 100);
81 mtk_hdmi_phy_set_bits(hdmi_phy, HDMI_CON2, RG_HDMITX_MBIAS_LPF_EN);81 mtk_hdmi_phy_set_bits(hdmi_phy, HDMI_CON2, RG_HDMITX_MBIAS_LPF_EN);
82 mtk_hdmi_phy_set_bits(hdmi_phy, HDMI_CON2, RG_HDMITX_EN_TX_POSDIV);
83 mtk_hdmi_phy_set_bits(hdmi_phy, HDMI_CON0, RG_HDMITX_EN_SER_MASK);82 mtk_hdmi_phy_set_bits(hdmi_phy, HDMI_CON0, RG_HDMITX_EN_SER_MASK);
84 mtk_hdmi_phy_set_bits(hdmi_phy, HDMI_CON0, RG_HDMITX_EN_PRED_MASK);83 mtk_hdmi_phy_set_bits(hdmi_phy, HDMI_CON0, RG_HDMITX_EN_PRED_MASK);
85 mtk_hdmi_phy_set_bits(hdmi_phy, HDMI_CON0, RG_HDMITX_EN_DRV_MASK);84 mtk_hdmi_phy_set_bits(hdmi_phy, HDMI_CON0, RG_HDMITX_EN_DRV_MASK);
@@ -94,7 +93,6 @@ static void mtk_hdmi_pll_unprepare(struct clk_hw *hw) · 8 unmodified lines
94 mtk_hdmi_phy_clear_bits(hdmi_phy, HDMI_CON0, RG_HDMITX_EN_DRV_MASK);93 mtk_hdmi_phy_clear_bits(hdmi_phy, HDMI_CON0, RG_HDMITX_EN_DRV_MASK);
95 mtk_hdmi_phy_clear_bits(hdmi_phy, HDMI_CON0, RG_HDMITX_EN_PRED_MASK);94 mtk_hdmi_phy_clear_bits(hdmi_phy, HDMI_CON0, RG_HDMITX_EN_PRED_MASK);
96 mtk_hdmi_phy_clear_bits(hdmi_phy, HDMI_CON0, RG_HDMITX_EN_SER_MASK);95 mtk_hdmi_phy_clear_bits(hdmi_phy, HDMI_CON0, RG_HDMITX_EN_SER_MASK);
97 mtk_hdmi_phy_clear_bits(hdmi_phy, HDMI_CON2, RG_HDMITX_EN_TX_POSDIV);
98 mtk_hdmi_phy_clear_bits(hdmi_phy, HDMI_CON2, RG_HDMITX_MBIAS_LPF_EN);96 mtk_hdmi_phy_clear_bits(hdmi_phy, HDMI_CON2, RG_HDMITX_MBIAS_LPF_EN);
99 usleep_range(80, 100);97 usleep_range(80, 100);
100 mtk_hdmi_phy_clear_bits(hdmi_phy, HDMI_CON0, RG_HDMITX_EN_SLDO_MASK);98 mtk_hdmi_phy_clear_bits(hdmi_phy, HDMI_CON0, RG_HDMITX_EN_SLDO_MASK);
@@ -108,6 +106,12 @@ static void mtk_hdmi_pll_unprepare(struct clk_hw *hw) · 7 unmodified lines
108 usleep_range(80, 100);106 usleep_range(80, 100);
109}107}
110 108
109static long mtk_hdmi_pll_round_rate(struct clk_hw *hw, unsigned long rate,
110 unsigned long *parent_rate)
111{
112 return rate;
113}
114
111static int mtk_hdmi_pll_set_rate(struct clk_hw *hw, unsigned long rate,115static int mtk_hdmi_pll_set_rate(struct clk_hw *hw, unsigned long rate,
112 unsigned long parent_rate)116 unsigned long parent_rate)
113{117{
@@ -116,13 +120,14 @@ static int mtk_hdmi_pll_set_rate(struct clk_hw *hw, unsigned long rate, · 2 unmodified lines
116 120
117 if (rate <= 64000000)121 if (rate <= 64000000)
118 pos_div = 3;122 pos_div = 3;
119 else if (rate <= 12800000)123 else if (rate <= 128000000)
120 pos_div = 1;124 pos_div = 2;
121 else125 else
122 pos_div = 1;126 pos_div = 1;
123 127
124 mtk_hdmi_phy_set_bits(hdmi_phy, HDMI_CON6, RG_HTPLL_PREDIV_MASK);128 mtk_hdmi_phy_set_bits(hdmi_phy, HDMI_CON6, RG_HTPLL_PREDIV_MASK);
125 mtk_hdmi_phy_set_bits(hdmi_phy, HDMI_CON6, RG_HTPLL_POSDIV_MASK);129 mtk_hdmi_phy_set_bits(hdmi_phy, HDMI_CON6, RG_HTPLL_POSDIV_MASK);
130 mtk_hdmi_phy_set_bits(hdmi_phy, HDMI_CON2, RG_HDMITX_EN_TX_POSDIV);
126 mtk_hdmi_phy_mask(hdmi_phy, HDMI_CON6, (0x1 << RG_HTPLL_IC),131 mtk_hdmi_phy_mask(hdmi_phy, HDMI_CON6, (0x1 << RG_HTPLL_IC),
127 RG_HTPLL_IC_MASK);132 RG_HTPLL_IC_MASK);
128 mtk_hdmi_phy_mask(hdmi_phy, HDMI_CON6, (0x1 << RG_HTPLL_IR),133 mtk_hdmi_phy_mask(hdmi_phy, HDMI_CON6, (0x1 << RG_HTPLL_IR),
@@ -154,6 +159,39 @@ static int mtk_hdmi_pll_set_rate(struct clk_hw *hw, unsigned long rate, · 25 unmodified lines
154 return 0;159 return 0;
155}160}
156 161
162static unsigned long mtk_hdmi_pll_recalc_rate(struct clk_hw *hw,
163 unsigned long parent_rate)
164{
165 struct mtk_hdmi_phy *hdmi_phy = to_mtk_hdmi_phy(hw);
166 unsigned long out_rate, val;
167
168 val = (readl(hdmi_phy->regs + HDMI_CON6)
169 & RG_HTPLL_PREDIV_MASK) >> RG_HTPLL_PREDIV;
170 switch (val) {
171 case 0x00:
172 out_rate = parent_rate;
173 break;
174 case 0x01:
175 out_rate = parent_rate / 2;
176 break;
177 default:
178 out_rate = parent_rate / 4;
179 break;
180 }
181
182 val = (readl(hdmi_phy->regs + HDMI_CON6)
183 & RG_HTPLL_FBKDIV_MASK) >> RG_HTPLL_FBKDIV;
184 out_rate *= (val + 1) * 2;
185 val = (readl(hdmi_phy->regs + HDMI_CON2)
186 & RG_HDMITX_TX_POSDIV_MASK);
187 out_rate >>= (val >> RG_HDMITX_TX_POSDIV);
188
189 if (readl(hdmi_phy->regs + HDMI_CON2) & RG_HDMITX_EN_TX_POSDIV)
190 out_rate /= 5;
191
192 return out_rate;
193}
194
157static const struct clk_ops mtk_hdmi_phy_pll_ops = {195static const struct clk_ops mtk_hdmi_phy_pll_ops = {
158 .prepare = mtk_hdmi_pll_prepare,196 .prepare = mtk_hdmi_pll_prepare,
159 .unprepare = mtk_hdmi_pll_unprepare,197 .unprepare = mtk_hdmi_pll_unprepare,
@@ -174,7 +212,6 @@ static void mtk_hdmi_phy_enable_tmds(struct mtk_hdmi_phy *hdmi_phy) · 14 unmodified lines
174 mtk_hdmi_phy_set_bits(hdmi_phy, HDMI_CON0, RG_HDMITX_EN_SLDO_MASK);212 mtk_hdmi_phy_set_bits(hdmi_phy, HDMI_CON0, RG_HDMITX_EN_SLDO_MASK);
175 usleep_range(80, 100);213 usleep_range(80, 100);
176 mtk_hdmi_phy_set_bits(hdmi_phy, HDMI_CON2, RG_HDMITX_MBIAS_LPF_EN);214 mtk_hdmi_phy_set_bits(hdmi_phy, HDMI_CON2, RG_HDMITX_MBIAS_LPF_EN);
177 mtk_hdmi_phy_set_bits(hdmi_phy, HDMI_CON2, RG_HDMITX_EN_TX_POSDIV);
178 mtk_hdmi_phy_set_bits(hdmi_phy, HDMI_CON0, RG_HDMITX_EN_SER_MASK);215 mtk_hdmi_phy_set_bits(hdmi_phy, HDMI_CON0, RG_HDMITX_EN_SER_MASK);
179 mtk_hdmi_phy_set_bits(hdmi_phy, HDMI_CON0, RG_HDMITX_EN_PRED_MASK);216 mtk_hdmi_phy_set_bits(hdmi_phy, HDMI_CON0, RG_HDMITX_EN_PRED_MASK);
180 mtk_hdmi_phy_set_bits(hdmi_phy, HDMI_CON0, RG_HDMITX_EN_DRV_MASK);217 mtk_hdmi_phy_set_bits(hdmi_phy, HDMI_CON0, RG_HDMITX_EN_DRV_MASK);
@@ -186,7 +223,6 @@ static void mtk_hdmi_phy_disable_tmds(struct mtk_hdmi_phy *hdmi_phy) · 5 unmodified lines
186 mtk_hdmi_phy_clear_bits(hdmi_phy, HDMI_CON0, RG_HDMITX_EN_DRV_MASK);223 mtk_hdmi_phy_clear_bits(hdmi_phy, HDMI_CON0, RG_HDMITX_EN_DRV_MASK);
187 mtk_hdmi_phy_clear_bits(hdmi_phy, HDMI_CON0, RG_HDMITX_EN_PRED_MASK);224 mtk_hdmi_phy_clear_bits(hdmi_phy, HDMI_CON0, RG_HDMITX_EN_PRED_MASK);
188 mtk_hdmi_phy_clear_bits(hdmi_phy, HDMI_CON0, RG_HDMITX_EN_SER_MASK);225 mtk_hdmi_phy_clear_bits(hdmi_phy, HDMI_CON0, RG_HDMITX_EN_SER_MASK);
189 mtk_hdmi_phy_clear_bits(hdmi_phy, HDMI_CON2, RG_HDMITX_EN_TX_POSDIV);
190 mtk_hdmi_phy_clear_bits(hdmi_phy, HDMI_CON2, RG_HDMITX_MBIAS_LPF_EN);226 mtk_hdmi_phy_clear_bits(hdmi_phy, HDMI_CON2, RG_HDMITX_MBIAS_LPF_EN);
191 usleep_range(80, 100);227 usleep_range(80, 100);
192 mtk_hdmi_phy_clear_bits(hdmi_phy, HDMI_CON0, RG_HDMITX_EN_SLDO_MASK);228 mtk_hdmi_phy_clear_bits(hdmi_phy, HDMI_CON0, RG_HDMITX_EN_SLDO_MASK);
@@ -202,6 +238,7 @@ static void mtk_hdmi_phy_disable_tmds(struct mtk_hdmi_phy *hdmi_phy) · 9 unmodified lines
202 238
203struct mtk_hdmi_phy_conf mtk_hdmi_phy_2701_conf = {239struct mtk_hdmi_phy_conf mtk_hdmi_phy_2701_conf = {
204 .tz_disabled = true,240 .tz_disabled = true,
241 .flags = CLK_SET_RATE_GATE,
205 .hdmi_phy_clk_ops = &mtk_hdmi_phy_pll_ops,242 .hdmi_phy_clk_ops = &mtk_hdmi_phy_pll_ops,
206 .hdmi_phy_enable_tmds = mtk_hdmi_phy_enable_tmds,243 .hdmi_phy_enable_tmds = mtk_hdmi_phy_enable_tmds,
207 .hdmi_phy_disable_tmds = mtk_hdmi_phy_disable_tmds,244 .hdmi_phy_disable_tmds = mtk_hdmi_phy_disable_tmds,
drivers/gpu/drm/mediatek/mtk_mt8173_hdmi_phy.c+23−0
@@ -199,6 +199,20 @@ static void mtk_hdmi_pll_unprepare(struct clk_hw *hw) · 198 unmodified lines
199 usleep_range(100, 150);199 usleep_range(100, 150);
200}200}
201 201
202static long mtk_hdmi_pll_round_rate(struct clk_hw *hw, unsigned long rate,
203 unsigned long *parent_rate)
204{
205 struct mtk_hdmi_phy *hdmi_phy = to_mtk_hdmi_phy(hw);
206
207 hdmi_phy->pll_rate = rate;
208 if (rate <= 74250000)
209 *parent_rate = rate;
210 else
211 *parent_rate = rate / 2;
212
213 return rate;
214}
215
202static int mtk_hdmi_pll_set_rate(struct clk_hw *hw, unsigned long rate,216static int mtk_hdmi_pll_set_rate(struct clk_hw *hw, unsigned long rate,
203 unsigned long parent_rate)217 unsigned long parent_rate)
204{218{
@@ -285,6 +299,14 @@ static int mtk_hdmi_pll_set_rate(struct clk_hw *hw, unsigned long rate, · 80 unmodified lines
285 return 0;299 return 0;
286}300}
287 301
302static unsigned long mtk_hdmi_pll_recalc_rate(struct clk_hw *hw,
303 unsigned long parent_rate)
304{
305 struct mtk_hdmi_phy *hdmi_phy = to_mtk_hdmi_phy(hw);
306
307 return hdmi_phy->pll_rate;
308}
309
288static const struct clk_ops mtk_hdmi_phy_pll_ops = {310static const struct clk_ops mtk_hdmi_phy_pll_ops = {
289 .prepare = mtk_hdmi_pll_prepare,311 .prepare = mtk_hdmi_pll_prepare,
290 .unprepare = mtk_hdmi_pll_unprepare,312 .unprepare = mtk_hdmi_pll_unprepare,
@@ -309,6 +331,7 @@ static void mtk_hdmi_phy_disable_tmds(struct mtk_hdmi_phy *hdmi_phy) · 18 unmodified lines
309}331}
310 332
311struct mtk_hdmi_phy_conf mtk_hdmi_phy_8173_conf = {333struct mtk_hdmi_phy_conf mtk_hdmi_phy_8173_conf = {
334 .flags = CLK_SET_RATE_PARENT | CLK_SET_RATE_GATE,
312 .hdmi_phy_clk_ops = &mtk_hdmi_phy_pll_ops,335 .hdmi_phy_clk_ops = &mtk_hdmi_phy_pll_ops,
313 .hdmi_phy_enable_tmds = mtk_hdmi_phy_enable_tmds,336 .hdmi_phy_enable_tmds = mtk_hdmi_phy_enable_tmds,
314 .hdmi_phy_disable_tmds = mtk_hdmi_phy_disable_tmds,337 .hdmi_phy_disable_tmds = mtk_hdmi_phy_disable_tmds,
drivers/gpu/drm/omapdrm/dss/hdmi4_cec.c+19−7
@@ -175,6 +175,7 @@ static int hdmi_cec_adap_enable(struct cec_adapter *adap, bool enable) · 174 unmodified lines
175 REG_FLD_MOD(core->base, HDMI_CORE_SYS_INTR_UNMASK4, 0, 3, 3);175 REG_FLD_MOD(core->base, HDMI_CORE_SYS_INTR_UNMASK4, 0, 3, 3);
176 hdmi_wp_clear_irqenable(core->wp, HDMI_IRQ_CORE);176 hdmi_wp_clear_irqenable(core->wp, HDMI_IRQ_CORE);
177 hdmi_wp_set_irqstatus(core->wp, HDMI_IRQ_CORE);177 hdmi_wp_set_irqstatus(core->wp, HDMI_IRQ_CORE);
178 REG_FLD_MOD(core->wp->base, HDMI_WP_CLK, 0, 5, 0);
178 hdmi4_core_disable(core);179 hdmi4_core_disable(core);
179 return 0;180 return 0;
180 }181 }
@@ -182,16 +183,24 @@ static int hdmi_cec_adap_enable(struct cec_adapter *adap, bool enable) · 1 unmodified line
182 if (err)183 if (err)
183 return err;184 return err;
184 185
186 /*
187 * Initialize CEC clock divider: CEC needs 2MHz clock hence
188 * set the divider to 24 to get 48/24=2MHz clock
189 */
190 REG_FLD_MOD(core->wp->base, HDMI_WP_CLK, 0x18, 5, 0);
191
185 /* Clear TX FIFO */192 /* Clear TX FIFO */
186 if (!hdmi_cec_clear_tx_fifo(adap)) {193 if (!hdmi_cec_clear_tx_fifo(adap)) {
187 pr_err("cec-%s: could not clear TX FIFO\n", adap->name);194 pr_err("cec-%s: could not clear TX FIFO\n", adap->name);
188 return -EIO;195 err = -EIO;
196 goto err_disable_clk;
189 }197 }
190 198
191 /* Clear RX FIFO */199 /* Clear RX FIFO */
192 if (!hdmi_cec_clear_rx_fifo(adap)) {200 if (!hdmi_cec_clear_rx_fifo(adap)) {
193 pr_err("cec-%s: could not clear RX FIFO\n", adap->name);201 pr_err("cec-%s: could not clear RX FIFO\n", adap->name);
194 return -EIO;202 err = -EIO;
203 goto err_disable_clk;
195 }204 }
196 205
197 /* Clear CEC interrupts */206 /* Clear CEC interrupts */
@@ -236,6 +245,12 @@ static int hdmi_cec_adap_enable(struct cec_adapter *adap, bool enable) · 38 unmodified lines
236 hdmi_write_reg(core->base, HDMI_CEC_INT_STATUS_1, temp);245 hdmi_write_reg(core->base, HDMI_CEC_INT_STATUS_1, temp);
237 }246 }
238 return 0;247 return 0;
248
249err_disable_clk:
250 REG_FLD_MOD(core->wp->base, HDMI_WP_CLK, 0, 5, 0);
251 hdmi4_core_disable(core);
252
253 return err;
239}254}
240 255
241static int hdmi_cec_adap_log_addr(struct cec_adapter *adap, u8 log_addr)256static int hdmi_cec_adap_log_addr(struct cec_adapter *adap, u8 log_addr)
@@ -333,11 +348,8 @@ int hdmi4_cec_init(struct platform_device *pdev, struct hdmi_core_data *core, · 91 unmodified lines
333 return ret;348 return ret;
334 core->wp = wp;349 core->wp = wp;
335 350
336 /*351 /* Disable clock initially, hdmi_cec_adap_enable() manages it */
337 * Initialize CEC clock divider: CEC needs 2MHz clock hence352 REG_FLD_MOD(core->wp->base, HDMI_WP_CLK, 0, 5, 0);
338 * set the devider to 24 to get 48/24=2MHz clock
339 */
340 REG_FLD_MOD(core->wp->base, HDMI_WP_CLK, 0x18, 5, 0);
341 353
342 ret = cec_register_adapter(core->adap, &pdev->dev);354 ret = cec_register_adapter(core->adap, &pdev->dev);
343 if (ret < 0) {355 if (ret < 0) {
drivers/gpu/drm/omapdrm/dss/hdmi4_core.c+1−1
@@ -708,7 +708,7 @@ int hdmi4_audio_config(struct hdmi_core_data *core, struct hdmi_wp_data *wp, · 707 unmodified lines
708 else708 else
709 acore.i2s_cfg.justification = HDMI_AUDIO_JUSTIFY_RIGHT;709 acore.i2s_cfg.justification = HDMI_AUDIO_JUSTIFY_RIGHT;
710 /*710 /*
711 * The I2S input word length is twice the lenght given in the IEC-60958711 * The I2S input word length is twice the length given in the IEC-60958
712 * status word. If the word size is greater than712 * status word. If the word size is greater than
713 * 20 bits, increment by one.713 * 20 bits, increment by one.
714 */714 */
drivers/gpu/drm/sun4i/sun8i_dw_hdmi.c+7−2
@@ -48,8 +48,13 @@ static enum drm_mode_status · 47 unmodified lines
48sun8i_dw_hdmi_mode_valid_h6(struct drm_connector *connector,48sun8i_dw_hdmi_mode_valid_h6(struct drm_connector *connector,
49 const struct drm_display_mode *mode)49 const struct drm_display_mode *mode)
50{50{
51 /* This is max for HDMI 2.0b (4K@60Hz) */51 /*
52 if (mode->clock > 594000)52 * Controller support maximum of 594 MHz, which correlates to
53 * 4K@60Hz 4:4:4 or RGB. However, for frequencies greater than
54 * 340 MHz scrambling has to be enabled. Because scrambling is
55 * not yet implemented, just limit to 340 MHz for now.
56 */
57 if (mode->clock > 340000)
53 return MODE_CLOCK_HIGH;58 return MODE_CLOCK_HIGH;
54 59
55 return MODE_OK;60 return MODE_OK;
drivers/gpu/drm/sun4i/sun8i_tcon_top.c+3−2
@@ -227,7 +227,7 @@ static int sun8i_tcon_top_bind(struct device *dev, struct device *master, · 226 unmodified lines
227 227
228err_unregister_gates:228err_unregister_gates:
229 for (i = 0; i < CLK_NUM; i++)229 for (i = 0; i < CLK_NUM; i++)
230 if (clk_data->hws[i])230 if (!IS_ERR_OR_NULL(clk_data->hws[i]))
231 clk_hw_unregister_gate(clk_data->hws[i]);231 clk_hw_unregister_gate(clk_data->hws[i]);
232 clk_disable_unprepare(tcon_top->bus);232 clk_disable_unprepare(tcon_top->bus);
233err_assert_reset:233err_assert_reset:
@@ -245,7 +245,8 @@ static void sun8i_tcon_top_unbind(struct device *dev, struct device *master, · 11 unmodified lines
245 245
246 of_clk_del_provider(dev->of_node);246 of_clk_del_provider(dev->of_node);
247 for (i = 0; i < CLK_NUM; i++)247 for (i = 0; i < CLK_NUM; i++)
248 clk_hw_unregister_gate(clk_data->hws[i]);248 if (clk_data->hws[i])
249 clk_hw_unregister_gate(clk_data->hws[i]);
249 250
250 clk_disable_unprepare(tcon_top->bus);251 clk_disable_unprepare(tcon_top->bus);
251 reset_control_assert(tcon_top->rst);252 reset_control_assert(tcon_top->rst);
drivers/gpu/drm/tegra/hdmi.c+9−3
@@ -1260,9 +1260,15 @@ static void tegra_hdmi_encoder_enable(struct drm_encoder *encoder) · 1259 unmodified lines
1260 1260
1261 hdmi->dvi = !tegra_output_is_hdmi(output);1261 hdmi->dvi = !tegra_output_is_hdmi(output);
1262 if (!hdmi->dvi) {1262 if (!hdmi->dvi) {
1263 err = tegra_hdmi_setup_audio(hdmi);1263 /*
1264 if (err < 0)1264 * Make sure that the audio format has been configured before
1265 hdmi->dvi = true;1265 * enabling audio, otherwise we may try to divide by zero.
1266 */
1267 if (hdmi->format.sample_rate > 0) {
1268 err = tegra_hdmi_setup_audio(hdmi);
1269 if (err < 0)
1270 hdmi->dvi = true;
1271 }
1266 }1272 }
1267 1273
1268 if (hdmi->config->has_hda)1274 if (hdmi->config->has_hda)
drivers/gpu/drm/ttm/ttm_bo.c+3−1
@@ -876,8 +876,10 @@ static int ttm_bo_add_move_fence(struct ttm_buffer_object *bo, · 875 unmodified lines
876 reservation_object_add_shared_fence(bo->resv, fence);876 reservation_object_add_shared_fence(bo->resv, fence);
877 877
878 ret = reservation_object_reserve_shared(bo->resv, 1);878 ret = reservation_object_reserve_shared(bo->resv, 1);
879 if (unlikely(ret))879 if (unlikely(ret)) {
880 dma_fence_put(fence);
880 return ret;881 return ret;
882 }
881 883
882 dma_fence_put(bo->moving);884 dma_fence_put(bo->moving);
883 bo->moving = fence;885 bo->moving = fence;
drivers/gpu/drm/ttm/ttm_page_alloc.c+7−6
@@ -730,9 +730,10 @@ static void ttm_put_pages(struct page **pages, unsigned npages, int flags, · 729 unmodified lines
730 }730 }
731 731
732#ifdef CONFIG_TRANSPARENT_HUGEPAGE732#ifdef CONFIG_TRANSPARENT_HUGEPAGE
733 if (!(flags & TTM_PAGE_FLAG_DMA32)) {733 if (!(flags & TTM_PAGE_FLAG_DMA32) &&
734 for (j = 0; j < HPAGE_PMD_NR; ++j)734 (npages - i) >= HPAGE_PMD_NR) {
735 if (p++ != pages[i + j])735 for (j = 1; j < HPAGE_PMD_NR; ++j)
736 if (++p != pages[i + j])
736 break;737 break;
737 738
738 if (j == HPAGE_PMD_NR)739 if (j == HPAGE_PMD_NR)
@@ -759,15 +760,15 @@ static void ttm_put_pages(struct page **pages, unsigned npages, int flags, · 20 unmodified lines
759 unsigned max_size, n2free;760 unsigned max_size, n2free;
760 761
761 spin_lock_irqsave(&huge->lock, irq_flags);762 spin_lock_irqsave(&huge->lock, irq_flags);
762 while (i < npages) {763 while ((npages - i) >= HPAGE_PMD_NR) {
763 struct page *p = pages[i];764 struct page *p = pages[i];
764 unsigned j;765 unsigned j;
765 766
766 if (!p)767 if (!p)
767 break;768 break;
768 769
769 for (j = 0; j < HPAGE_PMD_NR; ++j)770 for (j = 1; j < HPAGE_PMD_NR; ++j)
770 if (p++ != pages[i + j])771 if (++p != pages[i + j])
771 break;772 break;
772 773
773 if (j != HPAGE_PMD_NR)774 if (j != HPAGE_PMD_NR)
drivers/gpu/drm/udl/udl_drv.c+1−0
@@ -52,6 +52,7 @@ static struct drm_driver driver = { · 51 unmodified lines
52 .driver_features = DRIVER_MODESET | DRIVER_GEM | DRIVER_PRIME,52 .driver_features = DRIVER_MODESET | DRIVER_GEM | DRIVER_PRIME,
53 .load = udl_driver_load,53 .load = udl_driver_load,
54 .unload = udl_driver_unload,54 .unload = udl_driver_unload,
55 .release = udl_driver_release,
55 56
56 /* gem hooks */57 /* gem hooks */
57 .gem_free_object_unlocked = udl_gem_free_object,58 .gem_free_object_unlocked = udl_gem_free_object,
drivers/gpu/drm/udl/udl_drv.h+1−0
@@ -104,6 +104,7 @@ void udl_urb_completion(struct urb *urb); · 103 unmodified lines
104 104
105int udl_driver_load(struct drm_device *dev, unsigned long flags);105int udl_driver_load(struct drm_device *dev, unsigned long flags);
106void udl_driver_unload(struct drm_device *dev);106void udl_driver_unload(struct drm_device *dev);
107void udl_driver_release(struct drm_device *dev);
107 108
108int udl_fbdev_init(struct drm_device *dev);109int udl_fbdev_init(struct drm_device *dev);
109void udl_fbdev_cleanup(struct drm_device *dev);110void udl_fbdev_cleanup(struct drm_device *dev);
drivers/gpu/drm/udl/udl_main.c+7−1
@@ -379,6 +379,12 @@ void udl_driver_unload(struct drm_device *dev) · 378 unmodified lines
379 udl_free_urb_list(dev);379 udl_free_urb_list(dev);
380 380
381 udl_fbdev_cleanup(dev);381 udl_fbdev_cleanup(dev);
382 udl_modeset_cleanup(dev);
383 kfree(udl);382 kfree(udl);
384}383}
384
385void udl_driver_release(struct drm_device *dev)
386{
387 udl_modeset_cleanup(dev);
388 drm_dev_fini(dev);
389 kfree(dev);
390}
drivers/gpu/host1x/hw/channel_hw.c+5−1
@@ -115,8 +115,12 @@ static inline void synchronize_syncpt_base(struct host1x_job *job) · 114 unmodified lines
115static void host1x_channel_set_streamid(struct host1x_channel *channel)115static void host1x_channel_set_streamid(struct host1x_channel *channel)
116{116{
117#if HOST1X_HW >= 6117#if HOST1X_HW >= 6
118 u32 sid = 0x7f;
119#ifdef CONFIG_IOMMU_API
118 struct iommu_fwspec *spec = dev_iommu_fwspec_get(channel->dev->parent);120 struct iommu_fwspec *spec = dev_iommu_fwspec_get(channel->dev->parent);
119 u32 sid = spec ? spec->ids[0] & 0xffff : 0x7f;121 if (spec)
122 sid = spec->ids[0] & 0xffff;
123#endif
120 124
121 host1x_ch_writel(channel, sid, HOST1X_CHANNEL_SMMU_STREAMID);125 host1x_ch_writel(channel, sid, HOST1X_CHANNEL_SMMU_STREAMID);
122#endif126#endif
drivers/hid/Kconfig+1−0
@@ -150,6 +150,7 @@ config HID_ASUS · 149 unmodified lines
150 tristate "Asus"150 tristate "Asus"
151 depends on LEDS_CLASS151 depends on LEDS_CLASS
152 depends on ASUS_WMI || ASUS_WMI=n152 depends on ASUS_WMI || ASUS_WMI=n
153 select POWER_SUPPLY
153 ---help---154 ---help---
154 Support for Asus notebook built-in keyboard and touchpad via i2c, and155 Support for Asus notebook built-in keyboard and touchpad via i2c, and
155 the Asus Republic of Gamers laptop keyboard special keys.156 the Asus Republic of Gamers laptop keyboard special keys.
drivers/hid/hid-core.c+3−3
@@ -1301,10 +1301,10 @@ static u32 __extract(u8 *report, unsigned offset, int n) · 1300 unmodified lines
1301u32 hid_field_extract(const struct hid_device *hid, u8 *report,1301u32 hid_field_extract(const struct hid_device *hid, u8 *report,
1302 unsigned offset, unsigned n)1302 unsigned offset, unsigned n)
1303{1303{
1304 if (n > 32) {1304 if (n > 256) {
1305 hid_warn(hid, "hid_field_extract() called with n (%d) > 32! (%s)\n",1305 hid_warn(hid, "hid_field_extract() called with n (%d) > 256! (%s)\n",
1306 n, current->comm);1306 n, current->comm);
1307 n = 32;1307 n = 256;
1308 }1308 }
1309 1309
1310 return __extract(report, offset, n);1310 return __extract(report, offset, n);
drivers/hid/hid-debug.c+5−0
@@ -1060,10 +1060,15 @@ static int hid_debug_rdesc_show(struct seq_file *f, void *p) · 1059 unmodified lines
1060 seq_printf(f, "\n\n");1060 seq_printf(f, "\n\n");
1061 1061
1062 /* dump parsed data and input mappings */1062 /* dump parsed data and input mappings */
1063 if (down_interruptible(&hdev->driver_input_lock))
1064 return 0;
1065
1063 hid_dump_device(hdev, f);1066 hid_dump_device(hdev, f);
1064 seq_printf(f, "\n");1067 seq_printf(f, "\n");
1065 hid_dump_input_mapping(hdev, f);1068 hid_dump_input_mapping(hdev, f);
1066 1069
1070 up(&hdev->driver_input_lock);
1071
1067 return 0;1072 return 0;
1068}1073}
1069 1074
drivers/hid/hid-ids.h+1−0
@@ -1083,6 +1083,7 @@ · 1082 unmodified lines
1083#define USB_DEVICE_ID_SYNAPTICS_HD 0x0ac31083#define USB_DEVICE_ID_SYNAPTICS_HD 0x0ac3
1084#define USB_DEVICE_ID_SYNAPTICS_QUAD_HD 0x1ac31084#define USB_DEVICE_ID_SYNAPTICS_QUAD_HD 0x1ac3
1085#define USB_DEVICE_ID_SYNAPTICS_TP_V103 0x57101085#define USB_DEVICE_ID_SYNAPTICS_TP_V103 0x5710
1086#define I2C_DEVICE_ID_SYNAPTICS_7E7E 0x7e7e
1086 1087
1087#define USB_VENDOR_ID_TEXAS_INSTRUMENTS 0x20471088#define USB_VENDOR_ID_TEXAS_INSTRUMENTS 0x2047
1088#define USB_DEVICE_ID_TEXAS_INSTRUMENTS_LENOVO_YOGA 0x08551089#define USB_DEVICE_ID_TEXAS_INSTRUMENTS_LENOVO_YOGA 0x0855
drivers/hid/hid-input.c+17−1
@@ -680,6 +680,14 @@ static void hidinput_configure_usage(struct hid_input *hidinput, struct hid_fiel · 679 unmodified lines
680 break;680 break;
681 }681 }
682 682
683 if ((usage->hid & 0xf0) == 0xb0) { /* SC - Display */
684 switch (usage->hid & 0xf) {
685 case 0x05: map_key_clear(KEY_SWITCHVIDEOMODE); break;
686 default: goto ignore;
687 }
688 break;
689 }
690
683 /*691 /*
684 * Some lazy vendors declare 255 usages for System Control,692 * Some lazy vendors declare 255 usages for System Control,
685 * leading to the creation of ABS_X|Y axis and too many others.693 * leading to the creation of ABS_X|Y axis and too many others.
@@ -902,7 +910,7 @@ static void hidinput_configure_usage(struct hid_input *hidinput, struct hid_fiel · 216 unmodified lines
902 case 0x06a: map_key_clear(KEY_GREEN); break;910 case 0x06a: map_key_clear(KEY_GREEN); break;
903 case 0x06b: map_key_clear(KEY_BLUE); break;911 case 0x06b: map_key_clear(KEY_BLUE); break;
904 case 0x06c: map_key_clear(KEY_YELLOW); break;912 case 0x06c: map_key_clear(KEY_YELLOW); break;
905 case 0x06d: map_key_clear(KEY_ZOOM); break;913 case 0x06d: map_key_clear(KEY_ASPECT_RATIO); break;
906 914
907 case 0x06f: map_key_clear(KEY_BRIGHTNESSUP); break;915 case 0x06f: map_key_clear(KEY_BRIGHTNESSUP); break;
908 case 0x070: map_key_clear(KEY_BRIGHTNESSDOWN); break;916 case 0x070: map_key_clear(KEY_BRIGHTNESSDOWN); break;
@@ -911,6 +919,10 @@ static void hidinput_configure_usage(struct hid_input *hidinput, struct hid_fiel · 2 unmodified lines
911 case 0x074: map_key_clear(KEY_BRIGHTNESS_MAX); break;919 case 0x074: map_key_clear(KEY_BRIGHTNESS_MAX); break;
912 case 0x075: map_key_clear(KEY_BRIGHTNESS_AUTO); break;920 case 0x075: map_key_clear(KEY_BRIGHTNESS_AUTO); break;
913 921
922 case 0x079: map_key_clear(KEY_KBDILLUMUP); break;
923 case 0x07a: map_key_clear(KEY_KBDILLUMDOWN); break;
924 case 0x07c: map_key_clear(KEY_KBDILLUMTOGGLE); break;
925
914 case 0x082: map_key_clear(KEY_VIDEO_NEXT); break;926 case 0x082: map_key_clear(KEY_VIDEO_NEXT); break;
915 case 0x083: map_key_clear(KEY_LAST); break;927 case 0x083: map_key_clear(KEY_LAST); break;
916 case 0x084: map_key_clear(KEY_ENTER); break;928 case 0x084: map_key_clear(KEY_ENTER); break;
@@ -998,6 +1010,7 @@ static void hidinput_configure_usage(struct hid_input *hidinput, struct hid_fiel · 81 unmodified lines
998 case 0x1b8: map_key_clear(KEY_VIDEO); break;1010 case 0x1b8: map_key_clear(KEY_VIDEO); break;
999 case 0x1bc: map_key_clear(KEY_MESSENGER); break;1011 case 0x1bc: map_key_clear(KEY_MESSENGER); break;
1000 case 0x1bd: map_key_clear(KEY_INFO); break;1012 case 0x1bd: map_key_clear(KEY_INFO); break;
1013 case 0x1cb: map_key_clear(KEY_ASSISTANT); break;
1001 case 0x201: map_key_clear(KEY_NEW); break;1014 case 0x201: map_key_clear(KEY_NEW); break;
1002 case 0x202: map_key_clear(KEY_OPEN); break;1015 case 0x202: map_key_clear(KEY_OPEN); break;
1003 case 0x203: map_key_clear(KEY_CLOSE); break;1016 case 0x203: map_key_clear(KEY_CLOSE); break;
@@ -1021,6 +1034,7 @@ static void hidinput_configure_usage(struct hid_input *hidinput, struct hid_fiel · 17 unmodified lines
1021 case 0x22d: map_key_clear(KEY_ZOOMIN); break;1034 case 0x22d: map_key_clear(KEY_ZOOMIN); break;
1022 case 0x22e: map_key_clear(KEY_ZOOMOUT); break;1035 case 0x22e: map_key_clear(KEY_ZOOMOUT); break;
1023 case 0x22f: map_key_clear(KEY_ZOOMRESET); break;1036 case 0x22f: map_key_clear(KEY_ZOOMRESET); break;
1037 case 0x232: map_key_clear(KEY_FULL_SCREEN); break;
1024 case 0x233: map_key_clear(KEY_SCROLLUP); break;1038 case 0x233: map_key_clear(KEY_SCROLLUP); break;
1025 case 0x234: map_key_clear(KEY_SCROLLDOWN); break;1039 case 0x234: map_key_clear(KEY_SCROLLDOWN); break;
1026 case 0x238: /* AC Pan */1040 case 0x238: /* AC Pan */
@@ -1044,6 +1058,8 @@ static void hidinput_configure_usage(struct hid_input *hidinput, struct hid_fiel · 17 unmodified lines
1044 case 0x2cb: map_key_clear(KEY_KBDINPUTASSIST_ACCEPT); break;1058 case 0x2cb: map_key_clear(KEY_KBDINPUTASSIST_ACCEPT); break;
1045 case 0x2cc: map_key_clear(KEY_KBDINPUTASSIST_CANCEL); break;1059 case 0x2cc: map_key_clear(KEY_KBDINPUTASSIST_CANCEL); break;
1046 1060
1061 case 0x29f: map_key_clear(KEY_SCALE); break;
1062
1047 default: map_key_clear(KEY_UNKNOWN);1063 default: map_key_clear(KEY_UNKNOWN);
1048 }1064 }
1049 break;1065 break;
drivers/hid/hid-logitech-hidpp.c+10−3
@@ -2111,6 +2111,13 @@ static int hidpp_ff_init(struct hidpp_device *hidpp, u8 feature_index) · 2110 unmodified lines
2111 kfree(data);2111 kfree(data);
2112 return -ENOMEM;2112 return -ENOMEM;
2113 }2113 }
2114 data->wq = create_singlethread_workqueue("hidpp-ff-sendqueue");
2115 if (!data->wq) {
2116 kfree(data->effect_ids);
2117 kfree(data);
2118 return -ENOMEM;
2119 }
2120
2114 data->hidpp = hidpp;2121 data->hidpp = hidpp;
2115 data->feature_index = feature_index;2122 data->feature_index = feature_index;
2116 data->version = version;2123 data->version = version;
@@ -2155,7 +2162,6 @@ static int hidpp_ff_init(struct hidpp_device *hidpp, u8 feature_index) · 38 unmodified lines
2155 /* ignore boost value at response.fap.params[2] */2162 /* ignore boost value at response.fap.params[2] */
2156 2163
2157 /* init the hardware command queue */2164 /* init the hardware command queue */
2158 data->wq = create_singlethread_workqueue("hidpp-ff-sendqueue");
2159 atomic_set(&data->workqueue_size, 0);2165 atomic_set(&data->workqueue_size, 0);
2160 2166
2161 /* initialize with zero autocenter to get wheel in usable state */2167 /* initialize with zero autocenter to get wheel in usable state */
@@ -2608,8 +2614,9 @@ static int m560_raw_event(struct hid_device *hdev, u8 *data, int size) · 446 unmodified lines
2608 input_report_rel(mydata->input, REL_Y, v);2614 input_report_rel(mydata->input, REL_Y, v);
2609 2615
2610 v = hid_snto32(data[6], 8);2616 v = hid_snto32(data[6], 8);
2611 hidpp_scroll_counter_handle_scroll(2617 if (v != 0)
2612 &hidpp->vertical_wheel_counter, v);2618 hidpp_scroll_counter_handle_scroll(
2619 &hidpp->vertical_wheel_counter, v);
2613 2620
2614 input_sync(mydata->input);2621 input_sync(mydata->input);
2615 }2622 }
drivers/hid/hid-quirks.c+7−4
@@ -715,7 +715,6 @@ static const struct hid_device_id hid_ignore_list[] = { · 714 unmodified lines
715 { HID_USB_DEVICE(USB_VENDOR_ID_DEALEXTREAME, USB_DEVICE_ID_DEALEXTREAME_RADIO_SI4701) },715 { HID_USB_DEVICE(USB_VENDOR_ID_DEALEXTREAME, USB_DEVICE_ID_DEALEXTREAME_RADIO_SI4701) },
716 { HID_USB_DEVICE(USB_VENDOR_ID_DELORME, USB_DEVICE_ID_DELORME_EARTHMATE) },716 { HID_USB_DEVICE(USB_VENDOR_ID_DELORME, USB_DEVICE_ID_DELORME_EARTHMATE) },
717 { HID_USB_DEVICE(USB_VENDOR_ID_DELORME, USB_DEVICE_ID_DELORME_EM_LT20) },717 { HID_USB_DEVICE(USB_VENDOR_ID_DELORME, USB_DEVICE_ID_DELORME_EM_LT20) },
718 { HID_I2C_DEVICE(USB_VENDOR_ID_ELAN, 0x0400) },
719 { HID_USB_DEVICE(USB_VENDOR_ID_ESSENTIAL_REALITY, USB_DEVICE_ID_ESSENTIAL_REALITY_P5) },718 { HID_USB_DEVICE(USB_VENDOR_ID_ESSENTIAL_REALITY, USB_DEVICE_ID_ESSENTIAL_REALITY_P5) },
720 { HID_USB_DEVICE(USB_VENDOR_ID_ETT, USB_DEVICE_ID_TC5UH) },719 { HID_USB_DEVICE(USB_VENDOR_ID_ETT, USB_DEVICE_ID_TC5UH) },
721 { HID_USB_DEVICE(USB_VENDOR_ID_ETT, USB_DEVICE_ID_TC4UM) },720 { HID_USB_DEVICE(USB_VENDOR_ID_ETT, USB_DEVICE_ID_TC4UM) },
@@ -855,7 +854,7 @@ static const struct hid_device_id hid_ignore_list[] = { · 133 unmodified lines
855 { }854 { }
856};855};
857 856
858/**857/*
859 * hid_mouse_ignore_list - mouse devices which should not be handled by the hid layer858 * hid_mouse_ignore_list - mouse devices which should not be handled by the hid layer
860 *859 *
861 * There are composite devices for which we want to ignore only a certain860 * There are composite devices for which we want to ignore only a certain
@@ -996,6 +995,10 @@ bool hid_ignore(struct hid_device *hdev) · 134 unmodified lines
996 if (hdev->product == 0x0401 &&995 if (hdev->product == 0x0401 &&
997 strncmp(hdev->name, "ELAN0800", 8) != 0)996 strncmp(hdev->name, "ELAN0800", 8) != 0)
998 return true;997 return true;
998 /* Same with product id 0x0400 */
999 if (hdev->product == 0x0400 &&
1000 strncmp(hdev->name, "QTEC0001", 8) != 0)
1001 return true;
999 break;1002 break;
1000 }1003 }
1001 1004
@@ -1042,7 +1045,7 @@ static struct hid_device_id *hid_exists_dquirk(const struct hid_device *hdev) · 40 unmodified lines
1042 }1045 }
1043 1046
1044 if (bl_entry != NULL)1047 if (bl_entry != NULL)
1045 dbg_hid("Found dynamic quirk 0x%lx for HID device 0x%hx:0x%hx\n",1048 dbg_hid("Found dynamic quirk 0x%lx for HID device 0x%04x:0x%04x\n",
1046 bl_entry->driver_data, bl_entry->vendor,1049 bl_entry->driver_data, bl_entry->vendor,
1047 bl_entry->product);1050 bl_entry->product);
1048 1051
@@ -1209,7 +1212,7 @@ static unsigned long hid_gets_squirk(const struct hid_device *hdev) · 160 unmodified lines
1209 quirks |= bl_entry->driver_data;1212 quirks |= bl_entry->driver_data;
1210 1213
1211 if (quirks)1214 if (quirks)
1212 dbg_hid("Found squirk 0x%lx for HID device 0x%hx:0x%hx\n",1215 dbg_hid("Found squirk 0x%lx for HID device 0x%04x:0x%04x\n",
1213 quirks, hdev->vendor, hdev->product);1216 quirks, hdev->vendor, hdev->product);
1214 return quirks;1217 return quirks;
1215}1218}
drivers/hid/hid-steam.c+19−7
@@ -499,6 +499,7 @@ static void steam_battery_unregister(struct steam_device *steam) · 498 unmodified lines
499static int steam_register(struct steam_device *steam)499static int steam_register(struct steam_device *steam)
500{500{
501 int ret;501 int ret;
502 bool client_opened;
502 503
503 /*504 /*
504 * This function can be called several times in a row with the505 * This function can be called several times in a row with the
@@ -511,9 +512,11 @@ static int steam_register(struct steam_device *steam) · 6 unmodified lines
511 * Unlikely, but getting the serial could fail, and it is not so512 * Unlikely, but getting the serial could fail, and it is not so
512 * important, so make up a serial number and go on.513 * important, so make up a serial number and go on.
513 */514 */
515 mutex_lock(&steam->mutex);
514 if (steam_get_serial(steam) < 0)516 if (steam_get_serial(steam) < 0)
515 strlcpy(steam->serial_no, "XXXXXXXXXX",517 strlcpy(steam->serial_no, "XXXXXXXXXX",
516 sizeof(steam->serial_no));518 sizeof(steam->serial_no));
519 mutex_unlock(&steam->mutex);
517 520
518 hid_info(steam->hdev, "Steam Controller '%s' connected",521 hid_info(steam->hdev, "Steam Controller '%s' connected",
519 steam->serial_no);522 steam->serial_no);
@@ -528,13 +531,15 @@ static int steam_register(struct steam_device *steam) · 8 unmodified lines
528 }531 }
529 532
530 mutex_lock(&steam->mutex);533 mutex_lock(&steam->mutex);
531 if (!steam->client_opened) {534 client_opened = steam->client_opened;
535 if (!client_opened)
532 steam_set_lizard_mode(steam, lizard_mode);536 steam_set_lizard_mode(steam, lizard_mode);
537 mutex_unlock(&steam->mutex);
538
539 if (!client_opened)
533 ret = steam_input_register(steam);540 ret = steam_input_register(steam);
534 } else {541 else
535 ret = 0;542 ret = 0;
536 }
537 mutex_unlock(&steam->mutex);
538 543
539 return ret;544 return ret;
540}545}
@@ -630,14 +635,21 @@ static void steam_client_ll_close(struct hid_device *hdev) · 89 unmodified lines
630{635{
631 struct steam_device *steam = hdev->driver_data;636 struct steam_device *steam = hdev->driver_data;
632 637
638 unsigned long flags;
639 bool connected;
640
641 spin_lock_irqsave(&steam->lock, flags);
642 connected = steam->connected;
643 spin_unlock_irqrestore(&steam->lock, flags);
644
633 mutex_lock(&steam->mutex);645 mutex_lock(&steam->mutex);
634 steam->client_opened = false;646 steam->client_opened = false;
647 if (connected)
648 steam_set_lizard_mode(steam, lizard_mode);
635 mutex_unlock(&steam->mutex);649 mutex_unlock(&steam->mutex);
636 650
637 if (steam->connected) {651 if (connected)
638 steam_set_lizard_mode(steam, lizard_mode);
639 steam_input_register(steam);652 steam_input_register(steam);
640 }
641}653}
642 654
643static int steam_client_ll_raw_request(struct hid_device *hdev,655static int steam_client_ll_raw_request(struct hid_device *hdev,
drivers/hid/hid-uclogic-params.c+0−4
@@ -735,10 +735,6 @@ static int uclogic_params_huion_init(struct uclogic_params *params, · 734 unmodified lines
735 goto cleanup;735 goto cleanup;
736 }736 }
737 rc = usb_string(udev, 201, ver_ptr, ver_len);737 rc = usb_string(udev, 201, ver_ptr, ver_len);
738 if (ver_ptr == NULL) {
739 rc = -ENOMEM;
740 goto cleanup;
741 }
742 if (rc == -EPIPE) {738 if (rc == -EPIPE) {
743 *ver_ptr = '\0';739 *ver_ptr = '\0';
744 } else if (rc < 0) {740 } else if (rc < 0) {
drivers/hid/i2c-hid/i2c-hid-core.c+2−0
@@ -184,6 +184,8 @@ static const struct i2c_hid_quirks { · 183 unmodified lines
184 I2C_HID_QUIRK_NO_RUNTIME_PM },184 I2C_HID_QUIRK_NO_RUNTIME_PM },
185 { USB_VENDOR_ID_ELAN, HID_ANY_ID,185 { USB_VENDOR_ID_ELAN, HID_ANY_ID,
186 I2C_HID_QUIRK_BOGUS_IRQ },186 I2C_HID_QUIRK_BOGUS_IRQ },
187 { USB_VENDOR_ID_SYNAPTICS, I2C_DEVICE_ID_SYNAPTICS_7E7E,
188 I2C_HID_QUIRK_NO_RUNTIME_PM },
187 { 0, 0 }189 { 0, 0 }
188};190};
189 191
drivers/hwmon/Kconfig+1−0
@@ -1759,6 +1759,7 @@ config SENSORS_VT8231 · 1758 unmodified lines
1759config SENSORS_W83773G1759config SENSORS_W83773G
1760 tristate "Nuvoton W83773G"1760 tristate "Nuvoton W83773G"
1761 depends on I2C1761 depends on I2C
1762 select REGMAP_I2C
1762 help1763 help
1763 If you say yes here you get support for the Nuvoton W83773G hardware1764 If you say yes here you get support for the Nuvoton W83773G hardware
1764 monitoring chip.1765 monitoring chip.
drivers/hwmon/ntc_thermistor.c+1−1
@@ -640,7 +640,7 @@ static const struct hwmon_channel_info ntc_chip = { · 639 unmodified lines
640};640};
641 641
642static const u32 ntc_temp_config[] = {642static const u32 ntc_temp_config[] = {
643 HWMON_T_INPUT, HWMON_T_TYPE,643 HWMON_T_INPUT | HWMON_T_TYPE,
644 0644 0
645};645};
646 646
drivers/hwmon/occ/common.c+4−2
@@ -890,6 +890,8 @@ static int occ_setup_sensor_attrs(struct occ *occ) · 889 unmodified lines
890 s++;890 s++;
891 }891 }
892 }892 }
893
894 s = (sensors->power.num_sensors * 4) + 1;
893 } else {895 } else {
894 for (i = 0; i < sensors->power.num_sensors; ++i) {896 for (i = 0; i < sensors->power.num_sensors; ++i) {
895 s = i + 1;897 s = i + 1;
@@ -918,11 +920,11 @@ static int occ_setup_sensor_attrs(struct occ *occ) · 22 unmodified lines
918 show_power, NULL, 3, i);920 show_power, NULL, 3, i);
919 attr++;921 attr++;
920 }922 }
921 }
922 923
923 if (sensors->caps.num_sensors >= 1) {
924 s = sensors->power.num_sensors + 1;924 s = sensors->power.num_sensors + 1;
925 }
925 926
927 if (sensors->caps.num_sensors >= 1) {
926 snprintf(attr->name, sizeof(attr->name), "power%d_label", s);928 snprintf(attr->name, sizeof(attr->name), "power%d_label", s);
927 attr->sensor = OCC_INIT_ATTR(attr->name, 0444, show_caps, NULL,929 attr->sensor = OCC_INIT_ATTR(attr->name, 0444, show_caps, NULL,
928 0, 0);930 0, 0);
drivers/i2c/busses/i2c-imx.c+3−1
@@ -1169,11 +1169,13 @@ static int i2c_imx_probe(struct platform_device *pdev) · 1168 unmodified lines
1169 /* Init DMA config if supported */1169 /* Init DMA config if supported */
1170 ret = i2c_imx_dma_request(i2c_imx, phy_addr);1170 ret = i2c_imx_dma_request(i2c_imx, phy_addr);
1171 if (ret < 0)1171 if (ret < 0)
1172 goto clk_notifier_unregister;1172 goto del_adapter;
1173 1173
1174 dev_info(&i2c_imx->adapter.dev, "IMX I2C adapter registered\n");1174 dev_info(&i2c_imx->adapter.dev, "IMX I2C adapter registered\n");
1175 return 0; /* Return OK */1175 return 0; /* Return OK */
1176 1176
1177del_adapter:
1178 i2c_del_adapter(&i2c_imx->adapter);
1177clk_notifier_unregister:1179clk_notifier_unregister:
1178 clk_notifier_unregister(i2c_imx->clk, &i2c_imx->clk_change_nb);1180 clk_notifier_unregister(i2c_imx->clk, &i2c_imx->clk_change_nb);
1179rpm_disable:1181rpm_disable:
drivers/i3c/master.c+2−3
@@ -1980,7 +1980,6 @@ of_i3c_master_add_i3c_boardinfo(struct i3c_master_controller *master, · 1979 unmodified lines
1980{1980{
1981 struct i3c_dev_boardinfo *boardinfo;1981 struct i3c_dev_boardinfo *boardinfo;
1982 struct device *dev = &master->dev;1982 struct device *dev = &master->dev;
1983 struct i3c_device_info info = { };
1984 enum i3c_addr_slot_status addrstatus;1983 enum i3c_addr_slot_status addrstatus;
1985 u32 init_dyn_addr = 0;1984 u32 init_dyn_addr = 0;
1986 1985
@@ -2012,8 +2011,8 @@ of_i3c_master_add_i3c_boardinfo(struct i3c_master_controller *master, · 25 unmodified lines
2012 2011
2013 boardinfo->pid = ((u64)reg[1] << 32) | reg[2];2012 boardinfo->pid = ((u64)reg[1] << 32) | reg[2];
2014 2013
2015 if ((info.pid & GENMASK_ULL(63, 48)) ||2014 if ((boardinfo->pid & GENMASK_ULL(63, 48)) ||
2016 I3C_PID_RND_LOWER_32BITS(info.pid))2015 I3C_PID_RND_LOWER_32BITS(boardinfo->pid))
2017 return -EINVAL;2016 return -EINVAL;
2018 2017
2019 boardinfo->init_dyn_addr = init_dyn_addr;2018 boardinfo->init_dyn_addr = init_dyn_addr;
drivers/i3c/master/dw-i3c-master.c+1−1
@@ -300,7 +300,7 @@ to_dw_i3c_master(struct i3c_master_controller *master) · 299 unmodified lines
300 300
301static void dw_i3c_master_disable(struct dw_i3c_master *master)301static void dw_i3c_master_disable(struct dw_i3c_master *master)
302{302{
303 writel(readl(master->regs + DEVICE_CTRL) & DEV_CTRL_ENABLE,303 writel(readl(master->regs + DEVICE_CTRL) & ~DEV_CTRL_ENABLE,
304 master->regs + DEVICE_CTRL);304 master->regs + DEVICE_CTRL);
305}305}
306 306
drivers/iio/accel/kxcjk-1013.c+2−0
@@ -1437,6 +1437,8 @@ static int kxcjk1013_resume(struct device *dev) · 1436 unmodified lines
1437 1437
1438 mutex_lock(&data->mutex);1438 mutex_lock(&data->mutex);
1439 ret = kxcjk1013_set_mode(data, OPERATION);1439 ret = kxcjk1013_set_mode(data, OPERATION);
1440 if (ret == 0)
1441 ret = kxcjk1013_set_range(data, data->range);
1440 mutex_unlock(&data->mutex);1442 mutex_unlock(&data->mutex);
1441 1443
1442 return ret;1444 return ret;
drivers/iio/adc/ad_sigma_delta.c+1−0
@@ -121,6 +121,7 @@ static int ad_sd_read_reg_raw(struct ad_sigma_delta *sigma_delta, · 120 unmodified lines
121 if (sigma_delta->info->has_registers) {121 if (sigma_delta->info->has_registers) {
122 data[0] = reg << sigma_delta->info->addr_shift;122 data[0] = reg << sigma_delta->info->addr_shift;
123 data[0] |= sigma_delta->info->read_mask;123 data[0] |= sigma_delta->info->read_mask;
124 data[0] |= sigma_delta->comm;
124 spi_message_add_tail(&t[0], &m);125 spi_message_add_tail(&t[0], &m);
125 }126 }
126 spi_message_add_tail(&t[1], &m);127 spi_message_add_tail(&t[1], &m);
drivers/iio/adc/at91_adc.c+17−11
@@ -704,23 +704,29 @@ static int at91_adc_read_raw(struct iio_dev *idev, · 703 unmodified lines
704 ret = wait_event_interruptible_timeout(st->wq_data_avail,704 ret = wait_event_interruptible_timeout(st->wq_data_avail,
705 st->done,705 st->done,
706 msecs_to_jiffies(1000));706 msecs_to_jiffies(1000));
707 if (ret == 0)
708 ret = -ETIMEDOUT;
709 if (ret < 0) {
710 mutex_unlock(&st->lock);
711 return ret;
712 }
713
714 *val = st->last_value;
715 707
708 /* Disable interrupts, regardless if adc conversion was
709 * successful or not
710 */
716 at91_adc_writel(st, AT91_ADC_CHDR,711 at91_adc_writel(st, AT91_ADC_CHDR,
717 AT91_ADC_CH(chan->channel));712 AT91_ADC_CH(chan->channel));
718 at91_adc_writel(st, AT91_ADC_IDR, BIT(chan->channel));713 at91_adc_writel(st, AT91_ADC_IDR, BIT(chan->channel));
719 714
720 st->last_value = 0;715 if (ret > 0) {
721 st->done = false;716 /* a valid conversion took place */
717 *val = st->last_value;
718 st->last_value = 0;
719 st->done = false;
720 ret = IIO_VAL_INT;
721 } else if (ret == 0) {
722 /* conversion timeout */
723 dev_err(&idev->dev, "ADC Channel %d timeout.\n",
724 chan->channel);
725 ret = -ETIMEDOUT;
726 }
727
722 mutex_unlock(&st->lock);728 mutex_unlock(&st->lock);
723 return IIO_VAL_INT;729 return ret;
724 730
725 case IIO_CHAN_INFO_SCALE:731 case IIO_CHAN_INFO_SCALE:
726 *val = st->vref_mv;732 *val = st->vref_mv;
drivers/iio/adc/xilinx-xadc-core.c+2−1
@@ -1292,6 +1292,7 @@ static int xadc_probe(struct platform_device *pdev) · 1291 unmodified lines
1292 1292
1293err_free_irq:1293err_free_irq:
1294 free_irq(xadc->irq, indio_dev);1294 free_irq(xadc->irq, indio_dev);
1295 cancel_delayed_work_sync(&xadc->zynq_unmask_work);
1295err_clk_disable_unprepare:1296err_clk_disable_unprepare:
1296 clk_disable_unprepare(xadc->clk);1297 clk_disable_unprepare(xadc->clk);
1297err_free_samplerate_trigger:1298err_free_samplerate_trigger:
@@ -1321,8 +1322,8 @@ static int xadc_remove(struct platform_device *pdev) · 23 unmodified lines
1321 iio_triggered_buffer_cleanup(indio_dev);1322 iio_triggered_buffer_cleanup(indio_dev);
1322 }1323 }
1323 free_irq(xadc->irq, indio_dev);1324 free_irq(xadc->irq, indio_dev);
1325 cancel_delayed_work_sync(&xadc->zynq_unmask_work);
1324 clk_disable_unprepare(xadc->clk);1326 clk_disable_unprepare(xadc->clk);
1325 cancel_delayed_work(&xadc->zynq_unmask_work);
1326 kfree(xadc->data);1327 kfree(xadc->data);
1327 kfree(indio_dev->channels);1328 kfree(indio_dev->channels);
1328 1329
drivers/iio/chemical/Kconfig+14−0
@@ -64,6 +64,7 @@ config IAQCORE · 63 unmodified lines
64config PMS700364config PMS7003
65 tristate "Plantower PMS7003 particulate matter sensor"65 tristate "Plantower PMS7003 particulate matter sensor"
66 depends on SERIAL_DEV_BUS66 depends on SERIAL_DEV_BUS
67 select IIO_TRIGGERED_BUFFER
67 help68 help
68 Say Y here to build support for the Plantower PMS7003 particulate69 Say Y here to build support for the Plantower PMS7003 particulate
69 matter sensor.70 matter sensor.
@@ -71,6 +72,19 @@ config PMS7003 · 1 unmodified line
71 To compile this driver as a module, choose M here: the module will72 To compile this driver as a module, choose M here: the module will
72 be called pms7003.73 be called pms7003.
73 74
75config SENSIRION_SGP30
76 tristate "Sensirion SGPxx gas sensors"
77 depends on I2C
78 select CRC8
79 help
80 Say Y here to build I2C interface support for the following
81 Sensirion SGP gas sensors:
82 * SGP30 gas sensor
83 * SGPC3 low power gas sensor
84
85 To compile this driver as module, choose M here: the
86 module will be called sgp30.
87
74config SPS3088config SPS30
75 tristate "SPS30 particulate matter sensor"89 tristate "SPS30 particulate matter sensor"
76 depends on I2C90 depends on I2C
drivers/iio/chemical/bme680.h+2−4
@@ -2,11 +2,9 @@ · 1 unmodified line
2#ifndef BME680_H_2#ifndef BME680_H_
3#define BME680_H_3#define BME680_H_
4 4
5#define BME680_REG_CHIP_I2C_ID 0xD05#define BME680_REG_CHIP_ID 0xD0
6#define BME680_REG_CHIP_SPI_ID 0x50
7#define BME680_CHIP_ID_VAL 0x616#define BME680_CHIP_ID_VAL 0x61
8#define BME680_REG_SOFT_RESET_I2C 0xE07#define BME680_REG_SOFT_RESET 0xE0
9#define BME680_REG_SOFT_RESET_SPI 0x60
10#define BME680_CMD_SOFTRESET 0xB68#define BME680_CMD_SOFTRESET 0xB6
11#define BME680_REG_STATUS 0x739#define BME680_REG_STATUS 0x73
12#define BME680_SPI_MEM_PAGE_BIT BIT(4)10#define BME680_SPI_MEM_PAGE_BIT BIT(4)
drivers/iio/chemical/bme680_core.c+45−9
@@ -63,9 +63,23 @@ struct bme680_data { · 62 unmodified lines
63 s32 t_fine;63 s32 t_fine;
64};64};
65 65
66static const struct regmap_range bme680_volatile_ranges[] = {
67 regmap_reg_range(BME680_REG_MEAS_STAT_0, BME680_REG_GAS_R_LSB),
68 regmap_reg_range(BME680_REG_STATUS, BME680_REG_STATUS),
69 regmap_reg_range(BME680_T2_LSB_REG, BME680_GH3_REG),
70};
71
72static const struct regmap_access_table bme680_volatile_table = {
73 .yes_ranges = bme680_volatile_ranges,
74 .n_yes_ranges = ARRAY_SIZE(bme680_volatile_ranges),
75};
76
66const struct regmap_config bme680_regmap_config = {77const struct regmap_config bme680_regmap_config = {
67 .reg_bits = 8,78 .reg_bits = 8,
68 .val_bits = 8,79 .val_bits = 8,
80 .max_register = 0xef,
81 .volatile_table = &bme680_volatile_table,
82 .cache_type = REGCACHE_RBTREE,
69};83};
70EXPORT_SYMBOL(bme680_regmap_config);84EXPORT_SYMBOL(bme680_regmap_config);
71 85
@@ -316,6 +330,10 @@ static s16 bme680_compensate_temp(struct bme680_data *data, · 244 unmodified lines
316 s64 var1, var2, var3;330 s64 var1, var2, var3;
317 s16 calc_temp;331 s16 calc_temp;
318 332
333 /* If the calibration is invalid, attempt to reload it */
334 if (!calib->par_t2)
335 bme680_read_calib(data, calib);
336
319 var1 = (adc_temp >> 3) - (calib->par_t1 << 1);337 var1 = (adc_temp >> 3) - (calib->par_t1 << 1);
320 var2 = (var1 * calib->par_t2) >> 11;338 var2 = (var1 * calib->par_t2) >> 11;
321 var3 = ((var1 >> 1) * (var1 >> 1)) >> 12;339 var3 = ((var1 >> 1) * (var1 >> 1)) >> 12;
@@ -583,8 +601,7 @@ static int bme680_gas_config(struct bme680_data *data) · 261 unmodified lines
583 return ret;601 return ret;
584}602}
585 603
586static int bme680_read_temp(struct bme680_data *data,604static int bme680_read_temp(struct bme680_data *data, int *val)
587 int *val, int *val2)
588{605{
589 struct device *dev = regmap_get_device(data->regmap);606 struct device *dev = regmap_get_device(data->regmap);
590 int ret;607 int ret;
@@ -617,10 +634,9 @@ static int bme680_read_temp(struct bme680_data *data, · 26 unmodified lines
617 * compensate_press/compensate_humid to get compensated634 * compensate_press/compensate_humid to get compensated
618 * pressure/humidity readings.635 * pressure/humidity readings.
619 */636 */
620 if (val && val2) {637 if (val) {
621 *val = comp_temp;638 *val = comp_temp * 10; /* Centidegrees to millidegrees */
622 *val2 = 100;639 return IIO_VAL_INT;
623 return IIO_VAL_FRACTIONAL;
624 }640 }
625 641
626 return ret;642 return ret;
@@ -635,7 +651,7 @@ static int bme680_read_press(struct bme680_data *data, · 8 unmodified lines
635 s32 adc_press;651 s32 adc_press;
636 652
637 /* Read and compensate temperature to get a reading of t_fine */653 /* Read and compensate temperature to get a reading of t_fine */
638 ret = bme680_read_temp(data, NULL, NULL);654 ret = bme680_read_temp(data, NULL);
639 if (ret < 0)655 if (ret < 0)
640 return ret;656 return ret;
641 657
@@ -668,7 +684,7 @@ static int bme680_read_humid(struct bme680_data *data, · 26 unmodified lines
668 u32 comp_humidity;684 u32 comp_humidity;
669 685
670 /* Read and compensate temperature to get a reading of t_fine */686 /* Read and compensate temperature to get a reading of t_fine */
671 ret = bme680_read_temp(data, NULL, NULL);687 ret = bme680_read_temp(data, NULL);
672 if (ret < 0)688 if (ret < 0)
673 return ret;689 return ret;
674 690
@@ -761,7 +777,7 @@ static int bme680_read_raw(struct iio_dev *indio_dev, · 86 unmodified lines
761 case IIO_CHAN_INFO_PROCESSED:777 case IIO_CHAN_INFO_PROCESSED:
762 switch (chan->type) {778 switch (chan->type) {
763 case IIO_TEMP:779 case IIO_TEMP:
764 return bme680_read_temp(data, val, val2);780 return bme680_read_temp(data, val);
765 case IIO_PRESSURE:781 case IIO_PRESSURE:
766 return bme680_read_press(data, val, val2);782 return bme680_read_press(data, val, val2);
767 case IIO_HUMIDITYRELATIVE:783 case IIO_HUMIDITYRELATIVE:
@@ -867,8 +883,28 @@ int bme680_core_probe(struct device *dev, struct regmap *regmap, · 99 unmodified lines
867{883{
868 struct iio_dev *indio_dev;884 struct iio_dev *indio_dev;
869 struct bme680_data *data;885 struct bme680_data *data;
886 unsigned int val;
870 int ret;887 int ret;
871 888
889 ret = regmap_write(regmap, BME680_REG_SOFT_RESET,
890 BME680_CMD_SOFTRESET);
891 if (ret < 0) {
892 dev_err(dev, "Failed to reset chip\n");
893 return ret;
894 }
895
896 ret = regmap_read(regmap, BME680_REG_CHIP_ID, &val);
897 if (ret < 0) {
898 dev_err(dev, "Error reading chip ID\n");
899 return ret;
900 }
901
902 if (val != BME680_CHIP_ID_VAL) {
903 dev_err(dev, "Wrong chip ID, got %x expected %x\n",
904 val, BME680_CHIP_ID_VAL);
905 return -ENODEV;
906 }
907
872 indio_dev = devm_iio_device_alloc(dev, sizeof(*data));908 indio_dev = devm_iio_device_alloc(dev, sizeof(*data));
873 if (!indio_dev)909 if (!indio_dev)
874 return -ENOMEM;910 return -ENOMEM;
drivers/iio/chemical/bme680_i2c.c+0−21
@@ -23,8 +23,6 @@ static int bme680_i2c_probe(struct i2c_client *client, · 22 unmodified lines
23{23{
24 struct regmap *regmap;24 struct regmap *regmap;
25 const char *name = NULL;25 const char *name = NULL;
26 unsigned int val;
27 int ret;
28 26
29 regmap = devm_regmap_init_i2c(client, &bme680_regmap_config);27 regmap = devm_regmap_init_i2c(client, &bme680_regmap_config);
30 if (IS_ERR(regmap)) {28 if (IS_ERR(regmap)) {
@@ -33,25 +31,6 @@ static int bme680_i2c_probe(struct i2c_client *client, · 2 unmodified lines
33 return PTR_ERR(regmap);31 return PTR_ERR(regmap);
34 }32 }
35 33
36 ret = regmap_write(regmap, BME680_REG_SOFT_RESET_I2C,
37 BME680_CMD_SOFTRESET);
38 if (ret < 0) {
39 dev_err(&client->dev, "Failed to reset chip\n");
40 return ret;
41 }
42
43 ret = regmap_read(regmap, BME680_REG_CHIP_I2C_ID, &val);
44 if (ret < 0) {
45 dev_err(&client->dev, "Error reading I2C chip ID\n");
46 return ret;
47 }
48
49 if (val != BME680_CHIP_ID_VAL) {
50 dev_err(&client->dev, "Wrong chip ID, got %x expected %x\n",
51 val, BME680_CHIP_ID_VAL);
52 return -ENODEV;
53 }
54
55 if (id)34 if (id)
56 name = id->name;35 name = id->name;
57 36
drivers/iio/chemical/bme680_spi.c+78−37
@@ -12,28 +12,93 @@ · 11 unmodified lines
12 12
13#include "bme680.h"13#include "bme680.h"
14 14
15struct bme680_spi_bus_context {
16 struct spi_device *spi;
17 u8 current_page;
18};
19
20/*
21 * In SPI mode there are only 7 address bits, a "page" register determines
22 * which part of the 8-bit range is active. This function looks at the address
23 * and writes the page selection bit if needed
24 */
25static int bme680_regmap_spi_select_page(
26 struct bme680_spi_bus_context *ctx, u8 reg)
27{
28 struct spi_device *spi = ctx->spi;
29 int ret;
30 u8 buf[2];
31 u8 page = (reg & 0x80) ? 0 : 1; /* Page "1" is low range */
32
33 if (page == ctx->current_page)
34 return 0;
35
36 /*
37 * Data sheet claims we're only allowed to change bit 4, so we must do
38 * a read-modify-write on each and every page select
39 */
40 buf[0] = BME680_REG_STATUS;
41 ret = spi_write_then_read(spi, buf, 1, buf + 1, 1);
42 if (ret < 0) {
43 dev_err(&spi->dev, "failed to set page %u\n", page);
44 return ret;
45 }
46
47 buf[0] = BME680_REG_STATUS;
48 if (page)
49 buf[1] |= BME680_SPI_MEM_PAGE_BIT;
50 else
51 buf[1] &= ~BME680_SPI_MEM_PAGE_BIT;
52
53 ret = spi_write(spi, buf, 2);
54 if (ret < 0) {
55 dev_err(&spi->dev, "failed to set page %u\n", page);
56 return ret;
57 }
58
59 ctx->current_page = page;
60
61 return 0;
62}
63
15static int bme680_regmap_spi_write(void *context, const void *data,64static int bme680_regmap_spi_write(void *context, const void *data,
16 size_t count)65 size_t count)
17{66{
18 struct spi_device *spi = context;67 struct bme680_spi_bus_context *ctx = context;
68 struct spi_device *spi = ctx->spi;
69 int ret;
19 u8 buf[2];70 u8 buf[2];
20 71
21 memcpy(buf, data, 2);72 memcpy(buf, data, 2);
73
74 ret = bme680_regmap_spi_select_page(ctx, buf[0]);
75 if (ret)
76 return ret;
77
22 /*78 /*
23 * The SPI register address (= full register address without bit 7)79 * The SPI register address (= full register address without bit 7)
24 * and the write command (bit7 = RW = '0')80 * and the write command (bit7 = RW = '0')
25 */81 */
26 buf[0] &= ~0x80;82 buf[0] &= ~0x80;
27 83
28 return spi_write_then_read(spi, buf, 2, NULL, 0);84 return spi_write(spi, buf, 2);
29}85}
30 86
31static int bme680_regmap_spi_read(void *context, const void *reg,87static int bme680_regmap_spi_read(void *context, const void *reg,
32 size_t reg_size, void *val, size_t val_size)88 size_t reg_size, void *val, size_t val_size)
33{89{
34 struct spi_device *spi = context;90 struct bme680_spi_bus_context *ctx = context;
91 struct spi_device *spi = ctx->spi;
92 int ret;
93 u8 addr = *(const u8 *)reg;
94
95 ret = bme680_regmap_spi_select_page(ctx, addr);
96 if (ret)
97 return ret;
35 98
36 return spi_write_then_read(spi, reg, reg_size, val, val_size);99 addr |= 0x80; /* bit7 = RW = '1' */
100
101 return spi_write_then_read(spi, &addr, 1, val, val_size);
37}102}
38 103
39static struct regmap_bus bme680_regmap_bus = {104static struct regmap_bus bme680_regmap_bus = {
@@ -46,8 +111,8 @@ static struct regmap_bus bme680_regmap_bus = { · 6 unmodified lines
46static int bme680_spi_probe(struct spi_device *spi)111static int bme680_spi_probe(struct spi_device *spi)
47{112{
48 const struct spi_device_id *id = spi_get_device_id(spi);113 const struct spi_device_id *id = spi_get_device_id(spi);
114 struct bme680_spi_bus_context *bus_context;
49 struct regmap *regmap;115 struct regmap *regmap;
50 unsigned int val;
51 int ret;116 int ret;
52 117
53 spi->bits_per_word = 8;118 spi->bits_per_word = 8;
@@ -57,45 +122,21 @@ static int bme680_spi_probe(struct spi_device *spi) · 3 unmodified lines
57 return ret;122 return ret;
58 }123 }
59 124
125 bus_context = devm_kzalloc(&spi->dev, sizeof(*bus_context), GFP_KERNEL);
126 if (!bus_context)
127 return -ENOMEM;
128
129 bus_context->spi = spi;
130 bus_context->current_page = 0xff; /* Undefined on warm boot */
131
60 regmap = devm_regmap_init(&spi->dev, &bme680_regmap_bus,132 regmap = devm_regmap_init(&spi->dev, &bme680_regmap_bus,
61 &spi->dev, &bme680_regmap_config);133 bus_context, &bme680_regmap_config);
62 if (IS_ERR(regmap)) {134 if (IS_ERR(regmap)) {
63 dev_err(&spi->dev, "Failed to register spi regmap %d\n",135 dev_err(&spi->dev, "Failed to register spi regmap %d\n",
64 (int)PTR_ERR(regmap));136 (int)PTR_ERR(regmap));
65 return PTR_ERR(regmap);137 return PTR_ERR(regmap);
66 }138 }
67 139
68 ret = regmap_write(regmap, BME680_REG_SOFT_RESET_SPI,
69 BME680_CMD_SOFTRESET);
70 if (ret < 0) {
71 dev_err(&spi->dev, "Failed to reset chip\n");
72 return ret;
73 }
74
75 /* after power-on reset, Page 0(0x80-0xFF) of spi_mem_page is active */
76 ret = regmap_read(regmap, BME680_REG_CHIP_SPI_ID, &val);
77 if (ret < 0) {
78 dev_err(&spi->dev, "Error reading SPI chip ID\n");
79 return ret;
80 }
81
82 if (val != BME680_CHIP_ID_VAL) {
83 dev_err(&spi->dev, "Wrong chip ID, got %x expected %x\n",
84 val, BME680_CHIP_ID_VAL);
85 return -ENODEV;
86 }
87 /*
88 * select Page 1 of spi_mem_page to enable access to
89 * to registers from address 0x00 to 0x7F.
90 */
91 ret = regmap_write_bits(regmap, BME680_REG_STATUS,
92 BME680_SPI_MEM_PAGE_BIT,
93 BME680_SPI_MEM_PAGE_1_VAL);
94 if (ret < 0) {
95 dev_err(&spi->dev, "failed to set page 1 of spi_mem_page\n");
96 return ret;
97 }
98
99 return bme680_core_probe(&spi->dev, regmap, id->name);140 return bme680_core_probe(&spi->dev, regmap, id->name);
100}141}
101 142
drivers/iio/common/cros_ec_sensors/cros_ec_sensors.c+4−3
@@ -103,9 +103,10 @@ static int cros_ec_sensors_read(struct iio_dev *indio_dev, · 102 unmodified lines
103 * Do not use IIO_DEGREE_TO_RAD to avoid precision103 * Do not use IIO_DEGREE_TO_RAD to avoid precision
104 * loss. Round to the nearest integer.104 * loss. Round to the nearest integer.
105 */105 */
106 *val = div_s64(val64 * 314159 + 9000000ULL, 1000);106 *val = 0;
107 *val2 = 18000 << (CROS_EC_SENSOR_BITS - 1);107 *val2 = div_s64(val64 * 3141592653ULL,
108 ret = IIO_VAL_FRACTIONAL;108 180 << (CROS_EC_SENSOR_BITS - 1));
109 ret = IIO_VAL_INT_PLUS_NANO;
109 break;110 break;
110 case MOTIONSENSE_TYPE_MAG:111 case MOTIONSENSE_TYPE_MAG:
111 /*112 /*
drivers/iio/dac/mcp4725.c+1−0
@@ -92,6 +92,7 @@ static ssize_t mcp4725_store_eeprom(struct device *dev, · 91 unmodified lines
92 92
93 inoutbuf[0] = 0x60; /* write EEPROM */93 inoutbuf[0] = 0x60; /* write EEPROM */
94 inoutbuf[0] |= data->ref_mode << 3;94 inoutbuf[0] |= data->ref_mode << 3;
95 inoutbuf[0] |= data->powerdown ? ((data->powerdown_mode + 1) << 1) : 0;
95 inoutbuf[1] = data->dac_value >> 4;96 inoutbuf[1] = data->dac_value >> 4;
96 inoutbuf[2] = (data->dac_value & 0xf) << 4;97 inoutbuf[2] = (data->dac_value & 0xf) << 4;
97 98
drivers/iio/gyro/bmg160_core.c+3−3
@@ -582,11 +582,10 @@ static int bmg160_read_raw(struct iio_dev *indio_dev, · 581 unmodified lines
582 case IIO_CHAN_INFO_LOW_PASS_FILTER_3DB_FREQUENCY:582 case IIO_CHAN_INFO_LOW_PASS_FILTER_3DB_FREQUENCY:
583 return bmg160_get_filter(data, val);583 return bmg160_get_filter(data, val);
584 case IIO_CHAN_INFO_SCALE:584 case IIO_CHAN_INFO_SCALE:
585 *val = 0;
586 switch (chan->type) {585 switch (chan->type) {
587 case IIO_TEMP:586 case IIO_TEMP:
588 *val2 = 500000;587 *val = 500;
589 return IIO_VAL_INT_PLUS_MICRO;588 return IIO_VAL_INT;
590 case IIO_ANGL_VEL:589 case IIO_ANGL_VEL:
591 {590 {
592 int i;591 int i;
@@ -594,6 +593,7 @@ static int bmg160_read_raw(struct iio_dev *indio_dev, · 1 unmodified line
594 for (i = 0; i < ARRAY_SIZE(bmg160_scale_table); ++i) {593 for (i = 0; i < ARRAY_SIZE(bmg160_scale_table); ++i) {
595 if (bmg160_scale_table[i].dps_range ==594 if (bmg160_scale_table[i].dps_range ==
596 data->dps_range) {595 data->dps_range) {
596 *val = 0;
597 *val2 = bmg160_scale_table[i].scale;597 *val2 = bmg160_scale_table[i].scale;
598 return IIO_VAL_INT_PLUS_MICRO;598 return IIO_VAL_INT_PLUS_MICRO;
599 }599 }
drivers/iio/gyro/mpu3050-core.c+5−3
@@ -29,7 +29,8 @@ · 28 unmodified lines
29 29
30#include "mpu3050.h"30#include "mpu3050.h"
31 31
32#define MPU3050_CHIP_ID 0x6932#define MPU3050_CHIP_ID 0x68
33#define MPU3050_CHIP_ID_MASK 0x7E
33 34
34/*35/*
35 * Register map: anything suffixed *_H is a big-endian high byte and always36 * Register map: anything suffixed *_H is a big-endian high byte and always
@@ -1176,8 +1177,9 @@ int mpu3050_common_probe(struct device *dev, · 1140 unmodified lines
1176 goto err_power_down;1177 goto err_power_down;
1177 }1178 }
1178 1179
1179 if (val != MPU3050_CHIP_ID) {1180 if ((val & MPU3050_CHIP_ID_MASK) != MPU3050_CHIP_ID) {
1180 dev_err(dev, "unsupported chip id %02x\n", (u8)val);1181 dev_err(dev, "unsupported chip id %02x\n",
1182 (u8)(val & MPU3050_CHIP_ID_MASK));
1181 ret = -ENODEV;1183 ret = -ENODEV;
1182 goto err_power_down;1184 goto err_power_down;
1183 }1185 }
drivers/iio/industrialio-buffer.c+2−3
@@ -320,9 +320,8 @@ static int iio_scan_mask_set(struct iio_dev *indio_dev, · 319 unmodified lines
320 const unsigned long *mask;320 const unsigned long *mask;
321 unsigned long *trialmask;321 unsigned long *trialmask;
322 322
323 trialmask = kmalloc_array(BITS_TO_LONGS(indio_dev->masklength),323 trialmask = kcalloc(BITS_TO_LONGS(indio_dev->masklength),
324 sizeof(*trialmask),324 sizeof(*trialmask), GFP_KERNEL);
325 GFP_KERNEL);
326 if (trialmask == NULL)325 if (trialmask == NULL)
327 return -ENOMEM;326 return -ENOMEM;
328 if (!indio_dev->masklength) {327 if (!indio_dev->masklength) {
drivers/iio/industrialio-core.c+2−2
@@ -1743,10 +1743,10 @@ EXPORT_SYMBOL(__iio_device_register); · 1742 unmodified lines
1743 **/1743 **/
1744void iio_device_unregister(struct iio_dev *indio_dev)1744void iio_device_unregister(struct iio_dev *indio_dev)
1745{1745{
1746 mutex_lock(&indio_dev->info_exist_lock);
1747
1748 cdev_device_del(&indio_dev->chrdev, &indio_dev->dev);1746 cdev_device_del(&indio_dev->chrdev, &indio_dev->dev);
1749 1747
1748 mutex_lock(&indio_dev->info_exist_lock);
1749
1750 iio_device_unregister_debugfs(indio_dev);1750 iio_device_unregister_debugfs(indio_dev);
1751 1751
1752 iio_disable_all_buffers(indio_dev);1752 iio_disable_all_buffers(indio_dev);
drivers/infiniband/core/uverbs_main.c+3−0
@@ -993,6 +993,8 @@ void uverbs_user_mmap_disassociate(struct ib_uverbs_file *ufile) · 992 unmodified lines
993 * will only be one mm, so no big deal.993 * will only be one mm, so no big deal.
994 */994 */
995 down_write(&mm->mmap_sem);995 down_write(&mm->mmap_sem);
996 if (!mmget_still_valid(mm))
997 goto skip_mm;
996 mutex_lock(&ufile->umap_lock);998 mutex_lock(&ufile->umap_lock);
997 list_for_each_entry_safe (priv, next_priv, &ufile->umaps,999 list_for_each_entry_safe (priv, next_priv, &ufile->umaps,
998 list) {1000 list) {
@@ -1007,6 +1009,7 @@ void uverbs_user_mmap_disassociate(struct ib_uverbs_file *ufile) · 8 unmodified lines
1007 vma->vm_flags &= ~(VM_SHARED | VM_MAYSHARE);1009 vma->vm_flags &= ~(VM_SHARED | VM_MAYSHARE);
1008 }1010 }
1009 mutex_unlock(&ufile->umap_lock);1011 mutex_unlock(&ufile->umap_lock);
1012 skip_mm:
1010 up_write(&mm->mmap_sem);1013 up_write(&mm->mmap_sem);
1011 mmput(mm);1014 mmput(mm);
1012 }1015 }
drivers/infiniband/hw/hfi1/chip.c+19−7
@@ -13232,7 +13232,7 @@ static int set_up_context_variables(struct hfi1_devdata *dd) · 13231 unmodified lines
13232 int total_contexts;13232 int total_contexts;
13233 int ret;13233 int ret;
13234 unsigned ngroups;13234 unsigned ngroups;
13235 int qos_rmt_count;13235 int rmt_count;
13236 int user_rmt_reduced;13236 int user_rmt_reduced;
13237 u32 n_usr_ctxts;13237 u32 n_usr_ctxts;
13238 u32 send_contexts = chip_send_contexts(dd);13238 u32 send_contexts = chip_send_contexts(dd);
@@ -13294,10 +13294,20 @@ static int set_up_context_variables(struct hfi1_devdata *dd) · 55 unmodified lines
13294 n_usr_ctxts = rcv_contexts - total_contexts;13294 n_usr_ctxts = rcv_contexts - total_contexts;
13295 }13295 }
13296 13296
13297 /* each user context requires an entry in the RMT */13297 /*
13298 qos_rmt_count = qos_rmt_entries(dd, NULL, NULL);13298 * The RMT entries are currently allocated as shown below:
13299 if (qos_rmt_count + n_usr_ctxts > NUM_MAP_ENTRIES) {13299 * 1. QOS (0 to 128 entries);
13300 user_rmt_reduced = NUM_MAP_ENTRIES - qos_rmt_count;13300 * 2. FECN for PSM (num_user_contexts + num_vnic_contexts);
13301 * 3. VNIC (num_vnic_contexts).
13302 * It should be noted that PSM FECN oversubscribe num_vnic_contexts
13303 * entries of RMT because both VNIC and PSM could allocate any receive
13304 * context between dd->first_dyn_alloc_text and dd->num_rcv_contexts,
13305 * and PSM FECN must reserve an RMT entry for each possible PSM receive
13306 * context.
13307 */
13308 rmt_count = qos_rmt_entries(dd, NULL, NULL) + (num_vnic_contexts * 2);
13309 if (rmt_count + n_usr_ctxts > NUM_MAP_ENTRIES) {
13310 user_rmt_reduced = NUM_MAP_ENTRIES - rmt_count;
13301 dd_dev_err(dd,13311 dd_dev_err(dd,
13302 "RMT size is reducing the number of user receive contexts from %u to %d\n",13312 "RMT size is reducing the number of user receive contexts from %u to %d\n",
13303 n_usr_ctxts,13313 n_usr_ctxts,
@@ -14285,9 +14295,11 @@ static void init_user_fecn_handling(struct hfi1_devdata *dd, · 981 unmodified lines
14285 u64 reg;14295 u64 reg;
14286 int i, idx, regoff, regidx;14296 int i, idx, regoff, regidx;
14287 u8 offset;14297 u8 offset;
14298 u32 total_cnt;
14288 14299
14289 /* there needs to be enough room in the map table */14300 /* there needs to be enough room in the map table */
14290 if (rmt->used + dd->num_user_contexts >= NUM_MAP_ENTRIES) {14301 total_cnt = dd->num_rcv_contexts - dd->first_dyn_alloc_ctxt;
14302 if (rmt->used + total_cnt >= NUM_MAP_ENTRIES) {
14291 dd_dev_err(dd, "User FECN handling disabled - too many user contexts allocated\n");14303 dd_dev_err(dd, "User FECN handling disabled - too many user contexts allocated\n");
14292 return;14304 return;
14293 }14305 }
@@ -14341,7 +14353,7 @@ static void init_user_fecn_handling(struct hfi1_devdata *dd, · 47 unmodified lines
14341 /* add rule 1 */14353 /* add rule 1 */
14342 add_rsm_rule(dd, RSM_INS_FECN, &rrd);14354 add_rsm_rule(dd, RSM_INS_FECN, &rrd);
14343 14355
14344 rmt->used += dd->num_user_contexts;14356 rmt->used += total_cnt;
14345}14357}
14346 14358
14347/* Initialize RSM for VNIC */14359/* Initialize RSM for VNIC */
drivers/infiniband/hw/hfi1/qp.c+3−1
@@ -898,7 +898,9 @@ void notify_error_qp(struct rvt_qp *qp) · 897 unmodified lines
898 if (!list_empty(&priv->s_iowait.list) &&898 if (!list_empty(&priv->s_iowait.list) &&
899 !(qp->s_flags & RVT_S_BUSY) &&899 !(qp->s_flags & RVT_S_BUSY) &&
900 !(priv->s_flags & RVT_S_BUSY)) {900 !(priv->s_flags & RVT_S_BUSY)) {
901 qp->s_flags &= ~RVT_S_ANY_WAIT_IO;901 qp->s_flags &= ~HFI1_S_ANY_WAIT_IO;
902 iowait_clear_flag(&priv->s_iowait, IOWAIT_PENDING_IB);
903 iowait_clear_flag(&priv->s_iowait, IOWAIT_PENDING_TID);
902 list_del_init(&priv->s_iowait.list);904 list_del_init(&priv->s_iowait.list);
903 priv->s_iowait.lock = NULL;905 priv->s_iowait.lock = NULL;
904 rvt_put_qp(qp);906 rvt_put_qp(qp);
drivers/infiniband/hw/hfi1/rc.c+2−2
@@ -3088,7 +3088,7 @@ send_last: · 3087 unmodified lines
3088 update_ack_queue(qp, next);3088 update_ack_queue(qp, next);
3089 }3089 }
3090 e = &qp->s_ack_queue[qp->r_head_ack_queue];3090 e = &qp->s_ack_queue[qp->r_head_ack_queue];
3091 if (e->opcode == OP(RDMA_READ_REQUEST) && e->rdma_sge.mr) {3091 if (e->rdma_sge.mr) {
3092 rvt_put_mr(e->rdma_sge.mr);3092 rvt_put_mr(e->rdma_sge.mr);
3093 e->rdma_sge.mr = NULL;3093 e->rdma_sge.mr = NULL;
3094 }3094 }
@@ -3166,7 +3166,7 @@ send_last: · 71 unmodified lines
3166 update_ack_queue(qp, next);3166 update_ack_queue(qp, next);
3167 }3167 }
3168 e = &qp->s_ack_queue[qp->r_head_ack_queue];3168 e = &qp->s_ack_queue[qp->r_head_ack_queue];
3169 if (e->opcode == OP(RDMA_READ_REQUEST) && e->rdma_sge.mr) {3169 if (e->rdma_sge.mr) {
3170 rvt_put_mr(e->rdma_sge.mr);3170 rvt_put_mr(e->rdma_sge.mr);
3171 e->rdma_sge.mr = NULL;3171 e->rdma_sge.mr = NULL;
3172 }3172 }
drivers/infiniband/hw/hfi1/tid_rdma.c+8−23
@@ -5017,24 +5017,14 @@ int hfi1_make_tid_rdma_pkt(struct rvt_qp *qp, struct hfi1_pkt_state *ps) · 5016 unmodified lines
5017 make_tid_rdma_ack(qp, ohdr, ps))5017 make_tid_rdma_ack(qp, ohdr, ps))
5018 return 1;5018 return 1;
5019 5019
5020 if (!(ib_rvt_state_ops[qp->state] & RVT_PROCESS_SEND_OK)) {5020 /*
5021 if (!(ib_rvt_state_ops[qp->state] & RVT_FLUSH_SEND))5021 * Bail out if we can't send data.
5022 goto bail;5022 * Be reminded that this check must been done after the call to
5023 /* We are in the error state, flush the work request. */5023 * make_tid_rdma_ack() because the responding QP could be in
5024 if (qp->s_last == READ_ONCE(qp->s_head))5024 * RTR state where it can send TID RDMA ACK, not TID RDMA WRITE DATA.
5025 goto bail;5025 */
5026 /* If DMAs are in progress, we can't flush immediately. */5026 if (!(ib_rvt_state_ops[qp->state] & RVT_PROCESS_SEND_OK))
5027 if (iowait_sdma_pending(&priv->s_iowait)) {5027 goto bail;
5028 qp->s_flags |= RVT_S_WAIT_DMA;
5029 goto bail;
5030 }
5031 clear_ahg(qp);
5032 wqe = rvt_get_swqe_ptr(qp, qp->s_last);
5033 hfi1_trdma_send_complete(qp, wqe, qp->s_last != qp->s_acked ?
5034 IB_WC_SUCCESS : IB_WC_WR_FLUSH_ERR);
5035 /* will get called again */
5036 goto done_free_tx;
5037 }
5038 5028
5039 if (priv->s_flags & RVT_S_WAIT_ACK)5029 if (priv->s_flags & RVT_S_WAIT_ACK)
5040 goto bail;5030 goto bail;
@@ -5144,11 +5134,6 @@ int hfi1_make_tid_rdma_pkt(struct rvt_qp *qp, struct hfi1_pkt_state *ps) · 103 unmodified lines
5144 hfi1_make_ruc_header(qp, ohdr, (opcode << 24), bth1, bth2,5134 hfi1_make_ruc_header(qp, ohdr, (opcode << 24), bth1, bth2,
5145 middle, ps);5135 middle, ps);
5146 return 1;5136 return 1;
5147done_free_tx:
5148 hfi1_put_txreq(ps->s_txreq);
5149 ps->s_txreq = NULL;
5150 return 1;
5151
5152bail:5137bail:
5153 hfi1_put_txreq(ps->s_txreq);5138 hfi1_put_txreq(ps->s_txreq);
5154bail_no_tx:5139bail_no_tx:
drivers/infiniband/hw/hns/hns_roce_hem.c+4−2
@@ -792,6 +792,8 @@ void *hns_roce_table_find(struct hns_roce_dev *hr_dev, · 791 unmodified lines
792 idx_offset = (obj & (table->num_obj - 1)) % obj_per_chunk;792 idx_offset = (obj & (table->num_obj - 1)) % obj_per_chunk;
793 dma_offset = offset = idx_offset * table->obj_size;793 dma_offset = offset = idx_offset * table->obj_size;
794 } else {794 } else {
795 u32 seg_size = 64; /* 8 bytes per BA and 8 BA per segment */
796
795 hns_roce_calc_hem_mhop(hr_dev, table, &mhop_obj, &mhop);797 hns_roce_calc_hem_mhop(hr_dev, table, &mhop_obj, &mhop);
796 /* mtt mhop */798 /* mtt mhop */
797 i = mhop.l0_idx;799 i = mhop.l0_idx;
@@ -803,8 +805,8 @@ void *hns_roce_table_find(struct hns_roce_dev *hr_dev, · 5 unmodified lines
803 hem_idx = i;805 hem_idx = i;
804 806
805 hem = table->hem[hem_idx];807 hem = table->hem[hem_idx];
806 dma_offset = offset = (obj & (table->num_obj - 1)) *808 dma_offset = offset = (obj & (table->num_obj - 1)) * seg_size %
807 table->obj_size % mhop.bt_chunk_size;809 mhop.bt_chunk_size;
808 if (mhop.hop_num == 2)810 if (mhop.hop_num == 2)
809 dma_offset = offset = 0;811 dma_offset = offset = 0;
810 }812 }
drivers/infiniband/hw/hns/hns_roce_mr.c+2−2
@@ -746,7 +746,6 @@ static int hns_roce_write_mtt_chunk(struct hns_roce_dev *hr_dev, · 745 unmodified lines
746 struct hns_roce_hem_table *table;746 struct hns_roce_hem_table *table;
747 dma_addr_t dma_handle;747 dma_addr_t dma_handle;
748 __le64 *mtts;748 __le64 *mtts;
749 u32 s = start_index * sizeof(u64);
750 u32 bt_page_size;749 u32 bt_page_size;
751 u32 i;750 u32 i;
752 751
@@ -780,7 +779,8 @@ static int hns_roce_write_mtt_chunk(struct hns_roce_dev *hr_dev, · 27 unmodified lines
780 return -EINVAL;779 return -EINVAL;
781 780
782 mtts = hns_roce_table_find(hr_dev, table,781 mtts = hns_roce_table_find(hr_dev, table,
783 mtt->first_seg + s / hr_dev->caps.mtt_entry_sz,782 mtt->first_seg +
783 start_index / HNS_ROCE_MTT_ENTRY_PER_SEG,
784 &dma_handle);784 &dma_handle);
785 if (!mtts)785 if (!mtts)
786 return -ENOMEM;786 return -ENOMEM;
drivers/infiniband/hw/hns/hns_roce_qp.c+0−3
@@ -274,9 +274,6 @@ void hns_roce_qp_free(struct hns_roce_dev *hr_dev, struct hns_roce_qp *hr_qp) · 273 unmodified lines
274 wait_for_completion(&hr_qp->free);274 wait_for_completion(&hr_qp->free);
275 275
276 if ((hr_qp->ibqp.qp_type) != IB_QPT_GSI) {276 if ((hr_qp->ibqp.qp_type) != IB_QPT_GSI) {
277 if (hr_dev->caps.sccc_entry_sz)
278 hns_roce_table_put(hr_dev, &qp_table->sccc_table,
279 hr_qp->qpn);
280 if (hr_dev->caps.trrl_entry_sz)277 if (hr_dev->caps.trrl_entry_sz)
281 hns_roce_table_put(hr_dev, &qp_table->trrl_table,278 hns_roce_table_put(hr_dev, &qp_table->trrl_table,
282 hr_qp->qpn);279 hr_qp->qpn);
drivers/infiniband/hw/mlx5/odp.c+2−1
@@ -585,7 +585,7 @@ static int pagefault_mr(struct mlx5_ib_dev *dev, struct mlx5_ib_mr *mr, · 584 unmodified lines
585 struct ib_umem_odp *odp_mr = to_ib_umem_odp(mr->umem);585 struct ib_umem_odp *odp_mr = to_ib_umem_odp(mr->umem);
586 bool downgrade = flags & MLX5_PF_FLAGS_DOWNGRADE;586 bool downgrade = flags & MLX5_PF_FLAGS_DOWNGRADE;
587 bool prefetch = flags & MLX5_PF_FLAGS_PREFETCH;587 bool prefetch = flags & MLX5_PF_FLAGS_PREFETCH;
588 u64 access_mask = ODP_READ_ALLOWED_BIT;588 u64 access_mask;
589 u64 start_idx, page_mask;589 u64 start_idx, page_mask;
590 struct ib_umem_odp *odp;590 struct ib_umem_odp *odp;
591 size_t size;591 size_t size;
@@ -607,6 +607,7 @@ next_mr: · 15 unmodified lines
607 page_shift = mr->umem->page_shift;607 page_shift = mr->umem->page_shift;
608 page_mask = ~(BIT(page_shift) - 1);608 page_mask = ~(BIT(page_shift) - 1);
609 start_idx = (io_virt - (mr->mmkey.iova & page_mask)) >> page_shift;609 start_idx = (io_virt - (mr->mmkey.iova & page_mask)) >> page_shift;
610 access_mask = ODP_READ_ALLOWED_BIT;
610 611
611 if (prefetch && !downgrade && !mr->umem->writable) {612 if (prefetch && !downgrade && !mr->umem->writable) {
612 /* prefetch with write-access must613 /* prefetch with write-access must
drivers/infiniband/hw/vmw_pvrdma/pvrdma_main.c+2−0
@@ -1131,6 +1131,8 @@ static void pvrdma_pci_remove(struct pci_dev *pdev) · 1130 unmodified lines
1131 pvrdma_page_dir_cleanup(dev, &dev->cq_pdir);1131 pvrdma_page_dir_cleanup(dev, &dev->cq_pdir);
1132 pvrdma_page_dir_cleanup(dev, &dev->async_pdir);1132 pvrdma_page_dir_cleanup(dev, &dev->async_pdir);
1133 pvrdma_free_slots(dev);1133 pvrdma_free_slots(dev);
1134 dma_free_coherent(&pdev->dev, sizeof(*dev->dsr), dev->dsr,
1135 dev->dsrbase);
1134 1136
1135 iounmap(dev->regs);1137 iounmap(dev->regs);
1136 kfree(dev->sgid_tbl);1138 kfree(dev->sgid_tbl);
drivers/input/keyboard/snvs_pwrkey.c+3−3
@@ -148,6 +148,9 @@ static int imx_snvs_pwrkey_probe(struct platform_device *pdev) · 147 unmodified lines
148 return error;148 return error;
149 }149 }
150 150
151 pdata->input = input;
152 platform_set_drvdata(pdev, pdata);
153
151 error = devm_request_irq(&pdev->dev, pdata->irq,154 error = devm_request_irq(&pdev->dev, pdata->irq,
152 imx_snvs_pwrkey_interrupt,155 imx_snvs_pwrkey_interrupt,
153 0, pdev->name, pdev);156 0, pdev->name, pdev);
@@ -163,9 +166,6 @@ static int imx_snvs_pwrkey_probe(struct platform_device *pdev) · 9 unmodified lines
163 return error;166 return error;
164 }167 }
165 168
166 pdata->input = input;
167 platform_set_drvdata(pdev, pdata);
168
169 device_init_wakeup(&pdev->dev, pdata->wakeup);169 device_init_wakeup(&pdev->dev, pdata->wakeup);
170 170
171 return 0;171 return 0;
drivers/input/mouse/elan_i2c_core.c+25−0
@@ -1339,21 +1339,46 @@ static const struct acpi_device_id elan_acpi_id[] = { · 1338 unmodified lines
1339 { "ELAN0600", 0 },1339 { "ELAN0600", 0 },
1340 { "ELAN0601", 0 },1340 { "ELAN0601", 0 },
1341 { "ELAN0602", 0 },1341 { "ELAN0602", 0 },
1342 { "ELAN0603", 0 },
1343 { "ELAN0604", 0 },
1342 { "ELAN0605", 0 },1344 { "ELAN0605", 0 },
1345 { "ELAN0606", 0 },
1346 { "ELAN0607", 0 },
1343 { "ELAN0608", 0 },1347 { "ELAN0608", 0 },
1344 { "ELAN0609", 0 },1348 { "ELAN0609", 0 },
1345 { "ELAN060B", 0 },1349 { "ELAN060B", 0 },
1346 { "ELAN060C", 0 },1350 { "ELAN060C", 0 },
1351 { "ELAN060F", 0 },
1352 { "ELAN0610", 0 },
1347 { "ELAN0611", 0 },1353 { "ELAN0611", 0 },
1348 { "ELAN0612", 0 },1354 { "ELAN0612", 0 },
1355 { "ELAN0615", 0 },
1356 { "ELAN0616", 0 },
1349 { "ELAN0617", 0 },1357 { "ELAN0617", 0 },
1350 { "ELAN0618", 0 },1358 { "ELAN0618", 0 },
1359 { "ELAN0619", 0 },
1360 { "ELAN061A", 0 },
1361 { "ELAN061B", 0 },
1351 { "ELAN061C", 0 },1362 { "ELAN061C", 0 },
1352 { "ELAN061D", 0 },1363 { "ELAN061D", 0 },
1353 { "ELAN061E", 0 },1364 { "ELAN061E", 0 },
1365 { "ELAN061F", 0 },
1354 { "ELAN0620", 0 },1366 { "ELAN0620", 0 },
1355 { "ELAN0621", 0 },1367 { "ELAN0621", 0 },
1356 { "ELAN0622", 0 },1368 { "ELAN0622", 0 },
1369 { "ELAN0623", 0 },
1370 { "ELAN0624", 0 },
1371 { "ELAN0625", 0 },
1372 { "ELAN0626", 0 },
1373 { "ELAN0627", 0 },
1374 { "ELAN0628", 0 },
1375 { "ELAN0629", 0 },
1376 { "ELAN062A", 0 },
1377 { "ELAN062B", 0 },
1378 { "ELAN062C", 0 },
1379 { "ELAN062D", 0 },
1380 { "ELAN0631", 0 },
1381 { "ELAN0632", 0 },
1357 { "ELAN1000", 0 },1382 { "ELAN1000", 0 },
1358 { }1383 { }
1359};1384};
drivers/iommu/amd_iommu_init.c+1−1
@@ -359,7 +359,7 @@ static void iommu_write_l2(struct amd_iommu *iommu, u8 address, u32 val) · 358 unmodified lines
359static void iommu_set_exclusion_range(struct amd_iommu *iommu)359static void iommu_set_exclusion_range(struct amd_iommu *iommu)
360{360{
361 u64 start = iommu->exclusion_start & PAGE_MASK;361 u64 start = iommu->exclusion_start & PAGE_MASK;
362 u64 limit = (start + iommu->exclusion_length) & PAGE_MASK;362 u64 limit = (start + iommu->exclusion_length - 1) & PAGE_MASK;
363 u64 entry;363 u64 entry;
364 364
365 if (!iommu->exclusion_start)365 if (!iommu->exclusion_start)
drivers/irqchip/irq-ls1x.c+1−0
@@ -130,6 +130,7 @@ static int __init ls1x_intc_of_init(struct device_node *node, · 129 unmodified lines
130 NULL);130 NULL);
131 if (!priv->domain) {131 if (!priv->domain) {
132 pr_err("ls1x-irq: cannot add IRQ domain\n");132 pr_err("ls1x-irq: cannot add IRQ domain\n");
133 err = -ENOMEM;
133 goto out_iounmap;134 goto out_iounmap;
134 }135 }
135 136
drivers/isdn/mISDN/socket.c+2−2
@@ -710,10 +710,10 @@ base_sock_bind(struct socket *sock, struct sockaddr *addr, int addr_len) · 709 unmodified lines
710 struct sock *sk = sock->sk;710 struct sock *sk = sock->sk;
711 int err = 0;711 int err = 0;
712 712
713 if (!maddr || maddr->family != AF_ISDN)713 if (addr_len < sizeof(struct sockaddr_mISDN))
714 return -EINVAL;714 return -EINVAL;
715 715
716 if (addr_len < sizeof(struct sockaddr_mISDN))716 if (!maddr || maddr->family != AF_ISDN)
717 return -EINVAL;717 return -EINVAL;
718 718
719 lock_sock(sk);719 lock_sock(sk);
drivers/lightnvm/pblk-read.c+28−22
@@ -231,14 +231,14 @@ static void pblk_end_partial_read(struct nvm_rq *rqd) · 230 unmodified lines
231 struct pblk_sec_meta *meta;231 struct pblk_sec_meta *meta;
232 struct bio *new_bio = rqd->bio;232 struct bio *new_bio = rqd->bio;
233 struct bio *bio = pr_ctx->orig_bio;233 struct bio *bio = pr_ctx->orig_bio;
234 struct bio_vec src_bv, dst_bv;
235 void *meta_list = rqd->meta_list;234 void *meta_list = rqd->meta_list;
236 int bio_init_idx = pr_ctx->bio_init_idx;
237 unsigned long *read_bitmap = pr_ctx->bitmap;235 unsigned long *read_bitmap = pr_ctx->bitmap;
236 struct bvec_iter orig_iter = BVEC_ITER_ALL_INIT;
237 struct bvec_iter new_iter = BVEC_ITER_ALL_INIT;
238 int nr_secs = pr_ctx->orig_nr_secs;238 int nr_secs = pr_ctx->orig_nr_secs;
239 int nr_holes = nr_secs - bitmap_weight(read_bitmap, nr_secs);239 int nr_holes = nr_secs - bitmap_weight(read_bitmap, nr_secs);
240 void *src_p, *dst_p;240 void *src_p, *dst_p;
241 int hole, i;241 int bit, i;
242 242
243 if (unlikely(nr_holes == 1)) {243 if (unlikely(nr_holes == 1)) {
244 struct ppa_addr ppa;244 struct ppa_addr ppa;
@@ -257,33 +257,39 @@ static void pblk_end_partial_read(struct nvm_rq *rqd) · 12 unmodified lines
257 257
258 /* Fill the holes in the original bio */258 /* Fill the holes in the original bio */
259 i = 0;259 i = 0;
260 hole = find_first_zero_bit(read_bitmap, nr_secs);260 for (bit = 0; bit < nr_secs; bit++) {
261 do {261 if (!test_bit(bit, read_bitmap)) {
262 struct pblk_line *line;262 struct bio_vec dst_bv, src_bv;
263 struct pblk_line *line;
263 264
264 line = pblk_ppa_to_line(pblk, rqd->ppa_list[i]);265 line = pblk_ppa_to_line(pblk, rqd->ppa_list[i]);
265 kref_put(&line->ref, pblk_line_put);266 kref_put(&line->ref, pblk_line_put);
266 267
267 meta = pblk_get_meta(pblk, meta_list, hole);268 meta = pblk_get_meta(pblk, meta_list, bit);
268 meta->lba = cpu_to_le64(pr_ctx->lba_list_media[i]);269 meta->lba = cpu_to_le64(pr_ctx->lba_list_media[i]);
269 270
270 src_bv = new_bio->bi_io_vec[i++];271 dst_bv = bio_iter_iovec(bio, orig_iter);
271 dst_bv = bio->bi_io_vec[bio_init_idx + hole];272 src_bv = bio_iter_iovec(new_bio, new_iter);
272 273
273 src_p = kmap_atomic(src_bv.bv_page);274 src_p = kmap_atomic(src_bv.bv_page);
274 dst_p = kmap_atomic(dst_bv.bv_page);275 dst_p = kmap_atomic(dst_bv.bv_page);
275 276
276 memcpy(dst_p + dst_bv.bv_offset,277 memcpy(dst_p + dst_bv.bv_offset,
277 src_p + src_bv.bv_offset,278 src_p + src_bv.bv_offset,
278 PBLK_EXPOSED_PAGE_SIZE);279 PBLK_EXPOSED_PAGE_SIZE);
279 280
280 kunmap_atomic(src_p);281 kunmap_atomic(src_p);
281 kunmap_atomic(dst_p);282 kunmap_atomic(dst_p);
282 283
283 mempool_free(src_bv.bv_page, &pblk->page_bio_pool);284 flush_dcache_page(dst_bv.bv_page);
285 mempool_free(src_bv.bv_page, &pblk->page_bio_pool);
284 286
285 hole = find_next_zero_bit(read_bitmap, nr_secs, hole + 1);287 bio_advance_iter(new_bio, &new_iter,
286 } while (hole < nr_secs);288 PBLK_EXPOSED_PAGE_SIZE);
289 i++;
290 }
291 bio_advance_iter(bio, &orig_iter, PBLK_EXPOSED_PAGE_SIZE);
292 }
287 293
288 bio_put(new_bio);294 bio_put(new_bio);
289 kfree(pr_ctx);295 kfree(pr_ctx);
drivers/md/dm-core.h+1−0
@@ -115,6 +115,7 @@ struct mapped_device { · 114 unmodified lines
115 struct srcu_struct io_barrier;115 struct srcu_struct io_barrier;
116};116};
117 117
118void disable_discard(struct mapped_device *md);
118void disable_write_same(struct mapped_device *md);119void disable_write_same(struct mapped_device *md);
119void disable_write_zeroes(struct mapped_device *md);120void disable_write_zeroes(struct mapped_device *md);
120 121
drivers/md/dm-init.c+1−1
@@ -36,7 +36,7 @@ struct dm_device { · 35 unmodified lines
36 struct list_head list;36 struct list_head list;
37};37};
38 38
39const char *dm_allowed_targets[] __initconst = {39const char * const dm_allowed_targets[] __initconst = {
40 "crypt",40 "crypt",
41 "delay",41 "delay",
42 "linear",42 "linear",
drivers/md/dm-integrity.c+7−9
@@ -909,7 +909,7 @@ static void copy_from_journal(struct dm_integrity_c *ic, unsigned section, unsig · 908 unmodified lines
909static bool ranges_overlap(struct dm_integrity_range *range1, struct dm_integrity_range *range2)909static bool ranges_overlap(struct dm_integrity_range *range1, struct dm_integrity_range *range2)
910{910{
911 return range1->logical_sector < range2->logical_sector + range2->n_sectors &&911 return range1->logical_sector < range2->logical_sector + range2->n_sectors &&
912 range2->logical_sector + range2->n_sectors > range2->logical_sector;912 range1->logical_sector + range1->n_sectors > range2->logical_sector;
913}913}
914 914
915static bool add_new_range(struct dm_integrity_c *ic, struct dm_integrity_range *new_range, bool check_waiting)915static bool add_new_range(struct dm_integrity_c *ic, struct dm_integrity_range *new_range, bool check_waiting)
@@ -955,8 +955,6 @@ static void remove_range_unlocked(struct dm_integrity_c *ic, struct dm_integrity · 39 unmodified lines
955 struct dm_integrity_range *last_range =955 struct dm_integrity_range *last_range =
956 list_first_entry(&ic->wait_list, struct dm_integrity_range, wait_entry);956 list_first_entry(&ic->wait_list, struct dm_integrity_range, wait_entry);
957 struct task_struct *last_range_task;957 struct task_struct *last_range_task;
958 if (!ranges_overlap(range, last_range))
959 break;
960 last_range_task = last_range->task;958 last_range_task = last_range->task;
961 list_del(&last_range->wait_entry);959 list_del(&last_range->wait_entry);
962 if (!add_new_range(ic, last_range, false)) {960 if (!add_new_range(ic, last_range, false)) {
@@ -3181,7 +3179,7 @@ static int dm_integrity_ctr(struct dm_target *ti, unsigned argc, char **argv) · 2218 unmodified lines
3181 journal_watermark = val;3179 journal_watermark = val;
3182 else if (sscanf(opt_string, "commit_time:%u%c", &val, &dummy) == 1)3180 else if (sscanf(opt_string, "commit_time:%u%c", &val, &dummy) == 1)
3183 sync_msec = val;3181 sync_msec = val;
3184 else if (!memcmp(opt_string, "meta_device:", strlen("meta_device:"))) {3182 else if (!strncmp(opt_string, "meta_device:", strlen("meta_device:"))) {
3185 if (ic->meta_dev) {3183 if (ic->meta_dev) {
3186 dm_put_device(ti, ic->meta_dev);3184 dm_put_device(ti, ic->meta_dev);
3187 ic->meta_dev = NULL;3185 ic->meta_dev = NULL;
@@ -3200,17 +3198,17 @@ static int dm_integrity_ctr(struct dm_target *ti, unsigned argc, char **argv) · 12 unmodified lines
3200 goto bad;3198 goto bad;
3201 }3199 }
3202 ic->sectors_per_block = val >> SECTOR_SHIFT;3200 ic->sectors_per_block = val >> SECTOR_SHIFT;
3203 } else if (!memcmp(opt_string, "internal_hash:", strlen("internal_hash:"))) {3201 } else if (!strncmp(opt_string, "internal_hash:", strlen("internal_hash:"))) {
3204 r = get_alg_and_key(opt_string, &ic->internal_hash_alg, &ti->error,3202 r = get_alg_and_key(opt_string, &ic->internal_hash_alg, &ti->error,
3205 "Invalid internal_hash argument");3203 "Invalid internal_hash argument");
3206 if (r)3204 if (r)
3207 goto bad;3205 goto bad;
3208 } else if (!memcmp(opt_string, "journal_crypt:", strlen("journal_crypt:"))) {3206 } else if (!strncmp(opt_string, "journal_crypt:", strlen("journal_crypt:"))) {
3209 r = get_alg_and_key(opt_string, &ic->journal_crypt_alg, &ti->error,3207 r = get_alg_and_key(opt_string, &ic->journal_crypt_alg, &ti->error,
3210 "Invalid journal_crypt argument");3208 "Invalid journal_crypt argument");
3211 if (r)3209 if (r)
3212 goto bad;3210 goto bad;
3213 } else if (!memcmp(opt_string, "journal_mac:", strlen("journal_mac:"))) {3211 } else if (!strncmp(opt_string, "journal_mac:", strlen("journal_mac:"))) {
3214 r = get_alg_and_key(opt_string, &ic->journal_mac_alg, &ti->error,3212 r = get_alg_and_key(opt_string, &ic->journal_mac_alg, &ti->error,
3215 "Invalid journal_mac argument");3213 "Invalid journal_mac argument");
3216 if (r)3214 if (r)
@@ -3612,7 +3610,7 @@ static struct target_type integrity_target = { · 395 unmodified lines
3612 .io_hints = dm_integrity_io_hints,3610 .io_hints = dm_integrity_io_hints,
3613};3611};
3614 3612
3615int __init dm_integrity_init(void)3613static int __init dm_integrity_init(void)
3616{3614{
3617 int r;3615 int r;
3618 3616
@@ -3631,7 +3629,7 @@ int __init dm_integrity_init(void) · 12 unmodified lines
3631 return r;3629 return r;
3632}3630}
3633 3631
3634void dm_integrity_exit(void)3632static void __exit dm_integrity_exit(void)
3635{3633{
3636 dm_unregister_target(&integrity_target);3634 dm_unregister_target(&integrity_target);
3637 kmem_cache_destroy(journal_io_cache);3635 kmem_cache_destroy(journal_io_cache);
drivers/md/dm-rq.c+7−4
@@ -222,11 +222,14 @@ static void dm_done(struct request *clone, blk_status_t error, bool mapped) · 221 unmodified lines
222 }222 }
223 223
224 if (unlikely(error == BLK_STS_TARGET)) {224 if (unlikely(error == BLK_STS_TARGET)) {
225 if (req_op(clone) == REQ_OP_WRITE_SAME &&225 if (req_op(clone) == REQ_OP_DISCARD &&
226 !clone->q->limits.max_write_same_sectors)226 !clone->q->limits.max_discard_sectors)
227 disable_discard(tio->md);
228 else if (req_op(clone) == REQ_OP_WRITE_SAME &&
229 !clone->q->limits.max_write_same_sectors)
227 disable_write_same(tio->md);230 disable_write_same(tio->md);
228 if (req_op(clone) == REQ_OP_WRITE_ZEROES &&231 else if (req_op(clone) == REQ_OP_WRITE_ZEROES &&
229 !clone->q->limits.max_write_zeroes_sectors)232 !clone->q->limits.max_write_zeroes_sectors)
230 disable_write_zeroes(tio->md);233 disable_write_zeroes(tio->md);
231 }234 }
232 235
drivers/md/dm-table.c+39−0
@@ -1844,6 +1844,36 @@ static bool dm_table_supports_secure_erase(struct dm_table *t) · 1843 unmodified lines
1844 return true;1844 return true;
1845}1845}
1846 1846
1847static int device_requires_stable_pages(struct dm_target *ti,
1848 struct dm_dev *dev, sector_t start,
1849 sector_t len, void *data)
1850{
1851 struct request_queue *q = bdev_get_queue(dev->bdev);
1852
1853 return q && bdi_cap_stable_pages_required(q->backing_dev_info);
1854}
1855
1856/*
1857 * If any underlying device requires stable pages, a table must require
1858 * them as well. Only targets that support iterate_devices are considered:
1859 * don't want error, zero, etc to require stable pages.
1860 */
1861static bool dm_table_requires_stable_pages(struct dm_table *t)
1862{
1863 struct dm_target *ti;
1864 unsigned i;
1865
1866 for (i = 0; i < dm_table_get_num_targets(t); i++) {
1867 ti = dm_table_get_target(t, i);
1868
1869 if (ti->type->iterate_devices &&
1870 ti->type->iterate_devices(ti, device_requires_stable_pages, NULL))
1871 return true;
1872 }
1873
1874 return false;
1875}
1876
1847void dm_table_set_restrictions(struct dm_table *t, struct request_queue *q,1877void dm_table_set_restrictions(struct dm_table *t, struct request_queue *q,
1848 struct queue_limits *limits)1878 struct queue_limits *limits)
1849{1879{
@@ -1896,6 +1926,15 @@ void dm_table_set_restrictions(struct dm_table *t, struct request_queue *q, · 46 unmodified lines
1896 1926
1897 dm_table_verify_integrity(t);1927 dm_table_verify_integrity(t);
1898 1928
1929 /*
1930 * Some devices don't use blk_integrity but still want stable pages
1931 * because they do their own checksumming.
1932 */
1933 if (dm_table_requires_stable_pages(t))
1934 q->backing_dev_info->capabilities |= BDI_CAP_STABLE_WRITES;
1935 else
1936 q->backing_dev_info->capabilities &= ~BDI_CAP_STABLE_WRITES;
1937
1899 /*1938 /*
1900 * Determine whether or not this queue's I/O timings contribute1939 * Determine whether or not this queue's I/O timings contribute
1901 * to the entropy pool, Only request-based targets use this.1940 * to the entropy pool, Only request-based targets use this.
drivers/md/dm.c+17−13
@@ -945,6 +945,15 @@ static void dec_pending(struct dm_io *io, blk_status_t error) · 944 unmodified lines
945 }945 }
946}946}
947 947
948void disable_discard(struct mapped_device *md)
949{
950 struct queue_limits *limits = dm_get_queue_limits(md);
951
952 /* device doesn't really support DISCARD, disable it */
953 limits->max_discard_sectors = 0;
954 blk_queue_flag_clear(QUEUE_FLAG_DISCARD, md->queue);
955}
956
948void disable_write_same(struct mapped_device *md)957void disable_write_same(struct mapped_device *md)
949{958{
950 struct queue_limits *limits = dm_get_queue_limits(md);959 struct queue_limits *limits = dm_get_queue_limits(md);
@@ -970,11 +979,14 @@ static void clone_endio(struct bio *bio) · 19 unmodified lines
970 dm_endio_fn endio = tio->ti->type->end_io;979 dm_endio_fn endio = tio->ti->type->end_io;
971 980
972 if (unlikely(error == BLK_STS_TARGET) && md->type != DM_TYPE_NVME_BIO_BASED) {981 if (unlikely(error == BLK_STS_TARGET) && md->type != DM_TYPE_NVME_BIO_BASED) {
973 if (bio_op(bio) == REQ_OP_WRITE_SAME &&982 if (bio_op(bio) == REQ_OP_DISCARD &&
974 !bio->bi_disk->queue->limits.max_write_same_sectors)983 !bio->bi_disk->queue->limits.max_discard_sectors)
984 disable_discard(md);
985 else if (bio_op(bio) == REQ_OP_WRITE_SAME &&
986 !bio->bi_disk->queue->limits.max_write_same_sectors)
975 disable_write_same(md);987 disable_write_same(md);
976 if (bio_op(bio) == REQ_OP_WRITE_ZEROES &&988 else if (bio_op(bio) == REQ_OP_WRITE_ZEROES &&
977 !bio->bi_disk->queue->limits.max_write_zeroes_sectors)989 !bio->bi_disk->queue->limits.max_write_zeroes_sectors)
978 disable_write_zeroes(md);990 disable_write_zeroes(md);
979 }991 }
980 992
@@ -1042,15 +1054,7 @@ int dm_set_target_max_io_len(struct dm_target *ti, sector_t len) · 61 unmodified lines
1042 return -EINVAL;1054 return -EINVAL;
1043 }1055 }
1044 1056
1045 /*1057 ti->max_io_len = (uint32_t) len;
1046 * BIO based queue uses its own splitting. When multipage bvecs
1047 * is switched on, size of the incoming bio may be too big to
1048 * be handled in some targets, such as crypt.
1049 *
1050 * When these targets are ready for the big bio, we can remove
1051 * the limit.
1052 */
1053 ti->max_io_len = min_t(uint32_t, len, BIO_MAX_PAGES * PAGE_SIZE);
1054 1058
1055 return 0;1059 return 0;
1056}1060}
drivers/mfd/Kconfig+1−1
@@ -1246,7 +1246,7 @@ config MFD_STA2X11 · 1245 unmodified lines
1246 1246
1247config MFD_SUN6I_PRCM1247config MFD_SUN6I_PRCM
1248 bool "Allwinner A31 PRCM controller"1248 bool "Allwinner A31 PRCM controller"
1249 depends on ARCH_SUNXI1249 depends on ARCH_SUNXI || COMPILE_TEST
1250 select MFD_CORE1250 select MFD_CORE
1251 help1251 help
1252 Support for the PRCM (Power/Reset/Clock Management) unit available1252 Support for the PRCM (Power/Reset/Clock Management) unit available
drivers/mfd/sprd-sc27xx-spi.c+21−21
@@ -53,67 +53,67 @@ static const struct sprd_pmic_data sc2731_data = { · 52 unmodified lines
53static const struct mfd_cell sprd_pmic_devs[] = {53static const struct mfd_cell sprd_pmic_devs[] = {
54 {54 {
55 .name = "sc27xx-wdt",55 .name = "sc27xx-wdt",
56 .of_compatible = "sprd,sc27xx-wdt",56 .of_compatible = "sprd,sc2731-wdt",
57 }, {57 }, {
58 .name = "sc27xx-rtc",58 .name = "sc27xx-rtc",
59 .of_compatible = "sprd,sc27xx-rtc",59 .of_compatible = "sprd,sc2731-rtc",
60 }, {60 }, {
61 .name = "sc27xx-charger",61 .name = "sc27xx-charger",
62 .of_compatible = "sprd,sc27xx-charger",62 .of_compatible = "sprd,sc2731-charger",
63 }, {63 }, {
64 .name = "sc27xx-chg-timer",64 .name = "sc27xx-chg-timer",
65 .of_compatible = "sprd,sc27xx-chg-timer",65 .of_compatible = "sprd,sc2731-chg-timer",
66 }, {66 }, {
67 .name = "sc27xx-fast-chg",67 .name = "sc27xx-fast-chg",
68 .of_compatible = "sprd,sc27xx-fast-chg",68 .of_compatible = "sprd,sc2731-fast-chg",
69 }, {69 }, {
70 .name = "sc27xx-chg-wdt",70 .name = "sc27xx-chg-wdt",
71 .of_compatible = "sprd,sc27xx-chg-wdt",71 .of_compatible = "sprd,sc2731-chg-wdt",
72 }, {72 }, {
73 .name = "sc27xx-typec",73 .name = "sc27xx-typec",
74 .of_compatible = "sprd,sc27xx-typec",74 .of_compatible = "sprd,sc2731-typec",
75 }, {75 }, {
76 .name = "sc27xx-flash",76 .name = "sc27xx-flash",
77 .of_compatible = "sprd,sc27xx-flash",77 .of_compatible = "sprd,sc2731-flash",
78 }, {78 }, {
79 .name = "sc27xx-eic",79 .name = "sc27xx-eic",
80 .of_compatible = "sprd,sc27xx-eic",80 .of_compatible = "sprd,sc2731-eic",
81 }, {81 }, {
82 .name = "sc27xx-efuse",82 .name = "sc27xx-efuse",
83 .of_compatible = "sprd,sc27xx-efuse",83 .of_compatible = "sprd,sc2731-efuse",
84 }, {84 }, {
85 .name = "sc27xx-thermal",85 .name = "sc27xx-thermal",
86 .of_compatible = "sprd,sc27xx-thermal",86 .of_compatible = "sprd,sc2731-thermal",
87 }, {87 }, {
88 .name = "sc27xx-adc",88 .name = "sc27xx-adc",
89 .of_compatible = "sprd,sc27xx-adc",89 .of_compatible = "sprd,sc2731-adc",
90 }, {90 }, {
91 .name = "sc27xx-audio-codec",91 .name = "sc27xx-audio-codec",
92 .of_compatible = "sprd,sc27xx-audio-codec",92 .of_compatible = "sprd,sc2731-audio-codec",
93 }, {93 }, {
94 .name = "sc27xx-regulator",94 .name = "sc27xx-regulator",
95 .of_compatible = "sprd,sc27xx-regulator",95 .of_compatible = "sprd,sc2731-regulator",
96 }, {96 }, {
97 .name = "sc27xx-vibrator",97 .name = "sc27xx-vibrator",
98 .of_compatible = "sprd,sc27xx-vibrator",98 .of_compatible = "sprd,sc2731-vibrator",
99 }, {99 }, {
100 .name = "sc27xx-keypad-led",100 .name = "sc27xx-keypad-led",
101 .of_compatible = "sprd,sc27xx-keypad-led",101 .of_compatible = "sprd,sc2731-keypad-led",
102 }, {102 }, {
103 .name = "sc27xx-bltc",103 .name = "sc27xx-bltc",
104 .of_compatible = "sprd,sc27xx-bltc",104 .of_compatible = "sprd,sc2731-bltc",
105 }, {105 }, {
106 .name = "sc27xx-fgu",106 .name = "sc27xx-fgu",
107 .of_compatible = "sprd,sc27xx-fgu",107 .of_compatible = "sprd,sc2731-fgu",
108 }, {108 }, {
109 .name = "sc27xx-7sreset",109 .name = "sc27xx-7sreset",
110 .of_compatible = "sprd,sc27xx-7sreset",110 .of_compatible = "sprd,sc2731-7sreset",
111 }, {111 }, {
112 .name = "sc27xx-poweroff",112 .name = "sc27xx-poweroff",
113 .of_compatible = "sprd,sc27xx-poweroff",113 .of_compatible = "sprd,sc2731-poweroff",
114 }, {114 }, {
115 .name = "sc27xx-syscon",115 .name = "sc27xx-syscon",
116 .of_compatible = "sprd,sc27xx-syscon",116 .of_compatible = "sprd,sc2731-syscon",
117 },117 },
118};118};
119 119
drivers/mfd/twl-core.c+23−0
@@ -1245,6 +1245,28 @@ free: · 1244 unmodified lines
1245 return status;1245 return status;
1246}1246}
1247 1247
1248static int __maybe_unused twl_suspend(struct device *dev)
1249{
1250 struct i2c_client *client = to_i2c_client(dev);
1251
1252 if (client->irq)
1253 disable_irq(client->irq);
1254
1255 return 0;
1256}
1257
1258static int __maybe_unused twl_resume(struct device *dev)
1259{
1260 struct i2c_client *client = to_i2c_client(dev);
1261
1262 if (client->irq)
1263 enable_irq(client->irq);
1264
1265 return 0;
1266}
1267
1268static SIMPLE_DEV_PM_OPS(twl_dev_pm_ops, twl_suspend, twl_resume);
1269
1248static const struct i2c_device_id twl_ids[] = {1270static const struct i2c_device_id twl_ids[] = {
1249 { "twl4030", TWL4030_VAUX2 }, /* "Triton 2" */1271 { "twl4030", TWL4030_VAUX2 }, /* "Triton 2" */
1250 { "twl5030", 0 }, /* T2 updated */1272 { "twl5030", 0 }, /* T2 updated */
@@ -1262,6 +1284,7 @@ static const struct i2c_device_id twl_ids[] = { · 11 unmodified lines
1262/* One Client Driver , 4 Clients */1284/* One Client Driver , 4 Clients */
1263static struct i2c_driver twl_driver = {1285static struct i2c_driver twl_driver = {
1264 .driver.name = DRIVER_NAME,1286 .driver.name = DRIVER_NAME,
1287 .driver.pm = &twl_dev_pm_ops,
1265 .id_table = twl_ids,1288 .id_table = twl_ids,
1266 .probe = twl_probe,1289 .probe = twl_probe,
1267 .remove = twl_remove,1290 .remove = twl_remove,
drivers/misc/fastrpc.c+6−1
@@ -1184,6 +1184,7 @@ static int fastrpc_cb_probe(struct platform_device *pdev) · 1183 unmodified lines
1184 struct fastrpc_session_ctx *sess;1184 struct fastrpc_session_ctx *sess;
1185 struct device *dev = &pdev->dev;1185 struct device *dev = &pdev->dev;
1186 int i, sessions = 0;1186 int i, sessions = 0;
1187 int rc;
1187 1188
1188 cctx = dev_get_drvdata(dev->parent);1189 cctx = dev_get_drvdata(dev->parent);
1189 if (!cctx)1190 if (!cctx)
@@ -1213,7 +1214,11 @@ static int fastrpc_cb_probe(struct platform_device *pdev) · 23 unmodified lines
1213 }1214 }
1214 cctx->sesscount++;1215 cctx->sesscount++;
1215 spin_unlock(&cctx->lock);1216 spin_unlock(&cctx->lock);
1216 dma_set_mask(dev, DMA_BIT_MASK(32));1217 rc = dma_set_mask(dev, DMA_BIT_MASK(32));
1218 if (rc) {
1219 dev_err(dev, "32-bit DMA enable failed\n");
1220 return rc;
1221 }
1217 1222
1218 return 0;1223 return 0;
1219}1224}
drivers/misc/habanalabs/goya/goya.c+4−5
@@ -1688,12 +1688,11 @@ static void goya_init_golden_registers(struct hl_device *hdev) · 1687 unmodified lines
1688 1688
1689 /*1689 /*
1690 * Workaround for H2 #HW-23 bug1690 * Workaround for H2 #HW-23 bug
1691 * Set DMA max outstanding read requests to 240 on DMA CH 1. Set it1691 * Set DMA max outstanding read requests to 240 on DMA CH 1.
1692 * to 16 on KMD DMA1692 * This limitation is still large enough to not affect Gen4 bandwidth.
1693 * We need to limit only these DMAs because the user can only read1693 * We need to only limit that DMA channel because the user can only read
1694 * from Host using DMA CH 11694 * from Host using DMA CH 1
1695 */1695 */
1696 WREG32(mmDMA_CH_0_CFG0, 0x0fff0010);
1697 WREG32(mmDMA_CH_1_CFG0, 0x0fff00F0);1696 WREG32(mmDMA_CH_1_CFG0, 0x0fff00F0);
1698 1697
1699 goya->hw_cap_initialized |= HW_CAP_GOLDEN;1698 goya->hw_cap_initialized |= HW_CAP_GOLDEN;
@@ -3693,7 +3692,7 @@ static int goya_validate_dma_pkt_mmu(struct hl_device *hdev, · 1993 unmodified lines
3693 * WA for HW-23.3692 * WA for HW-23.
3694 * We can't allow user to read from Host using QMANs other than 1.3693 * We can't allow user to read from Host using QMANs other than 1.
3695 */3694 */
3696 if (parser->hw_queue_id > GOYA_QUEUE_ID_DMA_1 &&3695 if (parser->hw_queue_id != GOYA_QUEUE_ID_DMA_1 &&
3697 hl_mem_area_inside_range(le64_to_cpu(user_dma_pkt->src_addr),3696 hl_mem_area_inside_range(le64_to_cpu(user_dma_pkt->src_addr),
3698 le32_to_cpu(user_dma_pkt->tsize),3697 le32_to_cpu(user_dma_pkt->tsize),
3699 hdev->asic_prop.va_space_host_start_address,3698 hdev->asic_prop.va_space_host_start_address,
drivers/mmc/host/alcor.c+13−21
@@ -48,7 +48,6 @@ struct alcor_sdmmc_host { · 47 unmodified lines
48 struct mmc_command *cmd;48 struct mmc_command *cmd;
49 struct mmc_data *data;49 struct mmc_data *data;
50 unsigned int dma_on:1;50 unsigned int dma_on:1;
51 unsigned int early_data:1;
52 51
53 struct mutex cmd_mutex;52 struct mutex cmd_mutex;
54 53
@@ -144,8 +143,7 @@ static void alcor_data_set_dma(struct alcor_sdmmc_host *host) · 89 unmodified lines
144 host->sg_count--;143 host->sg_count--;
145}144}
146 145
147static void alcor_trigger_data_transfer(struct alcor_sdmmc_host *host,146static void alcor_trigger_data_transfer(struct alcor_sdmmc_host *host)
148 bool early)
149{147{
150 struct alcor_pci_priv *priv = host->alcor_pci;148 struct alcor_pci_priv *priv = host->alcor_pci;
151 struct mmc_data *data = host->data;149 struct mmc_data *data = host->data;
@@ -155,13 +153,6 @@ static void alcor_trigger_data_transfer(struct alcor_sdmmc_host *host, · 3 unmodified lines
155 ctrl |= AU6601_DATA_WRITE;153 ctrl |= AU6601_DATA_WRITE;
156 154
157 if (data->host_cookie == COOKIE_MAPPED) {155 if (data->host_cookie == COOKIE_MAPPED) {
158 if (host->early_data) {
159 host->early_data = false;
160 return;
161 }
162
163 host->early_data = early;
164
165 alcor_data_set_dma(host);156 alcor_data_set_dma(host);
166 ctrl |= AU6601_DATA_DMA_MODE;157 ctrl |= AU6601_DATA_DMA_MODE;
167 host->dma_on = 1;158 host->dma_on = 1;
@@ -231,6 +222,7 @@ static void alcor_prepare_sg_miter(struct alcor_sdmmc_host *host) · 63 unmodified lines
231static void alcor_prepare_data(struct alcor_sdmmc_host *host,222static void alcor_prepare_data(struct alcor_sdmmc_host *host,
232 struct mmc_command *cmd)223 struct mmc_command *cmd)
233{224{
225 struct alcor_pci_priv *priv = host->alcor_pci;
234 struct mmc_data *data = cmd->data;226 struct mmc_data *data = cmd->data;
235 227
236 if (!data)228 if (!data)
@@ -248,7 +240,7 @@ static void alcor_prepare_data(struct alcor_sdmmc_host *host, · 11 unmodified lines
248 if (data->host_cookie != COOKIE_MAPPED)240 if (data->host_cookie != COOKIE_MAPPED)
249 alcor_prepare_sg_miter(host);241 alcor_prepare_sg_miter(host);
250 242
251 alcor_trigger_data_transfer(host, true);243 alcor_write8(priv, 0, AU6601_DATA_XFER_CTRL);
252}244}
253 245
254static void alcor_send_cmd(struct alcor_sdmmc_host *host,246static void alcor_send_cmd(struct alcor_sdmmc_host *host,
@@ -435,7 +427,7 @@ static int alcor_cmd_irq_done(struct alcor_sdmmc_host *host, u32 intmask) · 180 unmodified lines
435 if (!host->data)427 if (!host->data)
436 return false;428 return false;
437 429
438 alcor_trigger_data_transfer(host, false);430 alcor_trigger_data_transfer(host);
439 host->cmd = NULL;431 host->cmd = NULL;
440 return true;432 return true;
441}433}
@@ -456,7 +448,7 @@ static void alcor_cmd_irq_thread(struct alcor_sdmmc_host *host, u32 intmask) · 14 unmodified lines
456 if (!host->data)448 if (!host->data)
457 alcor_request_complete(host, 1);449 alcor_request_complete(host, 1);
458 else450 else
459 alcor_trigger_data_transfer(host, false);451 alcor_trigger_data_transfer(host);
460 host->cmd = NULL;452 host->cmd = NULL;
461}453}
462 454
@@ -487,15 +479,9 @@ static int alcor_data_irq_done(struct alcor_sdmmc_host *host, u32 intmask) · 24 unmodified lines
487 break;479 break;
488 case AU6601_INT_READ_BUF_RDY:480 case AU6601_INT_READ_BUF_RDY:
489 alcor_trf_block_pio(host, true);481 alcor_trf_block_pio(host, true);
490 if (!host->blocks)
491 break;
492 alcor_trigger_data_transfer(host, false);
493 return 1;482 return 1;
494 case AU6601_INT_WRITE_BUF_RDY:483 case AU6601_INT_WRITE_BUF_RDY:
495 alcor_trf_block_pio(host, false);484 alcor_trf_block_pio(host, false);
496 if (!host->blocks)
497 break;
498 alcor_trigger_data_transfer(host, false);
499 return 1;485 return 1;
500 case AU6601_INT_DMA_END:486 case AU6601_INT_DMA_END:
501 if (!host->sg_count)487 if (!host->sg_count)
@@ -508,8 +494,14 @@ static int alcor_data_irq_done(struct alcor_sdmmc_host *host, u32 intmask) · 6 unmodified lines
508 break;494 break;
509 }495 }
510 496
511 if (intmask & AU6601_INT_DATA_END)497 if (intmask & AU6601_INT_DATA_END) {
512 return 0;498 if (!host->dma_on && host->blocks) {
499 alcor_trigger_data_transfer(host);
500 return 1;
501 } else {
502 return 0;
503 }
504 }
513 505
514 return 1;506 return 1;
515}507}
drivers/mmc/host/sdhci-omap.c+38−0
@@ -797,6 +797,43 @@ void sdhci_omap_reset(struct sdhci_host *host, u8 mask) · 796 unmodified lines
797 sdhci_reset(host, mask);797 sdhci_reset(host, mask);
798}798}
799 799
800#define CMD_ERR_MASK (SDHCI_INT_CRC | SDHCI_INT_END_BIT | SDHCI_INT_INDEX |\
801 SDHCI_INT_TIMEOUT)
802#define CMD_MASK (CMD_ERR_MASK | SDHCI_INT_RESPONSE)
803
804static u32 sdhci_omap_irq(struct sdhci_host *host, u32 intmask)
805{
806 struct sdhci_pltfm_host *pltfm_host = sdhci_priv(host);
807 struct sdhci_omap_host *omap_host = sdhci_pltfm_priv(pltfm_host);
808
809 if (omap_host->is_tuning && host->cmd && !host->data_early &&
810 (intmask & CMD_ERR_MASK)) {
811
812 /*
813 * Since we are not resetting data lines during tuning
814 * operation, data error or data complete interrupts
815 * might still arrive. Mark this request as a failure
816 * but still wait for the data interrupt
817 */
818 if (intmask & SDHCI_INT_TIMEOUT)
819 host->cmd->error = -ETIMEDOUT;
820 else
821 host->cmd->error = -EILSEQ;
822
823 host->cmd = NULL;
824
825 /*
826 * Sometimes command error interrupts and command complete
827 * interrupt will arrive together. Clear all command related
828 * interrupts here.
829 */
830 sdhci_writel(host, intmask & CMD_MASK, SDHCI_INT_STATUS);
831 intmask &= ~CMD_MASK;
832 }
833
834 return intmask;
835}
836
800static struct sdhci_ops sdhci_omap_ops = {837static struct sdhci_ops sdhci_omap_ops = {
801 .set_clock = sdhci_omap_set_clock,838 .set_clock = sdhci_omap_set_clock,
802 .set_power = sdhci_omap_set_power,839 .set_power = sdhci_omap_set_power,
@@ -807,6 +844,7 @@ static struct sdhci_ops sdhci_omap_ops = { · 4 unmodified lines
807 .platform_send_init_74_clocks = sdhci_omap_init_74_clocks,844 .platform_send_init_74_clocks = sdhci_omap_init_74_clocks,
808 .reset = sdhci_omap_reset,845 .reset = sdhci_omap_reset,
809 .set_uhs_signaling = sdhci_omap_set_uhs_signaling,846 .set_uhs_signaling = sdhci_omap_set_uhs_signaling,
847 .irq = sdhci_omap_irq,
810};848};
811 849
812static int sdhci_omap_set_capabilities(struct sdhci_omap_host *omap_host)850static int sdhci_omap_set_capabilities(struct sdhci_omap_host *omap_host)
drivers/mtd/chips/cfi_cmdset_0002.c+5−1
@@ -1876,7 +1876,11 @@ static int __xipram do_write_buffer(struct map_info *map, struct flchip *chip, · 1875 unmodified lines
1876 continue;1876 continue;
1877 }1877 }
1878 1878
1879 if (time_after(jiffies, timeo) && !chip_ready(map, adr))1879 /*
1880 * We check "time_after" and "!chip_good" before checking "chip_good" to avoid
1881 * the failure due to scheduling.
1882 */
1883 if (time_after(jiffies, timeo) && !chip_good(map, adr, datum))
1880 break;1884 break;
1881 1885
1882 if (chip_good(map, adr, datum)) {1886 if (chip_good(map, adr, datum)) {
drivers/net/bonding/bond_main.c+5−1
@@ -3213,8 +3213,12 @@ static int bond_netdev_event(struct notifier_block *this, · 3212 unmodified lines
3213 return NOTIFY_DONE;3213 return NOTIFY_DONE;
3214 3214
3215 if (event_dev->flags & IFF_MASTER) {3215 if (event_dev->flags & IFF_MASTER) {
3216 int ret;
3217
3216 netdev_dbg(event_dev, "IFF_MASTER\n");3218 netdev_dbg(event_dev, "IFF_MASTER\n");
3217 return bond_master_netdev_event(event, event_dev);3219 ret = bond_master_netdev_event(event, event_dev);
3220 if (ret != NOTIFY_DONE)
3221 return ret;
3218 }3222 }
3219 3223
3220 if (event_dev->flags & IFF_SLAVE) {3224 if (event_dev->flags & IFF_SLAVE) {
drivers/net/bonding/bond_sysfs_slave.c+3−1
@@ -55,7 +55,9 @@ static SLAVE_ATTR_RO(link_failure_count); · 54 unmodified lines
55 55
56static ssize_t perm_hwaddr_show(struct slave *slave, char *buf)56static ssize_t perm_hwaddr_show(struct slave *slave, char *buf)
57{57{
58 return sprintf(buf, "%pM\n", slave->perm_hwaddr);58 return sprintf(buf, "%*phC\n",
59 slave->dev->addr_len,
60 slave->perm_hwaddr);
59}61}
60static SLAVE_ATTR_RO(perm_hwaddr);62static SLAVE_ATTR_RO(perm_hwaddr);
61 63
drivers/net/dsa/mv88e6xxx/port.c+16−8
@@ -427,18 +427,22 @@ int mv88e6390x_port_set_cmode(struct mv88e6xxx_chip *chip, int port, · 426 unmodified lines
427 return 0;427 return 0;
428 428
429 lane = mv88e6390x_serdes_get_lane(chip, port);429 lane = mv88e6390x_serdes_get_lane(chip, port);
430 if (lane < 0)430 if (lane < 0 && lane != -ENODEV)
431 return lane;431 return lane;
432 432
433 if (chip->ports[port].serdes_irq) {433 if (lane >= 0) {
434 err = mv88e6390_serdes_irq_disable(chip, port, lane);434 if (chip->ports[port].serdes_irq) {
435 err = mv88e6390_serdes_irq_disable(chip, port, lane);
436 if (err)
437 return err;
438 }
439
440 err = mv88e6390x_serdes_power(chip, port, false);
435 if (err)441 if (err)
436 return err;442 return err;
437 }443 }
438 444
439 err = mv88e6390x_serdes_power(chip, port, false);445 chip->ports[port].cmode = 0;
440 if (err)
441 return err;
442 446
443 if (cmode) {447 if (cmode) {
444 err = mv88e6xxx_port_read(chip, port, MV88E6XXX_PORT_STS, &reg);448 err = mv88e6xxx_port_read(chip, port, MV88E6XXX_PORT_STS, &reg);
@@ -452,6 +456,12 @@ int mv88e6390x_port_set_cmode(struct mv88e6xxx_chip *chip, int port, · 7 unmodified lines
452 if (err)456 if (err)
453 return err;457 return err;
454 458
459 chip->ports[port].cmode = cmode;
460
461 lane = mv88e6390x_serdes_get_lane(chip, port);
462 if (lane < 0)
463 return lane;
464
455 err = mv88e6390x_serdes_power(chip, port, true);465 err = mv88e6390x_serdes_power(chip, port, true);
456 if (err)466 if (err)
457 return err;467 return err;
@@ -463,8 +473,6 @@ int mv88e6390x_port_set_cmode(struct mv88e6xxx_chip *chip, int port, · 5 unmodified lines
463 }473 }
464 }474 }
465 475
466 chip->ports[port].cmode = cmode;
467
468 return 0;476 return 0;
469}477}
470 478
drivers/net/ethernet/broadcom/bnx2x/bnx2x_vfpf.c+1−1
@@ -957,7 +957,7 @@ int bnx2x_vfpf_update_vlan(struct bnx2x *bp, u16 vid, u8 vf_qid, bool add) · 956 unmodified lines
957 bnx2x_sample_bulletin(bp);957 bnx2x_sample_bulletin(bp);
958 958
959 if (bp->shadow_bulletin.content.valid_bitmap & 1 << VLAN_VALID) {959 if (bp->shadow_bulletin.content.valid_bitmap & 1 << VLAN_VALID) {
960 BNX2X_ERR("Hypervisor will dicline the request, avoiding\n");960 BNX2X_ERR("Hypervisor will decline the request, avoiding\n");
961 rc = -EINVAL;961 rc = -EINVAL;
962 goto out;962 goto out;
963 }963 }
drivers/net/ethernet/broadcom/bnxt/bnxt.c+13−3
@@ -1133,6 +1133,8 @@ static void bnxt_tpa_start(struct bnxt *bp, struct bnxt_rx_ring_info *rxr, · 1132 unmodified lines
1133 tpa_info = &rxr->rx_tpa[agg_id];1133 tpa_info = &rxr->rx_tpa[agg_id];
1134 1134
1135 if (unlikely(cons != rxr->rx_next_cons)) {1135 if (unlikely(cons != rxr->rx_next_cons)) {
1136 netdev_warn(bp->dev, "TPA cons %x != expected cons %x\n",
1137 cons, rxr->rx_next_cons);
1136 bnxt_sched_reset(bp, rxr);1138 bnxt_sched_reset(bp, rxr);
1137 return;1139 return;
1138 }1140 }
@@ -1585,15 +1587,17 @@ static int bnxt_rx_pkt(struct bnxt *bp, struct bnxt_cp_ring_info *cpr, · 446 unmodified lines
1585 }1587 }
1586 1588
1587 cons = rxcmp->rx_cmp_opaque;1589 cons = rxcmp->rx_cmp_opaque;
1588 rx_buf = &rxr->rx_buf_ring[cons];
1589 data = rx_buf->data;
1590 data_ptr = rx_buf->data_ptr;
1591 if (unlikely(cons != rxr->rx_next_cons)) {1590 if (unlikely(cons != rxr->rx_next_cons)) {
1592 int rc1 = bnxt_discard_rx(bp, cpr, raw_cons, rxcmp);1591 int rc1 = bnxt_discard_rx(bp, cpr, raw_cons, rxcmp);
1593 1592
1593 netdev_warn(bp->dev, "RX cons %x != expected cons %x\n",
1594 cons, rxr->rx_next_cons);
1594 bnxt_sched_reset(bp, rxr);1595 bnxt_sched_reset(bp, rxr);
1595 return rc1;1596 return rc1;
1596 }1597 }
1598 rx_buf = &rxr->rx_buf_ring[cons];
1599 data = rx_buf->data;
1600 data_ptr = rx_buf->data_ptr;
1597 prefetch(data_ptr);1601 prefetch(data_ptr);
1598 1602
1599 misc = le32_to_cpu(rxcmp->rx_cmp_misc_v1);1603 misc = le32_to_cpu(rxcmp->rx_cmp_misc_v1);
@@ -1610,11 +1614,17 @@ static int bnxt_rx_pkt(struct bnxt *bp, struct bnxt_cp_ring_info *cpr, · 10 unmodified lines
1610 1614
1611 rx_buf->data = NULL;1615 rx_buf->data = NULL;
1612 if (rxcmp1->rx_cmp_cfa_code_errors_v2 & RX_CMP_L2_ERRORS) {1616 if (rxcmp1->rx_cmp_cfa_code_errors_v2 & RX_CMP_L2_ERRORS) {
1617 u32 rx_err = le32_to_cpu(rxcmp1->rx_cmp_cfa_code_errors_v2);
1618
1613 bnxt_reuse_rx_data(rxr, cons, data);1619 bnxt_reuse_rx_data(rxr, cons, data);
1614 if (agg_bufs)1620 if (agg_bufs)
1615 bnxt_reuse_rx_agg_bufs(cpr, cp_cons, agg_bufs);1621 bnxt_reuse_rx_agg_bufs(cpr, cp_cons, agg_bufs);
1616 1622
1617 rc = -EIO;1623 rc = -EIO;
1624 if (rx_err & RX_CMPL_ERRORS_BUFFER_ERROR_MASK) {
1625 netdev_warn(bp->dev, "RX buffer error %x\n", rx_err);
1626 bnxt_sched_reset(bp, rxr);
1627 }
1618 goto next_rx;1628 goto next_rx;
1619 }1629 }
1620 1630
drivers/net/ethernet/broadcom/tg3.c+4−4
@@ -4283,7 +4283,7 @@ static void tg3_power_down(struct tg3 *tp) · 4282 unmodified lines
4283 pci_set_power_state(tp->pdev, PCI_D3hot);4283 pci_set_power_state(tp->pdev, PCI_D3hot);
4284}4284}
4285 4285
4286static void tg3_aux_stat_to_speed_duplex(struct tg3 *tp, u32 val, u16 *speed, u8 *duplex)4286static void tg3_aux_stat_to_speed_duplex(struct tg3 *tp, u32 val, u32 *speed, u8 *duplex)
4287{4287{
4288 switch (val & MII_TG3_AUX_STAT_SPDMASK) {4288 switch (val & MII_TG3_AUX_STAT_SPDMASK) {
4289 case MII_TG3_AUX_STAT_10HALF:4289 case MII_TG3_AUX_STAT_10HALF:
@@ -4787,7 +4787,7 @@ static int tg3_setup_copper_phy(struct tg3 *tp, bool force_reset) · 497 unmodified lines
4787 bool current_link_up;4787 bool current_link_up;
4788 u32 bmsr, val;4788 u32 bmsr, val;
4789 u32 lcl_adv, rmt_adv;4789 u32 lcl_adv, rmt_adv;
4790 u16 current_speed;4790 u32 current_speed;
4791 u8 current_duplex;4791 u8 current_duplex;
4792 int i, err;4792 int i, err;
4793 4793
@@ -5719,7 +5719,7 @@ out: · 925 unmodified lines
5719static int tg3_setup_fiber_phy(struct tg3 *tp, bool force_reset)5719static int tg3_setup_fiber_phy(struct tg3 *tp, bool force_reset)
5720{5720{
5721 u32 orig_pause_cfg;5721 u32 orig_pause_cfg;
5722 u16 orig_active_speed;5722 u32 orig_active_speed;
5723 u8 orig_active_duplex;5723 u8 orig_active_duplex;
5724 u32 mac_status;5724 u32 mac_status;
5725 bool current_link_up;5725 bool current_link_up;
@@ -5823,7 +5823,7 @@ static int tg3_setup_fiber_mii_phy(struct tg3 *tp, bool force_reset) · 97 unmodified lines
5823{5823{
5824 int err = 0;5824 int err = 0;
5825 u32 bmsr, bmcr;5825 u32 bmsr, bmcr;
5826 u16 current_speed = SPEED_UNKNOWN;5826 u32 current_speed = SPEED_UNKNOWN;
5827 u8 current_duplex = DUPLEX_UNKNOWN;5827 u8 current_duplex = DUPLEX_UNKNOWN;
5828 bool current_link_up = false;5828 bool current_link_up = false;
5829 u32 local_adv, remote_adv, sgsr;5829 u32 local_adv, remote_adv, sgsr;
drivers/net/ethernet/broadcom/tg3.h+2−2
@@ -2873,7 +2873,7 @@ struct tg3_tx_ring_info { · 2872 unmodified lines
2873struct tg3_link_config {2873struct tg3_link_config {
2874 /* Describes what we're trying to get. */2874 /* Describes what we're trying to get. */
2875 u32 advertising;2875 u32 advertising;
2876 u16 speed;2876 u32 speed;
2877 u8 duplex;2877 u8 duplex;
2878 u8 autoneg;2878 u8 autoneg;
2879 u8 flowctrl;2879 u8 flowctrl;
@@ -2882,7 +2882,7 @@ struct tg3_link_config { · 2 unmodified lines
2882 u8 active_flowctrl;2882 u8 active_flowctrl;
2883 2883
2884 u8 active_duplex;2884 u8 active_duplex;
2885 u16 active_speed;2885 u32 active_speed;
2886 u32 rmt_adv;2886 u32 rmt_adv;
2887};2887};
2888 2888
drivers/net/ethernet/cadence/macb_main.c+3−1
@@ -898,7 +898,9 @@ static void macb_tx_interrupt(struct macb_queue *queue) · 897 unmodified lines
898 898
899 /* First, update TX stats if needed */899 /* First, update TX stats if needed */
900 if (skb) {900 if (skb) {
901 if (gem_ptp_do_txstamp(queue, skb, desc) == 0) {901 if (unlikely(skb_shinfo(skb)->tx_flags &
902 SKBTX_HW_TSTAMP) &&
903 gem_ptp_do_txstamp(queue, skb, desc) == 0) {
902 /* skb now belongs to timestamp buffer904 /* skb now belongs to timestamp buffer
903 * and will be removed later905 * and will be removed later
904 */906 */
drivers/net/ethernet/cavium/thunder/nicvf_main.c+32−10
@@ -32,6 +32,13 @@ · 31 unmodified lines
32#define DRV_NAME "nicvf"32#define DRV_NAME "nicvf"
33#define DRV_VERSION "1.0"33#define DRV_VERSION "1.0"
34 34
35/* NOTE: Packets bigger than 1530 are split across multiple pages and XDP needs
36 * the buffer to be contiguous. Allow XDP to be set up only if we don't exceed
37 * this value, keeping headroom for the 14 byte Ethernet header and two
38 * VLAN tags (for QinQ)
39 */
40#define MAX_XDP_MTU (1530 - ETH_HLEN - VLAN_HLEN * 2)
41
35/* Supported devices */42/* Supported devices */
36static const struct pci_device_id nicvf_id_table[] = {43static const struct pci_device_id nicvf_id_table[] = {
37 { PCI_DEVICE_SUB(PCI_VENDOR_ID_CAVIUM,44 { PCI_DEVICE_SUB(PCI_VENDOR_ID_CAVIUM,
@@ -1328,10 +1335,11 @@ int nicvf_stop(struct net_device *netdev) · 1290 unmodified lines
1328 struct nicvf_cq_poll *cq_poll = NULL;1335 struct nicvf_cq_poll *cq_poll = NULL;
1329 union nic_mbx mbx = {};1336 union nic_mbx mbx = {};
1330 1337
1331 cancel_delayed_work_sync(&nic->link_change_work);
1332
1333 /* wait till all queued set_rx_mode tasks completes */1338 /* wait till all queued set_rx_mode tasks completes */
1334 drain_workqueue(nic->nicvf_rx_mode_wq);1339 if (nic->nicvf_rx_mode_wq) {
1340 cancel_delayed_work_sync(&nic->link_change_work);
1341 drain_workqueue(nic->nicvf_rx_mode_wq);
1342 }
1335 1343
1336 mbx.msg.msg = NIC_MBOX_MSG_SHUTDOWN;1344 mbx.msg.msg = NIC_MBOX_MSG_SHUTDOWN;
1337 nicvf_send_msg_to_pf(nic, &mbx);1345 nicvf_send_msg_to_pf(nic, &mbx);
@@ -1452,7 +1460,8 @@ int nicvf_open(struct net_device *netdev) · 114 unmodified lines
1452 struct nicvf_cq_poll *cq_poll = NULL;1460 struct nicvf_cq_poll *cq_poll = NULL;
1453 1461
1454 /* wait till all queued set_rx_mode tasks completes if any */1462 /* wait till all queued set_rx_mode tasks completes if any */
1455 drain_workqueue(nic->nicvf_rx_mode_wq);1463 if (nic->nicvf_rx_mode_wq)
1464 drain_workqueue(nic->nicvf_rx_mode_wq);
1456 1465
1457 netif_carrier_off(netdev);1466 netif_carrier_off(netdev);
1458 1467
@@ -1550,10 +1559,12 @@ int nicvf_open(struct net_device *netdev) · 91 unmodified lines
1550 /* Send VF config done msg to PF */1559 /* Send VF config done msg to PF */
1551 nicvf_send_cfg_done(nic);1560 nicvf_send_cfg_done(nic);
1552 1561
1553 INIT_DELAYED_WORK(&nic->link_change_work,1562 if (nic->nicvf_rx_mode_wq) {
1554 nicvf_link_status_check_task);1563 INIT_DELAYED_WORK(&nic->link_change_work,
1555 queue_delayed_work(nic->nicvf_rx_mode_wq,1564 nicvf_link_status_check_task);
1556 &nic->link_change_work, 0);1565 queue_delayed_work(nic->nicvf_rx_mode_wq,
1566 &nic->link_change_work, 0);
1567 }
1557 1568
1558 return 0;1569 return 0;
1559cleanup:1570cleanup:
@@ -1578,6 +1589,15 @@ static int nicvf_change_mtu(struct net_device *netdev, int new_mtu) · 18 unmodified lines
1578 struct nicvf *nic = netdev_priv(netdev);1589 struct nicvf *nic = netdev_priv(netdev);
1579 int orig_mtu = netdev->mtu;1590 int orig_mtu = netdev->mtu;
1580 1591
1592 /* For now just support only the usual MTU sized frames,
1593 * plus some headroom for VLAN, QinQ.
1594 */
1595 if (nic->xdp_prog && new_mtu > MAX_XDP_MTU) {
1596 netdev_warn(netdev, "Jumbo frames not yet supported with XDP, current MTU %d.\n",
1597 netdev->mtu);
1598 return -EINVAL;
1599 }
1600
1581 netdev->mtu = new_mtu;1601 netdev->mtu = new_mtu;
1582 1602
1583 if (!netif_running(netdev))1603 if (!netif_running(netdev))
@@ -1826,8 +1846,10 @@ static int nicvf_xdp_setup(struct nicvf *nic, struct bpf_prog *prog) · 242 unmodified lines
1826 bool bpf_attached = false;1846 bool bpf_attached = false;
1827 int ret = 0;1847 int ret = 0;
1828 1848
1829 /* For now just support only the usual MTU sized frames */1849 /* For now just support only the usual MTU sized frames,
1830 if (prog && (dev->mtu > 1500)) {1850 * plus some headroom for VLAN, QinQ.
1851 */
1852 if (prog && dev->mtu > MAX_XDP_MTU) {
1831 netdev_warn(dev, "Jumbo frames not yet supported with XDP, current MTU %d.\n",1853 netdev_warn(dev, "Jumbo frames not yet supported with XDP, current MTU %d.\n",
1832 dev->mtu);1854 dev->mtu);
1833 return -EOPNOTSUPP;1855 return -EOPNOTSUPP;
drivers/net/ethernet/cavium/thunder/nicvf_queues.c+14−16
@@ -105,20 +105,19 @@ static inline struct pgcache *nicvf_alloc_page(struct nicvf *nic, · 104 unmodified lines
105 /* Check if page can be recycled */105 /* Check if page can be recycled */
106 if (page) {106 if (page) {
107 ref_count = page_ref_count(page);107 ref_count = page_ref_count(page);
108 /* Check if this page has been used once i.e 'put_page'108 /* This page can be recycled if internal ref_count and page's
109 * called after packet transmission i.e internal ref_count109 * ref_count are equal, indicating that the page has been used
110 * and page's ref_count are equal i.e page can be recycled.110 * once for packet transmission. For non-XDP mode, internal
111 * ref_count is always '1'.
111 */112 */
112 if (rbdr->is_xdp && (ref_count == pgcache->ref_count))113 if (rbdr->is_xdp) {
113 pgcache->ref_count--;114 if (ref_count == pgcache->ref_count)
114 else115 pgcache->ref_count--;
115 page = NULL;116 else
116 117 page = NULL;
117 /* In non-XDP mode, page's ref_count needs to be '1' for it118 } else if (ref_count != 1) {
118 * to be recycled.
119 */
120 if (!rbdr->is_xdp && (ref_count != 1))
121 page = NULL;119 page = NULL;
120 }
122 }121 }
123 122
124 if (!page) {123 if (!page) {
@@ -365,11 +364,10 @@ static void nicvf_free_rbdr(struct nicvf *nic, struct rbdr *rbdr) · 240 unmodified lines
365 while (head < rbdr->pgcnt) {364 while (head < rbdr->pgcnt) {
366 pgcache = &rbdr->pgcache[head];365 pgcache = &rbdr->pgcache[head];
367 if (pgcache->page && page_ref_count(pgcache->page) != 0) {366 if (pgcache->page && page_ref_count(pgcache->page) != 0) {
368 if (!rbdr->is_xdp) {367 if (rbdr->is_xdp) {
369 put_page(pgcache->page);368 page_ref_sub(pgcache->page,
370 continue;369 pgcache->ref_count - 1);
371 }370 }
372 page_ref_sub(pgcache->page, pgcache->ref_count - 1);
373 put_page(pgcache->page);371 put_page(pgcache->page);
374 }372 }
375 head++;373 head++;
drivers/net/ethernet/chelsio/libcxgb/libcxgb_ppm.c+8−1
@@ -354,7 +354,10 @@ static struct cxgbi_ppm_pool *ppm_alloc_cpu_pool(unsigned int *total, · 353 unmodified lines
354 ppmax = max;354 ppmax = max;
355 355
356 /* pool size must be multiple of unsigned long */356 /* pool size must be multiple of unsigned long */
357 bmap = BITS_TO_LONGS(ppmax);357 bmap = ppmax / BITS_PER_TYPE(unsigned long);
358 if (!bmap)
359 return NULL;
360
358 ppmax = (bmap * sizeof(unsigned long)) << 3;361 ppmax = (bmap * sizeof(unsigned long)) << 3;
359 362
360 alloc_sz = sizeof(*pools) + sizeof(unsigned long) * bmap;363 alloc_sz = sizeof(*pools) + sizeof(unsigned long) * bmap;
@@ -402,6 +405,10 @@ int cxgbi_ppm_init(void **ppm_pp, struct net_device *ndev, · 41 unmodified lines
402 if (reserve_factor) {405 if (reserve_factor) {
403 ppmax_pool = ppmax / reserve_factor;406 ppmax_pool = ppmax / reserve_factor;
404 pool = ppm_alloc_cpu_pool(&ppmax_pool, &pool_index_max);407 pool = ppm_alloc_cpu_pool(&ppmax_pool, &pool_index_max);
408 if (!pool) {
409 ppmax_pool = 0;
410 reserve_factor = 0;
411 }
405 412
406 pr_debug("%s: ppmax %u, cpu total %u, per cpu %u.\n",413 pr_debug("%s: ppmax %u, cpu total %u, per cpu %u.\n",
407 ndev->name, ppmax, ppmax_pool, pool_index_max);414 ndev->name, ppmax, ppmax_pool, pool_index_max);
drivers/net/ethernet/freescale/fec_main.c+21−9
@@ -1840,13 +1840,9 @@ static int fec_enet_clk_enable(struct net_device *ndev, bool enable) · 1839 unmodified lines
1840 int ret;1840 int ret;
1841 1841
1842 if (enable) {1842 if (enable) {
1843 ret = clk_prepare_enable(fep->clk_ahb);
1844 if (ret)
1845 return ret;
1846
1847 ret = clk_prepare_enable(fep->clk_enet_out);1843 ret = clk_prepare_enable(fep->clk_enet_out);
1848 if (ret)1844 if (ret)
1849 goto failed_clk_enet_out;1845 return ret;
1850 1846
1851 if (fep->clk_ptp) {1847 if (fep->clk_ptp) {
1852 mutex_lock(&fep->ptp_clk_mutex);1848 mutex_lock(&fep->ptp_clk_mutex);
@@ -1866,7 +1862,6 @@ static int fec_enet_clk_enable(struct net_device *ndev, bool enable) · 13 unmodified lines
1866 1862
1867 phy_reset_after_clk_enable(ndev->phydev);1863 phy_reset_after_clk_enable(ndev->phydev);
1868 } else {1864 } else {
1869 clk_disable_unprepare(fep->clk_ahb);
1870 clk_disable_unprepare(fep->clk_enet_out);1865 clk_disable_unprepare(fep->clk_enet_out);
1871 if (fep->clk_ptp) {1866 if (fep->clk_ptp) {
1872 mutex_lock(&fep->ptp_clk_mutex);1867 mutex_lock(&fep->ptp_clk_mutex);
@@ -1885,8 +1880,6 @@ failed_clk_ref: · 12 unmodified lines
1885failed_clk_ptp:1880failed_clk_ptp:
1886 if (fep->clk_enet_out)1881 if (fep->clk_enet_out)
1887 clk_disable_unprepare(fep->clk_enet_out);1882 clk_disable_unprepare(fep->clk_enet_out);
1888failed_clk_enet_out:
1889 clk_disable_unprepare(fep->clk_ahb);
1890 1883
1891 return ret;1884 return ret;
1892}1885}
@@ -3470,6 +3463,9 @@ fec_probe(struct platform_device *pdev) · 1577 unmodified lines
3470 ret = clk_prepare_enable(fep->clk_ipg);3463 ret = clk_prepare_enable(fep->clk_ipg);
3471 if (ret)3464 if (ret)
3472 goto failed_clk_ipg;3465 goto failed_clk_ipg;
3466 ret = clk_prepare_enable(fep->clk_ahb);
3467 if (ret)
3468 goto failed_clk_ahb;
3473 3469
3474 fep->reg_phy = devm_regulator_get_optional(&pdev->dev, "phy");3470 fep->reg_phy = devm_regulator_get_optional(&pdev->dev, "phy");
3475 if (!IS_ERR(fep->reg_phy)) {3471 if (!IS_ERR(fep->reg_phy)) {
@@ -3563,6 +3559,9 @@ failed_reset: · 87 unmodified lines
3563 pm_runtime_put(&pdev->dev);3559 pm_runtime_put(&pdev->dev);
3564 pm_runtime_disable(&pdev->dev);3560 pm_runtime_disable(&pdev->dev);
3565failed_regulator:3561failed_regulator:
3562 clk_disable_unprepare(fep->clk_ahb);
3563failed_clk_ahb:
3564 clk_disable_unprepare(fep->clk_ipg);
3566failed_clk_ipg:3565failed_clk_ipg:
3567 fec_enet_clk_enable(ndev, false);3566 fec_enet_clk_enable(ndev, false);
3568failed_clk:3567failed_clk:
@@ -3686,6 +3685,7 @@ static int __maybe_unused fec_runtime_suspend(struct device *dev) · 117 unmodified lines
3686 struct net_device *ndev = dev_get_drvdata(dev);3685 struct net_device *ndev = dev_get_drvdata(dev);
3687 struct fec_enet_private *fep = netdev_priv(ndev);3686 struct fec_enet_private *fep = netdev_priv(ndev);
3688 3687
3688 clk_disable_unprepare(fep->clk_ahb);
3689 clk_disable_unprepare(fep->clk_ipg);3689 clk_disable_unprepare(fep->clk_ipg);
3690 3690
3691 return 0;3691 return 0;
@@ -3695,8 +3695,20 @@ static int __maybe_unused fec_runtime_resume(struct device *dev) · 3 unmodified lines
3695{3695{
3696 struct net_device *ndev = dev_get_drvdata(dev);3696 struct net_device *ndev = dev_get_drvdata(dev);
3697 struct fec_enet_private *fep = netdev_priv(ndev);3697 struct fec_enet_private *fep = netdev_priv(ndev);
3698 int ret;
3698 3699
3699 return clk_prepare_enable(fep->clk_ipg);3700 ret = clk_prepare_enable(fep->clk_ahb);
3701 if (ret)
3702 return ret;
3703 ret = clk_prepare_enable(fep->clk_ipg);
3704 if (ret)
3705 goto failed_clk_ipg;
3706
3707 return 0;
3708
3709failed_clk_ipg:
3710 clk_disable_unprepare(fep->clk_ahb);
3711 return ret;
3700}3712}
3701 3713
3702static const struct dev_pm_ops fec_pm_ops = {3714static const struct dev_pm_ops fec_pm_ops = {
drivers/net/ethernet/hisilicon/hns/hnae.c+3−1
@@ -150,7 +150,6 @@ out_buffer_fail: · 149 unmodified lines
150/* free desc along with its attached buffer */150/* free desc along with its attached buffer */
151static void hnae_free_desc(struct hnae_ring *ring)151static void hnae_free_desc(struct hnae_ring *ring)
152{152{
153 hnae_free_buffers(ring);
154 dma_unmap_single(ring_to_dev(ring), ring->desc_dma_addr,153 dma_unmap_single(ring_to_dev(ring), ring->desc_dma_addr,
155 ring->desc_num * sizeof(ring->desc[0]),154 ring->desc_num * sizeof(ring->desc[0]),
156 ring_to_dma_dir(ring));155 ring_to_dma_dir(ring));
@@ -183,6 +182,9 @@ static int hnae_alloc_desc(struct hnae_ring *ring) · 26 unmodified lines
183/* fini ring, also free the buffer for the ring */182/* fini ring, also free the buffer for the ring */
184static void hnae_fini_ring(struct hnae_ring *ring)183static void hnae_fini_ring(struct hnae_ring *ring)
185{184{
185 if (is_rx_ring(ring))
186 hnae_free_buffers(ring);
187
186 hnae_free_desc(ring);188 hnae_free_desc(ring);
187 kfree(ring->desc_cb);189 kfree(ring->desc_cb);
188 ring->desc_cb = NULL;190 ring->desc_cb = NULL;
drivers/net/ethernet/hisilicon/hns/hnae.h+1−1
@@ -357,7 +357,7 @@ struct hnae_buf_ops { · 356 unmodified lines
357};357};
358 358
359struct hnae_queue {359struct hnae_queue {
360 void __iomem *io_base;360 u8 __iomem *io_base;
361 phys_addr_t phy_base;361 phys_addr_t phy_base;
362 struct hnae_ae_dev *dev; /* the device who use this queue */362 struct hnae_ae_dev *dev; /* the device who use this queue */
363 struct hnae_ring rx_ring ____cacheline_internodealigned_in_smp;363 struct hnae_ring rx_ring ____cacheline_internodealigned_in_smp;
drivers/net/ethernet/hisilicon/hns/hns_dsaf_mac.c+1−1
@@ -370,7 +370,7 @@ int hns_mac_clr_multicast(struct hns_mac_cb *mac_cb, int vfn) · 369 unmodified lines
370static void hns_mac_param_get(struct mac_params *param,370static void hns_mac_param_get(struct mac_params *param,
371 struct hns_mac_cb *mac_cb)371 struct hns_mac_cb *mac_cb)
372{372{
373 param->vaddr = (void *)mac_cb->vaddr;373 param->vaddr = mac_cb->vaddr;
374 param->mac_mode = hns_get_enet_interface(mac_cb);374 param->mac_mode = hns_get_enet_interface(mac_cb);
375 ether_addr_copy(param->addr, mac_cb->addr_entry_idx[0].addr);375 ether_addr_copy(param->addr, mac_cb->addr_entry_idx[0].addr);
376 param->mac_id = mac_cb->mac_id;376 param->mac_id = mac_cb->mac_id;
drivers/net/ethernet/hisilicon/hns/hns_dsaf_mac.h+2−2
@@ -187,7 +187,7 @@ struct mac_statistics { · 186 unmodified lines
187/*mac para struct ,mac get param from nic or dsaf when initialize*/187/*mac para struct ,mac get param from nic or dsaf when initialize*/
188struct mac_params {188struct mac_params {
189 char addr[ETH_ALEN];189 char addr[ETH_ALEN];
190 void *vaddr; /*virtual address*/190 u8 __iomem *vaddr; /*virtual address*/
191 struct device *dev;191 struct device *dev;
192 u8 mac_id;192 u8 mac_id;
193 /**< Ethernet operation mode (MAC-PHY interface and speed) */193 /**< Ethernet operation mode (MAC-PHY interface and speed) */
@@ -402,7 +402,7 @@ struct mac_driver { · 208 unmodified lines
402 enum mac_mode mac_mode;402 enum mac_mode mac_mode;
403 u8 mac_id;403 u8 mac_id;
404 struct hns_mac_cb *mac_cb;404 struct hns_mac_cb *mac_cb;
405 void __iomem *io_base;405 u8 __iomem *io_base;
406 unsigned int mac_en_flg;/*you'd better don't enable mac twice*/406 unsigned int mac_en_flg;/*you'd better don't enable mac twice*/
407 unsigned int virt_dev_num;407 unsigned int virt_dev_num;
408 struct device *dev;408 struct device *dev;
drivers/net/ethernet/hisilicon/hns/hns_dsaf_main.c+33−20
@@ -1602,8 +1602,6 @@ static void hns_dsaf_set_mac_key( · 1601 unmodified lines
1602 DSAF_TBL_TCAM_KEY_VLAN_S, vlan_id);1602 DSAF_TBL_TCAM_KEY_VLAN_S, vlan_id);
1603 dsaf_set_field(mac_key->low.bits.port_vlan, DSAF_TBL_TCAM_KEY_PORT_M,1603 dsaf_set_field(mac_key->low.bits.port_vlan, DSAF_TBL_TCAM_KEY_PORT_M,
1604 DSAF_TBL_TCAM_KEY_PORT_S, port);1604 DSAF_TBL_TCAM_KEY_PORT_S, port);
1605
1606 mac_key->low.bits.port_vlan = le16_to_cpu(mac_key->low.bits.port_vlan);
1607}1605}
1608 1606
1609/**1607/**
@@ -1663,8 +1661,8 @@ int hns_dsaf_set_mac_uc_entry( · 53 unmodified lines
1663 /* default config dvc to 0 */1661 /* default config dvc to 0 */
1664 mac_data.tbl_ucast_dvc = 0;1662 mac_data.tbl_ucast_dvc = 0;
1665 mac_data.tbl_ucast_out_port = mac_entry->port_num;1663 mac_data.tbl_ucast_out_port = mac_entry->port_num;
1666 tcam_data.tbl_tcam_data_high = cpu_to_le32(mac_key.high.val);1664 tcam_data.tbl_tcam_data_high = mac_key.high.val;
1667 tcam_data.tbl_tcam_data_low = cpu_to_le32(mac_key.low.val);1665 tcam_data.tbl_tcam_data_low = mac_key.low.val;
1668 1666
1669 hns_dsaf_tcam_uc_cfg(dsaf_dev, entry_index, &tcam_data, &mac_data);1667 hns_dsaf_tcam_uc_cfg(dsaf_dev, entry_index, &tcam_data, &mac_data);
1670 1668
@@ -1786,9 +1784,6 @@ int hns_dsaf_add_mac_mc_port(struct dsaf_device *dsaf_dev, · 115 unmodified lines
1786 0xff,1784 0xff,
1787 mc_mask);1785 mc_mask);
1788 1786
1789 mask_key.high.val = le32_to_cpu(mask_key.high.val);
1790 mask_key.low.val = le32_to_cpu(mask_key.low.val);
1791
1792 pmask_key = (struct dsaf_tbl_tcam_data *)(&mask_key);1787 pmask_key = (struct dsaf_tbl_tcam_data *)(&mask_key);
1793 }1788 }
1794 1789
@@ -1840,8 +1835,8 @@ int hns_dsaf_add_mac_mc_port(struct dsaf_device *dsaf_dev, · 45 unmodified lines
1840 dsaf_dev->ae_dev.name, mac_key.high.val,1835 dsaf_dev->ae_dev.name, mac_key.high.val,
1841 mac_key.low.val, entry_index);1836 mac_key.low.val, entry_index);
1842 1837
1843 tcam_data.tbl_tcam_data_high = cpu_to_le32(mac_key.high.val);1838 tcam_data.tbl_tcam_data_high = mac_key.high.val;
1844 tcam_data.tbl_tcam_data_low = cpu_to_le32(mac_key.low.val);1839 tcam_data.tbl_tcam_data_low = mac_key.low.val;
1845 1840
1846 /* config mc entry with mask */1841 /* config mc entry with mask */
1847 hns_dsaf_tcam_mc_cfg(dsaf_dev, entry_index, &tcam_data,1842 hns_dsaf_tcam_mc_cfg(dsaf_dev, entry_index, &tcam_data,
@@ -1956,9 +1951,6 @@ int hns_dsaf_del_mac_mc_port(struct dsaf_device *dsaf_dev, · 108 unmodified lines
1956 /* config key mask */1951 /* config key mask */
1957 hns_dsaf_set_mac_key(dsaf_dev, &mask_key, 0x00, 0xff, mc_mask);1952 hns_dsaf_set_mac_key(dsaf_dev, &mask_key, 0x00, 0xff, mc_mask);
1958 1953
1959 mask_key.high.val = le32_to_cpu(mask_key.high.val);
1960 mask_key.low.val = le32_to_cpu(mask_key.low.val);
1961
1962 pmask_key = (struct dsaf_tbl_tcam_data *)(&mask_key);1954 pmask_key = (struct dsaf_tbl_tcam_data *)(&mask_key);
1963 }1955 }
1964 1956
@@ -2012,8 +2004,8 @@ int hns_dsaf_del_mac_mc_port(struct dsaf_device *dsaf_dev, · 47 unmodified lines
2012 soft_mac_entry += entry_index;2004 soft_mac_entry += entry_index;
2013 soft_mac_entry->index = DSAF_INVALID_ENTRY_IDX;2005 soft_mac_entry->index = DSAF_INVALID_ENTRY_IDX;
2014 } else { /* not zero, just del port, update */2006 } else { /* not zero, just del port, update */
2015 tcam_data.tbl_tcam_data_high = cpu_to_le32(mac_key.high.val);2007 tcam_data.tbl_tcam_data_high = mac_key.high.val;
2016 tcam_data.tbl_tcam_data_low = cpu_to_le32(mac_key.low.val);2008 tcam_data.tbl_tcam_data_low = mac_key.low.val;
2017 2009
2018 hns_dsaf_tcam_mc_cfg(dsaf_dev, entry_index,2010 hns_dsaf_tcam_mc_cfg(dsaf_dev, entry_index,
2019 &tcam_data,2011 &tcam_data,
@@ -2750,6 +2742,17 @@ int hns_dsaf_get_regs_count(void) · 730 unmodified lines
2750 return DSAF_DUMP_REGS_NUM;2742 return DSAF_DUMP_REGS_NUM;
2751}2743}
2752 2744
2745static int hns_dsaf_get_port_id(u8 port)
2746{
2747 if (port < DSAF_SERVICE_NW_NUM)
2748 return port;
2749
2750 if (port >= DSAF_BASE_INNER_PORT_NUM)
2751 return port - DSAF_BASE_INNER_PORT_NUM + DSAF_SERVICE_NW_NUM;
2752
2753 return -EINVAL;
2754}
2755
2753static void set_promisc_tcam_enable(struct dsaf_device *dsaf_dev, u32 port)2756static void set_promisc_tcam_enable(struct dsaf_device *dsaf_dev, u32 port)
2754{2757{
2755 struct dsaf_tbl_tcam_ucast_cfg tbl_tcam_ucast = {0, 1, 0, 0, 0x80};2758 struct dsaf_tbl_tcam_ucast_cfg tbl_tcam_ucast = {0, 1, 0, 0, 0x80};
@@ -2815,23 +2818,33 @@ static void set_promisc_tcam_enable(struct dsaf_device *dsaf_dev, u32 port) · 59 unmodified lines
2815 memset(&temp_key, 0x0, sizeof(temp_key));2818 memset(&temp_key, 0x0, sizeof(temp_key));
2816 mask_entry.addr[0] = 0x01;2819 mask_entry.addr[0] = 0x01;
2817 hns_dsaf_set_mac_key(dsaf_dev, &mask_key, mask_entry.in_vlan_id,2820 hns_dsaf_set_mac_key(dsaf_dev, &mask_key, mask_entry.in_vlan_id,
2818 port, mask_entry.addr);2821 0xf, mask_entry.addr);
2819 tbl_tcam_mcast.tbl_mcast_item_vld = 1;2822 tbl_tcam_mcast.tbl_mcast_item_vld = 1;
2820 tbl_tcam_mcast.tbl_mcast_old_en = 0;2823 tbl_tcam_mcast.tbl_mcast_old_en = 0;
2821 2824
2822 if (port < DSAF_SERVICE_NW_NUM) {2825 /* set MAC port to handle multicast */
2823 mskid = port;2826 mskid = hns_dsaf_get_port_id(port);
2824 } else if (port >= DSAF_BASE_INNER_PORT_NUM) {2827 if (mskid == -EINVAL) {
2825 mskid = port - DSAF_BASE_INNER_PORT_NUM + DSAF_SERVICE_NW_NUM;
2826 } else {
2827 dev_err(dsaf_dev->dev, "%s,pnum(%d)error,key(%#x:%#x)\n",2828 dev_err(dsaf_dev->dev, "%s,pnum(%d)error,key(%#x:%#x)\n",
2828 dsaf_dev->ae_dev.name, port,2829 dsaf_dev->ae_dev.name, port,
2829 mask_key.high.val, mask_key.low.val);2830 mask_key.high.val, mask_key.low.val);
2830 return;2831 return;
2831 }2832 }
2833 dsaf_set_bit(tbl_tcam_mcast.tbl_mcast_port_msk[mskid / 32],
2834 mskid % 32, 1);
2832 2835
2836 /* set pool bit map to handle multicast */
2837 mskid = hns_dsaf_get_port_id(port_num);
2838 if (mskid == -EINVAL) {
2839 dev_err(dsaf_dev->dev,
2840 "%s, pool bit map pnum(%d)error,key(%#x:%#x)\n",
2841 dsaf_dev->ae_dev.name, port_num,
2842 mask_key.high.val, mask_key.low.val);
2843 return;
2844 }
2833 dsaf_set_bit(tbl_tcam_mcast.tbl_mcast_port_msk[mskid / 32],2845 dsaf_set_bit(tbl_tcam_mcast.tbl_mcast_port_msk[mskid / 32],
2834 mskid % 32, 1);2846 mskid % 32, 1);
2847
2835 memcpy(&temp_key, &mask_key, sizeof(mask_key));2848 memcpy(&temp_key, &mask_key, sizeof(mask_key));
2836 hns_dsaf_tcam_mc_cfg_vague(dsaf_dev, entry_index, &tbl_tcam_data_mc,2849 hns_dsaf_tcam_mc_cfg_vague(dsaf_dev, entry_index, &tbl_tcam_data_mc,
2837 (struct dsaf_tbl_tcam_data *)(&mask_key),2850 (struct dsaf_tbl_tcam_data *)(&mask_key),
drivers/net/ethernet/hisilicon/hns/hns_dsaf_main.h+2−0
@@ -467,4 +467,6 @@ int hns_dsaf_clr_mac_mc_port(struct dsaf_device *dsaf_dev, · 466 unmodified lines
467 u8 mac_id, u8 port_num);467 u8 mac_id, u8 port_num);
468int hns_dsaf_wait_pkt_clean(struct dsaf_device *dsaf_dev, int port);468int hns_dsaf_wait_pkt_clean(struct dsaf_device *dsaf_dev, int port);
469 469
470int hns_dsaf_roce_reset(struct fwnode_handle *dsaf_fwnode, bool dereset);
471
470#endif /* __HNS_DSAF_MAIN_H__ */472#endif /* __HNS_DSAF_MAIN_H__ */
drivers/net/ethernet/hisilicon/hns/hns_dsaf_misc.c+1−1
@@ -670,7 +670,7 @@ static int hns_mac_config_sds_loopback(struct hns_mac_cb *mac_cb, bool en) · 669 unmodified lines
670 dsaf_set_field(origin, 1ull << 10, 10, en);670 dsaf_set_field(origin, 1ull << 10, 10, en);
671 dsaf_write_syscon(mac_cb->serdes_ctrl, reg_offset, origin);671 dsaf_write_syscon(mac_cb->serdes_ctrl, reg_offset, origin);
672 } else {672 } else {
673 u8 *base_addr = (u8 *)mac_cb->serdes_vaddr +673 u8 __iomem *base_addr = mac_cb->serdes_vaddr +
674 (mac_cb->mac_id <= 3 ? 0x00280000 : 0x00200000);674 (mac_cb->mac_id <= 3 ? 0x00280000 : 0x00200000);
675 dsaf_set_reg_field(base_addr, reg_offset, 1ull << 10, 10, en);675 dsaf_set_reg_field(base_addr, reg_offset, 1ull << 10, 10, en);
676 }676 }
drivers/net/ethernet/hisilicon/hns/hns_dsaf_ppe.c+3−3
@@ -61,7 +61,7 @@ void hns_ppe_set_indir_table(struct hns_ppe_cb *ppe_cb, · 60 unmodified lines
61 }61 }
62}62}
63 63
64static void __iomem *64static u8 __iomem *
65hns_ppe_common_get_ioaddr(struct ppe_common_cb *ppe_common)65hns_ppe_common_get_ioaddr(struct ppe_common_cb *ppe_common)
66{66{
67 return ppe_common->dsaf_dev->ppe_base + PPE_COMMON_REG_OFFSET;67 return ppe_common->dsaf_dev->ppe_base + PPE_COMMON_REG_OFFSET;
@@ -111,8 +111,8 @@ hns_ppe_common_free_cfg(struct dsaf_device *dsaf_dev, u32 comm_index) · 43 unmodified lines
111 dsaf_dev->ppe_common[comm_index] = NULL;111 dsaf_dev->ppe_common[comm_index] = NULL;
112}112}
113 113
114static void __iomem *hns_ppe_get_iobase(struct ppe_common_cb *ppe_common,114static u8 __iomem *hns_ppe_get_iobase(struct ppe_common_cb *ppe_common,
115 int ppe_idx)115 int ppe_idx)
116{116{
117 return ppe_common->dsaf_dev->ppe_base + ppe_idx * PPE_REG_OFFSET;117 return ppe_common->dsaf_dev->ppe_base + ppe_idx * PPE_REG_OFFSET;
118}118}
drivers/net/ethernet/hisilicon/hns/hns_dsaf_ppe.h+2−2
@@ -80,7 +80,7 @@ struct hns_ppe_cb { · 79 unmodified lines
80 struct hns_ppe_hw_stats hw_stats;80 struct hns_ppe_hw_stats hw_stats;
81 81
82 u8 index; /* index in a ppe common device */82 u8 index; /* index in a ppe common device */
83 void __iomem *io_base;83 u8 __iomem *io_base;
84 int virq;84 int virq;
85 u32 rss_indir_table[HNS_PPEV2_RSS_IND_TBL_SIZE]; /*shadow indir tab */85 u32 rss_indir_table[HNS_PPEV2_RSS_IND_TBL_SIZE]; /*shadow indir tab */
86 u32 rss_key[HNS_PPEV2_RSS_KEY_NUM]; /* rss hash key */86 u32 rss_key[HNS_PPEV2_RSS_KEY_NUM]; /* rss hash key */
@@ -89,7 +89,7 @@ struct hns_ppe_cb { · 2 unmodified lines
89struct ppe_common_cb {89struct ppe_common_cb {
90 struct device *dev;90 struct device *dev;
91 struct dsaf_device *dsaf_dev;91 struct dsaf_device *dsaf_dev;
92 void __iomem *io_base;92 u8 __iomem *io_base;
93 93
94 enum ppe_common_mode ppe_mode;94 enum ppe_common_mode ppe_mode;
95 95
drivers/net/ethernet/hisilicon/hns/hns_dsaf_rcb.c+2−2
@@ -458,7 +458,7 @@ static void hns_rcb_ring_get_cfg(struct hnae_queue *q, int ring_type) · 457 unmodified lines
458 mdnum_ppkt = HNS_RCB_RING_MAX_BD_PER_PKT;458 mdnum_ppkt = HNS_RCB_RING_MAX_BD_PER_PKT;
459 } else {459 } else {
460 ring = &q->tx_ring;460 ring = &q->tx_ring;
461 ring->io_base = (u8 __iomem *)ring_pair_cb->q.io_base +461 ring->io_base = ring_pair_cb->q.io_base +
462 HNS_RCB_TX_REG_OFFSET;462 HNS_RCB_TX_REG_OFFSET;
463 irq_idx = HNS_RCB_IRQ_IDX_TX;463 irq_idx = HNS_RCB_IRQ_IDX_TX;
464 mdnum_ppkt = is_ver1 ? HNS_RCB_RING_MAX_TXBD_PER_PKT :464 mdnum_ppkt = is_ver1 ? HNS_RCB_RING_MAX_TXBD_PER_PKT :
@@ -764,7 +764,7 @@ static int hns_rcb_get_ring_num(struct dsaf_device *dsaf_dev) · 299 unmodified lines
764 }764 }
765}765}
766 766
767static void __iomem *hns_rcb_common_get_vaddr(struct rcb_common_cb *rcb_common)767static u8 __iomem *hns_rcb_common_get_vaddr(struct rcb_common_cb *rcb_common)
768{768{
769 struct dsaf_device *dsaf_dev = rcb_common->dsaf_dev;769 struct dsaf_device *dsaf_dev = rcb_common->dsaf_dev;
770 770
drivers/net/ethernet/hisilicon/hns/hns_dsaf_reg.h+6−6
@@ -1018,7 +1018,7 @@ · 1017 unmodified lines
1018#define XGMAC_PAUSE_CTL_RSP_MODE_B 21018#define XGMAC_PAUSE_CTL_RSP_MODE_B 2
1019#define XGMAC_PAUSE_CTL_TX_XOFF_B 31019#define XGMAC_PAUSE_CTL_TX_XOFF_B 3
1020 1020
1021static inline void dsaf_write_reg(void __iomem *base, u32 reg, u32 value)1021static inline void dsaf_write_reg(u8 __iomem *base, u32 reg, u32 value)
1022{1022{
1023 writel(value, base + reg);1023 writel(value, base + reg);
1024}1024}
@@ -1053,7 +1053,7 @@ static inline int dsaf_read_syscon(struct regmap *base, u32 reg, u32 *val) · 28 unmodified lines
1053#define dsaf_set_bit(origin, shift, val) \1053#define dsaf_set_bit(origin, shift, val) \
1054 dsaf_set_field((origin), (1ull << (shift)), (shift), (val))1054 dsaf_set_field((origin), (1ull << (shift)), (shift), (val))
1055 1055
1056static inline void dsaf_set_reg_field(void __iomem *base, u32 reg, u32 mask,1056static inline void dsaf_set_reg_field(u8 __iomem *base, u32 reg, u32 mask,
1057 u32 shift, u32 val)1057 u32 shift, u32 val)
1058{1058{
1059 u32 origin = dsaf_read_reg(base, reg);1059 u32 origin = dsaf_read_reg(base, reg);
@@ -1073,7 +1073,7 @@ static inline void dsaf_set_reg_field(void __iomem *base, u32 reg, u32 mask, · 13 unmodified lines
1073#define dsaf_get_bit(origin, shift) \1073#define dsaf_get_bit(origin, shift) \
1074 dsaf_get_field((origin), (1ull << (shift)), (shift))1074 dsaf_get_field((origin), (1ull << (shift)), (shift))
1075 1075
1076static inline u32 dsaf_get_reg_field(void __iomem *base, u32 reg, u32 mask,1076static inline u32 dsaf_get_reg_field(u8 __iomem *base, u32 reg, u32 mask,
1077 u32 shift)1077 u32 shift)
1078{1078{
1079 u32 origin;1079 u32 origin;
@@ -1089,11 +1089,11 @@ static inline u32 dsaf_get_reg_field(void __iomem *base, u32 reg, u32 mask, · 9 unmodified lines
1089 dsaf_get_reg_field((dev)->io_base, (reg), (1ull << (bit)), (bit))1089 dsaf_get_reg_field((dev)->io_base, (reg), (1ull << (bit)), (bit))
1090 1090
1091#define dsaf_write_b(addr, data)\1091#define dsaf_write_b(addr, data)\
1092 writeb((data), (__iomem unsigned char *)(addr))1092 writeb((data), (__iomem u8 *)(addr))
1093#define dsaf_read_b(addr)\1093#define dsaf_read_b(addr)\
1094 readb((__iomem unsigned char *)(addr))1094 readb((__iomem u8 *)(addr))
1095 1095
1096#define hns_mac_reg_read64(drv, offset) \1096#define hns_mac_reg_read64(drv, offset) \
1097 readq((__iomem void *)(((u8 *)(drv)->io_base + 0xc00 + (offset))))1097 readq((__iomem void *)(((drv)->io_base + 0xc00 + (offset))))
1098 1098
1099#endif /* _DSAF_REG_H */1099#endif /* _DSAF_REG_H */
drivers/net/ethernet/hisilicon/hns/hns_dsaf_xgmac.c+1−1
@@ -129,7 +129,7 @@ static void hns_xgmac_lf_rf_control_init(struct mac_driver *mac_drv) · 128 unmodified lines
129 dsaf_set_bit(val, XGMAC_UNIDIR_EN_B, 0);129 dsaf_set_bit(val, XGMAC_UNIDIR_EN_B, 0);
130 dsaf_set_bit(val, XGMAC_RF_TX_EN_B, 1);130 dsaf_set_bit(val, XGMAC_RF_TX_EN_B, 1);
131 dsaf_set_field(val, XGMAC_LF_RF_INSERT_M, XGMAC_LF_RF_INSERT_S, 0);131 dsaf_set_field(val, XGMAC_LF_RF_INSERT_M, XGMAC_LF_RF_INSERT_S, 0);
132 dsaf_write_reg(mac_drv, XGMAC_MAC_TX_LF_RF_CONTROL_REG, val);132 dsaf_write_dev(mac_drv, XGMAC_MAC_TX_LF_RF_CONTROL_REG, val);
133}133}
134 134
135/**135/**
drivers/net/ethernet/hisilicon/hns/hns_enet.c+5−7
@@ -29,9 +29,6 @@ · 28 unmodified lines
29 29
30#define SERVICE_TIMER_HZ (1 * HZ)30#define SERVICE_TIMER_HZ (1 * HZ)
31 31
32#define NIC_TX_CLEAN_MAX_NUM 256
33#define NIC_RX_CLEAN_MAX_NUM 64
34
35#define RCB_IRQ_NOT_INITED 032#define RCB_IRQ_NOT_INITED 0
36#define RCB_IRQ_INITED 133#define RCB_IRQ_INITED 1
37#define HNS_BUFFER_SIZE_2048 204834#define HNS_BUFFER_SIZE_2048 2048
@@ -376,8 +373,6 @@ netdev_tx_t hns_nic_net_xmit_hw(struct net_device *ndev, · 338 unmodified lines
376 wmb(); /* commit all data before submit */373 wmb(); /* commit all data before submit */
377 assert(skb->queue_mapping < priv->ae_handle->q_num);374 assert(skb->queue_mapping < priv->ae_handle->q_num);
378 hnae_queue_xmit(priv->ae_handle->qs[skb->queue_mapping], buf_num);375 hnae_queue_xmit(priv->ae_handle->qs[skb->queue_mapping], buf_num);
379 ring->stats.tx_pkts++;
380 ring->stats.tx_bytes += skb->len;
381 376
382 return NETDEV_TX_OK;377 return NETDEV_TX_OK;
383 378
@@ -999,6 +994,9 @@ static int hns_nic_tx_poll_one(struct hns_nic_ring_data *ring_data, · 615 unmodified lines
999 /* issue prefetch for next Tx descriptor */994 /* issue prefetch for next Tx descriptor */
1000 prefetch(&ring->desc_cb[ring->next_to_clean]);995 prefetch(&ring->desc_cb[ring->next_to_clean]);
1001 }996 }
997 /* update tx ring statistics. */
998 ring->stats.tx_pkts += pkts;
999 ring->stats.tx_bytes += bytes;
1002 1000
1003 NETIF_TX_UNLOCK(ring);1001 NETIF_TX_UNLOCK(ring);
1004 1002
@@ -2152,7 +2150,7 @@ static int hns_nic_init_ring_data(struct hns_nic_priv *priv) · 1147 unmodified lines
2152 hns_nic_tx_fini_pro_v2;2150 hns_nic_tx_fini_pro_v2;
2153 2151
2154 netif_napi_add(priv->netdev, &rd->napi,2152 netif_napi_add(priv->netdev, &rd->napi,
2155 hns_nic_common_poll, NIC_TX_CLEAN_MAX_NUM);2153 hns_nic_common_poll, NAPI_POLL_WEIGHT);
2156 rd->ring->irq_init_flag = RCB_IRQ_NOT_INITED;2154 rd->ring->irq_init_flag = RCB_IRQ_NOT_INITED;
2157 }2155 }
2158 for (i = h->q_num; i < h->q_num * 2; i++) {2156 for (i = h->q_num; i < h->q_num * 2; i++) {
@@ -2165,7 +2163,7 @@ static int hns_nic_init_ring_data(struct hns_nic_priv *priv) · 6 unmodified lines
2165 hns_nic_rx_fini_pro_v2;2163 hns_nic_rx_fini_pro_v2;
2166 2164
2167 netif_napi_add(priv->netdev, &rd->napi,2165 netif_napi_add(priv->netdev, &rd->napi,
2168 hns_nic_common_poll, NIC_RX_CLEAN_MAX_NUM);2166 hns_nic_common_poll, NAPI_POLL_WEIGHT);
2169 rd->ring->irq_init_flag = RCB_IRQ_NOT_INITED;2167 rd->ring->irq_init_flag = RCB_IRQ_NOT_INITED;
2170 }2168 }
2171 2169
drivers/net/ethernet/hisilicon/hns3/hns3pf/Makefile+1−1
@@ -3,7 +3,7 @@ · 2 unmodified lines
3# Makefile for the HISILICON network device drivers.3# Makefile for the HISILICON network device drivers.
4#4#
5 5
6ccflags-y := -Idrivers/net/ethernet/hisilicon/hns36ccflags-y := -I $(srctree)/drivers/net/ethernet/hisilicon/hns3
7 7
8obj-$(CONFIG_HNS3_HCLGE) += hclge.o8obj-$(CONFIG_HNS3_HCLGE) += hclge.o
9hclge-objs = hclge_main.o hclge_cmd.o hclge_mdio.o hclge_tm.o hclge_mbx.o hclge_err.o hclge_debugfs.o9hclge-objs = hclge_main.o hclge_cmd.o hclge_mdio.o hclge_tm.o hclge_mbx.o hclge_err.o hclge_debugfs.o
drivers/net/ethernet/hisilicon/hns3/hns3vf/Makefile+1−1
@@ -3,7 +3,7 @@ · 2 unmodified lines
3# Makefile for the HISILICON network device drivers.3# Makefile for the HISILICON network device drivers.
4#4#
5 5
6ccflags-y := -Idrivers/net/ethernet/hisilicon/hns36ccflags-y := -I $(srctree)/drivers/net/ethernet/hisilicon/hns3
7 7
8obj-$(CONFIG_HNS3_HCLGEVF) += hclgevf.o8obj-$(CONFIG_HNS3_HCLGEVF) += hclgevf.o
9hclgevf-objs = hclgevf_main.o hclgevf_cmd.o hclgevf_mbx.o9hclgevf-objs = hclgevf_main.o hclgevf_cmd.o hclgevf_mbx.o
drivers/net/ethernet/hisilicon/hns_mdio.c+7−11
@@ -39,7 +39,7 @@ struct hns_mdio_sc_reg { · 38 unmodified lines
39};39};
40 40
41struct hns_mdio_device {41struct hns_mdio_device {
42 void *vbase; /* mdio reg base address */42 u8 __iomem *vbase; /* mdio reg base address */
43 struct regmap *subctrl_vbase;43 struct regmap *subctrl_vbase;
44 struct hns_mdio_sc_reg sc_reg;44 struct hns_mdio_sc_reg sc_reg;
45};45};
@@ -96,21 +96,17 @@ enum mdio_c45_op_seq { · 50 unmodified lines
96#define MDIO_SC_CLK_ST 0x531C96#define MDIO_SC_CLK_ST 0x531C
97#define MDIO_SC_RESET_ST 0x5A1C97#define MDIO_SC_RESET_ST 0x5A1C
98 98
99static void mdio_write_reg(void *base, u32 reg, u32 value)99static void mdio_write_reg(u8 __iomem *base, u32 reg, u32 value)
100{100{
101 u8 __iomem *reg_addr = (u8 __iomem *)base;101 writel_relaxed(value, base + reg);
102
103 writel_relaxed(value, reg_addr + reg);
104}102}
105 103
106#define MDIO_WRITE_REG(a, reg, value) \104#define MDIO_WRITE_REG(a, reg, value) \
107 mdio_write_reg((a)->vbase, (reg), (value))105 mdio_write_reg((a)->vbase, (reg), (value))
108 106
109static u32 mdio_read_reg(void *base, u32 reg)107static u32 mdio_read_reg(u8 __iomem *base, u32 reg)
110{108{
111 u8 __iomem *reg_addr = (u8 __iomem *)base;109 return readl_relaxed(base + reg);
112
113 return readl_relaxed(reg_addr + reg);
114}110}
115 111
116#define mdio_set_field(origin, mask, shift, val) \112#define mdio_set_field(origin, mask, shift, val) \
@@ -121,7 +117,7 @@ static u32 mdio_read_reg(void *base, u32 reg) · 4 unmodified lines
121 117
122#define mdio_get_field(origin, mask, shift) (((origin) >> (shift)) & (mask))118#define mdio_get_field(origin, mask, shift) (((origin) >> (shift)) & (mask))
123 119
124static void mdio_set_reg_field(void *base, u32 reg, u32 mask, u32 shift,120static void mdio_set_reg_field(u8 __iomem *base, u32 reg, u32 mask, u32 shift,
125 u32 val)121 u32 val)
126{122{
127 u32 origin = mdio_read_reg(base, reg);123 u32 origin = mdio_read_reg(base, reg);
@@ -133,7 +129,7 @@ static void mdio_set_reg_field(void *base, u32 reg, u32 mask, u32 shift, · 5 unmodified lines
133#define MDIO_SET_REG_FIELD(dev, reg, mask, shift, val) \129#define MDIO_SET_REG_FIELD(dev, reg, mask, shift, val) \
134 mdio_set_reg_field((dev)->vbase, (reg), (mask), (shift), (val))130 mdio_set_reg_field((dev)->vbase, (reg), (mask), (shift), (val))
135 131
136static u32 mdio_get_reg_field(void *base, u32 reg, u32 mask, u32 shift)132static u32 mdio_get_reg_field(u8 __iomem *base, u32 reg, u32 mask, u32 shift)
137{133{
138 u32 origin;134 u32 origin;
139 135
drivers/net/ethernet/ibm/ibmvnic.c+28−9
@@ -1885,6 +1885,7 @@ static int do_hard_reset(struct ibmvnic_adapter *adapter, · 1884 unmodified lines
1885 */1885 */
1886 adapter->state = VNIC_PROBED;1886 adapter->state = VNIC_PROBED;
1887 1887
1888 reinit_completion(&adapter->init_done);
1888 rc = init_crq_queue(adapter);1889 rc = init_crq_queue(adapter);
1889 if (rc) {1890 if (rc) {
1890 netdev_err(adapter->netdev,1891 netdev_err(adapter->netdev,
@@ -3761,6 +3762,7 @@ static void handle_query_ip_offload_rsp(struct ibmvnic_adapter *adapter) · 1870 unmodified lines
3761{3762{
3762 struct device *dev = &adapter->vdev->dev;3763 struct device *dev = &adapter->vdev->dev;
3763 struct ibmvnic_query_ip_offload_buffer *buf = &adapter->ip_offload_buf;3764 struct ibmvnic_query_ip_offload_buffer *buf = &adapter->ip_offload_buf;
3765 netdev_features_t old_hw_features = 0;
3764 union ibmvnic_crq crq;3766 union ibmvnic_crq crq;
3765 int i;3767 int i;
3766 3768
@@ -3836,24 +3838,41 @@ static void handle_query_ip_offload_rsp(struct ibmvnic_adapter *adapter) · 69 unmodified lines
3836 adapter->ip_offload_ctrl.large_rx_ipv4 = 0;3838 adapter->ip_offload_ctrl.large_rx_ipv4 = 0;
3837 adapter->ip_offload_ctrl.large_rx_ipv6 = 0;3839 adapter->ip_offload_ctrl.large_rx_ipv6 = 0;
3838 3840
3839 adapter->netdev->features = NETIF_F_SG | NETIF_F_GSO;3841 if (adapter->state != VNIC_PROBING) {
3842 old_hw_features = adapter->netdev->hw_features;
3843 adapter->netdev->hw_features = 0;
3844 }
3845
3846 adapter->netdev->hw_features = NETIF_F_SG | NETIF_F_GSO | NETIF_F_GRO;
3840 3847
3841 if (buf->tcp_ipv4_chksum || buf->udp_ipv4_chksum)3848 if (buf->tcp_ipv4_chksum || buf->udp_ipv4_chksum)
3842 adapter->netdev->features |= NETIF_F_IP_CSUM;3849 adapter->netdev->hw_features |= NETIF_F_IP_CSUM;
3843 3850
3844 if (buf->tcp_ipv6_chksum || buf->udp_ipv6_chksum)3851 if (buf->tcp_ipv6_chksum || buf->udp_ipv6_chksum)
3845 adapter->netdev->features |= NETIF_F_IPV6_CSUM;3852 adapter->netdev->hw_features |= NETIF_F_IPV6_CSUM;
3846 3853
3847 if ((adapter->netdev->features &3854 if ((adapter->netdev->features &
3848 (NETIF_F_IP_CSUM | NETIF_F_IPV6_CSUM)))3855 (NETIF_F_IP_CSUM | NETIF_F_IPV6_CSUM)))
3849 adapter->netdev->features |= NETIF_F_RXCSUM;3856 adapter->netdev->hw_features |= NETIF_F_RXCSUM;
3850 3857
3851 if (buf->large_tx_ipv4)3858 if (buf->large_tx_ipv4)
3852 adapter->netdev->features |= NETIF_F_TSO;3859 adapter->netdev->hw_features |= NETIF_F_TSO;
3853 if (buf->large_tx_ipv6)3860 if (buf->large_tx_ipv6)
3854 adapter->netdev->features |= NETIF_F_TSO6;3861 adapter->netdev->hw_features |= NETIF_F_TSO6;
3862
3863 if (adapter->state == VNIC_PROBING) {
3864 adapter->netdev->features |= adapter->netdev->hw_features;
3865 } else if (old_hw_features != adapter->netdev->hw_features) {
3866 netdev_features_t tmp = 0;
3855 3867
3856 adapter->netdev->hw_features |= adapter->netdev->features;3868 /* disable features no longer supported */
3869 adapter->netdev->features &= adapter->netdev->hw_features;
3870 /* turn on features now supported if previously enabled */
3871 tmp = (old_hw_features ^ adapter->netdev->hw_features) &
3872 adapter->netdev->hw_features;
3873 adapter->netdev->features |=
3874 tmp & adapter->netdev->wanted_features;
3875 }
3857 3876
3858 memset(&crq, 0, sizeof(crq));3877 memset(&crq, 0, sizeof(crq));
3859 crq.control_ip_offload.first = IBMVNIC_CRQ_CMD;3878 crq.control_ip_offload.first = IBMVNIC_CRQ_CMD;
@@ -4625,7 +4644,7 @@ static int ibmvnic_reset_init(struct ibmvnic_adapter *adapter) · 765 unmodified lines
4625 old_num_rx_queues = adapter->req_rx_queues;4644 old_num_rx_queues = adapter->req_rx_queues;
4626 old_num_tx_queues = adapter->req_tx_queues;4645 old_num_tx_queues = adapter->req_tx_queues;
4627 4646
4628 init_completion(&adapter->init_done);4647 reinit_completion(&adapter->init_done);
4629 adapter->init_done_rc = 0;4648 adapter->init_done_rc = 0;
4630 ibmvnic_send_crq_init(adapter);4649 ibmvnic_send_crq_init(adapter);
4631 if (!wait_for_completion_timeout(&adapter->init_done, timeout)) {4650 if (!wait_for_completion_timeout(&adapter->init_done, timeout)) {
@@ -4680,7 +4699,6 @@ static int ibmvnic_init(struct ibmvnic_adapter *adapter) · 48 unmodified lines
4680 4699
4681 adapter->from_passive_init = false;4700 adapter->from_passive_init = false;
4682 4701
4683 init_completion(&adapter->init_done);
4684 adapter->init_done_rc = 0;4702 adapter->init_done_rc = 0;
4685 ibmvnic_send_crq_init(adapter);4703 ibmvnic_send_crq_init(adapter);
4686 if (!wait_for_completion_timeout(&adapter->init_done, timeout)) {4704 if (!wait_for_completion_timeout(&adapter->init_done, timeout)) {
@@ -4759,6 +4777,7 @@ static int ibmvnic_probe(struct vio_dev *dev, const struct vio_device_id *id) · 72 unmodified lines
4759 INIT_WORK(&adapter->ibmvnic_reset, __ibmvnic_reset);4777 INIT_WORK(&adapter->ibmvnic_reset, __ibmvnic_reset);
4760 INIT_LIST_HEAD(&adapter->rwi_list);4778 INIT_LIST_HEAD(&adapter->rwi_list);
4761 spin_lock_init(&adapter->rwi_lock);4779 spin_lock_init(&adapter->rwi_lock);
4780 init_completion(&adapter->init_done);
4762 adapter->resetting = false;4781 adapter->resetting = false;
4763 4782
4764 adapter->mac_change_pending = false;4783 adapter->mac_change_pending = false;
drivers/net/ethernet/intel/fm10k/fm10k_main.c+2−0
@@ -41,6 +41,8 @@ static int __init fm10k_init_module(void) · 40 unmodified lines
41 /* create driver workqueue */41 /* create driver workqueue */
42 fm10k_workqueue = alloc_workqueue("%s", WQ_MEM_RECLAIM, 0,42 fm10k_workqueue = alloc_workqueue("%s", WQ_MEM_RECLAIM, 0,
43 fm10k_driver_name);43 fm10k_driver_name);
44 if (!fm10k_workqueue)
45 return -ENOMEM;
44 46
45 fm10k_dbg_init();47 fm10k_dbg_init();
46 48
drivers/net/ethernet/intel/i40e/i40e.h+2−14
@@ -790,6 +790,8 @@ struct i40e_vsi { · 789 unmodified lines
790 790
791 /* VSI specific handlers */791 /* VSI specific handlers */
792 irqreturn_t (*irq_handler)(int irq, void *data);792 irqreturn_t (*irq_handler)(int irq, void *data);
793
794 unsigned long *af_xdp_zc_qps; /* tracks AF_XDP ZC enabled qps */
793} ____cacheline_internodealigned_in_smp;795} ____cacheline_internodealigned_in_smp;
794 796
795struct i40e_netdev_priv {797struct i40e_netdev_priv {
@@ -1096,20 +1098,6 @@ static inline bool i40e_enabled_xdp_vsi(struct i40e_vsi *vsi) · 300 unmodified lines
1096 return !!vsi->xdp_prog;1098 return !!vsi->xdp_prog;
1097}1099}
1098 1100
1099static inline struct xdp_umem *i40e_xsk_umem(struct i40e_ring *ring)
1100{
1101 bool xdp_on = i40e_enabled_xdp_vsi(ring->vsi);
1102 int qid = ring->queue_index;
1103
1104 if (ring_is_xdp(ring))
1105 qid -= ring->vsi->alloc_queue_pairs;
1106
1107 if (!xdp_on)
1108 return NULL;
1109
1110 return xdp_get_umem_from_qid(ring->vsi->netdev, qid);
1111}
1112
1113int i40e_create_queue_channel(struct i40e_vsi *vsi, struct i40e_channel *ch);1101int i40e_create_queue_channel(struct i40e_vsi *vsi, struct i40e_channel *ch);
1114int i40e_set_bw_limit(struct i40e_vsi *vsi, u16 seid, u64 max_tx_rate);1102int i40e_set_bw_limit(struct i40e_vsi *vsi, u16 seid, u64 max_tx_rate);
1115int i40e_add_del_cloud_filter(struct i40e_vsi *vsi,1103int i40e_add_del_cloud_filter(struct i40e_vsi *vsi,
drivers/net/ethernet/intel/i40e/i40e_ethtool.c+1−2
@@ -2573,8 +2573,7 @@ static int i40e_set_wol(struct net_device *netdev, struct ethtool_wolinfo *wol) · 2572 unmodified lines
2573 return -EOPNOTSUPP;2573 return -EOPNOTSUPP;
2574 2574
2575 /* only magic packet is supported */2575 /* only magic packet is supported */
2576 if (wol->wolopts && (wol->wolopts != WAKE_MAGIC)2576 if (wol->wolopts & ~WAKE_MAGIC)
2577 | (wol->wolopts != WAKE_FILTER))
2578 return -EOPNOTSUPP;2577 return -EOPNOTSUPP;
2579 2578
2580 /* is this a new value? */2579 /* is this a new value? */
drivers/net/ethernet/intel/i40e/i40e_main.c+28−0
@@ -3063,6 +3063,26 @@ static void i40e_config_xps_tx_ring(struct i40e_ring *ring) · 3062 unmodified lines
3063 ring->queue_index);3063 ring->queue_index);
3064}3064}
3065 3065
3066/**
3067 * i40e_xsk_umem - Retrieve the AF_XDP ZC if XDP and ZC is enabled
3068 * @ring: The Tx or Rx ring
3069 *
3070 * Returns the UMEM or NULL.
3071 **/
3072static struct xdp_umem *i40e_xsk_umem(struct i40e_ring *ring)
3073{
3074 bool xdp_on = i40e_enabled_xdp_vsi(ring->vsi);
3075 int qid = ring->queue_index;
3076
3077 if (ring_is_xdp(ring))
3078 qid -= ring->vsi->alloc_queue_pairs;
3079
3080 if (!xdp_on || !test_bit(qid, ring->vsi->af_xdp_zc_qps))
3081 return NULL;
3082
3083 return xdp_get_umem_from_qid(ring->vsi->netdev, qid);
3084}
3085
3066/**3086/**
3067 * i40e_configure_tx_ring - Configure a transmit ring context and rest3087 * i40e_configure_tx_ring - Configure a transmit ring context and rest
3068 * @ring: The Tx ring to configure3088 * @ring: The Tx ring to configure
@@ -10064,6 +10084,12 @@ static int i40e_vsi_mem_alloc(struct i40e_pf *pf, enum i40e_vsi_type type) · 6995 unmodified lines
10064 hash_init(vsi->mac_filter_hash);10084 hash_init(vsi->mac_filter_hash);
10065 vsi->irqs_ready = false;10085 vsi->irqs_ready = false;
10066 10086
10087 if (type == I40E_VSI_MAIN) {
10088 vsi->af_xdp_zc_qps = bitmap_zalloc(pf->num_lan_qps, GFP_KERNEL);
10089 if (!vsi->af_xdp_zc_qps)
10090 goto err_rings;
10091 }
10092
10067 ret = i40e_set_num_rings_in_vsi(vsi);10093 ret = i40e_set_num_rings_in_vsi(vsi);
10068 if (ret)10094 if (ret)
10069 goto err_rings;10095 goto err_rings;
@@ -10082,6 +10108,7 @@ static int i40e_vsi_mem_alloc(struct i40e_pf *pf, enum i40e_vsi_type type) · 12 unmodified lines
10082 goto unlock_pf;10108 goto unlock_pf;
10083 10109
10084err_rings:10110err_rings:
10111 bitmap_free(vsi->af_xdp_zc_qps);
10085 pf->next_vsi = i - 1;10112 pf->next_vsi = i - 1;
10086 kfree(vsi);10113 kfree(vsi);
10087unlock_pf:10114unlock_pf:
@@ -10162,6 +10189,7 @@ static int i40e_vsi_clear(struct i40e_vsi *vsi) · 74 unmodified lines
10162 i40e_put_lump(pf->qp_pile, vsi->base_queue, vsi->idx);10189 i40e_put_lump(pf->qp_pile, vsi->base_queue, vsi->idx);
10163 i40e_put_lump(pf->irq_pile, vsi->base_vector, vsi->idx);10190 i40e_put_lump(pf->irq_pile, vsi->base_vector, vsi->idx);
10164 10191
10192 bitmap_free(vsi->af_xdp_zc_qps);
10165 i40e_vsi_free_arrays(vsi, true);10193 i40e_vsi_free_arrays(vsi, true);
10166 i40e_clear_rss_config_user(vsi);10194 i40e_clear_rss_config_user(vsi);
10167 10195
drivers/net/ethernet/intel/i40e/i40e_ptp.c+3−2
@@ -146,12 +146,13 @@ static int i40e_ptp_adjfreq(struct ptp_clock_info *ptp, s32 ppb) · 145 unmodified lines
146static int i40e_ptp_adjtime(struct ptp_clock_info *ptp, s64 delta)146static int i40e_ptp_adjtime(struct ptp_clock_info *ptp, s64 delta)
147{147{
148 struct i40e_pf *pf = container_of(ptp, struct i40e_pf, ptp_caps);148 struct i40e_pf *pf = container_of(ptp, struct i40e_pf, ptp_caps);
149 struct timespec64 now;149 struct timespec64 now, then;
150 150
151 then = ns_to_timespec64(delta);
151 mutex_lock(&pf->tmreg_lock);152 mutex_lock(&pf->tmreg_lock);
152 153
153 i40e_ptp_read(pf, &now, NULL);154 i40e_ptp_read(pf, &now, NULL);
154 timespec64_add_ns(&now, delta);155 now = timespec64_add(now, then);
155 i40e_ptp_write(pf, (const struct timespec64 *)&now);156 i40e_ptp_write(pf, (const struct timespec64 *)&now);
156 157
157 mutex_unlock(&pf->tmreg_lock);158 mutex_unlock(&pf->tmreg_lock);
drivers/net/ethernet/intel/i40e/i40e_xsk.c+3−0
@@ -102,6 +102,8 @@ static int i40e_xsk_umem_enable(struct i40e_vsi *vsi, struct xdp_umem *umem, · 101 unmodified lines
102 if (err)102 if (err)
103 return err;103 return err;
104 104
105 set_bit(qid, vsi->af_xdp_zc_qps);
106
105 if_running = netif_running(vsi->netdev) && i40e_enabled_xdp_vsi(vsi);107 if_running = netif_running(vsi->netdev) && i40e_enabled_xdp_vsi(vsi);
106 108
107 if (if_running) {109 if (if_running) {
@@ -148,6 +150,7 @@ static int i40e_xsk_umem_disable(struct i40e_vsi *vsi, u16 qid) · 40 unmodified lines
148 return err;150 return err;
149 }151 }
150 152
153 clear_bit(qid, vsi->af_xdp_zc_qps);
151 i40e_xsk_umem_dma_unmap(vsi, umem);154 i40e_xsk_umem_dma_unmap(vsi, umem);
152 155
153 if (if_running) {156 if (if_running) {
drivers/net/ethernet/intel/igb/e1000_defines.h+2−0
@@ -194,6 +194,8 @@ · 193 unmodified lines
194/* enable link status from external LINK_0 and LINK_1 pins */194/* enable link status from external LINK_0 and LINK_1 pins */
195#define E1000_CTRL_SWDPIN0 0x00040000 /* SWDPIN 0 value */195#define E1000_CTRL_SWDPIN0 0x00040000 /* SWDPIN 0 value */
196#define E1000_CTRL_SWDPIN1 0x00080000 /* SWDPIN 1 value */196#define E1000_CTRL_SWDPIN1 0x00080000 /* SWDPIN 1 value */
197#define E1000_CTRL_ADVD3WUC 0x00100000 /* D3 WUC */
198#define E1000_CTRL_EN_PHY_PWR_MGMT 0x00200000 /* PHY PM enable */
197#define E1000_CTRL_SDP0_DIR 0x00400000 /* SDP0 Data direction */199#define E1000_CTRL_SDP0_DIR 0x00400000 /* SDP0 Data direction */
198#define E1000_CTRL_SDP1_DIR 0x00800000 /* SDP1 Data direction */200#define E1000_CTRL_SDP1_DIR 0x00800000 /* SDP1 Data direction */
199#define E1000_CTRL_RST 0x04000000 /* Global reset */201#define E1000_CTRL_RST 0x04000000 /* Global reset */
drivers/net/ethernet/intel/igb/igb_main.c+8−49
@@ -8740,9 +8740,7 @@ static int __igb_shutdown(struct pci_dev *pdev, bool *enable_wake, · 8739 unmodified lines
8740 struct e1000_hw *hw = &adapter->hw;8740 struct e1000_hw *hw = &adapter->hw;
8741 u32 ctrl, rctl, status;8741 u32 ctrl, rctl, status;
8742 u32 wufc = runtime ? E1000_WUFC_LNKC : adapter->wol;8742 u32 wufc = runtime ? E1000_WUFC_LNKC : adapter->wol;
8743#ifdef CONFIG_PM8743 bool wake;
8744 int retval = 0;
8745#endif
8746 8744
8747 rtnl_lock();8745 rtnl_lock();
8748 netif_device_detach(netdev);8746 netif_device_detach(netdev);
@@ -8755,14 +8753,6 @@ static int __igb_shutdown(struct pci_dev *pdev, bool *enable_wake, · 6 unmodified lines
8755 igb_clear_interrupt_scheme(adapter);8753 igb_clear_interrupt_scheme(adapter);
8756 rtnl_unlock();8754 rtnl_unlock();
8757 8755
8758#ifdef CONFIG_PM
8759 if (!runtime) {
8760 retval = pci_save_state(pdev);
8761 if (retval)
8762 return retval;
8763 }
8764#endif
8765
8766 status = rd32(E1000_STATUS);8756 status = rd32(E1000_STATUS);
8767 if (status & E1000_STATUS_LU)8757 if (status & E1000_STATUS_LU)
8768 wufc &= ~E1000_WUFC_LNKC;8758 wufc &= ~E1000_WUFC_LNKC;
@@ -8779,10 +8769,6 @@ static int __igb_shutdown(struct pci_dev *pdev, bool *enable_wake, · 10 unmodified lines
8779 }8769 }
8780 8770
8781 ctrl = rd32(E1000_CTRL);8771 ctrl = rd32(E1000_CTRL);
8782 /* advertise wake from D3Cold */
8783 #define E1000_CTRL_ADVD3WUC 0x00100000
8784 /* phy power management enable */
8785 #define E1000_CTRL_EN_PHY_PWR_MGMT 0x00200000
8786 ctrl |= E1000_CTRL_ADVD3WUC;8772 ctrl |= E1000_CTRL_ADVD3WUC;
8787 wr32(E1000_CTRL, ctrl);8773 wr32(E1000_CTRL, ctrl);
8788 8774
@@ -8796,12 +8782,15 @@ static int __igb_shutdown(struct pci_dev *pdev, bool *enable_wake, · 7 unmodified lines
8796 wr32(E1000_WUFC, 0);8782 wr32(E1000_WUFC, 0);
8797 }8783 }
8798 8784
8799 *enable_wake = wufc || adapter->en_mng_pt;8785 wake = wufc || adapter->en_mng_pt;
8800 if (!*enable_wake)8786 if (!wake)
8801 igb_power_down_link(adapter);8787 igb_power_down_link(adapter);
8802 else8788 else
8803 igb_power_up_link(adapter);8789 igb_power_up_link(adapter);
8804 8790
8791 if (enable_wake)
8792 *enable_wake = wake;
8793
8805 /* Release control of h/w to f/w. If f/w is AMT enabled, this8794 /* Release control of h/w to f/w. If f/w is AMT enabled, this
8806 * would have already happened in close and is redundant.8795 * would have already happened in close and is redundant.
8807 */8796 */
@@ -8844,22 +8833,7 @@ static void igb_deliver_wake_packet(struct net_device *netdev) · 36 unmodified lines
8844 8833
8845static int __maybe_unused igb_suspend(struct device *dev)8834static int __maybe_unused igb_suspend(struct device *dev)
8846{8835{
8847 int retval;8836 return __igb_shutdown(to_pci_dev(dev), NULL, 0);
8848 bool wake;
8849 struct pci_dev *pdev = to_pci_dev(dev);
8850
8851 retval = __igb_shutdown(pdev, &wake, 0);
8852 if (retval)
8853 return retval;
8854
8855 if (wake) {
8856 pci_prepare_to_sleep(pdev);
8857 } else {
8858 pci_wake_from_d3(pdev, false);
8859 pci_set_power_state(pdev, PCI_D3hot);
8860 }
8861
8862 return 0;
8863}8837}
8864 8838
8865static int __maybe_unused igb_resume(struct device *dev)8839static int __maybe_unused igb_resume(struct device *dev)
@@ -8930,22 +8904,7 @@ static int __maybe_unused igb_runtime_idle(struct device *dev) · 64 unmodified lines
8930 8904
8931static int __maybe_unused igb_runtime_suspend(struct device *dev)8905static int __maybe_unused igb_runtime_suspend(struct device *dev)
8932{8906{
8933 struct pci_dev *pdev = to_pci_dev(dev);8907 return __igb_shutdown(to_pci_dev(dev), NULL, 1);
8934 int retval;
8935 bool wake;
8936
8937 retval = __igb_shutdown(pdev, &wake, 1);
8938 if (retval)
8939 return retval;
8940
8941 if (wake) {
8942 pci_prepare_to_sleep(pdev);
8943 } else {
8944 pci_wake_from_d3(pdev, false);
8945 pci_set_power_state(pdev, PCI_D3hot);
8946 }
8947
8948 return 0;
8949}8908}
8950 8909
8951static int __maybe_unused igb_runtime_resume(struct device *dev)8910static int __maybe_unused igb_runtime_resume(struct device *dev)
drivers/net/ethernet/intel/ixgbe/ixgbe_phy.c+9−7
@@ -905,13 +905,12 @@ s32 ixgbe_mii_bus_init(struct ixgbe_hw *hw) · 904 unmodified lines
905 struct pci_dev *pdev = adapter->pdev;905 struct pci_dev *pdev = adapter->pdev;
906 struct device *dev = &adapter->netdev->dev;906 struct device *dev = &adapter->netdev->dev;
907 struct mii_bus *bus;907 struct mii_bus *bus;
908 int err = -ENODEV;
908 909
909 adapter->mii_bus = devm_mdiobus_alloc(dev);910 bus = devm_mdiobus_alloc(dev);
910 if (!adapter->mii_bus)911 if (!bus)
911 return -ENOMEM;912 return -ENOMEM;
912 913
913 bus = adapter->mii_bus;
914
915 switch (hw->device_id) {914 switch (hw->device_id) {
916 /* C3000 SoCs */915 /* C3000 SoCs */
917 case IXGBE_DEV_ID_X550EM_A_KR:916 case IXGBE_DEV_ID_X550EM_A_KR:
@@ -949,12 +948,15 @@ s32 ixgbe_mii_bus_init(struct ixgbe_hw *hw) · 31 unmodified lines
949 */948 */
950 hw->phy.mdio.mode_support = MDIO_SUPPORTS_C45 | MDIO_SUPPORTS_C22;949 hw->phy.mdio.mode_support = MDIO_SUPPORTS_C45 | MDIO_SUPPORTS_C22;
951 950
952 return mdiobus_register(bus);951 err = mdiobus_register(bus);
952 if (!err) {
953 adapter->mii_bus = bus;
954 return 0;
955 }
953 956
954ixgbe_no_mii_bus:957ixgbe_no_mii_bus:
955 devm_mdiobus_free(dev, bus);958 devm_mdiobus_free(dev, bus);
956 adapter->mii_bus = NULL;959 return err;
957 return -ENODEV;
958}960}
959 961
960/**962/**
drivers/net/ethernet/mellanox/mlx5/core/en.h+1−0
@@ -858,6 +858,7 @@ void mlx5e_close_channels(struct mlx5e_channels *chs); · 857 unmodified lines
858 * switching channels858 * switching channels
859 */859 */
860typedef int (*mlx5e_fp_hw_modify)(struct mlx5e_priv *priv);860typedef int (*mlx5e_fp_hw_modify)(struct mlx5e_priv *priv);
861int mlx5e_safe_reopen_channels(struct mlx5e_priv *priv);
861int mlx5e_safe_switch_channels(struct mlx5e_priv *priv,862int mlx5e_safe_switch_channels(struct mlx5e_priv *priv,
862 struct mlx5e_channels *new_chs,863 struct mlx5e_channels *new_chs,
863 mlx5e_fp_hw_modify hw_modify);864 mlx5e_fp_hw_modify hw_modify);
drivers/net/ethernet/mellanox/mlx5/core/en/port.c+0−3
@@ -96,9 +96,6 @@ int mlx5_port_query_eth_proto(struct mlx5_core_dev *dev, u8 port, bool ext, · 95 unmodified lines
96 if (!eproto)96 if (!eproto)
97 return -EINVAL;97 return -EINVAL;
98 98
99 if (ext != MLX5_CAP_PCAM_FEATURE(dev, ptys_extended_ethernet))
100 return -EOPNOTSUPP;
101
102 err = mlx5_query_port_ptys(dev, out, sizeof(out), MLX5_PTYS_EN, port);99 err = mlx5_query_port_ptys(dev, out, sizeof(out), MLX5_PTYS_EN, port);
103 if (err)100 if (err)
104 return err;101 return err;
drivers/net/ethernet/mellanox/mlx5/core/en/port_buffer.c+22−17
@@ -122,7 +122,9 @@ out: · 121 unmodified lines
122 return err;122 return err;
123}123}
124 124
125/* xoff = ((301+2.16 * len [m]) * speed [Gbps] + 2.72 MTU [B]) */125/* xoff = ((301+2.16 * len [m]) * speed [Gbps] + 2.72 MTU [B])
126 * minimum speed value is 40Gbps
127 */
126static u32 calculate_xoff(struct mlx5e_priv *priv, unsigned int mtu)128static u32 calculate_xoff(struct mlx5e_priv *priv, unsigned int mtu)
127{129{
128 u32 speed;130 u32 speed;
@@ -130,10 +132,9 @@ static u32 calculate_xoff(struct mlx5e_priv *priv, unsigned int mtu) · 1 unmodified line
130 int err;132 int err;
131 133
132 err = mlx5e_port_linkspeed(priv->mdev, &speed);134 err = mlx5e_port_linkspeed(priv->mdev, &speed);
133 if (err) {135 if (err)
134 mlx5_core_warn(priv->mdev, "cannot get port speed\n");136 speed = SPEED_40000;
135 return 0;137 speed = max_t(u32, speed, SPEED_40000);
136 }
137 138
138 xoff = (301 + 216 * priv->dcbx.cable_len / 100) * speed / 1000 + 272 * mtu / 100;139 xoff = (301 + 216 * priv->dcbx.cable_len / 100) * speed / 1000 + 272 * mtu / 100;
139 140
@@ -142,7 +143,7 @@ static u32 calculate_xoff(struct mlx5e_priv *priv, unsigned int mtu) · 2 unmodified lines
142}143}
143 144
144static int update_xoff_threshold(struct mlx5e_port_buffer *port_buffer,145static int update_xoff_threshold(struct mlx5e_port_buffer *port_buffer,
145 u32 xoff, unsigned int mtu)146 u32 xoff, unsigned int max_mtu)
146{147{
147 int i;148 int i;
148 149
@@ -154,11 +155,12 @@ static int update_xoff_threshold(struct mlx5e_port_buffer *port_buffer, · 5 unmodified lines
154 }155 }
155 156
156 if (port_buffer->buffer[i].size <157 if (port_buffer->buffer[i].size <
157 (xoff + mtu + (1 << MLX5E_BUFFER_CELL_SHIFT)))158 (xoff + max_mtu + (1 << MLX5E_BUFFER_CELL_SHIFT)))
158 return -ENOMEM;159 return -ENOMEM;
159 160
160 port_buffer->buffer[i].xoff = port_buffer->buffer[i].size - xoff;161 port_buffer->buffer[i].xoff = port_buffer->buffer[i].size - xoff;
161 port_buffer->buffer[i].xon = port_buffer->buffer[i].xoff - mtu;162 port_buffer->buffer[i].xon =
163 port_buffer->buffer[i].xoff - max_mtu;
162 }164 }
163 165
164 return 0;166 return 0;
@@ -166,7 +168,7 @@ static int update_xoff_threshold(struct mlx5e_port_buffer *port_buffer, · 1 unmodified line
166 168
167/**169/**
168 * update_buffer_lossy()170 * update_buffer_lossy()
169 * mtu: device's MTU171 * max_mtu: netdev's max_mtu
170 * pfc_en: <input> current pfc configuration172 * pfc_en: <input> current pfc configuration
171 * buffer: <input> current prio to buffer mapping173 * buffer: <input> current prio to buffer mapping
172 * xoff: <input> xoff value174 * xoff: <input> xoff value
@@ -183,7 +185,7 @@ static int update_xoff_threshold(struct mlx5e_port_buffer *port_buffer, · 10 unmodified lines
183 * Return 0 if no error.185 * Return 0 if no error.
184 * Set change to true if buffer configuration is modified.186 * Set change to true if buffer configuration is modified.
185 */187 */
186static int update_buffer_lossy(unsigned int mtu,188static int update_buffer_lossy(unsigned int max_mtu,
187 u8 pfc_en, u8 *buffer, u32 xoff,189 u8 pfc_en, u8 *buffer, u32 xoff,
188 struct mlx5e_port_buffer *port_buffer,190 struct mlx5e_port_buffer *port_buffer,
189 bool *change)191 bool *change)
@@ -220,7 +222,7 @@ static int update_buffer_lossy(unsigned int mtu, · 30 unmodified lines
220 }222 }
221 223
222 if (changed) {224 if (changed) {
223 err = update_xoff_threshold(port_buffer, xoff, mtu);225 err = update_xoff_threshold(port_buffer, xoff, max_mtu);
224 if (err)226 if (err)
225 return err;227 return err;
226 228
@@ -230,6 +232,7 @@ static int update_buffer_lossy(unsigned int mtu, · 3 unmodified lines
230 return 0;232 return 0;
231}233}
232 234
235#define MINIMUM_MAX_MTU 9216
233int mlx5e_port_manual_buffer_config(struct mlx5e_priv *priv,236int mlx5e_port_manual_buffer_config(struct mlx5e_priv *priv,
234 u32 change, unsigned int mtu,237 u32 change, unsigned int mtu,
235 struct ieee_pfc *pfc,238 struct ieee_pfc *pfc,
@@ -241,12 +244,14 @@ int mlx5e_port_manual_buffer_config(struct mlx5e_priv *priv, · 5 unmodified lines
241 bool update_prio2buffer = false;244 bool update_prio2buffer = false;
242 u8 buffer[MLX5E_MAX_PRIORITY];245 u8 buffer[MLX5E_MAX_PRIORITY];
243 bool update_buffer = false;246 bool update_buffer = false;
247 unsigned int max_mtu;
244 u32 total_used = 0;248 u32 total_used = 0;
245 u8 curr_pfc_en;249 u8 curr_pfc_en;
246 int err;250 int err;
247 int i;251 int i;
248 252
249 mlx5e_dbg(HW, priv, "%s: change=%x\n", __func__, change);253 mlx5e_dbg(HW, priv, "%s: change=%x\n", __func__, change);
254 max_mtu = max_t(unsigned int, priv->netdev->max_mtu, MINIMUM_MAX_MTU);
250 255
251 err = mlx5e_port_query_buffer(priv, &port_buffer);256 err = mlx5e_port_query_buffer(priv, &port_buffer);
252 if (err)257 if (err)
@@ -254,7 +259,7 @@ int mlx5e_port_manual_buffer_config(struct mlx5e_priv *priv, · 1 unmodified line
254 259
255 if (change & MLX5E_PORT_BUFFER_CABLE_LEN) {260 if (change & MLX5E_PORT_BUFFER_CABLE_LEN) {
256 update_buffer = true;261 update_buffer = true;
257 err = update_xoff_threshold(&port_buffer, xoff, mtu);262 err = update_xoff_threshold(&port_buffer, xoff, max_mtu);
258 if (err)263 if (err)
259 return err;264 return err;
260 }265 }
@@ -264,7 +269,7 @@ int mlx5e_port_manual_buffer_config(struct mlx5e_priv *priv, · 3 unmodified lines
264 if (err)269 if (err)
265 return err;270 return err;
266 271
267 err = update_buffer_lossy(mtu, pfc->pfc_en, buffer, xoff,272 err = update_buffer_lossy(max_mtu, pfc->pfc_en, buffer, xoff,
268 &port_buffer, &update_buffer);273 &port_buffer, &update_buffer);
269 if (err)274 if (err)
270 return err;275 return err;
@@ -276,8 +281,8 @@ int mlx5e_port_manual_buffer_config(struct mlx5e_priv *priv, · 5 unmodified lines
276 if (err)281 if (err)
277 return err;282 return err;
278 283
279 err = update_buffer_lossy(mtu, curr_pfc_en, prio2buffer, xoff,284 err = update_buffer_lossy(max_mtu, curr_pfc_en, prio2buffer,
280 &port_buffer, &update_buffer);285 xoff, &port_buffer, &update_buffer);
281 if (err)286 if (err)
282 return err;287 return err;
283 }288 }
@@ -301,7 +306,7 @@ int mlx5e_port_manual_buffer_config(struct mlx5e_priv *priv, · 17 unmodified lines
301 return -EINVAL;306 return -EINVAL;
302 307
303 update_buffer = true;308 update_buffer = true;
304 err = update_xoff_threshold(&port_buffer, xoff, mtu);309 err = update_xoff_threshold(&port_buffer, xoff, max_mtu);
305 if (err)310 if (err)
306 return err;311 return err;
307 }312 }
@@ -309,7 +314,7 @@ int mlx5e_port_manual_buffer_config(struct mlx5e_priv *priv, · 1 unmodified line
309 /* Need to update buffer configuration if xoff value is changed */314 /* Need to update buffer configuration if xoff value is changed */
310 if (!update_buffer && xoff != priv->dcbx.xoff) {315 if (!update_buffer && xoff != priv->dcbx.xoff) {
311 update_buffer = true;316 update_buffer = true;
312 err = update_xoff_threshold(&port_buffer, xoff, mtu);317 err = update_xoff_threshold(&port_buffer, xoff, max_mtu);
313 if (err)318 if (err)
314 return err;319 return err;
315 }320 }
drivers/net/ethernet/mellanox/mlx5/core/en/reporter_tx.c+8−3
@@ -186,12 +186,17 @@ static int mlx5e_tx_reporter_recover_from_ctx(struct mlx5e_tx_err_ctx *err_ctx) · 185 unmodified lines
186 186
187static int mlx5e_tx_reporter_recover_all(struct mlx5e_priv *priv)187static int mlx5e_tx_reporter_recover_all(struct mlx5e_priv *priv)
188{188{
189 int err;189 int err = 0;
190 190
191 rtnl_lock();191 rtnl_lock();
192 mutex_lock(&priv->state_lock);192 mutex_lock(&priv->state_lock);
193 mlx5e_close_locked(priv->netdev);193
194 err = mlx5e_open_locked(priv->netdev);194 if (!test_bit(MLX5E_STATE_OPENED, &priv->state))
195 goto out;
196
197 err = mlx5e_safe_reopen_channels(priv);
198
199out:
195 mutex_unlock(&priv->state_lock);200 mutex_unlock(&priv->state_lock);
196 rtnl_unlock();201 rtnl_unlock();
197 202
drivers/net/ethernet/mellanox/mlx5/core/en/tc_tun.c+4−0
@@ -39,6 +39,10 @@ static int get_route_and_out_devs(struct mlx5e_priv *priv, · 38 unmodified lines
39 return -EOPNOTSUPP;39 return -EOPNOTSUPP;
40 }40 }
41 41
42 if (!(mlx5e_eswitch_rep(*out_dev) &&
43 mlx5e_is_uplink_rep(netdev_priv(*out_dev))))
44 return -EOPNOTSUPP;
45
42 return 0;46 return 0;
43}47}
44 48
drivers/net/ethernet/mellanox/mlx5/core/en_common.c+11−2
@@ -45,7 +45,9 @@ int mlx5e_create_tir(struct mlx5_core_dev *mdev, · 44 unmodified lines
45 if (err)45 if (err)
46 return err;46 return err;
47 47
48 mutex_lock(&mdev->mlx5e_res.td.list_lock);
48 list_add(&tir->list, &mdev->mlx5e_res.td.tirs_list);49 list_add(&tir->list, &mdev->mlx5e_res.td.tirs_list);
50 mutex_unlock(&mdev->mlx5e_res.td.list_lock);
49 51
50 return 0;52 return 0;
51}53}
@@ -53,8 +55,10 @@ int mlx5e_create_tir(struct mlx5_core_dev *mdev, · 1 unmodified line
53void mlx5e_destroy_tir(struct mlx5_core_dev *mdev,55void mlx5e_destroy_tir(struct mlx5_core_dev *mdev,
54 struct mlx5e_tir *tir)56 struct mlx5e_tir *tir)
55{57{
58 mutex_lock(&mdev->mlx5e_res.td.list_lock);
56 mlx5_core_destroy_tir(mdev, tir->tirn);59 mlx5_core_destroy_tir(mdev, tir->tirn);
57 list_del(&tir->list);60 list_del(&tir->list);
61 mutex_unlock(&mdev->mlx5e_res.td.list_lock);
58}62}
59 63
60static int mlx5e_create_mkey(struct mlx5_core_dev *mdev, u32 pdn,64static int mlx5e_create_mkey(struct mlx5_core_dev *mdev, u32 pdn,
@@ -114,6 +118,7 @@ int mlx5e_create_mdev_resources(struct mlx5_core_dev *mdev) · 53 unmodified lines
114 }118 }
115 119
116 INIT_LIST_HEAD(&mdev->mlx5e_res.td.tirs_list);120 INIT_LIST_HEAD(&mdev->mlx5e_res.td.tirs_list);
121 mutex_init(&mdev->mlx5e_res.td.list_lock);
117 122
118 return 0;123 return 0;
119 124
@@ -141,15 +146,17 @@ int mlx5e_refresh_tirs(struct mlx5e_priv *priv, bool enable_uc_lb) · 21 unmodified lines
141{146{
142 struct mlx5_core_dev *mdev = priv->mdev;147 struct mlx5_core_dev *mdev = priv->mdev;
143 struct mlx5e_tir *tir;148 struct mlx5e_tir *tir;
144 int err = -ENOMEM;149 int err = 0;
145 u32 tirn = 0;150 u32 tirn = 0;
146 int inlen;151 int inlen;
147 void *in;152 void *in;
148 153
149 inlen = MLX5_ST_SZ_BYTES(modify_tir_in);154 inlen = MLX5_ST_SZ_BYTES(modify_tir_in);
150 in = kvzalloc(inlen, GFP_KERNEL);155 in = kvzalloc(inlen, GFP_KERNEL);
151 if (!in)156 if (!in) {
157 err = -ENOMEM;
152 goto out;158 goto out;
159 }
153 160
154 if (enable_uc_lb)161 if (enable_uc_lb)
155 MLX5_SET(modify_tir_in, in, ctx.self_lb_block,162 MLX5_SET(modify_tir_in, in, ctx.self_lb_block,
@@ -157,6 +164,7 @@ int mlx5e_refresh_tirs(struct mlx5e_priv *priv, bool enable_uc_lb) · 1 unmodified line
157 164
158 MLX5_SET(modify_tir_in, in, bitmask.self_lb_en, 1);165 MLX5_SET(modify_tir_in, in, bitmask.self_lb_en, 1);
159 166
167 mutex_lock(&mdev->mlx5e_res.td.list_lock);
160 list_for_each_entry(tir, &mdev->mlx5e_res.td.tirs_list, list) {168 list_for_each_entry(tir, &mdev->mlx5e_res.td.tirs_list, list) {
161 tirn = tir->tirn;169 tirn = tir->tirn;
162 err = mlx5_core_modify_tir(mdev, tirn, in, inlen);170 err = mlx5_core_modify_tir(mdev, tirn, in, inlen);
@@ -168,6 +176,7 @@ out: · 5 unmodified lines
168 kvfree(in);176 kvfree(in);
169 if (err)177 if (err)
170 netdev_err(priv->netdev, "refresh tir(0x%x) failed, %d\n", tirn, err);178 netdev_err(priv->netdev, "refresh tir(0x%x) failed, %d\n", tirn, err);
179 mutex_unlock(&mdev->mlx5e_res.td.list_lock);
171 180
172 return err;181 return err;
173}182}
drivers/net/ethernet/mellanox/mlx5/core/en_ethtool.c+36−19
@@ -603,16 +603,18 @@ static void ptys2ethtool_supported_link(struct mlx5_core_dev *mdev, · 602 unmodified lines
603 __ETHTOOL_LINK_MODE_MASK_NBITS);603 __ETHTOOL_LINK_MODE_MASK_NBITS);
604}604}
605 605
606static void ptys2ethtool_adver_link(struct mlx5_core_dev *mdev,606static void ptys2ethtool_adver_link(unsigned long *advertising_modes,
607 unsigned long *advertising_modes,607 u32 eth_proto_cap, bool ext)
608 u32 eth_proto_cap)
609{608{
610 unsigned long proto_cap = eth_proto_cap;609 unsigned long proto_cap = eth_proto_cap;
611 struct ptys2ethtool_config *table;610 struct ptys2ethtool_config *table;
612 u32 max_size;611 u32 max_size;
613 int proto;612 int proto;
614 613
615 mlx5e_ethtool_get_speed_arr(mdev, &table, &max_size);614 table = ext ? ptys2ext_ethtool_table : ptys2legacy_ethtool_table;
615 max_size = ext ? ARRAY_SIZE(ptys2ext_ethtool_table) :
616 ARRAY_SIZE(ptys2legacy_ethtool_table);
617
616 for_each_set_bit(proto, &proto_cap, max_size)618 for_each_set_bit(proto, &proto_cap, max_size)
617 bitmap_or(advertising_modes, advertising_modes,619 bitmap_or(advertising_modes, advertising_modes,
618 table[proto].advertised,620 table[proto].advertised,
@@ -794,12 +796,12 @@ static void get_supported(struct mlx5_core_dev *mdev, u32 eth_proto_cap, · 175 unmodified lines
794 ethtool_link_ksettings_add_link_mode(link_ksettings, supported, Pause);796 ethtool_link_ksettings_add_link_mode(link_ksettings, supported, Pause);
795}797}
796 798
797static void get_advertising(struct mlx5_core_dev *mdev, u32 eth_proto_cap,799static void get_advertising(u32 eth_proto_cap, u8 tx_pause, u8 rx_pause,
798 u8 tx_pause, u8 rx_pause,800 struct ethtool_link_ksettings *link_ksettings,
799 struct ethtool_link_ksettings *link_ksettings)801 bool ext)
800{802{
801 unsigned long *advertising = link_ksettings->link_modes.advertising;803 unsigned long *advertising = link_ksettings->link_modes.advertising;
802 ptys2ethtool_adver_link(mdev, advertising, eth_proto_cap);804 ptys2ethtool_adver_link(advertising, eth_proto_cap, ext);
803 805
804 if (rx_pause)806 if (rx_pause)
805 ethtool_link_ksettings_add_link_mode(link_ksettings, advertising, Pause);807 ethtool_link_ksettings_add_link_mode(link_ksettings, advertising, Pause);
@@ -854,8 +856,9 @@ static void get_lp_advertising(struct mlx5_core_dev *mdev, u32 eth_proto_lp, · 48 unmodified lines
854 struct ethtool_link_ksettings *link_ksettings)856 struct ethtool_link_ksettings *link_ksettings)
855{857{
856 unsigned long *lp_advertising = link_ksettings->link_modes.lp_advertising;858 unsigned long *lp_advertising = link_ksettings->link_modes.lp_advertising;
859 bool ext = MLX5_CAP_PCAM_FEATURE(mdev, ptys_extended_ethernet);
857 860
858 ptys2ethtool_adver_link(mdev, lp_advertising, eth_proto_lp);861 ptys2ethtool_adver_link(lp_advertising, eth_proto_lp, ext);
859}862}
860 863
861int mlx5e_ethtool_get_link_ksettings(struct mlx5e_priv *priv,864int mlx5e_ethtool_get_link_ksettings(struct mlx5e_priv *priv,
@@ -872,6 +875,7 @@ int mlx5e_ethtool_get_link_ksettings(struct mlx5e_priv *priv, · 10 unmodified lines
872 u8 an_disable_admin;875 u8 an_disable_admin;
873 u8 an_status;876 u8 an_status;
874 u8 connector_type;877 u8 connector_type;
878 bool admin_ext;
875 bool ext;879 bool ext;
876 int err;880 int err;
877 881
@@ -886,6 +890,19 @@ int mlx5e_ethtool_get_link_ksettings(struct mlx5e_priv *priv, · 8 unmodified lines
886 eth_proto_capability);890 eth_proto_capability);
887 eth_proto_admin = MLX5_GET_ETH_PROTO(ptys_reg, out, ext,891 eth_proto_admin = MLX5_GET_ETH_PROTO(ptys_reg, out, ext,
888 eth_proto_admin);892 eth_proto_admin);
893 /* Fields: eth_proto_admin and ext_eth_proto_admin are
894 * mutually exclusive. Hence try reading legacy advertising
895 * when extended advertising is zero.
896 * admin_ext indicates how eth_proto_admin should be
897 * interpreted
898 */
899 admin_ext = ext;
900 if (ext && !eth_proto_admin) {
901 eth_proto_admin = MLX5_GET_ETH_PROTO(ptys_reg, out, false,
902 eth_proto_admin);
903 admin_ext = false;
904 }
905
889 eth_proto_oper = MLX5_GET_ETH_PROTO(ptys_reg, out, ext,906 eth_proto_oper = MLX5_GET_ETH_PROTO(ptys_reg, out, ext,
890 eth_proto_oper);907 eth_proto_oper);
891 eth_proto_lp = MLX5_GET(ptys_reg, out, eth_proto_lp_advertise);908 eth_proto_lp = MLX5_GET(ptys_reg, out, eth_proto_lp_advertise);
@@ -899,7 +916,8 @@ int mlx5e_ethtool_get_link_ksettings(struct mlx5e_priv *priv, · 7 unmodified lines
899 ethtool_link_ksettings_zero_link_mode(link_ksettings, advertising);916 ethtool_link_ksettings_zero_link_mode(link_ksettings, advertising);
900 917
901 get_supported(mdev, eth_proto_cap, link_ksettings);918 get_supported(mdev, eth_proto_cap, link_ksettings);
902 get_advertising(mdev, eth_proto_admin, tx_pause, rx_pause, link_ksettings);919 get_advertising(eth_proto_admin, tx_pause, rx_pause, link_ksettings,
920 admin_ext);
903 get_speed_duplex(priv->netdev, eth_proto_oper, link_ksettings);921 get_speed_duplex(priv->netdev, eth_proto_oper, link_ksettings);
904 922
905 eth_proto_oper = eth_proto_oper ? eth_proto_oper : eth_proto_cap;923 eth_proto_oper = eth_proto_oper ? eth_proto_oper : eth_proto_cap;
@@ -997,19 +1015,17 @@ int mlx5e_ethtool_set_link_ksettings(struct mlx5e_priv *priv, · 91 unmodified lines
997 1015
998#define MLX5E_PTYS_EXT ((1ULL << ETHTOOL_LINK_MODE_50000baseKR_Full_BIT) - 1)1016#define MLX5E_PTYS_EXT ((1ULL << ETHTOOL_LINK_MODE_50000baseKR_Full_BIT) - 1)
999 1017
1000 ext_requested = (link_ksettings->link_modes.advertising[0] >1018 ext_requested = !!(link_ksettings->link_modes.advertising[0] >
1001 MLX5E_PTYS_EXT);1019 MLX5E_PTYS_EXT ||
1020 link_ksettings->link_modes.advertising[1]);
1002 ext_supported = MLX5_CAP_PCAM_FEATURE(mdev, ptys_extended_ethernet);1021 ext_supported = MLX5_CAP_PCAM_FEATURE(mdev, ptys_extended_ethernet);
1003 1022 ext_requested &= ext_supported;
1004 /*when ptys_extended_ethernet is set legacy link modes are deprecated */
1005 if (ext_requested != ext_supported)
1006 return -EPROTONOSUPPORT;
1007 1023
1008 speed = link_ksettings->base.speed;1024 speed = link_ksettings->base.speed;
1009 ethtool2ptys_adver_func = ext_requested ?1025 ethtool2ptys_adver_func = ext_requested ?
1010 mlx5e_ethtool2ptys_ext_adver_link :1026 mlx5e_ethtool2ptys_ext_adver_link :
1011 mlx5e_ethtool2ptys_adver_link;1027 mlx5e_ethtool2ptys_adver_link;
1012 err = mlx5_port_query_eth_proto(mdev, 1, ext_supported, &eproto);1028 err = mlx5_port_query_eth_proto(mdev, 1, ext_requested, &eproto);
1013 if (err) {1029 if (err) {
1014 netdev_err(priv->netdev, "%s: query port eth proto failed: %d\n",1030 netdev_err(priv->netdev, "%s: query port eth proto failed: %d\n",
1015 __func__, err);1031 __func__, err);
@@ -1037,7 +1053,7 @@ int mlx5e_ethtool_set_link_ksettings(struct mlx5e_priv *priv, · 21 unmodified lines
1037 if (!an_changes && link_modes == eproto.admin)1053 if (!an_changes && link_modes == eproto.admin)
1038 goto out;1054 goto out;
1039 1055
1040 mlx5_port_set_eth_ptys(mdev, an_disable, link_modes, ext_supported);1056 mlx5_port_set_eth_ptys(mdev, an_disable, link_modes, ext_requested);
1041 mlx5_toggle_port_link(mdev);1057 mlx5_toggle_port_link(mdev);
1042 1058
1043out:1059out:
@@ -1752,7 +1768,8 @@ static int set_pflag_rx_no_csum_complete(struct net_device *netdev, bool enable) · 708 unmodified lines
1752 struct mlx5e_channel *c;1768 struct mlx5e_channel *c;
1753 int i;1769 int i;
1754 1770
1755 if (!test_bit(MLX5E_STATE_OPENED, &priv->state))1771 if (!test_bit(MLX5E_STATE_OPENED, &priv->state) ||
1772 priv->channels.params.xdp_prog)
1756 return 0;1773 return 0;
1757 1774
1758 for (i = 0; i < channels->num; i++) {1775 for (i = 0; i < channels->num; i++) {
drivers/net/ethernet/mellanox/mlx5/core/en_main.c+16−5
@@ -951,7 +951,11 @@ static int mlx5e_open_rq(struct mlx5e_channel *c, · 950 unmodified lines
951 if (params->rx_dim_enabled)951 if (params->rx_dim_enabled)
952 __set_bit(MLX5E_RQ_STATE_AM, &c->rq.state);952 __set_bit(MLX5E_RQ_STATE_AM, &c->rq.state);
953 953
954 if (MLX5E_GET_PFLAG(params, MLX5E_PFLAG_RX_NO_CSUM_COMPLETE))954 /* We disable csum_complete when XDP is enabled since
955 * XDP programs might manipulate packets which will render
956 * skb->checksum incorrect.
957 */
958 if (MLX5E_GET_PFLAG(params, MLX5E_PFLAG_RX_NO_CSUM_COMPLETE) || c->xdp)
955 __set_bit(MLX5E_RQ_STATE_NO_CSUM_COMPLETE, &c->rq.state);959 __set_bit(MLX5E_RQ_STATE_NO_CSUM_COMPLETE, &c->rq.state);
956 960
957 return 0;961 return 0;
@@ -2937,6 +2941,14 @@ int mlx5e_safe_switch_channels(struct mlx5e_priv *priv, · 1979 unmodified lines
2937 return 0;2941 return 0;
2938}2942}
2939 2943
2944int mlx5e_safe_reopen_channels(struct mlx5e_priv *priv)
2945{
2946 struct mlx5e_channels new_channels = {};
2947
2948 new_channels.params = priv->channels.params;
2949 return mlx5e_safe_switch_channels(priv, &new_channels, NULL);
2950}
2951
2940void mlx5e_timestamp_init(struct mlx5e_priv *priv)2952void mlx5e_timestamp_init(struct mlx5e_priv *priv)
2941{2953{
2942 priv->tstamp.tx_type = HWTSTAMP_TX_OFF;2954 priv->tstamp.tx_type = HWTSTAMP_TX_OFF;
@@ -4161,11 +4173,10 @@ static void mlx5e_tx_timeout_work(struct work_struct *work) · 1218 unmodified lines
4161 if (!report_failed)4173 if (!report_failed)
4162 goto unlock;4174 goto unlock;
4163 4175
4164 mlx5e_close_locked(priv->netdev);4176 err = mlx5e_safe_reopen_channels(priv);
4165 err = mlx5e_open_locked(priv->netdev);
4166 if (err)4177 if (err)
4167 netdev_err(priv->netdev,4178 netdev_err(priv->netdev,
4168 "mlx5e_open_locked failed recovering from a tx_timeout, err(%d).\n",4179 "mlx5e_safe_reopen_channels failed recovering from a tx_timeout, err(%d).\n",
4169 err);4180 err);
4170 4181
4171unlock:4182unlock:
@@ -4553,7 +4564,7 @@ void mlx5e_build_rss_params(struct mlx5e_rss_params *rss_params, · 381 unmodified lines
4553{4564{
4554 enum mlx5e_traffic_types tt;4565 enum mlx5e_traffic_types tt;
4555 4566
4556 rss_params->hfunc = ETH_RSS_HASH_XOR;4567 rss_params->hfunc = ETH_RSS_HASH_TOP;
4557 netdev_rss_key_fill(rss_params->toeplitz_hash_key,4568 netdev_rss_key_fill(rss_params->toeplitz_hash_key,
4558 sizeof(rss_params->toeplitz_hash_key));4569 sizeof(rss_params->toeplitz_hash_key));
4559 mlx5e_build_default_indir_rqt(rss_params->indirection_rqt,4570 mlx5e_build_default_indir_rqt(rss_params->indirection_rqt,
drivers/net/ethernet/mellanox/mlx5/core/en_rx.c+75−19
@@ -692,7 +692,14 @@ static inline bool is_last_ethertype_ip(struct sk_buff *skb, int *network_depth, · 691 unmodified lines
692{692{
693 *proto = ((struct ethhdr *)skb->data)->h_proto;693 *proto = ((struct ethhdr *)skb->data)->h_proto;
694 *proto = __vlan_get_protocol(skb, *proto, network_depth);694 *proto = __vlan_get_protocol(skb, *proto, network_depth);
695 return (*proto == htons(ETH_P_IP) || *proto == htons(ETH_P_IPV6));695
696 if (*proto == htons(ETH_P_IP))
697 return pskb_may_pull(skb, *network_depth + sizeof(struct iphdr));
698
699 if (*proto == htons(ETH_P_IPV6))
700 return pskb_may_pull(skb, *network_depth + sizeof(struct ipv6hdr));
701
702 return false;
696}703}
697 704
698static inline void mlx5e_enable_ecn(struct mlx5e_rq *rq, struct sk_buff *skb)705static inline void mlx5e_enable_ecn(struct mlx5e_rq *rq, struct sk_buff *skb)
@@ -712,17 +719,6 @@ static inline void mlx5e_enable_ecn(struct mlx5e_rq *rq, struct sk_buff *skb) · 13 unmodified lines
712 rq->stats->ecn_mark += !!rc;719 rq->stats->ecn_mark += !!rc;
713}720}
714 721
715static u32 mlx5e_get_fcs(const struct sk_buff *skb)
716{
717 const void *fcs_bytes;
718 u32 _fcs_bytes;
719
720 fcs_bytes = skb_header_pointer(skb, skb->len - ETH_FCS_LEN,
721 ETH_FCS_LEN, &_fcs_bytes);
722
723 return __get_unaligned_cpu32(fcs_bytes);
724}
725
726static u8 get_ip_proto(struct sk_buff *skb, int network_depth, __be16 proto)722static u8 get_ip_proto(struct sk_buff *skb, int network_depth, __be16 proto)
727{723{
728 void *ip_p = skb->data + network_depth;724 void *ip_p = skb->data + network_depth;
@@ -733,6 +729,68 @@ static u8 get_ip_proto(struct sk_buff *skb, int network_depth, __be16 proto) · 4 unmodified lines
733 729
734#define short_frame(size) ((size) <= ETH_ZLEN + ETH_FCS_LEN)730#define short_frame(size) ((size) <= ETH_ZLEN + ETH_FCS_LEN)
735 731
732#define MAX_PADDING 8
733
734static void
735tail_padding_csum_slow(struct sk_buff *skb, int offset, int len,
736 struct mlx5e_rq_stats *stats)
737{
738 stats->csum_complete_tail_slow++;
739 skb->csum = csum_block_add(skb->csum,
740 skb_checksum(skb, offset, len, 0),
741 offset);
742}
743
744static void
745tail_padding_csum(struct sk_buff *skb, int offset,
746 struct mlx5e_rq_stats *stats)
747{
748 u8 tail_padding[MAX_PADDING];
749 int len = skb->len - offset;
750 void *tail;
751
752 if (unlikely(len > MAX_PADDING)) {
753 tail_padding_csum_slow(skb, offset, len, stats);
754 return;
755 }
756
757 tail = skb_header_pointer(skb, offset, len, tail_padding);
758 if (unlikely(!tail)) {
759 tail_padding_csum_slow(skb, offset, len, stats);
760 return;
761 }
762
763 stats->csum_complete_tail++;
764 skb->csum = csum_block_add(skb->csum, csum_partial(tail, len, 0), offset);
765}
766
767static void
768mlx5e_skb_padding_csum(struct sk_buff *skb, int network_depth, __be16 proto,
769 struct mlx5e_rq_stats *stats)
770{
771 struct ipv6hdr *ip6;
772 struct iphdr *ip4;
773 int pkt_len;
774
775 switch (proto) {
776 case htons(ETH_P_IP):
777 ip4 = (struct iphdr *)(skb->data + network_depth);
778 pkt_len = network_depth + ntohs(ip4->tot_len);
779 break;
780 case htons(ETH_P_IPV6):
781 ip6 = (struct ipv6hdr *)(skb->data + network_depth);
782 pkt_len = network_depth + sizeof(*ip6) + ntohs(ip6->payload_len);
783 break;
784 default:
785 return;
786 }
787
788 if (likely(pkt_len >= skb->len))
789 return;
790
791 tail_padding_csum(skb, pkt_len, stats);
792}
793
736static inline void mlx5e_handle_csum(struct net_device *netdev,794static inline void mlx5e_handle_csum(struct net_device *netdev,
737 struct mlx5_cqe64 *cqe,795 struct mlx5_cqe64 *cqe,
738 struct mlx5e_rq *rq,796 struct mlx5e_rq *rq,
@@ -752,7 +810,8 @@ static inline void mlx5e_handle_csum(struct net_device *netdev, · 13 unmodified lines
752 return;810 return;
753 }811 }
754 812
755 if (unlikely(test_bit(MLX5E_RQ_STATE_NO_CSUM_COMPLETE, &rq->state)))813 /* True when explicitly set via priv flag, or XDP prog is loaded */
814 if (test_bit(MLX5E_RQ_STATE_NO_CSUM_COMPLETE, &rq->state))
756 goto csum_unnecessary;815 goto csum_unnecessary;
757 816
758 /* CQE csum doesn't cover padding octets in short ethernet817 /* CQE csum doesn't cover padding octets in short ethernet
@@ -780,18 +839,15 @@ static inline void mlx5e_handle_csum(struct net_device *netdev, · 21 unmodified lines
780 skb->csum = csum_partial(skb->data + ETH_HLEN,839 skb->csum = csum_partial(skb->data + ETH_HLEN,
781 network_depth - ETH_HLEN,840 network_depth - ETH_HLEN,
782 skb->csum);841 skb->csum);
783 if (unlikely(netdev->features & NETIF_F_RXFCS))842
784 skb->csum = csum_block_add(skb->csum,843 mlx5e_skb_padding_csum(skb, network_depth, proto, stats);
785 (__force __wsum)mlx5e_get_fcs(skb),
786 skb->len - ETH_FCS_LEN);
787 stats->csum_complete++;844 stats->csum_complete++;
788 return;845 return;
789 }846 }
790 847
791csum_unnecessary:848csum_unnecessary:
792 if (likely((cqe->hds_ip_ext & CQE_L3_OK) &&849 if (likely((cqe->hds_ip_ext & CQE_L3_OK) &&
793 ((cqe->hds_ip_ext & CQE_L4_OK) ||850 (cqe->hds_ip_ext & CQE_L4_OK))) {
794 (get_cqe_l4_hdr_type(cqe) == CQE_L4_HDR_TYPE_NONE)))) {
795 skb->ip_summed = CHECKSUM_UNNECESSARY;851 skb->ip_summed = CHECKSUM_UNNECESSARY;
796 if (cqe_is_tunneled(cqe)) {852 if (cqe_is_tunneled(cqe)) {
797 skb->csum_level = 1;853 skb->csum_level = 1;
drivers/net/ethernet/mellanox/mlx5/core/en_stats.c+6−0
@@ -59,6 +59,8 @@ static const struct counter_desc sw_stats_desc[] = { · 58 unmodified lines
59 { MLX5E_DECLARE_STAT(struct mlx5e_sw_stats, rx_csum_unnecessary) },59 { MLX5E_DECLARE_STAT(struct mlx5e_sw_stats, rx_csum_unnecessary) },
60 { MLX5E_DECLARE_STAT(struct mlx5e_sw_stats, rx_csum_none) },60 { MLX5E_DECLARE_STAT(struct mlx5e_sw_stats, rx_csum_none) },
61 { MLX5E_DECLARE_STAT(struct mlx5e_sw_stats, rx_csum_complete) },61 { MLX5E_DECLARE_STAT(struct mlx5e_sw_stats, rx_csum_complete) },
62 { MLX5E_DECLARE_STAT(struct mlx5e_sw_stats, rx_csum_complete_tail) },
63 { MLX5E_DECLARE_STAT(struct mlx5e_sw_stats, rx_csum_complete_tail_slow) },
62 { MLX5E_DECLARE_STAT(struct mlx5e_sw_stats, rx_csum_unnecessary_inner) },64 { MLX5E_DECLARE_STAT(struct mlx5e_sw_stats, rx_csum_unnecessary_inner) },
63 { MLX5E_DECLARE_STAT(struct mlx5e_sw_stats, rx_xdp_drop) },65 { MLX5E_DECLARE_STAT(struct mlx5e_sw_stats, rx_xdp_drop) },
64 { MLX5E_DECLARE_STAT(struct mlx5e_sw_stats, rx_xdp_redirect) },66 { MLX5E_DECLARE_STAT(struct mlx5e_sw_stats, rx_xdp_redirect) },
@@ -151,6 +153,8 @@ static void mlx5e_grp_sw_update_stats(struct mlx5e_priv *priv) · 86 unmodified lines
151 s->rx_removed_vlan_packets += rq_stats->removed_vlan_packets;153 s->rx_removed_vlan_packets += rq_stats->removed_vlan_packets;
152 s->rx_csum_none += rq_stats->csum_none;154 s->rx_csum_none += rq_stats->csum_none;
153 s->rx_csum_complete += rq_stats->csum_complete;155 s->rx_csum_complete += rq_stats->csum_complete;
156 s->rx_csum_complete_tail += rq_stats->csum_complete_tail;
157 s->rx_csum_complete_tail_slow += rq_stats->csum_complete_tail_slow;
154 s->rx_csum_unnecessary += rq_stats->csum_unnecessary;158 s->rx_csum_unnecessary += rq_stats->csum_unnecessary;
155 s->rx_csum_unnecessary_inner += rq_stats->csum_unnecessary_inner;159 s->rx_csum_unnecessary_inner += rq_stats->csum_unnecessary_inner;
156 s->rx_xdp_drop += rq_stats->xdp_drop;160 s->rx_xdp_drop += rq_stats->xdp_drop;
@@ -1190,6 +1194,8 @@ static const struct counter_desc rq_stats_desc[] = { · 1033 unmodified lines
1190 { MLX5E_DECLARE_RX_STAT(struct mlx5e_rq_stats, packets) },1194 { MLX5E_DECLARE_RX_STAT(struct mlx5e_rq_stats, packets) },
1191 { MLX5E_DECLARE_RX_STAT(struct mlx5e_rq_stats, bytes) },1195 { MLX5E_DECLARE_RX_STAT(struct mlx5e_rq_stats, bytes) },
1192 { MLX5E_DECLARE_RX_STAT(struct mlx5e_rq_stats, csum_complete) },1196 { MLX5E_DECLARE_RX_STAT(struct mlx5e_rq_stats, csum_complete) },
1197 { MLX5E_DECLARE_RX_STAT(struct mlx5e_rq_stats, csum_complete_tail) },
1198 { MLX5E_DECLARE_RX_STAT(struct mlx5e_rq_stats, csum_complete_tail_slow) },
1193 { MLX5E_DECLARE_RX_STAT(struct mlx5e_rq_stats, csum_unnecessary) },1199 { MLX5E_DECLARE_RX_STAT(struct mlx5e_rq_stats, csum_unnecessary) },
1194 { MLX5E_DECLARE_RX_STAT(struct mlx5e_rq_stats, csum_unnecessary_inner) },1200 { MLX5E_DECLARE_RX_STAT(struct mlx5e_rq_stats, csum_unnecessary_inner) },
1195 { MLX5E_DECLARE_RX_STAT(struct mlx5e_rq_stats, csum_none) },1201 { MLX5E_DECLARE_RX_STAT(struct mlx5e_rq_stats, csum_none) },
drivers/net/ethernet/mellanox/mlx5/core/en_stats.h+4−0
@@ -71,6 +71,8 @@ struct mlx5e_sw_stats { · 70 unmodified lines
71 u64 rx_csum_unnecessary;71 u64 rx_csum_unnecessary;
72 u64 rx_csum_none;72 u64 rx_csum_none;
73 u64 rx_csum_complete;73 u64 rx_csum_complete;
74 u64 rx_csum_complete_tail;
75 u64 rx_csum_complete_tail_slow;
74 u64 rx_csum_unnecessary_inner;76 u64 rx_csum_unnecessary_inner;
75 u64 rx_xdp_drop;77 u64 rx_xdp_drop;
76 u64 rx_xdp_redirect;78 u64 rx_xdp_redirect;
@@ -181,6 +183,8 @@ struct mlx5e_rq_stats { · 104 unmodified lines
181 u64 packets;183 u64 packets;
182 u64 bytes;184 u64 bytes;
183 u64 csum_complete;185 u64 csum_complete;
186 u64 csum_complete_tail;
187 u64 csum_complete_tail_slow;
184 u64 csum_unnecessary;188 u64 csum_unnecessary;
185 u64 csum_unnecessary_inner;189 u64 csum_unnecessary_inner;
186 u64 csum_none;190 u64 csum_none;
drivers/net/ethernet/mellanox/mlx5/core/en_tc.c+68−14
@@ -2158,6 +2158,52 @@ static bool csum_offload_supported(struct mlx5e_priv *priv, · 2157 unmodified lines
2158 return true;2158 return true;
2159}2159}
2160 2160
2161struct ip_ttl_word {
2162 __u8 ttl;
2163 __u8 protocol;
2164 __sum16 check;
2165};
2166
2167struct ipv6_hoplimit_word {
2168 __be16 payload_len;
2169 __u8 nexthdr;
2170 __u8 hop_limit;
2171};
2172
2173static bool is_action_keys_supported(const struct flow_action_entry *act)
2174{
2175 u32 mask, offset;
2176 u8 htype;
2177
2178 htype = act->mangle.htype;
2179 offset = act->mangle.offset;
2180 mask = ~act->mangle.mask;
2181 /* For IPv4 & IPv6 header check 4 byte word,
2182 * to determine that modified fields
2183 * are NOT ttl & hop_limit only.
2184 */
2185 if (htype == FLOW_ACT_MANGLE_HDR_TYPE_IP4) {
2186 struct ip_ttl_word *ttl_word =
2187 (struct ip_ttl_word *)&mask;
2188
2189 if (offset != offsetof(struct iphdr, ttl) ||
2190 ttl_word->protocol ||
2191 ttl_word->check) {
2192 return true;
2193 }
2194 } else if (htype == FLOW_ACT_MANGLE_HDR_TYPE_IP6) {
2195 struct ipv6_hoplimit_word *hoplimit_word =
2196 (struct ipv6_hoplimit_word *)&mask;
2197
2198 if (offset != offsetof(struct ipv6hdr, payload_len) ||
2199 hoplimit_word->payload_len ||
2200 hoplimit_word->nexthdr) {
2201 return true;
2202 }
2203 }
2204 return false;
2205}
2206
2161static bool modify_header_match_supported(struct mlx5_flow_spec *spec,2207static bool modify_header_match_supported(struct mlx5_flow_spec *spec,
2162 struct flow_action *flow_action,2208 struct flow_action *flow_action,
2163 u32 actions,2209 u32 actions,
@@ -2165,9 +2211,9 @@ static bool modify_header_match_supported(struct mlx5_flow_spec *spec, · 1 unmodified line
2165{2211{
2166 const struct flow_action_entry *act;2212 const struct flow_action_entry *act;
2167 bool modify_ip_header;2213 bool modify_ip_header;
2168 u8 htype, ip_proto;
2169 void *headers_v;2214 void *headers_v;
2170 u16 ethertype;2215 u16 ethertype;
2216 u8 ip_proto;
2171 int i;2217 int i;
2172 2218
2173 if (actions & MLX5_FLOW_CONTEXT_ACTION_DECAP)2219 if (actions & MLX5_FLOW_CONTEXT_ACTION_DECAP)
@@ -2187,9 +2233,7 @@ static bool modify_header_match_supported(struct mlx5_flow_spec *spec, · 13 unmodified lines
2187 act->id != FLOW_ACTION_ADD)2233 act->id != FLOW_ACTION_ADD)
2188 continue;2234 continue;
2189 2235
2190 htype = act->mangle.htype;2236 if (is_action_keys_supported(act)) {
2191 if (htype == FLOW_ACT_MANGLE_HDR_TYPE_IP4 ||
2192 htype == FLOW_ACT_MANGLE_HDR_TYPE_IP6) {
2193 modify_ip_header = true;2237 modify_ip_header = true;
2194 break;2238 break;
2195 }2239 }
@@ -2340,15 +2384,22 @@ static int parse_tc_nic_actions(struct mlx5e_priv *priv, · 144 unmodified lines
2340 return 0;2384 return 0;
2341}2385}
2342 2386
2343static inline int cmp_encap_info(struct ip_tunnel_key *a,2387struct encap_key {
2344 struct ip_tunnel_key *b)2388 struct ip_tunnel_key *ip_tun_key;
2389 int tunnel_type;
2390};
2391
2392static inline int cmp_encap_info(struct encap_key *a,
2393 struct encap_key *b)
2345{2394{
2346 return memcmp(a, b, sizeof(*a));2395 return memcmp(a->ip_tun_key, b->ip_tun_key, sizeof(*a->ip_tun_key)) ||
2396 a->tunnel_type != b->tunnel_type;
2347}2397}
2348 2398
2349static inline int hash_encap_info(struct ip_tunnel_key *key)2399static inline int hash_encap_info(struct encap_key *key)
2350{2400{
2351 return jhash(key, sizeof(*key), 0);2401 return jhash(key->ip_tun_key, sizeof(*key->ip_tun_key),
2402 key->tunnel_type);
2352}2403}
2353 2404
2354 2405
@@ -2379,7 +2430,7 @@ static int mlx5e_attach_encap(struct mlx5e_priv *priv, · 24 unmodified lines
2379 struct mlx5_esw_flow_attr *attr = flow->esw_attr;2430 struct mlx5_esw_flow_attr *attr = flow->esw_attr;
2380 struct mlx5e_tc_flow_parse_attr *parse_attr;2431 struct mlx5e_tc_flow_parse_attr *parse_attr;
2381 struct ip_tunnel_info *tun_info;2432 struct ip_tunnel_info *tun_info;
2382 struct ip_tunnel_key *key;2433 struct encap_key key, e_key;
2383 struct mlx5e_encap_entry *e;2434 struct mlx5e_encap_entry *e;
2384 unsigned short family;2435 unsigned short family;
2385 uintptr_t hash_key;2436 uintptr_t hash_key;
@@ -2389,13 +2440,16 @@ static int mlx5e_attach_encap(struct mlx5e_priv *priv, · 3 unmodified lines
2389 parse_attr = attr->parse_attr;2440 parse_attr = attr->parse_attr;
2390 tun_info = &parse_attr->tun_info[out_index];2441 tun_info = &parse_attr->tun_info[out_index];
2391 family = ip_tunnel_info_af(tun_info);2442 family = ip_tunnel_info_af(tun_info);
2392 key = &tun_info->key;2443 key.ip_tun_key = &tun_info->key;
2444 key.tunnel_type = mlx5e_tc_tun_get_type(mirred_dev);
2393 2445
2394 hash_key = hash_encap_info(key);2446 hash_key = hash_encap_info(&key);
2395 2447
2396 hash_for_each_possible_rcu(esw->offloads.encap_tbl, e,2448 hash_for_each_possible_rcu(esw->offloads.encap_tbl, e,
2397 encap_hlist, hash_key) {2449 encap_hlist, hash_key) {
2398 if (!cmp_encap_info(&e->tun_info.key, key)) {2450 e_key.ip_tun_key = &e->tun_info.key;
2451 e_key.tunnel_type = e->tunnel_type;
2452 if (!cmp_encap_info(&e_key, &key)) {
2399 found = true;2453 found = true;
2400 break;2454 break;
2401 }2455 }
@@ -2657,7 +2711,7 @@ static int parse_tc_fdb_actions(struct mlx5e_priv *priv, · 255 unmodified lines
2657 2711
2658 if (hdrs[TCA_PEDIT_KEY_EX_CMD_SET].pedits ||2712 if (hdrs[TCA_PEDIT_KEY_EX_CMD_SET].pedits ||
2659 hdrs[TCA_PEDIT_KEY_EX_CMD_ADD].pedits) {2713 hdrs[TCA_PEDIT_KEY_EX_CMD_ADD].pedits) {
2660 err = alloc_tc_pedit_action(priv, MLX5_FLOW_NAMESPACE_KERNEL,2714 err = alloc_tc_pedit_action(priv, MLX5_FLOW_NAMESPACE_FDB,
2661 parse_attr, hdrs, extack);2715 parse_attr, hdrs, extack);
2662 if (err)2716 if (err)
2663 return err;2717 return err;
drivers/net/ethernet/mellanox/mlx5/core/eswitch.c+5−4
@@ -105,8 +105,7 @@ static int arm_vport_context_events_cmd(struct mlx5_core_dev *dev, u16 vport, · 104 unmodified lines
105 opcode, MLX5_CMD_OP_MODIFY_NIC_VPORT_CONTEXT);105 opcode, MLX5_CMD_OP_MODIFY_NIC_VPORT_CONTEXT);
106 MLX5_SET(modify_nic_vport_context_in, in, field_select.change_event, 1);106 MLX5_SET(modify_nic_vport_context_in, in, field_select.change_event, 1);
107 MLX5_SET(modify_nic_vport_context_in, in, vport_number, vport);107 MLX5_SET(modify_nic_vport_context_in, in, vport_number, vport);
108 if (vport)108 MLX5_SET(modify_nic_vport_context_in, in, other_vport, 1);
109 MLX5_SET(modify_nic_vport_context_in, in, other_vport, 1);
110 nic_vport_ctx = MLX5_ADDR_OF(modify_nic_vport_context_in,109 nic_vport_ctx = MLX5_ADDR_OF(modify_nic_vport_context_in,
111 in, nic_vport_context);110 in, nic_vport_context);
112 111
@@ -134,8 +133,7 @@ static int modify_esw_vport_context_cmd(struct mlx5_core_dev *dev, u16 vport, · 21 unmodified lines
134 MLX5_SET(modify_esw_vport_context_in, in, opcode,133 MLX5_SET(modify_esw_vport_context_in, in, opcode,
135 MLX5_CMD_OP_MODIFY_ESW_VPORT_CONTEXT);134 MLX5_CMD_OP_MODIFY_ESW_VPORT_CONTEXT);
136 MLX5_SET(modify_esw_vport_context_in, in, vport_number, vport);135 MLX5_SET(modify_esw_vport_context_in, in, vport_number, vport);
137 if (vport)136 MLX5_SET(modify_esw_vport_context_in, in, other_vport, 1);
138 MLX5_SET(modify_esw_vport_context_in, in, other_vport, 1);
139 return mlx5_cmd_exec(dev, in, inlen, out, sizeof(out));137 return mlx5_cmd_exec(dev, in, inlen, out, sizeof(out));
140}138}
141 139
@@ -431,6 +429,8 @@ static int esw_create_legacy_table(struct mlx5_eswitch *esw) · 289 unmodified lines
431{429{
432 int err;430 int err;
433 431
432 memset(&esw->fdb_table.legacy, 0, sizeof(struct legacy_fdb));
433
434 err = esw_create_legacy_vepa_table(esw);434 err = esw_create_legacy_vepa_table(esw);
435 if (err)435 if (err)
436 return err;436 return err;
@@ -2157,6 +2157,7 @@ static int _mlx5_eswitch_set_vepa_locked(struct mlx5_eswitch *esw, · 1720 unmodified lines
2157 2157
2158 /* Star rule to forward all traffic to uplink vport */2158 /* Star rule to forward all traffic to uplink vport */
2159 memset(spec, 0, sizeof(*spec));2159 memset(spec, 0, sizeof(*spec));
2160 memset(&dest, 0, sizeof(dest));
2160 dest.type = MLX5_FLOW_DESTINATION_TYPE_VPORT;2161 dest.type = MLX5_FLOW_DESTINATION_TYPE_VPORT;
2161 dest.vport.num = MLX5_VPORT_UPLINK;2162 dest.vport.num = MLX5_VPORT_UPLINK;
2162 flow_act.action = MLX5_FLOW_CONTEXT_ACTION_FWD_DEST;2163 flow_act.action = MLX5_FLOW_CONTEXT_ACTION_FWD_DEST;
drivers/net/ethernet/mellanox/mlx5/core/eswitch_offloads.c+1−0
@@ -1611,6 +1611,7 @@ static int esw_offloads_steering_init(struct mlx5_eswitch *esw, int nvports) · 1610 unmodified lines
1611{1611{
1612 int err;1612 int err;
1613 1613
1614 memset(&esw->fdb_table.offloads, 0, sizeof(struct offloads_fdb));
1614 mutex_init(&esw->fdb_table.offloads.fdb_prio_lock);1615 mutex_init(&esw->fdb_table.offloads.fdb_prio_lock);
1615 1616
1616 err = esw_create_offloads_fdb_tables(esw, nvports);1617 err = esw_create_offloads_fdb_tables(esw, nvports);
drivers/net/ethernet/mellanox/mlx5/core/fpga/tls.c+24−29
@@ -148,14 +148,16 @@ static int mlx5_fpga_tls_alloc_swid(struct idr *idr, spinlock_t *idr_spinlock, · 147 unmodified lines
148 return ret;148 return ret;
149}149}
150 150
151static void mlx5_fpga_tls_release_swid(struct idr *idr,151static void *mlx5_fpga_tls_release_swid(struct idr *idr,
152 spinlock_t *idr_spinlock, u32 swid)152 spinlock_t *idr_spinlock, u32 swid)
153{153{
154 unsigned long flags;154 unsigned long flags;
155 void *ptr;
155 156
156 spin_lock_irqsave(idr_spinlock, flags);157 spin_lock_irqsave(idr_spinlock, flags);
157 idr_remove(idr, swid);158 ptr = idr_remove(idr, swid);
158 spin_unlock_irqrestore(idr_spinlock, flags);159 spin_unlock_irqrestore(idr_spinlock, flags);
160 return ptr;
159}161}
160 162
161static void mlx_tls_kfree_complete(struct mlx5_fpga_conn *conn,163static void mlx_tls_kfree_complete(struct mlx5_fpga_conn *conn,
@@ -165,20 +167,12 @@ static void mlx_tls_kfree_complete(struct mlx5_fpga_conn *conn, · 3 unmodified lines
165 kfree(buf);167 kfree(buf);
166}168}
167 169
168struct mlx5_teardown_stream_context {
169 struct mlx5_fpga_tls_command_context cmd;
170 u32 swid;
171};
172
173static void170static void
174mlx5_fpga_tls_teardown_completion(struct mlx5_fpga_conn *conn,171mlx5_fpga_tls_teardown_completion(struct mlx5_fpga_conn *conn,
175 struct mlx5_fpga_device *fdev,172 struct mlx5_fpga_device *fdev,
176 struct mlx5_fpga_tls_command_context *cmd,173 struct mlx5_fpga_tls_command_context *cmd,
177 struct mlx5_fpga_dma_buf *resp)174 struct mlx5_fpga_dma_buf *resp)
178{175{
179 struct mlx5_teardown_stream_context *ctx =
180 container_of(cmd, struct mlx5_teardown_stream_context, cmd);
181
182 if (resp) {176 if (resp) {
183 u32 syndrome = MLX5_GET(tls_resp, resp->sg[0].data, syndrome);177 u32 syndrome = MLX5_GET(tls_resp, resp->sg[0].data, syndrome);
184 178
@@ -186,14 +180,6 @@ mlx5_fpga_tls_teardown_completion(struct mlx5_fpga_conn *conn, · 1 unmodified line
186 mlx5_fpga_err(fdev,180 mlx5_fpga_err(fdev,
187 "Teardown stream failed with syndrome = %d",181 "Teardown stream failed with syndrome = %d",
188 syndrome);182 syndrome);
189 else if (MLX5_GET(tls_cmd, cmd->buf.sg[0].data, direction_sx))
190 mlx5_fpga_tls_release_swid(&fdev->tls->tx_idr,
191 &fdev->tls->tx_idr_spinlock,
192 ctx->swid);
193 else
194 mlx5_fpga_tls_release_swid(&fdev->tls->rx_idr,
195 &fdev->tls->rx_idr_spinlock,
196 ctx->swid);
197 }183 }
198 mlx5_fpga_tls_put_command_ctx(cmd);184 mlx5_fpga_tls_put_command_ctx(cmd);
199}185}
@@ -225,8 +211,14 @@ int mlx5_fpga_tls_resync_rx(struct mlx5_core_dev *mdev, u32 handle, u32 seq, · 25 unmodified lines
225 211
226 rcu_read_lock();212 rcu_read_lock();
227 flow = idr_find(&mdev->fpga->tls->rx_idr, ntohl(handle));213 flow = idr_find(&mdev->fpga->tls->rx_idr, ntohl(handle));
228 rcu_read_unlock();214 if (unlikely(!flow)) {
215 rcu_read_unlock();
216 WARN_ONCE(1, "Received NULL pointer for handle\n");
217 kfree(buf);
218 return -EINVAL;
219 }
229 mlx5_fpga_tls_flow_to_cmd(flow, cmd);220 mlx5_fpga_tls_flow_to_cmd(flow, cmd);
221 rcu_read_unlock();
230 222
231 MLX5_SET(tls_cmd, cmd, swid, ntohl(handle));223 MLX5_SET(tls_cmd, cmd, swid, ntohl(handle));
232 MLX5_SET64(tls_cmd, cmd, tls_rcd_sn, be64_to_cpu(rcd_sn));224 MLX5_SET64(tls_cmd, cmd, tls_rcd_sn, be64_to_cpu(rcd_sn));
@@ -238,6 +230,8 @@ int mlx5_fpga_tls_resync_rx(struct mlx5_core_dev *mdev, u32 handle, u32 seq, · 5 unmodified lines
238 buf->complete = mlx_tls_kfree_complete;230 buf->complete = mlx_tls_kfree_complete;
239 231
240 ret = mlx5_fpga_sbu_conn_sendmsg(mdev->fpga->tls->conn, buf);232 ret = mlx5_fpga_sbu_conn_sendmsg(mdev->fpga->tls->conn, buf);
233 if (ret < 0)
234 kfree(buf);
241 235
242 return ret;236 return ret;
243}237}
@@ -245,7 +239,7 @@ int mlx5_fpga_tls_resync_rx(struct mlx5_core_dev *mdev, u32 handle, u32 seq, · 1 unmodified line
245static void mlx5_fpga_tls_send_teardown_cmd(struct mlx5_core_dev *mdev,239static void mlx5_fpga_tls_send_teardown_cmd(struct mlx5_core_dev *mdev,
246 void *flow, u32 swid, gfp_t flags)240 void *flow, u32 swid, gfp_t flags)
247{241{
248 struct mlx5_teardown_stream_context *ctx;242 struct mlx5_fpga_tls_command_context *ctx;
249 struct mlx5_fpga_dma_buf *buf;243 struct mlx5_fpga_dma_buf *buf;
250 void *cmd;244 void *cmd;
251 245
@@ -253,7 +247,7 @@ static void mlx5_fpga_tls_send_teardown_cmd(struct mlx5_core_dev *mdev, · 1 unmodified line
253 if (!ctx)247 if (!ctx)
254 return;248 return;
255 249
256 buf = &ctx->cmd.buf;250 buf = &ctx->buf;
257 cmd = (ctx + 1);251 cmd = (ctx + 1);
258 MLX5_SET(tls_cmd, cmd, command_type, CMD_TEARDOWN_STREAM);252 MLX5_SET(tls_cmd, cmd, command_type, CMD_TEARDOWN_STREAM);
259 MLX5_SET(tls_cmd, cmd, swid, swid);253 MLX5_SET(tls_cmd, cmd, swid, swid);
@@ -264,8 +258,7 @@ static void mlx5_fpga_tls_send_teardown_cmd(struct mlx5_core_dev *mdev, · 4 unmodified lines
264 buf->sg[0].data = cmd;258 buf->sg[0].data = cmd;
265 buf->sg[0].size = MLX5_TLS_COMMAND_SIZE;259 buf->sg[0].size = MLX5_TLS_COMMAND_SIZE;
266 260
267 ctx->swid = swid;261 mlx5_fpga_tls_cmd_send(mdev->fpga, ctx,
268 mlx5_fpga_tls_cmd_send(mdev->fpga, &ctx->cmd,
269 mlx5_fpga_tls_teardown_completion);262 mlx5_fpga_tls_teardown_completion);
270}263}
271 264
@@ -275,13 +268,14 @@ void mlx5_fpga_tls_del_flow(struct mlx5_core_dev *mdev, u32 swid, · 3 unmodified lines
275 struct mlx5_fpga_tls *tls = mdev->fpga->tls;268 struct mlx5_fpga_tls *tls = mdev->fpga->tls;
276 void *flow;269 void *flow;
277 270
278 rcu_read_lock();
279 if (direction_sx)271 if (direction_sx)
280 flow = idr_find(&tls->tx_idr, swid);272 flow = mlx5_fpga_tls_release_swid(&tls->tx_idr,
273 &tls->tx_idr_spinlock,
274 swid);
281 else275 else
282 flow = idr_find(&tls->rx_idr, swid);276 flow = mlx5_fpga_tls_release_swid(&tls->rx_idr,
283 277 &tls->rx_idr_spinlock,
284 rcu_read_unlock();278 swid);
285 279
286 if (!flow) {280 if (!flow) {
287 mlx5_fpga_err(mdev->fpga, "No flow information for swid %u\n",281 mlx5_fpga_err(mdev->fpga, "No flow information for swid %u\n",
@@ -289,6 +283,7 @@ void mlx5_fpga_tls_del_flow(struct mlx5_core_dev *mdev, u32 swid, · 1 unmodified line
289 return;283 return;
290 }284 }
291 285
286 synchronize_rcu(); /* before kfree(flow) */
292 mlx5_fpga_tls_send_teardown_cmd(mdev, flow, swid, flags);287 mlx5_fpga_tls_send_teardown_cmd(mdev, flow, swid, flags);
293}288}
294 289
drivers/net/ethernet/mellanox/mlx5/core/main.c+0−20
@@ -164,26 +164,6 @@ static struct mlx5_profile profile[] = { · 163 unmodified lines
164 .size = 8,164 .size = 8,
165 .limit = 4165 .limit = 4
166 },166 },
167 .mr_cache[16] = {
168 .size = 8,
169 .limit = 4
170 },
171 .mr_cache[17] = {
172 .size = 8,
173 .limit = 4
174 },
175 .mr_cache[18] = {
176 .size = 8,
177 .limit = 4
178 },
179 .mr_cache[19] = {
180 .size = 4,
181 .limit = 2
182 },
183 .mr_cache[20] = {
184 .size = 4,
185 .limit = 2
186 },
187 },167 },
188};168};
189 169
drivers/net/ethernet/mellanox/mlxsw/core.c+3−3
@@ -568,7 +568,7 @@ static int mlxsw_emad_init(struct mlxsw_core *mlxsw_core) · 567 unmodified lines
568 if (!(mlxsw_core->bus->features & MLXSW_BUS_F_TXRX))568 if (!(mlxsw_core->bus->features & MLXSW_BUS_F_TXRX))
569 return 0;569 return 0;
570 570
571 emad_wq = alloc_workqueue("mlxsw_core_emad", WQ_MEM_RECLAIM, 0);571 emad_wq = alloc_workqueue("mlxsw_core_emad", 0, 0);
572 if (!emad_wq)572 if (!emad_wq)
573 return -ENOMEM;573 return -ENOMEM;
574 mlxsw_core->emad_wq = emad_wq;574 mlxsw_core->emad_wq = emad_wq;
@@ -1958,10 +1958,10 @@ static int __init mlxsw_core_module_init(void) · 1383 unmodified lines
1958{1958{
1959 int err;1959 int err;
1960 1960
1961 mlxsw_wq = alloc_workqueue(mlxsw_core_driver_name, WQ_MEM_RECLAIM, 0);1961 mlxsw_wq = alloc_workqueue(mlxsw_core_driver_name, 0, 0);
1962 if (!mlxsw_wq)1962 if (!mlxsw_wq)
1963 return -ENOMEM;1963 return -ENOMEM;
1964 mlxsw_owq = alloc_ordered_workqueue("%s_ordered", WQ_MEM_RECLAIM,1964 mlxsw_owq = alloc_ordered_workqueue("%s_ordered", 0,
1965 mlxsw_core_driver_name);1965 mlxsw_core_driver_name);
1966 if (!mlxsw_owq) {1966 if (!mlxsw_owq) {
1967 err = -ENOMEM;1967 err = -ENOMEM;
drivers/net/ethernet/mellanox/mlxsw/spectrum_buffers.c+11−8
@@ -70,6 +70,7 @@ static const struct mlxsw_sp_sb_pool_des mlxsw_sp2_sb_pool_dess[] = { · 69 unmodified lines
70 {MLXSW_REG_SBXX_DIR_EGRESS, 1},70 {MLXSW_REG_SBXX_DIR_EGRESS, 1},
71 {MLXSW_REG_SBXX_DIR_EGRESS, 2},71 {MLXSW_REG_SBXX_DIR_EGRESS, 2},
72 {MLXSW_REG_SBXX_DIR_EGRESS, 3},72 {MLXSW_REG_SBXX_DIR_EGRESS, 3},
73 {MLXSW_REG_SBXX_DIR_EGRESS, 15},
73};74};
74 75
75#define MLXSW_SP_SB_ING_TC_COUNT 876#define MLXSW_SP_SB_ING_TC_COUNT 8
@@ -428,6 +429,7 @@ static const struct mlxsw_sp_sb_pr mlxsw_sp2_sb_prs[] = { · 352 unmodified lines
428 MLXSW_SP_SB_PR(MLXSW_REG_SBPR_MODE_STATIC, 0),429 MLXSW_SP_SB_PR(MLXSW_REG_SBPR_MODE_STATIC, 0),
429 MLXSW_SP_SB_PR(MLXSW_REG_SBPR_MODE_STATIC, 0),430 MLXSW_SP_SB_PR(MLXSW_REG_SBPR_MODE_STATIC, 0),
430 MLXSW_SP_SB_PR(MLXSW_REG_SBPR_MODE_STATIC, 0),431 MLXSW_SP_SB_PR(MLXSW_REG_SBPR_MODE_STATIC, 0),
432 MLXSW_SP_SB_PR(MLXSW_REG_SBPR_MODE_STATIC, MLXSW_SP_SB_INFI),
431};433};
432 434
433static int mlxsw_sp_sb_prs_init(struct mlxsw_sp *mlxsw_sp,435static int mlxsw_sp_sb_prs_init(struct mlxsw_sp *mlxsw_sp,
@@ -517,14 +519,14 @@ static const struct mlxsw_sp_sb_cm mlxsw_sp2_sb_cms_egress[] = { · 83 unmodified lines
517 MLXSW_SP_SB_CM(0, 7, 4),519 MLXSW_SP_SB_CM(0, 7, 4),
518 MLXSW_SP_SB_CM(0, 7, 4),520 MLXSW_SP_SB_CM(0, 7, 4),
519 MLXSW_SP_SB_CM(0, 7, 4),521 MLXSW_SP_SB_CM(0, 7, 4),
520 MLXSW_SP_SB_CM(0, 7, 4),522 MLXSW_SP_SB_CM(0, MLXSW_SP_SB_INFI, 8),
521 MLXSW_SP_SB_CM(0, 7, 4),523 MLXSW_SP_SB_CM(0, MLXSW_SP_SB_INFI, 8),
522 MLXSW_SP_SB_CM(0, 7, 4),524 MLXSW_SP_SB_CM(0, MLXSW_SP_SB_INFI, 8),
523 MLXSW_SP_SB_CM(0, 7, 4),525 MLXSW_SP_SB_CM(0, MLXSW_SP_SB_INFI, 8),
524 MLXSW_SP_SB_CM(0, 7, 4),526 MLXSW_SP_SB_CM(0, MLXSW_SP_SB_INFI, 8),
525 MLXSW_SP_SB_CM(0, 7, 4),527 MLXSW_SP_SB_CM(0, MLXSW_SP_SB_INFI, 8),
526 MLXSW_SP_SB_CM(0, 7, 4),528 MLXSW_SP_SB_CM(0, MLXSW_SP_SB_INFI, 8),
527 MLXSW_SP_SB_CM(0, 7, 4),529 MLXSW_SP_SB_CM(0, MLXSW_SP_SB_INFI, 8),
528 MLXSW_SP_SB_CM(1, 0xff, 4),530 MLXSW_SP_SB_CM(1, 0xff, 4),
529};531};
530 532
@@ -671,6 +673,7 @@ static const struct mlxsw_sp_sb_pm mlxsw_sp2_sb_pms[] = { · 140 unmodified lines
671 MLXSW_SP_SB_PM(0, 0),673 MLXSW_SP_SB_PM(0, 0),
672 MLXSW_SP_SB_PM(0, 0),674 MLXSW_SP_SB_PM(0, 0),
673 MLXSW_SP_SB_PM(0, 0),675 MLXSW_SP_SB_PM(0, 0),
676 MLXSW_SP_SB_PM(10000, 90000),
674};677};
675 678
676static int mlxsw_sp_port_sb_pms_init(struct mlxsw_sp_port *mlxsw_sp_port)679static int mlxsw_sp_port_sb_pms_init(struct mlxsw_sp_port *mlxsw_sp_port)
drivers/net/ethernet/mellanox/mlxsw/spectrum_router.c+1−1
@@ -6781,7 +6781,7 @@ static int mlxsw_sp_router_port_check_rif_addr(struct mlxsw_sp *mlxsw_sp, · 6780 unmodified lines
6781 /* A RIF is not created for macvlan netdevs. Their MAC is used to6781 /* A RIF is not created for macvlan netdevs. Their MAC is used to
6782 * populate the FDB6782 * populate the FDB
6783 */6783 */
6784 if (netif_is_macvlan(dev))6784 if (netif_is_macvlan(dev) || netif_is_l3_master(dev))
6785 return 0;6785 return 0;
6786 6786
6787 for (i = 0; i < MLXSW_CORE_RES_GET(mlxsw_sp->core, MAX_RIFS); i++) {6787 for (i = 0; i < MLXSW_CORE_RES_GET(mlxsw_sp->core, MAX_RIFS); i++) {
drivers/net/ethernet/mellanox/mlxsw/spectrum_switchdev.c+1−1
@@ -1630,7 +1630,7 @@ static int mlxsw_sp_port_mdb_add(struct mlxsw_sp_port *mlxsw_sp_port, · 1629 unmodified lines
1630 u16 fid_index;1630 u16 fid_index;
1631 int err = 0;1631 int err = 0;
1632 1632
1633 if (switchdev_trans_ph_prepare(trans))1633 if (switchdev_trans_ph_commit(trans))
1634 return 0;1634 return 0;
1635 1635
1636 bridge_port = mlxsw_sp_bridge_port_find(mlxsw_sp->bridge, orig_dev);1636 bridge_port = mlxsw_sp_bridge_port_find(mlxsw_sp->bridge, orig_dev);
drivers/net/ethernet/mscc/ocelot.c+15−9
@@ -613,7 +613,7 @@ static int ocelot_mact_mc_add(struct ocelot_port *port, · 612 unmodified lines
613 struct netdev_hw_addr *hw_addr)613 struct netdev_hw_addr *hw_addr)
614{614{
615 struct ocelot *ocelot = port->ocelot;615 struct ocelot *ocelot = port->ocelot;
616 struct netdev_hw_addr *ha = kzalloc(sizeof(*ha), GFP_KERNEL);616 struct netdev_hw_addr *ha = kzalloc(sizeof(*ha), GFP_ATOMIC);
617 617
618 if (!ha)618 if (!ha)
619 return -ENOMEM;619 return -ENOMEM;
@@ -959,10 +959,8 @@ static void ocelot_get_strings(struct net_device *netdev, u32 sset, u8 *data) · 339 unmodified lines
959 ETH_GSTRING_LEN);959 ETH_GSTRING_LEN);
960}960}
961 961
962static void ocelot_check_stats(struct work_struct *work)962static void ocelot_update_stats(struct ocelot *ocelot)
963{963{
964 struct delayed_work *del_work = to_delayed_work(work);
965 struct ocelot *ocelot = container_of(del_work, struct ocelot, stats_work);
966 int i, j;964 int i, j;
967 965
968 mutex_lock(&ocelot->stats_lock);966 mutex_lock(&ocelot->stats_lock);
@@ -986,11 +984,19 @@ static void ocelot_check_stats(struct work_struct *work) · 17 unmodified lines
986 }984 }
987 }985 }
988 986
989 cancel_delayed_work(&ocelot->stats_work);987 mutex_unlock(&ocelot->stats_lock);
988}
989
990static void ocelot_check_stats_work(struct work_struct *work)
991{
992 struct delayed_work *del_work = to_delayed_work(work);
993 struct ocelot *ocelot = container_of(del_work, struct ocelot,
994 stats_work);
995
996 ocelot_update_stats(ocelot);
997
990 queue_delayed_work(ocelot->stats_queue, &ocelot->stats_work,998 queue_delayed_work(ocelot->stats_queue, &ocelot->stats_work,
991 OCELOT_STATS_CHECK_DELAY);999 OCELOT_STATS_CHECK_DELAY);
992
993 mutex_unlock(&ocelot->stats_lock);
994}1000}
995 1001
996static void ocelot_get_ethtool_stats(struct net_device *dev,1002static void ocelot_get_ethtool_stats(struct net_device *dev,
@@ -1001,7 +1007,7 @@ static void ocelot_get_ethtool_stats(struct net_device *dev, · 4 unmodified lines
1001 int i;1007 int i;
1002 1008
1003 /* check and update now */1009 /* check and update now */
1004 ocelot_check_stats(&ocelot->stats_work.work);1010 ocelot_update_stats(ocelot);
1005 1011
1006 /* Copy all counters */1012 /* Copy all counters */
1007 for (i = 0; i < ocelot->num_stats; i++)1013 for (i = 0; i < ocelot->num_stats; i++)
@@ -1809,7 +1815,7 @@ int ocelot_init(struct ocelot *ocelot) · 801 unmodified lines
1809 ANA_CPUQ_8021_CFG_CPUQ_BPDU_VAL(6),1815 ANA_CPUQ_8021_CFG_CPUQ_BPDU_VAL(6),
1810 ANA_CPUQ_8021_CFG, i);1816 ANA_CPUQ_8021_CFG, i);
1811 1817
1812 INIT_DELAYED_WORK(&ocelot->stats_work, ocelot_check_stats);1818 INIT_DELAYED_WORK(&ocelot->stats_work, ocelot_check_stats_work);
1813 queue_delayed_work(ocelot->stats_queue, &ocelot->stats_work,1819 queue_delayed_work(ocelot->stats_queue, &ocelot->stats_work,
1814 OCELOT_STATS_CHECK_DELAY);1820 OCELOT_STATS_CHECK_DELAY);
1815 return 0;1821 return 0;
drivers/net/ethernet/neterion/vxge/vxge-config.c+1−0
@@ -2366,6 +2366,7 @@ static void *__vxge_hw_blockpool_malloc(struct __vxge_hw_device *devh, u32 size, · 2365 unmodified lines
2366 dma_object->addr))) {2366 dma_object->addr))) {
2367 vxge_os_dma_free(devh->pdev, memblock,2367 vxge_os_dma_free(devh->pdev, memblock,
2368 &dma_object->acc_handle);2368 &dma_object->acc_handle);
2369 memblock = NULL;
2369 goto exit;2370 goto exit;
2370 }2371 }
2371 2372
drivers/net/ethernet/netronome/nfp/flower/action.c+1−2
@@ -48,8 +48,7 @@ nfp_fl_push_vlan(struct nfp_fl_push_vlan *push_vlan, · 47 unmodified lines
48 48
49 tmp_push_vlan_tci =49 tmp_push_vlan_tci =
50 FIELD_PREP(NFP_FL_PUSH_VLAN_PRIO, act->vlan.prio) |50 FIELD_PREP(NFP_FL_PUSH_VLAN_PRIO, act->vlan.prio) |
51 FIELD_PREP(NFP_FL_PUSH_VLAN_VID, act->vlan.vid) |51 FIELD_PREP(NFP_FL_PUSH_VLAN_VID, act->vlan.vid);
52 NFP_FL_PUSH_VLAN_CFI;
53 push_vlan->vlan_tci = cpu_to_be16(tmp_push_vlan_tci);52 push_vlan->vlan_tci = cpu_to_be16(tmp_push_vlan_tci);
54}53}
55 54
drivers/net/ethernet/netronome/nfp/flower/cmsg.h+1−2
@@ -26,7 +26,7 @@ · 25 unmodified lines
26#define NFP_FLOWER_LAYER2_GENEVE_OP BIT(6)26#define NFP_FLOWER_LAYER2_GENEVE_OP BIT(6)
27 27
28#define NFP_FLOWER_MASK_VLAN_PRIO GENMASK(15, 13)28#define NFP_FLOWER_MASK_VLAN_PRIO GENMASK(15, 13)
29#define NFP_FLOWER_MASK_VLAN_CFI BIT(12)29#define NFP_FLOWER_MASK_VLAN_PRESENT BIT(12)
30#define NFP_FLOWER_MASK_VLAN_VID GENMASK(11, 0)30#define NFP_FLOWER_MASK_VLAN_VID GENMASK(11, 0)
31 31
32#define NFP_FLOWER_MASK_MPLS_LB GENMASK(31, 12)32#define NFP_FLOWER_MASK_MPLS_LB GENMASK(31, 12)
@@ -82,7 +82,6 @@ · 49 unmodified lines
82#define NFP_FL_OUT_FLAGS_TYPE_IDX GENMASK(2, 0)82#define NFP_FL_OUT_FLAGS_TYPE_IDX GENMASK(2, 0)
83 83
84#define NFP_FL_PUSH_VLAN_PRIO GENMASK(15, 13)84#define NFP_FL_PUSH_VLAN_PRIO GENMASK(15, 13)
85#define NFP_FL_PUSH_VLAN_CFI BIT(12)
86#define NFP_FL_PUSH_VLAN_VID GENMASK(11, 0)85#define NFP_FL_PUSH_VLAN_VID GENMASK(11, 0)
87 86
88#define IPV6_FLOW_LABEL_MASK cpu_to_be32(0x000fffff)87#define IPV6_FLOW_LABEL_MASK cpu_to_be32(0x000fffff)
drivers/net/ethernet/netronome/nfp/flower/match.c+13−14
@@ -30,20 +30,19 @@ nfp_flower_compile_meta_tci(struct nfp_flower_meta_tci *ext, · 29 unmodified lines
30 30
31 flow_rule_match_vlan(rule, &match);31 flow_rule_match_vlan(rule, &match);
32 /* Populate the tci field. */32 /* Populate the tci field. */
33 if (match.key->vlan_id || match.key->vlan_priority) {33 tmp_tci = NFP_FLOWER_MASK_VLAN_PRESENT;
34 tmp_tci = FIELD_PREP(NFP_FLOWER_MASK_VLAN_PRIO,34 tmp_tci |= FIELD_PREP(NFP_FLOWER_MASK_VLAN_PRIO,
35 match.key->vlan_priority) |35 match.key->vlan_priority) |
36 FIELD_PREP(NFP_FLOWER_MASK_VLAN_VID,36 FIELD_PREP(NFP_FLOWER_MASK_VLAN_VID,
37 match.key->vlan_id) |37 match.key->vlan_id);
38 NFP_FLOWER_MASK_VLAN_CFI;38 ext->tci = cpu_to_be16(tmp_tci);
39 ext->tci = cpu_to_be16(tmp_tci);39
40 tmp_tci = FIELD_PREP(NFP_FLOWER_MASK_VLAN_PRIO,40 tmp_tci = NFP_FLOWER_MASK_VLAN_PRESENT;
41 match.mask->vlan_priority) |41 tmp_tci |= FIELD_PREP(NFP_FLOWER_MASK_VLAN_PRIO,
42 FIELD_PREP(NFP_FLOWER_MASK_VLAN_VID,42 match.mask->vlan_priority) |
43 match.mask->vlan_id) |43 FIELD_PREP(NFP_FLOWER_MASK_VLAN_VID,
44 NFP_FLOWER_MASK_VLAN_CFI;44 match.mask->vlan_id);
45 msk->tci = cpu_to_be16(tmp_tci);45 msk->tci = cpu_to_be16(tmp_tci);
46 }
47 }46 }
48}47}
49 48
drivers/net/ethernet/netronome/nfp/nfp_net_repr.c+2−2
@@ -195,7 +195,7 @@ static netdev_tx_t nfp_repr_xmit(struct sk_buff *skb, struct net_device *netdev) · 194 unmodified lines
195 ret = dev_queue_xmit(skb);195 ret = dev_queue_xmit(skb);
196 nfp_repr_inc_tx_stats(netdev, len, ret);196 nfp_repr_inc_tx_stats(netdev, len, ret);
197 197
198 return ret;198 return NETDEV_TX_OK;
199}199}
200 200
201static int nfp_repr_stop(struct net_device *netdev)201static int nfp_repr_stop(struct net_device *netdev)
@@ -383,7 +383,7 @@ int nfp_repr_init(struct nfp_app *app, struct net_device *netdev, · 181 unmodified lines
383 netdev->features &= ~(NETIF_F_TSO | NETIF_F_TSO6);383 netdev->features &= ~(NETIF_F_TSO | NETIF_F_TSO6);
384 netdev->gso_max_segs = NFP_NET_LSO_MAX_SEGS;384 netdev->gso_max_segs = NFP_NET_LSO_MAX_SEGS;
385 385
386 netdev->priv_flags |= IFF_NO_QUEUE;386 netdev->priv_flags |= IFF_NO_QUEUE | IFF_DISABLE_NETPOLL;
387 netdev->features |= NETIF_F_LLTX;387 netdev->features |= NETIF_F_LLTX;
388 388
389 if (nfp_app_has_tc(app)) {389 if (nfp_app_has_tc(app)) {
drivers/net/ethernet/qlogic/qed/qed.h+5−2
@@ -431,12 +431,16 @@ struct qed_qm_info { · 430 unmodified lines
431 u8 num_pf_rls;431 u8 num_pf_rls;
432};432};
433 433
434#define QED_OVERFLOW_BIT 1
435
434struct qed_db_recovery_info {436struct qed_db_recovery_info {
435 struct list_head list;437 struct list_head list;
436 438
437 /* Lock to protect the doorbell recovery mechanism list */439 /* Lock to protect the doorbell recovery mechanism list */
438 spinlock_t lock;440 spinlock_t lock;
441 bool dorq_attn;
439 u32 db_recovery_counter;442 u32 db_recovery_counter;
443 unsigned long overflow;
440};444};
441 445
442struct storm_stats {446struct storm_stats {
@@ -920,8 +924,7 @@ u16 qed_get_cm_pq_idx_llt_mtc(struct qed_hwfn *p_hwfn, u8 tc); · 477 unmodified lines
920 924
921/* doorbell recovery mechanism */925/* doorbell recovery mechanism */
922void qed_db_recovery_dp(struct qed_hwfn *p_hwfn);926void qed_db_recovery_dp(struct qed_hwfn *p_hwfn);
923void qed_db_recovery_execute(struct qed_hwfn *p_hwfn,927void qed_db_recovery_execute(struct qed_hwfn *p_hwfn);
924 enum qed_db_rec_exec db_exec);
925bool qed_edpm_enabled(struct qed_hwfn *p_hwfn);928bool qed_edpm_enabled(struct qed_hwfn *p_hwfn);
926 929
927/* Other Linux specific common definitions */930/* Other Linux specific common definitions */
drivers/net/ethernet/qlogic/qed/qed_dev.c+34−51
@@ -102,11 +102,15 @@ static void qed_db_recovery_dp_entry(struct qed_hwfn *p_hwfn, · 101 unmodified lines
102 102
103/* Doorbell address sanity (address within doorbell bar range) */103/* Doorbell address sanity (address within doorbell bar range) */
104static bool qed_db_rec_sanity(struct qed_dev *cdev,104static bool qed_db_rec_sanity(struct qed_dev *cdev,
105 void __iomem *db_addr, void *db_data)105 void __iomem *db_addr,
106 enum qed_db_rec_width db_width,
107 void *db_data)
106{108{
109 u32 width = (db_width == DB_REC_WIDTH_32B) ? 32 : 64;
110
107 /* Make sure doorbell address is within the doorbell bar */111 /* Make sure doorbell address is within the doorbell bar */
108 if (db_addr < cdev->doorbells ||112 if (db_addr < cdev->doorbells ||
109 (u8 __iomem *)db_addr >113 (u8 __iomem *)db_addr + width >
110 (u8 __iomem *)cdev->doorbells + cdev->db_size) {114 (u8 __iomem *)cdev->doorbells + cdev->db_size) {
111 WARN(true,115 WARN(true,
112 "Illegal doorbell address: %p. Legal range for doorbell addresses is [%p..%p]\n",116 "Illegal doorbell address: %p. Legal range for doorbell addresses is [%p..%p]\n",
@@ -159,7 +163,7 @@ int qed_db_recovery_add(struct qed_dev *cdev, · 46 unmodified lines
159 }163 }
160 164
161 /* Sanitize doorbell address */165 /* Sanitize doorbell address */
162 if (!qed_db_rec_sanity(cdev, db_addr, db_data))166 if (!qed_db_rec_sanity(cdev, db_addr, db_width, db_data))
163 return -EINVAL;167 return -EINVAL;
164 168
165 /* Obtain hwfn from doorbell address */169 /* Obtain hwfn from doorbell address */
@@ -205,10 +209,6 @@ int qed_db_recovery_del(struct qed_dev *cdev, · 39 unmodified lines
205 return 0;209 return 0;
206 }210 }
207 211
208 /* Sanitize doorbell address */
209 if (!qed_db_rec_sanity(cdev, db_addr, db_data))
210 return -EINVAL;
211
212 /* Obtain hwfn from doorbell address */212 /* Obtain hwfn from doorbell address */
213 p_hwfn = qed_db_rec_find_hwfn(cdev, db_addr);213 p_hwfn = qed_db_rec_find_hwfn(cdev, db_addr);
214 214
@@ -300,31 +300,24 @@ void qed_db_recovery_dp(struct qed_hwfn *p_hwfn) · 85 unmodified lines
300 300
301/* Ring the doorbell of a single doorbell recovery entry */301/* Ring the doorbell of a single doorbell recovery entry */
302static void qed_db_recovery_ring(struct qed_hwfn *p_hwfn,302static void qed_db_recovery_ring(struct qed_hwfn *p_hwfn,
303 struct qed_db_recovery_entry *db_entry,303 struct qed_db_recovery_entry *db_entry)
304 enum qed_db_rec_exec db_exec)304{
305{305 /* Print according to width */
306 if (db_exec != DB_REC_ONCE) {306 if (db_entry->db_width == DB_REC_WIDTH_32B) {
307 /* Print according to width */307 DP_VERBOSE(p_hwfn, QED_MSG_SPQ,
308 if (db_entry->db_width == DB_REC_WIDTH_32B) {308 "ringing doorbell address %p data %x\n",
309 DP_VERBOSE(p_hwfn, QED_MSG_SPQ,309 db_entry->db_addr,
310 "%s doorbell address %p data %x\n",310 *(u32 *)db_entry->db_data);
311 db_exec == DB_REC_DRY_RUN ?311 } else {
312 "would have rung" : "ringing",312 DP_VERBOSE(p_hwfn, QED_MSG_SPQ,
313 db_entry->db_addr,313 "ringing doorbell address %p data %llx\n",
314 *(u32 *)db_entry->db_data);314 db_entry->db_addr,
315 } else {315 *(u64 *)(db_entry->db_data));
316 DP_VERBOSE(p_hwfn, QED_MSG_SPQ,
317 "%s doorbell address %p data %llx\n",
318 db_exec == DB_REC_DRY_RUN ?
319 "would have rung" : "ringing",
320 db_entry->db_addr,
321 *(u64 *)(db_entry->db_data));
322 }
323 }316 }
324 317
325 /* Sanity */318 /* Sanity */
326 if (!qed_db_rec_sanity(p_hwfn->cdev, db_entry->db_addr,319 if (!qed_db_rec_sanity(p_hwfn->cdev, db_entry->db_addr,
327 db_entry->db_data))320 db_entry->db_width, db_entry->db_data))
328 return;321 return;
329 322
330 /* Flush the write combined buffer. Since there are multiple doorbelling323 /* Flush the write combined buffer. Since there are multiple doorbelling
@@ -334,14 +327,12 @@ static void qed_db_recovery_ring(struct qed_hwfn *p_hwfn, · 3 unmodified lines
334 wmb();327 wmb();
335 328
336 /* Ring the doorbell */329 /* Ring the doorbell */
337 if (db_exec == DB_REC_REAL_DEAL || db_exec == DB_REC_ONCE) {330 if (db_entry->db_width == DB_REC_WIDTH_32B)
338 if (db_entry->db_width == DB_REC_WIDTH_32B)331 DIRECT_REG_WR(db_entry->db_addr,
339 DIRECT_REG_WR(db_entry->db_addr,332 *(u32 *)(db_entry->db_data));
340 *(u32 *)(db_entry->db_data));333 else
341 else334 DIRECT_REG_WR64(db_entry->db_addr,
342 DIRECT_REG_WR64(db_entry->db_addr,335 *(u64 *)(db_entry->db_data));
343 *(u64 *)(db_entry->db_data));
344 }
345 336
346 /* Flush the write combined buffer. Next doorbell may come from a337 /* Flush the write combined buffer. Next doorbell may come from a
347 * different entity to the same address...338 * different entity to the same address...
@@ -350,29 +341,21 @@ static void qed_db_recovery_ring(struct qed_hwfn *p_hwfn, · 2 unmodified lines
350}341}
351 342
352/* Traverse the doorbell recovery entry list and ring all the doorbells */343/* Traverse the doorbell recovery entry list and ring all the doorbells */
353void qed_db_recovery_execute(struct qed_hwfn *p_hwfn,344void qed_db_recovery_execute(struct qed_hwfn *p_hwfn)
354 enum qed_db_rec_exec db_exec)
355{345{
356 struct qed_db_recovery_entry *db_entry = NULL;346 struct qed_db_recovery_entry *db_entry = NULL;
357 347
358 if (db_exec != DB_REC_ONCE) {348 DP_NOTICE(p_hwfn, "Executing doorbell recovery. Counter was %d\n",
359 DP_NOTICE(p_hwfn,349 p_hwfn->db_recovery_info.db_recovery_counter);
360 "Executing doorbell recovery. Counter was %d\n",
361 p_hwfn->db_recovery_info.db_recovery_counter);
362 350
363 /* Track amount of times recovery was executed */351 /* Track amount of times recovery was executed */
364 p_hwfn->db_recovery_info.db_recovery_counter++;352 p_hwfn->db_recovery_info.db_recovery_counter++;
365 }
366 353
367 /* Protect the list */354 /* Protect the list */
368 spin_lock_bh(&p_hwfn->db_recovery_info.lock);355 spin_lock_bh(&p_hwfn->db_recovery_info.lock);
369 list_for_each_entry(db_entry,356 list_for_each_entry(db_entry,
370 &p_hwfn->db_recovery_info.list, list_entry) {357 &p_hwfn->db_recovery_info.list, list_entry)
371 qed_db_recovery_ring(p_hwfn, db_entry, db_exec);358 qed_db_recovery_ring(p_hwfn, db_entry);
372 if (db_exec == DB_REC_ONCE)
373 break;
374 }
375
376 spin_unlock_bh(&p_hwfn->db_recovery_info.lock);359 spin_unlock_bh(&p_hwfn->db_recovery_info.lock);
377}360}
378 361
drivers/net/ethernet/qlogic/qed/qed_int.c+63−20
@@ -378,6 +378,9 @@ static int qed_db_rec_flush_queue(struct qed_hwfn *p_hwfn, · 377 unmodified lines
378 u32 count = QED_DB_REC_COUNT;378 u32 count = QED_DB_REC_COUNT;
379 u32 usage = 1;379 u32 usage = 1;
380 380
381 /* Flush any pending (e)dpms as they may never arrive */
382 qed_wr(p_hwfn, p_ptt, DORQ_REG_DPM_FORCE_ABORT, 0x1);
383
381 /* wait for usage to zero or count to run out. This is necessary since384 /* wait for usage to zero or count to run out. This is necessary since
382 * EDPM doorbell transactions can take multiple 64b cycles, and as such385 * EDPM doorbell transactions can take multiple 64b cycles, and as such
383 * can "split" over the pci. Possibly, the doorbell drop can happen with386 * can "split" over the pci. Possibly, the doorbell drop can happen with
@@ -406,51 +409,74 @@ static int qed_db_rec_flush_queue(struct qed_hwfn *p_hwfn, · 22 unmodified lines
406 409
407int qed_db_rec_handler(struct qed_hwfn *p_hwfn, struct qed_ptt *p_ptt)410int qed_db_rec_handler(struct qed_hwfn *p_hwfn, struct qed_ptt *p_ptt)
408{411{
409 u32 overflow;412 u32 attn_ovfl, cur_ovfl;
410 int rc;413 int rc;
411 414
412 overflow = qed_rd(p_hwfn, p_ptt, DORQ_REG_PF_OVFL_STICKY);415 attn_ovfl = test_and_clear_bit(QED_OVERFLOW_BIT,
413 DP_NOTICE(p_hwfn, "PF Overflow sticky 0x%x\n", overflow);416 &p_hwfn->db_recovery_info.overflow);
414 if (!overflow) {417 cur_ovfl = qed_rd(p_hwfn, p_ptt, DORQ_REG_PF_OVFL_STICKY);
415 qed_db_recovery_execute(p_hwfn, DB_REC_ONCE);418 if (!cur_ovfl && !attn_ovfl)
416 return 0;419 return 0;
417 }
418 420
419 if (qed_edpm_enabled(p_hwfn)) {421 DP_NOTICE(p_hwfn, "PF Overflow sticky: attn %u current %u\n",
422 attn_ovfl, cur_ovfl);
423
424 if (cur_ovfl && !p_hwfn->db_bar_no_edpm) {
420 rc = qed_db_rec_flush_queue(p_hwfn, p_ptt);425 rc = qed_db_rec_flush_queue(p_hwfn, p_ptt);
421 if (rc)426 if (rc)
422 return rc;427 return rc;
423 }428 }
424 429
425 /* Flush any pending (e)dpm as they may never arrive */
426 qed_wr(p_hwfn, p_ptt, DORQ_REG_DPM_FORCE_ABORT, 0x1);
427
428 /* Release overflow sticky indication (stop silently dropping everything) */430 /* Release overflow sticky indication (stop silently dropping everything) */
429 qed_wr(p_hwfn, p_ptt, DORQ_REG_PF_OVFL_STICKY, 0x0);431 qed_wr(p_hwfn, p_ptt, DORQ_REG_PF_OVFL_STICKY, 0x0);
430 432
431 /* Repeat all last doorbells (doorbell drop recovery) */433 /* Repeat all last doorbells (doorbell drop recovery) */
432 qed_db_recovery_execute(p_hwfn, DB_REC_REAL_DEAL);434 qed_db_recovery_execute(p_hwfn);
433 435
434 return 0;436 return 0;
435}437}
436 438
437static int qed_dorq_attn_cb(struct qed_hwfn *p_hwfn)439static void qed_dorq_attn_overflow(struct qed_hwfn *p_hwfn)
438{440{
439 u32 int_sts, first_drop_reason, details, address, all_drops_reason;
440 struct qed_ptt *p_ptt = p_hwfn->p_dpc_ptt;441 struct qed_ptt *p_ptt = p_hwfn->p_dpc_ptt;
442 u32 overflow;
441 int rc;443 int rc;
442 444
443 int_sts = qed_rd(p_hwfn, p_ptt, DORQ_REG_INT_STS);445 overflow = qed_rd(p_hwfn, p_ptt, DORQ_REG_PF_OVFL_STICKY);
444 DP_NOTICE(p_hwfn->cdev, "DORQ attention. int_sts was %x\n", int_sts);446 if (!overflow)
447 goto out;
448
449 /* Run PF doorbell recovery in next periodic handler */
450 set_bit(QED_OVERFLOW_BIT, &p_hwfn->db_recovery_info.overflow);
451
452 if (!p_hwfn->db_bar_no_edpm) {
453 rc = qed_db_rec_flush_queue(p_hwfn, p_ptt);
454 if (rc)
455 goto out;
456 }
457
458 qed_wr(p_hwfn, p_ptt, DORQ_REG_PF_OVFL_STICKY, 0x0);
459out:
460 /* Schedule the handler even if overflow was not detected */
461 qed_periodic_db_rec_start(p_hwfn);
462}
463
464static int qed_dorq_attn_int_sts(struct qed_hwfn *p_hwfn)
465{
466 u32 int_sts, first_drop_reason, details, address, all_drops_reason;
467 struct qed_ptt *p_ptt = p_hwfn->p_dpc_ptt;
445 468
446 /* int_sts may be zero since all PFs were interrupted for doorbell469 /* int_sts may be zero since all PFs were interrupted for doorbell
447 * overflow but another one already handled it. Can abort here. If470 * overflow but another one already handled it. Can abort here. If
448 * This PF also requires overflow recovery we will be interrupted again.471 * This PF also requires overflow recovery we will be interrupted again.
449 * The masked almost full indication may also be set. Ignoring.472 * The masked almost full indication may also be set. Ignoring.
450 */473 */
474 int_sts = qed_rd(p_hwfn, p_ptt, DORQ_REG_INT_STS);
451 if (!(int_sts & ~DORQ_REG_INT_STS_DORQ_FIFO_AFULL))475 if (!(int_sts & ~DORQ_REG_INT_STS_DORQ_FIFO_AFULL))
452 return 0;476 return 0;
453 477
478 DP_NOTICE(p_hwfn->cdev, "DORQ attention. int_sts was %x\n", int_sts);
479
454 /* check if db_drop or overflow happened */480 /* check if db_drop or overflow happened */
455 if (int_sts & (DORQ_REG_INT_STS_DB_DROP |481 if (int_sts & (DORQ_REG_INT_STS_DB_DROP |
456 DORQ_REG_INT_STS_DORQ_FIFO_OVFL_ERR)) {482 DORQ_REG_INT_STS_DORQ_FIFO_OVFL_ERR)) {
@@ -477,11 +503,6 @@ static int qed_dorq_attn_cb(struct qed_hwfn *p_hwfn) · 20 unmodified lines
477 GET_FIELD(details, QED_DORQ_ATTENTION_SIZE) * 4,503 GET_FIELD(details, QED_DORQ_ATTENTION_SIZE) * 4,
478 first_drop_reason, all_drops_reason);504 first_drop_reason, all_drops_reason);
479 505
480 rc = qed_db_rec_handler(p_hwfn, p_ptt);
481 qed_periodic_db_rec_start(p_hwfn);
482 if (rc)
483 return rc;
484
485 /* Clear the doorbell drop details and prepare for next drop */506 /* Clear the doorbell drop details and prepare for next drop */
486 qed_wr(p_hwfn, p_ptt, DORQ_REG_DB_DROP_DETAILS_REL, 0);507 qed_wr(p_hwfn, p_ptt, DORQ_REG_DB_DROP_DETAILS_REL, 0);
487 508
@@ -507,6 +528,25 @@ static int qed_dorq_attn_cb(struct qed_hwfn *p_hwfn) · 19 unmodified lines
507 return -EINVAL;528 return -EINVAL;
508}529}
509 530
531static int qed_dorq_attn_cb(struct qed_hwfn *p_hwfn)
532{
533 p_hwfn->db_recovery_info.dorq_attn = true;
534 qed_dorq_attn_overflow(p_hwfn);
535
536 return qed_dorq_attn_int_sts(p_hwfn);
537}
538
539static void qed_dorq_attn_handler(struct qed_hwfn *p_hwfn)
540{
541 if (p_hwfn->db_recovery_info.dorq_attn)
542 goto out;
543
544 /* Call DORQ callback if the attention was missed */
545 qed_dorq_attn_cb(p_hwfn);
546out:
547 p_hwfn->db_recovery_info.dorq_attn = false;
548}
549
510/* Instead of major changes to the data-structure, we have a some 'special'550/* Instead of major changes to the data-structure, we have a some 'special'
511 * identifiers for sources that changed meaning between adapters.551 * identifiers for sources that changed meaning between adapters.
512 */552 */
@@ -1080,6 +1120,9 @@ static int qed_int_deassertion(struct qed_hwfn *p_hwfn, · 567 unmodified lines
1080 }1120 }
1081 }1121 }
1082 1122
1123 /* Handle missed DORQ attention */
1124 qed_dorq_attn_handler(p_hwfn);
1125
1083 /* Clear IGU indication for the deasserted bits */1126 /* Clear IGU indication for the deasserted bits */
1084 DIRECT_REG_WR((u8 __iomem *)p_hwfn->regview +1127 DIRECT_REG_WR((u8 __iomem *)p_hwfn->regview +
1085 GTT_BAR0_MAP_REG_IGU_CMD +1128 GTT_BAR0_MAP_REG_IGU_CMD +
drivers/net/ethernet/qlogic/qed/qed_int.h+2−2
@@ -192,8 +192,8 @@ void qed_int_disable_post_isr_release(struct qed_dev *cdev); · 191 unmodified lines
192 192
193/**193/**
194 * @brief - Doorbell Recovery handler.194 * @brief - Doorbell Recovery handler.
195 * Run DB_REAL_DEAL doorbell recovery in case of PF overflow195 * Run doorbell recovery in case of PF overflow (and flush DORQ if
196 * (and flush DORQ if needed), otherwise run DB_REC_ONCE.196 * needed).
197 *197 *
198 * @param p_hwfn198 * @param p_hwfn
199 * @param p_ptt199 * @param p_ptt
drivers/net/ethernet/qlogic/qed/qed_main.c+1−1
@@ -970,7 +970,7 @@ static void qed_update_pf_params(struct qed_dev *cdev, · 969 unmodified lines
970 }970 }
971}971}
972 972
973#define QED_PERIODIC_DB_REC_COUNT 100973#define QED_PERIODIC_DB_REC_COUNT 10
974#define QED_PERIODIC_DB_REC_INTERVAL_MS 100974#define QED_PERIODIC_DB_REC_INTERVAL_MS 100
975#define QED_PERIODIC_DB_REC_INTERVAL \975#define QED_PERIODIC_DB_REC_INTERVAL \
976 msecs_to_jiffies(QED_PERIODIC_DB_REC_INTERVAL_MS)976 msecs_to_jiffies(QED_PERIODIC_DB_REC_INTERVAL_MS)
drivers/net/ethernet/qlogic/qed/qed_sriov.c+1−1
@@ -1591,7 +1591,7 @@ static void qed_iov_vf_mbx_acquire(struct qed_hwfn *p_hwfn, · 1590 unmodified lines
1591 p_vfdev->eth_fp_hsi_minor = ETH_HSI_VER_NO_PKT_LEN_TUNN;1591 p_vfdev->eth_fp_hsi_minor = ETH_HSI_VER_NO_PKT_LEN_TUNN;
1592 } else {1592 } else {
1593 DP_INFO(p_hwfn,1593 DP_INFO(p_hwfn,
1594 "VF[%d] needs fastpath HSI %02x.%02x, which is incompatible with loaded FW's faspath HSI %02x.%02x\n",1594 "VF[%d] needs fastpath HSI %02x.%02x, which is incompatible with loaded FW's fastpath HSI %02x.%02x\n",
1595 vf->abs_vf_id,1595 vf->abs_vf_id,
1596 req->vfdev_info.eth_fp_hsi_major,1596 req->vfdev_info.eth_fp_hsi_major,
1597 req->vfdev_info.eth_fp_hsi_minor,1597 req->vfdev_info.eth_fp_hsi_minor,
drivers/net/ethernet/qlogic/qede/qede_ptp.c+3−4
@@ -490,18 +490,17 @@ int qede_ptp_enable(struct qede_dev *edev, bool init_tc) · 489 unmodified lines
490 490
491 ptp->clock = ptp_clock_register(&ptp->clock_info, &edev->pdev->dev);491 ptp->clock = ptp_clock_register(&ptp->clock_info, &edev->pdev->dev);
492 if (IS_ERR(ptp->clock)) {492 if (IS_ERR(ptp->clock)) {
493 rc = -EINVAL;
494 DP_ERR(edev, "PTP clock registration failed\n");493 DP_ERR(edev, "PTP clock registration failed\n");
494 qede_ptp_disable(edev);
495 rc = -EINVAL;
495 goto err2;496 goto err2;
496 }497 }
497 498
498 return 0;499 return 0;
499 500
500err2:
501 qede_ptp_disable(edev);
502 ptp->clock = NULL;
503err1:501err1:
504 kfree(ptp);502 kfree(ptp);
503err2:
505 edev->ptp = NULL;504 edev->ptp = NULL;
506 505
507 return rc;506 return rc;
drivers/net/ethernet/qlogic/qlcnic/qlcnic.h+1−1
@@ -497,7 +497,7 @@ struct qlcnic_hardware_context { · 496 unmodified lines
497 u16 board_type;497 u16 board_type;
498 u16 supported_type;498 u16 supported_type;
499 499
500 u16 link_speed;500 u32 link_speed;
501 u16 link_duplex;501 u16 link_duplex;
502 u16 link_autoneg;502 u16 link_autoneg;
503 u16 module_type;503 u16 module_type;
drivers/net/ethernet/realtek/r8169.c+7−1
@@ -28,6 +28,7 @@ · 27 unmodified lines
28#include <linux/pm_runtime.h>28#include <linux/pm_runtime.h>
29#include <linux/firmware.h>29#include <linux/firmware.h>
30#include <linux/prefetch.h>30#include <linux/prefetch.h>
31#include <linux/pci-aspm.h>
31#include <linux/ipv6.h>32#include <linux/ipv6.h>
32#include <net/ip6_checksum.h>33#include <net/ip6_checksum.h>
33 34
@@ -5460,7 +5461,7 @@ static void rtl_hw_start_8168(struct rtl8169_private *tp) · 5426 unmodified lines
5460 tp->cp_cmd |= PktCntrDisable | INTT_1;5461 tp->cp_cmd |= PktCntrDisable | INTT_1;
5461 RTL_W16(tp, CPlusCmd, tp->cp_cmd);5462 RTL_W16(tp, CPlusCmd, tp->cp_cmd);
5462 5463
5463 RTL_W16(tp, IntrMitigate, 0x5151);5464 RTL_W16(tp, IntrMitigate, 0x5100);
5464 5465
5465 /* Work around for RxFIFO overflow. */5466 /* Work around for RxFIFO overflow. */
5466 if (tp->mac_version == RTL_GIGA_MAC_VER_11) {5467 if (tp->mac_version == RTL_GIGA_MAC_VER_11) {
@@ -7352,6 +7353,11 @@ static int rtl_init_one(struct pci_dev *pdev, const struct pci_device_id *ent) · 1885 unmodified lines
7352 if (rc)7353 if (rc)
7353 return rc;7354 return rc;
7354 7355
7356 /* Disable ASPM completely as that cause random device stop working
7357 * problems as well as full system hangs for some PCIe devices users.
7358 */
7359 pci_disable_link_state(pdev, PCIE_LINK_STATE_L0S | PCIE_LINK_STATE_L1);
7360
7355 /* enable device (incl. PCI PM wakeup and hotplug setup) */7361 /* enable device (incl. PCI PM wakeup and hotplug setup) */
7356 rc = pcim_enable_device(pdev);7362 rc = pcim_enable_device(pdev);
7357 if (rc < 0) {7363 if (rc < 0) {
drivers/net/ethernet/stmicro/stmmac/descs_com.h+14−8
@@ -29,11 +29,13 @@ · 28 unmodified lines
29/* Specific functions used for Ring mode */29/* Specific functions used for Ring mode */
30 30
31/* Enhanced descriptors */31/* Enhanced descriptors */
32static inline void ehn_desc_rx_set_on_ring(struct dma_desc *p, int end)32static inline void ehn_desc_rx_set_on_ring(struct dma_desc *p, int end,
33 int bfsize)
33{34{
34 p->des1 |= cpu_to_le32((BUF_SIZE_8KiB35 if (bfsize == BUF_SIZE_16KiB)
35 << ERDES1_BUFFER2_SIZE_SHIFT)36 p->des1 |= cpu_to_le32((BUF_SIZE_8KiB
36 & ERDES1_BUFFER2_SIZE_MASK);37 << ERDES1_BUFFER2_SIZE_SHIFT)
38 & ERDES1_BUFFER2_SIZE_MASK);
37 39
38 if (end)40 if (end)
39 p->des1 |= cpu_to_le32(ERDES1_END_RING);41 p->des1 |= cpu_to_le32(ERDES1_END_RING);
@@ -59,11 +61,15 @@ static inline void enh_set_tx_desc_len_on_ring(struct dma_desc *p, int len) · 19 unmodified lines
59}61}
60 62
61/* Normal descriptors */63/* Normal descriptors */
62static inline void ndesc_rx_set_on_ring(struct dma_desc *p, int end)64static inline void ndesc_rx_set_on_ring(struct dma_desc *p, int end, int bfsize)
63{65{
64 p->des1 |= cpu_to_le32(((BUF_SIZE_2KiB - 1)66 if (bfsize >= BUF_SIZE_2KiB) {
65 << RDES1_BUFFER2_SIZE_SHIFT)67 int bfsize2;
66 & RDES1_BUFFER2_SIZE_MASK);68
69 bfsize2 = min(bfsize - BUF_SIZE_2KiB + 1, BUF_SIZE_2KiB - 1);
70 p->des1 |= cpu_to_le32((bfsize2 << RDES1_BUFFER2_SIZE_SHIFT)
71 & RDES1_BUFFER2_SIZE_MASK);
72 }
67 73
68 if (end)74 if (end)
69 p->des1 |= cpu_to_le32(RDES1_END_RING);75 p->des1 |= cpu_to_le32(RDES1_END_RING);
drivers/net/ethernet/stmicro/stmmac/dwmac4_descs.c+1−1
@@ -296,7 +296,7 @@ exit: · 295 unmodified lines
296}296}
297 297
298static void dwmac4_rd_init_rx_desc(struct dma_desc *p, int disable_rx_ic,298static void dwmac4_rd_init_rx_desc(struct dma_desc *p, int disable_rx_ic,
299 int mode, int end)299 int mode, int end, int bfsize)
300{300{
301 dwmac4_set_rx_owner(p, disable_rx_ic);301 dwmac4_set_rx_owner(p, disable_rx_ic);
302}302}
drivers/net/ethernet/stmicro/stmmac/dwxgmac2_descs.c+1−1
@@ -123,7 +123,7 @@ static int dwxgmac2_get_rx_timestamp_status(void *desc, void *next_desc, · 122 unmodified lines
123}123}
124 124
125static void dwxgmac2_init_rx_desc(struct dma_desc *p, int disable_rx_ic,125static void dwxgmac2_init_rx_desc(struct dma_desc *p, int disable_rx_ic,
126 int mode, int end)126 int mode, int end, int bfsize)
127{127{
128 dwxgmac2_set_rx_owner(p, disable_rx_ic);128 dwxgmac2_set_rx_owner(p, disable_rx_ic);
129}129}
drivers/net/ethernet/stmicro/stmmac/enh_desc.c+16−6
@@ -201,6 +201,11 @@ static int enh_desc_get_rx_status(void *data, struct stmmac_extra_stats *x, · 200 unmodified lines
201 if (unlikely(rdes0 & RDES0_OWN))201 if (unlikely(rdes0 & RDES0_OWN))
202 return dma_own;202 return dma_own;
203 203
204 if (unlikely(!(rdes0 & RDES0_LAST_DESCRIPTOR))) {
205 stats->rx_length_errors++;
206 return discard_frame;
207 }
208
204 if (unlikely(rdes0 & RDES0_ERROR_SUMMARY)) {209 if (unlikely(rdes0 & RDES0_ERROR_SUMMARY)) {
205 if (unlikely(rdes0 & RDES0_DESCRIPTOR_ERROR)) {210 if (unlikely(rdes0 & RDES0_DESCRIPTOR_ERROR)) {
206 x->rx_desc++;211 x->rx_desc++;
@@ -231,9 +236,10 @@ static int enh_desc_get_rx_status(void *data, struct stmmac_extra_stats *x, · 24 unmodified lines
231 * It doesn't match with the information reported into the databook.236 * It doesn't match with the information reported into the databook.
232 * At any rate, we need to understand if the CSUM hw computation is ok237 * At any rate, we need to understand if the CSUM hw computation is ok
233 * and report this info to the upper layers. */238 * and report this info to the upper layers. */
234 ret = enh_desc_coe_rdes0(!!(rdes0 & RDES0_IPC_CSUM_ERROR),239 if (likely(ret == good_frame))
235 !!(rdes0 & RDES0_FRAME_TYPE),240 ret = enh_desc_coe_rdes0(!!(rdes0 & RDES0_IPC_CSUM_ERROR),
236 !!(rdes0 & ERDES0_RX_MAC_ADDR));241 !!(rdes0 & RDES0_FRAME_TYPE),
242 !!(rdes0 & ERDES0_RX_MAC_ADDR));
237 243
238 if (unlikely(rdes0 & RDES0_DRIBBLING))244 if (unlikely(rdes0 & RDES0_DRIBBLING))
239 x->dribbling_bit++;245 x->dribbling_bit++;
@@ -259,15 +265,19 @@ static int enh_desc_get_rx_status(void *data, struct stmmac_extra_stats *x, · 19 unmodified lines
259}265}
260 266
261static void enh_desc_init_rx_desc(struct dma_desc *p, int disable_rx_ic,267static void enh_desc_init_rx_desc(struct dma_desc *p, int disable_rx_ic,
262 int mode, int end)268 int mode, int end, int bfsize)
263{269{
270 int bfsize1;
271
264 p->des0 |= cpu_to_le32(RDES0_OWN);272 p->des0 |= cpu_to_le32(RDES0_OWN);
265 p->des1 |= cpu_to_le32(BUF_SIZE_8KiB & ERDES1_BUFFER1_SIZE_MASK);273
274 bfsize1 = min(bfsize, BUF_SIZE_8KiB);
275 p->des1 |= cpu_to_le32(bfsize1 & ERDES1_BUFFER1_SIZE_MASK);
266 276
267 if (mode == STMMAC_CHAIN_MODE)277 if (mode == STMMAC_CHAIN_MODE)
268 ehn_desc_rx_set_on_chain(p);278 ehn_desc_rx_set_on_chain(p);
269 else279 else
270 ehn_desc_rx_set_on_ring(p, end);280 ehn_desc_rx_set_on_ring(p, end, bfsize);
271 281
272 if (disable_rx_ic)282 if (disable_rx_ic)
273 p->des1 |= cpu_to_le32(ERDES1_DISABLE_IC);283 p->des1 |= cpu_to_le32(ERDES1_DISABLE_IC);
drivers/net/ethernet/stmicro/stmmac/hwif.h+1−1
@@ -33,7 +33,7 @@ struct dma_extended_desc; · 32 unmodified lines
33struct stmmac_desc_ops {33struct stmmac_desc_ops {
34 /* DMA RX descriptor ring initialization */34 /* DMA RX descriptor ring initialization */
35 void (*init_rx_desc)(struct dma_desc *p, int disable_rx_ic, int mode,35 void (*init_rx_desc)(struct dma_desc *p, int disable_rx_ic, int mode,
36 int end);36 int end, int bfsize);
37 /* DMA TX descriptor ring initialization */37 /* DMA TX descriptor ring initialization */
38 void (*init_tx_desc)(struct dma_desc *p, int mode, int end);38 void (*init_tx_desc)(struct dma_desc *p, int mode, int end);
39 /* Invoked by the xmit function to prepare the tx descriptor */39 /* Invoked by the xmit function to prepare the tx descriptor */
drivers/net/ethernet/stmicro/stmmac/norm_desc.c+7−5
@@ -91,8 +91,6 @@ static int ndesc_get_rx_status(void *data, struct stmmac_extra_stats *x, · 90 unmodified lines
91 return dma_own;91 return dma_own;
92 92
93 if (unlikely(!(rdes0 & RDES0_LAST_DESCRIPTOR))) {93 if (unlikely(!(rdes0 & RDES0_LAST_DESCRIPTOR))) {
94 pr_warn("%s: Oversized frame spanned multiple buffers\n",
95 __func__);
96 stats->rx_length_errors++;94 stats->rx_length_errors++;
97 return discard_frame;95 return discard_frame;
98 }96 }
@@ -135,15 +133,19 @@ static int ndesc_get_rx_status(void *data, struct stmmac_extra_stats *x, · 36 unmodified lines
135}133}
136 134
137static void ndesc_init_rx_desc(struct dma_desc *p, int disable_rx_ic, int mode,135static void ndesc_init_rx_desc(struct dma_desc *p, int disable_rx_ic, int mode,
138 int end)136 int end, int bfsize)
139{137{
138 int bfsize1;
139
140 p->des0 |= cpu_to_le32(RDES0_OWN);140 p->des0 |= cpu_to_le32(RDES0_OWN);
141 p->des1 |= cpu_to_le32((BUF_SIZE_2KiB - 1) & RDES1_BUFFER1_SIZE_MASK);141
142 bfsize1 = min(bfsize, BUF_SIZE_2KiB - 1);
143 p->des1 |= cpu_to_le32(bfsize & RDES1_BUFFER1_SIZE_MASK);
142 144
143 if (mode == STMMAC_CHAIN_MODE)145 if (mode == STMMAC_CHAIN_MODE)
144 ndesc_rx_set_on_chain(p, end);146 ndesc_rx_set_on_chain(p, end);
145 else147 else
146 ndesc_rx_set_on_ring(p, end);148 ndesc_rx_set_on_ring(p, end, bfsize);
147 149
148 if (disable_rx_ic)150 if (disable_rx_ic)
149 p->des1 |= cpu_to_le32(RDES1_DISABLE_IC);151 p->des1 |= cpu_to_le32(RDES1_DISABLE_IC);
drivers/net/ethernet/stmicro/stmmac/stmmac_main.c+19−15
@@ -1136,11 +1136,13 @@ static void stmmac_clear_rx_descriptors(struct stmmac_priv *priv, u32 queue) · 1135 unmodified lines
1136 if (priv->extend_desc)1136 if (priv->extend_desc)
1137 stmmac_init_rx_desc(priv, &rx_q->dma_erx[i].basic,1137 stmmac_init_rx_desc(priv, &rx_q->dma_erx[i].basic,
1138 priv->use_riwt, priv->mode,1138 priv->use_riwt, priv->mode,
1139 (i == DMA_RX_SIZE - 1));1139 (i == DMA_RX_SIZE - 1),
1140 priv->dma_buf_sz);
1140 else1141 else
1141 stmmac_init_rx_desc(priv, &rx_q->dma_rx[i],1142 stmmac_init_rx_desc(priv, &rx_q->dma_rx[i],
1142 priv->use_riwt, priv->mode,1143 priv->use_riwt, priv->mode,
1143 (i == DMA_RX_SIZE - 1));1144 (i == DMA_RX_SIZE - 1),
1145 priv->dma_buf_sz);
1144}1146}
1145 1147
1146/**1148/**
@@ -3352,9 +3354,8 @@ static int stmmac_rx(struct stmmac_priv *priv, int limit, u32 queue) · 2205 unmodified lines
3352{3354{
3353 struct stmmac_rx_queue *rx_q = &priv->rx_queue[queue];3355 struct stmmac_rx_queue *rx_q = &priv->rx_queue[queue];
3354 struct stmmac_channel *ch = &priv->channel[queue];3356 struct stmmac_channel *ch = &priv->channel[queue];
3355 unsigned int entry = rx_q->cur_rx;3357 unsigned int next_entry = rx_q->cur_rx;
3356 int coe = priv->hw->rx_csum;3358 int coe = priv->hw->rx_csum;
3357 unsigned int next_entry;
3358 unsigned int count = 0;3359 unsigned int count = 0;
3359 bool xmac;3360 bool xmac;
3360 3361
@@ -3372,10 +3373,12 @@ static int stmmac_rx(struct stmmac_priv *priv, int limit, u32 queue) · 11 unmodified lines
3372 stmmac_display_ring(priv, rx_head, DMA_RX_SIZE, true);3373 stmmac_display_ring(priv, rx_head, DMA_RX_SIZE, true);
3373 }3374 }
3374 while (count < limit) {3375 while (count < limit) {
3375 int status;3376 int entry, status;
3376 struct dma_desc *p;3377 struct dma_desc *p;
3377 struct dma_desc *np;3378 struct dma_desc *np;
3378 3379
3380 entry = next_entry;
3381
3379 if (priv->extend_desc)3382 if (priv->extend_desc)
3380 p = (struct dma_desc *)(rx_q->dma_erx + entry);3383 p = (struct dma_desc *)(rx_q->dma_erx + entry);
3381 else3384 else
@@ -3431,11 +3434,12 @@ static int stmmac_rx(struct stmmac_priv *priv, int limit, u32 queue) · 49 unmodified lines
3431 * ignored3434 * ignored
3432 */3435 */
3433 if (frame_len > priv->dma_buf_sz) {3436 if (frame_len > priv->dma_buf_sz) {
3434 netdev_err(priv->dev,3437 if (net_ratelimit())
3435 "len %d larger than size (%d)\n",3438 netdev_err(priv->dev,
3436 frame_len, priv->dma_buf_sz);3439 "len %d larger than size (%d)\n",
3440 frame_len, priv->dma_buf_sz);
3437 priv->dev->stats.rx_length_errors++;3441 priv->dev->stats.rx_length_errors++;
3438 break;3442 continue;
3439 }3443 }
3440 3444
3441 /* ACS is set; GMAC core strips PAD/FCS for IEEE 802.33445 /* ACS is set; GMAC core strips PAD/FCS for IEEE 802.3
@@ -3470,7 +3474,7 @@ static int stmmac_rx(struct stmmac_priv *priv, int limit, u32 queue) · 28 unmodified lines
3470 dev_warn(priv->device,3474 dev_warn(priv->device,
3471 "packet dropped\n");3475 "packet dropped\n");
3472 priv->dev->stats.rx_dropped++;3476 priv->dev->stats.rx_dropped++;
3473 break;3477 continue;
3474 }3478 }
3475 3479
3476 dma_sync_single_for_cpu(priv->device,3480 dma_sync_single_for_cpu(priv->device,
@@ -3490,11 +3494,12 @@ static int stmmac_rx(struct stmmac_priv *priv, int limit, u32 queue) · 13 unmodified lines
3490 } else {3494 } else {
3491 skb = rx_q->rx_skbuff[entry];3495 skb = rx_q->rx_skbuff[entry];
3492 if (unlikely(!skb)) {3496 if (unlikely(!skb)) {
3493 netdev_err(priv->dev,3497 if (net_ratelimit())
3494 "%s: Inconsistent Rx chain\n",3498 netdev_err(priv->dev,
3495 priv->dev->name);3499 "%s: Inconsistent Rx chain\n",
3500 priv->dev->name);
3496 priv->dev->stats.rx_dropped++;3501 priv->dev->stats.rx_dropped++;
3497 break;3502 continue;
3498 }3503 }
3499 prefetch(skb->data - NET_IP_ALIGN);3504 prefetch(skb->data - NET_IP_ALIGN);
3500 rx_q->rx_skbuff[entry] = NULL;3505 rx_q->rx_skbuff[entry] = NULL;
@@ -3529,7 +3534,6 @@ static int stmmac_rx(struct stmmac_priv *priv, int limit, u32 queue) · 28 unmodified lines
3529 priv->dev->stats.rx_packets++;3534 priv->dev->stats.rx_packets++;
3530 priv->dev->stats.rx_bytes += frame_len;3535 priv->dev->stats.rx_bytes += frame_len;
3531 }3536 }
3532 entry = next_entry;
3533 }3537 }
3534 3538
3535 stmmac_rx_refill(priv, queue);3539 stmmac_rx_refill(priv, queue);
drivers/net/hyperv/hyperv_net.h+1−0
@@ -987,6 +987,7 @@ struct netvsc_device { · 986 unmodified lines
987 987
988 wait_queue_head_t wait_drain;988 wait_queue_head_t wait_drain;
989 bool destroy;989 bool destroy;
990 bool tx_disable; /* if true, do not wake up queue again */
990 991
991 /* Receive buffer allocated by us but manages by NetVSP */992 /* Receive buffer allocated by us but manages by NetVSP */
992 void *recv_buf;993 void *recv_buf;
drivers/net/hyperv/netvsc.c+4−2
@@ -110,6 +110,7 @@ static struct netvsc_device *alloc_net_device(void) · 109 unmodified lines
110 110
111 init_waitqueue_head(&net_device->wait_drain);111 init_waitqueue_head(&net_device->wait_drain);
112 net_device->destroy = false;112 net_device->destroy = false;
113 net_device->tx_disable = false;
113 114
114 net_device->max_pkt = RNDIS_MAX_PKT_DEFAULT;115 net_device->max_pkt = RNDIS_MAX_PKT_DEFAULT;
115 net_device->pkt_align = RNDIS_PKT_ALIGN_DEFAULT;116 net_device->pkt_align = RNDIS_PKT_ALIGN_DEFAULT;
@@ -719,7 +720,7 @@ static void netvsc_send_tx_complete(struct net_device *ndev, · 603 unmodified lines
719 } else {720 } else {
720 struct netdev_queue *txq = netdev_get_tx_queue(ndev, q_idx);721 struct netdev_queue *txq = netdev_get_tx_queue(ndev, q_idx);
721 722
722 if (netif_tx_queue_stopped(txq) &&723 if (netif_tx_queue_stopped(txq) && !net_device->tx_disable &&
723 (hv_get_avail_to_write_percent(&channel->outbound) >724 (hv_get_avail_to_write_percent(&channel->outbound) >
724 RING_AVAIL_PERCENT_HIWATER || queue_sends < 1)) {725 RING_AVAIL_PERCENT_HIWATER || queue_sends < 1)) {
725 netif_tx_wake_queue(txq);726 netif_tx_wake_queue(txq);
@@ -874,7 +875,8 @@ static inline int netvsc_send_pkt( · 148 unmodified lines
874 } else if (ret == -EAGAIN) {875 } else if (ret == -EAGAIN) {
875 netif_tx_stop_queue(txq);876 netif_tx_stop_queue(txq);
876 ndev_ctx->eth_stats.stop_queue++;877 ndev_ctx->eth_stats.stop_queue++;
877 if (atomic_read(&nvchan->queue_sends) < 1) {878 if (atomic_read(&nvchan->queue_sends) < 1 &&
879 !net_device->tx_disable) {
878 netif_tx_wake_queue(txq);880 netif_tx_wake_queue(txq);
879 ndev_ctx->eth_stats.wake_queue++;881 ndev_ctx->eth_stats.wake_queue++;
880 ret = -ENOSPC;882 ret = -ENOSPC;
drivers/net/hyperv/netvsc_drv.c+26−6
@@ -109,6 +109,15 @@ static void netvsc_set_rx_mode(struct net_device *net) · 108 unmodified lines
109 rcu_read_unlock();109 rcu_read_unlock();
110}110}
111 111
112static void netvsc_tx_enable(struct netvsc_device *nvscdev,
113 struct net_device *ndev)
114{
115 nvscdev->tx_disable = false;
116 virt_wmb(); /* ensure queue wake up mechanism is on */
117
118 netif_tx_wake_all_queues(ndev);
119}
120
112static int netvsc_open(struct net_device *net)121static int netvsc_open(struct net_device *net)
113{122{
114 struct net_device_context *ndev_ctx = netdev_priv(net);123 struct net_device_context *ndev_ctx = netdev_priv(net);
@@ -129,7 +138,7 @@ static int netvsc_open(struct net_device *net) · 14 unmodified lines
129 rdev = nvdev->extension;138 rdev = nvdev->extension;
130 if (!rdev->link_state) {139 if (!rdev->link_state) {
131 netif_carrier_on(net);140 netif_carrier_on(net);
132 netif_tx_wake_all_queues(net);141 netvsc_tx_enable(nvdev, net);
133 }142 }
134 143
135 if (vf_netdev) {144 if (vf_netdev) {
@@ -184,6 +193,17 @@ static int netvsc_wait_until_empty(struct netvsc_device *nvdev) · 48 unmodified lines
184 }193 }
185}194}
186 195
196static void netvsc_tx_disable(struct netvsc_device *nvscdev,
197 struct net_device *ndev)
198{
199 if (nvscdev) {
200 nvscdev->tx_disable = true;
201 virt_wmb(); /* ensure txq will not wake up after stop */
202 }
203
204 netif_tx_disable(ndev);
205}
206
187static int netvsc_close(struct net_device *net)207static int netvsc_close(struct net_device *net)
188{208{
189 struct net_device_context *net_device_ctx = netdev_priv(net);209 struct net_device_context *net_device_ctx = netdev_priv(net);
@@ -192,7 +212,7 @@ static int netvsc_close(struct net_device *net) · 2 unmodified lines
192 struct netvsc_device *nvdev = rtnl_dereference(net_device_ctx->nvdev);212 struct netvsc_device *nvdev = rtnl_dereference(net_device_ctx->nvdev);
193 int ret;213 int ret;
194 214
195 netif_tx_disable(net);215 netvsc_tx_disable(nvdev, net);
196 216
197 /* No need to close rndis filter if it is removed already */217 /* No need to close rndis filter if it is removed already */
198 if (!nvdev)218 if (!nvdev)
@@ -920,7 +940,7 @@ static int netvsc_detach(struct net_device *ndev, · 721 unmodified lines
920 940
921 /* If device was up (receiving) then shutdown */941 /* If device was up (receiving) then shutdown */
922 if (netif_running(ndev)) {942 if (netif_running(ndev)) {
923 netif_tx_disable(ndev);943 netvsc_tx_disable(nvdev, ndev);
924 944
925 ret = rndis_filter_close(nvdev);945 ret = rndis_filter_close(nvdev);
926 if (ret) {946 if (ret) {
@@ -1908,7 +1928,7 @@ static void netvsc_link_change(struct work_struct *w) · 981 unmodified lines
1908 if (rdev->link_state) {1928 if (rdev->link_state) {
1909 rdev->link_state = false;1929 rdev->link_state = false;
1910 netif_carrier_on(net);1930 netif_carrier_on(net);
1911 netif_tx_wake_all_queues(net);1931 netvsc_tx_enable(net_device, net);
1912 } else {1932 } else {
1913 notify = true;1933 notify = true;
1914 }1934 }
@@ -1918,7 +1938,7 @@ static void netvsc_link_change(struct work_struct *w) · 3 unmodified lines
1918 if (!rdev->link_state) {1938 if (!rdev->link_state) {
1919 rdev->link_state = true;1939 rdev->link_state = true;
1920 netif_carrier_off(net);1940 netif_carrier_off(net);
1921 netif_tx_stop_all_queues(net);1941 netvsc_tx_disable(net_device, net);
1922 }1942 }
1923 kfree(event);1943 kfree(event);
1924 break;1944 break;
@@ -1927,7 +1947,7 @@ static void netvsc_link_change(struct work_struct *w) · 2 unmodified lines
1927 if (!rdev->link_state) {1947 if (!rdev->link_state) {
1928 rdev->link_state = true;1948 rdev->link_state = true;
1929 netif_carrier_off(net);1949 netif_carrier_off(net);
1930 netif_tx_stop_all_queues(net);1950 netvsc_tx_disable(net_device, net);
1931 event->event = RNDIS_STATUS_MEDIA_CONNECT;1951 event->event = RNDIS_STATUS_MEDIA_CONNECT;
1932 spin_lock_irqsave(&ndev_ctx->lock, flags);1952 spin_lock_irqsave(&ndev_ctx->lock, flags);
1933 list_add(&event->list, &ndev_ctx->reconfig_events);1953 list_add(&event->list, &ndev_ctx->reconfig_events);
drivers/net/team/team.c+26−0
@@ -1246,6 +1246,23 @@ static int team_port_add(struct team *team, struct net_device *port_dev, · 1245 unmodified lines
1246 goto err_option_port_add;1246 goto err_option_port_add;
1247 }1247 }
1248 1248
1249 /* set promiscuity level to new slave */
1250 if (dev->flags & IFF_PROMISC) {
1251 err = dev_set_promiscuity(port_dev, 1);
1252 if (err)
1253 goto err_set_slave_promisc;
1254 }
1255
1256 /* set allmulti level to new slave */
1257 if (dev->flags & IFF_ALLMULTI) {
1258 err = dev_set_allmulti(port_dev, 1);
1259 if (err) {
1260 if (dev->flags & IFF_PROMISC)
1261 dev_set_promiscuity(port_dev, -1);
1262 goto err_set_slave_promisc;
1263 }
1264 }
1265
1249 netif_addr_lock_bh(dev);1266 netif_addr_lock_bh(dev);
1250 dev_uc_sync_multiple(port_dev, dev);1267 dev_uc_sync_multiple(port_dev, dev);
1251 dev_mc_sync_multiple(port_dev, dev);1268 dev_mc_sync_multiple(port_dev, dev);
@@ -1262,6 +1279,9 @@ static int team_port_add(struct team *team, struct net_device *port_dev, · 10 unmodified lines
1262 1279
1263 return 0;1280 return 0;
1264 1281
1282err_set_slave_promisc:
1283 __team_option_inst_del_port(team, port);
1284
1265err_option_port_add:1285err_option_port_add:
1266 team_upper_dev_unlink(team, port);1286 team_upper_dev_unlink(team, port);
1267 1287
@@ -1307,6 +1327,12 @@ static int team_port_del(struct team *team, struct net_device *port_dev) · 39 unmodified lines
1307 1327
1308 team_port_disable(team, port);1328 team_port_disable(team, port);
1309 list_del_rcu(&port->list);1329 list_del_rcu(&port->list);
1330
1331 if (dev->flags & IFF_PROMISC)
1332 dev_set_promiscuity(port_dev, -1);
1333 if (dev->flags & IFF_ALLMULTI)
1334 dev_set_allmulti(port_dev, -1);
1335
1310 team_upper_dev_unlink(team, port);1336 team_upper_dev_unlink(team, port);
1311 netdev_rx_handler_unregister(port_dev);1337 netdev_rx_handler_unregister(port_dev);
1312 team_port_disable_netpoll(port);1338 team_port_disable_netpoll(port);
drivers/net/usb/qmi_wwan.c+1−0
@@ -1203,6 +1203,7 @@ static const struct usb_device_id products[] = { · 1202 unmodified lines
1203 {QMI_FIXED_INTF(0x19d2, 0x2002, 4)}, /* ZTE (Vodafone) K3765-Z */1203 {QMI_FIXED_INTF(0x19d2, 0x2002, 4)}, /* ZTE (Vodafone) K3765-Z */
1204 {QMI_FIXED_INTF(0x2001, 0x7e19, 4)}, /* D-Link DWM-221 B1 */1204 {QMI_FIXED_INTF(0x2001, 0x7e19, 4)}, /* D-Link DWM-221 B1 */
1205 {QMI_FIXED_INTF(0x2001, 0x7e35, 4)}, /* D-Link DWM-222 */1205 {QMI_FIXED_INTF(0x2001, 0x7e35, 4)}, /* D-Link DWM-222 */
1206 {QMI_FIXED_INTF(0x2020, 0x2031, 4)}, /* Olicard 600 */
1206 {QMI_FIXED_INTF(0x2020, 0x2033, 4)}, /* BroadMobi BM806U */1207 {QMI_FIXED_INTF(0x2020, 0x2033, 4)}, /* BroadMobi BM806U */
1207 {QMI_FIXED_INTF(0x0f3d, 0x68a2, 8)}, /* Sierra Wireless MC7700 */1208 {QMI_FIXED_INTF(0x0f3d, 0x68a2, 8)}, /* Sierra Wireless MC7700 */
1208 {QMI_FIXED_INTF(0x114f, 0x68a2, 8)}, /* Sierra Wireless MC7750 */1209 {QMI_FIXED_INTF(0x114f, 0x68a2, 8)}, /* Sierra Wireless MC7750 */
drivers/net/vrf.c+7−2
@@ -1273,9 +1273,14 @@ static void vrf_setup(struct net_device *dev) · 1272 unmodified lines
1273 1273
1274 /* default to no qdisc; user can add if desired */1274 /* default to no qdisc; user can add if desired */
1275 dev->priv_flags |= IFF_NO_QUEUE;1275 dev->priv_flags |= IFF_NO_QUEUE;
1276 dev->priv_flags |= IFF_NO_RX_HANDLER;
1276 1277
1277 dev->min_mtu = 0;1278 /* VRF devices do not care about MTU, but if the MTU is set
1278 dev->max_mtu = 0;1279 * too low then the ipv4 and ipv6 protocols are disabled
1280 * which breaks networking.
1281 */
1282 dev->min_mtu = IPV6_MIN_MTU;
1283 dev->max_mtu = ETH_MAX_MTU;
1279}1284}
1280 1285
1281static int vrf_validate(struct nlattr *tb[], struct nlattr *data[],1286static int vrf_validate(struct nlattr *tb[], struct nlattr *data[],
drivers/net/wireless/ath/ath10k/htt_rx.c+1−1
@@ -2728,7 +2728,7 @@ static void ath10k_htt_rx_tx_fetch_ind(struct ath10k *ar, struct sk_buff *skb) · 2727 unmodified lines
2728 num_msdus++;2728 num_msdus++;
2729 num_bytes += ret;2729 num_bytes += ret;
2730 }2730 }
2731 ieee80211_return_txq(hw, txq);2731 ieee80211_return_txq(hw, txq, false);
2732 ieee80211_txq_schedule_end(hw, txq->ac);2732 ieee80211_txq_schedule_end(hw, txq->ac);
2733 2733
2734 record->num_msdus = cpu_to_le16(num_msdus);2734 record->num_msdus = cpu_to_le16(num_msdus);
drivers/net/wireless/ath/ath10k/mac.c+2−2
@@ -4089,7 +4089,7 @@ static int ath10k_mac_schedule_txq(struct ieee80211_hw *hw, u32 ac) · 4088 unmodified lines
4089 if (ret < 0)4089 if (ret < 0)
4090 break;4090 break;
4091 }4091 }
4092 ieee80211_return_txq(hw, txq);4092 ieee80211_return_txq(hw, txq, false);
4093 ath10k_htt_tx_txq_update(hw, txq);4093 ath10k_htt_tx_txq_update(hw, txq);
4094 if (ret == -EBUSY)4094 if (ret == -EBUSY)
4095 break;4095 break;
@@ -4374,7 +4374,7 @@ static void ath10k_mac_op_wake_tx_queue(struct ieee80211_hw *hw, · 278 unmodified lines
4374 if (ret < 0)4374 if (ret < 0)
4375 break;4375 break;
4376 }4376 }
4377 ieee80211_return_txq(hw, txq);4377 ieee80211_return_txq(hw, txq, false);
4378 ath10k_htt_tx_txq_update(hw, txq);4378 ath10k_htt_tx_txq_update(hw, txq);
4379out:4379out:
4380 ieee80211_txq_schedule_end(hw, ac);4380 ieee80211_txq_schedule_end(hw, ac);
drivers/net/wireless/ath/ath9k/xmit.c+4−1
@@ -1938,12 +1938,15 @@ void ath_txq_schedule(struct ath_softc *sc, struct ath_txq *txq) · 1937 unmodified lines
1938 goto out;1938 goto out;
1939 1939
1940 while ((queue = ieee80211_next_txq(hw, txq->mac80211_qnum))) {1940 while ((queue = ieee80211_next_txq(hw, txq->mac80211_qnum))) {
1941 bool force;
1942
1941 tid = (struct ath_atx_tid *)queue->drv_priv;1943 tid = (struct ath_atx_tid *)queue->drv_priv;
1942 1944
1943 ret = ath_tx_sched_aggr(sc, txq, tid);1945 ret = ath_tx_sched_aggr(sc, txq, tid);
1944 ath_dbg(common, QUEUE, "ath_tx_sched_aggr returned %d\n", ret);1946 ath_dbg(common, QUEUE, "ath_tx_sched_aggr returned %d\n", ret);
1945 1947
1946 ieee80211_return_txq(hw, queue);1948 force = !skb_queue_empty(&tid->retry_q);
1949 ieee80211_return_txq(hw, queue, force);
1947 }1950 }
1948 1951
1949out:1952out:
drivers/net/wireless/intel/iwlwifi/cfg/22000.c+22−8
@@ -82,6 +82,7 @@ · 81 unmodified lines
82#define IWL_22000_HR_A0_FW_PRE "iwlwifi-QuQnj-a0-hr-a0-"82#define IWL_22000_HR_A0_FW_PRE "iwlwifi-QuQnj-a0-hr-a0-"
83#define IWL_22000_SU_Z0_FW_PRE "iwlwifi-su-z0-"83#define IWL_22000_SU_Z0_FW_PRE "iwlwifi-su-z0-"
84#define IWL_QU_B_JF_B_FW_PRE "iwlwifi-Qu-b0-jf-b0-"84#define IWL_QU_B_JF_B_FW_PRE "iwlwifi-Qu-b0-jf-b0-"
85#define IWL_QUZ_A_HR_B_FW_PRE "iwlwifi-QuZ-a0-hr-b0-"
85#define IWL_QNJ_B_JF_B_FW_PRE "iwlwifi-QuQnj-b0-jf-b0-"86#define IWL_QNJ_B_JF_B_FW_PRE "iwlwifi-QuQnj-b0-jf-b0-"
86#define IWL_CC_A_FW_PRE "iwlwifi-cc-a0-"87#define IWL_CC_A_FW_PRE "iwlwifi-cc-a0-"
87#define IWL_22000_SO_A_JF_B_FW_PRE "iwlwifi-so-a0-jf-b0-"88#define IWL_22000_SO_A_JF_B_FW_PRE "iwlwifi-so-a0-jf-b0-"
@@ -105,8 +106,8 @@ · 17 unmodified lines
105 IWL_22000_HR_A0_FW_PRE __stringify(api) ".ucode"106 IWL_22000_HR_A0_FW_PRE __stringify(api) ".ucode"
106#define IWL_22000_SU_Z0_MODULE_FIRMWARE(api) \107#define IWL_22000_SU_Z0_MODULE_FIRMWARE(api) \
107 IWL_22000_SU_Z0_FW_PRE __stringify(api) ".ucode"108 IWL_22000_SU_Z0_FW_PRE __stringify(api) ".ucode"
108#define IWL_QU_B_JF_B_MODULE_FIRMWARE(api) \109#define IWL_QUZ_A_HR_B_MODULE_FIRMWARE(api) \
109 IWL_QU_B_JF_B_FW_PRE __stringify(api) ".ucode"110 IWL_QUZ_A_HR_B_FW_PRE __stringify(api) ".ucode"
110#define IWL_QU_B_JF_B_MODULE_FIRMWARE(api) \111#define IWL_QU_B_JF_B_MODULE_FIRMWARE(api) \
111 IWL_QU_B_JF_B_FW_PRE __stringify(api) ".ucode"112 IWL_QU_B_JF_B_FW_PRE __stringify(api) ".ucode"
112#define IWL_QNJ_B_JF_B_MODULE_FIRMWARE(api) \113#define IWL_QNJ_B_JF_B_MODULE_FIRMWARE(api) \
@@ -235,8 +236,20 @@ const struct iwl_cfg iwl_ax101_cfg_qu_hr = { · 122 unmodified lines
235 .max_tx_agg_size = IEEE80211_MAX_AMPDU_BUF_HT,236 .max_tx_agg_size = IEEE80211_MAX_AMPDU_BUF_HT,
236};237};
237 238
238const struct iwl_cfg iwl22260_2ax_cfg = {239const struct iwl_cfg iwl_ax101_cfg_quz_hr = {
239 .name = "Intel(R) Wireless-AX 22260",240 .name = "Intel(R) Wi-Fi 6 AX101",
241 .fw_name_pre = IWL_QUZ_A_HR_B_FW_PRE,
242 IWL_DEVICE_22500,
243 /*
244 * This device doesn't support receiving BlockAck with a large bitmap
245 * so we need to restrict the size of transmitted aggregation to the
246 * HT size; mac80211 would otherwise pick the HE max (256) by default.
247 */
248 .max_tx_agg_size = IEEE80211_MAX_AMPDU_BUF_HT,
249};
250
251const struct iwl_cfg iwl_ax200_cfg_cc = {
252 .name = "Intel(R) Wi-Fi 6 AX200 160MHz",
240 .fw_name_pre = IWL_CC_A_FW_PRE,253 .fw_name_pre = IWL_CC_A_FW_PRE,
241 IWL_DEVICE_22500,254 IWL_DEVICE_22500,
242 /*255 /*
@@ -249,7 +262,7 @@ const struct iwl_cfg iwl22260_2ax_cfg = { · 6 unmodified lines
249};262};
250 263
251const struct iwl_cfg killer1650x_2ax_cfg = {264const struct iwl_cfg killer1650x_2ax_cfg = {
252 .name = "Killer(R) Wireless-AX 1650x Wireless Network Adapter (200NGW)",265 .name = "Killer(R) Wi-Fi 6 AX1650x 160MHz Wireless Network Adapter (200NGW)",
253 .fw_name_pre = IWL_CC_A_FW_PRE,266 .fw_name_pre = IWL_CC_A_FW_PRE,
254 IWL_DEVICE_22500,267 IWL_DEVICE_22500,
255 /*268 /*
@@ -262,7 +275,7 @@ const struct iwl_cfg killer1650x_2ax_cfg = { · 6 unmodified lines
262};275};
263 276
264const struct iwl_cfg killer1650w_2ax_cfg = {277const struct iwl_cfg killer1650w_2ax_cfg = {
265 .name = "Killer(R) Wireless-AX 1650w Wireless Network Adapter (200D2W)",278 .name = "Killer(R) Wi-Fi 6 AX1650w 160MHz Wireless Network Adapter (200D2W)",
266 .fw_name_pre = IWL_CC_A_FW_PRE,279 .fw_name_pre = IWL_CC_A_FW_PRE,
267 IWL_DEVICE_22500,280 IWL_DEVICE_22500,
268 /*281 /*
@@ -328,7 +341,7 @@ const struct iwl_cfg killer1550s_2ac_cfg_qu_b0_jf_b0 = { · 59 unmodified lines
328};341};
329 342
330const struct iwl_cfg killer1650s_2ax_cfg_qu_b0_hr_b0 = {343const struct iwl_cfg killer1650s_2ax_cfg_qu_b0_hr_b0 = {
331 .name = "Killer(R) Wireless-AX 1650i Wireless Network Adapter (22560NGW)",344 .name = "Killer(R) Wi-Fi 6 AX1650i 160MHz Wireless Network Adapter (201NGW)",
332 .fw_name_pre = IWL_22000_QU_B_HR_B_FW_PRE,345 .fw_name_pre = IWL_22000_QU_B_HR_B_FW_PRE,
333 IWL_DEVICE_22500,346 IWL_DEVICE_22500,
334 /*347 /*
@@ -340,7 +353,7 @@ const struct iwl_cfg killer1650s_2ax_cfg_qu_b0_hr_b0 = { · 5 unmodified lines
340};353};
341 354
342const struct iwl_cfg killer1650i_2ax_cfg_qu_b0_hr_b0 = {355const struct iwl_cfg killer1650i_2ax_cfg_qu_b0_hr_b0 = {
343 .name = "Killer(R) Wireless-AX 1650s Wireless Network Adapter (22560D2W)",356 .name = "Killer(R) Wi-Fi 6 AX1650s 160MHz Wireless Network Adapter (201D2W)",
344 .fw_name_pre = IWL_22000_QU_B_HR_B_FW_PRE,357 .fw_name_pre = IWL_22000_QU_B_HR_B_FW_PRE,
345 IWL_DEVICE_22500,358 IWL_DEVICE_22500,
346 /*359 /*
@@ -444,6 +457,7 @@ MODULE_FIRMWARE(IWL_22000_HR_B_QNJ_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX)); · 97 unmodified lines
444MODULE_FIRMWARE(IWL_22000_HR_A0_QNJ_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX));457MODULE_FIRMWARE(IWL_22000_HR_A0_QNJ_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX));
445MODULE_FIRMWARE(IWL_22000_SU_Z0_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX));458MODULE_FIRMWARE(IWL_22000_SU_Z0_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX));
446MODULE_FIRMWARE(IWL_QU_B_JF_B_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX));459MODULE_FIRMWARE(IWL_QU_B_JF_B_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX));
460MODULE_FIRMWARE(IWL_QUZ_A_HR_B_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX));
447MODULE_FIRMWARE(IWL_QNJ_B_JF_B_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX));461MODULE_FIRMWARE(IWL_QNJ_B_JF_B_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX));
448MODULE_FIRMWARE(IWL_CC_A_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX));462MODULE_FIRMWARE(IWL_CC_A_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX));
449MODULE_FIRMWARE(IWL_22000_SO_A_JF_B_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX));463MODULE_FIRMWARE(IWL_22000_SO_A_JF_B_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX));
drivers/net/wireless/intel/iwlwifi/fw/dbg.c+8−26
@@ -1614,6 +1614,7 @@ iwl_dump_ini_mem(struct iwl_fw_runtime *fwrt, · 1613 unmodified lines
1614 if (!range) {1614 if (!range) {
1615 IWL_ERR(fwrt, "Failed to fill region header: id=%d, type=%d\n",1615 IWL_ERR(fwrt, "Failed to fill region header: id=%d, type=%d\n",
1616 le32_to_cpu(reg->region_id), type);1616 le32_to_cpu(reg->region_id), type);
1617 memset(*data, 0, le32_to_cpu((*data)->len));
1617 return;1618 return;
1618 }1619 }
1619 1620
@@ -1623,6 +1624,7 @@ iwl_dump_ini_mem(struct iwl_fw_runtime *fwrt, · 3 unmodified lines
1623 if (range_size < 0) {1624 if (range_size < 0) {
1624 IWL_ERR(fwrt, "Failed to dump region: id=%d, type=%d\n",1625 IWL_ERR(fwrt, "Failed to dump region: id=%d, type=%d\n",
1625 le32_to_cpu(reg->region_id), type);1626 le32_to_cpu(reg->region_id), type);
1627 memset(*data, 0, le32_to_cpu((*data)->len));
1626 return;1628 return;
1627 }1629 }
1628 range = range + range_size;1630 range = range + range_size;
@@ -1807,12 +1809,12 @@ _iwl_fw_error_ini_dump(struct iwl_fw_runtime *fwrt, · 178 unmodified lines
1807 1809
1808 trigger = fwrt->dump.active_trigs[id].trig;1810 trigger = fwrt->dump.active_trigs[id].trig;
1809 1811
1810 size = sizeof(*dump_file);1812 size = iwl_fw_ini_get_trigger_len(fwrt, trigger);
1811 size += iwl_fw_ini_get_trigger_len(fwrt, trigger);
1812
1813 if (!size)1813 if (!size)
1814 return NULL;1814 return NULL;
1815 1815
1816 size += sizeof(*dump_file);
1817
1816 dump_file = vzalloc(size);1818 dump_file = vzalloc(size);
1817 if (!dump_file)1819 if (!dump_file)
1818 return NULL;1820 return NULL;
@@ -1942,14 +1944,10 @@ int iwl_fw_dbg_error_collect(struct iwl_fw_runtime *fwrt, · 123 unmodified lines
1942 iwl_dump_error_desc->len = 0;1944 iwl_dump_error_desc->len = 0;
1943 1945
1944 ret = iwl_fw_dbg_collect_desc(fwrt, iwl_dump_error_desc, false, 0);1946 ret = iwl_fw_dbg_collect_desc(fwrt, iwl_dump_error_desc, false, 0);
1945 if (ret) {1947 if (ret)
1946 kfree(iwl_dump_error_desc);1948 kfree(iwl_dump_error_desc);
1947 } else {1949 else
1948 set_bit(STATUS_FW_WAIT_DUMP, &fwrt->trans->status);1950 iwl_trans_sync_nmi(fwrt->trans);
1949
1950 /* trigger nmi to halt the fw */
1951 iwl_force_nmi(fwrt->trans);
1952 }
1953 1951
1954 return ret;1952 return ret;
1955}1953}
@@ -2489,22 +2487,6 @@ IWL_EXPORT_SYMBOL(iwl_fw_dbg_apply_point); · 533 unmodified lines
2489 2487
2490void iwl_fwrt_stop_device(struct iwl_fw_runtime *fwrt)2488void iwl_fwrt_stop_device(struct iwl_fw_runtime *fwrt)
2491{2489{
2492 /* if the wait event timeout elapses instead of wake up then
2493 * the driver did not receive NMI interrupt and can not assume the FW
2494 * is halted
2495 */
2496 int ret = wait_event_timeout(fwrt->trans->fw_halt_waitq,
2497 !test_bit(STATUS_FW_WAIT_DUMP,
2498 &fwrt->trans->status),
2499 msecs_to_jiffies(2000));
2500 if (!ret) {
2501 /* failed to receive NMI interrupt, assuming the FW is stuck */
2502 set_bit(STATUS_FW_ERROR, &fwrt->trans->status);
2503
2504 clear_bit(STATUS_FW_WAIT_DUMP, &fwrt->trans->status);
2505 }
2506
2507 /* Assuming the op mode mutex is held at this point */
2508 iwl_fw_dbg_collect_sync(fwrt);2490 iwl_fw_dbg_collect_sync(fwrt);
2509 2491
2510 iwl_trans_stop_device(fwrt->trans);2492 iwl_trans_stop_device(fwrt->trans);
drivers/net/wireless/intel/iwlwifi/fw/init.c+0−1
@@ -76,7 +76,6 @@ void iwl_fw_runtime_init(struct iwl_fw_runtime *fwrt, struct iwl_trans *trans, · 75 unmodified lines
76 fwrt->ops_ctx = ops_ctx;76 fwrt->ops_ctx = ops_ctx;
77 INIT_DELAYED_WORK(&fwrt->dump.wk, iwl_fw_error_dump_wk);77 INIT_DELAYED_WORK(&fwrt->dump.wk, iwl_fw_error_dump_wk);
78 iwl_fwrt_dbgfs_register(fwrt, dbgfs_dir);78 iwl_fwrt_dbgfs_register(fwrt, dbgfs_dir);
79 init_waitqueue_head(&fwrt->trans->fw_halt_waitq);
80}79}
81IWL_EXPORT_SYMBOL(iwl_fw_runtime_init);80IWL_EXPORT_SYMBOL(iwl_fw_runtime_init);
82 81
drivers/net/wireless/intel/iwlwifi/iwl-config.h+2−1
@@ -549,8 +549,9 @@ extern const struct iwl_cfg iwl22000_2ac_cfg_hr; · 548 unmodified lines
549extern const struct iwl_cfg iwl22000_2ac_cfg_hr_cdb;549extern const struct iwl_cfg iwl22000_2ac_cfg_hr_cdb;
550extern const struct iwl_cfg iwl22000_2ac_cfg_jf;550extern const struct iwl_cfg iwl22000_2ac_cfg_jf;
551extern const struct iwl_cfg iwl_ax101_cfg_qu_hr;551extern const struct iwl_cfg iwl_ax101_cfg_qu_hr;
552extern const struct iwl_cfg iwl_ax101_cfg_quz_hr;
552extern const struct iwl_cfg iwl22000_2ax_cfg_hr;553extern const struct iwl_cfg iwl22000_2ax_cfg_hr;
553extern const struct iwl_cfg iwl22260_2ax_cfg;554extern const struct iwl_cfg iwl_ax200_cfg_cc;
554extern const struct iwl_cfg killer1650s_2ax_cfg_qu_b0_hr_b0;555extern const struct iwl_cfg killer1650s_2ax_cfg_qu_b0_hr_b0;
555extern const struct iwl_cfg killer1650i_2ax_cfg_qu_b0_hr_b0;556extern const struct iwl_cfg killer1650i_2ax_cfg_qu_b0_hr_b0;
556extern const struct iwl_cfg killer1650x_2ax_cfg;557extern const struct iwl_cfg killer1650x_2ax_cfg;
drivers/net/wireless/intel/iwlwifi/iwl-csr.h+1−0
@@ -327,6 +327,7 @@ enum { · 326 unmodified lines
327#define CSR_HW_REV_TYPE_NONE (0x00001F0)327#define CSR_HW_REV_TYPE_NONE (0x00001F0)
328#define CSR_HW_REV_TYPE_QNJ (0x0000360)328#define CSR_HW_REV_TYPE_QNJ (0x0000360)
329#define CSR_HW_REV_TYPE_QNJ_B0 (0x0000364)329#define CSR_HW_REV_TYPE_QNJ_B0 (0x0000364)
330#define CSR_HW_REV_TYPE_QUZ (0x0000354)
330#define CSR_HW_REV_TYPE_HR_CDB (0x0000340)331#define CSR_HW_REV_TYPE_HR_CDB (0x0000340)
331#define CSR_HW_REV_TYPE_SO (0x0000370)332#define CSR_HW_REV_TYPE_SO (0x0000370)
332#define CSR_HW_REV_TYPE_TY (0x0000420)333#define CSR_HW_REV_TYPE_TY (0x0000420)
drivers/net/wireless/intel/iwlwifi/iwl-trans.h+6−6
@@ -338,7 +338,6 @@ enum iwl_d3_status { · 337 unmodified lines
338 * are sent338 * are sent
339 * @STATUS_TRANS_IDLE: the trans is idle - general commands are not to be sent339 * @STATUS_TRANS_IDLE: the trans is idle - general commands are not to be sent
340 * @STATUS_TRANS_DEAD: trans is dead - avoid any read/write operation340 * @STATUS_TRANS_DEAD: trans is dead - avoid any read/write operation
341 * @STATUS_FW_WAIT_DUMP: if set, wait until cleared before collecting dump
342 */341 */
343enum iwl_trans_status {342enum iwl_trans_status {
344 STATUS_SYNC_HCMD_ACTIVE,343 STATUS_SYNC_HCMD_ACTIVE,
@@ -351,7 +350,6 @@ enum iwl_trans_status { · 6 unmodified lines
351 STATUS_TRANS_GOING_IDLE,350 STATUS_TRANS_GOING_IDLE,
352 STATUS_TRANS_IDLE,351 STATUS_TRANS_IDLE,
353 STATUS_TRANS_DEAD,352 STATUS_TRANS_DEAD,
354 STATUS_FW_WAIT_DUMP,
355};353};
356 354
357static inline int355static inline int
@@ -618,6 +616,7 @@ struct iwl_trans_ops { · 260 unmodified lines
618 struct iwl_trans_dump_data *(*dump_data)(struct iwl_trans *trans,616 struct iwl_trans_dump_data *(*dump_data)(struct iwl_trans *trans,
619 u32 dump_mask);617 u32 dump_mask);
620 void (*debugfs_cleanup)(struct iwl_trans *trans);618 void (*debugfs_cleanup)(struct iwl_trans *trans);
619 void (*sync_nmi)(struct iwl_trans *trans);
621};620};
622 621
623/**622/**
@@ -831,7 +830,6 @@ struct iwl_trans { · 207 unmodified lines
831 u32 lmac_error_event_table[2];830 u32 lmac_error_event_table[2];
832 u32 umac_error_event_table;831 u32 umac_error_event_table;
833 unsigned int error_event_table_tlv_status;832 unsigned int error_event_table_tlv_status;
834 wait_queue_head_t fw_halt_waitq;
835 833
836 /* pointer to trans specific struct */834 /* pointer to trans specific struct */
837 /*Ensure that this pointer will always be aligned to sizeof pointer */835 /*Ensure that this pointer will always be aligned to sizeof pointer */
@@ -1239,10 +1237,12 @@ static inline void iwl_trans_fw_error(struct iwl_trans *trans) · 401 unmodified lines
1239 /* prevent double restarts due to the same erroneous FW */1237 /* prevent double restarts due to the same erroneous FW */
1240 if (!test_and_set_bit(STATUS_FW_ERROR, &trans->status))1238 if (!test_and_set_bit(STATUS_FW_ERROR, &trans->status))
1241 iwl_op_mode_nic_error(trans->op_mode);1239 iwl_op_mode_nic_error(trans->op_mode);
1240}
1242 1241
1243 if (test_and_clear_bit(STATUS_FW_WAIT_DUMP, &trans->status))1242static inline void iwl_trans_sync_nmi(struct iwl_trans *trans)
1244 wake_up(&trans->fw_halt_waitq);1243{
1245 1244 if (trans->ops->sync_nmi)
1245 trans->ops->sync_nmi(trans);
1246}1246}
1247 1247
1248/*****************************************************1248/*****************************************************
drivers/net/wireless/intel/iwlwifi/mvm/mac80211.c+22−49
@@ -2714,9 +2714,6 @@ static void iwl_mvm_stop_ap_ibss(struct ieee80211_hw *hw, · 2713 unmodified lines
2714 2714
2715 iwl_mvm_mac_ctxt_remove(mvm, vif);2715 iwl_mvm_mac_ctxt_remove(mvm, vif);
2716 2716
2717 kfree(mvmvif->ap_wep_key);
2718 mvmvif->ap_wep_key = NULL;
2719
2720 mutex_unlock(&mvm->mutex);2717 mutex_unlock(&mvm->mutex);
2721}2718}
2722 2719
@@ -3183,24 +3180,7 @@ static int iwl_mvm_mac_sta_state(struct ieee80211_hw *hw, · 460 unmodified lines
3183 ret = iwl_mvm_update_sta(mvm, vif, sta);3180 ret = iwl_mvm_update_sta(mvm, vif, sta);
3184 } else if (old_state == IEEE80211_STA_ASSOC &&3181 } else if (old_state == IEEE80211_STA_ASSOC &&
3185 new_state == IEEE80211_STA_AUTHORIZED) {3182 new_state == IEEE80211_STA_AUTHORIZED) {
3186 /* if wep is used, need to set the key for the station now */3183 ret = 0;
3187 if (vif->type == NL80211_IFTYPE_AP && mvmvif->ap_wep_key) {
3188 mvm_sta->wep_key =
3189 kmemdup(mvmvif->ap_wep_key,
3190 sizeof(*mvmvif->ap_wep_key) +
3191 mvmvif->ap_wep_key->keylen,
3192 GFP_KERNEL);
3193 if (!mvm_sta->wep_key) {
3194 ret = -ENOMEM;
3195 goto out_unlock;
3196 }
3197
3198 ret = iwl_mvm_set_sta_key(mvm, vif, sta,
3199 mvm_sta->wep_key,
3200 STA_KEY_IDX_INVALID);
3201 } else {
3202 ret = 0;
3203 }
3204 3184
3205 /* we don't support TDLS during DCM */3185 /* we don't support TDLS during DCM */
3206 if (iwl_mvm_phy_ctx_count(mvm) > 1)3186 if (iwl_mvm_phy_ctx_count(mvm) > 1)
@@ -3242,17 +3222,6 @@ static int iwl_mvm_mac_sta_state(struct ieee80211_hw *hw, · 35 unmodified lines
3242 NL80211_TDLS_DISABLE_LINK);3222 NL80211_TDLS_DISABLE_LINK);
3243 }3223 }
3244 3224
3245 /* Remove STA key if this is an AP using WEP */
3246 if (vif->type == NL80211_IFTYPE_AP && mvmvif->ap_wep_key) {
3247 int rm_ret = iwl_mvm_remove_sta_key(mvm, vif, sta,
3248 mvm_sta->wep_key);
3249
3250 if (!ret)
3251 ret = rm_ret;
3252 kfree(mvm_sta->wep_key);
3253 mvm_sta->wep_key = NULL;
3254 }
3255
3256 if (unlikely(ret &&3225 if (unlikely(ret &&
3257 test_bit(IWL_MVM_STATUS_HW_RESTART_REQUESTED,3226 test_bit(IWL_MVM_STATUS_HW_RESTART_REQUESTED,
3258 &mvm->status)))3227 &mvm->status)))
@@ -3289,6 +3258,13 @@ static void iwl_mvm_sta_rc_update(struct ieee80211_hw *hw, · 30 unmodified lines
3289 struct ieee80211_sta *sta, u32 changed)3258 struct ieee80211_sta *sta, u32 changed)
3290{3259{
3291 struct iwl_mvm *mvm = IWL_MAC80211_GET_MVM(hw);3260 struct iwl_mvm *mvm = IWL_MAC80211_GET_MVM(hw);
3261 struct iwl_mvm_vif *mvmvif = iwl_mvm_vif_from_mac80211(vif);
3262
3263 if (changed & (IEEE80211_RC_BW_CHANGED |
3264 IEEE80211_RC_SUPP_RATES_CHANGED |
3265 IEEE80211_RC_NSS_CHANGED))
3266 iwl_mvm_rs_rate_init(mvm, sta, mvmvif->phy_ctxt->channel->band,
3267 true);
3292 3268
3293 if (vif->type == NL80211_IFTYPE_STATION &&3269 if (vif->type == NL80211_IFTYPE_STATION &&
3294 changed & IEEE80211_RC_NSS_CHANGED)3270 changed & IEEE80211_RC_NSS_CHANGED)
@@ -3439,20 +3415,12 @@ static int iwl_mvm_mac_set_key(struct ieee80211_hw *hw, · 144 unmodified lines
3439 break;3415 break;
3440 case WLAN_CIPHER_SUITE_WEP40:3416 case WLAN_CIPHER_SUITE_WEP40:
3441 case WLAN_CIPHER_SUITE_WEP104:3417 case WLAN_CIPHER_SUITE_WEP104:
3442 if (vif->type == NL80211_IFTYPE_AP) {3418 if (vif->type == NL80211_IFTYPE_STATION)
3443 struct iwl_mvm_vif *mvmvif =3419 break;
3444 iwl_mvm_vif_from_mac80211(vif);3420 if (iwl_mvm_has_new_tx_api(mvm))
3445 3421 return -EOPNOTSUPP;
3446 mvmvif->ap_wep_key = kmemdup(key,3422 /* support HW crypto on TX */
3447 sizeof(*key) + key->keylen,3423 return 0;
3448 GFP_KERNEL);
3449 if (!mvmvif->ap_wep_key)
3450 return -ENOMEM;
3451 }
3452
3453 if (vif->type != NL80211_IFTYPE_STATION)
3454 return 0;
3455 break;
3456 default:3424 default:
3457 /* currently FW supports only one optional cipher scheme */3425 /* currently FW supports only one optional cipher scheme */
3458 if (hw->n_cipher_schemes &&3426 if (hw->n_cipher_schemes &&
@@ -3540,12 +3508,17 @@ static int iwl_mvm_mac_set_key(struct ieee80211_hw *hw, · 81 unmodified lines
3540 ret = iwl_mvm_set_sta_key(mvm, vif, sta, key, key_offset);3508 ret = iwl_mvm_set_sta_key(mvm, vif, sta, key, key_offset);
3541 if (ret) {3509 if (ret) {
3542 IWL_WARN(mvm, "set key failed\n");3510 IWL_WARN(mvm, "set key failed\n");
3511 key->hw_key_idx = STA_KEY_IDX_INVALID;
3543 /*3512 /*
3544 * can't add key for RX, but we don't need it3513 * can't add key for RX, but we don't need it
3545 * in the device for TX so still return 03514 * in the device for TX so still return 0,
3515 * unless we have new TX API where we cannot
3516 * put key material into the TX_CMD
3546 */3517 */
3547 key->hw_key_idx = STA_KEY_IDX_INVALID;3518 if (iwl_mvm_has_new_tx_api(mvm))
3548 ret = 0;3519 ret = -EOPNOTSUPP;
3520 else
3521 ret = 0;
3549 }3522 }
3550 3523
3551 break;3524 break;
drivers/net/wireless/intel/iwlwifi/mvm/mvm.h+0−1
@@ -498,7 +498,6 @@ struct iwl_mvm_vif { · 497 unmodified lines
498 netdev_features_t features;498 netdev_features_t features;
499 499
500 struct iwl_probe_resp_data __rcu *probe_resp_data;500 struct iwl_probe_resp_data __rcu *probe_resp_data;
501 struct ieee80211_key_conf *ap_wep_key;
502};501};
503 502
504static inline struct iwl_mvm_vif *503static inline struct iwl_mvm_vif *
drivers/net/wireless/intel/iwlwifi/mvm/sta.c+4−39
@@ -8,7 +8,7 @@ · 7 unmodified lines
8 * Copyright(c) 2012 - 2015 Intel Corporation. All rights reserved.8 * Copyright(c) 2012 - 2015 Intel Corporation. All rights reserved.
9 * Copyright(c) 2013 - 2015 Intel Mobile Communications GmbH9 * Copyright(c) 2013 - 2015 Intel Mobile Communications GmbH
10 * Copyright(c) 2016 - 2017 Intel Deutschland GmbH10 * Copyright(c) 2016 - 2017 Intel Deutschland GmbH
11 * Copyright(c) 2018 Intel Corporation11 * Copyright(c) 2018 - 2019 Intel Corporation
12 *12 *
13 * This program is free software; you can redistribute it and/or modify13 * This program is free software; you can redistribute it and/or modify
14 * it under the terms of version 2 of the GNU General Public License as14 * it under the terms of version 2 of the GNU General Public License as
@@ -31,7 +31,7 @@ · 16 unmodified lines
31 * Copyright(c) 2012 - 2015 Intel Corporation. All rights reserved.31 * Copyright(c) 2012 - 2015 Intel Corporation. All rights reserved.
32 * Copyright(c) 2013 - 2015 Intel Mobile Communications GmbH32 * Copyright(c) 2013 - 2015 Intel Mobile Communications GmbH
33 * Copyright(c) 2016 - 2017 Intel Deutschland GmbH33 * Copyright(c) 2016 - 2017 Intel Deutschland GmbH
34 * Copyright(c) 2018 Intel Corporation34 * Copyright(c) 2018 - 2019 Intel Corporation
35 * All rights reserved.35 * All rights reserved.
36 *36 *
37 * Redistribution and use in source and binary forms, with or without37 * Redistribution and use in source and binary forms, with or without
@@ -1399,7 +1399,9 @@ void iwl_mvm_add_new_dqa_stream_wk(struct work_struct *wk) · 1361 unmodified lines
1399 1399
1400 iwl_mvm_sta_alloc_queue(mvm, txq->sta, txq->ac, tid);1400 iwl_mvm_sta_alloc_queue(mvm, txq->sta, txq->ac, tid);
1401 list_del_init(&mvmtxq->list);1401 list_del_init(&mvmtxq->list);
1402 local_bh_disable();
1402 iwl_mvm_mac_itxq_xmit(mvm->hw, txq);1403 iwl_mvm_mac_itxq_xmit(mvm->hw, txq);
1404 local_bh_enable();
1403 }1405 }
1404 1406
1405 mutex_unlock(&mvm->mutex);1407 mutex_unlock(&mvm->mutex);
@@ -2333,21 +2335,6 @@ int iwl_mvm_add_mcast_sta(struct iwl_mvm *mvm, struct ieee80211_vif *vif) · 927 unmodified lines
2333 iwl_mvm_enable_txq(mvm, NULL, mvmvif->cab_queue, 0, &cfg,2335 iwl_mvm_enable_txq(mvm, NULL, mvmvif->cab_queue, 0, &cfg,
2334 timeout);2336 timeout);
2335 2337
2336 if (mvmvif->ap_wep_key) {
2337 u8 key_offset = iwl_mvm_set_fw_key_idx(mvm);
2338
2339 __set_bit(key_offset, mvm->fw_key_table);
2340
2341 if (key_offset == STA_KEY_IDX_INVALID)
2342 return -ENOSPC;
2343
2344 ret = iwl_mvm_send_sta_key(mvm, mvmvif->mcast_sta.sta_id,
2345 mvmvif->ap_wep_key, true, 0, NULL, 0,
2346 key_offset, 0);
2347 if (ret)
2348 return ret;
2349 }
2350
2351 return 0;2338 return 0;
2352}2339}
2353 2340
@@ -2419,28 +2406,6 @@ int iwl_mvm_rm_mcast_sta(struct iwl_mvm *mvm, struct ieee80211_vif *vif) · 65 unmodified lines
2419 2406
2420 iwl_mvm_disable_txq(mvm, NULL, mvmvif->cab_queue, 0, 0);2407 iwl_mvm_disable_txq(mvm, NULL, mvmvif->cab_queue, 0, 0);
2421 2408
2422 if (mvmvif->ap_wep_key) {
2423 int i;
2424
2425 if (!__test_and_clear_bit(mvmvif->ap_wep_key->hw_key_idx,
2426 mvm->fw_key_table)) {
2427 IWL_ERR(mvm, "offset %d not used in fw key table.\n",
2428 mvmvif->ap_wep_key->hw_key_idx);
2429 return -ENOENT;
2430 }
2431
2432 /* track which key was deleted last */
2433 for (i = 0; i < STA_KEY_MAX_NUM; i++) {
2434 if (mvm->fw_key_deleted[i] < U8_MAX)
2435 mvm->fw_key_deleted[i]++;
2436 }
2437 mvm->fw_key_deleted[mvmvif->ap_wep_key->hw_key_idx] = 0;
2438 ret = __iwl_mvm_remove_sta_key(mvm, mvmvif->mcast_sta.sta_id,
2439 mvmvif->ap_wep_key, true);
2440 if (ret)
2441 return ret;
2442 }
2443
2444 ret = iwl_mvm_rm_sta_common(mvm, mvmvif->mcast_sta.sta_id);2409 ret = iwl_mvm_rm_sta_common(mvm, mvmvif->mcast_sta.sta_id);
2445 if (ret)2410 if (ret)
2446 IWL_WARN(mvm, "Failed sending remove station\n");2411 IWL_WARN(mvm, "Failed sending remove station\n");
drivers/net/wireless/intel/iwlwifi/mvm/sta.h+2−5
@@ -8,7 +8,7 @@ · 7 unmodified lines
8 * Copyright(c) 2012 - 2014 Intel Corporation. All rights reserved.8 * Copyright(c) 2012 - 2014 Intel Corporation. All rights reserved.
9 * Copyright(c) 2013 - 2014 Intel Mobile Communications GmbH9 * Copyright(c) 2013 - 2014 Intel Mobile Communications GmbH
10 * Copyright(c) 2015 - 2016 Intel Deutschland GmbH10 * Copyright(c) 2015 - 2016 Intel Deutschland GmbH
11 * Copyright(c) 2018 Intel Corporation11 * Copyright(c) 2018 - 2019 Intel Corporation
12 *12 *
13 * This program is free software; you can redistribute it and/or modify13 * This program is free software; you can redistribute it and/or modify
14 * it under the terms of version 2 of the GNU General Public License as14 * it under the terms of version 2 of the GNU General Public License as
@@ -31,7 +31,7 @@ · 16 unmodified lines
31 * Copyright(c) 2012 - 2014 Intel Corporation. All rights reserved.31 * Copyright(c) 2012 - 2014 Intel Corporation. All rights reserved.
32 * Copyright(c) 2013 - 2014 Intel Mobile Communications GmbH32 * Copyright(c) 2013 - 2014 Intel Mobile Communications GmbH
33 * Copyright(c) 2015 - 2016 Intel Deutschland GmbH33 * Copyright(c) 2015 - 2016 Intel Deutschland GmbH
34 * Copyright(c) 2018 Intel Corporation34 * Copyright(c) 2018 - 2019 Intel Corporation
35 * All rights reserved.35 * All rights reserved.
36 *36 *
37 * Redistribution and use in source and binary forms, with or without37 * Redistribution and use in source and binary forms, with or without
@@ -394,7 +394,6 @@ struct iwl_mvm_rxq_dup_data { · 356 unmodified lines
394 * the BA window. To be used for UAPSD only.394 * the BA window. To be used for UAPSD only.
395 * @ptk_pn: per-queue PTK PN data structures395 * @ptk_pn: per-queue PTK PN data structures
396 * @dup_data: per queue duplicate packet detection data396 * @dup_data: per queue duplicate packet detection data
397 * @wep_key: used in AP mode. Is a duplicate of the WEP key.
398 * @deferred_traffic_tid_map: indication bitmap of deferred traffic per-TID397 * @deferred_traffic_tid_map: indication bitmap of deferred traffic per-TID
399 * @tx_ant: the index of the antenna to use for data tx to this station. Only398 * @tx_ant: the index of the antenna to use for data tx to this station. Only
400 * used during connection establishment (e.g. for the 4 way handshake399 * used during connection establishment (e.g. for the 4 way handshake
@@ -426,8 +425,6 @@ struct iwl_mvm_sta { · 25 unmodified lines
426 struct iwl_mvm_key_pn __rcu *ptk_pn[4];425 struct iwl_mvm_key_pn __rcu *ptk_pn[4];
427 struct iwl_mvm_rxq_dup_data *dup_data;426 struct iwl_mvm_rxq_dup_data *dup_data;
428 427
429 struct ieee80211_key_conf *wep_key;
430
431 u8 reserved_queue;428 u8 reserved_queue;
432 429
433 /* Temporary, until the new TLC will control the Tx protection */430 /* Temporary, until the new TLC will control the Tx protection */
drivers/net/wireless/intel/iwlwifi/pcie/drv.c+7−6
@@ -953,14 +953,15 @@ static const struct pci_device_id iwl_hw_card_ids[] = { · 952 unmodified lines
953 {IWL_PCI_DEVICE(0xA0F0, 0x1652, killer1650i_2ax_cfg_qu_b0_hr_b0)},953 {IWL_PCI_DEVICE(0xA0F0, 0x1652, killer1650i_2ax_cfg_qu_b0_hr_b0)},
954 {IWL_PCI_DEVICE(0xA0F0, 0x4070, iwl_ax101_cfg_qu_hr)},954 {IWL_PCI_DEVICE(0xA0F0, 0x4070, iwl_ax101_cfg_qu_hr)},
955 955
956 {IWL_PCI_DEVICE(0x2723, 0x0080, iwl22260_2ax_cfg)},956 {IWL_PCI_DEVICE(0x2723, 0x0080, iwl_ax200_cfg_cc)},
957 {IWL_PCI_DEVICE(0x2723, 0x0084, iwl22260_2ax_cfg)},957 {IWL_PCI_DEVICE(0x2723, 0x0084, iwl_ax200_cfg_cc)},
958 {IWL_PCI_DEVICE(0x2723, 0x0088, iwl22260_2ax_cfg)},958 {IWL_PCI_DEVICE(0x2723, 0x0088, iwl_ax200_cfg_cc)},
959 {IWL_PCI_DEVICE(0x2723, 0x008C, iwl22260_2ax_cfg)},959 {IWL_PCI_DEVICE(0x2723, 0x008C, iwl_ax200_cfg_cc)},
960 {IWL_PCI_DEVICE(0x2723, 0x1653, killer1650w_2ax_cfg)},960 {IWL_PCI_DEVICE(0x2723, 0x1653, killer1650w_2ax_cfg)},
961 {IWL_PCI_DEVICE(0x2723, 0x1654, killer1650x_2ax_cfg)},961 {IWL_PCI_DEVICE(0x2723, 0x1654, killer1650x_2ax_cfg)},
962 {IWL_PCI_DEVICE(0x2723, 0x4080, iwl22260_2ax_cfg)},962 {IWL_PCI_DEVICE(0x2723, 0x2080, iwl_ax200_cfg_cc)},
963 {IWL_PCI_DEVICE(0x2723, 0x4088, iwl22260_2ax_cfg)},963 {IWL_PCI_DEVICE(0x2723, 0x4080, iwl_ax200_cfg_cc)},
964 {IWL_PCI_DEVICE(0x2723, 0x4088, iwl_ax200_cfg_cc)},
964 965
965 {IWL_PCI_DEVICE(0x1a56, 0x1653, killer1650w_2ax_cfg)},966 {IWL_PCI_DEVICE(0x1a56, 0x1653, killer1650w_2ax_cfg)},
966 {IWL_PCI_DEVICE(0x1a56, 0x1654, killer1650x_2ax_cfg)},967 {IWL_PCI_DEVICE(0x1a56, 0x1654, killer1650x_2ax_cfg)},
drivers/net/wireless/intel/iwlwifi/pcie/internal.h+1−1
@@ -1043,7 +1043,7 @@ static inline bool iwl_pcie_dbg_on(struct iwl_trans *trans) · 1042 unmodified lines
1043 1043
1044void iwl_trans_pcie_rf_kill(struct iwl_trans *trans, bool state);1044void iwl_trans_pcie_rf_kill(struct iwl_trans *trans, bool state);
1045void iwl_trans_pcie_dump_regs(struct iwl_trans *trans);1045void iwl_trans_pcie_dump_regs(struct iwl_trans *trans);
1046void iwl_trans_sync_nmi(struct iwl_trans *trans);1046void iwl_trans_pcie_sync_nmi(struct iwl_trans *trans);
1047 1047
1048#ifdef CONFIG_IWLWIFI_DEBUGFS1048#ifdef CONFIG_IWLWIFI_DEBUGFS
1049int iwl_trans_pcie_dbgfs_register(struct iwl_trans *trans);1049int iwl_trans_pcie_dbgfs_register(struct iwl_trans *trans);
drivers/net/wireless/intel/iwlwifi/pcie/trans.c+8−3
@@ -3318,7 +3318,8 @@ static void iwl_trans_pcie_resume(struct iwl_trans *trans) · 3317 unmodified lines
3318 .unref = iwl_trans_pcie_unref, \3318 .unref = iwl_trans_pcie_unref, \
3319 .dump_data = iwl_trans_pcie_dump_data, \3319 .dump_data = iwl_trans_pcie_dump_data, \
3320 .d3_suspend = iwl_trans_pcie_d3_suspend, \3320 .d3_suspend = iwl_trans_pcie_d3_suspend, \
3321 .d3_resume = iwl_trans_pcie_d3_resume3321 .d3_resume = iwl_trans_pcie_d3_resume, \
3322 .sync_nmi = iwl_trans_pcie_sync_nmi
3322 3323
3323#ifdef CONFIG_PM_SLEEP3324#ifdef CONFIG_PM_SLEEP
3324#define IWL_TRANS_PM_OPS \3325#define IWL_TRANS_PM_OPS \
@@ -3542,6 +3543,10 @@ struct iwl_trans *iwl_trans_pcie_alloc(struct pci_dev *pdev, · 217 unmodified lines
3542 }3543 }
3543 } else if (cfg == &iwl_ax101_cfg_qu_hr) {3544 } else if (cfg == &iwl_ax101_cfg_qu_hr) {
3544 if (CSR_HW_RF_ID_TYPE_CHIP_ID(trans->hw_rf_id) ==3545 if (CSR_HW_RF_ID_TYPE_CHIP_ID(trans->hw_rf_id) ==
3546 CSR_HW_RF_ID_TYPE_CHIP_ID(CSR_HW_RF_ID_TYPE_HR) &&
3547 trans->hw_rev == CSR_HW_REV_TYPE_QNJ_B0) {
3548 trans->cfg = &iwl22000_2ax_cfg_qnj_hr_b0;
3549 } else if (CSR_HW_RF_ID_TYPE_CHIP_ID(trans->hw_rf_id) ==
3545 CSR_HW_RF_ID_TYPE_CHIP_ID(CSR_HW_RF_ID_TYPE_HR)) {3550 CSR_HW_RF_ID_TYPE_CHIP_ID(CSR_HW_RF_ID_TYPE_HR)) {
3546 trans->cfg = &iwl_ax101_cfg_qu_hr;3551 trans->cfg = &iwl_ax101_cfg_qu_hr;
3547 } else if (CSR_HW_RF_ID_TYPE_CHIP_ID(trans->hw_rf_id) ==3552 } else if (CSR_HW_RF_ID_TYPE_CHIP_ID(trans->hw_rf_id) ==
@@ -3560,7 +3565,7 @@ struct iwl_trans *iwl_trans_pcie_alloc(struct pci_dev *pdev, · 12 unmodified lines
3560 }3565 }
3561 } else if (CSR_HW_RF_ID_TYPE_CHIP_ID(trans->hw_rf_id) ==3566 } else if (CSR_HW_RF_ID_TYPE_CHIP_ID(trans->hw_rf_id) ==
3562 CSR_HW_RF_ID_TYPE_CHIP_ID(CSR_HW_RF_ID_TYPE_HR) &&3567 CSR_HW_RF_ID_TYPE_CHIP_ID(CSR_HW_RF_ID_TYPE_HR) &&
3563 (trans->cfg != &iwl22260_2ax_cfg ||3568 (trans->cfg != &iwl_ax200_cfg_cc ||
3564 trans->hw_rev == CSR_HW_REV_TYPE_QNJ_B0)) {3569 trans->hw_rev == CSR_HW_REV_TYPE_QNJ_B0)) {
3565 u32 hw_status;3570 u32 hw_status;
3566 3571
@@ -3637,7 +3642,7 @@ out_no_pci: · 70 unmodified lines
3637 return ERR_PTR(ret);3642 return ERR_PTR(ret);
3638}3643}
3639 3644
3640void iwl_trans_sync_nmi(struct iwl_trans *trans)3645void iwl_trans_pcie_sync_nmi(struct iwl_trans *trans)
3641{3646{
3642 unsigned long timeout = jiffies + IWL_TRANS_NMI_TIMEOUT;3647 unsigned long timeout = jiffies + IWL_TRANS_NMI_TIMEOUT;
3643 3648
drivers/net/wireless/intel/iwlwifi/pcie/tx-gen2.c+1−1
@@ -965,7 +965,7 @@ static int iwl_pcie_gen2_send_hcmd_sync(struct iwl_trans *trans, · 964 unmodified lines
965 cmd_str);965 cmd_str);
966 ret = -ETIMEDOUT;966 ret = -ETIMEDOUT;
967 967
968 iwl_trans_sync_nmi(trans);968 iwl_trans_pcie_sync_nmi(trans);
969 goto cancel;969 goto cancel;
970 }970 }
971 971
drivers/net/wireless/intel/iwlwifi/pcie/tx.c+1−1
@@ -1960,7 +1960,7 @@ static int iwl_pcie_send_hcmd_sync(struct iwl_trans *trans, · 1959 unmodified lines
1960 iwl_get_cmd_string(trans, cmd->id));1960 iwl_get_cmd_string(trans, cmd->id));
1961 ret = -ETIMEDOUT;1961 ret = -ETIMEDOUT;
1962 1962
1963 iwl_trans_sync_nmi(trans);1963 iwl_trans_pcie_sync_nmi(trans);
1964 goto cancel;1964 goto cancel;
1965 }1965 }
1966 1966
drivers/net/wireless/mac80211_hwsim.c+15−4
@@ -2644,7 +2644,7 @@ static int mac80211_hwsim_new_radio(struct genl_info *info, · 2643 unmodified lines
2644 enum nl80211_band band;2644 enum nl80211_band band;
2645 const struct ieee80211_ops *ops = &mac80211_hwsim_ops;2645 const struct ieee80211_ops *ops = &mac80211_hwsim_ops;
2646 struct net *net;2646 struct net *net;
2647 int idx;2647 int idx, i;
2648 int n_limits = 0;2648 int n_limits = 0;
2649 2649
2650 if (WARN_ON(param->channels > 1 && !param->use_chanctx))2650 if (WARN_ON(param->channels > 1 && !param->use_chanctx))
@@ -2768,12 +2768,23 @@ static int mac80211_hwsim_new_radio(struct genl_info *info, · 117 unmodified lines
2768 goto failed_hw;2768 goto failed_hw;
2769 }2769 }
2770 2770
2771 data->if_combination.max_interfaces = 0;
2772 for (i = 0; i < n_limits; i++)
2773 data->if_combination.max_interfaces +=
2774 data->if_limits[i].max;
2775
2771 data->if_combination.n_limits = n_limits;2776 data->if_combination.n_limits = n_limits;
2772 data->if_combination.max_interfaces = 2048;
2773 data->if_combination.limits = data->if_limits;2777 data->if_combination.limits = data->if_limits;
2774 2778
2775 hw->wiphy->iface_combinations = &data->if_combination;2779 /*
2776 hw->wiphy->n_iface_combinations = 1;2780 * If we actually were asked to support combinations,
2781 * advertise them - if there's only a single thing like
2782 * only IBSS then don't advertise it as combinations.
2783 */
2784 if (data->if_combination.max_interfaces > 1) {
2785 hw->wiphy->iface_combinations = &data->if_combination;
2786 hw->wiphy->n_iface_combinations = 1;
2787 }
2777 2788
2778 if (param->ciphers) {2789 if (param->ciphers) {
2779 memcpy(data->ciphers, param->ciphers,2790 memcpy(data->ciphers, param->ciphers,
drivers/net/wireless/mediatek/mt76/mt7603/init.c+2−0
@@ -510,6 +510,8 @@ int mt7603_register_device(struct mt7603_dev *dev) · 509 unmodified lines
510 bus_ops->rmw = mt7603_rmw;510 bus_ops->rmw = mt7603_rmw;
511 dev->mt76.bus = bus_ops;511 dev->mt76.bus = bus_ops;
512 512
513 spin_lock_init(&dev->ps_lock);
514
513 INIT_DELAYED_WORK(&dev->mac_work, mt7603_mac_work);515 INIT_DELAYED_WORK(&dev->mac_work, mt7603_mac_work);
514 tasklet_init(&dev->pre_tbtt_tasklet, mt7603_pre_tbtt_tasklet,516 tasklet_init(&dev->pre_tbtt_tasklet, mt7603_pre_tbtt_tasklet,
515 (unsigned long)dev);517 (unsigned long)dev);
drivers/net/wireless/mediatek/mt76/mt7603/mac.c+14−39
@@ -343,7 +343,7 @@ void mt7603_mac_rx_ba_reset(struct mt7603_dev *dev, void *addr, u8 tid) · 342 unmodified lines
343 MT_BA_CONTROL_1_RESET));343 MT_BA_CONTROL_1_RESET));
344}344}
345 345
346void mt7603_mac_tx_ba_reset(struct mt7603_dev *dev, int wcid, int tid, int ssn,346void mt7603_mac_tx_ba_reset(struct mt7603_dev *dev, int wcid, int tid,
347 int ba_size)347 int ba_size)
348{348{
349 u32 addr = mt7603_wtbl2_addr(wcid);349 u32 addr = mt7603_wtbl2_addr(wcid);
@@ -358,43 +358,6 @@ void mt7603_mac_tx_ba_reset(struct mt7603_dev *dev, int wcid, int tid, int ssn, · 8 unmodified lines
358 mt76_clear(dev, addr + (15 * 4), tid_mask);358 mt76_clear(dev, addr + (15 * 4), tid_mask);
359 return;359 return;
360 }360 }
361 mt76_poll(dev, MT_WTBL_UPDATE, MT_WTBL_UPDATE_BUSY, 0, 5000);
362
363 mt7603_mac_stop(dev);
364 switch (tid) {
365 case 0:
366 mt76_rmw_field(dev, addr + (2 * 4), MT_WTBL2_W2_TID0_SN, ssn);
367 break;
368 case 1:
369 mt76_rmw_field(dev, addr + (2 * 4), MT_WTBL2_W2_TID1_SN, ssn);
370 break;
371 case 2:
372 mt76_rmw_field(dev, addr + (2 * 4), MT_WTBL2_W2_TID2_SN_LO,
373 ssn);
374 mt76_rmw_field(dev, addr + (3 * 4), MT_WTBL2_W3_TID2_SN_HI,
375 ssn >> 8);
376 break;
377 case 3:
378 mt76_rmw_field(dev, addr + (3 * 4), MT_WTBL2_W3_TID3_SN, ssn);
379 break;
380 case 4:
381 mt76_rmw_field(dev, addr + (3 * 4), MT_WTBL2_W3_TID4_SN, ssn);
382 break;
383 case 5:
384 mt76_rmw_field(dev, addr + (3 * 4), MT_WTBL2_W3_TID5_SN_LO,
385 ssn);
386 mt76_rmw_field(dev, addr + (4 * 4), MT_WTBL2_W4_TID5_SN_HI,
387 ssn >> 4);
388 break;
389 case 6:
390 mt76_rmw_field(dev, addr + (4 * 4), MT_WTBL2_W4_TID6_SN, ssn);
391 break;
392 case 7:
393 mt76_rmw_field(dev, addr + (4 * 4), MT_WTBL2_W4_TID7_SN, ssn);
394 break;
395 }
396 mt7603_wtbl_update(dev, wcid, MT_WTBL_UPDATE_WTBL2);
397 mt7603_mac_start(dev);
398 361
399 for (i = 7; i > 0; i--) {362 for (i = 7; i > 0; i--) {
400 if (ba_size >= MT_AGG_SIZE_LIMIT(i))363 if (ba_size >= MT_AGG_SIZE_LIMIT(i))
@@ -827,6 +790,7 @@ mt7603_mac_write_txwi(struct mt7603_dev *dev, __le32 *txwi, · 426 unmodified lines
827 struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb);790 struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb);
828 struct ieee80211_tx_rate *rate = &info->control.rates[0];791 struct ieee80211_tx_rate *rate = &info->control.rates[0];
829 struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)skb->data;792 struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)skb->data;
793 struct ieee80211_bar *bar = (struct ieee80211_bar *)skb->data;
830 struct ieee80211_vif *vif = info->control.vif;794 struct ieee80211_vif *vif = info->control.vif;
831 struct mt7603_vif *mvif;795 struct mt7603_vif *mvif;
832 int wlan_idx;796 int wlan_idx;
@@ -834,6 +798,7 @@ mt7603_mac_write_txwi(struct mt7603_dev *dev, __le32 *txwi, · 1 unmodified line
834 int tx_count = 8;798 int tx_count = 8;
835 u8 frame_type, frame_subtype;799 u8 frame_type, frame_subtype;
836 u16 fc = le16_to_cpu(hdr->frame_control);800 u16 fc = le16_to_cpu(hdr->frame_control);
801 u16 seqno = 0;
837 u8 vif_idx = 0;802 u8 vif_idx = 0;
838 u32 val;803 u32 val;
839 u8 bw;804 u8 bw;
@@ -919,7 +884,17 @@ mt7603_mac_write_txwi(struct mt7603_dev *dev, __le32 *txwi, · 79 unmodified lines
919 tx_count = 0x1f;884 tx_count = 0x1f;
920 885
921 val = FIELD_PREP(MT_TXD3_REM_TX_COUNT, tx_count) |886 val = FIELD_PREP(MT_TXD3_REM_TX_COUNT, tx_count) |
922 FIELD_PREP(MT_TXD3_SEQ, le16_to_cpu(hdr->seq_ctrl));887 MT_TXD3_SN_VALID;
888
889 if (ieee80211_is_data_qos(hdr->frame_control))
890 seqno = le16_to_cpu(hdr->seq_ctrl);
891 else if (ieee80211_is_back_req(hdr->frame_control))
892 seqno = le16_to_cpu(bar->start_seq_num);
893 else
894 val &= ~MT_TXD3_SN_VALID;
895
896 val |= FIELD_PREP(MT_TXD3_SEQ, seqno >> 4);
897
923 txwi[3] = cpu_to_le32(val);898 txwi[3] = cpu_to_le32(val);
924 899
925 if (key) {900 if (key) {
drivers/net/wireless/mediatek/mt76/mt7603/main.c+4−4
@@ -372,7 +372,7 @@ mt7603_sta_ps(struct mt76_dev *mdev, struct ieee80211_sta *sta, bool ps) · 371 unmodified lines
372 struct mt7603_sta *msta = (struct mt7603_sta *)sta->drv_priv;372 struct mt7603_sta *msta = (struct mt7603_sta *)sta->drv_priv;
373 struct sk_buff_head list;373 struct sk_buff_head list;
374 374
375 mt76_stop_tx_queues(&dev->mt76, sta, false);375 mt76_stop_tx_queues(&dev->mt76, sta, true);
376 mt7603_wtbl_set_ps(dev, msta, ps);376 mt7603_wtbl_set_ps(dev, msta, ps);
377 if (ps)377 if (ps)
378 return;378 return;
@@ -584,13 +584,13 @@ mt7603_ampdu_action(struct ieee80211_hw *hw, struct ieee80211_vif *vif, · 205 unmodified lines
584 case IEEE80211_AMPDU_TX_OPERATIONAL:584 case IEEE80211_AMPDU_TX_OPERATIONAL:
585 mtxq->aggr = true;585 mtxq->aggr = true;
586 mtxq->send_bar = false;586 mtxq->send_bar = false;
587 mt7603_mac_tx_ba_reset(dev, msta->wcid.idx, tid, *ssn, ba_size);587 mt7603_mac_tx_ba_reset(dev, msta->wcid.idx, tid, ba_size);
588 break;588 break;
589 case IEEE80211_AMPDU_TX_STOP_FLUSH:589 case IEEE80211_AMPDU_TX_STOP_FLUSH:
590 case IEEE80211_AMPDU_TX_STOP_FLUSH_CONT:590 case IEEE80211_AMPDU_TX_STOP_FLUSH_CONT:
591 mtxq->aggr = false;591 mtxq->aggr = false;
592 ieee80211_send_bar(vif, sta->addr, tid, mtxq->agg_ssn);592 ieee80211_send_bar(vif, sta->addr, tid, mtxq->agg_ssn);
593 mt7603_mac_tx_ba_reset(dev, msta->wcid.idx, tid, *ssn, -1);593 mt7603_mac_tx_ba_reset(dev, msta->wcid.idx, tid, -1);
594 break;594 break;
595 case IEEE80211_AMPDU_TX_START:595 case IEEE80211_AMPDU_TX_START:
596 mtxq->agg_ssn = *ssn << 4;596 mtxq->agg_ssn = *ssn << 4;
@@ -598,7 +598,7 @@ mt7603_ampdu_action(struct ieee80211_hw *hw, struct ieee80211_vif *vif, · 1 unmodified line
598 break;598 break;
599 case IEEE80211_AMPDU_TX_STOP_CONT:599 case IEEE80211_AMPDU_TX_STOP_CONT:
600 mtxq->aggr = false;600 mtxq->aggr = false;
601 mt7603_mac_tx_ba_reset(dev, msta->wcid.idx, tid, *ssn, -1);601 mt7603_mac_tx_ba_reset(dev, msta->wcid.idx, tid, -1);
602 ieee80211_stop_tx_ba_cb_irqsafe(vif, sta->addr, tid);602 ieee80211_stop_tx_ba_cb_irqsafe(vif, sta->addr, tid);
603 break;603 break;
604 }604 }
drivers/net/wireless/mediatek/mt76/mt7603/mt7603.h+1−1
@@ -200,7 +200,7 @@ void mt7603_beacon_set_timer(struct mt7603_dev *dev, int idx, int intval); · 199 unmodified lines
200int mt7603_mac_fill_rx(struct mt7603_dev *dev, struct sk_buff *skb);200int mt7603_mac_fill_rx(struct mt7603_dev *dev, struct sk_buff *skb);
201void mt7603_mac_add_txs(struct mt7603_dev *dev, void *data);201void mt7603_mac_add_txs(struct mt7603_dev *dev, void *data);
202void mt7603_mac_rx_ba_reset(struct mt7603_dev *dev, void *addr, u8 tid);202void mt7603_mac_rx_ba_reset(struct mt7603_dev *dev, void *addr, u8 tid);
203void mt7603_mac_tx_ba_reset(struct mt7603_dev *dev, int wcid, int tid, int ssn,203void mt7603_mac_tx_ba_reset(struct mt7603_dev *dev, int wcid, int tid,
204 int ba_size);204 int ba_size);
205 205
206void mt7603_pse_client_reset(struct mt7603_dev *dev);206void mt7603_pse_client_reset(struct mt7603_dev *dev);
drivers/net/wireless/mediatek/mt76/mt76x02_mac.c+8−6
@@ -466,7 +466,6 @@ void mt76x02_send_tx_status(struct mt76x02_dev *dev, · 465 unmodified lines
466 return;466 return;
467 467
468 rcu_read_lock();468 rcu_read_lock();
469 mt76_tx_status_lock(mdev, &list);
470 469
471 if (stat->wcid < ARRAY_SIZE(dev->mt76.wcid))470 if (stat->wcid < ARRAY_SIZE(dev->mt76.wcid))
472 wcid = rcu_dereference(dev->mt76.wcid[stat->wcid]);471 wcid = rcu_dereference(dev->mt76.wcid[stat->wcid]);
@@ -479,6 +478,8 @@ void mt76x02_send_tx_status(struct mt76x02_dev *dev, · 6 unmodified lines
479 drv_priv);478 drv_priv);
480 }479 }
481 480
481 mt76_tx_status_lock(mdev, &list);
482
482 if (wcid) {483 if (wcid) {
483 if (stat->pktid >= MT_PACKET_ID_FIRST)484 if (stat->pktid >= MT_PACKET_ID_FIRST)
484 status.skb = mt76_tx_status_skb_get(mdev, wcid,485 status.skb = mt76_tx_status_skb_get(mdev, wcid,
@@ -498,7 +499,9 @@ void mt76x02_send_tx_status(struct mt76x02_dev *dev, · 13 unmodified lines
498 if (*update == 0 && stat_val == stat_cache &&499 if (*update == 0 && stat_val == stat_cache &&
499 stat->wcid == msta->status.wcid && msta->n_frames < 32) {500 stat->wcid == msta->status.wcid && msta->n_frames < 32) {
500 msta->n_frames++;501 msta->n_frames++;
501 goto out;502 mt76_tx_status_unlock(mdev, &list);
503 rcu_read_unlock();
504 return;
502 }505 }
503 506
504 mt76x02_mac_fill_tx_status(dev, status.info, &msta->status,507 mt76x02_mac_fill_tx_status(dev, status.info, &msta->status,
@@ -514,11 +517,10 @@ void mt76x02_send_tx_status(struct mt76x02_dev *dev, · 9 unmodified lines
514 517
515 if (status.skb)518 if (status.skb)
516 mt76_tx_status_skb_done(mdev, status.skb, &list);519 mt76_tx_status_skb_done(mdev, status.skb, &list);
517 else
518 ieee80211_tx_status_ext(mt76_hw(dev), &status);
519
520out:
521 mt76_tx_status_unlock(mdev, &list);520 mt76_tx_status_unlock(mdev, &list);
521
522 if (!status.skb)
523 ieee80211_tx_status_ext(mt76_hw(dev), &status);
522 rcu_read_unlock();524 rcu_read_unlock();
523}525}
524 526
drivers/net/wireless/ralink/rt2x00/rt2x00.h+0−1
@@ -673,7 +673,6 @@ enum rt2x00_state_flags { · 672 unmodified lines
673 CONFIG_CHANNEL_HT40,673 CONFIG_CHANNEL_HT40,
674 CONFIG_POWERSAVING,674 CONFIG_POWERSAVING,
675 CONFIG_HT_DISABLED,675 CONFIG_HT_DISABLED,
676 CONFIG_QOS_DISABLED,
677 CONFIG_MONITORING,676 CONFIG_MONITORING,
678 677
679 /*678 /*
drivers/net/wireless/ralink/rt2x00/rt2x00mac.c+0−10
@@ -642,18 +642,8 @@ void rt2x00mac_bss_info_changed(struct ieee80211_hw *hw, · 641 unmodified lines
642 rt2x00dev->intf_associated--;642 rt2x00dev->intf_associated--;
643 643
644 rt2x00leds_led_assoc(rt2x00dev, !!rt2x00dev->intf_associated);644 rt2x00leds_led_assoc(rt2x00dev, !!rt2x00dev->intf_associated);
645
646 clear_bit(CONFIG_QOS_DISABLED, &rt2x00dev->flags);
647 }645 }
648 646
649 /*
650 * Check for access point which do not support 802.11e . We have to
651 * generate data frames sequence number in S/W for such AP, because
652 * of H/W bug.
653 */
654 if (changes & BSS_CHANGED_QOS && !bss_conf->qos)
655 set_bit(CONFIG_QOS_DISABLED, &rt2x00dev->flags);
656
657 /*647 /*
658 * When the erp information has changed, we should perform648 * When the erp information has changed, we should perform
659 * additional configuration steps. For all other changes we are done.649 * additional configuration steps. For all other changes we are done.
drivers/net/wireless/ralink/rt2x00/rt2x00queue.c+9−6
@@ -201,15 +201,18 @@ static void rt2x00queue_create_tx_descriptor_seq(struct rt2x00_dev *rt2x00dev, · 200 unmodified lines
201 if (!rt2x00_has_cap_flag(rt2x00dev, REQUIRE_SW_SEQNO)) {201 if (!rt2x00_has_cap_flag(rt2x00dev, REQUIRE_SW_SEQNO)) {
202 /*202 /*
203 * rt2800 has a H/W (or F/W) bug, device incorrectly increase203 * rt2800 has a H/W (or F/W) bug, device incorrectly increase
204 * seqno on retransmited data (non-QOS) frames. To workaround204 * seqno on retransmitted data (non-QOS) and management frames.
205 * the problem let's generate seqno in software if QOS is205 * To workaround the problem let's generate seqno in software.
206 * disabled.206 * Except for beacons which are transmitted periodically by H/W
207 * hence hardware has to assign seqno for them.
207 */208 */
208 if (test_bit(CONFIG_QOS_DISABLED, &rt2x00dev->flags))209 if (ieee80211_is_beacon(hdr->frame_control)) {
209 __clear_bit(ENTRY_TXD_GENERATE_SEQ, &txdesc->flags);210 __set_bit(ENTRY_TXD_GENERATE_SEQ, &txdesc->flags);
210 else
211 /* H/W will generate sequence number */211 /* H/W will generate sequence number */
212 return;212 return;
213 }
214
215 __clear_bit(ENTRY_TXD_GENERATE_SEQ, &txdesc->flags);
213 }216 }
214 217
215 /*218 /*
drivers/nvdimm/btt_devs.c+13−5
@@ -198,14 +198,15 @@ static struct device *__nd_btt_create(struct nd_region *nd_region, · 197 unmodified lines
198 return NULL;198 return NULL;
199 199
200 nd_btt->id = ida_simple_get(&nd_region->btt_ida, 0, 0, GFP_KERNEL);200 nd_btt->id = ida_simple_get(&nd_region->btt_ida, 0, 0, GFP_KERNEL);
201 if (nd_btt->id < 0) {201 if (nd_btt->id < 0)
202 kfree(nd_btt);202 goto out_nd_btt;
203 return NULL;
204 }
205 203
206 nd_btt->lbasize = lbasize;204 nd_btt->lbasize = lbasize;
207 if (uuid)205 if (uuid) {
208 uuid = kmemdup(uuid, 16, GFP_KERNEL);206 uuid = kmemdup(uuid, 16, GFP_KERNEL);
207 if (!uuid)
208 goto out_put_id;
209 }
209 nd_btt->uuid = uuid;210 nd_btt->uuid = uuid;
210 dev = &nd_btt->dev;211 dev = &nd_btt->dev;
211 dev_set_name(dev, "btt%d.%d", nd_region->id, nd_btt->id);212 dev_set_name(dev, "btt%d.%d", nd_region->id, nd_btt->id);
@@ -220,6 +221,13 @@ static struct device *__nd_btt_create(struct nd_region *nd_region, · 8 unmodified lines
220 return NULL;221 return NULL;
221 }222 }
222 return dev;223 return dev;
224
225out_put_id:
226 ida_simple_remove(&nd_region->btt_ida, nd_btt->id);
227
228out_nd_btt:
229 kfree(nd_btt);
230 return NULL;
223}231}
224 232
225struct device *nd_btt_create(struct nd_region *nd_region)233struct device *nd_btt_create(struct nd_region *nd_region)
drivers/nvdimm/namespace_devs.c+4−1
@@ -2249,9 +2249,12 @@ static struct device *create_namespace_blk(struct nd_region *nd_region, · 2248 unmodified lines
2249 if (!nsblk->uuid)2249 if (!nsblk->uuid)
2250 goto blk_err;2250 goto blk_err;
2251 memcpy(name, nd_label->name, NSLABEL_NAME_LEN);2251 memcpy(name, nd_label->name, NSLABEL_NAME_LEN);
2252 if (name[0])2252 if (name[0]) {
2253 nsblk->alt_name = kmemdup(name, NSLABEL_NAME_LEN,2253 nsblk->alt_name = kmemdup(name, NSLABEL_NAME_LEN,
2254 GFP_KERNEL);2254 GFP_KERNEL);
2255 if (!nsblk->alt_name)
2256 goto blk_err;
2257 }
2255 res = nsblk_add_resource(nd_region, ndd, nsblk,2258 res = nsblk_add_resource(nd_region, ndd, nsblk,
2256 __le64_to_cpu(nd_label->dpa));2259 __le64_to_cpu(nd_label->dpa));
2257 if (!res)2260 if (!res)
drivers/nvdimm/pmem.c+4−4
@@ -113,13 +113,13 @@ static void write_pmem(void *pmem_addr, struct page *page, · 112 unmodified lines
113 113
114 while (len) {114 while (len) {
115 mem = kmap_atomic(page);115 mem = kmap_atomic(page);
116 chunk = min_t(unsigned int, len, PAGE_SIZE);116 chunk = min_t(unsigned int, len, PAGE_SIZE - off);
117 memcpy_flushcache(pmem_addr, mem + off, chunk);117 memcpy_flushcache(pmem_addr, mem + off, chunk);
118 kunmap_atomic(mem);118 kunmap_atomic(mem);
119 len -= chunk;119 len -= chunk;
120 off = 0;120 off = 0;
121 page++;121 page++;
122 pmem_addr += PAGE_SIZE;122 pmem_addr += chunk;
123 }123 }
124}124}
125 125
@@ -132,7 +132,7 @@ static blk_status_t read_pmem(struct page *page, unsigned int off, · 6 unmodified lines
132 132
133 while (len) {133 while (len) {
134 mem = kmap_atomic(page);134 mem = kmap_atomic(page);
135 chunk = min_t(unsigned int, len, PAGE_SIZE);135 chunk = min_t(unsigned int, len, PAGE_SIZE - off);
136 rem = memcpy_mcsafe(mem + off, pmem_addr, chunk);136 rem = memcpy_mcsafe(mem + off, pmem_addr, chunk);
137 kunmap_atomic(mem);137 kunmap_atomic(mem);
138 if (rem)138 if (rem)
@@ -140,7 +140,7 @@ static blk_status_t read_pmem(struct page *page, unsigned int off, · 1 unmodified line
140 len -= chunk;140 len -= chunk;
141 off = 0;141 off = 0;
142 page++;142 page++;
143 pmem_addr += PAGE_SIZE;143 pmem_addr += chunk;
144 }144 }
145 return BLK_STS_OK;145 return BLK_STS_OK;
146}146}
drivers/nvdimm/security.c+73−45
@@ -22,6 +22,8 @@ static bool key_revalidate = true; · 21 unmodified lines
22module_param(key_revalidate, bool, 0444);22module_param(key_revalidate, bool, 0444);
23MODULE_PARM_DESC(key_revalidate, "Require key validation at init.");23MODULE_PARM_DESC(key_revalidate, "Require key validation at init.");
24 24
25static const char zero_key[NVDIMM_PASSPHRASE_LEN];
26
25static void *key_data(struct key *key)27static void *key_data(struct key *key)
26{28{
27 struct encrypted_key_payload *epayload = dereference_key_locked(key);29 struct encrypted_key_payload *epayload = dereference_key_locked(key);
@@ -75,6 +77,16 @@ static struct key *nvdimm_request_key(struct nvdimm *nvdimm) · 47 unmodified lines
75 return key;77 return key;
76}78}
77 79
80static const void *nvdimm_get_key_payload(struct nvdimm *nvdimm,
81 struct key **key)
82{
83 *key = nvdimm_request_key(nvdimm);
84 if (!*key)
85 return zero_key;
86
87 return key_data(*key);
88}
89
78static struct key *nvdimm_lookup_user_key(struct nvdimm *nvdimm,90static struct key *nvdimm_lookup_user_key(struct nvdimm *nvdimm,
79 key_serial_t id, int subclass)91 key_serial_t id, int subclass)
80{92{
@@ -105,36 +117,57 @@ static struct key *nvdimm_lookup_user_key(struct nvdimm *nvdimm, · 24 unmodified lines
105 return key;117 return key;
106}118}
107 119
108static struct key *nvdimm_key_revalidate(struct nvdimm *nvdimm)120static const void *nvdimm_get_user_key_payload(struct nvdimm *nvdimm,
121 key_serial_t id, int subclass, struct key **key)
122{
123 *key = NULL;
124 if (id == 0) {
125 if (subclass == NVDIMM_BASE_KEY)
126 return zero_key;
127 else
128 return NULL;
129 }
130
131 *key = nvdimm_lookup_user_key(nvdimm, id, subclass);
132 if (!*key)
133 return NULL;
134
135 return key_data(*key);
136}
137
138
139static int nvdimm_key_revalidate(struct nvdimm *nvdimm)
109{140{
110 struct key *key;141 struct key *key;
111 int rc;142 int rc;
143 const void *data;
112 144
113 if (!nvdimm->sec.ops->change_key)145 if (!nvdimm->sec.ops->change_key)
114 return NULL;146 return -EOPNOTSUPP;
115 147
116 key = nvdimm_request_key(nvdimm);148 data = nvdimm_get_key_payload(nvdimm, &key);
117 if (!key)
118 return NULL;
119 149
120 /*150 /*
121 * Send the same key to the hardware as new and old key to151 * Send the same key to the hardware as new and old key to
122 * verify that the key is good.152 * verify that the key is good.
123 */153 */
124 rc = nvdimm->sec.ops->change_key(nvdimm, key_data(key),154 rc = nvdimm->sec.ops->change_key(nvdimm, data, data, NVDIMM_USER);
125 key_data(key), NVDIMM_USER);
126 if (rc < 0) {155 if (rc < 0) {
127 nvdimm_put_key(key);156 nvdimm_put_key(key);
128 key = NULL;157 return rc;
129 }158 }
130 return key;159
160 nvdimm_put_key(key);
161 nvdimm->sec.state = nvdimm_security_state(nvdimm, NVDIMM_USER);
162 return 0;
131}163}
132 164
133static int __nvdimm_security_unlock(struct nvdimm *nvdimm)165static int __nvdimm_security_unlock(struct nvdimm *nvdimm)
134{166{
135 struct device *dev = &nvdimm->dev;167 struct device *dev = &nvdimm->dev;
136 struct nvdimm_bus *nvdimm_bus = walk_to_nvdimm_bus(dev);168 struct nvdimm_bus *nvdimm_bus = walk_to_nvdimm_bus(dev);
137 struct key *key = NULL;169 struct key *key;
170 const void *data;
138 int rc;171 int rc;
139 172
140 /* The bus lock should be held at the top level of the call stack */173 /* The bus lock should be held at the top level of the call stack */
@@ -160,16 +193,11 @@ static int __nvdimm_security_unlock(struct nvdimm *nvdimm) · 19 unmodified lines
160 if (!key_revalidate)193 if (!key_revalidate)
161 return 0;194 return 0;
162 195
163 key = nvdimm_key_revalidate(nvdimm);196 return nvdimm_key_revalidate(nvdimm);
164 if (!key)
165 return nvdimm_security_freeze(nvdimm);
166 } else197 } else
167 key = nvdimm_request_key(nvdimm);198 data = nvdimm_get_key_payload(nvdimm, &key);
168 199
169 if (!key)200 rc = nvdimm->sec.ops->unlock(nvdimm, data);
170 return -ENOKEY;
171
172 rc = nvdimm->sec.ops->unlock(nvdimm, key_data(key));
173 dev_dbg(dev, "key: %d unlock: %s\n", key_serial(key),201 dev_dbg(dev, "key: %d unlock: %s\n", key_serial(key),
174 rc == 0 ? "success" : "fail");202 rc == 0 ? "success" : "fail");
175 203
@@ -195,6 +223,7 @@ int nvdimm_security_disable(struct nvdimm *nvdimm, unsigned int keyid) · 19 unmodified lines
195 struct nvdimm_bus *nvdimm_bus = walk_to_nvdimm_bus(dev);223 struct nvdimm_bus *nvdimm_bus = walk_to_nvdimm_bus(dev);
196 struct key *key;224 struct key *key;
197 int rc;225 int rc;
226 const void *data;
198 227
199 /* The bus lock should be held at the top level of the call stack */228 /* The bus lock should be held at the top level of the call stack */
200 lockdep_assert_held(&nvdimm_bus->reconfig_mutex);229 lockdep_assert_held(&nvdimm_bus->reconfig_mutex);
@@ -214,11 +243,12 @@ int nvdimm_security_disable(struct nvdimm *nvdimm, unsigned int keyid) · 13 unmodified lines
214 return -EBUSY;243 return -EBUSY;
215 }244 }
216 245
217 key = nvdimm_lookup_user_key(nvdimm, keyid, NVDIMM_BASE_KEY);246 data = nvdimm_get_user_key_payload(nvdimm, keyid,
218 if (!key)247 NVDIMM_BASE_KEY, &key);
248 if (!data)
219 return -ENOKEY;249 return -ENOKEY;
220 250
221 rc = nvdimm->sec.ops->disable(nvdimm, key_data(key));251 rc = nvdimm->sec.ops->disable(nvdimm, data);
222 dev_dbg(dev, "key: %d disable: %s\n", key_serial(key),252 dev_dbg(dev, "key: %d disable: %s\n", key_serial(key),
223 rc == 0 ? "success" : "fail");253 rc == 0 ? "success" : "fail");
224 254
@@ -235,6 +265,7 @@ int nvdimm_security_update(struct nvdimm *nvdimm, unsigned int keyid, · 10 unmodified lines
235 struct nvdimm_bus *nvdimm_bus = walk_to_nvdimm_bus(dev);265 struct nvdimm_bus *nvdimm_bus = walk_to_nvdimm_bus(dev);
236 struct key *key, *newkey;266 struct key *key, *newkey;
237 int rc;267 int rc;
268 const void *data, *newdata;
238 269
239 /* The bus lock should be held at the top level of the call stack */270 /* The bus lock should be held at the top level of the call stack */
240 lockdep_assert_held(&nvdimm_bus->reconfig_mutex);271 lockdep_assert_held(&nvdimm_bus->reconfig_mutex);
@@ -249,22 +280,19 @@ int nvdimm_security_update(struct nvdimm *nvdimm, unsigned int keyid, · 8 unmodified lines
249 return -EIO;280 return -EIO;
250 }281 }
251 282
252 if (keyid == 0)283 data = nvdimm_get_user_key_payload(nvdimm, keyid,
253 key = NULL;284 NVDIMM_BASE_KEY, &key);
254 else {285 if (!data)
255 key = nvdimm_lookup_user_key(nvdimm, keyid, NVDIMM_BASE_KEY);286 return -ENOKEY;
256 if (!key)
257 return -ENOKEY;
258 }
259 287
260 newkey = nvdimm_lookup_user_key(nvdimm, new_keyid, NVDIMM_NEW_KEY);288 newdata = nvdimm_get_user_key_payload(nvdimm, new_keyid,
261 if (!newkey) {289 NVDIMM_NEW_KEY, &newkey);
290 if (!newdata) {
262 nvdimm_put_key(key);291 nvdimm_put_key(key);
263 return -ENOKEY;292 return -ENOKEY;
264 }293 }
265 294
266 rc = nvdimm->sec.ops->change_key(nvdimm, key ? key_data(key) : NULL,295 rc = nvdimm->sec.ops->change_key(nvdimm, data, newdata, pass_type);
267 key_data(newkey), pass_type);
268 dev_dbg(dev, "key: %d %d update%s: %s\n",296 dev_dbg(dev, "key: %d %d update%s: %s\n",
269 key_serial(key), key_serial(newkey),297 key_serial(key), key_serial(newkey),
270 pass_type == NVDIMM_MASTER ? "(master)" : "(user)",298 pass_type == NVDIMM_MASTER ? "(master)" : "(user)",
@@ -286,8 +314,9 @@ int nvdimm_security_erase(struct nvdimm *nvdimm, unsigned int keyid, · 15 unmodified lines
286{314{
287 struct device *dev = &nvdimm->dev;315 struct device *dev = &nvdimm->dev;
288 struct nvdimm_bus *nvdimm_bus = walk_to_nvdimm_bus(dev);316 struct nvdimm_bus *nvdimm_bus = walk_to_nvdimm_bus(dev);
289 struct key *key;317 struct key *key = NULL;
290 int rc;318 int rc;
319 const void *data;
291 320
292 /* The bus lock should be held at the top level of the call stack */321 /* The bus lock should be held at the top level of the call stack */
293 lockdep_assert_held(&nvdimm_bus->reconfig_mutex);322 lockdep_assert_held(&nvdimm_bus->reconfig_mutex);
@@ -319,11 +348,12 @@ int nvdimm_security_erase(struct nvdimm *nvdimm, unsigned int keyid, · 25 unmodified lines
319 return -EOPNOTSUPP;348 return -EOPNOTSUPP;
320 }349 }
321 350
322 key = nvdimm_lookup_user_key(nvdimm, keyid, NVDIMM_BASE_KEY);351 data = nvdimm_get_user_key_payload(nvdimm, keyid,
323 if (!key)352 NVDIMM_BASE_KEY, &key);
353 if (!data)
324 return -ENOKEY;354 return -ENOKEY;
325 355
326 rc = nvdimm->sec.ops->erase(nvdimm, key_data(key), pass_type);356 rc = nvdimm->sec.ops->erase(nvdimm, data, pass_type);
327 dev_dbg(dev, "key: %d erase%s: %s\n", key_serial(key),357 dev_dbg(dev, "key: %d erase%s: %s\n", key_serial(key),
328 pass_type == NVDIMM_MASTER ? "(master)" : "(user)",358 pass_type == NVDIMM_MASTER ? "(master)" : "(user)",
329 rc == 0 ? "success" : "fail");359 rc == 0 ? "success" : "fail");
@@ -337,8 +367,9 @@ int nvdimm_security_overwrite(struct nvdimm *nvdimm, unsigned int keyid) · 7 unmodified lines
337{367{
338 struct device *dev = &nvdimm->dev;368 struct device *dev = &nvdimm->dev;
339 struct nvdimm_bus *nvdimm_bus = walk_to_nvdimm_bus(dev);369 struct nvdimm_bus *nvdimm_bus = walk_to_nvdimm_bus(dev);
340 struct key *key;370 struct key *key = NULL;
341 int rc;371 int rc;
372 const void *data;
342 373
343 /* The bus lock should be held at the top level of the call stack */374 /* The bus lock should be held at the top level of the call stack */
344 lockdep_assert_held(&nvdimm_bus->reconfig_mutex);375 lockdep_assert_held(&nvdimm_bus->reconfig_mutex);
@@ -368,15 +399,12 @@ int nvdimm_security_overwrite(struct nvdimm *nvdimm, unsigned int keyid) · 23 unmodified lines
368 return -EBUSY;399 return -EBUSY;
369 }400 }
370 401
371 if (keyid == 0)402 data = nvdimm_get_user_key_payload(nvdimm, keyid,
372 key = NULL;403 NVDIMM_BASE_KEY, &key);
373 else {404 if (!data)
374 key = nvdimm_lookup_user_key(nvdimm, keyid, NVDIMM_BASE_KEY);405 return -ENOKEY;
375 if (!key)
376 return -ENOKEY;
377 }
378 406
379 rc = nvdimm->sec.ops->overwrite(nvdimm, key ? key_data(key) : NULL);407 rc = nvdimm->sec.ops->overwrite(nvdimm, data);
380 dev_dbg(dev, "key: %d overwrite submission: %s\n", key_serial(key),408 dev_dbg(dev, "key: %d overwrite submission: %s\n", key_serial(key),
381 rc == 0 ? "success" : "fail");409 rc == 0 ? "success" : "fail");
382 410
drivers/nvme/host/core.c+1−1
@@ -288,7 +288,7 @@ bool nvme_cancel_request(struct request *req, void *data, bool reserved) · 287 unmodified lines
288 "Cancelling I/O %d", req->tag);288 "Cancelling I/O %d", req->tag);
289 289
290 nvme_req(req)->status = NVME_SC_ABORT_REQ;290 nvme_req(req)->status = NVME_SC_ABORT_REQ;
291 blk_mq_complete_request(req);291 blk_mq_complete_request_sync(req);
292 return true;292 return true;
293}293}
294EXPORT_SYMBOL_GPL(nvme_cancel_request);294EXPORT_SYMBOL_GPL(nvme_cancel_request);
drivers/nvme/host/fc.c+15−5
@@ -1845,7 +1845,7 @@ nvme_fc_init_queue(struct nvme_fc_ctrl *ctrl, int idx) · 1844 unmodified lines
1845 memset(queue, 0, sizeof(*queue));1845 memset(queue, 0, sizeof(*queue));
1846 queue->ctrl = ctrl;1846 queue->ctrl = ctrl;
1847 queue->qnum = idx;1847 queue->qnum = idx;
1848 atomic_set(&queue->csn, 1);1848 atomic_set(&queue->csn, 0);
1849 queue->dev = ctrl->dev;1849 queue->dev = ctrl->dev;
1850 1850
1851 if (idx > 0)1851 if (idx > 0)
@@ -1887,7 +1887,7 @@ nvme_fc_free_queue(struct nvme_fc_queue *queue) · 35 unmodified lines
1887 */1887 */
1888 1888
1889 queue->connection_id = 0;1889 queue->connection_id = 0;
1890 atomic_set(&queue->csn, 1);1890 atomic_set(&queue->csn, 0);
1891}1891}
1892 1892
1893static void1893static void
@@ -2183,7 +2183,6 @@ nvme_fc_start_fcp_op(struct nvme_fc_ctrl *ctrl, struct nvme_fc_queue *queue, · 289 unmodified lines
2183{2183{
2184 struct nvme_fc_cmd_iu *cmdiu = &op->cmd_iu;2184 struct nvme_fc_cmd_iu *cmdiu = &op->cmd_iu;
2185 struct nvme_command *sqe = &cmdiu->sqe;2185 struct nvme_command *sqe = &cmdiu->sqe;
2186 u32 csn;
2187 int ret, opstate;2186 int ret, opstate;
2188 2187
2189 /*2188 /*
@@ -2198,8 +2197,6 @@ nvme_fc_start_fcp_op(struct nvme_fc_ctrl *ctrl, struct nvme_fc_queue *queue, · 8 unmodified lines
2198 2197
2199 /* format the FC-NVME CMD IU and fcp_req */2198 /* format the FC-NVME CMD IU and fcp_req */
2200 cmdiu->connection_id = cpu_to_be64(queue->connection_id);2199 cmdiu->connection_id = cpu_to_be64(queue->connection_id);
2201 csn = atomic_inc_return(&queue->csn);
2202 cmdiu->csn = cpu_to_be32(csn);
2203 cmdiu->data_len = cpu_to_be32(data_len);2200 cmdiu->data_len = cpu_to_be32(data_len);
2204 switch (io_dir) {2201 switch (io_dir) {
2205 case NVMEFC_FCP_WRITE:2202 case NVMEFC_FCP_WRITE:
@@ -2257,11 +2254,24 @@ nvme_fc_start_fcp_op(struct nvme_fc_ctrl *ctrl, struct nvme_fc_queue *queue, · 51 unmodified lines
2257 if (!(op->flags & FCOP_FLAGS_AEN))2254 if (!(op->flags & FCOP_FLAGS_AEN))
2258 blk_mq_start_request(op->rq);2255 blk_mq_start_request(op->rq);
2259 2256
2257 cmdiu->csn = cpu_to_be32(atomic_inc_return(&queue->csn));
2260 ret = ctrl->lport->ops->fcp_io(&ctrl->lport->localport,2258 ret = ctrl->lport->ops->fcp_io(&ctrl->lport->localport,
2261 &ctrl->rport->remoteport,2259 &ctrl->rport->remoteport,
2262 queue->lldd_handle, &op->fcp_req);2260 queue->lldd_handle, &op->fcp_req);
2263 2261
2264 if (ret) {2262 if (ret) {
2263 /*
2264 * If the lld fails to send the command is there an issue with
2265 * the csn value? If the command that fails is the Connect,
2266 * no - as the connection won't be live. If it is a command
2267 * post-connect, it's possible a gap in csn may be created.
2268 * Does this matter? As Linux initiators don't send fused
2269 * commands, no. The gap would exist, but as there's nothing
2270 * that depends on csn order to be delivered on the target
2271 * side, it shouldn't hurt. It would be difficult for a
2272 * target to even detect the csn gap as it has no idea when the
2273 * cmd with the csn was supposed to arrive.
2274 */
2265 opstate = atomic_xchg(&op->state, FCPOP_STATE_COMPLETE);2275 opstate = atomic_xchg(&op->state, FCPOP_STATE_COMPLETE);
2266 __nvme_fc_fcpop_chk_teardowns(ctrl, op, opstate);2276 __nvme_fc_fcpop_chk_teardowns(ctrl, op, opstate);
2267 2277
drivers/nvme/target/admin-cmd.c+5−0
@@ -24,6 +24,11 @@ u32 nvmet_get_log_page_len(struct nvme_command *cmd) · 23 unmodified lines
24 return len;24 return len;
25}25}
26 26
27u64 nvmet_get_log_page_offset(struct nvme_command *cmd)
28{
29 return le64_to_cpu(cmd->get_log_page.lpo);
30}
31
27static void nvmet_execute_get_log_page_noop(struct nvmet_req *req)32static void nvmet_execute_get_log_page_noop(struct nvmet_req *req)
28{33{
29 nvmet_req_complete(req, nvmet_zero_sgl(req, 0, req->data_len));34 nvmet_req_complete(req, nvmet_zero_sgl(req, 0, req->data_len));
drivers/nvme/target/discovery.c+45−23
@@ -131,54 +131,76 @@ static void nvmet_set_disc_traddr(struct nvmet_req *req, struct nvmet_port *port · 130 unmodified lines
131 memcpy(traddr, port->disc_addr.traddr, NVMF_TRADDR_SIZE);131 memcpy(traddr, port->disc_addr.traddr, NVMF_TRADDR_SIZE);
132}132}
133 133
134static size_t discovery_log_entries(struct nvmet_req *req)
135{
136 struct nvmet_ctrl *ctrl = req->sq->ctrl;
137 struct nvmet_subsys_link *p;
138 struct nvmet_port *r;
139 size_t entries = 0;
140
141 list_for_each_entry(p, &req->port->subsystems, entry) {
142 if (!nvmet_host_allowed(p->subsys, ctrl->hostnqn))
143 continue;
144 entries++;
145 }
146 list_for_each_entry(r, &req->port->referrals, entry)
147 entries++;
148 return entries;
149}
150
134static void nvmet_execute_get_disc_log_page(struct nvmet_req *req)151static void nvmet_execute_get_disc_log_page(struct nvmet_req *req)
135{152{
136 const int entry_size = sizeof(struct nvmf_disc_rsp_page_entry);153 const int entry_size = sizeof(struct nvmf_disc_rsp_page_entry);
137 struct nvmet_ctrl *ctrl = req->sq->ctrl;154 struct nvmet_ctrl *ctrl = req->sq->ctrl;
138 struct nvmf_disc_rsp_page_hdr *hdr;155 struct nvmf_disc_rsp_page_hdr *hdr;
156 u64 offset = nvmet_get_log_page_offset(req->cmd);
139 size_t data_len = nvmet_get_log_page_len(req->cmd);157 size_t data_len = nvmet_get_log_page_len(req->cmd);
140 size_t alloc_len = max(data_len, sizeof(*hdr));158 size_t alloc_len;
141 int residual_len = data_len - sizeof(*hdr);
142 struct nvmet_subsys_link *p;159 struct nvmet_subsys_link *p;
143 struct nvmet_port *r;160 struct nvmet_port *r;
144 u32 numrec = 0;161 u32 numrec = 0;
145 u16 status = 0;162 u16 status = 0;
163 void *buffer;
164
165 /* Spec requires dword aligned offsets */
166 if (offset & 0x3) {
167 status = NVME_SC_INVALID_FIELD | NVME_SC_DNR;
168 goto out;
169 }
146 170
147 /*171 /*
148 * Make sure we're passing at least a buffer of response header size.172 * Make sure we're passing at least a buffer of response header size.
149 * If host provided data len is less than the header size, only the173 * If host provided data len is less than the header size, only the
150 * number of bytes requested by host will be sent to host.174 * number of bytes requested by host will be sent to host.
151 */175 */
152 hdr = kzalloc(alloc_len, GFP_KERNEL);176 down_read(&nvmet_config_sem);
153 if (!hdr) {177 alloc_len = sizeof(*hdr) + entry_size * discovery_log_entries(req);
178 buffer = kzalloc(alloc_len, GFP_KERNEL);
179 if (!buffer) {
180 up_read(&nvmet_config_sem);
154 status = NVME_SC_INTERNAL;181 status = NVME_SC_INTERNAL;
155 goto out;182 goto out;
156 }183 }
157 184
158 down_read(&nvmet_config_sem);185 hdr = buffer;
159 list_for_each_entry(p, &req->port->subsystems, entry) {186 list_for_each_entry(p, &req->port->subsystems, entry) {
187 char traddr[NVMF_TRADDR_SIZE];
188
160 if (!nvmet_host_allowed(p->subsys, ctrl->hostnqn))189 if (!nvmet_host_allowed(p->subsys, ctrl->hostnqn))
161 continue;190 continue;
162 if (residual_len >= entry_size) {191
163 char traddr[NVMF_TRADDR_SIZE];192 nvmet_set_disc_traddr(req, req->port, traddr);
164 193 nvmet_format_discovery_entry(hdr, req->port,
165 nvmet_set_disc_traddr(req, req->port, traddr);194 p->subsys->subsysnqn, traddr,
166 nvmet_format_discovery_entry(hdr, req->port,195 NVME_NQN_NVME, numrec);
167 p->subsys->subsysnqn, traddr,
168 NVME_NQN_NVME, numrec);
169 residual_len -= entry_size;
170 }
171 numrec++;196 numrec++;
172 }197 }
173 198
174 list_for_each_entry(r, &req->port->referrals, entry) {199 list_for_each_entry(r, &req->port->referrals, entry) {
175 if (residual_len >= entry_size) {200 nvmet_format_discovery_entry(hdr, r,
176 nvmet_format_discovery_entry(hdr, r,201 NVME_DISC_SUBSYS_NAME,
177 NVME_DISC_SUBSYS_NAME,202 r->disc_addr.traddr,
178 r->disc_addr.traddr,203 NVME_NQN_DISC, numrec);
179 NVME_NQN_DISC, numrec);
180 residual_len -= entry_size;
181 }
182 numrec++;204 numrec++;
183 }205 }
184 206
@@ -190,8 +212,8 @@ static void nvmet_execute_get_disc_log_page(struct nvmet_req *req) · 5 unmodified lines
190 212
191 up_read(&nvmet_config_sem);213 up_read(&nvmet_config_sem);
192 214
193 status = nvmet_copy_to_sgl(req, 0, hdr, data_len);215 status = nvmet_copy_to_sgl(req, 0, buffer + offset, data_len);
194 kfree(hdr);216 kfree(buffer);
195out:217out:
196 nvmet_req_complete(req, status);218 nvmet_req_complete(req, status);
197}219}
drivers/nvme/target/nvmet.h+1−0
@@ -428,6 +428,7 @@ u16 nvmet_copy_from_sgl(struct nvmet_req *req, off_t off, void *buf, · 427 unmodified lines
428u16 nvmet_zero_sgl(struct nvmet_req *req, off_t off, size_t len);428u16 nvmet_zero_sgl(struct nvmet_req *req, off_t off, size_t len);
429 429
430u32 nvmet_get_log_page_len(struct nvme_command *cmd);430u32 nvmet_get_log_page_len(struct nvme_command *cmd);
431u64 nvmet_get_log_page_offset(struct nvme_command *cmd);
431 432
432extern struct list_head *nvmet_ports;433extern struct list_head *nvmet_ports;
433void nvmet_port_disc_changed(struct nvmet_port *port,434void nvmet_port_disc_changed(struct nvmet_port *port,
drivers/parisc/iosapic.c+5−1
@@ -157,8 +157,12 @@ · 156 unmodified lines
157#define DBG_IRT(x...)157#define DBG_IRT(x...)
158#endif158#endif
159 159
160#ifdef CONFIG_64BIT
161#define COMPARE_IRTE_ADDR(irte, hpa) ((irte)->dest_iosapic_addr == (hpa))
162#else
160#define COMPARE_IRTE_ADDR(irte, hpa) \163#define COMPARE_IRTE_ADDR(irte, hpa) \
161 ((irte)->dest_iosapic_addr == F_EXTEND(hpa))164 ((irte)->dest_iosapic_addr == ((hpa) | 0xffffffff00000000ULL))
165#endif
162 166
163#define IOSAPIC_REG_SELECT 0x00167#define IOSAPIC_REG_SELECT 0x00
164#define IOSAPIC_REG_WINDOW 0x10168#define IOSAPIC_REG_WINDOW 0x10
drivers/pci/hotplug/pciehp_ctrl.c+4−0
@@ -115,6 +115,10 @@ static void remove_board(struct controller *ctrl, bool safe_removal) · 114 unmodified lines
115 * removed from the slot/adapter.115 * removed from the slot/adapter.
116 */116 */
117 msleep(1000);117 msleep(1000);
118
119 /* Ignore link or presence changes caused by power off */
120 atomic_and(~(PCI_EXP_SLTSTA_DLLSC | PCI_EXP_SLTSTA_PDC),
121 &ctrl->pending_events);
118 }122 }
119 123
120 /* turn off Green LED */124 /* turn off Green LED */
drivers/pci/quirks.c+2−0
@@ -3877,6 +3877,8 @@ DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_MARVELL_EXT, 0x9128, · 3876 unmodified lines
3877/* https://bugzilla.kernel.org/show_bug.cgi?id=42679#c14 */3877/* https://bugzilla.kernel.org/show_bug.cgi?id=42679#c14 */
3878DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_MARVELL_EXT, 0x9130,3878DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_MARVELL_EXT, 0x9130,
3879 quirk_dma_func1_alias);3879 quirk_dma_func1_alias);
3880DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_MARVELL_EXT, 0x9170,
3881 quirk_dma_func1_alias);
3880/* https://bugzilla.kernel.org/show_bug.cgi?id=42679#c47 + c57 */3882/* https://bugzilla.kernel.org/show_bug.cgi?id=42679#c47 + c57 */
3881DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_MARVELL_EXT, 0x9172,3883DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_MARVELL_EXT, 0x9172,
3882 quirk_dma_func1_alias);3884 quirk_dma_func1_alias);
drivers/platform/x86/pmc_atom.c+21−0
@@ -17,6 +17,7 @@ · 16 unmodified lines
17 17
18#include <linux/debugfs.h>18#include <linux/debugfs.h>
19#include <linux/device.h>19#include <linux/device.h>
20#include <linux/dmi.h>
20#include <linux/init.h>21#include <linux/init.h>
21#include <linux/io.h>22#include <linux/io.h>
22#include <linux/platform_data/x86/clk-pmc-atom.h>23#include <linux/platform_data/x86/clk-pmc-atom.h>
@@ -391,11 +392,27 @@ static int pmc_dbgfs_register(struct pmc_dev *pmc) · 368 unmodified lines
391}392}
392#endif /* CONFIG_DEBUG_FS */393#endif /* CONFIG_DEBUG_FS */
393 394
395/*
396 * Some systems need one or more of their pmc_plt_clks to be
397 * marked as critical.
398 */
399static const struct dmi_system_id critclk_systems[] = {
400 {
401 .ident = "MPL CEC1x",
402 .matches = {
403 DMI_MATCH(DMI_SYS_VENDOR, "MPL AG"),
404 DMI_MATCH(DMI_PRODUCT_NAME, "CEC10 Family"),
405 },
406 },
407 { /*sentinel*/ }
408};
409
394static int pmc_setup_clks(struct pci_dev *pdev, void __iomem *pmc_regmap,410static int pmc_setup_clks(struct pci_dev *pdev, void __iomem *pmc_regmap,
395 const struct pmc_data *pmc_data)411 const struct pmc_data *pmc_data)
396{412{
397 struct platform_device *clkdev;413 struct platform_device *clkdev;
398 struct pmc_clk_data *clk_data;414 struct pmc_clk_data *clk_data;
415 const struct dmi_system_id *d = dmi_first_match(critclk_systems);
399 416
400 clk_data = kzalloc(sizeof(*clk_data), GFP_KERNEL);417 clk_data = kzalloc(sizeof(*clk_data), GFP_KERNEL);
401 if (!clk_data)418 if (!clk_data)
@@ -403,6 +420,10 @@ static int pmc_setup_clks(struct pci_dev *pdev, void __iomem *pmc_regmap, · 1 unmodified line
403 420
404 clk_data->base = pmc_regmap; /* offset is added by client */421 clk_data->base = pmc_regmap; /* offset is added by client */
405 clk_data->clks = pmc_data->clks;422 clk_data->clks = pmc_data->clks;
423 if (d) {
424 clk_data->critical = true;
425 pr_info("%s critclks quirk enabled\n", d->ident);
426 }
406 427
407 clkdev = platform_device_register_data(&pdev->dev, "clk-pmc-atom",428 clkdev = platform_device_register_data(&pdev->dev, "clk-pmc-atom",
408 PLATFORM_DEVID_NONE,429 PLATFORM_DEVID_NONE,
drivers/power/supply/goldfish_battery.c+1−1
@@ -1,4 +1,4 @@
1// SPDX-License-Identifier: GPL1// SPDX-License-Identifier: GPL-2.0
2/*2/*
3 * Power supply driver for the goldfish emulator3 * Power supply driver for the goldfish emulator
4 *4 *
drivers/reset/reset-meson-audio-arb.c+1−0
@@ -130,6 +130,7 @@ static int meson_audio_arb_probe(struct platform_device *pdev) · 129 unmodified lines
130 arb->rstc.nr_resets = ARRAY_SIZE(axg_audio_arb_reset_bits);130 arb->rstc.nr_resets = ARRAY_SIZE(axg_audio_arb_reset_bits);
131 arb->rstc.ops = &meson_audio_arb_rstc_ops;131 arb->rstc.ops = &meson_audio_arb_rstc_ops;
132 arb->rstc.of_node = dev->of_node;132 arb->rstc.of_node = dev->of_node;
133 arb->rstc.owner = THIS_MODULE;
133 134
134 /*135 /*
135 * Enable general :136 * Enable general :
drivers/rtc/Kconfig+2−2
@@ -667,9 +667,9 @@ config RTC_DRV_S5M · 666 unmodified lines
667 will be called rtc-s5m.667 will be called rtc-s5m.
668 668
669config RTC_DRV_SD3078669config RTC_DRV_SD3078
670 tristate "ZXW Crystal SD3078"670 tristate "ZXW Shenzhen whwave SD3078"
671 help671 help
672 If you say yes here you get support for the ZXW Crystal672 If you say yes here you get support for the ZXW Shenzhen whwave
673 SD3078 RTC chips.673 SD3078 RTC chips.
674 674
675 This driver can also be built as a module. If so, the module675 This driver can also be built as a module. If so, the module
drivers/rtc/rtc-cros-ec.c+2−2
@@ -298,7 +298,7 @@ static int cros_ec_rtc_suspend(struct device *dev) · 297 unmodified lines
298 struct cros_ec_rtc *cros_ec_rtc = dev_get_drvdata(&pdev->dev);298 struct cros_ec_rtc *cros_ec_rtc = dev_get_drvdata(&pdev->dev);
299 299
300 if (device_may_wakeup(dev))300 if (device_may_wakeup(dev))
301 enable_irq_wake(cros_ec_rtc->cros_ec->irq);301 return enable_irq_wake(cros_ec_rtc->cros_ec->irq);
302 302
303 return 0;303 return 0;
304}304}
@@ -309,7 +309,7 @@ static int cros_ec_rtc_resume(struct device *dev) · 4 unmodified lines
309 struct cros_ec_rtc *cros_ec_rtc = dev_get_drvdata(&pdev->dev);309 struct cros_ec_rtc *cros_ec_rtc = dev_get_drvdata(&pdev->dev);
310 310
311 if (device_may_wakeup(dev))311 if (device_may_wakeup(dev))
312 disable_irq_wake(cros_ec_rtc->cros_ec->irq);312 return disable_irq_wake(cros_ec_rtc->cros_ec->irq);
313 313
314 return 0;314 return 0;
315}315}
drivers/rtc/rtc-da9063.c+7−0
@@ -480,6 +480,13 @@ static int da9063_rtc_probe(struct platform_device *pdev) · 479 unmodified lines
480 da9063_data_to_tm(data, &rtc->alarm_time, rtc);480 da9063_data_to_tm(data, &rtc->alarm_time, rtc);
481 rtc->rtc_sync = false;481 rtc->rtc_sync = false;
482 482
483 /*
484 * TODO: some models have alarms on a minute boundary but still support
485 * real hardware interrupts. Add this once the core supports it.
486 */
487 if (config->rtc_data_start != RTC_SEC)
488 rtc->rtc_dev->uie_unsupported = 1;
489
483 irq_alarm = platform_get_irq_byname(pdev, "ALARM");490 irq_alarm = platform_get_irq_byname(pdev, "ALARM");
484 ret = devm_request_threaded_irq(&pdev->dev, irq_alarm, NULL,491 ret = devm_request_threaded_irq(&pdev->dev, irq_alarm, NULL,
485 da9063_alarm_event,492 da9063_alarm_event,
drivers/rtc/rtc-sh.c+1−1
@@ -374,7 +374,7 @@ static int sh_rtc_set_time(struct device *dev, struct rtc_time *tm) · 373 unmodified lines
374static inline int sh_rtc_read_alarm_value(struct sh_rtc *rtc, int reg_off)374static inline int sh_rtc_read_alarm_value(struct sh_rtc *rtc, int reg_off)
375{375{
376 unsigned int byte;376 unsigned int byte;
377 int value = 0xff; /* return 0xff for ignored values */377 int value = -1; /* return -1 for ignored values */
378 378
379 byte = readb(rtc->regbase + reg_off);379 byte = readb(rtc->regbase + reg_off);
380 if (byte & AR_ENB) {380 if (byte & AR_ENB) {
drivers/s390/block/dasd_eckd.c+3−3
@@ -2004,14 +2004,14 @@ static int dasd_eckd_end_analysis(struct dasd_block *block) · 2003 unmodified lines
2004 blk_per_trk = recs_per_track(&private->rdc_data, 0, block->bp_block);2004 blk_per_trk = recs_per_track(&private->rdc_data, 0, block->bp_block);
2005 2005
2006raw:2006raw:
2007 block->blocks = (private->real_cyl *2007 block->blocks = ((unsigned long) private->real_cyl *
2008 private->rdc_data.trk_per_cyl *2008 private->rdc_data.trk_per_cyl *
2009 blk_per_trk);2009 blk_per_trk);
2010 2010
2011 dev_info(&device->cdev->dev,2011 dev_info(&device->cdev->dev,
2012 "DASD with %d KB/block, %d KB total size, %d KB/track, "2012 "DASD with %u KB/block, %lu KB total size, %u KB/track, "
2013 "%s\n", (block->bp_block >> 10),2013 "%s\n", (block->bp_block >> 10),
2014 ((private->real_cyl *2014 (((unsigned long) private->real_cyl *
2015 private->rdc_data.trk_per_cyl *2015 private->rdc_data.trk_per_cyl *
2016 blk_per_trk * (block->bp_block >> 9)) >> 1),2016 blk_per_trk * (block->bp_block >> 9)) >> 1),
2017 ((blk_per_trk * block->bp_block) >> 10),2017 ((blk_per_trk * block->bp_block) >> 10),
drivers/s390/char/con3270.c+1−1
@@ -629,7 +629,7 @@ con3270_init(void) · 628 unmodified lines
629 (void (*)(unsigned long)) con3270_read_tasklet,629 (void (*)(unsigned long)) con3270_read_tasklet,
630 (unsigned long) condev->read);630 (unsigned long) condev->read);
631 631
632 raw3270_add_view(&condev->view, &con3270_fn, 1);632 raw3270_add_view(&condev->view, &con3270_fn, 1, RAW3270_VIEW_LOCK_IRQ);
633 633
634 INIT_LIST_HEAD(&condev->freemem);634 INIT_LIST_HEAD(&condev->freemem);
635 for (i = 0; i < CON3270_STRING_PAGES; i++) {635 for (i = 0; i < CON3270_STRING_PAGES; i++) {
drivers/s390/char/fs3270.c+2−1
@@ -463,7 +463,8 @@ fs3270_open(struct inode *inode, struct file *filp) · 462 unmodified lines
463 463
464 init_waitqueue_head(&fp->wait);464 init_waitqueue_head(&fp->wait);
465 fp->fs_pid = get_pid(task_pid(current));465 fp->fs_pid = get_pid(task_pid(current));
466 rc = raw3270_add_view(&fp->view, &fs3270_fn, minor);466 rc = raw3270_add_view(&fp->view, &fs3270_fn, minor,
467 RAW3270_VIEW_LOCK_BH);
467 if (rc) {468 if (rc) {
468 fs3270_free_view(&fp->view);469 fs3270_free_view(&fp->view);
469 goto out;470 goto out;
drivers/s390/char/raw3270.c+2−1
@@ -920,7 +920,7 @@ raw3270_deactivate_view(struct raw3270_view *view) · 919 unmodified lines
920 * Add view to device with minor "minor".920 * Add view to device with minor "minor".
921 */921 */
922int922int
923raw3270_add_view(struct raw3270_view *view, struct raw3270_fn *fn, int minor)923raw3270_add_view(struct raw3270_view *view, struct raw3270_fn *fn, int minor, int subclass)
924{924{
925 unsigned long flags;925 unsigned long flags;
926 struct raw3270 *rp;926 struct raw3270 *rp;
@@ -942,6 +942,7 @@ raw3270_add_view(struct raw3270_view *view, struct raw3270_fn *fn, int minor) · 15 unmodified lines
942 view->cols = rp->cols;942 view->cols = rp->cols;
943 view->ascebc = rp->ascebc;943 view->ascebc = rp->ascebc;
944 spin_lock_init(&view->lock);944 spin_lock_init(&view->lock);
945 lockdep_set_subclass(&view->lock, subclass);
945 list_add(&view->list, &rp->view_list);946 list_add(&view->list, &rp->view_list);
946 rc = 0;947 rc = 0;
947 spin_unlock_irqrestore(get_ccwdev_lock(rp->cdev), flags);948 spin_unlock_irqrestore(get_ccwdev_lock(rp->cdev), flags);
drivers/s390/char/raw3270.h+3−1
@@ -150,6 +150,8 @@ struct raw3270_fn { · 149 unmodified lines
150struct raw3270_view {150struct raw3270_view {
151 struct list_head list;151 struct list_head list;
152 spinlock_t lock;152 spinlock_t lock;
153#define RAW3270_VIEW_LOCK_IRQ 0
154#define RAW3270_VIEW_LOCK_BH 1
153 atomic_t ref_count;155 atomic_t ref_count;
154 struct raw3270 *dev;156 struct raw3270 *dev;
155 struct raw3270_fn *fn;157 struct raw3270_fn *fn;
@@ -158,7 +160,7 @@ struct raw3270_view { · 2 unmodified lines
158 unsigned char *ascebc; /* ascii -> ebcdic table */160 unsigned char *ascebc; /* ascii -> ebcdic table */
159};161};
160 162
161int raw3270_add_view(struct raw3270_view *, struct raw3270_fn *, int);163int raw3270_add_view(struct raw3270_view *, struct raw3270_fn *, int, int);
162int raw3270_activate_view(struct raw3270_view *);164int raw3270_activate_view(struct raw3270_view *);
163void raw3270_del_view(struct raw3270_view *);165void raw3270_del_view(struct raw3270_view *);
164void raw3270_deactivate_view(struct raw3270_view *);166void raw3270_deactivate_view(struct raw3270_view *);
drivers/s390/char/tty3270.c+2−1
@@ -980,7 +980,8 @@ static int tty3270_install(struct tty_driver *driver, struct tty_struct *tty) · 979 unmodified lines
980 return PTR_ERR(tp);980 return PTR_ERR(tp);
981 981
982 rc = raw3270_add_view(&tp->view, &tty3270_fn,982 rc = raw3270_add_view(&tp->view, &tty3270_fn,
983 tty->index + RAW3270_FIRSTMINOR);983 tty->index + RAW3270_FIRSTMINOR,
984 RAW3270_VIEW_LOCK_BH);
984 if (rc) {985 if (rc) {
985 tty3270_free_view(tp);986 tty3270_free_view(tp);
986 return rc;987 return rc;
drivers/s390/crypto/ap_queue.c+1−1
@@ -751,8 +751,8 @@ void ap_queue_prepare_remove(struct ap_queue *aq) · 750 unmodified lines
751 __ap_flush_queue(aq);751 __ap_flush_queue(aq);
752 /* set REMOVE state to prevent new messages are queued in */752 /* set REMOVE state to prevent new messages are queued in */
753 aq->state = AP_STATE_REMOVE;753 aq->state = AP_STATE_REMOVE;
754 del_timer_sync(&aq->timeout);
755 spin_unlock_bh(&aq->lock);754 spin_unlock_bh(&aq->lock);
755 del_timer_sync(&aq->timeout);
756}756}
757 757
758void ap_queue_remove(struct ap_queue *aq)758void ap_queue_remove(struct ap_queue *aq)
drivers/s390/crypto/pkey_api.c+2−1
@@ -51,7 +51,8 @@ static debug_info_t *debug_info; · 50 unmodified lines
51 51
52static void __init pkey_debug_init(void)52static void __init pkey_debug_init(void)
53{53{
54 debug_info = debug_register("pkey", 1, 1, 4 * sizeof(long));54 /* 5 arguments per dbf entry (including the format string ptr) */
55 debug_info = debug_register("pkey", 1, 1, 5 * sizeof(long));
55 debug_register_view(debug_info, &debug_sprintf_view);56 debug_register_view(debug_info, &debug_sprintf_view);
56 debug_set_level(debug_info, 3);57 debug_set_level(debug_info, 3);
57}58}
drivers/scsi/aic7xxx/aic7770_osm.c+1−0
@@ -91,6 +91,7 @@ aic7770_probe(struct device *dev) · 90 unmodified lines
91 ahc = ahc_alloc(&aic7xxx_driver_template, name);91 ahc = ahc_alloc(&aic7xxx_driver_template, name);
92 if (ahc == NULL)92 if (ahc == NULL)
93 return (ENOMEM);93 return (ENOMEM);
94 ahc->dev = dev;
94 error = aic7770_config(ahc, aic7770_ident_table + edev->id.driver_data,95 error = aic7770_config(ahc, aic7770_ident_table + edev->id.driver_data,
95 eisaBase);96 eisaBase);
96 if (error != 0) {97 if (error != 0) {
drivers/scsi/aic7xxx/aic7xxx.h+1−0
@@ -943,6 +943,7 @@ struct ahc_softc { · 942 unmodified lines
943 * Platform specific device information.943 * Platform specific device information.
944 */944 */
945 ahc_dev_softc_t dev_softc;945 ahc_dev_softc_t dev_softc;
946 struct device *dev;
946 947
947 /*948 /*
948 * Bus specific device information.949 * Bus specific device information.
drivers/scsi/aic7xxx/aic7xxx_osm.c+4−6
@@ -860,8 +860,8 @@ int · 859 unmodified lines
860ahc_dmamem_alloc(struct ahc_softc *ahc, bus_dma_tag_t dmat, void** vaddr,860ahc_dmamem_alloc(struct ahc_softc *ahc, bus_dma_tag_t dmat, void** vaddr,
861 int flags, bus_dmamap_t *mapp)861 int flags, bus_dmamap_t *mapp)
862{862{
863 *vaddr = pci_alloc_consistent(ahc->dev_softc,863 /* XXX: check if we really need the GFP_ATOMIC and unwind this mess! */
864 dmat->maxsize, mapp);864 *vaddr = dma_alloc_coherent(ahc->dev, dmat->maxsize, mapp, GFP_ATOMIC);
865 if (*vaddr == NULL)865 if (*vaddr == NULL)
866 return ENOMEM;866 return ENOMEM;
867 return 0;867 return 0;
@@ -871,8 +871,7 @@ void · 3 unmodified lines
871ahc_dmamem_free(struct ahc_softc *ahc, bus_dma_tag_t dmat,871ahc_dmamem_free(struct ahc_softc *ahc, bus_dma_tag_t dmat,
872 void* vaddr, bus_dmamap_t map)872 void* vaddr, bus_dmamap_t map)
873{873{
874 pci_free_consistent(ahc->dev_softc, dmat->maxsize,874 dma_free_coherent(ahc->dev, dmat->maxsize, vaddr, map);
875 vaddr, map);
876}875}
877 876
878int877int
@@ -1123,8 +1122,7 @@ ahc_linux_register_host(struct ahc_softc *ahc, struct scsi_host_template *templa · 244 unmodified lines
1123 1122
1124 host->transportt = ahc_linux_transport_template;1123 host->transportt = ahc_linux_transport_template;
1125 1124
1126 retval = scsi_add_host(host,1125 retval = scsi_add_host(host, ahc->dev);
1127 (ahc->dev_softc ? &ahc->dev_softc->dev : NULL));
1128 if (retval) {1126 if (retval) {
1129 printk(KERN_WARNING "aic7xxx: scsi_add_host failed\n");1127 printk(KERN_WARNING "aic7xxx: scsi_add_host failed\n");
1130 scsi_host_put(host);1128 scsi_host_put(host);
drivers/scsi/aic7xxx/aic7xxx_osm_pci.c+1−0
@@ -250,6 +250,7 @@ ahc_linux_pci_dev_probe(struct pci_dev *pdev, const struct pci_device_id *ent) · 249 unmodified lines
250 }250 }
251 }251 }
252 ahc->dev_softc = pci;252 ahc->dev_softc = pci;
253 ahc->dev = &pci->dev;
253 error = ahc_pci_config(ahc, entry);254 error = ahc_pci_config(ahc, entry);
254 if (error != 0) {255 if (error != 0) {
255 ahc_free(ahc);256 ahc_free(ahc);
drivers/scsi/csiostor/csio_scsi.c+4−1
@@ -1713,8 +1713,11 @@ csio_scsi_err_handler(struct csio_hw *hw, struct csio_ioreq *req) · 1712 unmodified lines
1713 }1713 }
1714 1714
1715out:1715out:
1716 if (req->nsge > 0)1716 if (req->nsge > 0) {
1717 scsi_dma_unmap(cmnd);1717 scsi_dma_unmap(cmnd);
1718 if (req->dcopy && (host_status == DID_OK))
1719 host_status = csio_scsi_copy_to_sgl(hw, req);
1720 }
1718 1721
1719 cmnd->result = (((host_status) << 16) | scsi_status);1722 cmnd->result = (((host_status) << 16) | scsi_status);
1720 cmnd->scsi_done(cmnd);1723 cmnd->scsi_done(cmnd);
drivers/scsi/libfc/fc_rport.c+0−1
@@ -2162,7 +2162,6 @@ static void fc_rport_recv_logo_req(struct fc_lport *lport, struct fc_frame *fp) · 2161 unmodified lines
2162 FC_RPORT_DBG(rdata, "Received LOGO request while in state %s\n",2162 FC_RPORT_DBG(rdata, "Received LOGO request while in state %s\n",
2163 fc_rport_state(rdata));2163 fc_rport_state(rdata));
2164 2164
2165 rdata->flags &= ~FC_RP_STARTED;
2166 fc_rport_enter_delete(rdata, RPORT_EV_STOP);2165 fc_rport_enter_delete(rdata, RPORT_EV_STOP);
2167 mutex_unlock(&rdata->rp_mutex);2166 mutex_unlock(&rdata->rp_mutex);
2168 kref_put(&rdata->kref, fc_rport_destroy);2167 kref_put(&rdata->kref, fc_rport_destroy);
drivers/scsi/lpfc/lpfc_scsi.c+3−4
@@ -3878,10 +3878,9 @@ lpfc_scsi_cmd_iocb_cmpl(struct lpfc_hba *phba, struct lpfc_iocbq *pIocbIn, · 3877 unmodified lines
3878 * wake up the thread.3878 * wake up the thread.
3879 */3879 */
3880 spin_lock(&lpfc_cmd->buf_lock);3880 spin_lock(&lpfc_cmd->buf_lock);
3881 if (unlikely(lpfc_cmd->cur_iocbq.iocb_flag & LPFC_DRIVER_ABORTED)) {3881 lpfc_cmd->cur_iocbq.iocb_flag &= ~LPFC_DRIVER_ABORTED;
3882 lpfc_cmd->cur_iocbq.iocb_flag &= ~LPFC_DRIVER_ABORTED;3882 if (lpfc_cmd->waitq) {
3883 if (lpfc_cmd->waitq)3883 wake_up(lpfc_cmd->waitq);
3884 wake_up(lpfc_cmd->waitq);
3885 lpfc_cmd->waitq = NULL;3884 lpfc_cmd->waitq = NULL;
3886 }3885 }
3887 spin_unlock(&lpfc_cmd->buf_lock);3886 spin_unlock(&lpfc_cmd->buf_lock);
drivers/scsi/qedi/qedi_main.c+2−5
@@ -1392,10 +1392,8 @@ static void qedi_free_nvm_iscsi_cfg(struct qedi_ctx *qedi) · 1391 unmodified lines
1392 1392
1393static int qedi_alloc_nvm_iscsi_cfg(struct qedi_ctx *qedi)1393static int qedi_alloc_nvm_iscsi_cfg(struct qedi_ctx *qedi)
1394{1394{
1395 struct qedi_nvm_iscsi_image nvm_image;
1396
1397 qedi->iscsi_image = dma_alloc_coherent(&qedi->pdev->dev,1395 qedi->iscsi_image = dma_alloc_coherent(&qedi->pdev->dev,
1398 sizeof(nvm_image),1396 sizeof(struct qedi_nvm_iscsi_image),
1399 &qedi->nvm_buf_dma, GFP_KERNEL);1397 &qedi->nvm_buf_dma, GFP_KERNEL);
1400 if (!qedi->iscsi_image) {1398 if (!qedi->iscsi_image) {
1401 QEDI_ERR(&qedi->dbg_ctx, "Could not allocate NVM BUF.\n");1399 QEDI_ERR(&qedi->dbg_ctx, "Could not allocate NVM BUF.\n");
@@ -2236,14 +2234,13 @@ static void qedi_boot_release(void *data) · 834 unmodified lines
2236static int qedi_get_boot_info(struct qedi_ctx *qedi)2234static int qedi_get_boot_info(struct qedi_ctx *qedi)
2237{2235{
2238 int ret = 1;2236 int ret = 1;
2239 struct qedi_nvm_iscsi_image nvm_image;
2240 2237
2241 QEDI_INFO(&qedi->dbg_ctx, QEDI_LOG_INFO,2238 QEDI_INFO(&qedi->dbg_ctx, QEDI_LOG_INFO,
2242 "Get NVM iSCSI CFG image\n");2239 "Get NVM iSCSI CFG image\n");
2243 ret = qedi_ops->common->nvm_get_image(qedi->cdev,2240 ret = qedi_ops->common->nvm_get_image(qedi->cdev,
2244 QED_NVM_IMAGE_ISCSI_CFG,2241 QED_NVM_IMAGE_ISCSI_CFG,
2245 (char *)qedi->iscsi_image,2242 (char *)qedi->iscsi_image,
2246 sizeof(nvm_image));2243 sizeof(struct qedi_nvm_iscsi_image));
2247 if (ret)2244 if (ret)
2248 QEDI_ERR(&qedi->dbg_ctx,2245 QEDI_ERR(&qedi->dbg_ctx,
2249 "Could not get NVM image. ret = %d\n", ret);2246 "Could not get NVM image. ret = %d\n", ret);
drivers/scsi/scsi_devinfo.c+1−0
@@ -238,6 +238,7 @@ static struct { · 237 unmodified lines
238 {"NETAPP", "Universal Xport", "*", BLIST_NO_ULD_ATTACH},238 {"NETAPP", "Universal Xport", "*", BLIST_NO_ULD_ATTACH},
239 {"LSI", "Universal Xport", "*", BLIST_NO_ULD_ATTACH},239 {"LSI", "Universal Xport", "*", BLIST_NO_ULD_ATTACH},
240 {"ENGENIO", "Universal Xport", "*", BLIST_NO_ULD_ATTACH},240 {"ENGENIO", "Universal Xport", "*", BLIST_NO_ULD_ATTACH},
241 {"LENOVO", "Universal Xport", "*", BLIST_NO_ULD_ATTACH},
241 {"SMSC", "USB 2 HS-CF", NULL, BLIST_SPARSELUN | BLIST_INQUIRY_36},242 {"SMSC", "USB 2 HS-CF", NULL, BLIST_SPARSELUN | BLIST_INQUIRY_36},
242 {"SONY", "CD-ROM CDU-8001", NULL, BLIST_BORKEN},243 {"SONY", "CD-ROM CDU-8001", NULL, BLIST_BORKEN},
243 {"SONY", "TSL", NULL, BLIST_FORCELUN}, /* DDS3 & DDS4 autoloaders */244 {"SONY", "TSL", NULL, BLIST_FORCELUN}, /* DDS3 & DDS4 autoloaders */
drivers/scsi/scsi_dh.c+1−0
@@ -75,6 +75,7 @@ static const struct scsi_dh_blist scsi_dh_blist[] = { · 74 unmodified lines
75 {"NETAPP", "INF-01-00", "rdac", },75 {"NETAPP", "INF-01-00", "rdac", },
76 {"LSI", "INF-01-00", "rdac", },76 {"LSI", "INF-01-00", "rdac", },
77 {"ENGENIO", "INF-01-00", "rdac", },77 {"ENGENIO", "INF-01-00", "rdac", },
78 {"LENOVO", "DE_Series", "rdac", },
78 {NULL, NULL, NULL },79 {NULL, NULL, NULL },
79};80};
80 81
drivers/scsi/scsi_lib.c+5−1
@@ -1706,8 +1706,12 @@ out_put_budget: · 1705 unmodified lines
1706 ret = BLK_STS_DEV_RESOURCE;1706 ret = BLK_STS_DEV_RESOURCE;
1707 break;1707 break;
1708 default:1708 default:
1709 if (unlikely(!scsi_device_online(sdev)))
1710 scsi_req(req)->result = DID_NO_CONNECT << 16;
1711 else
1712 scsi_req(req)->result = DID_ERROR << 16;
1709 /*1713 /*
1710 * Make sure to release all allocated ressources when1714 * Make sure to release all allocated resources when
1711 * we hit an error, as we will never see this command1715 * we hit an error, as we will never see this command
1712 * again.1716 * again.
1713 */1717 */
drivers/scsi/storvsc_drv.c+12−3
@@ -385,7 +385,7 @@ enum storvsc_request_type { · 384 unmodified lines
385 * This is the end of Protocol specific defines.385 * This is the end of Protocol specific defines.
386 */386 */
387 387
388static int storvsc_ringbuffer_size = (256 * PAGE_SIZE);388static int storvsc_ringbuffer_size = (128 * 1024);
389static u32 max_outstanding_req_per_channel;389static u32 max_outstanding_req_per_channel;
390 390
391static int storvsc_vcpus_per_sub_channel = 4;391static int storvsc_vcpus_per_sub_channel = 4;
@@ -668,13 +668,22 @@ static void handle_multichannel_storage(struct hv_device *device, int max_chns) · 276 unmodified lines
668{668{
669 struct device *dev = &device->device;669 struct device *dev = &device->device;
670 struct storvsc_device *stor_device;670 struct storvsc_device *stor_device;
671 int num_cpus = num_online_cpus();
672 int num_sc;671 int num_sc;
673 struct storvsc_cmd_request *request;672 struct storvsc_cmd_request *request;
674 struct vstor_packet *vstor_packet;673 struct vstor_packet *vstor_packet;
675 int ret, t;674 int ret, t;
676 675
677 num_sc = ((max_chns > num_cpus) ? num_cpus : max_chns);676 /*
677 * If the number of CPUs is artificially restricted, such as
678 * with maxcpus=1 on the kernel boot line, Hyper-V could offer
679 * sub-channels >= the number of CPUs. These sub-channels
680 * should not be created. The primary channel is already created
681 * and assigned to one CPU, so check against # CPUs - 1.
682 */
683 num_sc = min((int)(num_online_cpus() - 1), max_chns);
684 if (!num_sc)
685 return;
686
678 stor_device = get_out_stor_device(device);687 stor_device = get_out_stor_device(device);
679 if (!stor_device)688 if (!stor_device)
680 return;689 return;
drivers/scsi/virtio_scsi.c+1−0
@@ -793,6 +793,7 @@ static int virtscsi_probe(struct virtio_device *vdev) · 792 unmodified lines
793 793
794 /* We need to know how many queues before we allocate. */794 /* We need to know how many queues before we allocate. */
795 num_queues = virtscsi_config_get(vdev, num_queues) ? : 1;795 num_queues = virtscsi_config_get(vdev, num_queues) ? : 1;
796 num_queues = min_t(unsigned int, nr_cpu_ids, num_queues);
796 797
797 num_targets = virtscsi_config_get(vdev, max_target) + 1;798 num_targets = virtscsi_config_get(vdev, max_target) + 1;
798 799
drivers/staging/comedi/drivers/ni_usb6501.c+4−6
@@ -463,10 +463,8 @@ static int ni6501_alloc_usb_buffers(struct comedi_device *dev) · 462 unmodified lines
463 463
464 size = usb_endpoint_maxp(devpriv->ep_tx);464 size = usb_endpoint_maxp(devpriv->ep_tx);
465 devpriv->usb_tx_buf = kzalloc(size, GFP_KERNEL);465 devpriv->usb_tx_buf = kzalloc(size, GFP_KERNEL);
466 if (!devpriv->usb_tx_buf) {466 if (!devpriv->usb_tx_buf)
467 kfree(devpriv->usb_rx_buf);
468 return -ENOMEM;467 return -ENOMEM;
469 }
470 468
471 return 0;469 return 0;
472}470}
@@ -518,6 +516,9 @@ static int ni6501_auto_attach(struct comedi_device *dev, · 45 unmodified lines
518 if (!devpriv)516 if (!devpriv)
519 return -ENOMEM;517 return -ENOMEM;
520 518
519 mutex_init(&devpriv->mut);
520 usb_set_intfdata(intf, devpriv);
521
521 ret = ni6501_find_endpoints(dev);522 ret = ni6501_find_endpoints(dev);
522 if (ret)523 if (ret)
523 return ret;524 return ret;
@@ -526,9 +527,6 @@ static int ni6501_auto_attach(struct comedi_device *dev, · 2 unmodified lines
526 if (ret)527 if (ret)
527 return ret;528 return ret;
528 529
529 mutex_init(&devpriv->mut);
530 usb_set_intfdata(intf, devpriv);
531
532 ret = comedi_alloc_subdevices(dev, 2);530 ret = comedi_alloc_subdevices(dev, 2);
533 if (ret)531 if (ret)
534 return ret;532 return ret;
drivers/staging/comedi/drivers/vmk80xx.c+3−5
@@ -682,10 +682,8 @@ static int vmk80xx_alloc_usb_buffers(struct comedi_device *dev) · 681 unmodified lines
682 682
683 size = usb_endpoint_maxp(devpriv->ep_tx);683 size = usb_endpoint_maxp(devpriv->ep_tx);
684 devpriv->usb_tx_buf = kzalloc(size, GFP_KERNEL);684 devpriv->usb_tx_buf = kzalloc(size, GFP_KERNEL);
685 if (!devpriv->usb_tx_buf) {685 if (!devpriv->usb_tx_buf)
686 kfree(devpriv->usb_rx_buf);
687 return -ENOMEM;686 return -ENOMEM;
688 }
689 687
690 return 0;688 return 0;
691}689}
@@ -800,6 +798,8 @@ static int vmk80xx_auto_attach(struct comedi_device *dev, · 108 unmodified lines
800 798
801 devpriv->model = board->model;799 devpriv->model = board->model;
802 800
801 sema_init(&devpriv->limit_sem, 8);
802
803 ret = vmk80xx_find_usb_endpoints(dev);803 ret = vmk80xx_find_usb_endpoints(dev);
804 if (ret)804 if (ret)
805 return ret;805 return ret;
@@ -808,8 +808,6 @@ static int vmk80xx_auto_attach(struct comedi_device *dev, · 2 unmodified lines
808 if (ret)808 if (ret)
809 return ret;809 return ret;
810 810
811 sema_init(&devpriv->limit_sem, 8);
812
813 usb_set_intfdata(intf, devpriv);811 usb_set_intfdata(intf, devpriv);
814 812
815 if (devpriv->model == VMK8055_MODEL)813 if (devpriv->model == VMK8055_MODEL)
drivers/staging/erofs/data.c+1−1
@@ -298,7 +298,7 @@ submit_bio_retry: · 297 unmodified lines
298 *last_block = current_block;298 *last_block = current_block;
299 299
300 /* shift in advance in case of it followed by too many gaps */300 /* shift in advance in case of it followed by too many gaps */
301 if (unlikely(bio->bi_vcnt >= bio->bi_max_vecs)) {301 if (bio->bi_iter.bi_size >= bio->bi_max_vecs * PAGE_SIZE) {
302 /* err should reassign to 0 after submitting */302 /* err should reassign to 0 after submitting */
303 err = 0;303 err = 0;
304 goto submit_bio_out;304 goto submit_bio_out;
drivers/staging/iio/adc/ad7192.c+4−4
@@ -109,10 +109,10 @@ · 108 unmodified lines
109#define AD7192_CH_AIN3 BIT(6) /* AIN3 - AINCOM */109#define AD7192_CH_AIN3 BIT(6) /* AIN3 - AINCOM */
110#define AD7192_CH_AIN4 BIT(7) /* AIN4 - AINCOM */110#define AD7192_CH_AIN4 BIT(7) /* AIN4 - AINCOM */
111 111
112#define AD7193_CH_AIN1P_AIN2M 0x000 /* AIN1(+) - AIN2(-) */112#define AD7193_CH_AIN1P_AIN2M 0x001 /* AIN1(+) - AIN2(-) */
113#define AD7193_CH_AIN3P_AIN4M 0x001 /* AIN3(+) - AIN4(-) */113#define AD7193_CH_AIN3P_AIN4M 0x002 /* AIN3(+) - AIN4(-) */
114#define AD7193_CH_AIN5P_AIN6M 0x002 /* AIN5(+) - AIN6(-) */114#define AD7193_CH_AIN5P_AIN6M 0x004 /* AIN5(+) - AIN6(-) */
115#define AD7193_CH_AIN7P_AIN8M 0x004 /* AIN7(+) - AIN8(-) */115#define AD7193_CH_AIN7P_AIN8M 0x008 /* AIN7(+) - AIN8(-) */
116#define AD7193_CH_TEMP 0x100 /* Temp senseor */116#define AD7193_CH_TEMP 0x100 /* Temp senseor */
117#define AD7193_CH_AIN2P_AIN2M 0x200 /* AIN2(+) - AIN2(-) */117#define AD7193_CH_AIN2P_AIN2M 0x200 /* AIN2(+) - AIN2(-) */
118#define AD7193_CH_AIN1 0x401 /* AIN1 - AINCOM */118#define AD7193_CH_AIN1 0x401 /* AIN1 - AINCOM */
drivers/staging/iio/meter/ade7854.c+1−1
@@ -269,7 +269,7 @@ static IIO_DEV_ATTR_VPEAK(0644, · 268 unmodified lines
269static IIO_DEV_ATTR_IPEAK(0644,269static IIO_DEV_ATTR_IPEAK(0644,
270 ade7854_read_32bit,270 ade7854_read_32bit,
271 ade7854_write_32bit,271 ade7854_write_32bit,
272 ADE7854_VPEAK);272 ADE7854_IPEAK);
273static IIO_DEV_ATTR_APHCAL(0644,273static IIO_DEV_ATTR_APHCAL(0644,
274 ade7854_read_16bit,274 ade7854_read_16bit,
275 ade7854_write_16bit,275 ade7854_write_16bit,
drivers/staging/most/core.c+1−1
@@ -1431,7 +1431,7 @@ int most_register_interface(struct most_interface *iface) · 1430 unmodified lines
1431 1431
1432 INIT_LIST_HEAD(&iface->p->channel_list);1432 INIT_LIST_HEAD(&iface->p->channel_list);
1433 iface->p->dev_id = id;1433 iface->p->dev_id = id;
1434 snprintf(iface->p->name, STRING_SIZE, "mdev%d", id);1434 strcpy(iface->p->name, iface->description);
1435 iface->dev.init_name = iface->p->name;1435 iface->dev.init_name = iface->p->name;
1436 iface->dev.bus = &mc.bus;1436 iface->dev.bus = &mc.bus;
1437 iface->dev.parent = &mc.dev;1437 iface->dev.parent = &mc.dev;
drivers/tty/serial/sc16is7xx.c+3−1
@@ -1520,11 +1520,13 @@ static int __init sc16is7xx_init(void) · 1519 unmodified lines
1520#endif1520#endif
1521 return ret;1521 return ret;
1522 1522
1523#ifdef CONFIG_SERIAL_SC16IS7XX_SPI
1523err_spi:1524err_spi:
1525#endif
1524#ifdef CONFIG_SERIAL_SC16IS7XX_I2C1526#ifdef CONFIG_SERIAL_SC16IS7XX_I2C
1525 i2c_del_driver(&sc16is7xx_i2c_uart_driver);1527 i2c_del_driver(&sc16is7xx_i2c_uart_driver);
1526#endif
1527err_i2c:1528err_i2c:
1529#endif
1528 uart_unregister_driver(&sc16is7xx_uart);1530 uart_unregister_driver(&sc16is7xx_uart);
1529 return ret;1531 return ret;
1530}1532}
drivers/tty/serial/sh-sci.c+4−2
@@ -2512,14 +2512,16 @@ done: · 2511 unmodified lines
2512 * center of the last stop bit in sampling clocks.2512 * center of the last stop bit in sampling clocks.
2513 */2513 */
2514 int last_stop = bits * 2 - 1;2514 int last_stop = bits * 2 - 1;
2515 int deviation = min_err * srr * last_stop / 2 / baud;2515 int deviation = DIV_ROUND_CLOSEST(min_err * last_stop *
2516 (int)(srr + 1),
2517 2 * (int)baud);
2516 2518
2517 if (abs(deviation) >= 2) {2519 if (abs(deviation) >= 2) {
2518 /* At least two sampling clocks off at the2520 /* At least two sampling clocks off at the
2519 * last stop bit; we can increase the error2521 * last stop bit; we can increase the error
2520 * margin by shifting the sampling point.2522 * margin by shifting the sampling point.
2521 */2523 */
2522 int shift = min(-8, max(7, deviation / 2));2524 int shift = clamp(deviation / 2, -8, 7);
2523 2525
2524 hssrr |= (shift << HSCIF_SRHP_SHIFT) &2526 hssrr |= (shift << HSCIF_SRHP_SHIFT) &
2525 HSCIF_SRHP_MASK;2527 HSCIF_SRHP_MASK;
drivers/tty/vt/vt.c+2−1
@@ -1520,7 +1520,8 @@ static void csi_J(struct vc_data *vc, int vpar) · 1519 unmodified lines
1520 return;1520 return;
1521 }1521 }
1522 scr_memsetw(start, vc->vc_video_erase_char, 2 * count);1522 scr_memsetw(start, vc->vc_video_erase_char, 2 * count);
1523 update_region(vc, (unsigned long) start, count);1523 if (con_should_update(vc))
1524 do_update_region(vc, (unsigned long) start, count);
1524 vc->vc_need_wrap = 0;1525 vc->vc_need_wrap = 0;
1525}1526}
1526 1527
drivers/vfio/pci/vfio_pci.c+2−2
@@ -1661,11 +1661,11 @@ static void __init vfio_pci_fill_ids(void) · 1660 unmodified lines
1661 rc = pci_add_dynid(&vfio_pci_driver, vendor, device,1661 rc = pci_add_dynid(&vfio_pci_driver, vendor, device,
1662 subvendor, subdevice, class, class_mask, 0);1662 subvendor, subdevice, class, class_mask, 0);
1663 if (rc)1663 if (rc)
1664 pr_warn("failed to add dynamic id [%04hx:%04hx[%04hx:%04hx]] class %#08x/%08x (%d)\n",1664 pr_warn("failed to add dynamic id [%04x:%04x[%04x:%04x]] class %#08x/%08x (%d)\n",
1665 vendor, device, subvendor, subdevice,1665 vendor, device, subvendor, subdevice,
1666 class, class_mask, rc);1666 class, class_mask, rc);
1667 else1667 else
1668 pr_info("add [%04hx:%04hx[%04hx:%04hx]] class %#08x/%08x\n",1668 pr_info("add [%04x:%04x[%04x:%04x]] class %#08x/%08x\n",
1669 vendor, device, subvendor, subdevice,1669 vendor, device, subvendor, subdevice,
1670 class, class_mask);1670 class, class_mask);
1671 }1671 }
drivers/vfio/vfio_iommu_spapr_tce.c+1−1
@@ -1398,7 +1398,7 @@ unlock_exit: · 1397 unmodified lines
1398 mutex_unlock(&container->lock);1398 mutex_unlock(&container->lock);
1399}1399}
1400 1400
1401const struct vfio_iommu_driver_ops tce_iommu_driver_ops = {1401static const struct vfio_iommu_driver_ops tce_iommu_driver_ops = {
1402 .name = "iommu-vfio-powerpc",1402 .name = "iommu-vfio-powerpc",
1403 .owner = THIS_MODULE,1403 .owner = THIS_MODULE,
1404 .open = tce_iommu_open,1404 .open = tce_iommu_open,
drivers/vfio/vfio_iommu_type1.c+14−0
@@ -58,12 +58,18 @@ module_param_named(disable_hugepages, · 57 unmodified lines
58MODULE_PARM_DESC(disable_hugepages,58MODULE_PARM_DESC(disable_hugepages,
59 "Disable VFIO IOMMU support for IOMMU hugepages.");59 "Disable VFIO IOMMU support for IOMMU hugepages.");
60 60
61static unsigned int dma_entry_limit __read_mostly = U16_MAX;
62module_param_named(dma_entry_limit, dma_entry_limit, uint, 0644);
63MODULE_PARM_DESC(dma_entry_limit,
64 "Maximum number of user DMA mappings per container (65535).");
65
61struct vfio_iommu {66struct vfio_iommu {
62 struct list_head domain_list;67 struct list_head domain_list;
63 struct vfio_domain *external_domain; /* domain for external user */68 struct vfio_domain *external_domain; /* domain for external user */
64 struct mutex lock;69 struct mutex lock;
65 struct rb_root dma_list;70 struct rb_root dma_list;
66 struct blocking_notifier_head notifier;71 struct blocking_notifier_head notifier;
72 unsigned int dma_avail;
67 bool v2;73 bool v2;
68 bool nesting;74 bool nesting;
69};75};
@@ -836,6 +842,7 @@ static void vfio_remove_dma(struct vfio_iommu *iommu, struct vfio_dma *dma) · 766 unmodified lines
836 vfio_unlink_dma(iommu, dma);842 vfio_unlink_dma(iommu, dma);
837 put_task_struct(dma->task);843 put_task_struct(dma->task);
838 kfree(dma);844 kfree(dma);
845 iommu->dma_avail++;
839}846}
840 847
841static unsigned long vfio_pgsize_bitmap(struct vfio_iommu *iommu)848static unsigned long vfio_pgsize_bitmap(struct vfio_iommu *iommu)
@@ -1081,12 +1088,18 @@ static int vfio_dma_do_map(struct vfio_iommu *iommu, · 239 unmodified lines
1081 goto out_unlock;1088 goto out_unlock;
1082 }1089 }
1083 1090
1091 if (!iommu->dma_avail) {
1092 ret = -ENOSPC;
1093 goto out_unlock;
1094 }
1095
1084 dma = kzalloc(sizeof(*dma), GFP_KERNEL);1096 dma = kzalloc(sizeof(*dma), GFP_KERNEL);
1085 if (!dma) {1097 if (!dma) {
1086 ret = -ENOMEM;1098 ret = -ENOMEM;
1087 goto out_unlock;1099 goto out_unlock;
1088 }1100 }
1089 1101
1102 iommu->dma_avail--;
1090 dma->iova = iova;1103 dma->iova = iova;
1091 dma->vaddr = vaddr;1104 dma->vaddr = vaddr;
1092 dma->prot = prot;1105 dma->prot = prot;
@@ -1583,6 +1596,7 @@ static void *vfio_iommu_type1_open(unsigned long arg) · 490 unmodified lines
1583 1596
1584 INIT_LIST_HEAD(&iommu->domain_list);1597 INIT_LIST_HEAD(&iommu->domain_list);
1585 iommu->dma_list = RB_ROOT;1598 iommu->dma_list = RB_ROOT;
1599 iommu->dma_avail = dma_entry_limit;
1586 mutex_init(&iommu->lock);1600 mutex_init(&iommu->lock);
1587 BLOCKING_INIT_NOTIFIER_HEAD(&iommu->notifier);1601 BLOCKING_INIT_NOTIFIER_HEAD(&iommu->notifier);
1588 1602
drivers/vhost/vhost.c+5−1
@@ -911,8 +911,12 @@ static int vhost_new_umem_range(struct vhost_umem *umem, · 910 unmodified lines
911 u64 start, u64 size, u64 end,911 u64 start, u64 size, u64 end,
912 u64 userspace_addr, int perm)912 u64 userspace_addr, int perm)
913{913{
914 struct vhost_umem_node *tmp, *node = kmalloc(sizeof(*node), GFP_ATOMIC);914 struct vhost_umem_node *tmp, *node;
915 915
916 if (!size)
917 return -EFAULT;
918
919 node = kmalloc(sizeof(*node), GFP_ATOMIC);
916 if (!node)920 if (!node)
917 return -ENOMEM;921 return -ENOMEM;
918 922
drivers/virtio/virtio_pci_common.c+5−3
@@ -255,9 +255,11 @@ void vp_del_vqs(struct virtio_device *vdev) · 254 unmodified lines
255 for (i = 0; i < vp_dev->msix_used_vectors; ++i)255 for (i = 0; i < vp_dev->msix_used_vectors; ++i)
256 free_irq(pci_irq_vector(vp_dev->pci_dev, i), vp_dev);256 free_irq(pci_irq_vector(vp_dev->pci_dev, i), vp_dev);
257 257
258 for (i = 0; i < vp_dev->msix_vectors; i++)258 if (vp_dev->msix_affinity_masks) {
259 if (vp_dev->msix_affinity_masks[i])259 for (i = 0; i < vp_dev->msix_vectors; i++)
260 free_cpumask_var(vp_dev->msix_affinity_masks[i]);260 if (vp_dev->msix_affinity_masks[i])
261 free_cpumask_var(vp_dev->msix_affinity_masks[i]);
262 }
261 263
262 if (vp_dev->msix_enabled) {264 if (vp_dev->msix_enabled) {
263 /* Disable the vector used for configuration */265 /* Disable the vector used for configuration */
drivers/virtio/virtio_ring.c+2−0
@@ -882,6 +882,8 @@ static struct virtqueue *vring_create_virtqueue_split( · 881 unmodified lines
882 GFP_KERNEL|__GFP_NOWARN|__GFP_ZERO);882 GFP_KERNEL|__GFP_NOWARN|__GFP_ZERO);
883 if (queue)883 if (queue)
884 break;884 break;
885 if (!may_reduce_num)
886 return NULL;
885 }887 }
886 888
887 if (!num)889 if (!num)
drivers/xen/privcmd-buf.c+1−2
@@ -140,8 +140,7 @@ static int privcmd_buf_mmap(struct file *file, struct vm_area_struct *vma) · 139 unmodified lines
140 if (!(vma->vm_flags & VM_SHARED))140 if (!(vma->vm_flags & VM_SHARED))
141 return -EINVAL;141 return -EINVAL;
142 142
143 vma_priv = kzalloc(sizeof(*vma_priv) + count * sizeof(void *),143 vma_priv = kzalloc(struct_size(vma_priv, pages, count), GFP_KERNEL);
144 GFP_KERNEL);
145 if (!vma_priv)144 if (!vma_priv)
146 return -ENOMEM;145 return -ENOMEM;
147 146
drivers/xen/xenbus/xenbus_dev_frontend.c+1−3
@@ -622,9 +622,7 @@ static int xenbus_file_open(struct inode *inode, struct file *filp) · 621 unmodified lines
622 if (xen_store_evtchn == 0)622 if (xen_store_evtchn == 0)
623 return -ENOENT;623 return -ENOENT;
624 624
625 nonseekable_open(inode, filp);625 stream_open(inode, filp);
626
627 filp->f_mode &= ~FMODE_ATOMIC_POS; /* cdev-style semantics */
628 626
629 u = kzalloc(sizeof(*u), GFP_KERNEL);627 u = kzalloc(sizeof(*u), GFP_KERNEL);
630 if (u == NULL)628 if (u == NULL)
fs/afs/callback.c+1−2
@@ -203,8 +203,7 @@ void afs_put_cb_interest(struct afs_net *net, struct afs_cb_interest *cbi) · 202 unmodified lines
203 */203 */
204void afs_init_callback_state(struct afs_server *server)204void afs_init_callback_state(struct afs_server *server)
205{205{
206 if (!test_and_clear_bit(AFS_SERVER_FL_NEW, &server->flags))206 server->cb_s_break++;
207 server->cb_s_break++;
208}207}
209 208
210/*209/*
fs/afs/cmservice.c+1−1
@@ -34,7 +34,7 @@ static void SRXAFSCB_TellMeAboutYourself(struct work_struct *); · 33 unmodified lines
34static int afs_deliver_yfs_cb_callback(struct afs_call *);34static int afs_deliver_yfs_cb_callback(struct afs_call *);
35 35
36#define CM_NAME(name) \36#define CM_NAME(name) \
37 const char afs_SRXCB##name##_name[] __tracepoint_string = \37 char afs_SRXCB##name##_name[] __tracepoint_string = \
38 "CB." #name38 "CB." #name
39 39
40/*40/*
fs/afs/inode.c+1−3
@@ -216,9 +216,7 @@ struct inode *afs_iget_pseudo_dir(struct super_block *sb, bool root) · 215 unmodified lines
216 set_nlink(inode, 2);216 set_nlink(inode, 2);
217 inode->i_uid = GLOBAL_ROOT_UID;217 inode->i_uid = GLOBAL_ROOT_UID;
218 inode->i_gid = GLOBAL_ROOT_GID;218 inode->i_gid = GLOBAL_ROOT_GID;
219 inode->i_ctime.tv_sec = get_seconds();219 inode->i_ctime = inode->i_atime = inode->i_mtime = current_time(inode);
220 inode->i_ctime.tv_nsec = 0;
221 inode->i_atime = inode->i_mtime = inode->i_ctime;
222 inode->i_blocks = 0;220 inode->i_blocks = 0;
223 inode_set_iversion_raw(inode, 0);221 inode_set_iversion_raw(inode, 0);
224 inode->i_generation = 0;222 inode->i_generation = 0;
fs/afs/internal.h+1−3
@@ -474,7 +474,6 @@ struct afs_server { · 473 unmodified lines
474 time64_t put_time; /* Time at which last put */474 time64_t put_time; /* Time at which last put */
475 time64_t update_at; /* Time at which to next update the record */475 time64_t update_at; /* Time at which to next update the record */
476 unsigned long flags;476 unsigned long flags;
477#define AFS_SERVER_FL_NEW 0 /* New server, don't inc cb_s_break */
478#define AFS_SERVER_FL_NOT_READY 1 /* The record is not ready for use */477#define AFS_SERVER_FL_NOT_READY 1 /* The record is not ready for use */
479#define AFS_SERVER_FL_NOT_FOUND 2 /* VL server says no such server */478#define AFS_SERVER_FL_NOT_FOUND 2 /* VL server says no such server */
480#define AFS_SERVER_FL_VL_FAIL 3 /* Failed to access VL server */479#define AFS_SERVER_FL_VL_FAIL 3 /* Failed to access VL server */
@@ -827,7 +826,7 @@ static inline struct afs_cb_interest *afs_get_cb_interest(struct afs_cb_interest · 346 unmodified lines
827 826
828static inline unsigned int afs_calc_vnode_cb_break(struct afs_vnode *vnode)827static inline unsigned int afs_calc_vnode_cb_break(struct afs_vnode *vnode)
829{828{
830 return vnode->cb_break + vnode->cb_s_break + vnode->cb_v_break;829 return vnode->cb_break + vnode->cb_v_break;
831}830}
832 831
833static inline bool afs_cb_is_broken(unsigned int cb_break,832static inline bool afs_cb_is_broken(unsigned int cb_break,
@@ -835,7 +834,6 @@ static inline bool afs_cb_is_broken(unsigned int cb_break, · 1 unmodified line
835 const struct afs_cb_interest *cbi)834 const struct afs_cb_interest *cbi)
836{835{
837 return !cbi || cb_break != (vnode->cb_break +836 return !cbi || cb_break != (vnode->cb_break +
838 cbi->server->cb_s_break +
839 vnode->volume->cb_v_break);837 vnode->volume->cb_v_break);
840}838}
841 839
fs/afs/rxrpc.c+22−8
@@ -572,13 +572,17 @@ static void afs_deliver_to_call(struct afs_call *call) · 571 unmodified lines
572 case -ENODATA:572 case -ENODATA:
573 case -EBADMSG:573 case -EBADMSG:
574 case -EMSGSIZE:574 case -EMSGSIZE:
575 default:
576 abort_code = RXGEN_CC_UNMARSHAL;575 abort_code = RXGEN_CC_UNMARSHAL;
577 if (state != AFS_CALL_CL_AWAIT_REPLY)576 if (state != AFS_CALL_CL_AWAIT_REPLY)
578 abort_code = RXGEN_SS_UNMARSHAL;577 abort_code = RXGEN_SS_UNMARSHAL;
579 rxrpc_kernel_abort_call(call->net->socket, call->rxcall,578 rxrpc_kernel_abort_call(call->net->socket, call->rxcall,
580 abort_code, ret, "KUM");579 abort_code, ret, "KUM");
581 goto local_abort;580 goto local_abort;
581 default:
582 abort_code = RX_USER_ABORT;
583 rxrpc_kernel_abort_call(call->net->socket, call->rxcall,
584 abort_code, ret, "KER");
585 goto local_abort;
582 }586 }
583 }587 }
584 588
@@ -610,6 +614,7 @@ static long afs_wait_for_call_to_complete(struct afs_call *call, · 25 unmodified lines
610 bool stalled = false;614 bool stalled = false;
611 u64 rtt;615 u64 rtt;
612 u32 life, last_life;616 u32 life, last_life;
617 bool rxrpc_complete = false;
613 618
614 DECLARE_WAITQUEUE(myself, current);619 DECLARE_WAITQUEUE(myself, current);
615 620
@@ -621,7 +626,7 @@ static long afs_wait_for_call_to_complete(struct afs_call *call, · 5 unmodified lines
621 rtt2 = 2;626 rtt2 = 2;
622 627
623 timeout = rtt2;628 timeout = rtt2;
624 last_life = rxrpc_kernel_check_life(call->net->socket, call->rxcall);629 rxrpc_kernel_check_life(call->net->socket, call->rxcall, &last_life);
625 630
626 add_wait_queue(&call->waitq, &myself);631 add_wait_queue(&call->waitq, &myself);
627 for (;;) {632 for (;;) {
@@ -639,7 +644,12 @@ static long afs_wait_for_call_to_complete(struct afs_call *call, · 11 unmodified lines
639 if (afs_check_call_state(call, AFS_CALL_COMPLETE))644 if (afs_check_call_state(call, AFS_CALL_COMPLETE))
640 break;645 break;
641 646
642 life = rxrpc_kernel_check_life(call->net->socket, call->rxcall);647 if (!rxrpc_kernel_check_life(call->net->socket, call->rxcall, &life)) {
648 /* rxrpc terminated the call. */
649 rxrpc_complete = true;
650 break;
651 }
652
643 if (timeout == 0 &&653 if (timeout == 0 &&
644 life == last_life && signal_pending(current)) {654 life == last_life && signal_pending(current)) {
645 if (stalled)655 if (stalled)
@@ -663,12 +673,16 @@ static long afs_wait_for_call_to_complete(struct afs_call *call, · 17 unmodified lines
663 remove_wait_queue(&call->waitq, &myself);673 remove_wait_queue(&call->waitq, &myself);
664 __set_current_state(TASK_RUNNING);674 __set_current_state(TASK_RUNNING);
665 675
666 /* Kill off the call if it's still live. */
667 if (!afs_check_call_state(call, AFS_CALL_COMPLETE)) {676 if (!afs_check_call_state(call, AFS_CALL_COMPLETE)) {
668 _debug("call interrupted");677 if (rxrpc_complete) {
669 if (rxrpc_kernel_abort_call(call->net->socket, call->rxcall,678 afs_set_call_complete(call, call->error, call->abort_code);
670 RX_USER_ABORT, -EINTR, "KWI"))679 } else {
671 afs_set_call_complete(call, -EINTR, 0);680 /* Kill off the call if it's still live. */
681 _debug("call interrupted");
682 if (rxrpc_kernel_abort_call(call->net->socket, call->rxcall,
683 RX_USER_ABORT, -EINTR, "KWI"))
684 afs_set_call_complete(call, -EINTR, 0);
685 }
672 }686 }
673 687
674 spin_lock_bh(&call->state_lock);688 spin_lock_bh(&call->state_lock);
fs/afs/server.c+0−1
@@ -226,7 +226,6 @@ static struct afs_server *afs_alloc_server(struct afs_net *net, · 225 unmodified lines
226 RCU_INIT_POINTER(server->addresses, alist);226 RCU_INIT_POINTER(server->addresses, alist);
227 server->addr_version = alist->version;227 server->addr_version = alist->version;
228 server->uuid = *uuid;228 server->uuid = *uuid;
229 server->flags = (1UL << AFS_SERVER_FL_NEW);
230 server->update_at = ktime_get_real_seconds() + afs_server_update_delay;229 server->update_at = ktime_get_real_seconds() + afs_server_update_delay;
231 rwlock_init(&server->fs_lock);230 rwlock_init(&server->fs_lock);
232 INIT_HLIST_HEAD(&server->cb_volumes);231 INIT_HLIST_HEAD(&server->cb_volumes);
fs/afs/write.c+1−0
@@ -264,6 +264,7 @@ static void afs_kill_pages(struct address_space *mapping, · 263 unmodified lines
264 first = page->index + 1;264 first = page->index + 1;
265 lock_page(page);265 lock_page(page);
266 generic_error_remove_page(mapping, page);266 generic_error_remove_page(mapping, page);
267 unlock_page(page);
267 }268 }
268 269
269 __pagevec_release(&pv);270 __pagevec_release(&pv);
fs/aio.c+150−188
@@ -181,7 +181,7 @@ struct poll_iocb { · 180 unmodified lines
181 struct file *file;181 struct file *file;
182 struct wait_queue_head *head;182 struct wait_queue_head *head;
183 __poll_t events;183 __poll_t events;
184 bool woken;184 bool done;
185 bool cancelled;185 bool cancelled;
186 struct wait_queue_entry wait;186 struct wait_queue_entry wait;
187 struct work_struct work;187 struct work_struct work;
@@ -204,8 +204,7 @@ struct aio_kiocb { · 16 unmodified lines
204 struct kioctx *ki_ctx;204 struct kioctx *ki_ctx;
205 kiocb_cancel_fn *ki_cancel;205 kiocb_cancel_fn *ki_cancel;
206 206
207 struct iocb __user *ki_user_iocb; /* user's aiocb */207 struct io_event ki_res;
208 __u64 ki_user_data; /* user's data for completion */
209 208
210 struct list_head ki_list; /* the aio core uses this209 struct list_head ki_list; /* the aio core uses this
211 * for cancellation */210 * for cancellation */
@@ -1022,6 +1021,9 @@ static bool get_reqs_available(struct kioctx *ctx) · 810 unmodified lines
1022/* aio_get_req1021/* aio_get_req
1023 * Allocate a slot for an aio request.1022 * Allocate a slot for an aio request.
1024 * Returns NULL if no requests are free.1023 * Returns NULL if no requests are free.
1024 *
1025 * The refcount is initialized to 2 - one for the async op completion,
1026 * one for the synchronous code that does this.
1025 */1027 */
1026static inline struct aio_kiocb *aio_get_req(struct kioctx *ctx)1028static inline struct aio_kiocb *aio_get_req(struct kioctx *ctx)
1027{1029{
@@ -1031,10 +1033,15 @@ static inline struct aio_kiocb *aio_get_req(struct kioctx *ctx) · 3 unmodified lines
1031 if (unlikely(!req))1033 if (unlikely(!req))
1032 return NULL;1034 return NULL;
1033 1035
1036 if (unlikely(!get_reqs_available(ctx))) {
1037 kmem_cache_free(kiocb_cachep, req);
1038 return NULL;
1039 }
1040
1034 percpu_ref_get(&ctx->reqs);1041 percpu_ref_get(&ctx->reqs);
1035 req->ki_ctx = ctx;1042 req->ki_ctx = ctx;
1036 INIT_LIST_HEAD(&req->ki_list);1043 INIT_LIST_HEAD(&req->ki_list);
1037 refcount_set(&req->ki_refcnt, 0);1044 refcount_set(&req->ki_refcnt, 2);
1038 req->ki_eventfd = NULL;1045 req->ki_eventfd = NULL;
1039 return req;1046 return req;
1040}1047}
@@ -1067,30 +1074,20 @@ out: · 26 unmodified lines
1067 return ret;1074 return ret;
1068}1075}
1069 1076
1070static inline void iocb_put(struct aio_kiocb *iocb)1077static inline void iocb_destroy(struct aio_kiocb *iocb)
1071{
1072 if (refcount_read(&iocb->ki_refcnt) == 0 ||
1073 refcount_dec_and_test(&iocb->ki_refcnt)) {
1074 if (iocb->ki_filp)
1075 fput(iocb->ki_filp);
1076 percpu_ref_put(&iocb->ki_ctx->reqs);
1077 kmem_cache_free(kiocb_cachep, iocb);
1078 }
1079}
1080
1081static void aio_fill_event(struct io_event *ev, struct aio_kiocb *iocb,
1082 long res, long res2)
1083{1078{
1084 ev->obj = (u64)(unsigned long)iocb->ki_user_iocb;1079 if (iocb->ki_eventfd)
1085 ev->data = iocb->ki_user_data;1080 eventfd_ctx_put(iocb->ki_eventfd);
1086 ev->res = res;1081 if (iocb->ki_filp)
1087 ev->res2 = res2;1082 fput(iocb->ki_filp);
1083 percpu_ref_put(&iocb->ki_ctx->reqs);
1084 kmem_cache_free(kiocb_cachep, iocb);
1088}1085}
1089 1086
1090/* aio_complete1087/* aio_complete
1091 * Called when the io request on the given iocb is complete.1088 * Called when the io request on the given iocb is complete.
1092 */1089 */
1093static void aio_complete(struct aio_kiocb *iocb, long res, long res2)1090static void aio_complete(struct aio_kiocb *iocb)
1094{1091{
1095 struct kioctx *ctx = iocb->ki_ctx;1092 struct kioctx *ctx = iocb->ki_ctx;
1096 struct aio_ring *ring;1093 struct aio_ring *ring;
@@ -1114,14 +1111,14 @@ static void aio_complete(struct aio_kiocb *iocb, long res, long res2) · 17 unmodified lines
1114 ev_page = kmap_atomic(ctx->ring_pages[pos / AIO_EVENTS_PER_PAGE]);1111 ev_page = kmap_atomic(ctx->ring_pages[pos / AIO_EVENTS_PER_PAGE]);
1115 event = ev_page + pos % AIO_EVENTS_PER_PAGE;1112 event = ev_page + pos % AIO_EVENTS_PER_PAGE;
1116 1113
1117 aio_fill_event(event, iocb, res, res2);1114 *event = iocb->ki_res;
1118 1115
1119 kunmap_atomic(ev_page);1116 kunmap_atomic(ev_page);
1120 flush_dcache_page(ctx->ring_pages[pos / AIO_EVENTS_PER_PAGE]);1117 flush_dcache_page(ctx->ring_pages[pos / AIO_EVENTS_PER_PAGE]);
1121 1118
1122 pr_debug("%p[%u]: %p: %p %Lx %lx %lx\n",1119 pr_debug("%p[%u]: %p: %p %Lx %Lx %Lx\n", ctx, tail, iocb,
1123 ctx, tail, iocb, iocb->ki_user_iocb, iocb->ki_user_data,1120 (void __user *)(unsigned long)iocb->ki_res.obj,
1124 res, res2);1121 iocb->ki_res.data, iocb->ki_res.res, iocb->ki_res.res2);
1125 1122
1126 /* after flagging the request as done, we1123 /* after flagging the request as done, we
1127 * must never even look at it again1124 * must never even look at it again
@@ -1148,10 +1145,8 @@ static void aio_complete(struct aio_kiocb *iocb, long res, long res2) · 20 unmodified lines
1148 * eventfd. The eventfd_signal() function is safe to be called1145 * eventfd. The eventfd_signal() function is safe to be called
1149 * from IRQ context.1146 * from IRQ context.
1150 */1147 */
1151 if (iocb->ki_eventfd) {1148 if (iocb->ki_eventfd)
1152 eventfd_signal(iocb->ki_eventfd, 1);1149 eventfd_signal(iocb->ki_eventfd, 1);
1153 eventfd_ctx_put(iocb->ki_eventfd);
1154 }
1155 1150
1156 /*1151 /*
1157 * We have to order our ring_info tail store above and test1152 * We have to order our ring_info tail store above and test
@@ -1163,7 +1158,14 @@ static void aio_complete(struct aio_kiocb *iocb, long res, long res2) · 5 unmodified lines
1163 1158
1164 if (waitqueue_active(&ctx->wait))1159 if (waitqueue_active(&ctx->wait))
1165 wake_up(&ctx->wait);1160 wake_up(&ctx->wait);
1166 iocb_put(iocb);1161}
1162
1163static inline void iocb_put(struct aio_kiocb *iocb)
1164{
1165 if (refcount_dec_and_test(&iocb->ki_refcnt)) {
1166 aio_complete(iocb);
1167 iocb_destroy(iocb);
1168 }
1167}1169}
1168 1170
1169/* aio_read_events_ring1171/* aio_read_events_ring
@@ -1437,7 +1439,9 @@ static void aio_complete_rw(struct kiocb *kiocb, long res, long res2) · 267 unmodified lines
1437 file_end_write(kiocb->ki_filp);1439 file_end_write(kiocb->ki_filp);
1438 }1440 }
1439 1441
1440 aio_complete(iocb, res, res2);1442 iocb->ki_res.res = res;
1443 iocb->ki_res.res2 = res2;
1444 iocb_put(iocb);
1441}1445}
1442 1446
1443static int aio_prep_rw(struct kiocb *req, const struct iocb *iocb)1447static int aio_prep_rw(struct kiocb *req, const struct iocb *iocb)
@@ -1514,13 +1518,13 @@ static inline void aio_rw_done(struct kiocb *req, ssize_t ret) · 70 unmodified lines
1514 }1518 }
1515}1519}
1516 1520
1517static ssize_t aio_read(struct kiocb *req, const struct iocb *iocb,1521static int aio_read(struct kiocb *req, const struct iocb *iocb,
1518 bool vectored, bool compat)1522 bool vectored, bool compat)
1519{1523{
1520 struct iovec inline_vecs[UIO_FASTIOV], *iovec = inline_vecs;1524 struct iovec inline_vecs[UIO_FASTIOV], *iovec = inline_vecs;
1521 struct iov_iter iter;1525 struct iov_iter iter;
1522 struct file *file;1526 struct file *file;
1523 ssize_t ret;1527 int ret;
1524 1528
1525 ret = aio_prep_rw(req, iocb);1529 ret = aio_prep_rw(req, iocb);
1526 if (ret)1530 if (ret)
@@ -1542,13 +1546,13 @@ static ssize_t aio_read(struct kiocb *req, const struct iocb *iocb, · 15 unmodified lines
1542 return ret;1546 return ret;
1543}1547}
1544 1548
1545static ssize_t aio_write(struct kiocb *req, const struct iocb *iocb,1549static int aio_write(struct kiocb *req, const struct iocb *iocb,
1546 bool vectored, bool compat)1550 bool vectored, bool compat)
1547{1551{
1548 struct iovec inline_vecs[UIO_FASTIOV], *iovec = inline_vecs;1552 struct iovec inline_vecs[UIO_FASTIOV], *iovec = inline_vecs;
1549 struct iov_iter iter;1553 struct iov_iter iter;
1550 struct file *file;1554 struct file *file;
1551 ssize_t ret;1555 int ret;
1552 1556
1553 ret = aio_prep_rw(req, iocb);1557 ret = aio_prep_rw(req, iocb);
1554 if (ret)1558 if (ret)
@@ -1585,11 +1589,10 @@ static ssize_t aio_write(struct kiocb *req, const struct iocb *iocb, · 30 unmodified lines
1585 1589
1586static void aio_fsync_work(struct work_struct *work)1590static void aio_fsync_work(struct work_struct *work)
1587{1591{
1588 struct fsync_iocb *req = container_of(work, struct fsync_iocb, work);1592 struct aio_kiocb *iocb = container_of(work, struct aio_kiocb, fsync.work);
1589 int ret;
1590 1593
1591 ret = vfs_fsync(req->file, req->datasync);1594 iocb->ki_res.res = vfs_fsync(iocb->fsync.file, iocb->fsync.datasync);
1592 aio_complete(container_of(req, struct aio_kiocb, fsync), ret, 0);1595 iocb_put(iocb);
1593}1596}
1594 1597
1595static int aio_fsync(struct fsync_iocb *req, const struct iocb *iocb,1598static int aio_fsync(struct fsync_iocb *req, const struct iocb *iocb,
@@ -1608,11 +1611,6 @@ static int aio_fsync(struct fsync_iocb *req, const struct iocb *iocb, · 12 unmodified lines
1608 return 0;1611 return 0;
1609}1612}
1610 1613
1611static inline void aio_poll_complete(struct aio_kiocb *iocb, __poll_t mask)
1612{
1613 aio_complete(iocb, mangle_poll(mask), 0);
1614}
1615
1616static void aio_poll_complete_work(struct work_struct *work)1614static void aio_poll_complete_work(struct work_struct *work)
1617{1615{
1618 struct poll_iocb *req = container_of(work, struct poll_iocb, work);1616 struct poll_iocb *req = container_of(work, struct poll_iocb, work);
@@ -1638,9 +1636,11 @@ static void aio_poll_complete_work(struct work_struct *work) · 19 unmodified lines
1638 return;1636 return;
1639 }1637 }
1640 list_del_init(&iocb->ki_list);1638 list_del_init(&iocb->ki_list);
1639 iocb->ki_res.res = mangle_poll(mask);
1640 req->done = true;
1641 spin_unlock_irq(&ctx->ctx_lock);1641 spin_unlock_irq(&ctx->ctx_lock);
1642 1642
1643 aio_poll_complete(iocb, mask);1643 iocb_put(iocb);
1644}1644}
1645 1645
1646/* assumes we are called with irqs disabled */1646/* assumes we are called with irqs disabled */
@@ -1668,31 +1668,27 @@ static int aio_poll_wake(struct wait_queue_entry *wait, unsigned mode, int sync, · 21 unmodified lines
1668 __poll_t mask = key_to_poll(key);1668 __poll_t mask = key_to_poll(key);
1669 unsigned long flags;1669 unsigned long flags;
1670 1670
1671 req->woken = true;
1672
1673 /* for instances that support it check for an event match first: */1671 /* for instances that support it check for an event match first: */
1674 if (mask) {1672 if (mask && !(mask & req->events))
1675 if (!(mask & req->events))1673 return 0;
1676 return 0;1674
1675 list_del_init(&req->wait.entry);
1677 1676
1677 if (mask && spin_trylock_irqsave(&iocb->ki_ctx->ctx_lock, flags)) {
1678 /*1678 /*
1679 * Try to complete the iocb inline if we can. Use1679 * Try to complete the iocb inline if we can. Use
1680 * irqsave/irqrestore because not all filesystems (e.g. fuse)1680 * irqsave/irqrestore because not all filesystems (e.g. fuse)
1681 * call this function with IRQs disabled and because IRQs1681 * call this function with IRQs disabled and because IRQs
1682 * have to be disabled before ctx_lock is obtained.1682 * have to be disabled before ctx_lock is obtained.
1683 */1683 */
1684 if (spin_trylock_irqsave(&iocb->ki_ctx->ctx_lock, flags)) {1684 list_del(&iocb->ki_list);
1685 list_del(&iocb->ki_list);1685 iocb->ki_res.res = mangle_poll(mask);
1686 spin_unlock_irqrestore(&iocb->ki_ctx->ctx_lock, flags);1686 req->done = true;
1687 1687 spin_unlock_irqrestore(&iocb->ki_ctx->ctx_lock, flags);
1688 list_del_init(&req->wait.entry);1688 iocb_put(iocb);
1689 aio_poll_complete(iocb, mask);1689 } else {
1690 return 1;1690 schedule_work(&req->work);
1691 }
1692 }1691 }
1693
1694 list_del_init(&req->wait.entry);
1695 schedule_work(&req->work);
1696 return 1;1692 return 1;
1697}1693}
1698 1694
@@ -1719,11 +1715,12 @@ aio_poll_queue_proc(struct file *file, struct wait_queue_head *head, · 20 unmodified lines
1719 add_wait_queue(head, &pt->iocb->poll.wait);1715 add_wait_queue(head, &pt->iocb->poll.wait);
1720}1716}
1721 1717
1722static ssize_t aio_poll(struct aio_kiocb *aiocb, const struct iocb *iocb)1718static int aio_poll(struct aio_kiocb *aiocb, const struct iocb *iocb)
1723{1719{
1724 struct kioctx *ctx = aiocb->ki_ctx;1720 struct kioctx *ctx = aiocb->ki_ctx;
1725 struct poll_iocb *req = &aiocb->poll;1721 struct poll_iocb *req = &aiocb->poll;
1726 struct aio_poll_table apt;1722 struct aio_poll_table apt;
1723 bool cancel = false;
1727 __poll_t mask;1724 __poll_t mask;
1728 1725
1729 /* reject any unknown events outside the normal event mask. */1726 /* reject any unknown events outside the normal event mask. */
@@ -1737,7 +1734,7 @@ static ssize_t aio_poll(struct aio_kiocb *aiocb, const struct iocb *iocb) · 7 unmodified lines
1737 req->events = demangle_poll(iocb->aio_buf) | EPOLLERR | EPOLLHUP;1734 req->events = demangle_poll(iocb->aio_buf) | EPOLLERR | EPOLLHUP;
1738 1735
1739 req->head = NULL;1736 req->head = NULL;
1740 req->woken = false;1737 req->done = false;
1741 req->cancelled = false;1738 req->cancelled = false;
1742 1739
1743 apt.pt._qproc = aio_poll_queue_proc;1740 apt.pt._qproc = aio_poll_queue_proc;
@@ -1749,156 +1746,135 @@ static ssize_t aio_poll(struct aio_kiocb *aiocb, const struct iocb *iocb) · 5 unmodified lines
1749 INIT_LIST_HEAD(&req->wait.entry);1746 INIT_LIST_HEAD(&req->wait.entry);
1750 init_waitqueue_func_entry(&req->wait, aio_poll_wake);1747 init_waitqueue_func_entry(&req->wait, aio_poll_wake);
1751 1748
1752 /* one for removal from waitqueue, one for this function */
1753 refcount_set(&aiocb->ki_refcnt, 2);
1754
1755 mask = vfs_poll(req->file, &apt.pt) & req->events;1749 mask = vfs_poll(req->file, &apt.pt) & req->events;
1756 if (unlikely(!req->head)) {
1757 /* we did not manage to set up a waitqueue, done */
1758 goto out;
1759 }
1760
1761 spin_lock_irq(&ctx->ctx_lock);1750 spin_lock_irq(&ctx->ctx_lock);
1762 spin_lock(&req->head->lock);1751 if (likely(req->head)) {
1763 if (req->woken) {1752 spin_lock(&req->head->lock);
1764 /* wake_up context handles the rest */1753 if (unlikely(list_empty(&req->wait.entry))) {
1765 mask = 0;1754 if (apt.error)
1755 cancel = true;
1756 apt.error = 0;
1757 mask = 0;
1758 }
1759 if (mask || apt.error) {
1760 list_del_init(&req->wait.entry);
1761 } else if (cancel) {
1762 WRITE_ONCE(req->cancelled, true);
1763 } else if (!req->done) { /* actually waiting for an event */
1764 list_add_tail(&aiocb->ki_list, &ctx->active_reqs);
1765 aiocb->ki_cancel = aio_poll_cancel;
1766 }
1767 spin_unlock(&req->head->lock);
1768 }
1769 if (mask) { /* no async, we'd stolen it */
1770 aiocb->ki_res.res = mangle_poll(mask);
1766 apt.error = 0;1771 apt.error = 0;
1767 } else if (mask || apt.error) {
1768 /* if we get an error or a mask we are done */
1769 WARN_ON_ONCE(list_empty(&req->wait.entry));
1770 list_del_init(&req->wait.entry);
1771 } else {
1772 /* actually waiting for an event */
1773 list_add_tail(&aiocb->ki_list, &ctx->active_reqs);
1774 aiocb->ki_cancel = aio_poll_cancel;
1775 }1772 }
1776 spin_unlock(&req->head->lock);
1777 spin_unlock_irq(&ctx->ctx_lock);1773 spin_unlock_irq(&ctx->ctx_lock);
1778
1779out:
1780 if (unlikely(apt.error))
1781 return apt.error;
1782
1783 if (mask)1774 if (mask)
1784 aio_poll_complete(aiocb, mask);1775 iocb_put(aiocb);
1785 iocb_put(aiocb);1776 return apt.error;
1786 return 0;
1787}1777}
1788 1778
1789static int __io_submit_one(struct kioctx *ctx, const struct iocb *iocb,1779static int __io_submit_one(struct kioctx *ctx, const struct iocb *iocb,
1790 struct iocb __user *user_iocb, bool compat)1780 struct iocb __user *user_iocb, struct aio_kiocb *req,
1781 bool compat)
1791{1782{
1792 struct aio_kiocb *req;
1793 ssize_t ret;
1794
1795 /* enforce forwards compatibility on users */
1796 if (unlikely(iocb->aio_reserved2)) {
1797 pr_debug("EINVAL: reserve field set\n");
1798 return -EINVAL;
1799 }
1800
1801 /* prevent overflows */
1802 if (unlikely(
1803 (iocb->aio_buf != (unsigned long)iocb->aio_buf) ||
1804 (iocb->aio_nbytes != (size_t)iocb->aio_nbytes) ||
1805 ((ssize_t)iocb->aio_nbytes < 0)
1806 )) {
1807 pr_debug("EINVAL: overflow check\n");
1808 return -EINVAL;
1809 }
1810
1811 if (!get_reqs_available(ctx))
1812 return -EAGAIN;
1813
1814 ret = -EAGAIN;
1815 req = aio_get_req(ctx);
1816 if (unlikely(!req))
1817 goto out_put_reqs_available;
1818
1819 req->ki_filp = fget(iocb->aio_fildes);1783 req->ki_filp = fget(iocb->aio_fildes);
1820 ret = -EBADF;
1821 if (unlikely(!req->ki_filp))1784 if (unlikely(!req->ki_filp))
1822 goto out_put_req;1785 return -EBADF;
1823 1786
1824 if (iocb->aio_flags & IOCB_FLAG_RESFD) {1787 if (iocb->aio_flags & IOCB_FLAG_RESFD) {
1788 struct eventfd_ctx *eventfd;
1825 /*1789 /*
1826 * If the IOCB_FLAG_RESFD flag of aio_flags is set, get an1790 * If the IOCB_FLAG_RESFD flag of aio_flags is set, get an
1827 * instance of the file* now. The file descriptor must be1791 * instance of the file* now. The file descriptor must be
1828 * an eventfd() fd, and will be signaled for each completed1792 * an eventfd() fd, and will be signaled for each completed
1829 * event using the eventfd_signal() function.1793 * event using the eventfd_signal() function.
1830 */1794 */
1831 req->ki_eventfd = eventfd_ctx_fdget((int) iocb->aio_resfd);1795 eventfd = eventfd_ctx_fdget(iocb->aio_resfd);
1832 if (IS_ERR(req->ki_eventfd)) {1796 if (IS_ERR(eventfd))
1833 ret = PTR_ERR(req->ki_eventfd);1797 return PTR_ERR(eventfd);
1834 req->ki_eventfd = NULL;1798
1835 goto out_put_req;1799 req->ki_eventfd = eventfd;
1836 }
1837 }1800 }
1838 1801
1839 ret = put_user(KIOCB_KEY, &user_iocb->aio_key);1802 if (unlikely(put_user(KIOCB_KEY, &user_iocb->aio_key))) {
1840 if (unlikely(ret)) {
1841 pr_debug("EFAULT: aio_key\n");1803 pr_debug("EFAULT: aio_key\n");
1842 goto out_put_req;1804 return -EFAULT;
1843 }1805 }
1844 1806
1845 req->ki_user_iocb = user_iocb;1807 req->ki_res.obj = (u64)(unsigned long)user_iocb;
1846 req->ki_user_data = iocb->aio_data;1808 req->ki_res.data = iocb->aio_data;
1809 req->ki_res.res = 0;
1810 req->ki_res.res2 = 0;
1847 1811
1848 switch (iocb->aio_lio_opcode) {1812 switch (iocb->aio_lio_opcode) {
1849 case IOCB_CMD_PREAD:1813 case IOCB_CMD_PREAD:
1850 ret = aio_read(&req->rw, iocb, false, compat);1814 return aio_read(&req->rw, iocb, false, compat);
1851 break;
1852 case IOCB_CMD_PWRITE:1815 case IOCB_CMD_PWRITE:
1853 ret = aio_write(&req->rw, iocb, false, compat);1816 return aio_write(&req->rw, iocb, false, compat);
1854 break;
1855 case IOCB_CMD_PREADV:1817 case IOCB_CMD_PREADV:
1856 ret = aio_read(&req->rw, iocb, true, compat);1818 return aio_read(&req->rw, iocb, true, compat);
1857 break;
1858 case IOCB_CMD_PWRITEV:1819 case IOCB_CMD_PWRITEV:
1859 ret = aio_write(&req->rw, iocb, true, compat);1820 return aio_write(&req->rw, iocb, true, compat);
1860 break;
1861 case IOCB_CMD_FSYNC:1821 case IOCB_CMD_FSYNC:
1862 ret = aio_fsync(&req->fsync, iocb, false);1822 return aio_fsync(&req->fsync, iocb, false);
1863 break;
1864 case IOCB_CMD_FDSYNC:1823 case IOCB_CMD_FDSYNC:
1865 ret = aio_fsync(&req->fsync, iocb, true);1824 return aio_fsync(&req->fsync, iocb, true);
1866 break;
1867 case IOCB_CMD_POLL:1825 case IOCB_CMD_POLL:
1868 ret = aio_poll(req, iocb);1826 return aio_poll(req, iocb);
1869 break;
1870 default:1827 default:
1871 pr_debug("invalid aio operation %d\n", iocb->aio_lio_opcode);1828 pr_debug("invalid aio operation %d\n", iocb->aio_lio_opcode);
1872 ret = -EINVAL;1829 return -EINVAL;
1873 break;
1874 }1830 }
1875
1876 /*
1877 * If ret is 0, we'd either done aio_complete() ourselves or have
1878 * arranged for that to be done asynchronously. Anything non-zero
1879 * means that we need to destroy req ourselves.
1880 */
1881 if (ret)
1882 goto out_put_req;
1883 return 0;
1884out_put_req:
1885 if (req->ki_eventfd)
1886 eventfd_ctx_put(req->ki_eventfd);
1887 iocb_put(req);
1888out_put_reqs_available:
1889 put_reqs_available(ctx, 1);
1890 return ret;
1891}1831}
1892 1832
1893static int io_submit_one(struct kioctx *ctx, struct iocb __user *user_iocb,1833static int io_submit_one(struct kioctx *ctx, struct iocb __user *user_iocb,
1894 bool compat)1834 bool compat)
1895{1835{
1836 struct aio_kiocb *req;
1896 struct iocb iocb;1837 struct iocb iocb;
1838 int err;
1897 1839
1898 if (unlikely(copy_from_user(&iocb, user_iocb, sizeof(iocb))))1840 if (unlikely(copy_from_user(&iocb, user_iocb, sizeof(iocb))))
1899 return -EFAULT;1841 return -EFAULT;
1900 1842
1901 return __io_submit_one(ctx, &iocb, user_iocb, compat);1843 /* enforce forwards compatibility on users */
1844 if (unlikely(iocb.aio_reserved2)) {
1845 pr_debug("EINVAL: reserve field set\n");
1846 return -EINVAL;
1847 }
1848
1849 /* prevent overflows */
1850 if (unlikely(
1851 (iocb.aio_buf != (unsigned long)iocb.aio_buf) ||
1852 (iocb.aio_nbytes != (size_t)iocb.aio_nbytes) ||
1853 ((ssize_t)iocb.aio_nbytes < 0)
1854 )) {
1855 pr_debug("EINVAL: overflow check\n");
1856 return -EINVAL;
1857 }
1858
1859 req = aio_get_req(ctx);
1860 if (unlikely(!req))
1861 return -EAGAIN;
1862
1863 err = __io_submit_one(ctx, &iocb, user_iocb, req, compat);
1864
1865 /* Done with the synchronous reference */
1866 iocb_put(req);
1867
1868 /*
1869 * If err is 0, we'd either done aio_complete() ourselves or have
1870 * arranged for that to be done asynchronously. Anything non-zero
1871 * means that we need to destroy req ourselves.
1872 */
1873 if (unlikely(err)) {
1874 iocb_destroy(req);
1875 put_reqs_available(ctx, 1);
1876 }
1877 return err;
1902}1878}
1903 1879
1904/* sys_io_submit:1880/* sys_io_submit:
@@ -1997,24 +1973,6 @@ COMPAT_SYSCALL_DEFINE3(io_submit, compat_aio_context_t, ctx_id, · 92 unmodified lines
1997}1973}
1998#endif1974#endif
1999 1975
2000/* lookup_kiocb
2001 * Finds a given iocb for cancellation.
2002 */
2003static struct aio_kiocb *
2004lookup_kiocb(struct kioctx *ctx, struct iocb __user *iocb)
2005{
2006 struct aio_kiocb *kiocb;
2007
2008 assert_spin_locked(&ctx->ctx_lock);
2009
2010 /* TODO: use a hash or array, this sucks. */
2011 list_for_each_entry(kiocb, &ctx->active_reqs, ki_list) {
2012 if (kiocb->ki_user_iocb == iocb)
2013 return kiocb;
2014 }
2015 return NULL;
2016}
2017
2018/* sys_io_cancel:1976/* sys_io_cancel:
2019 * Attempts to cancel an iocb previously passed to io_submit. If1977 * Attempts to cancel an iocb previously passed to io_submit. If
2020 * the operation is successfully cancelled, the resulting event is1978 * the operation is successfully cancelled, the resulting event is
@@ -2032,6 +1990,7 @@ SYSCALL_DEFINE3(io_cancel, aio_context_t, ctx_id, struct iocb __user *, iocb, · 11 unmodified lines
2032 struct aio_kiocb *kiocb;1990 struct aio_kiocb *kiocb;
2033 int ret = -EINVAL;1991 int ret = -EINVAL;
2034 u32 key;1992 u32 key;
1993 u64 obj = (u64)(unsigned long)iocb;
2035 1994
2036 if (unlikely(get_user(key, &iocb->aio_key)))1995 if (unlikely(get_user(key, &iocb->aio_key)))
2037 return -EFAULT;1996 return -EFAULT;
@@ -2043,10 +2002,13 @@ SYSCALL_DEFINE3(io_cancel, aio_context_t, ctx_id, struct iocb __user *, iocb, · 5 unmodified lines
2043 return -EINVAL;2002 return -EINVAL;
2044 2003
2045 spin_lock_irq(&ctx->ctx_lock);2004 spin_lock_irq(&ctx->ctx_lock);
2046 kiocb = lookup_kiocb(ctx, iocb);2005 /* TODO: use a hash or array, this sucks. */
2047 if (kiocb) {2006 list_for_each_entry(kiocb, &ctx->active_reqs, ki_list) {
2048 ret = kiocb->ki_cancel(&kiocb->rw);2007 if (kiocb->ki_res.obj == obj) {
2049 list_del_init(&kiocb->ki_list);2008 ret = kiocb->ki_cancel(&kiocb->rw);
2009 list_del_init(&kiocb->ki_list);
2010 break;
2011 }
2050 }2012 }
2051 spin_unlock_irq(&ctx->ctx_lock);2013 spin_unlock_irq(&ctx->ctx_lock);
2052 2014
fs/block_dev.c+4−4
@@ -307,10 +307,10 @@ static void blkdev_bio_end_io(struct bio *bio) · 306 unmodified lines
307 struct blkdev_dio *dio = bio->bi_private;307 struct blkdev_dio *dio = bio->bi_private;
308 bool should_dirty = dio->should_dirty;308 bool should_dirty = dio->should_dirty;
309 309
310 if (dio->multi_bio && !atomic_dec_and_test(&dio->ref)) {310 if (bio->bi_status && !dio->bio.bi_status)
311 if (bio->bi_status && !dio->bio.bi_status)311 dio->bio.bi_status = bio->bi_status;
312 dio->bio.bi_status = bio->bi_status;312
313 } else {313 if (!dio->multi_bio || atomic_dec_and_test(&dio->ref)) {
314 if (!dio->is_sync) {314 if (!dio->is_sync) {
315 struct kiocb *iocb = dio->iocb;315 struct kiocb *iocb = dio->iocb;
316 ssize_t ret;316 ssize_t ret;
fs/btrfs/ioctl.c+10−0
@@ -501,6 +501,16 @@ static noinline int btrfs_ioctl_fitrim(struct file *file, void __user *arg) · 500 unmodified lines
501 if (!capable(CAP_SYS_ADMIN))501 if (!capable(CAP_SYS_ADMIN))
502 return -EPERM;502 return -EPERM;
503 503
504 /*
505 * If the fs is mounted with nologreplay, which requires it to be
506 * mounted in RO mode as well, we can not allow discard on free space
507 * inside block groups, because log trees refer to extents that are not
508 * pinned in a block group's free space cache (pinning the extents is
509 * precisely the first phase of replaying a log tree).
510 */
511 if (btrfs_test_opt(fs_info, NOLOGREPLAY))
512 return -EROFS;
513
504 rcu_read_lock();514 rcu_read_lock();
505 list_for_each_entry_rcu(device, &fs_info->fs_devices->devices,515 list_for_each_entry_rcu(device, &fs_info->fs_devices->devices,
506 dev_list) {516 dev_list) {
fs/btrfs/props.c+4−4
@@ -366,11 +366,11 @@ int btrfs_subvol_inherit_props(struct btrfs_trans_handle *trans, · 365 unmodified lines
366 366
367static int prop_compression_validate(const char *value, size_t len)367static int prop_compression_validate(const char *value, size_t len)
368{368{
369 if (!strncmp("lzo", value, len))369 if (!strncmp("lzo", value, 3))
370 return 0;370 return 0;
371 else if (!strncmp("zlib", value, len))371 else if (!strncmp("zlib", value, 4))
372 return 0;372 return 0;
373 else if (!strncmp("zstd", value, len))373 else if (!strncmp("zstd", value, 4))
374 return 0;374 return 0;
375 375
376 return -EINVAL;376 return -EINVAL;
@@ -396,7 +396,7 @@ static int prop_compression_apply(struct inode *inode, · 19 unmodified lines
396 btrfs_set_fs_incompat(fs_info, COMPRESS_LZO);396 btrfs_set_fs_incompat(fs_info, COMPRESS_LZO);
397 } else if (!strncmp("zlib", value, 4)) {397 } else if (!strncmp("zlib", value, 4)) {
398 type = BTRFS_COMPRESS_ZLIB;398 type = BTRFS_COMPRESS_ZLIB;
399 } else if (!strncmp("zstd", value, len)) {399 } else if (!strncmp("zstd", value, 4)) {
400 type = BTRFS_COMPRESS_ZSTD;400 type = BTRFS_COMPRESS_ZSTD;
401 btrfs_set_fs_incompat(fs_info, COMPRESS_ZSTD);401 btrfs_set_fs_incompat(fs_info, COMPRESS_ZSTD);
402 } else {402 } else {
fs/cifs/cifsfs.c+2−0
@@ -559,6 +559,8 @@ cifs_show_options(struct seq_file *s, struct dentry *root) · 558 unmodified lines
559 tcon->ses->server->echo_interval / HZ);559 tcon->ses->server->echo_interval / HZ);
560 if (tcon->snapshot_time)560 if (tcon->snapshot_time)
561 seq_printf(s, ",snapshot=%llu", tcon->snapshot_time);561 seq_printf(s, ",snapshot=%llu", tcon->snapshot_time);
562 if (tcon->handle_timeout)
563 seq_printf(s, ",handletimeout=%u", tcon->handle_timeout);
562 /* convert actimeo and display it in seconds */564 /* convert actimeo and display it in seconds */
563 seq_printf(s, ",actimeo=%lu", cifs_sb->actimeo / HZ);565 seq_printf(s, ",actimeo=%lu", cifs_sb->actimeo / HZ);
564 566
fs/cifs/cifsglob.h+10−0
@@ -59,6 +59,12 @@ · 58 unmodified lines
59 */59 */
60#define CIFS_MAX_ACTIMEO (1 << 30)60#define CIFS_MAX_ACTIMEO (1 << 30)
61 61
62/*
63 * Max persistent and resilient handle timeout (milliseconds).
64 * Windows durable max was 960000 (16 minutes)
65 */
66#define SMB3_MAX_HANDLE_TIMEOUT 960000
67
62/*68/*
63 * MAX_REQ is the maximum number of requests that WE will send69 * MAX_REQ is the maximum number of requests that WE will send
64 * on one socket concurrently.70 * on one socket concurrently.
@@ -586,6 +592,7 @@ struct smb_vol { · 521 unmodified lines
586 struct nls_table *local_nls;592 struct nls_table *local_nls;
587 unsigned int echo_interval; /* echo interval in secs */593 unsigned int echo_interval; /* echo interval in secs */
588 __u64 snapshot_time; /* needed for timewarp tokens */594 __u64 snapshot_time; /* needed for timewarp tokens */
595 __u32 handle_timeout; /* persistent and durable handle timeout in ms */
589 unsigned int max_credits; /* smb3 max_credits 10 < credits < 60000 */596 unsigned int max_credits; /* smb3 max_credits 10 < credits < 60000 */
590};597};
591 598
@@ -1058,6 +1065,7 @@ struct cifs_tcon { · 466 unmodified lines
1058 __u32 vol_serial_number;1065 __u32 vol_serial_number;
1059 __le64 vol_create_time;1066 __le64 vol_create_time;
1060 __u64 snapshot_time; /* for timewarp tokens - timestamp of snapshot */1067 __u64 snapshot_time; /* for timewarp tokens - timestamp of snapshot */
1068 __u32 handle_timeout; /* persistent and durable handle timeout in ms */
1061 __u32 ss_flags; /* sector size flags */1069 __u32 ss_flags; /* sector size flags */
1062 __u32 perf_sector_size; /* best sector size for perf */1070 __u32 perf_sector_size; /* best sector size for perf */
1063 __u32 max_chunks;1071 __u32 max_chunks;
@@ -1325,6 +1333,7 @@ cifsFileInfo_get_locked(struct cifsFileInfo *cifs_file) · 261 unmodified lines
1325}1333}
1326 1334
1327struct cifsFileInfo *cifsFileInfo_get(struct cifsFileInfo *cifs_file);1335struct cifsFileInfo *cifsFileInfo_get(struct cifsFileInfo *cifs_file);
1336void _cifsFileInfo_put(struct cifsFileInfo *cifs_file, bool wait_oplock_hdlr);
1328void cifsFileInfo_put(struct cifsFileInfo *cifs_file);1337void cifsFileInfo_put(struct cifsFileInfo *cifs_file);
1329 1338
1330#define CIFS_CACHE_READ_FLG 11339#define CIFS_CACHE_READ_FLG 1
@@ -1847,6 +1856,7 @@ GLOBAL_EXTERN spinlock_t gidsidlock; · 516 unmodified lines
1847#endif /* CONFIG_CIFS_ACL */1856#endif /* CONFIG_CIFS_ACL */
1848 1857
1849void cifs_oplock_break(struct work_struct *work);1858void cifs_oplock_break(struct work_struct *work);
1859void cifs_queue_oplock_break(struct cifsFileInfo *cfile);
1850 1860
1851extern const struct slow_work_ops cifs_oplock_break_ops;1861extern const struct slow_work_ops cifs_oplock_break_ops;
1852extern struct workqueue_struct *cifsiod_wq;1862extern struct workqueue_struct *cifsiod_wq;
fs/cifs/connect.c+29−1
@@ -103,7 +103,7 @@ enum { · 102 unmodified lines
103 Opt_cruid, Opt_gid, Opt_file_mode,103 Opt_cruid, Opt_gid, Opt_file_mode,
104 Opt_dirmode, Opt_port,104 Opt_dirmode, Opt_port,
105 Opt_blocksize, Opt_rsize, Opt_wsize, Opt_actimeo,105 Opt_blocksize, Opt_rsize, Opt_wsize, Opt_actimeo,
106 Opt_echo_interval, Opt_max_credits,106 Opt_echo_interval, Opt_max_credits, Opt_handletimeout,
107 Opt_snapshot,107 Opt_snapshot,
108 108
109 /* Mount options which take string value */109 /* Mount options which take string value */
@@ -208,6 +208,7 @@ static const match_table_t cifs_mount_option_tokens = { · 98 unmodified lines
208 { Opt_rsize, "rsize=%s" },208 { Opt_rsize, "rsize=%s" },
209 { Opt_wsize, "wsize=%s" },209 { Opt_wsize, "wsize=%s" },
210 { Opt_actimeo, "actimeo=%s" },210 { Opt_actimeo, "actimeo=%s" },
211 { Opt_handletimeout, "handletimeout=%s" },
211 { Opt_echo_interval, "echo_interval=%s" },212 { Opt_echo_interval, "echo_interval=%s" },
212 { Opt_max_credits, "max_credits=%s" },213 { Opt_max_credits, "max_credits=%s" },
213 { Opt_snapshot, "snapshot=%s" },214 { Opt_snapshot, "snapshot=%s" },
@@ -1619,6 +1620,9 @@ cifs_parse_mount_options(const char *mountdata, const char *devname, · 1405 unmodified lines
1619 1620
1620 vol->actimeo = CIFS_DEF_ACTIMEO;1621 vol->actimeo = CIFS_DEF_ACTIMEO;
1621 1622
1623 /* Most clients set timeout to 0, allows server to use its default */
1624 vol->handle_timeout = 0; /* See MS-SMB2 spec section 2.2.14.2.12 */
1625
1622 /* offer SMB2.1 and later (SMB3 etc). Secure and widely accepted */1626 /* offer SMB2.1 and later (SMB3 etc). Secure and widely accepted */
1623 vol->ops = &smb30_operations;1627 vol->ops = &smb30_operations;
1624 vol->vals = &smbdefault_values;1628 vol->vals = &smbdefault_values;
@@ -2017,6 +2021,18 @@ cifs_parse_mount_options(const char *mountdata, const char *devname, · 392 unmodified lines
2017 goto cifs_parse_mount_err;2021 goto cifs_parse_mount_err;
2018 }2022 }
2019 break;2023 break;
2024 case Opt_handletimeout:
2025 if (get_option_ul(args, &option)) {
2026 cifs_dbg(VFS, "%s: Invalid handletimeout value\n",
2027 __func__);
2028 goto cifs_parse_mount_err;
2029 }
2030 vol->handle_timeout = option;
2031 if (vol->handle_timeout > SMB3_MAX_HANDLE_TIMEOUT) {
2032 cifs_dbg(VFS, "Invalid handle cache timeout, longer than 16 minutes\n");
2033 goto cifs_parse_mount_err;
2034 }
2035 break;
2020 case Opt_echo_interval:2036 case Opt_echo_interval:
2021 if (get_option_ul(args, &option)) {2037 if (get_option_ul(args, &option)) {
2022 cifs_dbg(VFS, "%s: Invalid echo interval value\n",2038 cifs_dbg(VFS, "%s: Invalid echo interval value\n",
@@ -3183,6 +3199,8 @@ static int match_tcon(struct cifs_tcon *tcon, struct smb_vol *volume_info) · 1160 unmodified lines
3183 return 0;3199 return 0;
3184 if (tcon->snapshot_time != volume_info->snapshot_time)3200 if (tcon->snapshot_time != volume_info->snapshot_time)
3185 return 0;3201 return 0;
3202 if (tcon->handle_timeout != volume_info->handle_timeout)
3203 return 0;
3186 return 1;3204 return 1;
3187}3205}
3188 3206
@@ -3297,6 +3315,16 @@ cifs_get_tcon(struct cifs_ses *ses, struct smb_vol *volume_info) · 108 unmodified lines
3297 tcon->snapshot_time = volume_info->snapshot_time;3315 tcon->snapshot_time = volume_info->snapshot_time;
3298 }3316 }
3299 3317
3318 if (volume_info->handle_timeout) {
3319 if (ses->server->vals->protocol_id == 0) {
3320 cifs_dbg(VFS,
3321 "Use SMB2.1 or later for handle timeout option\n");
3322 rc = -EOPNOTSUPP;
3323 goto out_fail;
3324 } else
3325 tcon->handle_timeout = volume_info->handle_timeout;
3326 }
3327
3300 tcon->ses = ses;3328 tcon->ses = ses;
3301 if (volume_info->password) {3329 if (volume_info->password) {
3302 tcon->password = kstrdup(volume_info->password, GFP_KERNEL);3330 tcon->password = kstrdup(volume_info->password, GFP_KERNEL);
fs/cifs/file.c+25−5
@@ -360,12 +360,30 @@ cifsFileInfo_get(struct cifsFileInfo *cifs_file) · 359 unmodified lines
360 return cifs_file;360 return cifs_file;
361}361}
362 362
363/*363/**
364 * Release a reference on the file private data. This may involve closing364 * cifsFileInfo_put - release a reference of file priv data
365 * the filehandle out on the server. Must be called without holding365 *
366 * tcon->open_file_lock and cifs_file->file_info_lock.366 * Always potentially wait for oplock handler. See _cifsFileInfo_put().
367 */367 */
368void cifsFileInfo_put(struct cifsFileInfo *cifs_file)368void cifsFileInfo_put(struct cifsFileInfo *cifs_file)
369{
370 _cifsFileInfo_put(cifs_file, true);
371}
372
373/**
374 * _cifsFileInfo_put - release a reference of file priv data
375 *
376 * This may involve closing the filehandle @cifs_file out on the
377 * server. Must be called without holding tcon->open_file_lock and
378 * cifs_file->file_info_lock.
379 *
380 * If @wait_for_oplock_handler is true and we are releasing the last
381 * reference, wait for any running oplock break handler of the file
382 * and cancel any pending one. If calling this function from the
383 * oplock break handler, you need to pass false.
384 *
385 */
386void _cifsFileInfo_put(struct cifsFileInfo *cifs_file, bool wait_oplock_handler)
369{387{
370 struct inode *inode = d_inode(cifs_file->dentry);388 struct inode *inode = d_inode(cifs_file->dentry);
371 struct cifs_tcon *tcon = tlink_tcon(cifs_file->tlink);389 struct cifs_tcon *tcon = tlink_tcon(cifs_file->tlink);
@@ -414,7 +432,8 @@ void cifsFileInfo_put(struct cifsFileInfo *cifs_file) · 42 unmodified lines
414 432
415 spin_unlock(&tcon->open_file_lock);433 spin_unlock(&tcon->open_file_lock);
416 434
417 oplock_break_cancelled = cancel_work_sync(&cifs_file->oplock_break);435 oplock_break_cancelled = wait_oplock_handler ?
436 cancel_work_sync(&cifs_file->oplock_break) : false;
418 437
419 if (!tcon->need_reconnect && !cifs_file->invalidHandle) {438 if (!tcon->need_reconnect && !cifs_file->invalidHandle) {
420 struct TCP_Server_Info *server = tcon->ses->server;439 struct TCP_Server_Info *server = tcon->ses->server;
@@ -4603,6 +4622,7 @@ void cifs_oplock_break(struct work_struct *work) · 4182 unmodified lines
4603 cinode);4622 cinode);
4604 cifs_dbg(FYI, "Oplock release rc = %d\n", rc);4623 cifs_dbg(FYI, "Oplock release rc = %d\n", rc);
4605 }4624 }
4625 _cifsFileInfo_put(cfile, false /* do not wait for ourself */);
4606 cifs_done_oplock_break(cinode);4626 cifs_done_oplock_break(cinode);
4607}4627}
4608 4628
fs/cifs/misc.c+23−2
@@ -501,8 +501,7 @@ is_valid_oplock_break(char *buffer, struct TCP_Server_Info *srv) · 500 unmodified lines
501 CIFS_INODE_DOWNGRADE_OPLOCK_TO_L2,501 CIFS_INODE_DOWNGRADE_OPLOCK_TO_L2,
502 &pCifsInode->flags);502 &pCifsInode->flags);
503 503
504 queue_work(cifsoplockd_wq,504 cifs_queue_oplock_break(netfile);
505 &netfile->oplock_break);
506 netfile->oplock_break_cancelled = false;505 netfile->oplock_break_cancelled = false;
507 506
508 spin_unlock(&tcon->open_file_lock);507 spin_unlock(&tcon->open_file_lock);
@@ -607,6 +606,28 @@ void cifs_put_writer(struct cifsInodeInfo *cinode) · 98 unmodified lines
607 spin_unlock(&cinode->writers_lock);606 spin_unlock(&cinode->writers_lock);
608}607}
609 608
609/**
610 * cifs_queue_oplock_break - queue the oplock break handler for cfile
611 *
612 * This function is called from the demultiplex thread when it
613 * receives an oplock break for @cfile.
614 *
615 * Assumes the tcon->open_file_lock is held.
616 * Assumes cfile->file_info_lock is NOT held.
617 */
618void cifs_queue_oplock_break(struct cifsFileInfo *cfile)
619{
620 /*
621 * Bump the handle refcount now while we hold the
622 * open_file_lock to enforce the validity of it for the oplock
623 * break handler. The matching put is done at the end of the
624 * handler.
625 */
626 cifsFileInfo_get(cfile);
627
628 queue_work(cifsoplockd_wq, &cfile->oplock_break);
629}
630
610void cifs_done_oplock_break(struct cifsInodeInfo *cinode)631void cifs_done_oplock_break(struct cifsInodeInfo *cinode)
611{632{
612 clear_bit(CIFS_INODE_PENDING_OPLOCK_BREAK, &cinode->flags);633 clear_bit(CIFS_INODE_PENDING_OPLOCK_BREAK, &cinode->flags);
fs/cifs/smb2file.c+4−2
@@ -68,13 +68,15 @@ smb2_open_file(const unsigned int xid, struct cifs_open_parms *oparms, · 67 unmodified lines
68 68
69 69
70 if (oparms->tcon->use_resilient) {70 if (oparms->tcon->use_resilient) {
71 nr_ioctl_req.Timeout = 0; /* use server default (120 seconds) */71 /* default timeout is 0, servers pick default (120 seconds) */
72 nr_ioctl_req.Timeout =
73 cpu_to_le32(oparms->tcon->handle_timeout);
72 nr_ioctl_req.Reserved = 0;74 nr_ioctl_req.Reserved = 0;
73 rc = SMB2_ioctl(xid, oparms->tcon, fid->persistent_fid,75 rc = SMB2_ioctl(xid, oparms->tcon, fid->persistent_fid,
74 fid->volatile_fid, FSCTL_LMR_REQUEST_RESILIENCY,76 fid->volatile_fid, FSCTL_LMR_REQUEST_RESILIENCY,
75 true /* is_fsctl */,77 true /* is_fsctl */,
76 (char *)&nr_ioctl_req, sizeof(nr_ioctl_req),78 (char *)&nr_ioctl_req, sizeof(nr_ioctl_req),
77 NULL, NULL /* no return info */);79 CIFSMaxBufSize, NULL, NULL /* no return info */);
78 if (rc == -EOPNOTSUPP) {80 if (rc == -EOPNOTSUPP) {
79 cifs_dbg(VFS,81 cifs_dbg(VFS,
80 "resiliency not supported by server, disabling\n");82 "resiliency not supported by server, disabling\n");
fs/cifs/smb2misc.c+3−3
@@ -555,7 +555,7 @@ smb2_tcon_has_lease(struct cifs_tcon *tcon, struct smb2_lease_break *rsp, · 554 unmodified lines
555 clear_bit(CIFS_INODE_DOWNGRADE_OPLOCK_TO_L2,555 clear_bit(CIFS_INODE_DOWNGRADE_OPLOCK_TO_L2,
556 &cinode->flags);556 &cinode->flags);
557 557
558 queue_work(cifsoplockd_wq, &cfile->oplock_break);558 cifs_queue_oplock_break(cfile);
559 kfree(lw);559 kfree(lw);
560 return true;560 return true;
561 }561 }
@@ -712,8 +712,8 @@ smb2_is_valid_oplock_break(char *buffer, struct TCP_Server_Info *server) · 150 unmodified lines
712 CIFS_INODE_DOWNGRADE_OPLOCK_TO_L2,712 CIFS_INODE_DOWNGRADE_OPLOCK_TO_L2,
713 &cinode->flags);713 &cinode->flags);
714 spin_unlock(&cfile->file_info_lock);714 spin_unlock(&cfile->file_info_lock);
715 queue_work(cifsoplockd_wq,715
716 &cfile->oplock_break);716 cifs_queue_oplock_break(cfile);
717 717
718 spin_unlock(&tcon->open_file_lock);718 spin_unlock(&tcon->open_file_lock);
719 spin_unlock(&cifs_tcp_ses_lock);719 spin_unlock(&cifs_tcp_ses_lock);
fs/cifs/smb2ops.c+44−26
@@ -581,7 +581,7 @@ SMB3_request_interfaces(const unsigned int xid, struct cifs_tcon *tcon) · 580 unmodified lines
581 rc = SMB2_ioctl(xid, tcon, NO_FILE_ID, NO_FILE_ID,581 rc = SMB2_ioctl(xid, tcon, NO_FILE_ID, NO_FILE_ID,
582 FSCTL_QUERY_NETWORK_INTERFACE_INFO, true /* is_fsctl */,582 FSCTL_QUERY_NETWORK_INTERFACE_INFO, true /* is_fsctl */,
583 NULL /* no data input */, 0 /* no data input */,583 NULL /* no data input */, 0 /* no data input */,
584 (char **)&out_buf, &ret_data_len);584 CIFSMaxBufSize, (char **)&out_buf, &ret_data_len);
585 if (rc == -EOPNOTSUPP) {585 if (rc == -EOPNOTSUPP) {
586 cifs_dbg(FYI,586 cifs_dbg(FYI,
587 "server does not support query network interfaces\n");587 "server does not support query network interfaces\n");
@@ -717,32 +717,28 @@ int open_shroot(unsigned int xid, struct cifs_tcon *tcon, struct cifs_fid *pfid) · 129 unmodified lines
717 oparms.fid->mid = le64_to_cpu(o_rsp->sync_hdr.MessageId);717 oparms.fid->mid = le64_to_cpu(o_rsp->sync_hdr.MessageId);
718#endif /* CIFS_DEBUG2 */718#endif /* CIFS_DEBUG2 */
719 719
720 if (o_rsp->OplockLevel == SMB2_OPLOCK_LEVEL_LEASE)
721 oplock = smb2_parse_lease_state(server, o_rsp,
722 &oparms.fid->epoch,
723 oparms.fid->lease_key);
724 else
725 goto oshr_exit;
726
727
728 memcpy(tcon->crfid.fid, pfid, sizeof(struct cifs_fid));720 memcpy(tcon->crfid.fid, pfid, sizeof(struct cifs_fid));
729 tcon->crfid.tcon = tcon;721 tcon->crfid.tcon = tcon;
730 tcon->crfid.is_valid = true;722 tcon->crfid.is_valid = true;
731 kref_init(&tcon->crfid.refcount);723 kref_init(&tcon->crfid.refcount);
732 kref_get(&tcon->crfid.refcount);
733 724
725 if (o_rsp->OplockLevel == SMB2_OPLOCK_LEVEL_LEASE) {
726 kref_get(&tcon->crfid.refcount);
727 oplock = smb2_parse_lease_state(server, o_rsp,
728 &oparms.fid->epoch,
729 oparms.fid->lease_key);
730 } else
731 goto oshr_exit;
734 732
735 qi_rsp = (struct smb2_query_info_rsp *)rsp_iov[1].iov_base;733 qi_rsp = (struct smb2_query_info_rsp *)rsp_iov[1].iov_base;
736 if (le32_to_cpu(qi_rsp->OutputBufferLength) < sizeof(struct smb2_file_all_info))734 if (le32_to_cpu(qi_rsp->OutputBufferLength) < sizeof(struct smb2_file_all_info))
737 goto oshr_exit;735 goto oshr_exit;
738 rc = smb2_validate_and_copy_iov(736 if (!smb2_validate_and_copy_iov(
739 le16_to_cpu(qi_rsp->OutputBufferOffset),737 le16_to_cpu(qi_rsp->OutputBufferOffset),
740 sizeof(struct smb2_file_all_info),738 sizeof(struct smb2_file_all_info),
741 &rsp_iov[1], sizeof(struct smb2_file_all_info),739 &rsp_iov[1], sizeof(struct smb2_file_all_info),
742 (char *)&tcon->crfid.file_all_info);740 (char *)&tcon->crfid.file_all_info))
743 if (rc)741 tcon->crfid.file_all_info_is_valid = 1;
744 goto oshr_exit;
745 tcon->crfid.file_all_info_is_valid = 1;
746 742
747 oshr_exit:743 oshr_exit:
748 mutex_unlock(&tcon->crfid.fid_mutex);744 mutex_unlock(&tcon->crfid.fid_mutex);
@@ -1299,7 +1295,7 @@ SMB2_request_res_key(const unsigned int xid, struct cifs_tcon *tcon, · 550 unmodified lines
1299 1295
1300 rc = SMB2_ioctl(xid, tcon, persistent_fid, volatile_fid,1296 rc = SMB2_ioctl(xid, tcon, persistent_fid, volatile_fid,
1301 FSCTL_SRV_REQUEST_RESUME_KEY, true /* is_fsctl */,1297 FSCTL_SRV_REQUEST_RESUME_KEY, true /* is_fsctl */,
1302 NULL, 0 /* no input */,1298 NULL, 0 /* no input */, CIFSMaxBufSize,
1303 (char **)&res_key, &ret_data_len);1299 (char **)&res_key, &ret_data_len);
1304 1300
1305 if (rc) {1301 if (rc) {
@@ -1404,7 +1400,7 @@ smb2_ioctl_query_info(const unsigned int xid, · 98 unmodified lines
1404 rc = SMB2_ioctl_init(tcon, &rqst[1],1400 rc = SMB2_ioctl_init(tcon, &rqst[1],
1405 COMPOUND_FID, COMPOUND_FID,1401 COMPOUND_FID, COMPOUND_FID,
1406 qi.info_type, true, NULL,1402 qi.info_type, true, NULL,
1407 0);1403 0, CIFSMaxBufSize);
1408 }1404 }
1409 } else if (qi.flags == PASSTHRU_QUERY_INFO) {1405 } else if (qi.flags == PASSTHRU_QUERY_INFO) {
1410 memset(&qi_iov, 0, sizeof(qi_iov));1406 memset(&qi_iov, 0, sizeof(qi_iov));
@@ -1532,8 +1528,8 @@ smb2_copychunk_range(const unsigned int xid, · 121 unmodified lines
1532 rc = SMB2_ioctl(xid, tcon, trgtfile->fid.persistent_fid,1528 rc = SMB2_ioctl(xid, tcon, trgtfile->fid.persistent_fid,
1533 trgtfile->fid.volatile_fid, FSCTL_SRV_COPYCHUNK_WRITE,1529 trgtfile->fid.volatile_fid, FSCTL_SRV_COPYCHUNK_WRITE,
1534 true /* is_fsctl */, (char *)pcchunk,1530 true /* is_fsctl */, (char *)pcchunk,
1535 sizeof(struct copychunk_ioctl), (char **)&retbuf,1531 sizeof(struct copychunk_ioctl), CIFSMaxBufSize,
1536 &ret_data_len);1532 (char **)&retbuf, &ret_data_len);
1537 if (rc == 0) {1533 if (rc == 0) {
1538 if (ret_data_len !=1534 if (ret_data_len !=
1539 sizeof(struct copychunk_ioctl_rsp)) {1535 sizeof(struct copychunk_ioctl_rsp)) {
@@ -1693,7 +1689,7 @@ static bool smb2_set_sparse(const unsigned int xid, struct cifs_tcon *tcon, · 153 unmodified lines
1693 rc = SMB2_ioctl(xid, tcon, cfile->fid.persistent_fid,1689 rc = SMB2_ioctl(xid, tcon, cfile->fid.persistent_fid,
1694 cfile->fid.volatile_fid, FSCTL_SET_SPARSE,1690 cfile->fid.volatile_fid, FSCTL_SET_SPARSE,
1695 true /* is_fctl */,1691 true /* is_fctl */,
1696 &setsparse, 1, NULL, NULL);1692 &setsparse, 1, CIFSMaxBufSize, NULL, NULL);
1697 if (rc) {1693 if (rc) {
1698 tcon->broken_sparse_sup = true;1694 tcon->broken_sparse_sup = true;
1699 cifs_dbg(FYI, "set sparse rc = %d\n", rc);1695 cifs_dbg(FYI, "set sparse rc = %d\n", rc);
@@ -1766,7 +1762,7 @@ smb2_duplicate_extents(const unsigned int xid, · 66 unmodified lines
1766 true /* is_fsctl */,1762 true /* is_fsctl */,
1767 (char *)&dup_ext_buf,1763 (char *)&dup_ext_buf,
1768 sizeof(struct duplicate_extents_to_file),1764 sizeof(struct duplicate_extents_to_file),
1769 NULL,1765 CIFSMaxBufSize, NULL,
1770 &ret_data_len);1766 &ret_data_len);
1771 1767
1772 if (ret_data_len > 0)1768 if (ret_data_len > 0)
@@ -1801,7 +1797,7 @@ smb3_set_integrity(const unsigned int xid, struct cifs_tcon *tcon, · 28 unmodified lines
1801 true /* is_fsctl */,1797 true /* is_fsctl */,
1802 (char *)&integr_info,1798 (char *)&integr_info,
1803 sizeof(struct fsctl_set_integrity_information_req),1799 sizeof(struct fsctl_set_integrity_information_req),
1804 NULL,1800 CIFSMaxBufSize, NULL,
1805 &ret_data_len);1801 &ret_data_len);
1806 1802
1807}1803}
@@ -1809,6 +1805,8 @@ smb3_set_integrity(const unsigned int xid, struct cifs_tcon *tcon, · 1 unmodified line
1809/* GMT Token is @GMT-YYYY.MM.DD-HH.MM.SS Unicode which is 48 bytes + null */1805/* GMT Token is @GMT-YYYY.MM.DD-HH.MM.SS Unicode which is 48 bytes + null */
1810#define GMT_TOKEN_SIZE 501806#define GMT_TOKEN_SIZE 50
1811 1807
1808#define MIN_SNAPSHOT_ARRAY_SIZE 16 /* See MS-SMB2 section 3.3.5.15.1 */
1809
1812/*1810/*
1813 * Input buffer contains (empty) struct smb_snapshot array with size filled in1811 * Input buffer contains (empty) struct smb_snapshot array with size filled in
1814 * For output see struct SRV_SNAPSHOT_ARRAY in MS-SMB2 section 2.2.32.21812 * For output see struct SRV_SNAPSHOT_ARRAY in MS-SMB2 section 2.2.32.2
@@ -1820,13 +1818,29 @@ smb3_enum_snapshots(const unsigned int xid, struct cifs_tcon *tcon, · 5 unmodified lines
1820 char *retbuf = NULL;1818 char *retbuf = NULL;
1821 unsigned int ret_data_len = 0;1819 unsigned int ret_data_len = 0;
1822 int rc;1820 int rc;
1821 u32 max_response_size;
1823 struct smb_snapshot_array snapshot_in;1822 struct smb_snapshot_array snapshot_in;
1824 1823
1824 if (get_user(ret_data_len, (unsigned int __user *)ioc_buf))
1825 return -EFAULT;
1826
1827 /*
1828 * Note that for snapshot queries that servers like Azure expect that
1829 * the first query be minimal size (and just used to get the number/size
1830 * of previous versions) so response size must be specified as EXACTLY
1831 * sizeof(struct snapshot_array) which is 16 when rounded up to multiple
1832 * of eight bytes.
1833 */
1834 if (ret_data_len == 0)
1835 max_response_size = MIN_SNAPSHOT_ARRAY_SIZE;
1836 else
1837 max_response_size = CIFSMaxBufSize;
1838
1825 rc = SMB2_ioctl(xid, tcon, cfile->fid.persistent_fid,1839 rc = SMB2_ioctl(xid, tcon, cfile->fid.persistent_fid,
1826 cfile->fid.volatile_fid,1840 cfile->fid.volatile_fid,
1827 FSCTL_SRV_ENUMERATE_SNAPSHOTS,1841 FSCTL_SRV_ENUMERATE_SNAPSHOTS,
1828 true /* is_fsctl */,1842 true /* is_fsctl */,
1829 NULL, 0 /* no input data */,1843 NULL, 0 /* no input data */, max_response_size,
1830 (char **)&retbuf,1844 (char **)&retbuf,
1831 &ret_data_len);1845 &ret_data_len);
1832 cifs_dbg(FYI, "enum snaphots ioctl returned %d and ret buflen is %d\n",1846 cifs_dbg(FYI, "enum snaphots ioctl returned %d and ret buflen is %d\n",
@@ -2304,7 +2318,7 @@ smb2_get_dfs_refer(const unsigned int xid, struct cifs_ses *ses, · 471 unmodified lines
2304 rc = SMB2_ioctl(xid, tcon, NO_FILE_ID, NO_FILE_ID,2318 rc = SMB2_ioctl(xid, tcon, NO_FILE_ID, NO_FILE_ID,
2305 FSCTL_DFS_GET_REFERRALS,2319 FSCTL_DFS_GET_REFERRALS,
2306 true /* is_fsctl */,2320 true /* is_fsctl */,
2307 (char *)dfs_req, dfs_req_size,2321 (char *)dfs_req, dfs_req_size, CIFSMaxBufSize,
2308 (char **)&dfs_rsp, &dfs_rsp_size);2322 (char **)&dfs_rsp, &dfs_rsp_size);
2309 } while (rc == -EAGAIN);2323 } while (rc == -EAGAIN);
2310 2324
@@ -2375,6 +2389,8 @@ smb2_query_symlink(const unsigned int xid, struct cifs_tcon *tcon, · 64 unmodified lines
2375 2389
2376 rc = SMB2_open(xid, &oparms, utf16_path, &oplock, NULL, &err_iov,2390 rc = SMB2_open(xid, &oparms, utf16_path, &oplock, NULL, &err_iov,
2377 &resp_buftype);2391 &resp_buftype);
2392 if (!rc)
2393 SMB2_close(xid, tcon, fid.persistent_fid, fid.volatile_fid);
2378 if (!rc || !err_iov.iov_base) {2394 if (!rc || !err_iov.iov_base) {
2379 rc = -ENOENT;2395 rc = -ENOENT;
2380 goto free_path;2396 goto free_path;
@@ -2658,7 +2674,8 @@ static long smb3_zero_range(struct file *file, struct cifs_tcon *tcon, · 277 unmodified lines
2658 rc = SMB2_ioctl_init(tcon, &rqst[num++], cfile->fid.persistent_fid,2674 rc = SMB2_ioctl_init(tcon, &rqst[num++], cfile->fid.persistent_fid,
2659 cfile->fid.volatile_fid, FSCTL_SET_ZERO_DATA,2675 cfile->fid.volatile_fid, FSCTL_SET_ZERO_DATA,
2660 true /* is_fctl */, (char *)&fsctl_buf,2676 true /* is_fctl */, (char *)&fsctl_buf,
2661 sizeof(struct file_zero_data_information));2677 sizeof(struct file_zero_data_information),
2678 CIFSMaxBufSize);
2662 if (rc)2679 if (rc)
2663 goto zero_range_exit;2680 goto zero_range_exit;
2664 2681
@@ -2735,7 +2752,8 @@ static long smb3_punch_hole(struct file *file, struct cifs_tcon *tcon, · 70 unmodified lines
2735 rc = SMB2_ioctl(xid, tcon, cfile->fid.persistent_fid,2752 rc = SMB2_ioctl(xid, tcon, cfile->fid.persistent_fid,
2736 cfile->fid.volatile_fid, FSCTL_SET_ZERO_DATA,2753 cfile->fid.volatile_fid, FSCTL_SET_ZERO_DATA,
2737 true /* is_fctl */, (char *)&fsctl_buf,2754 true /* is_fctl */, (char *)&fsctl_buf,
2738 sizeof(struct file_zero_data_information), NULL, NULL);2755 sizeof(struct file_zero_data_information),
2756 CIFSMaxBufSize, NULL, NULL);
2739 free_xid(xid);2757 free_xid(xid);
2740 return rc;2758 return rc;
2741}2759}
fs/cifs/smb2pdu.c+40−20
@@ -832,8 +832,11 @@ SMB2_negotiate(const unsigned int xid, struct cifs_ses *ses) · 831 unmodified lines
832 } else if (rsp->DialectRevision == cpu_to_le16(SMB21_PROT_ID)) {832 } else if (rsp->DialectRevision == cpu_to_le16(SMB21_PROT_ID)) {
833 /* ops set to 3.0 by default for default so update */833 /* ops set to 3.0 by default for default so update */
834 ses->server->ops = &smb21_operations;834 ses->server->ops = &smb21_operations;
835 } else if (rsp->DialectRevision == cpu_to_le16(SMB311_PROT_ID))835 ses->server->vals = &smb21_values;
836 } else if (rsp->DialectRevision == cpu_to_le16(SMB311_PROT_ID)) {
836 ses->server->ops = &smb311_operations;837 ses->server->ops = &smb311_operations;
838 ses->server->vals = &smb311_values;
839 }
837 } else if (le16_to_cpu(rsp->DialectRevision) !=840 } else if (le16_to_cpu(rsp->DialectRevision) !=
838 ses->server->vals->protocol_id) {841 ses->server->vals->protocol_id) {
839 /* if requested single dialect ensure returned dialect matched */842 /* if requested single dialect ensure returned dialect matched */
@@ -1002,7 +1005,8 @@ int smb3_validate_negotiate(const unsigned int xid, struct cifs_tcon *tcon) · 162 unmodified lines
1002 1005
1003 rc = SMB2_ioctl(xid, tcon, NO_FILE_ID, NO_FILE_ID,1006 rc = SMB2_ioctl(xid, tcon, NO_FILE_ID, NO_FILE_ID,
1004 FSCTL_VALIDATE_NEGOTIATE_INFO, true /* is_fsctl */,1007 FSCTL_VALIDATE_NEGOTIATE_INFO, true /* is_fsctl */,
1005 (char *)pneg_inbuf, inbuflen, (char **)&pneg_rsp, &rsplen);1008 (char *)pneg_inbuf, inbuflen, CIFSMaxBufSize,
1009 (char **)&pneg_rsp, &rsplen);
1006 if (rc == -EOPNOTSUPP) {1010 if (rc == -EOPNOTSUPP) {
1007 /*1011 /*
1008 * Old Windows versions or Netapp SMB server can return1012 * Old Windows versions or Netapp SMB server can return
@@ -1858,8 +1862,9 @@ add_lease_context(struct TCP_Server_Info *server, struct kvec *iov, · 849 unmodified lines
1858}1862}
1859 1863
1860static struct create_durable_v2 *1864static struct create_durable_v2 *
1861create_durable_v2_buf(struct cifs_fid *pfid)1865create_durable_v2_buf(struct cifs_open_parms *oparms)
1862{1866{
1867 struct cifs_fid *pfid = oparms->fid;
1863 struct create_durable_v2 *buf;1868 struct create_durable_v2 *buf;
1864 1869
1865 buf = kzalloc(sizeof(struct create_durable_v2), GFP_KERNEL);1870 buf = kzalloc(sizeof(struct create_durable_v2), GFP_KERNEL);
@@ -1873,7 +1878,14 @@ create_durable_v2_buf(struct cifs_fid *pfid) · 7 unmodified lines
1873 (struct create_durable_v2, Name));1878 (struct create_durable_v2, Name));
1874 buf->ccontext.NameLength = cpu_to_le16(4);1879 buf->ccontext.NameLength = cpu_to_le16(4);
1875 1880
1876 buf->dcontext.Timeout = 0; /* Should this be configurable by workload */1881 /*
1882 * NB: Handle timeout defaults to 0, which allows server to choose
1883 * (most servers default to 120 seconds) and most clients default to 0.
1884 * This can be overridden at mount ("handletimeout=") if the user wants
1885 * a different persistent (or resilient) handle timeout for all opens
1886 * opens on a particular SMB3 mount.
1887 */
1888 buf->dcontext.Timeout = cpu_to_le32(oparms->tcon->handle_timeout);
1877 buf->dcontext.Flags = cpu_to_le32(SMB2_DHANDLE_FLAG_PERSISTENT);1889 buf->dcontext.Flags = cpu_to_le32(SMB2_DHANDLE_FLAG_PERSISTENT);
1878 generate_random_uuid(buf->dcontext.CreateGuid);1890 generate_random_uuid(buf->dcontext.CreateGuid);
1879 memcpy(pfid->create_guid, buf->dcontext.CreateGuid, 16);1891 memcpy(pfid->create_guid, buf->dcontext.CreateGuid, 16);
@@ -1926,7 +1938,7 @@ add_durable_v2_context(struct kvec *iov, unsigned int *num_iovec, · 46 unmodified lines
1926 struct smb2_create_req *req = iov[0].iov_base;1938 struct smb2_create_req *req = iov[0].iov_base;
1927 unsigned int num = *num_iovec;1939 unsigned int num = *num_iovec;
1928 1940
1929 iov[num].iov_base = create_durable_v2_buf(oparms->fid);1941 iov[num].iov_base = create_durable_v2_buf(oparms);
1930 if (iov[num].iov_base == NULL)1942 if (iov[num].iov_base == NULL)
1931 return -ENOMEM;1943 return -ENOMEM;
1932 iov[num].iov_len = sizeof(struct create_durable_v2);1944 iov[num].iov_len = sizeof(struct create_durable_v2);
@@ -2478,7 +2490,8 @@ creat_exit: · 545 unmodified lines
2478int2490int
2479SMB2_ioctl_init(struct cifs_tcon *tcon, struct smb_rqst *rqst,2491SMB2_ioctl_init(struct cifs_tcon *tcon, struct smb_rqst *rqst,
2480 u64 persistent_fid, u64 volatile_fid, u32 opcode,2492 u64 persistent_fid, u64 volatile_fid, u32 opcode,
2481 bool is_fsctl, char *in_data, u32 indatalen)2493 bool is_fsctl, char *in_data, u32 indatalen,
2494 __u32 max_response_size)
2482{2495{
2483 struct smb2_ioctl_req *req;2496 struct smb2_ioctl_req *req;
2484 struct kvec *iov = rqst->rq_iov;2497 struct kvec *iov = rqst->rq_iov;
@@ -2520,16 +2533,21 @@ SMB2_ioctl_init(struct cifs_tcon *tcon, struct smb_rqst *rqst, · 35 unmodified lines
2520 req->OutputCount = 0; /* MBZ */2533 req->OutputCount = 0; /* MBZ */
2521 2534
2522 /*2535 /*
2523 * Could increase MaxOutputResponse, but that would require more2536 * In most cases max_response_size is set to 16K (CIFSMaxBufSize)
2524 * than one credit. Windows typically sets this smaller, but for some2537 * We Could increase default MaxOutputResponse, but that could require
2538 * more credits. Windows typically sets this smaller, but for some
2525 * ioctls it may be useful to allow server to send more. No point2539 * ioctls it may be useful to allow server to send more. No point
2526 * limiting what the server can send as long as fits in one credit2540 * limiting what the server can send as long as fits in one credit
2527 * Unfortunately - we can not handle more than CIFS_MAX_MSG_SIZE2541 * We can not handle more than CIFS_MAX_BUF_SIZE yet but may want
2528 * (by default, note that it can be overridden to make max larger)2542 * to increase this limit up in the future.
2529 * in responses (except for read responses which can be bigger.2543 * Note that for snapshot queries that servers like Azure expect that
2530 * We may want to bump this limit up2544 * the first query be minimal size (and just used to get the number/size
2545 * of previous versions) so response size must be specified as EXACTLY
2546 * sizeof(struct snapshot_array) which is 16 when rounded up to multiple
2547 * of eight bytes. Currently that is the only case where we set max
2548 * response size smaller.
2531 */2549 */
2532 req->MaxOutputResponse = cpu_to_le32(CIFSMaxBufSize);2550 req->MaxOutputResponse = cpu_to_le32(max_response_size);
2533 2551
2534 if (is_fsctl)2552 if (is_fsctl)
2535 req->Flags = cpu_to_le32(SMB2_0_IOCTL_IS_FSCTL);2553 req->Flags = cpu_to_le32(SMB2_0_IOCTL_IS_FSCTL);
@@ -2550,13 +2568,14 @@ SMB2_ioctl_free(struct smb_rqst *rqst) · 14 unmodified lines
2550 cifs_small_buf_release(rqst->rq_iov[0].iov_base); /* request */2568 cifs_small_buf_release(rqst->rq_iov[0].iov_base); /* request */
2551}2569}
2552 2570
2571
2553/*2572/*
2554 * SMB2 IOCTL is used for both IOCTLs and FSCTLs2573 * SMB2 IOCTL is used for both IOCTLs and FSCTLs
2555 */2574 */
2556int2575int
2557SMB2_ioctl(const unsigned int xid, struct cifs_tcon *tcon, u64 persistent_fid,2576SMB2_ioctl(const unsigned int xid, struct cifs_tcon *tcon, u64 persistent_fid,
2558 u64 volatile_fid, u32 opcode, bool is_fsctl,2577 u64 volatile_fid, u32 opcode, bool is_fsctl,
2559 char *in_data, u32 indatalen,2578 char *in_data, u32 indatalen, u32 max_out_data_len,
2560 char **out_data, u32 *plen /* returned data len */)2579 char **out_data, u32 *plen /* returned data len */)
2561{2580{
2562 struct smb_rqst rqst;2581 struct smb_rqst rqst;
@@ -2593,8 +2612,8 @@ SMB2_ioctl(const unsigned int xid, struct cifs_tcon *tcon, u64 persistent_fid, · 30 unmodified lines
2593 rqst.rq_iov = iov;2612 rqst.rq_iov = iov;
2594 rqst.rq_nvec = SMB2_IOCTL_IOV_SIZE;2613 rqst.rq_nvec = SMB2_IOCTL_IOV_SIZE;
2595 2614
2596 rc = SMB2_ioctl_init(tcon, &rqst, persistent_fid, volatile_fid,2615 rc = SMB2_ioctl_init(tcon, &rqst, persistent_fid, volatile_fid, opcode,
2597 opcode, is_fsctl, in_data, indatalen);2616 is_fsctl, in_data, indatalen, max_out_data_len);
2598 if (rc)2617 if (rc)
2599 goto ioctl_exit;2618 goto ioctl_exit;
2600 2619
@@ -2672,7 +2691,8 @@ SMB2_set_compression(const unsigned int xid, struct cifs_tcon *tcon, · 71 unmodified lines
2672 rc = SMB2_ioctl(xid, tcon, persistent_fid, volatile_fid,2691 rc = SMB2_ioctl(xid, tcon, persistent_fid, volatile_fid,
2673 FSCTL_SET_COMPRESSION, true /* is_fsctl */,2692 FSCTL_SET_COMPRESSION, true /* is_fsctl */,
2674 (char *)&fsctl_input /* data input */,2693 (char *)&fsctl_input /* data input */,
2675 2 /* in data len */, &ret_data /* out data */, NULL);2694 2 /* in data len */, CIFSMaxBufSize /* max out data */,
2695 &ret_data /* out data */, NULL);
2676 2696
2677 cifs_dbg(FYI, "set compression rc %d\n", rc);2697 cifs_dbg(FYI, "set compression rc %d\n", rc);
2678 2698
@@ -3431,8 +3451,6 @@ SMB2_read(const unsigned int xid, struct cifs_io_parms *io_parms, · 752 unmodified lines
3431 rqst.rq_nvec = 1;3451 rqst.rq_nvec = 1;
3432 3452
3433 rc = cifs_send_recv(xid, ses, &rqst, &resp_buftype, flags, &rsp_iov);3453 rc = cifs_send_recv(xid, ses, &rqst, &resp_buftype, flags, &rsp_iov);
3434 cifs_small_buf_release(req);
3435
3436 rsp = (struct smb2_read_rsp *)rsp_iov.iov_base;3454 rsp = (struct smb2_read_rsp *)rsp_iov.iov_base;
3437 3455
3438 if (rc) {3456 if (rc) {
@@ -3454,6 +3472,8 @@ SMB2_read(const unsigned int xid, struct cifs_io_parms *io_parms, · 15 unmodified lines
3454 io_parms->tcon->tid, ses->Suid,3472 io_parms->tcon->tid, ses->Suid,
3455 io_parms->offset, io_parms->length);3473 io_parms->offset, io_parms->length);
3456 3474
3475 cifs_small_buf_release(req);
3476
3457 *nbytes = le32_to_cpu(rsp->DataLength);3477 *nbytes = le32_to_cpu(rsp->DataLength);
3458 if ((*nbytes > CIFS_MAX_MSGSIZE) ||3478 if ((*nbytes > CIFS_MAX_MSGSIZE) ||
3459 (*nbytes > io_parms->length)) {3479 (*nbytes > io_parms->length)) {
@@ -3752,7 +3772,6 @@ SMB2_write(const unsigned int xid, struct cifs_io_parms *io_parms, · 292 unmodified lines
3752 3772
3753 rc = cifs_send_recv(xid, io_parms->tcon->ses, &rqst,3773 rc = cifs_send_recv(xid, io_parms->tcon->ses, &rqst,
3754 &resp_buftype, flags, &rsp_iov);3774 &resp_buftype, flags, &rsp_iov);
3755 cifs_small_buf_release(req);
3756 rsp = (struct smb2_write_rsp *)rsp_iov.iov_base;3775 rsp = (struct smb2_write_rsp *)rsp_iov.iov_base;
3757 3776
3758 if (rc) {3777 if (rc) {
@@ -3770,6 +3789,7 @@ SMB2_write(const unsigned int xid, struct cifs_io_parms *io_parms, · 11 unmodified lines
3770 io_parms->offset, *nbytes);3789 io_parms->offset, *nbytes);
3771 }3790 }
3772 3791
3792 cifs_small_buf_release(req);
3773 free_rsp_buf(resp_buftype, rsp);3793 free_rsp_buf(resp_buftype, rsp);
3774 return rc;3794 return rc;
3775}3795}
fs/cifs/smb2proto.h+3−2
@@ -142,11 +142,12 @@ extern int SMB2_open_init(struct cifs_tcon *tcon, struct smb_rqst *rqst, · 141 unmodified lines
142extern void SMB2_open_free(struct smb_rqst *rqst);142extern void SMB2_open_free(struct smb_rqst *rqst);
143extern int SMB2_ioctl(const unsigned int xid, struct cifs_tcon *tcon,143extern int SMB2_ioctl(const unsigned int xid, struct cifs_tcon *tcon,
144 u64 persistent_fid, u64 volatile_fid, u32 opcode,144 u64 persistent_fid, u64 volatile_fid, u32 opcode,
145 bool is_fsctl, char *in_data, u32 indatalen,145 bool is_fsctl, char *in_data, u32 indatalen, u32 maxoutlen,
146 char **out_data, u32 *plen /* returned data len */);146 char **out_data, u32 *plen /* returned data len */);
147extern int SMB2_ioctl_init(struct cifs_tcon *tcon, struct smb_rqst *rqst,147extern int SMB2_ioctl_init(struct cifs_tcon *tcon, struct smb_rqst *rqst,
148 u64 persistent_fid, u64 volatile_fid, u32 opcode,148 u64 persistent_fid, u64 volatile_fid, u32 opcode,
149 bool is_fsctl, char *in_data, u32 indatalen);149 bool is_fsctl, char *in_data, u32 indatalen,
150 __u32 max_response_size);
150extern void SMB2_ioctl_free(struct smb_rqst *rqst);151extern void SMB2_ioctl_free(struct smb_rqst *rqst);
151extern int SMB2_close(const unsigned int xid, struct cifs_tcon *tcon,152extern int SMB2_close(const unsigned int xid, struct cifs_tcon *tcon,
152 u64 persistent_file_id, u64 volatile_file_id);153 u64 persistent_file_id, u64 volatile_file_id);
fs/dax.c+15−0
@@ -33,6 +33,7 @@ · 32 unmodified lines
33#include <linux/sizes.h>33#include <linux/sizes.h>
34#include <linux/mmu_notifier.h>34#include <linux/mmu_notifier.h>
35#include <linux/iomap.h>35#include <linux/iomap.h>
36#include <asm/pgalloc.h>
36#include "internal.h"37#include "internal.h"
37 38
38#define CREATE_TRACE_POINTS39#define CREATE_TRACE_POINTS
@@ -1407,7 +1408,9 @@ static vm_fault_t dax_pmd_load_hole(struct xa_state *xas, struct vm_fault *vmf, · 1368 unmodified lines
1407{1408{
1408 struct address_space *mapping = vmf->vma->vm_file->f_mapping;1409 struct address_space *mapping = vmf->vma->vm_file->f_mapping;
1409 unsigned long pmd_addr = vmf->address & PMD_MASK;1410 unsigned long pmd_addr = vmf->address & PMD_MASK;
1411 struct vm_area_struct *vma = vmf->vma;
1410 struct inode *inode = mapping->host;1412 struct inode *inode = mapping->host;
1413 pgtable_t pgtable = NULL;
1411 struct page *zero_page;1414 struct page *zero_page;
1412 spinlock_t *ptl;1415 spinlock_t *ptl;
1413 pmd_t pmd_entry;1416 pmd_t pmd_entry;
@@ -1422,12 +1425,22 @@ static vm_fault_t dax_pmd_load_hole(struct xa_state *xas, struct vm_fault *vmf, · 8 unmodified lines
1422 *entry = dax_insert_entry(xas, mapping, vmf, *entry, pfn,1425 *entry = dax_insert_entry(xas, mapping, vmf, *entry, pfn,
1423 DAX_PMD | DAX_ZERO_PAGE, false);1426 DAX_PMD | DAX_ZERO_PAGE, false);
1424 1427
1428 if (arch_needs_pgtable_deposit()) {
1429 pgtable = pte_alloc_one(vma->vm_mm);
1430 if (!pgtable)
1431 return VM_FAULT_OOM;
1432 }
1433
1425 ptl = pmd_lock(vmf->vma->vm_mm, vmf->pmd);1434 ptl = pmd_lock(vmf->vma->vm_mm, vmf->pmd);
1426 if (!pmd_none(*(vmf->pmd))) {1435 if (!pmd_none(*(vmf->pmd))) {
1427 spin_unlock(ptl);1436 spin_unlock(ptl);
1428 goto fallback;1437 goto fallback;
1429 }1438 }
1430 1439
1440 if (pgtable) {
1441 pgtable_trans_huge_deposit(vma->vm_mm, vmf->pmd, pgtable);
1442 mm_inc_nr_ptes(vma->vm_mm);
1443 }
1431 pmd_entry = mk_pmd(zero_page, vmf->vma->vm_page_prot);1444 pmd_entry = mk_pmd(zero_page, vmf->vma->vm_page_prot);
1432 pmd_entry = pmd_mkhuge(pmd_entry);1445 pmd_entry = pmd_mkhuge(pmd_entry);
1433 set_pmd_at(vmf->vma->vm_mm, pmd_addr, vmf->pmd, pmd_entry);1446 set_pmd_at(vmf->vma->vm_mm, pmd_addr, vmf->pmd, pmd_entry);
@@ -1436,6 +1449,8 @@ static vm_fault_t dax_pmd_load_hole(struct xa_state *xas, struct vm_fault *vmf, · 2 unmodified lines
1436 return VM_FAULT_NOPAGE;1449 return VM_FAULT_NOPAGE;
1437 1450
1438fallback:1451fallback:
1452 if (pgtable)
1453 pte_free(vma->vm_mm, pgtable);
1439 trace_dax_pmd_load_hole_fallback(inode, vmf, zero_page, *entry);1454 trace_dax_pmd_load_hole_fallback(inode, vmf, zero_page, *entry);
1440 return VM_FAULT_FALLBACK;1455 return VM_FAULT_FALLBACK;
1441}1456}
fs/debugfs/inode.c+9−4
@@ -163,19 +163,24 @@ static int debugfs_show_options(struct seq_file *m, struct dentry *root) · 162 unmodified lines
163 return 0;163 return 0;
164}164}
165 165
166static void debugfs_evict_inode(struct inode *inode)166static void debugfs_i_callback(struct rcu_head *head)
167{167{
168 truncate_inode_pages_final(&inode->i_data);168 struct inode *inode = container_of(head, struct inode, i_rcu);
169 clear_inode(inode);
170 if (S_ISLNK(inode->i_mode))169 if (S_ISLNK(inode->i_mode))
171 kfree(inode->i_link);170 kfree(inode->i_link);
171 free_inode_nonrcu(inode);
172}
173
174static void debugfs_destroy_inode(struct inode *inode)
175{
176 call_rcu(&inode->i_rcu, debugfs_i_callback);
172}177}
173 178
174static const struct super_operations debugfs_super_operations = {179static const struct super_operations debugfs_super_operations = {
175 .statfs = simple_statfs,180 .statfs = simple_statfs,
176 .remount_fs = debugfs_remount,181 .remount_fs = debugfs_remount,
177 .show_options = debugfs_show_options,182 .show_options = debugfs_show_options,
178 .evict_inode = debugfs_evict_inode,183 .destroy_inode = debugfs_destroy_inode,
179};184};
180 185
181static void debugfs_release_dentry(struct dentry *dentry)186static void debugfs_release_dentry(struct dentry *dentry)
fs/fuse/dev.c+6−6
@@ -2056,10 +2056,8 @@ static ssize_t fuse_dev_splice_write(struct pipe_inode_info *pipe, · 2055 unmodified lines
2056 rem += pipe->bufs[(pipe->curbuf + idx) & (pipe->buffers - 1)].len;2056 rem += pipe->bufs[(pipe->curbuf + idx) & (pipe->buffers - 1)].len;
2057 2057
2058 ret = -EINVAL;2058 ret = -EINVAL;
2059 if (rem < len) {2059 if (rem < len)
2060 pipe_unlock(pipe);2060 goto out_free;
2061 goto out;
2062 }
2063 2061
2064 rem = len;2062 rem = len;
2065 while (rem) {2063 while (rem) {
@@ -2077,7 +2075,9 @@ static ssize_t fuse_dev_splice_write(struct pipe_inode_info *pipe, · 11 unmodified lines
2077 pipe->curbuf = (pipe->curbuf + 1) & (pipe->buffers - 1);2075 pipe->curbuf = (pipe->curbuf + 1) & (pipe->buffers - 1);
2078 pipe->nrbufs--;2076 pipe->nrbufs--;
2079 } else {2077 } else {
2080 pipe_buf_get(pipe, ibuf);2078 if (!pipe_buf_get(pipe, ibuf))
2079 goto out_free;
2080
2081 *obuf = *ibuf;2081 *obuf = *ibuf;
2082 obuf->flags &= ~PIPE_BUF_FLAG_GIFT;2082 obuf->flags &= ~PIPE_BUF_FLAG_GIFT;
2083 obuf->len = rem;2083 obuf->len = rem;
@@ -2100,11 +2100,11 @@ static ssize_t fuse_dev_splice_write(struct pipe_inode_info *pipe, · 16 unmodified lines
2100 ret = fuse_dev_do_write(fud, &cs, len);2100 ret = fuse_dev_do_write(fud, &cs, len);
2101 2101
2102 pipe_lock(pipe);2102 pipe_lock(pipe);
2103out_free:
2103 for (idx = 0; idx < nbuf; idx++)2104 for (idx = 0; idx < nbuf; idx++)
2104 pipe_buf_release(pipe, &bufs[idx]);2105 pipe_buf_release(pipe, &bufs[idx]);
2105 pipe_unlock(pipe);2106 pipe_unlock(pipe);
2106 2107
2107out:
2108 kvfree(bufs);2108 kvfree(bufs);
2109 return ret;2109 return ret;
2110}2110}
fs/hugetlbfs/inode.c+14−6
@@ -755,11 +755,17 @@ static struct inode *hugetlbfs_get_inode(struct super_block *sb, · 754 unmodified lines
755 umode_t mode, dev_t dev)755 umode_t mode, dev_t dev)
756{756{
757 struct inode *inode;757 struct inode *inode;
758 struct resv_map *resv_map;758 struct resv_map *resv_map = NULL;
759 759
760 resv_map = resv_map_alloc();760 /*
761 if (!resv_map)761 * Reserve maps are only needed for inodes that can have associated
762 return NULL;762 * page allocations.
763 */
764 if (S_ISREG(mode) || S_ISLNK(mode)) {
765 resv_map = resv_map_alloc();
766 if (!resv_map)
767 return NULL;
768 }
763 769
764 inode = new_inode(sb);770 inode = new_inode(sb);
765 if (inode) {771 if (inode) {
@@ -794,8 +800,10 @@ static struct inode *hugetlbfs_get_inode(struct super_block *sb, · 28 unmodified lines
794 break;800 break;
795 }801 }
796 lockdep_annotate_inode_mutex_key(inode);802 lockdep_annotate_inode_mutex_key(inode);
797 } else803 } else {
798 kref_put(&resv_map->refs, resv_map_release);804 if (resv_map)
805 kref_put(&resv_map->refs, resv_map_release);
806 }
799 807
800 return inode;808 return inode;
801}809}
fs/io_uring.c+35−11
@@ -338,7 +338,7 @@ static struct io_uring_cqe *io_get_cqring(struct io_ring_ctx *ctx) · 337 unmodified lines
338 tail = ctx->cached_cq_tail;338 tail = ctx->cached_cq_tail;
339 /* See comment at the top of the file */339 /* See comment at the top of the file */
340 smp_rmb();340 smp_rmb();
341 if (tail + 1 == READ_ONCE(ring->r.head))341 if (tail - READ_ONCE(ring->r.head) == ring->ring_entries)
342 return NULL;342 return NULL;
343 343
344 ctx->cached_cq_tail++;344 ctx->cached_cq_tail++;
@@ -682,11 +682,9 @@ static void io_iopoll_req_issued(struct io_kiocb *req) · 337 unmodified lines
682 list_add_tail(&req->list, &ctx->poll_list);682 list_add_tail(&req->list, &ctx->poll_list);
683}683}
684 684
685static void io_file_put(struct io_submit_state *state, struct file *file)685static void io_file_put(struct io_submit_state *state)
686{686{
687 if (!state) {687 if (state->file) {
688 fput(file);
689 } else if (state->file) {
690 int diff = state->has_refs - state->used_refs;688 int diff = state->has_refs - state->used_refs;
691 689
692 if (diff)690 if (diff)
@@ -711,7 +709,7 @@ static struct file *io_file_get(struct io_submit_state *state, int fd) · 18 unmodified lines
711 state->ios_left--;709 state->ios_left--;
712 return state->file;710 return state->file;
713 }711 }
714 io_file_put(state, NULL);712 io_file_put(state);
715 }713 }
716 state->file = fget_many(fd, state->ios_left);714 state->file = fget_many(fd, state->ios_left);
717 if (!state->file)715 if (!state->file)
@@ -1671,7 +1669,7 @@ out: · 953 unmodified lines
1671static void io_submit_state_end(struct io_submit_state *state)1669static void io_submit_state_end(struct io_submit_state *state)
1672{1670{
1673 blk_finish_plug(&state->plug);1671 blk_finish_plug(&state->plug);
1674 io_file_put(state, NULL);1672 io_file_put(state);
1675 if (state->free_reqs)1673 if (state->free_reqs)
1676 kmem_cache_free_bulk(req_cachep, state->free_reqs,1674 kmem_cache_free_bulk(req_cachep, state->free_reqs,
1677 &state->reqs[state->cur_req]);1675 &state->reqs[state->cur_req]);
@@ -1920,6 +1918,10 @@ static int io_sq_thread(void *data) · 242 unmodified lines
1920 unuse_mm(cur_mm);1918 unuse_mm(cur_mm);
1921 mmput(cur_mm);1919 mmput(cur_mm);
1922 }1920 }
1921
1922 if (kthread_should_park())
1923 kthread_parkme();
1924
1923 return 0;1925 return 0;
1924}1926}
1925 1927
@@ -2054,6 +2056,7 @@ static void io_sq_thread_stop(struct io_ring_ctx *ctx) · 128 unmodified lines
2054 if (ctx->sqo_thread) {2056 if (ctx->sqo_thread) {
2055 ctx->sqo_stop = 1;2057 ctx->sqo_stop = 1;
2056 mb();2058 mb();
2059 kthread_park(ctx->sqo_thread);
2057 kthread_stop(ctx->sqo_thread);2060 kthread_stop(ctx->sqo_thread);
2058 ctx->sqo_thread = NULL;2061 ctx->sqo_thread = NULL;
2059 }2062 }
@@ -2215,6 +2218,7 @@ static int io_sqe_files_register(struct io_ring_ctx *ctx, void __user *arg, · 155 unmodified lines
2215 fput(ctx->user_files[i]);2218 fput(ctx->user_files[i]);
2216 2219
2217 kfree(ctx->user_files);2220 kfree(ctx->user_files);
2221 ctx->user_files = NULL;
2218 ctx->nr_user_files = 0;2222 ctx->nr_user_files = 0;
2219 return ret;2223 return ret;
2220 }2224 }
@@ -2235,19 +2239,27 @@ static int io_sq_offload_start(struct io_ring_ctx *ctx, · 14 unmodified lines
2235 mmgrab(current->mm);2239 mmgrab(current->mm);
2236 ctx->sqo_mm = current->mm;2240 ctx->sqo_mm = current->mm;
2237 2241
2238 ctx->sq_thread_idle = msecs_to_jiffies(p->sq_thread_idle);
2239 if (!ctx->sq_thread_idle)
2240 ctx->sq_thread_idle = HZ;
2241
2242 ret = -EINVAL;2242 ret = -EINVAL;
2243 if (!cpu_possible(p->sq_thread_cpu))2243 if (!cpu_possible(p->sq_thread_cpu))
2244 goto err;2244 goto err;
2245 2245
2246 if (ctx->flags & IORING_SETUP_SQPOLL) {2246 if (ctx->flags & IORING_SETUP_SQPOLL) {
2247 ret = -EPERM;
2248 if (!capable(CAP_SYS_ADMIN))
2249 goto err;
2250
2251 ctx->sq_thread_idle = msecs_to_jiffies(p->sq_thread_idle);
2252 if (!ctx->sq_thread_idle)
2253 ctx->sq_thread_idle = HZ;
2254
2247 if (p->flags & IORING_SETUP_SQ_AFF) {2255 if (p->flags & IORING_SETUP_SQ_AFF) {
2248 int cpu;2256 int cpu;
2249 2257
2250 cpu = array_index_nospec(p->sq_thread_cpu, NR_CPUS);2258 cpu = array_index_nospec(p->sq_thread_cpu, NR_CPUS);
2259 ret = -EINVAL;
2260 if (!cpu_possible(p->sq_thread_cpu))
2261 goto err;
2262
2251 ctx->sqo_thread = kthread_create_on_cpu(io_sq_thread,2263 ctx->sqo_thread = kthread_create_on_cpu(io_sq_thread,
2252 ctx, cpu,2264 ctx, cpu,
2253 "io_uring-sq");2265 "io_uring-sq");
@@ -2917,11 +2929,23 @@ SYSCALL_DEFINE2(io_uring_setup, u32, entries, · 663 unmodified lines
2917 2929
2918static int __io_uring_register(struct io_ring_ctx *ctx, unsigned opcode,2930static int __io_uring_register(struct io_ring_ctx *ctx, unsigned opcode,
2919 void __user *arg, unsigned nr_args)2931 void __user *arg, unsigned nr_args)
2932 __releases(ctx->uring_lock)
2933 __acquires(ctx->uring_lock)
2920{2934{
2921 int ret;2935 int ret;
2922 2936
2923 percpu_ref_kill(&ctx->refs);2937 percpu_ref_kill(&ctx->refs);
2938
2939 /*
2940 * Drop uring mutex before waiting for references to exit. If another
2941 * thread is currently inside io_uring_enter() it might need to grab
2942 * the uring_lock to make progress. If we hold it here across the drain
2943 * wait, then we can deadlock. It's safe to drop the mutex here, since
2944 * no new references will come in after we've killed the percpu ref.
2945 */
2946 mutex_unlock(&ctx->uring_lock);
2924 wait_for_completion(&ctx->ctx_done);2947 wait_for_completion(&ctx->ctx_done);
2948 mutex_lock(&ctx->uring_lock);
2925 2949
2926 switch (opcode) {2950 switch (opcode) {
2927 case IORING_REGISTER_BUFFERS:2951 case IORING_REGISTER_BUFFERS:
fs/jffs2/readinode.c+0−5
@@ -1414,11 +1414,6 @@ void jffs2_do_clear_inode(struct jffs2_sb_info *c, struct jffs2_inode_info *f) · 1413 unmodified lines
1414 1414
1415 jffs2_kill_fragtree(&f->fragtree, deleted?c:NULL);1415 jffs2_kill_fragtree(&f->fragtree, deleted?c:NULL);
1416 1416
1417 if (f->target) {
1418 kfree(f->target);
1419 f->target = NULL;
1420 }
1421
1422 fds = f->dents;1417 fds = f->dents;
1423 while(fds) {1418 while(fds) {
1424 fd = fds;1419 fd = fds;
fs/jffs2/super.c+4−1
@@ -47,7 +47,10 @@ static struct inode *jffs2_alloc_inode(struct super_block *sb) · 46 unmodified lines
47static void jffs2_i_callback(struct rcu_head *head)47static void jffs2_i_callback(struct rcu_head *head)
48{48{
49 struct inode *inode = container_of(head, struct inode, i_rcu);49 struct inode *inode = container_of(head, struct inode, i_rcu);
50 kmem_cache_free(jffs2_inode_cachep, JFFS2_INODE_INFO(inode));50 struct jffs2_inode_info *f = JFFS2_INODE_INFO(inode);
51
52 kfree(f->target);
53 kmem_cache_free(jffs2_inode_cachep, f);
51}54}
52 55
53static void jffs2_destroy_inode(struct inode *inode)56static void jffs2_destroy_inode(struct inode *inode)
fs/nfs/nfs42proc.c+0−3
@@ -329,9 +329,6 @@ ssize_t nfs42_proc_copy(struct file *src, loff_t pos_src, · 328 unmodified lines
329 };329 };
330 ssize_t err, err2;330 ssize_t err, err2;
331 331
332 if (!nfs_server_capable(file_inode(dst), NFS_CAP_COPY))
333 return -EOPNOTSUPP;
334
335 src_lock = nfs_get_lock_context(nfs_file_open_context(src));332 src_lock = nfs_get_lock_context(nfs_file_open_context(src));
336 if (IS_ERR(src_lock))333 if (IS_ERR(src_lock))
337 return PTR_ERR(src_lock);334 return PTR_ERR(src_lock);
fs/nfs/nfs4file.c+3−1
@@ -133,8 +133,10 @@ static ssize_t nfs4_copy_file_range(struct file *file_in, loff_t pos_in, · 132 unmodified lines
133 struct file *file_out, loff_t pos_out,133 struct file *file_out, loff_t pos_out,
134 size_t count, unsigned int flags)134 size_t count, unsigned int flags)
135{135{
136 if (!nfs_server_capable(file_inode(file_out), NFS_CAP_COPY))
137 return -EOPNOTSUPP;
136 if (file_inode(file_in) == file_inode(file_out))138 if (file_inode(file_in) == file_inode(file_out))
137 return -EINVAL;139 return -EOPNOTSUPP;
138 return nfs42_proc_copy(file_in, pos_in, file_out, pos_out, count);140 return nfs42_proc_copy(file_in, pos_in, file_out, pos_out, count);
139}141}
140 142
fs/nfs/nfs4xdr.c+2−2
@@ -2589,7 +2589,7 @@ static void nfs4_xdr_enc_getacl(struct rpc_rqst *req, struct xdr_stream *xdr, · 2588 unmodified lines
2589 ARRAY_SIZE(nfs4_acl_bitmap), &hdr);2589 ARRAY_SIZE(nfs4_acl_bitmap), &hdr);
2590 2590
2591 rpc_prepare_reply_pages(req, args->acl_pages, 0,2591 rpc_prepare_reply_pages(req, args->acl_pages, 0,
2592 args->acl_len, replen);2592 args->acl_len, replen + 1);
2593 encode_nops(&hdr);2593 encode_nops(&hdr);
2594}2594}
2595 2595
@@ -2811,7 +2811,7 @@ static void nfs4_xdr_enc_fs_locations(struct rpc_rqst *req, · 215 unmodified lines
2811 }2811 }
2812 2812
2813 rpc_prepare_reply_pages(req, (struct page **)&args->page, 0,2813 rpc_prepare_reply_pages(req, (struct page **)&args->page, 0,
2814 PAGE_SIZE, replen);2814 PAGE_SIZE, replen + 1);
2815 encode_nops(&hdr);2815 encode_nops(&hdr);
2816}2816}
2817 2817
fs/nfs/super.c+2−1
@@ -2041,7 +2041,8 @@ static int nfs23_validate_mount_data(void *options, · 2040 unmodified lines
2041 memcpy(sap, &data->addr, sizeof(data->addr));2041 memcpy(sap, &data->addr, sizeof(data->addr));
2042 args->nfs_server.addrlen = sizeof(data->addr);2042 args->nfs_server.addrlen = sizeof(data->addr);
2043 args->nfs_server.port = ntohs(data->addr.sin_port);2043 args->nfs_server.port = ntohs(data->addr.sin_port);
2044 if (!nfs_verify_server_address(sap))2044 if (sap->sa_family != AF_INET ||
2045 !nfs_verify_server_address(sap))
2045 goto out_no_address;2046 goto out_no_address;
2046 2047
2047 if (!(data->flags & NFS_MOUNT_TCP))2048 if (!(data->flags & NFS_MOUNT_TCP))
fs/open.c+18−0
@@ -1215,3 +1215,21 @@ int nonseekable_open(struct inode *inode, struct file *filp) · 1214 unmodified lines
1215}1215}
1216 1216
1217EXPORT_SYMBOL(nonseekable_open);1217EXPORT_SYMBOL(nonseekable_open);
1218
1219/*
1220 * stream_open is used by subsystems that want stream-like file descriptors.
1221 * Such file descriptors are not seekable and don't have notion of position
1222 * (file.f_pos is always 0). Contrary to file descriptors of other regular
1223 * files, .read() and .write() can run simultaneously.
1224 *
1225 * stream_open never fails and is marked to return int so that it could be
1226 * directly used as file_operations.open .
1227 */
1228int stream_open(struct inode *inode, struct file *filp)
1229{
1230 filp->f_mode &= ~(FMODE_LSEEK | FMODE_PREAD | FMODE_PWRITE | FMODE_ATOMIC_POS);
1231 filp->f_mode |= FMODE_STREAM;
1232 return 0;
1233}
1234
1235EXPORT_SYMBOL(stream_open);
fs/pipe.c+2−2
@@ -188,9 +188,9 @@ EXPORT_SYMBOL(generic_pipe_buf_steal); · 187 unmodified lines
188 * in the tee() system call, when we duplicate the buffers in one188 * in the tee() system call, when we duplicate the buffers in one
189 * pipe into another.189 * pipe into another.
190 */190 */
191void generic_pipe_buf_get(struct pipe_inode_info *pipe, struct pipe_buffer *buf)191bool generic_pipe_buf_get(struct pipe_inode_info *pipe, struct pipe_buffer *buf)
192{192{
193 get_page(buf->page);193 return try_get_page(buf->page);
194}194}
195EXPORT_SYMBOL(generic_pipe_buf_get);195EXPORT_SYMBOL(generic_pipe_buf_get);
196 196
fs/proc/base.c+9−8
@@ -616,24 +616,25 @@ static int proc_pid_limits(struct seq_file *m, struct pid_namespace *ns, · 615 unmodified lines
616static int proc_pid_syscall(struct seq_file *m, struct pid_namespace *ns,616static int proc_pid_syscall(struct seq_file *m, struct pid_namespace *ns,
617 struct pid *pid, struct task_struct *task)617 struct pid *pid, struct task_struct *task)
618{618{
619 long nr;619 struct syscall_info info;
620 unsigned long args[6], sp, pc;620 u64 *args = &info.data.args[0];
621 int res;621 int res;
622 622
623 res = lock_trace(task);623 res = lock_trace(task);
624 if (res)624 if (res)
625 return res;625 return res;
626 626
627 if (task_current_syscall(task, &nr, args, 6, &sp, &pc))627 if (task_current_syscall(task, &info))
628 seq_puts(m, "running\n");628 seq_puts(m, "running\n");
629 else if (nr < 0)629 else if (info.data.nr < 0)
630 seq_printf(m, "%ld 0x%lx 0x%lx\n", nr, sp, pc);630 seq_printf(m, "%d 0x%llx 0x%llx\n",
631 info.data.nr, info.sp, info.data.instruction_pointer);
631 else632 else
632 seq_printf(m,633 seq_printf(m,
633 "%ld 0x%lx 0x%lx 0x%lx 0x%lx 0x%lx 0x%lx 0x%lx 0x%lx\n",634 "%d 0x%llx 0x%llx 0x%llx 0x%llx 0x%llx 0x%llx 0x%llx 0x%llx\n",
634 nr,635 info.data.nr,
635 args[0], args[1], args[2], args[3], args[4], args[5],636 args[0], args[1], args[2], args[3], args[4], args[5],
636 sp, pc);637 info.sp, info.data.instruction_pointer);
637 unlock_trace(task);638 unlock_trace(task);
638 639
639 return 0;640 return 0;
fs/proc/task_mmu.c+18−0
@@ -1143,6 +1143,24 @@ static ssize_t clear_refs_write(struct file *file, const char __user *buf, · 1142 unmodified lines
1143 count = -EINTR;1143 count = -EINTR;
1144 goto out_mm;1144 goto out_mm;
1145 }1145 }
1146 /*
1147 * Avoid to modify vma->vm_flags
1148 * without locked ops while the
1149 * coredump reads the vm_flags.
1150 */
1151 if (!mmget_still_valid(mm)) {
1152 /*
1153 * Silently return "count"
1154 * like if get_task_mm()
1155 * failed. FIXME: should this
1156 * function have returned
1157 * -ESRCH if get_task_mm()
1158 * failed like if
1159 * get_proc_task() fails?
1160 */
1161 up_write(&mm->mmap_sem);
1162 goto out_mm;
1163 }
1146 for (vma = mm->mmap; vma; vma = vma->vm_next) {1164 for (vma = mm->mmap; vma; vma = vma->vm_next) {
1147 vma->vm_flags &= ~VM_SOFTDIRTY;1165 vma->vm_flags &= ~VM_SOFTDIRTY;
1148 vma_set_page_prot(vma);1166 vma_set_page_prot(vma);
fs/read_write.c+3−2
@@ -560,12 +560,13 @@ ssize_t vfs_write(struct file *file, const char __user *buf, size_t count, loff_ · 559 unmodified lines
560 560
561static inline loff_t file_pos_read(struct file *file)561static inline loff_t file_pos_read(struct file *file)
562{562{
563 return file->f_pos;563 return file->f_mode & FMODE_STREAM ? 0 : file->f_pos;
564}564}
565 565
566static inline void file_pos_write(struct file *file, loff_t pos)566static inline void file_pos_write(struct file *file, loff_t pos)
567{567{
568 file->f_pos = pos;568 if ((file->f_mode & FMODE_STREAM) == 0)
569 file->f_pos = pos;
569}570}
570 571
571ssize_t ksys_read(unsigned int fd, char __user *buf, size_t count)572ssize_t ksys_read(unsigned int fd, char __user *buf, size_t count)
fs/splice.c+10−2
@@ -1593,7 +1593,11 @@ retry: · 1592 unmodified lines
1593 * Get a reference to this pipe buffer,1593 * Get a reference to this pipe buffer,
1594 * so we can copy the contents over.1594 * so we can copy the contents over.
1595 */1595 */
1596 pipe_buf_get(ipipe, ibuf);1596 if (!pipe_buf_get(ipipe, ibuf)) {
1597 if (ret == 0)
1598 ret = -EFAULT;
1599 break;
1600 }
1597 *obuf = *ibuf;1601 *obuf = *ibuf;
1598 1602
1599 /*1603 /*
@@ -1667,7 +1671,11 @@ static int link_pipe(struct pipe_inode_info *ipipe, · 67 unmodified lines
1667 * Get a reference to this pipe buffer,1671 * Get a reference to this pipe buffer,
1668 * so we can copy the contents over.1672 * so we can copy the contents over.
1669 */1673 */
1670 pipe_buf_get(ipipe, ibuf);1674 if (!pipe_buf_get(ipipe, ibuf)) {
1675 if (ret == 0)
1676 ret = -EFAULT;
1677 break;
1678 }
1671 1679
1672 obuf = opipe->bufs + nbuf;1680 obuf = opipe->bufs + nbuf;
1673 *obuf = *ibuf;1681 *obuf = *ibuf;
fs/ubifs/super.c+1−3
@@ -276,14 +276,12 @@ static void ubifs_i_callback(struct rcu_head *head) · 275 unmodified lines
276{276{
277 struct inode *inode = container_of(head, struct inode, i_rcu);277 struct inode *inode = container_of(head, struct inode, i_rcu);
278 struct ubifs_inode *ui = ubifs_inode(inode);278 struct ubifs_inode *ui = ubifs_inode(inode);
279 kfree(ui->data);
279 kmem_cache_free(ubifs_inode_slab, ui);280 kmem_cache_free(ubifs_inode_slab, ui);
280}281}
281 282
282static void ubifs_destroy_inode(struct inode *inode)283static void ubifs_destroy_inode(struct inode *inode)
283{284{
284 struct ubifs_inode *ui = ubifs_inode(inode);
285
286 kfree(ui->data);
287 call_rcu(&inode->i_rcu, ubifs_i_callback);285 call_rcu(&inode->i_rcu, ubifs_i_callback);
288}286}
289 287
fs/userfaultfd.c+9−0
@@ -629,6 +629,8 @@ static void userfaultfd_event_wait_completion(struct userfaultfd_ctx *ctx, · 628 unmodified lines
629 629
630 /* the various vma->vm_userfaultfd_ctx still points to it */630 /* the various vma->vm_userfaultfd_ctx still points to it */
631 down_write(&mm->mmap_sem);631 down_write(&mm->mmap_sem);
632 /* no task can run (and in turn coredump) yet */
633 VM_WARN_ON(!mmget_still_valid(mm));
632 for (vma = mm->mmap; vma; vma = vma->vm_next)634 for (vma = mm->mmap; vma; vma = vma->vm_next)
633 if (vma->vm_userfaultfd_ctx.ctx == release_new_ctx) {635 if (vma->vm_userfaultfd_ctx.ctx == release_new_ctx) {
634 vma->vm_userfaultfd_ctx = NULL_VM_UFFD_CTX;636 vma->vm_userfaultfd_ctx = NULL_VM_UFFD_CTX;
@@ -883,6 +885,8 @@ static int userfaultfd_release(struct inode *inode, struct file *file) · 248 unmodified lines
883 * taking the mmap_sem for writing.885 * taking the mmap_sem for writing.
884 */886 */
885 down_write(&mm->mmap_sem);887 down_write(&mm->mmap_sem);
888 if (!mmget_still_valid(mm))
889 goto skip_mm;
886 prev = NULL;890 prev = NULL;
887 for (vma = mm->mmap; vma; vma = vma->vm_next) {891 for (vma = mm->mmap; vma; vma = vma->vm_next) {
888 cond_resched();892 cond_resched();
@@ -905,6 +909,7 @@ static int userfaultfd_release(struct inode *inode, struct file *file) · 16 unmodified lines
905 vma->vm_flags = new_flags;909 vma->vm_flags = new_flags;
906 vma->vm_userfaultfd_ctx = NULL_VM_UFFD_CTX;910 vma->vm_userfaultfd_ctx = NULL_VM_UFFD_CTX;
907 }911 }
912skip_mm:
908 up_write(&mm->mmap_sem);913 up_write(&mm->mmap_sem);
909 mmput(mm);914 mmput(mm);
910wakeup:915wakeup:
@@ -1333,6 +1338,8 @@ static int userfaultfd_register(struct userfaultfd_ctx *ctx, · 422 unmodified lines
1333 goto out;1338 goto out;
1334 1339
1335 down_write(&mm->mmap_sem);1340 down_write(&mm->mmap_sem);
1341 if (!mmget_still_valid(mm))
1342 goto out_unlock;
1336 vma = find_vma_prev(mm, start, &prev);1343 vma = find_vma_prev(mm, start, &prev);
1337 if (!vma)1344 if (!vma)
1338 goto out_unlock;1345 goto out_unlock;
@@ -1520,6 +1527,8 @@ static int userfaultfd_unregister(struct userfaultfd_ctx *ctx, · 181 unmodified lines
1520 goto out;1527 goto out;
1521 1528
1522 down_write(&mm->mmap_sem);1529 down_write(&mm->mmap_sem);
1530 if (!mmget_still_valid(mm))
1531 goto out_unlock;
1523 vma = find_vma_prev(mm, start, &prev);1532 vma = find_vma_prev(mm, start, &prev);
1524 if (!vma)1533 if (!vma)
1525 goto out_unlock;1534 goto out_unlock;
include/asm-generic/syscall.h+5−16
@@ -105,41 +105,30 @@ void syscall_set_return_value(struct task_struct *task, struct pt_regs *regs, · 104 unmodified lines
105 * syscall_get_arguments - extract system call parameter values105 * syscall_get_arguments - extract system call parameter values
106 * @task: task of interest, must be blocked106 * @task: task of interest, must be blocked
107 * @regs: task_pt_regs() of @task107 * @regs: task_pt_regs() of @task
108 * @i: argument index [0,5]
109 * @n: number of arguments; n+i must be [1,6].
110 * @args: array filled with argument values108 * @args: array filled with argument values
111 *109 *
112 * Fetches @n arguments to the system call starting with the @i'th argument110 * Fetches 6 arguments to the system call. First argument is stored in
113 * (from 0 through 5). Argument @i is stored in @args[0], and so on.111* @args[0], and so on.
114 * An arch inline version is probably optimal when @i and @n are constants.
115 *112 *
116 * It's only valid to call this when @task is stopped for tracing on113 * It's only valid to call this when @task is stopped for tracing on
117 * entry to a system call, due to %TIF_SYSCALL_TRACE or %TIF_SYSCALL_AUDIT.114 * entry to a system call, due to %TIF_SYSCALL_TRACE or %TIF_SYSCALL_AUDIT.
118 * It's invalid to call this with @i + @n > 6; we only support system calls
119 * taking up to 6 arguments.
120 */115 */
121void syscall_get_arguments(struct task_struct *task, struct pt_regs *regs,116void syscall_get_arguments(struct task_struct *task, struct pt_regs *regs,
122 unsigned int i, unsigned int n, unsigned long *args);117 unsigned long *args);
123 118
124/**119/**
125 * syscall_set_arguments - change system call parameter value120 * syscall_set_arguments - change system call parameter value
126 * @task: task of interest, must be in system call entry tracing121 * @task: task of interest, must be in system call entry tracing
127 * @regs: task_pt_regs() of @task122 * @regs: task_pt_regs() of @task
128 * @i: argument index [0,5]
129 * @n: number of arguments; n+i must be [1,6].
130 * @args: array of argument values to store123 * @args: array of argument values to store
131 *124 *
132 * Changes @n arguments to the system call starting with the @i'th argument.125 * Changes 6 arguments to the system call.
133 * Argument @i gets value @args[0], and so on.126 * The first argument gets value @args[0], and so on.
134 * An arch inline version is probably optimal when @i and @n are constants.
135 *127 *
136 * It's only valid to call this when @task is stopped for tracing on128 * It's only valid to call this when @task is stopped for tracing on
137 * entry to a system call, due to %TIF_SYSCALL_TRACE or %TIF_SYSCALL_AUDIT.129 * entry to a system call, due to %TIF_SYSCALL_TRACE or %TIF_SYSCALL_AUDIT.
138 * It's invalid to call this with @i + @n > 6; we only support system calls
139 * taking up to 6 arguments.
140 */130 */
141void syscall_set_arguments(struct task_struct *task, struct pt_regs *regs,131void syscall_set_arguments(struct task_struct *task, struct pt_regs *regs,
142 unsigned int i, unsigned int n,
143 const unsigned long *args);132 const unsigned long *args);
144 133
145/**134/**
include/drm/drm_modeset_helper_vtables.h+4−0
@@ -418,6 +418,8 @@ struct drm_crtc_helper_funcs { · 417 unmodified lines
418 * Drivers can use the @old_crtc_state input parameter if the operations418 * Drivers can use the @old_crtc_state input parameter if the operations
419 * needed to enable the CRTC don't depend solely on the new state but419 * needed to enable the CRTC don't depend solely on the new state but
420 * also on the transition between the old state and the new state.420 * also on the transition between the old state and the new state.
421 *
422 * This function is optional.
421 */423 */
422 void (*atomic_enable)(struct drm_crtc *crtc,424 void (*atomic_enable)(struct drm_crtc *crtc,
423 struct drm_crtc_state *old_crtc_state);425 struct drm_crtc_state *old_crtc_state);
@@ -441,6 +443,8 @@ struct drm_crtc_helper_funcs { · 17 unmodified lines
441 * parameter @old_crtc_state which could be used to access the old443 * parameter @old_crtc_state which could be used to access the old
442 * state. Atomic drivers should consider to use this one instead444 * state. Atomic drivers should consider to use this one instead
443 * of @disable.445 * of @disable.
446 *
447 * This function is optional.
444 */448 */
445 void (*atomic_disable)(struct drm_crtc *crtc,449 void (*atomic_disable)(struct drm_crtc *crtc,
446 struct drm_crtc_state *old_crtc_state);450 struct drm_crtc_state *old_crtc_state);
include/dt-bindings/clock/sifive-fu540-prci.h+18−0
@@ -0,0 +1,18 @@
1/* SPDX-License-Identifier: GPL-2.0 */
2/*
3 * Copyright (C) 2018-2019 SiFive, Inc.
4 * Wesley Terpstra
5 * Paul Walmsley
6 */
7
8#ifndef __DT_BINDINGS_CLOCK_SIFIVE_FU540_PRCI_H
9#define __DT_BINDINGS_CLOCK_SIFIVE_FU540_PRCI_H
10
11/* Clock indexes for use by Device Tree data and the PRCI driver */
12
13#define PRCI_CLK_COREPLL 0
14#define PRCI_CLK_DDRPLL 1
15#define PRCI_CLK_GEMGXLPLL 2
16#define PRCI_CLK_TLCLK 3
17
18#endif
include/dt-bindings/reset/amlogic,meson-g12a-reset.h+4−1
@@ -51,7 +51,10 @@ · 50 unmodified lines
51#define RESET_SD_EMMC_A 4451#define RESET_SD_EMMC_A 44
52#define RESET_SD_EMMC_B 4552#define RESET_SD_EMMC_B 45
53#define RESET_SD_EMMC_C 4653#define RESET_SD_EMMC_C 46
54/* 47-60 */54/* 47 */
55#define RESET_USB_PHY20 48
56#define RESET_USB_PHY21 49
57/* 50-60 */
55#define RESET_AUDIO_CODEC 6158#define RESET_AUDIO_CODEC 61
56/* 62-63 */59/* 62-63 */
57/* RESET2 */60/* RESET2 */
include/keys/trusted.h+1−1
@@ -38,7 +38,7 @@ enum { · 37 unmodified lines
38 38
39int TSS_authhmac(unsigned char *digest, const unsigned char *key,39int TSS_authhmac(unsigned char *digest, const unsigned char *key,
40 unsigned int keylen, unsigned char *h1,40 unsigned int keylen, unsigned char *h1,
41 unsigned char *h2, unsigned char h3, ...);41 unsigned char *h2, unsigned int h3, ...);
42int TSS_checkhmac1(unsigned char *buffer,42int TSS_checkhmac1(unsigned char *buffer,
43 const uint32_t command,43 const uint32_t command,
44 const unsigned char *ononce,44 const unsigned char *ononce,
include/linux/bio.h+12−8
@@ -120,19 +120,23 @@ static inline bool bio_full(struct bio *bio) · 119 unmodified lines
120 return bio->bi_vcnt >= bio->bi_max_vecs;120 return bio->bi_vcnt >= bio->bi_max_vecs;
121}121}
122 122
123#define mp_bvec_for_each_segment(bv, bvl, i, iter_all) \123static inline bool bio_next_segment(const struct bio *bio,
124 for (bv = bvec_init_iter_all(&iter_all); \124 struct bvec_iter_all *iter)
125 (iter_all.done < (bvl)->bv_len) && \125{
126 (mp_bvec_next_segment((bvl), &iter_all), 1); \126 if (iter->idx >= bio->bi_vcnt)
127 iter_all.done += bv->bv_len, i += 1)127 return false;
128
129 bvec_advance(&bio->bi_io_vec[iter->idx], iter);
130 return true;
131}
128 132
129/*133/*
130 * drivers should _never_ use the all version - the bio may have been split134 * drivers should _never_ use the all version - the bio may have been split
131 * before it got to the driver and the driver won't own all of it135 * before it got to the driver and the driver won't own all of it
132 */136 */
133#define bio_for_each_segment_all(bvl, bio, i, iter_all) \137#define bio_for_each_segment_all(bvl, bio, i, iter) \
134 for (i = 0, iter_all.idx = 0; iter_all.idx < (bio)->bi_vcnt; iter_all.idx++) \138 for (i = 0, bvl = bvec_init_iter_all(&iter); \
135 mp_bvec_for_each_segment(bvl, &((bio)->bi_io_vec[iter_all.idx]), i, iter_all)139 bio_next_segment((bio), &iter); i++)
136 140
137static inline void bio_advance_iter(struct bio *bio, struct bvec_iter *iter,141static inline void bio_advance_iter(struct bio *bio, struct bvec_iter *iter,
138 unsigned bytes)142 unsigned bytes)
include/linux/bitrev.h+23−23
@@ -34,41 +34,41 @@ static inline u32 __bitrev32(u32 x) · 33 unmodified lines
34 34
35#define __constant_bitrev32(x) \35#define __constant_bitrev32(x) \
36({ \36({ \
37 u32 __x = x; \37 u32 ___x = x; \
38 __x = (__x >> 16) | (__x << 16); \38 ___x = (___x >> 16) | (___x << 16); \
39 __x = ((__x & (u32)0xFF00FF00UL) >> 8) | ((__x & (u32)0x00FF00FFUL) << 8); \39 ___x = ((___x & (u32)0xFF00FF00UL) >> 8) | ((___x & (u32)0x00FF00FFUL) << 8); \
40 __x = ((__x & (u32)0xF0F0F0F0UL) >> 4) | ((__x & (u32)0x0F0F0F0FUL) << 4); \40 ___x = ((___x & (u32)0xF0F0F0F0UL) >> 4) | ((___x & (u32)0x0F0F0F0FUL) << 4); \
41 __x = ((__x & (u32)0xCCCCCCCCUL) >> 2) | ((__x & (u32)0x33333333UL) << 2); \41 ___x = ((___x & (u32)0xCCCCCCCCUL) >> 2) | ((___x & (u32)0x33333333UL) << 2); \
42 __x = ((__x & (u32)0xAAAAAAAAUL) >> 1) | ((__x & (u32)0x55555555UL) << 1); \42 ___x = ((___x & (u32)0xAAAAAAAAUL) >> 1) | ((___x & (u32)0x55555555UL) << 1); \
43 __x; \43 ___x; \
44})44})
45 45
46#define __constant_bitrev16(x) \46#define __constant_bitrev16(x) \
47({ \47({ \
48 u16 __x = x; \48 u16 ___x = x; \
49 __x = (__x >> 8) | (__x << 8); \49 ___x = (___x >> 8) | (___x << 8); \
50 __x = ((__x & (u16)0xF0F0U) >> 4) | ((__x & (u16)0x0F0FU) << 4); \50 ___x = ((___x & (u16)0xF0F0U) >> 4) | ((___x & (u16)0x0F0FU) << 4); \
51 __x = ((__x & (u16)0xCCCCU) >> 2) | ((__x & (u16)0x3333U) << 2); \51 ___x = ((___x & (u16)0xCCCCU) >> 2) | ((___x & (u16)0x3333U) << 2); \
52 __x = ((__x & (u16)0xAAAAU) >> 1) | ((__x & (u16)0x5555U) << 1); \52 ___x = ((___x & (u16)0xAAAAU) >> 1) | ((___x & (u16)0x5555U) << 1); \
53 __x; \53 ___x; \
54})54})
55 55
56#define __constant_bitrev8x4(x) \56#define __constant_bitrev8x4(x) \
57({ \57({ \
58 u32 __x = x; \58 u32 ___x = x; \
59 __x = ((__x & (u32)0xF0F0F0F0UL) >> 4) | ((__x & (u32)0x0F0F0F0FUL) << 4); \59 ___x = ((___x & (u32)0xF0F0F0F0UL) >> 4) | ((___x & (u32)0x0F0F0F0FUL) << 4); \
60 __x = ((__x & (u32)0xCCCCCCCCUL) >> 2) | ((__x & (u32)0x33333333UL) << 2); \60 ___x = ((___x & (u32)0xCCCCCCCCUL) >> 2) | ((___x & (u32)0x33333333UL) << 2); \
61 __x = ((__x & (u32)0xAAAAAAAAUL) >> 1) | ((__x & (u32)0x55555555UL) << 1); \61 ___x = ((___x & (u32)0xAAAAAAAAUL) >> 1) | ((___x & (u32)0x55555555UL) << 1); \
62 __x; \62 ___x; \
63})63})
64 64
65#define __constant_bitrev8(x) \65#define __constant_bitrev8(x) \
66({ \66({ \
67 u8 __x = x; \67 u8 ___x = x; \
68 __x = (__x >> 4) | (__x << 4); \68 ___x = (___x >> 4) | (___x << 4); \
69 __x = ((__x & (u8)0xCCU) >> 2) | ((__x & (u8)0x33U) << 2); \69 ___x = ((___x & (u8)0xCCU) >> 2) | ((___x & (u8)0x33U) << 2); \
70 __x = ((__x & (u8)0xAAU) >> 1) | ((__x & (u8)0x55U) << 1); \70 ___x = ((___x & (u8)0xAAU) >> 1) | ((___x & (u8)0x55U) << 1); \
71 __x; \71 ___x; \
72})72})
73 73
74#define bitrev32(x) \74#define bitrev32(x) \
include/linux/blk-mq.h+1−0
@@ -302,6 +302,7 @@ void blk_mq_requeue_request(struct request *rq, bool kick_requeue_list); · 301 unmodified lines
302void blk_mq_kick_requeue_list(struct request_queue *q);302void blk_mq_kick_requeue_list(struct request_queue *q);
303void blk_mq_delay_kick_requeue_list(struct request_queue *q, unsigned long msecs);303void blk_mq_delay_kick_requeue_list(struct request_queue *q, unsigned long msecs);
304bool blk_mq_complete_request(struct request *rq);304bool blk_mq_complete_request(struct request *rq);
305void blk_mq_complete_request_sync(struct request *rq);
305bool blk_mq_bio_list_merge(struct request_queue *q, struct list_head *list,306bool blk_mq_bio_list_merge(struct request_queue *q, struct list_head *list,
306 struct bio *bio);307 struct bio *bio);
307bool blk_mq_queue_stopped(struct request_queue *q);308bool blk_mq_queue_stopped(struct request_queue *q);
include/linux/blkdev.h+0−1
@@ -548,7 +548,6 @@ struct request_queue { · 547 unmodified lines
548 struct rcu_head rcu_head;548 struct rcu_head rcu_head;
549 wait_queue_head_t mq_freeze_wq;549 wait_queue_head_t mq_freeze_wq;
550 struct percpu_ref q_usage_counter;550 struct percpu_ref q_usage_counter;
551 struct list_head all_q_node;
552 551
553 struct blk_mq_tag_set *tag_set;552 struct blk_mq_tag_set *tag_set;
554 struct list_head tag_set_list;553 struct list_head tag_set_list;
include/linux/bvec.h+18−6
@@ -140,26 +140,38 @@ static inline bool bvec_iter_advance(const struct bio_vec *bv, · 139 unmodified lines
140 140
141static inline struct bio_vec *bvec_init_iter_all(struct bvec_iter_all *iter_all)141static inline struct bio_vec *bvec_init_iter_all(struct bvec_iter_all *iter_all)
142{142{
143 iter_all->bv.bv_page = NULL;
144 iter_all->done = 0;143 iter_all->done = 0;
144 iter_all->idx = 0;
145 145
146 return &iter_all->bv;146 return &iter_all->bv;
147}147}
148 148
149static inline void mp_bvec_next_segment(const struct bio_vec *bvec,149static inline struct page *bvec_nth_page(struct page *page, int idx)
150 struct bvec_iter_all *iter_all)150{
151 return idx == 0 ? page : nth_page(page, idx);
152}
153
154static inline void bvec_advance(const struct bio_vec *bvec,
155 struct bvec_iter_all *iter_all)
151{156{
152 struct bio_vec *bv = &iter_all->bv;157 struct bio_vec *bv = &iter_all->bv;
153 158
154 if (bv->bv_page) {159 if (iter_all->done) {
155 bv->bv_page++;160 bv->bv_page++;
156 bv->bv_offset = 0;161 bv->bv_offset = 0;
157 } else {162 } else {
158 bv->bv_page = bvec->bv_page;163 bv->bv_page = bvec_nth_page(bvec->bv_page, bvec->bv_offset /
159 bv->bv_offset = bvec->bv_offset;164 PAGE_SIZE);
165 bv->bv_offset = bvec->bv_offset & ~PAGE_MASK;
160 }166 }
161 bv->bv_len = min_t(unsigned int, PAGE_SIZE - bv->bv_offset,167 bv->bv_len = min_t(unsigned int, PAGE_SIZE - bv->bv_offset,
162 bvec->bv_len - iter_all->done);168 bvec->bv_len - iter_all->done);
169 iter_all->done += bv->bv_len;
170
171 if (iter_all->done == bvec->bv_len) {
172 iter_all->idx++;
173 iter_all->done = 0;
174 }
163}175}
164 176
165/*177/*
include/linux/efi.h+6−1
@@ -1611,7 +1611,12 @@ efi_status_t efi_setup_gop(efi_system_table_t *sys_table_arg, · 1610 unmodified lines
1611 struct screen_info *si, efi_guid_t *proto,1611 struct screen_info *si, efi_guid_t *proto,
1612 unsigned long size);1612 unsigned long size);
1613 1613
1614bool efi_runtime_disabled(void);1614#ifdef CONFIG_EFI
1615extern bool efi_runtime_disabled(void);
1616#else
1617static inline bool efi_runtime_disabled(void) { return true; }
1618#endif
1619
1615extern void efi_call_virt_check_flags(unsigned long flags, const char *call);1620extern void efi_call_virt_check_flags(unsigned long flags, const char *call);
1616extern unsigned long efi_call_virt_save_flags(void);1621extern unsigned long efi_call_virt_save_flags(void);
1617 1622
include/linux/elevator.h+1−0
@@ -31,6 +31,7 @@ struct elevator_mq_ops { · 30 unmodified lines
31 void (*exit_sched)(struct elevator_queue *);31 void (*exit_sched)(struct elevator_queue *);
32 int (*init_hctx)(struct blk_mq_hw_ctx *, unsigned int);32 int (*init_hctx)(struct blk_mq_hw_ctx *, unsigned int);
33 void (*exit_hctx)(struct blk_mq_hw_ctx *, unsigned int);33 void (*exit_hctx)(struct blk_mq_hw_ctx *, unsigned int);
34 void (*depth_updated)(struct blk_mq_hw_ctx *);
34 35
35 bool (*allow_merge)(struct request_queue *, struct request *, struct bio *);36 bool (*allow_merge)(struct request_queue *, struct request *, struct bio *);
36 bool (*bio_merge)(struct blk_mq_hw_ctx *, struct bio *);37 bool (*bio_merge)(struct blk_mq_hw_ctx *, struct bio *);
include/linux/fs.h+4−0
@@ -158,6 +158,9 @@ typedef int (dio_iodone_t)(struct kiocb *iocb, loff_t offset, · 157 unmodified lines
158#define FMODE_OPENED ((__force fmode_t)0x80000)158#define FMODE_OPENED ((__force fmode_t)0x80000)
159#define FMODE_CREATED ((__force fmode_t)0x100000)159#define FMODE_CREATED ((__force fmode_t)0x100000)
160 160
161/* File is stream-like */
162#define FMODE_STREAM ((__force fmode_t)0x200000)
163
161/* File was opened by fanotify and shouldn't generate fanotify events */164/* File was opened by fanotify and shouldn't generate fanotify events */
162#define FMODE_NONOTIFY ((__force fmode_t)0x4000000)165#define FMODE_NONOTIFY ((__force fmode_t)0x4000000)
163 166
@@ -3074,6 +3077,7 @@ extern loff_t no_seek_end_llseek_size(struct file *, loff_t, int, loff_t); · 2910 unmodified lines
3074extern loff_t no_seek_end_llseek(struct file *, loff_t, int);3077extern loff_t no_seek_end_llseek(struct file *, loff_t, int);
3075extern int generic_file_open(struct inode * inode, struct file * filp);3078extern int generic_file_open(struct inode * inode, struct file * filp);
3076extern int nonseekable_open(struct inode * inode, struct file * filp);3079extern int nonseekable_open(struct inode * inode, struct file * filp);
3080extern int stream_open(struct inode * inode, struct file * filp);
3077 3081
3078#ifdef CONFIG_BLOCK3082#ifdef CONFIG_BLOCK
3079typedef void (dio_submit_t)(struct bio *bio, struct inode *inode,3083typedef void (dio_submit_t)(struct bio *bio, struct inode *inode,
include/linux/kernel.h+2−2
@@ -48,8 +48,8 @@ · 47 unmodified lines
48 48
49#define u64_to_user_ptr(x) ( \49#define u64_to_user_ptr(x) ( \
50{ \50{ \
51 typecheck(u64, x); \51 typecheck(u64, (x)); \
52 (void __user *)(uintptr_t)x; \52 (void __user *)(uintptr_t)(x); \
53} \53} \
54)54)
55 55
include/linux/kprobes.h+1−0
@@ -173,6 +173,7 @@ struct kretprobe_instance { · 172 unmodified lines
173 struct kretprobe *rp;173 struct kretprobe *rp;
174 kprobe_opcode_t *ret_addr;174 kprobe_opcode_t *ret_addr;
175 struct task_struct *task;175 struct task_struct *task;
176 void *fp;
176 char data[0];177 char data[0];
177};178};
178 179
include/linux/kvm_host.h+6−4
@@ -28,6 +28,7 @@ · 27 unmodified lines
28#include <linux/irqbypass.h>28#include <linux/irqbypass.h>
29#include <linux/swait.h>29#include <linux/swait.h>
30#include <linux/refcount.h>30#include <linux/refcount.h>
31#include <linux/nospec.h>
31#include <asm/signal.h>32#include <asm/signal.h>
32 33
33#include <linux/kvm.h>34#include <linux/kvm.h>
@@ -513,10 +514,10 @@ static inline struct kvm_io_bus *kvm_get_bus(struct kvm *kvm, enum kvm_bus idx) · 479 unmodified lines
513 514
514static inline struct kvm_vcpu *kvm_get_vcpu(struct kvm *kvm, int i)515static inline struct kvm_vcpu *kvm_get_vcpu(struct kvm *kvm, int i)
515{516{
516 /* Pairs with smp_wmb() in kvm_vm_ioctl_create_vcpu, in case517 int num_vcpus = atomic_read(&kvm->online_vcpus);
517 * the caller has read kvm->online_vcpus before (as is the case518 i = array_index_nospec(i, num_vcpus);
518 * for kvm_for_each_vcpu, for example).519
519 */520 /* Pairs with smp_wmb() in kvm_vm_ioctl_create_vcpu. */
520 smp_rmb();521 smp_rmb();
521 return kvm->vcpus[i];522 return kvm->vcpus[i];
522}523}
@@ -600,6 +601,7 @@ void kvm_put_kvm(struct kvm *kvm); · 77 unmodified lines
600 601
601static inline struct kvm_memslots *__kvm_memslots(struct kvm *kvm, int as_id)602static inline struct kvm_memslots *__kvm_memslots(struct kvm *kvm, int as_id)
602{603{
604 as_id = array_index_nospec(as_id, KVM_ADDRESS_SPACE_NUM);
603 return srcu_dereference_check(kvm->memslots[as_id], &kvm->srcu,605 return srcu_dereference_check(kvm->memslots[as_id], &kvm->srcu,
604 lockdep_is_held(&kvm->slots_lock) ||606 lockdep_is_held(&kvm->slots_lock) ||
605 !refcount_read(&kvm->users_count));607 !refcount_read(&kvm->users_count));
include/linux/memcontrol.h+4−1
@@ -566,7 +566,10 @@ struct mem_cgroup *lock_page_memcg(struct page *page); · 565 unmodified lines
566void __unlock_page_memcg(struct mem_cgroup *memcg);566void __unlock_page_memcg(struct mem_cgroup *memcg);
567void unlock_page_memcg(struct page *page);567void unlock_page_memcg(struct page *page);
568 568
569/* idx can be of type enum memcg_stat_item or node_stat_item */569/*
570 * idx can be of type enum memcg_stat_item or node_stat_item.
571 * Keep in sync with memcg_exact_page_state().
572 */
570static inline unsigned long memcg_page_state(struct mem_cgroup *memcg,573static inline unsigned long memcg_page_state(struct mem_cgroup *memcg,
571 int idx)574 int idx)
572{575{
include/linux/mii.h+1−1
@@ -469,7 +469,7 @@ static inline u32 linkmode_adv_to_lcl_adv_t(unsigned long *advertising) · 468 unmodified lines
469 if (linkmode_test_bit(ETHTOOL_LINK_MODE_Pause_BIT,469 if (linkmode_test_bit(ETHTOOL_LINK_MODE_Pause_BIT,
470 advertising))470 advertising))
471 lcl_adv |= ADVERTISE_PAUSE_CAP;471 lcl_adv |= ADVERTISE_PAUSE_CAP;
472 if (linkmode_test_bit(ETHTOOL_LINK_MODE_Pause_BIT,472 if (linkmode_test_bit(ETHTOOL_LINK_MODE_Asym_Pause_BIT,
473 advertising))473 advertising))
474 lcl_adv |= ADVERTISE_PAUSE_ASYM;474 lcl_adv |= ADVERTISE_PAUSE_ASYM;
475 475
include/linux/mlx5/driver.h+2−0
@@ -594,6 +594,8 @@ enum mlx5_pagefault_type_flags { · 593 unmodified lines
594};594};
595 595
596struct mlx5_td {596struct mlx5_td {
597 /* protects tirs list changes while tirs refresh */
598 struct mutex list_lock;
597 struct list_head tirs_list;599 struct list_head tirs_list;
598 u32 tdn;600 u32 tdn;
599};601};
include/linux/mm.h+14−1
@@ -966,6 +966,10 @@ static inline bool is_pci_p2pdma_page(const struct page *page) · 965 unmodified lines
966}966}
967#endif /* CONFIG_DEV_PAGEMAP_OPS */967#endif /* CONFIG_DEV_PAGEMAP_OPS */
968 968
969/* 127: arbitrary random number, small enough to assemble well */
970#define page_ref_zero_or_close_to_overflow(page) \
971 ((unsigned int) page_ref_count(page) + 127u <= 127u)
972
969static inline void get_page(struct page *page)973static inline void get_page(struct page *page)
970{974{
971 page = compound_head(page);975 page = compound_head(page);
@@ -973,8 +977,17 @@ static inline void get_page(struct page *page) · 1 unmodified line
973 * Getting a normal page or the head of a compound page977 * Getting a normal page or the head of a compound page
974 * requires to already have an elevated page->_refcount.978 * requires to already have an elevated page->_refcount.
975 */979 */
976 VM_BUG_ON_PAGE(page_ref_count(page) <= 0, page);980 VM_BUG_ON_PAGE(page_ref_zero_or_close_to_overflow(page), page);
981 page_ref_inc(page);
982}
983
984static inline __must_check bool try_get_page(struct page *page)
985{
986 page = compound_head(page);
987 if (WARN_ON_ONCE(page_ref_count(page) <= 0))
988 return false;
977 page_ref_inc(page);989 page_ref_inc(page);
990 return true;
978}991}
979 992
980static inline void put_page(struct page *page)993static inline void put_page(struct page *page)
include/linux/mm_types.h+1−1
@@ -671,7 +671,7 @@ enum vm_fault_reason { · 670 unmodified lines
671 671
672/* Encode hstate index for a hwpoisoned large page */672/* Encode hstate index for a hwpoisoned large page */
673#define VM_FAULT_SET_HINDEX(x) ((__force vm_fault_t)((x) << 16))673#define VM_FAULT_SET_HINDEX(x) ((__force vm_fault_t)((x) << 16))
674#define VM_FAULT_GET_HINDEX(x) (((x) >> 16) & 0xf)674#define VM_FAULT_GET_HINDEX(x) (((__force unsigned int)(x) >> 16) & 0xf)
675 675
676#define VM_FAULT_ERROR (VM_FAULT_OOM | VM_FAULT_SIGBUS | \676#define VM_FAULT_ERROR (VM_FAULT_OOM | VM_FAULT_SIGBUS | \
677 VM_FAULT_SIGSEGV | VM_FAULT_HWPOISON | \677 VM_FAULT_SIGSEGV | VM_FAULT_HWPOISON | \
include/linux/netdevice.h+3−0
@@ -1500,6 +1500,7 @@ struct net_device_ops { · 1499 unmodified lines
1500 * @IFF_FAILOVER: device is a failover master device1500 * @IFF_FAILOVER: device is a failover master device
1501 * @IFF_FAILOVER_SLAVE: device is lower dev of a failover master device1501 * @IFF_FAILOVER_SLAVE: device is lower dev of a failover master device
1502 * @IFF_L3MDEV_RX_HANDLER: only invoke the rx handler of L3 master device1502 * @IFF_L3MDEV_RX_HANDLER: only invoke the rx handler of L3 master device
1503 * @IFF_LIVE_RENAME_OK: rename is allowed while device is up and running
1503 */1504 */
1504enum netdev_priv_flags {1505enum netdev_priv_flags {
1505 IFF_802_1Q_VLAN = 1<<0,1506 IFF_802_1Q_VLAN = 1<<0,
@@ -1532,6 +1533,7 @@ enum netdev_priv_flags { · 26 unmodified lines
1532 IFF_FAILOVER = 1<<27,1533 IFF_FAILOVER = 1<<27,
1533 IFF_FAILOVER_SLAVE = 1<<28,1534 IFF_FAILOVER_SLAVE = 1<<28,
1534 IFF_L3MDEV_RX_HANDLER = 1<<29,1535 IFF_L3MDEV_RX_HANDLER = 1<<29,
1536 IFF_LIVE_RENAME_OK = 1<<30,
1535};1537};
1536 1538
1537#define IFF_802_1Q_VLAN IFF_802_1Q_VLAN1539#define IFF_802_1Q_VLAN IFF_802_1Q_VLAN
@@ -1563,6 +1565,7 @@ enum netdev_priv_flags { · 25 unmodified lines
1563#define IFF_FAILOVER IFF_FAILOVER1565#define IFF_FAILOVER IFF_FAILOVER
1564#define IFF_FAILOVER_SLAVE IFF_FAILOVER_SLAVE1566#define IFF_FAILOVER_SLAVE IFF_FAILOVER_SLAVE
1565#define IFF_L3MDEV_RX_HANDLER IFF_L3MDEV_RX_HANDLER1567#define IFF_L3MDEV_RX_HANDLER IFF_L3MDEV_RX_HANDLER
1568#define IFF_LIVE_RENAME_OK IFF_LIVE_RENAME_OK
1566 1569
1567/**1570/**
1568 * struct net_device - The DEVICE structure.1571 * struct net_device - The DEVICE structure.
include/linux/nvme.h+7−2
@@ -967,8 +967,13 @@ struct nvme_get_log_page_command { · 966 unmodified lines
967 __le16 numdl;967 __le16 numdl;
968 __le16 numdu;968 __le16 numdu;
969 __u16 rsvd11;969 __u16 rsvd11;
970 __le32 lpol;970 union {
971 __le32 lpou;971 struct {
972 __le32 lpol;
973 __le32 lpou;
974 };
975 __le64 lpo;
976 };
972 __u32 rsvd14[2];977 __u32 rsvd14[2];
973};978};
974 979
include/linux/pipe_fs_i.h+6−4
@@ -101,18 +101,20 @@ struct pipe_buf_operations { · 100 unmodified lines
101 /*101 /*
102 * Get a reference to the pipe buffer.102 * Get a reference to the pipe buffer.
103 */103 */
104 void (*get)(struct pipe_inode_info *, struct pipe_buffer *);104 bool (*get)(struct pipe_inode_info *, struct pipe_buffer *);
105};105};
106 106
107/**107/**
108 * pipe_buf_get - get a reference to a pipe_buffer108 * pipe_buf_get - get a reference to a pipe_buffer
109 * @pipe: the pipe that the buffer belongs to109 * @pipe: the pipe that the buffer belongs to
110 * @buf: the buffer to get a reference to110 * @buf: the buffer to get a reference to
111 *
112 * Return: %true if the reference was successfully obtained.
111 */113 */
112static inline void pipe_buf_get(struct pipe_inode_info *pipe,114static inline __must_check bool pipe_buf_get(struct pipe_inode_info *pipe,
113 struct pipe_buffer *buf)115 struct pipe_buffer *buf)
114{116{
115 buf->ops->get(pipe, buf);117 return buf->ops->get(pipe, buf);
116}118}
117 119
118/**120/**
@@ -171,7 +173,7 @@ struct pipe_inode_info *alloc_pipe_info(void); · 52 unmodified lines
171void free_pipe_info(struct pipe_inode_info *);173void free_pipe_info(struct pipe_inode_info *);
172 174
173/* Generic pipe buffer ops functions */175/* Generic pipe buffer ops functions */
174void generic_pipe_buf_get(struct pipe_inode_info *, struct pipe_buffer *);176bool generic_pipe_buf_get(struct pipe_inode_info *, struct pipe_buffer *);
175int generic_pipe_buf_confirm(struct pipe_inode_info *, struct pipe_buffer *);177int generic_pipe_buf_confirm(struct pipe_inode_info *, struct pipe_buffer *);
176int generic_pipe_buf_steal(struct pipe_inode_info *, struct pipe_buffer *);178int generic_pipe_buf_steal(struct pipe_inode_info *, struct pipe_buffer *);
177void generic_pipe_buf_release(struct pipe_inode_info *, struct pipe_buffer *);179void generic_pipe_buf_release(struct pipe_inode_info *, struct pipe_buffer *);
include/linux/platform_data/x86/clk-pmc-atom.h+3−0
@@ -35,10 +35,13 @@ struct pmc_clk { · 34 unmodified lines
35 *35 *
36 * @base: PMC clock register base offset36 * @base: PMC clock register base offset
37 * @clks: pointer to set of registered clocks, typically 0..537 * @clks: pointer to set of registered clocks, typically 0..5
38 * @critical: flag to indicate if firmware enabled pmc_plt_clks
39 * should be marked as critial or not
38 */40 */
39struct pmc_clk_data {41struct pmc_clk_data {
40 void __iomem *base;42 void __iomem *base;
41 const struct pmc_clk *clks;43 const struct pmc_clk *clks;
44 bool critical;
42};45};
43 46
44#endif /* __PLATFORM_DATA_X86_CLK_PMC_ATOM_H */47#endif /* __PLATFORM_DATA_X86_CLK_PMC_ATOM_H */
include/linux/ptrace.h+8−3
@@ -9,6 +9,13 @@ · 8 unmodified lines
9#include <linux/bug.h> /* For BUG_ON. */9#include <linux/bug.h> /* For BUG_ON. */
10#include <linux/pid_namespace.h> /* For task_active_pid_ns. */10#include <linux/pid_namespace.h> /* For task_active_pid_ns. */
11#include <uapi/linux/ptrace.h>11#include <uapi/linux/ptrace.h>
12#include <linux/seccomp.h>
13
14/* Add sp to seccomp_data, as seccomp is user API, we don't want to modify it */
15struct syscall_info {
16 __u64 sp;
17 struct seccomp_data data;
18};
12 19
13extern int ptrace_access_vm(struct task_struct *tsk, unsigned long addr,20extern int ptrace_access_vm(struct task_struct *tsk, unsigned long addr,
14 void *buf, int len, unsigned int gup_flags);21 void *buf, int len, unsigned int gup_flags);
@@ -407,9 +414,7 @@ static inline void user_single_step_report(struct pt_regs *regs) · 392 unmodified lines
407#define current_user_stack_pointer() user_stack_pointer(current_pt_regs())414#define current_user_stack_pointer() user_stack_pointer(current_pt_regs())
408#endif415#endif
409 416
410extern int task_current_syscall(struct task_struct *target, long *callno,417extern int task_current_syscall(struct task_struct *target, struct syscall_info *info);
411 unsigned long args[6], unsigned int maxargs,
412 unsigned long *sp, unsigned long *pc);
413 418
414extern void sigaction_compat_abi(struct k_sigaction *act, struct k_sigaction *oact);419extern void sigaction_compat_abi(struct k_sigaction *act, struct k_sigaction *oact);
415#endif420#endif
include/linux/sched/mm.h+21−0
@@ -49,6 +49,27 @@ static inline void mmdrop(struct mm_struct *mm) · 48 unmodified lines
49 __mmdrop(mm);49 __mmdrop(mm);
50}50}
51 51
52/*
53 * This has to be called after a get_task_mm()/mmget_not_zero()
54 * followed by taking the mmap_sem for writing before modifying the
55 * vmas or anything the coredump pretends not to change from under it.
56 *
57 * NOTE: find_extend_vma() called from GUP context is the only place
58 * that can modify the "mm" (notably the vm_start/end) under mmap_sem
59 * for reading and outside the context of the process, so it is also
60 * the only case that holds the mmap_sem for reading that must call
61 * this function. Generally if the mmap_sem is hold for reading
62 * there's no need of this check after get_task_mm()/mmget_not_zero().
63 *
64 * This function can be obsoleted and the check can be removed, after
65 * the coredump code will hold the mmap_sem for writing before
66 * invoking the ->core_dump methods.
67 */
68static inline bool mmget_still_valid(struct mm_struct *mm)
69{
70 return likely(!mm->core_state);
71}
72
52/**73/**
53 * mmget() - Pin the address space associated with a &struct mm_struct.74 * mmget() - Pin the address space associated with a &struct mm_struct.
54 * @mm: The address space to pin.75 * @mm: The address space to pin.
include/linux/shmem_fs.h+1−0
@@ -21,6 +21,7 @@ struct shmem_inode_info { · 20 unmodified lines
21 struct list_head swaplist; /* chain of maybes on swap */21 struct list_head swaplist; /* chain of maybes on swap */
22 struct shared_policy policy; /* NUMA memory alloc policy */22 struct shared_policy policy; /* NUMA memory alloc policy */
23 struct simple_xattrs xattrs; /* list of xattrs */23 struct simple_xattrs xattrs; /* list of xattrs */
24 atomic_t stop_eviction; /* hold when working on inode */
24 struct inode vfs_inode;25 struct inode vfs_inode;
25};26};
26 27
include/linux/string.h+3−0
@@ -150,6 +150,9 @@ extern void * memscan(void *,int,__kernel_size_t); · 149 unmodified lines
150#ifndef __HAVE_ARCH_MEMCMP150#ifndef __HAVE_ARCH_MEMCMP
151extern int memcmp(const void *,const void *,__kernel_size_t);151extern int memcmp(const void *,const void *,__kernel_size_t);
152#endif152#endif
153#ifndef __HAVE_ARCH_BCMP
154extern int bcmp(const void *,const void *,__kernel_size_t);
155#endif
153#ifndef __HAVE_ARCH_MEMCHR156#ifndef __HAVE_ARCH_MEMCHR
154extern void * memchr(const void *,int,__kernel_size_t);157extern void * memchr(const void *,int,__kernel_size_t);
155#endif158#endif
include/linux/sunrpc/sched.h+0−8
@@ -304,12 +304,4 @@ rpc_clnt_swap_deactivate(struct rpc_clnt *clnt) · 303 unmodified lines
304}304}
305#endif /* CONFIG_SUNRPC_SWAP */305#endif /* CONFIG_SUNRPC_SWAP */
306 306
307static inline bool
308rpc_task_need_resched(const struct rpc_task *task)
309{
310 if (RPC_IS_QUEUED(task) || task->tk_callback)
311 return true;
312 return false;
313}
314
315#endif /* _LINUX_SUNRPC_SCHED_H_ */307#endif /* _LINUX_SUNRPC_SCHED_H_ */
include/linux/virtio_ring.h+1−1
@@ -63,7 +63,7 @@ struct virtqueue; · 62 unmodified lines
63/*63/*
64 * Creates a virtqueue and allocates the descriptor ring. If64 * Creates a virtqueue and allocates the descriptor ring. If
65 * may_reduce_num is set, then this may allocate a smaller ring than65 * may_reduce_num is set, then this may allocate a smaller ring than
66 * expected. The caller should query virtqueue_get_ring_size to learn66 * expected. The caller should query virtqueue_get_vring_size to learn
67 * the actual size of the ring.67 * the actual size of the ring.
68 */68 */
69struct virtqueue *vring_create_virtqueue(unsigned int index,69struct virtqueue *vring_create_virtqueue(unsigned int index,
include/net/af_rxrpc.h+3−1
@@ -61,10 +61,12 @@ int rxrpc_kernel_charge_accept(struct socket *, rxrpc_notify_rx_t, · 60 unmodified lines
61 rxrpc_user_attach_call_t, unsigned long, gfp_t,61 rxrpc_user_attach_call_t, unsigned long, gfp_t,
62 unsigned int);62 unsigned int);
63void rxrpc_kernel_set_tx_length(struct socket *, struct rxrpc_call *, s64);63void rxrpc_kernel_set_tx_length(struct socket *, struct rxrpc_call *, s64);
64u32 rxrpc_kernel_check_life(const struct socket *, const struct rxrpc_call *);64bool rxrpc_kernel_check_life(const struct socket *, const struct rxrpc_call *,
65 u32 *);
65void rxrpc_kernel_probe_life(struct socket *, struct rxrpc_call *);66void rxrpc_kernel_probe_life(struct socket *, struct rxrpc_call *);
66u32 rxrpc_kernel_get_epoch(struct socket *, struct rxrpc_call *);67u32 rxrpc_kernel_get_epoch(struct socket *, struct rxrpc_call *);
67bool rxrpc_kernel_get_reply_time(struct socket *, struct rxrpc_call *,68bool rxrpc_kernel_get_reply_time(struct socket *, struct rxrpc_call *,
68 ktime_t *);69 ktime_t *);
70bool rxrpc_kernel_call_is_complete(struct rxrpc_call *);
69 71
70#endif /* _NET_RXRPC_H */72#endif /* _NET_RXRPC_H */
include/net/cfg80211.h+5−0
@@ -7183,6 +7183,11 @@ void cfg80211_pmsr_complete(struct wireless_dev *wdev, · 7182 unmodified lines
7183#define wiphy_info(wiphy, format, args...) \7183#define wiphy_info(wiphy, format, args...) \
7184 dev_info(&(wiphy)->dev, format, ##args)7184 dev_info(&(wiphy)->dev, format, ##args)
7185 7185
7186#define wiphy_err_ratelimited(wiphy, format, args...) \
7187 dev_err_ratelimited(&(wiphy)->dev, format, ##args)
7188#define wiphy_warn_ratelimited(wiphy, format, args...) \
7189 dev_warn_ratelimited(&(wiphy)->dev, format, ##args)
7190
7186#define wiphy_debug(wiphy, format, args...) \7191#define wiphy_debug(wiphy, format, args...) \
7187 wiphy_printk(KERN_DEBUG, wiphy, format, ##args)7192 wiphy_printk(KERN_DEBUG, wiphy, format, ##args)
7188 7193
include/net/ip.h+1−1
@@ -677,7 +677,7 @@ int ip_options_get_from_user(struct net *net, struct ip_options_rcu **optp, · 676 unmodified lines
677 unsigned char __user *data, int optlen);677 unsigned char __user *data, int optlen);
678void ip_options_undo(struct ip_options *opt);678void ip_options_undo(struct ip_options *opt);
679void ip_forward_options(struct sk_buff *skb);679void ip_forward_options(struct sk_buff *skb);
680int ip_options_rcv_srr(struct sk_buff *skb);680int ip_options_rcv_srr(struct sk_buff *skb, struct net_device *dev);
681 681
682/*682/*
683 * Functions provided by ip_sockglue.c683 * Functions provided by ip_sockglue.c
include/net/mac80211.h+34−29
@@ -6231,8 +6231,6 @@ struct sk_buff *ieee80211_tx_dequeue(struct ieee80211_hw *hw, · 6230 unmodified lines
6231 * @hw: pointer as obtained from ieee80211_alloc_hw()6231 * @hw: pointer as obtained from ieee80211_alloc_hw()
6232 * @ac: AC number to return packets from.6232 * @ac: AC number to return packets from.
6233 *6233 *
6234 * Should only be called between calls to ieee80211_txq_schedule_start()
6235 * and ieee80211_txq_schedule_end().
6236 * Returns the next txq if successful, %NULL if no queue is eligible. If a txq6234 * Returns the next txq if successful, %NULL if no queue is eligible. If a txq
6237 * is returned, it should be returned with ieee80211_return_txq() after the6235 * is returned, it should be returned with ieee80211_return_txq() after the
6238 * driver has finished scheduling it.6236 * driver has finished scheduling it.
@@ -6240,51 +6238,58 @@ struct sk_buff *ieee80211_tx_dequeue(struct ieee80211_hw *hw, · 1 unmodified line
6240struct ieee80211_txq *ieee80211_next_txq(struct ieee80211_hw *hw, u8 ac);6238struct ieee80211_txq *ieee80211_next_txq(struct ieee80211_hw *hw, u8 ac);
6241 6239
6242/**6240/**
6243 * ieee80211_return_txq - return a TXQ previously acquired by ieee80211_next_txq()6241 * ieee80211_txq_schedule_start - start new scheduling round for TXQs
6244 *
6245 * @hw: pointer as obtained from ieee80211_alloc_hw()
6246 * @txq: pointer obtained from station or virtual interface
6247 *
6248 * Should only be called between calls to ieee80211_txq_schedule_start()
6249 * and ieee80211_txq_schedule_end().
6250 */
6251void ieee80211_return_txq(struct ieee80211_hw *hw, struct ieee80211_txq *txq);
6252
6253/**
6254 * ieee80211_txq_schedule_start - acquire locks for safe scheduling of an AC
6255 *6242 *
6256 * @hw: pointer as obtained from ieee80211_alloc_hw()6243 * @hw: pointer as obtained from ieee80211_alloc_hw()
6257 * @ac: AC number to acquire locks for6244 * @ac: AC number to acquire locks for
6258 *6245 *
6259 * Acquire locks needed to schedule TXQs from the given AC. Should be called6246 * Should be called before ieee80211_next_txq() or ieee80211_return_txq().
6260 * before ieee80211_next_txq() or ieee80211_return_txq().6247 * The driver must not call multiple TXQ scheduling rounds concurrently.
6261 */6248 */
6262void ieee80211_txq_schedule_start(struct ieee80211_hw *hw, u8 ac)6249void ieee80211_txq_schedule_start(struct ieee80211_hw *hw, u8 ac);
6263 __acquires(txq_lock);6250
6251/* (deprecated) */
6252static inline void ieee80211_txq_schedule_end(struct ieee80211_hw *hw, u8 ac)
6253{
6254}
6255
6256void __ieee80211_schedule_txq(struct ieee80211_hw *hw,
6257 struct ieee80211_txq *txq, bool force);
6264 6258
6265/**6259/**
6266 * ieee80211_txq_schedule_end - release locks for safe scheduling of an AC6260 * ieee80211_schedule_txq - schedule a TXQ for transmission
6267 *6261 *
6268 * @hw: pointer as obtained from ieee80211_alloc_hw()6262 * @hw: pointer as obtained from ieee80211_alloc_hw()
6269 * @ac: AC number to acquire locks for6263 * @txq: pointer obtained from station or virtual interface
6270 *6264 *
6271 * Release locks previously acquired by ieee80211_txq_schedule_end().6265 * Schedules a TXQ for transmission if it is not already scheduled,
6266 * even if mac80211 does not have any packets buffered.
6267 *
6268 * The driver may call this function if it has buffered packets for
6269 * this TXQ internally.
6272 */6270 */
6273void ieee80211_txq_schedule_end(struct ieee80211_hw *hw, u8 ac)6271static inline void
6274 __releases(txq_lock);6272ieee80211_schedule_txq(struct ieee80211_hw *hw, struct ieee80211_txq *txq)
6273{
6274 __ieee80211_schedule_txq(hw, txq, true);
6275}
6275 6276
6276/**6277/**
6277 * ieee80211_schedule_txq - schedule a TXQ for transmission6278 * ieee80211_return_txq - return a TXQ previously acquired by ieee80211_next_txq()
6278 *6279 *
6279 * @hw: pointer as obtained from ieee80211_alloc_hw()6280 * @hw: pointer as obtained from ieee80211_alloc_hw()
6280 * @txq: pointer obtained from station or virtual interface6281 * @txq: pointer obtained from station or virtual interface
6282 * @force: schedule txq even if mac80211 does not have any buffered packets.
6281 *6283 *
6282 * Schedules a TXQ for transmission if it is not already scheduled. Takes a6284 * The driver may set force=true if it has buffered packets for this TXQ
6283 * lock, which means it must *not* be called between6285 * internally.
6284 * ieee80211_txq_schedule_start() and ieee80211_txq_schedule_end()
6285 */6286 */
6286void ieee80211_schedule_txq(struct ieee80211_hw *hw, struct ieee80211_txq *txq)6287static inline void
6287 __acquires(txq_lock) __releases(txq_lock);6288ieee80211_return_txq(struct ieee80211_hw *hw, struct ieee80211_txq *txq,
6289 bool force)
6290{
6291 __ieee80211_schedule_txq(hw, txq, force);
6292}
6288 6293
6289/**6294/**
6290 * ieee80211_txq_may_transmit - check whether TXQ is allowed to transmit6295 * ieee80211_txq_may_transmit - check whether TXQ is allowed to transmit
include/net/net_namespace.h+1−0
@@ -59,6 +59,7 @@ struct net { · 58 unmodified lines
59 */59 */
60 spinlock_t rules_mod_lock;60 spinlock_t rules_mod_lock;
61 61
62 u32 hash_mix;
62 atomic64_t cookie_gen;63 atomic64_t cookie_gen;
63 64
64 struct list_head list; /* list of network namespaces */65 struct list_head list; /* list of network namespaces */
include/net/netns/hash.h+2−8
@@ -2,16 +2,10 @@ · 1 unmodified line
2#ifndef __NET_NS_HASH_H__2#ifndef __NET_NS_HASH_H__
3#define __NET_NS_HASH_H__3#define __NET_NS_HASH_H__
4 4
5#include <asm/cache.h>5#include <net/net_namespace.h>
6
7struct net;
8 6
9static inline u32 net_hash_mix(const struct net *net)7static inline u32 net_hash_mix(const struct net *net)
10{8{
11#ifdef CONFIG_NET_NS9 return net->hash_mix;
12 return (u32)(((unsigned long)net) >> ilog2(sizeof(*net)));
13#else
14 return 0;
15#endif
16}10}
17#endif11#endif
include/net/netrom.h+1−1
@@ -266,7 +266,7 @@ void nr_stop_idletimer(struct sock *); · 265 unmodified lines
266int nr_t1timer_running(struct sock *);266int nr_t1timer_running(struct sock *);
267 267
268/* sysctl_net_netrom.c */268/* sysctl_net_netrom.c */
269void nr_register_sysctl(void);269int nr_register_sysctl(void);
270void nr_unregister_sysctl(void);270void nr_unregister_sysctl(void);
271 271
272#endif272#endif
include/net/nfc/nci_core.h+1−1
@@ -166,7 +166,7 @@ struct nci_conn_info { · 165 unmodified lines
166 * According to specification 102 622 chapter 4.4 Pipes,166 * According to specification 102 622 chapter 4.4 Pipes,
167 * the pipe identifier is 7 bits long.167 * the pipe identifier is 7 bits long.
168 */168 */
169#define NCI_HCI_MAX_PIPES 127169#define NCI_HCI_MAX_PIPES 128
170 170
171struct nci_hci_gate {171struct nci_hci_gate {
172 u8 gate;172 u8 gate;
include/net/sch_generic.h+37−7
@@ -923,6 +923,41 @@ static inline void qdisc_qstats_overlimit(struct Qdisc *sch) · 922 unmodified lines
923 sch->qstats.overlimits++;923 sch->qstats.overlimits++;
924}924}
925 925
926static inline int qdisc_qstats_copy(struct gnet_dump *d, struct Qdisc *sch)
927{
928 __u32 qlen = qdisc_qlen_sum(sch);
929
930 return gnet_stats_copy_queue(d, sch->cpu_qstats, &sch->qstats, qlen);
931}
932
933static inline void qdisc_qstats_qlen_backlog(struct Qdisc *sch, __u32 *qlen,
934 __u32 *backlog)
935{
936 struct gnet_stats_queue qstats = { 0 };
937 __u32 len = qdisc_qlen_sum(sch);
938
939 __gnet_stats_copy_queue(&qstats, sch->cpu_qstats, &sch->qstats, len);
940 *qlen = qstats.qlen;
941 *backlog = qstats.backlog;
942}
943
944static inline void qdisc_tree_flush_backlog(struct Qdisc *sch)
945{
946 __u32 qlen, backlog;
947
948 qdisc_qstats_qlen_backlog(sch, &qlen, &backlog);
949 qdisc_tree_reduce_backlog(sch, qlen, backlog);
950}
951
952static inline void qdisc_purge_queue(struct Qdisc *sch)
953{
954 __u32 qlen, backlog;
955
956 qdisc_qstats_qlen_backlog(sch, &qlen, &backlog);
957 qdisc_reset(sch);
958 qdisc_tree_reduce_backlog(sch, qlen, backlog);
959}
960
926static inline void qdisc_skb_head_init(struct qdisc_skb_head *qh)961static inline void qdisc_skb_head_init(struct qdisc_skb_head *qh)
927{962{
928 qh->head = NULL;963 qh->head = NULL;
@@ -1106,13 +1141,8 @@ static inline struct Qdisc *qdisc_replace(struct Qdisc *sch, struct Qdisc *new, · 177 unmodified lines
1106 sch_tree_lock(sch);1141 sch_tree_lock(sch);
1107 old = *pold;1142 old = *pold;
1108 *pold = new;1143 *pold = new;
1109 if (old != NULL) {1144 if (old != NULL)
1110 unsigned int qlen = old->q.qlen;1145 qdisc_tree_flush_backlog(old);
1111 unsigned int backlog = old->qstats.backlog;
1112
1113 qdisc_reset(old);
1114 qdisc_tree_reduce_backlog(old, qlen, backlog);
1115 }
1116 sch_tree_unlock(sch);1146 sch_tree_unlock(sch);
1117 1147
1118 return old;1148 return old;
include/net/sock.h+0−6
@@ -2084,12 +2084,6 @@ static inline bool skwq_has_sleeper(struct socket_wq *wq) · 2083 unmodified lines
2084 * @p: poll_table2084 * @p: poll_table
2085 *2085 *
2086 * See the comments in the wq_has_sleeper function.2086 * See the comments in the wq_has_sleeper function.
2087 *
2088 * Do not derive sock from filp->private_data here. An SMC socket establishes
2089 * an internal TCP socket that is used in the fallback case. All socket
2090 * operations on the SMC socket are then forwarded to the TCP socket. In case of
2091 * poll, the filp->private_data pointer references the SMC socket because the
2092 * TCP socket has no file assigned.
2093 */2087 */
2094static inline void sock_poll_wait(struct file *filp, struct socket *sock,2088static inline void sock_poll_wait(struct file *filp, struct socket *sock,
2095 poll_table *p)2089 poll_table *p)
include/net/tls.h+3−1
@@ -307,6 +307,7 @@ int tls_device_sendmsg(struct sock *sk, struct msghdr *msg, size_t size); · 306 unmodified lines
307int tls_device_sendpage(struct sock *sk, struct page *page,307int tls_device_sendpage(struct sock *sk, struct page *page,
308 int offset, size_t size, int flags);308 int offset, size_t size, int flags);
309void tls_device_sk_destruct(struct sock *sk);309void tls_device_sk_destruct(struct sock *sk);
310void tls_device_free_resources_tx(struct sock *sk);
310void tls_device_init(void);311void tls_device_init(void);
311void tls_device_cleanup(void);312void tls_device_cleanup(void);
312int tls_tx_records(struct sock *sk, int flags);313int tls_tx_records(struct sock *sk, int flags);
@@ -330,6 +331,7 @@ int tls_push_sg(struct sock *sk, struct tls_context *ctx, · 17 unmodified lines
330 int flags);331 int flags);
331int tls_push_partial_record(struct sock *sk, struct tls_context *ctx,332int tls_push_partial_record(struct sock *sk, struct tls_context *ctx,
332 int flags);333 int flags);
334bool tls_free_partial_record(struct sock *sk, struct tls_context *ctx);
333 335
334static inline struct tls_msg *tls_msg(struct sk_buff *skb)336static inline struct tls_msg *tls_msg(struct sk_buff *skb)
335{337{
@@ -379,7 +381,7 @@ tls_validate_xmit_skb(struct sock *sk, struct net_device *dev, · 43 unmodified lines
379static inline bool tls_is_sk_tx_device_offloaded(struct sock *sk)381static inline bool tls_is_sk_tx_device_offloaded(struct sock *sk)
380{382{
381#ifdef CONFIG_SOCK_VALIDATE_XMIT383#ifdef CONFIG_SOCK_VALIDATE_XMIT
382 return sk_fullsock(sk) &384 return sk_fullsock(sk) &&
383 (smp_load_acquire(&sk->sk_validate_xmit_skb) ==385 (smp_load_acquire(&sk->sk_validate_xmit_skb) ==
384 &tls_validate_xmit_skb);386 &tls_validate_xmit_skb);
385#else387#else
include/sound/soc.h+9−2
@@ -802,8 +802,13 @@ struct snd_soc_component_driver { · 801 unmodified lines
802 int probe_order;802 int probe_order;
803 int remove_order;803 int remove_order;
804 804
805 /* signal if the module handling the component cannot be removed */805 /*
806 unsigned int ignore_module_refcount:1;806 * signal if the module handling the component should not be removed
807 * if a pcm is open. Setting this would prevent the module
808 * refcount being incremented in probe() but allow it be incremented
809 * when a pcm is opened and decremented when it is closed.
810 */
811 unsigned int module_get_upon_open:1;
807 812
808 /* bits */813 /* bits */
809 unsigned int idle_bias_on:1;814 unsigned int idle_bias_on:1;
@@ -1083,6 +1088,8 @@ struct snd_soc_card { · 273 unmodified lines
1083 struct mutex mutex;1088 struct mutex mutex;
1084 struct mutex dapm_mutex;1089 struct mutex dapm_mutex;
1085 1090
1091 spinlock_t dpcm_lock;
1092
1086 bool instantiated;1093 bool instantiated;
1087 bool topology_shortname_created;1094 bool topology_shortname_created;
1088 1095
include/trace/events/syscalls.h+1−1
@@ -28,7 +28,7 @@ TRACE_EVENT_FN(sys_enter, · 27 unmodified lines
28 28
29 TP_fast_assign(29 TP_fast_assign(
30 __entry->id = id;30 __entry->id = id;
31 syscall_get_arguments(current, regs, 0, 6, __entry->args);31 syscall_get_arguments(current, regs, __entry->args);
32 ),32 ),
33 33
34 TP_printk("NR %ld (%lx, %lx, %lx, %lx, %lx, %lx)",34 TP_printk("NR %ld (%lx, %lx, %lx, %lx, %lx, %lx)",
include/uapi/linux/ethtool.h+1−1
@@ -1591,7 +1591,7 @@ enum ethtool_link_mode_bit_indices { · 1590 unmodified lines
1591 1591
1592static inline int ethtool_validate_speed(__u32 speed)1592static inline int ethtool_validate_speed(__u32 speed)
1593{1593{
1594 return speed <= INT_MAX || speed == SPEED_UNKNOWN;1594 return speed <= INT_MAX || speed == (__u32)SPEED_UNKNOWN;
1595}1595}
1596 1596
1597/* Duplex, half or full. */1597/* Duplex, half or full. */
include/uapi/linux/input-event-codes.h+4−2
@@ -439,10 +439,12 @@ · 438 unmodified lines
439#define KEY_TITLE 0x171439#define KEY_TITLE 0x171
440#define KEY_SUBTITLE 0x172440#define KEY_SUBTITLE 0x172
441#define KEY_ANGLE 0x173441#define KEY_ANGLE 0x173
442#define KEY_ZOOM 0x174442#define KEY_FULL_SCREEN 0x174 /* AC View Toggle */
443#define KEY_ZOOM KEY_FULL_SCREEN
443#define KEY_MODE 0x175444#define KEY_MODE 0x175
444#define KEY_KEYBOARD 0x176445#define KEY_KEYBOARD 0x176
445#define KEY_SCREEN 0x177446#define KEY_ASPECT_RATIO 0x177 /* HUTRR37: Aspect */
447#define KEY_SCREEN KEY_ASPECT_RATIO
446#define KEY_PC 0x178 /* Media Select Computer */448#define KEY_PC 0x178 /* Media Select Computer */
447#define KEY_TV 0x179 /* Media Select TV */449#define KEY_TV 0x179 /* Media Select TV */
448#define KEY_TV2 0x17a /* Media Select Cable */450#define KEY_TV2 0x17a /* Media Select Cable */
include/uapi/sound/asound.h+1−0
@@ -32,6 +32,7 @@ · 31 unmodified lines
32 32
33#ifndef __KERNEL__33#ifndef __KERNEL__
34#include <stdlib.h>34#include <stdlib.h>
35#include <time.h>
35#endif36#endif
36 37
37/*38/*
init/main.c+2−2
@@ -582,6 +582,8 @@ asmlinkage __visible void __init start_kernel(void) · 581 unmodified lines
582 page_alloc_init();582 page_alloc_init();
583 583
584 pr_notice("Kernel command line: %s\n", boot_command_line);584 pr_notice("Kernel command line: %s\n", boot_command_line);
585 /* parameters may set static keys */
586 jump_label_init();
585 parse_early_param();587 parse_early_param();
586 after_dashes = parse_args("Booting kernel",588 after_dashes = parse_args("Booting kernel",
587 static_command_line, __start___param,589 static_command_line, __start___param,
@@ -591,8 +593,6 @@ asmlinkage __visible void __init start_kernel(void) · 3 unmodified lines
591 parse_args("Setting init args", after_dashes, NULL, 0, -1, -1,593 parse_args("Setting init args", after_dashes, NULL, 0, -1, -1,
592 NULL, set_init_arg);594 NULL, set_init_arg);
593 595
594 jump_label_init();
595
596 /*596 /*
597 * These use large bootmem allocations and must precede597 * These use large bootmem allocations and must precede
598 * kmem_cache_init()598 * kmem_cache_init()
kernel/bpf/cpumap.c+10−3
@@ -162,10 +162,14 @@ static void cpu_map_kthread_stop(struct work_struct *work) · 161 unmodified lines
162static struct sk_buff *cpu_map_build_skb(struct bpf_cpu_map_entry *rcpu,162static struct sk_buff *cpu_map_build_skb(struct bpf_cpu_map_entry *rcpu,
163 struct xdp_frame *xdpf)163 struct xdp_frame *xdpf)
164{164{
165 unsigned int hard_start_headroom;
165 unsigned int frame_size;166 unsigned int frame_size;
166 void *pkt_data_start;167 void *pkt_data_start;
167 struct sk_buff *skb;168 struct sk_buff *skb;
168 169
170 /* Part of headroom was reserved to xdpf */
171 hard_start_headroom = sizeof(struct xdp_frame) + xdpf->headroom;
172
169 /* build_skb need to place skb_shared_info after SKB end, and173 /* build_skb need to place skb_shared_info after SKB end, and
170 * also want to know the memory "truesize". Thus, need to174 * also want to know the memory "truesize". Thus, need to
171 * know the memory frame size backing xdp_buff.175 * know the memory frame size backing xdp_buff.
@@ -183,15 +187,15 @@ static struct sk_buff *cpu_map_build_skb(struct bpf_cpu_map_entry *rcpu, · 11 unmodified lines
183 * is not at a fixed memory location, with mixed length187 * is not at a fixed memory location, with mixed length
184 * packets, which is bad for cache-line hotness.188 * packets, which is bad for cache-line hotness.
185 */189 */
186 frame_size = SKB_DATA_ALIGN(xdpf->len + xdpf->headroom) +190 frame_size = SKB_DATA_ALIGN(xdpf->len + hard_start_headroom) +
187 SKB_DATA_ALIGN(sizeof(struct skb_shared_info));191 SKB_DATA_ALIGN(sizeof(struct skb_shared_info));
188 192
189 pkt_data_start = xdpf->data - xdpf->headroom;193 pkt_data_start = xdpf->data - hard_start_headroom;
190 skb = build_skb(pkt_data_start, frame_size);194 skb = build_skb(pkt_data_start, frame_size);
191 if (!skb)195 if (!skb)
192 return NULL;196 return NULL;
193 197
194 skb_reserve(skb, xdpf->headroom);198 skb_reserve(skb, hard_start_headroom);
195 __skb_put(skb, xdpf->len);199 __skb_put(skb, xdpf->len);
196 if (xdpf->metasize)200 if (xdpf->metasize)
197 skb_metadata_set(skb, xdpf->metasize);201 skb_metadata_set(skb, xdpf->metasize);
@@ -205,6 +209,9 @@ static struct sk_buff *cpu_map_build_skb(struct bpf_cpu_map_entry *rcpu, · 7 unmodified lines
205 * - RX ring dev queue index (skb_record_rx_queue)209 * - RX ring dev queue index (skb_record_rx_queue)
206 */210 */
207 211
212 /* Allow SKB to reuse area used by xdp_frame */
213 xdp_scrub_frame(xdpf);
214
208 return skb;215 return skb;
209}216}
210 217
kernel/bpf/inode.c+18−14
@@ -554,19 +554,6 @@ struct bpf_prog *bpf_prog_get_type_path(const char *name, enum bpf_prog_type typ · 553 unmodified lines
554}554}
555EXPORT_SYMBOL(bpf_prog_get_type_path);555EXPORT_SYMBOL(bpf_prog_get_type_path);
556 556
557static void bpf_evict_inode(struct inode *inode)
558{
559 enum bpf_type type;
560
561 truncate_inode_pages_final(&inode->i_data);
562 clear_inode(inode);
563
564 if (S_ISLNK(inode->i_mode))
565 kfree(inode->i_link);
566 if (!bpf_inode_type(inode, &type))
567 bpf_any_put(inode->i_private, type);
568}
569
570/*557/*
571 * Display the mount options in /proc/mounts.558 * Display the mount options in /proc/mounts.
572 */559 */
@@ -579,11 +566,28 @@ static int bpf_show_options(struct seq_file *m, struct dentry *root) · 6 unmodified lines
579 return 0;566 return 0;
580}567}
581 568
569static void bpf_destroy_inode_deferred(struct rcu_head *head)
570{
571 struct inode *inode = container_of(head, struct inode, i_rcu);
572 enum bpf_type type;
573
574 if (S_ISLNK(inode->i_mode))
575 kfree(inode->i_link);
576 if (!bpf_inode_type(inode, &type))
577 bpf_any_put(inode->i_private, type);
578 free_inode_nonrcu(inode);
579}
580
581static void bpf_destroy_inode(struct inode *inode)
582{
583 call_rcu(&inode->i_rcu, bpf_destroy_inode_deferred);
584}
585
582static const struct super_operations bpf_super_ops = {586static const struct super_operations bpf_super_ops = {
583 .statfs = simple_statfs,587 .statfs = simple_statfs,
584 .drop_inode = generic_delete_inode,588 .drop_inode = generic_delete_inode,
585 .show_options = bpf_show_options,589 .show_options = bpf_show_options,
586 .evict_inode = bpf_evict_inode,590 .destroy_inode = bpf_destroy_inode,
587};591};
588 592
589enum {593enum {
kernel/bpf/verifier.c+3−2
@@ -1897,8 +1897,9 @@ continue_func: · 1896 unmodified lines
1897 }1897 }
1898 frame++;1898 frame++;
1899 if (frame >= MAX_CALL_FRAMES) {1899 if (frame >= MAX_CALL_FRAMES) {
1900 WARN_ONCE(1, "verifier bug. Call stack is too deep\n");1900 verbose(env, "the call stack of %d frames is too deep !\n",
1901 return -EFAULT;1901 frame);
1902 return -E2BIG;
1902 }1903 }
1903 goto process_func;1904 goto process_func;
1904 }1905 }
kernel/dma/debug.c+1−1
@@ -706,7 +706,7 @@ static struct dma_debug_entry *dma_entry_alloc(void) · 705 unmodified lines
706#ifdef CONFIG_STACKTRACE706#ifdef CONFIG_STACKTRACE
707 entry->stacktrace.max_entries = DMA_DEBUG_STACKTRACE_ENTRIES;707 entry->stacktrace.max_entries = DMA_DEBUG_STACKTRACE_ENTRIES;
708 entry->stacktrace.entries = entry->st_entries;708 entry->stacktrace.entries = entry->st_entries;
709 entry->stacktrace.skip = 2;709 entry->stacktrace.skip = 1;
710 save_stack_trace(&entry->stacktrace);710 save_stack_trace(&entry->stacktrace);
711#endif711#endif
712 712
kernel/events/core.c+64−25
@@ -2009,8 +2009,8 @@ event_sched_out(struct perf_event *event, · 2008 unmodified lines
2009 event->pmu->del(event, 0);2009 event->pmu->del(event, 0);
2010 event->oncpu = -1;2010 event->oncpu = -1;
2011 2011
2012 if (event->pending_disable) {2012 if (READ_ONCE(event->pending_disable) >= 0) {
2013 event->pending_disable = 0;2013 WRITE_ONCE(event->pending_disable, -1);
2014 state = PERF_EVENT_STATE_OFF;2014 state = PERF_EVENT_STATE_OFF;
2015 }2015 }
2016 perf_event_set_state(event, state);2016 perf_event_set_state(event, state);
@@ -2198,7 +2198,8 @@ EXPORT_SYMBOL_GPL(perf_event_disable); · 181 unmodified lines
2198 2198
2199void perf_event_disable_inatomic(struct perf_event *event)2199void perf_event_disable_inatomic(struct perf_event *event)
2200{2200{
2201 event->pending_disable = 1;2201 WRITE_ONCE(event->pending_disable, smp_processor_id());
2202 /* can fail, see perf_pending_event_disable() */
2202 irq_work_queue(&event->pending);2203 irq_work_queue(&event->pending);
2203}2204}
2204 2205
@@ -5810,10 +5811,45 @@ void perf_event_wakeup(struct perf_event *event) · 3605 unmodified lines
5810 }5811 }
5811}5812}
5812 5813
5814static void perf_pending_event_disable(struct perf_event *event)
5815{
5816 int cpu = READ_ONCE(event->pending_disable);
5817
5818 if (cpu < 0)
5819 return;
5820
5821 if (cpu == smp_processor_id()) {
5822 WRITE_ONCE(event->pending_disable, -1);
5823 perf_event_disable_local(event);
5824 return;
5825 }
5826
5827 /*
5828 * CPU-A CPU-B
5829 *
5830 * perf_event_disable_inatomic()
5831 * @pending_disable = CPU-A;
5832 * irq_work_queue();
5833 *
5834 * sched-out
5835 * @pending_disable = -1;
5836 *
5837 * sched-in
5838 * perf_event_disable_inatomic()
5839 * @pending_disable = CPU-B;
5840 * irq_work_queue(); // FAILS
5841 *
5842 * irq_work_run()
5843 * perf_pending_event()
5844 *
5845 * But the event runs on CPU-B and wants disabling there.
5846 */
5847 irq_work_queue_on(&event->pending, cpu);
5848}
5849
5813static void perf_pending_event(struct irq_work *entry)5850static void perf_pending_event(struct irq_work *entry)
5814{5851{
5815 struct perf_event *event = container_of(entry,5852 struct perf_event *event = container_of(entry, struct perf_event, pending);
5816 struct perf_event, pending);
5817 int rctx;5853 int rctx;
5818 5854
5819 rctx = perf_swevent_get_recursion_context();5855 rctx = perf_swevent_get_recursion_context();
@@ -5822,10 +5858,7 @@ static void perf_pending_event(struct irq_work *entry) · 2 unmodified lines
5822 * and we won't recurse 'further'.5858 * and we won't recurse 'further'.
5823 */5859 */
5824 5860
5825 if (event->pending_disable) {5861 perf_pending_event_disable(event);
5826 event->pending_disable = 0;
5827 perf_event_disable_local(event);
5828 }
5829 5862
5830 if (event->pending_wakeup) {5863 if (event->pending_wakeup) {
5831 event->pending_wakeup = 0;5864 event->pending_wakeup = 0;
@@ -9044,26 +9077,29 @@ static void perf_event_addr_filters_apply(struct perf_event *event) · 3212 unmodified lines
9044 if (task == TASK_TOMBSTONE)9077 if (task == TASK_TOMBSTONE)
9045 return;9078 return;
9046 9079
9047 if (!ifh->nr_file_filters)9080 if (ifh->nr_file_filters) {
9048 return;9081 mm = get_task_mm(event->ctx->task);
9049 9082 if (!mm)
9050 mm = get_task_mm(event->ctx->task);9083 goto restart;
9051 if (!mm)
9052 goto restart;
9053 9084
9054 down_read(&mm->mmap_sem);9085 down_read(&mm->mmap_sem);
9086 }
9055 9087
9056 raw_spin_lock_irqsave(&ifh->lock, flags);9088 raw_spin_lock_irqsave(&ifh->lock, flags);
9057 list_for_each_entry(filter, &ifh->list, entry) {9089 list_for_each_entry(filter, &ifh->list, entry) {
9058 event->addr_filter_ranges[count].start = 0;9090 if (filter->path.dentry) {
9059 event->addr_filter_ranges[count].size = 0;9091 /*
9092 * Adjust base offset if the filter is associated to a
9093 * binary that needs to be mapped:
9094 */
9095 event->addr_filter_ranges[count].start = 0;
9096 event->addr_filter_ranges[count].size = 0;
9060 9097
9061 /*
9062 * Adjust base offset if the filter is associated to a binary
9063 * that needs to be mapped:
9064 */
9065 if (filter->path.dentry)
9066 perf_addr_filter_apply(filter, mm, &event->addr_filter_ranges[count]);9098 perf_addr_filter_apply(filter, mm, &event->addr_filter_ranges[count]);
9099 } else {
9100 event->addr_filter_ranges[count].start = filter->offset;
9101 event->addr_filter_ranges[count].size = filter->size;
9102 }
9067 9103
9068 count++;9104 count++;
9069 }9105 }
@@ -9071,9 +9107,11 @@ static void perf_event_addr_filters_apply(struct perf_event *event) · 1 unmodified line
9071 event->addr_filters_gen++;9107 event->addr_filters_gen++;
9072 raw_spin_unlock_irqrestore(&ifh->lock, flags);9108 raw_spin_unlock_irqrestore(&ifh->lock, flags);
9073 9109
9074 up_read(&mm->mmap_sem);9110 if (ifh->nr_file_filters) {
9111 up_read(&mm->mmap_sem);
9075 9112
9076 mmput(mm);9113 mmput(mm);
9114 }
9077 9115
9078restart:9116restart:
9079 perf_event_stop(event, 1);9117 perf_event_stop(event, 1);
@@ -10236,6 +10274,7 @@ perf_event_alloc(struct perf_event_attr *attr, int cpu, · 1156 unmodified lines
10236 10274
10237 10275
10238 init_waitqueue_head(&event->waitq);10276 init_waitqueue_head(&event->waitq);
10277 event->pending_disable = -1;
10239 init_irq_work(&event->pending, perf_pending_event);10278 init_irq_work(&event->pending, perf_pending_event);
10240 10279
10241 mutex_init(&event->mmap_mutex);10280 mutex_init(&event->mmap_mutex);
kernel/events/ring_buffer.c+17−20
@@ -392,7 +392,7 @@ void *perf_aux_output_begin(struct perf_output_handle *handle, · 391 unmodified lines
392 * store that will be enabled on successful return392 * store that will be enabled on successful return
393 */393 */
394 if (!handle->size) { /* A, matches D */394 if (!handle->size) { /* A, matches D */
395 event->pending_disable = 1;395 event->pending_disable = smp_processor_id();
396 perf_output_wakeup(handle);396 perf_output_wakeup(handle);
397 local_set(&rb->aux_nest, 0);397 local_set(&rb->aux_nest, 0);
398 goto err_put;398 goto err_put;
@@ -455,24 +455,21 @@ void perf_aux_output_end(struct perf_output_handle *handle, unsigned long size) · 56 unmodified lines
455 rb->aux_head += size;455 rb->aux_head += size;
456 }456 }
457 457
458 if (size || handle->aux_flags) {458 /*
459 /*459 * Only send RECORD_AUX if we have something useful to communicate
460 * Only send RECORD_AUX if we have something useful to communicate460 *
461 *461 * Note: the OVERWRITE records by themselves are not considered
462 * Note: the OVERWRITE records by themselves are not considered462 * useful, as they don't communicate any *new* information,
463 * useful, as they don't communicate any *new* information,463 * aside from the short-lived offset, that becomes history at
464 * aside from the short-lived offset, that becomes history at464 * the next event sched-in and therefore isn't useful.
465 * the next event sched-in and therefore isn't useful.465 * The userspace that needs to copy out AUX data in overwrite
466 * The userspace that needs to copy out AUX data in overwrite466 * mode should know to use user_page::aux_head for the actual
467 * mode should know to use user_page::aux_head for the actual467 * offset. So, from now on we don't output AUX records that
468 * offset. So, from now on we don't output AUX records that468 * have *only* OVERWRITE flag set.
469 * have *only* OVERWRITE flag set.469 */
470 */470 if (size || (handle->aux_flags & ~(u64)PERF_AUX_FLAG_OVERWRITE))
471 471 perf_event_aux_event(handle->event, aux_head, size,
472 if (handle->aux_flags & ~(u64)PERF_AUX_FLAG_OVERWRITE)472 handle->aux_flags);
473 perf_event_aux_event(handle->event, aux_head, size,
474 handle->aux_flags);
475 }
476 473
477 rb->user_page->aux_head = rb->aux_head;474 rb->user_page->aux_head = rb->aux_head;
478 if (rb_need_aux_wakeup(rb))475 if (rb_need_aux_wakeup(rb))
@@ -480,7 +477,7 @@ void perf_aux_output_end(struct perf_output_handle *handle, unsigned long size) · 1 unmodified line
480 477
481 if (wakeup) {478 if (wakeup) {
482 if (handle->aux_flags & PERF_AUX_FLAG_TRUNCATED)479 if (handle->aux_flags & PERF_AUX_FLAG_TRUNCATED)
483 handle->event->pending_disable = 1;480 handle->event->pending_disable = smp_processor_id();
484 perf_output_wakeup(handle);481 perf_output_wakeup(handle);
485 }482 }
486 483
kernel/irq/chip.c+4−0
@@ -1449,6 +1449,10 @@ int irq_chip_set_vcpu_affinity_parent(struct irq_data *data, void *vcpu_info) · 1448 unmodified lines
1449int irq_chip_set_wake_parent(struct irq_data *data, unsigned int on)1449int irq_chip_set_wake_parent(struct irq_data *data, unsigned int on)
1450{1450{
1451 data = data->parent_data;1451 data = data->parent_data;
1452
1453 if (data->chip->flags & IRQCHIP_SKIP_SET_WAKE)
1454 return 0;
1455
1452 if (data->chip->irq_set_wake)1456 if (data->chip->irq_set_wake)
1453 return data->chip->irq_set_wake(data, on);1457 return data->chip->irq_set_wake(data, on);
1454 1458
kernel/irq/irqdesc.c+1−0
@@ -558,6 +558,7 @@ int __init early_irq_init(void) · 557 unmodified lines
558 alloc_masks(&desc[i], node);558 alloc_masks(&desc[i], node);
559 raw_spin_lock_init(&desc[i].lock);559 raw_spin_lock_init(&desc[i].lock);
560 lockdep_set_class(&desc[i].lock, &irq_desc_lock_class);560 lockdep_set_class(&desc[i].lock, &irq_desc_lock_class);
561 mutex_init(&desc[i].request_mutex);
561 desc_set_defaults(i, &desc[i], node, NULL, NULL);562 desc_set_defaults(i, &desc[i], node, NULL, NULL);
562 }563 }
563 return arch_early_irq_init();564 return arch_early_irq_init();
kernel/kprobes.c+2−4
@@ -709,7 +709,6 @@ static void unoptimize_kprobe(struct kprobe *p, bool force) · 708 unmodified lines
709static int reuse_unused_kprobe(struct kprobe *ap)709static int reuse_unused_kprobe(struct kprobe *ap)
710{710{
711 struct optimized_kprobe *op;711 struct optimized_kprobe *op;
712 int ret;
713 712
714 /*713 /*
715 * Unused kprobe MUST be on the way of delayed unoptimizing (means714 * Unused kprobe MUST be on the way of delayed unoptimizing (means
@@ -720,9 +719,8 @@ static int reuse_unused_kprobe(struct kprobe *ap) · 4 unmodified lines
720 /* Enable the probe again */719 /* Enable the probe again */
721 ap->flags &= ~KPROBE_FLAG_DISABLED;720 ap->flags &= ~KPROBE_FLAG_DISABLED;
722 /* Optimize it again (remove from op->list) */721 /* Optimize it again (remove from op->list) */
723 ret = kprobe_optready(ap);722 if (!kprobe_optready(ap))
724 if (ret)723 return -EINVAL;
725 return ret;
726 724
727 optimize_kprobe(ap);725 optimize_kprobe(ap);
728 return 0;726 return 0;
kernel/locking/lockdep.c+8−12
@@ -4689,8 +4689,8 @@ static void free_zapped_rcu(struct rcu_head *ch) · 4688 unmodified lines
4689 return;4689 return;
4690 4690
4691 raw_local_irq_save(flags);4691 raw_local_irq_save(flags);
4692 if (!graph_lock())4692 arch_spin_lock(&lockdep_lock);
4693 goto out_irq;4693 current->lockdep_recursion = 1;
4694 4694
4695 /* closed head */4695 /* closed head */
4696 pf = delayed_free.pf + (delayed_free.index ^ 1);4696 pf = delayed_free.pf + (delayed_free.index ^ 1);
@@ -4702,8 +4702,8 @@ static void free_zapped_rcu(struct rcu_head *ch) · 5 unmodified lines
4702 */4702 */
4703 call_rcu_zapped(delayed_free.pf + delayed_free.index);4703 call_rcu_zapped(delayed_free.pf + delayed_free.index);
4704 4704
4705 graph_unlock();4705 current->lockdep_recursion = 0;
4706out_irq:4706 arch_spin_unlock(&lockdep_lock);
4707 raw_local_irq_restore(flags);4707 raw_local_irq_restore(flags);
4708}4708}
4709 4709
@@ -4744,21 +4744,17 @@ static void lockdep_free_key_range_reg(void *start, unsigned long size) · 34 unmodified lines
4744{4744{
4745 struct pending_free *pf;4745 struct pending_free *pf;
4746 unsigned long flags;4746 unsigned long flags;
4747 int locked;
4748 4747
4749 init_data_structures_once();4748 init_data_structures_once();
4750 4749
4751 raw_local_irq_save(flags);4750 raw_local_irq_save(flags);
4752 locked = graph_lock();4751 arch_spin_lock(&lockdep_lock);
4753 if (!locked)4752 current->lockdep_recursion = 1;
4754 goto out_irq;
4755
4756 pf = get_pending_free();4753 pf = get_pending_free();
4757 __lockdep_free_key_range(pf, start, size);4754 __lockdep_free_key_range(pf, start, size);
4758 call_rcu_zapped(pf);4755 call_rcu_zapped(pf);
4759 4756 current->lockdep_recursion = 0;
4760 graph_unlock();4757 arch_spin_unlock(&lockdep_lock);
4761out_irq:
4762 raw_local_irq_restore(flags);4758 raw_local_irq_restore(flags);
4763 4759
4764 /*4760 /*
kernel/sched/deadline.c+1−2
@@ -252,7 +252,6 @@ static void task_non_contending(struct task_struct *p) · 251 unmodified lines
252 if (dl_entity_is_special(dl_se))252 if (dl_entity_is_special(dl_se))
253 return;253 return;
254 254
255 WARN_ON(hrtimer_active(&dl_se->inactive_timer));
256 WARN_ON(dl_se->dl_non_contending);255 WARN_ON(dl_se->dl_non_contending);
257 256
258 zerolag_time = dl_se->deadline -257 zerolag_time = dl_se->deadline -
@@ -269,7 +268,7 @@ static void task_non_contending(struct task_struct *p) · 10 unmodified lines
269 * If the "0-lag time" already passed, decrease the active268 * If the "0-lag time" already passed, decrease the active
270 * utilization now, instead of starting a timer269 * utilization now, instead of starting a timer
271 */270 */
272 if (zerolag_time < 0) {271 if ((zerolag_time < 0) || hrtimer_active(&dl_se->inactive_timer)) {
273 if (dl_task(p))272 if (dl_task(p))
274 sub_running_bw(dl_se, dl_rq);273 sub_running_bw(dl_se, dl_rq);
275 if (!dl_task(p) || p->state == TASK_DEAD) {274 if (!dl_task(p) || p->state == TASK_DEAD) {
kernel/sched/fair.c+28−3
@@ -4885,6 +4885,8 @@ static enum hrtimer_restart sched_cfs_slack_timer(struct hrtimer *timer) · 4884 unmodified lines
4885 return HRTIMER_NORESTART;4885 return HRTIMER_NORESTART;
4886}4886}
4887 4887
4888extern const u64 max_cfs_quota_period;
4889
4888static enum hrtimer_restart sched_cfs_period_timer(struct hrtimer *timer)4890static enum hrtimer_restart sched_cfs_period_timer(struct hrtimer *timer)
4889{4891{
4890 struct cfs_bandwidth *cfs_b =4892 struct cfs_bandwidth *cfs_b =
@@ -4892,6 +4894,7 @@ static enum hrtimer_restart sched_cfs_period_timer(struct hrtimer *timer) · 1 unmodified line
4892 unsigned long flags;4894 unsigned long flags;
4893 int overrun;4895 int overrun;
4894 int idle = 0;4896 int idle = 0;
4897 int count = 0;
4895 4898
4896 raw_spin_lock_irqsave(&cfs_b->lock, flags);4899 raw_spin_lock_irqsave(&cfs_b->lock, flags);
4897 for (;;) {4900 for (;;) {
@@ -4899,6 +4902,28 @@ static enum hrtimer_restart sched_cfs_period_timer(struct hrtimer *timer) · 1 unmodified line
4899 if (!overrun)4902 if (!overrun)
4900 break;4903 break;
4901 4904
4905 if (++count > 3) {
4906 u64 new, old = ktime_to_ns(cfs_b->period);
4907
4908 new = (old * 147) / 128; /* ~115% */
4909 new = min(new, max_cfs_quota_period);
4910
4911 cfs_b->period = ns_to_ktime(new);
4912
4913 /* since max is 1s, this is limited to 1e9^2, which fits in u64 */
4914 cfs_b->quota *= new;
4915 cfs_b->quota = div64_u64(cfs_b->quota, old);
4916
4917 pr_warn_ratelimited(
4918 "cfs_period_timer[cpu%d]: period too short, scaling up (new cfs_period_us %lld, cfs_quota_us = %lld)\n",
4919 smp_processor_id(),
4920 div_u64(new, NSEC_PER_USEC),
4921 div_u64(cfs_b->quota, NSEC_PER_USEC));
4922
4923 /* reset count so we don't come right back in here */
4924 count = 0;
4925 }
4926
4902 idle = do_sched_cfs_period_timer(cfs_b, overrun, flags);4927 idle = do_sched_cfs_period_timer(cfs_b, overrun, flags);
4903 }4928 }
4904 if (idle)4929 if (idle)
@@ -7784,10 +7809,10 @@ static void update_cfs_rq_h_load(struct cfs_rq *cfs_rq) · 2879 unmodified lines
7784 if (cfs_rq->last_h_load_update == now)7809 if (cfs_rq->last_h_load_update == now)
7785 return;7810 return;
7786 7811
7787 cfs_rq->h_load_next = NULL;7812 WRITE_ONCE(cfs_rq->h_load_next, NULL);
7788 for_each_sched_entity(se) {7813 for_each_sched_entity(se) {
7789 cfs_rq = cfs_rq_of(se);7814 cfs_rq = cfs_rq_of(se);
7790 cfs_rq->h_load_next = se;7815 WRITE_ONCE(cfs_rq->h_load_next, se);
7791 if (cfs_rq->last_h_load_update == now)7816 if (cfs_rq->last_h_load_update == now)
7792 break;7817 break;
7793 }7818 }
@@ -7797,7 +7822,7 @@ static void update_cfs_rq_h_load(struct cfs_rq *cfs_rq) · 3 unmodified lines
7797 cfs_rq->last_h_load_update = now;7822 cfs_rq->last_h_load_update = now;
7798 }7823 }
7799 7824
7800 while ((se = cfs_rq->h_load_next) != NULL) {7825 while ((se = READ_ONCE(cfs_rq->h_load_next)) != NULL) {
7801 load = cfs_rq->h_load;7826 load = cfs_rq->h_load;
7802 load = div64_ul(load * se->avg.load_avg,7827 load = div64_ul(load * se->avg.load_avg,
7803 cfs_rq_load_avg(cfs_rq) + 1);7828 cfs_rq_load_avg(cfs_rq) + 1);
kernel/seccomp.c+1−1
@@ -149,7 +149,7 @@ static void populate_seccomp_data(struct seccomp_data *sd) · 148 unmodified lines
149 149
150 sd->nr = syscall_get_nr(task, regs);150 sd->nr = syscall_get_nr(task, regs);
151 sd->arch = syscall_get_arch();151 sd->arch = syscall_get_arch();
152 syscall_get_arguments(task, regs, 0, 6, args);152 syscall_get_arguments(task, regs, args);
153 sd->args[0] = args[0];153 sd->args[0] = args[0];
154 sd->args[1] = args[1];154 sd->args[1] = args[1];
155 sd->args[2] = args[2];155 sd->args[2] = args[2];
kernel/signal.c+5−10
@@ -3581,7 +3581,7 @@ SYSCALL_DEFINE4(pidfd_send_signal, int, pidfd, int, sig, · 3580 unmodified lines
3581 if (flags)3581 if (flags)
3582 return -EINVAL;3582 return -EINVAL;
3583 3583
3584 f = fdget_raw(pidfd);3584 f = fdget(pidfd);
3585 if (!f.file)3585 if (!f.file)
3586 return -EBADF;3586 return -EBADF;
3587 3587
@@ -3605,16 +3605,11 @@ SYSCALL_DEFINE4(pidfd_send_signal, int, pidfd, int, sig, · 17 unmodified lines
3605 if (unlikely(sig != kinfo.si_signo))3605 if (unlikely(sig != kinfo.si_signo))
3606 goto err;3606 goto err;
3607 3607
3608 /* Only allow sending arbitrary signals to yourself. */
3609 ret = -EPERM;
3608 if ((task_pid(current) != pid) &&3610 if ((task_pid(current) != pid) &&
3609 (kinfo.si_code >= 0 || kinfo.si_code == SI_TKILL)) {3611 (kinfo.si_code >= 0 || kinfo.si_code == SI_TKILL))
3610 /* Only allow sending arbitrary signals to yourself. */3612 goto err;
3611 ret = -EPERM;
3612 if (kinfo.si_code != SI_USER)
3613 goto err;
3614
3615 /* Turn this into a regular kill signal. */
3616 prepare_kill_siginfo(sig, &kinfo);
3617 }
3618 } else {3613 } else {
3619 prepare_kill_siginfo(sig, &kinfo);3614 prepare_kill_siginfo(sig, &kinfo);
3620 }3615 }
kernel/sysctl.c+2−1
@@ -128,6 +128,7 @@ static int zero; · 127 unmodified lines
128static int __maybe_unused one = 1;128static int __maybe_unused one = 1;
129static int __maybe_unused two = 2;129static int __maybe_unused two = 2;
130static int __maybe_unused four = 4;130static int __maybe_unused four = 4;
131static unsigned long zero_ul;
131static unsigned long one_ul = 1;132static unsigned long one_ul = 1;
132static unsigned long long_max = LONG_MAX;133static unsigned long long_max = LONG_MAX;
133static int one_hundred = 100;134static int one_hundred = 100;
@@ -1750,7 +1751,7 @@ static struct ctl_table fs_table[] = { · 1616 unmodified lines
1750 .maxlen = sizeof(files_stat.max_files),1751 .maxlen = sizeof(files_stat.max_files),
1751 .mode = 0644,1752 .mode = 0644,
1752 .proc_handler = proc_doulongvec_minmax,1753 .proc_handler = proc_doulongvec_minmax,
1753 .extra1 = &zero,1754 .extra1 = &zero_ul,
1754 .extra2 = &long_max,1755 .extra2 = &long_max,
1755 },1756 },
1756 {1757 {
kernel/time/alarmtimer.c+1−1
@@ -594,7 +594,7 @@ static ktime_t alarm_timer_remaining(struct k_itimer *timr, ktime_t now) · 593 unmodified lines
594{594{
595 struct alarm *alarm = &timr->it.alarm.alarmtimer;595 struct alarm *alarm = &timr->it.alarm.alarmtimer;
596 596
597 return ktime_sub(now, alarm->node.expires);597 return ktime_sub(alarm->node.expires, now);
598}598}
599 599
600/**600/**
kernel/time/sched_clock.c+2−2
@@ -272,7 +272,7 @@ static u64 notrace suspended_sched_clock_read(void) · 271 unmodified lines
272 return cd.read_data[seq & 1].epoch_cyc;272 return cd.read_data[seq & 1].epoch_cyc;
273}273}
274 274
275static int sched_clock_suspend(void)275int sched_clock_suspend(void)
276{276{
277 struct clock_read_data *rd = &cd.read_data[0];277 struct clock_read_data *rd = &cd.read_data[0];
278 278
@@ -283,7 +283,7 @@ static int sched_clock_suspend(void) · 4 unmodified lines
283 return 0;283 return 0;
284}284}
285 285
286static void sched_clock_resume(void)286void sched_clock_resume(void)
287{287{
288 struct clock_read_data *rd = &cd.read_data[0];288 struct clock_read_data *rd = &cd.read_data[0];
289 289
kernel/time/tick-common.c+2−0
@@ -487,6 +487,7 @@ void tick_freeze(void) · 486 unmodified lines
487 trace_suspend_resume(TPS("timekeeping_freeze"),487 trace_suspend_resume(TPS("timekeeping_freeze"),
488 smp_processor_id(), true);488 smp_processor_id(), true);
489 system_state = SYSTEM_SUSPEND;489 system_state = SYSTEM_SUSPEND;
490 sched_clock_suspend();
490 timekeeping_suspend();491 timekeeping_suspend();
491 } else {492 } else {
492 tick_suspend_local();493 tick_suspend_local();
@@ -510,6 +511,7 @@ void tick_unfreeze(void) · 17 unmodified lines
510 511
511 if (tick_freeze_depth == num_online_cpus()) {512 if (tick_freeze_depth == num_online_cpus()) {
512 timekeeping_resume();513 timekeeping_resume();
514 sched_clock_resume();
513 system_state = SYSTEM_RUNNING;515 system_state = SYSTEM_RUNNING;
514 trace_suspend_resume(TPS("timekeeping_freeze"),516 trace_suspend_resume(TPS("timekeeping_freeze"),
515 smp_processor_id(), false);517 smp_processor_id(), false);
kernel/time/timekeeping.h+7−0
@@ -14,6 +14,13 @@ extern u64 timekeeping_max_deferment(void); · 13 unmodified lines
14extern void timekeeping_warp_clock(void);14extern void timekeeping_warp_clock(void);
15extern int timekeeping_suspend(void);15extern int timekeeping_suspend(void);
16extern void timekeeping_resume(void);16extern void timekeeping_resume(void);
17#ifdef CONFIG_GENERIC_SCHED_CLOCK
18extern int sched_clock_suspend(void);
19extern void sched_clock_resume(void);
20#else
21static inline int sched_clock_suspend(void) { return 0; }
22static inline void sched_clock_resume(void) { }
23#endif
17 24
18extern void do_timer(unsigned long ticks);25extern void do_timer(unsigned long ticks);
19extern void update_wall_time(void);26extern void update_wall_time(void);
kernel/trace/ftrace.c+5−1
@@ -33,6 +33,7 @@ · 32 unmodified lines
33#include <linux/list.h>33#include <linux/list.h>
34#include <linux/hash.h>34#include <linux/hash.h>
35#include <linux/rcupdate.h>35#include <linux/rcupdate.h>
36#include <linux/kprobes.h>
36 37
37#include <trace/events/sched.h>38#include <trace/events/sched.h>
38 39
@@ -6246,7 +6247,7 @@ void ftrace_reset_array_ops(struct trace_array *tr) · 6207 unmodified lines
6246 tr->ops->func = ftrace_stub;6247 tr->ops->func = ftrace_stub;
6247}6248}
6248 6249
6249static inline void6250static nokprobe_inline void
6250__ftrace_ops_list_func(unsigned long ip, unsigned long parent_ip,6251__ftrace_ops_list_func(unsigned long ip, unsigned long parent_ip,
6251 struct ftrace_ops *ignored, struct pt_regs *regs)6252 struct ftrace_ops *ignored, struct pt_regs *regs)
6252{6253{
@@ -6306,11 +6307,13 @@ static void ftrace_ops_list_func(unsigned long ip, unsigned long parent_ip, · 53 unmodified lines
6306{6307{
6307 __ftrace_ops_list_func(ip, parent_ip, NULL, regs);6308 __ftrace_ops_list_func(ip, parent_ip, NULL, regs);
6308}6309}
6310NOKPROBE_SYMBOL(ftrace_ops_list_func);
6309#else6311#else
6310static void ftrace_ops_no_ops(unsigned long ip, unsigned long parent_ip)6312static void ftrace_ops_no_ops(unsigned long ip, unsigned long parent_ip)
6311{6313{
6312 __ftrace_ops_list_func(ip, parent_ip, NULL, NULL);6314 __ftrace_ops_list_func(ip, parent_ip, NULL, NULL);
6313}6315}
6316NOKPROBE_SYMBOL(ftrace_ops_no_ops);
6314#endif6317#endif
6315 6318
6316/*6319/*
@@ -6337,6 +6340,7 @@ static void ftrace_ops_assist_func(unsigned long ip, unsigned long parent_ip, · 20 unmodified lines
6337 preempt_enable_notrace();6340 preempt_enable_notrace();
6338 trace_clear_recursion(bit);6341 trace_clear_recursion(bit);
6339}6342}
6343NOKPROBE_SYMBOL(ftrace_ops_assist_func);
6340 6344
6341/**6345/**
6342 * ftrace_ops_get_func - get the function a trampoline should call6346 * ftrace_ops_get_func - get the function a trampoline should call
kernel/trace/trace.c+5−1
@@ -7041,12 +7041,16 @@ static void buffer_pipe_buf_release(struct pipe_inode_info *pipe, · 7040 unmodified lines
7041 buf->private = 0;7041 buf->private = 0;
7042}7042}
7043 7043
7044static void buffer_pipe_buf_get(struct pipe_inode_info *pipe,7044static bool buffer_pipe_buf_get(struct pipe_inode_info *pipe,
7045 struct pipe_buffer *buf)7045 struct pipe_buffer *buf)
7046{7046{
7047 struct buffer_ref *ref = (struct buffer_ref *)buf->private;7047 struct buffer_ref *ref = (struct buffer_ref *)buf->private;
7048 7048
7049 if (ref->ref > INT_MAX/2)
7050 return false;
7051
7049 ref->ref++;7052 ref->ref++;
7053 return true;
7050}7054}
7051 7055
7052/* Pipe buffer operations for a buffer. */7056/* Pipe buffer operations for a buffer. */
kernel/trace/trace_syscalls.c+6−3
@@ -314,6 +314,7 @@ static void ftrace_syscall_enter(void *data, struct pt_regs *regs, long id) · 313 unmodified lines
314 struct ring_buffer_event *event;314 struct ring_buffer_event *event;
315 struct ring_buffer *buffer;315 struct ring_buffer *buffer;
316 unsigned long irq_flags;316 unsigned long irq_flags;
317 unsigned long args[6];
317 int pc;318 int pc;
318 int syscall_nr;319 int syscall_nr;
319 int size;320 int size;
@@ -347,7 +348,8 @@ static void ftrace_syscall_enter(void *data, struct pt_regs *regs, long id) · 27 unmodified lines
347 348
348 entry = ring_buffer_event_data(event);349 entry = ring_buffer_event_data(event);
349 entry->nr = syscall_nr;350 entry->nr = syscall_nr;
350 syscall_get_arguments(current, regs, 0, sys_data->nb_args, entry->args);351 syscall_get_arguments(current, regs, args);
352 memcpy(entry->args, args, sizeof(unsigned long) * sys_data->nb_args);
351 353
352 event_trigger_unlock_commit(trace_file, buffer, event, entry,354 event_trigger_unlock_commit(trace_file, buffer, event, entry,
353 irq_flags, pc);355 irq_flags, pc);
@@ -583,6 +585,7 @@ static void perf_syscall_enter(void *ignore, struct pt_regs *regs, long id) · 229 unmodified lines
583 struct syscall_metadata *sys_data;585 struct syscall_metadata *sys_data;
584 struct syscall_trace_enter *rec;586 struct syscall_trace_enter *rec;
585 struct hlist_head *head;587 struct hlist_head *head;
588 unsigned long args[6];
586 bool valid_prog_array;589 bool valid_prog_array;
587 int syscall_nr;590 int syscall_nr;
588 int rctx;591 int rctx;
@@ -613,8 +616,8 @@ static void perf_syscall_enter(void *ignore, struct pt_regs *regs, long id) · 24 unmodified lines
613 return;616 return;
614 617
615 rec->nr = syscall_nr;618 rec->nr = syscall_nr;
616 syscall_get_arguments(current, regs, 0, sys_data->nb_args,619 syscall_get_arguments(current, regs, args);
617 (unsigned long *)&rec->args);620 memcpy(&rec->args, args, sizeof(unsigned long) * sys_data->nb_args);
618 621
619 if ((valid_prog_array &&622 if ((valid_prog_array &&
620 !perf_call_bpf_enter(sys_data->enter_event, regs, sys_data, rec)) ||623 !perf_call_bpf_enter(sys_data->enter_event, regs, sys_data, rec)) ||
kernel/watchdog_hld.c+2−1
@@ -135,7 +135,8 @@ static void watchdog_overflow_callback(struct perf_event *event, · 134 unmodified lines
135 if (__this_cpu_read(hard_watchdog_warn) == true)135 if (__this_cpu_read(hard_watchdog_warn) == true)
136 return;136 return;
137 137
138 pr_emerg("Watchdog detected hard LOCKUP on cpu %d", this_cpu);138 pr_emerg("Watchdog detected hard LOCKUP on cpu %d\n",
139 this_cpu);
139 print_modules();140 print_modules();
140 print_irqtrace_events(current);141 print_irqtrace_events(current);
141 if (regs)142 if (regs)
lib/Kconfig.debug+3−3
@@ -753,9 +753,9 @@ endmenu # "Memory Debugging" · 752 unmodified lines
753config ARCH_HAS_KCOV753config ARCH_HAS_KCOV
754 bool754 bool
755 help755 help
756 KCOV does not have any arch-specific code, but currently it is enabled756 An architecture should select this when it can successfully
757 only for x86_64. KCOV requires testing on other archs, and most likely757 build and run with CONFIG_KCOV. This typically requires
758 disabling of instrumentation for some early boot code.758 disabling instrumentation for some early boot code.
759 759
760config CC_HAS_SANCOV_TRACE_PC760config CC_HAS_SANCOV_TRACE_PC
761 def_bool $(cc-option,-fsanitize-coverage=trace-pc)761 def_bool $(cc-option,-fsanitize-coverage=trace-pc)
lib/iov_iter.c+4−0
@@ -1528,6 +1528,7 @@ EXPORT_SYMBOL(csum_and_copy_to_iter); · 1527 unmodified lines
1528size_t hash_and_copy_to_iter(const void *addr, size_t bytes, void *hashp,1528size_t hash_and_copy_to_iter(const void *addr, size_t bytes, void *hashp,
1529 struct iov_iter *i)1529 struct iov_iter *i)
1530{1530{
1531#ifdef CONFIG_CRYPTO
1531 struct ahash_request *hash = hashp;1532 struct ahash_request *hash = hashp;
1532 struct scatterlist sg;1533 struct scatterlist sg;
1533 size_t copied;1534 size_t copied;
@@ -1537,6 +1538,9 @@ size_t hash_and_copy_to_iter(const void *addr, size_t bytes, void *hashp, · 3 unmodified lines
1537 ahash_request_set_crypt(hash, &sg, NULL, copied);1538 ahash_request_set_crypt(hash, &sg, NULL, copied);
1538 crypto_ahash_update(hash);1539 crypto_ahash_update(hash);
1539 return copied;1540 return copied;
1541#else
1542 return 0;
1543#endif
1540}1544}
1541EXPORT_SYMBOL(hash_and_copy_to_iter);1545EXPORT_SYMBOL(hash_and_copy_to_iter);
1542 1546
lib/lzo/lzo1x_compress.c+6−3
@@ -291,13 +291,14 @@ int lzogeneric1x_1_compress(const unsigned char *in, size_t in_len, · 290 unmodified lines
291{291{
292 const unsigned char *ip = in;292 const unsigned char *ip = in;
293 unsigned char *op = out;293 unsigned char *op = out;
294 unsigned char *data_start;
294 size_t l = in_len;295 size_t l = in_len;
295 size_t t = 0;296 size_t t = 0;
296 signed char state_offset = -2;297 signed char state_offset = -2;
297 unsigned int m4_max_offset;298 unsigned int m4_max_offset;
298 299
299 // LZO v0 will never write 17 as first byte,300 // LZO v0 will never write 17 as first byte (except for zero-length
300 // so this is used to version the bitstream301 // input), so this is used to version the bitstream
301 if (bitstream_version > 0) {302 if (bitstream_version > 0) {
302 *op++ = 17;303 *op++ = 17;
303 *op++ = bitstream_version;304 *op++ = bitstream_version;
@@ -306,6 +307,8 @@ int lzogeneric1x_1_compress(const unsigned char *in, size_t in_len, · 2 unmodified lines
306 m4_max_offset = M4_MAX_OFFSET_V0;307 m4_max_offset = M4_MAX_OFFSET_V0;
307 }308 }
308 309
310 data_start = op;
311
309 while (l > 20) {312 while (l > 20) {
310 size_t ll = l <= (m4_max_offset + 1) ? l : (m4_max_offset + 1);313 size_t ll = l <= (m4_max_offset + 1) ? l : (m4_max_offset + 1);
311 uintptr_t ll_end = (uintptr_t) ip + ll;314 uintptr_t ll_end = (uintptr_t) ip + ll;
@@ -324,7 +327,7 @@ int lzogeneric1x_1_compress(const unsigned char *in, size_t in_len, · 12 unmodified lines
324 if (t > 0) {327 if (t > 0) {
325 const unsigned char *ii = in + in_len - t;328 const unsigned char *ii = in + in_len - t;
326 329
327 if (op == out && t <= 238) {330 if (op == data_start && t <= 238) {
328 *op++ = (17 + t);331 *op++ = (17 + t);
329 } else if (t <= 3) {332 } else if (t <= 3) {
330 op[state_offset] |= t;333 op[state_offset] |= t;
lib/lzo/lzo1x_decompress_safe.c+1−3
@@ -54,11 +54,9 @@ int lzo1x_decompress_safe(const unsigned char *in, size_t in_len, · 53 unmodified lines
54 if (unlikely(in_len < 3))54 if (unlikely(in_len < 3))
55 goto input_overrun;55 goto input_overrun;
56 56
57 if (likely(*ip == 17)) {57 if (likely(in_len >= 5) && likely(*ip == 17)) {
58 bitstream_version = ip[1];58 bitstream_version = ip[1];
59 ip += 2;59 ip += 2;
60 if (unlikely(in_len < 5))
61 goto input_overrun;
62 } else {60 } else {
63 bitstream_version = 0;61 bitstream_version = 0;
64 }62 }
lib/string.c+20−0
@@ -866,6 +866,26 @@ __visible int memcmp(const void *cs, const void *ct, size_t count) · 865 unmodified lines
866EXPORT_SYMBOL(memcmp);866EXPORT_SYMBOL(memcmp);
867#endif867#endif
868 868
869#ifndef __HAVE_ARCH_BCMP
870/**
871 * bcmp - returns 0 if and only if the buffers have identical contents.
872 * @a: pointer to first buffer.
873 * @b: pointer to second buffer.
874 * @len: size of buffers.
875 *
876 * The sign or magnitude of a non-zero return value has no particular
877 * meaning, and architectures may implement their own more efficient bcmp(). So
878 * while this particular implementation is a simple (tail) call to memcmp, do
879 * not rely on anything but whether the return value is zero or non-zero.
880 */
881#undef bcmp
882int bcmp(const void *a, const void *b, size_t len)
883{
884 return memcmp(a, b, len);
885}
886EXPORT_SYMBOL(bcmp);
887#endif
888
869#ifndef __HAVE_ARCH_MEMSCAN889#ifndef __HAVE_ARCH_MEMSCAN
870/**890/**
871 * memscan - Find a character in an area of memory.891 * memscan - Find a character in an area of memory.
lib/syscall.c+25−32
@@ -5,16 +5,14 @@ · 4 unmodified lines
5#include <linux/export.h>5#include <linux/export.h>
6#include <asm/syscall.h>6#include <asm/syscall.h>
7 7
8static int collect_syscall(struct task_struct *target, long *callno,8static int collect_syscall(struct task_struct *target, struct syscall_info *info)
9 unsigned long args[6], unsigned int maxargs,
10 unsigned long *sp, unsigned long *pc)
11{9{
12 struct pt_regs *regs;10 struct pt_regs *regs;
13 11
14 if (!try_get_task_stack(target)) {12 if (!try_get_task_stack(target)) {
15 /* Task has no stack, so the task isn't in a syscall. */13 /* Task has no stack, so the task isn't in a syscall. */
16 *sp = *pc = 0;14 memset(info, 0, sizeof(*info));
17 *callno = -1;15 info->data.nr = -1;
18 return 0;16 return 0;
19 }17 }
20 18
@@ -24,12 +22,13 @@ static int collect_syscall(struct task_struct *target, long *callno, · 3 unmodified lines
24 return -EAGAIN;22 return -EAGAIN;
25 }23 }
26 24
27 *sp = user_stack_pointer(regs);25 info->sp = user_stack_pointer(regs);
28 *pc = instruction_pointer(regs);26 info->data.instruction_pointer = instruction_pointer(regs);
29 27
30 *callno = syscall_get_nr(target, regs);28 info->data.nr = syscall_get_nr(target, regs);
31 if (*callno != -1L && maxargs > 0)29 if (info->data.nr != -1L)
32 syscall_get_arguments(target, regs, 0, maxargs, args);30 syscall_get_arguments(target, regs,
31 (unsigned long *)&info->data.args[0]);
33 32
34 put_task_stack(target);33 put_task_stack(target);
35 return 0;34 return 0;
@@ -38,41 +37,35 @@ static int collect_syscall(struct task_struct *target, long *callno, · 2 unmodified lines
38/**37/**
39 * task_current_syscall - Discover what a blocked task is doing.38 * task_current_syscall - Discover what a blocked task is doing.
40 * @target: thread to examine39 * @target: thread to examine
41 * @callno: filled with system call number or -140 * @info: structure with the following fields:
42 * @args: filled with @maxargs system call arguments41 * .sp - filled with user stack pointer
43 * @maxargs: number of elements in @args to fill42 * .data.nr - filled with system call number or -1
44 * @sp: filled with user stack pointer43 * .data.args - filled with @maxargs system call arguments
45 * @pc: filled with user PC44 * .data.instruction_pointer - filled with user PC
46 *45 *
47 * If @target is blocked in a system call, returns zero with *@callno46 * If @target is blocked in a system call, returns zero with @info.data.nr
48 * set to the the call's number and @args filled in with its arguments.47 * set to the the call's number and @info.data.args filled in with its
49 * Registers not used for system call arguments may not be available and48 * arguments. Registers not used for system call arguments may not be available
50 * it is not kosher to use &struct user_regset calls while the system49 * and it is not kosher to use &struct user_regset calls while the system
51 * call is still in progress. Note we may get this result if @target50 * call is still in progress. Note we may get this result if @target
52 * has finished its system call but not yet returned to user mode, such51 * has finished its system call but not yet returned to user mode, such
53 * as when it's stopped for signal handling or syscall exit tracing.52 * as when it's stopped for signal handling or syscall exit tracing.
54 *53 *
55 * If @target is blocked in the kernel during a fault or exception,54 * If @target is blocked in the kernel during a fault or exception,
56 * returns zero with *@callno set to -1 and does not fill in @args.55 * returns zero with *@info.data.nr set to -1 and does not fill in
57 * If so, it's now safe to examine @target using &struct user_regset56 * @info.data.args. If so, it's now safe to examine @target using
58 * get() calls as long as we're sure @target won't return to user mode.57 * &struct user_regset get() calls as long as we're sure @target won't return
58 * to user mode.
59 *59 *
60 * Returns -%EAGAIN if @target does not remain blocked.60 * Returns -%EAGAIN if @target does not remain blocked.
61 *
62 * Returns -%EINVAL if @maxargs is too large (maximum is six).
63 */61 */
64int task_current_syscall(struct task_struct *target, long *callno,62int task_current_syscall(struct task_struct *target, struct syscall_info *info)
65 unsigned long args[6], unsigned int maxargs,
66 unsigned long *sp, unsigned long *pc)
67{63{
68 long state;64 long state;
69 unsigned long ncsw;65 unsigned long ncsw;
70 66
71 if (unlikely(maxargs > 6))
72 return -EINVAL;
73
74 if (target == current)67 if (target == current)
75 return collect_syscall(target, callno, args, maxargs, sp, pc);68 return collect_syscall(target, info);
76 69
77 state = target->state;70 state = target->state;
78 if (unlikely(!state))71 if (unlikely(!state))
@@ -80,7 +73,7 @@ int task_current_syscall(struct task_struct *target, long *callno, · 1 unmodified line
80 73
81 ncsw = wait_task_inactive(target, state);74 ncsw = wait_task_inactive(target, state);
82 if (unlikely(!ncsw) ||75 if (unlikely(!ncsw) ||
83 unlikely(collect_syscall(target, callno, args, maxargs, sp, pc)) ||76 unlikely(collect_syscall(target, info)) ||
84 unlikely(wait_task_inactive(target, state) != ncsw))77 unlikely(wait_task_inactive(target, state) != ncsw))
85 return -EAGAIN;78 return -EAGAIN;
86 79
mm/compaction.c+18−11
@@ -242,6 +242,7 @@ __reset_isolation_pfn(struct zone *zone, unsigned long pfn, bool check_source, · 241 unmodified lines
242 bool check_target)242 bool check_target)
243{243{
244 struct page *page = pfn_to_online_page(pfn);244 struct page *page = pfn_to_online_page(pfn);
245 struct page *block_page;
245 struct page *end_page;246 struct page *end_page;
246 unsigned long block_pfn;247 unsigned long block_pfn;
247 248
@@ -267,20 +268,26 @@ __reset_isolation_pfn(struct zone *zone, unsigned long pfn, bool check_source, · 19 unmodified lines
267 get_pageblock_migratetype(page) != MIGRATE_MOVABLE)268 get_pageblock_migratetype(page) != MIGRATE_MOVABLE)
268 return false;269 return false;
269 270
271 /* Ensure the start of the pageblock or zone is online and valid */
272 block_pfn = pageblock_start_pfn(pfn);
273 block_page = pfn_to_online_page(max(block_pfn, zone->zone_start_pfn));
274 if (block_page) {
275 page = block_page;
276 pfn = block_pfn;
277 }
278
279 /* Ensure the end of the pageblock or zone is online and valid */
280 block_pfn += pageblock_nr_pages;
281 block_pfn = min(block_pfn, zone_end_pfn(zone) - 1);
282 end_page = pfn_to_online_page(block_pfn);
283 if (!end_page)
284 return false;
285
270 /*286 /*
271 * Only clear the hint if a sample indicates there is either a287 * Only clear the hint if a sample indicates there is either a
272 * free page or an LRU page in the block. One or other condition288 * free page or an LRU page in the block. One or other condition
273 * is necessary for the block to be a migration source/target.289 * is necessary for the block to be a migration source/target.
274 */290 */
275 block_pfn = pageblock_start_pfn(pfn);
276 pfn = max(block_pfn, zone->zone_start_pfn);
277 page = pfn_to_page(pfn);
278 if (zone != page_zone(page))
279 return false;
280 pfn = block_pfn + pageblock_nr_pages;
281 pfn = min(pfn, zone_end_pfn(zone));
282 end_page = pfn_to_page(pfn);
283
284 do {291 do {
285 if (pfn_valid_within(pfn)) {292 if (pfn_valid_within(pfn)) {
286 if (check_source && PageLRU(page)) {293 if (check_source && PageLRU(page)) {
@@ -309,7 +316,7 @@ __reset_isolation_pfn(struct zone *zone, unsigned long pfn, bool check_source, · 22 unmodified lines
309static void __reset_isolation_suitable(struct zone *zone)316static void __reset_isolation_suitable(struct zone *zone)
310{317{
311 unsigned long migrate_pfn = zone->zone_start_pfn;318 unsigned long migrate_pfn = zone->zone_start_pfn;
312 unsigned long free_pfn = zone_end_pfn(zone);319 unsigned long free_pfn = zone_end_pfn(zone) - 1;
313 unsigned long reset_migrate = free_pfn;320 unsigned long reset_migrate = free_pfn;
314 unsigned long reset_free = migrate_pfn;321 unsigned long reset_free = migrate_pfn;
315 bool source_set = false;322 bool source_set = false;
@@ -1363,7 +1370,7 @@ fast_isolate_freepages(struct compact_control *cc) · 1047 unmodified lines
1363 count_compact_events(COMPACTISOLATED, nr_isolated);1370 count_compact_events(COMPACTISOLATED, nr_isolated);
1364 } else {1371 } else {
1365 /* If isolation fails, abort the search */1372 /* If isolation fails, abort the search */
1366 order = -1;1373 order = cc->search_order + 1;
1367 page = NULL;1374 page = NULL;
1368 }1375 }
1369 }1376 }
mm/gup.c+36−12
@@ -160,8 +160,12 @@ retry: · 159 unmodified lines
160 goto retry;160 goto retry;
161 }161 }
162 162
163 if (flags & FOLL_GET)163 if (flags & FOLL_GET) {
164 get_page(page);164 if (unlikely(!try_get_page(page))) {
165 page = ERR_PTR(-ENOMEM);
166 goto out;
167 }
168 }
165 if (flags & FOLL_TOUCH) {169 if (flags & FOLL_TOUCH) {
166 if ((flags & FOLL_WRITE) &&170 if ((flags & FOLL_WRITE) &&
167 !pte_dirty(pte) && !PageDirty(page))171 !pte_dirty(pte) && !PageDirty(page))
@@ -298,7 +302,10 @@ retry_locked: · 130 unmodified lines
298 if (pmd_trans_unstable(pmd))302 if (pmd_trans_unstable(pmd))
299 ret = -EBUSY;303 ret = -EBUSY;
300 } else {304 } else {
301 get_page(page);305 if (unlikely(!try_get_page(page))) {
306 spin_unlock(ptl);
307 return ERR_PTR(-ENOMEM);
308 }
302 spin_unlock(ptl);309 spin_unlock(ptl);
303 lock_page(page);310 lock_page(page);
304 ret = split_huge_page(page);311 ret = split_huge_page(page);
@@ -500,7 +507,10 @@ static int get_gate_page(struct mm_struct *mm, unsigned long address, · 195 unmodified lines
500 if (is_device_public_page(*page))507 if (is_device_public_page(*page))
501 goto unmap;508 goto unmap;
502 }509 }
503 get_page(*page);510 if (unlikely(!try_get_page(*page))) {
511 ret = -ENOMEM;
512 goto unmap;
513 }
504out:514out:
505 ret = 0;515 ret = 0;
506unmap:516unmap:
@@ -1545,6 +1555,20 @@ static void undo_dev_pagemap(int *nr, int nr_start, struct page **pages) · 1038 unmodified lines
1545 }1555 }
1546}1556}
1547 1557
1558/*
1559 * Return the compund head page with ref appropriately incremented,
1560 * or NULL if that failed.
1561 */
1562static inline struct page *try_get_compound_head(struct page *page, int refs)
1563{
1564 struct page *head = compound_head(page);
1565 if (WARN_ON_ONCE(page_ref_count(head) < 0))
1566 return NULL;
1567 if (unlikely(!page_cache_add_speculative(head, refs)))
1568 return NULL;
1569 return head;
1570}
1571
1548#ifdef CONFIG_ARCH_HAS_PTE_SPECIAL1572#ifdef CONFIG_ARCH_HAS_PTE_SPECIAL
1549static int gup_pte_range(pmd_t pmd, unsigned long addr, unsigned long end,1573static int gup_pte_range(pmd_t pmd, unsigned long addr, unsigned long end,
1550 int write, struct page **pages, int *nr)1574 int write, struct page **pages, int *nr)
@@ -1579,9 +1603,9 @@ static int gup_pte_range(pmd_t pmd, unsigned long addr, unsigned long end, · 28 unmodified lines
1579 1603
1580 VM_BUG_ON(!pfn_valid(pte_pfn(pte)));1604 VM_BUG_ON(!pfn_valid(pte_pfn(pte)));
1581 page = pte_page(pte);1605 page = pte_page(pte);
1582 head = compound_head(page);
1583 1606
1584 if (!page_cache_get_speculative(head))1607 head = try_get_compound_head(page, 1);
1608 if (!head)
1585 goto pte_unmap;1609 goto pte_unmap;
1586 1610
1587 if (unlikely(pte_val(pte) != pte_val(*ptep))) {1611 if (unlikely(pte_val(pte) != pte_val(*ptep))) {
@@ -1720,8 +1744,8 @@ static int gup_huge_pmd(pmd_t orig, pmd_t *pmdp, unsigned long addr, · 132 unmodified lines
1720 refs++;1744 refs++;
1721 } while (addr += PAGE_SIZE, addr != end);1745 } while (addr += PAGE_SIZE, addr != end);
1722 1746
1723 head = compound_head(pmd_page(orig));1747 head = try_get_compound_head(pmd_page(orig), refs);
1724 if (!page_cache_add_speculative(head, refs)) {1748 if (!head) {
1725 *nr -= refs;1749 *nr -= refs;
1726 return 0;1750 return 0;
1727 }1751 }
@@ -1758,8 +1782,8 @@ static int gup_huge_pud(pud_t orig, pud_t *pudp, unsigned long addr, · 30 unmodified lines
1758 refs++;1782 refs++;
1759 } while (addr += PAGE_SIZE, addr != end);1783 } while (addr += PAGE_SIZE, addr != end);
1760 1784
1761 head = compound_head(pud_page(orig));1785 head = try_get_compound_head(pud_page(orig), refs);
1762 if (!page_cache_add_speculative(head, refs)) {1786 if (!head) {
1763 *nr -= refs;1787 *nr -= refs;
1764 return 0;1788 return 0;
1765 }1789 }
@@ -1795,8 +1819,8 @@ static int gup_huge_pgd(pgd_t orig, pgd_t *pgdp, unsigned long addr, · 29 unmodified lines
1795 refs++;1819 refs++;
1796 } while (addr += PAGE_SIZE, addr != end);1820 } while (addr += PAGE_SIZE, addr != end);
1797 1821
1798 head = compound_head(pgd_page(orig));1822 head = try_get_compound_head(pgd_page(orig), refs);
1799 if (!page_cache_add_speculative(head, refs)) {1823 if (!head) {
1800 *nr -= refs;1824 *nr -= refs;
1801 return 0;1825 return 0;
1802 }1826 }
mm/huge_memory.c+36−0
@@ -755,6 +755,21 @@ static void insert_pfn_pmd(struct vm_area_struct *vma, unsigned long addr, · 754 unmodified lines
755 spinlock_t *ptl;755 spinlock_t *ptl;
756 756
757 ptl = pmd_lock(mm, pmd);757 ptl = pmd_lock(mm, pmd);
758 if (!pmd_none(*pmd)) {
759 if (write) {
760 if (pmd_pfn(*pmd) != pfn_t_to_pfn(pfn)) {
761 WARN_ON_ONCE(!is_huge_zero_pmd(*pmd));
762 goto out_unlock;
763 }
764 entry = pmd_mkyoung(*pmd);
765 entry = maybe_pmd_mkwrite(pmd_mkdirty(entry), vma);
766 if (pmdp_set_access_flags(vma, addr, pmd, entry, 1))
767 update_mmu_cache_pmd(vma, addr, pmd);
768 }
769
770 goto out_unlock;
771 }
772
758 entry = pmd_mkhuge(pfn_t_pmd(pfn, prot));773 entry = pmd_mkhuge(pfn_t_pmd(pfn, prot));
759 if (pfn_t_devmap(pfn))774 if (pfn_t_devmap(pfn))
760 entry = pmd_mkdevmap(entry);775 entry = pmd_mkdevmap(entry);
@@ -766,11 +781,16 @@ static void insert_pfn_pmd(struct vm_area_struct *vma, unsigned long addr, · 5 unmodified lines
766 if (pgtable) {781 if (pgtable) {
767 pgtable_trans_huge_deposit(mm, pmd, pgtable);782 pgtable_trans_huge_deposit(mm, pmd, pgtable);
768 mm_inc_nr_ptes(mm);783 mm_inc_nr_ptes(mm);
784 pgtable = NULL;
769 }785 }
770 786
771 set_pmd_at(mm, addr, pmd, entry);787 set_pmd_at(mm, addr, pmd, entry);
772 update_mmu_cache_pmd(vma, addr, pmd);788 update_mmu_cache_pmd(vma, addr, pmd);
789
790out_unlock:
773 spin_unlock(ptl);791 spin_unlock(ptl);
792 if (pgtable)
793 pte_free(mm, pgtable);
774}794}
775 795
776vm_fault_t vmf_insert_pfn_pmd(struct vm_area_struct *vma, unsigned long addr,796vm_fault_t vmf_insert_pfn_pmd(struct vm_area_struct *vma, unsigned long addr,
@@ -821,6 +841,20 @@ static void insert_pfn_pud(struct vm_area_struct *vma, unsigned long addr, · 44 unmodified lines
821 spinlock_t *ptl;841 spinlock_t *ptl;
822 842
823 ptl = pud_lock(mm, pud);843 ptl = pud_lock(mm, pud);
844 if (!pud_none(*pud)) {
845 if (write) {
846 if (pud_pfn(*pud) != pfn_t_to_pfn(pfn)) {
847 WARN_ON_ONCE(!is_huge_zero_pud(*pud));
848 goto out_unlock;
849 }
850 entry = pud_mkyoung(*pud);
851 entry = maybe_pud_mkwrite(pud_mkdirty(entry), vma);
852 if (pudp_set_access_flags(vma, addr, pud, entry, 1))
853 update_mmu_cache_pud(vma, addr, pud);
854 }
855 goto out_unlock;
856 }
857
824 entry = pud_mkhuge(pfn_t_pud(pfn, prot));858 entry = pud_mkhuge(pfn_t_pud(pfn, prot));
825 if (pfn_t_devmap(pfn))859 if (pfn_t_devmap(pfn))
826 entry = pud_mkdevmap(entry);860 entry = pud_mkdevmap(entry);
@@ -830,6 +864,8 @@ static void insert_pfn_pud(struct vm_area_struct *vma, unsigned long addr, · 3 unmodified lines
830 }864 }
831 set_pud_at(mm, addr, pud, entry);865 set_pud_at(mm, addr, pud, entry);
832 update_mmu_cache_pud(vma, addr, pud);866 update_mmu_cache_pud(vma, addr, pud);
867
868out_unlock:
833 spin_unlock(ptl);869 spin_unlock(ptl);
834}870}
835 871
mm/hugetlb.c+13−0
@@ -4299,6 +4299,19 @@ long follow_hugetlb_page(struct mm_struct *mm, struct vm_area_struct *vma, · 4298 unmodified lines
4299 4299
4300 pfn_offset = (vaddr & ~huge_page_mask(h)) >> PAGE_SHIFT;4300 pfn_offset = (vaddr & ~huge_page_mask(h)) >> PAGE_SHIFT;
4301 page = pte_page(huge_ptep_get(pte));4301 page = pte_page(huge_ptep_get(pte));
4302
4303 /*
4304 * Instead of doing 'try_get_page()' below in the same_page
4305 * loop, just check the count once here.
4306 */
4307 if (unlikely(page_count(page) <= 0)) {
4308 if (pages) {
4309 spin_unlock(ptl);
4310 remainder = 0;
4311 err = -ENOMEM;
4312 break;
4313 }
4314 }
4302same_page:4315same_page:
4303 if (pages) {4316 if (pages) {
4304 pages[i] = mem_map_offset(page, pfn_offset);4317 pages[i] = mem_map_offset(page, pfn_offset);
mm/kmemleak.c+13−5
@@ -1401,6 +1401,7 @@ static void scan_block(void *_start, void *_end, · 1400 unmodified lines
1401/*1401/*
1402 * Scan a large memory block in MAX_SCAN_SIZE chunks to reduce the latency.1402 * Scan a large memory block in MAX_SCAN_SIZE chunks to reduce the latency.
1403 */1403 */
1404#ifdef CONFIG_SMP
1404static void scan_large_block(void *start, void *end)1405static void scan_large_block(void *start, void *end)
1405{1406{
1406 void *next;1407 void *next;
@@ -1412,6 +1413,7 @@ static void scan_large_block(void *start, void *end) · 5 unmodified lines
1412 cond_resched();1413 cond_resched();
1413 }1414 }
1414}1415}
1416#endif
1415 1417
1416/*1418/*
1417 * Scan a memory block corresponding to a kmemleak_object. A condition is1419 * Scan a memory block corresponding to a kmemleak_object. A condition is
@@ -1529,11 +1531,6 @@ static void kmemleak_scan(void) · 111 unmodified lines
1529 }1531 }
1530 rcu_read_unlock();1532 rcu_read_unlock();
1531 1533
1532 /* data/bss scanning */
1533 scan_large_block(_sdata, _edata);
1534 scan_large_block(__bss_start, __bss_stop);
1535 scan_large_block(__start_ro_after_init, __end_ro_after_init);
1536
1537#ifdef CONFIG_SMP1534#ifdef CONFIG_SMP
1538 /* per-cpu sections scanning */1535 /* per-cpu sections scanning */
1539 for_each_possible_cpu(i)1536 for_each_possible_cpu(i)
@@ -2071,6 +2068,17 @@ void __init kmemleak_init(void) · 531 unmodified lines
2071 }2068 }
2072 local_irq_restore(flags);2069 local_irq_restore(flags);
2073 2070
2071 /* register the data/bss sections */
2072 create_object((unsigned long)_sdata, _edata - _sdata,
2073 KMEMLEAK_GREY, GFP_ATOMIC);
2074 create_object((unsigned long)__bss_start, __bss_stop - __bss_start,
2075 KMEMLEAK_GREY, GFP_ATOMIC);
2076 /* only register .data..ro_after_init if not within .data */
2077 if (__start_ro_after_init < _sdata || __end_ro_after_init > _edata)
2078 create_object((unsigned long)__start_ro_after_init,
2079 __end_ro_after_init - __start_ro_after_init,
2080 KMEMLEAK_GREY, GFP_ATOMIC);
2081
2074 /*2082 /*
2075 * This is the point where tracking allocations is safe. Automatic2083 * This is the point where tracking allocations is safe. Automatic
2076 * scanning is started during the late initcall. Add the early logged2084 * scanning is started during the late initcall. Add the early logged
mm/memcontrol.c+18−2
@@ -3882,6 +3882,22 @@ struct wb_domain *mem_cgroup_wb_domain(struct bdi_writeback *wb) · 3881 unmodified lines
3882 return &memcg->cgwb_domain;3882 return &memcg->cgwb_domain;
3883}3883}
3884 3884
3885/*
3886 * idx can be of type enum memcg_stat_item or node_stat_item.
3887 * Keep in sync with memcg_exact_page().
3888 */
3889static unsigned long memcg_exact_page_state(struct mem_cgroup *memcg, int idx)
3890{
3891 long x = atomic_long_read(&memcg->stat[idx]);
3892 int cpu;
3893
3894 for_each_online_cpu(cpu)
3895 x += per_cpu_ptr(memcg->stat_cpu, cpu)->count[idx];
3896 if (x < 0)
3897 x = 0;
3898 return x;
3899}
3900
3885/**3901/**
3886 * mem_cgroup_wb_stats - retrieve writeback related stats from its memcg3902 * mem_cgroup_wb_stats - retrieve writeback related stats from its memcg
3887 * @wb: bdi_writeback in question3903 * @wb: bdi_writeback in question
@@ -3907,10 +3923,10 @@ void mem_cgroup_wb_stats(struct bdi_writeback *wb, unsigned long *pfilepages, · 19 unmodified lines
3907 struct mem_cgroup *memcg = mem_cgroup_from_css(wb->memcg_css);3923 struct mem_cgroup *memcg = mem_cgroup_from_css(wb->memcg_css);
3908 struct mem_cgroup *parent;3924 struct mem_cgroup *parent;
3909 3925
3910 *pdirty = memcg_page_state(memcg, NR_FILE_DIRTY);3926 *pdirty = memcg_exact_page_state(memcg, NR_FILE_DIRTY);
3911 3927
3912 /* this should eventually include NR_UNSTABLE_NFS */3928 /* this should eventually include NR_UNSTABLE_NFS */
3913 *pwriteback = memcg_page_state(memcg, NR_WRITEBACK);3929 *pwriteback = memcg_exact_page_state(memcg, NR_WRITEBACK);
3914 *pfilepages = mem_cgroup_nr_lru_pages(memcg, (1 << LRU_INACTIVE_FILE) |3930 *pfilepages = mem_cgroup_nr_lru_pages(memcg, (1 << LRU_INACTIVE_FILE) |
3915 (1 << LRU_ACTIVE_FILE));3931 (1 << LRU_ACTIVE_FILE));
3916 *pheadroom = PAGE_COUNTER_MAX;3932 *pheadroom = PAGE_COUNTER_MAX;
mm/mmap.c+6−1
@@ -45,6 +45,7 @@ · 44 unmodified lines
45#include <linux/moduleparam.h>45#include <linux/moduleparam.h>
46#include <linux/pkeys.h>46#include <linux/pkeys.h>
47#include <linux/oom.h>47#include <linux/oom.h>
48#include <linux/sched/mm.h>
48 49
49#include <linux/uaccess.h>50#include <linux/uaccess.h>
50#include <asm/cacheflush.h>51#include <asm/cacheflush.h>
@@ -2525,7 +2526,8 @@ find_extend_vma(struct mm_struct *mm, unsigned long addr) · 2474 unmodified lines
2525 vma = find_vma_prev(mm, addr, &prev);2526 vma = find_vma_prev(mm, addr, &prev);
2526 if (vma && (vma->vm_start <= addr))2527 if (vma && (vma->vm_start <= addr))
2527 return vma;2528 return vma;
2528 if (!prev || expand_stack(prev, addr))2529 /* don't alter vm_end if the coredump is running */
2530 if (!prev || !mmget_still_valid(mm) || expand_stack(prev, addr))
2529 return NULL;2531 return NULL;
2530 if (prev->vm_flags & VM_LOCKED)2532 if (prev->vm_flags & VM_LOCKED)
2531 populate_vma_page_range(prev, addr, prev->vm_end, NULL);2533 populate_vma_page_range(prev, addr, prev->vm_end, NULL);
@@ -2551,6 +2553,9 @@ find_extend_vma(struct mm_struct *mm, unsigned long addr) · 19 unmodified lines
2551 return vma;2553 return vma;
2552 if (!(vma->vm_flags & VM_GROWSDOWN))2554 if (!(vma->vm_flags & VM_GROWSDOWN))
2553 return NULL;2555 return NULL;
2556 /* don't alter vm_start if the coredump is running */
2557 if (!mmget_still_valid(mm))
2558 return NULL;
2554 start = vma->vm_start;2559 start = vma->vm_start;
2555 if (expand_stack(vma, addr))2560 if (expand_stack(vma, addr))
2556 return NULL;2561 return NULL;
mm/page_alloc.c+18−12
@@ -8005,7 +8005,10 @@ void *__init alloc_large_system_hash(const char *tablename, · 8004 unmodified lines
8005bool has_unmovable_pages(struct zone *zone, struct page *page, int count,8005bool has_unmovable_pages(struct zone *zone, struct page *page, int count,
8006 int migratetype, int flags)8006 int migratetype, int flags)
8007{8007{
8008 unsigned long pfn, iter, found;8008 unsigned long found;
8009 unsigned long iter = 0;
8010 unsigned long pfn = page_to_pfn(page);
8011 const char *reason = "unmovable page";
8009 8012
8010 /*8013 /*
8011 * TODO we could make this much more efficient by not checking every8014 * TODO we could make this much more efficient by not checking every
@@ -8015,17 +8018,20 @@ bool has_unmovable_pages(struct zone *zone, struct page *page, int count, · 3 unmodified lines
8015 * can still lead to having bootmem allocations in zone_movable.8018 * can still lead to having bootmem allocations in zone_movable.
8016 */8019 */
8017 8020
8018 /*8021 if (is_migrate_cma_page(page)) {
8019 * CMA allocations (alloc_contig_range) really need to mark isolate8022 /*
8020 * CMA pageblocks even when they are not movable in fact so consider8023 * CMA allocations (alloc_contig_range) really need to mark
8021 * them movable here.8024 * isolate CMA pageblocks even when they are not movable in fact
8022 */8025 * so consider them movable here.
8023 if (is_migrate_cma(migratetype) &&8026 */
8024 is_migrate_cma(get_pageblock_migratetype(page)))8027 if (is_migrate_cma(migratetype))
8025 return false;8028 return false;
8029
8030 reason = "CMA page";
8031 goto unmovable;
8032 }
8026 8033
8027 pfn = page_to_pfn(page);8034 for (found = 0; iter < pageblock_nr_pages; iter++) {
8028 for (found = 0, iter = 0; iter < pageblock_nr_pages; iter++) {
8029 unsigned long check = pfn + iter;8035 unsigned long check = pfn + iter;
8030 8036
8031 if (!pfn_valid_within(check))8037 if (!pfn_valid_within(check))
@@ -8105,7 +8111,7 @@ bool has_unmovable_pages(struct zone *zone, struct page *page, int count, · 73 unmodified lines
8105unmovable:8111unmovable:
8106 WARN_ON_ONCE(zone_idx(zone) == ZONE_MOVABLE);8112 WARN_ON_ONCE(zone_idx(zone) == ZONE_MOVABLE);
8107 if (flags & REPORT_FAILURE)8113 if (flags & REPORT_FAILURE)
8108 dump_page(pfn_to_page(pfn+iter), "unmovable page");8114 dump_page(pfn_to_page(pfn + iter), reason);
8109 return true;8115 return true;
8110}8116}
8111 8117
mm/percpu.c+4−4
@@ -2567,8 +2567,8 @@ int __init pcpu_embed_first_chunk(size_t reserved_size, size_t dyn_size, · 2566 unmodified lines
2567 ai->groups[group].base_offset = areas[group] - base;2567 ai->groups[group].base_offset = areas[group] - base;
2568 }2568 }
2569 2569
2570 pr_info("Embedded %zu pages/cpu @%p s%zu r%zu d%zu u%zu\n",2570 pr_info("Embedded %zu pages/cpu s%zu r%zu d%zu u%zu\n",
2571 PFN_DOWN(size_sum), base, ai->static_size, ai->reserved_size,2571 PFN_DOWN(size_sum), ai->static_size, ai->reserved_size,
2572 ai->dyn_size, ai->unit_size);2572 ai->dyn_size, ai->unit_size);
2573 2573
2574 rc = pcpu_setup_first_chunk(ai, base);2574 rc = pcpu_setup_first_chunk(ai, base);
@@ -2692,8 +2692,8 @@ int __init pcpu_page_first_chunk(size_t reserved_size, · 117 unmodified lines
2692 }2692 }
2693 2693
2694 /* we're ready, commit */2694 /* we're ready, commit */
2695 pr_info("%d %s pages/cpu @%p s%zu r%zu d%zu\n",2695 pr_info("%d %s pages/cpu s%zu r%zu d%zu\n",
2696 unit_pages, psize_str, vm.addr, ai->static_size,2696 unit_pages, psize_str, ai->static_size,
2697 ai->reserved_size, ai->dyn_size);2697 ai->reserved_size, ai->dyn_size);
2698 2698
2699 rc = pcpu_setup_first_chunk(ai, vm.addr);2699 rc = pcpu_setup_first_chunk(ai, vm.addr);
mm/shmem.c+27−31
@@ -1081,9 +1081,14 @@ static void shmem_evict_inode(struct inode *inode) · 1080 unmodified lines
1081 }1081 }
1082 spin_unlock(&sbinfo->shrinklist_lock);1082 spin_unlock(&sbinfo->shrinklist_lock);
1083 }1083 }
1084 if (!list_empty(&info->swaplist)) {1084 while (!list_empty(&info->swaplist)) {
1085 /* Wait while shmem_unuse() is scanning this inode... */
1086 wait_var_event(&info->stop_eviction,
1087 !atomic_read(&info->stop_eviction));
1085 mutex_lock(&shmem_swaplist_mutex);1088 mutex_lock(&shmem_swaplist_mutex);
1086 list_del_init(&info->swaplist);1089 /* ...but beware of the race if we peeked too early */
1090 if (!atomic_read(&info->stop_eviction))
1091 list_del_init(&info->swaplist);
1087 mutex_unlock(&shmem_swaplist_mutex);1092 mutex_unlock(&shmem_swaplist_mutex);
1088 }1093 }
1089 }1094 }
@@ -1099,10 +1104,11 @@ extern struct swap_info_struct *swap_info[]; · 9 unmodified lines
1099static int shmem_find_swap_entries(struct address_space *mapping,1104static int shmem_find_swap_entries(struct address_space *mapping,
1100 pgoff_t start, unsigned int nr_entries,1105 pgoff_t start, unsigned int nr_entries,
1101 struct page **entries, pgoff_t *indices,1106 struct page **entries, pgoff_t *indices,
1102 bool frontswap)1107 unsigned int type, bool frontswap)
1103{1108{
1104 XA_STATE(xas, &mapping->i_pages, start);1109 XA_STATE(xas, &mapping->i_pages, start);
1105 struct page *page;1110 struct page *page;
1111 swp_entry_t entry;
1106 unsigned int ret = 0;1112 unsigned int ret = 0;
1107 1113
1108 if (!nr_entries)1114 if (!nr_entries)
@@ -1116,13 +1122,12 @@ static int shmem_find_swap_entries(struct address_space *mapping, · 7 unmodified lines
1116 if (!xa_is_value(page))1122 if (!xa_is_value(page))
1117 continue;1123 continue;
1118 1124
1119 if (frontswap) {1125 entry = radix_to_swp_entry(page);
1120 swp_entry_t entry = radix_to_swp_entry(page);1126 if (swp_type(entry) != type)
1121 1127 continue;
1122 if (!frontswap_test(swap_info[swp_type(entry)],1128 if (frontswap &&
1123 swp_offset(entry)))1129 !frontswap_test(swap_info[type], swp_offset(entry)))
1124 continue;1130 continue;
1125 }
1126 1131
1127 indices[ret] = xas.xa_index;1132 indices[ret] = xas.xa_index;
1128 entries[ret] = page;1133 entries[ret] = page;
@@ -1194,7 +1199,7 @@ static int shmem_unuse_inode(struct inode *inode, unsigned int type, · 65 unmodified lines
1194 1199
1195 pvec.nr = shmem_find_swap_entries(mapping, start, nr_entries,1200 pvec.nr = shmem_find_swap_entries(mapping, start, nr_entries,
1196 pvec.pages, indices,1201 pvec.pages, indices,
1197 frontswap);1202 type, frontswap);
1198 if (pvec.nr == 0) {1203 if (pvec.nr == 0) {
1199 ret = 0;1204 ret = 0;
1200 break;1205 break;
@@ -1227,36 +1232,27 @@ int shmem_unuse(unsigned int type, bool frontswap, · 26 unmodified lines
1227 unsigned long *fs_pages_to_unuse)1232 unsigned long *fs_pages_to_unuse)
1228{1233{
1229 struct shmem_inode_info *info, *next;1234 struct shmem_inode_info *info, *next;
1230 struct inode *inode;
1231 struct inode *prev_inode = NULL;
1232 int error = 0;1235 int error = 0;
1233 1236
1234 if (list_empty(&shmem_swaplist))1237 if (list_empty(&shmem_swaplist))
1235 return 0;1238 return 0;
1236 1239
1237 mutex_lock(&shmem_swaplist_mutex);1240 mutex_lock(&shmem_swaplist_mutex);
1238
1239 /*
1240 * The extra refcount on the inode is necessary to safely dereference
1241 * p->next after re-acquiring the lock. New shmem inodes with swap
1242 * get added to the end of the list and we will scan them all.
1243 */
1244 list_for_each_entry_safe(info, next, &shmem_swaplist, swaplist) {1241 list_for_each_entry_safe(info, next, &shmem_swaplist, swaplist) {
1245 if (!info->swapped) {1242 if (!info->swapped) {
1246 list_del_init(&info->swaplist);1243 list_del_init(&info->swaplist);
1247 continue;1244 continue;
1248 }1245 }
1249 1246 /*
1250 inode = igrab(&info->vfs_inode);1247 * Drop the swaplist mutex while searching the inode for swap;
1251 if (!inode)1248 * but before doing so, make sure shmem_evict_inode() will not
1252 continue;1249 * remove placeholder inode from swaplist, nor let it be freed
1253 1250 * (igrab() would protect from unlink, but not from unmount).
1251 */
1252 atomic_inc(&info->stop_eviction);
1254 mutex_unlock(&shmem_swaplist_mutex);1253 mutex_unlock(&shmem_swaplist_mutex);
1255 if (prev_inode)
1256 iput(prev_inode);
1257 prev_inode = inode;
1258 1254
1259 error = shmem_unuse_inode(inode, type, frontswap,1255 error = shmem_unuse_inode(&info->vfs_inode, type, frontswap,
1260 fs_pages_to_unuse);1256 fs_pages_to_unuse);
1261 cond_resched();1257 cond_resched();
1262 1258
@@ -1264,14 +1260,13 @@ int shmem_unuse(unsigned int type, bool frontswap, · 1 unmodified line
1264 next = list_next_entry(info, swaplist);1260 next = list_next_entry(info, swaplist);
1265 if (!info->swapped)1261 if (!info->swapped)
1266 list_del_init(&info->swaplist);1262 list_del_init(&info->swaplist);
1263 if (atomic_dec_and_test(&info->stop_eviction))
1264 wake_up_var(&info->stop_eviction);
1267 if (error)1265 if (error)
1268 break;1266 break;
1269 }1267 }
1270 mutex_unlock(&shmem_swaplist_mutex);1268 mutex_unlock(&shmem_swaplist_mutex);
1271 1269
1272 if (prev_inode)
1273 iput(prev_inode);
1274
1275 return error;1270 return error;
1276}1271}
1277 1272
@@ -2238,6 +2233,7 @@ static struct inode *shmem_get_inode(struct super_block *sb, const struct inode · 960 unmodified lines
2238 info = SHMEM_I(inode);2233 info = SHMEM_I(inode);
2239 memset(info, 0, (char *)inode - (char *)info);2234 memset(info, 0, (char *)inode - (char *)info);
2240 spin_lock_init(&info->lock);2235 spin_lock_init(&info->lock);
2236 atomic_set(&info->stop_eviction, 0);
2241 info->seals = F_SEAL_SEAL;2237 info->seals = F_SEAL_SEAL;
2242 info->flags = flags & VM_NORESERVE;2238 info->flags = flags & VM_NORESERVE;
2243 INIT_LIST_HEAD(&info->shrinklist);2239 INIT_LIST_HEAD(&info->shrinklist);
mm/slab.c+2−2
@@ -2374,7 +2374,6 @@ static void *alloc_slabmgmt(struct kmem_cache *cachep, · 2373 unmodified lines
2374 /* Slab management obj is off-slab. */2374 /* Slab management obj is off-slab. */
2375 freelist = kmem_cache_alloc_node(cachep->freelist_cache,2375 freelist = kmem_cache_alloc_node(cachep->freelist_cache,
2376 local_flags, nodeid);2376 local_flags, nodeid);
2377 freelist = kasan_reset_tag(freelist);
2378 if (!freelist)2377 if (!freelist)
2379 return NULL;2378 return NULL;
2380 } else {2379 } else {
@@ -4308,7 +4307,8 @@ static void show_symbol(struct seq_file *m, unsigned long address) · 1927 unmodified lines
4308 4307
4309static int leaks_show(struct seq_file *m, void *p)4308static int leaks_show(struct seq_file *m, void *p)
4310{4309{
4311 struct kmem_cache *cachep = list_entry(p, struct kmem_cache, list);4310 struct kmem_cache *cachep = list_entry(p, struct kmem_cache,
4311 root_caches_node);
4312 struct page *page;4312 struct page *page;
4313 struct kmem_cache_node *n;4313 struct kmem_cache_node *n;
4314 const char *name;4314 const char *name;
mm/swapfile.c+17−15
@@ -2023,7 +2023,6 @@ static unsigned int find_next_to_unuse(struct swap_info_struct *si, · 2022 unmodified lines
2023 * If the boolean frontswap is true, only unuse pages_to_unuse pages;2023 * If the boolean frontswap is true, only unuse pages_to_unuse pages;
2024 * pages_to_unuse==0 means all pages; ignored if frontswap is false2024 * pages_to_unuse==0 means all pages; ignored if frontswap is false
2025 */2025 */
2026#define SWAP_UNUSE_MAX_TRIES 3
2027int try_to_unuse(unsigned int type, bool frontswap,2026int try_to_unuse(unsigned int type, bool frontswap,
2028 unsigned long pages_to_unuse)2027 unsigned long pages_to_unuse)
2029{2028{
@@ -2035,7 +2034,6 @@ int try_to_unuse(unsigned int type, bool frontswap, · 5 unmodified lines
2035 struct page *page;2034 struct page *page;
2036 swp_entry_t entry;2035 swp_entry_t entry;
2037 unsigned int i;2036 unsigned int i;
2038 int retries = 0;
2039 2037
2040 if (!si->inuse_pages)2038 if (!si->inuse_pages)
2041 return 0;2039 return 0;
@@ -2053,11 +2051,9 @@ retry: · 11 unmodified lines
2053 2051
2054 spin_lock(&mmlist_lock);2052 spin_lock(&mmlist_lock);
2055 p = &init_mm.mmlist;2053 p = &init_mm.mmlist;
2056 while ((p = p->next) != &init_mm.mmlist) {2054 while (si->inuse_pages &&
2057 if (signal_pending(current)) {2055 !signal_pending(current) &&
2058 retval = -EINTR;2056 (p = p->next) != &init_mm.mmlist) {
2059 break;
2060 }
2061 2057
2062 mm = list_entry(p, struct mm_struct, mmlist);2058 mm = list_entry(p, struct mm_struct, mmlist);
2063 if (!mmget_not_zero(mm))2059 if (!mmget_not_zero(mm))
@@ -2084,7 +2080,9 @@ retry: · 20 unmodified lines
2084 mmput(prev_mm);2080 mmput(prev_mm);
2085 2081
2086 i = 0;2082 i = 0;
2087 while ((i = find_next_to_unuse(si, i, frontswap)) != 0) {2083 while (si->inuse_pages &&
2084 !signal_pending(current) &&
2085 (i = find_next_to_unuse(si, i, frontswap)) != 0) {
2088 2086
2089 entry = swp_entry(type, i);2087 entry = swp_entry(type, i);
2090 page = find_get_page(swap_address_space(entry), i);2088 page = find_get_page(swap_address_space(entry), i);
@@ -2117,14 +2115,18 @@ retry: · 26 unmodified lines
2117 * If yes, we would need to do retry the unuse logic again.2115 * If yes, we would need to do retry the unuse logic again.
2118 * Under global memory pressure, swap entries can be reinserted back2116 * Under global memory pressure, swap entries can be reinserted back
2119 * into process space after the mmlist loop above passes over them.2117 * into process space after the mmlist loop above passes over them.
2120 * Its not worth continuosuly retrying to unuse the swap in this case.2118 *
2121 * So we try SWAP_UNUSE_MAX_TRIES times.2119 * Limit the number of retries? No: when mmget_not_zero() above fails,
2120 * that mm is likely to be freeing swap from exit_mmap(), which proceeds
2121 * at its own independent pace; and even shmem_writepage() could have
2122 * been preempted after get_swap_page(), temporarily hiding that swap.
2123 * It's easy and robust (though cpu-intensive) just to keep retrying.
2122 */2124 */
2123 if (++retries >= SWAP_UNUSE_MAX_TRIES)2125 if (si->inuse_pages) {
2124 retval = -EBUSY;2126 if (!signal_pending(current))
2125 else if (si->inuse_pages)2127 goto retry;
2126 goto retry;2128 retval = -EINTR;
2127 2129 }
2128out:2130out:
2129 return (retval == FRONTSWAP_PAGES_UNUSED) ? 0 : retval;2131 return (retval == FRONTSWAP_PAGES_UNUSED) ? 0 : retval;
2130}2132}
mm/util.c+1−1
@@ -204,7 +204,7 @@ EXPORT_SYMBOL(vmemdup_user); · 203 unmodified lines
204 * @s: The string to duplicate204 * @s: The string to duplicate
205 * @n: Maximum number of bytes to copy, including the trailing NUL.205 * @n: Maximum number of bytes to copy, including the trailing NUL.
206 *206 *
207 * Return: newly allocated copy of @s or %NULL in case of error207 * Return: newly allocated copy of @s or an ERR_PTR() in case of error
208 */208 */
209char *strndup_user(const char __user *s, long n)209char *strndup_user(const char __user *s, long n)
210{210{
mm/vmscan.c+9−20
@@ -2176,7 +2176,6 @@ static void shrink_active_list(unsigned long nr_to_scan, · 2175 unmodified lines
2176 * 10TB 320 32GB2176 * 10TB 320 32GB
2177 */2177 */
2178static bool inactive_list_is_low(struct lruvec *lruvec, bool file,2178static bool inactive_list_is_low(struct lruvec *lruvec, bool file,
2179 struct mem_cgroup *memcg,
2180 struct scan_control *sc, bool actual_reclaim)2179 struct scan_control *sc, bool actual_reclaim)
2181{2180{
2182 enum lru_list active_lru = file * LRU_FILE + LRU_ACTIVE;2181 enum lru_list active_lru = file * LRU_FILE + LRU_ACTIVE;
@@ -2197,16 +2196,12 @@ static bool inactive_list_is_low(struct lruvec *lruvec, bool file, · 14 unmodified lines
2197 inactive = lruvec_lru_size(lruvec, inactive_lru, sc->reclaim_idx);2196 inactive = lruvec_lru_size(lruvec, inactive_lru, sc->reclaim_idx);
2198 active = lruvec_lru_size(lruvec, active_lru, sc->reclaim_idx);2197 active = lruvec_lru_size(lruvec, active_lru, sc->reclaim_idx);
2199 2198
2200 if (memcg)
2201 refaults = memcg_page_state(memcg, WORKINGSET_ACTIVATE);
2202 else
2203 refaults = node_page_state(pgdat, WORKINGSET_ACTIVATE);
2204
2205 /*2199 /*
2206 * When refaults are being observed, it means a new workingset2200 * When refaults are being observed, it means a new workingset
2207 * is being established. Disable active list protection to get2201 * is being established. Disable active list protection to get
2208 * rid of the stale workingset quickly.2202 * rid of the stale workingset quickly.
2209 */2203 */
2204 refaults = lruvec_page_state(lruvec, WORKINGSET_ACTIVATE);
2210 if (file && actual_reclaim && lruvec->refaults != refaults) {2205 if (file && actual_reclaim && lruvec->refaults != refaults) {
2211 inactive_ratio = 0;2206 inactive_ratio = 0;
2212 } else {2207 } else {
@@ -2227,12 +2222,10 @@ static bool inactive_list_is_low(struct lruvec *lruvec, bool file, · 14 unmodified lines
2227}2222}
2228 2223
2229static unsigned long shrink_list(enum lru_list lru, unsigned long nr_to_scan,2224static unsigned long shrink_list(enum lru_list lru, unsigned long nr_to_scan,
2230 struct lruvec *lruvec, struct mem_cgroup *memcg,2225 struct lruvec *lruvec, struct scan_control *sc)
2231 struct scan_control *sc)
2232{2226{
2233 if (is_active_lru(lru)) {2227 if (is_active_lru(lru)) {
2234 if (inactive_list_is_low(lruvec, is_file_lru(lru),2228 if (inactive_list_is_low(lruvec, is_file_lru(lru), sc, true))
2235 memcg, sc, true))
2236 shrink_active_list(nr_to_scan, lruvec, sc, lru);2229 shrink_active_list(nr_to_scan, lruvec, sc, lru);
2237 return 0;2230 return 0;
2238 }2231 }
@@ -2332,7 +2325,7 @@ static void get_scan_count(struct lruvec *lruvec, struct mem_cgroup *memcg, · 93 unmodified lines
2332 * anonymous pages on the LRU in eligible zones.2325 * anonymous pages on the LRU in eligible zones.
2333 * Otherwise, the small LRU gets thrashed.2326 * Otherwise, the small LRU gets thrashed.
2334 */2327 */
2335 if (!inactive_list_is_low(lruvec, false, memcg, sc, false) &&2328 if (!inactive_list_is_low(lruvec, false, sc, false) &&
2336 lruvec_lru_size(lruvec, LRU_INACTIVE_ANON, sc->reclaim_idx)2329 lruvec_lru_size(lruvec, LRU_INACTIVE_ANON, sc->reclaim_idx)
2337 >> sc->priority) {2330 >> sc->priority) {
2338 scan_balance = SCAN_ANON;2331 scan_balance = SCAN_ANON;
@@ -2350,7 +2343,7 @@ static void get_scan_count(struct lruvec *lruvec, struct mem_cgroup *memcg, · 11 unmodified lines
2350 * lruvec even if it has plenty of old anonymous pages unless the2343 * lruvec even if it has plenty of old anonymous pages unless the
2351 * system is under heavy pressure.2344 * system is under heavy pressure.
2352 */2345 */
2353 if (!inactive_list_is_low(lruvec, true, memcg, sc, false) &&2346 if (!inactive_list_is_low(lruvec, true, sc, false) &&
2354 lruvec_lru_size(lruvec, LRU_INACTIVE_FILE, sc->reclaim_idx) >> sc->priority) {2347 lruvec_lru_size(lruvec, LRU_INACTIVE_FILE, sc->reclaim_idx) >> sc->priority) {
2355 scan_balance = SCAN_FILE;2348 scan_balance = SCAN_FILE;
2356 goto out;2349 goto out;
@@ -2503,7 +2496,7 @@ static void shrink_node_memcg(struct pglist_data *pgdat, struct mem_cgroup *memc · 146 unmodified lines
2503 nr[lru] -= nr_to_scan;2496 nr[lru] -= nr_to_scan;
2504 2497
2505 nr_reclaimed += shrink_list(lru, nr_to_scan,2498 nr_reclaimed += shrink_list(lru, nr_to_scan,
2506 lruvec, memcg, sc);2499 lruvec, sc);
2507 }2500 }
2508 }2501 }
2509 2502
@@ -2570,7 +2563,7 @@ static void shrink_node_memcg(struct pglist_data *pgdat, struct mem_cgroup *memc · 60 unmodified lines
2570 * Even if we did not try to evict anon pages at all, we want to2563 * Even if we did not try to evict anon pages at all, we want to
2571 * rebalance the anon lru active/inactive ratio.2564 * rebalance the anon lru active/inactive ratio.
2572 */2565 */
2573 if (inactive_list_is_low(lruvec, false, memcg, sc, true))2566 if (inactive_list_is_low(lruvec, false, sc, true))
2574 shrink_active_list(SWAP_CLUSTER_MAX, lruvec,2567 shrink_active_list(SWAP_CLUSTER_MAX, lruvec,
2575 sc, LRU_ACTIVE_ANON);2568 sc, LRU_ACTIVE_ANON);
2576}2569}
@@ -2969,12 +2962,8 @@ static void snapshot_refaults(struct mem_cgroup *root_memcg, pg_data_t *pgdat) · 392 unmodified lines
2969 unsigned long refaults;2962 unsigned long refaults;
2970 struct lruvec *lruvec;2963 struct lruvec *lruvec;
2971 2964
2972 if (memcg)
2973 refaults = memcg_page_state(memcg, WORKINGSET_ACTIVATE);
2974 else
2975 refaults = node_page_state(pgdat, WORKINGSET_ACTIVATE);
2976
2977 lruvec = mem_cgroup_lruvec(pgdat, memcg);2965 lruvec = mem_cgroup_lruvec(pgdat, memcg);
2966 refaults = lruvec_page_state(lruvec, WORKINGSET_ACTIVATE);
2978 lruvec->refaults = refaults;2967 lruvec->refaults = refaults;
2979 } while ((memcg = mem_cgroup_iter(root_memcg, memcg, NULL)));2968 } while ((memcg = mem_cgroup_iter(root_memcg, memcg, NULL)));
2980}2969}
@@ -3339,7 +3328,7 @@ static void age_active_anon(struct pglist_data *pgdat, · 358 unmodified lines
3339 do {3328 do {
3340 struct lruvec *lruvec = mem_cgroup_lruvec(pgdat, memcg);3329 struct lruvec *lruvec = mem_cgroup_lruvec(pgdat, memcg);
3341 3330
3342 if (inactive_list_is_low(lruvec, false, memcg, sc, true))3331 if (inactive_list_is_low(lruvec, false, sc, true))
3343 shrink_active_list(SWAP_CLUSTER_MAX, lruvec,3332 shrink_active_list(SWAP_CLUSTER_MAX, lruvec,
3344 sc, LRU_ACTIVE_ANON);3333 sc, LRU_ACTIVE_ANON);
3345 3334
mm/vmstat.c+0−5
@@ -1274,13 +1274,8 @@ const char * const vmstat_text[] = { · 1273 unmodified lines
1274#endif1274#endif
1275#endif /* CONFIG_MEMORY_BALLOON */1275#endif /* CONFIG_MEMORY_BALLOON */
1276#ifdef CONFIG_DEBUG_TLBFLUSH1276#ifdef CONFIG_DEBUG_TLBFLUSH
1277#ifdef CONFIG_SMP
1278 "nr_tlb_remote_flush",1277 "nr_tlb_remote_flush",
1279 "nr_tlb_remote_flush_received",1278 "nr_tlb_remote_flush_received",
1280#else
1281 "", /* nr_tlb_remote_flush */
1282 "", /* nr_tlb_remote_flush_received */
1283#endif /* CONFIG_SMP */
1284 "nr_tlb_local_flush_all",1279 "nr_tlb_local_flush_all",
1285 "nr_tlb_local_flush_one",1280 "nr_tlb_local_flush_one",
1286#endif /* CONFIG_DEBUG_TLBFLUSH */1281#endif /* CONFIG_DEBUG_TLBFLUSH */
net/8021q/vlan_dev.c+15−11
@@ -443,27 +443,29 @@ static int vlan_dev_fcoe_disable(struct net_device *dev) · 442 unmodified lines
443 return rc;443 return rc;
444}444}
445 445
446static int vlan_dev_fcoe_get_wwn(struct net_device *dev, u64 *wwn, int type)446static int vlan_dev_fcoe_ddp_target(struct net_device *dev, u16 xid,
447 struct scatterlist *sgl, unsigned int sgc)
447{448{
448 struct net_device *real_dev = vlan_dev_priv(dev)->real_dev;449 struct net_device *real_dev = vlan_dev_priv(dev)->real_dev;
449 const struct net_device_ops *ops = real_dev->netdev_ops;450 const struct net_device_ops *ops = real_dev->netdev_ops;
450 int rc = -EINVAL;451 int rc = 0;
452
453 if (ops->ndo_fcoe_ddp_target)
454 rc = ops->ndo_fcoe_ddp_target(real_dev, xid, sgl, sgc);
451 455
452 if (ops->ndo_fcoe_get_wwn)
453 rc = ops->ndo_fcoe_get_wwn(real_dev, wwn, type);
454 return rc;456 return rc;
455}457}
458#endif
456 459
457static int vlan_dev_fcoe_ddp_target(struct net_device *dev, u16 xid,460#ifdef NETDEV_FCOE_WWNN
458 struct scatterlist *sgl, unsigned int sgc)461static int vlan_dev_fcoe_get_wwn(struct net_device *dev, u64 *wwn, int type)
459{462{
460 struct net_device *real_dev = vlan_dev_priv(dev)->real_dev;463 struct net_device *real_dev = vlan_dev_priv(dev)->real_dev;
461 const struct net_device_ops *ops = real_dev->netdev_ops;464 const struct net_device_ops *ops = real_dev->netdev_ops;
462 int rc = 0;465 int rc = -EINVAL;
463
464 if (ops->ndo_fcoe_ddp_target)
465 rc = ops->ndo_fcoe_ddp_target(real_dev, xid, sgl, sgc);
466 466
467 if (ops->ndo_fcoe_get_wwn)
468 rc = ops->ndo_fcoe_get_wwn(real_dev, wwn, type);
467 return rc;469 return rc;
468}470}
469#endif471#endif
@@ -794,9 +796,11 @@ static const struct net_device_ops vlan_netdev_ops = { · 324 unmodified lines
794 .ndo_fcoe_ddp_done = vlan_dev_fcoe_ddp_done,796 .ndo_fcoe_ddp_done = vlan_dev_fcoe_ddp_done,
795 .ndo_fcoe_enable = vlan_dev_fcoe_enable,797 .ndo_fcoe_enable = vlan_dev_fcoe_enable,
796 .ndo_fcoe_disable = vlan_dev_fcoe_disable,798 .ndo_fcoe_disable = vlan_dev_fcoe_disable,
797 .ndo_fcoe_get_wwn = vlan_dev_fcoe_get_wwn,
798 .ndo_fcoe_ddp_target = vlan_dev_fcoe_ddp_target,799 .ndo_fcoe_ddp_target = vlan_dev_fcoe_ddp_target,
799#endif800#endif
801#ifdef NETDEV_FCOE_WWNN
802 .ndo_fcoe_get_wwn = vlan_dev_fcoe_get_wwn,
803#endif
800#ifdef CONFIG_NET_POLL_CONTROLLER804#ifdef CONFIG_NET_POLL_CONTROLLER
801 .ndo_poll_controller = vlan_dev_poll_controller,805 .ndo_poll_controller = vlan_dev_poll_controller,
802 .ndo_netpoll_setup = vlan_dev_netpoll_setup,806 .ndo_netpoll_setup = vlan_dev_netpoll_setup,
net/atm/lec.c+5−1
@@ -710,7 +710,10 @@ static int lec_vcc_attach(struct atm_vcc *vcc, void __user *arg) · 709 unmodified lines
710 710
711static int lec_mcast_attach(struct atm_vcc *vcc, int arg)711static int lec_mcast_attach(struct atm_vcc *vcc, int arg)
712{712{
713 if (arg < 0 || arg >= MAX_LEC_ITF || !dev_lec[arg])713 if (arg < 0 || arg >= MAX_LEC_ITF)
714 return -EINVAL;
715 arg = array_index_nospec(arg, MAX_LEC_ITF);
716 if (!dev_lec[arg])
714 return -EINVAL;717 return -EINVAL;
715 vcc->proto_data = dev_lec[arg];718 vcc->proto_data = dev_lec[arg];
716 return lec_mcast_make(netdev_priv(dev_lec[arg]), vcc);719 return lec_mcast_make(netdev_priv(dev_lec[arg]), vcc);
@@ -728,6 +731,7 @@ static int lecd_attach(struct atm_vcc *vcc, int arg) · 11 unmodified lines
728 i = arg;731 i = arg;
729 if (arg >= MAX_LEC_ITF)732 if (arg >= MAX_LEC_ITF)
730 return -EINVAL;733 return -EINVAL;
734 i = array_index_nospec(arg, MAX_LEC_ITF);
731 if (!dev_lec[i]) {735 if (!dev_lec[i]) {
732 int size;736 int size;
733 737
net/batman-adv/bat_v_elp.c+4−2
@@ -104,8 +104,10 @@ static u32 batadv_v_elp_get_throughput(struct batadv_hardif_neigh_node *neigh) · 103 unmodified lines
104 104
105 ret = cfg80211_get_station(real_netdev, neigh->addr, &sinfo);105 ret = cfg80211_get_station(real_netdev, neigh->addr, &sinfo);
106 106
107 /* free the TID stats immediately */107 if (!ret) {
108 cfg80211_sinfo_release_content(&sinfo);108 /* free the TID stats immediately */
109 cfg80211_sinfo_release_content(&sinfo);
110 }
109 111
110 dev_put(real_netdev);112 dev_put(real_netdev);
111 if (ret == -ENOENT) {113 if (ret == -ENOENT) {
net/batman-adv/bridge_loop_avoidance.c+13−3
@@ -803,6 +803,8 @@ static void batadv_bla_del_claim(struct batadv_priv *bat_priv, · 802 unmodified lines
803 const u8 *mac, const unsigned short vid)803 const u8 *mac, const unsigned short vid)
804{804{
805 struct batadv_bla_claim search_claim, *claim;805 struct batadv_bla_claim search_claim, *claim;
806 struct batadv_bla_claim *claim_removed_entry;
807 struct hlist_node *claim_removed_node;
806 808
807 ether_addr_copy(search_claim.addr, mac);809 ether_addr_copy(search_claim.addr, mac);
808 search_claim.vid = vid;810 search_claim.vid = vid;
@@ -813,10 +815,18 @@ static void batadv_bla_del_claim(struct batadv_priv *bat_priv, · 4 unmodified lines
813 batadv_dbg(BATADV_DBG_BLA, bat_priv, "%s(): %pM, vid %d\n", __func__,815 batadv_dbg(BATADV_DBG_BLA, bat_priv, "%s(): %pM, vid %d\n", __func__,
814 mac, batadv_print_vid(vid));816 mac, batadv_print_vid(vid));
815 817
816 batadv_hash_remove(bat_priv->bla.claim_hash, batadv_compare_claim,818 claim_removed_node = batadv_hash_remove(bat_priv->bla.claim_hash,
817 batadv_choose_claim, claim);819 batadv_compare_claim,
818 batadv_claim_put(claim); /* reference from the hash is gone */820 batadv_choose_claim, claim);
821 if (!claim_removed_node)
822 goto free_claim;
819 823
824 /* reference from the hash is gone */
825 claim_removed_entry = hlist_entry(claim_removed_node,
826 struct batadv_bla_claim, hash_entry);
827 batadv_claim_put(claim_removed_entry);
828
829free_claim:
820 /* don't need the reference from hash_find() anymore */830 /* don't need the reference from hash_find() anymore */
821 batadv_claim_put(claim);831 batadv_claim_put(claim);
822}832}
net/batman-adv/sysfs.c+5−2
@@ -1116,9 +1116,9 @@ static ssize_t batadv_store_throughput_override(struct kobject *kobj, · 1115 unmodified lines
1116 struct attribute *attr,1116 struct attribute *attr,
1117 char *buff, size_t count)1117 char *buff, size_t count)
1118{1118{
1119 struct batadv_priv *bat_priv = batadv_kobj_to_batpriv(kobj);
1120 struct net_device *net_dev = batadv_kobj_to_netdev(kobj);1119 struct net_device *net_dev = batadv_kobj_to_netdev(kobj);
1121 struct batadv_hard_iface *hard_iface;1120 struct batadv_hard_iface *hard_iface;
1121 struct batadv_priv *bat_priv;
1122 u32 tp_override;1122 u32 tp_override;
1123 u32 old_tp_override;1123 u32 old_tp_override;
1124 bool ret;1124 bool ret;
@@ -1147,7 +1147,10 @@ static ssize_t batadv_store_throughput_override(struct kobject *kobj, · 22 unmodified lines
1147 1147
1148 atomic_set(&hard_iface->bat_v.throughput_override, tp_override);1148 atomic_set(&hard_iface->bat_v.throughput_override, tp_override);
1149 1149
1150 batadv_netlink_notify_hardif(bat_priv, hard_iface);1150 if (hard_iface->soft_iface) {
1151 bat_priv = netdev_priv(hard_iface->soft_iface);
1152 batadv_netlink_notify_hardif(bat_priv, hard_iface);
1153 }
1151 1154
1152out:1155out:
1153 batadv_hardif_put(hard_iface);1156 batadv_hardif_put(hard_iface);
net/batman-adv/translation-table.c+24−8
@@ -616,14 +616,26 @@ static void batadv_tt_global_free(struct batadv_priv *bat_priv, · 615 unmodified lines
616 struct batadv_tt_global_entry *tt_global,616 struct batadv_tt_global_entry *tt_global,
617 const char *message)617 const char *message)
618{618{
619 struct batadv_tt_global_entry *tt_removed_entry;
620 struct hlist_node *tt_removed_node;
621
619 batadv_dbg(BATADV_DBG_TT, bat_priv,622 batadv_dbg(BATADV_DBG_TT, bat_priv,
620 "Deleting global tt entry %pM (vid: %d): %s\n",623 "Deleting global tt entry %pM (vid: %d): %s\n",
621 tt_global->common.addr,624 tt_global->common.addr,
622 batadv_print_vid(tt_global->common.vid), message);625 batadv_print_vid(tt_global->common.vid), message);
623 626
624 batadv_hash_remove(bat_priv->tt.global_hash, batadv_compare_tt,627 tt_removed_node = batadv_hash_remove(bat_priv->tt.global_hash,
625 batadv_choose_tt, &tt_global->common);628 batadv_compare_tt,
626 batadv_tt_global_entry_put(tt_global);629 batadv_choose_tt,
630 &tt_global->common);
631 if (!tt_removed_node)
632 return;
633
634 /* drop reference of remove hash entry */
635 tt_removed_entry = hlist_entry(tt_removed_node,
636 struct batadv_tt_global_entry,
637 common.hash_entry);
638 batadv_tt_global_entry_put(tt_removed_entry);
627}639}
628 640
629/**641/**
@@ -1337,9 +1349,10 @@ u16 batadv_tt_local_remove(struct batadv_priv *bat_priv, const u8 *addr, · 707 unmodified lines
1337 unsigned short vid, const char *message,1349 unsigned short vid, const char *message,
1338 bool roaming)1350 bool roaming)
1339{1351{
1352 struct batadv_tt_local_entry *tt_removed_entry;
1340 struct batadv_tt_local_entry *tt_local_entry;1353 struct batadv_tt_local_entry *tt_local_entry;
1341 u16 flags, curr_flags = BATADV_NO_FLAGS;1354 u16 flags, curr_flags = BATADV_NO_FLAGS;
1342 void *tt_entry_exists;1355 struct hlist_node *tt_removed_node;
1343 1356
1344 tt_local_entry = batadv_tt_local_hash_find(bat_priv, addr, vid);1357 tt_local_entry = batadv_tt_local_hash_find(bat_priv, addr, vid);
1345 if (!tt_local_entry)1358 if (!tt_local_entry)
@@ -1368,15 +1381,18 @@ u16 batadv_tt_local_remove(struct batadv_priv *bat_priv, const u8 *addr, · 22 unmodified lines
1368 */1381 */
1369 batadv_tt_local_event(bat_priv, tt_local_entry, BATADV_TT_CLIENT_DEL);1382 batadv_tt_local_event(bat_priv, tt_local_entry, BATADV_TT_CLIENT_DEL);
1370 1383
1371 tt_entry_exists = batadv_hash_remove(bat_priv->tt.local_hash,1384 tt_removed_node = batadv_hash_remove(bat_priv->tt.local_hash,
1372 batadv_compare_tt,1385 batadv_compare_tt,
1373 batadv_choose_tt,1386 batadv_choose_tt,
1374 &tt_local_entry->common);1387 &tt_local_entry->common);
1375 if (!tt_entry_exists)1388 if (!tt_removed_node)
1376 goto out;1389 goto out;
1377 1390
1378 /* extra call to free the local tt entry */1391 /* drop reference of remove hash entry */
1379 batadv_tt_local_entry_put(tt_local_entry);1392 tt_removed_entry = hlist_entry(tt_removed_node,
1393 struct batadv_tt_local_entry,
1394 common.hash_entry);
1395 batadv_tt_local_entry_put(tt_removed_entry);
1380 1396
1381out:1397out:
1382 if (tt_local_entry)1398 if (tt_local_entry)
net/bluetooth/sco.c+2−2
@@ -523,12 +523,12 @@ static int sco_sock_bind(struct socket *sock, struct sockaddr *addr, · 522 unmodified lines
523 struct sock *sk = sock->sk;523 struct sock *sk = sock->sk;
524 int err = 0;524 int err = 0;
525 525
526 BT_DBG("sk %p %pMR", sk, &sa->sco_bdaddr);
527
528 if (!addr || addr_len < sizeof(struct sockaddr_sco) ||526 if (!addr || addr_len < sizeof(struct sockaddr_sco) ||
529 addr->sa_family != AF_BLUETOOTH)527 addr->sa_family != AF_BLUETOOTH)
530 return -EINVAL;528 return -EINVAL;
531 529
530 BT_DBG("sk %p %pMR", sk, &sa->sco_bdaddr);
531
532 lock_sock(sk);532 lock_sock(sk);
533 533
534 if (sk->sk_state != BT_OPEN) {534 if (sk->sk_state != BT_OPEN) {
net/bridge/br_input.c+14−9
@@ -197,13 +197,10 @@ static void __br_handle_local_finish(struct sk_buff *skb) · 196 unmodified lines
197/* note: already called with rcu_read_lock */197/* note: already called with rcu_read_lock */
198static int br_handle_local_finish(struct net *net, struct sock *sk, struct sk_buff *skb)198static int br_handle_local_finish(struct net *net, struct sock *sk, struct sk_buff *skb)
199{199{
200 struct net_bridge_port *p = br_port_get_rcu(skb->dev);
201
202 __br_handle_local_finish(skb);200 __br_handle_local_finish(skb);
203 201
204 BR_INPUT_SKB_CB(skb)->brdev = p->br->dev;202 /* return 1 to signal the okfn() was called so it's ok to use the skb */
205 br_pass_frame_up(skb);203 return 1;
206 return 0;
207}204}
208 205
209/*206/*
@@ -280,10 +277,18 @@ rx_handler_result_t br_handle_frame(struct sk_buff **pskb) · 70 unmodified lines
280 goto forward;277 goto forward;
281 }278 }
282 279
283 /* Deliver packet to local host only */280 /* The else clause should be hit when nf_hook():
284 NF_HOOK(NFPROTO_BRIDGE, NF_BR_LOCAL_IN, dev_net(skb->dev),281 * - returns < 0 (drop/error)
285 NULL, skb, skb->dev, NULL, br_handle_local_finish);282 * - returns = 0 (stolen/nf_queue)
286 return RX_HANDLER_CONSUMED;283 * Thus return 1 from the okfn() to signal the skb is ok to pass
284 */
285 if (NF_HOOK(NFPROTO_BRIDGE, NF_BR_LOCAL_IN,
286 dev_net(skb->dev), NULL, skb, skb->dev, NULL,
287 br_handle_local_finish) == 1) {
288 return RX_HANDLER_PASS;
289 } else {
290 return RX_HANDLER_CONSUMED;
291 }
287 }292 }
288 293
289forward:294forward:
net/bridge/br_multicast.c+6−1
@@ -601,6 +601,7 @@ static int br_ip4_multicast_add_group(struct net_bridge *br, · 600 unmodified lines
601 if (ipv4_is_local_multicast(group))601 if (ipv4_is_local_multicast(group))
602 return 0;602 return 0;
603 603
604 memset(&br_group, 0, sizeof(br_group));
604 br_group.u.ip4 = group;605 br_group.u.ip4 = group;
605 br_group.proto = htons(ETH_P_IP);606 br_group.proto = htons(ETH_P_IP);
606 br_group.vid = vid;607 br_group.vid = vid;
@@ -1497,6 +1498,7 @@ static void br_ip4_multicast_leave_group(struct net_bridge *br, · 890 unmodified lines
1497 1498
1498 own_query = port ? &port->ip4_own_query : &br->ip4_own_query;1499 own_query = port ? &port->ip4_own_query : &br->ip4_own_query;
1499 1500
1501 memset(&br_group, 0, sizeof(br_group));
1500 br_group.u.ip4 = group;1502 br_group.u.ip4 = group;
1501 br_group.proto = htons(ETH_P_IP);1503 br_group.proto = htons(ETH_P_IP);
1502 br_group.vid = vid;1504 br_group.vid = vid;
@@ -1520,6 +1522,7 @@ static void br_ip6_multicast_leave_group(struct net_bridge *br, · 17 unmodified lines
1520 1522
1521 own_query = port ? &port->ip6_own_query : &br->ip6_own_query;1523 own_query = port ? &port->ip6_own_query : &br->ip6_own_query;
1522 1524
1525 memset(&br_group, 0, sizeof(br_group));
1523 br_group.u.ip6 = *group;1526 br_group.u.ip6 = *group;
1524 br_group.proto = htons(ETH_P_IPV6);1527 br_group.proto = htons(ETH_P_IPV6);
1525 br_group.vid = vid;1528 br_group.vid = vid;
@@ -2028,7 +2031,8 @@ static void br_multicast_start_querier(struct net_bridge *br, · 502 unmodified lines
2028 2031
2029 __br_multicast_open(br, query);2032 __br_multicast_open(br, query);
2030 2033
2031 list_for_each_entry(port, &br->port_list, list) {2034 rcu_read_lock();
2035 list_for_each_entry_rcu(port, &br->port_list, list) {
2032 if (port->state == BR_STATE_DISABLED ||2036 if (port->state == BR_STATE_DISABLED ||
2033 port->state == BR_STATE_BLOCKING)2037 port->state == BR_STATE_BLOCKING)
2034 continue;2038 continue;
@@ -2040,6 +2044,7 @@ static void br_multicast_start_querier(struct net_bridge *br, · 5 unmodified lines
2040 br_multicast_enable(&port->ip6_own_query);2044 br_multicast_enable(&port->ip6_own_query);
2041#endif2045#endif
2042 }2046 }
2047 rcu_read_unlock();
2043}2048}
2044 2049
2045int br_multicast_toggle(struct net_bridge *br, unsigned long val)2050int br_multicast_toggle(struct net_bridge *br, unsigned long val)
net/bridge/br_netlink.c+1−1
@@ -1441,7 +1441,7 @@ static int br_fill_info(struct sk_buff *skb, const struct net_device *brdev) · 1440 unmodified lines
1441 nla_put_u8(skb, IFLA_BR_VLAN_STATS_ENABLED,1441 nla_put_u8(skb, IFLA_BR_VLAN_STATS_ENABLED,
1442 br_opt_get(br, BROPT_VLAN_STATS_ENABLED)) ||1442 br_opt_get(br, BROPT_VLAN_STATS_ENABLED)) ||
1443 nla_put_u8(skb, IFLA_BR_VLAN_STATS_PER_PORT,1443 nla_put_u8(skb, IFLA_BR_VLAN_STATS_PER_PORT,
1444 br_opt_get(br, IFLA_BR_VLAN_STATS_PER_PORT)))1444 br_opt_get(br, BROPT_VLAN_STATS_PER_PORT)))
1445 return -EMSGSIZE;1445 return -EMSGSIZE;
1446#endif1446#endif
1447#ifdef CONFIG_BRIDGE_IGMP_SNOOPING1447#ifdef CONFIG_BRIDGE_IGMP_SNOOPING
net/core/datagram.c+1−1
@@ -279,7 +279,7 @@ struct sk_buff *__skb_try_recv_datagram(struct sock *sk, unsigned int flags, · 278 unmodified lines
279 break;279 break;
280 280
281 sk_busy_loop(sk, flags & MSG_DONTWAIT);281 sk_busy_loop(sk, flags & MSG_DONTWAIT);
282 } while (!skb_queue_empty(&sk->sk_receive_queue));282 } while (sk->sk_receive_queue.prev != *last);
283 283
284 error = -EAGAIN;284 error = -EAGAIN;
285 285
net/core/dev.c+18−2
@@ -1184,7 +1184,21 @@ int dev_change_name(struct net_device *dev, const char *newname) · 1183 unmodified lines
1184 BUG_ON(!dev_net(dev));1184 BUG_ON(!dev_net(dev));
1185 1185
1186 net = dev_net(dev);1186 net = dev_net(dev);
1187 if (dev->flags & IFF_UP)1187
1188 /* Some auto-enslaved devices e.g. failover slaves are
1189 * special, as userspace might rename the device after
1190 * the interface had been brought up and running since
1191 * the point kernel initiated auto-enslavement. Allow
1192 * live name change even when these slave devices are
1193 * up and running.
1194 *
1195 * Typically, users of these auto-enslaving devices
1196 * don't actually care about slave name change, as
1197 * they are supposed to operate on master interface
1198 * directly.
1199 */
1200 if (dev->flags & IFF_UP &&
1201 likely(!(dev->priv_flags & IFF_LIVE_RENAME_OK)))
1188 return -EBUSY;1202 return -EBUSY;
1189 1203
1190 write_seqcount_begin(&devnet_rename_seq);1204 write_seqcount_begin(&devnet_rename_seq);
@@ -5014,8 +5028,10 @@ static inline void __netif_receive_skb_list_ptype(struct list_head *head, · 3823 unmodified lines
5014 if (pt_prev->list_func != NULL)5028 if (pt_prev->list_func != NULL)
5015 pt_prev->list_func(head, pt_prev, orig_dev);5029 pt_prev->list_func(head, pt_prev, orig_dev);
5016 else5030 else
5017 list_for_each_entry_safe(skb, next, head, list)5031 list_for_each_entry_safe(skb, next, head, list) {
5032 skb_list_del_init(skb);
5018 pt_prev->func(skb, skb->dev, pt_prev, orig_dev);5033 pt_prev->func(skb, skb->dev, pt_prev, orig_dev);
5034 }
5019}5035}
5020 5036
5021static void __netif_receive_skb_list_core(struct list_head *head, bool pfmemalloc)5037static void __netif_receive_skb_list_core(struct list_head *head, bool pfmemalloc)
net/core/ethtool.c+30−16
@@ -1797,11 +1797,16 @@ static int ethtool_get_strings(struct net_device *dev, void __user *useraddr) · 1796 unmodified lines
1797 WARN_ON_ONCE(!ret);1797 WARN_ON_ONCE(!ret);
1798 1798
1799 gstrings.len = ret;1799 gstrings.len = ret;
1800 data = vzalloc(array_size(gstrings.len, ETH_GSTRING_LEN));
1801 if (gstrings.len && !data)
1802 return -ENOMEM;
1803 1800
1804 __ethtool_get_strings(dev, gstrings.string_set, data);1801 if (gstrings.len) {
1802 data = vzalloc(array_size(gstrings.len, ETH_GSTRING_LEN));
1803 if (!data)
1804 return -ENOMEM;
1805
1806 __ethtool_get_strings(dev, gstrings.string_set, data);
1807 } else {
1808 data = NULL;
1809 }
1805 1810
1806 ret = -EFAULT;1811 ret = -EFAULT;
1807 if (copy_to_user(useraddr, &gstrings, sizeof(gstrings)))1812 if (copy_to_user(useraddr, &gstrings, sizeof(gstrings)))
@@ -1897,11 +1902,15 @@ static int ethtool_get_stats(struct net_device *dev, void __user *useraddr) · 89 unmodified lines
1897 return -EFAULT;1902 return -EFAULT;
1898 1903
1899 stats.n_stats = n_stats;1904 stats.n_stats = n_stats;
1900 data = vzalloc(array_size(n_stats, sizeof(u64)));
1901 if (n_stats && !data)
1902 return -ENOMEM;
1903 1905
1904 ops->get_ethtool_stats(dev, &stats, data);1906 if (n_stats) {
1907 data = vzalloc(array_size(n_stats, sizeof(u64)));
1908 if (!data)
1909 return -ENOMEM;
1910 ops->get_ethtool_stats(dev, &stats, data);
1911 } else {
1912 data = NULL;
1913 }
1905 1914
1906 ret = -EFAULT;1915 ret = -EFAULT;
1907 if (copy_to_user(useraddr, &stats, sizeof(stats)))1916 if (copy_to_user(useraddr, &stats, sizeof(stats)))
@@ -1941,16 +1950,21 @@ static int ethtool_get_phy_stats(struct net_device *dev, void __user *useraddr) · 33 unmodified lines
1941 return -EFAULT;1950 return -EFAULT;
1942 1951
1943 stats.n_stats = n_stats;1952 stats.n_stats = n_stats;
1944 data = vzalloc(array_size(n_stats, sizeof(u64)));
1945 if (n_stats && !data)
1946 return -ENOMEM;
1947 1953
1948 if (dev->phydev && !ops->get_ethtool_phy_stats) {1954 if (n_stats) {
1949 ret = phy_ethtool_get_stats(dev->phydev, &stats, data);1955 data = vzalloc(array_size(n_stats, sizeof(u64)));
1950 if (ret < 0)1956 if (!data)
1951 return ret;1957 return -ENOMEM;
1958
1959 if (dev->phydev && !ops->get_ethtool_phy_stats) {
1960 ret = phy_ethtool_get_stats(dev->phydev, &stats, data);
1961 if (ret < 0)
1962 goto out;
1963 } else {
1964 ops->get_ethtool_phy_stats(dev, &stats, data);
1965 }
1952 } else {1966 } else {
1953 ops->get_ethtool_phy_stats(dev, &stats, data);1967 data = NULL;
1954 }1968 }
1955 1969
1956 ret = -EFAULT;1970 ret = -EFAULT;
net/core/failover.c+3−3
@@ -80,14 +80,14 @@ static int failover_slave_register(struct net_device *slave_dev) · 79 unmodified lines
80 goto err_upper_link;80 goto err_upper_link;
81 }81 }
82 82
83 slave_dev->priv_flags |= IFF_FAILOVER_SLAVE;83 slave_dev->priv_flags |= (IFF_FAILOVER_SLAVE | IFF_LIVE_RENAME_OK);

20 more lines aren’t shown here.

net/core/filter.c+5−13

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

net/core/flow_dissector.c+3−1

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

net/core/net-sysfs.c+5−9

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

net/core/net_namespace.c+1−0

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

net/core/ptp_classifier.c+4−3

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

net/core/rtnetlink.c+1−1

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

net/core/skbuff.c+10−2

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

net/core/sock.c+2−2

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

net/dccp/feat.c+6−1

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

net/dsa/tag_qca.c+10−0

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

net/ipv4/fou.c+3−1

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

net/ipv4/ip_gre.c+10−5

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

net/ipv4/ip_input.c+3−4

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

net/ipv4/ip_options.c+2−2

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

net/ipv4/route.c+15−1

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

net/ipv4/tcp_dctcp.c+35−46

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

net/ipv4/tcp_input.c+5−5

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

net/ipv4/tcp_ipv4.c+2−1

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

net/ipv6/ila/ila_xlat.c+1−0

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

net/ipv6/ip6_gre.c+13−7

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

net/ipv6/ip6_output.c+3−1

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

net/ipv6/ip6_tunnel.c+2−2

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

net/ipv6/route.c+4−0

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

net/ipv6/sit.c+4−0

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

net/ipv6/udp.c+2−0

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

net/kcm/kcmsock.c+8−8

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

net/llc/af_llc.c+1−2

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

net/mac80211/driver-ops.h+3−0

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

net/mac80211/key.c+4−5

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

net/mac80211/mesh_pathtbl.c+1−1

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

net/mac80211/rx.c+9−1

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

net/mac80211/trace_msg.h+6−1

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

net/mac80211/tx.c+23−30

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

net/netlink/af_netlink.c+2−1

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

net/netrom/af_netrom.c+54−22

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

net/netrom/nr_loopback.c+1−1

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

net/netrom/nr_route.c+1−1

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

net/netrom/sysctl_net_netrom.c+4−1

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

net/nfc/nci/hci.c+8−0

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

net/openvswitch/flow_netlink.c+2−2

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

net/rds/af_rds.c+3−0

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

net/rds/bind.c+2−0

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

net/rds/tcp.c+1−1

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

net/rxrpc/af_rxrpc.c+11−6

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

net/rxrpc/ar-internal.h+1−0

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

net/rxrpc/conn_event.c+7−4

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

net/rxrpc/input.c+12−6

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

net/rxrpc/peer_event.c+5−0

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

net/rxrpc/sendmsg.c+12−9

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

net/sched/act_sample.c+8−2

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

net/sched/cls_matchall.c+5−0

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

net/sched/sch_cake.c+12−1

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

net/sched/sch_cbq.c+4−6

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

net/sched/sch_drr.c+4−12

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

net/sched/sch_hfsc.c+5−14

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

net/sched/sch_htb.c+6−16

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

net/sched/sch_mq.c+1−1

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

net/sched/sch_mqprio.c+1−2

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

net/sched/sch_multiq.c+4−6

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

net/sched/sch_prio.c+3−7

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

net/sched/sch_qfq.c+2−12

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

net/sched/sch_red.c+1−2

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

net/sched/sch_sfb.c+1−2

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

net/sched/sch_taprio.c+1−1

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

net/sched/sch_tbf.c+1−2

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

net/sctp/protocol.c+1−0

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

net/sctp/socket.c+2−1

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

net/smc/af_smc.c+39−19

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

net/smc/smc_close.c+21−4

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

net/smc/smc_close.h+1−0

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

net/smc/smc_ism.c+5−0

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

net/smc/smc_pnet.c+2−1

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

net/strparser/strparser.c+5−7

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

net/sunrpc/clnt.c+13−39

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

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

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

net/tipc/link.c+2−0

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

net/tipc/name_table.c+2−1

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

net/tipc/netlink_compat.c+20−4

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

net/tipc/sysctl.c+6−2

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

net/tls/tls_device.c+11−1

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

net/tls/tls_main.c+24−0

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

net/tls/tls_sw.c+3−14

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

net/wireless/nl80211.c+12−6

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

net/wireless/reg.c+39−0

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

net/wireless/scan.c+1−2

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

net/wireless/util.c+4−2

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

scripts/atomic/gen-atomics.sh+1−1

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

scripts/coccinelle/api/stream_open.cocci+363−0

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

security/apparmor/lsm.c+48−1

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

security/device_cgroup.c+1−1

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

security/keys/trusted.c+25−7

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

sound/core/info.c+10−2

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

sound/core/init.c+9−9

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

sound/core/seq/seq_clientmgr.c+3−3

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

sound/hda/ext/hdac_ext_bus.c+0−1

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

sound/hda/hdac_bus.c+1−0

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

sound/hda/hdac_component.c+5−1

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

sound/pci/hda/hda_codec.c+1−0

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

sound/pci/hda/hda_intel.c+4−0

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

sound/pci/hda/patch_realtek.c+57−21

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

sound/soc/codecs/Kconfig+1−0

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

sound/soc/codecs/ab8500-codec.c+1−0

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

sound/soc/codecs/cs35l35.c+11−0

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

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

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

sound/soc/codecs/hdac_hda.c+39−14

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

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

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

sound/soc/codecs/hdmi-codec.c+59−62

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

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

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

sound/soc/codecs/nau8824.c+38−8

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

sound/soc/codecs/rt5682.c+25−31

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

sound/soc/codecs/tlv320aic32x4-i2c.c+2−2

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

sound/soc/codecs/tlv320aic32x4-spi.c+2−2

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

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

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

sound/soc/codecs/tlv320aic3x.c+3−1

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

sound/soc/codecs/wm_adsp.c+33−7

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

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

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

sound/soc/fsl/fsl_asrc.c+14−0

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

sound/soc/fsl/fsl_esai.c+37−10

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

sound/soc/generic/audio-graph-card.c+8−3

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

sound/soc/generic/simple-card.c+9−3

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

sound/soc/intel/atom/sst-mfld-platform-pcm.c+8−0

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

sound/soc/intel/boards/cht_bsw_max98090_ti.c+41−6

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

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

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

sound/soc/intel/skylake/skl-messages.c+1−0

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

sound/soc/intel/skylake/skl-pcm.c+22−6

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

sound/soc/mediatek/common/mtk-btcvsd.c+68−1

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

sound/soc/mediatek/mt8183/mt8183-afe-clk.c+4−0

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

sound/soc/rockchip/rockchip_pdm.c+3−1

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

sound/soc/samsung/i2s.c+6−4

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

sound/soc/samsung/odroid.c+2−2

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

sound/soc/sh/rcar/core.c+2−0

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

sound/soc/sh/rcar/rsnd.h+5−0

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

sound/soc/sh/rcar/src.c+7−14

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

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

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

sound/soc/soc-dapm.c+11−0

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

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

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

sound/soc/soc-topology.c+4−3

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

sound/soc/stm/stm32_adfsdm.c+34−4

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

sound/soc/stm/stm32_i2s.c+1−2

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

sound/soc/stm/stm32_sai.c+5−3

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

sound/soc/stm/stm32_sai_sub.c+86−28

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

sound/xen/xen_snd_front_alsa.c+1−1

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

tools/include/uapi/sound/asound.h+1−0

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

tools/io_uring/io_uring-bench.c+4−28

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

tools/lib/bpf/Makefile+4−3

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

tools/lib/bpf/btf.c+3−0

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

tools/lib/traceevent/event-parse.c+1−1

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

tools/objtool/check.c+1−0

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

tools/perf/builtin-stat.c+1−0

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

tools/perf/builtin-top.c+1−0

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

tools/perf/scripts/python/export-to-sqlite.py+1−1

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

tools/perf/util/env.c+6−2

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

tools/perf/util/evlist.c+9−5

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

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

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

tools/perf/util/header.c+13−9

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

tools/perf/util/map.c+17−3

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

tools/perf/util/map.h+3−1

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

tools/power/x86/turbostat/turbostat.c+219−58

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

tools/testing/nvdimm/test/nfit.c+13−4

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

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

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

tools/testing/selftests/bpf/progs/bpf_flow.c+7−12

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

tools/testing/selftests/bpf/test_btf.c+47−0

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

tools/testing/selftests/bpf/verifier/calls.c+38−0

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

tools/testing/selftests/drivers/net/mlxsw/rtnetlink.sh+20−0

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

tools/testing/selftests/kvm/Makefile+8−1

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

tools/testing/selftests/kvm/include/x86_64/processor.h+27−0

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

tools/testing/selftests/kvm/lib/kvm_util.c+5−0

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

tools/testing/selftests/kvm/lib/x86_64/processor.c+14−6

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

tools/testing/selftests/kvm/x86_64/evmcs_test.c+3−2

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

tools/testing/selftests/kvm/x86_64/smm_test.c+157−0

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

tools/testing/selftests/kvm/x86_64/state_test.c+1−14

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

tools/testing/selftests/net/fib_tests.sh+40−54

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

tools/testing/selftests/proc/proc-pid-vm.c+2−2

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

tools/testing/selftests/proc/proc-self-map-files-002.c+10−10

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

tools/testing/selftests/tc-testing/tc-tests/actions/sample.json+24−0

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

tools/testing/selftests/tc-testing/tc-tests/filters/tests.json+20−0

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

tools/testing/selftests/tpm2/tpm2.py+3−2

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

tools/testing/selftests/tpm2/tpm2_tests.py+63−0

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

virt/kvm/irqchip.c+3−2

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

virt/kvm/kvm_main.c+4−2

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