History

Merge 5.6-rc7 into char-misc-next

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

Greg Kroah-Hartman committed 6 years ago

Commit baca54d2 parents 217fb36 16fbf79414 files · +3487 −1503Browse files

Unified · Split

414 files
  1. .clang-format +21 −4
  2. Documentation/arm64/silicon-errata.rst +2 −0
  3. Documentation/devicetree/bindings/net/fsl-fman.txt +7 −0
  4. Documentation/filesystems/porting.rst +8 −0
  5. Documentation/kbuild/kbuild.rst +1 −1
  6. Documentation/kbuild/kconfig-macro-language.rst +1 −1
  7. Documentation/kbuild/makefiles.rst +3 −3
  8. Documentation/kbuild/modules.rst +2 −2
  9. Documentation/networking/devlink/devlink-region.rst +0 −3
  10. Documentation/networking/net_failover.rst +3 −3
  11. Documentation/networking/rds.txt +1 −1
  12. MAINTAINERS +2 −4
  13. Makefile +2 −2
  14. arch/arc/Kconfig +2 −2
  15. arch/arc/configs/nps_defconfig +0 −2
  16. arch/arc/configs/nsimosci_defconfig +0 −2
  17. arch/arc/configs/nsimosci_hs_defconfig +0 −2
  18. arch/arc/configs/nsimosci_hs_smp_defconfig +0 −2
  19. arch/arc/include/asm/fpu.h +2 −0
  20. arch/arc/include/asm/linkage.h +2 −0
  21. arch/arc/kernel/setup.c +1 −1
  22. arch/arc/kernel/troubleshoot.c +12 −15
  23. arch/arm/Makefile +3 −1
  24. arch/arm/boot/compressed/Makefile +2 −2
  25. arch/arm/kernel/vdso.c +2 −0
  26. arch/arm/lib/copy_from_user.S +1 −1
  27. arch/arm64/boot/dts/freescale/fsl-ls1043-post.dtsi +2 −0
  28. arch/arm64/include/asm/mmu.h +1 −3
  29. arch/arm64/include/asm/pgtable-prot.h +4 −2
  30. arch/arm64/include/asm/unistd.h +1 −1
  31. arch/arm64/kernel/smp.c +20 −5
  32. arch/mips/boot/dts/ingenic/ci20.dts +28 −16
  33. arch/mips/kernel/setup.c +2 −1
  34. arch/powerpc/kvm/book3s_pr.c +1 −0
  35. arch/powerpc/kvm/powerpc.c +0 −2
  36. arch/powerpc/mm/kasan/kasan_init_32.c +2 −7
  37. arch/s390/kvm/kvm-s390.c +17 −1
  38. arch/x86/Makefile +3 −2
  39. arch/x86/crypto/Makefile +6 −1
  40. arch/x86/events/amd/uncore.c +7 −10
  41. arch/x86/include/asm/kvm_emulate.h +0 −1
  42. arch/x86/kernel/apic/vector.c +8 −6
  43. arch/x86/kernel/cpu/mce/intel.c +5 −4
  44. arch/x86/kernel/cpu/mce/therm_throt.c +7 −2
  45. arch/x86/kvm/Kconfig +1 −1
  46. arch/x86/kvm/emulate.c +1 −0
  47. arch/x86/kvm/ioapic.c +5 −2
  48. arch/x86/kvm/svm.c +2 −1
  49. arch/x86/kvm/vmx/nested.c +3 −2
  50. arch/x86/kvm/vmx/vmx.c +14 −2
  51. arch/x86/kvm/x86.c +5 −3
  52. arch/x86/mm/fault.c +24 −2
  53. arch/x86/mm/ioremap.c +18 −0
  54. block/blk-iocost.c +1 −1
  55. block/blk-mq-sched.c +22 −0
  56. block/genhd.c +36 −0
  57. drivers/acpi/apei/ghes.c +1 −1
  58. drivers/android/binderfs.c +1 −0
  59. drivers/atm/nicstar.c +1 −1
  60. drivers/auxdisplay/Kconfig +8 −8
  61. drivers/auxdisplay/charlcd.c +1 −1
  62. drivers/auxdisplay/img-ascii-lcd.c +1 −3
  63. drivers/base/platform.c +6 −19
  64. drivers/block/virtio_blk.c +12 −5
  65. drivers/char/ipmi/ipmi_si_platform.c +2 −2
  66. drivers/clk/clk.c +2 −2
  67. drivers/clk/qcom/dispcc-sc7180.c +0 −19
  68. drivers/clk/qcom/videocc-sc7180.c +1 −1
  69. drivers/firmware/efi/efivars.c +23 −9
  70. drivers/gpu/drm/amd/amdgpu/amdgpu_debugfs.c +3 −3
  71. drivers/gpu/drm/amd/amdgpu/amdgpu_device.c +4 −0
  72. drivers/gpu/drm/amd/amdgpu/jpeg_v2_0.c +1 −1
  73. drivers/gpu/drm/amd/amdgpu/jpeg_v2_5.c +1 −1
  74. drivers/gpu/drm/amd/amdgpu/soc15.c +23 −2
  75. drivers/gpu/drm/amd/amdgpu/vcn_v1_0.c +1 −1
  76. drivers/gpu/drm/amd/amdgpu/vcn_v2_0.c +1 −1
  77. drivers/gpu/drm/amd/amdgpu/vcn_v2_5.c +1 −1
  78. drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c +15 −3
  79. drivers/gpu/drm/amd/display/dc/core/dc_link_dp.c +11 −0
  80. drivers/gpu/drm/amd/display/dc/dcn20/dcn20_init.c +0 −1
  81. drivers/gpu/drm/amd/display/dc/dcn20/dcn20_resource.c +114 −0
  82. drivers/gpu/drm/amd/display/dc/dcn21/dcn21_init.c +0 −1
  83. drivers/gpu/drm/amd/powerplay/amdgpu_smu.c +5 −2
  84. drivers/gpu/drm/amd/powerplay/navi10_ppt.c +13 −9
  85. drivers/gpu/drm/amd/powerplay/renoir_ppt.c +3 −2
  86. drivers/gpu/drm/arm/display/komeda/komeda_drv.c +2 −2
  87. drivers/gpu/drm/bochs/bochs_hw.c +2 −4
  88. drivers/gpu/drm/bridge/synopsys/dw-hdmi.c +26 −20
  89. drivers/gpu/drm/drm_dp_mst_topology.c +126 −58
  90. drivers/gpu/drm/drm_lease.c +2 −1
  91. drivers/gpu/drm/exynos/exynos5433_drm_decon.c +3 −2
  92. drivers/gpu/drm/exynos/exynos7_drm_decon.c +3 −2
  93. drivers/gpu/drm/exynos/exynos_drm_dma.c +19 −9
  94. drivers/gpu/drm/exynos/exynos_drm_drv.h +4 −2
  95. drivers/gpu/drm/exynos/exynos_drm_fimc.c +3 −2
  96. drivers/gpu/drm/exynos/exynos_drm_fimd.c +3 −2
  97. drivers/gpu/drm/exynos/exynos_drm_g2d.c +3 −2
  98. drivers/gpu/drm/exynos/exynos_drm_gsc.c +3 −2
  99. drivers/gpu/drm/exynos/exynos_drm_rotator.c +3 −2
  100. drivers/gpu/drm/exynos/exynos_drm_scaler.c +4 −2
  101. drivers/gpu/drm/exynos/exynos_mixer.c +5 −2
  102. drivers/gpu/drm/i915/gem/i915_gem_execbuffer.c +2 −1
  103. drivers/gpu/drm/i915/gt/intel_lrc.c +30 −51
  104. drivers/gpu/drm/i915/gt/intel_timeline.c +6 −2
  105. drivers/gpu/drm/i915/gt/intel_workarounds.c +22 −3
  106. drivers/gpu/drm/i915/gvt/display.c +2 −1
  107. drivers/gpu/drm/i915/gvt/opregion.c +2 −3
  108. drivers/gpu/drm/i915/gvt/vgpu.c +9 −3
  109. drivers/gpu/drm/i915/i915_request.c +20 −8
  110. drivers/gpu/drm/i915/i915_request.h +2 −0
  111. drivers/gpu/drm/i915/i915_utils.h +5 −0
  112. drivers/hid/hid-google-hammer.c +2 −0
  113. drivers/hid/hid-ids.h +2 −0
  114. drivers/hid/hid-picolcd_fb.c +2 −2
  115. drivers/hid/hid-quirks.c +1 −0
  116. drivers/hid/hid-sensor-custom.c +3 −3
  117. drivers/hwtracing/intel_th/msu.c +7 −6
  118. drivers/hwtracing/intel_th/pci.c +5 −0
  119. drivers/hwtracing/stm/p_sys-t.c +3 −3
  120. drivers/i2c/busses/i2c-designware-pcidrv.c +1 −0
  121. drivers/i2c/busses/i2c-gpio.c +1 −1
  122. drivers/i2c/busses/i2c-i801.c +12 −33
  123. drivers/i2c/i2c-core-acpi.c +9 −1
  124. drivers/iio/accel/adxl372.c +1 −0
  125. drivers/iio/accel/st_accel_i2c.c +1 −1
  126. drivers/iio/adc/at91-sama5d2_adc.c +15 −0
  127. drivers/iio/adc/stm32-dfsdm-adc.c +10 −33
  128. drivers/iio/chemical/Kconfig +2 −0
  129. drivers/iio/light/vcnl4000.c +8 −7
  130. drivers/iio/magnetometer/ak8974.c +1 −1
  131. drivers/iio/proximity/ping.c +1 −1
  132. drivers/iio/trigger/stm32-timer-trigger.c +9 −2
  133. drivers/iommu/amd_iommu.c +2 −2
  134. drivers/iommu/dma-iommu.c +8 −8
  135. drivers/iommu/dmar.c +17 −7
  136. drivers/iommu/intel-iommu-debugfs.c +35 −16
  137. drivers/iommu/intel-iommu.c +19 −9
  138. drivers/iommu/io-pgtable-arm.c +2 −2
  139. drivers/irqchip/irq-gic-v3.c +29 −1
  140. drivers/macintosh/windfarm_ad7417_sensor.c +7 −0
  141. drivers/macintosh/windfarm_fcu_controls.c +7 −0
  142. drivers/macintosh/windfarm_lm75_sensor.c +15 −1
  143. drivers/macintosh/windfarm_lm87_sensor.c +7 −0
  144. drivers/macintosh/windfarm_max6690_sensor.c +7 −0
  145. drivers/macintosh/windfarm_smu_sat.c +7 −0
  146. drivers/misc/cardreader/rts5227.c +1 −1
  147. drivers/misc/cardreader/rts5249.c +2 −0
  148. drivers/misc/cardreader/rts5260.c +1 −1
  149. drivers/misc/cardreader/rts5261.c +1 −1
  150. drivers/misc/eeprom/at24.c +2 −1
  151. drivers/mmc/core/core.c +4 −1
  152. drivers/mmc/core/mmc.c +5 −2
  153. drivers/mmc/core/mmc_ops.c +4 −2
  154. drivers/mmc/host/rtsx_pci_sdmmc.c +8 −5
  155. drivers/mmc/host/sdhci-acpi.c +82 −2
  156. drivers/mmc/host/sdhci-cadence.c +16 −2
  157. drivers/mmc/host/sdhci-msm.c +1 −1
  158. drivers/mmc/host/sdhci-of-at91.c +6 −2
  159. drivers/mmc/host/sdhci-omap.c +3 −0
  160. drivers/mmc/host/sdhci-pci-gli.c +17 −0
  161. drivers/mmc/host/sdhci-tegra.c +3 −0
  162. drivers/net/bonding/bond_alb.c +10 −10
  163. drivers/net/can/dev.c +1 −0
  164. drivers/net/dsa/mv88e6xxx/chip.c +2 −0
  165. drivers/net/dsa/mv88e6xxx/global2.c +7 −1
  166. drivers/net/dsa/sja1105/sja1105_main.c +2 −1
  167. drivers/net/ethernet/broadcom/bcmsysport.c +1 −1
  168. drivers/net/ethernet/broadcom/bnxt/bnxt.c +2 −2
  169. drivers/net/ethernet/broadcom/bnxt/bnxt_ethtool.c +11 −13
  170. drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c +27 −22
  171. drivers/net/ethernet/freescale/dpaa/dpaa_eth.c +108 −6
  172. drivers/net/ethernet/freescale/fec_main.c +3 −3
  173. drivers/net/ethernet/freescale/fman/Kconfig +28 −0
  174. drivers/net/ethernet/freescale/fman/fman.c +18 −0
  175. drivers/net/ethernet/freescale/fman/fman.h +5 −0
  176. drivers/net/ethernet/hisilicon/hns3/hclge_mbx.h +1 −0
  177. drivers/net/ethernet/hisilicon/hns3/hns3_enet.c +1 −1
  178. drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.c +42 −5
  179. drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_mbx.c +1 −0
  180. drivers/net/ethernet/hisilicon/hns3/hns3vf/hclgevf_main.c +3 −0
  181. drivers/net/ethernet/ibm/ibmvnic.c +22 −2
  182. drivers/net/ethernet/ibm/ibmvnic.h +5 −1
  183. drivers/net/ethernet/marvell/mvmdio.c +3 −3
  184. drivers/net/ethernet/mscc/ocelot.c +17 −11
  185. drivers/net/ethernet/pensando/ionic/ionic_lif.c +4 −4
  186. drivers/net/ethernet/samsung/sxgbe/sxgbe_main.c +1 −1
  187. drivers/net/ethernet/sfc/ef10.c +17 −15
  188. drivers/net/ethernet/sfc/efx.h +1 −0
  189. drivers/net/ethernet/sfc/efx_channels.c +1 −0
  190. drivers/net/ethernet/sfc/net_driver.h +0 −3
  191. drivers/net/ethernet/sfc/tx.c +38 −0
  192. drivers/net/ethernet/sfc/tx_common.c +16 −13
  193. drivers/net/ethernet/sfc/tx_common.h +6 −0
  194. drivers/net/ethernet/stmicro/stmmac/dwmac1000_core.c +2 −1
  195. drivers/net/ipvlan/ipvlan_core.c +11 −8
  196. drivers/net/ipvlan/ipvlan_main.c +1 −4
  197. drivers/net/macsec.c +20 −5
  198. drivers/net/macvlan.c +2 −0
  199. drivers/net/phy/bcm63xx.c +1 −0
  200. drivers/net/phy/phy.c +2 −1
  201. drivers/net/phy/phy_device.c +5 −1
  202. drivers/net/phy/phylink.c +7 −1
  203. drivers/net/slip/slhc.c +10 −4
  204. drivers/net/team/team.c +2 −0
  205. drivers/net/usb/r8152.c +8 −0
  206. drivers/net/veth.c +1 −1
  207. drivers/net/wireless/intel/iwlwifi/mvm/nvm.c +2 −1
  208. drivers/net/wireless/mediatek/mt76/dma.c +6 −3
  209. drivers/nvme/host/rdma.c +5 −3
  210. drivers/nvme/target/tcp.c +9 −3
  211. drivers/of/of_mdio.c +1 −0
  212. drivers/pinctrl/cirrus/pinctrl-madera-core.c +13 −0
  213. drivers/pinctrl/core.c +0 −1
  214. drivers/pinctrl/freescale/pinctrl-scu.c +2 −2
  215. drivers/pinctrl/meson/pinctrl-meson-gxl.c +2 −2
  216. drivers/pinctrl/pinctrl-falcon.c +1 −1
  217. drivers/pinctrl/qcom/pinctrl-msm.c +1 −2
  218. drivers/pinctrl/qcom/pinctrl-ssbi-gpio.c +1 −1
  219. drivers/rtc/Kconfig +1 −0
  220. drivers/s390/block/dasd.c +24 −3
  221. drivers/s390/block/dasd_eckd.c +156 −7
  222. drivers/s390/block/dasd_int.h +13 −2
  223. drivers/s390/net/qeth_core.h +2 −2
  224. drivers/s390/net/qeth_core_main.c +118 −58
  225. drivers/s390/net/qeth_core_sys.c +4 −5
  226. drivers/s390/net/qeth_l2_main.c +1 −0
  227. drivers/s390/net/qeth_l3_main.c +1 −0
  228. drivers/s390/net/qeth_l3_sys.c +4 −5
  229. drivers/scsi/ipr.c +2 −1
  230. drivers/scsi/ipr.h +1 −0
  231. drivers/scsi/ufs/ufshcd.c +14 −7
  232. drivers/slimbus/qcom-ngd-ctrl.c +3 −0
  233. drivers/staging/greybus/tools/loopback_test.c +11 −10
  234. drivers/staging/rtl8188eu/os_dep/usb_intf.c +1 −0
  235. drivers/staging/speakup/main.c +1 −1
  236. drivers/staging/wfx/hif_tx.c +8 −7
  237. drivers/staging/wfx/hif_tx.h +1 −1
  238. drivers/staging/wfx/hif_tx_mib.h +10 −5
  239. drivers/staging/wfx/sta.c +15 −10
  240. drivers/thunderbolt/switch.c +1 −1
  241. drivers/tty/tty_io.c +6 −8
  242. drivers/usb/chipidea/udc.c +4 −3
  243. drivers/usb/class/cdc-acm.c +21 −13
  244. drivers/usb/core/quirks.c +6 −0
  245. drivers/usb/host/xhci-pci.c +2 −1
  246. drivers/usb/host/xhci-plat.c +1 −0
  247. drivers/usb/host/xhci-trace.h +6 −17
  248. drivers/usb/serial/option.c +2 −0
  249. drivers/usb/serial/pl2303.c +1 −0
  250. drivers/usb/serial/pl2303.h +1 −0
  251. drivers/usb/typec/ucsi/displayport.c +11 −1
  252. drivers/virtio/virtio_balloon.c +1 −1
  253. drivers/virtio/virtio_ring.c +2 −2
  254. drivers/watchdog/iTCO_vendor.h +2 −0
  255. drivers/watchdog/iTCO_vendor_support.c +9 −7
  256. drivers/watchdog/iTCO_wdt.c +16 −12
  257. fs/afs/addr_list.c +1 −1
  258. fs/afs/internal.h +1 −1
  259. fs/btrfs/block-group.c +2 −2
  260. fs/btrfs/inode.c +4 −0
  261. fs/cifs/dir.c +0 −1
  262. fs/cifs/file.c +2 −1
  263. fs/cifs/inode.c +1 −1
  264. fs/cifs/smb2ops.c +3 −1
  265. fs/crypto/keysetup.c +9 −0
  266. fs/eventpoll.c +4 −4
  267. fs/file.c +6 −1
  268. fs/fuse/dev.c +3 −3
  269. fs/fuse/fuse_i.h +2 −0
  270. fs/gfs2/inode.c +1 −1
  271. fs/inode.c +1 −0
  272. fs/io_uring.c +29 −18
  273. fs/locks.c +48 −6
  274. fs/nfs/client.c +1 −0
  275. fs/nfs/fs_context.c +9 −0
  276. fs/nfs/fscache.c +2 −0
  277. fs/nfs/namespace.c +1 −1
  278. fs/nfs/nfs4client.c +0 −1
  279. fs/open.c +0 −3
  280. fs/overlayfs/Kconfig +1 −0
  281. fs/overlayfs/file.c +6 −0
  282. fs/overlayfs/overlayfs.h +6 −1
  283. fs/overlayfs/super.c +8 −1
  284. fs/overlayfs/util.c +2 −2
  285. include/crypto/curve25519.h +4 −2
  286. include/drm/drm_dp_mst_helper.h +2 −2
  287. include/dt-bindings/clock/imx8mn-clock.h +2 −2
  288. include/linux/cgroup.h +1 −0
  289. include/linux/dmar.h +9 −5
  290. include/linux/file.h +1 −0
  291. include/linux/fs.h +1 −0
  292. include/linux/futex.h +10 −7
  293. include/linux/genhd.h +1 −12
  294. include/linux/inet_diag.h +12 −6
  295. include/linux/intel-iommu.h +2 −0
  296. include/linux/mmc/host.h +1 −0
  297. include/linux/of_clk.h +4 −4
  298. include/linux/page-flags.h +1 −1
  299. include/linux/phy.h +3 −0
  300. include/linux/platform_device.h +1 −1
  301. include/linux/rhashtable.h +1 −1
  302. include/linux/socket.h +2 −1
  303. include/linux/vmalloc.h +3 −2
  304. include/linux/workqueue.h +16 −0
  305. include/net/fib_rules.h +1 −0
  306. include/soc/mscc/ocelot_dev.h +1 −1
  307. include/uapi/linux/in.h +2 −0
  308. init/Kconfig +1 −2
  309. kernel/cgroup/cgroup-v1.c +2 −1
  310. kernel/cgroup/cgroup.c +30 −13
  311. kernel/futex.c +55 −38
  312. kernel/notifier.c +1 −1
  313. kernel/pid.c +10 −0
  314. kernel/sys.c +2 −0
  315. kernel/trace/ftrace.c +2 −0
  316. kernel/workqueue.c +8 −6
  317. mm/madvise.c +9 −3
  318. mm/memcontrol.c +68 −49
  319. mm/mmu_notifier.c +18 −9
  320. mm/nommu.c +7 −3
  321. mm/slub.c +30 −11
  322. mm/sparse.c +6 −2
  323. mm/vmalloc.c +7 −4
  324. net/batman-adv/bat_iv_ogm.c +4 −0
  325. net/caif/caif_dev.c +2 −1
  326. net/core/devlink.c +21 −12
  327. net/core/netclassid_cgroup.c +37 −10
  328. net/core/sock.c +4 −1
  329. net/dsa/dsa_priv.h +2 −0
  330. net/dsa/port.c +35 −9
  331. net/dsa/slave.c +2 −6
  332. net/ieee802154/nl_policy.c +6 −0
  333. net/ipv4/gre_demux.c +10 −2
  334. net/ipv4/inet_connection_sock.c +20 −0
  335. net/ipv4/inet_diag.c +20 −24
  336. net/ipv4/raw_diag.c +3 −2
  337. net/ipv4/udp_diag.c +3 −2
  338. net/ipv6/addrconf.c +40 −11
  339. net/ipv6/seg6_iptunnel.c +1 −1
  340. net/ipv6/seg6_local.c +1 −1
  341. net/mac80211/mesh_hwmp.c +2 −1
  342. net/mptcp/options.c +17 −2
  343. net/netfilter/nf_conntrack_standalone.c +1 −1
  344. net/netfilter/nf_synproxy_core.c +1 −1
  345. net/netfilter/nf_tables_api.c +14 −8
  346. net/netfilter/nfnetlink_cthelper.c +2 −0
  347. net/netfilter/nft_chain_nat.c +1 −0
  348. net/netfilter/nft_payload.c +1 −0
  349. net/netfilter/nft_tunnel.c +2 −0
  350. net/netfilter/x_tables.c +3 −3
  351. net/netfilter/xt_recent.c +1 −1
  352. net/netlink/af_netlink.c +1 −1
  353. net/nfc/hci/core.c +16 −3
  354. net/nfc/netlink.c +4 −0
  355. net/openvswitch/datapath.c +1 −0
  356. net/packet/af_packet.c +7 −6
  357. net/sched/sch_fq.c +1 −0
  358. net/sched/sch_taprio.c +10 −3
  359. net/sctp/diag.c +2 −6
  360. net/smc/smc_ib.c +1 −0
  361. net/socket.c +5 −3
  362. net/tipc/netlink.c +1 −0
  363. net/wireless/nl80211.c +5 −0
  364. scripts/Kconfig.include +7 −0
  365. scripts/Makefile.extrawarn +1 −0
  366. scripts/export_report.pl +1 −1
  367. scripts/kallsyms.c +4 −4
  368. scripts/mod/modpost.c +14 −13
  369. sound/core/oss/pcm_plugin.c +10 −2
  370. sound/core/seq/oss/seq_oss_midi.c +1 −0
  371. sound/core/seq/seq_virmidi.c +1 −0
  372. sound/pci/hda/patch_realtek.c +25 −0
  373. sound/usb/line6/driver.c +1 −1
  374. sound/usb/line6/midibuf.c +1 −1
  375. tools/include/uapi/asm/errno.h +7 −7
  376. tools/perf/arch/arm64/util/arm-spe.c +10 −10
  377. tools/perf/arch/arm64/util/perf_regs.c +1 −1
  378. tools/perf/arch/powerpc/util/perf_regs.c +2 −2
  379. tools/perf/arch/x86/util/auxtrace.c +7 −7
  380. tools/perf/arch/x86/util/event.c +6 −6
  381. tools/perf/arch/x86/util/header.c +2 −2
  382. tools/perf/arch/x86/util/intel-bts.c +12 −12
  383. tools/perf/arch/x86/util/intel-pt.c +15 −15
  384. tools/perf/arch/x86/util/machine.c +3 −3
  385. tools/perf/arch/x86/util/perf_regs.c +4 −4
  386. tools/perf/arch/x86/util/pmu.c +3 −3
  387. tools/perf/bench/bench.h +4 −0
  388. tools/perf/bench/epoll-ctl.c +4 −4
  389. tools/perf/bench/epoll-wait.c +6 −6
  390. tools/perf/bench/futex-hash.c +7 −6
  391. tools/perf/bench/futex-lock-pi.c +6 −6
  392. tools/perf/bench/futex-requeue.c +1 −0
  393. tools/perf/bench/futex-wake-parallel.c +1 −0
  394. tools/perf/bench/futex-wake.c +3 −2
  395. tools/perf/builtin-diff.c +2 −1
  396. tools/perf/builtin-top.c +3 −1
  397. tools/perf/pmu-events/jevents.c +9 −6
  398. tools/perf/tests/bp_account.c +1 −1
  399. tools/perf/util/block-info.c +2 −1
  400. tools/perf/util/env.c +2 −2
  401. tools/perf/util/map.c +1 −1
  402. tools/perf/util/parse-events.c +2 −8
  403. tools/perf/util/symbol.c +6 −7
  404. tools/power/cpupower/utils/idle_monitor/amd_fam14h_idle.c +1 −1
  405. tools/power/cpupower/utils/idle_monitor/cpuidle_sysfs.c +1 −1
  406. tools/power/cpupower/utils/idle_monitor/cpupower-monitor.c +2 −0
  407. tools/power/cpupower/utils/idle_monitor/cpupower-monitor.h +1 −1
  408. tools/power/x86/turbostat/Makefile +1 −1
  409. tools/power/x86/turbostat/turbostat.c +113 −29
  410. tools/testing/ktest/ktest.pl +8 −8
  411. tools/testing/ktest/sample.conf +11 −11
  412. tools/testing/selftests/net/fib_tests.sh +31 −3
  413. tools/testing/selftests/tc-testing/config +1 −0
  414. usr/Kconfig +11 −11
.clang-format+21−4
@@ -86,6 +86,8 @@ ForEachMacros: · 85 unmodified lines
86 - 'bio_for_each_segment_all'86 - 'bio_for_each_segment_all'
87 - 'bio_list_for_each'87 - 'bio_list_for_each'
88 - 'bip_for_each_vec'88 - 'bip_for_each_vec'
89 - 'bitmap_for_each_clear_region'
90 - 'bitmap_for_each_set_region'
89 - 'blkg_for_each_descendant_post'91 - 'blkg_for_each_descendant_post'
90 - 'blkg_for_each_descendant_pre'92 - 'blkg_for_each_descendant_pre'
91 - 'blk_queue_for_each_rl'93 - 'blk_queue_for_each_rl'
@@ -115,6 +117,7 @@ ForEachMacros: · 23 unmodified lines
115 - 'drm_client_for_each_connector_iter'117 - 'drm_client_for_each_connector_iter'
116 - 'drm_client_for_each_modeset'118 - 'drm_client_for_each_modeset'
117 - 'drm_connector_for_each_possible_encoder'119 - 'drm_connector_for_each_possible_encoder'
120 - 'drm_for_each_bridge_in_chain'
118 - 'drm_for_each_connector_iter'121 - 'drm_for_each_connector_iter'
119 - 'drm_for_each_crtc'122 - 'drm_for_each_crtc'
120 - 'drm_for_each_encoder'123 - 'drm_for_each_encoder'
@@ -136,9 +139,10 @@ ForEachMacros: · 15 unmodified lines
136 - 'for_each_bio'139 - 'for_each_bio'
137 - 'for_each_board_func_rsrc'140 - 'for_each_board_func_rsrc'
138 - 'for_each_bvec'141 - 'for_each_bvec'
142 - 'for_each_card_auxs'
143 - 'for_each_card_auxs_safe'
139 - 'for_each_card_components'144 - 'for_each_card_components'
140 - 'for_each_card_links'145 - 'for_each_card_pre_auxs'
141 - 'for_each_card_links_safe'
142 - 'for_each_card_prelinks'146 - 'for_each_card_prelinks'
143 - 'for_each_card_rtds'147 - 'for_each_card_rtds'
144 - 'for_each_card_rtds_safe'148 - 'for_each_card_rtds_safe'
@@ -166,6 +170,7 @@ ForEachMacros: · 21 unmodified lines
166 - 'for_each_dpcm_fe'170 - 'for_each_dpcm_fe'
167 - 'for_each_drhd_unit'171 - 'for_each_drhd_unit'
168 - 'for_each_dss_dev'172 - 'for_each_dss_dev'
173 - 'for_each_efi_handle'
169 - 'for_each_efi_memory_desc'174 - 'for_each_efi_memory_desc'
170 - 'for_each_efi_memory_desc_in_map'175 - 'for_each_efi_memory_desc_in_map'
171 - 'for_each_element'176 - 'for_each_element'
@@ -190,6 +195,7 @@ ForEachMacros: · 18 unmodified lines
190 - 'for_each_lru'195 - 'for_each_lru'
191 - 'for_each_matching_node'196 - 'for_each_matching_node'
192 - 'for_each_matching_node_and_match'197 - 'for_each_matching_node_and_match'
198 - 'for_each_member'
193 - 'for_each_memblock'199 - 'for_each_memblock'
194 - 'for_each_memblock_type'200 - 'for_each_memblock_type'
195 - 'for_each_memcg_cache_index'201 - 'for_each_memcg_cache_index'
@@ -200,9 +206,11 @@ ForEachMacros: · 4 unmodified lines
200 - 'for_each_msi_entry'206 - 'for_each_msi_entry'
201 - 'for_each_msi_entry_safe'207 - 'for_each_msi_entry_safe'
202 - 'for_each_net'208 - 'for_each_net'
209 - 'for_each_net_continue_reverse'
203 - 'for_each_netdev'210 - 'for_each_netdev'
204 - 'for_each_netdev_continue'211 - 'for_each_netdev_continue'
205 - 'for_each_netdev_continue_rcu'212 - 'for_each_netdev_continue_rcu'
213 - 'for_each_netdev_continue_reverse'
206 - 'for_each_netdev_feature'214 - 'for_each_netdev_feature'
207 - 'for_each_netdev_in_bond_rcu'215 - 'for_each_netdev_in_bond_rcu'
208 - 'for_each_netdev_rcu'216 - 'for_each_netdev_rcu'
@@ -254,10 +262,10 @@ ForEachMacros: · 45 unmodified lines
254 - 'for_each_reserved_mem_region'262 - 'for_each_reserved_mem_region'
255 - 'for_each_rtd_codec_dai'263 - 'for_each_rtd_codec_dai'
256 - 'for_each_rtd_codec_dai_rollback'264 - 'for_each_rtd_codec_dai_rollback'
257 - 'for_each_rtdcom'265 - 'for_each_rtd_components'
258 - 'for_each_rtdcom_safe'
259 - 'for_each_set_bit'266 - 'for_each_set_bit'
260 - 'for_each_set_bit_from'267 - 'for_each_set_bit_from'
268 - 'for_each_set_clump8'
261 - 'for_each_sg'269 - 'for_each_sg'
262 - 'for_each_sg_dma_page'270 - 'for_each_sg_dma_page'
263 - 'for_each_sg_page'271 - 'for_each_sg_page'
@@ -267,6 +275,7 @@ ForEachMacros: · 3 unmodified lines
267 - 'for_each_subelement_id'275 - 'for_each_subelement_id'
268 - '__for_each_thread'276 - '__for_each_thread'
269 - 'for_each_thread'277 - 'for_each_thread'
278 - 'for_each_wakeup_source'
270 - 'for_each_zone'279 - 'for_each_zone'
271 - 'for_each_zone_zonelist'280 - 'for_each_zone_zonelist'
272 - 'for_each_zone_zonelist_nodemask'281 - 'for_each_zone_zonelist_nodemask'
@@ -330,6 +339,7 @@ ForEachMacros: · 57 unmodified lines
330 - 'list_for_each'339 - 'list_for_each'
331 - 'list_for_each_codec'340 - 'list_for_each_codec'
332 - 'list_for_each_codec_safe'341 - 'list_for_each_codec_safe'
342 - 'list_for_each_continue'
333 - 'list_for_each_entry'343 - 'list_for_each_entry'
334 - 'list_for_each_entry_continue'344 - 'list_for_each_entry_continue'
335 - 'list_for_each_entry_continue_rcu'345 - 'list_for_each_entry_continue_rcu'
@@ -351,6 +361,7 @@ ForEachMacros: · 15 unmodified lines
351 - 'llist_for_each_entry'361 - 'llist_for_each_entry'
352 - 'llist_for_each_entry_safe'362 - 'llist_for_each_entry_safe'
353 - 'llist_for_each_safe'363 - 'llist_for_each_safe'
364 - 'mci_for_each_dimm'
354 - 'media_device_for_each_entity'365 - 'media_device_for_each_entity'
355 - 'media_device_for_each_intf'366 - 'media_device_for_each_intf'
356 - 'media_device_for_each_link'367 - 'media_device_for_each_link'
@@ -444,10 +455,16 @@ ForEachMacros: · 87 unmodified lines
444 - 'virtio_device_for_each_vq'455 - 'virtio_device_for_each_vq'
445 - 'xa_for_each'456 - 'xa_for_each'
446 - 'xa_for_each_marked'457 - 'xa_for_each_marked'
458 - 'xa_for_each_range'
447 - 'xa_for_each_start'459 - 'xa_for_each_start'
448 - 'xas_for_each'460 - 'xas_for_each'
449 - 'xas_for_each_conflict'461 - 'xas_for_each_conflict'
450 - 'xas_for_each_marked'462 - 'xas_for_each_marked'
463 - 'xbc_array_for_each_value'
464 - 'xbc_for_each_key_value'
465 - 'xbc_node_for_each_array_value'
466 - 'xbc_node_for_each_child'
467 - 'xbc_node_for_each_key_value'
451 - 'zorro_for_each_dev'468 - 'zorro_for_each_dev'
452 469
453#IncludeBlocks: Preserve # Unknown to clang-format-5.0470#IncludeBlocks: Preserve # Unknown to clang-format-5.0
Documentation/arm64/silicon-errata.rst+2−0
@@ -110,6 +110,8 @@ stable kernels. · 109 unmodified lines
110+----------------+-----------------+-----------------+-----------------------------+110+----------------+-----------------+-----------------+-----------------------------+
111| Cavium | ThunderX GICv3 | #23154 | CAVIUM_ERRATUM_23154 |111| Cavium | ThunderX GICv3 | #23154 | CAVIUM_ERRATUM_23154 |
112+----------------+-----------------+-----------------+-----------------------------+112+----------------+-----------------+-----------------+-----------------------------+
113| Cavium | ThunderX GICv3 | #38539 | N/A |
114+----------------+-----------------+-----------------+-----------------------------+
113| Cavium | ThunderX Core | #27456 | CAVIUM_ERRATUM_27456 |115| Cavium | ThunderX Core | #27456 | CAVIUM_ERRATUM_27456 |
114+----------------+-----------------+-----------------+-----------------------------+116+----------------+-----------------+-----------------+-----------------------------+
115| Cavium | ThunderX Core | #30115 | CAVIUM_ERRATUM_30115 |117| Cavium | ThunderX Core | #30115 | CAVIUM_ERRATUM_30115 |
Documentation/devicetree/bindings/net/fsl-fman.txt+7−0
@@ -110,6 +110,13 @@ PROPERTIES · 109 unmodified lines
110 Usage: required110 Usage: required
111 Definition: See soc/fsl/qman.txt and soc/fsl/bman.txt111 Definition: See soc/fsl/qman.txt and soc/fsl/bman.txt
112 112
113- fsl,erratum-a050385
114 Usage: optional
115 Value type: boolean
116 Definition: A boolean property. Indicates the presence of the
117 erratum A050385 which indicates that DMA transactions that are
118 split can result in a FMan lock.
119
113=============================================================================120=============================================================================
114FMan MURAM Node121FMan MURAM Node
115 122
Documentation/filesystems/porting.rst+8−0
@@ -850,3 +850,11 @@ business doing so. · 849 unmodified lines
850d_alloc_pseudo() is internal-only; uses outside of alloc_file_pseudo() are850d_alloc_pseudo() is internal-only; uses outside of alloc_file_pseudo() are
851very suspect (and won't work in modules). Such uses are very likely to851very suspect (and won't work in modules). Such uses are very likely to
852be misspelled d_alloc_anon().852be misspelled d_alloc_anon().
853
854---
855
856**mandatory**
857
858[should've been added in 2016] stale comment in finish_open() nonwithstanding,
859failure exits in ->atomic_open() instances should *NOT* fput() the file,
860no matter what. Everything is handled by the caller.
Documentation/kbuild/kbuild.rst+1−1
@@ -237,7 +237,7 @@ This is solely useful to speed up test compiles. · 236 unmodified lines
237KBUILD_EXTRA_SYMBOLS237KBUILD_EXTRA_SYMBOLS
238--------------------238--------------------
239For modules that use symbols from other modules.239For modules that use symbols from other modules.
240See more details in modules.txt.240See more details in modules.rst.
241 241
242ALLSOURCE_ARCHS242ALLSOURCE_ARCHS
243---------------243---------------
Documentation/kbuild/kconfig-macro-language.rst+1−1
@@ -44,7 +44,7 @@ intermediate:: · 43 unmodified lines
44 def_bool y44 def_bool y
45 45
46Then, Kconfig moves onto the evaluation stage to resolve inter-symbol46Then, Kconfig moves onto the evaluation stage to resolve inter-symbol
47dependency as explained in kconfig-language.txt.47dependency as explained in kconfig-language.rst.
48 48
49 49
50Variables50Variables
Documentation/kbuild/makefiles.rst+3−3
@@ -924,7 +924,7 @@ When kbuild executes, the following steps are followed (roughly): · 923 unmodified lines
924 $(KBUILD_AFLAGS_MODULE) is used to add arch-specific options that924 $(KBUILD_AFLAGS_MODULE) is used to add arch-specific options that
925 are used for assembler.925 are used for assembler.
926 926
927 From commandline AFLAGS_MODULE shall be used (see kbuild.txt).927 From commandline AFLAGS_MODULE shall be used (see kbuild.rst).
928 928
929 KBUILD_CFLAGS_KERNEL929 KBUILD_CFLAGS_KERNEL
930 $(CC) options specific for built-in930 $(CC) options specific for built-in
@@ -937,7 +937,7 @@ When kbuild executes, the following steps are followed (roughly): · 6 unmodified lines
937 937
938 $(KBUILD_CFLAGS_MODULE) is used to add arch-specific options that938 $(KBUILD_CFLAGS_MODULE) is used to add arch-specific options that
939 are used for $(CC).939 are used for $(CC).
940 From commandline CFLAGS_MODULE shall be used (see kbuild.txt).940 From commandline CFLAGS_MODULE shall be used (see kbuild.rst).
941 941
942 KBUILD_LDFLAGS_MODULE942 KBUILD_LDFLAGS_MODULE
943 Options for $(LD) when linking modules943 Options for $(LD) when linking modules
@@ -945,7 +945,7 @@ When kbuild executes, the following steps are followed (roughly): · 1 unmodified line
945 $(KBUILD_LDFLAGS_MODULE) is used to add arch-specific options945 $(KBUILD_LDFLAGS_MODULE) is used to add arch-specific options
946 used when linking modules. This is often a linker script.946 used when linking modules. This is often a linker script.
947 947
948 From commandline LDFLAGS_MODULE shall be used (see kbuild.txt).948 From commandline LDFLAGS_MODULE shall be used (see kbuild.rst).
949 949
950 KBUILD_LDS950 KBUILD_LDS
951 951
Documentation/kbuild/modules.rst+2−2
@@ -470,9 +470,9 @@ build. · 469 unmodified lines
470 470
471 The syntax of the Module.symvers file is::471 The syntax of the Module.symvers file is::
472 472
473 <CRC> <Symbol> <Namespace> <Module> <Export Type>473 <CRC> <Symbol> <Module> <Export Type> <Namespace>
474 474
475 0xe1cc2a05 usb_stor_suspend USB_STORAGE drivers/usb/storage/usb-storage EXPORT_SYMBOL_GPL475 0xe1cc2a05 usb_stor_suspend drivers/usb/storage/usb-storage EXPORT_SYMBOL_GPL USB_STORAGE
476 476
477 The fields are separated by tabs and values may be empty (e.g.477 The fields are separated by tabs and values may be empty (e.g.
478 if no namespace is defined for an exported symbol).478 if no namespace is defined for an exported symbol).
Documentation/networking/devlink/devlink-region.rst+0−3
@@ -40,9 +40,6 @@ example usage · 39 unmodified lines
40 # Delete a snapshot using:40 # Delete a snapshot using:
41 $ devlink region del pci/0000:00:05.0/cr-space snapshot 141 $ devlink region del pci/0000:00:05.0/cr-space snapshot 1
42 42
43 # Trigger (request) a snapshot be taken:
44 $ devlink region trigger pci/0000:00:05.0/cr-space
45
46 # Dump a snapshot:43 # Dump a snapshot:
47 $ devlink region dump pci/0000:00:05.0/fw-health snapshot 144 $ devlink region dump pci/0000:00:05.0/fw-health snapshot 1
48 0000000000000000 0014 95dc 0014 9514 0035 1670 0034 db3045 0000000000000000 0014 95dc 0014 9514 0035 1670 0034 db30
Documentation/networking/net_failover.rst+3−3
@@ -8,9 +8,9 @@ Overview · 7 unmodified lines
8========8========
9 9
10The net_failover driver provides an automated failover mechanism via APIs10The net_failover driver provides an automated failover mechanism via APIs
11to create and destroy a failover master netdev and mananges a primary and11to create and destroy a failover master netdev and manages a primary and
12standby slave netdevs that get registered via the generic failover12standby slave netdevs that get registered via the generic failover
13infrastructrure.13infrastructure.
14 14
15The failover netdev acts a master device and controls 2 slave devices. The15The failover netdev acts a master device and controls 2 slave devices. The
16original paravirtual interface is registered as 'standby' slave netdev and16original paravirtual interface is registered as 'standby' slave netdev and
@@ -29,7 +29,7 @@ virtio-net accelerated datapath: STANDBY mode · 12 unmodified lines
29=============================================29=============================================
30 30
31net_failover enables hypervisor controlled accelerated datapath to virtio-net31net_failover enables hypervisor controlled accelerated datapath to virtio-net
32enabled VMs in a transparent manner with no/minimal guest userspace chanages.32enabled VMs in a transparent manner with no/minimal guest userspace changes.
33 33
34To support this, the hypervisor needs to enable VIRTIO_NET_F_STANDBY34To support this, the hypervisor needs to enable VIRTIO_NET_F_STANDBY
35feature on the virtio-net interface and assign the same MAC address to both35feature on the virtio-net interface and assign the same MAC address to both
Documentation/networking/rds.txt+1−1
@@ -159,7 +159,7 @@ Socket Interface · 158 unmodified lines
159 set SO_RDS_TRANSPORT on a socket for which the transport has159 set SO_RDS_TRANSPORT on a socket for which the transport has
160 been previously attached explicitly (by SO_RDS_TRANSPORT) or160 been previously attached explicitly (by SO_RDS_TRANSPORT) or
161 implicitly (via bind(2)) will return an error of EOPNOTSUPP.161 implicitly (via bind(2)) will return an error of EOPNOTSUPP.
162 An attempt to set SO_RDS_TRANSPPORT to RDS_TRANS_NONE will162 An attempt to set SO_RDS_TRANSPORT to RDS_TRANS_NONE will
163 always return EINVAL.163 always return EINVAL.
164 164
165RDMA for RDS165RDMA for RDS
MAINTAINERS+2−4
@@ -4076,7 +4076,6 @@ F: drivers/scsi/snic/ · 4075 unmodified lines
4076CISCO VIC ETHERNET NIC DRIVER4076CISCO VIC ETHERNET NIC DRIVER
4077M: Christian Benvenuti <benve@cisco.com>4077M: Christian Benvenuti <benve@cisco.com>
4078M: Govindarajulu Varadarajan <_govind@gmx.com>4078M: Govindarajulu Varadarajan <_govind@gmx.com>
4079M: Parvi Kaustubhi <pkaustub@cisco.com>
4080S: Supported4079S: Supported
4081F: drivers/net/ethernet/cisco/enic/4080F: drivers/net/ethernet/cisco/enic/
4082 4081
@@ -4575,7 +4574,7 @@ F: drivers/infiniband/hw/cxgb4/ · 492 unmodified lines
4575F: include/uapi/rdma/cxgb4-abi.h4574F: include/uapi/rdma/cxgb4-abi.h
4576 4575
4577CXGB4VF ETHERNET DRIVER (CXGB4VF)4576CXGB4VF ETHERNET DRIVER (CXGB4VF)
4578M: Casey Leedom <leedom@chelsio.com>4577M: Vishal Kulkarni <vishal@gmail.com>
4579L: netdev@vger.kernel.org4578L: netdev@vger.kernel.org
4580W: http://www.chelsio.com4579W: http://www.chelsio.com
4581S: Supported4580S: Supported
@@ -6201,7 +6200,6 @@ S: Supported · 1619 unmodified lines
6201F: drivers/scsi/be2iscsi/6200F: drivers/scsi/be2iscsi/
6202 6201
6203Emulex 10Gbps NIC BE2, BE3-R, Lancer, Skyhawk-R DRIVER (be2net)6202Emulex 10Gbps NIC BE2, BE3-R, Lancer, Skyhawk-R DRIVER (be2net)
6204M: Sathya Perla <sathya.perla@broadcom.com>
6205M: Ajit Khaparde <ajit.khaparde@broadcom.com>6203M: Ajit Khaparde <ajit.khaparde@broadcom.com>
6206M: Sriharsha Basavapatna <sriharsha.basavapatna@broadcom.com>6204M: Sriharsha Basavapatna <sriharsha.basavapatna@broadcom.com>
6207M: Somnath Kotur <somnath.kotur@broadcom.com>6205M: Somnath Kotur <somnath.kotur@broadcom.com>
@@ -11132,7 +11130,7 @@ M: Thomas Bogendoerfer <tsbogend@alpha.franken.de> · 4924 unmodified lines
11132L: linux-mips@vger.kernel.org11130L: linux-mips@vger.kernel.org
11133W: http://www.linux-mips.org/11131W: http://www.linux-mips.org/
11134T: git git://git.kernel.org/pub/scm/linux/kernel/git/mips/linux.git11132T: git git://git.kernel.org/pub/scm/linux/kernel/git/mips/linux.git
11135Q: http://patchwork.linux-mips.org/project/linux-mips/list/11133Q: https://patchwork.kernel.org/project/linux-mips/list/
11136S: Maintained11134S: Maintained
11137F: Documentation/devicetree/bindings/mips/11135F: Documentation/devicetree/bindings/mips/
11138F: Documentation/mips/11136F: Documentation/mips/
Makefile+2−2
@@ -2,7 +2,7 @@ · 1 unmodified line
2VERSION = 52VERSION = 5
3PATCHLEVEL = 63PATCHLEVEL = 6
4SUBLEVEL = 04SUBLEVEL = 0
5EXTRAVERSION = -rc55EXTRAVERSION = -rc7
6NAME = Kleptomaniac Octopus6NAME = Kleptomaniac Octopus
7 7
8# *DOCUMENTATION*8# *DOCUMENTATION*
@@ -1804,7 +1804,7 @@ existing-targets := $(wildcard $(sort $(targets))) · 1795 unmodified lines
1804 1804
1805-include $(foreach f,$(existing-targets),$(dir $(f)).$(notdir $(f)).cmd)1805-include $(foreach f,$(existing-targets),$(dir $(f)).$(notdir $(f)).cmd)
1806 1806
1807endif # config-targets1807endif # config-build
1808endif # mixed-build1808endif # mixed-build
1809endif # need-sub-make1809endif # need-sub-make
1810 1810
arch/arc/Kconfig+2−2
@@ -154,7 +154,7 @@ config ARC_CPU_HS · 153 unmodified lines
154 help154 help
155 Support for ARC HS38x Cores based on ARCv2 ISA155 Support for ARC HS38x Cores based on ARCv2 ISA
156 The notable features are:156 The notable features are:
157 - SMP configurations of upto 4 core with coherency157 - SMP configurations of up to 4 cores with coherency
158 - Optional L2 Cache and IO-Coherency158 - Optional L2 Cache and IO-Coherency
159 - Revised Interrupt Architecture (multiple priorites, reg banks,159 - Revised Interrupt Architecture (multiple priorites, reg banks,
160 auto stack switch, auto regfile save/restore)160 auto stack switch, auto regfile save/restore)
@@ -192,7 +192,7 @@ config ARC_SMP_HALT_ON_RESET · 31 unmodified lines
192 help192 help
193 In SMP configuration cores can be configured as Halt-on-reset193 In SMP configuration cores can be configured as Halt-on-reset
194 or they could all start at same time. For Halt-on-reset, non194 or they could all start at same time. For Halt-on-reset, non
195 masters are parked until Master kicks them so they can start of195 masters are parked until Master kicks them so they can start off
196 at designated entry point. For other case, all jump to common196 at designated entry point. For other case, all jump to common
197 entry point and spin wait for Master's signal.197 entry point and spin wait for Master's signal.
198 198
arch/arc/configs/nps_defconfig+0−2
@@ -21,8 +21,6 @@ CONFIG_MODULES=y · 20 unmodified lines
21CONFIG_MODULE_FORCE_LOAD=y21CONFIG_MODULE_FORCE_LOAD=y
22CONFIG_MODULE_UNLOAD=y22CONFIG_MODULE_UNLOAD=y
23# CONFIG_BLK_DEV_BSG is not set23# CONFIG_BLK_DEV_BSG is not set
24# CONFIG_IOSCHED_DEADLINE is not set
25# CONFIG_IOSCHED_CFQ is not set
26CONFIG_ARC_PLAT_EZNPS=y24CONFIG_ARC_PLAT_EZNPS=y
27CONFIG_SMP=y25CONFIG_SMP=y
28CONFIG_NR_CPUS=409626CONFIG_NR_CPUS=4096
arch/arc/configs/nsimosci_defconfig+0−2
@@ -20,8 +20,6 @@ CONFIG_ISA_ARCOMPACT=y · 19 unmodified lines
20CONFIG_KPROBES=y20CONFIG_KPROBES=y
21CONFIG_MODULES=y21CONFIG_MODULES=y
22# CONFIG_BLK_DEV_BSG is not set22# CONFIG_BLK_DEV_BSG is not set
23# CONFIG_IOSCHED_DEADLINE is not set
24# CONFIG_IOSCHED_CFQ is not set
25CONFIG_ARC_BUILTIN_DTB_NAME="nsimosci"23CONFIG_ARC_BUILTIN_DTB_NAME="nsimosci"
26# CONFIG_COMPACTION is not set24# CONFIG_COMPACTION is not set
27CONFIG_NET=y25CONFIG_NET=y
arch/arc/configs/nsimosci_hs_defconfig+0−2
@@ -19,8 +19,6 @@ CONFIG_PERF_EVENTS=y · 18 unmodified lines
19CONFIG_KPROBES=y19CONFIG_KPROBES=y
20CONFIG_MODULES=y20CONFIG_MODULES=y
21# CONFIG_BLK_DEV_BSG is not set21# CONFIG_BLK_DEV_BSG is not set
22# CONFIG_IOSCHED_DEADLINE is not set
23# CONFIG_IOSCHED_CFQ is not set
24CONFIG_ISA_ARCV2=y22CONFIG_ISA_ARCV2=y
25CONFIG_ARC_BUILTIN_DTB_NAME="nsimosci_hs"23CONFIG_ARC_BUILTIN_DTB_NAME="nsimosci_hs"
26# CONFIG_COMPACTION is not set24# CONFIG_COMPACTION is not set
arch/arc/configs/nsimosci_hs_smp_defconfig+0−2
@@ -14,8 +14,6 @@ CONFIG_PERF_EVENTS=y · 13 unmodified lines
14CONFIG_KPROBES=y14CONFIG_KPROBES=y
15CONFIG_MODULES=y15CONFIG_MODULES=y
16# CONFIG_BLK_DEV_BSG is not set16# CONFIG_BLK_DEV_BSG is not set
17# CONFIG_IOSCHED_DEADLINE is not set
18# CONFIG_IOSCHED_CFQ is not set
19CONFIG_ISA_ARCV2=y17CONFIG_ISA_ARCV2=y
20CONFIG_SMP=y18CONFIG_SMP=y
21# CONFIG_ARC_TIMERS_64BIT is not set19# CONFIG_ARC_TIMERS_64BIT is not set
arch/arc/include/asm/fpu.h+2−0
@@ -43,6 +43,8 @@ extern void fpu_init_task(struct pt_regs *regs); · 42 unmodified lines
43 43
44#endif /* !CONFIG_ISA_ARCOMPACT */44#endif /* !CONFIG_ISA_ARCOMPACT */
45 45
46struct task_struct;
47
46extern void fpu_save_restore(struct task_struct *p, struct task_struct *n);48extern void fpu_save_restore(struct task_struct *p, struct task_struct *n);
47 49
48#else /* !CONFIG_ARC_FPU_SAVE_RESTORE */50#else /* !CONFIG_ARC_FPU_SAVE_RESTORE */
arch/arc/include/asm/linkage.h+2−0
@@ -29,6 +29,8 @@ · 28 unmodified lines
29.endm29.endm
30 30
31#define ASM_NL ` /* use '`' to mark new line in macro */31#define ASM_NL ` /* use '`' to mark new line in macro */
32#define __ALIGN .align 4
33#define __ALIGN_STR __stringify(__ALIGN)
32 34
33/* annotation for data we want in DCCM - if enabled in .config */35/* annotation for data we want in DCCM - if enabled in .config */
34.macro ARCFP_DATA nm36.macro ARCFP_DATA nm
arch/arc/kernel/setup.c+1−1
@@ -8,11 +8,11 @@ · 7 unmodified lines
8#include <linux/delay.h>8#include <linux/delay.h>
9#include <linux/root_dev.h>9#include <linux/root_dev.h>
10#include <linux/clk.h>10#include <linux/clk.h>
11#include <linux/clk-provider.h>
12#include <linux/clocksource.h>11#include <linux/clocksource.h>
13#include <linux/console.h>12#include <linux/console.h>
14#include <linux/module.h>13#include <linux/module.h>
15#include <linux/cpu.h>14#include <linux/cpu.h>
15#include <linux/of_clk.h>
16#include <linux/of_fdt.h>16#include <linux/of_fdt.h>
17#include <linux/of.h>17#include <linux/of.h>
18#include <linux/cache.h>18#include <linux/cache.h>
arch/arc/kernel/troubleshoot.c+12−15
@@ -104,8 +104,7 @@ static void show_faulting_vma(unsigned long address) · 103 unmodified lines
104 if (IS_ERR(nm))104 if (IS_ERR(nm))
105 nm = "?";105 nm = "?";
106 }106 }
107 pr_info(" @off 0x%lx in [%s]\n"107 pr_info(" @off 0x%lx in [%s] VMA: 0x%08lx to 0x%08lx\n",
108 " VMA: 0x%08lx to 0x%08lx\n",
109 vma->vm_start < TASK_UNMAPPED_BASE ?108 vma->vm_start < TASK_UNMAPPED_BASE ?
110 address : address - vma->vm_start,109 address : address - vma->vm_start,
111 nm, vma->vm_start, vma->vm_end);110 nm, vma->vm_start, vma->vm_end);
@@ -120,8 +119,6 @@ static void show_ecr_verbose(struct pt_regs *regs) · 8 unmodified lines
120 unsigned int vec, cause_code;119 unsigned int vec, cause_code;
121 unsigned long address;120 unsigned long address;
122 121
123 pr_info("\n[ECR ]: 0x%08lx => ", regs->event);
124
125 /* For Data fault, this is data address not instruction addr */122 /* For Data fault, this is data address not instruction addr */
126 address = current->thread.fault_address;123 address = current->thread.fault_address;
127 124
@@ -130,10 +127,10 @@ static void show_ecr_verbose(struct pt_regs *regs) · 2 unmodified lines
130 127
131 /* For DTLB Miss or ProtV, display the memory involved too */128 /* For DTLB Miss or ProtV, display the memory involved too */
132 if (vec == ECR_V_DTLB_MISS) {129 if (vec == ECR_V_DTLB_MISS) {
133 pr_cont("Invalid %s @ 0x%08lx by insn @ 0x%08lx\n",130 pr_cont("Invalid %s @ 0x%08lx by insn @ %pS\n",
134 (cause_code == 0x01) ? "Read" :131 (cause_code == 0x01) ? "Read" :
135 ((cause_code == 0x02) ? "Write" : "EX"),132 ((cause_code == 0x02) ? "Write" : "EX"),
136 address, regs->ret);133 address, (void *)regs->ret);
137 } else if (vec == ECR_V_ITLB_MISS) {134 } else if (vec == ECR_V_ITLB_MISS) {
138 pr_cont("Insn could not be fetched\n");135 pr_cont("Insn could not be fetched\n");
139 } else if (vec == ECR_V_MACH_CHK) {136 } else if (vec == ECR_V_MACH_CHK) {
@@ -191,31 +188,31 @@ void show_regs(struct pt_regs *regs) · 51 unmodified lines
191 188
192 show_ecr_verbose(regs);189 show_ecr_verbose(regs);
193 190
194 pr_info("[EFA ]: 0x%08lx\n[BLINK ]: %pS\n[ERET ]: %pS\n",
195 current->thread.fault_address,
196 (void *)regs->blink, (void *)regs->ret);
197
198 if (user_mode(regs))191 if (user_mode(regs))
199 show_faulting_vma(regs->ret); /* faulting code, not data */192 show_faulting_vma(regs->ret); /* faulting code, not data */
200 193
201 pr_info("[STAT32]: 0x%08lx", regs->status32);194 pr_info("ECR: 0x%08lx EFA: 0x%08lx ERET: 0x%08lx\n",
195 regs->event, current->thread.fault_address, regs->ret);
196
197 pr_info("STAT32: 0x%08lx", regs->status32);
202 198
203#define STS_BIT(r, bit) r->status32 & STATUS_##bit##_MASK ? #bit" " : ""199#define STS_BIT(r, bit) r->status32 & STATUS_##bit##_MASK ? #bit" " : ""
204 200
205#ifdef CONFIG_ISA_ARCOMPACT201#ifdef CONFIG_ISA_ARCOMPACT
206 pr_cont(" : %2s%2s%2s%2s%2s%2s%2s\n",202 pr_cont(" [%2s%2s%2s%2s%2s%2s%2s]",
207 (regs->status32 & STATUS_U_MASK) ? "U " : "K ",203 (regs->status32 & STATUS_U_MASK) ? "U " : "K ",
208 STS_BIT(regs, DE), STS_BIT(regs, AE),204 STS_BIT(regs, DE), STS_BIT(regs, AE),
209 STS_BIT(regs, A2), STS_BIT(regs, A1),205 STS_BIT(regs, A2), STS_BIT(regs, A1),
210 STS_BIT(regs, E2), STS_BIT(regs, E1));206 STS_BIT(regs, E2), STS_BIT(regs, E1));
211#else207#else
212 pr_cont(" : %2s%2s%2s%2s\n",208 pr_cont(" [%2s%2s%2s%2s]",
213 STS_BIT(regs, IE),209 STS_BIT(regs, IE),
214 (regs->status32 & STATUS_U_MASK) ? "U " : "K ",210 (regs->status32 & STATUS_U_MASK) ? "U " : "K ",
215 STS_BIT(regs, DE), STS_BIT(regs, AE));211 STS_BIT(regs, DE), STS_BIT(regs, AE));
216#endif212#endif
217 pr_info("BTA: 0x%08lx\t SP: 0x%08lx\t FP: 0x%08lx\n",213 pr_cont(" BTA: 0x%08lx\n", regs->bta);
218 regs->bta, regs->sp, regs->fp);214 pr_info("BLK: %pS\n SP: 0x%08lx FP: 0x%08lx\n",
215 (void *)regs->blink, regs->sp, regs->fp);
219 pr_info("LPS: 0x%08lx\tLPE: 0x%08lx\tLPC: 0x%08lx\n",216 pr_info("LPS: 0x%08lx\tLPE: 0x%08lx\tLPC: 0x%08lx\n",
220 regs->lp_start, regs->lp_end, regs->lp_count);217 regs->lp_start, regs->lp_end, regs->lp_count);
221 218
arch/arm/Makefile+3−1
@@ -307,13 +307,15 @@ endif · 306 unmodified lines
307ifeq ($(CONFIG_STACKPROTECTOR_PER_TASK),y)307ifeq ($(CONFIG_STACKPROTECTOR_PER_TASK),y)
308prepare: stack_protector_prepare308prepare: stack_protector_prepare
309stack_protector_prepare: prepare0309stack_protector_prepare: prepare0
310 $(eval KBUILD_CFLAGS += \310 $(eval SSP_PLUGIN_CFLAGS := \
311 -fplugin-arg-arm_ssp_per_task_plugin-tso=$(shell \311 -fplugin-arg-arm_ssp_per_task_plugin-tso=$(shell \
312 awk '{if ($$2 == "THREAD_SZ_ORDER") print $$3;}'\312 awk '{if ($$2 == "THREAD_SZ_ORDER") print $$3;}'\
313 include/generated/asm-offsets.h) \313 include/generated/asm-offsets.h) \
314 -fplugin-arg-arm_ssp_per_task_plugin-offset=$(shell \314 -fplugin-arg-arm_ssp_per_task_plugin-offset=$(shell \
315 awk '{if ($$2 == "TI_STACK_CANARY") print $$3;}'\315 awk '{if ($$2 == "TI_STACK_CANARY") print $$3;}'\
316 include/generated/asm-offsets.h))316 include/generated/asm-offsets.h))
317 $(eval KBUILD_CFLAGS += $(SSP_PLUGIN_CFLAGS))
318 $(eval GCC_PLUGINS_CFLAGS += $(SSP_PLUGIN_CFLAGS))
317endif319endif
318 320
319all: $(notdir $(KBUILD_IMAGE))321all: $(notdir $(KBUILD_IMAGE))
arch/arm/boot/compressed/Makefile+2−2
@@ -101,7 +101,6 @@ clean-files += piggy_data lib1funcs.S ashldi3.S bswapsdi2.S \ · 100 unmodified lines
101 $(libfdt) $(libfdt_hdrs) hyp-stub.S101 $(libfdt) $(libfdt_hdrs) hyp-stub.S
102 102
103KBUILD_CFLAGS += -DDISABLE_BRANCH_PROFILING103KBUILD_CFLAGS += -DDISABLE_BRANCH_PROFILING
104KBUILD_CFLAGS += $(DISABLE_ARM_SSP_PER_TASK_PLUGIN)
105 104
106ifeq ($(CONFIG_FUNCTION_TRACER),y)105ifeq ($(CONFIG_FUNCTION_TRACER),y)
107ORIG_CFLAGS := $(KBUILD_CFLAGS)106ORIG_CFLAGS := $(KBUILD_CFLAGS)
@@ -117,7 +116,8 @@ CFLAGS_fdt_ro.o := $(nossp-flags-y) · 9 unmodified lines
117CFLAGS_fdt_rw.o := $(nossp-flags-y)116CFLAGS_fdt_rw.o := $(nossp-flags-y)
118CFLAGS_fdt_wip.o := $(nossp-flags-y)117CFLAGS_fdt_wip.o := $(nossp-flags-y)
119 118
120ccflags-y := -fpic $(call cc-option,-mno-single-pic-base,) -fno-builtin -I$(obj)119ccflags-y := -fpic $(call cc-option,-mno-single-pic-base,) -fno-builtin \
120 -I$(obj) $(DISABLE_ARM_SSP_PER_TASK_PLUGIN)
121asflags-y := -DZIMAGE121asflags-y := -DZIMAGE
122 122
123# Supply kernel BSS size to the decompressor via a linker symbol.123# Supply kernel BSS size to the decompressor via a linker symbol.
arch/arm/kernel/vdso.c+2−0
@@ -94,6 +94,8 @@ static bool __init cntvct_functional(void) · 93 unmodified lines
94 * this.94 * this.
95 */95 */
96 np = of_find_compatible_node(NULL, NULL, "arm,armv7-timer");96 np = of_find_compatible_node(NULL, NULL, "arm,armv7-timer");
97 if (!np)
98 np = of_find_compatible_node(NULL, NULL, "arm,armv8-timer");
97 if (!np)99 if (!np)
98 goto out_put;100 goto out_put;
99 101
arch/arm/lib/copy_from_user.S+1−1
@@ -118,7 +118,7 @@ ENTRY(arm_copy_from_user) · 117 unmodified lines
118 118
119ENDPROC(arm_copy_from_user)119ENDPROC(arm_copy_from_user)
120 120
121 .pushsection .fixup,"ax"121 .pushsection .text.fixup,"ax"
122 .align 0122 .align 0
123 copy_abort_preamble123 copy_abort_preamble
124 ldmfd sp!, {r1, r2, r3}124 ldmfd sp!, {r1, r2, r3}
arch/arm64/boot/dts/freescale/fsl-ls1043-post.dtsi+2−0
@@ -20,6 +20,8 @@ · 19 unmodified lines
20};20};
21 21
22&fman0 {22&fman0 {
23 fsl,erratum-a050385;
24
23 /* these aliases provide the FMan ports mapping */25 /* these aliases provide the FMan ports mapping */
24 enet0: ethernet@e0000 {26 enet0: ethernet@e0000 {
25 };27 };
arch/arm64/include/asm/mmu.h+1−3
@@ -29,11 +29,9 @@ typedef struct { · 28 unmodified lines
29 */29 */
30#define ASID(mm) ((mm)->context.id.counter & 0xffff)30#define ASID(mm) ((mm)->context.id.counter & 0xffff)
31 31
32extern bool arm64_use_ng_mappings;
33
34static inline bool arm64_kernel_unmapped_at_el0(void)32static inline bool arm64_kernel_unmapped_at_el0(void)
35{33{
36 return arm64_use_ng_mappings;34 return cpus_have_const_cap(ARM64_UNMAP_KERNEL_AT_EL0);
37}35}
38 36
39typedef void (*bp_hardening_cb_t)(void);37typedef void (*bp_hardening_cb_t)(void);
arch/arm64/include/asm/pgtable-prot.h+4−2
@@ -23,11 +23,13 @@ · 22 unmodified lines
23 23
24#include <asm/pgtable-types.h>24#include <asm/pgtable-types.h>
25 25
26extern bool arm64_use_ng_mappings;
27
26#define _PROT_DEFAULT (PTE_TYPE_PAGE | PTE_AF | PTE_SHARED)28#define _PROT_DEFAULT (PTE_TYPE_PAGE | PTE_AF | PTE_SHARED)
27#define _PROT_SECT_DEFAULT (PMD_TYPE_SECT | PMD_SECT_AF | PMD_SECT_S)29#define _PROT_SECT_DEFAULT (PMD_TYPE_SECT | PMD_SECT_AF | PMD_SECT_S)
28 30
29#define PTE_MAYBE_NG (arm64_kernel_unmapped_at_el0() ? PTE_NG : 0)31#define PTE_MAYBE_NG (arm64_use_ng_mappings ? PTE_NG : 0)
30#define PMD_MAYBE_NG (arm64_kernel_unmapped_at_el0() ? PMD_SECT_NG : 0)32#define PMD_MAYBE_NG (arm64_use_ng_mappings ? PMD_SECT_NG : 0)
31 33
32#define PROT_DEFAULT (_PROT_DEFAULT | PTE_MAYBE_NG)34#define PROT_DEFAULT (_PROT_DEFAULT | PTE_MAYBE_NG)
33#define PROT_SECT_DEFAULT (_PROT_SECT_DEFAULT | PMD_MAYBE_NG)35#define PROT_SECT_DEFAULT (_PROT_SECT_DEFAULT | PMD_MAYBE_NG)
arch/arm64/include/asm/unistd.h+1−1
@@ -25,8 +25,8 @@ · 24 unmodified lines
25#define __NR_compat_gettimeofday 7825#define __NR_compat_gettimeofday 78
26#define __NR_compat_sigreturn 11926#define __NR_compat_sigreturn 119
27#define __NR_compat_rt_sigreturn 17327#define __NR_compat_rt_sigreturn 173
28#define __NR_compat_clock_getres 247
29#define __NR_compat_clock_gettime 26328#define __NR_compat_clock_gettime 263
29#define __NR_compat_clock_getres 264
30#define __NR_compat_clock_gettime64 40330#define __NR_compat_clock_gettime64 403
31#define __NR_compat_clock_getres_time64 40631#define __NR_compat_clock_getres_time64 406
32 32
arch/arm64/kernel/smp.c+20−5
@@ -958,11 +958,22 @@ void tick_broadcast(const struct cpumask *mask) · 957 unmodified lines
958}958}
959#endif959#endif
960 960
961/*
962 * The number of CPUs online, not counting this CPU (which may not be
963 * fully online and so not counted in num_online_cpus()).
964 */
965static inline unsigned int num_other_online_cpus(void)
966{
967 unsigned int this_cpu_online = cpu_online(smp_processor_id());
968
969 return num_online_cpus() - this_cpu_online;
970}
971
961void smp_send_stop(void)972void smp_send_stop(void)
962{973{
963 unsigned long timeout;974 unsigned long timeout;
964 975
965 if (num_online_cpus() > 1) {976 if (num_other_online_cpus()) {
966 cpumask_t mask;977 cpumask_t mask;
967 978
968 cpumask_copy(&mask, cpu_online_mask);979 cpumask_copy(&mask, cpu_online_mask);
@@ -975,10 +986,10 @@ void smp_send_stop(void) · 6 unmodified lines
975 986
976 /* Wait up to one second for other CPUs to stop */987 /* Wait up to one second for other CPUs to stop */
977 timeout = USEC_PER_SEC;988 timeout = USEC_PER_SEC;
978 while (num_online_cpus() > 1 && timeout--)989 while (num_other_online_cpus() && timeout--)
979 udelay(1);990 udelay(1);
980 991
981 if (num_online_cpus() > 1)992 if (num_other_online_cpus())
982 pr_warn("SMP: failed to stop secondary CPUs %*pbl\n",993 pr_warn("SMP: failed to stop secondary CPUs %*pbl\n",
983 cpumask_pr_args(cpu_online_mask));994 cpumask_pr_args(cpu_online_mask));
984 995
@@ -1001,7 +1012,11 @@ void crash_smp_send_stop(void) · 16 unmodified lines
1001 1012
1002 cpus_stopped = 1;1013 cpus_stopped = 1;
1003 1014
1004 if (num_online_cpus() == 1) {1015 /*
1016 * If this cpu is the only one alive at this point in time, online or
1017 * not, there are no stop messages to be sent around, so just back out.
1018 */
1019 if (num_other_online_cpus() == 0) {
1005 sdei_mask_local_cpu();1020 sdei_mask_local_cpu();
1006 return;1021 return;
1007 }1022 }
@@ -1009,7 +1024,7 @@ void crash_smp_send_stop(void) · 1 unmodified line
1009 cpumask_copy(&mask, cpu_online_mask);1024 cpumask_copy(&mask, cpu_online_mask);
1010 cpumask_clear_cpu(smp_processor_id(), &mask);1025 cpumask_clear_cpu(smp_processor_id(), &mask);
1011 1026
1012 atomic_set(&waiting_for_crash_ipi, num_online_cpus() - 1);1027 atomic_set(&waiting_for_crash_ipi, num_other_online_cpus());
1013 1028
1014 pr_crit("SMP: stopping secondary CPUs\n");1029 pr_crit("SMP: stopping secondary CPUs\n");
1015 smp_cross_call(&mask, IPI_CPU_CRASH_STOP);1030 smp_cross_call(&mask, IPI_CPU_CRASH_STOP);
arch/mips/boot/dts/ingenic/ci20.dts+28−16
@@ -4,6 +4,8 @@ · 3 unmodified lines
4#include "jz4780.dtsi"4#include "jz4780.dtsi"
5#include <dt-bindings/clock/ingenic,tcu.h>5#include <dt-bindings/clock/ingenic,tcu.h>
6#include <dt-bindings/gpio/gpio.h>6#include <dt-bindings/gpio/gpio.h>
7#include <dt-bindings/interrupt-controller/irq.h>
8#include <dt-bindings/regulator/active-semi,8865-regulator.h>
7 9
8/ {10/ {
9 compatible = "img,ci20", "ingenic,jz4780";11 compatible = "img,ci20", "ingenic,jz4780";
@@ -163,63 +165,71 @@ · 153 unmodified lines
163 165
164 regulators {166 regulators {
165 vddcore: SUDCDC1 {167 vddcore: SUDCDC1 {
166 regulator-name = "VDDCORE";168 regulator-name = "DCDC_REG1";
167 regulator-min-microvolt = <1100000>;169 regulator-min-microvolt = <1100000>;
168 regulator-max-microvolt = <1100000>;170 regulator-max-microvolt = <1100000>;
169 regulator-always-on;171 regulator-always-on;
170 };172 };
171 vddmem: SUDCDC2 {173 vddmem: SUDCDC2 {
172 regulator-name = "VDDMEM";174 regulator-name = "DCDC_REG2";
173 regulator-min-microvolt = <1500000>;175 regulator-min-microvolt = <1500000>;
174 regulator-max-microvolt = <1500000>;176 regulator-max-microvolt = <1500000>;
175 regulator-always-on;177 regulator-always-on;
176 };178 };
177 vcc_33: SUDCDC3 {179 vcc_33: SUDCDC3 {
178 regulator-name = "VCC33";180 regulator-name = "DCDC_REG3";
179 regulator-min-microvolt = <3300000>;181 regulator-min-microvolt = <3300000>;
180 regulator-max-microvolt = <3300000>;182 regulator-max-microvolt = <3300000>;
181 regulator-always-on;183 regulator-always-on;
182 };184 };
183 vcc_50: SUDCDC4 {185 vcc_50: SUDCDC4 {
184 regulator-name = "VCC50";186 regulator-name = "SUDCDC_REG4";
185 regulator-min-microvolt = <5000000>;187 regulator-min-microvolt = <5000000>;
186 regulator-max-microvolt = <5000000>;188 regulator-max-microvolt = <5000000>;
187 regulator-always-on;189 regulator-always-on;
188 };190 };
189 vcc_25: LDO_REG5 {191 vcc_25: LDO_REG5 {
190 regulator-name = "VCC25";192 regulator-name = "LDO_REG5";
191 regulator-min-microvolt = <2500000>;193 regulator-min-microvolt = <2500000>;
192 regulator-max-microvolt = <2500000>;194 regulator-max-microvolt = <2500000>;
193 regulator-always-on;195 regulator-always-on;
194 };196 };
195 wifi_io: LDO_REG6 {197 wifi_io: LDO_REG6 {
196 regulator-name = "WIFIIO";198 regulator-name = "LDO_REG6";
197 regulator-min-microvolt = <2500000>;199 regulator-min-microvolt = <2500000>;
198 regulator-max-microvolt = <2500000>;200 regulator-max-microvolt = <2500000>;
199 regulator-always-on;201 regulator-always-on;
200 };202 };
201 vcc_28: LDO_REG7 {203 vcc_28: LDO_REG7 {
202 regulator-name = "VCC28";204 regulator-name = "LDO_REG7";
203 regulator-min-microvolt = <2800000>;205 regulator-min-microvolt = <2800000>;
204 regulator-max-microvolt = <2800000>;206 regulator-max-microvolt = <2800000>;
205 regulator-always-on;207 regulator-always-on;
206 };208 };
207 vcc_15: LDO_REG8 {209 vcc_15: LDO_REG8 {
208 regulator-name = "VCC15";210 regulator-name = "LDO_REG8";
209 regulator-min-microvolt = <1500000>;211 regulator-min-microvolt = <1500000>;
210 regulator-max-microvolt = <1500000>;212 regulator-max-microvolt = <1500000>;
211 regulator-always-on;213 regulator-always-on;
212 };214 };
213 vcc_18: LDO_REG9 {215 vrtc_18: LDO_REG9 {
214 regulator-name = "VCC18";216 regulator-name = "LDO_REG9";
215 regulator-min-microvolt = <1800000>;217 /* Despite the datasheet stating 3.3V
216 regulator-max-microvolt = <1800000>;218 * for REG9 and the driver expecting that,
219 * REG9 outputs 1.8V.
220 * Likely the CI20 uses a proprietary
221 * factory programmed chip variant.
222 * Since this is a simple on/off LDO the
223 * exact values do not matter.
224 */
225 regulator-min-microvolt = <3300000>;
226 regulator-max-microvolt = <3300000>;
217 regulator-always-on;227 regulator-always-on;
218 };228 };
219 vcc_11: LDO_REG10 {229 vcc_11: LDO_REG10 {
220 regulator-name = "VCC11";230 regulator-name = "LDO_REG10";
221 regulator-min-microvolt = <1100000>;231 regulator-min-microvolt = <1200000>;
222 regulator-max-microvolt = <1100000>;232 regulator-max-microvolt = <1200000>;
223 regulator-always-on;233 regulator-always-on;
224 };234 };
225 };235 };
@@ -261,7 +271,9 @@ · 35 unmodified lines
261 rtc@51 {271 rtc@51 {
262 compatible = "nxp,pcf8563";272 compatible = "nxp,pcf8563";
263 reg = <0x51>;273 reg = <0x51>;
264 interrupts = <110>;274
275 interrupt-parent = <&gpf>;
276 interrupts = <30 IRQ_TYPE_LEVEL_LOW>;
265 };277 };
266};278};
267 279
arch/mips/kernel/setup.c+2−1
@@ -605,7 +605,8 @@ static void __init bootcmdline_init(char **cmdline_p) · 604 unmodified lines
605 * If we're configured to take boot arguments from DT, look for those605 * If we're configured to take boot arguments from DT, look for those
606 * now.606 * now.
607 */607 */
608 if (IS_ENABLED(CONFIG_MIPS_CMDLINE_FROM_DTB))608 if (IS_ENABLED(CONFIG_MIPS_CMDLINE_FROM_DTB) ||
609 IS_ENABLED(CONFIG_MIPS_CMDLINE_DTB_EXTEND))
609 of_scan_flat_dt(bootcmdline_scan_chosen, &dt_bootargs);610 of_scan_flat_dt(bootcmdline_scan_chosen, &dt_bootargs);
610#endif611#endif
611 612
arch/powerpc/kvm/book3s_pr.c+1−0
@@ -1817,6 +1817,7 @@ static void kvmppc_core_vcpu_free_pr(struct kvm_vcpu *vcpu) · 1816 unmodified lines
1817{1817{
1818 struct kvmppc_vcpu_book3s *vcpu_book3s = to_book3s(vcpu);1818 struct kvmppc_vcpu_book3s *vcpu_book3s = to_book3s(vcpu);
1819 1819
1820 kvmppc_mmu_destroy_pr(vcpu);
1820 free_page((unsigned long)vcpu->arch.shared & PAGE_MASK);1821 free_page((unsigned long)vcpu->arch.shared & PAGE_MASK);
1821#ifdef CONFIG_KVM_BOOK3S_32_HANDLER1822#ifdef CONFIG_KVM_BOOK3S_32_HANDLER
1822 kfree(vcpu->arch.shadow_vcpu);1823 kfree(vcpu->arch.shadow_vcpu);
arch/powerpc/kvm/powerpc.c+0−2
@@ -759,7 +759,6 @@ int kvm_arch_vcpu_create(struct kvm_vcpu *vcpu) · 758 unmodified lines
759 return 0;759 return 0;
760 760
761out_vcpu_uninit:761out_vcpu_uninit:
762 kvmppc_mmu_destroy(vcpu);
763 kvmppc_subarch_vcpu_uninit(vcpu);762 kvmppc_subarch_vcpu_uninit(vcpu);
764 return err;763 return err;
765}764}
@@ -792,7 +791,6 @@ void kvm_arch_vcpu_destroy(struct kvm_vcpu *vcpu) · 26 unmodified lines
792 791
793 kvmppc_core_vcpu_free(vcpu);792 kvmppc_core_vcpu_free(vcpu);
794 793
795 kvmppc_mmu_destroy(vcpu);
796 kvmppc_subarch_vcpu_uninit(vcpu);794 kvmppc_subarch_vcpu_uninit(vcpu);
797}795}
798 796
arch/powerpc/mm/kasan/kasan_init_32.c+2−7
@@ -120,12 +120,6 @@ static void __init kasan_unmap_early_shadow_vmalloc(void) · 119 unmodified lines
120 unsigned long k_cur;120 unsigned long k_cur;
121 phys_addr_t pa = __pa(kasan_early_shadow_page);121 phys_addr_t pa = __pa(kasan_early_shadow_page);
122 122
123 if (!early_mmu_has_feature(MMU_FTR_HPTE_TABLE)) {
124 int ret = kasan_init_shadow_page_tables(k_start, k_end);
125
126 if (ret)
127 panic("kasan: kasan_init_shadow_page_tables() failed");
128 }
129 for (k_cur = k_start & PAGE_MASK; k_cur < k_end; k_cur += PAGE_SIZE) {123 for (k_cur = k_start & PAGE_MASK; k_cur < k_end; k_cur += PAGE_SIZE) {
130 pmd_t *pmd = pmd_offset(pud_offset(pgd_offset_k(k_cur), k_cur), k_cur);124 pmd_t *pmd = pmd_offset(pud_offset(pgd_offset_k(k_cur), k_cur), k_cur);
131 pte_t *ptep = pte_offset_kernel(pmd, k_cur);125 pte_t *ptep = pte_offset_kernel(pmd, k_cur);
@@ -143,7 +137,8 @@ void __init kasan_mmu_init(void) · 11 unmodified lines
143 int ret;137 int ret;
144 struct memblock_region *reg;138 struct memblock_region *reg;
145 139
146 if (early_mmu_has_feature(MMU_FTR_HPTE_TABLE)) {140 if (early_mmu_has_feature(MMU_FTR_HPTE_TABLE) ||
141 IS_ENABLED(CONFIG_KASAN_VMALLOC)) {
147 ret = kasan_init_shadow_page_tables(KASAN_SHADOW_START, KASAN_SHADOW_END);142 ret = kasan_init_shadow_page_tables(KASAN_SHADOW_START, KASAN_SHADOW_END);
148 143
149 if (ret)144 if (ret)
arch/s390/kvm/kvm-s390.c+17−1
@@ -3268,7 +3268,10 @@ static void kvm_arch_vcpu_ioctl_initial_reset(struct kvm_vcpu *vcpu) · 3267 unmodified lines
3268 /* Initial reset is a superset of the normal reset */3268 /* Initial reset is a superset of the normal reset */
3269 kvm_arch_vcpu_ioctl_normal_reset(vcpu);3269 kvm_arch_vcpu_ioctl_normal_reset(vcpu);
3270 3270
3271 /* this equals initial cpu reset in pop, but we don't switch to ESA */3271 /*
3272 * This equals initial cpu reset in pop, but we don't switch to ESA.
3273 * We do not only reset the internal data, but also ...
3274 */
3272 vcpu->arch.sie_block->gpsw.mask = 0;3275 vcpu->arch.sie_block->gpsw.mask = 0;
3273 vcpu->arch.sie_block->gpsw.addr = 0;3276 vcpu->arch.sie_block->gpsw.addr = 0;
3274 kvm_s390_set_prefix(vcpu, 0);3277 kvm_s390_set_prefix(vcpu, 0);
@@ -3278,6 +3281,19 @@ static void kvm_arch_vcpu_ioctl_initial_reset(struct kvm_vcpu *vcpu) · 3 unmodified lines
3278 memset(vcpu->arch.sie_block->gcr, 0, sizeof(vcpu->arch.sie_block->gcr));3281 memset(vcpu->arch.sie_block->gcr, 0, sizeof(vcpu->arch.sie_block->gcr));
3279 vcpu->arch.sie_block->gcr[0] = CR0_INITIAL_MASK;3282 vcpu->arch.sie_block->gcr[0] = CR0_INITIAL_MASK;
3280 vcpu->arch.sie_block->gcr[14] = CR14_INITIAL_MASK;3283 vcpu->arch.sie_block->gcr[14] = CR14_INITIAL_MASK;
3284
3285 /* ... the data in sync regs */
3286 memset(vcpu->run->s.regs.crs, 0, sizeof(vcpu->run->s.regs.crs));
3287 vcpu->run->s.regs.ckc = 0;
3288 vcpu->run->s.regs.crs[0] = CR0_INITIAL_MASK;
3289 vcpu->run->s.regs.crs[14] = CR14_INITIAL_MASK;
3290 vcpu->run->psw_addr = 0;
3291 vcpu->run->psw_mask = 0;
3292 vcpu->run->s.regs.todpr = 0;
3293 vcpu->run->s.regs.cputm = 0;
3294 vcpu->run->s.regs.ckc = 0;
3295 vcpu->run->s.regs.pp = 0;
3296 vcpu->run->s.regs.gbea = 1;
3281 vcpu->run->s.regs.fpc = 0;3297 vcpu->run->s.regs.fpc = 0;
3282 vcpu->arch.sie_block->gbea = 1;3298 vcpu->arch.sie_block->gbea = 1;
3283 vcpu->arch.sie_block->pp = 0;3299 vcpu->arch.sie_block->pp = 0;
arch/x86/Makefile+3−2
@@ -194,9 +194,10 @@ avx2_instr :=$(call as-instr,vpbroadcastb %xmm0$(comma)%ymm1,-DCONFIG_AS_AVX2=1) · 193 unmodified lines
194avx512_instr :=$(call as-instr,vpmovm2b %k1$(comma)%zmm5,-DCONFIG_AS_AVX512=1)194avx512_instr :=$(call as-instr,vpmovm2b %k1$(comma)%zmm5,-DCONFIG_AS_AVX512=1)
195sha1_ni_instr :=$(call as-instr,sha1msg1 %xmm0$(comma)%xmm1,-DCONFIG_AS_SHA1_NI=1)195sha1_ni_instr :=$(call as-instr,sha1msg1 %xmm0$(comma)%xmm1,-DCONFIG_AS_SHA1_NI=1)
196sha256_ni_instr :=$(call as-instr,sha256msg1 %xmm0$(comma)%xmm1,-DCONFIG_AS_SHA256_NI=1)196sha256_ni_instr :=$(call as-instr,sha256msg1 %xmm0$(comma)%xmm1,-DCONFIG_AS_SHA256_NI=1)
197adx_instr := $(call as-instr,adox %r10$(comma)%r10,-DCONFIG_AS_ADX=1)
197 198
198KBUILD_AFLAGS += $(cfi) $(cfi-sigframe) $(cfi-sections) $(asinstr) $(avx_instr) $(avx2_instr) $(avx512_instr) $(sha1_ni_instr) $(sha256_ni_instr)199KBUILD_AFLAGS += $(cfi) $(cfi-sigframe) $(cfi-sections) $(asinstr) $(avx_instr) $(avx2_instr) $(avx512_instr) $(sha1_ni_instr) $(sha256_ni_instr) $(adx_instr)
199KBUILD_CFLAGS += $(cfi) $(cfi-sigframe) $(cfi-sections) $(asinstr) $(avx_instr) $(avx2_instr) $(avx512_instr) $(sha1_ni_instr) $(sha256_ni_instr)200KBUILD_CFLAGS += $(cfi) $(cfi-sigframe) $(cfi-sections) $(asinstr) $(avx_instr) $(avx2_instr) $(avx512_instr) $(sha1_ni_instr) $(sha256_ni_instr) $(adx_instr)
200 201
201KBUILD_LDFLAGS := -m elf_$(UTS_MACHINE)202KBUILD_LDFLAGS := -m elf_$(UTS_MACHINE)
202 203
arch/x86/crypto/Makefile+6−1
@@ -11,6 +11,7 @@ avx2_supported := $(call as-instr,vpgatherdd %ymm0$(comma)(%eax$(comma)%ymm1\ · 10 unmodified lines
11avx512_supported :=$(call as-instr,vpmovm2b %k1$(comma)%zmm5,yes,no)11avx512_supported :=$(call as-instr,vpmovm2b %k1$(comma)%zmm5,yes,no)
12sha1_ni_supported :=$(call as-instr,sha1msg1 %xmm0$(comma)%xmm1,yes,no)12sha1_ni_supported :=$(call as-instr,sha1msg1 %xmm0$(comma)%xmm1,yes,no)
13sha256_ni_supported :=$(call as-instr,sha256msg1 %xmm0$(comma)%xmm1,yes,no)13sha256_ni_supported :=$(call as-instr,sha256msg1 %xmm0$(comma)%xmm1,yes,no)
14adx_supported := $(call as-instr,adox %r10$(comma)%r10,yes,no)
14 15
15obj-$(CONFIG_CRYPTO_GLUE_HELPER_X86) += glue_helper.o16obj-$(CONFIG_CRYPTO_GLUE_HELPER_X86) += glue_helper.o
16 17
@@ -39,7 +40,11 @@ obj-$(CONFIG_CRYPTO_AEGIS128_AESNI_SSE2) += aegis128-aesni.o · 22 unmodified lines
39 40
40obj-$(CONFIG_CRYPTO_NHPOLY1305_SSE2) += nhpoly1305-sse2.o41obj-$(CONFIG_CRYPTO_NHPOLY1305_SSE2) += nhpoly1305-sse2.o
41obj-$(CONFIG_CRYPTO_NHPOLY1305_AVX2) += nhpoly1305-avx2.o42obj-$(CONFIG_CRYPTO_NHPOLY1305_AVX2) += nhpoly1305-avx2.o
42obj-$(CONFIG_CRYPTO_CURVE25519_X86) += curve25519-x86_64.o43
44# These modules require the assembler to support ADX.
45ifeq ($(adx_supported),yes)
46 obj-$(CONFIG_CRYPTO_CURVE25519_X86) += curve25519-x86_64.o
47endif
43 48
44# These modules require assembler to support AVX.49# These modules require assembler to support AVX.
45ifeq ($(avx_supported),yes)50ifeq ($(avx_supported),yes)
arch/x86/events/amd/uncore.c+7−10
@@ -190,15 +190,12 @@ static int amd_uncore_event_init(struct perf_event *event) · 189 unmodified lines
190 190
191 /*191 /*
192 * NB and Last level cache counters (MSRs) are shared across all cores192 * NB and Last level cache counters (MSRs) are shared across all cores
193 * that share the same NB / Last level cache. Interrupts can be directed193 * that share the same NB / Last level cache. On family 16h and below,
194 * to a single target core, however, event counts generated by processes194 * Interrupts can be directed to a single target core, however, event
195 * running on other cores cannot be masked out. So we do not support195 * counts generated by processes running on other cores cannot be masked
196 * sampling and per-thread events.196 * out. So we do not support sampling and per-thread events via
197 * CAP_NO_INTERRUPT, and we do not enable counter overflow interrupts:
197 */198 */
198 if (is_sampling_event(event) || event->attach_state & PERF_ATTACH_TASK)
199 return -EINVAL;
200
201 /* and we do not enable counter overflow interrupts */
202 hwc->config = event->attr.config & AMD64_RAW_EVENT_MASK_NB;199 hwc->config = event->attr.config & AMD64_RAW_EVENT_MASK_NB;
203 hwc->idx = -1;200 hwc->idx = -1;
204 201
@@ -306,7 +303,7 @@ static struct pmu amd_nb_pmu = { · 101 unmodified lines
306 .start = amd_uncore_start,303 .start = amd_uncore_start,
307 .stop = amd_uncore_stop,304 .stop = amd_uncore_stop,
308 .read = amd_uncore_read,305 .read = amd_uncore_read,
309 .capabilities = PERF_PMU_CAP_NO_EXCLUDE,306 .capabilities = PERF_PMU_CAP_NO_EXCLUDE | PERF_PMU_CAP_NO_INTERRUPT,
310};307};
311 308
312static struct pmu amd_llc_pmu = {309static struct pmu amd_llc_pmu = {
@@ -317,7 +314,7 @@ static struct pmu amd_llc_pmu = { · 4 unmodified lines
317 .start = amd_uncore_start,314 .start = amd_uncore_start,
318 .stop = amd_uncore_stop,315 .stop = amd_uncore_stop,
319 .read = amd_uncore_read,316 .read = amd_uncore_read,
320 .capabilities = PERF_PMU_CAP_NO_EXCLUDE,317 .capabilities = PERF_PMU_CAP_NO_EXCLUDE | PERF_PMU_CAP_NO_INTERRUPT,
321};318};
322 319
323static struct amd_uncore *amd_uncore_alloc(unsigned int cpu)320static struct amd_uncore *amd_uncore_alloc(unsigned int cpu)
arch/x86/include/asm/kvm_emulate.h+0−1
@@ -360,7 +360,6 @@ struct x86_emulate_ctxt { · 359 unmodified lines
360 u64 d;360 u64 d;
361 unsigned long _eip;361 unsigned long _eip;
362 struct operand memop;362 struct operand memop;
363 /* Fields above regs are cleared together. */
364 unsigned long _regs[NR_VCPU_REGS];363 unsigned long _regs[NR_VCPU_REGS];
365 struct operand *memopp;364 struct operand *memopp;
366 struct fetch_cache fetch;365 struct fetch_cache fetch;
arch/x86/kernel/apic/vector.c+8−6
@@ -838,13 +838,15 @@ static void free_moved_vector(struct apic_chip_data *apicd) · 837 unmodified lines
838 bool managed = apicd->is_managed;838 bool managed = apicd->is_managed;
839 839
840 /*840 /*
841 * This should never happen. Managed interrupts are not841 * Managed interrupts are usually not migrated away
842 * migrated except on CPU down, which does not involve the842 * from an online CPU, but CPU isolation 'managed_irq'
843 * cleanup vector. But try to keep the accounting correct843 * can make that happen.
844 * nevertheless.844 * 1) Activation does not take the isolation into account
845 * to keep the code simple
846 * 2) Migration away from an isolated CPU can happen when
847 * a non-isolated CPU which is in the calculated
848 * affinity mask comes online.
845 */849 */
846 WARN_ON_ONCE(managed);
847
848 trace_vector_free_moved(apicd->irq, cpu, vector, managed);850 trace_vector_free_moved(apicd->irq, cpu, vector, managed);
849 irq_matrix_free(vector_matrix, cpu, vector, managed);851 irq_matrix_free(vector_matrix, cpu, vector, managed);
850 per_cpu(vector_irq, cpu)[vector] = VECTOR_UNUSED;852 per_cpu(vector_irq, cpu)[vector] = VECTOR_UNUSED;
arch/x86/kernel/cpu/mce/intel.c+5−4
@@ -493,17 +493,18 @@ static void intel_ppin_init(struct cpuinfo_x86 *c) · 492 unmodified lines
493 return;493 return;
494 494
495 if ((val & 3UL) == 1UL) {495 if ((val & 3UL) == 1UL) {
496 /* PPIN available but disabled: */496 /* PPIN locked in disabled mode */
497 return;497 return;
498 }498 }
499 499
500 /* If PPIN is disabled, but not locked, try to enable: */500 /* If PPIN is disabled, try to enable */
501 if (!(val & 3UL)) {501 if (!(val & 2UL)) {
502 wrmsrl_safe(MSR_PPIN_CTL, val | 2UL);502 wrmsrl_safe(MSR_PPIN_CTL, val | 2UL);
503 rdmsrl_safe(MSR_PPIN_CTL, &val);503 rdmsrl_safe(MSR_PPIN_CTL, &val);
504 }504 }
505 505
506 if ((val & 3UL) == 2UL)506 /* Is the enable bit set? */
507 if (val & 2UL)
507 set_cpu_cap(c, X86_FEATURE_INTEL_PPIN);508 set_cpu_cap(c, X86_FEATURE_INTEL_PPIN);
508 }509 }
509}510}
arch/x86/kernel/cpu/mce/therm_throt.c+7−2
@@ -486,9 +486,14 @@ static int thermal_throttle_offline(unsigned int cpu) · 485 unmodified lines
486{486{
487 struct thermal_state *state = &per_cpu(thermal_state, cpu);487 struct thermal_state *state = &per_cpu(thermal_state, cpu);
488 struct device *dev = get_cpu_device(cpu);488 struct device *dev = get_cpu_device(cpu);
489 u32 l;
490
491 /* Mask the thermal vector before draining evtl. pending work */
492 l = apic_read(APIC_LVTTHMR);
493 apic_write(APIC_LVTTHMR, l | APIC_LVT_MASKED);
489 494
490 cancel_delayed_work(&state->package_throttle.therm_work);495 cancel_delayed_work_sync(&state->package_throttle.therm_work);
491 cancel_delayed_work(&state->core_throttle.therm_work);496 cancel_delayed_work_sync(&state->core_throttle.therm_work);
492 497
493 state->package_throttle.rate_control_active = false;498 state->package_throttle.rate_control_active = false;
494 state->core_throttle.rate_control_active = false;499 state->core_throttle.rate_control_active = false;
arch/x86/kvm/Kconfig+1−1
@@ -68,7 +68,7 @@ config KVM_WERROR · 67 unmodified lines
68 depends on (X86_64 && !KASAN) || !COMPILE_TEST68 depends on (X86_64 && !KASAN) || !COMPILE_TEST
69 depends on EXPERT69 depends on EXPERT
70 help70 help
71 Add -Werror to the build flags for (and only for) i915.ko.71 Add -Werror to the build flags for KVM.
72 72
73 If in doubt, say "N".73 If in doubt, say "N".
74 74
arch/x86/kvm/emulate.c+1−0
@@ -5173,6 +5173,7 @@ int x86_decode_insn(struct x86_emulate_ctxt *ctxt, void *insn, int insn_len) · 5172 unmodified lines
5173 ctxt->fetch.ptr = ctxt->fetch.data;5173 ctxt->fetch.ptr = ctxt->fetch.data;
5174 ctxt->fetch.end = ctxt->fetch.data + insn_len;5174 ctxt->fetch.end = ctxt->fetch.data + insn_len;
5175 ctxt->opcode_len = 1;5175 ctxt->opcode_len = 1;
5176 ctxt->intercept = x86_intercept_none;
5176 if (insn_len > 0)5177 if (insn_len > 0)
5177 memcpy(ctxt->fetch.data, insn, insn_len);5178 memcpy(ctxt->fetch.data, insn, insn_len);
5178 else {5179 else {
arch/x86/kvm/ioapic.c+5−2
@@ -378,12 +378,15 @@ static void ioapic_write_indirect(struct kvm_ioapic *ioapic, u32 val) · 377 unmodified lines
378 if (e->fields.delivery_mode == APIC_DM_FIXED) {378 if (e->fields.delivery_mode == APIC_DM_FIXED) {
379 struct kvm_lapic_irq irq;379 struct kvm_lapic_irq irq;
380 380
381 irq.shorthand = APIC_DEST_NOSHORT;
382 irq.vector = e->fields.vector;381 irq.vector = e->fields.vector;
383 irq.delivery_mode = e->fields.delivery_mode << 8;382 irq.delivery_mode = e->fields.delivery_mode << 8;
384 irq.dest_id = e->fields.dest_id;
385 irq.dest_mode =383 irq.dest_mode =
386 kvm_lapic_irq_dest_mode(!!e->fields.dest_mode);384 kvm_lapic_irq_dest_mode(!!e->fields.dest_mode);
385 irq.level = false;
386 irq.trig_mode = e->fields.trig_mode;
387 irq.shorthand = APIC_DEST_NOSHORT;
388 irq.dest_id = e->fields.dest_id;
389 irq.msi_redir_hint = false;
387 bitmap_zero(&vcpu_bitmap, 16);390 bitmap_zero(&vcpu_bitmap, 16);
388 kvm_bitmap_or_dest_vcpus(ioapic->kvm, &irq,391 kvm_bitmap_or_dest_vcpus(ioapic->kvm, &irq,
389 &vcpu_bitmap);392 &vcpu_bitmap);
arch/x86/kvm/svm.c+2−1
@@ -6312,7 +6312,8 @@ static void svm_handle_exit_irqoff(struct kvm_vcpu *vcpu, · 6311 unmodified lines
6312 enum exit_fastpath_completion *exit_fastpath)6312 enum exit_fastpath_completion *exit_fastpath)
6313{6313{
6314 if (!is_guest_mode(vcpu) &&6314 if (!is_guest_mode(vcpu) &&
6315 to_svm(vcpu)->vmcb->control.exit_code == EXIT_REASON_MSR_WRITE)6315 to_svm(vcpu)->vmcb->control.exit_code == SVM_EXIT_MSR &&
6316 to_svm(vcpu)->vmcb->control.exit_info_1)
6316 *exit_fastpath = handle_fastpath_set_msr_irqoff(vcpu);6317 *exit_fastpath = handle_fastpath_set_msr_irqoff(vcpu);
6317}6318}
6318 6319
arch/x86/kvm/vmx/nested.c+3−2
@@ -224,7 +224,7 @@ static inline void nested_release_evmcs(struct kvm_vcpu *vcpu) · 223 unmodified lines
224 return;224 return;
225 225
226 kvm_vcpu_unmap(vcpu, &vmx->nested.hv_evmcs_map, true);226 kvm_vcpu_unmap(vcpu, &vmx->nested.hv_evmcs_map, true);
227 vmx->nested.hv_evmcs_vmptr = -1ull;227 vmx->nested.hv_evmcs_vmptr = 0;
228 vmx->nested.hv_evmcs = NULL;228 vmx->nested.hv_evmcs = NULL;
229}229}
230 230
@@ -1923,7 +1923,8 @@ static int nested_vmx_handle_enlightened_vmptrld(struct kvm_vcpu *vcpu, · 1692 unmodified lines
1923 if (!nested_enlightened_vmentry(vcpu, &evmcs_gpa))1923 if (!nested_enlightened_vmentry(vcpu, &evmcs_gpa))
1924 return 1;1924 return 1;
1925 1925
1926 if (unlikely(evmcs_gpa != vmx->nested.hv_evmcs_vmptr)) {1926 if (unlikely(!vmx->nested.hv_evmcs ||
1927 evmcs_gpa != vmx->nested.hv_evmcs_vmptr)) {
1927 if (!vmx->nested.hv_evmcs)1928 if (!vmx->nested.hv_evmcs)
1928 vmx->nested.current_vmptr = -1ull;1929 vmx->nested.current_vmptr = -1ull;
1929 1930
arch/x86/kvm/vmx/vmx.c+14−2
@@ -2338,6 +2338,17 @@ static void hardware_disable(void) · 2337 unmodified lines
2338 kvm_cpu_vmxoff();2338 kvm_cpu_vmxoff();
2339}2339}
2340 2340
2341/*
2342 * There is no X86_FEATURE for SGX yet, but anyway we need to query CPUID
2343 * directly instead of going through cpu_has(), to ensure KVM is trapping
2344 * ENCLS whenever it's supported in hardware. It does not matter whether
2345 * the host OS supports or has enabled SGX.
2346 */
2347static bool cpu_has_sgx(void)
2348{
2349 return cpuid_eax(0) >= 0x12 && (cpuid_eax(0x12) & BIT(0));
2350}
2351
2341static __init int adjust_vmx_controls(u32 ctl_min, u32 ctl_opt,2352static __init int adjust_vmx_controls(u32 ctl_min, u32 ctl_opt,
2342 u32 msr, u32 *result)2353 u32 msr, u32 *result)
2343{2354{
@@ -2418,8 +2429,9 @@ static __init int setup_vmcs_config(struct vmcs_config *vmcs_conf, · 74 unmodified lines
2418 SECONDARY_EXEC_ENABLE_USR_WAIT_PAUSE |2429 SECONDARY_EXEC_ENABLE_USR_WAIT_PAUSE |
2419 SECONDARY_EXEC_PT_USE_GPA |2430 SECONDARY_EXEC_PT_USE_GPA |
2420 SECONDARY_EXEC_PT_CONCEAL_VMX |2431 SECONDARY_EXEC_PT_CONCEAL_VMX |
2421 SECONDARY_EXEC_ENABLE_VMFUNC |2432 SECONDARY_EXEC_ENABLE_VMFUNC;
2422 SECONDARY_EXEC_ENCLS_EXITING;2433 if (cpu_has_sgx())
2434 opt2 |= SECONDARY_EXEC_ENCLS_EXITING;
2423 if (adjust_vmx_controls(min2, opt2,2435 if (adjust_vmx_controls(min2, opt2,
2424 MSR_IA32_VMX_PROCBASED_CTLS2,2436 MSR_IA32_VMX_PROCBASED_CTLS2,
2425 &_cpu_based_2nd_exec_control) < 0)2437 &_cpu_based_2nd_exec_control) < 0)
arch/x86/kvm/x86.c+5−3
@@ -7195,10 +7195,12 @@ static void kvm_timer_init(void) · 7194 unmodified lines
7195 7195
7196 cpu = get_cpu();7196 cpu = get_cpu();
7197 policy = cpufreq_cpu_get(cpu);7197 policy = cpufreq_cpu_get(cpu);
7198 if (policy && policy->cpuinfo.max_freq)7198 if (policy) {
7199 max_tsc_khz = policy->cpuinfo.max_freq;7199 if (policy->cpuinfo.max_freq)
7200 max_tsc_khz = policy->cpuinfo.max_freq;
7201 cpufreq_cpu_put(policy);
7202 }
7200 put_cpu();7203 put_cpu();
7201 cpufreq_cpu_put(policy);
7202#endif7204#endif
7203 cpufreq_register_notifier(&kvmclock_cpufreq_notifier_block,7205 cpufreq_register_notifier(&kvmclock_cpufreq_notifier_block,
7204 CPUFREQ_TRANSITION_NOTIFIER);7206 CPUFREQ_TRANSITION_NOTIFIER);
arch/x86/mm/fault.c+24−2
@@ -190,7 +190,7 @@ static inline pmd_t *vmalloc_sync_one(pgd_t *pgd, unsigned long address) · 189 unmodified lines
190 return pmd_k;190 return pmd_k;
191}191}
192 192
193void vmalloc_sync_all(void)193static void vmalloc_sync(void)
194{194{
195 unsigned long address;195 unsigned long address;
196 196
@@ -217,6 +217,16 @@ void vmalloc_sync_all(void) · 20 unmodified lines
217 }217 }
218}218}
219 219
220void vmalloc_sync_mappings(void)
221{
222 vmalloc_sync();
223}
224
225void vmalloc_sync_unmappings(void)
226{
227 vmalloc_sync();
228}
229
220/*230/*
221 * 32-bit:231 * 32-bit:
222 *232 *
@@ -319,11 +329,23 @@ out: · 96 unmodified lines
319 329
320#else /* CONFIG_X86_64: */330#else /* CONFIG_X86_64: */
321 331
322void vmalloc_sync_all(void)332void vmalloc_sync_mappings(void)
323{333{
334 /*
335 * 64-bit mappings might allocate new p4d/pud pages
336 * that need to be propagated to all tasks' PGDs.
337 */
324 sync_global_pgds(VMALLOC_START & PGDIR_MASK, VMALLOC_END);338 sync_global_pgds(VMALLOC_START & PGDIR_MASK, VMALLOC_END);
325}339}
326 340
341void vmalloc_sync_unmappings(void)
342{
343 /*
344 * Unmappings never allocate or free p4d/pud pages.
345 * No work is required here.
346 */
347}
348
327/*349/*
328 * 64-bit:350 * 64-bit:
329 *351 *
arch/x86/mm/ioremap.c+18−0
@@ -106,6 +106,19 @@ static unsigned int __ioremap_check_encrypted(struct resource *res) · 105 unmodified lines
106 return 0;106 return 0;
107}107}
108 108
109/*
110 * The EFI runtime services data area is not covered by walk_mem_res(), but must
111 * be mapped encrypted when SEV is active.
112 */
113static void __ioremap_check_other(resource_size_t addr, struct ioremap_desc *desc)
114{
115 if (!sev_active())
116 return;
117
118 if (efi_mem_type(addr) == EFI_RUNTIME_SERVICES_DATA)
119 desc->flags |= IORES_MAP_ENCRYPTED;
120}
121
109static int __ioremap_collect_map_flags(struct resource *res, void *arg)122static int __ioremap_collect_map_flags(struct resource *res, void *arg)
110{123{
111 struct ioremap_desc *desc = arg;124 struct ioremap_desc *desc = arg;
@@ -124,6 +137,9 @@ static int __ioremap_collect_map_flags(struct resource *res, void *arg) · 12 unmodified lines
124 * To avoid multiple resource walks, this function walks resources marked as137 * To avoid multiple resource walks, this function walks resources marked as
125 * IORESOURCE_MEM and IORESOURCE_BUSY and looking for system RAM and/or a138 * IORESOURCE_MEM and IORESOURCE_BUSY and looking for system RAM and/or a
126 * resource described not as IORES_DESC_NONE (e.g. IORES_DESC_ACPI_TABLES).139 * resource described not as IORES_DESC_NONE (e.g. IORES_DESC_ACPI_TABLES).
140 *
141 * After that, deal with misc other ranges in __ioremap_check_other() which do
142 * not fall into the above category.
127 */143 */
128static void __ioremap_check_mem(resource_size_t addr, unsigned long size,144static void __ioremap_check_mem(resource_size_t addr, unsigned long size,
129 struct ioremap_desc *desc)145 struct ioremap_desc *desc)
@@ -135,6 +151,8 @@ static void __ioremap_check_mem(resource_size_t addr, unsigned long size, · 5 unmodified lines
135 memset(desc, 0, sizeof(struct ioremap_desc));151 memset(desc, 0, sizeof(struct ioremap_desc));
136 152
137 walk_mem_res(start, end, desc, __ioremap_collect_map_flags);153 walk_mem_res(start, end, desc, __ioremap_collect_map_flags);
154
155 __ioremap_check_other(addr, desc);
138}156}
139 157
140/*158/*
block/blk-iocost.c+1−1
@@ -1318,7 +1318,7 @@ static bool iocg_is_idle(struct ioc_gq *iocg) · 1317 unmodified lines
1318 return false;1318 return false;
1319 1319
1320 /* is something in flight? */1320 /* is something in flight? */
1321 if (atomic64_read(&iocg->done_vtime) < atomic64_read(&iocg->vtime))1321 if (atomic64_read(&iocg->done_vtime) != atomic64_read(&iocg->vtime))
1322 return false;1322 return false;
1323 1323
1324 return true;1324 return true;
block/blk-mq-sched.c+22−0
@@ -398,6 +398,28 @@ void blk_mq_sched_insert_request(struct request *rq, bool at_head, · 397 unmodified lines
398 WARN_ON(e && (rq->tag != -1));398 WARN_ON(e && (rq->tag != -1));
399 399
400 if (blk_mq_sched_bypass_insert(hctx, !!e, rq)) {400 if (blk_mq_sched_bypass_insert(hctx, !!e, rq)) {
401 /*
402 * Firstly normal IO request is inserted to scheduler queue or
403 * sw queue, meantime we add flush request to dispatch queue(
404 * hctx->dispatch) directly and there is at most one in-flight
405 * flush request for each hw queue, so it doesn't matter to add
406 * flush request to tail or front of the dispatch queue.
407 *
408 * Secondly in case of NCQ, flush request belongs to non-NCQ
409 * command, and queueing it will fail when there is any
410 * in-flight normal IO request(NCQ command). When adding flush
411 * rq to the front of hctx->dispatch, it is easier to introduce
412 * extra time to flush rq's latency because of S_SCHED_RESTART
413 * compared with adding to the tail of dispatch queue, then
414 * chance of flush merge is increased, and less flush requests
415 * will be issued to controller. It is observed that ~10% time
416 * is saved in blktests block/004 on disk attached to AHCI/NCQ
417 * drive when adding flush rq to the front of hctx->dispatch.
418 *
419 * Simply queue flush rq to the front of hctx->dispatch so that
420 * intensive flush workloads can benefit in case of NCQ HW.
421 */
422 at_head = (rq->rq_flags & RQF_FLUSH_SEQ) ? true : at_head;
401 blk_mq_request_bypass_insert(rq, at_head, false);423 blk_mq_request_bypass_insert(rq, at_head, false);
402 goto run;424 goto run;
403 }425 }
block/genhd.c+36−0
@@ -301,6 +301,42 @@ struct hd_struct *disk_map_sector_rcu(struct gendisk *disk, sector_t sector) · 300 unmodified lines
301}301}
302EXPORT_SYMBOL_GPL(disk_map_sector_rcu);302EXPORT_SYMBOL_GPL(disk_map_sector_rcu);
303 303
304/**
305 * disk_has_partitions
306 * @disk: gendisk of interest
307 *
308 * Walk through the partition table and check if valid partition exists.
309 *
310 * CONTEXT:
311 * Don't care.
312 *
313 * RETURNS:
314 * True if the gendisk has at least one valid non-zero size partition.
315 * Otherwise false.
316 */
317bool disk_has_partitions(struct gendisk *disk)
318{
319 struct disk_part_tbl *ptbl;
320 int i;
321 bool ret = false;
322
323 rcu_read_lock();
324 ptbl = rcu_dereference(disk->part_tbl);
325
326 /* Iterate partitions skipping the whole device at index 0 */
327 for (i = 1; i < ptbl->len; i++) {
328 if (rcu_dereference(ptbl->part[i])) {
329 ret = true;
330 break;
331 }
332 }
333
334 rcu_read_unlock();
335
336 return ret;
337}
338EXPORT_SYMBOL_GPL(disk_has_partitions);
339
304/*340/*
305 * Can be deleted altogether. Later.341 * Can be deleted altogether. Later.
306 *342 *
drivers/acpi/apei/ghes.c+1−1
@@ -171,7 +171,7 @@ int ghes_estatus_pool_init(int num_ghes) · 170 unmodified lines
171 * New allocation must be visible in all pgd before it can be found by171 * New allocation must be visible in all pgd before it can be found by
172 * an NMI allocating from the pool.172 * an NMI allocating from the pool.
173 */173 */
174 vmalloc_sync_all();174 vmalloc_sync_mappings();
175 175
176 rc = gen_pool_add(ghes_estatus_pool, addr, PAGE_ALIGN(len), -1);176 rc = gen_pool_add(ghes_estatus_pool, addr, PAGE_ALIGN(len), -1);
177 if (rc)177 if (rc)
drivers/android/binderfs.c+1−0
@@ -439,6 +439,7 @@ static int binderfs_binder_ctl_create(struct super_block *sb) · 438 unmodified lines
439 inode->i_uid = info->root_uid;439 inode->i_uid = info->root_uid;
440 inode->i_gid = info->root_gid;440 inode->i_gid = info->root_gid;
441 441
442 refcount_set(&device->ref, 1);
442 device->binderfs_inode = inode;443 device->binderfs_inode = inode;
443 device->miscdev.minor = minor;444 device->miscdev.minor = minor;
444 445
drivers/atm/nicstar.c+1−1
@@ -91,7 +91,7 @@ · 90 unmodified lines
91#ifdef GENERAL_DEBUG91#ifdef GENERAL_DEBUG
92#define PRINTK(args...) printk(args)92#define PRINTK(args...) printk(args)
93#else93#else
94#define PRINTK(args...)94#define PRINTK(args...) do {} while (0)
95#endif /* GENERAL_DEBUG */95#endif /* GENERAL_DEBUG */
96 96
97#ifdef EXTRA_DEBUG97#ifdef EXTRA_DEBUG
drivers/auxdisplay/Kconfig+8−8
@@ -111,7 +111,7 @@ config CFAG12864B · 110 unmodified lines
111 If unsure, say N.111 If unsure, say N.
112 112
113config CFAG12864B_RATE113config CFAG12864B_RATE
114 int "Refresh rate (hertz)"114 int "Refresh rate (hertz)"
115 depends on CFAG12864B115 depends on CFAG12864B
116 default "20"116 default "20"
117 ---help---117 ---help---
@@ -329,7 +329,7 @@ config PANEL_LCD_PROTO · 211 unmodified lines
329 329
330config PANEL_LCD_PIN_E330config PANEL_LCD_PIN_E
331 depends on PANEL_PROFILE="0" && PANEL_LCD="1" && PANEL_LCD_PROTO="0"331 depends on PANEL_PROFILE="0" && PANEL_LCD="1" && PANEL_LCD_PROTO="0"
332 int "Parallel port pin number & polarity connected to the LCD E signal (-17...17) "332 int "Parallel port pin number & polarity connected to the LCD E signal (-17...17) "
333 range -17 17333 range -17 17
334 default 14334 default 14
335 ---help---335 ---help---
@@ -344,7 +344,7 @@ config PANEL_LCD_PIN_E · 8 unmodified lines
344 344
345config PANEL_LCD_PIN_RS345config PANEL_LCD_PIN_RS
346 depends on PANEL_PROFILE="0" && PANEL_LCD="1" && PANEL_LCD_PROTO="0"346 depends on PANEL_PROFILE="0" && PANEL_LCD="1" && PANEL_LCD_PROTO="0"
347 int "Parallel port pin number & polarity connected to the LCD RS signal (-17...17) "347 int "Parallel port pin number & polarity connected to the LCD RS signal (-17...17) "
348 range -17 17348 range -17 17
349 default 17349 default 17
350 ---help---350 ---help---
@@ -359,7 +359,7 @@ config PANEL_LCD_PIN_RS · 8 unmodified lines
359 359
360config PANEL_LCD_PIN_RW360config PANEL_LCD_PIN_RW
361 depends on PANEL_PROFILE="0" && PANEL_LCD="1" && PANEL_LCD_PROTO="0"361 depends on PANEL_PROFILE="0" && PANEL_LCD="1" && PANEL_LCD_PROTO="0"
362 int "Parallel port pin number & polarity connected to the LCD RW signal (-17...17) "362 int "Parallel port pin number & polarity connected to the LCD RW signal (-17...17) "
363 range -17 17363 range -17 17
364 default 16364 default 16
365 ---help---365 ---help---
@@ -374,7 +374,7 @@ config PANEL_LCD_PIN_RW · 8 unmodified lines
374 374
375config PANEL_LCD_PIN_SCL375config PANEL_LCD_PIN_SCL
376 depends on PANEL_PROFILE="0" && PANEL_LCD="1" && PANEL_LCD_PROTO!="0"376 depends on PANEL_PROFILE="0" && PANEL_LCD="1" && PANEL_LCD_PROTO!="0"
377 int "Parallel port pin number & polarity connected to the LCD SCL signal (-17...17) "377 int "Parallel port pin number & polarity connected to the LCD SCL signal (-17...17) "
378 range -17 17378 range -17 17
379 default 1379 default 1
380 ---help---380 ---help---
@@ -389,7 +389,7 @@ config PANEL_LCD_PIN_SCL · 8 unmodified lines
389 389
390config PANEL_LCD_PIN_SDA390config PANEL_LCD_PIN_SDA
391 depends on PANEL_PROFILE="0" && PANEL_LCD="1" && PANEL_LCD_PROTO!="0"391 depends on PANEL_PROFILE="0" && PANEL_LCD="1" && PANEL_LCD_PROTO!="0"
392 int "Parallel port pin number & polarity connected to the LCD SDA signal (-17...17) "392 int "Parallel port pin number & polarity connected to the LCD SDA signal (-17...17) "
393 range -17 17393 range -17 17
394 default 2394 default 2
395 ---help---395 ---help---
@@ -404,12 +404,12 @@ config PANEL_LCD_PIN_SDA · 8 unmodified lines
404 404
405config PANEL_LCD_PIN_BL405config PANEL_LCD_PIN_BL
406 depends on PANEL_PROFILE="0" && PANEL_LCD="1"406 depends on PANEL_PROFILE="0" && PANEL_LCD="1"
407 int "Parallel port pin number & polarity connected to the LCD backlight signal (-17...17) "407 int "Parallel port pin number & polarity connected to the LCD backlight signal (-17...17) "
408 range -17 17408 range -17 17
409 default 0409 default 0
410 ---help---410 ---help---
411 This describes the number of the parallel port pin to which the LCD 'BL' signal411 This describes the number of the parallel port pin to which the LCD 'BL' signal
412 has been connected. It can be :412 has been connected. It can be :
413 413
414 0 : no connection (eg: connected to ground)414 0 : no connection (eg: connected to ground)
415 1..17 : directly connected to any of these pins on the DB25 plug415 1..17 : directly connected to any of these pins on the DB25 plug
drivers/auxdisplay/charlcd.c+1−1
@@ -86,7 +86,7 @@ struct charlcd_priv { · 85 unmodified lines
86 int len;86 int len;
87 } esc_seq;87 } esc_seq;
88 88
89 unsigned long long drvdata[0];89 unsigned long long drvdata[];
90};90};
91 91
92#define charlcd_to_priv(p) container_of(p, struct charlcd_priv, lcd)92#define charlcd_to_priv(p) container_of(p, struct charlcd_priv, lcd)
drivers/auxdisplay/img-ascii-lcd.c+1−3
@@ -356,7 +356,6 @@ static int img_ascii_lcd_probe(struct platform_device *pdev) · 355 unmodified lines
356 const struct of_device_id *match;356 const struct of_device_id *match;
357 const struct img_ascii_lcd_config *cfg;357 const struct img_ascii_lcd_config *cfg;
358 struct img_ascii_lcd_ctx *ctx;358 struct img_ascii_lcd_ctx *ctx;
359 struct resource *res;
360 int err;359 int err;
361 360
362 match = of_match_device(img_ascii_lcd_matches, &pdev->dev);361 match = of_match_device(img_ascii_lcd_matches, &pdev->dev);
@@ -378,8 +377,7 @@ static int img_ascii_lcd_probe(struct platform_device *pdev) · 15 unmodified lines
378 &ctx->offset))377 &ctx->offset))
379 return -EINVAL;378 return -EINVAL;
380 } else {379 } else {
381 res = platform_get_resource(pdev, IORESOURCE_MEM, 0);380 ctx->base = devm_platform_ioremap_resource(pdev, 0);
382 ctx->base = devm_ioremap_resource(&pdev->dev, res);
383 if (IS_ERR(ctx->base))381 if (IS_ERR(ctx->base))
384 return PTR_ERR(ctx->base);382 return PTR_ERR(ctx->base);
385 }383 }
drivers/base/platform.c+6−19
@@ -363,10 +363,10 @@ static void setup_pdev_dma_masks(struct platform_device *pdev) · 362 unmodified lines
363{363{
364 if (!pdev->dev.coherent_dma_mask)364 if (!pdev->dev.coherent_dma_mask)
365 pdev->dev.coherent_dma_mask = DMA_BIT_MASK(32);365 pdev->dev.coherent_dma_mask = DMA_BIT_MASK(32);
366 if (!pdev->dma_mask)366 if (!pdev->dev.dma_mask) {
367 pdev->dma_mask = DMA_BIT_MASK(32);367 pdev->platform_dma_mask = DMA_BIT_MASK(32);
368 if (!pdev->dev.dma_mask)368 pdev->dev.dma_mask = &pdev->platform_dma_mask;
369 pdev->dev.dma_mask = &pdev->dma_mask;369 }
370};370};
371 371
372/**372/**
@@ -662,20 +662,8 @@ struct platform_device *platform_device_register_full( · 289 unmodified lines
662 pdev->dev.of_node_reused = pdevinfo->of_node_reused;662 pdev->dev.of_node_reused = pdevinfo->of_node_reused;
663 663
664 if (pdevinfo->dma_mask) {664 if (pdevinfo->dma_mask) {
665 /*665 pdev->platform_dma_mask = pdevinfo->dma_mask;
666 * This memory isn't freed when the device is put,666 pdev->dev.dma_mask = &pdev->platform_dma_mask;
667 * I don't have a nice idea for that though. Conceptually
668 * dma_mask in struct device should not be a pointer.
669 * See http://thread.gmane.org/gmane.linux.kernel.pci/9081
670 */
671 pdev->dev.dma_mask =
672 kmalloc(sizeof(*pdev->dev.dma_mask), GFP_KERNEL);
673 if (!pdev->dev.dma_mask)
674 goto err;
675
676 kmemleak_ignore(pdev->dev.dma_mask);
677
678 *pdev->dev.dma_mask = pdevinfo->dma_mask;
679 pdev->dev.coherent_dma_mask = pdevinfo->dma_mask;667 pdev->dev.coherent_dma_mask = pdevinfo->dma_mask;
680 }668 }
681 669
@@ -700,7 +688,6 @@ struct platform_device *platform_device_register_full( · 18 unmodified lines
700 if (ret) {688 if (ret) {
701err:689err:
702 ACPI_COMPANION_SET(&pdev->dev, NULL);690 ACPI_COMPANION_SET(&pdev->dev, NULL);
703 kfree(pdev->dev.dma_mask);
704 platform_device_put(pdev);691 platform_device_put(pdev);
705 return ERR_PTR(ret);692 return ERR_PTR(ret);
706 }693 }
drivers/block/virtio_blk.c+12−5
@@ -245,13 +245,20 @@ static blk_status_t virtio_queue_rq(struct blk_mq_hw_ctx *hctx, · 244 unmodified lines
245 err = virtblk_add_req(vblk->vqs[qid].vq, vbr, vbr->sg, num);245 err = virtblk_add_req(vblk->vqs[qid].vq, vbr, vbr->sg, num);
246 if (err) {246 if (err) {
247 virtqueue_kick(vblk->vqs[qid].vq);247 virtqueue_kick(vblk->vqs[qid].vq);
248 blk_mq_stop_hw_queue(hctx);248 /* Don't stop the queue if -ENOMEM: we may have failed to
249 * bounce the buffer due to global resource outage.
250 */
251 if (err == -ENOSPC)
252 blk_mq_stop_hw_queue(hctx);
249 spin_unlock_irqrestore(&vblk->vqs[qid].lock, flags);253 spin_unlock_irqrestore(&vblk->vqs[qid].lock, flags);
250 /* Out of mem doesn't actually happen, since we fall back254 switch (err) {
251 * to direct descriptors */255 case -ENOSPC:
252 if (err == -ENOMEM || err == -ENOSPC)
253 return BLK_STS_DEV_RESOURCE;256 return BLK_STS_DEV_RESOURCE;
254 return BLK_STS_IOERR;257 case -ENOMEM:
258 return BLK_STS_RESOURCE;
259 default:
260 return BLK_STS_IOERR;
261 }
255 }262 }
256 263
257 if (bd->last && virtqueue_kick_prepare(vblk->vqs[qid].vq))264 if (bd->last && virtqueue_kick_prepare(vblk->vqs[qid].vq))
drivers/char/ipmi/ipmi_si_platform.c+2−2
@@ -194,7 +194,7 @@ static int platform_ipmi_probe(struct platform_device *pdev) · 193 unmodified lines
194 else194 else
195 io.slave_addr = slave_addr;195 io.slave_addr = slave_addr;
196 196
197 io.irq = platform_get_irq(pdev, 0);197 io.irq = platform_get_irq_optional(pdev, 0);
198 if (io.irq > 0)198 if (io.irq > 0)
199 io.irq_setup = ipmi_std_irq_setup;199 io.irq_setup = ipmi_std_irq_setup;
200 else200 else
@@ -378,7 +378,7 @@ static int acpi_ipmi_probe(struct platform_device *pdev) · 177 unmodified lines
378 io.irq = tmp;378 io.irq = tmp;
379 io.irq_setup = acpi_gpe_irq_setup;379 io.irq_setup = acpi_gpe_irq_setup;
380 } else {380 } else {
381 int irq = platform_get_irq(pdev, 0);381 int irq = platform_get_irq_optional(pdev, 0);
382 382
383 if (irq > 0) {383 if (irq > 0) {
384 io.irq = irq;384 io.irq = irq;
drivers/clk/clk.c+2−2
@@ -4713,7 +4713,7 @@ EXPORT_SYMBOL(of_clk_get_by_name); · 4712 unmodified lines
4713 *4713 *
4714 * Returns: The number of clocks that are possible parents of this node4714 * Returns: The number of clocks that are possible parents of this node
4715 */4715 */
4716unsigned int of_clk_get_parent_count(struct device_node *np)4716unsigned int of_clk_get_parent_count(const struct device_node *np)
4717{4717{
4718 int count;4718 int count;
4719 4719
@@ -4725,7 +4725,7 @@ unsigned int of_clk_get_parent_count(struct device_node *np) · 5 unmodified lines
4725}4725}
4726EXPORT_SYMBOL_GPL(of_clk_get_parent_count);4726EXPORT_SYMBOL_GPL(of_clk_get_parent_count);
4727 4727
4728const char *of_clk_get_parent_name(struct device_node *np, int index)4728const char *of_clk_get_parent_name(const struct device_node *np, int index)
4729{4729{
4730 struct of_phandle_args clkspec;4730 struct of_phandle_args clkspec;
4731 struct property *prop;4731 struct property *prop;
drivers/clk/qcom/dispcc-sc7180.c+0−19
@@ -592,24 +592,6 @@ static struct clk_branch disp_cc_mdss_rot_clk = { · 591 unmodified lines
592 },592 },
593};593};
594 594
595static struct clk_branch disp_cc_mdss_rscc_ahb_clk = {
596 .halt_reg = 0x400c,
597 .halt_check = BRANCH_HALT,
598 .clkr = {
599 .enable_reg = 0x400c,
600 .enable_mask = BIT(0),
601 .hw.init = &(struct clk_init_data){
602 .name = "disp_cc_mdss_rscc_ahb_clk",
603 .parent_data = &(const struct clk_parent_data){
604 .hw = &disp_cc_mdss_ahb_clk_src.clkr.hw,
605 },
606 .num_parents = 1,
607 .flags = CLK_IS_CRITICAL | CLK_SET_RATE_PARENT,
608 .ops = &clk_branch2_ops,
609 },
610 },
611};
612
613static struct clk_branch disp_cc_mdss_rscc_vsync_clk = {595static struct clk_branch disp_cc_mdss_rscc_vsync_clk = {
614 .halt_reg = 0x4008,596 .halt_reg = 0x4008,
615 .halt_check = BRANCH_HALT,597 .halt_check = BRANCH_HALT,
@@ -687,7 +669,6 @@ static struct clk_regmap *disp_cc_sc7180_clocks[] = { · 71 unmodified lines
687 [DISP_CC_MDSS_PCLK0_CLK_SRC] = &disp_cc_mdss_pclk0_clk_src.clkr,669 [DISP_CC_MDSS_PCLK0_CLK_SRC] = &disp_cc_mdss_pclk0_clk_src.clkr,
688 [DISP_CC_MDSS_ROT_CLK] = &disp_cc_mdss_rot_clk.clkr,670 [DISP_CC_MDSS_ROT_CLK] = &disp_cc_mdss_rot_clk.clkr,
689 [DISP_CC_MDSS_ROT_CLK_SRC] = &disp_cc_mdss_rot_clk_src.clkr,671 [DISP_CC_MDSS_ROT_CLK_SRC] = &disp_cc_mdss_rot_clk_src.clkr,
690 [DISP_CC_MDSS_RSCC_AHB_CLK] = &disp_cc_mdss_rscc_ahb_clk.clkr,
691 [DISP_CC_MDSS_RSCC_VSYNC_CLK] = &disp_cc_mdss_rscc_vsync_clk.clkr,672 [DISP_CC_MDSS_RSCC_VSYNC_CLK] = &disp_cc_mdss_rscc_vsync_clk.clkr,
692 [DISP_CC_MDSS_VSYNC_CLK] = &disp_cc_mdss_vsync_clk.clkr,673 [DISP_CC_MDSS_VSYNC_CLK] = &disp_cc_mdss_vsync_clk.clkr,
693 [DISP_CC_MDSS_VSYNC_CLK_SRC] = &disp_cc_mdss_vsync_clk_src.clkr,674 [DISP_CC_MDSS_VSYNC_CLK_SRC] = &disp_cc_mdss_vsync_clk_src.clkr,
drivers/clk/qcom/videocc-sc7180.c+1−1
@@ -97,7 +97,7 @@ static struct clk_branch video_cc_vcodec0_axi_clk = { · 96 unmodified lines
97 97
98static struct clk_branch video_cc_vcodec0_core_clk = {98static struct clk_branch video_cc_vcodec0_core_clk = {
99 .halt_reg = 0x890,99 .halt_reg = 0x890,
100 .halt_check = BRANCH_HALT,100 .halt_check = BRANCH_HALT_VOTED,
101 .clkr = {101 .clkr = {
102 .enable_reg = 0x890,102 .enable_reg = 0x890,
103 .enable_mask = BIT(0),103 .enable_mask = BIT(0),
drivers/firmware/efi/efivars.c+23−9
@@ -83,13 +83,16 @@ static ssize_t · 82 unmodified lines
83efivar_attr_read(struct efivar_entry *entry, char *buf)83efivar_attr_read(struct efivar_entry *entry, char *buf)
84{84{
85 struct efi_variable *var = &entry->var;85 struct efi_variable *var = &entry->var;
86 unsigned long size = sizeof(var->Data);
86 char *str = buf;87 char *str = buf;
88 int ret;
87 89
88 if (!entry || !buf)90 if (!entry || !buf)
89 return -EINVAL;91 return -EINVAL;
90 92
91 var->DataSize = 1024;93 ret = efivar_entry_get(entry, &var->Attributes, &size, var->Data);
92 if (efivar_entry_get(entry, &var->Attributes, &var->DataSize, var->Data))94 var->DataSize = size;
95 if (ret)
93 return -EIO;96 return -EIO;
94 97
95 if (var->Attributes & EFI_VARIABLE_NON_VOLATILE)98 if (var->Attributes & EFI_VARIABLE_NON_VOLATILE)
@@ -116,13 +119,16 @@ static ssize_t · 20 unmodified lines
116efivar_size_read(struct efivar_entry *entry, char *buf)119efivar_size_read(struct efivar_entry *entry, char *buf)
117{120{
118 struct efi_variable *var = &entry->var;121 struct efi_variable *var = &entry->var;
122 unsigned long size = sizeof(var->Data);
119 char *str = buf;123 char *str = buf;
124 int ret;
120 125
121 if (!entry || !buf)126 if (!entry || !buf)
122 return -EINVAL;127 return -EINVAL;
123 128
124 var->DataSize = 1024;129 ret = efivar_entry_get(entry, &var->Attributes, &size, var->Data);
125 if (efivar_entry_get(entry, &var->Attributes, &var->DataSize, var->Data))130 var->DataSize = size;
131 if (ret)
126 return -EIO;132 return -EIO;
127 133
128 str += sprintf(str, "0x%lx\n", var->DataSize);134 str += sprintf(str, "0x%lx\n", var->DataSize);
@@ -133,12 +139,15 @@ static ssize_t · 4 unmodified lines
133efivar_data_read(struct efivar_entry *entry, char *buf)139efivar_data_read(struct efivar_entry *entry, char *buf)
134{140{
135 struct efi_variable *var = &entry->var;141 struct efi_variable *var = &entry->var;
142 unsigned long size = sizeof(var->Data);
143 int ret;
136 144
137 if (!entry || !buf)145 if (!entry || !buf)
138 return -EINVAL;146 return -EINVAL;
139 147
140 var->DataSize = 1024;148 ret = efivar_entry_get(entry, &var->Attributes, &size, var->Data);
141 if (efivar_entry_get(entry, &var->Attributes, &var->DataSize, var->Data))149 var->DataSize = size;
150 if (ret)
142 return -EIO;151 return -EIO;
143 152
144 memcpy(buf, var->Data, var->DataSize);153 memcpy(buf, var->Data, var->DataSize);
@@ -199,6 +208,9 @@ efivar_store_raw(struct efivar_entry *entry, const char *buf, size_t count) · 54 unmodified lines
199 u8 *data;208 u8 *data;
200 int err;209 int err;
201 210
211 if (!entry || !buf)
212 return -EINVAL;
213
202 if (in_compat_syscall()) {214 if (in_compat_syscall()) {
203 struct compat_efi_variable *compat;215 struct compat_efi_variable *compat;
204 216
@@ -250,14 +262,16 @@ efivar_show_raw(struct efivar_entry *entry, char *buf) · 45 unmodified lines
250{262{
251 struct efi_variable *var = &entry->var;263 struct efi_variable *var = &entry->var;
252 struct compat_efi_variable *compat;264 struct compat_efi_variable *compat;
265 unsigned long datasize = sizeof(var->Data);
253 size_t size;266 size_t size;
267 int ret;
254 268
255 if (!entry || !buf)269 if (!entry || !buf)
256 return 0;270 return 0;
257 271
258 var->DataSize = 1024;272 ret = efivar_entry_get(entry, &var->Attributes, &datasize, var->Data);
259 if (efivar_entry_get(entry, &entry->var.Attributes,273 var->DataSize = datasize;
260 &entry->var.DataSize, entry->var.Data))274 if (ret)
261 return -EIO;275 return -EIO;
262 276
263 if (in_compat_syscall()) {277 if (in_compat_syscall()) {
drivers/gpu/drm/amd/amdgpu/amdgpu_debugfs.c+3−3
@@ -781,11 +781,11 @@ static ssize_t amdgpu_debugfs_gpr_read(struct file *f, char __user *buf, · 780 unmodified lines
781 ssize_t result = 0;781 ssize_t result = 0;
782 uint32_t offset, se, sh, cu, wave, simd, thread, bank, *data;782 uint32_t offset, se, sh, cu, wave, simd, thread, bank, *data;
783 783
784 if (size & 3 || *pos & 3)784 if (size > 4096 || size & 3 || *pos & 3)
785 return -EINVAL;785 return -EINVAL;
786 786
787 /* decode offset */787 /* decode offset */
788 offset = *pos & GENMASK_ULL(11, 0);788 offset = (*pos & GENMASK_ULL(11, 0)) >> 2;
789 se = (*pos & GENMASK_ULL(19, 12)) >> 12;789 se = (*pos & GENMASK_ULL(19, 12)) >> 12;
790 sh = (*pos & GENMASK_ULL(27, 20)) >> 20;790 sh = (*pos & GENMASK_ULL(27, 20)) >> 20;
791 cu = (*pos & GENMASK_ULL(35, 28)) >> 28;791 cu = (*pos & GENMASK_ULL(35, 28)) >> 28;
@@ -823,7 +823,7 @@ static ssize_t amdgpu_debugfs_gpr_read(struct file *f, char __user *buf, · 31 unmodified lines
823 while (size) {823 while (size) {
824 uint32_t value;824 uint32_t value;
825 825
826 value = data[offset++];826 value = data[result >> 2];
827 r = put_user(value, (uint32_t *)buf);827 r = put_user(value, (uint32_t *)buf);
828 if (r) {828 if (r) {
829 result = r;829 result = r;
drivers/gpu/drm/amd/amdgpu/amdgpu_device.c+4−0
@@ -3913,6 +3913,8 @@ static int amdgpu_do_asic_reset(struct amdgpu_hive_info *hive, · 3912 unmodified lines
3913 if (r)3913 if (r)
3914 goto out;3914 goto out;
3915 3915
3916 amdgpu_fbdev_set_suspend(tmp_adev, 0);
3917
3916 /* must succeed. */3918 /* must succeed. */
3917 amdgpu_ras_resume(tmp_adev);3919 amdgpu_ras_resume(tmp_adev);
3918 3920
@@ -4086,6 +4088,8 @@ int amdgpu_device_gpu_recover(struct amdgpu_device *adev, · 167 unmodified lines
4086 */4088 */
4087 amdgpu_unregister_gpu_instance(tmp_adev);4089 amdgpu_unregister_gpu_instance(tmp_adev);
4088 4090
4091 amdgpu_fbdev_set_suspend(adev, 1);
4092
4089 /* disable ras on ALL IPs */4093 /* disable ras on ALL IPs */
4090 if (!(in_ras_intr && !use_baco) &&4094 if (!(in_ras_intr && !use_baco) &&
4091 amdgpu_device_ip_need_full_reset(tmp_adev))4095 amdgpu_device_ip_need_full_reset(tmp_adev))
drivers/gpu/drm/amd/amdgpu/jpeg_v2_0.c+1−1
@@ -693,7 +693,7 @@ static int jpeg_v2_0_set_clockgating_state(void *handle, · 692 unmodified lines
693 bool enable = (state == AMD_CG_STATE_GATE);693 bool enable = (state == AMD_CG_STATE_GATE);
694 694
695 if (enable) {695 if (enable) {
696 if (jpeg_v2_0_is_idle(handle))696 if (!jpeg_v2_0_is_idle(handle))
697 return -EBUSY;697 return -EBUSY;
698 jpeg_v2_0_enable_clock_gating(adev);698 jpeg_v2_0_enable_clock_gating(adev);
699 } else {699 } else {
drivers/gpu/drm/amd/amdgpu/jpeg_v2_5.c+1−1
@@ -477,7 +477,7 @@ static int jpeg_v2_5_set_clockgating_state(void *handle, · 476 unmodified lines
477 continue;477 continue;
478 478
479 if (enable) {479 if (enable) {
480 if (jpeg_v2_5_is_idle(handle))480 if (!jpeg_v2_5_is_idle(handle))
481 return -EBUSY;481 return -EBUSY;
482 jpeg_v2_5_enable_clock_gating(adev, i);482 jpeg_v2_5_enable_clock_gating(adev, i);
483 } else {483 } else {
drivers/gpu/drm/amd/amdgpu/soc15.c+23−2
@@ -89,6 +89,13 @@ · 88 unmodified lines
89#define HDP_MEM_POWER_CTRL__RC_MEM_POWER_CTRL_EN_MASK 0x00010000L89#define HDP_MEM_POWER_CTRL__RC_MEM_POWER_CTRL_EN_MASK 0x00010000L
90#define HDP_MEM_POWER_CTRL__RC_MEM_POWER_LS_EN_MASK 0x00020000L90#define HDP_MEM_POWER_CTRL__RC_MEM_POWER_LS_EN_MASK 0x00020000L
91#define mmHDP_MEM_POWER_CTRL_BASE_IDX 091#define mmHDP_MEM_POWER_CTRL_BASE_IDX 0
92
93/* for Vega20/arcturus regiter offset change */
94#define mmROM_INDEX_VG20 0x00e4
95#define mmROM_INDEX_VG20_BASE_IDX 0
96#define mmROM_DATA_VG20 0x00e5
97#define mmROM_DATA_VG20_BASE_IDX 0
98
92/*99/*
93 * Indirect registers accessor100 * Indirect registers accessor
94 */101 */
@@ -309,6 +316,8 @@ static bool soc15_read_bios_from_rom(struct amdgpu_device *adev, · 214 unmodified lines
309{316{
310 u32 *dw_ptr;317 u32 *dw_ptr;
311 u32 i, length_dw;318 u32 i, length_dw;
319 uint32_t rom_index_offset;
320 uint32_t rom_data_offset;
312 321
313 if (bios == NULL)322 if (bios == NULL)
314 return false;323 return false;
@@ -321,11 +330,23 @@ static bool soc15_read_bios_from_rom(struct amdgpu_device *adev, · 6 unmodified lines
321 dw_ptr = (u32 *)bios;330 dw_ptr = (u32 *)bios;
322 length_dw = ALIGN(length_bytes, 4) / 4;331 length_dw = ALIGN(length_bytes, 4) / 4;
323 332
333 switch (adev->asic_type) {
334 case CHIP_VEGA20:
335 case CHIP_ARCTURUS:
336 rom_index_offset = SOC15_REG_OFFSET(SMUIO, 0, mmROM_INDEX_VG20);
337 rom_data_offset = SOC15_REG_OFFSET(SMUIO, 0, mmROM_DATA_VG20);
338 break;
339 default:
340 rom_index_offset = SOC15_REG_OFFSET(SMUIO, 0, mmROM_INDEX);
341 rom_data_offset = SOC15_REG_OFFSET(SMUIO, 0, mmROM_DATA);
342 break;
343 }
344
324 /* set rom index to 0 */345 /* set rom index to 0 */
325 WREG32(SOC15_REG_OFFSET(SMUIO, 0, mmROM_INDEX), 0);346 WREG32(rom_index_offset, 0);
326 /* read out the rom data */347 /* read out the rom data */
327 for (i = 0; i < length_dw; i++)348 for (i = 0; i < length_dw; i++)
328 dw_ptr[i] = RREG32(SOC15_REG_OFFSET(SMUIO, 0, mmROM_DATA));349 dw_ptr[i] = RREG32(rom_data_offset);
329 350
330 return true;351 return true;
331}352}
drivers/gpu/drm/amd/amdgpu/vcn_v1_0.c+1−1
@@ -1352,7 +1352,7 @@ static int vcn_v1_0_set_clockgating_state(void *handle, · 1351 unmodified lines
1352 1352
1353 if (enable) {1353 if (enable) {
1354 /* wait for STATUS to clear */1354 /* wait for STATUS to clear */
1355 if (vcn_v1_0_is_idle(handle))1355 if (!vcn_v1_0_is_idle(handle))
1356 return -EBUSY;1356 return -EBUSY;
1357 vcn_v1_0_enable_clock_gating(adev);1357 vcn_v1_0_enable_clock_gating(adev);
1358 } else {1358 } else {
drivers/gpu/drm/amd/amdgpu/vcn_v2_0.c+1−1
@@ -1217,7 +1217,7 @@ static int vcn_v2_0_set_clockgating_state(void *handle, · 1216 unmodified lines
1217 1217
1218 if (enable) {1218 if (enable) {
1219 /* wait for STATUS to clear */1219 /* wait for STATUS to clear */
1220 if (vcn_v2_0_is_idle(handle))1220 if (!vcn_v2_0_is_idle(handle))
1221 return -EBUSY;1221 return -EBUSY;
1222 vcn_v2_0_enable_clock_gating(adev);1222 vcn_v2_0_enable_clock_gating(adev);
1223 } else {1223 } else {
drivers/gpu/drm/amd/amdgpu/vcn_v2_5.c+1−1
@@ -1672,7 +1672,7 @@ static int vcn_v2_5_set_clockgating_state(void *handle, · 1671 unmodified lines
1672 return 0;1672 return 0;
1673 1673
1674 if (enable) {1674 if (enable) {
1675 if (vcn_v2_5_is_idle(handle))1675 if (!vcn_v2_5_is_idle(handle))
1676 return -EBUSY;1676 return -EBUSY;
1677 vcn_v2_5_enable_clock_gating(adev);1677 vcn_v2_5_enable_clock_gating(adev);
1678 } else {1678 } else {
drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c+15−3
@@ -522,8 +522,9 @@ static void dm_dcn_crtc_high_irq(void *interrupt_params) · 521 unmodified lines
522 522
523 acrtc_state = to_dm_crtc_state(acrtc->base.state);523 acrtc_state = to_dm_crtc_state(acrtc->base.state);
524 524
525 DRM_DEBUG_DRIVER("crtc:%d, vupdate-vrr:%d\n", acrtc->crtc_id,525 DRM_DEBUG_DRIVER("crtc:%d, vupdate-vrr:%d, planes:%d\n", acrtc->crtc_id,
526 amdgpu_dm_vrr_active(acrtc_state));526 amdgpu_dm_vrr_active(acrtc_state),
527 acrtc_state->active_planes);
527 528
528 amdgpu_dm_crtc_handle_crc_irq(&acrtc->base);529 amdgpu_dm_crtc_handle_crc_irq(&acrtc->base);
529 drm_crtc_handle_vblank(&acrtc->base);530 drm_crtc_handle_vblank(&acrtc->base);
@@ -543,7 +544,18 @@ static void dm_dcn_crtc_high_irq(void *interrupt_params) · 13 unmodified lines
543 &acrtc_state->vrr_params.adjust);544 &acrtc_state->vrr_params.adjust);
544 }545 }
545 546
546 if (acrtc->pflip_status == AMDGPU_FLIP_SUBMITTED) {547 /*
548 * If there aren't any active_planes then DCH HUBP may be clock-gated.
549 * In that case, pageflip completion interrupts won't fire and pageflip
550 * completion events won't get delivered. Prevent this by sending
551 * pending pageflip events from here if a flip is still pending.
552 *
553 * If any planes are enabled, use dm_pflip_high_irq() instead, to
554 * avoid race conditions between flip programming and completion,
555 * which could cause too early flip completion events.
556 */
557 if (acrtc->pflip_status == AMDGPU_FLIP_SUBMITTED &&
558 acrtc_state->active_planes == 0) {
547 if (acrtc->event) {559 if (acrtc->event) {
548 drm_crtc_send_vblank_event(&acrtc->base, acrtc->event);560 drm_crtc_send_vblank_event(&acrtc->base, acrtc->event);
549 acrtc->event = NULL;561 acrtc->event = NULL;
drivers/gpu/drm/amd/display/dc/core/dc_link_dp.c+11−0
@@ -3401,6 +3401,17 @@ static bool retrieve_link_cap(struct dc_link *link) · 3400 unmodified lines
3401 sink_id.ieee_device_id,3401 sink_id.ieee_device_id,
3402 sizeof(sink_id.ieee_device_id));3402 sizeof(sink_id.ieee_device_id));
3403 3403
3404 /* Quirk Apple MBP 2017 15" Retina panel: Wrong DP_MAX_LINK_RATE */
3405 {
3406 uint8_t str_mbp_2017[] = { 101, 68, 21, 101, 98, 97 };
3407
3408 if ((link->dpcd_caps.sink_dev_id == 0x0010fa) &&
3409 !memcmp(link->dpcd_caps.sink_dev_id_str, str_mbp_2017,
3410 sizeof(str_mbp_2017))) {
3411 link->reported_link_cap.link_rate = 0x0c;
3412 }
3413 }
3414
3404 core_link_read_dpcd(3415 core_link_read_dpcd(
3405 link,3416 link,
3406 DP_SINK_HW_REVISION_START,3417 DP_SINK_HW_REVISION_START,
drivers/gpu/drm/amd/display/dc/dcn20/dcn20_init.c+0−1
@@ -108,7 +108,6 @@ static const struct hwseq_private_funcs dcn20_private_funcs = { · 107 unmodified lines
108 .enable_power_gating_plane = dcn20_enable_power_gating_plane,108 .enable_power_gating_plane = dcn20_enable_power_gating_plane,
109 .dpp_pg_control = dcn20_dpp_pg_control,109 .dpp_pg_control = dcn20_dpp_pg_control,
110 .hubp_pg_control = dcn20_hubp_pg_control,110 .hubp_pg_control = dcn20_hubp_pg_control,
111 .dsc_pg_control = NULL,
112 .update_odm = dcn20_update_odm,111 .update_odm = dcn20_update_odm,
113 .dsc_pg_control = dcn20_dsc_pg_control,112 .dsc_pg_control = dcn20_dsc_pg_control,
114 .get_surface_visual_confirm_color = dcn10_get_surface_visual_confirm_color,113 .get_surface_visual_confirm_color = dcn10_get_surface_visual_confirm_color,
drivers/gpu/drm/amd/display/dc/dcn20/dcn20_resource.c+114−0
@@ -335,6 +335,117 @@ struct _vcs_dpi_soc_bounding_box_st dcn2_0_soc = { · 334 unmodified lines
335 .use_urgent_burst_bw = 0335 .use_urgent_burst_bw = 0
336};336};
337 337
338struct _vcs_dpi_soc_bounding_box_st dcn2_0_nv14_soc = {
339 .clock_limits = {
340 {
341 .state = 0,
342 .dcfclk_mhz = 560.0,
343 .fabricclk_mhz = 560.0,
344 .dispclk_mhz = 513.0,
345 .dppclk_mhz = 513.0,
346 .phyclk_mhz = 540.0,
347 .socclk_mhz = 560.0,
348 .dscclk_mhz = 171.0,
349 .dram_speed_mts = 8960.0,
350 },
351 {
352 .state = 1,
353 .dcfclk_mhz = 694.0,
354 .fabricclk_mhz = 694.0,
355 .dispclk_mhz = 642.0,
356 .dppclk_mhz = 642.0,
357 .phyclk_mhz = 600.0,
358 .socclk_mhz = 694.0,
359 .dscclk_mhz = 214.0,
360 .dram_speed_mts = 11104.0,
361 },
362 {
363 .state = 2,
364 .dcfclk_mhz = 875.0,
365 .fabricclk_mhz = 875.0,
366 .dispclk_mhz = 734.0,
367 .dppclk_mhz = 734.0,
368 .phyclk_mhz = 810.0,
369 .socclk_mhz = 875.0,
370 .dscclk_mhz = 245.0,
371 .dram_speed_mts = 14000.0,
372 },
373 {
374 .state = 3,
375 .dcfclk_mhz = 1000.0,
376 .fabricclk_mhz = 1000.0,
377 .dispclk_mhz = 1100.0,
378 .dppclk_mhz = 1100.0,
379 .phyclk_mhz = 810.0,
380 .socclk_mhz = 1000.0,
381 .dscclk_mhz = 367.0,
382 .dram_speed_mts = 16000.0,
383 },
384 {
385 .state = 4,
386 .dcfclk_mhz = 1200.0,
387 .fabricclk_mhz = 1200.0,
388 .dispclk_mhz = 1284.0,
389 .dppclk_mhz = 1284.0,
390 .phyclk_mhz = 810.0,
391 .socclk_mhz = 1200.0,
392 .dscclk_mhz = 428.0,
393 .dram_speed_mts = 16000.0,
394 },
395 /*Extra state, no dispclk ramping*/
396 {
397 .state = 5,
398 .dcfclk_mhz = 1200.0,
399 .fabricclk_mhz = 1200.0,
400 .dispclk_mhz = 1284.0,
401 .dppclk_mhz = 1284.0,
402 .phyclk_mhz = 810.0,
403 .socclk_mhz = 1200.0,
404 .dscclk_mhz = 428.0,
405 .dram_speed_mts = 16000.0,
406 },
407 },
408 .num_states = 5,
409 .sr_exit_time_us = 8.6,
410 .sr_enter_plus_exit_time_us = 10.9,
411 .urgent_latency_us = 4.0,
412 .urgent_latency_pixel_data_only_us = 4.0,
413 .urgent_latency_pixel_mixed_with_vm_data_us = 4.0,
414 .urgent_latency_vm_data_only_us = 4.0,
415 .urgent_out_of_order_return_per_channel_pixel_only_bytes = 4096,
416 .urgent_out_of_order_return_per_channel_pixel_and_vm_bytes = 4096,
417 .urgent_out_of_order_return_per_channel_vm_only_bytes = 4096,
418 .pct_ideal_dram_sdp_bw_after_urgent_pixel_only = 40.0,
419 .pct_ideal_dram_sdp_bw_after_urgent_pixel_and_vm = 40.0,
420 .pct_ideal_dram_sdp_bw_after_urgent_vm_only = 40.0,
421 .max_avg_sdp_bw_use_normal_percent = 40.0,
422 .max_avg_dram_bw_use_normal_percent = 40.0,
423 .writeback_latency_us = 12.0,
424 .ideal_dram_bw_after_urgent_percent = 40.0,
425 .max_request_size_bytes = 256,
426 .dram_channel_width_bytes = 2,
427 .fabric_datapath_to_dcn_data_return_bytes = 64,
428 .dcn_downspread_percent = 0.5,
429 .downspread_percent = 0.38,
430 .dram_page_open_time_ns = 50.0,
431 .dram_rw_turnaround_time_ns = 17.5,
432 .dram_return_buffer_per_channel_bytes = 8192,
433 .round_trip_ping_latency_dcfclk_cycles = 131,
434 .urgent_out_of_order_return_per_channel_bytes = 256,
435 .channel_interleave_bytes = 256,
436 .num_banks = 8,
437 .num_chans = 8,
438 .vmm_page_size_bytes = 4096,
439 .dram_clock_change_latency_us = 404.0,
440 .dummy_pstate_latency_us = 5.0,
441 .writeback_dram_clock_change_latency_us = 23.0,
442 .return_bus_width_bytes = 64,
443 .dispclk_dppclk_vco_speed_mhz = 3850,
444 .xfc_bus_transport_time_us = 20,
445 .xfc_xbuf_latency_tolerance_us = 4,
446 .use_urgent_burst_bw = 0
447};
448
338struct _vcs_dpi_soc_bounding_box_st dcn2_0_nv12_soc = { 0 };449struct _vcs_dpi_soc_bounding_box_st dcn2_0_nv12_soc = { 0 };
339 450
340#ifndef mmDP0_DP_DPHY_INTERNAL_CTRL451#ifndef mmDP0_DP_DPHY_INTERNAL_CTRL
@@ -3291,6 +3402,9 @@ void dcn20_patch_bounding_box(struct dc *dc, struct _vcs_dpi_soc_bounding_box_st · 2950 unmodified lines
3291static struct _vcs_dpi_soc_bounding_box_st *get_asic_rev_soc_bb(3402static struct _vcs_dpi_soc_bounding_box_st *get_asic_rev_soc_bb(
3292 uint32_t hw_internal_rev)3403 uint32_t hw_internal_rev)
3293{3404{
3405 if (ASICREV_IS_NAVI14_M(hw_internal_rev))
3406 return &dcn2_0_nv14_soc;
3407
3294 if (ASICREV_IS_NAVI12_P(hw_internal_rev))3408 if (ASICREV_IS_NAVI12_P(hw_internal_rev))
3295 return &dcn2_0_nv12_soc;3409 return &dcn2_0_nv12_soc;
3296 3410
drivers/gpu/drm/amd/display/dc/dcn21/dcn21_init.c+0−1
@@ -116,7 +116,6 @@ static const struct hwseq_private_funcs dcn21_private_funcs = { · 115 unmodified lines
116 .enable_power_gating_plane = dcn20_enable_power_gating_plane,116 .enable_power_gating_plane = dcn20_enable_power_gating_plane,
117 .dpp_pg_control = dcn20_dpp_pg_control,117 .dpp_pg_control = dcn20_dpp_pg_control,
118 .hubp_pg_control = dcn20_hubp_pg_control,118 .hubp_pg_control = dcn20_hubp_pg_control,
119 .dsc_pg_control = NULL,
120 .update_odm = dcn20_update_odm,119 .update_odm = dcn20_update_odm,
121 .dsc_pg_control = dcn20_dsc_pg_control,120 .dsc_pg_control = dcn20_dsc_pg_control,
122 .get_surface_visual_confirm_color = dcn10_get_surface_visual_confirm_color,121 .get_surface_visual_confirm_color = dcn10_get_surface_visual_confirm_color,
drivers/gpu/drm/amd/powerplay/amdgpu_smu.c+5−2
@@ -2006,8 +2006,11 @@ int smu_set_watermarks_for_clock_ranges(struct smu_context *smu, · 2005 unmodified lines
2006 smu_feature_is_enabled(smu, SMU_FEATURE_DPM_DCEFCLK_BIT) &&2006 smu_feature_is_enabled(smu, SMU_FEATURE_DPM_DCEFCLK_BIT) &&
2007 smu_feature_is_enabled(smu, SMU_FEATURE_DPM_SOCCLK_BIT)) {2007 smu_feature_is_enabled(smu, SMU_FEATURE_DPM_SOCCLK_BIT)) {
2008 smu_set_watermarks_table(smu, table, clock_ranges);2008 smu_set_watermarks_table(smu, table, clock_ranges);
2009 smu->watermarks_bitmap |= WATERMARKS_EXIST;2009
2010 smu->watermarks_bitmap &= ~WATERMARKS_LOADED;2010 if (!(smu->watermarks_bitmap & WATERMARKS_EXIST)) {
2011 smu->watermarks_bitmap |= WATERMARKS_EXIST;
2012 smu->watermarks_bitmap &= ~WATERMARKS_LOADED;
2013 }
2011 }2014 }
2012 2015
2013 mutex_unlock(&smu->mutex);2016 mutex_unlock(&smu->mutex);
drivers/gpu/drm/amd/powerplay/navi10_ppt.c+13−9
@@ -1062,15 +1062,6 @@ static int navi10_display_config_changed(struct smu_context *smu) · 1061 unmodified lines
1062{1062{
1063 int ret = 0;1063 int ret = 0;
1064 1064
1065 if ((smu->watermarks_bitmap & WATERMARKS_EXIST) &&
1066 !(smu->watermarks_bitmap & WATERMARKS_LOADED)) {
1067 ret = smu_write_watermarks_table(smu);
1068 if (ret)
1069 return ret;
1070
1071 smu->watermarks_bitmap |= WATERMARKS_LOADED;
1072 }
1073
1074 if ((smu->watermarks_bitmap & WATERMARKS_EXIST) &&1065 if ((smu->watermarks_bitmap & WATERMARKS_EXIST) &&
1075 smu_feature_is_supported(smu, SMU_FEATURE_DPM_DCEFCLK_BIT) &&1066 smu_feature_is_supported(smu, SMU_FEATURE_DPM_DCEFCLK_BIT) &&
1076 smu_feature_is_supported(smu, SMU_FEATURE_DPM_SOCCLK_BIT)) {1067 smu_feature_is_supported(smu, SMU_FEATURE_DPM_SOCCLK_BIT)) {
@@ -1493,6 +1484,7 @@ static int navi10_set_watermarks_table(struct smu_context *smu, · 416 unmodified lines
1493 *clock_ranges)1484 *clock_ranges)
1494{1485{
1495 int i;1486 int i;
1487 int ret = 0;
1496 Watermarks_t *table = watermarks;1488 Watermarks_t *table = watermarks;
1497 1489
1498 if (!table || !clock_ranges)1490 if (!table || !clock_ranges)
@@ -1544,6 +1536,18 @@ static int navi10_set_watermarks_table(struct smu_context *smu, · 45 unmodified lines
1544 clock_ranges->wm_mcif_clocks_ranges[i].wm_set_id;1536 clock_ranges->wm_mcif_clocks_ranges[i].wm_set_id;
1545 }1537 }
1546 1538
1539 smu->watermarks_bitmap |= WATERMARKS_EXIST;
1540
1541 /* pass data to smu controller */
1542 if (!(smu->watermarks_bitmap & WATERMARKS_LOADED)) {
1543 ret = smu_write_watermarks_table(smu);
1544 if (ret) {
1545 pr_err("Failed to update WMTABLE!");
1546 return ret;
1547 }
1548 smu->watermarks_bitmap |= WATERMARKS_LOADED;
1549 }
1550
1547 return 0;1551 return 0;
1548}1552}
1549 1553
drivers/gpu/drm/amd/powerplay/renoir_ppt.c+3−2
@@ -806,9 +806,10 @@ static int renoir_set_watermarks_table( · 805 unmodified lines
806 clock_ranges->wm_mcif_clocks_ranges[i].wm_set_id;806 clock_ranges->wm_mcif_clocks_ranges[i].wm_set_id;
807 }807 }
808 808
809 smu->watermarks_bitmap |= WATERMARKS_EXIST;
810
809 /* pass data to smu controller */811 /* pass data to smu controller */
810 if ((smu->watermarks_bitmap & WATERMARKS_EXIST) &&812 if (!(smu->watermarks_bitmap & WATERMARKS_LOADED)) {
811 !(smu->watermarks_bitmap & WATERMARKS_LOADED)) {
812 ret = smu_write_watermarks_table(smu);813 ret = smu_write_watermarks_table(smu);
813 if (ret) {814 if (ret) {
814 pr_err("Failed to update WMTABLE!");815 pr_err("Failed to update WMTABLE!");
drivers/gpu/drm/arm/display/komeda/komeda_drv.c+2−2
@@ -146,14 +146,14 @@ static const struct of_device_id komeda_of_match[] = { · 145 unmodified lines
146 146
147MODULE_DEVICE_TABLE(of, komeda_of_match);147MODULE_DEVICE_TABLE(of, komeda_of_match);
148 148
149static int komeda_rt_pm_suspend(struct device *dev)149static int __maybe_unused komeda_rt_pm_suspend(struct device *dev)
150{150{
151 struct komeda_drv *mdrv = dev_get_drvdata(dev);151 struct komeda_drv *mdrv = dev_get_drvdata(dev);
152 152
153 return komeda_dev_suspend(mdrv->mdev);153 return komeda_dev_suspend(mdrv->mdev);
154}154}
155 155
156static int komeda_rt_pm_resume(struct device *dev)156static int __maybe_unused komeda_rt_pm_resume(struct device *dev)
157{157{
158 struct komeda_drv *mdrv = dev_get_drvdata(dev);158 struct komeda_drv *mdrv = dev_get_drvdata(dev);
159 159
drivers/gpu/drm/bochs/bochs_hw.c+2−4
@@ -156,10 +156,8 @@ int bochs_hw_init(struct drm_device *dev) · 155 unmodified lines
156 size = min(size, mem);156 size = min(size, mem);
157 }157 }
158 158
159 if (pci_request_region(pdev, 0, "bochs-drm") != 0) {159 if (pci_request_region(pdev, 0, "bochs-drm") != 0)
160 DRM_ERROR("Cannot request framebuffer\n");160 DRM_WARN("Cannot request framebuffer, boot fb still active?\n");
161 return -EBUSY;
162 }
163 161
164 bochs->fb_map = ioremap(addr, size);162 bochs->fb_map = ioremap(addr, size);
165 if (bochs->fb_map == NULL) {163 if (bochs->fb_map == NULL) {
drivers/gpu/drm/bridge/synopsys/dw-hdmi.c+26−20
@@ -1624,28 +1624,34 @@ static void hdmi_config_AVI(struct dw_hdmi *hdmi, struct drm_display_mode *mode) · 1623 unmodified lines
1624 frame.colorspace = HDMI_COLORSPACE_RGB;1624 frame.colorspace = HDMI_COLORSPACE_RGB;
1625 1625
1626 /* Set up colorimetry */1626 /* Set up colorimetry */
1627 switch (hdmi->hdmi_data.enc_out_encoding) {1627 if (!hdmi_bus_fmt_is_rgb(hdmi->hdmi_data.enc_out_bus_format)) {
1628 case V4L2_YCBCR_ENC_601:1628 switch (hdmi->hdmi_data.enc_out_encoding) {
1629 if (hdmi->hdmi_data.enc_in_encoding == V4L2_YCBCR_ENC_XV601)1629 case V4L2_YCBCR_ENC_601:
1630 frame.colorimetry = HDMI_COLORIMETRY_EXTENDED;1630 if (hdmi->hdmi_data.enc_in_encoding == V4L2_YCBCR_ENC_XV601)
1631 else1631 frame.colorimetry = HDMI_COLORIMETRY_EXTENDED;
1632 else
1633 frame.colorimetry = HDMI_COLORIMETRY_ITU_601;
1634 frame.extended_colorimetry =
1635 HDMI_EXTENDED_COLORIMETRY_XV_YCC_601;
1636 break;
1637 case V4L2_YCBCR_ENC_709:
1638 if (hdmi->hdmi_data.enc_in_encoding == V4L2_YCBCR_ENC_XV709)
1639 frame.colorimetry = HDMI_COLORIMETRY_EXTENDED;
1640 else
1641 frame.colorimetry = HDMI_COLORIMETRY_ITU_709;
1642 frame.extended_colorimetry =
1643 HDMI_EXTENDED_COLORIMETRY_XV_YCC_709;
1644 break;
1645 default: /* Carries no data */
1632 frame.colorimetry = HDMI_COLORIMETRY_ITU_601;1646 frame.colorimetry = HDMI_COLORIMETRY_ITU_601;
1647 frame.extended_colorimetry =
1648 HDMI_EXTENDED_COLORIMETRY_XV_YCC_601;
1649 break;
1650 }
1651 } else {
1652 frame.colorimetry = HDMI_COLORIMETRY_NONE;
1633 frame.extended_colorimetry =1653 frame.extended_colorimetry =
1634 HDMI_EXTENDED_COLORIMETRY_XV_YCC_601;1654 HDMI_EXTENDED_COLORIMETRY_XV_YCC_601;
1635 break;
1636 case V4L2_YCBCR_ENC_709:
1637 if (hdmi->hdmi_data.enc_in_encoding == V4L2_YCBCR_ENC_XV709)
1638 frame.colorimetry = HDMI_COLORIMETRY_EXTENDED;
1639 else
1640 frame.colorimetry = HDMI_COLORIMETRY_ITU_709;
1641 frame.extended_colorimetry =
1642 HDMI_EXTENDED_COLORIMETRY_XV_YCC_709;
1643 break;
1644 default: /* Carries no data */
1645 frame.colorimetry = HDMI_COLORIMETRY_ITU_601;
1646 frame.extended_colorimetry =
1647 HDMI_EXTENDED_COLORIMETRY_XV_YCC_601;
1648 break;
1649 }1655 }
1650 1656
1651 frame.scan_mode = HDMI_SCAN_MODE_NONE;1657 frame.scan_mode = HDMI_SCAN_MODE_NONE;
drivers/gpu/drm/drm_dp_mst_topology.c+126−58
@@ -1935,7 +1935,7 @@ static u8 drm_dp_calculate_rad(struct drm_dp_mst_port *port, · 1934 unmodified lines
1935 return parent_lct + 1;1935 return parent_lct + 1;
1936}1936}
1937 1937
1938static bool drm_dp_mst_is_dp_mst_end_device(u8 pdt, bool mcs)1938static bool drm_dp_mst_is_end_device(u8 pdt, bool mcs)
1939{1939{
1940 switch (pdt) {1940 switch (pdt) {
1941 case DP_PEER_DEVICE_DP_LEGACY_CONV:1941 case DP_PEER_DEVICE_DP_LEGACY_CONV:
@@ -1965,13 +1965,13 @@ drm_dp_port_set_pdt(struct drm_dp_mst_port *port, u8 new_pdt, · 23 unmodified lines
1965 1965
1966 /* Teardown the old pdt, if there is one */1966 /* Teardown the old pdt, if there is one */
1967 if (port->pdt != DP_PEER_DEVICE_NONE) {1967 if (port->pdt != DP_PEER_DEVICE_NONE) {
1968 if (drm_dp_mst_is_dp_mst_end_device(port->pdt, port->mcs)) {1968 if (drm_dp_mst_is_end_device(port->pdt, port->mcs)) {
1969 /*1969 /*
1970 * If the new PDT would also have an i2c bus,1970 * If the new PDT would also have an i2c bus,
1971 * don't bother with reregistering it1971 * don't bother with reregistering it
1972 */1972 */
1973 if (new_pdt != DP_PEER_DEVICE_NONE &&1973 if (new_pdt != DP_PEER_DEVICE_NONE &&
1974 drm_dp_mst_is_dp_mst_end_device(new_pdt, new_mcs)) {1974 drm_dp_mst_is_end_device(new_pdt, new_mcs)) {
1975 port->pdt = new_pdt;1975 port->pdt = new_pdt;
1976 port->mcs = new_mcs;1976 port->mcs = new_mcs;
1977 return 0;1977 return 0;
@@ -1991,7 +1991,7 @@ drm_dp_port_set_pdt(struct drm_dp_mst_port *port, u8 new_pdt, · 13 unmodified lines
1991 port->mcs = new_mcs;1991 port->mcs = new_mcs;
1992 1992
1993 if (port->pdt != DP_PEER_DEVICE_NONE) {1993 if (port->pdt != DP_PEER_DEVICE_NONE) {
1994 if (drm_dp_mst_is_dp_mst_end_device(port->pdt, port->mcs)) {1994 if (drm_dp_mst_is_end_device(port->pdt, port->mcs)) {
1995 /* add i2c over sideband */1995 /* add i2c over sideband */
1996 ret = drm_dp_mst_register_i2c_bus(&port->aux);1996 ret = drm_dp_mst_register_i2c_bus(&port->aux);
1997 } else {1997 } else {
@@ -2172,7 +2172,7 @@ drm_dp_mst_port_add_connector(struct drm_dp_mst_branch *mstb, · 174 unmodified lines
2172 }2172 }
2173 2173
2174 if (port->pdt != DP_PEER_DEVICE_NONE &&2174 if (port->pdt != DP_PEER_DEVICE_NONE &&
2175 drm_dp_mst_is_dp_mst_end_device(port->pdt, port->mcs)) {2175 drm_dp_mst_is_end_device(port->pdt, port->mcs)) {
2176 port->cached_edid = drm_get_edid(port->connector,2176 port->cached_edid = drm_get_edid(port->connector,
2177 &port->aux.ddc);2177 &port->aux.ddc);
2178 drm_connector_set_tile_property(port->connector);2178 drm_connector_set_tile_property(port->connector);
@@ -2302,14 +2302,18 @@ drm_dp_mst_handle_link_address_port(struct drm_dp_mst_branch *mstb, · 123 unmodified lines
2302 mutex_unlock(&mgr->lock);2302 mutex_unlock(&mgr->lock);
2303 }2303 }
2304 2304
2305 if (old_ddps != port->ddps) {2305 /*
2306 if (port->ddps) {2306 * Reprobe PBN caps on both hotplug, and when re-probing the link
2307 if (!port->input) {2307 * for our parent mstb
2308 drm_dp_send_enum_path_resources(mgr, mstb,2308 */
2309 port);2309 if (old_ddps != port->ddps || !created) {
2310 }2310 if (port->ddps && !port->input) {
2311 ret = drm_dp_send_enum_path_resources(mgr, mstb,
2312 port);
2313 if (ret == 1)
2314 changed = true;
2311 } else {2315 } else {
2312 port->available_pbn = 0;2316 port->full_pbn = 0;
2313 }2317 }
2314 }2318 }
2315 2319
@@ -2401,11 +2405,10 @@ drm_dp_mst_handle_conn_stat(struct drm_dp_mst_branch *mstb, · 85 unmodified lines
2401 port->ddps = conn_stat->displayport_device_plug_status;2405 port->ddps = conn_stat->displayport_device_plug_status;
2402 2406
2403 if (old_ddps != port->ddps) {2407 if (old_ddps != port->ddps) {
2404 if (port->ddps) {2408 if (port->ddps && !port->input)
2405 dowork = true;2409 drm_dp_send_enum_path_resources(mgr, mstb, port);
2406 } else {2410 else
2407 port->available_pbn = 0;2411 port->full_pbn = 0;
2408 }
2409 }2412 }
2410 2413
2411 new_pdt = port->input ? DP_PEER_DEVICE_NONE : conn_stat->peer_device_type;2414 new_pdt = port->input ? DP_PEER_DEVICE_NONE : conn_stat->peer_device_type;
@@ -2556,13 +2559,6 @@ static int drm_dp_check_and_send_link_address(struct drm_dp_mst_topology_mgr *mg · 144 unmodified lines
2556 if (port->input || !port->ddps)2559 if (port->input || !port->ddps)
2557 continue;2560 continue;
2558 2561
2559 if (!port->available_pbn) {
2560 drm_modeset_lock(&mgr->base.lock, NULL);
2561 drm_dp_send_enum_path_resources(mgr, mstb, port);
2562 drm_modeset_unlock(&mgr->base.lock);
2563 changed = true;
2564 }
2565
2566 if (port->mstb)2562 if (port->mstb)
2567 mstb_child = drm_dp_mst_topology_get_mstb_validated(2563 mstb_child = drm_dp_mst_topology_get_mstb_validated(
2568 mgr, port->mstb);2564 mgr, port->mstb);
@@ -2990,6 +2986,7 @@ drm_dp_send_enum_path_resources(struct drm_dp_mst_topology_mgr *mgr, · 421 unmodified lines
2990 2986
2991 ret = drm_dp_mst_wait_tx_reply(mstb, txmsg);2987 ret = drm_dp_mst_wait_tx_reply(mstb, txmsg);
2992 if (ret > 0) {2988 if (ret > 0) {
2989 ret = 0;
2993 path_res = &txmsg->reply.u.path_resources;2990 path_res = &txmsg->reply.u.path_resources;
2994 2991
2995 if (txmsg->reply.reply_type == DP_SIDEBAND_REPLY_NAK) {2992 if (txmsg->reply.reply_type == DP_SIDEBAND_REPLY_NAK) {
@@ -3002,14 +2999,22 @@ drm_dp_send_enum_path_resources(struct drm_dp_mst_topology_mgr *mgr, · 6 unmodified lines
3002 path_res->port_number,2999 path_res->port_number,
3003 path_res->full_payload_bw_number,3000 path_res->full_payload_bw_number,
3004 path_res->avail_payload_bw_number);3001 path_res->avail_payload_bw_number);
3005 port->available_pbn =3002
3006 path_res->avail_payload_bw_number;3003 /*
3004 * If something changed, make sure we send a
3005 * hotplug
3006 */
3007 if (port->full_pbn != path_res->full_payload_bw_number ||
3008 port->fec_capable != path_res->fec_capable)
3009 ret = 1;
3010
3011 port->full_pbn = path_res->full_payload_bw_number;
3007 port->fec_capable = path_res->fec_capable;3012 port->fec_capable = path_res->fec_capable;
3008 }3013 }
3009 }3014 }
3010 3015
3011 kfree(txmsg);3016 kfree(txmsg);
3012 return 0;3017 return ret;
3013}3018}
3014 3019
3015static struct drm_dp_mst_port *drm_dp_get_last_connected_port_to_mstb(struct drm_dp_mst_branch *mstb)3020static struct drm_dp_mst_port *drm_dp_get_last_connected_port_to_mstb(struct drm_dp_mst_branch *mstb)
@@ -3596,13 +3601,9 @@ drm_dp_mst_topology_mgr_invalidate_mstb(struct drm_dp_mst_branch *mstb) · 580 unmodified lines
3596 /* The link address will need to be re-sent on resume */3601 /* The link address will need to be re-sent on resume */
3597 mstb->link_address_sent = false;3602 mstb->link_address_sent = false;
3598 3603
3599 list_for_each_entry(port, &mstb->ports, next) {3604 list_for_each_entry(port, &mstb->ports, next)
3600 /* The PBN for each port will also need to be re-probed */
3601 port->available_pbn = 0;
3602
3603 if (port->mstb)3605 if (port->mstb)
3604 drm_dp_mst_topology_mgr_invalidate_mstb(port->mstb);3606 drm_dp_mst_topology_mgr_invalidate_mstb(port->mstb);
3605 }
3606}3607}
3607 3608
3608/**3609/**
@@ -4829,41 +4830,102 @@ static bool drm_dp_mst_port_downstream_of_branch(struct drm_dp_mst_port *port, · 1220 unmodified lines
4829 return false;4830 return false;
4830}4831}
4831 4832
4832static inline4833static int
4833int drm_dp_mst_atomic_check_bw_limit(struct drm_dp_mst_branch *branch,4834drm_dp_mst_atomic_check_port_bw_limit(struct drm_dp_mst_port *port,
4834 struct drm_dp_mst_topology_state *mst_state)4835 struct drm_dp_mst_topology_state *state);
4836
4837static int
4838drm_dp_mst_atomic_check_mstb_bw_limit(struct drm_dp_mst_branch *mstb,
4839 struct drm_dp_mst_topology_state *state)
4835{4840{
4836 struct drm_dp_mst_port *port;
4837 struct drm_dp_vcpi_allocation *vcpi;4841 struct drm_dp_vcpi_allocation *vcpi;
4838 int pbn_limit = 0, pbn_used = 0;4842 struct drm_dp_mst_port *port;
4843 int pbn_used = 0, ret;
4844 bool found = false;
4839 4845
4840 list_for_each_entry(port, &branch->ports, next) {4846 /* Check that we have at least one port in our state that's downstream
4841 if (port->mstb)4847 * of this branch, otherwise we can skip this branch
4842 if (drm_dp_mst_atomic_check_bw_limit(port->mstb, mst_state))4848 */
4843 return -ENOSPC;4849 list_for_each_entry(vcpi, &state->vcpis, next) {
4850 if (!vcpi->pbn ||
4851 !drm_dp_mst_port_downstream_of_branch(vcpi->port, mstb))
4852 continue;
4844 4853
4845 if (port->available_pbn > 0)4854 found = true;
4846 pbn_limit = port->available_pbn;4855 break;
4847 }4856 }
4848 DRM_DEBUG_ATOMIC("[MST BRANCH:%p] branch has %d PBN available\n",4857 if (!found)
4849 branch, pbn_limit);4858 return 0;
4850 4859
4851 list_for_each_entry(vcpi, &mst_state->vcpis, next) {4860 if (mstb->port_parent)
4852 if (!vcpi->pbn)4861 DRM_DEBUG_ATOMIC("[MSTB:%p] [MST PORT:%p] Checking bandwidth limits on [MSTB:%p]\n",
4853 continue;4862 mstb->port_parent->parent, mstb->port_parent,
4863 mstb);
4864 else
4865 DRM_DEBUG_ATOMIC("[MSTB:%p] Checking bandwidth limits\n",
4866 mstb);
4867
4868 list_for_each_entry(port, &mstb->ports, next) {
4869 ret = drm_dp_mst_atomic_check_port_bw_limit(port, state);
4870 if (ret < 0)
4871 return ret;
4854 4872
4855 if (drm_dp_mst_port_downstream_of_branch(vcpi->port, branch))4873 pbn_used += ret;
4856 pbn_used += vcpi->pbn;
4857 }4874 }
4858 DRM_DEBUG_ATOMIC("[MST BRANCH:%p] branch used %d PBN\n",
4859 branch, pbn_used);
4860 4875
4861 if (pbn_used > pbn_limit) {4876 return pbn_used;
4862 DRM_DEBUG_ATOMIC("[MST BRANCH:%p] No available bandwidth\n",4877}
4863 branch);4878
4879static int
4880drm_dp_mst_atomic_check_port_bw_limit(struct drm_dp_mst_port *port,
4881 struct drm_dp_mst_topology_state *state)
4882{
4883 struct drm_dp_vcpi_allocation *vcpi;
4884 int pbn_used = 0;
4885
4886 if (port->pdt == DP_PEER_DEVICE_NONE)
4887 return 0;
4888
4889 if (drm_dp_mst_is_end_device(port->pdt, port->mcs)) {
4890 bool found = false;
4891
4892 list_for_each_entry(vcpi, &state->vcpis, next) {
4893 if (vcpi->port != port)
4894 continue;
4895 if (!vcpi->pbn)
4896 return 0;
4897
4898 found = true;
4899 break;
4900 }
4901 if (!found)
4902 return 0;
4903
4904 /* This should never happen, as it means we tried to
4905 * set a mode before querying the full_pbn
4906 */
4907 if (WARN_ON(!port->full_pbn))
4908 return -EINVAL;
4909
4910 pbn_used = vcpi->pbn;
4911 } else {
4912 pbn_used = drm_dp_mst_atomic_check_mstb_bw_limit(port->mstb,
4913 state);
4914 if (pbn_used <= 0)
4915 return pbn_used;
4916 }
4917
4918 if (pbn_used > port->full_pbn) {
4919 DRM_DEBUG_ATOMIC("[MSTB:%p] [MST PORT:%p] required PBN of %d exceeds port limit of %d\n",
4920 port->parent, port, pbn_used,
4921 port->full_pbn);
4864 return -ENOSPC;4922 return -ENOSPC;
4865 }4923 }
4866 return 0;4924
4925 DRM_DEBUG_ATOMIC("[MSTB:%p] [MST PORT:%p] uses %d out of %d PBN\n",
4926 port->parent, port, pbn_used, port->full_pbn);
4927
4928 return pbn_used;
4867}4929}
4868 4930
4869static inline int4931static inline int
@@ -5061,9 +5123,15 @@ int drm_dp_mst_atomic_check(struct drm_atomic_state *state) · 191 unmodified lines
5061 ret = drm_dp_mst_atomic_check_vcpi_alloc_limit(mgr, mst_state);5123 ret = drm_dp_mst_atomic_check_vcpi_alloc_limit(mgr, mst_state);
5062 if (ret)5124 if (ret)
5063 break;5125 break;
5064 ret = drm_dp_mst_atomic_check_bw_limit(mgr->mst_primary, mst_state);5126
5065 if (ret)5127 mutex_lock(&mgr->lock);
5128 ret = drm_dp_mst_atomic_check_mstb_bw_limit(mgr->mst_primary,
5129 mst_state);
5130 mutex_unlock(&mgr->lock);
5131 if (ret < 0)
5066 break;5132 break;
5133 else
5134 ret = 0;
5067 }5135 }
5068 5136
5069 return ret;5137 return ret;
drivers/gpu/drm/drm_lease.c+2−1
@@ -542,10 +542,12 @@ int drm_mode_create_lease_ioctl(struct drm_device *dev, · 541 unmodified lines
542 }542 }
543 543
544 DRM_DEBUG_LEASE("Creating lease\n");544 DRM_DEBUG_LEASE("Creating lease\n");
545 /* lessee will take the ownership of leases */
545 lessee = drm_lease_create(lessor, &leases);546 lessee = drm_lease_create(lessor, &leases);
546 547
547 if (IS_ERR(lessee)) {548 if (IS_ERR(lessee)) {
548 ret = PTR_ERR(lessee);549 ret = PTR_ERR(lessee);
550 idr_destroy(&leases);
549 goto out_leases;551 goto out_leases;
550 }552 }
551 553
@@ -580,7 +582,6 @@ out_lessee: · 28 unmodified lines
580 582
581out_leases:583out_leases:
582 put_unused_fd(fd);584 put_unused_fd(fd);
583 idr_destroy(&leases);
584 585
585 DRM_DEBUG_LEASE("drm_mode_create_lease_ioctl failed: %d\n", ret);586 DRM_DEBUG_LEASE("drm_mode_create_lease_ioctl failed: %d\n", ret);
586 return ret;587 return ret;
drivers/gpu/drm/exynos/exynos5433_drm_decon.c+3−2
@@ -55,6 +55,7 @@ static const char * const decon_clks_name[] = { · 54 unmodified lines
55struct decon_context {55struct decon_context {
56 struct device *dev;56 struct device *dev;
57 struct drm_device *drm_dev;57 struct drm_device *drm_dev;
58 void *dma_priv;
58 struct exynos_drm_crtc *crtc;59 struct exynos_drm_crtc *crtc;
59 struct exynos_drm_plane planes[WINDOWS_NR];60 struct exynos_drm_plane planes[WINDOWS_NR];
60 struct exynos_drm_plane_config configs[WINDOWS_NR];61 struct exynos_drm_plane_config configs[WINDOWS_NR];
@@ -644,7 +645,7 @@ static int decon_bind(struct device *dev, struct device *master, void *data) · 583 unmodified lines
644 645
645 decon_clear_channels(ctx->crtc);646 decon_clear_channels(ctx->crtc);
646 647
647 return exynos_drm_register_dma(drm_dev, dev);648 return exynos_drm_register_dma(drm_dev, dev, &ctx->dma_priv);
648}649}
649 650
650static void decon_unbind(struct device *dev, struct device *master, void *data)651static void decon_unbind(struct device *dev, struct device *master, void *data)
@@ -654,7 +655,7 @@ static void decon_unbind(struct device *dev, struct device *master, void *data) · 3 unmodified lines
654 decon_atomic_disable(ctx->crtc);655 decon_atomic_disable(ctx->crtc);
655 656
656 /* detach this sub driver from iommu mapping if supported. */657 /* detach this sub driver from iommu mapping if supported. */
657 exynos_drm_unregister_dma(ctx->drm_dev, ctx->dev);658 exynos_drm_unregister_dma(ctx->drm_dev, ctx->dev, &ctx->dma_priv);
658}659}
659 660
660static const struct component_ops decon_component_ops = {661static const struct component_ops decon_component_ops = {
drivers/gpu/drm/exynos/exynos7_drm_decon.c+3−2
@@ -40,6 +40,7 @@ · 39 unmodified lines
40struct decon_context {40struct decon_context {
41 struct device *dev;41 struct device *dev;
42 struct drm_device *drm_dev;42 struct drm_device *drm_dev;
43 void *dma_priv;
43 struct exynos_drm_crtc *crtc;44 struct exynos_drm_crtc *crtc;
44 struct exynos_drm_plane planes[WINDOWS_NR];45 struct exynos_drm_plane planes[WINDOWS_NR];
45 struct exynos_drm_plane_config configs[WINDOWS_NR];46 struct exynos_drm_plane_config configs[WINDOWS_NR];
@@ -127,13 +128,13 @@ static int decon_ctx_initialize(struct decon_context *ctx, · 81 unmodified lines
127 128
128 decon_clear_channels(ctx->crtc);129 decon_clear_channels(ctx->crtc);
129 130
130 return exynos_drm_register_dma(drm_dev, ctx->dev);131 return exynos_drm_register_dma(drm_dev, ctx->dev, &ctx->dma_priv);
131}132}
132 133
133static void decon_ctx_remove(struct decon_context *ctx)134static void decon_ctx_remove(struct decon_context *ctx)
134{135{
135 /* detach this sub driver from iommu mapping if supported. */136 /* detach this sub driver from iommu mapping if supported. */
136 exynos_drm_unregister_dma(ctx->drm_dev, ctx->dev);137 exynos_drm_unregister_dma(ctx->drm_dev, ctx->dev, &ctx->dma_priv);
137}138}
138 139
139static u32 decon_calc_clkdiv(struct decon_context *ctx,140static u32 decon_calc_clkdiv(struct decon_context *ctx,
drivers/gpu/drm/exynos/exynos_drm_dma.c+19−9
@@ -58,7 +58,7 @@ static inline void clear_dma_max_seg_size(struct device *dev) · 57 unmodified lines
58 * mapping.58 * mapping.
59 */59 */
60static int drm_iommu_attach_device(struct drm_device *drm_dev,60static int drm_iommu_attach_device(struct drm_device *drm_dev,
61 struct device *subdrv_dev)61 struct device *subdrv_dev, void **dma_priv)
62{62{
63 struct exynos_drm_private *priv = drm_dev->dev_private;63 struct exynos_drm_private *priv = drm_dev->dev_private;
64 int ret;64 int ret;
@@ -74,7 +74,14 @@ static int drm_iommu_attach_device(struct drm_device *drm_dev, · 9 unmodified lines
74 return ret;74 return ret;
75 75
76 if (IS_ENABLED(CONFIG_ARM_DMA_USE_IOMMU)) {76 if (IS_ENABLED(CONFIG_ARM_DMA_USE_IOMMU)) {
77 if (to_dma_iommu_mapping(subdrv_dev))77 /*
78 * Keep the original DMA mapping of the sub-device and
79 * restore it on Exynos DRM detach, otherwise the DMA
80 * framework considers it as IOMMU-less during the next
81 * probe (in case of deferred probe or modular build)
82 */
83 *dma_priv = to_dma_iommu_mapping(subdrv_dev);
84 if (*dma_priv)
78 arm_iommu_detach_device(subdrv_dev);85 arm_iommu_detach_device(subdrv_dev);
79 86
80 ret = arm_iommu_attach_device(subdrv_dev, priv->mapping);87 ret = arm_iommu_attach_device(subdrv_dev, priv->mapping);
@@ -98,19 +105,21 @@ static int drm_iommu_attach_device(struct drm_device *drm_dev, · 17 unmodified lines
98 * mapping105 * mapping
99 */106 */
100static void drm_iommu_detach_device(struct drm_device *drm_dev,107static void drm_iommu_detach_device(struct drm_device *drm_dev,
101 struct device *subdrv_dev)108 struct device *subdrv_dev, void **dma_priv)
102{109{
103 struct exynos_drm_private *priv = drm_dev->dev_private;110 struct exynos_drm_private *priv = drm_dev->dev_private;
104 111
105 if (IS_ENABLED(CONFIG_ARM_DMA_USE_IOMMU))112 if (IS_ENABLED(CONFIG_ARM_DMA_USE_IOMMU)) {
106 arm_iommu_detach_device(subdrv_dev);113 arm_iommu_detach_device(subdrv_dev);
107 else if (IS_ENABLED(CONFIG_IOMMU_DMA))114 arm_iommu_attach_device(subdrv_dev, *dma_priv);
115 } else if (IS_ENABLED(CONFIG_IOMMU_DMA))
108 iommu_detach_device(priv->mapping, subdrv_dev);116 iommu_detach_device(priv->mapping, subdrv_dev);
109 117
110 clear_dma_max_seg_size(subdrv_dev);118 clear_dma_max_seg_size(subdrv_dev);
111}119}
112 120
113int exynos_drm_register_dma(struct drm_device *drm, struct device *dev)121int exynos_drm_register_dma(struct drm_device *drm, struct device *dev,
122 void **dma_priv)
114{123{
115 struct exynos_drm_private *priv = drm->dev_private;124 struct exynos_drm_private *priv = drm->dev_private;
116 125
@@ -137,13 +146,14 @@ int exynos_drm_register_dma(struct drm_device *drm, struct device *dev) · 20 unmodified lines
137 priv->mapping = mapping;146 priv->mapping = mapping;
138 }147 }
139 148
140 return drm_iommu_attach_device(drm, dev);149 return drm_iommu_attach_device(drm, dev, dma_priv);
141}150}
142 151
143void exynos_drm_unregister_dma(struct drm_device *drm, struct device *dev)152void exynos_drm_unregister_dma(struct drm_device *drm, struct device *dev,
153 void **dma_priv)
144{154{
145 if (IS_ENABLED(CONFIG_EXYNOS_IOMMU))155 if (IS_ENABLED(CONFIG_EXYNOS_IOMMU))
146 drm_iommu_detach_device(drm, dev);156 drm_iommu_detach_device(drm, dev, dma_priv);
147}157}
148 158
149void exynos_drm_cleanup_dma(struct drm_device *drm)159void exynos_drm_cleanup_dma(struct drm_device *drm)
drivers/gpu/drm/exynos/exynos_drm_drv.h+4−2
@@ -223,8 +223,10 @@ static inline bool is_drm_iommu_supported(struct drm_device *drm_dev) · 222 unmodified lines
223 return priv->mapping ? true : false;223 return priv->mapping ? true : false;
224}224}
225 225
226int exynos_drm_register_dma(struct drm_device *drm, struct device *dev);226int exynos_drm_register_dma(struct drm_device *drm, struct device *dev,
227void exynos_drm_unregister_dma(struct drm_device *drm, struct device *dev);227 void **dma_priv);
228void exynos_drm_unregister_dma(struct drm_device *drm, struct device *dev,
229 void **dma_priv);
228void exynos_drm_cleanup_dma(struct drm_device *drm);230void exynos_drm_cleanup_dma(struct drm_device *drm);
229 231
230#ifdef CONFIG_DRM_EXYNOS_DPI232#ifdef CONFIG_DRM_EXYNOS_DPI
drivers/gpu/drm/exynos/exynos_drm_fimc.c+3−2
@@ -97,6 +97,7 @@ struct fimc_scaler { · 96 unmodified lines
97struct fimc_context {97struct fimc_context {
98 struct exynos_drm_ipp ipp;98 struct exynos_drm_ipp ipp;
99 struct drm_device *drm_dev;99 struct drm_device *drm_dev;
100 void *dma_priv;
100 struct device *dev;101 struct device *dev;
101 struct exynos_drm_ipp_task *task;102 struct exynos_drm_ipp_task *task;
102 struct exynos_drm_ipp_formats *formats;103 struct exynos_drm_ipp_formats *formats;
@@ -1133,7 +1134,7 @@ static int fimc_bind(struct device *dev, struct device *master, void *data) · 1030 unmodified lines
1133 1134
1134 ctx->drm_dev = drm_dev;1135 ctx->drm_dev = drm_dev;
1135 ipp->drm_dev = drm_dev;1136 ipp->drm_dev = drm_dev;
1136 exynos_drm_register_dma(drm_dev, dev);1137 exynos_drm_register_dma(drm_dev, dev, &ctx->dma_priv);
1137 1138
1138 exynos_drm_ipp_register(dev, ipp, &ipp_funcs,1139 exynos_drm_ipp_register(dev, ipp, &ipp_funcs,
1139 DRM_EXYNOS_IPP_CAP_CROP | DRM_EXYNOS_IPP_CAP_ROTATE |1140 DRM_EXYNOS_IPP_CAP_CROP | DRM_EXYNOS_IPP_CAP_ROTATE |
@@ -1153,7 +1154,7 @@ static void fimc_unbind(struct device *dev, struct device *master, · 13 unmodified lines
1153 struct exynos_drm_ipp *ipp = &ctx->ipp;1154 struct exynos_drm_ipp *ipp = &ctx->ipp;
1154 1155
1155 exynos_drm_ipp_unregister(dev, ipp);1156 exynos_drm_ipp_unregister(dev, ipp);
1156 exynos_drm_unregister_dma(drm_dev, dev);1157 exynos_drm_unregister_dma(drm_dev, dev, &ctx->dma_priv);
1157}1158}
1158 1159
1159static const struct component_ops fimc_component_ops = {1160static const struct component_ops fimc_component_ops = {
drivers/gpu/drm/exynos/exynos_drm_fimd.c+3−2
@@ -167,6 +167,7 @@ static struct fimd_driver_data exynos5420_fimd_driver_data = { · 166 unmodified lines
167struct fimd_context {167struct fimd_context {
168 struct device *dev;168 struct device *dev;
169 struct drm_device *drm_dev;169 struct drm_device *drm_dev;
170 void *dma_priv;
170 struct exynos_drm_crtc *crtc;171 struct exynos_drm_crtc *crtc;
171 struct exynos_drm_plane planes[WINDOWS_NR];172 struct exynos_drm_plane planes[WINDOWS_NR];
172 struct exynos_drm_plane_config configs[WINDOWS_NR];173 struct exynos_drm_plane_config configs[WINDOWS_NR];
@@ -1090,7 +1091,7 @@ static int fimd_bind(struct device *dev, struct device *master, void *data) · 917 unmodified lines
1090 if (is_drm_iommu_supported(drm_dev))1091 if (is_drm_iommu_supported(drm_dev))
1091 fimd_clear_channels(ctx->crtc);1092 fimd_clear_channels(ctx->crtc);
1092 1093
1093 return exynos_drm_register_dma(drm_dev, dev);1094 return exynos_drm_register_dma(drm_dev, dev, &ctx->dma_priv);
1094}1095}
1095 1096
1096static void fimd_unbind(struct device *dev, struct device *master,1097static void fimd_unbind(struct device *dev, struct device *master,
@@ -1100,7 +1101,7 @@ static void fimd_unbind(struct device *dev, struct device *master, · 3 unmodified lines
1100 1101
1101 fimd_atomic_disable(ctx->crtc);1102 fimd_atomic_disable(ctx->crtc);
1102 1103
1103 exynos_drm_unregister_dma(ctx->drm_dev, ctx->dev);1104 exynos_drm_unregister_dma(ctx->drm_dev, ctx->dev, &ctx->dma_priv);
1104 1105
1105 if (ctx->encoder)1106 if (ctx->encoder)
1106 exynos_dpi_remove(ctx->encoder);1107 exynos_dpi_remove(ctx->encoder);
drivers/gpu/drm/exynos/exynos_drm_g2d.c+3−2
@@ -232,6 +232,7 @@ struct g2d_runqueue_node { · 231 unmodified lines
232 232
233struct g2d_data {233struct g2d_data {
234 struct device *dev;234 struct device *dev;
235 void *dma_priv;
235 struct clk *gate_clk;236 struct clk *gate_clk;
236 void __iomem *regs;237 void __iomem *regs;
237 int irq;238 int irq;
@@ -1409,7 +1410,7 @@ static int g2d_bind(struct device *dev, struct device *master, void *data) · 1171 unmodified lines
1409 return ret;1410 return ret;
1410 }1411 }
1411 1412
1412 ret = exynos_drm_register_dma(drm_dev, dev);1413 ret = exynos_drm_register_dma(drm_dev, dev, &g2d->dma_priv);
1413 if (ret < 0) {1414 if (ret < 0) {
1414 dev_err(dev, "failed to enable iommu.\n");1415 dev_err(dev, "failed to enable iommu.\n");
1415 g2d_fini_cmdlist(g2d);1416 g2d_fini_cmdlist(g2d);
@@ -1434,7 +1435,7 @@ static void g2d_unbind(struct device *dev, struct device *master, void *data) · 18 unmodified lines
1434 priv->g2d_dev = NULL;1435 priv->g2d_dev = NULL;
1435 1436
1436 cancel_work_sync(&g2d->runqueue_work);1437 cancel_work_sync(&g2d->runqueue_work);
1437 exynos_drm_unregister_dma(g2d->drm_dev, dev);1438 exynos_drm_unregister_dma(g2d->drm_dev, dev, &g2d->dma_priv);
1438}1439}
1439 1440
1440static const struct component_ops g2d_component_ops = {1441static const struct component_ops g2d_component_ops = {
drivers/gpu/drm/exynos/exynos_drm_gsc.c+3−2
@@ -97,6 +97,7 @@ struct gsc_scaler { · 96 unmodified lines
97struct gsc_context {97struct gsc_context {
98 struct exynos_drm_ipp ipp;98 struct exynos_drm_ipp ipp;
99 struct drm_device *drm_dev;99 struct drm_device *drm_dev;
100 void *dma_priv;
100 struct device *dev;101 struct device *dev;
101 struct exynos_drm_ipp_task *task;102 struct exynos_drm_ipp_task *task;
102 struct exynos_drm_ipp_formats *formats;103 struct exynos_drm_ipp_formats *formats;
@@ -1169,7 +1170,7 @@ static int gsc_bind(struct device *dev, struct device *master, void *data) · 1066 unmodified lines
1169 1170
1170 ctx->drm_dev = drm_dev;1171 ctx->drm_dev = drm_dev;
1171 ctx->drm_dev = drm_dev;1172 ctx->drm_dev = drm_dev;
1172 exynos_drm_register_dma(drm_dev, dev);1173 exynos_drm_register_dma(drm_dev, dev, &ctx->dma_priv);
1173 1174
1174 exynos_drm_ipp_register(dev, ipp, &ipp_funcs,1175 exynos_drm_ipp_register(dev, ipp, &ipp_funcs,
1175 DRM_EXYNOS_IPP_CAP_CROP | DRM_EXYNOS_IPP_CAP_ROTATE |1176 DRM_EXYNOS_IPP_CAP_CROP | DRM_EXYNOS_IPP_CAP_ROTATE |
@@ -1189,7 +1190,7 @@ static void gsc_unbind(struct device *dev, struct device *master, · 13 unmodified lines
1189 struct exynos_drm_ipp *ipp = &ctx->ipp;1190 struct exynos_drm_ipp *ipp = &ctx->ipp;
1190 1191
1191 exynos_drm_ipp_unregister(dev, ipp);1192 exynos_drm_ipp_unregister(dev, ipp);
1192 exynos_drm_unregister_dma(drm_dev, dev);1193 exynos_drm_unregister_dma(drm_dev, dev, &ctx->dma_priv);
1193}1194}
1194 1195
1195static const struct component_ops gsc_component_ops = {1196static const struct component_ops gsc_component_ops = {
drivers/gpu/drm/exynos/exynos_drm_rotator.c+3−2
@@ -56,6 +56,7 @@ struct rot_variant { · 55 unmodified lines
56struct rot_context {56struct rot_context {
57 struct exynos_drm_ipp ipp;57 struct exynos_drm_ipp ipp;
58 struct drm_device *drm_dev;58 struct drm_device *drm_dev;
59 void *dma_priv;
59 struct device *dev;60 struct device *dev;
60 void __iomem *regs;61 void __iomem *regs;
61 struct clk *clock;62 struct clk *clock;
@@ -243,7 +244,7 @@ static int rotator_bind(struct device *dev, struct device *master, void *data) · 181 unmodified lines
243 244
244 rot->drm_dev = drm_dev;245 rot->drm_dev = drm_dev;
245 ipp->drm_dev = drm_dev;246 ipp->drm_dev = drm_dev;
246 exynos_drm_register_dma(drm_dev, dev);247 exynos_drm_register_dma(drm_dev, dev, &rot->dma_priv);
247 248
248 exynos_drm_ipp_register(dev, ipp, &ipp_funcs,249 exynos_drm_ipp_register(dev, ipp, &ipp_funcs,
249 DRM_EXYNOS_IPP_CAP_CROP | DRM_EXYNOS_IPP_CAP_ROTATE,250 DRM_EXYNOS_IPP_CAP_CROP | DRM_EXYNOS_IPP_CAP_ROTATE,
@@ -261,7 +262,7 @@ static void rotator_unbind(struct device *dev, struct device *master, · 11 unmodified lines
261 struct exynos_drm_ipp *ipp = &rot->ipp;262 struct exynos_drm_ipp *ipp = &rot->ipp;
262 263
263 exynos_drm_ipp_unregister(dev, ipp);264 exynos_drm_ipp_unregister(dev, ipp);
264 exynos_drm_unregister_dma(rot->drm_dev, rot->dev);265 exynos_drm_unregister_dma(rot->drm_dev, rot->dev, &rot->dma_priv);
265}266}
266 267
267static const struct component_ops rotator_component_ops = {268static const struct component_ops rotator_component_ops = {
drivers/gpu/drm/exynos/exynos_drm_scaler.c+4−2
@@ -39,6 +39,7 @@ struct scaler_data { · 38 unmodified lines
39struct scaler_context {39struct scaler_context {
40 struct exynos_drm_ipp ipp;40 struct exynos_drm_ipp ipp;
41 struct drm_device *drm_dev;41 struct drm_device *drm_dev;
42 void *dma_priv;
42 struct device *dev;43 struct device *dev;
43 void __iomem *regs;44 void __iomem *regs;
44 struct clk *clock[SCALER_MAX_CLK];45 struct clk *clock[SCALER_MAX_CLK];
@@ -450,7 +451,7 @@ static int scaler_bind(struct device *dev, struct device *master, void *data) · 405 unmodified lines
450 451
451 scaler->drm_dev = drm_dev;452 scaler->drm_dev = drm_dev;
452 ipp->drm_dev = drm_dev;453 ipp->drm_dev = drm_dev;
453 exynos_drm_register_dma(drm_dev, dev);454 exynos_drm_register_dma(drm_dev, dev, &scaler->dma_priv);
454 455
455 exynos_drm_ipp_register(dev, ipp, &ipp_funcs,456 exynos_drm_ipp_register(dev, ipp, &ipp_funcs,
456 DRM_EXYNOS_IPP_CAP_CROP | DRM_EXYNOS_IPP_CAP_ROTATE |457 DRM_EXYNOS_IPP_CAP_CROP | DRM_EXYNOS_IPP_CAP_ROTATE |
@@ -470,7 +471,8 @@ static void scaler_unbind(struct device *dev, struct device *master, · 13 unmodified lines
470 struct exynos_drm_ipp *ipp = &scaler->ipp;471 struct exynos_drm_ipp *ipp = &scaler->ipp;
471 472
472 exynos_drm_ipp_unregister(dev, ipp);473 exynos_drm_ipp_unregister(dev, ipp);
473 exynos_drm_unregister_dma(scaler->drm_dev, scaler->dev);474 exynos_drm_unregister_dma(scaler->drm_dev, scaler->dev,
475 &scaler->dma_priv);
474}476}
475 477
476static const struct component_ops scaler_component_ops = {478static const struct component_ops scaler_component_ops = {
drivers/gpu/drm/exynos/exynos_mixer.c+5−2
@@ -94,6 +94,7 @@ struct mixer_context { · 93 unmodified lines
94 struct platform_device *pdev;94 struct platform_device *pdev;
95 struct device *dev;95 struct device *dev;
96 struct drm_device *drm_dev;96 struct drm_device *drm_dev;
97 void *dma_priv;
97 struct exynos_drm_crtc *crtc;98 struct exynos_drm_crtc *crtc;
98 struct exynos_drm_plane planes[MIXER_WIN_NR];99 struct exynos_drm_plane planes[MIXER_WIN_NR];
99 unsigned long flags;100 unsigned long flags;
@@ -894,12 +895,14 @@ static int mixer_initialize(struct mixer_context *mixer_ctx, · 794 unmodified lines
894 }895 }
895 }896 }
896 897
897 return exynos_drm_register_dma(drm_dev, mixer_ctx->dev);898 return exynos_drm_register_dma(drm_dev, mixer_ctx->dev,
899 &mixer_ctx->dma_priv);
898}900}
899 901
900static void mixer_ctx_remove(struct mixer_context *mixer_ctx)902static void mixer_ctx_remove(struct mixer_context *mixer_ctx)
901{903{
902 exynos_drm_unregister_dma(mixer_ctx->drm_dev, mixer_ctx->dev);904 exynos_drm_unregister_dma(mixer_ctx->drm_dev, mixer_ctx->dev,
905 &mixer_ctx->dma_priv);
903}906}
904 907
905static int mixer_enable_vblank(struct exynos_drm_crtc *crtc)908static int mixer_enable_vblank(struct exynos_drm_crtc *crtc)
drivers/gpu/drm/i915/gem/i915_gem_execbuffer.c+2−1
@@ -423,7 +423,8 @@ eb_validate_vma(struct i915_execbuffer *eb, · 422 unmodified lines
423 if (unlikely(entry->flags & eb->invalid_flags))423 if (unlikely(entry->flags & eb->invalid_flags))
424 return -EINVAL;424 return -EINVAL;
425 425
426 if (unlikely(entry->alignment && !is_power_of_2(entry->alignment)))426 if (unlikely(entry->alignment &&
427 !is_power_of_2_u64(entry->alignment)))
427 return -EINVAL;428 return -EINVAL;
428 429
429 /*430 /*
drivers/gpu/drm/i915/gt/intel_lrc.c+30−51
@@ -1600,17 +1600,6 @@ static void virtual_xfer_breadcrumbs(struct virtual_engine *ve, · 1599 unmodified lines
1600 spin_unlock(&old->breadcrumbs.irq_lock);1600 spin_unlock(&old->breadcrumbs.irq_lock);
1601}1601}
1602 1602
1603static struct i915_request *
1604last_active(const struct intel_engine_execlists *execlists)
1605{
1606 struct i915_request * const *last = READ_ONCE(execlists->active);
1607
1608 while (*last && i915_request_completed(*last))
1609 last++;
1610
1611 return *last;
1612}
1613
1614#define for_each_waiter(p__, rq__) \1603#define for_each_waiter(p__, rq__) \
1615 list_for_each_entry_lockless(p__, \1604 list_for_each_entry_lockless(p__, \
1616 &(rq__)->sched.waiters_list, \1605 &(rq__)->sched.waiters_list, \
@@ -1679,11 +1668,9 @@ need_timeslice(struct intel_engine_cs *engine, const struct i915_request *rq) · 62 unmodified lines
1679 if (!intel_engine_has_timeslices(engine))1668 if (!intel_engine_has_timeslices(engine))
1680 return false;1669 return false;
1681 1670
1682 if (list_is_last(&rq->sched.link, &engine->active.requests))1671 hint = engine->execlists.queue_priority_hint;
1683 return false;1672 if (!list_is_last(&rq->sched.link, &engine->active.requests))
1684 1673 hint = max(hint, rq_prio(list_next_entry(rq, sched.link)));
1685 hint = max(rq_prio(list_next_entry(rq, sched.link)),
1686 engine->execlists.queue_priority_hint);
1687 1674
1688 return hint >= effective_prio(rq);1675 return hint >= effective_prio(rq);
1689}1676}
@@ -1725,16 +1712,26 @@ static void set_timeslice(struct intel_engine_cs *engine) · 35 unmodified lines
1725 set_timer_ms(&engine->execlists.timer, active_timeslice(engine));1712 set_timer_ms(&engine->execlists.timer, active_timeslice(engine));
1726}1713}
1727 1714
1715static void start_timeslice(struct intel_engine_cs *engine)
1716{
1717 struct intel_engine_execlists *execlists = &engine->execlists;
1718
1719 execlists->switch_priority_hint = execlists->queue_priority_hint;
1720
1721 if (timer_pending(&execlists->timer))
1722 return;
1723
1724 set_timer_ms(&execlists->timer, timeslice(engine));
1725}
1726
1728static void record_preemption(struct intel_engine_execlists *execlists)1727static void record_preemption(struct intel_engine_execlists *execlists)
1729{1728{
1730 (void)I915_SELFTEST_ONLY(execlists->preempt_hang.count++);1729 (void)I915_SELFTEST_ONLY(execlists->preempt_hang.count++);
1731}1730}
1732 1731
1733static unsigned long active_preempt_timeout(struct intel_engine_cs *engine)1732static unsigned long active_preempt_timeout(struct intel_engine_cs *engine,
1733 const struct i915_request *rq)
1734{1734{
1735 struct i915_request *rq;
1736
1737 rq = last_active(&engine->execlists);
1738 if (!rq)1735 if (!rq)
1739 return 0;1736 return 0;
1740 1737
@@ -1745,13 +1742,14 @@ static unsigned long active_preempt_timeout(struct intel_engine_cs *engine) · 4 unmodified lines
1745 return READ_ONCE(engine->props.preempt_timeout_ms);1742 return READ_ONCE(engine->props.preempt_timeout_ms);
1746}1743}
1747 1744
1748static void set_preempt_timeout(struct intel_engine_cs *engine)1745static void set_preempt_timeout(struct intel_engine_cs *engine,
1746 const struct i915_request *rq)
1749{1747{
1750 if (!intel_engine_has_preempt_reset(engine))1748 if (!intel_engine_has_preempt_reset(engine))
1751 return;1749 return;
1752 1750
1753 set_timer_ms(&engine->execlists.preempt,1751 set_timer_ms(&engine->execlists.preempt,
1754 active_preempt_timeout(engine));1752 active_preempt_timeout(engine, rq));
1755}1753}
1756 1754
1757static inline void clear_ports(struct i915_request **ports, int count)1755static inline void clear_ports(struct i915_request **ports, int count)
@@ -1764,6 +1762,7 @@ static void execlists_dequeue(struct intel_engine_cs *engine) · 6 unmodified lines
1764 struct intel_engine_execlists * const execlists = &engine->execlists;1762 struct intel_engine_execlists * const execlists = &engine->execlists;
1765 struct i915_request **port = execlists->pending;1763 struct i915_request **port = execlists->pending;
1766 struct i915_request ** const last_port = port + execlists->port_mask;1764 struct i915_request ** const last_port = port + execlists->port_mask;
1765 struct i915_request * const *active;
1767 struct i915_request *last;1766 struct i915_request *last;
1768 struct rb_node *rb;1767 struct rb_node *rb;
1769 bool submit = false;1768 bool submit = false;
@@ -1818,7 +1817,10 @@ static void execlists_dequeue(struct intel_engine_cs *engine) · 48 unmodified lines
1818 * i.e. we will retrigger preemption following the ack in case1817 * i.e. we will retrigger preemption following the ack in case
1819 * of trouble.1818 * of trouble.
1820 */1819 */
1821 last = last_active(execlists);1820 active = READ_ONCE(execlists->active);
1821 while ((last = *active) && i915_request_completed(last))
1822 active++;
1823
1822 if (last) {1824 if (last) {
1823 if (need_preempt(engine, last, rb)) {1825 if (need_preempt(engine, last, rb)) {
1824 ENGINE_TRACE(engine,1826 ENGINE_TRACE(engine,
@@ -1888,11 +1890,7 @@ static void execlists_dequeue(struct intel_engine_cs *engine) · 63 unmodified lines
1888 * Even if ELSP[1] is occupied and not worthy1890 * Even if ELSP[1] is occupied and not worthy
1889 * of timeslices, our queue might be.1891 * of timeslices, our queue might be.
1890 */1892 */
1891 if (!execlists->timer.expires &&1893 start_timeslice(engine);
1892 need_timeslice(engine, last))
1893 set_timer_ms(&execlists->timer,
1894 timeslice(engine));
1895
1896 return;1894 return;
1897 }1895 }
1898 }1896 }
@@ -1927,7 +1925,8 @@ static void execlists_dequeue(struct intel_engine_cs *engine) · 28 unmodified lines
1927 1925
1928 if (last && !can_merge_rq(last, rq)) {1926 if (last && !can_merge_rq(last, rq)) {
1929 spin_unlock(&ve->base.active.lock);1927 spin_unlock(&ve->base.active.lock);
1930 return; /* leave this for another */1928 start_timeslice(engine);
1929 return; /* leave this for another sibling */
1931 }1930 }
1932 1931
1933 ENGINE_TRACE(engine,1932 ENGINE_TRACE(engine,
@@ -2103,7 +2102,7 @@ done: · 169 unmodified lines
2103 * Skip if we ended up with exactly the same set of requests,2102 * Skip if we ended up with exactly the same set of requests,
2104 * e.g. trying to timeslice a pair of ordered contexts2103 * e.g. trying to timeslice a pair of ordered contexts
2105 */2104 */
2106 if (!memcmp(execlists->active, execlists->pending,2105 if (!memcmp(active, execlists->pending,
2107 (port - execlists->pending + 1) * sizeof(*port))) {2106 (port - execlists->pending + 1) * sizeof(*port))) {
2108 do2107 do
2109 execlists_schedule_out(fetch_and_zero(port));2108 execlists_schedule_out(fetch_and_zero(port));
@@ -2114,7 +2113,7 @@ done: · 4 unmodified lines
2114 clear_ports(port + 1, last_port - port);2113 clear_ports(port + 1, last_port - port);
2115 2114
2116 execlists_submit_ports(engine);2115 execlists_submit_ports(engine);
2117 set_preempt_timeout(engine);2116 set_preempt_timeout(engine, *active);
2118 } else {2117 } else {
2119skip_submit:2118skip_submit:
2120 ring_set_paused(engine, 0);2119 ring_set_paused(engine, 0);
@@ -4001,26 +4000,6 @@ static int gen12_emit_flush_render(struct i915_request *request, · 1880 unmodified lines
4001 4000
4002 *cs++ = preparser_disable(false);4001 *cs++ = preparser_disable(false);
4003 intel_ring_advance(request, cs);4002 intel_ring_advance(request, cs);
4004
4005 /*
4006 * Wa_1604544889:tgl
4007 */
4008 if (IS_TGL_REVID(request->i915, TGL_REVID_A0, TGL_REVID_A0)) {
4009 flags = 0;
4010 flags |= PIPE_CONTROL_CS_STALL;
4011 flags |= PIPE_CONTROL_HDC_PIPELINE_FLUSH;
4012
4013 flags |= PIPE_CONTROL_STORE_DATA_INDEX;
4014 flags |= PIPE_CONTROL_QW_WRITE;
4015
4016 cs = intel_ring_begin(request, 6);
4017 if (IS_ERR(cs))
4018 return PTR_ERR(cs);
4019
4020 cs = gen8_emit_pipe_control(cs, flags,
4021 LRC_PPHWSP_SCRATCH_ADDR);
4022 intel_ring_advance(request, cs);
4023 }
4024 }4003 }
4025 4004
4026 return 0;4005 return 0;
drivers/gpu/drm/i915/gt/intel_timeline.c+6−2
@@ -192,11 +192,15 @@ static void cacheline_release(struct intel_timeline_cacheline *cl) · 191 unmodified lines
192 192
193static void cacheline_free(struct intel_timeline_cacheline *cl)193static void cacheline_free(struct intel_timeline_cacheline *cl)
194{194{
195 if (!i915_active_acquire_if_busy(&cl->active)) {
196 __idle_cacheline_free(cl);
197 return;
198 }
199
195 GEM_BUG_ON(ptr_test_bit(cl->vaddr, CACHELINE_FREE));200 GEM_BUG_ON(ptr_test_bit(cl->vaddr, CACHELINE_FREE));
196 cl->vaddr = ptr_set_bit(cl->vaddr, CACHELINE_FREE);201 cl->vaddr = ptr_set_bit(cl->vaddr, CACHELINE_FREE);
197 202
198 if (i915_active_is_idle(&cl->active))203 i915_active_release(&cl->active);
199 __idle_cacheline_free(cl);
200}204}
201 205
202int intel_timeline_init(struct intel_timeline *timeline,206int intel_timeline_init(struct intel_timeline *timeline,
drivers/gpu/drm/i915/gt/intel_workarounds.c+22−3
@@ -1529,15 +1529,34 @@ err_obj: · 1528 unmodified lines
1529 return ERR_PTR(err);1529 return ERR_PTR(err);
1530}1530}
1531 1531
1532static const struct {
1533 u32 start;
1534 u32 end;
1535} mcr_ranges_gen8[] = {
1536 { .start = 0x5500, .end = 0x55ff },
1537 { .start = 0x7000, .end = 0x7fff },
1538 { .start = 0x9400, .end = 0x97ff },
1539 { .start = 0xb000, .end = 0xb3ff },
1540 { .start = 0xe000, .end = 0xe7ff },
1541 {},
1542};
1543
1532static bool mcr_range(struct drm_i915_private *i915, u32 offset)1544static bool mcr_range(struct drm_i915_private *i915, u32 offset)
1533{1545{
1546 int i;
1547
1548 if (INTEL_GEN(i915) < 8)
1549 return false;
1550
1534 /*1551 /*
1535 * Registers in this range are affected by the MCR selector1552 * Registers in these ranges are affected by the MCR selector
1536 * which only controls CPU initiated MMIO. Routing does not1553 * which only controls CPU initiated MMIO. Routing does not
1537 * work for CS access so we cannot verify them on this path.1554 * work for CS access so we cannot verify them on this path.
1538 */1555 */
1539 if (INTEL_GEN(i915) >= 8 && (offset >= 0xb000 && offset <= 0xb4ff))1556 for (i = 0; mcr_ranges_gen8[i].start; i++)
1540 return true;1557 if (offset >= mcr_ranges_gen8[i].start &&
1558 offset <= mcr_ranges_gen8[i].end)
1559 return true;
1541 1560
1542 return false;1561 return false;
1543}1562}
drivers/gpu/drm/i915/gvt/display.c+2−1
@@ -457,7 +457,8 @@ void intel_vgpu_emulate_hotplug(struct intel_vgpu *vgpu, bool connected) · 456 unmodified lines
457 struct drm_i915_private *dev_priv = vgpu->gvt->dev_priv;457 struct drm_i915_private *dev_priv = vgpu->gvt->dev_priv;
458 458
459 /* TODO: add more platforms support */459 /* TODO: add more platforms support */
460 if (IS_SKYLAKE(dev_priv) || IS_KABYLAKE(dev_priv)) {460 if (IS_SKYLAKE(dev_priv) || IS_KABYLAKE(dev_priv) ||
461 IS_COFFEELAKE(dev_priv)) {
461 if (connected) {462 if (connected) {
462 vgpu_vreg_t(vgpu, SFUSE_STRAP) |=463 vgpu_vreg_t(vgpu, SFUSE_STRAP) |=
463 SFUSE_STRAP_DDID_DETECTED;464 SFUSE_STRAP_DDID_DETECTED;
drivers/gpu/drm/i915/gvt/opregion.c+2−3
@@ -147,15 +147,14 @@ static void virt_vbt_generation(struct vbt *v) · 146 unmodified lines
147 /* there's features depending on version! */147 /* there's features depending on version! */
148 v->header.version = 155;148 v->header.version = 155;
149 v->header.header_size = sizeof(v->header);149 v->header.header_size = sizeof(v->header);
150 v->header.vbt_size = sizeof(struct vbt) - sizeof(v->header);150 v->header.vbt_size = sizeof(struct vbt);
151 v->header.bdb_offset = offsetof(struct vbt, bdb_header);151 v->header.bdb_offset = offsetof(struct vbt, bdb_header);
152 152
153 strcpy(&v->bdb_header.signature[0], "BIOS_DATA_BLOCK");153 strcpy(&v->bdb_header.signature[0], "BIOS_DATA_BLOCK");
154 v->bdb_header.version = 186; /* child_dev_size = 33 */154 v->bdb_header.version = 186; /* child_dev_size = 33 */
155 v->bdb_header.header_size = sizeof(v->bdb_header);155 v->bdb_header.header_size = sizeof(v->bdb_header);
156 156
157 v->bdb_header.bdb_size = sizeof(struct vbt) - sizeof(struct vbt_header)157 v->bdb_header.bdb_size = sizeof(struct vbt) - sizeof(struct vbt_header);
158 - sizeof(struct bdb_header);
159 158
160 /* general features */159 /* general features */
161 v->general_features_header.id = BDB_GENERAL_FEATURES;160 v->general_features_header.id = BDB_GENERAL_FEATURES;
drivers/gpu/drm/i915/gvt/vgpu.c+9−3
@@ -272,10 +272,17 @@ void intel_gvt_destroy_vgpu(struct intel_vgpu *vgpu) · 271 unmodified lines
272{272{
273 struct intel_gvt *gvt = vgpu->gvt;273 struct intel_gvt *gvt = vgpu->gvt;
274 274
275 mutex_lock(&vgpu->vgpu_lock);
276
277 WARN(vgpu->active, "vGPU is still active!\n");275 WARN(vgpu->active, "vGPU is still active!\n");
278 276
277 /*
278 * remove idr first so later clean can judge if need to stop
279 * service if no active vgpu.
280 */
281 mutex_lock(&gvt->lock);
282 idr_remove(&gvt->vgpu_idr, vgpu->id);
283 mutex_unlock(&gvt->lock);
284
285 mutex_lock(&vgpu->vgpu_lock);
279 intel_gvt_debugfs_remove_vgpu(vgpu);286 intel_gvt_debugfs_remove_vgpu(vgpu);
280 intel_vgpu_clean_sched_policy(vgpu);287 intel_vgpu_clean_sched_policy(vgpu);
281 intel_vgpu_clean_submission(vgpu);288 intel_vgpu_clean_submission(vgpu);
@@ -290,7 +297,6 @@ void intel_gvt_destroy_vgpu(struct intel_vgpu *vgpu) · 8 unmodified lines
290 mutex_unlock(&vgpu->vgpu_lock);297 mutex_unlock(&vgpu->vgpu_lock);
291 298
292 mutex_lock(&gvt->lock);299 mutex_lock(&gvt->lock);
293 idr_remove(&gvt->vgpu_idr, vgpu->id);
294 if (idr_is_empty(&gvt->vgpu_idr))300 if (idr_is_empty(&gvt->vgpu_idr))
295 intel_gvt_clean_irq(gvt);301 intel_gvt_clean_irq(gvt);
296 intel_gvt_update_vgpu_types(gvt);302 intel_gvt_update_vgpu_types(gvt);
drivers/gpu/drm/i915/i915_request.c+20−8
@@ -527,19 +527,31 @@ submit_notify(struct i915_sw_fence *fence, enum i915_sw_fence_notify state) · 526 unmodified lines
527 return NOTIFY_DONE;527 return NOTIFY_DONE;
528}528}
529 529
530static void irq_semaphore_cb(struct irq_work *wrk)
531{
532 struct i915_request *rq =
533 container_of(wrk, typeof(*rq), semaphore_work);
534
535 i915_schedule_bump_priority(rq, I915_PRIORITY_NOSEMAPHORE);
536 i915_request_put(rq);
537}
538
530static int __i915_sw_fence_call539static int __i915_sw_fence_call
531semaphore_notify(struct i915_sw_fence *fence, enum i915_sw_fence_notify state)540semaphore_notify(struct i915_sw_fence *fence, enum i915_sw_fence_notify state)
532{541{
533 struct i915_request *request =542 struct i915_request *rq = container_of(fence, typeof(*rq), semaphore);
534 container_of(fence, typeof(*request), semaphore);
535 543
536 switch (state) {544 switch (state) {
537 case FENCE_COMPLETE:545 case FENCE_COMPLETE:
538 i915_schedule_bump_priority(request, I915_PRIORITY_NOSEMAPHORE);546 if (!(READ_ONCE(rq->sched.attr.priority) & I915_PRIORITY_NOSEMAPHORE)) {
547 i915_request_get(rq);
548 init_irq_work(&rq->semaphore_work, irq_semaphore_cb);
549 irq_work_queue(&rq->semaphore_work);
550 }
539 break;551 break;
540 552
541 case FENCE_FREE:553 case FENCE_FREE:
542 i915_request_put(request);554 i915_request_put(rq);
543 break;555 break;
544 }556 }
545 557
@@ -776,8 +788,8 @@ i915_request_await_start(struct i915_request *rq, struct i915_request *signal) · 230 unmodified lines
776 struct dma_fence *fence;788 struct dma_fence *fence;
777 int err;789 int err;
778 790
779 GEM_BUG_ON(i915_request_timeline(rq) ==791 if (i915_request_timeline(rq) == rcu_access_pointer(signal->timeline))
780 rcu_access_pointer(signal->timeline));792 return 0;
781 793
782 if (i915_request_started(signal))794 if (i915_request_started(signal))
783 return 0;795 return 0;
@@ -821,7 +833,7 @@ i915_request_await_start(struct i915_request *rq, struct i915_request *signal) · 37 unmodified lines
821 return 0;833 return 0;
822 834
823 err = 0;835 err = 0;
824 if (intel_timeline_sync_is_later(i915_request_timeline(rq), fence))836 if (!intel_timeline_sync_is_later(i915_request_timeline(rq), fence))
825 err = i915_sw_fence_await_dma_fence(&rq->submit,837 err = i915_sw_fence_await_dma_fence(&rq->submit,
826 fence, 0,838 fence, 0,
827 I915_FENCE_GFP);839 I915_FENCE_GFP);
@@ -1318,9 +1330,9 @@ void __i915_request_queue(struct i915_request *rq, · 490 unmodified lines
1318 * decide whether to preempt the entire chain so that it is ready to1330 * decide whether to preempt the entire chain so that it is ready to
1319 * run at the earliest possible convenience.1331 * run at the earliest possible convenience.
1320 */1332 */
1321 i915_sw_fence_commit(&rq->semaphore);
1322 if (attr && rq->engine->schedule)1333 if (attr && rq->engine->schedule)
1323 rq->engine->schedule(rq, attr);1334 rq->engine->schedule(rq, attr);
1335 i915_sw_fence_commit(&rq->semaphore);
1324 i915_sw_fence_commit(&rq->submit);1336 i915_sw_fence_commit(&rq->submit);
1325}1337}
1326 1338
drivers/gpu/drm/i915/i915_request.h+2−0
@@ -26,6 +26,7 @@ · 25 unmodified lines
26#define I915_REQUEST_H26#define I915_REQUEST_H
27 27
28#include <linux/dma-fence.h>28#include <linux/dma-fence.h>
29#include <linux/irq_work.h>
29#include <linux/lockdep.h>30#include <linux/lockdep.h>
30 31
31#include "gem/i915_gem_context_types.h"32#include "gem/i915_gem_context_types.h"
@@ -208,6 +209,7 @@ struct i915_request { · 176 unmodified lines
208 };209 };
209 struct list_head execute_cb;210 struct list_head execute_cb;
210 struct i915_sw_fence semaphore;211 struct i915_sw_fence semaphore;
212 struct irq_work semaphore_work;
211 213
212 /*214 /*
213 * A list of everyone we wait upon, and everyone who waits upon us.215 * A list of everyone we wait upon, and everyone who waits upon us.
drivers/gpu/drm/i915/i915_utils.h+5−0
@@ -234,6 +234,11 @@ static inline u64 ptr_to_u64(const void *ptr) · 233 unmodified lines
234 __idx; \234 __idx; \
235})235})
236 236
237static inline bool is_power_of_2_u64(u64 n)
238{
239 return (n != 0 && ((n & (n - 1)) == 0));
240}
241
237static inline void __list_del_many(struct list_head *head,242static inline void __list_del_many(struct list_head *head,
238 struct list_head *first)243 struct list_head *first)
239{244{
drivers/hid/hid-google-hammer.c+2−0
@@ -532,6 +532,8 @@ static const struct hid_device_id hammer_devices[] = { · 531 unmodified lines
532 USB_VENDOR_ID_GOOGLE, USB_DEVICE_ID_GOOGLE_MAGNEMITE) },532 USB_VENDOR_ID_GOOGLE, USB_DEVICE_ID_GOOGLE_MAGNEMITE) },
533 { HID_DEVICE(BUS_USB, HID_GROUP_GENERIC,533 { HID_DEVICE(BUS_USB, HID_GROUP_GENERIC,
534 USB_VENDOR_ID_GOOGLE, USB_DEVICE_ID_GOOGLE_MASTERBALL) },534 USB_VENDOR_ID_GOOGLE, USB_DEVICE_ID_GOOGLE_MASTERBALL) },
535 { HID_DEVICE(BUS_USB, HID_GROUP_GENERIC,
536 USB_VENDOR_ID_GOOGLE, USB_DEVICE_ID_GOOGLE_MOONBALL) },
535 { HID_DEVICE(BUS_USB, HID_GROUP_GENERIC,537 { HID_DEVICE(BUS_USB, HID_GROUP_GENERIC,
536 USB_VENDOR_ID_GOOGLE, USB_DEVICE_ID_GOOGLE_STAFF) },538 USB_VENDOR_ID_GOOGLE, USB_DEVICE_ID_GOOGLE_STAFF) },
537 { HID_DEVICE(BUS_USB, HID_GROUP_GENERIC,539 { HID_DEVICE(BUS_USB, HID_GROUP_GENERIC,
drivers/hid/hid-ids.h+2−0
@@ -478,6 +478,7 @@ · 477 unmodified lines
478#define USB_DEVICE_ID_GOOGLE_WHISKERS 0x5030478#define USB_DEVICE_ID_GOOGLE_WHISKERS 0x5030
479#define USB_DEVICE_ID_GOOGLE_MASTERBALL 0x503c479#define USB_DEVICE_ID_GOOGLE_MASTERBALL 0x503c
480#define USB_DEVICE_ID_GOOGLE_MAGNEMITE 0x503d480#define USB_DEVICE_ID_GOOGLE_MAGNEMITE 0x503d
481#define USB_DEVICE_ID_GOOGLE_MOONBALL 0x5044
481 482
482#define USB_VENDOR_ID_GOTOP 0x08f2483#define USB_VENDOR_ID_GOTOP 0x08f2
483#define USB_DEVICE_ID_SUPER_Q2 0x007f484#define USB_DEVICE_ID_SUPER_Q2 0x007f
@@ -726,6 +727,7 @@ · 242 unmodified lines
726#define USB_DEVICE_ID_LENOVO_X1_COVER 0x6085727#define USB_DEVICE_ID_LENOVO_X1_COVER 0x6085
727#define USB_DEVICE_ID_LENOVO_X1_TAB 0x60a3728#define USB_DEVICE_ID_LENOVO_X1_TAB 0x60a3
728#define USB_DEVICE_ID_LENOVO_X1_TAB3 0x60b5729#define USB_DEVICE_ID_LENOVO_X1_TAB3 0x60b5
730#define USB_DEVICE_ID_LENOVO_PIXART_USB_MOUSE_608D 0x608d
729 731
730#define USB_VENDOR_ID_LG 0x1fd2732#define USB_VENDOR_ID_LG 0x1fd2
731#define USB_DEVICE_ID_LG_MULTITOUCH 0x0064733#define USB_DEVICE_ID_LG_MULTITOUCH 0x0064
drivers/hid/hid-picolcd_fb.c+2−2
@@ -458,9 +458,9 @@ static ssize_t picolcd_fb_update_rate_show(struct device *dev, · 457 unmodified lines
458 if (ret >= PAGE_SIZE)458 if (ret >= PAGE_SIZE)
459 break;459 break;
460 else if (i == fb_update_rate)460 else if (i == fb_update_rate)
461 ret += snprintf(buf+ret, PAGE_SIZE-ret, "[%u] ", i);461 ret += scnprintf(buf+ret, PAGE_SIZE-ret, "[%u] ", i);
462 else462 else
463 ret += snprintf(buf+ret, PAGE_SIZE-ret, "%u ", i);463 ret += scnprintf(buf+ret, PAGE_SIZE-ret, "%u ", i);
464 if (ret > 0)464 if (ret > 0)
465 buf[min(ret, (size_t)PAGE_SIZE)-1] = '\n';465 buf[min(ret, (size_t)PAGE_SIZE)-1] = '\n';
466 return ret;466 return ret;
drivers/hid/hid-quirks.c+1−0
@@ -103,6 +103,7 @@ static const struct hid_device_id hid_quirks[] = { · 102 unmodified lines
103 { HID_USB_DEVICE(USB_VENDOR_ID_KYE, USB_DEVICE_ID_KYE_PENSKETCH_M912), HID_QUIRK_MULTI_INPUT },103 { HID_USB_DEVICE(USB_VENDOR_ID_KYE, USB_DEVICE_ID_KYE_PENSKETCH_M912), HID_QUIRK_MULTI_INPUT },
104 { HID_USB_DEVICE(USB_VENDOR_ID_KYE, USB_DEVICE_ID_KYE_EASYPEN_M406XE), HID_QUIRK_MULTI_INPUT },104 { HID_USB_DEVICE(USB_VENDOR_ID_KYE, USB_DEVICE_ID_KYE_EASYPEN_M406XE), HID_QUIRK_MULTI_INPUT },
105 { HID_USB_DEVICE(USB_VENDOR_ID_KYE, USB_DEVICE_ID_PIXART_USB_OPTICAL_MOUSE_ID2), HID_QUIRK_ALWAYS_POLL },105 { HID_USB_DEVICE(USB_VENDOR_ID_KYE, USB_DEVICE_ID_PIXART_USB_OPTICAL_MOUSE_ID2), HID_QUIRK_ALWAYS_POLL },
106 { HID_USB_DEVICE(USB_VENDOR_ID_LENOVO, USB_DEVICE_ID_LENOVO_PIXART_USB_MOUSE_608D), HID_QUIRK_ALWAYS_POLL },
106 { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_C007), HID_QUIRK_ALWAYS_POLL },107 { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_C007), HID_QUIRK_ALWAYS_POLL },
107 { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_C077), HID_QUIRK_ALWAYS_POLL },108 { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_C077), HID_QUIRK_ALWAYS_POLL },
108 { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_KEYBOARD_G710_PLUS), HID_QUIRK_NOGET },109 { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_KEYBOARD_G710_PLUS), HID_QUIRK_NOGET },
drivers/hid/hid-sensor-custom.c+3−3
@@ -313,7 +313,7 @@ static ssize_t show_value(struct device *dev, struct device_attribute *attr, · 312 unmodified lines
313 313
314 while (i < ret) {314 while (i < ret) {
315 if (i + attribute->size > ret) {315 if (i + attribute->size > ret) {
316 len += snprintf(&buf[len],316 len += scnprintf(&buf[len],
317 PAGE_SIZE - len,317 PAGE_SIZE - len,
318 "%d ", values[i]);318 "%d ", values[i]);
319 break;319 break;
@@ -336,10 +336,10 @@ static ssize_t show_value(struct device *dev, struct device_attribute *attr, · 16 unmodified lines
336 ++i;336 ++i;
337 break;337 break;
338 }338 }
339 len += snprintf(&buf[len], PAGE_SIZE - len,339 len += scnprintf(&buf[len], PAGE_SIZE - len,
340 "%lld ", value);340 "%lld ", value);
341 }341 }
342 len += snprintf(&buf[len], PAGE_SIZE - len, "\n");342 len += scnprintf(&buf[len], PAGE_SIZE - len, "\n");
343 343
344 return len;344 return len;
345 } else if (input)345 } else if (input)
drivers/hwtracing/intel_th/msu.c+7−6
@@ -719,9 +719,6 @@ static int msc_win_set_lockout(struct msc_window *win, · 718 unmodified lines
719 719
720 if (old != expect) {720 if (old != expect) {
721 ret = -EINVAL;721 ret = -EINVAL;
722 dev_warn_ratelimited(msc_dev(win->msc),
723 "expected lockout state %d, got %d\n",
724 expect, old);
725 goto unlock;722 goto unlock;
726 }723 }
727 724
@@ -742,6 +739,10 @@ unlock: · 14 unmodified lines
742 /* from intel_th_msc_window_unlock(), don't warn if not locked */739 /* from intel_th_msc_window_unlock(), don't warn if not locked */
743 if (expect == WIN_LOCKED && old == new)740 if (expect == WIN_LOCKED && old == new)
744 return 0;741 return 0;
742
743 dev_warn_ratelimited(msc_dev(win->msc),
744 "expected lockout state %d, got %d\n",
745 expect, old);
745 }746 }
746 747
747 return ret;748 return ret;
@@ -761,7 +762,7 @@ static int msc_configure(struct msc *msc) · 13 unmodified lines
761 lockdep_assert_held(&msc->buf_mutex);762 lockdep_assert_held(&msc->buf_mutex);
762 763
763 if (msc->mode > MSC_MODE_MULTI)764 if (msc->mode > MSC_MODE_MULTI)
764 return -ENOTSUPP;765 return -EINVAL;
765 766
766 if (msc->mode == MSC_MODE_MULTI) {767 if (msc->mode == MSC_MODE_MULTI) {
767 if (msc_win_set_lockout(msc->cur_win, WIN_READY, WIN_INUSE))768 if (msc_win_set_lockout(msc->cur_win, WIN_READY, WIN_INUSE))
@@ -1295,7 +1296,7 @@ static int msc_buffer_alloc(struct msc *msc, unsigned long *nr_pages, · 527 unmodified lines
1295 } else if (msc->mode == MSC_MODE_MULTI) {1296 } else if (msc->mode == MSC_MODE_MULTI) {
1296 ret = msc_buffer_multi_alloc(msc, nr_pages, nr_wins);1297 ret = msc_buffer_multi_alloc(msc, nr_pages, nr_wins);
1297 } else {1298 } else {
1298 ret = -ENOTSUPP;1299 ret = -EINVAL;
1299 }1300 }
1300 1301
1301 if (!ret) {1302 if (!ret) {
@@ -1531,7 +1532,7 @@ static ssize_t intel_th_msc_read(struct file *file, char __user *buf, · 229 unmodified lines
1531 if (ret >= 0)1532 if (ret >= 0)
1532 *ppos = iter->offset;1533 *ppos = iter->offset;
1533 } else {1534 } else {
1534 ret = -ENOTSUPP;1535 ret = -EINVAL;
1535 }1536 }
1536 1537
1537put_count:1538put_count:
drivers/hwtracing/intel_th/pci.c+5−0
@@ -238,6 +238,11 @@ static const struct pci_device_id intel_th_pci_id_table[] = { · 237 unmodified lines
238 PCI_DEVICE(PCI_VENDOR_ID_INTEL, 0x4da6),238 PCI_DEVICE(PCI_VENDOR_ID_INTEL, 0x4da6),
239 .driver_data = (kernel_ulong_t)&intel_th_2x,239 .driver_data = (kernel_ulong_t)&intel_th_2x,
240 },240 },
241 {
242 /* Elkhart Lake CPU */
243 PCI_DEVICE(PCI_VENDOR_ID_INTEL, 0x4529),
244 .driver_data = (kernel_ulong_t)&intel_th_2x,
245 },
241 {246 {
242 /* Elkhart Lake */247 /* Elkhart Lake */
243 PCI_DEVICE(PCI_VENDOR_ID_INTEL, 0x4b26),248 PCI_DEVICE(PCI_VENDOR_ID_INTEL, 0x4b26),
drivers/hwtracing/stm/p_sys-t.c+3−3
@@ -238,7 +238,7 @@ static struct configfs_attribute *sys_t_policy_attrs[] = { · 237 unmodified lines
238static inline bool sys_t_need_ts(struct sys_t_output *op)238static inline bool sys_t_need_ts(struct sys_t_output *op)
239{239{
240 if (op->node.ts_interval &&240 if (op->node.ts_interval &&
241 time_after(op->ts_jiffies + op->node.ts_interval, jiffies)) {241 time_after(jiffies, op->ts_jiffies + op->node.ts_interval)) {
242 op->ts_jiffies = jiffies;242 op->ts_jiffies = jiffies;
243 243
244 return true;244 return true;
@@ -250,8 +250,8 @@ static inline bool sys_t_need_ts(struct sys_t_output *op) · 5 unmodified lines
250static bool sys_t_need_clock_sync(struct sys_t_output *op)250static bool sys_t_need_clock_sync(struct sys_t_output *op)
251{251{
252 if (op->node.clocksync_interval &&252 if (op->node.clocksync_interval &&
253 time_after(op->clocksync_jiffies + op->node.clocksync_interval,253 time_after(jiffies,
254 jiffies)) {254 op->clocksync_jiffies + op->node.clocksync_interval)) {
255 op->clocksync_jiffies = jiffies;255 op->clocksync_jiffies = jiffies;
256 256
257 return true;257 return true;
drivers/i2c/busses/i2c-designware-pcidrv.c+1−0
@@ -313,6 +313,7 @@ static void i2c_dw_pci_remove(struct pci_dev *pdev) · 312 unmodified lines
313 pm_runtime_get_noresume(&pdev->dev);313 pm_runtime_get_noresume(&pdev->dev);
314 314
315 i2c_del_adapter(&dev->adapter);315 i2c_del_adapter(&dev->adapter);
316 devm_free_irq(&pdev->dev, dev->irq, dev);
316 pci_free_irq_vectors(pdev);317 pci_free_irq_vectors(pdev);
317}318}
318 319
drivers/i2c/busses/i2c-gpio.c+1−1
@@ -348,7 +348,7 @@ static struct gpio_desc *i2c_gpio_get_desc(struct device *dev, · 347 unmodified lines
348 if (ret == -ENOENT)348 if (ret == -ENOENT)
349 retdesc = ERR_PTR(-EPROBE_DEFER);349 retdesc = ERR_PTR(-EPROBE_DEFER);
350 350
351 if (ret != -EPROBE_DEFER)351 if (PTR_ERR(retdesc) != -EPROBE_DEFER)
352 dev_err(dev, "error trying to get descriptor: %d\n", ret);352 dev_err(dev, "error trying to get descriptor: %d\n", ret);
353 353
354 return retdesc;354 return retdesc;
drivers/i2c/busses/i2c-i801.c+12−33
@@ -132,11 +132,6 @@ · 131 unmodified lines
132#define TCOBASE 0x050132#define TCOBASE 0x050
133#define TCOCTL 0x054133#define TCOCTL 0x054
134 134
135#define ACPIBASE 0x040
136#define ACPIBASE_SMI_OFF 0x030
137#define ACPICTRL 0x044
138#define ACPICTRL_EN 0x080
139
140#define SBREG_BAR 0x10135#define SBREG_BAR 0x10
141#define SBREG_SMBCTRL 0xc6000c136#define SBREG_SMBCTRL 0xc6000c
142#define SBREG_SMBCTRL_DNV 0xcf000c137#define SBREG_SMBCTRL_DNV 0xcf000c
@@ -1553,7 +1548,7 @@ i801_add_tco_spt(struct i801_priv *priv, struct pci_dev *pci_dev, · 1410 unmodified lines
1553 pci_bus_write_config_byte(pci_dev->bus, devfn, 0xe1, hidden);1548 pci_bus_write_config_byte(pci_dev->bus, devfn, 0xe1, hidden);
1554 spin_unlock(&p2sb_spinlock);1549 spin_unlock(&p2sb_spinlock);
1555 1550
1556 res = &tco_res[ICH_RES_MEM_OFF];1551 res = &tco_res[1];
1557 if (pci_dev->device == PCI_DEVICE_ID_INTEL_DNV_SMBUS)1552 if (pci_dev->device == PCI_DEVICE_ID_INTEL_DNV_SMBUS)
1558 res->start = (resource_size_t)base64_addr + SBREG_SMBCTRL_DNV;1553 res->start = (resource_size_t)base64_addr + SBREG_SMBCTRL_DNV;
1559 else1554 else
@@ -1563,7 +1558,7 @@ i801_add_tco_spt(struct i801_priv *priv, struct pci_dev *pci_dev, · 3 unmodified lines
1563 res->flags = IORESOURCE_MEM;1558 res->flags = IORESOURCE_MEM;
1564 1559
1565 return platform_device_register_resndata(&pci_dev->dev, "iTCO_wdt", -1,1560 return platform_device_register_resndata(&pci_dev->dev, "iTCO_wdt", -1,
1566 tco_res, 3, &spt_tco_platform_data,1561 tco_res, 2, &spt_tco_platform_data,
1567 sizeof(spt_tco_platform_data));1562 sizeof(spt_tco_platform_data));
1568}1563}
1569 1564
@@ -1576,17 +1571,16 @@ static struct platform_device * · 6 unmodified lines
1576i801_add_tco_cnl(struct i801_priv *priv, struct pci_dev *pci_dev,1571i801_add_tco_cnl(struct i801_priv *priv, struct pci_dev *pci_dev,
1577 struct resource *tco_res)1572 struct resource *tco_res)
1578{1573{
1579 return platform_device_register_resndata(&pci_dev->dev, "iTCO_wdt", -1,1574 return platform_device_register_resndata(&pci_dev->dev,
1580 tco_res, 2, &cnl_tco_platform_data,1575 "iTCO_wdt", -1, tco_res, 1, &cnl_tco_platform_data,
1581 sizeof(cnl_tco_platform_data));1576 sizeof(cnl_tco_platform_data));
1582}1577}
1583 1578
1584static void i801_add_tco(struct i801_priv *priv)1579static void i801_add_tco(struct i801_priv *priv)
1585{1580{
1586 u32 base_addr, tco_base, tco_ctl, ctrl_val;
1587 struct pci_dev *pci_dev = priv->pci_dev;1581 struct pci_dev *pci_dev = priv->pci_dev;
1588 struct resource tco_res[3], *res;1582 struct resource tco_res[2], *res;
1589 unsigned int devfn;1583 u32 tco_base, tco_ctl;
1590 1584
1591 /* If we have ACPI based watchdog use that instead */1585 /* If we have ACPI based watchdog use that instead */
1592 if (acpi_has_watchdog())1586 if (acpi_has_watchdog())
@@ -1601,30 +1595,15 @@ static void i801_add_tco(struct i801_priv *priv) · 8 unmodified lines
1601 return;1595 return;
1602 1596
1603 memset(tco_res, 0, sizeof(tco_res));1597 memset(tco_res, 0, sizeof(tco_res));
1604
1605 res = &tco_res[ICH_RES_IO_TCO];
1606 res->start = tco_base & ~1;
1607 res->end = res->start + 32 - 1;
1608 res->flags = IORESOURCE_IO;
1609
1610 /*1598 /*
1611 * Power Management registers.1599 * Always populate the main iTCO IO resource here. The second entry
1600 * for NO_REBOOT MMIO is filled by the SPT specific function.
1612 */1601 */
1613 devfn = PCI_DEVFN(PCI_SLOT(pci_dev->devfn), 2);1602 res = &tco_res[0];
1614 pci_bus_read_config_dword(pci_dev->bus, devfn, ACPIBASE, &base_addr);1603 res->start = tco_base & ~1;
1615 1604 res->end = res->start + 32 - 1;
1616 res = &tco_res[ICH_RES_IO_SMI];
1617 res->start = (base_addr & ~1) + ACPIBASE_SMI_OFF;
1618 res->end = res->start + 3;
1619 res->flags = IORESOURCE_IO;1605 res->flags = IORESOURCE_IO;
1620 1606
1621 /*
1622 * Enable the ACPI I/O space.
1623 */
1624 pci_bus_read_config_dword(pci_dev->bus, devfn, ACPICTRL, &ctrl_val);
1625 ctrl_val |= ACPICTRL_EN;
1626 pci_bus_write_config_dword(pci_dev->bus, devfn, ACPICTRL, ctrl_val);
1627
1628 if (priv->features & FEATURE_TCO_CNL)1607 if (priv->features & FEATURE_TCO_CNL)
1629 priv->tco_pdev = i801_add_tco_cnl(priv, pci_dev, tco_res);1608 priv->tco_pdev = i801_add_tco_cnl(priv, pci_dev, tco_res);
1630 else1609 else
drivers/i2c/i2c-core-acpi.c+9−1
@@ -394,9 +394,17 @@ EXPORT_SYMBOL_GPL(i2c_acpi_find_adapter_by_handle); · 393 unmodified lines
394static struct i2c_client *i2c_acpi_find_client_by_adev(struct acpi_device *adev)394static struct i2c_client *i2c_acpi_find_client_by_adev(struct acpi_device *adev)
395{395{
396 struct device *dev;396 struct device *dev;
397 struct i2c_client *client;
397 398
398 dev = bus_find_device_by_acpi_dev(&i2c_bus_type, adev);399 dev = bus_find_device_by_acpi_dev(&i2c_bus_type, adev);
399 return dev ? i2c_verify_client(dev) : NULL;400 if (!dev)
401 return NULL;
402
403 client = i2c_verify_client(dev);
404 if (!client)
405 put_device(dev);
406
407 return client;
400}408}
401 409
402static int i2c_acpi_notify(struct notifier_block *nb, unsigned long value,410static int i2c_acpi_notify(struct notifier_block *nb, unsigned long value,
drivers/iio/accel/adxl372.c+1−0
@@ -237,6 +237,7 @@ static const struct adxl372_axis_lookup adxl372_axis_lookup_table[] = { · 236 unmodified lines
237 .realbits = 12, \237 .realbits = 12, \
238 .storagebits = 16, \238 .storagebits = 16, \
239 .shift = 4, \239 .shift = 4, \
240 .endianness = IIO_BE, \
240 }, \241 }, \
241}242}
242 243
drivers/iio/accel/st_accel_i2c.c+1−1
@@ -110,7 +110,7 @@ MODULE_DEVICE_TABLE(of, st_accel_of_match); · 109 unmodified lines
110 110
111#ifdef CONFIG_ACPI111#ifdef CONFIG_ACPI
112static const struct acpi_device_id st_accel_acpi_match[] = {112static const struct acpi_device_id st_accel_acpi_match[] = {
113 {"SMO8840", (kernel_ulong_t)LNG2DM_ACCEL_DEV_NAME},113 {"SMO8840", (kernel_ulong_t)LIS2DH12_ACCEL_DEV_NAME},
114 {"SMO8A90", (kernel_ulong_t)LNG2DM_ACCEL_DEV_NAME},114 {"SMO8A90", (kernel_ulong_t)LNG2DM_ACCEL_DEV_NAME},
115 { },115 { },
116};116};
drivers/iio/adc/at91-sama5d2_adc.c+15−0
@@ -723,6 +723,7 @@ static int at91_adc_configure_trigger(struct iio_trigger *trig, bool state) · 722 unmodified lines
723 723
724 for_each_set_bit(bit, indio->active_scan_mask, indio->num_channels) {724 for_each_set_bit(bit, indio->active_scan_mask, indio->num_channels) {
725 struct iio_chan_spec const *chan = at91_adc_chan_get(indio, bit);725 struct iio_chan_spec const *chan = at91_adc_chan_get(indio, bit);
726 u32 cor;
726 727
727 if (!chan)728 if (!chan)
728 continue;729 continue;
@@ -731,6 +732,20 @@ static int at91_adc_configure_trigger(struct iio_trigger *trig, bool state) · 2 unmodified lines
731 chan->type == IIO_PRESSURE)732 chan->type == IIO_PRESSURE)
732 continue;733 continue;
733 734
735 if (state) {
736 cor = at91_adc_readl(st, AT91_SAMA5D2_COR);
737
738 if (chan->differential)
739 cor |= (BIT(chan->channel) |
740 BIT(chan->channel2)) <<
741 AT91_SAMA5D2_COR_DIFF_OFFSET;
742 else
743 cor &= ~(BIT(chan->channel) <<
744 AT91_SAMA5D2_COR_DIFF_OFFSET);
745
746 at91_adc_writel(st, AT91_SAMA5D2_COR, cor);
747 }
748
734 if (state) {749 if (state) {
735 at91_adc_writel(st, AT91_SAMA5D2_CHER,750 at91_adc_writel(st, AT91_SAMA5D2_CHER,
736 BIT(chan->channel));751 BIT(chan->channel));
drivers/iio/adc/stm32-dfsdm-adc.c+10−33
@@ -842,31 +842,6 @@ static inline void stm32_dfsdm_process_data(struct stm32_dfsdm_adc *adc, · 841 unmodified lines
842 }842 }
843}843}
844 844
845static irqreturn_t stm32_dfsdm_adc_trigger_handler(int irq, void *p)
846{
847 struct iio_poll_func *pf = p;
848 struct iio_dev *indio_dev = pf->indio_dev;
849 struct stm32_dfsdm_adc *adc = iio_priv(indio_dev);
850 int available = stm32_dfsdm_adc_dma_residue(adc);
851
852 while (available >= indio_dev->scan_bytes) {
853 s32 *buffer = (s32 *)&adc->rx_buf[adc->bufi];
854
855 stm32_dfsdm_process_data(adc, buffer);
856
857 iio_push_to_buffers_with_timestamp(indio_dev, buffer,
858 pf->timestamp);
859 available -= indio_dev->scan_bytes;
860 adc->bufi += indio_dev->scan_bytes;
861 if (adc->bufi >= adc->buf_sz)
862 adc->bufi = 0;
863 }
864
865 iio_trigger_notify_done(indio_dev->trig);
866
867 return IRQ_HANDLED;
868}
869
870static void stm32_dfsdm_dma_buffer_done(void *data)845static void stm32_dfsdm_dma_buffer_done(void *data)
871{846{
872 struct iio_dev *indio_dev = data;847 struct iio_dev *indio_dev = data;
@@ -874,11 +849,6 @@ static void stm32_dfsdm_dma_buffer_done(void *data) · 1 unmodified line
874 int available = stm32_dfsdm_adc_dma_residue(adc);849 int available = stm32_dfsdm_adc_dma_residue(adc);
875 size_t old_pos;850 size_t old_pos;
876 851
877 if (indio_dev->currentmode & INDIO_BUFFER_TRIGGERED) {
878 iio_trigger_poll_chained(indio_dev->trig);
879 return;
880 }
881
882 /*852 /*
883 * FIXME: In Kernel interface does not support cyclic DMA buffer,and853 * FIXME: In Kernel interface does not support cyclic DMA buffer,and
884 * offers only an interface to push data samples per samples.854 * offers only an interface to push data samples per samples.
@@ -906,7 +876,15 @@ static void stm32_dfsdm_dma_buffer_done(void *data) · 21 unmodified lines
906 adc->bufi = 0;876 adc->bufi = 0;
907 old_pos = 0;877 old_pos = 0;
908 }878 }
909 /* regular iio buffer without trigger */879 /*
880 * In DMA mode the trigger services of IIO are not used
881 * (e.g. no call to iio_trigger_poll).
882 * Calling irq handler associated to the hardware trigger is not
883 * relevant as the conversions have already been done. Data
884 * transfers are performed directly in DMA callback instead.
885 * This implementation avoids to call trigger irq handler that
886 * may sleep, in an atomic context (DMA irq handler context).
887 */
910 if (adc->dev_data->type == DFSDM_IIO)888 if (adc->dev_data->type == DFSDM_IIO)
911 iio_push_to_buffers(indio_dev, buffer);889 iio_push_to_buffers(indio_dev, buffer);
912 }890 }
@@ -1536,8 +1514,7 @@ static int stm32_dfsdm_adc_init(struct iio_dev *indio_dev) · 623 unmodified lines
1536 }1514 }
1537 1515
1538 ret = iio_triggered_buffer_setup(indio_dev,1516 ret = iio_triggered_buffer_setup(indio_dev,
1539 &iio_pollfunc_store_time,1517 &iio_pollfunc_store_time, NULL,
1540 &stm32_dfsdm_adc_trigger_handler,
1541 &stm32_dfsdm_buffer_setup_ops);1518 &stm32_dfsdm_buffer_setup_ops);
1542 if (ret) {1519 if (ret) {
1543 stm32_dfsdm_dma_release(indio_dev);1520 stm32_dfsdm_dma_release(indio_dev);
drivers/iio/chemical/Kconfig+2−0
@@ -91,6 +91,8 @@ config SPS30 · 90 unmodified lines
91 tristate "SPS30 particulate matter sensor"91 tristate "SPS30 particulate matter sensor"
92 depends on I2C92 depends on I2C
93 select CRC893 select CRC8
94 select IIO_BUFFER
95 select IIO_TRIGGERED_BUFFER
94 help96 help
95 Say Y here to build support for the Sensirion SPS30 particulate97 Say Y here to build support for the Sensirion SPS30 particulate
96 matter sensor.98 matter sensor.
drivers/iio/light/vcnl4000.c+8−7
@@ -167,16 +167,17 @@ static int vcnl4200_init(struct vcnl4000_data *data) · 166 unmodified lines
167 data->vcnl4200_ps.reg = VCNL4200_PS_DATA;167 data->vcnl4200_ps.reg = VCNL4200_PS_DATA;
168 switch (id) {168 switch (id) {
169 case VCNL4200_PROD_ID:169 case VCNL4200_PROD_ID:
170 /* Integration time is 50ms, but the experiments */170 /* Default wait time is 50ms, add 20% tolerance. */
171 /* show 54ms in total. */171 data->vcnl4200_al.sampling_rate = ktime_set(0, 60000 * 1000);
172 data->vcnl4200_al.sampling_rate = ktime_set(0, 54000 * 1000);172 /* Default wait time is 4.8ms, add 20% tolerance. */
173 data->vcnl4200_ps.sampling_rate = ktime_set(0, 4200 * 1000);173 data->vcnl4200_ps.sampling_rate = ktime_set(0, 5760 * 1000);
174 data->al_scale = 24000;174 data->al_scale = 24000;
175 break;175 break;
176 case VCNL4040_PROD_ID:176 case VCNL4040_PROD_ID:
177 /* Integration time is 80ms, add 10ms. */177 /* Default wait time is 80ms, add 20% tolerance. */
178 data->vcnl4200_al.sampling_rate = ktime_set(0, 100000 * 1000);178 data->vcnl4200_al.sampling_rate = ktime_set(0, 96000 * 1000);
179 data->vcnl4200_ps.sampling_rate = ktime_set(0, 100000 * 1000);179 /* Default wait time is 5ms, add 20% tolerance. */
180 data->vcnl4200_ps.sampling_rate = ktime_set(0, 6000 * 1000);
180 data->al_scale = 120000;181 data->al_scale = 120000;
181 break;182 break;
182 }183 }
drivers/iio/magnetometer/ak8974.c+1−1
@@ -564,7 +564,7 @@ static int ak8974_read_raw(struct iio_dev *indio_dev, · 563 unmodified lines
564 * We read all axes and discard all but one, for optimized564 * We read all axes and discard all but one, for optimized
565 * reading, use the triggered buffer.565 * reading, use the triggered buffer.
566 */566 */
567 *val = le16_to_cpu(hw_values[chan->address]);567 *val = (s16)le16_to_cpu(hw_values[chan->address]);
568 568
569 ret = IIO_VAL_INT;569 ret = IIO_VAL_INT;
570 }570 }
drivers/iio/proximity/ping.c+1−1
@@ -269,7 +269,7 @@ static const struct iio_chan_spec ping_chan_spec[] = { · 268 unmodified lines
269 269
270static const struct of_device_id of_ping_match[] = {270static const struct of_device_id of_ping_match[] = {
271 { .compatible = "parallax,ping", .data = &pa_ping_cfg},271 { .compatible = "parallax,ping", .data = &pa_ping_cfg},
272 { .compatible = "parallax,laserping", .data = &pa_ping_cfg},272 { .compatible = "parallax,laserping", .data = &pa_laser_ping_cfg},
273 {},273 {},
274};274};
275 275
drivers/iio/trigger/stm32-timer-trigger.c+9−2
@@ -161,7 +161,8 @@ static int stm32_timer_start(struct stm32_timer_trigger *priv, · 160 unmodified lines
161 return 0;161 return 0;
162}162}
163 163
164static void stm32_timer_stop(struct stm32_timer_trigger *priv)164static void stm32_timer_stop(struct stm32_timer_trigger *priv,
165 struct iio_trigger *trig)
165{166{
166 u32 ccer, cr1;167 u32 ccer, cr1;
167 168
@@ -179,6 +180,12 @@ static void stm32_timer_stop(struct stm32_timer_trigger *priv) · 11 unmodified lines
179 regmap_write(priv->regmap, TIM_PSC, 0);180 regmap_write(priv->regmap, TIM_PSC, 0);
180 regmap_write(priv->regmap, TIM_ARR, 0);181 regmap_write(priv->regmap, TIM_ARR, 0);
181 182
183 /* Force disable master mode */
184 if (stm32_timer_is_trgo2_name(trig->name))
185 regmap_update_bits(priv->regmap, TIM_CR2, TIM_CR2_MMS2, 0);
186 else
187 regmap_update_bits(priv->regmap, TIM_CR2, TIM_CR2_MMS, 0);
188
182 /* Make sure that registers are updated */189 /* Make sure that registers are updated */
183 regmap_update_bits(priv->regmap, TIM_EGR, TIM_EGR_UG, TIM_EGR_UG);190 regmap_update_bits(priv->regmap, TIM_EGR, TIM_EGR_UG, TIM_EGR_UG);
184}191}
@@ -197,7 +204,7 @@ static ssize_t stm32_tt_store_frequency(struct device *dev, · 12 unmodified lines
197 return ret;204 return ret;
198 205
199 if (freq == 0) {206 if (freq == 0) {
200 stm32_timer_stop(priv);207 stm32_timer_stop(priv, trig);
201 } else {208 } else {
202 ret = stm32_timer_start(priv, trig, freq);209 ret = stm32_timer_start(priv, trig, freq);
203 if (ret)210 if (ret)
drivers/iommu/amd_iommu.c+2−2
@@ -3826,7 +3826,7 @@ int amd_iommu_activate_guest_mode(void *data) · 3825 unmodified lines
3826 entry->lo.fields_vapic.ga_tag = ir_data->ga_tag;3826 entry->lo.fields_vapic.ga_tag = ir_data->ga_tag;
3827 3827
3828 return modify_irte_ga(ir_data->irq_2_irte.devid,3828 return modify_irte_ga(ir_data->irq_2_irte.devid,
3829 ir_data->irq_2_irte.index, entry, NULL);3829 ir_data->irq_2_irte.index, entry, ir_data);
3830}3830}
3831EXPORT_SYMBOL(amd_iommu_activate_guest_mode);3831EXPORT_SYMBOL(amd_iommu_activate_guest_mode);
3832 3832
@@ -3852,7 +3852,7 @@ int amd_iommu_deactivate_guest_mode(void *data) · 19 unmodified lines
3852 APICID_TO_IRTE_DEST_HI(cfg->dest_apicid);3852 APICID_TO_IRTE_DEST_HI(cfg->dest_apicid);
3853 3853
3854 return modify_irte_ga(ir_data->irq_2_irte.devid,3854 return modify_irte_ga(ir_data->irq_2_irte.devid,
3855 ir_data->irq_2_irte.index, entry, NULL);3855 ir_data->irq_2_irte.index, entry, ir_data);
3856}3856}
3857EXPORT_SYMBOL(amd_iommu_deactivate_guest_mode);3857EXPORT_SYMBOL(amd_iommu_deactivate_guest_mode);
3858 3858
drivers/iommu/dma-iommu.c+8−8
@@ -177,15 +177,15 @@ static int cookie_init_hw_msi_region(struct iommu_dma_cookie *cookie, · 176 unmodified lines
177 start -= iova_offset(iovad, start);177 start -= iova_offset(iovad, start);
178 num_pages = iova_align(iovad, end - start) >> iova_shift(iovad);178 num_pages = iova_align(iovad, end - start) >> iova_shift(iovad);
179 179
180 msi_page = kcalloc(num_pages, sizeof(*msi_page), GFP_KERNEL);
181 if (!msi_page)
182 return -ENOMEM;
183
184 for (i = 0; i < num_pages; i++) {180 for (i = 0; i < num_pages; i++) {
185 msi_page[i].phys = start;181 msi_page = kmalloc(sizeof(*msi_page), GFP_KERNEL);
186 msi_page[i].iova = start;182 if (!msi_page)
187 INIT_LIST_HEAD(&msi_page[i].list);183 return -ENOMEM;
188 list_add(&msi_page[i].list, &cookie->msi_page_list);184
185 msi_page->phys = start;
186 msi_page->iova = start;
187 INIT_LIST_HEAD(&msi_page->list);
188 list_add(&msi_page->list, &cookie->msi_page_list);
189 start += iovad->granule;189 start += iovad->granule;
190 }190 }
191 191
drivers/iommu/dmar.c+17−7
@@ -28,6 +28,7 @@ · 27 unmodified lines
28#include <linux/slab.h>28#include <linux/slab.h>
29#include <linux/iommu.h>29#include <linux/iommu.h>
30#include <linux/numa.h>30#include <linux/numa.h>
31#include <linux/limits.h>
31#include <asm/irq_remapping.h>32#include <asm/irq_remapping.h>
32#include <asm/iommu_table.h>33#include <asm/iommu_table.h>
33 34
@@ -128,6 +129,13 @@ dmar_alloc_pci_notify_info(struct pci_dev *dev, unsigned long event) · 94 unmodified lines
128 129
129 BUG_ON(dev->is_virtfn);130 BUG_ON(dev->is_virtfn);
130 131
132 /*
133 * Ignore devices that have a domain number higher than what can
134 * be looked up in DMAR, e.g. VMD subdevices with domain 0x10000
135 */
136 if (pci_domain_nr(dev->bus) > U16_MAX)
137 return NULL;
138
131 /* Only generate path[] for device addition event */139 /* Only generate path[] for device addition event */
132 if (event == BUS_NOTIFY_ADD_DEVICE)140 if (event == BUS_NOTIFY_ADD_DEVICE)
133 for (tmp = dev; tmp; tmp = tmp->bus->self)141 for (tmp = dev; tmp; tmp = tmp->bus->self)
@@ -363,7 +371,8 @@ dmar_find_dmaru(struct acpi_dmar_hardware_unit *drhd) · 229 unmodified lines
363{371{
364 struct dmar_drhd_unit *dmaru;372 struct dmar_drhd_unit *dmaru;
365 373
366 list_for_each_entry_rcu(dmaru, &dmar_drhd_units, list)374 list_for_each_entry_rcu(dmaru, &dmar_drhd_units, list,
375 dmar_rcu_check())
367 if (dmaru->segment == drhd->segment &&376 if (dmaru->segment == drhd->segment &&
368 dmaru->reg_base_addr == drhd->address)377 dmaru->reg_base_addr == drhd->address)
369 return dmaru;378 return dmaru;
@@ -440,12 +449,13 @@ static int __init dmar_parse_one_andd(struct acpi_dmar_header *header, · 70 unmodified lines
440 449
441 /* Check for NUL termination within the designated length */450 /* Check for NUL termination within the designated length */
442 if (strnlen(andd->device_name, header->length - 8) == header->length - 8) {451 if (strnlen(andd->device_name, header->length - 8) == header->length - 8) {
443 WARN_TAINT(1, TAINT_FIRMWARE_WORKAROUND,452 pr_warn(FW_BUG
444 "Your BIOS is broken; ANDD object name is not NUL-terminated\n"453 "Your BIOS is broken; ANDD object name is not NUL-terminated\n"
445 "BIOS vendor: %s; Ver: %s; Product Version: %s\n",454 "BIOS vendor: %s; Ver: %s; Product Version: %s\n",
446 dmi_get_system_info(DMI_BIOS_VENDOR),455 dmi_get_system_info(DMI_BIOS_VENDOR),
447 dmi_get_system_info(DMI_BIOS_VERSION),456 dmi_get_system_info(DMI_BIOS_VERSION),
448 dmi_get_system_info(DMI_PRODUCT_VERSION));457 dmi_get_system_info(DMI_PRODUCT_VERSION));
458 add_taint(TAINT_FIRMWARE_WORKAROUND, LOCKDEP_STILL_OK);
449 return -EINVAL;459 return -EINVAL;
450 }460 }
451 pr_info("ANDD device: %x name: %s\n", andd->device_number,461 pr_info("ANDD device: %x name: %s\n", andd->device_number,
@@ -471,14 +481,14 @@ static int dmar_parse_one_rhsa(struct acpi_dmar_header *header, void *arg) · 19 unmodified lines
471 return 0;481 return 0;
472 }482 }
473 }483 }
474 WARN_TAINT(484 pr_warn(FW_BUG
475 1, TAINT_FIRMWARE_WORKAROUND,
476 "Your BIOS is broken; RHSA refers to non-existent DMAR unit at %llx\n"485 "Your BIOS is broken; RHSA refers to non-existent DMAR unit at %llx\n"
477 "BIOS vendor: %s; Ver: %s; Product Version: %s\n",486 "BIOS vendor: %s; Ver: %s; Product Version: %s\n",
478 drhd->reg_base_addr,487 rhsa->base_address,
479 dmi_get_system_info(DMI_BIOS_VENDOR),488 dmi_get_system_info(DMI_BIOS_VENDOR),
480 dmi_get_system_info(DMI_BIOS_VERSION),489 dmi_get_system_info(DMI_BIOS_VERSION),
481 dmi_get_system_info(DMI_PRODUCT_VERSION));490 dmi_get_system_info(DMI_PRODUCT_VERSION));
491 add_taint(TAINT_FIRMWARE_WORKAROUND, LOCKDEP_STILL_OK);
482 492
483 return 0;493 return 0;
484}494}
@@ -827,14 +837,14 @@ int __init dmar_table_init(void) · 342 unmodified lines
827 837
828static void warn_invalid_dmar(u64 addr, const char *message)838static void warn_invalid_dmar(u64 addr, const char *message)
829{839{
830 WARN_TAINT_ONCE(840 pr_warn_once(FW_BUG
831 1, TAINT_FIRMWARE_WORKAROUND,
832 "Your BIOS is broken; DMAR reported at address %llx%s!\n"841 "Your BIOS is broken; DMAR reported at address %llx%s!\n"
833 "BIOS vendor: %s; Ver: %s; Product Version: %s\n",842 "BIOS vendor: %s; Ver: %s; Product Version: %s\n",
834 addr, message,843 addr, message,
835 dmi_get_system_info(DMI_BIOS_VENDOR),844 dmi_get_system_info(DMI_BIOS_VENDOR),
836 dmi_get_system_info(DMI_BIOS_VERSION),845 dmi_get_system_info(DMI_BIOS_VERSION),
837 dmi_get_system_info(DMI_PRODUCT_VERSION));846 dmi_get_system_info(DMI_PRODUCT_VERSION));
847 add_taint(TAINT_FIRMWARE_WORKAROUND, LOCKDEP_STILL_OK);
838}848}
839 849
840static int __ref850static int __ref
drivers/iommu/intel-iommu-debugfs.c+35−16
@@ -33,38 +33,42 @@ struct iommu_regset { · 32 unmodified lines
33 33
34#define IOMMU_REGSET_ENTRY(_reg_) \34#define IOMMU_REGSET_ENTRY(_reg_) \
35 { DMAR_##_reg_##_REG, __stringify(_reg_) }35 { DMAR_##_reg_##_REG, __stringify(_reg_) }
36static const struct iommu_regset iommu_regs[] = {36
37static const struct iommu_regset iommu_regs_32[] = {
37 IOMMU_REGSET_ENTRY(VER),38 IOMMU_REGSET_ENTRY(VER),
38 IOMMU_REGSET_ENTRY(CAP),
39 IOMMU_REGSET_ENTRY(ECAP),
40 IOMMU_REGSET_ENTRY(GCMD),39 IOMMU_REGSET_ENTRY(GCMD),
41 IOMMU_REGSET_ENTRY(GSTS),40 IOMMU_REGSET_ENTRY(GSTS),
42 IOMMU_REGSET_ENTRY(RTADDR),
43 IOMMU_REGSET_ENTRY(CCMD),
44 IOMMU_REGSET_ENTRY(FSTS),41 IOMMU_REGSET_ENTRY(FSTS),
45 IOMMU_REGSET_ENTRY(FECTL),42 IOMMU_REGSET_ENTRY(FECTL),
46 IOMMU_REGSET_ENTRY(FEDATA),43 IOMMU_REGSET_ENTRY(FEDATA),
47 IOMMU_REGSET_ENTRY(FEADDR),44 IOMMU_REGSET_ENTRY(FEADDR),
48 IOMMU_REGSET_ENTRY(FEUADDR),45 IOMMU_REGSET_ENTRY(FEUADDR),
49 IOMMU_REGSET_ENTRY(AFLOG),
50 IOMMU_REGSET_ENTRY(PMEN),46 IOMMU_REGSET_ENTRY(PMEN),
51 IOMMU_REGSET_ENTRY(PLMBASE),47 IOMMU_REGSET_ENTRY(PLMBASE),
52 IOMMU_REGSET_ENTRY(PLMLIMIT),48 IOMMU_REGSET_ENTRY(PLMLIMIT),
49 IOMMU_REGSET_ENTRY(ICS),
50 IOMMU_REGSET_ENTRY(PRS),
51 IOMMU_REGSET_ENTRY(PECTL),
52 IOMMU_REGSET_ENTRY(PEDATA),
53 IOMMU_REGSET_ENTRY(PEADDR),
54 IOMMU_REGSET_ENTRY(PEUADDR),
55};
56
57static const struct iommu_regset iommu_regs_64[] = {
58 IOMMU_REGSET_ENTRY(CAP),
59 IOMMU_REGSET_ENTRY(ECAP),
60 IOMMU_REGSET_ENTRY(RTADDR),
61 IOMMU_REGSET_ENTRY(CCMD),
62 IOMMU_REGSET_ENTRY(AFLOG),
53 IOMMU_REGSET_ENTRY(PHMBASE),63 IOMMU_REGSET_ENTRY(PHMBASE),
54 IOMMU_REGSET_ENTRY(PHMLIMIT),64 IOMMU_REGSET_ENTRY(PHMLIMIT),
55 IOMMU_REGSET_ENTRY(IQH),65 IOMMU_REGSET_ENTRY(IQH),
56 IOMMU_REGSET_ENTRY(IQT),66 IOMMU_REGSET_ENTRY(IQT),
57 IOMMU_REGSET_ENTRY(IQA),67 IOMMU_REGSET_ENTRY(IQA),
58 IOMMU_REGSET_ENTRY(ICS),
59 IOMMU_REGSET_ENTRY(IRTA),68 IOMMU_REGSET_ENTRY(IRTA),
60 IOMMU_REGSET_ENTRY(PQH),69 IOMMU_REGSET_ENTRY(PQH),
61 IOMMU_REGSET_ENTRY(PQT),70 IOMMU_REGSET_ENTRY(PQT),
62 IOMMU_REGSET_ENTRY(PQA),71 IOMMU_REGSET_ENTRY(PQA),
63 IOMMU_REGSET_ENTRY(PRS),
64 IOMMU_REGSET_ENTRY(PECTL),
65 IOMMU_REGSET_ENTRY(PEDATA),
66 IOMMU_REGSET_ENTRY(PEADDR),
67 IOMMU_REGSET_ENTRY(PEUADDR),
68 IOMMU_REGSET_ENTRY(MTRRCAP),72 IOMMU_REGSET_ENTRY(MTRRCAP),
69 IOMMU_REGSET_ENTRY(MTRRDEF),73 IOMMU_REGSET_ENTRY(MTRRDEF),
70 IOMMU_REGSET_ENTRY(MTRR_FIX64K_00000),74 IOMMU_REGSET_ENTRY(MTRR_FIX64K_00000),
@@ -127,10 +131,16 @@ static int iommu_regset_show(struct seq_file *m, void *unused) · 56 unmodified lines
127 * by adding the offset to the pointer (virtual address).131 * by adding the offset to the pointer (virtual address).
128 */132 */
129 raw_spin_lock_irqsave(&iommu->register_lock, flag);133 raw_spin_lock_irqsave(&iommu->register_lock, flag);
130 for (i = 0 ; i < ARRAY_SIZE(iommu_regs); i++) {134 for (i = 0 ; i < ARRAY_SIZE(iommu_regs_32); i++) {
131 value = dmar_readq(iommu->reg + iommu_regs[i].offset);135 value = dmar_readl(iommu->reg + iommu_regs_32[i].offset);
136 seq_printf(m, "%-16s\t0x%02x\t\t0x%016llx\n",
137 iommu_regs_32[i].regs, iommu_regs_32[i].offset,
138 value);
139 }
140 for (i = 0 ; i < ARRAY_SIZE(iommu_regs_64); i++) {
141 value = dmar_readq(iommu->reg + iommu_regs_64[i].offset);
132 seq_printf(m, "%-16s\t0x%02x\t\t0x%016llx\n",142 seq_printf(m, "%-16s\t0x%02x\t\t0x%016llx\n",
133 iommu_regs[i].regs, iommu_regs[i].offset,143 iommu_regs_64[i].regs, iommu_regs_64[i].offset,
134 value);144 value);
135 }145 }
136 raw_spin_unlock_irqrestore(&iommu->register_lock, flag);146 raw_spin_unlock_irqrestore(&iommu->register_lock, flag);
@@ -272,9 +282,16 @@ static int dmar_translation_struct_show(struct seq_file *m, void *unused) · 135 unmodified lines
272{282{
273 struct dmar_drhd_unit *drhd;283 struct dmar_drhd_unit *drhd;
274 struct intel_iommu *iommu;284 struct intel_iommu *iommu;
285 u32 sts;
275 286
276 rcu_read_lock();287 rcu_read_lock();
277 for_each_active_iommu(iommu, drhd) {288 for_each_active_iommu(iommu, drhd) {
289 sts = dmar_readl(iommu->reg + DMAR_GSTS_REG);
290 if (!(sts & DMA_GSTS_TES)) {
291 seq_printf(m, "DMA Remapping is not enabled on %s\n",
292 iommu->name);
293 continue;
294 }
278 root_tbl_walk(m, iommu);295 root_tbl_walk(m, iommu);
279 seq_putc(m, '\n');296 seq_putc(m, '\n');
280 }297 }
@@ -415,6 +432,7 @@ static int ir_translation_struct_show(struct seq_file *m, void *unused) · 134 unmodified lines
415 struct dmar_drhd_unit *drhd;432 struct dmar_drhd_unit *drhd;
416 struct intel_iommu *iommu;433 struct intel_iommu *iommu;
417 u64 irta;434 u64 irta;
435 u32 sts;
418 436
419 rcu_read_lock();437 rcu_read_lock();
420 for_each_active_iommu(iommu, drhd) {438 for_each_active_iommu(iommu, drhd) {
@@ -424,7 +442,8 @@ static int ir_translation_struct_show(struct seq_file *m, void *unused) · 3 unmodified lines
424 seq_printf(m, "Remapped Interrupt supported on IOMMU: %s\n",442 seq_printf(m, "Remapped Interrupt supported on IOMMU: %s\n",
425 iommu->name);443 iommu->name);
426 444
427 if (iommu->ir_table) {445 sts = dmar_readl(iommu->reg + DMAR_GSTS_REG);
446 if (iommu->ir_table && (sts & DMA_GSTS_IRES)) {
428 irta = virt_to_phys(iommu->ir_table->base);447 irta = virt_to_phys(iommu->ir_table->base);
429 seq_printf(m, " IR table address:%llx\n", irta);448 seq_printf(m, " IR table address:%llx\n", irta);
430 ir_tbl_remap_entry_show(m, iommu);449 ir_tbl_remap_entry_show(m, iommu);
drivers/iommu/intel-iommu.c+19−9
@@ -4261,10 +4261,11 @@ static void quirk_ioat_snb_local_iommu(struct pci_dev *pdev) · 4260 unmodified lines
4261 4261
4262 /* we know that the this iommu should be at offset 0xa000 from vtbar */4262 /* we know that the this iommu should be at offset 0xa000 from vtbar */
4263 drhd = dmar_find_matched_drhd_unit(pdev);4263 drhd = dmar_find_matched_drhd_unit(pdev);
4264 if (WARN_TAINT_ONCE(!drhd || drhd->reg_base_addr - vtbar != 0xa000,4264 if (!drhd || drhd->reg_base_addr - vtbar != 0xa000) {
4265 TAINT_FIRMWARE_WORKAROUND,4265 pr_warn_once(FW_BUG "BIOS assigned incorrect VT-d unit for Intel(R) QuickData Technology device\n");
4266 "BIOS assigned incorrect VT-d unit for Intel(R) QuickData Technology device\n"))4266 add_taint(TAINT_FIRMWARE_WORKAROUND, LOCKDEP_STILL_OK);
4267 pdev->dev.archdata.iommu = DUMMY_DEVICE_DOMAIN_INFO;4267 pdev->dev.archdata.iommu = DUMMY_DEVICE_DOMAIN_INFO;
4268 }
4268}4269}
4269DECLARE_PCI_FIXUP_ENABLE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_IOAT_SNB, quirk_ioat_snb_local_iommu);4270DECLARE_PCI_FIXUP_ENABLE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_IOAT_SNB, quirk_ioat_snb_local_iommu);
4270 4271
@@ -4460,14 +4461,16 @@ int __init dmar_parse_one_rmrr(struct acpi_dmar_header *header, void *arg) · 189 unmodified lines
4460 struct dmar_rmrr_unit *rmrru;4461 struct dmar_rmrr_unit *rmrru;
4461 4462
4462 rmrr = (struct acpi_dmar_reserved_memory *)header;4463 rmrr = (struct acpi_dmar_reserved_memory *)header;
4463 if (rmrr_sanity_check(rmrr))4464 if (rmrr_sanity_check(rmrr)) {
4464 WARN_TAINT(1, TAINT_FIRMWARE_WORKAROUND,4465 pr_warn(FW_BUG
4465 "Your BIOS is broken; bad RMRR [%#018Lx-%#018Lx]\n"4466 "Your BIOS is broken; bad RMRR [%#018Lx-%#018Lx]\n"
4466 "BIOS vendor: %s; Ver: %s; Product Version: %s\n",4467 "BIOS vendor: %s; Ver: %s; Product Version: %s\n",
4467 rmrr->base_address, rmrr->end_address,4468 rmrr->base_address, rmrr->end_address,
4468 dmi_get_system_info(DMI_BIOS_VENDOR),4469 dmi_get_system_info(DMI_BIOS_VENDOR),
4469 dmi_get_system_info(DMI_BIOS_VERSION),4470 dmi_get_system_info(DMI_BIOS_VERSION),
4470 dmi_get_system_info(DMI_PRODUCT_VERSION));4471 dmi_get_system_info(DMI_PRODUCT_VERSION));
4472 add_taint(TAINT_FIRMWARE_WORKAROUND, LOCKDEP_STILL_OK);
4473 }
4471 4474
4472 rmrru = kzalloc(sizeof(*rmrru), GFP_KERNEL);4475 rmrru = kzalloc(sizeof(*rmrru), GFP_KERNEL);
4473 if (!rmrru)4476 if (!rmrru)
@@ -5130,6 +5133,9 @@ int __init intel_iommu_init(void) · 656 unmodified lines
5130 5133
5131 down_write(&dmar_global_lock);5134 down_write(&dmar_global_lock);
5132 5135
5136 if (!no_iommu)
5137 intel_iommu_debugfs_init();
5138
5133 if (no_iommu || dmar_disabled) {5139 if (no_iommu || dmar_disabled) {
5134 /*5140 /*
5135 * We exit the function here to ensure IOMMU's remapping and5141 * We exit the function here to ensure IOMMU's remapping and
@@ -5193,6 +5199,7 @@ int __init intel_iommu_init(void) · 57 unmodified lines
5193 5199
5194 init_iommu_pm_ops();5200 init_iommu_pm_ops();
5195 5201
5202 down_read(&dmar_global_lock);
5196 for_each_active_iommu(iommu, drhd) {5203 for_each_active_iommu(iommu, drhd) {
5197 iommu_device_sysfs_add(&iommu->iommu, NULL,5204 iommu_device_sysfs_add(&iommu->iommu, NULL,
5198 intel_iommu_groups,5205 intel_iommu_groups,
@@ -5200,6 +5207,7 @@ int __init intel_iommu_init(void) · 1 unmodified line
5200 iommu_device_set_ops(&iommu->iommu, &intel_iommu_ops);5207 iommu_device_set_ops(&iommu->iommu, &intel_iommu_ops);
5201 iommu_device_register(&iommu->iommu);5208 iommu_device_register(&iommu->iommu);
5202 }5209 }
5210 up_read(&dmar_global_lock);
5203 5211
5204 bus_set_iommu(&pci_bus_type, &intel_iommu_ops);5212 bus_set_iommu(&pci_bus_type, &intel_iommu_ops);
5205 if (si_domain && !hw_pass_through)5213 if (si_domain && !hw_pass_through)
@@ -5210,7 +5218,6 @@ int __init intel_iommu_init(void) · 4 unmodified lines
5210 down_read(&dmar_global_lock);5218 down_read(&dmar_global_lock);
5211 if (probe_acpi_namespace_devices())5219 if (probe_acpi_namespace_devices())
5212 pr_warn("ACPI name space devices didn't probe correctly\n");5220 pr_warn("ACPI name space devices didn't probe correctly\n");
5213 up_read(&dmar_global_lock);
5214 5221
5215 /* Finally, we enable the DMA remapping hardware. */5222 /* Finally, we enable the DMA remapping hardware. */
5216 for_each_iommu(iommu, drhd) {5223 for_each_iommu(iommu, drhd) {
@@ -5219,10 +5226,11 @@ int __init intel_iommu_init(void) · 2 unmodified lines
5219 5226
5220 iommu_disable_protect_mem_regions(iommu);5227 iommu_disable_protect_mem_regions(iommu);
5221 }5228 }
5229 up_read(&dmar_global_lock);
5230
5222 pr_info("Intel(R) Virtualization Technology for Directed I/O\n");5231 pr_info("Intel(R) Virtualization Technology for Directed I/O\n");
5223 5232
5224 intel_iommu_enabled = 1;5233 intel_iommu_enabled = 1;
5225 intel_iommu_debugfs_init();
5226 5234
5227 return 0;5235 return 0;
5228 5236
@@ -5700,8 +5708,10 @@ static phys_addr_t intel_iommu_iova_to_phys(struct iommu_domain *domain, · 471 unmodified lines
5700 u64 phys = 0;5708 u64 phys = 0;
5701 5709
5702 pte = pfn_to_dma_pte(dmar_domain, iova >> VTD_PAGE_SHIFT, &level);5710 pte = pfn_to_dma_pte(dmar_domain, iova >> VTD_PAGE_SHIFT, &level);
5703 if (pte)5711 if (pte && dma_pte_present(pte))
5704 phys = dma_pte_addr(pte);5712 phys = dma_pte_addr(pte) +
5713 (iova & (BIT_MASK(level_to_offset_bits(level) +
5714 VTD_PAGE_SHIFT) - 1));
5705 5715
5706 return phys;5716 return phys;
5707}5717}
drivers/iommu/io-pgtable-arm.c+2−2
@@ -468,7 +468,7 @@ static int arm_lpae_map(struct io_pgtable_ops *ops, unsigned long iova, · 467 unmodified lines
468 arm_lpae_iopte *ptep = data->pgd;468 arm_lpae_iopte *ptep = data->pgd;
469 int ret, lvl = data->start_level;469 int ret, lvl = data->start_level;
470 arm_lpae_iopte prot;470 arm_lpae_iopte prot;
471 long iaext = (long)iova >> cfg->ias;471 long iaext = (s64)iova >> cfg->ias;
472 472
473 /* If no access, then nothing to do */473 /* If no access, then nothing to do */
474 if (!(iommu_prot & (IOMMU_READ | IOMMU_WRITE)))474 if (!(iommu_prot & (IOMMU_READ | IOMMU_WRITE)))
@@ -645,7 +645,7 @@ static size_t arm_lpae_unmap(struct io_pgtable_ops *ops, unsigned long iova, · 170 unmodified lines
645 struct arm_lpae_io_pgtable *data = io_pgtable_ops_to_data(ops);645 struct arm_lpae_io_pgtable *data = io_pgtable_ops_to_data(ops);
646 struct io_pgtable_cfg *cfg = &data->iop.cfg;646 struct io_pgtable_cfg *cfg = &data->iop.cfg;
647 arm_lpae_iopte *ptep = data->pgd;647 arm_lpae_iopte *ptep = data->pgd;
648 long iaext = (long)iova >> cfg->ias;648 long iaext = (s64)iova >> cfg->ias;
649 649
650 if (WARN_ON(!size || (size & cfg->pgsize_bitmap) != size))650 if (WARN_ON(!size || (size & cfg->pgsize_bitmap) != size))
651 return 0;651 return 0;
drivers/irqchip/irq-gic-v3.c+29−1
@@ -34,6 +34,7 @@ · 33 unmodified lines
34#define GICD_INT_NMI_PRI (GICD_INT_DEF_PRI & ~0x80)34#define GICD_INT_NMI_PRI (GICD_INT_DEF_PRI & ~0x80)
35 35
36#define FLAGS_WORKAROUND_GICR_WAKER_MSM8996 (1ULL << 0)36#define FLAGS_WORKAROUND_GICR_WAKER_MSM8996 (1ULL << 0)
37#define FLAGS_WORKAROUND_CAVIUM_ERRATUM_38539 (1ULL << 1)
37 38
38struct redist_region {39struct redist_region {
39 void __iomem *redist_base;40 void __iomem *redist_base;
@@ -1464,6 +1465,15 @@ static bool gic_enable_quirk_msm8996(void *data) · 1424 unmodified lines
1464 return true;1465 return true;
1465}1466}
1466 1467
1468static bool gic_enable_quirk_cavium_38539(void *data)
1469{
1470 struct gic_chip_data *d = data;
1471
1472 d->flags |= FLAGS_WORKAROUND_CAVIUM_ERRATUM_38539;
1473
1474 return true;
1475}
1476
1467static bool gic_enable_quirk_hip06_07(void *data)1477static bool gic_enable_quirk_hip06_07(void *data)
1468{1478{
1469 struct gic_chip_data *d = data;1479 struct gic_chip_data *d = data;
@@ -1502,6 +1512,19 @@ static const struct gic_quirk gic_quirks[] = { · 32 unmodified lines
1502 .mask = 0xffffffff,1512 .mask = 0xffffffff,
1503 .init = gic_enable_quirk_hip06_07,1513 .init = gic_enable_quirk_hip06_07,
1504 },1514 },
1515 {
1516 /*
1517 * Reserved register accesses generate a Synchronous
1518 * External Abort. This erratum applies to:
1519 * - ThunderX: CN88xx
1520 * - OCTEON TX: CN83xx, CN81xx
1521 * - OCTEON TX2: CN93xx, CN96xx, CN98xx, CNF95xx*
1522 */
1523 .desc = "GICv3: Cavium erratum 38539",
1524 .iidr = 0xa000034c,
1525 .mask = 0xe8f00fff,
1526 .init = gic_enable_quirk_cavium_38539,
1527 },
1505 {1528 {
1506 }1529 }
1507};1530};
@@ -1577,7 +1600,12 @@ static int __init gic_init_bases(void __iomem *dist_base, · 69 unmodified lines
1577 pr_info("%d SPIs implemented\n", GIC_LINE_NR - 32);1600 pr_info("%d SPIs implemented\n", GIC_LINE_NR - 32);
1578 pr_info("%d Extended SPIs implemented\n", GIC_ESPI_NR);1601 pr_info("%d Extended SPIs implemented\n", GIC_ESPI_NR);
1579 1602
1580 gic_data.rdists.gicd_typer2 = readl_relaxed(gic_data.dist_base + GICD_TYPER2);1603 /*
1604 * ThunderX1 explodes on reading GICD_TYPER2, in violation of the
1605 * architecture spec (which says that reserved registers are RES0).
1606 */
1607 if (!(gic_data.flags & FLAGS_WORKAROUND_CAVIUM_ERRATUM_38539))
1608 gic_data.rdists.gicd_typer2 = readl_relaxed(gic_data.dist_base + GICD_TYPER2);
1581 1609
1582 gic_data.domain = irq_domain_create_tree(handle, &gic_irq_domain_ops,1610 gic_data.domain = irq_domain_create_tree(handle, &gic_irq_domain_ops,
1583 &gic_data);1611 &gic_data);
drivers/macintosh/windfarm_ad7417_sensor.c+7−0
@@ -312,9 +312,16 @@ static const struct i2c_device_id wf_ad7417_id[] = { · 311 unmodified lines
312};312};
313MODULE_DEVICE_TABLE(i2c, wf_ad7417_id);313MODULE_DEVICE_TABLE(i2c, wf_ad7417_id);
314 314
315static const struct of_device_id wf_ad7417_of_id[] = {
316 { .compatible = "ad7417", },
317 { }
318};
319MODULE_DEVICE_TABLE(of, wf_ad7417_of_id);
320
315static struct i2c_driver wf_ad7417_driver = {321static struct i2c_driver wf_ad7417_driver = {
316 .driver = {322 .driver = {
317 .name = "wf_ad7417",323 .name = "wf_ad7417",
324 .of_match_table = wf_ad7417_of_id,
318 },325 },
319 .probe = wf_ad7417_probe,326 .probe = wf_ad7417_probe,
320 .remove = wf_ad7417_remove,327 .remove = wf_ad7417_remove,
drivers/macintosh/windfarm_fcu_controls.c+7−0
@@ -580,9 +580,16 @@ static const struct i2c_device_id wf_fcu_id[] = { · 579 unmodified lines
580};580};
581MODULE_DEVICE_TABLE(i2c, wf_fcu_id);581MODULE_DEVICE_TABLE(i2c, wf_fcu_id);
582 582
583static const struct of_device_id wf_fcu_of_id[] = {
584 { .compatible = "fcu", },
585 { }
586};
587MODULE_DEVICE_TABLE(of, wf_fcu_of_id);
588
583static struct i2c_driver wf_fcu_driver = {589static struct i2c_driver wf_fcu_driver = {
584 .driver = {590 .driver = {
585 .name = "wf_fcu",591 .name = "wf_fcu",
592 .of_match_table = wf_fcu_of_id,
586 },593 },
587 .probe = wf_fcu_probe,594 .probe = wf_fcu_probe,
588 .remove = wf_fcu_remove,595 .remove = wf_fcu_remove,
drivers/macintosh/windfarm_lm75_sensor.c+15−1
@@ -14,6 +14,7 @@ · 13 unmodified lines
14#include <linux/init.h>14#include <linux/init.h>
15#include <linux/wait.h>15#include <linux/wait.h>
16#include <linux/i2c.h>16#include <linux/i2c.h>
17#include <linux/of_device.h>
17#include <asm/prom.h>18#include <asm/prom.h>
18#include <asm/machdep.h>19#include <asm/machdep.h>
19#include <asm/io.h>20#include <asm/io.h>
@@ -91,9 +92,14 @@ static int wf_lm75_probe(struct i2c_client *client, · 71 unmodified lines
91 const struct i2c_device_id *id)92 const struct i2c_device_id *id)
92{ 93{
93 struct wf_lm75_sensor *lm;94 struct wf_lm75_sensor *lm;
94 int rc, ds1775 = id->driver_data;95 int rc, ds1775;
95 const char *name, *loc;96 const char *name, *loc;
96 97
98 if (id)
99 ds1775 = id->driver_data;
100 else
101 ds1775 = !!of_device_get_match_data(&client->dev);
102
97 DBG("wf_lm75: creating %s device at address 0x%02x\n",103 DBG("wf_lm75: creating %s device at address 0x%02x\n",
98 ds1775 ? "ds1775" : "lm75", client->addr);104 ds1775 ? "ds1775" : "lm75", client->addr);
99 105
@@ -164,9 +170,17 @@ static const struct i2c_device_id wf_lm75_id[] = { · 64 unmodified lines
164};170};
165MODULE_DEVICE_TABLE(i2c, wf_lm75_id);171MODULE_DEVICE_TABLE(i2c, wf_lm75_id);
166 172
173static const struct of_device_id wf_lm75_of_id[] = {
174 { .compatible = "lm75", .data = (void *)0},
175 { .compatible = "ds1775", .data = (void *)1 },
176 { }
177};
178MODULE_DEVICE_TABLE(of, wf_lm75_of_id);
179
167static struct i2c_driver wf_lm75_driver = {180static struct i2c_driver wf_lm75_driver = {
168 .driver = {181 .driver = {
169 .name = "wf_lm75",182 .name = "wf_lm75",
183 .of_match_table = wf_lm75_of_id,
170 },184 },
171 .probe = wf_lm75_probe,185 .probe = wf_lm75_probe,
172 .remove = wf_lm75_remove,186 .remove = wf_lm75_remove,
drivers/macintosh/windfarm_lm87_sensor.c+7−0
@@ -166,9 +166,16 @@ static const struct i2c_device_id wf_lm87_id[] = { · 165 unmodified lines
166};166};
167MODULE_DEVICE_TABLE(i2c, wf_lm87_id);167MODULE_DEVICE_TABLE(i2c, wf_lm87_id);
168 168
169static const struct of_device_id wf_lm87_of_id[] = {
170 { .compatible = "lm87cimt", },
171 { }
172};
173MODULE_DEVICE_TABLE(of, wf_lm87_of_id);
174
169static struct i2c_driver wf_lm87_driver = {175static struct i2c_driver wf_lm87_driver = {
170 .driver = {176 .driver = {
171 .name = "wf_lm87",177 .name = "wf_lm87",
178 .of_match_table = wf_lm87_of_id,
172 },179 },
173 .probe = wf_lm87_probe,180 .probe = wf_lm87_probe,
174 .remove = wf_lm87_remove,181 .remove = wf_lm87_remove,
drivers/macintosh/windfarm_max6690_sensor.c+7−0
@@ -120,9 +120,16 @@ static const struct i2c_device_id wf_max6690_id[] = { · 119 unmodified lines
120};120};
121MODULE_DEVICE_TABLE(i2c, wf_max6690_id);121MODULE_DEVICE_TABLE(i2c, wf_max6690_id);
122 122
123static const struct of_device_id wf_max6690_of_id[] = {
124 { .compatible = "max6690", },
125 { }
126};
127MODULE_DEVICE_TABLE(of, wf_max6690_of_id);
128
123static struct i2c_driver wf_max6690_driver = {129static struct i2c_driver wf_max6690_driver = {
124 .driver = {130 .driver = {
125 .name = "wf_max6690",131 .name = "wf_max6690",
132 .of_match_table = wf_max6690_of_id,
126 },133 },
127 .probe = wf_max6690_probe,134 .probe = wf_max6690_probe,
128 .remove = wf_max6690_remove,135 .remove = wf_max6690_remove,
drivers/macintosh/windfarm_smu_sat.c+7−0
@@ -341,9 +341,16 @@ static const struct i2c_device_id wf_sat_id[] = { · 340 unmodified lines
341};341};
342MODULE_DEVICE_TABLE(i2c, wf_sat_id);342MODULE_DEVICE_TABLE(i2c, wf_sat_id);
343 343
344static const struct of_device_id wf_sat_of_id[] = {
345 { .compatible = "smu-sat", },
346 { }
347};
348MODULE_DEVICE_TABLE(of, wf_sat_of_id);
349
344static struct i2c_driver wf_sat_driver = {350static struct i2c_driver wf_sat_driver = {
345 .driver = {351 .driver = {
346 .name = "wf_smu_sat",352 .name = "wf_smu_sat",
353 .of_match_table = wf_sat_of_id,
347 },354 },
348 .probe = wf_sat_probe,355 .probe = wf_sat_probe,
349 .remove = wf_sat_remove,356 .remove = wf_sat_remove,
drivers/misc/cardreader/rts5227.c+1−1
@@ -394,7 +394,7 @@ static const struct pcr_ops rts522a_pcr_ops = { · 393 unmodified lines
394void rts522a_init_params(struct rtsx_pcr *pcr)394void rts522a_init_params(struct rtsx_pcr *pcr)
395{395{
396 rts5227_init_params(pcr);396 rts5227_init_params(pcr);
397 397 pcr->tx_initial_phase = SET_CLOCK_PHASE(20, 20, 11);
398 pcr->reg_pm_ctrl3 = RTS522A_PM_CTRL3;398 pcr->reg_pm_ctrl3 = RTS522A_PM_CTRL3;
399 399
400 pcr->option.ocp_en = 1;400 pcr->option.ocp_en = 1;
drivers/misc/cardreader/rts5249.c+2−0
@@ -618,6 +618,7 @@ static const struct pcr_ops rts524a_pcr_ops = { · 617 unmodified lines
618void rts524a_init_params(struct rtsx_pcr *pcr)618void rts524a_init_params(struct rtsx_pcr *pcr)
619{619{
620 rts5249_init_params(pcr);620 rts5249_init_params(pcr);
621 pcr->tx_initial_phase = SET_CLOCK_PHASE(27, 29, 11);
621 pcr->option.ltr_l1off_sspwrgate = LTR_L1OFF_SSPWRGATE_5250_DEF;622 pcr->option.ltr_l1off_sspwrgate = LTR_L1OFF_SSPWRGATE_5250_DEF;
622 pcr->option.ltr_l1off_snooze_sspwrgate =623 pcr->option.ltr_l1off_snooze_sspwrgate =
623 LTR_L1OFF_SNOOZE_SSPWRGATE_5250_DEF;624 LTR_L1OFF_SNOOZE_SSPWRGATE_5250_DEF;
@@ -733,6 +734,7 @@ static const struct pcr_ops rts525a_pcr_ops = { · 109 unmodified lines
733void rts525a_init_params(struct rtsx_pcr *pcr)734void rts525a_init_params(struct rtsx_pcr *pcr)
734{735{
735 rts5249_init_params(pcr);736 rts5249_init_params(pcr);
737 pcr->tx_initial_phase = SET_CLOCK_PHASE(25, 29, 11);
736 pcr->option.ltr_l1off_sspwrgate = LTR_L1OFF_SSPWRGATE_5250_DEF;738 pcr->option.ltr_l1off_sspwrgate = LTR_L1OFF_SSPWRGATE_5250_DEF;
737 pcr->option.ltr_l1off_snooze_sspwrgate =739 pcr->option.ltr_l1off_snooze_sspwrgate =
738 LTR_L1OFF_SNOOZE_SSPWRGATE_5250_DEF;740 LTR_L1OFF_SNOOZE_SSPWRGATE_5250_DEF;
drivers/misc/cardreader/rts5260.c+1−1
@@ -662,7 +662,7 @@ void rts5260_init_params(struct rtsx_pcr *pcr) · 661 unmodified lines
662 pcr->sd30_drive_sel_1v8 = CFG_DRIVER_TYPE_B;662 pcr->sd30_drive_sel_1v8 = CFG_DRIVER_TYPE_B;
663 pcr->sd30_drive_sel_3v3 = CFG_DRIVER_TYPE_B;663 pcr->sd30_drive_sel_3v3 = CFG_DRIVER_TYPE_B;
664 pcr->aspm_en = ASPM_L1_EN;664 pcr->aspm_en = ASPM_L1_EN;
665 pcr->tx_initial_phase = SET_CLOCK_PHASE(1, 29, 16);665 pcr->tx_initial_phase = SET_CLOCK_PHASE(27, 29, 11);
666 pcr->rx_initial_phase = SET_CLOCK_PHASE(24, 6, 5);666 pcr->rx_initial_phase = SET_CLOCK_PHASE(24, 6, 5);
667 667
668 pcr->ic_version = rts5260_get_ic_version(pcr);668 pcr->ic_version = rts5260_get_ic_version(pcr);
drivers/misc/cardreader/rts5261.c+1−1
@@ -764,7 +764,7 @@ void rts5261_init_params(struct rtsx_pcr *pcr) · 763 unmodified lines
764 pcr->sd30_drive_sel_1v8 = CFG_DRIVER_TYPE_B;764 pcr->sd30_drive_sel_1v8 = CFG_DRIVER_TYPE_B;
765 pcr->sd30_drive_sel_3v3 = CFG_DRIVER_TYPE_B;765 pcr->sd30_drive_sel_3v3 = CFG_DRIVER_TYPE_B;
766 pcr->aspm_en = ASPM_L1_EN;766 pcr->aspm_en = ASPM_L1_EN;
767 pcr->tx_initial_phase = SET_CLOCK_PHASE(20, 27, 16);767 pcr->tx_initial_phase = SET_CLOCK_PHASE(27, 27, 11);
768 pcr->rx_initial_phase = SET_CLOCK_PHASE(24, 6, 5);768 pcr->rx_initial_phase = SET_CLOCK_PHASE(24, 6, 5);
769 769
770 pcr->ic_version = rts5261_get_ic_version(pcr);770 pcr->ic_version = rts5261_get_ic_version(pcr);
drivers/misc/eeprom/at24.c+2−1
@@ -712,13 +712,14 @@ static int at24_probe(struct i2c_client *client) · 711 unmodified lines
712 * chip is functional.712 * chip is functional.
713 */713 */
714 err = at24_read(at24, 0, &test_byte, 1);714 err = at24_read(at24, 0, &test_byte, 1);
715 pm_runtime_idle(dev);
716 if (err) {715 if (err) {
717 pm_runtime_disable(dev);716 pm_runtime_disable(dev);
718 regulator_disable(at24->vcc_reg);717 regulator_disable(at24->vcc_reg);
719 return -ENODEV;718 return -ENODEV;
720 }719 }
721 720
721 pm_runtime_idle(dev);
722
722 if (writable)723 if (writable)
723 dev_info(dev, "%u byte %s EEPROM, writable, %u bytes/write\n",724 dev_info(dev, "%u byte %s EEPROM, writable, %u bytes/write\n",
724 byte_len, client->name, at24->write_max);725 byte_len, client->name, at24->write_max);
drivers/mmc/core/core.c+4−1
@@ -1732,8 +1732,11 @@ static int mmc_do_erase(struct mmc_card *card, unsigned int from, · 1731 unmodified lines
1732 * the erase operation does not exceed the max_busy_timeout, we should1732 * the erase operation does not exceed the max_busy_timeout, we should
1733 * use R1B response. Or we need to prevent the host from doing hw busy1733 * use R1B response. Or we need to prevent the host from doing hw busy
1734 * detection, which is done by converting to a R1 response instead.1734 * detection, which is done by converting to a R1 response instead.
1735 * Note, some hosts requires R1B, which also means they are on their own
1736 * when it comes to deal with the busy timeout.
1735 */1737 */
1736 if (card->host->max_busy_timeout &&1738 if (!(card->host->caps & MMC_CAP_NEED_RSP_BUSY) &&
1739 card->host->max_busy_timeout &&
1737 busy_timeout > card->host->max_busy_timeout) {1740 busy_timeout > card->host->max_busy_timeout) {
1738 cmd.flags = MMC_RSP_SPI_R1 | MMC_RSP_R1 | MMC_CMD_AC;1741 cmd.flags = MMC_RSP_SPI_R1 | MMC_RSP_R1 | MMC_CMD_AC;
1739 } else {1742 } else {
drivers/mmc/core/mmc.c+5−2
@@ -1910,9 +1910,12 @@ static int mmc_sleep(struct mmc_host *host) · 1909 unmodified lines
1910 * If the max_busy_timeout of the host is specified, validate it against1910 * If the max_busy_timeout of the host is specified, validate it against
1911 * the sleep cmd timeout. A failure means we need to prevent the host1911 * the sleep cmd timeout. A failure means we need to prevent the host
1912 * from doing hw busy detection, which is done by converting to a R11912 * from doing hw busy detection, which is done by converting to a R1
1913 * response instead of a R1B.1913 * response instead of a R1B. Note, some hosts requires R1B, which also
1914 * means they are on their own when it comes to deal with the busy
1915 * timeout.
1914 */1916 */
1915 if (host->max_busy_timeout && (timeout_ms > host->max_busy_timeout)) {1917 if (!(host->caps & MMC_CAP_NEED_RSP_BUSY) && host->max_busy_timeout &&
1918 (timeout_ms > host->max_busy_timeout)) {
1916 cmd.flags = MMC_RSP_R1 | MMC_CMD_AC;1919 cmd.flags = MMC_RSP_R1 | MMC_CMD_AC;
1917 } else {1920 } else {
1918 cmd.flags = MMC_RSP_R1B | MMC_CMD_AC;1921 cmd.flags = MMC_RSP_R1B | MMC_CMD_AC;
drivers/mmc/core/mmc_ops.c+4−2
@@ -542,9 +542,11 @@ int __mmc_switch(struct mmc_card *card, u8 set, u8 index, u8 value, · 541 unmodified lines
542 * If the max_busy_timeout of the host is specified, make sure it's542 * If the max_busy_timeout of the host is specified, make sure it's
543 * enough to fit the used timeout_ms. In case it's not, let's instruct543 * enough to fit the used timeout_ms. In case it's not, let's instruct
544 * the host to avoid HW busy detection, by converting to a R1 response544 * the host to avoid HW busy detection, by converting to a R1 response
545 * instead of a R1B.545 * instead of a R1B. Note, some hosts requires R1B, which also means
546 * they are on their own when it comes to deal with the busy timeout.
546 */547 */
547 if (host->max_busy_timeout && (timeout_ms > host->max_busy_timeout))548 if (!(host->caps & MMC_CAP_NEED_RSP_BUSY) && host->max_busy_timeout &&
549 (timeout_ms > host->max_busy_timeout))
548 use_r1b_resp = false;550 use_r1b_resp = false;
549 551
550 cmd.opcode = MMC_SWITCH;552 cmd.opcode = MMC_SWITCH;
drivers/mmc/host/rtsx_pci_sdmmc.c+8−5
@@ -606,19 +606,22 @@ static int sd_change_phase(struct realtek_pci_sdmmc *host, · 605 unmodified lines
606 u8 sample_point, bool rx)606 u8 sample_point, bool rx)
607{607{
608 struct rtsx_pcr *pcr = host->pcr;608 struct rtsx_pcr *pcr = host->pcr;
609 609 u16 SD_VP_CTL = 0;
610 dev_dbg(sdmmc_dev(host), "%s(%s): sample_point = %d\n",610 dev_dbg(sdmmc_dev(host), "%s(%s): sample_point = %d\n",
611 __func__, rx ? "RX" : "TX", sample_point);611 __func__, rx ? "RX" : "TX", sample_point);
612 612
613 rtsx_pci_write_register(pcr, CLK_CTL, CHANGE_CLK, CHANGE_CLK);613 rtsx_pci_write_register(pcr, CLK_CTL, CHANGE_CLK, CHANGE_CLK);
614 if (rx)614 if (rx) {
615 SD_VP_CTL = SD_VPRX_CTL;
615 rtsx_pci_write_register(pcr, SD_VPRX_CTL,616 rtsx_pci_write_register(pcr, SD_VPRX_CTL,
616 PHASE_SELECT_MASK, sample_point);617 PHASE_SELECT_MASK, sample_point);
617 else618 } else {
619 SD_VP_CTL = SD_VPTX_CTL;
618 rtsx_pci_write_register(pcr, SD_VPTX_CTL,620 rtsx_pci_write_register(pcr, SD_VPTX_CTL,
619 PHASE_SELECT_MASK, sample_point);621 PHASE_SELECT_MASK, sample_point);
620 rtsx_pci_write_register(pcr, SD_VPCLK0_CTL, PHASE_NOT_RESET, 0);622 }
621 rtsx_pci_write_register(pcr, SD_VPCLK0_CTL, PHASE_NOT_RESET,623 rtsx_pci_write_register(pcr, SD_VP_CTL, PHASE_NOT_RESET, 0);
624 rtsx_pci_write_register(pcr, SD_VP_CTL, PHASE_NOT_RESET,
622 PHASE_NOT_RESET);625 PHASE_NOT_RESET);
623 rtsx_pci_write_register(pcr, CLK_CTL, CHANGE_CLK, 0);626 rtsx_pci_write_register(pcr, CLK_CTL, CHANGE_CLK, 0);
624 rtsx_pci_write_register(pcr, SD_CFG1, SD_ASYNC_FIFO_NOT_RST, 0);627 rtsx_pci_write_register(pcr, SD_CFG1, SD_ASYNC_FIFO_NOT_RST, 0);
drivers/mmc/host/sdhci-acpi.c+82−2
@@ -23,6 +23,7 @@ · 22 unmodified lines
23#include <linux/pm.h>23#include <linux/pm.h>
24#include <linux/pm_runtime.h>24#include <linux/pm_runtime.h>
25#include <linux/delay.h>25#include <linux/delay.h>
26#include <linux/dmi.h>
26 27
27#include <linux/mmc/host.h>28#include <linux/mmc/host.h>
28#include <linux/mmc/pm.h>29#include <linux/mmc/pm.h>
@@ -72,9 +73,16 @@ struct sdhci_acpi_host { · 43 unmodified lines
72 const struct sdhci_acpi_slot *slot;73 const struct sdhci_acpi_slot *slot;
73 struct platform_device *pdev;74 struct platform_device *pdev;
74 bool use_runtime_pm;75 bool use_runtime_pm;
76 bool is_intel;
77 bool reset_signal_volt_on_suspend;
75 unsigned long private[0] ____cacheline_aligned;78 unsigned long private[0] ____cacheline_aligned;
76};79};
77 80
81enum {
82 DMI_QUIRK_RESET_SD_SIGNAL_VOLT_ON_SUSP = BIT(0),
83 DMI_QUIRK_SD_NO_WRITE_PROTECT = BIT(1),
84};
85
78static inline void *sdhci_acpi_priv(struct sdhci_acpi_host *c)86static inline void *sdhci_acpi_priv(struct sdhci_acpi_host *c)
79{87{
80 return (void *)c->private;88 return (void *)c->private;
@@ -391,6 +399,8 @@ static int intel_probe_slot(struct platform_device *pdev, struct acpi_device *ad · 310 unmodified lines
391 host->mmc_host_ops.start_signal_voltage_switch =399 host->mmc_host_ops.start_signal_voltage_switch =
392 intel_start_signal_voltage_switch;400 intel_start_signal_voltage_switch;
393 401
402 c->is_intel = true;
403
394 return 0;404 return 0;
395}405}
396 406
@@ -647,6 +657,36 @@ static const struct acpi_device_id sdhci_acpi_ids[] = { · 250 unmodified lines
647};657};
648MODULE_DEVICE_TABLE(acpi, sdhci_acpi_ids);658MODULE_DEVICE_TABLE(acpi, sdhci_acpi_ids);
649 659
660static const struct dmi_system_id sdhci_acpi_quirks[] = {
661 {
662 /*
663 * The Lenovo Miix 320-10ICR has a bug in the _PS0 method of
664 * the SHC1 ACPI device, this bug causes it to reprogram the
665 * wrong LDO (DLDO3) to 1.8V if 1.8V modes are used and the
666 * card is (runtime) suspended + resumed. DLDO3 is used for
667 * the LCD and setting it to 1.8V causes the LCD to go black.
668 */
669 .matches = {
670 DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"),
671 DMI_MATCH(DMI_PRODUCT_VERSION, "Lenovo MIIX 320-10ICR"),
672 },
673 .driver_data = (void *)DMI_QUIRK_RESET_SD_SIGNAL_VOLT_ON_SUSP,
674 },
675 {
676 /*
677 * The Acer Aspire Switch 10 (SW5-012) microSD slot always
678 * reports the card being write-protected even though microSD
679 * cards do not have a write-protect switch at all.
680 */
681 .matches = {
682 DMI_MATCH(DMI_SYS_VENDOR, "Acer"),
683 DMI_MATCH(DMI_PRODUCT_NAME, "Aspire SW5-012"),
684 },
685 .driver_data = (void *)DMI_QUIRK_SD_NO_WRITE_PROTECT,
686 },
687 {} /* Terminating entry */
688};
689
650static const struct sdhci_acpi_slot *sdhci_acpi_get_slot(struct acpi_device *adev)690static const struct sdhci_acpi_slot *sdhci_acpi_get_slot(struct acpi_device *adev)
651{691{
652 const struct sdhci_acpi_uid_slot *u;692 const struct sdhci_acpi_uid_slot *u;
@@ -663,17 +703,23 @@ static int sdhci_acpi_probe(struct platform_device *pdev) · 10 unmodified lines
663 struct device *dev = &pdev->dev;703 struct device *dev = &pdev->dev;
664 const struct sdhci_acpi_slot *slot;704 const struct sdhci_acpi_slot *slot;
665 struct acpi_device *device, *child;705 struct acpi_device *device, *child;
706 const struct dmi_system_id *id;
666 struct sdhci_acpi_host *c;707 struct sdhci_acpi_host *c;
667 struct sdhci_host *host;708 struct sdhci_host *host;
668 struct resource *iomem;709 struct resource *iomem;
669 resource_size_t len;710 resource_size_t len;
670 size_t priv_size;711 size_t priv_size;
712 int quirks = 0;
671 int err;713 int err;
672 714
673 device = ACPI_COMPANION(dev);715 device = ACPI_COMPANION(dev);
674 if (!device)716 if (!device)
675 return -ENODEV;717 return -ENODEV;
676 718
719 id = dmi_first_match(sdhci_acpi_quirks);
720 if (id)
721 quirks = (long)id->driver_data;
722
677 slot = sdhci_acpi_get_slot(device);723 slot = sdhci_acpi_get_slot(device);
678 724
679 /* Power on the SDHCI controller and its children */725 /* Power on the SDHCI controller and its children */
@@ -759,6 +805,12 @@ static int sdhci_acpi_probe(struct platform_device *pdev) · 79 unmodified lines
759 dev_warn(dev, "failed to setup card detect gpio\n");805 dev_warn(dev, "failed to setup card detect gpio\n");
760 c->use_runtime_pm = false;806 c->use_runtime_pm = false;
761 }807 }
808
809 if (quirks & DMI_QUIRK_RESET_SD_SIGNAL_VOLT_ON_SUSP)
810 c->reset_signal_volt_on_suspend = true;
811
812 if (quirks & DMI_QUIRK_SD_NO_WRITE_PROTECT)
813 host->mmc->caps2 |= MMC_CAP2_NO_WRITE_PROTECT;
762 }814 }
763 815
764 err = sdhci_setup_host(host);816 err = sdhci_setup_host(host);
@@ -823,17 +875,39 @@ static int sdhci_acpi_remove(struct platform_device *pdev) · 58 unmodified lines
823 return 0;875 return 0;
824}876}
825 877
878static void __maybe_unused sdhci_acpi_reset_signal_voltage_if_needed(
879 struct device *dev)
880{
881 struct sdhci_acpi_host *c = dev_get_drvdata(dev);
882 struct sdhci_host *host = c->host;
883
884 if (c->is_intel && c->reset_signal_volt_on_suspend &&
885 host->mmc->ios.signal_voltage != MMC_SIGNAL_VOLTAGE_330) {
886 struct intel_host *intel_host = sdhci_acpi_priv(c);
887 unsigned int fn = INTEL_DSM_V33_SWITCH;
888 u32 result = 0;
889
890 intel_dsm(intel_host, dev, fn, &result);
891 }
892}
893
826#ifdef CONFIG_PM_SLEEP894#ifdef CONFIG_PM_SLEEP
827 895
828static int sdhci_acpi_suspend(struct device *dev)896static int sdhci_acpi_suspend(struct device *dev)
829{897{
830 struct sdhci_acpi_host *c = dev_get_drvdata(dev);898 struct sdhci_acpi_host *c = dev_get_drvdata(dev);
831 struct sdhci_host *host = c->host;899 struct sdhci_host *host = c->host;
900 int ret;
832 901
833 if (host->tuning_mode != SDHCI_TUNING_MODE_3)902 if (host->tuning_mode != SDHCI_TUNING_MODE_3)
834 mmc_retune_needed(host->mmc);903 mmc_retune_needed(host->mmc);
835 904
836 return sdhci_suspend_host(host);905 ret = sdhci_suspend_host(host);
906 if (ret)
907 return ret;
908
909 sdhci_acpi_reset_signal_voltage_if_needed(dev);
910 return 0;
837}911}
838 912
839static int sdhci_acpi_resume(struct device *dev)913static int sdhci_acpi_resume(struct device *dev)
@@ -853,11 +927,17 @@ static int sdhci_acpi_runtime_suspend(struct device *dev) · 13 unmodified lines
853{927{
854 struct sdhci_acpi_host *c = dev_get_drvdata(dev);928 struct sdhci_acpi_host *c = dev_get_drvdata(dev);
855 struct sdhci_host *host = c->host;929 struct sdhci_host *host = c->host;
930 int ret;
856 931
857 if (host->tuning_mode != SDHCI_TUNING_MODE_3)932 if (host->tuning_mode != SDHCI_TUNING_MODE_3)
858 mmc_retune_needed(host->mmc);933 mmc_retune_needed(host->mmc);
859 934
860 return sdhci_runtime_suspend_host(host);935 ret = sdhci_runtime_suspend_host(host);
936 if (ret)
937 return ret;
938
939 sdhci_acpi_reset_signal_voltage_if_needed(dev);
940 return 0;
861}941}
862 942
863static int sdhci_acpi_runtime_resume(struct device *dev)943static int sdhci_acpi_runtime_resume(struct device *dev)
drivers/mmc/host/sdhci-cadence.c+16−2
@@ -11,6 +11,7 @@ · 10 unmodified lines
11#include <linux/mmc/host.h>11#include <linux/mmc/host.h>
12#include <linux/mmc/mmc.h>12#include <linux/mmc/mmc.h>
13#include <linux/of.h>13#include <linux/of.h>
14#include <linux/of_device.h>
14 15
15#include "sdhci-pltfm.h"16#include "sdhci-pltfm.h"
16 17
@@ -235,6 +236,11 @@ static const struct sdhci_ops sdhci_cdns_ops = { · 218 unmodified lines
235 .set_uhs_signaling = sdhci_cdns_set_uhs_signaling,236 .set_uhs_signaling = sdhci_cdns_set_uhs_signaling,
236};237};
237 238
239static const struct sdhci_pltfm_data sdhci_cdns_uniphier_pltfm_data = {
240 .ops = &sdhci_cdns_ops,
241 .quirks2 = SDHCI_QUIRK2_PRESET_VALUE_BROKEN,
242};
243
238static const struct sdhci_pltfm_data sdhci_cdns_pltfm_data = {244static const struct sdhci_pltfm_data sdhci_cdns_pltfm_data = {
239 .ops = &sdhci_cdns_ops,245 .ops = &sdhci_cdns_ops,
240};246};
@@ -334,6 +340,7 @@ static void sdhci_cdns_hs400_enhanced_strobe(struct mmc_host *mmc, · 93 unmodified lines
334static int sdhci_cdns_probe(struct platform_device *pdev)340static int sdhci_cdns_probe(struct platform_device *pdev)
335{341{
336 struct sdhci_host *host;342 struct sdhci_host *host;
343 const struct sdhci_pltfm_data *data;
337 struct sdhci_pltfm_host *pltfm_host;344 struct sdhci_pltfm_host *pltfm_host;
338 struct sdhci_cdns_priv *priv;345 struct sdhci_cdns_priv *priv;
339 struct clk *clk;346 struct clk *clk;
@@ -350,8 +357,12 @@ static int sdhci_cdns_probe(struct platform_device *pdev) · 10 unmodified lines
350 if (ret)357 if (ret)
351 return ret;358 return ret;
352 359
360 data = of_device_get_match_data(dev);
361 if (!data)
362 data = &sdhci_cdns_pltfm_data;
363
353 nr_phy_params = sdhci_cdns_phy_param_count(dev->of_node);364 nr_phy_params = sdhci_cdns_phy_param_count(dev->of_node);
354 host = sdhci_pltfm_init(pdev, &sdhci_cdns_pltfm_data,365 host = sdhci_pltfm_init(pdev, data,
355 struct_size(priv, phy_params, nr_phy_params));366 struct_size(priv, phy_params, nr_phy_params));
356 if (IS_ERR(host)) {367 if (IS_ERR(host)) {
357 ret = PTR_ERR(host);368 ret = PTR_ERR(host);
@@ -431,7 +442,10 @@ static const struct dev_pm_ops sdhci_cdns_pm_ops = { · 73 unmodified lines
431};442};
432 443
433static const struct of_device_id sdhci_cdns_match[] = {444static const struct of_device_id sdhci_cdns_match[] = {
434 { .compatible = "socionext,uniphier-sd4hc" },445 {
446 .compatible = "socionext,uniphier-sd4hc",
447 .data = &sdhci_cdns_uniphier_pltfm_data,
448 },
435 { .compatible = "cdns,sd4hc" },449 { .compatible = "cdns,sd4hc" },
436 { /* sentinel */ }450 { /* sentinel */ }
437};451};
drivers/mmc/host/sdhci-msm.c+1−1
@@ -1590,7 +1590,7 @@ static u32 sdhci_msm_cqe_irq(struct sdhci_host *host, u32 intmask) · 1589 unmodified lines
1590 return 0;1590 return 0;
1591}1591}
1592 1592
1593void sdhci_msm_cqe_disable(struct mmc_host *mmc, bool recovery)1593static void sdhci_msm_cqe_disable(struct mmc_host *mmc, bool recovery)
1594{1594{
1595 struct sdhci_host *host = mmc_priv(mmc);1595 struct sdhci_host *host = mmc_priv(mmc);
1596 unsigned long flags;1596 unsigned long flags;
drivers/mmc/host/sdhci-of-at91.c+6−2
@@ -132,7 +132,8 @@ static void sdhci_at91_reset(struct sdhci_host *host, u8 mask) · 131 unmodified lines
132 132
133 sdhci_reset(host, mask);133 sdhci_reset(host, mask);
134 134
135 if (host->mmc->caps & MMC_CAP_NONREMOVABLE)135 if ((host->mmc->caps & MMC_CAP_NONREMOVABLE)
136 || mmc_gpio_get_cd(host->mmc) >= 0)
136 sdhci_at91_set_force_card_detect(host);137 sdhci_at91_set_force_card_detect(host);
137 138
138 if (priv->cal_always_on && (mask & SDHCI_RESET_ALL))139 if (priv->cal_always_on && (mask & SDHCI_RESET_ALL))
@@ -427,8 +428,11 @@ static int sdhci_at91_probe(struct platform_device *pdev) · 288 unmodified lines
427 * detection procedure using the SDMCC_CD signal is bypassed.428 * detection procedure using the SDMCC_CD signal is bypassed.
428 * This bit is reset when a software reset for all command is performed429 * This bit is reset when a software reset for all command is performed
429 * so we need to implement our own reset function to set back this bit.430 * so we need to implement our own reset function to set back this bit.
431 *
432 * WA: SAMA5D2 doesn't drive CMD if using CD GPIO line.
430 */433 */
431 if (host->mmc->caps & MMC_CAP_NONREMOVABLE)434 if ((host->mmc->caps & MMC_CAP_NONREMOVABLE)
435 || mmc_gpio_get_cd(host->mmc) >= 0)
432 sdhci_at91_set_force_card_detect(host);436 sdhci_at91_set_force_card_detect(host);
433 437
434 pm_runtime_put_autosuspend(&pdev->dev);438 pm_runtime_put_autosuspend(&pdev->dev);
drivers/mmc/host/sdhci-omap.c+3−0
@@ -1192,6 +1192,9 @@ static int sdhci_omap_probe(struct platform_device *pdev) · 1191 unmodified lines
1192 if (of_find_property(dev->of_node, "dmas", NULL))1192 if (of_find_property(dev->of_node, "dmas", NULL))
1193 sdhci_switch_external_dma(host, true);1193 sdhci_switch_external_dma(host, true);
1194 1194
1195 /* R1B responses is required to properly manage HW busy detection. */
1196 mmc->caps |= MMC_CAP_NEED_RSP_BUSY;
1197
1195 ret = sdhci_setup_host(host);1198 ret = sdhci_setup_host(host);
1196 if (ret)1199 if (ret)
1197 goto err_put_sync;1200 goto err_put_sync;
drivers/mmc/host/sdhci-pci-gli.c+17−0
@@ -262,10 +262,26 @@ static int gl9750_execute_tuning(struct sdhci_host *host, u32 opcode) · 261 unmodified lines
262 return 0;262 return 0;
263}263}
264 264
265static void gli_pcie_enable_msi(struct sdhci_pci_slot *slot)
266{
267 int ret;
268
269 ret = pci_alloc_irq_vectors(slot->chip->pdev, 1, 1,
270 PCI_IRQ_MSI | PCI_IRQ_MSIX);
271 if (ret < 0) {
272 pr_warn("%s: enable PCI MSI failed, error=%d\n",
273 mmc_hostname(slot->host->mmc), ret);
274 return;
275 }
276
277 slot->host->irq = pci_irq_vector(slot->chip->pdev, 0);
278}
279
265static int gli_probe_slot_gl9750(struct sdhci_pci_slot *slot)280static int gli_probe_slot_gl9750(struct sdhci_pci_slot *slot)
266{281{
267 struct sdhci_host *host = slot->host;282 struct sdhci_host *host = slot->host;
268 283
284 gli_pcie_enable_msi(slot);
269 slot->host->mmc->caps2 |= MMC_CAP2_NO_SDIO;285 slot->host->mmc->caps2 |= MMC_CAP2_NO_SDIO;
270 sdhci_enable_v4_mode(host);286 sdhci_enable_v4_mode(host);
271 287
@@ -276,6 +292,7 @@ static int gli_probe_slot_gl9755(struct sdhci_pci_slot *slot) · 4 unmodified lines
276{292{
277 struct sdhci_host *host = slot->host;293 struct sdhci_host *host = slot->host;
278 294
295 gli_pcie_enable_msi(slot);
279 slot->host->mmc->caps2 |= MMC_CAP2_NO_SDIO;296 slot->host->mmc->caps2 |= MMC_CAP2_NO_SDIO;
280 sdhci_enable_v4_mode(host);297 sdhci_enable_v4_mode(host);
281 298
drivers/mmc/host/sdhci-tegra.c+3−0
@@ -1552,6 +1552,9 @@ static int sdhci_tegra_probe(struct platform_device *pdev) · 1551 unmodified lines
1552 if (tegra_host->soc_data->nvquirks & NVQUIRK_ENABLE_DDR50)1552 if (tegra_host->soc_data->nvquirks & NVQUIRK_ENABLE_DDR50)
1553 host->mmc->caps |= MMC_CAP_1_8V_DDR;1553 host->mmc->caps |= MMC_CAP_1_8V_DDR;
1554 1554
1555 /* R1B responses is required to properly manage HW busy detection. */
1556 host->mmc->caps |= MMC_CAP_NEED_RSP_BUSY;
1557
1555 tegra_sdhci_parse_dt(host);1558 tegra_sdhci_parse_dt(host);
1556 1559
1557 tegra_host->power_gpio = devm_gpiod_get_optional(&pdev->dev, "power",1560 tegra_host->power_gpio = devm_gpiod_get_optional(&pdev->dev, "power",
drivers/net/bonding/bond_alb.c+10−10
@@ -50,11 +50,6 @@ struct arp_pkt { · 49 unmodified lines
50};50};
51#pragma pack()51#pragma pack()
52 52
53static inline struct arp_pkt *arp_pkt(const struct sk_buff *skb)
54{
55 return (struct arp_pkt *)skb_network_header(skb);
56}
57
58/* Forward declaration */53/* Forward declaration */
59static void alb_send_learning_packets(struct slave *slave, u8 mac_addr[],54static void alb_send_learning_packets(struct slave *slave, u8 mac_addr[],
60 bool strict_match);55 bool strict_match);
@@ -553,10 +548,11 @@ static void rlb_req_update_subnet_clients(struct bonding *bond, __be32 src_ip) · 492 unmodified lines
553 spin_unlock(&bond->mode_lock);548 spin_unlock(&bond->mode_lock);
554}549}
555 550
556static struct slave *rlb_choose_channel(struct sk_buff *skb, struct bonding *bond)551static struct slave *rlb_choose_channel(struct sk_buff *skb,
552 struct bonding *bond,
553 const struct arp_pkt *arp)
557{554{
558 struct alb_bond_info *bond_info = &(BOND_ALB_INFO(bond));555 struct alb_bond_info *bond_info = &(BOND_ALB_INFO(bond));
559 struct arp_pkt *arp = arp_pkt(skb);
560 struct slave *assigned_slave, *curr_active_slave;556 struct slave *assigned_slave, *curr_active_slave;
561 struct rlb_client_info *client_info;557 struct rlb_client_info *client_info;
562 u32 hash_index = 0;558 u32 hash_index = 0;
@@ -653,8 +649,12 @@ static struct slave *rlb_choose_channel(struct sk_buff *skb, struct bonding *bon · 90 unmodified lines
653 */649 */
654static struct slave *rlb_arp_xmit(struct sk_buff *skb, struct bonding *bond)650static struct slave *rlb_arp_xmit(struct sk_buff *skb, struct bonding *bond)
655{651{
656 struct arp_pkt *arp = arp_pkt(skb);
657 struct slave *tx_slave = NULL;652 struct slave *tx_slave = NULL;
653 struct arp_pkt *arp;
654
655 if (!pskb_network_may_pull(skb, sizeof(*arp)))
656 return NULL;
657 arp = (struct arp_pkt *)skb_network_header(skb);
658 658
659 /* Don't modify or load balance ARPs that do not originate locally659 /* Don't modify or load balance ARPs that do not originate locally
660 * (e.g.,arrive via a bridge).660 * (e.g.,arrive via a bridge).
@@ -664,7 +664,7 @@ static struct slave *rlb_arp_xmit(struct sk_buff *skb, struct bonding *bond) · 3 unmodified lines
664 664
665 if (arp->op_code == htons(ARPOP_REPLY)) {665 if (arp->op_code == htons(ARPOP_REPLY)) {
666 /* the arp must be sent on the selected rx channel */666 /* the arp must be sent on the selected rx channel */
667 tx_slave = rlb_choose_channel(skb, bond);667 tx_slave = rlb_choose_channel(skb, bond, arp);
668 if (tx_slave)668 if (tx_slave)
669 bond_hw_addr_copy(arp->mac_src, tx_slave->dev->dev_addr,669 bond_hw_addr_copy(arp->mac_src, tx_slave->dev->dev_addr,
670 tx_slave->dev->addr_len);670 tx_slave->dev->addr_len);
@@ -676,7 +676,7 @@ static struct slave *rlb_arp_xmit(struct sk_buff *skb, struct bonding *bond) · 5 unmodified lines
676 * When the arp reply is received the entry will be updated676 * When the arp reply is received the entry will be updated
677 * with the correct unicast address of the client.677 * with the correct unicast address of the client.
678 */678 */
679 tx_slave = rlb_choose_channel(skb, bond);679 tx_slave = rlb_choose_channel(skb, bond, arp);
680 680
681 /* The ARP reply packets must be delayed so that681 /* The ARP reply packets must be delayed so that
682 * they can cancel out the influence of the ARP request.682 * they can cancel out the influence of the ARP request.
drivers/net/can/dev.c+1−0
@@ -883,6 +883,7 @@ static const struct nla_policy can_policy[IFLA_CAN_MAX + 1] = { · 882 unmodified lines
883 = { .len = sizeof(struct can_bittiming) },883 = { .len = sizeof(struct can_bittiming) },
884 [IFLA_CAN_DATA_BITTIMING_CONST]884 [IFLA_CAN_DATA_BITTIMING_CONST]
885 = { .len = sizeof(struct can_bittiming_const) },885 = { .len = sizeof(struct can_bittiming_const) },
886 [IFLA_CAN_TERMINATION] = { .type = NLA_U16 },
886};887};
887 888
888static int can_validate(struct nlattr *tb[], struct nlattr *data[],889static int can_validate(struct nlattr *tb[], struct nlattr *data[],
drivers/net/dsa/mv88e6xxx/chip.c+2−0
@@ -2769,6 +2769,8 @@ static u64 mv88e6xxx_devlink_atu_bin_get(struct mv88e6xxx_chip *chip, · 2768 unmodified lines
2769 goto unlock;2769 goto unlock;
2770 }2770 }
2771 2771
2772 occupancy &= MV88E6XXX_G2_ATU_STATS_MASK;
2773
2772unlock:2774unlock:
2773 mv88e6xxx_reg_unlock(chip);2775 mv88e6xxx_reg_unlock(chip);
2774 2776
drivers/net/dsa/mv88e6xxx/global2.c+7−1
@@ -1099,6 +1099,13 @@ int mv88e6xxx_g2_irq_setup(struct mv88e6xxx_chip *chip) · 1098 unmodified lines
1099{1099{
1100 int err, irq, virq;1100 int err, irq, virq;
1101 1101
1102 chip->g2_irq.masked = ~0;
1103 mv88e6xxx_reg_lock(chip);
1104 err = mv88e6xxx_g2_int_mask(chip, ~chip->g2_irq.masked);
1105 mv88e6xxx_reg_unlock(chip);
1106 if (err)
1107 return err;
1108
1102 chip->g2_irq.domain = irq_domain_add_simple(1109 chip->g2_irq.domain = irq_domain_add_simple(
1103 chip->dev->of_node, 16, 0, &mv88e6xxx_g2_irq_domain_ops, chip);1110 chip->dev->of_node, 16, 0, &mv88e6xxx_g2_irq_domain_ops, chip);
1104 if (!chip->g2_irq.domain)1111 if (!chip->g2_irq.domain)
@@ -1108,7 +1115,6 @@ int mv88e6xxx_g2_irq_setup(struct mv88e6xxx_chip *chip) · 3 unmodified lines
1108 irq_create_mapping(chip->g2_irq.domain, irq);1115 irq_create_mapping(chip->g2_irq.domain, irq);
1109 1116
1110 chip->g2_irq.chip = mv88e6xxx_g2_irq_chip;1117 chip->g2_irq.chip = mv88e6xxx_g2_irq_chip;
1111 chip->g2_irq.masked = ~0;
1112 1118
1113 chip->device_irq = irq_find_mapping(chip->g1_irq.domain,1119 chip->device_irq = irq_find_mapping(chip->g1_irq.domain,
1114 MV88E6XXX_G1_STS_IRQ_DEVICE);1120 MV88E6XXX_G1_STS_IRQ_DEVICE);
drivers/net/dsa/sja1105/sja1105_main.c+2−1
@@ -1741,7 +1741,8 @@ static void sja1105_teardown(struct dsa_switch *ds) · 1740 unmodified lines
1741 if (!dsa_is_user_port(ds, port))1741 if (!dsa_is_user_port(ds, port))
1742 continue;1742 continue;
1743 1743
1744 kthread_destroy_worker(sp->xmit_worker);1744 if (sp->xmit_worker)
1745 kthread_destroy_worker(sp->xmit_worker);
1745 }1746 }
1746 1747
1747 sja1105_tas_teardown(ds);1748 sja1105_tas_teardown(ds);
drivers/net/ethernet/broadcom/bcmsysport.c+1−1
@@ -2135,7 +2135,7 @@ static int bcm_sysport_rule_set(struct bcm_sysport_priv *priv, · 2134 unmodified lines
2135 return -ENOSPC;2135 return -ENOSPC;
2136 2136
2137 index = find_first_zero_bit(priv->filters, RXCHK_BRCM_TAG_MAX);2137 index = find_first_zero_bit(priv->filters, RXCHK_BRCM_TAG_MAX);
2138 if (index > RXCHK_BRCM_TAG_MAX)2138 if (index >= RXCHK_BRCM_TAG_MAX)
2139 return -ENOSPC;2139 return -ENOSPC;
2140 2140
2141 /* Location is the classification ID, and index is the position2141 /* Location is the classification ID, and index is the position
drivers/net/ethernet/broadcom/bnxt/bnxt.c+2−2
@@ -10982,13 +10982,13 @@ static int bnxt_change_mtu(struct net_device *dev, int new_mtu) · 10981 unmodified lines
10982 struct bnxt *bp = netdev_priv(dev);10982 struct bnxt *bp = netdev_priv(dev);
10983 10983
10984 if (netif_running(dev))10984 if (netif_running(dev))
10985 bnxt_close_nic(bp, false, false);10985 bnxt_close_nic(bp, true, false);
10986 10986
10987 dev->mtu = new_mtu;10987 dev->mtu = new_mtu;
10988 bnxt_set_ring_params(bp);10988 bnxt_set_ring_params(bp);
10989 10989
10990 if (netif_running(dev))10990 if (netif_running(dev))
10991 return bnxt_open_nic(bp, false, false);10991 return bnxt_open_nic(bp, true, false);
10992 10992
10993 return 0;10993 return 0;
10994}10994}
drivers/net/ethernet/broadcom/bnxt/bnxt_ethtool.c+11−13
@@ -2007,8 +2007,8 @@ int bnxt_flash_package_from_file(struct net_device *dev, const char *filename, · 2006 unmodified lines
2007 struct hwrm_nvm_install_update_output *resp = bp->hwrm_cmd_resp_addr;2007 struct hwrm_nvm_install_update_output *resp = bp->hwrm_cmd_resp_addr;
2008 struct hwrm_nvm_install_update_input install = {0};2008 struct hwrm_nvm_install_update_input install = {0};
2009 const struct firmware *fw;2009 const struct firmware *fw;
2010 int rc, hwrm_err = 0;
2011 u32 item_len;2010 u32 item_len;
2011 int rc = 0;
2012 u16 index;2012 u16 index;
2013 2013
2014 bnxt_hwrm_fw_set_time(bp);2014 bnxt_hwrm_fw_set_time(bp);
@@ -2052,15 +2052,14 @@ int bnxt_flash_package_from_file(struct net_device *dev, const char *filename, · 37 unmodified lines
2052 memcpy(kmem, fw->data, fw->size);2052 memcpy(kmem, fw->data, fw->size);
2053 modify.host_src_addr = cpu_to_le64(dma_handle);2053 modify.host_src_addr = cpu_to_le64(dma_handle);
2054 2054
2055 hwrm_err = hwrm_send_message(bp, &modify,2055 rc = hwrm_send_message(bp, &modify, sizeof(modify),
2056 sizeof(modify),2056 FLASH_PACKAGE_TIMEOUT);
2057 FLASH_PACKAGE_TIMEOUT);
2058 dma_free_coherent(&bp->pdev->dev, fw->size, kmem,2057 dma_free_coherent(&bp->pdev->dev, fw->size, kmem,
2059 dma_handle);2058 dma_handle);
2060 }2059 }
2061 }2060 }
2062 release_firmware(fw);2061 release_firmware(fw);
2063 if (rc || hwrm_err)2062 if (rc)
2064 goto err_exit;2063 goto err_exit;
2065 2064
2066 if ((install_type & 0xffff) == 0)2065 if ((install_type & 0xffff) == 0)
@@ -2069,20 +2068,19 @@ int bnxt_flash_package_from_file(struct net_device *dev, const char *filename, · 2 unmodified lines
2069 install.install_type = cpu_to_le32(install_type);2068 install.install_type = cpu_to_le32(install_type);
2070 2069
2071 mutex_lock(&bp->hwrm_cmd_lock);2070 mutex_lock(&bp->hwrm_cmd_lock);
2072 hwrm_err = _hwrm_send_message(bp, &install, sizeof(install),2071 rc = _hwrm_send_message(bp, &install, sizeof(install),
2073 INSTALL_PACKAGE_TIMEOUT);2072 INSTALL_PACKAGE_TIMEOUT);
2074 if (hwrm_err) {2073 if (rc) {
2075 u8 error_code = ((struct hwrm_err_output *)resp)->cmd_err;2074 u8 error_code = ((struct hwrm_err_output *)resp)->cmd_err;
2076 2075
2077 if (resp->error_code && error_code ==2076 if (resp->error_code && error_code ==
2078 NVM_INSTALL_UPDATE_CMD_ERR_CODE_FRAG_ERR) {2077 NVM_INSTALL_UPDATE_CMD_ERR_CODE_FRAG_ERR) {
2079 install.flags |= cpu_to_le16(2078 install.flags |= cpu_to_le16(
2080 NVM_INSTALL_UPDATE_REQ_FLAGS_ALLOWED_TO_DEFRAG);2079 NVM_INSTALL_UPDATE_REQ_FLAGS_ALLOWED_TO_DEFRAG);
2081 hwrm_err = _hwrm_send_message(bp, &install,2080 rc = _hwrm_send_message(bp, &install, sizeof(install),
2082 sizeof(install),2081 INSTALL_PACKAGE_TIMEOUT);
2083 INSTALL_PACKAGE_TIMEOUT);
2084 }2082 }
2085 if (hwrm_err)2083 if (rc)
2086 goto flash_pkg_exit;2084 goto flash_pkg_exit;
2087 }2085 }
2088 2086
@@ -2094,7 +2092,7 @@ int bnxt_flash_package_from_file(struct net_device *dev, const char *filename, · 5 unmodified lines
2094flash_pkg_exit:2092flash_pkg_exit:
2095 mutex_unlock(&bp->hwrm_cmd_lock);2093 mutex_unlock(&bp->hwrm_cmd_lock);
2096err_exit:2094err_exit:
2097 if (hwrm_err == -EACCES)2095 if (rc == -EACCES)
2098 bnxt_print_admin_err(bp);2096 bnxt_print_admin_err(bp);
2099 return rc;2097 return rc;
2100}2098}
drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c+27−22
@@ -5381,12 +5381,11 @@ static inline bool is_x_10g_port(const struct link_config *lc) · 5380 unmodified lines
5381static int cfg_queues(struct adapter *adap)5381static int cfg_queues(struct adapter *adap)
5382{5382{
5383 u32 avail_qsets, avail_eth_qsets, avail_uld_qsets;5383 u32 avail_qsets, avail_eth_qsets, avail_uld_qsets;
5384 u32 i, n10g = 0, qidx = 0, n1g = 0;
5385 u32 ncpus = num_online_cpus();
5384 u32 niqflint, neq, num_ulds;5386 u32 niqflint, neq, num_ulds;
5385 struct sge *s = &adap->sge;5387 struct sge *s = &adap->sge;
5386 u32 i, n10g = 0, qidx = 0;5388 u32 q10g = 0, q1g;
5387#ifndef CONFIG_CHELSIO_T4_DCB
5388 int q10g = 0;
5389#endif
5390 5389
5391 /* Reduce memory usage in kdump environment, disable all offload. */5390 /* Reduce memory usage in kdump environment, disable all offload. */
5392 if (is_kdump_kernel() || (is_uld(adap) && t4_uld_mem_alloc(adap))) {5391 if (is_kdump_kernel() || (is_uld(adap) && t4_uld_mem_alloc(adap))) {
@@ -5424,44 +5423,50 @@ static int cfg_queues(struct adapter *adap) · 31 unmodified lines
5424 n10g += is_x_10g_port(&adap2pinfo(adap, i)->link_cfg);5423 n10g += is_x_10g_port(&adap2pinfo(adap, i)->link_cfg);
5425 5424
5426 avail_eth_qsets = min_t(u32, avail_qsets, MAX_ETH_QSETS);5425 avail_eth_qsets = min_t(u32, avail_qsets, MAX_ETH_QSETS);
5426
5427 /* We default to 1 queue per non-10G port and up to # of cores queues
5428 * per 10G port.
5429 */
5430 if (n10g)
5431 q10g = (avail_eth_qsets - (adap->params.nports - n10g)) / n10g;
5432
5433 n1g = adap->params.nports - n10g;
5427#ifdef CONFIG_CHELSIO_T4_DCB5434#ifdef CONFIG_CHELSIO_T4_DCB
5428 /* For Data Center Bridging support we need to be able to support up5435 /* For Data Center Bridging support we need to be able to support up
5429 * to 8 Traffic Priorities; each of which will be assigned to its5436 * to 8 Traffic Priorities; each of which will be assigned to its
5430 * own TX Queue in order to prevent Head-Of-Line Blocking.5437 * own TX Queue in order to prevent Head-Of-Line Blocking.
5431 */5438 */
5439 q1g = 8;
5432 if (adap->params.nports * 8 > avail_eth_qsets) {5440 if (adap->params.nports * 8 > avail_eth_qsets) {
5433 dev_err(adap->pdev_dev, "DCB avail_eth_qsets=%d < %d!\n",5441 dev_err(adap->pdev_dev, "DCB avail_eth_qsets=%d < %d!\n",
5434 avail_eth_qsets, adap->params.nports * 8);5442 avail_eth_qsets, adap->params.nports * 8);
5435 return -ENOMEM;5443 return -ENOMEM;
5436 }5444 }
5437 5445
5438 for_each_port(adap, i) {5446 if (adap->params.nports * ncpus < avail_eth_qsets)
5439 struct port_info *pi = adap2pinfo(adap, i);5447 q10g = max(8U, ncpus);
5448 else
5449 q10g = max(8U, q10g);
5440 5450
5441 pi->first_qset = qidx;5451 while ((q10g * n10g) > (avail_eth_qsets - n1g * q1g))
5442 pi->nqsets = is_kdump_kernel() ? 1 : 8;5452 q10g--;
5443 qidx += pi->nqsets;
5444 }
5445#else /* !CONFIG_CHELSIO_T4_DCB */
5446 /* We default to 1 queue per non-10G port and up to # of cores queues
5447 * per 10G port.
5448 */
5449 if (n10g)
5450 q10g = (avail_eth_qsets - (adap->params.nports - n10g)) / n10g;
5451 if (q10g > netif_get_num_default_rss_queues())
5452 q10g = netif_get_num_default_rss_queues();
5453 5453
5454 if (is_kdump_kernel())5454#else /* !CONFIG_CHELSIO_T4_DCB */
5455 q1g = 1;
5456 q10g = min(q10g, ncpus);
5457#endif /* !CONFIG_CHELSIO_T4_DCB */
5458 if (is_kdump_kernel()) {
5455 q10g = 1;5459 q10g = 1;
5460 q1g = 1;
5461 }
5456 5462
5457 for_each_port(adap, i) {5463 for_each_port(adap, i) {
5458 struct port_info *pi = adap2pinfo(adap, i);5464 struct port_info *pi = adap2pinfo(adap, i);
5459 5465
5460 pi->first_qset = qidx;5466 pi->first_qset = qidx;
5461 pi->nqsets = is_x_10g_port(&pi->link_cfg) ? q10g : 1;5467 pi->nqsets = is_x_10g_port(&pi->link_cfg) ? q10g : q1g;
5462 qidx += pi->nqsets;5468 qidx += pi->nqsets;
5463 }5469 }
5464#endif /* !CONFIG_CHELSIO_T4_DCB */
5465 5470
5466 s->ethqsets = qidx;5471 s->ethqsets = qidx;
5467 s->max_ethqsets = qidx; /* MSI-X may lower it later */5472 s->max_ethqsets = qidx; /* MSI-X may lower it later */
@@ -5473,7 +5478,7 @@ static int cfg_queues(struct adapter *adap) · 5 unmodified lines
5473 * capped by the number of available cores.5478 * capped by the number of available cores.
5474 */5479 */
5475 num_ulds = adap->num_uld + adap->num_ofld_uld;5480 num_ulds = adap->num_uld + adap->num_ofld_uld;
5476 i = min_t(u32, MAX_OFLD_QSETS, num_online_cpus());5481 i = min_t(u32, MAX_OFLD_QSETS, ncpus);
5477 avail_uld_qsets = roundup(i, adap->params.nports);5482 avail_uld_qsets = roundup(i, adap->params.nports);
5478 if (avail_qsets < num_ulds * adap->params.nports) {5483 if (avail_qsets < num_ulds * adap->params.nports) {
5479 adap->params.offload = 0;5484 adap->params.offload = 0;
drivers/net/ethernet/freescale/dpaa/dpaa_eth.c+108−6
@@ -1,4 +1,5 @@
1/* Copyright 2008 - 2016 Freescale Semiconductor Inc.1/* Copyright 2008 - 2016 Freescale Semiconductor Inc.
2 * Copyright 2020 NXP
2 *3 *
3 * Redistribution and use in source and binary forms, with or without4 * Redistribution and use in source and binary forms, with or without
4 * modification, are permitted provided that the following conditions are met:5 * modification, are permitted provided that the following conditions are met:
@@ -123,7 +124,22 @@ MODULE_PARM_DESC(tx_timeout, "The Tx timeout in ms"); · 118 unmodified lines
123#define FSL_QMAN_MAX_OAL 127124#define FSL_QMAN_MAX_OAL 127
124 125
125/* Default alignment for start of data in an Rx FD */126/* Default alignment for start of data in an Rx FD */
127#ifdef CONFIG_DPAA_ERRATUM_A050385
128/* aligning data start to 64 avoids DMA transaction splits, unless the buffer
129 * is crossing a 4k page boundary
130 */
131#define DPAA_FD_DATA_ALIGNMENT (fman_has_errata_a050385() ? 64 : 16)
132/* aligning to 256 avoids DMA transaction splits caused by 4k page boundary
133 * crossings; also, all SG fragments except the last must have a size multiple
134 * of 256 to avoid DMA transaction splits
135 */
136#define DPAA_A050385_ALIGN 256
137#define DPAA_FD_RX_DATA_ALIGNMENT (fman_has_errata_a050385() ? \
138 DPAA_A050385_ALIGN : 16)
139#else
126#define DPAA_FD_DATA_ALIGNMENT 16140#define DPAA_FD_DATA_ALIGNMENT 16
141#define DPAA_FD_RX_DATA_ALIGNMENT DPAA_FD_DATA_ALIGNMENT
142#endif
127 143
128/* The DPAA requires 256 bytes reserved and mapped for the SGT */144/* The DPAA requires 256 bytes reserved and mapped for the SGT */
129#define DPAA_SGT_SIZE 256145#define DPAA_SGT_SIZE 256
@@ -158,8 +174,13 @@ MODULE_PARM_DESC(tx_timeout, "The Tx timeout in ms"); · 28 unmodified lines
158#define DPAA_PARSE_RESULTS_SIZE sizeof(struct fman_prs_result)174#define DPAA_PARSE_RESULTS_SIZE sizeof(struct fman_prs_result)
159#define DPAA_TIME_STAMP_SIZE 8175#define DPAA_TIME_STAMP_SIZE 8
160#define DPAA_HASH_RESULTS_SIZE 8176#define DPAA_HASH_RESULTS_SIZE 8
177#ifdef CONFIG_DPAA_ERRATUM_A050385
178#define DPAA_RX_PRIV_DATA_SIZE (DPAA_A050385_ALIGN - (DPAA_PARSE_RESULTS_SIZE\
179 + DPAA_TIME_STAMP_SIZE + DPAA_HASH_RESULTS_SIZE))
180#else
161#define DPAA_RX_PRIV_DATA_SIZE (u16)(DPAA_TX_PRIV_DATA_SIZE + \181#define DPAA_RX_PRIV_DATA_SIZE (u16)(DPAA_TX_PRIV_DATA_SIZE + \
162 dpaa_rx_extra_headroom)182 dpaa_rx_extra_headroom)
183#endif
163 184
164#define DPAA_ETH_PCD_RXQ_NUM 128185#define DPAA_ETH_PCD_RXQ_NUM 128
165 186
@@ -180,7 +201,12 @@ static struct dpaa_bp *dpaa_bp_array[BM_MAX_NUM_OF_POOLS]; · 14 unmodified lines
180 201
181#define DPAA_BP_RAW_SIZE 4096202#define DPAA_BP_RAW_SIZE 4096
182 203
204#ifdef CONFIG_DPAA_ERRATUM_A050385
205#define dpaa_bp_size(raw_size) (SKB_WITH_OVERHEAD(raw_size) & \
206 ~(DPAA_A050385_ALIGN - 1))
207#else
183#define dpaa_bp_size(raw_size) SKB_WITH_OVERHEAD(raw_size)208#define dpaa_bp_size(raw_size) SKB_WITH_OVERHEAD(raw_size)
209#endif
184 210
185static int dpaa_max_frm;211static int dpaa_max_frm;
186 212
@@ -1192,7 +1218,7 @@ static int dpaa_eth_init_rx_port(struct fman_port *port, struct dpaa_bp *bp, · 1005 unmodified lines
1192 buf_prefix_content.pass_prs_result = true;1218 buf_prefix_content.pass_prs_result = true;
1193 buf_prefix_content.pass_hash_result = true;1219 buf_prefix_content.pass_hash_result = true;
1194 buf_prefix_content.pass_time_stamp = true;1220 buf_prefix_content.pass_time_stamp = true;
1195 buf_prefix_content.data_align = DPAA_FD_DATA_ALIGNMENT;1221 buf_prefix_content.data_align = DPAA_FD_RX_DATA_ALIGNMENT;
1196 1222
1197 rx_p = &params.specific_params.rx_params;1223 rx_p = &params.specific_params.rx_params;
1198 rx_p->err_fqid = errq->fqid;1224 rx_p->err_fqid = errq->fqid;
@@ -1662,6 +1688,8 @@ static u8 rx_csum_offload(const struct dpaa_priv *priv, const struct qm_fd *fd) · 463 unmodified lines
1662 return CHECKSUM_NONE;1688 return CHECKSUM_NONE;
1663}1689}
1664 1690
1691#define PTR_IS_ALIGNED(x, a) (IS_ALIGNED((unsigned long)(x), (a)))
1692
1665/* Build a linear skb around the received buffer.1693/* Build a linear skb around the received buffer.
1666 * We are guaranteed there is enough room at the end of the data buffer to1694 * We are guaranteed there is enough room at the end of the data buffer to
1667 * accommodate the shared info area of the skb.1695 * accommodate the shared info area of the skb.
@@ -1733,8 +1761,7 @@ static struct sk_buff *sg_fd_to_skb(const struct dpaa_priv *priv, · 65 unmodified lines
1733 1761
1734 sg_addr = qm_sg_addr(&sgt[i]);1762 sg_addr = qm_sg_addr(&sgt[i]);
1735 sg_vaddr = phys_to_virt(sg_addr);1763 sg_vaddr = phys_to_virt(sg_addr);
1736 WARN_ON(!IS_ALIGNED((unsigned long)sg_vaddr,1764 WARN_ON(!PTR_IS_ALIGNED(sg_vaddr, SMP_CACHE_BYTES));
1737 SMP_CACHE_BYTES));
1738 1765
1739 dma_unmap_page(priv->rx_dma_dev, sg_addr,1766 dma_unmap_page(priv->rx_dma_dev, sg_addr,
1740 DPAA_BP_RAW_SIZE, DMA_FROM_DEVICE);1767 DPAA_BP_RAW_SIZE, DMA_FROM_DEVICE);
@@ -2022,6 +2049,75 @@ static inline int dpaa_xmit(struct dpaa_priv *priv, · 281 unmodified lines
2022 return 0;2049 return 0;
2023}2050}
2024 2051
2052#ifdef CONFIG_DPAA_ERRATUM_A050385
2053int dpaa_a050385_wa(struct net_device *net_dev, struct sk_buff **s)
2054{
2055 struct dpaa_priv *priv = netdev_priv(net_dev);
2056 struct sk_buff *new_skb, *skb = *s;
2057 unsigned char *start, i;
2058
2059 /* check linear buffer alignment */
2060 if (!PTR_IS_ALIGNED(skb->data, DPAA_A050385_ALIGN))
2061 goto workaround;
2062
2063 /* linear buffers just need to have an aligned start */
2064 if (!skb_is_nonlinear(skb))
2065 return 0;
2066
2067 /* linear data size for nonlinear skbs needs to be aligned */
2068 if (!IS_ALIGNED(skb_headlen(skb), DPAA_A050385_ALIGN))
2069 goto workaround;
2070
2071 for (i = 0; i < skb_shinfo(skb)->nr_frags; i++) {
2072 skb_frag_t *frag = &skb_shinfo(skb)->frags[i];
2073
2074 /* all fragments need to have aligned start addresses */
2075 if (!IS_ALIGNED(skb_frag_off(frag), DPAA_A050385_ALIGN))
2076 goto workaround;
2077
2078 /* all but last fragment need to have aligned sizes */
2079 if (!IS_ALIGNED(skb_frag_size(frag), DPAA_A050385_ALIGN) &&
2080 (i < skb_shinfo(skb)->nr_frags - 1))
2081 goto workaround;
2082 }
2083
2084 return 0;
2085
2086workaround:
2087 /* copy all the skb content into a new linear buffer */
2088 new_skb = netdev_alloc_skb(net_dev, skb->len + DPAA_A050385_ALIGN - 1 +
2089 priv->tx_headroom);
2090 if (!new_skb)
2091 return -ENOMEM;
2092
2093 /* NET_SKB_PAD bytes already reserved, adding up to tx_headroom */
2094 skb_reserve(new_skb, priv->tx_headroom - NET_SKB_PAD);
2095
2096 /* Workaround for DPAA_A050385 requires data start to be aligned */
2097 start = PTR_ALIGN(new_skb->data, DPAA_A050385_ALIGN);
2098 if (start - new_skb->data != 0)
2099 skb_reserve(new_skb, start - new_skb->data);
2100
2101 skb_put(new_skb, skb->len);
2102 skb_copy_bits(skb, 0, new_skb->data, skb->len);
2103 skb_copy_header(new_skb, skb);
2104 new_skb->dev = skb->dev;
2105
2106 /* We move the headroom when we align it so we have to reset the
2107 * network and transport header offsets relative to the new data
2108 * pointer. The checksum offload relies on these offsets.
2109 */
2110 skb_set_network_header(new_skb, skb_network_offset(skb));
2111 skb_set_transport_header(new_skb, skb_transport_offset(skb));
2112
2113 /* TODO: does timestamping need the result in the old skb? */
2114 dev_kfree_skb(skb);
2115 *s = new_skb;
2116
2117 return 0;
2118}
2119#endif
2120
2025static netdev_tx_t2121static netdev_tx_t
2026dpaa_start_xmit(struct sk_buff *skb, struct net_device *net_dev)2122dpaa_start_xmit(struct sk_buff *skb, struct net_device *net_dev)
2027{2123{
@@ -2068,6 +2164,14 @@ dpaa_start_xmit(struct sk_buff *skb, struct net_device *net_dev) · 40 unmodified lines
2068 nonlinear = skb_is_nonlinear(skb);2164 nonlinear = skb_is_nonlinear(skb);
2069 }2165 }
2070 2166
2167#ifdef CONFIG_DPAA_ERRATUM_A050385
2168 if (unlikely(fman_has_errata_a050385())) {
2169 if (dpaa_a050385_wa(net_dev, &skb))
2170 goto enomem;
2171 nonlinear = skb_is_nonlinear(skb);
2172 }
2173#endif
2174
2071 if (nonlinear) {2175 if (nonlinear) {
2072 /* Just create a S/G fd based on the skb */2176 /* Just create a S/G fd based on the skb */
2073 err = skb_to_sg_fd(priv, skb, &fd);2177 err = skb_to_sg_fd(priv, skb, &fd);
@@ -2741,9 +2845,7 @@ static inline u16 dpaa_get_headroom(struct dpaa_buffer_layout *bl) · 667 unmodified lines
2741 headroom = (u16)(bl->priv_data_size + DPAA_PARSE_RESULTS_SIZE +2845 headroom = (u16)(bl->priv_data_size + DPAA_PARSE_RESULTS_SIZE +
2742 DPAA_TIME_STAMP_SIZE + DPAA_HASH_RESULTS_SIZE);2846 DPAA_TIME_STAMP_SIZE + DPAA_HASH_RESULTS_SIZE);
2743 2847
2744 return DPAA_FD_DATA_ALIGNMENT ? ALIGN(headroom,2848 return ALIGN(headroom, DPAA_FD_DATA_ALIGNMENT);
2745 DPAA_FD_DATA_ALIGNMENT) :
2746 headroom;
2747}2849}
2748 2850
2749static int dpaa_eth_probe(struct platform_device *pdev)2851static int dpaa_eth_probe(struct platform_device *pdev)
drivers/net/ethernet/freescale/fec_main.c+3−3
@@ -2529,15 +2529,15 @@ fec_enet_set_coalesce(struct net_device *ndev, struct ethtool_coalesce *ec) · 2528 unmodified lines
2529 return -EINVAL;2529 return -EINVAL;
2530 }2530 }
2531 2531
2532 cycle = fec_enet_us_to_itr_clock(ndev, fep->rx_time_itr);2532 cycle = fec_enet_us_to_itr_clock(ndev, ec->rx_coalesce_usecs);
2533 if (cycle > 0xFFFF) {2533 if (cycle > 0xFFFF) {
2534 dev_err(dev, "Rx coalesced usec exceed hardware limitation\n");2534 dev_err(dev, "Rx coalesced usec exceed hardware limitation\n");
2535 return -EINVAL;2535 return -EINVAL;
2536 }2536 }
2537 2537
2538 cycle = fec_enet_us_to_itr_clock(ndev, fep->tx_time_itr);2538 cycle = fec_enet_us_to_itr_clock(ndev, ec->tx_coalesce_usecs);
2539 if (cycle > 0xFFFF) {2539 if (cycle > 0xFFFF) {
2540 dev_err(dev, "Rx coalesced usec exceed hardware limitation\n");2540 dev_err(dev, "Tx coalesced usec exceed hardware limitation\n");
2541 return -EINVAL;2541 return -EINVAL;
2542 }2542 }
2543 2543
drivers/net/ethernet/freescale/fman/Kconfig+28−0
@@ -8,3 +8,31 @@ config FSL_FMAN · 7 unmodified lines
8 help8 help
9 Freescale Data-Path Acceleration Architecture Frame Manager9 Freescale Data-Path Acceleration Architecture Frame Manager
10 (FMan) support10 (FMan) support
11
12config DPAA_ERRATUM_A050385
13 bool
14 depends on ARM64 && FSL_DPAA
15 default y
16 help
17 DPAA FMan erratum A050385 software workaround implementation:
18 align buffers, data start, SG fragment length to avoid FMan DMA
19 splits.
20 FMAN DMA read or writes under heavy traffic load may cause FMAN
21 internal resource leak thus stopping further packet processing.
22 The FMAN internal queue can overflow when FMAN splits single
23 read or write transactions into multiple smaller transactions
24 such that more than 17 AXI transactions are in flight from FMAN
25 to interconnect. When the FMAN internal queue overflows, it can
26 stall further packet processing. The issue can occur with any
27 one of the following three conditions:
28 1. FMAN AXI transaction crosses 4K address boundary (Errata
29 A010022)
30 2. FMAN DMA address for an AXI transaction is not 16 byte
31 aligned, i.e. the last 4 bits of an address are non-zero
32 3. Scatter Gather (SG) frames have more than one SG buffer in
33 the SG list and any one of the buffers, except the last
34 buffer in the SG list has data size that is not a multiple
35 of 16 bytes, i.e., other than 16, 32, 48, 64, etc.
36 With any one of the above three conditions present, there is
37 likelihood of stalled FMAN packet processing, especially under
38 stress with multiple ports injecting line-rate traffic.
drivers/net/ethernet/freescale/fman/fman.c+18−0
@@ -1,5 +1,6 @@
1/*1/*
2 * Copyright 2008-2015 Freescale Semiconductor Inc.2 * Copyright 2008-2015 Freescale Semiconductor Inc.
3 * Copyright 2020 NXP
3 *4 *
4 * Redistribution and use in source and binary forms, with or without5 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions are met:6 * modification, are permitted provided that the following conditions are met:
@@ -566,6 +567,10 @@ struct fman_cfg { · 560 unmodified lines
566 u32 qmi_def_tnums_thresh;567 u32 qmi_def_tnums_thresh;
567};568};
568 569
570#ifdef CONFIG_DPAA_ERRATUM_A050385
571static bool fman_has_err_a050385;
572#endif
573
569static irqreturn_t fman_exceptions(struct fman *fman,574static irqreturn_t fman_exceptions(struct fman *fman,
570 enum fman_exceptions exception)575 enum fman_exceptions exception)
571{576{
@@ -2518,6 +2523,14 @@ struct fman *fman_bind(struct device *fm_dev) · 1946 unmodified lines
2518}2523}
2519EXPORT_SYMBOL(fman_bind);2524EXPORT_SYMBOL(fman_bind);
2520 2525
2526#ifdef CONFIG_DPAA_ERRATUM_A050385
2527bool fman_has_errata_a050385(void)
2528{
2529 return fman_has_err_a050385;
2530}
2531EXPORT_SYMBOL(fman_has_errata_a050385);
2532#endif
2533
2521static irqreturn_t fman_err_irq(int irq, void *handle)2534static irqreturn_t fman_err_irq(int irq, void *handle)
2522{2535{
2523 struct fman *fman = (struct fman *)handle;2536 struct fman *fman = (struct fman *)handle;
@@ -2845,6 +2858,11 @@ static struct fman *read_dts_node(struct platform_device *of_dev) · 321 unmodified lines
2845 goto fman_free;2858 goto fman_free;
2846 }2859 }
2847 2860
2861#ifdef CONFIG_DPAA_ERRATUM_A050385
2862 fman_has_err_a050385 =
2863 of_property_read_bool(fm_node, "fsl,erratum-a050385");
2864#endif
2865
2848 return fman;2866 return fman;
2849 2867
2850fman_node_put:2868fman_node_put:
drivers/net/ethernet/freescale/fman/fman.h+5−0
@@ -1,5 +1,6 @@
1/*1/*
2 * Copyright 2008-2015 Freescale Semiconductor Inc.2 * Copyright 2008-2015 Freescale Semiconductor Inc.
3 * Copyright 2020 NXP
3 *4 *
4 * Redistribution and use in source and binary forms, with or without5 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions are met:6 * modification, are permitted provided that the following conditions are met:
@@ -398,6 +399,10 @@ u16 fman_get_max_frm(void); · 392 unmodified lines
398 399
399int fman_get_rx_extra_headroom(void);400int fman_get_rx_extra_headroom(void);
400 401
402#ifdef CONFIG_DPAA_ERRATUM_A050385
403bool fman_has_errata_a050385(void);
404#endif
405
401struct fman *fman_bind(struct device *dev);406struct fman *fman_bind(struct device *dev);
402 407
403#endif /* __FM_H */408#endif /* __FM_H */
drivers/net/ethernet/hisilicon/hns3/hclge_mbx.h+1−0
@@ -46,6 +46,7 @@ enum HCLGE_MBX_OPCODE { · 45 unmodified lines
46 HCLGE_MBX_PUSH_VLAN_INFO, /* (PF -> VF) push port base vlan */46 HCLGE_MBX_PUSH_VLAN_INFO, /* (PF -> VF) push port base vlan */
47 HCLGE_MBX_GET_MEDIA_TYPE, /* (VF -> PF) get media type */47 HCLGE_MBX_GET_MEDIA_TYPE, /* (VF -> PF) get media type */
48 HCLGE_MBX_PUSH_PROMISC_INFO, /* (PF -> VF) push vf promisc info */48 HCLGE_MBX_PUSH_PROMISC_INFO, /* (PF -> VF) push vf promisc info */
49 HCLGE_MBX_VF_UNINIT, /* (VF -> PF) vf is unintializing */
49 50
50 HCLGE_MBX_GET_VF_FLR_STATUS = 200, /* (M7 -> PF) get vf flr status */51 HCLGE_MBX_GET_VF_FLR_STATUS = 200, /* (M7 -> PF) get vf flr status */
51 HCLGE_MBX_PUSH_LINK_STATUS, /* (M7 -> PF) get port link status */52 HCLGE_MBX_PUSH_LINK_STATUS, /* (M7 -> PF) get port link status */
drivers/net/ethernet/hisilicon/hns3/hns3_enet.c+1−1
@@ -1711,7 +1711,7 @@ static int hns3_setup_tc(struct net_device *netdev, void *type_data) · 1710 unmodified lines
1711 netif_dbg(h, drv, netdev, "setup tc: num_tc=%u\n", tc);1711 netif_dbg(h, drv, netdev, "setup tc: num_tc=%u\n", tc);
1712 1712
1713 return (kinfo->dcb_ops && kinfo->dcb_ops->setup_tc) ?1713 return (kinfo->dcb_ops && kinfo->dcb_ops->setup_tc) ?
1714 kinfo->dcb_ops->setup_tc(h, tc, prio_tc) : -EOPNOTSUPP;1714 kinfo->dcb_ops->setup_tc(h, tc ? tc : 1, prio_tc) : -EOPNOTSUPP;
1715}1715}
1716 1716
1717static int hns3_nic_setup_tc(struct net_device *dev, enum tc_setup_type type,1717static int hns3_nic_setup_tc(struct net_device *dev, enum tc_setup_type type,
drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.c+42−5
@@ -2446,10 +2446,12 @@ static int hclge_cfg_mac_speed_dup_hw(struct hclge_dev *hdev, int speed, · 2445 unmodified lines
2446 2446
2447int hclge_cfg_mac_speed_dup(struct hclge_dev *hdev, int speed, u8 duplex)2447int hclge_cfg_mac_speed_dup(struct hclge_dev *hdev, int speed, u8 duplex)
2448{2448{
2449 struct hclge_mac *mac = &hdev->hw.mac;
2449 int ret;2450 int ret;
2450 2451
2451 duplex = hclge_check_speed_dup(duplex, speed);2452 duplex = hclge_check_speed_dup(duplex, speed);
2452 if (hdev->hw.mac.speed == speed && hdev->hw.mac.duplex == duplex)2453 if (!mac->support_autoneg && mac->speed == speed &&
2454 mac->duplex == duplex)
2453 return 0;2455 return 0;
2454 2456
2455 ret = hclge_cfg_mac_speed_dup_hw(hdev, speed, duplex);2457 ret = hclge_cfg_mac_speed_dup_hw(hdev, speed, duplex);
@@ -7743,16 +7745,27 @@ static int hclge_set_vlan_filter_ctrl(struct hclge_dev *hdev, u8 vlan_type, · 5287 unmodified lines
7743 struct hclge_desc desc;7745 struct hclge_desc desc;
7744 int ret;7746 int ret;
7745 7747
7746 hclge_cmd_setup_basic_desc(&desc, HCLGE_OPC_VLAN_FILTER_CTRL, false);7748 /* read current vlan filter parameter */
7747 7749 hclge_cmd_setup_basic_desc(&desc, HCLGE_OPC_VLAN_FILTER_CTRL, true);
7748 req = (struct hclge_vlan_filter_ctrl_cmd *)desc.data;7750 req = (struct hclge_vlan_filter_ctrl_cmd *)desc.data;
7749 req->vlan_type = vlan_type;7751 req->vlan_type = vlan_type;
7750 req->vlan_fe = filter_en ? fe_type : 0;
7751 req->vf_id = vf_id;7752 req->vf_id = vf_id;
7752 7753
7754 ret = hclge_cmd_send(&hdev->hw, &desc, 1);
7755 if (ret) {
7756 dev_err(&hdev->pdev->dev,
7757 "failed to get vlan filter config, ret = %d.\n", ret);
7758 return ret;
7759 }
7760
7761 /* modify and write new config parameter */
7762 hclge_cmd_reuse_desc(&desc, false);
7763 req->vlan_fe = filter_en ?
7764 (req->vlan_fe | fe_type) : (req->vlan_fe & ~fe_type);
7765
7753 ret = hclge_cmd_send(&hdev->hw, &desc, 1);7766 ret = hclge_cmd_send(&hdev->hw, &desc, 1);
7754 if (ret)7767 if (ret)
7755 dev_err(&hdev->pdev->dev, "set vlan filter fail, ret =%d.\n",7768 dev_err(&hdev->pdev->dev, "failed to set vlan filter, ret = %d.\n",
7756 ret);7769 ret);
7757 7770
7758 return ret;7771 return ret;
@@ -8270,6 +8283,7 @@ void hclge_rm_vport_all_vlan_table(struct hclge_vport *vport, bool is_del_list) · 511 unmodified lines
8270 kfree(vlan);8283 kfree(vlan);
8271 }8284 }
8272 }8285 }
8286 clear_bit(vport->vport_id, hdev->vf_vlan_full);
8273}8287}
8274 8288
8275void hclge_uninit_vport_vlan_table(struct hclge_dev *hdev)8289void hclge_uninit_vport_vlan_table(struct hclge_dev *hdev)
@@ -8486,6 +8500,28 @@ static int hclge_set_vf_vlan_filter(struct hnae3_handle *handle, int vfid, · 210 unmodified lines
8486 }8500 }
8487}8501}
8488 8502
8503static void hclge_clear_vf_vlan(struct hclge_dev *hdev)
8504{
8505 struct hclge_vlan_info *vlan_info;
8506 struct hclge_vport *vport;
8507 int ret;
8508 int vf;
8509
8510 /* clear port base vlan for all vf */
8511 for (vf = HCLGE_VF_VPORT_START_NUM; vf < hdev->num_alloc_vport; vf++) {
8512 vport = &hdev->vport[vf];
8513 vlan_info = &vport->port_base_vlan_cfg.vlan_info;
8514
8515 ret = hclge_set_vlan_filter_hw(hdev, htons(ETH_P_8021Q),
8516 vport->vport_id,
8517 vlan_info->vlan_tag, true);
8518 if (ret)
8519 dev_err(&hdev->pdev->dev,
8520 "failed to clear vf vlan for vf%d, ret = %d\n",
8521 vf - HCLGE_VF_VPORT_START_NUM, ret);
8522 }
8523}
8524
8489int hclge_set_vlan_filter(struct hnae3_handle *handle, __be16 proto,8525int hclge_set_vlan_filter(struct hnae3_handle *handle, __be16 proto,
8490 u16 vlan_id, bool is_kill)8526 u16 vlan_id, bool is_kill)
8491{8527{
@@ -9895,6 +9931,7 @@ static void hclge_uninit_ae_dev(struct hnae3_ae_dev *ae_dev) · 1403 unmodified lines
9895 struct hclge_mac *mac = &hdev->hw.mac;9931 struct hclge_mac *mac = &hdev->hw.mac;
9896 9932
9897 hclge_reset_vf_rate(hdev);9933 hclge_reset_vf_rate(hdev);
9934 hclge_clear_vf_vlan(hdev);
9898 hclge_misc_affinity_teardown(hdev);9935 hclge_misc_affinity_teardown(hdev);
9899 hclge_state_uninit(hdev);9936 hclge_state_uninit(hdev);
9900 9937
drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_mbx.c+1−0
@@ -799,6 +799,7 @@ void hclge_mbx_handler(struct hclge_dev *hdev) · 798 unmodified lines
799 hclge_get_link_mode(vport, req);799 hclge_get_link_mode(vport, req);
800 break;800 break;
801 case HCLGE_MBX_GET_VF_FLR_STATUS:801 case HCLGE_MBX_GET_VF_FLR_STATUS:
802 case HCLGE_MBX_VF_UNINIT:
802 hclge_rm_vport_all_mac_table(vport, true,803 hclge_rm_vport_all_mac_table(vport, true,
803 HCLGE_MAC_ADDR_UC);804 HCLGE_MAC_ADDR_UC);
804 hclge_rm_vport_all_mac_table(vport, true,805 hclge_rm_vport_all_mac_table(vport, true,
drivers/net/ethernet/hisilicon/hns3/hns3vf/hclgevf_main.c+3−0
@@ -2803,6 +2803,9 @@ static void hclgevf_uninit_hdev(struct hclgevf_dev *hdev) · 2802 unmodified lines
2803{2803{
2804 hclgevf_state_uninit(hdev);2804 hclgevf_state_uninit(hdev);
2805 2805
2806 hclgevf_send_mbx_msg(hdev, HCLGE_MBX_VF_UNINIT, 0, NULL, 0,
2807 false, NULL, 0);
2808
2806 if (test_bit(HCLGEVF_STATE_IRQ_INITED, &hdev->state)) {2809 if (test_bit(HCLGEVF_STATE_IRQ_INITED, &hdev->state)) {
2807 hclgevf_misc_irq_uninit(hdev);2810 hclgevf_misc_irq_uninit(hdev);
2808 hclgevf_uninit_msi(hdev);2811 hclgevf_uninit_msi(hdev);
drivers/net/ethernet/ibm/ibmvnic.c+22−2
@@ -2142,6 +2142,8 @@ static void __ibmvnic_reset(struct work_struct *work) · 2141 unmodified lines
2142{2142{
2143 struct ibmvnic_rwi *rwi;2143 struct ibmvnic_rwi *rwi;
2144 struct ibmvnic_adapter *adapter;2144 struct ibmvnic_adapter *adapter;
2145 bool saved_state = false;
2146 unsigned long flags;
2145 u32 reset_state;2147 u32 reset_state;
2146 int rc = 0;2148 int rc = 0;
2147 2149
@@ -2153,17 +2155,25 @@ static void __ibmvnic_reset(struct work_struct *work) · 5 unmodified lines
2153 return;2155 return;
2154 }2156 }
2155 2157
2156 reset_state = adapter->state;
2157
2158 rwi = get_next_rwi(adapter);2158 rwi = get_next_rwi(adapter);
2159 while (rwi) {2159 while (rwi) {
2160 spin_lock_irqsave(&adapter->state_lock, flags);
2161
2160 if (adapter->state == VNIC_REMOVING ||2162 if (adapter->state == VNIC_REMOVING ||
2161 adapter->state == VNIC_REMOVED) {2163 adapter->state == VNIC_REMOVED) {
2164 spin_unlock_irqrestore(&adapter->state_lock, flags);
2162 kfree(rwi);2165 kfree(rwi);
2163 rc = EBUSY;2166 rc = EBUSY;
2164 break;2167 break;
2165 }2168 }
2166 2169
2170 if (!saved_state) {
2171 reset_state = adapter->state;
2172 adapter->state = VNIC_RESETTING;
2173 saved_state = true;
2174 }
2175 spin_unlock_irqrestore(&adapter->state_lock, flags);
2176
2167 if (rwi->reset_reason == VNIC_RESET_CHANGE_PARAM) {2177 if (rwi->reset_reason == VNIC_RESET_CHANGE_PARAM) {
2168 /* CHANGE_PARAM requestor holds rtnl_lock */2178 /* CHANGE_PARAM requestor holds rtnl_lock */
2169 rc = do_change_param_reset(adapter, rwi, reset_state);2179 rc = do_change_param_reset(adapter, rwi, reset_state);
@@ -5091,6 +5101,7 @@ static int ibmvnic_probe(struct vio_dev *dev, const struct vio_device_id *id) · 2921 unmodified lines
5091 __ibmvnic_delayed_reset);5101 __ibmvnic_delayed_reset);
5092 INIT_LIST_HEAD(&adapter->rwi_list);5102 INIT_LIST_HEAD(&adapter->rwi_list);
5093 spin_lock_init(&adapter->rwi_lock);5103 spin_lock_init(&adapter->rwi_lock);
5104 spin_lock_init(&adapter->state_lock);
5094 mutex_init(&adapter->fw_lock);5105 mutex_init(&adapter->fw_lock);
5095 init_completion(&adapter->init_done);5106 init_completion(&adapter->init_done);
5096 init_completion(&adapter->fw_done);5107 init_completion(&adapter->fw_done);
@@ -5163,8 +5174,17 @@ static int ibmvnic_remove(struct vio_dev *dev) · 66 unmodified lines
5163{5174{
5164 struct net_device *netdev = dev_get_drvdata(&dev->dev);5175 struct net_device *netdev = dev_get_drvdata(&dev->dev);
5165 struct ibmvnic_adapter *adapter = netdev_priv(netdev);5176 struct ibmvnic_adapter *adapter = netdev_priv(netdev);
5177 unsigned long flags;
5178
5179 spin_lock_irqsave(&adapter->state_lock, flags);
5180 if (adapter->state == VNIC_RESETTING) {
5181 spin_unlock_irqrestore(&adapter->state_lock, flags);
5182 return -EBUSY;
5183 }
5166 5184
5167 adapter->state = VNIC_REMOVING;5185 adapter->state = VNIC_REMOVING;
5186 spin_unlock_irqrestore(&adapter->state_lock, flags);
5187
5168 rtnl_lock();5188 rtnl_lock();
5169 unregister_netdevice(netdev);5189 unregister_netdevice(netdev);
5170 5190
drivers/net/ethernet/ibm/ibmvnic.h+5−1
@@ -941,7 +941,8 @@ enum vnic_state {VNIC_PROBING = 1, · 940 unmodified lines
941 VNIC_CLOSING,941 VNIC_CLOSING,
942 VNIC_CLOSED,942 VNIC_CLOSED,
943 VNIC_REMOVING,943 VNIC_REMOVING,
944 VNIC_REMOVED};944 VNIC_REMOVED,
945 VNIC_RESETTING};
945 946
946enum ibmvnic_reset_reason {VNIC_RESET_FAILOVER = 1,947enum ibmvnic_reset_reason {VNIC_RESET_FAILOVER = 1,
947 VNIC_RESET_MOBILITY,948 VNIC_RESET_MOBILITY,
@@ -1090,4 +1091,7 @@ struct ibmvnic_adapter { · 142 unmodified lines
1090 1091
1091 struct ibmvnic_tunables desired;1092 struct ibmvnic_tunables desired;
1092 struct ibmvnic_tunables fallback;1093 struct ibmvnic_tunables fallback;
1094
1095 /* Used for serializatin of state field */
1096 spinlock_t state_lock;
1093};1097};
drivers/net/ethernet/marvell/mvmdio.c+3−3
@@ -347,7 +347,7 @@ static int orion_mdio_probe(struct platform_device *pdev) · 346 unmodified lines
347 }347 }
348 348
349 349
350 dev->err_interrupt = platform_get_irq(pdev, 0);350 dev->err_interrupt = platform_get_irq_optional(pdev, 0);
351 if (dev->err_interrupt > 0 &&351 if (dev->err_interrupt > 0 &&
352 resource_size(r) < MVMDIO_ERR_INT_MASK + 4) {352 resource_size(r) < MVMDIO_ERR_INT_MASK + 4) {
353 dev_err(&pdev->dev,353 dev_err(&pdev->dev,
@@ -364,8 +364,8 @@ static int orion_mdio_probe(struct platform_device *pdev) · 10 unmodified lines
364 writel(MVMDIO_ERR_INT_SMI_DONE,364 writel(MVMDIO_ERR_INT_SMI_DONE,
365 dev->regs + MVMDIO_ERR_INT_MASK);365 dev->regs + MVMDIO_ERR_INT_MASK);
366 366
367 } else if (dev->err_interrupt == -EPROBE_DEFER) {367 } else if (dev->err_interrupt < 0) {
368 ret = -EPROBE_DEFER;368 ret = dev->err_interrupt;
369 goto out_mdio;369 goto out_mdio;
370 }370 }
371 371
drivers/net/ethernet/mscc/ocelot.c+17−11
@@ -2176,24 +2176,29 @@ static int ocelot_init_timestamp(struct ocelot *ocelot) · 2175 unmodified lines
2176 return 0;2176 return 0;
2177}2177}
2178 2178
2179static void ocelot_port_set_mtu(struct ocelot *ocelot, int port, size_t mtu)2179/* Configure the maximum SDU (L2 payload) on RX to the value specified in @sdu.
2180 * The length of VLAN tags is accounted for automatically via DEV_MAC_TAGS_CFG.
2181 */
2182static void ocelot_port_set_maxlen(struct ocelot *ocelot, int port, size_t sdu)
2180{2183{
2181 struct ocelot_port *ocelot_port = ocelot->ports[port];2184 struct ocelot_port *ocelot_port = ocelot->ports[port];
2185 int maxlen = sdu + ETH_HLEN + ETH_FCS_LEN;
2182 int atop_wm;2186 int atop_wm;
2183 2187
2184 ocelot_port_writel(ocelot_port, mtu, DEV_MAC_MAXLEN_CFG);2188 ocelot_port_writel(ocelot_port, maxlen, DEV_MAC_MAXLEN_CFG);
2185 2189
2186 /* Set Pause WM hysteresis2190 /* Set Pause WM hysteresis
2187 * 152 = 6 * mtu / OCELOT_BUFFER_CELL_SZ2191 * 152 = 6 * maxlen / OCELOT_BUFFER_CELL_SZ
2188 * 101 = 4 * mtu / OCELOT_BUFFER_CELL_SZ2192 * 101 = 4 * maxlen / OCELOT_BUFFER_CELL_SZ
2189 */2193 */
2190 ocelot_write_rix(ocelot, SYS_PAUSE_CFG_PAUSE_ENA |2194 ocelot_write_rix(ocelot, SYS_PAUSE_CFG_PAUSE_ENA |
2191 SYS_PAUSE_CFG_PAUSE_STOP(101) |2195 SYS_PAUSE_CFG_PAUSE_STOP(101) |
2192 SYS_PAUSE_CFG_PAUSE_START(152), SYS_PAUSE_CFG, port);2196 SYS_PAUSE_CFG_PAUSE_START(152), SYS_PAUSE_CFG, port);
2193 2197
2194 /* Tail dropping watermark */2198 /* Tail dropping watermark */
2195 atop_wm = (ocelot->shared_queue_sz - 9 * mtu) / OCELOT_BUFFER_CELL_SZ;2199 atop_wm = (ocelot->shared_queue_sz - 9 * maxlen) /
2196 ocelot_write_rix(ocelot, ocelot_wm_enc(9 * mtu),2200 OCELOT_BUFFER_CELL_SZ;
2201 ocelot_write_rix(ocelot, ocelot_wm_enc(9 * maxlen),
2197 SYS_ATOP, port);2202 SYS_ATOP, port);
2198 ocelot_write(ocelot, ocelot_wm_enc(atop_wm), SYS_ATOP_TOT_CFG);2203 ocelot_write(ocelot, ocelot_wm_enc(atop_wm), SYS_ATOP_TOT_CFG);
2199}2204}
@@ -2222,9 +2227,10 @@ void ocelot_init_port(struct ocelot *ocelot, int port) · 22 unmodified lines
2222 DEV_MAC_HDX_CFG);2227 DEV_MAC_HDX_CFG);
2223 2228
2224 /* Set Max Length and maximum tags allowed */2229 /* Set Max Length and maximum tags allowed */
2225 ocelot_port_set_mtu(ocelot, port, VLAN_ETH_FRAME_LEN);2230 ocelot_port_set_maxlen(ocelot, port, ETH_DATA_LEN);
2226 ocelot_port_writel(ocelot_port, DEV_MAC_TAGS_CFG_TAG_ID(ETH_P_8021AD) |2231 ocelot_port_writel(ocelot_port, DEV_MAC_TAGS_CFG_TAG_ID(ETH_P_8021AD) |
2227 DEV_MAC_TAGS_CFG_VLAN_AWR_ENA |2232 DEV_MAC_TAGS_CFG_VLAN_AWR_ENA |
2233 DEV_MAC_TAGS_CFG_VLAN_DBL_AWR_ENA |
2228 DEV_MAC_TAGS_CFG_VLAN_LEN_AWR_ENA,2234 DEV_MAC_TAGS_CFG_VLAN_LEN_AWR_ENA,
2229 DEV_MAC_TAGS_CFG);2235 DEV_MAC_TAGS_CFG);
2230 2236
@@ -2310,18 +2316,18 @@ void ocelot_set_cpu_port(struct ocelot *ocelot, int cpu, · 79 unmodified lines
2310 * Only one port can be an NPI at the same time.2316 * Only one port can be an NPI at the same time.
2311 */2317 */
2312 if (cpu < ocelot->num_phys_ports) {2318 if (cpu < ocelot->num_phys_ports) {
2313 int mtu = VLAN_ETH_FRAME_LEN + OCELOT_TAG_LEN;2319 int sdu = ETH_DATA_LEN + OCELOT_TAG_LEN;
2314 2320
2315 ocelot_write(ocelot, QSYS_EXT_CPU_CFG_EXT_CPUQ_MSK_M |2321 ocelot_write(ocelot, QSYS_EXT_CPU_CFG_EXT_CPUQ_MSK_M |
2316 QSYS_EXT_CPU_CFG_EXT_CPU_PORT(cpu),2322 QSYS_EXT_CPU_CFG_EXT_CPU_PORT(cpu),
2317 QSYS_EXT_CPU_CFG);2323 QSYS_EXT_CPU_CFG);
2318 2324
2319 if (injection == OCELOT_TAG_PREFIX_SHORT)2325 if (injection == OCELOT_TAG_PREFIX_SHORT)
2320 mtu += OCELOT_SHORT_PREFIX_LEN;2326 sdu += OCELOT_SHORT_PREFIX_LEN;
2321 else if (injection == OCELOT_TAG_PREFIX_LONG)2327 else if (injection == OCELOT_TAG_PREFIX_LONG)
2322 mtu += OCELOT_LONG_PREFIX_LEN;2328 sdu += OCELOT_LONG_PREFIX_LEN;
2323 2329
2324 ocelot_port_set_mtu(ocelot, cpu, mtu);2330 ocelot_port_set_maxlen(ocelot, cpu, sdu);
2325 }2331 }
2326 2332
2327 /* CPU port Injection/Extraction configuration */2333 /* CPU port Injection/Extraction configuration */
drivers/net/ethernet/pensando/ionic/ionic_lif.c+4−4
@@ -1688,7 +1688,7 @@ static int ionic_set_vf_mac(struct net_device *netdev, int vf, u8 *mac) · 1687 unmodified lines
1688 if (!(is_zero_ether_addr(mac) || is_valid_ether_addr(mac)))1688 if (!(is_zero_ether_addr(mac) || is_valid_ether_addr(mac)))
1689 return -EINVAL;1689 return -EINVAL;
1690 1690
1691 down_read(&ionic->vf_op_lock);1691 down_write(&ionic->vf_op_lock);
1692 1692
1693 if (vf >= pci_num_vf(ionic->pdev) || !ionic->vfs) {1693 if (vf >= pci_num_vf(ionic->pdev) || !ionic->vfs) {
1694 ret = -EINVAL;1694 ret = -EINVAL;
@@ -1698,7 +1698,7 @@ static int ionic_set_vf_mac(struct net_device *netdev, int vf, u8 *mac) · 3 unmodified lines
1698 ether_addr_copy(ionic->vfs[vf].macaddr, mac);1698 ether_addr_copy(ionic->vfs[vf].macaddr, mac);
1699 }1699 }
1700 1700
1701 up_read(&ionic->vf_op_lock);1701 up_write(&ionic->vf_op_lock);
1702 return ret;1702 return ret;
1703}1703}
1704 1704
@@ -1719,7 +1719,7 @@ static int ionic_set_vf_vlan(struct net_device *netdev, int vf, u16 vlan, · 14 unmodified lines
1719 if (proto != htons(ETH_P_8021Q))1719 if (proto != htons(ETH_P_8021Q))
1720 return -EPROTONOSUPPORT;1720 return -EPROTONOSUPPORT;
1721 1721
1722 down_read(&ionic->vf_op_lock);1722 down_write(&ionic->vf_op_lock);
1723 1723
1724 if (vf >= pci_num_vf(ionic->pdev) || !ionic->vfs) {1724 if (vf >= pci_num_vf(ionic->pdev) || !ionic->vfs) {
1725 ret = -EINVAL;1725 ret = -EINVAL;
@@ -1730,7 +1730,7 @@ static int ionic_set_vf_vlan(struct net_device *netdev, int vf, u16 vlan, · 4 unmodified lines
1730 ionic->vfs[vf].vlanid = vlan;1730 ionic->vfs[vf].vlanid = vlan;
1731 }1731 }
1732 1732
1733 up_read(&ionic->vf_op_lock);1733 up_write(&ionic->vf_op_lock);
1734 return ret;1734 return ret;
1735}1735}
1736 1736
drivers/net/ethernet/samsung/sxgbe/sxgbe_main.c+1−1
@@ -2277,7 +2277,7 @@ static int __init sxgbe_cmdline_opt(char *str) · 2276 unmodified lines
2277 if (!str || !*str)2277 if (!str || !*str)
2278 return -EINVAL;2278 return -EINVAL;
2279 while ((opt = strsep(&str, ",")) != NULL) {2279 while ((opt = strsep(&str, ",")) != NULL) {
2280 if (!strncmp(opt, "eee_timer:", 6)) {2280 if (!strncmp(opt, "eee_timer:", 10)) {
2281 if (kstrtoint(opt + 10, 0, &eee_timer))2281 if (kstrtoint(opt + 10, 0, &eee_timer))
2282 goto err;2282 goto err;
2283 }2283 }
drivers/net/ethernet/sfc/ef10.c+17−15
@@ -2853,11 +2853,24 @@ efx_ef10_handle_tx_event(struct efx_channel *channel, efx_qword_t *event) · 2852 unmodified lines
2853 }2853 }
2854 2854
2855 /* Transmit timestamps are only available for 8XXX series. They result2855 /* Transmit timestamps are only available for 8XXX series. They result
2856 * in three events per packet. These occur in order, and are:2856 * in up to three events per packet. These occur in order, and are:
2857 * - the normal completion event2857 * - the normal completion event (may be omitted)
2858 * - the low part of the timestamp2858 * - the low part of the timestamp
2859 * - the high part of the timestamp2859 * - the high part of the timestamp
2860 *2860 *
2861 * It's possible for multiple completion events to appear before the
2862 * corresponding timestamps. So we can for example get:
2863 * COMP N
2864 * COMP N+1
2865 * TS_LO N
2866 * TS_HI N
2867 * TS_LO N+1
2868 * TS_HI N+1
2869 *
2870 * In addition it's also possible for the adjacent completions to be
2871 * merged, so we may not see COMP N above. As such, the completion
2872 * events are not very useful here.
2873 *
2861 * Each part of the timestamp is itself split across two 16 bit2874 * Each part of the timestamp is itself split across two 16 bit
2862 * fields in the event.2875 * fields in the event.
2863 */2876 */
@@ -2865,17 +2878,7 @@ efx_ef10_handle_tx_event(struct efx_channel *channel, efx_qword_t *event) · 1 unmodified line
2865 2878
2866 switch (tx_ev_type) {2879 switch (tx_ev_type) {
2867 case TX_TIMESTAMP_EVENT_TX_EV_COMPLETION:2880 case TX_TIMESTAMP_EVENT_TX_EV_COMPLETION:
2868 /* In case of Queue flush or FLR, we might have received2881 /* Ignore this event - see above. */
2869 * the previous TX completion event but not the Timestamp
2870 * events.
2871 */
2872 if (tx_queue->completed_desc_ptr != tx_queue->ptr_mask)
2873 efx_xmit_done(tx_queue, tx_queue->completed_desc_ptr);
2874
2875 tx_ev_desc_ptr = EFX_QWORD_FIELD(*event,
2876 ESF_DZ_TX_DESCR_INDX);
2877 tx_queue->completed_desc_ptr =
2878 tx_ev_desc_ptr & tx_queue->ptr_mask;
2879 break;2882 break;
2880 2883
2881 case TX_TIMESTAMP_EVENT_TX_EV_TSTAMP_LO:2884 case TX_TIMESTAMP_EVENT_TX_EV_TSTAMP_LO:
@@ -2887,8 +2890,7 @@ efx_ef10_handle_tx_event(struct efx_channel *channel, efx_qword_t *event) · 5 unmodified lines
2887 ts_part = efx_ef10_extract_event_ts(event);2890 ts_part = efx_ef10_extract_event_ts(event);
2888 tx_queue->completed_timestamp_major = ts_part;2891 tx_queue->completed_timestamp_major = ts_part;
2889 2892
2890 efx_xmit_done(tx_queue, tx_queue->completed_desc_ptr);2893 efx_xmit_done_single(tx_queue);
2891 tx_queue->completed_desc_ptr = tx_queue->ptr_mask;
2892 break;2894 break;
2893 2895
2894 default:2896 default:
drivers/net/ethernet/sfc/efx.h+1−0
@@ -20,6 +20,7 @@ netdev_tx_t efx_hard_start_xmit(struct sk_buff *skb, · 19 unmodified lines
20 struct net_device *net_dev);20 struct net_device *net_dev);
21netdev_tx_t efx_enqueue_skb(struct efx_tx_queue *tx_queue, struct sk_buff *skb);21netdev_tx_t efx_enqueue_skb(struct efx_tx_queue *tx_queue, struct sk_buff *skb);
22void efx_xmit_done(struct efx_tx_queue *tx_queue, unsigned int index);22void efx_xmit_done(struct efx_tx_queue *tx_queue, unsigned int index);
23void efx_xmit_done_single(struct efx_tx_queue *tx_queue);
23int efx_setup_tc(struct net_device *net_dev, enum tc_setup_type type,24int efx_setup_tc(struct net_device *net_dev, enum tc_setup_type type,
24 void *type_data);25 void *type_data);
25extern unsigned int efx_piobuf_size;26extern unsigned int efx_piobuf_size;
drivers/net/ethernet/sfc/efx_channels.c+1−0
@@ -583,6 +583,7 @@ struct efx_channel *efx_copy_channel(const struct efx_channel *old_channel) · 582 unmodified lines
583 if (tx_queue->channel)583 if (tx_queue->channel)
584 tx_queue->channel = channel;584 tx_queue->channel = channel;
585 tx_queue->buffer = NULL;585 tx_queue->buffer = NULL;
586 tx_queue->cb_page = NULL;
586 memset(&tx_queue->txd, 0, sizeof(tx_queue->txd));587 memset(&tx_queue->txd, 0, sizeof(tx_queue->txd));
587 }588 }
588 589
drivers/net/ethernet/sfc/net_driver.h+0−3
@@ -208,8 +208,6 @@ struct efx_tx_buffer { · 207 unmodified lines
208 * avoid cache-line ping-pong between the xmit path and the208 * avoid cache-line ping-pong between the xmit path and the
209 * completion path.209 * completion path.
210 * @merge_events: Number of TX merged completion events210 * @merge_events: Number of TX merged completion events
211 * @completed_desc_ptr: Most recent completed pointer - only used with
212 * timestamping.
213 * @completed_timestamp_major: Top part of the most recent tx timestamp.211 * @completed_timestamp_major: Top part of the most recent tx timestamp.
214 * @completed_timestamp_minor: Low part of the most recent tx timestamp.212 * @completed_timestamp_minor: Low part of the most recent tx timestamp.
215 * @insert_count: Current insert pointer213 * @insert_count: Current insert pointer
@@ -269,7 +267,6 @@ struct efx_tx_queue { · 53 unmodified lines
269 unsigned int merge_events;267 unsigned int merge_events;
270 unsigned int bytes_compl;268 unsigned int bytes_compl;
271 unsigned int pkts_compl;269 unsigned int pkts_compl;
272 unsigned int completed_desc_ptr;
273 u32 completed_timestamp_major;270 u32 completed_timestamp_major;
274 u32 completed_timestamp_minor;271 u32 completed_timestamp_minor;
275 272
drivers/net/ethernet/sfc/tx.c+38−0
@@ -535,6 +535,44 @@ netdev_tx_t efx_hard_start_xmit(struct sk_buff *skb, · 534 unmodified lines
535 return efx_enqueue_skb(tx_queue, skb);535 return efx_enqueue_skb(tx_queue, skb);
536}536}
537 537
538void efx_xmit_done_single(struct efx_tx_queue *tx_queue)
539{
540 unsigned int pkts_compl = 0, bytes_compl = 0;
541 unsigned int read_ptr;
542 bool finished = false;
543
544 read_ptr = tx_queue->read_count & tx_queue->ptr_mask;
545
546 while (!finished) {
547 struct efx_tx_buffer *buffer = &tx_queue->buffer[read_ptr];
548
549 if (!efx_tx_buffer_in_use(buffer)) {
550 struct efx_nic *efx = tx_queue->efx;
551
552 netif_err(efx, hw, efx->net_dev,
553 "TX queue %d spurious single TX completion\n",
554 tx_queue->queue);
555 efx_schedule_reset(efx, RESET_TYPE_TX_SKIP);
556 return;
557 }
558
559 /* Need to check the flag before dequeueing. */
560 if (buffer->flags & EFX_TX_BUF_SKB)
561 finished = true;
562 efx_dequeue_buffer(tx_queue, buffer, &pkts_compl, &bytes_compl);
563
564 ++tx_queue->read_count;
565 read_ptr = tx_queue->read_count & tx_queue->ptr_mask;
566 }
567
568 tx_queue->pkts_compl += pkts_compl;
569 tx_queue->bytes_compl += bytes_compl;
570
571 EFX_WARN_ON_PARANOID(pkts_compl != 1);
572
573 efx_xmit_done_check_empty(tx_queue);
574}
575
538void efx_init_tx_queue_core_txq(struct efx_tx_queue *tx_queue)576void efx_init_tx_queue_core_txq(struct efx_tx_queue *tx_queue)
539{577{
540 struct efx_nic *efx = tx_queue->efx;578 struct efx_nic *efx = tx_queue->efx;
drivers/net/ethernet/sfc/tx_common.c+16−13
@@ -80,7 +80,6 @@ void efx_init_tx_queue(struct efx_tx_queue *tx_queue) · 79 unmodified lines
80 tx_queue->xmit_more_available = false;80 tx_queue->xmit_more_available = false;
81 tx_queue->timestamping = (efx_ptp_use_mac_tx_timestamps(efx) &&81 tx_queue->timestamping = (efx_ptp_use_mac_tx_timestamps(efx) &&
82 tx_queue->channel == efx_ptp_channel(efx));82 tx_queue->channel == efx_ptp_channel(efx));
83 tx_queue->completed_desc_ptr = tx_queue->ptr_mask;
84 tx_queue->completed_timestamp_major = 0;83 tx_queue->completed_timestamp_major = 0;
85 tx_queue->completed_timestamp_minor = 0;84 tx_queue->completed_timestamp_minor = 0;
86 85
@@ -210,10 +209,9 @@ static void efx_dequeue_buffers(struct efx_tx_queue *tx_queue, · 123 unmodified lines
210 while (read_ptr != stop_index) {209 while (read_ptr != stop_index) {
211 struct efx_tx_buffer *buffer = &tx_queue->buffer[read_ptr];210 struct efx_tx_buffer *buffer = &tx_queue->buffer[read_ptr];
212 211
213 if (!(buffer->flags & EFX_TX_BUF_OPTION) &&212 if (!efx_tx_buffer_in_use(buffer)) {
214 unlikely(buffer->len == 0)) {
215 netif_err(efx, tx_err, efx->net_dev,213 netif_err(efx, tx_err, efx->net_dev,
216 "TX queue %d spurious TX completion id %x\n",214 "TX queue %d spurious TX completion id %d\n",
217 tx_queue->queue, read_ptr);215 tx_queue->queue, read_ptr);
218 efx_schedule_reset(efx, RESET_TYPE_TX_SKIP);216 efx_schedule_reset(efx, RESET_TYPE_TX_SKIP);
219 return;217 return;
@@ -226,6 +224,19 @@ static void efx_dequeue_buffers(struct efx_tx_queue *tx_queue, · 6 unmodified lines
226 }224 }
227}225}
228 226
227void efx_xmit_done_check_empty(struct efx_tx_queue *tx_queue)
228{
229 if ((int)(tx_queue->read_count - tx_queue->old_write_count) >= 0) {
230 tx_queue->old_write_count = READ_ONCE(tx_queue->write_count);
231 if (tx_queue->read_count == tx_queue->old_write_count) {
232 /* Ensure that read_count is flushed. */
233 smp_mb();
234 tx_queue->empty_read_count =
235 tx_queue->read_count | EFX_EMPTY_COUNT_VALID;
236 }
237 }
238}
239
229void efx_xmit_done(struct efx_tx_queue *tx_queue, unsigned int index)240void efx_xmit_done(struct efx_tx_queue *tx_queue, unsigned int index)
230{241{
231 unsigned int fill_level, pkts_compl = 0, bytes_compl = 0;242 unsigned int fill_level, pkts_compl = 0, bytes_compl = 0;
@@ -256,15 +267,7 @@ void efx_xmit_done(struct efx_tx_queue *tx_queue, unsigned int index) · 24 unmodified lines
256 netif_tx_wake_queue(tx_queue->core_txq);267 netif_tx_wake_queue(tx_queue->core_txq);
257 }268 }
258 269
259 /* Check whether the hardware queue is now empty */270 efx_xmit_done_check_empty(tx_queue);
260 if ((int)(tx_queue->read_count - tx_queue->old_write_count) >= 0) {
261 tx_queue->old_write_count = READ_ONCE(tx_queue->write_count);
262 if (tx_queue->read_count == tx_queue->old_write_count) {
263 smp_mb();
264 tx_queue->empty_read_count =
265 tx_queue->read_count | EFX_EMPTY_COUNT_VALID;
266 }
267 }
268}271}
269 272
270/* Remove buffers put into a tx_queue for the current packet.273/* Remove buffers put into a tx_queue for the current packet.
drivers/net/ethernet/sfc/tx_common.h+6−0
@@ -21,6 +21,12 @@ void efx_dequeue_buffer(struct efx_tx_queue *tx_queue, · 20 unmodified lines
21 unsigned int *pkts_compl,21 unsigned int *pkts_compl,
22 unsigned int *bytes_compl);22 unsigned int *bytes_compl);
23 23
24static inline bool efx_tx_buffer_in_use(struct efx_tx_buffer *buffer)
25{
26 return buffer->len || (buffer->flags & EFX_TX_BUF_OPTION);
27}
28
29void efx_xmit_done_check_empty(struct efx_tx_queue *tx_queue);
24void efx_xmit_done(struct efx_tx_queue *tx_queue, unsigned int index);30void efx_xmit_done(struct efx_tx_queue *tx_queue, unsigned int index);
25 31
26void efx_enqueue_unwind(struct efx_tx_queue *tx_queue,32void efx_enqueue_unwind(struct efx_tx_queue *tx_queue,
drivers/net/ethernet/stmicro/stmmac/dwmac1000_core.c+2−1
@@ -24,6 +24,7 @@ · 23 unmodified lines
24static void dwmac1000_core_init(struct mac_device_info *hw,24static void dwmac1000_core_init(struct mac_device_info *hw,
25 struct net_device *dev)25 struct net_device *dev)
26{26{
27 struct stmmac_priv *priv = netdev_priv(dev);
27 void __iomem *ioaddr = hw->pcsr;28 void __iomem *ioaddr = hw->pcsr;
28 u32 value = readl(ioaddr + GMAC_CONTROL);29 u32 value = readl(ioaddr + GMAC_CONTROL);
29 int mtu = dev->mtu;30 int mtu = dev->mtu;
@@ -35,7 +36,7 @@ static void dwmac1000_core_init(struct mac_device_info *hw, · 5 unmodified lines
35 * Broadcom tags can look like invalid LLC/SNAP packets and cause the36 * Broadcom tags can look like invalid LLC/SNAP packets and cause the
36 * hardware to truncate packets on reception.37 * hardware to truncate packets on reception.
37 */38 */
38 if (netdev_uses_dsa(dev))39 if (netdev_uses_dsa(dev) || !priv->plat->enh_desc)
39 value &= ~GMAC_CONTROL_ACS;40 value &= ~GMAC_CONTROL_ACS;
40 41
41 if (mtu > 1500)42 if (mtu > 1500)
drivers/net/ipvlan/ipvlan_core.c+11−8
@@ -293,6 +293,7 @@ void ipvlan_process_multicast(struct work_struct *work) · 292 unmodified lines
293 }293 }
294 if (dev)294 if (dev)
295 dev_put(dev);295 dev_put(dev);
296 cond_resched();
296 }297 }
297}298}
298 299
@@ -498,19 +499,21 @@ static int ipvlan_process_outbound(struct sk_buff *skb) · 199 unmodified lines
498 struct ethhdr *ethh = eth_hdr(skb);499 struct ethhdr *ethh = eth_hdr(skb);
499 int ret = NET_XMIT_DROP;500 int ret = NET_XMIT_DROP;
500 501
501 /* In this mode we dont care about multicast and broadcast traffic */
502 if (is_multicast_ether_addr(ethh->h_dest)) {
503 pr_debug_ratelimited("Dropped {multi|broad}cast of type=[%x]\n",
504 ntohs(skb->protocol));
505 kfree_skb(skb);
506 goto out;
507 }
508
509 /* The ipvlan is a pseudo-L2 device, so the packets that we receive502 /* The ipvlan is a pseudo-L2 device, so the packets that we receive
510 * will have L2; which need to discarded and processed further503 * will have L2; which need to discarded and processed further
511 * in the net-ns of the main-device.504 * in the net-ns of the main-device.
512 */505 */
513 if (skb_mac_header_was_set(skb)) {506 if (skb_mac_header_was_set(skb)) {
507 /* In this mode we dont care about
508 * multicast and broadcast traffic */
509 if (is_multicast_ether_addr(ethh->h_dest)) {
510 pr_debug_ratelimited(
511 "Dropped {multi|broad}cast of type=[%x]\n",
512 ntohs(skb->protocol));
513 kfree_skb(skb);
514 goto out;
515 }
516
514 skb_pull(skb, sizeof(*ethh));517 skb_pull(skb, sizeof(*ethh));
515 skb->mac_header = (typeof(skb->mac_header))~0U;518 skb->mac_header = (typeof(skb->mac_header))~0U;
516 skb_reset_network_header(skb);519 skb_reset_network_header(skb);
drivers/net/ipvlan/ipvlan_main.c+1−4
@@ -164,7 +164,6 @@ static void ipvlan_uninit(struct net_device *dev) · 163 unmodified lines
164static int ipvlan_open(struct net_device *dev)164static int ipvlan_open(struct net_device *dev)
165{165{
166 struct ipvl_dev *ipvlan = netdev_priv(dev);166 struct ipvl_dev *ipvlan = netdev_priv(dev);
167 struct net_device *phy_dev = ipvlan->phy_dev;
168 struct ipvl_addr *addr;167 struct ipvl_addr *addr;
169 168
170 if (ipvlan->port->mode == IPVLAN_MODE_L3 ||169 if (ipvlan->port->mode == IPVLAN_MODE_L3 ||
@@ -178,7 +177,7 @@ static int ipvlan_open(struct net_device *dev) · 7 unmodified lines
178 ipvlan_ht_addr_add(ipvlan, addr);177 ipvlan_ht_addr_add(ipvlan, addr);
179 rcu_read_unlock();178 rcu_read_unlock();
180 179
181 return dev_uc_add(phy_dev, phy_dev->dev_addr);180 return 0;
182}181}
183 182
184static int ipvlan_stop(struct net_device *dev)183static int ipvlan_stop(struct net_device *dev)
@@ -190,8 +189,6 @@ static int ipvlan_stop(struct net_device *dev) · 5 unmodified lines
190 dev_uc_unsync(phy_dev, dev);189 dev_uc_unsync(phy_dev, dev);
191 dev_mc_unsync(phy_dev, dev);190 dev_mc_unsync(phy_dev, dev);
192 191
193 dev_uc_del(phy_dev, phy_dev->dev_addr);
194
195 rcu_read_lock();192 rcu_read_lock();
196 list_for_each_entry_rcu(addr, &ipvlan->addrs, anode)193 list_for_each_entry_rcu(addr, &ipvlan->addrs, anode)
197 ipvlan_ht_addr_del(addr);194 ipvlan_ht_addr_del(addr);
drivers/net/macsec.c+20−5
@@ -424,6 +424,11 @@ static struct macsec_eth_header *macsec_ethhdr(struct sk_buff *skb) · 423 unmodified lines
424 return (struct macsec_eth_header *)skb_mac_header(skb);424 return (struct macsec_eth_header *)skb_mac_header(skb);
425}425}
426 426
427static sci_t dev_to_sci(struct net_device *dev, __be16 port)
428{
429 return make_sci(dev->dev_addr, port);
430}
431
427static void __macsec_pn_wrapped(struct macsec_secy *secy,432static void __macsec_pn_wrapped(struct macsec_secy *secy,
428 struct macsec_tx_sa *tx_sa)433 struct macsec_tx_sa *tx_sa)
429{434{
@@ -3268,6 +3273,20 @@ static int macsec_set_mac_address(struct net_device *dev, void *p) · 2838 unmodified lines
3268 3273
3269out:3274out:
3270 ether_addr_copy(dev->dev_addr, addr->sa_data);3275 ether_addr_copy(dev->dev_addr, addr->sa_data);
3276 macsec->secy.sci = dev_to_sci(dev, MACSEC_PORT_ES);
3277
3278 /* If h/w offloading is available, propagate to the device */
3279 if (macsec_is_offloaded(macsec)) {
3280 const struct macsec_ops *ops;
3281 struct macsec_context ctx;
3282
3283 ops = macsec_get_ops(macsec, &ctx);
3284 if (ops) {
3285 ctx.secy = &macsec->secy;
3286 macsec_offload(ops->mdo_upd_secy, &ctx);
3287 }
3288 }
3289
3271 return 0;3290 return 0;
3272}3291}
3273 3292
@@ -3342,6 +3361,7 @@ static const struct device_type macsec_type = { · 68 unmodified lines
3342 3361
3343static const struct nla_policy macsec_rtnl_policy[IFLA_MACSEC_MAX + 1] = {3362static const struct nla_policy macsec_rtnl_policy[IFLA_MACSEC_MAX + 1] = {
3344 [IFLA_MACSEC_SCI] = { .type = NLA_U64 },3363 [IFLA_MACSEC_SCI] = { .type = NLA_U64 },
3364 [IFLA_MACSEC_PORT] = { .type = NLA_U16 },
3345 [IFLA_MACSEC_ICV_LEN] = { .type = NLA_U8 },3365 [IFLA_MACSEC_ICV_LEN] = { .type = NLA_U8 },
3346 [IFLA_MACSEC_CIPHER_SUITE] = { .type = NLA_U64 },3366 [IFLA_MACSEC_CIPHER_SUITE] = { .type = NLA_U64 },
3347 [IFLA_MACSEC_WINDOW] = { .type = NLA_U32 },3367 [IFLA_MACSEC_WINDOW] = { .type = NLA_U32 },
@@ -3592,11 +3612,6 @@ static bool sci_exists(struct net_device *dev, sci_t sci) · 244 unmodified lines
3592 return false;3612 return false;
3593}3613}
3594 3614
3595static sci_t dev_to_sci(struct net_device *dev, __be16 port)
3596{
3597 return make_sci(dev->dev_addr, port);
3598}
3599
3600static int macsec_add_dev(struct net_device *dev, sci_t sci, u8 icv_len)3615static int macsec_add_dev(struct net_device *dev, sci_t sci, u8 icv_len)
3601{3616{
3602 struct macsec_dev *macsec = macsec_priv(dev);3617 struct macsec_dev *macsec = macsec_priv(dev);
drivers/net/macvlan.c+2−0
@@ -334,6 +334,8 @@ static void macvlan_process_broadcast(struct work_struct *w) · 333 unmodified lines
334 if (src)334 if (src)
335 dev_put(src->dev);335 dev_put(src->dev);
336 consume_skb(skb);336 consume_skb(skb);
337
338 cond_resched();
337 }339 }
338}340}
339 341
drivers/net/phy/bcm63xx.c+1−0
@@ -73,6 +73,7 @@ static struct phy_driver bcm63xx_driver[] = { · 72 unmodified lines
73 /* same phy as above, with just a different OUI */73 /* same phy as above, with just a different OUI */
74 .phy_id = 0x002bdc00,74 .phy_id = 0x002bdc00,
75 .phy_id_mask = 0xfffffc00,75 .phy_id_mask = 0xfffffc00,
76 .name = "Broadcom BCM63XX (2)",
76 /* PHY_BASIC_FEATURES */77 /* PHY_BASIC_FEATURES */
77 .flags = PHY_IS_INTERNAL,78 .flags = PHY_IS_INTERNAL,
78 .config_init = bcm63xx_config_init,79 .config_init = bcm63xx_config_init,
drivers/net/phy/phy.c+2−1
@@ -727,7 +727,8 @@ static irqreturn_t phy_interrupt(int irq, void *phy_dat) · 726 unmodified lines
727 phy_trigger_machine(phydev);727 phy_trigger_machine(phydev);
728 }728 }
729 729
730 if (phy_clear_interrupt(phydev))730 /* did_interrupt() may have cleared the interrupt already */
731 if (!phydev->drv->did_interrupt && phy_clear_interrupt(phydev))
731 goto phy_err;732 goto phy_err;
732 return IRQ_HANDLED;733 return IRQ_HANDLED;
733 734
drivers/net/phy/phy_device.c+5−1
@@ -286,6 +286,8 @@ static int mdio_bus_phy_suspend(struct device *dev) · 285 unmodified lines
286 if (!mdio_bus_phy_may_suspend(phydev))286 if (!mdio_bus_phy_may_suspend(phydev))
287 return 0;287 return 0;
288 288
289 phydev->suspended_by_mdio_bus = 1;
290
289 return phy_suspend(phydev);291 return phy_suspend(phydev);
290}292}
291 293
@@ -294,9 +296,11 @@ static int mdio_bus_phy_resume(struct device *dev) · 2 unmodified lines
294 struct phy_device *phydev = to_phy_device(dev);296 struct phy_device *phydev = to_phy_device(dev);
295 int ret;297 int ret;
296 298
297 if (!mdio_bus_phy_may_suspend(phydev))299 if (!phydev->suspended_by_mdio_bus)
298 goto no_resume;300 goto no_resume;
299 301
302 phydev->suspended_by_mdio_bus = 0;
303
300 ret = phy_resume(phydev);304 ret = phy_resume(phydev);
301 if (ret < 0)305 if (ret < 0)
302 return ret;306 return ret;
drivers/net/phy/phylink.c+7−1
@@ -761,8 +761,14 @@ static int phylink_bringup_phy(struct phylink *pl, struct phy_device *phy, · 760 unmodified lines
761 config.interface = interface;761 config.interface = interface;
762 762
763 ret = phylink_validate(pl, supported, &config);763 ret = phylink_validate(pl, supported, &config);
764 if (ret)764 if (ret) {
765 phylink_warn(pl, "validation of %s with support %*pb and advertisement %*pb failed: %d\n",
766 phy_modes(config.interface),
767 __ETHTOOL_LINK_MODE_MASK_NBITS, phy->supported,
768 __ETHTOOL_LINK_MODE_MASK_NBITS, config.advertising,
769 ret);
765 return ret;770 return ret;
771 }
766 772
767 phy->phylink = pl;773 phy->phylink = pl;
768 phy->phy_link_change = phylink_phy_change;774 phy->phy_link_change = phylink_phy_change;
drivers/net/slip/slhc.c+10−4
@@ -232,7 +232,7 @@ slhc_compress(struct slcompress *comp, unsigned char *icp, int isize, · 231 unmodified lines
232 struct cstate *cs = lcs->next;232 struct cstate *cs = lcs->next;
233 unsigned long deltaS, deltaA;233 unsigned long deltaS, deltaA;
234 short changes = 0;234 short changes = 0;
235 int hlen;235 int nlen, hlen;
236 unsigned char new_seq[16];236 unsigned char new_seq[16];
237 unsigned char *cp = new_seq;237 unsigned char *cp = new_seq;
238 struct iphdr *ip;238 struct iphdr *ip;
@@ -248,6 +248,8 @@ slhc_compress(struct slcompress *comp, unsigned char *icp, int isize, · 9 unmodified lines
248 return isize;248 return isize;
249 249
250 ip = (struct iphdr *) icp;250 ip = (struct iphdr *) icp;
251 if (ip->version != 4 || ip->ihl < 5)
252 return isize;
251 253
252 /* Bail if this packet isn't TCP, or is an IP fragment */254 /* Bail if this packet isn't TCP, or is an IP fragment */
253 if (ip->protocol != IPPROTO_TCP || (ntohs(ip->frag_off) & 0x3fff)) {255 if (ip->protocol != IPPROTO_TCP || (ntohs(ip->frag_off) & 0x3fff)) {
@@ -258,10 +260,14 @@ slhc_compress(struct slcompress *comp, unsigned char *icp, int isize, · 4 unmodified lines
258 comp->sls_o_tcp++;260 comp->sls_o_tcp++;
259 return isize;261 return isize;
260 }262 }
261 /* Extract TCP header */263 nlen = ip->ihl * 4;
264 if (isize < nlen + sizeof(*th))
265 return isize;
262 266
263 th = (struct tcphdr *)(((unsigned char *)ip) + ip->ihl*4);267 th = (struct tcphdr *)(icp + nlen);
264 hlen = ip->ihl*4 + th->doff*4;268 if (th->doff < sizeof(struct tcphdr) / 4)
269 return isize;
270 hlen = nlen + th->doff * 4;
265 271
266 /* Bail if the TCP packet isn't `compressible' (i.e., ACK isn't set or272 /* Bail if the TCP packet isn't `compressible' (i.e., ACK isn't set or
267 * some other control bit is set). Also uncompressible if273 * some other control bit is set). Also uncompressible if
drivers/net/team/team.c+2−0
@@ -2240,6 +2240,8 @@ team_nl_option_policy[TEAM_ATTR_OPTION_MAX + 1] = { · 2239 unmodified lines
2240 [TEAM_ATTR_OPTION_CHANGED] = { .type = NLA_FLAG },2240 [TEAM_ATTR_OPTION_CHANGED] = { .type = NLA_FLAG },
2241 [TEAM_ATTR_OPTION_TYPE] = { .type = NLA_U8 },2241 [TEAM_ATTR_OPTION_TYPE] = { .type = NLA_U8 },
2242 [TEAM_ATTR_OPTION_DATA] = { .type = NLA_BINARY },2242 [TEAM_ATTR_OPTION_DATA] = { .type = NLA_BINARY },
2243 [TEAM_ATTR_OPTION_PORT_IFINDEX] = { .type = NLA_U32 },
2244 [TEAM_ATTR_OPTION_ARRAY_INDEX] = { .type = NLA_U32 },
2243};2245};
2244 2246
2245static int team_nl_cmd_noop(struct sk_buff *skb, struct genl_info *info)2247static int team_nl_cmd_noop(struct sk_buff *skb, struct genl_info *info)
drivers/net/usb/r8152.c+8−0
@@ -3221,6 +3221,8 @@ static u16 r8153_phy_status(struct r8152 *tp, u16 desired) · 3220 unmodified lines
3221 }3221 }
3222 3222
3223 msleep(20);3223 msleep(20);
3224 if (test_bit(RTL8152_UNPLUG, &tp->flags))
3225 break;
3224 }3226 }
3225 3227
3226 return data;3228 return data;
@@ -5402,7 +5404,10 @@ static void r8153_init(struct r8152 *tp) · 2175 unmodified lines
5402 if (ocp_read_word(tp, MCU_TYPE_PLA, PLA_BOOT_CTRL) &5404 if (ocp_read_word(tp, MCU_TYPE_PLA, PLA_BOOT_CTRL) &
5403 AUTOLOAD_DONE)5405 AUTOLOAD_DONE)
5404 break;5406 break;
5407
5405 msleep(20);5408 msleep(20);
5409 if (test_bit(RTL8152_UNPLUG, &tp->flags))
5410 break;
5406 }5411 }
5407 5412
5408 data = r8153_phy_status(tp, 0);5413 data = r8153_phy_status(tp, 0);
@@ -5539,7 +5544,10 @@ static void r8153b_init(struct r8152 *tp) · 130 unmodified lines
5539 if (ocp_read_word(tp, MCU_TYPE_PLA, PLA_BOOT_CTRL) &5544 if (ocp_read_word(tp, MCU_TYPE_PLA, PLA_BOOT_CTRL) &
5540 AUTOLOAD_DONE)5545 AUTOLOAD_DONE)
5541 break;5546 break;
5547
5542 msleep(20);5548 msleep(20);
5549 if (test_bit(RTL8152_UNPLUG, &tp->flags))
5550 break;
5543 }5551 }
5544 5552
5545 data = r8153_phy_status(tp, 0);5553 data = r8153_phy_status(tp, 0);
drivers/net/veth.c+1−1
@@ -328,7 +328,7 @@ static void veth_get_stats64(struct net_device *dev, · 327 unmodified lines
328 rcu_read_lock();328 rcu_read_lock();
329 peer = rcu_dereference(priv->peer);329 peer = rcu_dereference(priv->peer);
330 if (peer) {330 if (peer) {
331 tot->rx_dropped += veth_stats_tx(peer, &packets, &bytes);331 veth_stats_tx(peer, &packets, &bytes);
332 tot->rx_bytes += bytes;332 tot->rx_bytes += bytes;
333 tot->rx_packets += packets;333 tot->rx_packets += packets;
334 334
drivers/net/wireless/intel/iwlwifi/mvm/nvm.c+2−1
@@ -308,7 +308,8 @@ iwl_parse_nvm_sections(struct iwl_mvm *mvm) · 307 unmodified lines
308 }308 }
309 309
310 /* PHY_SKU section is mandatory in B0 */310 /* PHY_SKU section is mandatory in B0 */
311 if (!mvm->nvm_sections[NVM_SECTION_TYPE_PHY_SKU].data) {311 if (mvm->trans->cfg->nvm_type == IWL_NVM_EXT &&
312 !mvm->nvm_sections[NVM_SECTION_TYPE_PHY_SKU].data) {
312 IWL_ERR(mvm,313 IWL_ERR(mvm,
313 "Can't parse phy_sku in B0, empty sections\n");314 "Can't parse phy_sku in B0, empty sections\n");
314 return NULL;315 return NULL;
drivers/net/wireless/mediatek/mt76/dma.c+6−3
@@ -447,10 +447,13 @@ mt76_add_fragment(struct mt76_dev *dev, struct mt76_queue *q, void *data, · 446 unmodified lines
447 struct page *page = virt_to_head_page(data);447 struct page *page = virt_to_head_page(data);
448 int offset = data - page_address(page);448 int offset = data - page_address(page);
449 struct sk_buff *skb = q->rx_head;449 struct sk_buff *skb = q->rx_head;
450 struct skb_shared_info *shinfo = skb_shinfo(skb);
450 451
451 offset += q->buf_offset;452 if (shinfo->nr_frags < ARRAY_SIZE(shinfo->frags)) {
452 skb_add_rx_frag(skb, skb_shinfo(skb)->nr_frags, page, offset, len,453 offset += q->buf_offset;
453 q->buf_size);454 skb_add_rx_frag(skb, shinfo->nr_frags, page, offset, len,
455 q->buf_size);
456 }
454 457
455 if (more)458 if (more)
456 return;459 return;
drivers/nvme/host/rdma.c+5−3
@@ -850,9 +850,11 @@ out_free_tagset: · 849 unmodified lines
850 if (new)850 if (new)
851 blk_mq_free_tag_set(ctrl->ctrl.admin_tagset);851 blk_mq_free_tag_set(ctrl->ctrl.admin_tagset);
852out_free_async_qe:852out_free_async_qe:
853 nvme_rdma_free_qe(ctrl->device->dev, &ctrl->async_event_sqe,853 if (ctrl->async_event_sqe.data) {
854 sizeof(struct nvme_command), DMA_TO_DEVICE);854 nvme_rdma_free_qe(ctrl->device->dev, &ctrl->async_event_sqe,
855 ctrl->async_event_sqe.data = NULL;855 sizeof(struct nvme_command), DMA_TO_DEVICE);
856 ctrl->async_event_sqe.data = NULL;
857 }
856out_free_queue:858out_free_queue:
857 nvme_rdma_free_queue(&ctrl->queues[0]);859 nvme_rdma_free_queue(&ctrl->queues[0]);
858 return error;860 return error;
drivers/nvme/target/tcp.c+9−3
@@ -515,7 +515,7 @@ static int nvmet_try_send_data_pdu(struct nvmet_tcp_cmd *cmd) · 514 unmodified lines
515 return 1;515 return 1;
516}516}
517 517
518static int nvmet_try_send_data(struct nvmet_tcp_cmd *cmd)518static int nvmet_try_send_data(struct nvmet_tcp_cmd *cmd, bool last_in_batch)
519{519{
520 struct nvmet_tcp_queue *queue = cmd->queue;520 struct nvmet_tcp_queue *queue = cmd->queue;
521 int ret;521 int ret;
@@ -523,9 +523,15 @@ static int nvmet_try_send_data(struct nvmet_tcp_cmd *cmd) · 1 unmodified line
523 while (cmd->cur_sg) {523 while (cmd->cur_sg) {
524 struct page *page = sg_page(cmd->cur_sg);524 struct page *page = sg_page(cmd->cur_sg);
525 u32 left = cmd->cur_sg->length - cmd->offset;525 u32 left = cmd->cur_sg->length - cmd->offset;
526 int flags = MSG_DONTWAIT;
527
528 if ((!last_in_batch && cmd->queue->send_list_len) ||
529 cmd->wbytes_done + left < cmd->req.transfer_len ||
530 queue->data_digest || !queue->nvme_sq.sqhd_disabled)
531 flags |= MSG_MORE;
526 532
527 ret = kernel_sendpage(cmd->queue->sock, page, cmd->offset,533 ret = kernel_sendpage(cmd->queue->sock, page, cmd->offset,
528 left, MSG_DONTWAIT | MSG_MORE);534 left, flags);
529 if (ret <= 0)535 if (ret <= 0)
530 return ret;536 return ret;
531 537
@@ -660,7 +666,7 @@ static int nvmet_tcp_try_send_one(struct nvmet_tcp_queue *queue, · 128 unmodified lines
660 }666 }
661 667
662 if (cmd->state == NVMET_TCP_SEND_DATA) {668 if (cmd->state == NVMET_TCP_SEND_DATA) {
663 ret = nvmet_try_send_data(cmd);669 ret = nvmet_try_send_data(cmd, last_in_batch);
664 if (ret <= 0)670 if (ret <= 0)
665 goto done_send;671 goto done_send;
666 }672 }
drivers/of/of_mdio.c+1−0
@@ -306,6 +306,7 @@ int of_mdiobus_register(struct mii_bus *mdio, struct device_node *np) · 305 unmodified lines
306 rc = of_mdiobus_register_phy(mdio, child, addr);306 rc = of_mdiobus_register_phy(mdio, child, addr);
307 if (rc && rc != -ENODEV)307 if (rc && rc != -ENODEV)
308 goto unregister;308 goto unregister;
309 break;
309 }310 }
310 }311 }
311 }312 }
drivers/pinctrl/cirrus/pinctrl-madera-core.c+13−0
@@ -1073,13 +1073,26 @@ static int madera_pin_probe(struct platform_device *pdev) · 1072 unmodified lines
1073 return ret;1073 return ret;
1074 }1074 }
1075 1075
1076 platform_set_drvdata(pdev, priv);
1077
1076 dev_dbg(priv->dev, "pinctrl probed ok\n");1078 dev_dbg(priv->dev, "pinctrl probed ok\n");
1077 1079
1078 return 0;1080 return 0;
1079}1081}
1080 1082
1083static int madera_pin_remove(struct platform_device *pdev)
1084{
1085 struct madera_pin_private *priv = platform_get_drvdata(pdev);
1086
1087 if (priv->madera->pdata.gpio_configs)
1088 pinctrl_unregister_mappings(priv->madera->pdata.gpio_configs);
1089
1090 return 0;
1091}
1092
1081static struct platform_driver madera_pin_driver = {1093static struct platform_driver madera_pin_driver = {
1082 .probe = madera_pin_probe,1094 .probe = madera_pin_probe,
1095 .remove = madera_pin_remove,
1083 .driver = {1096 .driver = {
1084 .name = "madera-pinctrl",1097 .name = "madera-pinctrl",
1085 },1098 },
drivers/pinctrl/core.c+0−1
@@ -2021,7 +2021,6 @@ static int pinctrl_claim_hogs(struct pinctrl_dev *pctldev) · 2020 unmodified lines
2021 return PTR_ERR(pctldev->p);2021 return PTR_ERR(pctldev->p);
2022 }2022 }
2023 2023
2024 kref_get(&pctldev->p->users);
2025 pctldev->hog_default =2024 pctldev->hog_default =
2026 pinctrl_lookup_state(pctldev->p, PINCTRL_STATE_DEFAULT);2025 pinctrl_lookup_state(pctldev->p, PINCTRL_STATE_DEFAULT);
2027 if (IS_ERR(pctldev->hog_default)) {2026 if (IS_ERR(pctldev->hog_default)) {
drivers/pinctrl/freescale/pinctrl-scu.c+2−2
@@ -23,12 +23,12 @@ struct imx_sc_msg_req_pad_set { · 22 unmodified lines
23 struct imx_sc_rpc_msg hdr;23 struct imx_sc_rpc_msg hdr;
24 u32 val;24 u32 val;
25 u16 pad;25 u16 pad;
26} __packed;26} __packed __aligned(4);
27 27
28struct imx_sc_msg_req_pad_get {28struct imx_sc_msg_req_pad_get {
29 struct imx_sc_rpc_msg hdr;29 struct imx_sc_rpc_msg hdr;
30 u16 pad;30 u16 pad;
31} __packed;31} __packed __aligned(4);
32 32
33struct imx_sc_msg_resp_pad_get {33struct imx_sc_msg_resp_pad_get {
34 struct imx_sc_rpc_msg hdr;34 struct imx_sc_rpc_msg hdr;
drivers/pinctrl/meson/pinctrl-meson-gxl.c+2−2
@@ -147,8 +147,8 @@ static const unsigned int sdio_d0_pins[] = { GPIOX_0 }; · 146 unmodified lines
147static const unsigned int sdio_d1_pins[] = { GPIOX_1 };147static const unsigned int sdio_d1_pins[] = { GPIOX_1 };
148static const unsigned int sdio_d2_pins[] = { GPIOX_2 };148static const unsigned int sdio_d2_pins[] = { GPIOX_2 };
149static const unsigned int sdio_d3_pins[] = { GPIOX_3 };149static const unsigned int sdio_d3_pins[] = { GPIOX_3 };
150static const unsigned int sdio_cmd_pins[] = { GPIOX_4 };150static const unsigned int sdio_clk_pins[] = { GPIOX_4 };
151static const unsigned int sdio_clk_pins[] = { GPIOX_5 };151static const unsigned int sdio_cmd_pins[] = { GPIOX_5 };
152static const unsigned int sdio_irq_pins[] = { GPIOX_7 };152static const unsigned int sdio_irq_pins[] = { GPIOX_7 };
153 153
154static const unsigned int nand_ce0_pins[] = { BOOT_8 };154static const unsigned int nand_ce0_pins[] = { BOOT_8 };
drivers/pinctrl/pinctrl-falcon.c+1−1
@@ -451,7 +451,7 @@ static int pinctrl_falcon_probe(struct platform_device *pdev) · 450 unmodified lines
451 falcon_info.clk[*bank] = clk_get(&ppdev->dev, NULL);451 falcon_info.clk[*bank] = clk_get(&ppdev->dev, NULL);
452 if (IS_ERR(falcon_info.clk[*bank])) {452 if (IS_ERR(falcon_info.clk[*bank])) {
453 dev_err(&ppdev->dev, "failed to get clock\n");453 dev_err(&ppdev->dev, "failed to get clock\n");
454 of_node_put(np)454 of_node_put(np);
455 return PTR_ERR(falcon_info.clk[*bank]);455 return PTR_ERR(falcon_info.clk[*bank]);
456 }456 }
457 falcon_info.membase[*bank] = devm_ioremap_resource(&pdev->dev,457 falcon_info.membase[*bank] = devm_ioremap_resource(&pdev->dev,
drivers/pinctrl/qcom/pinctrl-msm.c+1−2
@@ -1104,7 +1104,6 @@ static int msm_gpio_init(struct msm_pinctrl *pctrl) · 1103 unmodified lines
1104 pctrl->irq_chip.irq_mask = msm_gpio_irq_mask;1104 pctrl->irq_chip.irq_mask = msm_gpio_irq_mask;
1105 pctrl->irq_chip.irq_unmask = msm_gpio_irq_unmask;1105 pctrl->irq_chip.irq_unmask = msm_gpio_irq_unmask;
1106 pctrl->irq_chip.irq_ack = msm_gpio_irq_ack;1106 pctrl->irq_chip.irq_ack = msm_gpio_irq_ack;
1107 pctrl->irq_chip.irq_eoi = irq_chip_eoi_parent;
1108 pctrl->irq_chip.irq_set_type = msm_gpio_irq_set_type;1107 pctrl->irq_chip.irq_set_type = msm_gpio_irq_set_type;
1109 pctrl->irq_chip.irq_set_wake = msm_gpio_irq_set_wake;1108 pctrl->irq_chip.irq_set_wake = msm_gpio_irq_set_wake;
1110 pctrl->irq_chip.irq_request_resources = msm_gpio_irq_reqres;1109 pctrl->irq_chip.irq_request_resources = msm_gpio_irq_reqres;
@@ -1118,7 +1117,7 @@ static int msm_gpio_init(struct msm_pinctrl *pctrl) · 7 unmodified lines
1118 if (!chip->irq.parent_domain)1117 if (!chip->irq.parent_domain)
1119 return -EPROBE_DEFER;1118 return -EPROBE_DEFER;
1120 chip->irq.child_to_parent_hwirq = msm_gpio_wakeirq;1119 chip->irq.child_to_parent_hwirq = msm_gpio_wakeirq;
1121 1120 pctrl->irq_chip.irq_eoi = irq_chip_eoi_parent;
1122 /*1121 /*
1123 * Let's skip handling the GPIOs, if the parent irqchip1122 * Let's skip handling the GPIOs, if the parent irqchip
1124 * is handling the direct connect IRQ of the GPIO.1123 * is handling the direct connect IRQ of the GPIO.
drivers/pinctrl/qcom/pinctrl-ssbi-gpio.c+1−1
@@ -794,7 +794,7 @@ static int pm8xxx_gpio_probe(struct platform_device *pdev) · 793 unmodified lines
794 girq->fwnode = of_node_to_fwnode(pctrl->dev->of_node);794 girq->fwnode = of_node_to_fwnode(pctrl->dev->of_node);
795 girq->parent_domain = parent_domain;795 girq->parent_domain = parent_domain;
796 girq->child_to_parent_hwirq = pm8xxx_child_to_parent_hwirq;796 girq->child_to_parent_hwirq = pm8xxx_child_to_parent_hwirq;
797 girq->populate_parent_alloc_arg = gpiochip_populate_parent_fwspec_fourcell;797 girq->populate_parent_alloc_arg = gpiochip_populate_parent_fwspec_twocell;
798 girq->child_offset_to_irq = pm8xxx_child_offset_to_irq;798 girq->child_offset_to_irq = pm8xxx_child_offset_to_irq;
799 girq->child_irq_domain_ops.translate = pm8xxx_domain_translate;799 girq->child_irq_domain_ops.translate = pm8xxx_domain_translate;
800 800
drivers/rtc/Kconfig+1−0
@@ -327,6 +327,7 @@ config RTC_DRV_MAX6900 · 326 unmodified lines
327config RTC_DRV_MAX8907327config RTC_DRV_MAX8907
328 tristate "Maxim MAX8907"328 tristate "Maxim MAX8907"
329 depends on MFD_MAX8907 || COMPILE_TEST329 depends on MFD_MAX8907 || COMPILE_TEST
330 select REGMAP_IRQ
330 help331 help
331 If you say yes here you will get support for the332 If you say yes here you will get support for the
332 RTC of Maxim MAX8907 PMIC.333 RTC of Maxim MAX8907 PMIC.
drivers/s390/block/dasd.c+24−3
@@ -178,6 +178,8 @@ struct dasd_block *dasd_alloc_block(void) · 177 unmodified lines
178 (unsigned long) block);178 (unsigned long) block);
179 INIT_LIST_HEAD(&block->ccw_queue);179 INIT_LIST_HEAD(&block->ccw_queue);
180 spin_lock_init(&block->queue_lock);180 spin_lock_init(&block->queue_lock);
181 INIT_LIST_HEAD(&block->format_list);
182 spin_lock_init(&block->format_lock);
181 timer_setup(&block->timer, dasd_block_timeout, 0);183 timer_setup(&block->timer, dasd_block_timeout, 0);
182 spin_lock_init(&block->profile.lock);184 spin_lock_init(&block->profile.lock);
183 185
@@ -1779,20 +1781,26 @@ void dasd_int_handler(struct ccw_device *cdev, unsigned long intparm, · 1595 unmodified lines
1779 1781
1780 if (dasd_ese_needs_format(cqr->block, irb)) {1782 if (dasd_ese_needs_format(cqr->block, irb)) {
1781 if (rq_data_dir((struct request *)cqr->callback_data) == READ) {1783 if (rq_data_dir((struct request *)cqr->callback_data) == READ) {
1782 device->discipline->ese_read(cqr);1784 device->discipline->ese_read(cqr, irb);
1783 cqr->status = DASD_CQR_SUCCESS;1785 cqr->status = DASD_CQR_SUCCESS;
1784 cqr->stopclk = now;1786 cqr->stopclk = now;
1785 dasd_device_clear_timer(device);1787 dasd_device_clear_timer(device);
1786 dasd_schedule_device_bh(device);1788 dasd_schedule_device_bh(device);
1787 return;1789 return;
1788 }1790 }
1789 fcqr = device->discipline->ese_format(device, cqr);1791 fcqr = device->discipline->ese_format(device, cqr, irb);
1790 if (IS_ERR(fcqr)) {1792 if (IS_ERR(fcqr)) {
1793 if (PTR_ERR(fcqr) == -EINVAL) {
1794 cqr->status = DASD_CQR_ERROR;
1795 return;
1796 }
1791 /*1797 /*
1792 * If we can't format now, let the request go1798 * If we can't format now, let the request go
1793 * one extra round. Maybe we can format later.1799 * one extra round. Maybe we can format later.
1794 */1800 */
1795 cqr->status = DASD_CQR_QUEUED;1801 cqr->status = DASD_CQR_QUEUED;
1802 dasd_schedule_device_bh(device);
1803 return;
1796 } else {1804 } else {
1797 fcqr->status = DASD_CQR_QUEUED;1805 fcqr->status = DASD_CQR_QUEUED;
1798 cqr->status = DASD_CQR_QUEUED;1806 cqr->status = DASD_CQR_QUEUED;
@@ -2748,11 +2756,13 @@ static void __dasd_cleanup_cqr(struct dasd_ccw_req *cqr) · 949 unmodified lines
2748{2756{
2749 struct request *req;2757 struct request *req;
2750 blk_status_t error = BLK_STS_OK;2758 blk_status_t error = BLK_STS_OK;
2759 unsigned int proc_bytes;
2751 int status;2760 int status;
2752 2761
2753 req = (struct request *) cqr->callback_data;2762 req = (struct request *) cqr->callback_data;
2754 dasd_profile_end(cqr->block, cqr, req);2763 dasd_profile_end(cqr->block, cqr, req);
2755 2764
2765 proc_bytes = cqr->proc_bytes;
2756 status = cqr->block->base->discipline->free_cp(cqr, req);2766 status = cqr->block->base->discipline->free_cp(cqr, req);
2757 if (status < 0)2767 if (status < 0)
2758 error = errno_to_blk_status(status);2768 error = errno_to_blk_status(status);
@@ -2783,7 +2793,18 @@ static void __dasd_cleanup_cqr(struct dasd_ccw_req *cqr) · 24 unmodified lines
2783 blk_mq_end_request(req, error);2793 blk_mq_end_request(req, error);
2784 blk_mq_run_hw_queues(req->q, true);2794 blk_mq_run_hw_queues(req->q, true);
2785 } else {2795 } else {
2786 blk_mq_complete_request(req);2796 /*
2797 * Partial completed requests can happen with ESE devices.
2798 * During read we might have gotten a NRF error and have to
2799 * complete a request partially.
2800 */
2801 if (proc_bytes) {
2802 blk_update_request(req, BLK_STS_OK,
2803 blk_rq_bytes(req) - proc_bytes);
2804 blk_mq_requeue_request(req, true);
2805 } else {
2806 blk_mq_complete_request(req);
2807 }
2787 }2808 }
2788}2809}
2789 2810
drivers/s390/block/dasd_eckd.c+156−7
@@ -207,6 +207,45 @@ static void set_ch_t(struct ch_t *geo, __u32 cyl, __u8 head) · 206 unmodified lines
207 geo->head |= head;207 geo->head |= head;
208}208}
209 209
210/*
211 * calculate failing track from sense data depending if
212 * it is an EAV device or not
213 */
214static int dasd_eckd_track_from_irb(struct irb *irb, struct dasd_device *device,
215 sector_t *track)
216{
217 struct dasd_eckd_private *private = device->private;
218 u8 *sense = NULL;
219 u32 cyl;
220 u8 head;
221
222 sense = dasd_get_sense(irb);
223 if (!sense) {
224 DBF_DEV_EVENT(DBF_WARNING, device, "%s",
225 "ESE error no sense data\n");
226 return -EINVAL;
227 }
228 if (!(sense[27] & DASD_SENSE_BIT_2)) {
229 DBF_DEV_EVENT(DBF_WARNING, device, "%s",
230 "ESE error no valid track data\n");
231 return -EINVAL;
232 }
233
234 if (sense[27] & DASD_SENSE_BIT_3) {
235 /* enhanced addressing */
236 cyl = sense[30] << 20;
237 cyl |= (sense[31] & 0xF0) << 12;
238 cyl |= sense[28] << 8;
239 cyl |= sense[29];
240 } else {
241 cyl = sense[29] << 8;
242 cyl |= sense[30];
243 }
244 head = sense[31] & 0x0F;
245 *track = cyl * private->rdc_data.trk_per_cyl + head;
246 return 0;
247}
248
210static int set_timestamp(struct ccw1 *ccw, struct DE_eckd_data *data,249static int set_timestamp(struct ccw1 *ccw, struct DE_eckd_data *data,
211 struct dasd_device *device)250 struct dasd_device *device)
212{251{
@@ -2986,6 +3025,37 @@ static int dasd_eckd_format_device(struct dasd_device *base, · 2773 unmodified lines
2986 0, NULL);3025 0, NULL);
2987}3026}
2988 3027
3028static bool test_and_set_format_track(struct dasd_format_entry *to_format,
3029 struct dasd_block *block)
3030{
3031 struct dasd_format_entry *format;
3032 unsigned long flags;
3033 bool rc = false;
3034
3035 spin_lock_irqsave(&block->format_lock, flags);
3036 list_for_each_entry(format, &block->format_list, list) {
3037 if (format->track == to_format->track) {
3038 rc = true;
3039 goto out;
3040 }
3041 }
3042 list_add_tail(&to_format->list, &block->format_list);
3043
3044out:
3045 spin_unlock_irqrestore(&block->format_lock, flags);
3046 return rc;
3047}
3048
3049static void clear_format_track(struct dasd_format_entry *format,
3050 struct dasd_block *block)
3051{
3052 unsigned long flags;
3053
3054 spin_lock_irqsave(&block->format_lock, flags);
3055 list_del_init(&format->list);
3056 spin_unlock_irqrestore(&block->format_lock, flags);
3057}
3058
2989/*3059/*
2990 * Callback function to free ESE format requests.3060 * Callback function to free ESE format requests.
2991 */3061 */
@@ -2993,15 +3063,19 @@ static void dasd_eckd_ese_format_cb(struct dasd_ccw_req *cqr, void *data) · 1 unmodified line
2993{3063{
2994 struct dasd_device *device = cqr->startdev;3064 struct dasd_device *device = cqr->startdev;
2995 struct dasd_eckd_private *private = device->private;3065 struct dasd_eckd_private *private = device->private;
3066 struct dasd_format_entry *format = data;
2996 3067
3068 clear_format_track(format, cqr->basedev->block);
2997 private->count--;3069 private->count--;
2998 dasd_ffree_request(cqr, device);3070 dasd_ffree_request(cqr, device);
2999}3071}
3000 3072
3001static struct dasd_ccw_req *3073static struct dasd_ccw_req *
3002dasd_eckd_ese_format(struct dasd_device *startdev, struct dasd_ccw_req *cqr)3074dasd_eckd_ese_format(struct dasd_device *startdev, struct dasd_ccw_req *cqr,
3075 struct irb *irb)
3003{3076{
3004 struct dasd_eckd_private *private;3077 struct dasd_eckd_private *private;
3078 struct dasd_format_entry *format;
3005 struct format_data_t fdata;3079 struct format_data_t fdata;
3006 unsigned int recs_per_trk;3080 unsigned int recs_per_trk;
3007 struct dasd_ccw_req *fcqr;3081 struct dasd_ccw_req *fcqr;
@@ -3011,23 +3085,39 @@ dasd_eckd_ese_format(struct dasd_device *startdev, struct dasd_ccw_req *cqr) · 3 unmodified lines
3011 struct request *req;3085 struct request *req;
3012 sector_t first_trk;3086 sector_t first_trk;
3013 sector_t last_trk;3087 sector_t last_trk;
3088 sector_t curr_trk;
3014 int rc;3089 int rc;
3015 3090
3016 req = cqr->callback_data;3091 req = cqr->callback_data;
3017 base = cqr->block->base;3092 block = cqr->block;
3093 base = block->base;
3018 private = base->private;3094 private = base->private;
3019 block = base->block;
3020 blksize = block->bp_block;3095 blksize = block->bp_block;
3021 recs_per_trk = recs_per_track(&private->rdc_data, 0, blksize);3096 recs_per_trk = recs_per_track(&private->rdc_data, 0, blksize);
3097 format = &startdev->format_entry;
3022 3098
3023 first_trk = blk_rq_pos(req) >> block->s2b_shift;3099 first_trk = blk_rq_pos(req) >> block->s2b_shift;
3024 sector_div(first_trk, recs_per_trk);3100 sector_div(first_trk, recs_per_trk);
3025 last_trk =3101 last_trk =
3026 (blk_rq_pos(req) + blk_rq_sectors(req) - 1) >> block->s2b_shift;3102 (blk_rq_pos(req) + blk_rq_sectors(req) - 1) >> block->s2b_shift;
3027 sector_div(last_trk, recs_per_trk);3103 sector_div(last_trk, recs_per_trk);
3104 rc = dasd_eckd_track_from_irb(irb, base, &curr_trk);
3105 if (rc)
3106 return ERR_PTR(rc);
3028 3107
3029 fdata.start_unit = first_trk;3108 if (curr_trk < first_trk || curr_trk > last_trk) {
3030 fdata.stop_unit = last_trk;3109 DBF_DEV_EVENT(DBF_WARNING, startdev,
3110 "ESE error track %llu not within range %llu - %llu\n",
3111 curr_trk, first_trk, last_trk);
3112 return ERR_PTR(-EINVAL);
3113 }
3114 format->track = curr_trk;
3115 /* test if track is already in formatting by another thread */
3116 if (test_and_set_format_track(format, block))
3117 return ERR_PTR(-EEXIST);
3118
3119 fdata.start_unit = curr_trk;
3120 fdata.stop_unit = curr_trk;
3031 fdata.blksize = blksize;3121 fdata.blksize = blksize;
3032 fdata.intensity = private->uses_cdl ? DASD_FMT_INT_COMPAT : 0;3122 fdata.intensity = private->uses_cdl ? DASD_FMT_INT_COMPAT : 0;
3033 3123
@@ -3044,6 +3134,7 @@ dasd_eckd_ese_format(struct dasd_device *startdev, struct dasd_ccw_req *cqr) · 10 unmodified lines
3044 return fcqr;3134 return fcqr;
3045 3135
3046 fcqr->callback = dasd_eckd_ese_format_cb;3136 fcqr->callback = dasd_eckd_ese_format_cb;
3137 fcqr->callback_data = (void *) format;
3047 3138
3048 return fcqr;3139 return fcqr;
3049}3140}
@@ -3051,29 +3142,87 @@ dasd_eckd_ese_format(struct dasd_device *startdev, struct dasd_ccw_req *cqr) · 1 unmodified line
3051/*3142/*
3052 * When data is read from an unformatted area of an ESE volume, this function3143 * When data is read from an unformatted area of an ESE volume, this function
3053 * returns zeroed data and thereby mimics a read of zero data.3144 * returns zeroed data and thereby mimics a read of zero data.
3145 *
3146 * The first unformatted track is the one that got the NRF error, the address is
3147 * encoded in the sense data.
3148 *
3149 * All tracks before have returned valid data and should not be touched.
3150 * All tracks after the unformatted track might be formatted or not. This is
3151 * currently not known, remember the processed data and return the remainder of
3152 * the request to the blocklayer in __dasd_cleanup_cqr().
3054 */3153 */
3055static void dasd_eckd_ese_read(struct dasd_ccw_req *cqr)3154static int dasd_eckd_ese_read(struct dasd_ccw_req *cqr, struct irb *irb)
3056{3155{
3156 struct dasd_eckd_private *private;
3157 sector_t first_trk, last_trk;
3158 sector_t first_blk, last_blk;
3057 unsigned int blksize, off;3159 unsigned int blksize, off;
3160 unsigned int recs_per_trk;
3058 struct dasd_device *base;3161 struct dasd_device *base;
3059 struct req_iterator iter;3162 struct req_iterator iter;
3163 struct dasd_block *block;
3164 unsigned int skip_block;
3165 unsigned int blk_count;
3060 struct request *req;3166 struct request *req;
3061 struct bio_vec bv;3167 struct bio_vec bv;
3168 sector_t curr_trk;
3169 sector_t end_blk;
3062 char *dst;3170 char *dst;
3171 int rc;
3063 3172
3064 req = (struct request *) cqr->callback_data;3173 req = (struct request *) cqr->callback_data;
3065 base = cqr->block->base;3174 base = cqr->block->base;
3066 blksize = base->block->bp_block;3175 blksize = base->block->bp_block;
3176 block = cqr->block;
3177 private = base->private;
3178 skip_block = 0;
3179 blk_count = 0;
3180
3181 recs_per_trk = recs_per_track(&private->rdc_data, 0, blksize);
3182 first_trk = first_blk = blk_rq_pos(req) >> block->s2b_shift;
3183 sector_div(first_trk, recs_per_trk);
3184 last_trk = last_blk =
3185 (blk_rq_pos(req) + blk_rq_sectors(req) - 1) >> block->s2b_shift;
3186 sector_div(last_trk, recs_per_trk);
3187 rc = dasd_eckd_track_from_irb(irb, base, &curr_trk);
3188 if (rc)
3189 return rc;
3190
3191 /* sanity check if the current track from sense data is valid */
3192 if (curr_trk < first_trk || curr_trk > last_trk) {
3193 DBF_DEV_EVENT(DBF_WARNING, base,
3194 "ESE error track %llu not within range %llu - %llu\n",
3195 curr_trk, first_trk, last_trk);
3196 return -EINVAL;
3197 }
3198
3199 /*
3200 * if not the first track got the NRF error we have to skip over valid
3201 * blocks
3202 */
3203 if (curr_trk != first_trk)
3204 skip_block = curr_trk * recs_per_trk - first_blk;
3205
3206 /* we have no information beyond the current track */
3207 end_blk = (curr_trk + 1) * recs_per_trk;
3067 3208
3068 rq_for_each_segment(bv, req, iter) {3209 rq_for_each_segment(bv, req, iter) {
3069 dst = page_address(bv.bv_page) + bv.bv_offset;3210 dst = page_address(bv.bv_page) + bv.bv_offset;
3070 for (off = 0; off < bv.bv_len; off += blksize) {3211 for (off = 0; off < bv.bv_len; off += blksize) {
3071 if (dst && rq_data_dir(req) == READ) {3212 if (first_blk + blk_count >= end_blk) {
3213 cqr->proc_bytes = blk_count * blksize;
3214 return 0;
3215 }
3216 if (dst && !skip_block) {
3072 dst += off;3217 dst += off;
3073 memset(dst, 0, blksize);3218 memset(dst, 0, blksize);
3219 } else {
3220 skip_block--;
3074 }3221 }
3222 blk_count++;
3075 }3223 }
3076 }3224 }
3225 return 0;
3077}3226}
3078 3227
3079/*3228/*
drivers/s390/block/dasd_int.h+13−2
@@ -187,6 +187,7 @@ struct dasd_ccw_req { · 186 unmodified lines
187 187
188 void (*callback)(struct dasd_ccw_req *, void *data);188 void (*callback)(struct dasd_ccw_req *, void *data);
189 void *callback_data;189 void *callback_data;
190 unsigned int proc_bytes; /* bytes for partial completion */
190};191};
191 192
192/*193/*
@@ -387,8 +388,9 @@ struct dasd_discipline { · 194 unmodified lines
387 int (*ext_pool_warn_thrshld)(struct dasd_device *);388 int (*ext_pool_warn_thrshld)(struct dasd_device *);
388 int (*ext_pool_oos)(struct dasd_device *);389 int (*ext_pool_oos)(struct dasd_device *);
389 int (*ext_pool_exhaust)(struct dasd_device *, struct dasd_ccw_req *);390 int (*ext_pool_exhaust)(struct dasd_device *, struct dasd_ccw_req *);
390 struct dasd_ccw_req *(*ese_format)(struct dasd_device *, struct dasd_ccw_req *);391 struct dasd_ccw_req *(*ese_format)(struct dasd_device *,
391 void (*ese_read)(struct dasd_ccw_req *);392 struct dasd_ccw_req *, struct irb *);
393 int (*ese_read)(struct dasd_ccw_req *, struct irb *);
392};394};
393 395
394extern struct dasd_discipline *dasd_diag_discipline_pointer;396extern struct dasd_discipline *dasd_diag_discipline_pointer;
@@ -474,6 +476,11 @@ struct dasd_profile { · 79 unmodified lines
474 spinlock_t lock;476 spinlock_t lock;
475};477};
476 478
479struct dasd_format_entry {
480 struct list_head list;
481 sector_t track;
482};
483
477struct dasd_device {484struct dasd_device {
478 /* Block device stuff. */485 /* Block device stuff. */
479 struct dasd_block *block;486 struct dasd_block *block;
@@ -539,6 +546,7 @@ struct dasd_device { · 59 unmodified lines
539 struct dentry *debugfs_dentry;546 struct dentry *debugfs_dentry;
540 struct dentry *hosts_dentry;547 struct dentry *hosts_dentry;
541 struct dasd_profile profile;548 struct dasd_profile profile;
549 struct dasd_format_entry format_entry;
542};550};
543 551
544struct dasd_block {552struct dasd_block {
@@ -564,6 +572,9 @@ struct dasd_block { · 19 unmodified lines
564 572
565 struct dentry *debugfs_dentry;573 struct dentry *debugfs_dentry;
566 struct dasd_profile profile;574 struct dasd_profile profile;
575
576 struct list_head format_list;
577 spinlock_t format_lock;
567};578};
568 579
569struct dasd_attention_data {580struct dasd_attention_data {
drivers/s390/net/qeth_core.h+2−2
@@ -369,7 +369,7 @@ enum qeth_qdio_info_states { · 368 unmodified lines
369struct qeth_buffer_pool_entry {369struct qeth_buffer_pool_entry {
370 struct list_head list;370 struct list_head list;
371 struct list_head init_list;371 struct list_head init_list;
372 void *elements[QDIO_MAX_ELEMENTS_PER_BUFFER];372 struct page *elements[QDIO_MAX_ELEMENTS_PER_BUFFER];
373};373};
374 374
375struct qeth_qdio_buffer_pool {375struct qeth_qdio_buffer_pool {
@@ -983,7 +983,7 @@ extern const struct attribute_group qeth_device_blkt_group; · 607 unmodified lines
983extern const struct device_type qeth_generic_devtype;983extern const struct device_type qeth_generic_devtype;
984 984
985const char *qeth_get_cardname_short(struct qeth_card *);985const char *qeth_get_cardname_short(struct qeth_card *);
986int qeth_realloc_buffer_pool(struct qeth_card *, int);986int qeth_resize_buffer_pool(struct qeth_card *card, unsigned int count);
987int qeth_core_load_discipline(struct qeth_card *, enum qeth_discipline_id);987int qeth_core_load_discipline(struct qeth_card *, enum qeth_discipline_id);
988void qeth_core_free_discipline(struct qeth_card *);988void qeth_core_free_discipline(struct qeth_card *);
989 989
drivers/s390/net/qeth_core_main.c+118−58
@@ -65,7 +65,6 @@ static struct lock_class_key qdio_out_skb_queue_key; · 64 unmodified lines
65static void qeth_issue_next_read_cb(struct qeth_card *card,65static void qeth_issue_next_read_cb(struct qeth_card *card,
66 struct qeth_cmd_buffer *iob,66 struct qeth_cmd_buffer *iob,
67 unsigned int data_length);67 unsigned int data_length);
68static void qeth_free_buffer_pool(struct qeth_card *);
69static int qeth_qdio_establish(struct qeth_card *);68static int qeth_qdio_establish(struct qeth_card *);
70static void qeth_free_qdio_queues(struct qeth_card *card);69static void qeth_free_qdio_queues(struct qeth_card *card);
71static void qeth_notify_skbs(struct qeth_qdio_out_q *queue,70static void qeth_notify_skbs(struct qeth_qdio_out_q *queue,
@@ -212,49 +211,121 @@ void qeth_clear_working_pool_list(struct qeth_card *card) · 140 unmodified lines
212}211}
213EXPORT_SYMBOL_GPL(qeth_clear_working_pool_list);212EXPORT_SYMBOL_GPL(qeth_clear_working_pool_list);
214 213
214static void qeth_free_pool_entry(struct qeth_buffer_pool_entry *entry)
215{
216 unsigned int i;
217
218 for (i = 0; i < ARRAY_SIZE(entry->elements); i++) {
219 if (entry->elements[i])
220 __free_page(entry->elements[i]);
221 }
222
223 kfree(entry);
224}
225
226static void qeth_free_buffer_pool(struct qeth_card *card)
227{
228 struct qeth_buffer_pool_entry *entry, *tmp;
229
230 list_for_each_entry_safe(entry, tmp, &card->qdio.init_pool.entry_list,
231 init_list) {
232 list_del(&entry->init_list);
233 qeth_free_pool_entry(entry);
234 }
235}
236
237static struct qeth_buffer_pool_entry *qeth_alloc_pool_entry(unsigned int pages)
238{
239 struct qeth_buffer_pool_entry *entry;
240 unsigned int i;
241
242 entry = kzalloc(sizeof(*entry), GFP_KERNEL);
243 if (!entry)
244 return NULL;
245
246 for (i = 0; i < pages; i++) {
247 entry->elements[i] = alloc_page(GFP_KERNEL);
248
249 if (!entry->elements[i]) {
250 qeth_free_pool_entry(entry);
251 return NULL;
252 }
253 }
254
255 return entry;
256}
257
215static int qeth_alloc_buffer_pool(struct qeth_card *card)258static int qeth_alloc_buffer_pool(struct qeth_card *card)
216{259{
217 struct qeth_buffer_pool_entry *pool_entry;260 unsigned int buf_elements = QETH_MAX_BUFFER_ELEMENTS(card);
218 void *ptr;261 unsigned int i;
219 int i, j;
220 262
221 QETH_CARD_TEXT(card, 5, "alocpool");263 QETH_CARD_TEXT(card, 5, "alocpool");
222 for (i = 0; i < card->qdio.init_pool.buf_count; ++i) {264 for (i = 0; i < card->qdio.init_pool.buf_count; ++i) {
223 pool_entry = kzalloc(sizeof(*pool_entry), GFP_KERNEL);265 struct qeth_buffer_pool_entry *entry;
224 if (!pool_entry) {266
267 entry = qeth_alloc_pool_entry(buf_elements);
268 if (!entry) {
225 qeth_free_buffer_pool(card);269 qeth_free_buffer_pool(card);
226 return -ENOMEM;270 return -ENOMEM;
227 }271 }
228 for (j = 0; j < QETH_MAX_BUFFER_ELEMENTS(card); ++j) {272
229 ptr = (void *) __get_free_page(GFP_KERNEL);273 list_add(&entry->init_list, &card->qdio.init_pool.entry_list);
230 if (!ptr) {
231 while (j > 0)
232 free_page((unsigned long)
233 pool_entry->elements[--j]);
234 kfree(pool_entry);
235 qeth_free_buffer_pool(card);
236 return -ENOMEM;
237 }
238 pool_entry->elements[j] = ptr;
239 }
240 list_add(&pool_entry->init_list,
241 &card->qdio.init_pool.entry_list);
242 }274 }
243 return 0;275 return 0;
244}276}
245 277
246int qeth_realloc_buffer_pool(struct qeth_card *card, int bufcnt)278int qeth_resize_buffer_pool(struct qeth_card *card, unsigned int count)
247{279{
280 unsigned int buf_elements = QETH_MAX_BUFFER_ELEMENTS(card);
281 struct qeth_qdio_buffer_pool *pool = &card->qdio.init_pool;
282 struct qeth_buffer_pool_entry *entry, *tmp;
283 int delta = count - pool->buf_count;
284 LIST_HEAD(entries);
285
248 QETH_CARD_TEXT(card, 2, "realcbp");286 QETH_CARD_TEXT(card, 2, "realcbp");
249 287
250 /* TODO: steel/add buffers from/to a running card's buffer pool (?) */288 /* Defer until queue is allocated: */
251 qeth_clear_working_pool_list(card);289 if (!card->qdio.in_q)
252 qeth_free_buffer_pool(card);290 goto out;
253 card->qdio.in_buf_pool.buf_count = bufcnt;291
254 card->qdio.init_pool.buf_count = bufcnt;292 /* Remove entries from the pool: */
255 return qeth_alloc_buffer_pool(card);293 while (delta < 0) {
294 entry = list_first_entry(&pool->entry_list,
295 struct qeth_buffer_pool_entry,
296 init_list);
297 list_del(&entry->init_list);
298 qeth_free_pool_entry(entry);
299
300 delta++;
301 }
302
303 /* Allocate additional entries: */
304 while (delta > 0) {
305 entry = qeth_alloc_pool_entry(buf_elements);
306 if (!entry) {
307 list_for_each_entry_safe(entry, tmp, &entries,
308 init_list) {
309 list_del(&entry->init_list);
310 qeth_free_pool_entry(entry);
311 }
312
313 return -ENOMEM;
314 }
315
316 list_add(&entry->init_list, &entries);
317
318 delta--;
319 }
320
321 list_splice(&entries, &pool->entry_list);
322
323out:
324 card->qdio.in_buf_pool.buf_count = count;
325 pool->buf_count = count;
326 return 0;
256}327}
257EXPORT_SYMBOL_GPL(qeth_realloc_buffer_pool);328EXPORT_SYMBOL_GPL(qeth_resize_buffer_pool);
258 329
259static void qeth_free_qdio_queue(struct qeth_qdio_q *q)330static void qeth_free_qdio_queue(struct qeth_qdio_q *q)
260{331{
@@ -1170,19 +1241,6 @@ void qeth_drain_output_queues(struct qeth_card *card) · 909 unmodified lines
1170}1241}
1171EXPORT_SYMBOL_GPL(qeth_drain_output_queues);1242EXPORT_SYMBOL_GPL(qeth_drain_output_queues);
1172 1243
1173static void qeth_free_buffer_pool(struct qeth_card *card)
1174{
1175 struct qeth_buffer_pool_entry *pool_entry, *tmp;
1176 int i = 0;
1177 list_for_each_entry_safe(pool_entry, tmp,
1178 &card->qdio.init_pool.entry_list, init_list){
1179 for (i = 0; i < QETH_MAX_BUFFER_ELEMENTS(card); ++i)
1180 free_page((unsigned long)pool_entry->elements[i]);
1181 list_del(&pool_entry->init_list);
1182 kfree(pool_entry);
1183 }
1184}
1185
1186static int qeth_osa_set_output_queues(struct qeth_card *card, bool single)1244static int qeth_osa_set_output_queues(struct qeth_card *card, bool single)
1187{1245{
1188 unsigned int count = single ? 1 : card->dev->num_tx_queues;1246 unsigned int count = single ? 1 : card->dev->num_tx_queues;
@@ -1204,7 +1262,6 @@ static int qeth_osa_set_output_queues(struct qeth_card *card, bool single) · 15 unmodified lines
1204 if (count == 1)1262 if (count == 1)
1205 dev_info(&card->gdev->dev, "Priority Queueing not supported\n");1263 dev_info(&card->gdev->dev, "Priority Queueing not supported\n");
1206 1264
1207 card->qdio.default_out_queue = single ? 0 : QETH_DEFAULT_QUEUE;
1208 card->qdio.no_out_queues = count;1265 card->qdio.no_out_queues = count;
1209 return 0;1266 return 0;
1210}1267}
@@ -2393,7 +2450,6 @@ static void qeth_free_qdio_queues(struct qeth_card *card) · 1182 unmodified lines
2393 return;2450 return;
2394 2451
2395 qeth_free_cq(card);2452 qeth_free_cq(card);
2396 cancel_delayed_work_sync(&card->buffer_reclaim_work);
2397 for (j = 0; j < QDIO_MAX_BUFFERS_PER_Q; ++j) {2453 for (j = 0; j < QDIO_MAX_BUFFERS_PER_Q; ++j) {
2398 if (card->qdio.in_q->bufs[j].rx_skb)2454 if (card->qdio.in_q->bufs[j].rx_skb)
2399 dev_kfree_skb_any(card->qdio.in_q->bufs[j].rx_skb);2455 dev_kfree_skb_any(card->qdio.in_q->bufs[j].rx_skb);
@@ -2575,7 +2631,6 @@ static struct qeth_buffer_pool_entry *qeth_find_free_buffer_pool_entry( · 175 unmodified lines
2575 struct list_head *plh;2631 struct list_head *plh;
2576 struct qeth_buffer_pool_entry *entry;2632 struct qeth_buffer_pool_entry *entry;
2577 int i, free;2633 int i, free;
2578 struct page *page;
2579 2634
2580 if (list_empty(&card->qdio.in_buf_pool.entry_list))2635 if (list_empty(&card->qdio.in_buf_pool.entry_list))
2581 return NULL;2636 return NULL;
@@ -2584,7 +2639,7 @@ static struct qeth_buffer_pool_entry *qeth_find_free_buffer_pool_entry( · 2 unmodified lines
2584 entry = list_entry(plh, struct qeth_buffer_pool_entry, list);2639 entry = list_entry(plh, struct qeth_buffer_pool_entry, list);
2585 free = 1;2640 free = 1;
2586 for (i = 0; i < QETH_MAX_BUFFER_ELEMENTS(card); ++i) {2641 for (i = 0; i < QETH_MAX_BUFFER_ELEMENTS(card); ++i) {
2587 if (page_count(virt_to_page(entry->elements[i])) > 1) {2642 if (page_count(entry->elements[i]) > 1) {
2588 free = 0;2643 free = 0;
2589 break;2644 break;
2590 }2645 }
@@ -2599,15 +2654,15 @@ static struct qeth_buffer_pool_entry *qeth_find_free_buffer_pool_entry( · 8 unmodified lines
2599 entry = list_entry(card->qdio.in_buf_pool.entry_list.next,2654 entry = list_entry(card->qdio.in_buf_pool.entry_list.next,
2600 struct qeth_buffer_pool_entry, list);2655 struct qeth_buffer_pool_entry, list);
2601 for (i = 0; i < QETH_MAX_BUFFER_ELEMENTS(card); ++i) {2656 for (i = 0; i < QETH_MAX_BUFFER_ELEMENTS(card); ++i) {
2602 if (page_count(virt_to_page(entry->elements[i])) > 1) {2657 if (page_count(entry->elements[i]) > 1) {
2603 page = alloc_page(GFP_ATOMIC);2658 struct page *page = alloc_page(GFP_ATOMIC);
2604 if (!page) {2659
2660 if (!page)
2605 return NULL;2661 return NULL;
2606 } else {2662
2607 free_page((unsigned long)entry->elements[i]);2663 __free_page(entry->elements[i]);
2608 entry->elements[i] = page_address(page);2664 entry->elements[i] = page;
2609 QETH_CARD_STAT_INC(card, rx_sg_alloc_page);2665 QETH_CARD_STAT_INC(card, rx_sg_alloc_page);
2610 }
2611 }2666 }
2612 }2667 }
2613 list_del_init(&entry->list);2668 list_del_init(&entry->list);
@@ -2625,12 +2680,12 @@ static int qeth_init_input_buffer(struct qeth_card *card, · 11 unmodified lines
2625 ETH_HLEN +2680 ETH_HLEN +
2626 sizeof(struct ipv6hdr));2681 sizeof(struct ipv6hdr));
2627 if (!buf->rx_skb)2682 if (!buf->rx_skb)
2628 return 1;2683 return -ENOMEM;
2629 }2684 }
2630 2685
2631 pool_entry = qeth_find_free_buffer_pool_entry(card);2686 pool_entry = qeth_find_free_buffer_pool_entry(card);
2632 if (!pool_entry)2687 if (!pool_entry)
2633 return 1;2688 return -ENOBUFS;
2634 2689
2635 /*2690 /*
2636 * since the buffer is accessed only from the input_tasklet2691 * since the buffer is accessed only from the input_tasklet
@@ -2643,7 +2698,7 @@ static int qeth_init_input_buffer(struct qeth_card *card, · 6 unmodified lines
2643 for (i = 0; i < QETH_MAX_BUFFER_ELEMENTS(card); ++i) {2698 for (i = 0; i < QETH_MAX_BUFFER_ELEMENTS(card); ++i) {
2644 buf->buffer->element[i].length = PAGE_SIZE;2699 buf->buffer->element[i].length = PAGE_SIZE;
2645 buf->buffer->element[i].addr =2700 buf->buffer->element[i].addr =
2646 virt_to_phys(pool_entry->elements[i]);2701 page_to_phys(pool_entry->elements[i]);
2647 if (i == QETH_MAX_BUFFER_ELEMENTS(card) - 1)2702 if (i == QETH_MAX_BUFFER_ELEMENTS(card) - 1)
2648 buf->buffer->element[i].eflags = SBAL_EFLAGS_LAST_ENTRY;2703 buf->buffer->element[i].eflags = SBAL_EFLAGS_LAST_ENTRY;
2649 else2704 else
@@ -2675,10 +2730,15 @@ static int qeth_init_qdio_queues(struct qeth_card *card) · 25 unmodified lines
2675 /* inbound queue */2730 /* inbound queue */
2676 qdio_reset_buffers(card->qdio.in_q->qdio_bufs, QDIO_MAX_BUFFERS_PER_Q);2731 qdio_reset_buffers(card->qdio.in_q->qdio_bufs, QDIO_MAX_BUFFERS_PER_Q);
2677 memset(&card->rx, 0, sizeof(struct qeth_rx));2732 memset(&card->rx, 0, sizeof(struct qeth_rx));
2733
2678 qeth_initialize_working_pool_list(card);2734 qeth_initialize_working_pool_list(card);
2679 /*give only as many buffers to hardware as we have buffer pool entries*/2735 /*give only as many buffers to hardware as we have buffer pool entries*/
2680 for (i = 0; i < card->qdio.in_buf_pool.buf_count - 1; ++i)2736 for (i = 0; i < card->qdio.in_buf_pool.buf_count - 1; i++) {
2681 qeth_init_input_buffer(card, &card->qdio.in_q->bufs[i]);2737 rc = qeth_init_input_buffer(card, &card->qdio.in_q->bufs[i]);
2738 if (rc)
2739 return rc;
2740 }
2741
2682 card->qdio.in_q->next_buf_to_init =2742 card->qdio.in_q->next_buf_to_init =
2683 card->qdio.in_buf_pool.buf_count - 1;2743 card->qdio.in_buf_pool.buf_count - 1;
2684 rc = do_QDIO(CARD_DDEV(card), QDIO_FLAG_SYNC_INPUT, 0, 0,2744 rc = do_QDIO(CARD_DDEV(card), QDIO_FLAG_SYNC_INPUT, 0, 0,
drivers/s390/net/qeth_core_sys.c+4−5
@@ -247,8 +247,8 @@ static ssize_t qeth_dev_bufcnt_store(struct device *dev, · 246 unmodified lines
247 struct device_attribute *attr, const char *buf, size_t count)247 struct device_attribute *attr, const char *buf, size_t count)
248{248{
249 struct qeth_card *card = dev_get_drvdata(dev);249 struct qeth_card *card = dev_get_drvdata(dev);
250 unsigned int cnt;
250 char *tmp;251 char *tmp;
251 int cnt, old_cnt;
252 int rc = 0;252 int rc = 0;
253 253
254 mutex_lock(&card->conf_mutex);254 mutex_lock(&card->conf_mutex);
@@ -257,13 +257,12 @@ static ssize_t qeth_dev_bufcnt_store(struct device *dev, · 2 unmodified lines
257 goto out;257 goto out;
258 }258 }
259 259
260 old_cnt = card->qdio.in_buf_pool.buf_count;
261 cnt = simple_strtoul(buf, &tmp, 10);260 cnt = simple_strtoul(buf, &tmp, 10);
262 cnt = (cnt < QETH_IN_BUF_COUNT_MIN) ? QETH_IN_BUF_COUNT_MIN :261 cnt = (cnt < QETH_IN_BUF_COUNT_MIN) ? QETH_IN_BUF_COUNT_MIN :
263 ((cnt > QETH_IN_BUF_COUNT_MAX) ? QETH_IN_BUF_COUNT_MAX : cnt);262 ((cnt > QETH_IN_BUF_COUNT_MAX) ? QETH_IN_BUF_COUNT_MAX : cnt);
264 if (old_cnt != cnt) {263
265 rc = qeth_realloc_buffer_pool(card, cnt);264 rc = qeth_resize_buffer_pool(card, cnt);
266 }265
267out:266out:
268 mutex_unlock(&card->conf_mutex);267 mutex_unlock(&card->conf_mutex);
269 return rc ? rc : count;268 return rc ? rc : count;
drivers/s390/net/qeth_l2_main.c+1−0
@@ -284,6 +284,7 @@ static void qeth_l2_stop_card(struct qeth_card *card) · 283 unmodified lines
284 if (card->state == CARD_STATE_SOFTSETUP) {284 if (card->state == CARD_STATE_SOFTSETUP) {
285 qeth_clear_ipacmd_list(card);285 qeth_clear_ipacmd_list(card);
286 qeth_drain_output_queues(card);286 qeth_drain_output_queues(card);
287 cancel_delayed_work_sync(&card->buffer_reclaim_work);
287 card->state = CARD_STATE_DOWN;288 card->state = CARD_STATE_DOWN;
288 }289 }
289 290
drivers/s390/net/qeth_l3_main.c+1−0
@@ -1178,6 +1178,7 @@ static void qeth_l3_stop_card(struct qeth_card *card) · 1177 unmodified lines
1178 qeth_l3_clear_ip_htable(card, 1);1178 qeth_l3_clear_ip_htable(card, 1);
1179 qeth_clear_ipacmd_list(card);1179 qeth_clear_ipacmd_list(card);
1180 qeth_drain_output_queues(card);1180 qeth_drain_output_queues(card);
1181 cancel_delayed_work_sync(&card->buffer_reclaim_work);
1181 card->state = CARD_STATE_DOWN;1182 card->state = CARD_STATE_DOWN;
1182 }1183 }
1183 1184
drivers/s390/net/qeth_l3_sys.c+4−5
@@ -206,12 +206,11 @@ static ssize_t qeth_l3_dev_sniffer_store(struct device *dev, · 205 unmodified lines
206 qdio_get_ssqd_desc(CARD_DDEV(card), &card->ssqd);206 qdio_get_ssqd_desc(CARD_DDEV(card), &card->ssqd);
207 if (card->ssqd.qdioac2 & CHSC_AC2_SNIFFER_AVAILABLE) {207 if (card->ssqd.qdioac2 & CHSC_AC2_SNIFFER_AVAILABLE) {
208 card->options.sniffer = i;208 card->options.sniffer = i;
209 if (card->qdio.init_pool.buf_count !=209 qeth_resize_buffer_pool(card, QETH_IN_BUF_COUNT_MAX);
210 QETH_IN_BUF_COUNT_MAX)210 } else {
211 qeth_realloc_buffer_pool(card,
212 QETH_IN_BUF_COUNT_MAX);
213 } else
214 rc = -EPERM;211 rc = -EPERM;
212 }
213
215 break;214 break;
216 default:215 default:
217 rc = -EINVAL;216 rc = -EINVAL;
drivers/scsi/ipr.c+2−1
@@ -9950,6 +9950,7 @@ static void ipr_init_ioa_cfg(struct ipr_ioa_cfg *ioa_cfg, · 9949 unmodified lines
9950 ioa_cfg->max_devs_supported = ipr_max_devs;9950 ioa_cfg->max_devs_supported = ipr_max_devs;
9951 9951
9952 if (ioa_cfg->sis64) {9952 if (ioa_cfg->sis64) {
9953 host->max_channel = IPR_MAX_SIS64_BUSES;
9953 host->max_id = IPR_MAX_SIS64_TARGETS_PER_BUS;9954 host->max_id = IPR_MAX_SIS64_TARGETS_PER_BUS;
9954 host->max_lun = IPR_MAX_SIS64_LUNS_PER_TARGET;9955 host->max_lun = IPR_MAX_SIS64_LUNS_PER_TARGET;
9955 if (ipr_max_devs > IPR_MAX_SIS64_DEVS)9956 if (ipr_max_devs > IPR_MAX_SIS64_DEVS)
@@ -9958,6 +9959,7 @@ static void ipr_init_ioa_cfg(struct ipr_ioa_cfg *ioa_cfg, · 2 unmodified lines
9958 + ((sizeof(struct ipr_config_table_entry64)9959 + ((sizeof(struct ipr_config_table_entry64)
9959 * ioa_cfg->max_devs_supported)));9960 * ioa_cfg->max_devs_supported)));
9960 } else {9961 } else {
9962 host->max_channel = IPR_VSET_BUS;
9961 host->max_id = IPR_MAX_NUM_TARGETS_PER_BUS;9963 host->max_id = IPR_MAX_NUM_TARGETS_PER_BUS;
9962 host->max_lun = IPR_MAX_NUM_LUNS_PER_TARGET;9964 host->max_lun = IPR_MAX_NUM_LUNS_PER_TARGET;
9963 if (ipr_max_devs > IPR_MAX_PHYSICAL_DEVS)9965 if (ipr_max_devs > IPR_MAX_PHYSICAL_DEVS)
@@ -9967,7 +9969,6 @@ static void ipr_init_ioa_cfg(struct ipr_ioa_cfg *ioa_cfg, · 3 unmodified lines
9967 * ioa_cfg->max_devs_supported)));9969 * ioa_cfg->max_devs_supported)));
9968 }9970 }
9969 9971
9970 host->max_channel = IPR_VSET_BUS;
9971 host->unique_id = host->host_no;9972 host->unique_id = host->host_no;
9972 host->max_cmd_len = IPR_MAX_CDB_LEN;9973 host->max_cmd_len = IPR_MAX_CDB_LEN;
9973 host->can_queue = ioa_cfg->max_cmds;9974 host->can_queue = ioa_cfg->max_cmds;
drivers/scsi/ipr.h+1−0
@@ -1300,6 +1300,7 @@ struct ipr_resource_entry { · 1299 unmodified lines
1300#define IPR_ARRAY_VIRTUAL_BUS 0x11300#define IPR_ARRAY_VIRTUAL_BUS 0x1
1301#define IPR_VSET_VIRTUAL_BUS 0x21301#define IPR_VSET_VIRTUAL_BUS 0x2
1302#define IPR_IOAFP_VIRTUAL_BUS 0x31302#define IPR_IOAFP_VIRTUAL_BUS 0x3
1303#define IPR_MAX_SIS64_BUSES 0x4
1303 1304
1304#define IPR_GET_RES_PHYS_LOC(res) \1305#define IPR_GET_RES_PHYS_LOC(res) \
1305 (((res)->bus << 24) | ((res)->target << 8) | (res)->lun)1306 (((res)->bus << 24) | ((res)->target << 8) | (res)->lun)
drivers/scsi/ufs/ufshcd.c+14−7
@@ -3884,18 +3884,25 @@ EXPORT_SYMBOL_GPL(ufshcd_uic_hibern8_exit); · 3883 unmodified lines
3884void ufshcd_auto_hibern8_update(struct ufs_hba *hba, u32 ahit)3884void ufshcd_auto_hibern8_update(struct ufs_hba *hba, u32 ahit)
3885{3885{
3886 unsigned long flags;3886 unsigned long flags;
3887 bool update = false;
3887 3888
3888 if (!(hba->capabilities & MASK_AUTO_HIBERN8_SUPPORT))3889 if (!ufshcd_is_auto_hibern8_supported(hba))
3889 return;3890 return;
3890 3891
3891 spin_lock_irqsave(hba->host->host_lock, flags);3892 spin_lock_irqsave(hba->host->host_lock, flags);
3892 if (hba->ahit == ahit)3893 if (hba->ahit != ahit) {
3893 goto out_unlock;3894 hba->ahit = ahit;
3894 hba->ahit = ahit;3895 update = true;
3895 if (!pm_runtime_suspended(hba->dev))3896 }
3896 ufshcd_writel(hba, hba->ahit, REG_AUTO_HIBERNATE_IDLE_TIMER);
3897out_unlock:
3898 spin_unlock_irqrestore(hba->host->host_lock, flags);3897 spin_unlock_irqrestore(hba->host->host_lock, flags);
3898
3899 if (update && !pm_runtime_suspended(hba->dev)) {
3900 pm_runtime_get_sync(hba->dev);
3901 ufshcd_hold(hba, false);
3902 ufshcd_auto_hibern8_enable(hba);
3903 ufshcd_release(hba);
3904 pm_runtime_put(hba->dev);
3905 }
3899}3906}
3900EXPORT_SYMBOL_GPL(ufshcd_auto_hibern8_update);3907EXPORT_SYMBOL_GPL(ufshcd_auto_hibern8_update);
3901 3908
drivers/slimbus/qcom-ngd-ctrl.c+3−0
@@ -1320,6 +1320,9 @@ static const struct of_device_id qcom_slim_ngd_dt_match[] = { · 1319 unmodified lines
1320 {1320 {
1321 .compatible = "qcom,slim-ngd-v1.5.0",1321 .compatible = "qcom,slim-ngd-v1.5.0",
1322 .data = &ngd_v1_5_offset_info,1322 .data = &ngd_v1_5_offset_info,
1323 },{
1324 .compatible = "qcom,slim-ngd-v2.1.0",
1325 .data = &ngd_v1_5_offset_info,
1323 },1326 },
1324 {}1327 {}
1325};1328};
drivers/staging/greybus/tools/loopback_test.c+11−10
@@ -19,6 +19,7 @@ · 18 unmodified lines
19#include <signal.h>19#include <signal.h>
20 20
21#define MAX_NUM_DEVICES 1021#define MAX_NUM_DEVICES 10
22#define MAX_SYSFS_PREFIX 0x80
22#define MAX_SYSFS_PATH 0x20023#define MAX_SYSFS_PATH 0x200
23#define CSV_MAX_LINE 0x100024#define CSV_MAX_LINE 0x1000
24#define SYSFS_MAX_INT 0x2025#define SYSFS_MAX_INT 0x20
@@ -67,7 +68,7 @@ struct loopback_results { · 42 unmodified lines
67};68};
68 69
69struct loopback_device {70struct loopback_device {
70 char name[MAX_SYSFS_PATH];71 char name[MAX_STR_LEN];
71 char sysfs_entry[MAX_SYSFS_PATH];72 char sysfs_entry[MAX_SYSFS_PATH];
72 char debugfs_entry[MAX_SYSFS_PATH];73 char debugfs_entry[MAX_SYSFS_PATH];
73 struct loopback_results results;74 struct loopback_results results;
@@ -93,8 +94,8 @@ struct loopback_test { · 19 unmodified lines
93 int stop_all;94 int stop_all;
94 int poll_count;95 int poll_count;
95 char test_name[MAX_STR_LEN];96 char test_name[MAX_STR_LEN];
96 char sysfs_prefix[MAX_SYSFS_PATH];97 char sysfs_prefix[MAX_SYSFS_PREFIX];
97 char debugfs_prefix[MAX_SYSFS_PATH];98 char debugfs_prefix[MAX_SYSFS_PREFIX];
98 struct timespec poll_timeout;99 struct timespec poll_timeout;
99 struct loopback_device devices[MAX_NUM_DEVICES];100 struct loopback_device devices[MAX_NUM_DEVICES];
100 struct loopback_results aggregate_results;101 struct loopback_results aggregate_results;
@@ -637,7 +638,7 @@ baddir: · 536 unmodified lines
637static int open_poll_files(struct loopback_test *t)638static int open_poll_files(struct loopback_test *t)
638{639{
639 struct loopback_device *dev;640 struct loopback_device *dev;
640 char buf[MAX_STR_LEN];641 char buf[MAX_SYSFS_PATH + MAX_STR_LEN];
641 char dummy;642 char dummy;
642 int fds_idx = 0;643 int fds_idx = 0;
643 int i;644 int i;
@@ -655,7 +656,7 @@ static int open_poll_files(struct loopback_test *t) · 11 unmodified lines
655 goto err;656 goto err;
656 }657 }
657 read(t->fds[fds_idx].fd, &dummy, 1);658 read(t->fds[fds_idx].fd, &dummy, 1);
658 t->fds[fds_idx].events = EPOLLERR|EPOLLPRI;659 t->fds[fds_idx].events = POLLERR | POLLPRI;
659 t->fds[fds_idx].revents = 0;660 t->fds[fds_idx].revents = 0;
660 fds_idx++;661 fds_idx++;
661 }662 }
@@ -748,7 +749,7 @@ static int wait_for_complete(struct loopback_test *t) · 86 unmodified lines
748 }749 }
749 750
750 for (i = 0; i < t->poll_count; i++) {751 for (i = 0; i < t->poll_count; i++) {
751 if (t->fds[i].revents & EPOLLPRI) {752 if (t->fds[i].revents & POLLPRI) {
752 /* Dummy read to clear the event */753 /* Dummy read to clear the event */
753 read(t->fds[i].fd, &dummy, 1);754 read(t->fds[i].fd, &dummy, 1);
754 number_of_events++;755 number_of_events++;
@@ -907,10 +908,10 @@ int main(int argc, char *argv[]) · 152 unmodified lines
907 t.iteration_max = atoi(optarg);908 t.iteration_max = atoi(optarg);
908 break;909 break;
909 case 'S':910 case 'S':
910 snprintf(t.sysfs_prefix, MAX_SYSFS_PATH, "%s", optarg);911 snprintf(t.sysfs_prefix, MAX_SYSFS_PREFIX, "%s", optarg);
911 break;912 break;
912 case 'D':913 case 'D':
913 snprintf(t.debugfs_prefix, MAX_SYSFS_PATH, "%s", optarg);914 snprintf(t.debugfs_prefix, MAX_SYSFS_PREFIX, "%s", optarg);
914 break;915 break;
915 case 'm':916 case 'm':
916 t.mask = atol(optarg);917 t.mask = atol(optarg);
@@ -961,10 +962,10 @@ int main(int argc, char *argv[]) · 44 unmodified lines
961 }962 }
962 963
963 if (!strcmp(t.sysfs_prefix, ""))964 if (!strcmp(t.sysfs_prefix, ""))
964 snprintf(t.sysfs_prefix, MAX_SYSFS_PATH, "%s", sysfs_prefix);965 snprintf(t.sysfs_prefix, MAX_SYSFS_PREFIX, "%s", sysfs_prefix);
965 966
966 if (!strcmp(t.debugfs_prefix, ""))967 if (!strcmp(t.debugfs_prefix, ""))
967 snprintf(t.debugfs_prefix, MAX_SYSFS_PATH, "%s", debugfs_prefix);968 snprintf(t.debugfs_prefix, MAX_SYSFS_PREFIX, "%s", debugfs_prefix);
968 969
969 ret = find_loopback_devices(&t);970 ret = find_loopback_devices(&t);
970 if (ret)971 if (ret)
drivers/staging/rtl8188eu/os_dep/usb_intf.c+1−0
@@ -38,6 +38,7 @@ static const struct usb_device_id rtw_usb_id_tbl[] = { · 37 unmodified lines
38 {USB_DEVICE(0x2001, 0x331B)}, /* D-Link DWA-121 rev B1 */38 {USB_DEVICE(0x2001, 0x331B)}, /* D-Link DWA-121 rev B1 */
39 {USB_DEVICE(0x2357, 0x010c)}, /* TP-Link TL-WN722N v2 */39 {USB_DEVICE(0x2357, 0x010c)}, /* TP-Link TL-WN722N v2 */
40 {USB_DEVICE(0x2357, 0x0111)}, /* TP-Link TL-WN727N v5.21 */40 {USB_DEVICE(0x2357, 0x0111)}, /* TP-Link TL-WN727N v5.21 */
41 {USB_DEVICE(0x2C4E, 0x0102)}, /* MERCUSYS MW150US v2 */
41 {USB_DEVICE(0x0df6, 0x0076)}, /* Sitecom N150 v2 */42 {USB_DEVICE(0x0df6, 0x0076)}, /* Sitecom N150 v2 */
42 {USB_DEVICE(USB_VENDER_ID_REALTEK, 0xffef)}, /* Rosewill RNX-N150NUB */43 {USB_DEVICE(USB_VENDER_ID_REALTEK, 0xffef)}, /* Rosewill RNX-N150NUB */
43 {} /* Terminating entry */44 {} /* Terminating entry */
drivers/staging/speakup/main.c+1−1
@@ -561,7 +561,7 @@ static u_long get_word(struct vc_data *vc) · 560 unmodified lines
561 return 0;561 return 0;
562 } else if (tmpx < vc->vc_cols - 2 &&562 } else if (tmpx < vc->vc_cols - 2 &&
563 (ch == SPACE || ch == 0 || (ch < 0x100 && IS_WDLM(ch))) &&563 (ch == SPACE || ch == 0 || (ch < 0x100 && IS_WDLM(ch))) &&
564 get_char(vc, (u_short *)&tmp_pos + 1, &temp) > SPACE) {564 get_char(vc, (u_short *)tmp_pos + 1, &temp) > SPACE) {
565 tmp_pos += 2;565 tmp_pos += 2;
566 tmpx++;566 tmpx++;
567 } else {567 } else {
drivers/staging/wfx/hif_tx.c+8−7
@@ -140,6 +140,7 @@ int hif_shutdown(struct wfx_dev *wdev) · 139 unmodified lines
140 else140 else
141 control_reg_write(wdev, 0);141 control_reg_write(wdev, 0);
142 mutex_unlock(&wdev->hif_cmd.lock);142 mutex_unlock(&wdev->hif_cmd.lock);
143 mutex_unlock(&wdev->hif_cmd.key_renew_lock);
143 kfree(hif);144 kfree(hif);
144 return ret;145 return ret;
145}146}
@@ -289,7 +290,7 @@ int hif_stop_scan(struct wfx_vif *wvif) · 143 unmodified lines
289}290}
290 291
291int hif_join(struct wfx_vif *wvif, const struct ieee80211_bss_conf *conf,292int hif_join(struct wfx_vif *wvif, const struct ieee80211_bss_conf *conf,
292 const struct ieee80211_channel *channel, const u8 *ssidie)293 struct ieee80211_channel *channel, const u8 *ssid, int ssidlen)
293{294{
294 int ret;295 int ret;
295 struct hif_msg *hif;296 struct hif_msg *hif;
@@ -307,9 +308,9 @@ int hif_join(struct wfx_vif *wvif, const struct ieee80211_bss_conf *conf, · 11 unmodified lines
307 body->basic_rate_set =308 body->basic_rate_set =
308 cpu_to_le32(wfx_rate_mask_to_hw(wvif->wdev, conf->basic_rates));309 cpu_to_le32(wfx_rate_mask_to_hw(wvif->wdev, conf->basic_rates));
309 memcpy(body->bssid, conf->bssid, sizeof(body->bssid));310 memcpy(body->bssid, conf->bssid, sizeof(body->bssid));
310 if (!conf->ibss_joined && ssidie) {311 if (!conf->ibss_joined && ssid) {
311 body->ssid_length = cpu_to_le32(ssidie[1]);312 body->ssid_length = cpu_to_le32(ssidlen);
312 memcpy(body->ssid, &ssidie[2], ssidie[1]);313 memcpy(body->ssid, ssid, ssidlen);
313 }314 }
314 wfx_fill_header(hif, wvif->id, HIF_REQ_ID_JOIN, sizeof(*body));315 wfx_fill_header(hif, wvif->id, HIF_REQ_ID_JOIN, sizeof(*body));
315 ret = wfx_cmd_send(wvif->wdev, hif, NULL, 0, false);316 ret = wfx_cmd_send(wvif->wdev, hif, NULL, 0, false);
@@ -427,9 +428,9 @@ int hif_start(struct wfx_vif *wvif, const struct ieee80211_bss_conf *conf, · 111 unmodified lines
427 struct hif_msg *hif;428 struct hif_msg *hif;
428 struct hif_req_start *body = wfx_alloc_hif(sizeof(*body), &hif);429 struct hif_req_start *body = wfx_alloc_hif(sizeof(*body), &hif);
429 430
430 body->dtim_period = conf->dtim_period,431 body->dtim_period = conf->dtim_period;
431 body->short_preamble = conf->use_short_preamble,432 body->short_preamble = conf->use_short_preamble;
432 body->channel_number = cpu_to_le16(channel->hw_value),433 body->channel_number = cpu_to_le16(channel->hw_value);
433 body->beacon_interval = cpu_to_le32(conf->beacon_int);434 body->beacon_interval = cpu_to_le32(conf->beacon_int);
434 body->basic_rate_set =435 body->basic_rate_set =
435 cpu_to_le32(wfx_rate_mask_to_hw(wvif->wdev, conf->basic_rates));436 cpu_to_le32(wfx_rate_mask_to_hw(wvif->wdev, conf->basic_rates));
drivers/staging/wfx/hif_tx.h+1−1
@@ -46,7 +46,7 @@ int hif_scan(struct wfx_vif *wvif, struct cfg80211_scan_request *req80211, · 45 unmodified lines
46 int chan_start, int chan_num);46 int chan_start, int chan_num);
47int hif_stop_scan(struct wfx_vif *wvif);47int hif_stop_scan(struct wfx_vif *wvif);
48int hif_join(struct wfx_vif *wvif, const struct ieee80211_bss_conf *conf,48int hif_join(struct wfx_vif *wvif, const struct ieee80211_bss_conf *conf,
49 const struct ieee80211_channel *channel, const u8 *ssidie);49 struct ieee80211_channel *channel, const u8 *ssid, int ssidlen);
50int hif_set_pm(struct wfx_vif *wvif, bool ps, int dynamic_ps_timeout);50int hif_set_pm(struct wfx_vif *wvif, bool ps, int dynamic_ps_timeout);
51int hif_set_bss_params(struct wfx_vif *wvif,51int hif_set_bss_params(struct wfx_vif *wvif,
52 const struct hif_req_set_bss_params *arg);52 const struct hif_req_set_bss_params *arg);
drivers/staging/wfx/hif_tx_mib.h+10−5
@@ -191,10 +191,10 @@ static inline int hif_set_block_ack_policy(struct wfx_vif *wvif, · 190 unmodified lines
191}191}
192 192
193static inline int hif_set_association_mode(struct wfx_vif *wvif,193static inline int hif_set_association_mode(struct wfx_vif *wvif,
194 struct ieee80211_bss_conf *info,194 struct ieee80211_bss_conf *info)
195 struct ieee80211_sta_ht_cap *ht_cap)
196{195{
197 int basic_rates = wfx_rate_mask_to_hw(wvif->wdev, info->basic_rates);196 int basic_rates = wfx_rate_mask_to_hw(wvif->wdev, info->basic_rates);
197 struct ieee80211_sta *sta = NULL;
198 struct hif_mib_set_association_mode val = {198 struct hif_mib_set_association_mode val = {
199 .preambtype_use = 1,199 .preambtype_use = 1,
200 .mode = 1,200 .mode = 1,
@@ -204,12 +204,17 @@ static inline int hif_set_association_mode(struct wfx_vif *wvif, · 3 unmodified lines
204 .basic_rate_set = cpu_to_le32(basic_rates)204 .basic_rate_set = cpu_to_le32(basic_rates)
205 };205 };
206 206
207 rcu_read_lock(); // protect sta
208 if (info->bssid && !info->ibss_joined)
209 sta = ieee80211_find_sta(wvif->vif, info->bssid);
210
207 // FIXME: it is strange to not retrieve all information from bss_info211 // FIXME: it is strange to not retrieve all information from bss_info
208 if (ht_cap && ht_cap->ht_supported) {212 if (sta && sta->ht_cap.ht_supported) {
209 val.mpdu_start_spacing = ht_cap->ampdu_density;213 val.mpdu_start_spacing = sta->ht_cap.ampdu_density;
210 if (!(info->ht_operation_mode & IEEE80211_HT_OP_MODE_NON_GF_STA_PRSNT))214 if (!(info->ht_operation_mode & IEEE80211_HT_OP_MODE_NON_GF_STA_PRSNT))
211 val.greenfield = !!(ht_cap->cap & IEEE80211_HT_CAP_GRN_FLD);215 val.greenfield = !!(sta->ht_cap.cap & IEEE80211_HT_CAP_GRN_FLD);
212 }216 }
217 rcu_read_unlock();
213 218
214 return hif_write_mib(wvif->wdev, wvif->id,219 return hif_write_mib(wvif->wdev, wvif->id,
215 HIF_MIB_ID_SET_ASSOCIATION_MODE, &val, sizeof(val));220 HIF_MIB_ID_SET_ASSOCIATION_MODE, &val, sizeof(val));
drivers/staging/wfx/sta.c+15−10
@@ -491,9 +491,11 @@ static void wfx_set_mfp(struct wfx_vif *wvif, · 490 unmodified lines
491static void wfx_do_join(struct wfx_vif *wvif)491static void wfx_do_join(struct wfx_vif *wvif)
492{492{
493 int ret;493 int ret;
494 const u8 *ssidie;
495 struct ieee80211_bss_conf *conf = &wvif->vif->bss_conf;494 struct ieee80211_bss_conf *conf = &wvif->vif->bss_conf;
496 struct cfg80211_bss *bss = NULL;495 struct cfg80211_bss *bss = NULL;
496 u8 ssid[IEEE80211_MAX_SSID_LEN];
497 const u8 *ssidie = NULL;
498 int ssidlen = 0;
497 499
498 wfx_tx_lock_flush(wvif->wdev);500 wfx_tx_lock_flush(wvif->wdev);
499 501
@@ -514,11 +516,14 @@ static void wfx_do_join(struct wfx_vif *wvif) · 14 unmodified lines
514 if (!wvif->beacon_int)516 if (!wvif->beacon_int)
515 wvif->beacon_int = 1;517 wvif->beacon_int = 1;
516 518
517 rcu_read_lock();519 rcu_read_lock(); // protect ssidie
518 if (!conf->ibss_joined)520 if (!conf->ibss_joined)
519 ssidie = ieee80211_bss_get_ie(bss, WLAN_EID_SSID);521 ssidie = ieee80211_bss_get_ie(bss, WLAN_EID_SSID);
520 else522 if (ssidie) {
521 ssidie = NULL;523 ssidlen = ssidie[1];
524 memcpy(ssid, &ssidie[2], ssidie[1]);
525 }
526 rcu_read_unlock();
522 527
523 wfx_tx_flush(wvif->wdev);528 wfx_tx_flush(wvif->wdev);
524 529
@@ -527,10 +532,8 @@ static void wfx_do_join(struct wfx_vif *wvif) · 2 unmodified lines
527 532
528 wfx_set_mfp(wvif, bss);533 wfx_set_mfp(wvif, bss);
529 534
530 /* Perform actual join */
531 wvif->wdev->tx_burst_idx = -1;535 wvif->wdev->tx_burst_idx = -1;
532 ret = hif_join(wvif, conf, wvif->channel, ssidie);536 ret = hif_join(wvif, conf, wvif->channel, ssid, ssidlen);
533 rcu_read_unlock();
534 if (ret) {537 if (ret) {
535 ieee80211_connection_loss(wvif->vif);538 ieee80211_connection_loss(wvif->vif);
536 wvif->join_complete_status = -1;539 wvif->join_complete_status = -1;
@@ -605,7 +608,9 @@ int wfx_sta_remove(struct ieee80211_hw *hw, struct ieee80211_vif *vif, · 68 unmodified lines
605 int i;608 int i;
606 609
607 for (i = 0; i < ARRAY_SIZE(sta_priv->buffered); i++)610 for (i = 0; i < ARRAY_SIZE(sta_priv->buffered); i++)
608 WARN(sta_priv->buffered[i], "release station while Tx is in progress");611 if (sta_priv->buffered[i])
612 dev_warn(wvif->wdev->dev, "release station while %d pending frame on queue %d",
613 sta_priv->buffered[i], i);
609 // FIXME: see note in wfx_sta_add()614 // FIXME: see note in wfx_sta_add()
610 if (vif->type == NL80211_IFTYPE_STATION)615 if (vif->type == NL80211_IFTYPE_STATION)
611 return 0;616 return 0;
@@ -689,6 +694,7 @@ static void wfx_join_finalize(struct wfx_vif *wvif, · 77 unmodified lines
689 wfx_rate_mask_to_hw(wvif->wdev, sta->supp_rates[wvif->channel->band]);694 wfx_rate_mask_to_hw(wvif->wdev, sta->supp_rates[wvif->channel->band]);
690 else695 else
691 wvif->bss_params.operational_rate_set = -1;696 wvif->bss_params.operational_rate_set = -1;
697 rcu_read_unlock();
692 if (sta &&698 if (sta &&
693 info->ht_operation_mode & IEEE80211_HT_OP_MODE_NON_GF_STA_PRSNT)699 info->ht_operation_mode & IEEE80211_HT_OP_MODE_NON_GF_STA_PRSNT)
694 hif_dual_cts_protection(wvif, true);700 hif_dual_cts_protection(wvif, true);
@@ -701,8 +707,7 @@ static void wfx_join_finalize(struct wfx_vif *wvif, · 6 unmodified lines
701 wvif->bss_params.beacon_lost_count = 20;707 wvif->bss_params.beacon_lost_count = 20;
702 wvif->bss_params.aid = info->aid;708 wvif->bss_params.aid = info->aid;
703 709
704 hif_set_association_mode(wvif, info, sta ? &sta->ht_cap : NULL);710 hif_set_association_mode(wvif, info);
705 rcu_read_unlock();
706 711
707 if (!info->ibss_joined) {712 if (!info->ibss_joined) {
708 hif_keep_alive_period(wvif, 30 /* sec */);713 hif_keep_alive_period(wvif, 30 /* sec */);
drivers/thunderbolt/switch.c+1−1
@@ -954,7 +954,7 @@ static bool tb_port_is_width_supported(struct tb_port *port, int width) · 953 unmodified lines
954 ret = tb_port_read(port, &phy, TB_CFG_PORT,954 ret = tb_port_read(port, &phy, TB_CFG_PORT,
955 port->cap_phy + LANE_ADP_CS_0, 1);955 port->cap_phy + LANE_ADP_CS_0, 1);
956 if (ret)956 if (ret)
957 return ret;957 return false;
958 958
959 widths = (phy & LANE_ADP_CS_0_SUPPORTED_WIDTH_MASK) >>959 widths = (phy & LANE_ADP_CS_0_SUPPORTED_WIDTH_MASK) >>
960 LANE_ADP_CS_0_SUPPORTED_WIDTH_SHIFT;960 LANE_ADP_CS_0_SUPPORTED_WIDTH_SHIFT;
drivers/tty/tty_io.c+6−8
@@ -1589,9 +1589,7 @@ void tty_kclose(struct tty_struct *tty) · 1588 unmodified lines
1589 tty_debug_hangup(tty, "freeing structure\n");1589 tty_debug_hangup(tty, "freeing structure\n");
1590 /*1590 /*
1591 * The release_tty function takes care of the details of clearing1591 * The release_tty function takes care of the details of clearing
1592 * the slots and preserving the termios structure. The tty_unlock_pair1592 * the slots and preserving the termios structure.
1593 * should be safe as we keep a kref while the tty is locked (so the
1594 * unlock never unlocks a freed tty).
1595 */1593 */
1596 mutex_lock(&tty_mutex);1594 mutex_lock(&tty_mutex);
1597 tty_port_set_kopened(tty->port, 0);1595 tty_port_set_kopened(tty->port, 0);
@@ -1621,9 +1619,7 @@ void tty_release_struct(struct tty_struct *tty, int idx) · 23 unmodified lines
1621 tty_debug_hangup(tty, "freeing structure\n");1619 tty_debug_hangup(tty, "freeing structure\n");
1622 /*1620 /*
1623 * The release_tty function takes care of the details of clearing1621 * The release_tty function takes care of the details of clearing
1624 * the slots and preserving the termios structure. The tty_unlock_pair1622 * the slots and preserving the termios structure.
1625 * should be safe as we keep a kref while the tty is locked (so the
1626 * unlock never unlocks a freed tty).
1627 */1623 */
1628 mutex_lock(&tty_mutex);1624 mutex_lock(&tty_mutex);
1629 release_tty(tty, idx);1625 release_tty(tty, idx);
@@ -2734,9 +2730,11 @@ static int compat_tty_tiocgserial(struct tty_struct *tty, · 1104 unmodified lines
2734 struct serial_struct32 v32;2730 struct serial_struct32 v32;
2735 struct serial_struct v;2731 struct serial_struct v;
2736 int err;2732 int err;
2737 memset(&v, 0, sizeof(struct serial_struct));
2738 2733
2739 if (!tty->ops->set_serial)2734 memset(&v, 0, sizeof(v));
2735 memset(&v32, 0, sizeof(v32));
2736
2737 if (!tty->ops->get_serial)
2740 return -ENOTTY;2738 return -ENOTTY;
2741 err = tty->ops->get_serial(tty, &v);2739 err = tty->ops->get_serial(tty, &v);
2742 if (!err) {2740 if (!err) {
drivers/usb/chipidea/udc.c+4−3
@@ -1530,18 +1530,19 @@ static const struct usb_ep_ops usb_ep_ops = { · 1529 unmodified lines
1530static void ci_hdrc_gadget_connect(struct usb_gadget *_gadget, int is_active)1530static void ci_hdrc_gadget_connect(struct usb_gadget *_gadget, int is_active)
1531{1531{
1532 struct ci_hdrc *ci = container_of(_gadget, struct ci_hdrc, gadget);1532 struct ci_hdrc *ci = container_of(_gadget, struct ci_hdrc, gadget);
1533 unsigned long flags;
1534 1533
1535 if (is_active) {1534 if (is_active) {
1536 pm_runtime_get_sync(&_gadget->dev);1535 pm_runtime_get_sync(&_gadget->dev);
1537 hw_device_reset(ci);1536 hw_device_reset(ci);
1538 spin_lock_irqsave(&ci->lock, flags);1537 spin_lock_irq(&ci->lock);
1539 if (ci->driver) {1538 if (ci->driver) {
1540 hw_device_state(ci, ci->ep0out->qh.dma);1539 hw_device_state(ci, ci->ep0out->qh.dma);
1541 usb_gadget_set_state(_gadget, USB_STATE_POWERED);1540 usb_gadget_set_state(_gadget, USB_STATE_POWERED);
1541 spin_unlock_irq(&ci->lock);
1542 usb_udc_vbus_handler(_gadget, true);1542 usb_udc_vbus_handler(_gadget, true);
1543 } else {
1544 spin_unlock_irq(&ci->lock);
1543 }1545 }
1544 spin_unlock_irqrestore(&ci->lock, flags);
1545 } else {1546 } else {
1546 usb_udc_vbus_handler(_gadget, false);1547 usb_udc_vbus_handler(_gadget, false);
1547 if (ci->driver)1548 if (ci->driver)
drivers/usb/class/cdc-acm.c+21−13
@@ -896,10 +896,10 @@ static int get_serial_info(struct tty_struct *tty, struct serial_struct *ss) · 895 unmodified lines
896 896
897 ss->xmit_fifo_size = acm->writesize;897 ss->xmit_fifo_size = acm->writesize;
898 ss->baud_base = le32_to_cpu(acm->line.dwDTERate);898 ss->baud_base = le32_to_cpu(acm->line.dwDTERate);
899 ss->close_delay = acm->port.close_delay / 10;899 ss->close_delay = jiffies_to_msecs(acm->port.close_delay) / 10;
900 ss->closing_wait = acm->port.closing_wait == ASYNC_CLOSING_WAIT_NONE ?900 ss->closing_wait = acm->port.closing_wait == ASYNC_CLOSING_WAIT_NONE ?
901 ASYNC_CLOSING_WAIT_NONE :901 ASYNC_CLOSING_WAIT_NONE :
902 acm->port.closing_wait / 10;902 jiffies_to_msecs(acm->port.closing_wait) / 10;
903 return 0;903 return 0;
904}904}
905 905
@@ -907,24 +907,32 @@ static int set_serial_info(struct tty_struct *tty, struct serial_struct *ss) · 1 unmodified line
907{907{
908 struct acm *acm = tty->driver_data;908 struct acm *acm = tty->driver_data;
909 unsigned int closing_wait, close_delay;909 unsigned int closing_wait, close_delay;
910 unsigned int old_closing_wait, old_close_delay;
910 int retval = 0;911 int retval = 0;
911 912
912 close_delay = ss->close_delay * 10;913 close_delay = msecs_to_jiffies(ss->close_delay * 10);
913 closing_wait = ss->closing_wait == ASYNC_CLOSING_WAIT_NONE ?914 closing_wait = ss->closing_wait == ASYNC_CLOSING_WAIT_NONE ?
914 ASYNC_CLOSING_WAIT_NONE : ss->closing_wait * 10;915 ASYNC_CLOSING_WAIT_NONE :
916 msecs_to_jiffies(ss->closing_wait * 10);
917
918 /* we must redo the rounding here, so that the values match */
919 old_close_delay = jiffies_to_msecs(acm->port.close_delay) / 10;
920 old_closing_wait = acm->port.closing_wait == ASYNC_CLOSING_WAIT_NONE ?
921 ASYNC_CLOSING_WAIT_NONE :
922 jiffies_to_msecs(acm->port.closing_wait) / 10;
915 923
916 mutex_lock(&acm->port.mutex);924 mutex_lock(&acm->port.mutex);
917 925
918 if (!capable(CAP_SYS_ADMIN)) {926 if ((ss->close_delay != old_close_delay) ||
919 if ((close_delay != acm->port.close_delay) ||927 (ss->closing_wait != old_closing_wait)) {
920 (closing_wait != acm->port.closing_wait))928 if (!capable(CAP_SYS_ADMIN))
921 retval = -EPERM;929 retval = -EPERM;
922 else930 else {
923 retval = -EOPNOTSUPP;931 acm->port.close_delay = close_delay;
924 } else {932 acm->port.closing_wait = closing_wait;
925 acm->port.close_delay = close_delay;933 }
926 acm->port.closing_wait = closing_wait;934 } else
927 }935 retval = -EOPNOTSUPP;
928 936
929 mutex_unlock(&acm->port.mutex);937 mutex_unlock(&acm->port.mutex);
930 return retval;938 return retval;
drivers/usb/core/quirks.c+6−0
@@ -378,6 +378,12 @@ static const struct usb_device_id usb_quirk_list[] = { · 377 unmodified lines
378 { USB_DEVICE(0x0b05, 0x17e0), .driver_info =378 { USB_DEVICE(0x0b05, 0x17e0), .driver_info =
379 USB_QUIRK_IGNORE_REMOTE_WAKEUP },379 USB_QUIRK_IGNORE_REMOTE_WAKEUP },
380 380
381 /* Realtek hub in Dell WD19 (Type-C) */
382 { USB_DEVICE(0x0bda, 0x0487), .driver_info = USB_QUIRK_NO_LPM },
383
384 /* Generic RTL8153 based ethernet adapters */
385 { USB_DEVICE(0x0bda, 0x8153), .driver_info = USB_QUIRK_NO_LPM },
386
381 /* Action Semiconductor flash disk */387 /* Action Semiconductor flash disk */
382 { USB_DEVICE(0x10d6, 0x2200), .driver_info =388 { USB_DEVICE(0x10d6, 0x2200), .driver_info =
383 USB_QUIRK_STRING_FETCH_255 },389 USB_QUIRK_STRING_FETCH_255 },
drivers/usb/host/xhci-pci.c+2−1
@@ -136,7 +136,8 @@ static void xhci_pci_quirks(struct device *dev, struct xhci_hcd *xhci) · 135 unmodified lines
136 xhci->quirks |= XHCI_AMD_PLL_FIX;136 xhci->quirks |= XHCI_AMD_PLL_FIX;
137 137
138 if (pdev->vendor == PCI_VENDOR_ID_AMD &&138 if (pdev->vendor == PCI_VENDOR_ID_AMD &&
139 (pdev->device == 0x15e0 ||139 (pdev->device == 0x145c ||
140 pdev->device == 0x15e0 ||
140 pdev->device == 0x15e1 ||141 pdev->device == 0x15e1 ||
141 pdev->device == 0x43bb))142 pdev->device == 0x43bb))
142 xhci->quirks |= XHCI_SUSPEND_DELAY;143 xhci->quirks |= XHCI_SUSPEND_DELAY;
drivers/usb/host/xhci-plat.c+1−0
@@ -445,6 +445,7 @@ MODULE_DEVICE_TABLE(acpi, usb_xhci_acpi_match); · 444 unmodified lines
445static struct platform_driver usb_xhci_driver = {445static struct platform_driver usb_xhci_driver = {
446 .probe = xhci_plat_probe,446 .probe = xhci_plat_probe,
447 .remove = xhci_plat_remove,447 .remove = xhci_plat_remove,
448 .shutdown = usb_hcd_platform_shutdown,
448 .driver = {449 .driver = {
449 .name = "xhci-hcd",450 .name = "xhci-hcd",
450 .pm = &xhci_plat_pm_ops,451 .pm = &xhci_plat_pm_ops,
drivers/usb/host/xhci-trace.h+6−17
@@ -289,23 +289,12 @@ DECLARE_EVENT_CLASS(xhci_log_urb, · 288 unmodified lines
289 ),289 ),
290 TP_printk("ep%d%s-%s: urb %p pipe %u slot %d length %d/%d sgs %d/%d stream %d flags %08x",290 TP_printk("ep%d%s-%s: urb %p pipe %u slot %d length %d/%d sgs %d/%d stream %d flags %08x",
291 __entry->epnum, __entry->dir_in ? "in" : "out",291 __entry->epnum, __entry->dir_in ? "in" : "out",
292 ({ char *s;292 __print_symbolic(__entry->type,
293 switch (__entry->type) {293 { USB_ENDPOINT_XFER_INT, "intr" },
294 case USB_ENDPOINT_XFER_INT:294 { USB_ENDPOINT_XFER_CONTROL, "control" },
295 s = "intr";295 { USB_ENDPOINT_XFER_BULK, "bulk" },
296 break;296 { USB_ENDPOINT_XFER_ISOC, "isoc" }),
297 case USB_ENDPOINT_XFER_CONTROL:297 __entry->urb, __entry->pipe, __entry->slot_id,
298 s = "control";
299 break;
300 case USB_ENDPOINT_XFER_BULK:
301 s = "bulk";
302 break;
303 case USB_ENDPOINT_XFER_ISOC:
304 s = "isoc";
305 break;
306 default:
307 s = "UNKNOWN";
308 } s; }), __entry->urb, __entry->pipe, __entry->slot_id,
309 __entry->actual, __entry->length, __entry->num_mapped_sgs,298 __entry->actual, __entry->length, __entry->num_mapped_sgs,
310 __entry->num_sgs, __entry->stream, __entry->flags299 __entry->num_sgs, __entry->stream, __entry->flags
311 )300 )
drivers/usb/serial/option.c+2−0
@@ -1183,6 +1183,8 @@ static const struct usb_device_id option_ids[] = { · 1182 unmodified lines
1183 .driver_info = NCTRL(0) },1183 .driver_info = NCTRL(0) },
1184 { USB_DEVICE_INTERFACE_CLASS(TELIT_VENDOR_ID, 0x110a, 0xff), /* Telit ME910G1 */1184 { USB_DEVICE_INTERFACE_CLASS(TELIT_VENDOR_ID, 0x110a, 0xff), /* Telit ME910G1 */
1185 .driver_info = NCTRL(0) | RSVD(3) },1185 .driver_info = NCTRL(0) | RSVD(3) },
1186 { USB_DEVICE_INTERFACE_CLASS(TELIT_VENDOR_ID, 0x110b, 0xff), /* Telit ME910G1 (ECM) */
1187 .driver_info = NCTRL(0) },
1186 { USB_DEVICE(TELIT_VENDOR_ID, TELIT_PRODUCT_LE910),1188 { USB_DEVICE(TELIT_VENDOR_ID, TELIT_PRODUCT_LE910),
1187 .driver_info = NCTRL(0) | RSVD(1) | RSVD(2) },1189 .driver_info = NCTRL(0) | RSVD(1) | RSVD(2) },
1188 { USB_DEVICE(TELIT_VENDOR_ID, TELIT_PRODUCT_LE910_USBCFG4),1190 { USB_DEVICE(TELIT_VENDOR_ID, TELIT_PRODUCT_LE910_USBCFG4),
drivers/usb/serial/pl2303.c+1−0
@@ -99,6 +99,7 @@ static const struct usb_device_id id_table[] = { · 98 unmodified lines
99 { USB_DEVICE(SUPERIAL_VENDOR_ID, SUPERIAL_PRODUCT_ID) },99 { USB_DEVICE(SUPERIAL_VENDOR_ID, SUPERIAL_PRODUCT_ID) },
100 { USB_DEVICE(HP_VENDOR_ID, HP_LD220_PRODUCT_ID) },100 { USB_DEVICE(HP_VENDOR_ID, HP_LD220_PRODUCT_ID) },
101 { USB_DEVICE(HP_VENDOR_ID, HP_LD220TA_PRODUCT_ID) },101 { USB_DEVICE(HP_VENDOR_ID, HP_LD220TA_PRODUCT_ID) },
102 { USB_DEVICE(HP_VENDOR_ID, HP_LD381_PRODUCT_ID) },
102 { USB_DEVICE(HP_VENDOR_ID, HP_LD960_PRODUCT_ID) },103 { USB_DEVICE(HP_VENDOR_ID, HP_LD960_PRODUCT_ID) },
103 { USB_DEVICE(HP_VENDOR_ID, HP_LD960TA_PRODUCT_ID) },104 { USB_DEVICE(HP_VENDOR_ID, HP_LD960TA_PRODUCT_ID) },
104 { USB_DEVICE(HP_VENDOR_ID, HP_LCM220_PRODUCT_ID) },105 { USB_DEVICE(HP_VENDOR_ID, HP_LCM220_PRODUCT_ID) },
drivers/usb/serial/pl2303.h+1−0
@@ -130,6 +130,7 @@ · 129 unmodified lines
130#define HP_LM920_PRODUCT_ID 0x026b130#define HP_LM920_PRODUCT_ID 0x026b
131#define HP_TD620_PRODUCT_ID 0x0956131#define HP_TD620_PRODUCT_ID 0x0956
132#define HP_LD960_PRODUCT_ID 0x0b39132#define HP_LD960_PRODUCT_ID 0x0b39
133#define HP_LD381_PRODUCT_ID 0x0f7f
133#define HP_LCM220_PRODUCT_ID 0x3139134#define HP_LCM220_PRODUCT_ID 0x3139
134#define HP_LCM960_PRODUCT_ID 0x3239135#define HP_LCM960_PRODUCT_ID 0x3239
135#define HP_LD220_PRODUCT_ID 0x3524136#define HP_LD220_PRODUCT_ID 0x3524
drivers/usb/typec/ucsi/displayport.c+11−1
@@ -271,6 +271,9 @@ void ucsi_displayport_remove_partner(struct typec_altmode *alt) · 270 unmodified lines
271 return;271 return;
272 272
273 dp = typec_altmode_get_drvdata(alt);273 dp = typec_altmode_get_drvdata(alt);
274 if (!dp)
275 return;
276
274 dp->data.conf = 0;277 dp->data.conf = 0;
275 dp->data.status = 0;278 dp->data.status = 0;
276 dp->initialized = false;279 dp->initialized = false;
@@ -285,6 +288,8 @@ struct typec_altmode *ucsi_register_displayport(struct ucsi_connector *con, · 8 unmodified lines
285 struct typec_altmode *alt;288 struct typec_altmode *alt;
286 struct ucsi_dp *dp;289 struct ucsi_dp *dp;
287 290
291 mutex_lock(&con->lock);
292
288 /* We can't rely on the firmware with the capabilities. */293 /* We can't rely on the firmware with the capabilities. */
289 desc->vdo |= DP_CAP_DP_SIGNALING | DP_CAP_RECEPTACLE;294 desc->vdo |= DP_CAP_DP_SIGNALING | DP_CAP_RECEPTACLE;
290 295
@@ -293,12 +298,15 @@ struct typec_altmode *ucsi_register_displayport(struct ucsi_connector *con, · 2 unmodified lines
293 desc->vdo |= all_assignments << 16;298 desc->vdo |= all_assignments << 16;
294 299
295 alt = typec_port_register_altmode(con->port, desc);300 alt = typec_port_register_altmode(con->port, desc);
296 if (IS_ERR(alt))301 if (IS_ERR(alt)) {
302 mutex_unlock(&con->lock);
297 return alt;303 return alt;
304 }
298 305
299 dp = devm_kzalloc(&alt->dev, sizeof(*dp), GFP_KERNEL);306 dp = devm_kzalloc(&alt->dev, sizeof(*dp), GFP_KERNEL);
300 if (!dp) {307 if (!dp) {
301 typec_unregister_altmode(alt);308 typec_unregister_altmode(alt);
309 mutex_unlock(&con->lock);
302 return ERR_PTR(-ENOMEM);310 return ERR_PTR(-ENOMEM);
303 }311 }
304 312
@@ -311,5 +319,7 @@ struct typec_altmode *ucsi_register_displayport(struct ucsi_connector *con, · 6 unmodified lines
311 alt->ops = &ucsi_displayport_ops;319 alt->ops = &ucsi_displayport_ops;
312 typec_altmode_set_drvdata(alt, dp);320 typec_altmode_set_drvdata(alt, dp);
313 321
322 mutex_unlock(&con->lock);
323
314 return alt;324 return alt;
315}325}
drivers/virtio/virtio_balloon.c+1−1
@@ -959,8 +959,8 @@ out_iput: · 958 unmodified lines
959 iput(vb->vb_dev_info.inode);959 iput(vb->vb_dev_info.inode);
960out_kern_unmount:960out_kern_unmount:
961 kern_unmount(balloon_mnt);961 kern_unmount(balloon_mnt);
962#endif
963out_del_vqs:962out_del_vqs:
963#endif
964 vdev->config->del_vqs(vdev);964 vdev->config->del_vqs(vdev);
965out_free_vb:965out_free_vb:
966 kfree(vb);966 kfree(vb);
drivers/virtio/virtio_ring.c+2−2
@@ -2203,10 +2203,10 @@ void vring_del_virtqueue(struct virtqueue *_vq) · 2202 unmodified lines
2203 vq->split.queue_size_in_bytes,2203 vq->split.queue_size_in_bytes,
2204 vq->split.vring.desc,2204 vq->split.vring.desc,
2205 vq->split.queue_dma_addr);2205 vq->split.queue_dma_addr);
2206
2207 kfree(vq->split.desc_state);
2208 }2206 }
2209 }2207 }
2208 if (!vq->packed_ring)
2209 kfree(vq->split.desc_state);
2210 list_del(&_vq->list);2210 list_del(&_vq->list);
2211 kfree(vq);2211 kfree(vq);
2212}2212}
drivers/watchdog/iTCO_vendor.h+2−0
@@ -1,10 +1,12 @@
1/* SPDX-License-Identifier: GPL-2.0 */1/* SPDX-License-Identifier: GPL-2.0 */
2/* iTCO Vendor Specific Support hooks */2/* iTCO Vendor Specific Support hooks */
3#ifdef CONFIG_ITCO_VENDOR_SUPPORT3#ifdef CONFIG_ITCO_VENDOR_SUPPORT
4extern int iTCO_vendorsupport;
4extern void iTCO_vendor_pre_start(struct resource *, unsigned int);5extern void iTCO_vendor_pre_start(struct resource *, unsigned int);
5extern void iTCO_vendor_pre_stop(struct resource *);6extern void iTCO_vendor_pre_stop(struct resource *);
6extern int iTCO_vendor_check_noreboot_on(void);7extern int iTCO_vendor_check_noreboot_on(void);
7#else8#else
9#define iTCO_vendorsupport 0
8#define iTCO_vendor_pre_start(acpibase, heartbeat) {}10#define iTCO_vendor_pre_start(acpibase, heartbeat) {}
9#define iTCO_vendor_pre_stop(acpibase) {}11#define iTCO_vendor_pre_stop(acpibase) {}
10#define iTCO_vendor_check_noreboot_on() 112#define iTCO_vendor_check_noreboot_on() 1
drivers/watchdog/iTCO_vendor_support.c+9−7
@@ -39,8 +39,10 @@ · 38 unmodified lines
39/* Broken BIOS */39/* Broken BIOS */
40#define BROKEN_BIOS 91140#define BROKEN_BIOS 911
41 41
42static int vendorsupport;42int iTCO_vendorsupport;
43module_param(vendorsupport, int, 0);43EXPORT_SYMBOL(iTCO_vendorsupport);
44
45module_param_named(vendorsupport, iTCO_vendorsupport, int, 0);
44MODULE_PARM_DESC(vendorsupport, "iTCO vendor specific support mode, default="46MODULE_PARM_DESC(vendorsupport, "iTCO vendor specific support mode, default="
45 "0 (none), 1=SuperMicro Pent3, 911=Broken SMI BIOS");47 "0 (none), 1=SuperMicro Pent3, 911=Broken SMI BIOS");
46 48
@@ -152,7 +154,7 @@ static void broken_bios_stop(struct resource *smires) · 105 unmodified lines
152void iTCO_vendor_pre_start(struct resource *smires,154void iTCO_vendor_pre_start(struct resource *smires,
153 unsigned int heartbeat)155 unsigned int heartbeat)
154{156{
155 switch (vendorsupport) {157 switch (iTCO_vendorsupport) {
156 case SUPERMICRO_OLD_BOARD:158 case SUPERMICRO_OLD_BOARD:
157 supermicro_old_pre_start(smires);159 supermicro_old_pre_start(smires);
158 break;160 break;
@@ -165,7 +167,7 @@ EXPORT_SYMBOL(iTCO_vendor_pre_start); · 6 unmodified lines
165 167
166void iTCO_vendor_pre_stop(struct resource *smires)168void iTCO_vendor_pre_stop(struct resource *smires)
167{169{
168 switch (vendorsupport) {170 switch (iTCO_vendorsupport) {
169 case SUPERMICRO_OLD_BOARD:171 case SUPERMICRO_OLD_BOARD:
170 supermicro_old_pre_stop(smires);172 supermicro_old_pre_stop(smires);
171 break;173 break;
@@ -178,7 +180,7 @@ EXPORT_SYMBOL(iTCO_vendor_pre_stop); · 6 unmodified lines
178 180
179int iTCO_vendor_check_noreboot_on(void)181int iTCO_vendor_check_noreboot_on(void)
180{182{
181 switch (vendorsupport) {183 switch (iTCO_vendorsupport) {
182 case SUPERMICRO_OLD_BOARD:184 case SUPERMICRO_OLD_BOARD:
183 return 0;185 return 0;
184 default:186 default:
@@ -189,13 +191,13 @@ EXPORT_SYMBOL(iTCO_vendor_check_noreboot_on); · 4 unmodified lines
189 191
190static int __init iTCO_vendor_init_module(void)192static int __init iTCO_vendor_init_module(void)
191{193{
192 if (vendorsupport == SUPERMICRO_NEW_BOARD) {194 if (iTCO_vendorsupport == SUPERMICRO_NEW_BOARD) {
193 pr_warn("Option vendorsupport=%d is no longer supported, "195 pr_warn("Option vendorsupport=%d is no longer supported, "
194 "please use the w83627hf_wdt driver instead\n",196 "please use the w83627hf_wdt driver instead\n",
195 SUPERMICRO_NEW_BOARD);197 SUPERMICRO_NEW_BOARD);
196 return -EINVAL;198 return -EINVAL;
197 }199 }
198 pr_info("vendor-support=%d\n", vendorsupport);200 pr_info("vendor-support=%d\n", iTCO_vendorsupport);
199 return 0;201 return 0;
200}202}
201 203
drivers/watchdog/iTCO_wdt.c+16−12
@@ -459,13 +459,25 @@ static int iTCO_wdt_probe(struct platform_device *pdev) · 458 unmodified lines
459 if (!p->tco_res)459 if (!p->tco_res)
460 return -ENODEV;460 return -ENODEV;
461 461
462 p->smi_res = platform_get_resource(pdev, IORESOURCE_IO, ICH_RES_IO_SMI);
463 if (!p->smi_res)
464 return -ENODEV;
465
466 p->iTCO_version = pdata->version;462 p->iTCO_version = pdata->version;
467 p->pci_dev = to_pci_dev(dev->parent);463 p->pci_dev = to_pci_dev(dev->parent);
468 464
465 p->smi_res = platform_get_resource(pdev, IORESOURCE_IO, ICH_RES_IO_SMI);
466 if (p->smi_res) {
467 /* The TCO logic uses the TCO_EN bit in the SMI_EN register */
468 if (!devm_request_region(dev, p->smi_res->start,
469 resource_size(p->smi_res),
470 pdev->name)) {
471 pr_err("I/O address 0x%04llx already in use, device disabled\n",
472 (u64)SMI_EN(p));
473 return -EBUSY;
474 }
475 } else if (iTCO_vendorsupport ||
476 turn_SMI_watchdog_clear_off >= p->iTCO_version) {
477 pr_err("SMI I/O resource is missing\n");
478 return -ENODEV;
479 }
480
469 iTCO_wdt_no_reboot_bit_setup(p, pdata);481 iTCO_wdt_no_reboot_bit_setup(p, pdata);
470 482
471 /*483 /*
@@ -492,14 +504,6 @@ static int iTCO_wdt_probe(struct platform_device *pdev) · 20 unmodified lines
492 /* Set the NO_REBOOT bit to prevent later reboots, just for sure */504 /* Set the NO_REBOOT bit to prevent later reboots, just for sure */
493 p->update_no_reboot_bit(p->no_reboot_priv, true);505 p->update_no_reboot_bit(p->no_reboot_priv, true);
494 506
495 /* The TCO logic uses the TCO_EN bit in the SMI_EN register */
496 if (!devm_request_region(dev, p->smi_res->start,
497 resource_size(p->smi_res),
498 pdev->name)) {
499 pr_err("I/O address 0x%04llx already in use, device disabled\n",
500 (u64)SMI_EN(p));
501 return -EBUSY;
502 }
503 if (turn_SMI_watchdog_clear_off >= p->iTCO_version) {507 if (turn_SMI_watchdog_clear_off >= p->iTCO_version) {
504 /*508 /*
505 * Bit 13: TCO_EN -> 0509 * Bit 13: TCO_EN -> 0
fs/afs/addr_list.c+1−1
@@ -19,7 +19,7 @@ · 18 unmodified lines
19void afs_put_addrlist(struct afs_addr_list *alist)19void afs_put_addrlist(struct afs_addr_list *alist)
20{20{
21 if (alist && refcount_dec_and_test(&alist->usage))21 if (alist && refcount_dec_and_test(&alist->usage))
22 call_rcu(&alist->rcu, (rcu_callback_t)kfree);22 kfree_rcu(alist, rcu);
23}23}
24 24
25/*25/*
fs/afs/internal.h+1−1
@@ -81,7 +81,7 @@ enum afs_call_state { · 80 unmodified lines
81 * List of server addresses.81 * List of server addresses.
82 */82 */
83struct afs_addr_list {83struct afs_addr_list {
84 struct rcu_head rcu; /* Must be first */84 struct rcu_head rcu;
85 refcount_t usage;85 refcount_t usage;
86 u32 version; /* Version */86 u32 version; /* Version */
87 unsigned char max_addrs;87 unsigned char max_addrs;
fs/btrfs/block-group.c+2−2
@@ -856,9 +856,9 @@ static void clear_incompat_bg_bits(struct btrfs_fs_info *fs_info, u64 flags) · 855 unmodified lines
856 found_raid1c34 = true;856 found_raid1c34 = true;
857 up_read(&sinfo->groups_sem);857 up_read(&sinfo->groups_sem);
858 }858 }
859 if (found_raid56)859 if (!found_raid56)
860 btrfs_clear_fs_incompat(fs_info, RAID56);860 btrfs_clear_fs_incompat(fs_info, RAID56);
861 if (found_raid1c34)861 if (!found_raid1c34)
862 btrfs_clear_fs_incompat(fs_info, RAID1C34);862 btrfs_clear_fs_incompat(fs_info, RAID1C34);
863 }863 }
864}864}
fs/btrfs/inode.c+4−0
@@ -9496,6 +9496,10 @@ out_fail: · 9495 unmodified lines
9496 ret = btrfs_sync_log(trans, BTRFS_I(old_inode)->root, &ctx);9496 ret = btrfs_sync_log(trans, BTRFS_I(old_inode)->root, &ctx);
9497 if (ret)9497 if (ret)
9498 commit_transaction = true;9498 commit_transaction = true;
9499 } else if (sync_log) {
9500 mutex_lock(&root->log_mutex);
9501 list_del(&ctx.list);
9502 mutex_unlock(&root->log_mutex);
9499 }9503 }
9500 if (commit_transaction) {9504 if (commit_transaction) {
9501 ret = btrfs_commit_transaction(trans);9505 ret = btrfs_commit_transaction(trans);
fs/cifs/dir.c+0−1
@@ -555,7 +555,6 @@ cifs_atomic_open(struct inode *inode, struct dentry *direntry, · 554 unmodified lines
555 if (server->ops->close)555 if (server->ops->close)
556 server->ops->close(xid, tcon, &fid);556 server->ops->close(xid, tcon, &fid);
557 cifs_del_pending_open(&open);557 cifs_del_pending_open(&open);
558 fput(file);
559 rc = -ENOMEM;558 rc = -ENOMEM;
560 }559 }
561 560
fs/cifs/file.c+2−1
@@ -1169,7 +1169,8 @@ try_again: · 1168 unmodified lines
1169 rc = posix_lock_file(file, flock, NULL);1169 rc = posix_lock_file(file, flock, NULL);
1170 up_write(&cinode->lock_sem);1170 up_write(&cinode->lock_sem);
1171 if (rc == FILE_LOCK_DEFERRED) {1171 if (rc == FILE_LOCK_DEFERRED) {
1172 rc = wait_event_interruptible(flock->fl_wait, !flock->fl_blocker);1172 rc = wait_event_interruptible(flock->fl_wait,
1173 list_empty(&flock->fl_blocked_member));
1173 if (!rc)1174 if (!rc)
1174 goto try_again;1175 goto try_again;
1175 locks_delete_block(flock);1176 locks_delete_block(flock);
fs/cifs/inode.c+1−1
@@ -2191,7 +2191,7 @@ int cifs_getattr(const struct path *path, struct kstat *stat, · 2190 unmodified lines
2191 if (!(cifs_sb->mnt_cifs_flags & CIFS_MOUNT_OVERR_GID))2191 if (!(cifs_sb->mnt_cifs_flags & CIFS_MOUNT_OVERR_GID))
2192 stat->gid = current_fsgid();2192 stat->gid = current_fsgid();
2193 }2193 }
2194 return rc;2194 return 0;
2195}2195}
2196 2196
2197int cifs_fiemap(struct inode *inode, struct fiemap_extent_info *fei, u64 start,2197int cifs_fiemap(struct inode *inode, struct fiemap_extent_info *fei, u64 start,
fs/cifs/smb2ops.c+3−1
@@ -2222,6 +2222,8 @@ smb2_query_dir_first(const unsigned int xid, struct cifs_tcon *tcon, · 2221 unmodified lines
2222 goto qdf_free;2222 goto qdf_free;
2223 }2223 }
2224 2224
2225 atomic_inc(&tcon->num_remote_opens);
2226
2225 qd_rsp = (struct smb2_query_directory_rsp *)rsp_iov[1].iov_base;2227 qd_rsp = (struct smb2_query_directory_rsp *)rsp_iov[1].iov_base;
2226 if (qd_rsp->sync_hdr.Status == STATUS_NO_MORE_FILES) {2228 if (qd_rsp->sync_hdr.Status == STATUS_NO_MORE_FILES) {
2227 trace_smb3_query_dir_done(xid, fid->persistent_fid,2229 trace_smb3_query_dir_done(xid, fid->persistent_fid,
@@ -3417,7 +3419,7 @@ static int smb3_fiemap(struct cifs_tcon *tcon, · 1189 unmodified lines
3417 if (rc)3419 if (rc)
3418 goto out;3420 goto out;
3419 3421
3420 if (out_data_len < sizeof(struct file_allocated_range_buffer)) {3422 if (out_data_len && out_data_len < sizeof(struct file_allocated_range_buffer)) {
3421 rc = -EINVAL;3423 rc = -EINVAL;
3422 goto out;3424 goto out;
3423 }3425 }
fs/crypto/keysetup.c+9−0
@@ -538,6 +538,15 @@ int fscrypt_drop_inode(struct inode *inode) · 537 unmodified lines
538 return 0;538 return 0;
539 mk = ci->ci_master_key->payload.data[0];539 mk = ci->ci_master_key->payload.data[0];
540 540
541 /*
542 * With proper, non-racy use of FS_IOC_REMOVE_ENCRYPTION_KEY, all inodes
543 * protected by the key were cleaned by sync_filesystem(). But if
544 * userspace is still using the files, inodes can be dirtied between
545 * then and now. We mustn't lose any writes, so skip dirty inodes here.
546 */
547 if (inode->i_state & I_DIRTY_ALL)
548 return 0;
549
541 /*550 /*
542 * Note: since we aren't holding ->mk_secret_sem, the result here can551 * Note: since we aren't holding ->mk_secret_sem, the result here can
543 * immediately become outdated. But there's no correctness problem with552 * immediately become outdated. But there's no correctness problem with
fs/eventpoll.c+4−4
@@ -1854,9 +1854,9 @@ fetch_events: · 1853 unmodified lines
1854 waiter = true;1854 waiter = true;
1855 init_waitqueue_entry(&wait, current);1855 init_waitqueue_entry(&wait, current);
1856 1856
1857 spin_lock_irq(&ep->wq.lock);1857 write_lock_irq(&ep->lock);
1858 __add_wait_queue_exclusive(&ep->wq, &wait);1858 __add_wait_queue_exclusive(&ep->wq, &wait);
1859 spin_unlock_irq(&ep->wq.lock);1859 write_unlock_irq(&ep->lock);
1860 }1860 }
1861 1861
1862 for (;;) {1862 for (;;) {
@@ -1904,9 +1904,9 @@ send_events: · 41 unmodified lines
1904 goto fetch_events;1904 goto fetch_events;
1905 1905
1906 if (waiter) {1906 if (waiter) {
1907 spin_lock_irq(&ep->wq.lock);1907 write_lock_irq(&ep->lock);
1908 __remove_wait_queue(&ep->wq, &wait);1908 __remove_wait_queue(&ep->wq, &wait);
1909 spin_unlock_irq(&ep->wq.lock);1909 write_unlock_irq(&ep->lock);
1910 }1910 }
1911 1911
1912 return res;1912 return res;
fs/file.c+6−1
@@ -540,9 +540,14 @@ static int alloc_fd(unsigned start, unsigned flags) · 539 unmodified lines
540 return __alloc_fd(current->files, start, rlimit(RLIMIT_NOFILE), flags);540 return __alloc_fd(current->files, start, rlimit(RLIMIT_NOFILE), flags);
541}541}
542 542
543int __get_unused_fd_flags(unsigned flags, unsigned long nofile)
544{
545 return __alloc_fd(current->files, 0, nofile, flags);
546}
547
543int get_unused_fd_flags(unsigned flags)548int get_unused_fd_flags(unsigned flags)
544{549{
545 return __alloc_fd(current->files, 0, rlimit(RLIMIT_NOFILE), flags);550 return __get_unused_fd_flags(flags, rlimit(RLIMIT_NOFILE));
546}551}
547EXPORT_SYMBOL(get_unused_fd_flags);552EXPORT_SYMBOL(get_unused_fd_flags);
548 553
fs/fuse/dev.c+3−3
@@ -276,12 +276,10 @@ static void flush_bg_queue(struct fuse_conn *fc) · 275 unmodified lines
276void fuse_request_end(struct fuse_conn *fc, struct fuse_req *req)276void fuse_request_end(struct fuse_conn *fc, struct fuse_req *req)
277{277{
278 struct fuse_iqueue *fiq = &fc->iq;278 struct fuse_iqueue *fiq = &fc->iq;
279 bool async;
280 279
281 if (test_and_set_bit(FR_FINISHED, &req->flags))280 if (test_and_set_bit(FR_FINISHED, &req->flags))
282 goto put_request;281 goto put_request;
283 282
284 async = req->args->end;
285 /*283 /*
286 * test_and_set_bit() implies smp_mb() between bit284 * test_and_set_bit() implies smp_mb() between bit
287 * changing and below intr_entry check. Pairs with285 * changing and below intr_entry check. Pairs with
@@ -324,7 +322,7 @@ void fuse_request_end(struct fuse_conn *fc, struct fuse_req *req) · 36 unmodified lines
324 wake_up(&req->waitq);322 wake_up(&req->waitq);
325 }323 }
326 324
327 if (async)325 if (test_bit(FR_ASYNC, &req->flags))
328 req->args->end(fc, req->args, req->out.h.error);326 req->args->end(fc, req->args, req->out.h.error);
329put_request:327put_request:
330 fuse_put_request(fc, req);328 fuse_put_request(fc, req);
@@ -471,6 +469,8 @@ static void fuse_args_to_req(struct fuse_req *req, struct fuse_args *args) · 140 unmodified lines
471 req->in.h.opcode = args->opcode;469 req->in.h.opcode = args->opcode;
472 req->in.h.nodeid = args->nodeid;470 req->in.h.nodeid = args->nodeid;
473 req->args = args;471 req->args = args;
472 if (args->end)
473 __set_bit(FR_ASYNC, &req->flags);
474}474}
475 475
476ssize_t fuse_simple_request(struct fuse_conn *fc, struct fuse_args *args)476ssize_t fuse_simple_request(struct fuse_conn *fc, struct fuse_args *args)
fs/fuse/fuse_i.h+2−0
@@ -301,6 +301,7 @@ struct fuse_io_priv { · 300 unmodified lines
301 * FR_SENT: request is in userspace, waiting for an answer301 * FR_SENT: request is in userspace, waiting for an answer
302 * FR_FINISHED: request is finished302 * FR_FINISHED: request is finished
303 * FR_PRIVATE: request is on private list303 * FR_PRIVATE: request is on private list
304 * FR_ASYNC: request is asynchronous
304 */305 */
305enum fuse_req_flag {306enum fuse_req_flag {
306 FR_ISREPLY,307 FR_ISREPLY,
@@ -314,6 +315,7 @@ enum fuse_req_flag { · 7 unmodified lines
314 FR_SENT,315 FR_SENT,
315 FR_FINISHED,316 FR_FINISHED,
316 FR_PRIVATE,317 FR_PRIVATE,
318 FR_ASYNC,
317};319};
318 320
319/**321/**
fs/gfs2/inode.c+1−1
@@ -1248,7 +1248,7 @@ static int gfs2_atomic_open(struct inode *dir, struct dentry *dentry, · 1247 unmodified lines
1248 if (!(file->f_mode & FMODE_OPENED))1248 if (!(file->f_mode & FMODE_OPENED))
1249 return finish_no_open(file, d);1249 return finish_no_open(file, d);
1250 dput(d);1250 dput(d);
1251 return 0;1251 return excl && (flags & O_CREAT) ? -EEXIST : 0;
1252 }1252 }
1253 1253
1254 BUG_ON(d != NULL);1254 BUG_ON(d != NULL);
fs/inode.c+1−0
@@ -138,6 +138,7 @@ int inode_init_always(struct super_block *sb, struct inode *inode) · 137 unmodified lines
138 inode->i_sb = sb;138 inode->i_sb = sb;
139 inode->i_blkbits = sb->s_blocksize_bits;139 inode->i_blkbits = sb->s_blocksize_bits;
140 inode->i_flags = 0;140 inode->i_flags = 0;
141 atomic64_set(&inode->i_sequence, 0);
141 atomic_set(&inode->i_count, 1);142 atomic_set(&inode->i_count, 1);
142 inode->i_op = &empty_iops;143 inode->i_op = &empty_iops;
143 inode->i_fop = &no_open_fops;144 inode->i_fop = &no_open_fops;
fs/io_uring.c+29−18
@@ -191,7 +191,6 @@ struct fixed_file_data { · 190 unmodified lines
191 struct llist_head put_llist;191 struct llist_head put_llist;
192 struct work_struct ref_work;192 struct work_struct ref_work;
193 struct completion done;193 struct completion done;
194 struct rcu_head rcu;
195};194};
196 195
197struct io_ring_ctx {196struct io_ring_ctx {
@@ -344,6 +343,7 @@ struct io_accept { · 146 unmodified lines
344 struct sockaddr __user *addr;343 struct sockaddr __user *addr;
345 int __user *addr_len;344 int __user *addr_len;
346 int flags;345 int flags;
346 unsigned long nofile;
347};347};
348 348
349struct io_sync {349struct io_sync {
@@ -398,6 +398,7 @@ struct io_open { · 48 unmodified lines
398 struct filename *filename;398 struct filename *filename;
399 struct statx __user *buffer;399 struct statx __user *buffer;
400 struct open_how how;400 struct open_how how;
401 unsigned long nofile;
401};402};
402 403
403struct io_files_update {404struct io_files_update {
@@ -2578,6 +2579,7 @@ static int io_openat_prep(struct io_kiocb *req, const struct io_uring_sqe *sqe) · 2174 unmodified lines
2578 return ret;2579 return ret;
2579 }2580 }
2580 2581
2582 req->open.nofile = rlimit(RLIMIT_NOFILE);
2581 req->flags |= REQ_F_NEED_CLEANUP;2583 req->flags |= REQ_F_NEED_CLEANUP;
2582 return 0;2584 return 0;
2583}2585}
@@ -2619,6 +2621,7 @@ static int io_openat2_prep(struct io_kiocb *req, const struct io_uring_sqe *sqe) · 35 unmodified lines
2619 return ret;2621 return ret;
2620 }2622 }
2621 2623
2624 req->open.nofile = rlimit(RLIMIT_NOFILE);
2622 req->flags |= REQ_F_NEED_CLEANUP;2625 req->flags |= REQ_F_NEED_CLEANUP;
2623 return 0;2626 return 0;
2624}2627}
@@ -2637,7 +2640,7 @@ static int io_openat2(struct io_kiocb *req, struct io_kiocb **nxt, · 12 unmodified lines
2637 if (ret)2640 if (ret)
2638 goto err;2641 goto err;
2639 2642
2640 ret = get_unused_fd_flags(req->open.how.flags);2643 ret = __get_unused_fd_flags(req->open.how.flags, req->open.nofile);
2641 if (ret < 0)2644 if (ret < 0)
2642 goto err;2645 goto err;
2643 2646
@@ -3322,6 +3325,7 @@ static int io_accept_prep(struct io_kiocb *req, const struct io_uring_sqe *sqe) · 678 unmodified lines
3322 accept->addr = u64_to_user_ptr(READ_ONCE(sqe->addr));3325 accept->addr = u64_to_user_ptr(READ_ONCE(sqe->addr));
3323 accept->addr_len = u64_to_user_ptr(READ_ONCE(sqe->addr2));3326 accept->addr_len = u64_to_user_ptr(READ_ONCE(sqe->addr2));
3324 accept->flags = READ_ONCE(sqe->accept_flags);3327 accept->flags = READ_ONCE(sqe->accept_flags);
3328 accept->nofile = rlimit(RLIMIT_NOFILE);
3325 return 0;3329 return 0;
3326#else3330#else
3327 return -EOPNOTSUPP;3331 return -EOPNOTSUPP;
@@ -3338,7 +3342,8 @@ static int __io_accept(struct io_kiocb *req, struct io_kiocb **nxt, · 10 unmodified lines
3338 3342
3339 file_flags = force_nonblock ? O_NONBLOCK : 0;3343 file_flags = force_nonblock ? O_NONBLOCK : 0;
3340 ret = __sys_accept4_file(req->file, file_flags, accept->addr,3344 ret = __sys_accept4_file(req->file, file_flags, accept->addr,
3341 accept->addr_len, accept->flags);3345 accept->addr_len, accept->flags,
3346 accept->nofile);
3342 if (ret == -EAGAIN && force_nonblock)3347 if (ret == -EAGAIN && force_nonblock)
3343 return -EAGAIN;3348 return -EAGAIN;
3344 if (ret == -ERESTARTSYS)3349 if (ret == -ERESTARTSYS)
@@ -4132,6 +4137,9 @@ static int io_req_defer_prep(struct io_kiocb *req, · 787 unmodified lines
4132{4137{
4133 ssize_t ret = 0;4138 ssize_t ret = 0;
4134 4139
4140 if (!sqe)
4141 return 0;
4142
4135 if (io_op_defs[req->opcode].file_table) {4143 if (io_op_defs[req->opcode].file_table) {
4136 ret = io_grab_files(req);4144 ret = io_grab_files(req);
4137 if (unlikely(ret))4145 if (unlikely(ret))
@@ -4908,6 +4916,11 @@ err_req: · 770 unmodified lines
4908 if (sqe_flags & (IOSQE_IO_LINK|IOSQE_IO_HARDLINK)) {4916 if (sqe_flags & (IOSQE_IO_LINK|IOSQE_IO_HARDLINK)) {
4909 req->flags |= REQ_F_LINK;4917 req->flags |= REQ_F_LINK;
4910 INIT_LIST_HEAD(&req->link_list);4918 INIT_LIST_HEAD(&req->link_list);
4919
4920 if (io_alloc_async_ctx(req)) {
4921 ret = -EAGAIN;
4922 goto err_req;
4923 }
4911 ret = io_req_defer_prep(req, sqe);4924 ret = io_req_defer_prep(req, sqe);
4912 if (ret)4925 if (ret)
4913 req->flags |= REQ_F_FAIL_LINK;4926 req->flags |= REQ_F_FAIL_LINK;
@@ -5331,24 +5344,21 @@ static void io_file_ref_kill(struct percpu_ref *ref) · 417 unmodified lines
5331 complete(&data->done);5344 complete(&data->done);
5332}5345}
5333 5346
5334static void __io_file_ref_exit_and_free(struct rcu_head *rcu)5347static void io_file_ref_exit_and_free(struct work_struct *work)
5335{5348{
5336 struct fixed_file_data *data = container_of(rcu, struct fixed_file_data,5349 struct fixed_file_data *data;
5337 rcu);5350
5338 percpu_ref_exit(&data->refs);5351 data = container_of(work, struct fixed_file_data, ref_work);
5339 kfree(data);
5340}
5341 5352
5342static void io_file_ref_exit_and_free(struct rcu_head *rcu)
5343{
5344 /*5353 /*
5345 * We need to order our exit+free call against the potentially5354 * Ensure any percpu-ref atomic switch callback has run, it could have
5346 * existing call_rcu() for switching to atomic. One way to do that5355 * been in progress when the files were being unregistered. Once
5347 * is to have this rcu callback queue the final put and free, as we5356 * that's done, we can safely exit and free the ref and containing
5348 * could otherwise have a pre-existing atomic switch complete _after_5357 * data structure.
5349 * the free callback we queued.
5350 */5358 */
5351 call_rcu(rcu, __io_file_ref_exit_and_free);5359 rcu_barrier();
5360 percpu_ref_exit(&data->refs);
5361 kfree(data);
5352}5362}
5353 5363
5354static int io_sqe_files_unregister(struct io_ring_ctx *ctx)5364static int io_sqe_files_unregister(struct io_ring_ctx *ctx)
@@ -5369,7 +5379,8 @@ static int io_sqe_files_unregister(struct io_ring_ctx *ctx) · 14 unmodified lines
5369 for (i = 0; i < nr_tables; i++)5379 for (i = 0; i < nr_tables; i++)
5370 kfree(data->table[i].files);5380 kfree(data->table[i].files);
5371 kfree(data->table);5381 kfree(data->table);
5372 call_rcu(&data->rcu, io_file_ref_exit_and_free);5382 INIT_WORK(&data->ref_work, io_file_ref_exit_and_free);
5383 queue_work(system_wq, &data->ref_work);
5373 ctx->file_data = NULL;5384 ctx->file_data = NULL;
5374 ctx->nr_user_files = 0;5385 ctx->nr_user_files = 0;
5375 return 0;5386 return 0;
fs/locks.c+48−6
@@ -725,7 +725,6 @@ static void __locks_delete_block(struct file_lock *waiter) · 724 unmodified lines
725{725{
726 locks_delete_global_blocked(waiter);726 locks_delete_global_blocked(waiter);
727 list_del_init(&waiter->fl_blocked_member);727 list_del_init(&waiter->fl_blocked_member);
728 waiter->fl_blocker = NULL;
729}728}
730 729
731static void __locks_wake_up_blocks(struct file_lock *blocker)730static void __locks_wake_up_blocks(struct file_lock *blocker)
@@ -740,6 +739,13 @@ static void __locks_wake_up_blocks(struct file_lock *blocker) · 8 unmodified lines
740 waiter->fl_lmops->lm_notify(waiter);739 waiter->fl_lmops->lm_notify(waiter);
741 else740 else
742 wake_up(&waiter->fl_wait);741 wake_up(&waiter->fl_wait);
742
743 /*
744 * The setting of fl_blocker to NULL marks the "done"
745 * point in deleting a block. Paired with acquire at the top
746 * of locks_delete_block().
747 */
748 smp_store_release(&waiter->fl_blocker, NULL);
743 }749 }
744}750}
745 751
@@ -753,11 +759,42 @@ int locks_delete_block(struct file_lock *waiter) · 7 unmodified lines
753{759{
754 int status = -ENOENT;760 int status = -ENOENT;
755 761
762 /*
763 * If fl_blocker is NULL, it won't be set again as this thread "owns"
764 * the lock and is the only one that might try to claim the lock.
765 *
766 * We use acquire/release to manage fl_blocker so that we can
767 * optimize away taking the blocked_lock_lock in many cases.
768 *
769 * The smp_load_acquire guarantees two things:
770 *
771 * 1/ that fl_blocked_requests can be tested locklessly. If something
772 * was recently added to that list it must have been in a locked region
773 * *before* the locked region when fl_blocker was set to NULL.
774 *
775 * 2/ that no other thread is accessing 'waiter', so it is safe to free
776 * it. __locks_wake_up_blocks is careful not to touch waiter after
777 * fl_blocker is released.
778 *
779 * If a lockless check of fl_blocker shows it to be NULL, we know that
780 * no new locks can be inserted into its fl_blocked_requests list, and
781 * can avoid doing anything further if the list is empty.
782 */
783 if (!smp_load_acquire(&waiter->fl_blocker) &&
784 list_empty(&waiter->fl_blocked_requests))
785 return status;
786
756 spin_lock(&blocked_lock_lock);787 spin_lock(&blocked_lock_lock);
757 if (waiter->fl_blocker)788 if (waiter->fl_blocker)
758 status = 0;789 status = 0;
759 __locks_wake_up_blocks(waiter);790 __locks_wake_up_blocks(waiter);
760 __locks_delete_block(waiter);791 __locks_delete_block(waiter);
792
793 /*
794 * The setting of fl_blocker to NULL marks the "done" point in deleting
795 * a block. Paired with acquire at the top of this function.
796 */
797 smp_store_release(&waiter->fl_blocker, NULL);
761 spin_unlock(&blocked_lock_lock);798 spin_unlock(&blocked_lock_lock);
762 return status;799 return status;
763}800}
@@ -1350,7 +1387,8 @@ static int posix_lock_inode_wait(struct inode *inode, struct file_lock *fl) · 586 unmodified lines
1350 error = posix_lock_inode(inode, fl, NULL);1387 error = posix_lock_inode(inode, fl, NULL);
1351 if (error != FILE_LOCK_DEFERRED)1388 if (error != FILE_LOCK_DEFERRED)
1352 break;1389 break;
1353 error = wait_event_interruptible(fl->fl_wait, !fl->fl_blocker);1390 error = wait_event_interruptible(fl->fl_wait,
1391 list_empty(&fl->fl_blocked_member));
1354 if (error)1392 if (error)
1355 break;1393 break;
1356 }1394 }
@@ -1435,7 +1473,8 @@ int locks_mandatory_area(struct inode *inode, struct file *filp, loff_t start, · 78 unmodified lines
1435 error = posix_lock_inode(inode, &fl, NULL);1473 error = posix_lock_inode(inode, &fl, NULL);
1436 if (error != FILE_LOCK_DEFERRED)1474 if (error != FILE_LOCK_DEFERRED)
1437 break;1475 break;
1438 error = wait_event_interruptible(fl.fl_wait, !fl.fl_blocker);1476 error = wait_event_interruptible(fl.fl_wait,
1477 list_empty(&fl.fl_blocked_member));
1439 if (!error) {1478 if (!error) {
1440 /*1479 /*
1441 * If we've been sleeping someone might have1480 * If we've been sleeping someone might have
@@ -1638,7 +1677,8 @@ restart: · 196 unmodified lines
1638 1677
1639 locks_dispose_list(&dispose);1678 locks_dispose_list(&dispose);
1640 error = wait_event_interruptible_timeout(new_fl->fl_wait,1679 error = wait_event_interruptible_timeout(new_fl->fl_wait,
1641 !new_fl->fl_blocker, break_time);1680 list_empty(&new_fl->fl_blocked_member),
1681 break_time);
1642 1682
1643 percpu_down_read(&file_rwsem);1683 percpu_down_read(&file_rwsem);
1644 spin_lock(&ctx->flc_lock);1684 spin_lock(&ctx->flc_lock);
@@ -2122,7 +2162,8 @@ static int flock_lock_inode_wait(struct inode *inode, struct file_lock *fl) · 477 unmodified lines
2122 error = flock_lock_inode(inode, fl);2162 error = flock_lock_inode(inode, fl);
2123 if (error != FILE_LOCK_DEFERRED)2163 if (error != FILE_LOCK_DEFERRED)
2124 break;2164 break;
2125 error = wait_event_interruptible(fl->fl_wait, !fl->fl_blocker);2165 error = wait_event_interruptible(fl->fl_wait,
2166 list_empty(&fl->fl_blocked_member));
2126 if (error)2167 if (error)
2127 break;2168 break;
2128 }2169 }
@@ -2399,7 +2440,8 @@ static int do_lock_file_wait(struct file *filp, unsigned int cmd, · 270 unmodified lines
2399 error = vfs_lock_file(filp, cmd, fl, NULL);2440 error = vfs_lock_file(filp, cmd, fl, NULL);
2400 if (error != FILE_LOCK_DEFERRED)2441 if (error != FILE_LOCK_DEFERRED)
2401 break;2442 break;
2402 error = wait_event_interruptible(fl->fl_wait, !fl->fl_blocker);2443 error = wait_event_interruptible(fl->fl_wait,
2444 list_empty(&fl->fl_blocked_member));
2403 if (error)2445 if (error)
2404 break;2446 break;
2405 }2447 }
fs/nfs/client.c+1−0
@@ -153,6 +153,7 @@ struct nfs_client *nfs_alloc_client(const struct nfs_client_initdata *cl_init) · 152 unmodified lines
153 if ((clp = kzalloc(sizeof(*clp), GFP_KERNEL)) == NULL)153 if ((clp = kzalloc(sizeof(*clp), GFP_KERNEL)) == NULL)
154 goto error_0;154 goto error_0;
155 155
156 clp->cl_minorversion = cl_init->minorversion;
156 clp->cl_nfs_mod = cl_init->nfs_mod;157 clp->cl_nfs_mod = cl_init->nfs_mod;
157 if (!try_module_get(clp->cl_nfs_mod->owner))158 if (!try_module_get(clp->cl_nfs_mod->owner))
158 goto error_dealloc;159 goto error_dealloc;
fs/nfs/fs_context.c+9−0
@@ -832,6 +832,8 @@ static int nfs_parse_source(struct fs_context *fc, · 831 unmodified lines
832 if (len > maxnamlen)832 if (len > maxnamlen)
833 goto out_hostname;833 goto out_hostname;
834 834
835 kfree(ctx->nfs_server.hostname);
836
835 /* N.B. caller will free nfs_server.hostname in all cases */837 /* N.B. caller will free nfs_server.hostname in all cases */
836 ctx->nfs_server.hostname = kmemdup_nul(dev_name, len, GFP_KERNEL);838 ctx->nfs_server.hostname = kmemdup_nul(dev_name, len, GFP_KERNEL);
837 if (!ctx->nfs_server.hostname)839 if (!ctx->nfs_server.hostname)
@@ -1240,6 +1242,13 @@ static int nfs_fs_context_validate(struct fs_context *fc) · 402 unmodified lines
1240 }1242 }
1241 ctx->nfs_mod = nfs_mod;1243 ctx->nfs_mod = nfs_mod;
1242 }1244 }
1245
1246 /* Ensure the filesystem context has the correct fs_type */
1247 if (fc->fs_type != ctx->nfs_mod->nfs_fs) {
1248 module_put(fc->fs_type->owner);
1249 __module_get(ctx->nfs_mod->nfs_fs->owner);
1250 fc->fs_type = ctx->nfs_mod->nfs_fs;
1251 }
1243 return 0;1252 return 0;
1244 1253
1245out_no_device_name:1254out_no_device_name:
fs/nfs/fscache.c+2−0
@@ -31,6 +31,7 @@ static DEFINE_SPINLOCK(nfs_fscache_keys_lock); · 30 unmodified lines
31struct nfs_server_key {31struct nfs_server_key {
32 struct {32 struct {
33 uint16_t nfsversion; /* NFS protocol version */33 uint16_t nfsversion; /* NFS protocol version */
34 uint32_t minorversion; /* NFSv4 minor version */
34 uint16_t family; /* address family */35 uint16_t family; /* address family */
35 __be16 port; /* IP port */36 __be16 port; /* IP port */
36 } hdr;37 } hdr;
@@ -55,6 +56,7 @@ void nfs_fscache_get_client_cookie(struct nfs_client *clp) · 18 unmodified lines
55 56
56 memset(&key, 0, sizeof(key));57 memset(&key, 0, sizeof(key));
57 key.hdr.nfsversion = clp->rpc_ops->version;58 key.hdr.nfsversion = clp->rpc_ops->version;
59 key.hdr.minorversion = clp->cl_minorversion;
58 key.hdr.family = clp->cl_addr.ss_family;60 key.hdr.family = clp->cl_addr.ss_family;
59 61
60 switch (clp->cl_addr.ss_family) {62 switch (clp->cl_addr.ss_family) {
fs/nfs/namespace.c+1−1
@@ -153,7 +153,7 @@ struct vfsmount *nfs_d_automount(struct path *path) · 152 unmodified lines
153 /* Open a new filesystem context, transferring parameters from the153 /* Open a new filesystem context, transferring parameters from the
154 * parent superblock, including the network namespace.154 * parent superblock, including the network namespace.
155 */155 */
156 fc = fs_context_for_submount(&nfs_fs_type, path->dentry);156 fc = fs_context_for_submount(path->mnt->mnt_sb->s_type, path->dentry);
157 if (IS_ERR(fc))157 if (IS_ERR(fc))
158 return ERR_CAST(fc);158 return ERR_CAST(fc);
159 159
fs/nfs/nfs4client.c+0−1
@@ -216,7 +216,6 @@ struct nfs_client *nfs4_alloc_client(const struct nfs_client_initdata *cl_init) · 215 unmodified lines
216 INIT_LIST_HEAD(&clp->cl_ds_clients);216 INIT_LIST_HEAD(&clp->cl_ds_clients);
217 rpc_init_wait_queue(&clp->cl_rpcwaitq, "NFS client");217 rpc_init_wait_queue(&clp->cl_rpcwaitq, "NFS client");
218 clp->cl_state = 1 << NFS4CLNT_LEASE_EXPIRED;218 clp->cl_state = 1 << NFS4CLNT_LEASE_EXPIRED;
219 clp->cl_minorversion = cl_init->minorversion;
220 clp->cl_mvops = nfs_v4_minor_ops[cl_init->minorversion];219 clp->cl_mvops = nfs_v4_minor_ops[cl_init->minorversion];
221 clp->cl_mig_gen = 1;220 clp->cl_mig_gen = 1;
222#if IS_ENABLED(CONFIG_NFS_V4_1)221#if IS_ENABLED(CONFIG_NFS_V4_1)
fs/open.c+0−3
@@ -860,9 +860,6 @@ cleanup_file: · 859 unmodified lines
860 * the return value of d_splice_alias(), then the caller needs to perform dput()860 * the return value of d_splice_alias(), then the caller needs to perform dput()
861 * on it after finish_open().861 * on it after finish_open().
862 *862 *
863 * On successful return @file is a fully instantiated open file. After this, if
864 * an error occurs in ->atomic_open(), it needs to clean up with fput().
865 *
866 * Returns zero on success or -errno if the open failed.863 * Returns zero on success or -errno if the open failed.
867 */864 */
868int finish_open(struct file *file, struct dentry *dentry,865int finish_open(struct file *file, struct dentry *dentry,
fs/overlayfs/Kconfig+1−0
@@ -93,6 +93,7 @@ config OVERLAY_FS_XINO_AUTO · 92 unmodified lines
93 bool "Overlayfs: auto enable inode number mapping"93 bool "Overlayfs: auto enable inode number mapping"
94 default n94 default n
95 depends on OVERLAY_FS95 depends on OVERLAY_FS
96 depends on 64BIT
96 help97 help
97 If this config option is enabled then overlay filesystems will use98 If this config option is enabled then overlay filesystems will use
98 unused high bits in undelying filesystem inode numbers to map all99 unused high bits in undelying filesystem inode numbers to map all
fs/overlayfs/file.c+6−0
@@ -244,6 +244,9 @@ static void ovl_aio_cleanup_handler(struct ovl_aio_req *aio_req) · 243 unmodified lines
244 if (iocb->ki_flags & IOCB_WRITE) {244 if (iocb->ki_flags & IOCB_WRITE) {
245 struct inode *inode = file_inode(orig_iocb->ki_filp);245 struct inode *inode = file_inode(orig_iocb->ki_filp);
246 246
247 /* Actually acquired in ovl_write_iter() */
248 __sb_writers_acquired(file_inode(iocb->ki_filp)->i_sb,
249 SB_FREEZE_WRITE);
247 file_end_write(iocb->ki_filp);250 file_end_write(iocb->ki_filp);
248 ovl_copyattr(ovl_inode_real(inode), inode);251 ovl_copyattr(ovl_inode_real(inode), inode);
249 }252 }
@@ -346,6 +349,9 @@ static ssize_t ovl_write_iter(struct kiocb *iocb, struct iov_iter *iter) · 96 unmodified lines
346 goto out;349 goto out;
347 350
348 file_start_write(real.file);351 file_start_write(real.file);
352 /* Pacify lockdep, same trick as done in aio_write() */
353 __sb_writers_release(file_inode(real.file)->i_sb,
354 SB_FREEZE_WRITE);
349 aio_req->fd = real;355 aio_req->fd = real;
350 real.flags = 0;356 real.flags = 0;
351 aio_req->orig_iocb = iocb;357 aio_req->orig_iocb = iocb;
fs/overlayfs/overlayfs.h+6−1
@@ -318,7 +318,12 @@ static inline unsigned int ovl_xino_bits(struct super_block *sb) · 317 unmodified lines
318 return ovl_same_dev(sb) ? OVL_FS(sb)->xino_mode : 0;318 return ovl_same_dev(sb) ? OVL_FS(sb)->xino_mode : 0;
319}319}
320 320
321static inline int ovl_inode_lock(struct inode *inode)321static inline void ovl_inode_lock(struct inode *inode)
322{
323 mutex_lock(&OVL_I(inode)->lock);
324}
325
326static inline int ovl_inode_lock_interruptible(struct inode *inode)
322{327{
323 return mutex_lock_interruptible(&OVL_I(inode)->lock);328 return mutex_lock_interruptible(&OVL_I(inode)->lock);
324}329}
fs/overlayfs/super.c+8−1
@@ -1411,6 +1411,8 @@ static int ovl_get_layers(struct super_block *sb, struct ovl_fs *ofs, · 1410 unmodified lines
1411 if (ofs->config.xino == OVL_XINO_ON)1411 if (ofs->config.xino == OVL_XINO_ON)
1412 pr_info("\"xino=on\" is useless with all layers on same fs, ignore.\n");1412 pr_info("\"xino=on\" is useless with all layers on same fs, ignore.\n");
1413 ofs->xino_mode = 0;1413 ofs->xino_mode = 0;
1414 } else if (ofs->config.xino == OVL_XINO_OFF) {
1415 ofs->xino_mode = -1;
1414 } else if (ofs->config.xino == OVL_XINO_ON && ofs->xino_mode < 0) {1416 } else if (ofs->config.xino == OVL_XINO_ON && ofs->xino_mode < 0) {
1415 /*1417 /*
1416 * This is a roundup of number of bits needed for encoding1418 * This is a roundup of number of bits needed for encoding
@@ -1623,8 +1625,13 @@ static int ovl_fill_super(struct super_block *sb, void *data, int silent) · 206 unmodified lines
1623 sb->s_stack_depth = 0;1625 sb->s_stack_depth = 0;
1624 sb->s_maxbytes = MAX_LFS_FILESIZE;1626 sb->s_maxbytes = MAX_LFS_FILESIZE;
1625 /* Assume underlaying fs uses 32bit inodes unless proven otherwise */1627 /* Assume underlaying fs uses 32bit inodes unless proven otherwise */
1626 if (ofs->config.xino != OVL_XINO_OFF)1628 if (ofs->config.xino != OVL_XINO_OFF) {
1627 ofs->xino_mode = BITS_PER_LONG - 32;1629 ofs->xino_mode = BITS_PER_LONG - 32;
1630 if (!ofs->xino_mode) {
1631 pr_warn("xino not supported on 32bit kernel, falling back to xino=off.\n");
1632 ofs->config.xino = OVL_XINO_OFF;
1633 }
1634 }
1628 1635
1629 /* alloc/destroy_inode needed for setting up traps in inode cache */1636 /* alloc/destroy_inode needed for setting up traps in inode cache */
1630 sb->s_op = &ovl_super_operations;1637 sb->s_op = &ovl_super_operations;
fs/overlayfs/util.c+2−2
@@ -509,7 +509,7 @@ int ovl_copy_up_start(struct dentry *dentry, int flags) · 508 unmodified lines
509 struct inode *inode = d_inode(dentry);509 struct inode *inode = d_inode(dentry);
510 int err;510 int err;
511 511
512 err = ovl_inode_lock(inode);512 err = ovl_inode_lock_interruptible(inode);
513 if (!err && ovl_already_copied_up_locked(dentry, flags)) {513 if (!err && ovl_already_copied_up_locked(dentry, flags)) {
514 err = 1; /* Already copied up */514 err = 1; /* Already copied up */
515 ovl_inode_unlock(inode);515 ovl_inode_unlock(inode);
@@ -764,7 +764,7 @@ int ovl_nlink_start(struct dentry *dentry) · 248 unmodified lines
764 return err;764 return err;
765 }765 }
766 766
767 err = ovl_inode_lock(inode);767 err = ovl_inode_lock_interruptible(inode);
768 if (err)768 if (err)
769 return err;769 return err;
770 770
include/crypto/curve25519.h+4−2
@@ -33,7 +33,8 @@ bool __must_check curve25519(u8 mypublic[CURVE25519_KEY_SIZE], · 32 unmodified lines
33 const u8 secret[CURVE25519_KEY_SIZE],33 const u8 secret[CURVE25519_KEY_SIZE],
34 const u8 basepoint[CURVE25519_KEY_SIZE])34 const u8 basepoint[CURVE25519_KEY_SIZE])
35{35{
36 if (IS_ENABLED(CONFIG_CRYPTO_ARCH_HAVE_LIB_CURVE25519))36 if (IS_ENABLED(CONFIG_CRYPTO_ARCH_HAVE_LIB_CURVE25519) &&
37 (!IS_ENABLED(CONFIG_CRYPTO_CURVE25519_X86) || IS_ENABLED(CONFIG_AS_ADX)))
37 curve25519_arch(mypublic, secret, basepoint);38 curve25519_arch(mypublic, secret, basepoint);
38 else39 else
39 curve25519_generic(mypublic, secret, basepoint);40 curve25519_generic(mypublic, secret, basepoint);
@@ -49,7 +50,8 @@ __must_check curve25519_generate_public(u8 pub[CURVE25519_KEY_SIZE], · 9 unmodified lines
49 CURVE25519_KEY_SIZE)))50 CURVE25519_KEY_SIZE)))
50 return false;51 return false;
51 52
52 if (IS_ENABLED(CONFIG_CRYPTO_ARCH_HAVE_LIB_CURVE25519))53 if (IS_ENABLED(CONFIG_CRYPTO_ARCH_HAVE_LIB_CURVE25519) &&
54 (!IS_ENABLED(CONFIG_CRYPTO_CURVE25519_X86) || IS_ENABLED(CONFIG_AS_ADX)))
53 curve25519_base_arch(pub, secret);55 curve25519_base_arch(pub, secret);
54 else56 else
55 curve25519_generic(pub, secret, curve25519_base_point);57 curve25519_generic(pub, secret, curve25519_base_point);
include/drm/drm_dp_mst_helper.h+2−2
@@ -81,7 +81,7 @@ struct drm_dp_vcpi { · 80 unmodified lines
81 * &drm_dp_mst_topology_mgr.base.lock.81 * &drm_dp_mst_topology_mgr.base.lock.
82 * @num_sdp_stream_sinks: Number of stream sinks. Protected by82 * @num_sdp_stream_sinks: Number of stream sinks. Protected by
83 * &drm_dp_mst_topology_mgr.base.lock.83 * &drm_dp_mst_topology_mgr.base.lock.
84 * @available_pbn: Available bandwidth for this port. Protected by84 * @full_pbn: Max possible bandwidth for this port. Protected by
85 * &drm_dp_mst_topology_mgr.base.lock.85 * &drm_dp_mst_topology_mgr.base.lock.
86 * @next: link to next port on this branch device86 * @next: link to next port on this branch device
87 * @aux: i2c aux transport to talk to device connected to this port, protected87 * @aux: i2c aux transport to talk to device connected to this port, protected
@@ -126,7 +126,7 @@ struct drm_dp_mst_port { · 38 unmodified lines
126 u8 dpcd_rev;126 u8 dpcd_rev;
127 u8 num_sdp_streams;127 u8 num_sdp_streams;
128 u8 num_sdp_stream_sinks;128 u8 num_sdp_stream_sinks;
129 uint16_t available_pbn;129 uint16_t full_pbn;
130 struct list_head next;130 struct list_head next;
131 /**131 /**
132 * @mstb: the branch device connected to this port, if there is one.132 * @mstb: the branch device connected to this port, if there is one.
include/dt-bindings/clock/imx8mn-clock.h+2−2
@@ -122,8 +122,8 @@ · 121 unmodified lines
122#define IMX8MN_CLK_I2C1 105122#define IMX8MN_CLK_I2C1 105
123#define IMX8MN_CLK_I2C2 106123#define IMX8MN_CLK_I2C2 106
124#define IMX8MN_CLK_I2C3 107124#define IMX8MN_CLK_I2C3 107
125#define IMX8MN_CLK_I2C4 118125#define IMX8MN_CLK_I2C4 108
126#define IMX8MN_CLK_UART1 119126#define IMX8MN_CLK_UART1 109
127#define IMX8MN_CLK_UART2 110127#define IMX8MN_CLK_UART2 110
128#define IMX8MN_CLK_UART3 111128#define IMX8MN_CLK_UART3 111
129#define IMX8MN_CLK_UART4 112129#define IMX8MN_CLK_UART4 112
include/linux/cgroup.h+1−0
@@ -62,6 +62,7 @@ struct css_task_iter { · 61 unmodified lines
62 struct list_head *mg_tasks_head;62 struct list_head *mg_tasks_head;
63 struct list_head *dying_tasks_head;63 struct list_head *dying_tasks_head;
64 64
65 struct list_head *cur_tasks_head;
65 struct css_set *cur_cset;66 struct css_set *cur_cset;
66 struct css_set *cur_dcset;67 struct css_set *cur_dcset;
67 struct task_struct *cur_task;68 struct task_struct *cur_task;
include/linux/dmar.h+9−5
@@ -69,19 +69,23 @@ struct dmar_pci_notify_info { · 68 unmodified lines
69extern struct rw_semaphore dmar_global_lock;69extern struct rw_semaphore dmar_global_lock;
70extern struct list_head dmar_drhd_units;70extern struct list_head dmar_drhd_units;
71 71
72#define for_each_drhd_unit(drhd) \72#define for_each_drhd_unit(drhd) \
73 list_for_each_entry_rcu(drhd, &dmar_drhd_units, list)73 list_for_each_entry_rcu(drhd, &dmar_drhd_units, list, \
74 dmar_rcu_check())
74 75
75#define for_each_active_drhd_unit(drhd) \76#define for_each_active_drhd_unit(drhd) \
76 list_for_each_entry_rcu(drhd, &dmar_drhd_units, list) \77 list_for_each_entry_rcu(drhd, &dmar_drhd_units, list, \
78 dmar_rcu_check()) \
77 if (drhd->ignored) {} else79 if (drhd->ignored) {} else
78 80
79#define for_each_active_iommu(i, drhd) \81#define for_each_active_iommu(i, drhd) \
80 list_for_each_entry_rcu(drhd, &dmar_drhd_units, list) \82 list_for_each_entry_rcu(drhd, &dmar_drhd_units, list, \
83 dmar_rcu_check()) \
81 if (i=drhd->iommu, drhd->ignored) {} else84 if (i=drhd->iommu, drhd->ignored) {} else
82 85
83#define for_each_iommu(i, drhd) \86#define for_each_iommu(i, drhd) \
84 list_for_each_entry_rcu(drhd, &dmar_drhd_units, list) \87 list_for_each_entry_rcu(drhd, &dmar_drhd_units, list, \
88 dmar_rcu_check()) \
85 if (i=drhd->iommu, 0) {} else 89 if (i=drhd->iommu, 0) {} else
86 90
87static inline bool dmar_rcu_check(void)91static inline bool dmar_rcu_check(void)
include/linux/file.h+1−0
@@ -85,6 +85,7 @@ extern int f_dupfd(unsigned int from, struct file *file, unsigned flags); · 84 unmodified lines
85extern int replace_fd(unsigned fd, struct file *file, unsigned flags);85extern int replace_fd(unsigned fd, struct file *file, unsigned flags);
86extern void set_close_on_exec(unsigned int fd, int flag);86extern void set_close_on_exec(unsigned int fd, int flag);
87extern bool get_close_on_exec(unsigned int fd);87extern bool get_close_on_exec(unsigned int fd);
88extern int __get_unused_fd_flags(unsigned flags, unsigned long nofile);
88extern int get_unused_fd_flags(unsigned flags);89extern int get_unused_fd_flags(unsigned flags);
89extern void put_unused_fd(unsigned int fd);90extern void put_unused_fd(unsigned int fd);
90 91
include/linux/fs.h+1−0
@@ -698,6 +698,7 @@ struct inode { · 697 unmodified lines
698 struct rcu_head i_rcu;698 struct rcu_head i_rcu;
699 };699 };
700 atomic64_t i_version;700 atomic64_t i_version;
701 atomic64_t i_sequence; /* see futex */
701 atomic_t i_count;702 atomic_t i_count;
702 atomic_t i_dio_count;703 atomic_t i_dio_count;
703 atomic_t i_writecount;704 atomic_t i_writecount;
include/linux/futex.h+10−7
@@ -31,23 +31,26 @@ struct task_struct; · 30 unmodified lines
31 31
32union futex_key {32union futex_key {
33 struct {33 struct {
34 u64 i_seq;
34 unsigned long pgoff;35 unsigned long pgoff;
35 struct inode *inode;36 unsigned int offset;
36 int offset;
37 } shared;37 } shared;
38 struct {38 struct {
39 union {
40 struct mm_struct *mm;
41 u64 __tmp;
42 };
39 unsigned long address;43 unsigned long address;
40 struct mm_struct *mm;44 unsigned int offset;
41 int offset;
42 } private;45 } private;
43 struct {46 struct {
47 u64 ptr;
44 unsigned long word;48 unsigned long word;
45 void *ptr;49 unsigned int offset;
46 int offset;
47 } both;50 } both;
48};51};
49 52
50#define FUTEX_KEY_INIT (union futex_key) { .both = { .ptr = NULL } }53#define FUTEX_KEY_INIT (union futex_key) { .both = { .ptr = 0ULL } }
51 54
52#ifdef CONFIG_FUTEX55#ifdef CONFIG_FUTEX
53enum {56enum {
include/linux/genhd.h+1−12
@@ -245,18 +245,6 @@ static inline bool disk_part_scan_enabled(struct gendisk *disk) · 244 unmodified lines
245 !(disk->flags & GENHD_FL_NO_PART_SCAN);245 !(disk->flags & GENHD_FL_NO_PART_SCAN);
246}246}
247 247
248static inline bool disk_has_partitions(struct gendisk *disk)
249{
250 bool ret = false;
251
252 rcu_read_lock();
253 if (rcu_dereference(disk->part_tbl)->len > 1)
254 ret = true;
255 rcu_read_unlock();
256
257 return ret;
258}
259
260static inline dev_t disk_devt(struct gendisk *disk)248static inline dev_t disk_devt(struct gendisk *disk)
261{249{
262 return MKDEV(disk->major, disk->first_minor);250 return MKDEV(disk->major, disk->first_minor);
@@ -298,6 +286,7 @@ extern void disk_part_iter_exit(struct disk_part_iter *piter); · 35 unmodified lines
298 286
299extern struct hd_struct *disk_map_sector_rcu(struct gendisk *disk,287extern struct hd_struct *disk_map_sector_rcu(struct gendisk *disk,
300 sector_t sector);288 sector_t sector);
289bool disk_has_partitions(struct gendisk *disk);
301 290
302/*291/*
303 * Macros to operate on percpu disk statistics:292 * Macros to operate on percpu disk statistics:
include/linux/inet_diag.h+12−6
@@ -2,15 +2,10 @@ · 1 unmodified line
2#ifndef _INET_DIAG_H_2#ifndef _INET_DIAG_H_
3#define _INET_DIAG_H_ 13#define _INET_DIAG_H_ 1
4 4
5#include <net/netlink.h>
5#include <uapi/linux/inet_diag.h>6#include <uapi/linux/inet_diag.h>
6 7
7struct net;
8struct sock;
9struct inet_hashinfo;8struct inet_hashinfo;
10struct nlattr;
11struct nlmsghdr;
12struct sk_buff;
13struct netlink_callback;
14 9
15struct inet_diag_handler {10struct inet_diag_handler {
16 void (*dump)(struct sk_buff *skb,11 void (*dump)(struct sk_buff *skb,
@@ -62,6 +57,17 @@ int inet_diag_bc_sk(const struct nlattr *_bc, struct sock *sk); · 45 unmodified lines
62 57
63void inet_diag_msg_common_fill(struct inet_diag_msg *r, struct sock *sk);58void inet_diag_msg_common_fill(struct inet_diag_msg *r, struct sock *sk);
64 59
60static inline size_t inet_diag_msg_attrs_size(void)
61{
62 return nla_total_size(1) /* INET_DIAG_SHUTDOWN */
63 + nla_total_size(1) /* INET_DIAG_TOS */
64#if IS_ENABLED(CONFIG_IPV6)
65 + nla_total_size(1) /* INET_DIAG_TCLASS */
66 + nla_total_size(1) /* INET_DIAG_SKV6ONLY */
67#endif
68 + nla_total_size(4) /* INET_DIAG_MARK */
69 + nla_total_size(4); /* INET_DIAG_CLASS_ID */
70}
65int inet_diag_msg_attrs_fill(struct sock *sk, struct sk_buff *skb,71int inet_diag_msg_attrs_fill(struct sock *sk, struct sk_buff *skb,
66 struct inet_diag_msg *r, int ext,72 struct inet_diag_msg *r, int ext,
67 struct user_namespace *user_ns, bool net_admin);73 struct user_namespace *user_ns, bool net_admin);
include/linux/intel-iommu.h+2−0
@@ -123,6 +123,8 @@ · 122 unmodified lines
123 123
124#define dmar_readq(a) readq(a)124#define dmar_readq(a) readq(a)
125#define dmar_writeq(a,v) writeq(v,a)125#define dmar_writeq(a,v) writeq(v,a)
126#define dmar_readl(a) readl(a)
127#define dmar_writel(a, v) writel(v, a)
126 128
127#define DMAR_VER_MAJOR(v) (((v) & 0xf0) >> 4)129#define DMAR_VER_MAJOR(v) (((v) & 0xf0) >> 4)
128#define DMAR_VER_MINOR(v) ((v) & 0x0f)130#define DMAR_VER_MINOR(v) ((v) & 0x0f)
include/linux/mmc/host.h+1−0
@@ -333,6 +333,7 @@ struct mmc_host { · 332 unmodified lines
333 MMC_CAP_UHS_SDR50 | MMC_CAP_UHS_SDR104 | \333 MMC_CAP_UHS_SDR50 | MMC_CAP_UHS_SDR104 | \
334 MMC_CAP_UHS_DDR50)334 MMC_CAP_UHS_DDR50)
335#define MMC_CAP_SYNC_RUNTIME_PM (1 << 21) /* Synced runtime PM suspends. */335#define MMC_CAP_SYNC_RUNTIME_PM (1 << 21) /* Synced runtime PM suspends. */
336#define MMC_CAP_NEED_RSP_BUSY (1 << 22) /* Commands with R1B can't use R1. */
336#define MMC_CAP_DRIVER_TYPE_A (1 << 23) /* Host supports Driver Type A */337#define MMC_CAP_DRIVER_TYPE_A (1 << 23) /* Host supports Driver Type A */
337#define MMC_CAP_DRIVER_TYPE_C (1 << 24) /* Host supports Driver Type C */338#define MMC_CAP_DRIVER_TYPE_C (1 << 24) /* Host supports Driver Type C */
338#define MMC_CAP_DRIVER_TYPE_D (1 << 25) /* Host supports Driver Type D */339#define MMC_CAP_DRIVER_TYPE_D (1 << 25) /* Host supports Driver Type D */
include/linux/of_clk.h+4−4
@@ -11,17 +11,17 @@ struct of_device_id; · 10 unmodified lines
11 11
12#if defined(CONFIG_COMMON_CLK) && defined(CONFIG_OF)12#if defined(CONFIG_COMMON_CLK) && defined(CONFIG_OF)
13 13
14unsigned int of_clk_get_parent_count(struct device_node *np);14unsigned int of_clk_get_parent_count(const struct device_node *np);
15const char *of_clk_get_parent_name(struct device_node *np, int index);15const char *of_clk_get_parent_name(const struct device_node *np, int index);
16void of_clk_init(const struct of_device_id *matches);16void of_clk_init(const struct of_device_id *matches);
17 17
18#else /* !CONFIG_COMMON_CLK || !CONFIG_OF */18#else /* !CONFIG_COMMON_CLK || !CONFIG_OF */
19 19
20static inline unsigned int of_clk_get_parent_count(struct device_node *np)20static inline unsigned int of_clk_get_parent_count(const struct device_node *np)
21{21{
22 return 0;22 return 0;
23}23}
24static inline const char *of_clk_get_parent_name(struct device_node *np,24static inline const char *of_clk_get_parent_name(const struct device_node *np,
25 int index)25 int index)
26{26{
27 return NULL;27 return NULL;
include/linux/page-flags.h+1−1
@@ -311,7 +311,7 @@ static inline int TestClearPage##uname(struct page *page) { return 0; } · 310 unmodified lines
311 311
312__PAGEFLAG(Locked, locked, PF_NO_TAIL)312__PAGEFLAG(Locked, locked, PF_NO_TAIL)
313PAGEFLAG(Waiters, waiters, PF_ONLY_HEAD) __CLEARPAGEFLAG(Waiters, waiters, PF_ONLY_HEAD)313PAGEFLAG(Waiters, waiters, PF_ONLY_HEAD) __CLEARPAGEFLAG(Waiters, waiters, PF_ONLY_HEAD)
314PAGEFLAG(Error, error, PF_NO_COMPOUND) TESTCLEARFLAG(Error, error, PF_NO_COMPOUND)314PAGEFLAG(Error, error, PF_NO_TAIL) TESTCLEARFLAG(Error, error, PF_NO_TAIL)
315PAGEFLAG(Referenced, referenced, PF_HEAD)315PAGEFLAG(Referenced, referenced, PF_HEAD)
316 TESTCLEARFLAG(Referenced, referenced, PF_HEAD)316 TESTCLEARFLAG(Referenced, referenced, PF_HEAD)
317 __SETPAGEFLAG(Referenced, referenced, PF_HEAD)317 __SETPAGEFLAG(Referenced, referenced, PF_HEAD)
include/linux/phy.h+3−0
@@ -357,6 +357,7 @@ struct macsec_ops; · 356 unmodified lines
357 * is_gigabit_capable: Set to true if PHY supports 1000Mbps357 * is_gigabit_capable: Set to true if PHY supports 1000Mbps
358 * has_fixups: Set to true if this phy has fixups/quirks.358 * has_fixups: Set to true if this phy has fixups/quirks.
359 * suspended: Set to true if this phy has been suspended successfully.359 * suspended: Set to true if this phy has been suspended successfully.
360 * suspended_by_mdio_bus: Set to true if this phy was suspended by MDIO bus.
360 * sysfs_links: Internal boolean tracking sysfs symbolic links setup/removal.361 * sysfs_links: Internal boolean tracking sysfs symbolic links setup/removal.
361 * loopback_enabled: Set true if this phy has been loopbacked successfully.362 * loopback_enabled: Set true if this phy has been loopbacked successfully.
362 * state: state of the PHY for management purposes363 * state: state of the PHY for management purposes
@@ -396,6 +397,7 @@ struct phy_device { · 33 unmodified lines
396 unsigned is_gigabit_capable:1;397 unsigned is_gigabit_capable:1;
397 unsigned has_fixups:1;398 unsigned has_fixups:1;
398 unsigned suspended:1;399 unsigned suspended:1;
400 unsigned suspended_by_mdio_bus:1;
399 unsigned sysfs_links:1;401 unsigned sysfs_links:1;
400 unsigned loopback_enabled:1;402 unsigned loopback_enabled:1;
401 403
@@ -557,6 +559,7 @@ struct phy_driver { · 155 unmodified lines
557 /*559 /*
558 * Checks if the PHY generated an interrupt.560 * Checks if the PHY generated an interrupt.
559 * For multi-PHY devices with shared PHY interrupt pin561 * For multi-PHY devices with shared PHY interrupt pin
562 * Set interrupt bits have to be cleared.
560 */563 */
561 int (*did_interrupt)(struct phy_device *phydev);564 int (*did_interrupt)(struct phy_device *phydev);
562 565
include/linux/platform_device.h+1−1
@@ -24,7 +24,7 @@ struct platform_device { · 23 unmodified lines
24 int id;24 int id;
25 bool id_auto;25 bool id_auto;
26 struct device dev;26 struct device dev;
27 u64 dma_mask;27 u64 platform_dma_mask;
28 u32 num_resources;28 u32 num_resources;
29 struct resource *resource;29 struct resource *resource;
30 30
include/linux/rhashtable.h+1−1
@@ -972,9 +972,9 @@ static inline int rhashtable_lookup_insert_key( · 971 unmodified lines
972/**972/**
973 * rhashtable_lookup_get_insert_key - lookup and insert object into hash table973 * rhashtable_lookup_get_insert_key - lookup and insert object into hash table
974 * @ht: hash table974 * @ht: hash table
975 * @key: key
975 * @obj: pointer to hash head inside object976 * @obj: pointer to hash head inside object
976 * @params: hash table parameters977 * @params: hash table parameters
977 * @data: pointer to element data already in hashes
978 *978 *
979 * Just like rhashtable_lookup_insert_key(), but this function returns the979 * Just like rhashtable_lookup_insert_key(), but this function returns the
980 * object if it exists, NULL if it does not and the insertion was successful,980 * object if it exists, NULL if it does not and the insertion was successful,
include/linux/socket.h+2−1
@@ -401,7 +401,8 @@ extern int __sys_sendto(int fd, void __user *buff, size_t len, · 400 unmodified lines
401 int addr_len);401 int addr_len);
402extern int __sys_accept4_file(struct file *file, unsigned file_flags,402extern int __sys_accept4_file(struct file *file, unsigned file_flags,
403 struct sockaddr __user *upeer_sockaddr,403 struct sockaddr __user *upeer_sockaddr,
404 int __user *upeer_addrlen, int flags);404 int __user *upeer_addrlen, int flags,
405 unsigned long nofile);
405extern int __sys_accept4(int fd, struct sockaddr __user *upeer_sockaddr,406extern int __sys_accept4(int fd, struct sockaddr __user *upeer_sockaddr,
406 int __user *upeer_addrlen, int flags);407 int __user *upeer_addrlen, int flags);
407extern int __sys_socket(int family, int type, int protocol);408extern int __sys_socket(int family, int type, int protocol);
include/linux/vmalloc.h+3−2
@@ -141,8 +141,9 @@ extern int remap_vmalloc_range_partial(struct vm_area_struct *vma, · 140 unmodified lines
141 141
142extern int remap_vmalloc_range(struct vm_area_struct *vma, void *addr,142extern int remap_vmalloc_range(struct vm_area_struct *vma, void *addr,
143 unsigned long pgoff);143 unsigned long pgoff);
144void vmalloc_sync_all(void);144void vmalloc_sync_mappings(void);
145 145void vmalloc_sync_unmappings(void);
146
146/*147/*
147 * Lowlevel-APIs (not for driver use!)148 * Lowlevel-APIs (not for driver use!)
148 */149 */
include/linux/workqueue.h+16−0
@@ -487,6 +487,19 @@ extern void wq_worker_comm(char *buf, size_t size, struct task_struct *task); · 486 unmodified lines
487 *487 *
488 * We queue the work to the CPU on which it was submitted, but if the CPU dies488 * We queue the work to the CPU on which it was submitted, but if the CPU dies
489 * it can be processed by another CPU.489 * it can be processed by another CPU.
490 *
491 * Memory-ordering properties: If it returns %true, guarantees that all stores
492 * preceding the call to queue_work() in the program order will be visible from
493 * the CPU which will execute @work by the time such work executes, e.g.,
494 *
495 * { x is initially 0 }
496 *
497 * CPU0 CPU1
498 *
499 * WRITE_ONCE(x, 1); [ @work is being executed ]
500 * r0 = queue_work(wq, work); r1 = READ_ONCE(x);
501 *
502 * Forbids: r0 == true && r1 == 0
490 */503 */
491static inline bool queue_work(struct workqueue_struct *wq,504static inline bool queue_work(struct workqueue_struct *wq,
492 struct work_struct *work)505 struct work_struct *work)
@@ -546,6 +559,9 @@ static inline bool schedule_work_on(int cpu, struct work_struct *work) · 53 unmodified lines
546 * This puts a job in the kernel-global workqueue if it was not already559 * This puts a job in the kernel-global workqueue if it was not already
547 * queued and leaves it in the same position on the kernel-global560 * queued and leaves it in the same position on the kernel-global
548 * workqueue otherwise.561 * workqueue otherwise.
562 *
563 * Shares the same memory-ordering properties of queue_work(), cf. the
564 * DocBook header of queue_work().
549 */565 */
550static inline bool schedule_work(struct work_struct *work)566static inline bool schedule_work(struct work_struct *work)
551{567{
include/net/fib_rules.h+1−0
@@ -108,6 +108,7 @@ struct fib_rule_notifier_info { · 107 unmodified lines
108 [FRA_OIFNAME] = { .type = NLA_STRING, .len = IFNAMSIZ - 1 }, \108 [FRA_OIFNAME] = { .type = NLA_STRING, .len = IFNAMSIZ - 1 }, \
109 [FRA_PRIORITY] = { .type = NLA_U32 }, \109 [FRA_PRIORITY] = { .type = NLA_U32 }, \
110 [FRA_FWMARK] = { .type = NLA_U32 }, \110 [FRA_FWMARK] = { .type = NLA_U32 }, \
111 [FRA_TUN_ID] = { .type = NLA_U64 }, \
111 [FRA_FWMASK] = { .type = NLA_U32 }, \112 [FRA_FWMASK] = { .type = NLA_U32 }, \
112 [FRA_TABLE] = { .type = NLA_U32 }, \113 [FRA_TABLE] = { .type = NLA_U32 }, \
113 [FRA_SUPPRESS_PREFIXLEN] = { .type = NLA_U32 }, \114 [FRA_SUPPRESS_PREFIXLEN] = { .type = NLA_U32 }, \
include/soc/mscc/ocelot_dev.h+1−1
@@ -74,7 +74,7 @@ · 73 unmodified lines
74#define DEV_MAC_TAGS_CFG_TAG_ID_M GENMASK(31, 16)74#define DEV_MAC_TAGS_CFG_TAG_ID_M GENMASK(31, 16)
75#define DEV_MAC_TAGS_CFG_TAG_ID_X(x) (((x) & GENMASK(31, 16)) >> 16)75#define DEV_MAC_TAGS_CFG_TAG_ID_X(x) (((x) & GENMASK(31, 16)) >> 16)
76#define DEV_MAC_TAGS_CFG_VLAN_LEN_AWR_ENA BIT(2)76#define DEV_MAC_TAGS_CFG_VLAN_LEN_AWR_ENA BIT(2)
77#define DEV_MAC_TAGS_CFG_PB_ENA BIT(1)77#define DEV_MAC_TAGS_CFG_VLAN_DBL_AWR_ENA BIT(1)
78#define DEV_MAC_TAGS_CFG_VLAN_AWR_ENA BIT(0)78#define DEV_MAC_TAGS_CFG_VLAN_AWR_ENA BIT(0)
79 79
80#define DEV_MAC_ADV_CHK_CFG 0x2c80#define DEV_MAC_ADV_CHK_CFG 0x2c
include/uapi/linux/in.h+2−0
@@ -74,6 +74,8 @@ enum { · 73 unmodified lines
74#define IPPROTO_UDPLITE IPPROTO_UDPLITE74#define IPPROTO_UDPLITE IPPROTO_UDPLITE
75 IPPROTO_MPLS = 137, /* MPLS in IP (RFC 4023) */75 IPPROTO_MPLS = 137, /* MPLS in IP (RFC 4023) */
76#define IPPROTO_MPLS IPPROTO_MPLS76#define IPPROTO_MPLS IPPROTO_MPLS
77 IPPROTO_ETHERNET = 143, /* Ethernet-within-IPv6 Encapsulation */
78#define IPPROTO_ETHERNET IPPROTO_ETHERNET
77 IPPROTO_RAW = 255, /* Raw IP packets */79 IPPROTO_RAW = 255, /* Raw IP packets */
78#define IPPROTO_RAW IPPROTO_RAW80#define IPPROTO_RAW IPPROTO_RAW
79 IPPROTO_MPTCP = 262, /* Multipath TCP connection */81 IPPROTO_MPTCP = 262, /* Multipath TCP connection */
init/Kconfig+1−2
@@ -767,8 +767,7 @@ config ARCH_WANT_BATCHED_UNMAP_TLB_FLUSH · 766 unmodified lines
767 bool767 bool
768 768
769config CC_HAS_INT128769config CC_HAS_INT128
770 def_bool y770 def_bool !$(cc-option,$(m64-flag) -D__SIZEOF_INT128__=0) && 64BIT
771 depends on !$(cc-option,-D__SIZEOF_INT128__=0)
772 771
773#772#
774# For architectures that know their GCC __int128 support is sound773# For architectures that know their GCC __int128 support is sound
kernel/cgroup/cgroup-v1.c+2−1
@@ -471,6 +471,7 @@ static void *cgroup_pidlist_next(struct seq_file *s, void *v, loff_t *pos) · 470 unmodified lines
471 */471 */
472 p++;472 p++;
473 if (p >= end) {473 if (p >= end) {
474 (*pos)++;
474 return NULL;475 return NULL;
475 } else {476 } else {
476 *pos = *p;477 *pos = *p;
@@ -782,7 +783,7 @@ void cgroup1_release_agent(struct work_struct *work) · 305 unmodified lines
782 783
783 pathbuf = kmalloc(PATH_MAX, GFP_KERNEL);784 pathbuf = kmalloc(PATH_MAX, GFP_KERNEL);
784 agentbuf = kstrdup(cgrp->root->release_agent_path, GFP_KERNEL);785 agentbuf = kstrdup(cgrp->root->release_agent_path, GFP_KERNEL);
785 if (!pathbuf || !agentbuf)786 if (!pathbuf || !agentbuf || !strlen(agentbuf))
786 goto out;787 goto out;
787 788
788 spin_lock_irq(&css_set_lock);789 spin_lock_irq(&css_set_lock);
kernel/cgroup/cgroup.c+30−13
@@ -3542,21 +3542,21 @@ static int cpu_stat_show(struct seq_file *seq, void *v) · 3541 unmodified lines
3542static int cgroup_io_pressure_show(struct seq_file *seq, void *v)3542static int cgroup_io_pressure_show(struct seq_file *seq, void *v)
3543{3543{
3544 struct cgroup *cgrp = seq_css(seq)->cgroup;3544 struct cgroup *cgrp = seq_css(seq)->cgroup;
3545 struct psi_group *psi = cgroup_id(cgrp) == 1 ? &psi_system : &cgrp->psi;3545 struct psi_group *psi = cgroup_ino(cgrp) == 1 ? &psi_system : &cgrp->psi;
3546 3546
3547 return psi_show(seq, psi, PSI_IO);3547 return psi_show(seq, psi, PSI_IO);
3548}3548}
3549static int cgroup_memory_pressure_show(struct seq_file *seq, void *v)3549static int cgroup_memory_pressure_show(struct seq_file *seq, void *v)
3550{3550{
3551 struct cgroup *cgrp = seq_css(seq)->cgroup;3551 struct cgroup *cgrp = seq_css(seq)->cgroup;
3552 struct psi_group *psi = cgroup_id(cgrp) == 1 ? &psi_system : &cgrp->psi;3552 struct psi_group *psi = cgroup_ino(cgrp) == 1 ? &psi_system : &cgrp->psi;
3553 3553
3554 return psi_show(seq, psi, PSI_MEM);3554 return psi_show(seq, psi, PSI_MEM);
3555}3555}
3556static int cgroup_cpu_pressure_show(struct seq_file *seq, void *v)3556static int cgroup_cpu_pressure_show(struct seq_file *seq, void *v)
3557{3557{
3558 struct cgroup *cgrp = seq_css(seq)->cgroup;3558 struct cgroup *cgrp = seq_css(seq)->cgroup;
3559 struct psi_group *psi = cgroup_id(cgrp) == 1 ? &psi_system : &cgrp->psi;3559 struct psi_group *psi = cgroup_ino(cgrp) == 1 ? &psi_system : &cgrp->psi;
3560 3560
3561 return psi_show(seq, psi, PSI_CPU);3561 return psi_show(seq, psi, PSI_CPU);
3562}3562}
@@ -4400,12 +4400,16 @@ static void css_task_iter_advance_css_set(struct css_task_iter *it) · 837 unmodified lines
4400 }4400 }
4401 } while (!css_set_populated(cset) && list_empty(&cset->dying_tasks));4401 } while (!css_set_populated(cset) && list_empty(&cset->dying_tasks));
4402 4402
4403 if (!list_empty(&cset->tasks))4403 if (!list_empty(&cset->tasks)) {
4404 it->task_pos = cset->tasks.next;4404 it->task_pos = cset->tasks.next;
4405 else if (!list_empty(&cset->mg_tasks))4405 it->cur_tasks_head = &cset->tasks;
4406 } else if (!list_empty(&cset->mg_tasks)) {
4406 it->task_pos = cset->mg_tasks.next;4407 it->task_pos = cset->mg_tasks.next;
4407 else4408 it->cur_tasks_head = &cset->mg_tasks;
4409 } else {
4408 it->task_pos = cset->dying_tasks.next;4410 it->task_pos = cset->dying_tasks.next;
4411 it->cur_tasks_head = &cset->dying_tasks;
4412 }
4409 4413
4410 it->tasks_head = &cset->tasks;4414 it->tasks_head = &cset->tasks;
4411 it->mg_tasks_head = &cset->mg_tasks;4415 it->mg_tasks_head = &cset->mg_tasks;
@@ -4463,10 +4467,14 @@ repeat: · 51 unmodified lines
4463 else4467 else
4464 it->task_pos = it->task_pos->next;4468 it->task_pos = it->task_pos->next;
4465 4469
4466 if (it->task_pos == it->tasks_head)4470 if (it->task_pos == it->tasks_head) {
4467 it->task_pos = it->mg_tasks_head->next;4471 it->task_pos = it->mg_tasks_head->next;
4468 if (it->task_pos == it->mg_tasks_head)4472 it->cur_tasks_head = it->mg_tasks_head;
4473 }
4474 if (it->task_pos == it->mg_tasks_head) {
4469 it->task_pos = it->dying_tasks_head->next;4475 it->task_pos = it->dying_tasks_head->next;
4476 it->cur_tasks_head = it->dying_tasks_head;
4477 }
4470 if (it->task_pos == it->dying_tasks_head)4478 if (it->task_pos == it->dying_tasks_head)
4471 css_task_iter_advance_css_set(it);4479 css_task_iter_advance_css_set(it);
4472 } else {4480 } else {
@@ -4485,11 +4493,12 @@ repeat: · 12 unmodified lines
4485 goto repeat;4493 goto repeat;
4486 4494
4487 /* and dying leaders w/o live member threads */4495 /* and dying leaders w/o live member threads */
4488 if (!atomic_read(&task->signal->live))4496 if (it->cur_tasks_head == it->dying_tasks_head &&
4497 !atomic_read(&task->signal->live))
4489 goto repeat;4498 goto repeat;
4490 } else {4499 } else {
4491 /* skip all dying ones */4500 /* skip all dying ones */
4492 if (task->flags & PF_EXITING)4501 if (it->cur_tasks_head == it->dying_tasks_head)
4493 goto repeat;4502 goto repeat;
4494 }4503 }
4495}4504}
@@ -4595,6 +4604,9 @@ static void *cgroup_procs_next(struct seq_file *s, void *v, loff_t *pos) · 99 unmodified lines
4595 struct kernfs_open_file *of = s->private;4604 struct kernfs_open_file *of = s->private;
4596 struct css_task_iter *it = of->priv;4605 struct css_task_iter *it = of->priv;
4597 4606
4607 if (pos)
4608 (*pos)++;
4609
4598 return css_task_iter_next(it);4610 return css_task_iter_next(it);
4599}4611}
4600 4612
@@ -4610,7 +4622,7 @@ static void *__cgroup_procs_start(struct seq_file *s, loff_t *pos, · 9 unmodified lines
4610 * from position 0, so we can simply keep iterating on !0 *pos.4622 * from position 0, so we can simply keep iterating on !0 *pos.
4611 */4623 */
4612 if (!it) {4624 if (!it) {
4613 if (WARN_ON_ONCE((*pos)++))4625 if (WARN_ON_ONCE((*pos)))
4614 return ERR_PTR(-EINVAL);4626 return ERR_PTR(-EINVAL);
4615 4627
4616 it = kzalloc(sizeof(*it), GFP_KERNEL);4628 it = kzalloc(sizeof(*it), GFP_KERNEL);
@@ -4618,10 +4630,11 @@ static void *__cgroup_procs_start(struct seq_file *s, loff_t *pos, · 1 unmodified line
4618 return ERR_PTR(-ENOMEM);4630 return ERR_PTR(-ENOMEM);
4619 of->priv = it;4631 of->priv = it;
4620 css_task_iter_start(&cgrp->self, iter_flags, it);4632 css_task_iter_start(&cgrp->self, iter_flags, it);
4621 } else if (!(*pos)++) {4633 } else if (!(*pos)) {
4622 css_task_iter_end(it);4634 css_task_iter_end(it);
4623 css_task_iter_start(&cgrp->self, iter_flags, it);4635 css_task_iter_start(&cgrp->self, iter_flags, it);
4624 }4636 } else
4637 return it->cur_task;
4625 4638
4626 return cgroup_procs_next(s, NULL, NULL);4639 return cgroup_procs_next(s, NULL, NULL);
4627}4640}
@@ -6258,6 +6271,10 @@ void cgroup_sk_alloc(struct sock_cgroup_data *skcd) · 1630 unmodified lines
6258 return;6271 return;
6259 }6272 }
6260 6273
6274 /* Don't associate the sock with unrelated interrupted task's cgroup. */
6275 if (in_interrupt())
6276 return;
6277
6261 rcu_read_lock();6278 rcu_read_lock();
6262 6279
6263 while (true) {6280 while (true) {
kernel/futex.c+55−38
@@ -385,9 +385,9 @@ static inline int hb_waiters_pending(struct futex_hash_bucket *hb) · 384 unmodified lines
385 */385 */
386static struct futex_hash_bucket *hash_futex(union futex_key *key)386static struct futex_hash_bucket *hash_futex(union futex_key *key)
387{387{
388 u32 hash = jhash2((u32*)&key->both.word,388 u32 hash = jhash2((u32 *)key, offsetof(typeof(*key), both.offset) / 4,
389 (sizeof(key->both.word)+sizeof(key->both.ptr))/4,
390 key->both.offset);389 key->both.offset);
390
391 return &futex_queues[hash & (futex_hashsize - 1)];391 return &futex_queues[hash & (futex_hashsize - 1)];
392}392}
393 393
@@ -429,7 +429,7 @@ static void get_futex_key_refs(union futex_key *key) · 35 unmodified lines
429 429
430 switch (key->both.offset & (FUT_OFF_INODE|FUT_OFF_MMSHARED)) {430 switch (key->both.offset & (FUT_OFF_INODE|FUT_OFF_MMSHARED)) {
431 case FUT_OFF_INODE:431 case FUT_OFF_INODE:
432 ihold(key->shared.inode); /* implies smp_mb(); (B) */432 smp_mb(); /* explicit smp_mb(); (B) */
433 break;433 break;
434 case FUT_OFF_MMSHARED:434 case FUT_OFF_MMSHARED:
435 futex_get_mm(key); /* implies smp_mb(); (B) */435 futex_get_mm(key); /* implies smp_mb(); (B) */
@@ -463,7 +463,6 @@ static void drop_futex_key_refs(union futex_key *key) · 27 unmodified lines
463 463
464 switch (key->both.offset & (FUT_OFF_INODE|FUT_OFF_MMSHARED)) {464 switch (key->both.offset & (FUT_OFF_INODE|FUT_OFF_MMSHARED)) {
465 case FUT_OFF_INODE:465 case FUT_OFF_INODE:
466 iput(key->shared.inode);
467 break;466 break;
468 case FUT_OFF_MMSHARED:467 case FUT_OFF_MMSHARED:
469 mmdrop(key->private.mm);468 mmdrop(key->private.mm);
@@ -505,6 +504,46 @@ futex_setup_timer(ktime_t *time, struct hrtimer_sleeper *timeout, · 35 unmodified lines
505 return timeout;504 return timeout;
506}505}
507 506
507/*
508 * Generate a machine wide unique identifier for this inode.
509 *
510 * This relies on u64 not wrapping in the life-time of the machine; which with
511 * 1ns resolution means almost 585 years.
512 *
513 * This further relies on the fact that a well formed program will not unmap
514 * the file while it has a (shared) futex waiting on it. This mapping will have
515 * a file reference which pins the mount and inode.
516 *
517 * If for some reason an inode gets evicted and read back in again, it will get
518 * a new sequence number and will _NOT_ match, even though it is the exact same
519 * file.
520 *
521 * It is important that match_futex() will never have a false-positive, esp.
522 * for PI futexes that can mess up the state. The above argues that false-negatives
523 * are only possible for malformed programs.
524 */
525static u64 get_inode_sequence_number(struct inode *inode)
526{
527 static atomic64_t i_seq;
528 u64 old;
529
530 /* Does the inode already have a sequence number? */
531 old = atomic64_read(&inode->i_sequence);
532 if (likely(old))
533 return old;
534
535 for (;;) {
536 u64 new = atomic64_add_return(1, &i_seq);
537 if (WARN_ON_ONCE(!new))
538 continue;
539
540 old = atomic64_cmpxchg_relaxed(&inode->i_sequence, 0, new);
541 if (old)
542 return old;
543 return new;
544 }
545}
546
508/**547/**
509 * get_futex_key() - Get parameters which are the keys for a futex548 * get_futex_key() - Get parameters which are the keys for a futex
510 * @uaddr: virtual address of the futex549 * @uaddr: virtual address of the futex
@@ -517,9 +556,15 @@ futex_setup_timer(ktime_t *time, struct hrtimer_sleeper *timeout, · 6 unmodified lines
517 *556 *
518 * The key words are stored in @key on success.557 * The key words are stored in @key on success.
519 *558 *
520 * For shared mappings, it's (page->index, file_inode(vma->vm_file),559 * For shared mappings (when @fshared), the key is:
521 * offset_within_page). For private mappings, it's (uaddr, current->mm).560 * ( inode->i_sequence, page->index, offset_within_page )
522 * We can usually work out the index without swapping in the page.561 * [ also see get_inode_sequence_number() ]
562 *
563 * For private mappings (or when !@fshared), the key is:
564 * ( current->mm, address, 0 )
565 *
566 * This allows (cross process, where applicable) identification of the futex
567 * without keeping the page pinned for the duration of the FUTEX_WAIT.
523 *568 *
524 * lock_page() might sleep, the caller should not hold a spinlock.569 * lock_page() might sleep, the caller should not hold a spinlock.
525 */570 */
@@ -659,8 +704,6 @@ again: · 133 unmodified lines
659 key->private.mm = mm;704 key->private.mm = mm;
660 key->private.address = address;705 key->private.address = address;
661 706
662 get_futex_key_refs(key); /* implies smp_mb(); (B) */
663
664 } else {707 } else {
665 struct inode *inode;708 struct inode *inode;
666 709
@@ -692,40 +735,14 @@ again: · 25 unmodified lines
692 goto again;735 goto again;
693 }736 }
694 737
695 /*
696 * Take a reference unless it is about to be freed. Previously
697 * this reference was taken by ihold under the page lock
698 * pinning the inode in place so i_lock was unnecessary. The
699 * only way for this check to fail is if the inode was
700 * truncated in parallel which is almost certainly an
701 * application bug. In such a case, just retry.
702 *
703 * We are not calling into get_futex_key_refs() in file-backed
704 * cases, therefore a successful atomic_inc return below will
705 * guarantee that get_futex_key() will still imply smp_mb(); (B).
706 */
707 if (!atomic_inc_not_zero(&inode->i_count)) {
708 rcu_read_unlock();
709 put_page(page);
710
711 goto again;
712 }
713
714 /* Should be impossible but lets be paranoid for now */
715 if (WARN_ON_ONCE(inode->i_mapping != mapping)) {
716 err = -EFAULT;
717 rcu_read_unlock();
718 iput(inode);
719
720 goto out;
721 }
722
723 key->both.offset |= FUT_OFF_INODE; /* inode-based key */738 key->both.offset |= FUT_OFF_INODE; /* inode-based key */
724 key->shared.inode = inode;739 key->shared.i_seq = get_inode_sequence_number(inode);
725 key->shared.pgoff = basepage_index(tail);740 key->shared.pgoff = basepage_index(tail);
726 rcu_read_unlock();741 rcu_read_unlock();
727 }742 }
728 743
744 get_futex_key_refs(key); /* implies smp_mb(); (B) */
745
729out:746out:
730 put_page(page);747 put_page(page);
731 return err;748 return err;
kernel/notifier.c+1−1
@@ -519,7 +519,7 @@ NOKPROBE_SYMBOL(notify_die); · 518 unmodified lines
519 519
520int register_die_notifier(struct notifier_block *nb)520int register_die_notifier(struct notifier_block *nb)
521{521{
522 vmalloc_sync_all();522 vmalloc_sync_mappings();
523 return atomic_notifier_chain_register(&die_chain, nb);523 return atomic_notifier_chain_register(&die_chain, nb);
524}524}
525EXPORT_SYMBOL_GPL(register_die_notifier);525EXPORT_SYMBOL_GPL(register_die_notifier);
kernel/pid.c+10−0
@@ -247,6 +247,16 @@ struct pid *alloc_pid(struct pid_namespace *ns, pid_t *set_tid, · 246 unmodified lines
247 tmp = tmp->parent;247 tmp = tmp->parent;
248 }248 }
249 249
250 /*
251 * ENOMEM is not the most obvious choice especially for the case
252 * where the child subreaper has already exited and the pid
253 * namespace denies the creation of any new processes. But ENOMEM
254 * is what we have exposed to userspace for a long time and it is
255 * documented behavior for pid namespaces. So we can't easily
256 * change it even if there were an error code better suited.
257 */
258 retval = -ENOMEM;
259
250 if (unlikely(is_child_reaper(pid))) {260 if (unlikely(is_child_reaper(pid))) {
251 if (pid_ns_prepare_proc(ns))261 if (pid_ns_prepare_proc(ns))
252 goto out_free;262 goto out_free;
kernel/sys.c+2−0
@@ -47,6 +47,7 @@ · 46 unmodified lines
47#include <linux/syscalls.h>47#include <linux/syscalls.h>
48#include <linux/kprobes.h>48#include <linux/kprobes.h>
49#include <linux/user_namespace.h>49#include <linux/user_namespace.h>
50#include <linux/time_namespace.h>
50#include <linux/binfmts.h>51#include <linux/binfmts.h>
51 52
52#include <linux/sched.h>53#include <linux/sched.h>
@@ -2546,6 +2547,7 @@ static int do_sysinfo(struct sysinfo *info) · 2493 unmodified lines
2546 memset(info, 0, sizeof(struct sysinfo));2547 memset(info, 0, sizeof(struct sysinfo));
2547 2548
2548 ktime_get_boottime_ts64(&tp);2549 ktime_get_boottime_ts64(&tp);
2550 timens_add_boottime(&tp);
2549 info->uptime = tp.tv_sec + (tp.tv_nsec ? 1 : 0);2551 info->uptime = tp.tv_sec + (tp.tv_nsec ? 1 : 0);
2550 2552
2551 get_avenrun(info->loads, 0, SI_LOAD_SHIFT - FSHIFT);2553 get_avenrun(info->loads, 0, SI_LOAD_SHIFT - FSHIFT);
kernel/trace/ftrace.c+2−0
@@ -1547,6 +1547,8 @@ static struct dyn_ftrace *lookup_rec(unsigned long start, unsigned long end) · 1546 unmodified lines
1547 rec = bsearch(&key, pg->records, pg->index,1547 rec = bsearch(&key, pg->records, pg->index,
1548 sizeof(struct dyn_ftrace),1548 sizeof(struct dyn_ftrace),
1549 ftrace_cmp_recs);1549 ftrace_cmp_recs);
1550 if (rec)
1551 break;
1550 }1552 }
1551 return rec;1553 return rec;
1552}1554}
kernel/workqueue.c+8−6
@@ -1411,14 +1411,16 @@ static void __queue_work(int cpu, struct workqueue_struct *wq, · 1410 unmodified lines
1411 return;1411 return;
1412 rcu_read_lock();1412 rcu_read_lock();
1413retry:1413retry:
1414 if (req_cpu == WORK_CPU_UNBOUND)
1415 cpu = wq_select_unbound_cpu(raw_smp_processor_id());
1416
1417 /* pwq which will be used unless @work is executing elsewhere */1414 /* pwq which will be used unless @work is executing elsewhere */
1418 if (!(wq->flags & WQ_UNBOUND))1415 if (wq->flags & WQ_UNBOUND) {
1419 pwq = per_cpu_ptr(wq->cpu_pwqs, cpu);1416 if (req_cpu == WORK_CPU_UNBOUND)
1420 else1417 cpu = wq_select_unbound_cpu(raw_smp_processor_id());
1421 pwq = unbound_pwq_by_node(wq, cpu_to_node(cpu));1418 pwq = unbound_pwq_by_node(wq, cpu_to_node(cpu));
1419 } else {
1420 if (req_cpu == WORK_CPU_UNBOUND)
1421 cpu = raw_smp_processor_id();
1422 pwq = per_cpu_ptr(wq->cpu_pwqs, cpu);
1423 }
1422 1424
1423 /*1425 /*
1424 * If @work was previously on a different pool, it might still be1426 * If @work was previously on a different pool, it might still be
mm/madvise.c+9−3
@@ -335,12 +335,14 @@ static int madvise_cold_or_pageout_pte_range(pmd_t *pmd, · 334 unmodified lines
335 }335 }
336 336
337 page = pmd_page(orig_pmd);337 page = pmd_page(orig_pmd);
338
339 /* Do not interfere with other mappings of this page */
340 if (page_mapcount(page) != 1)
341 goto huge_unlock;
342
338 if (next - addr != HPAGE_PMD_SIZE) {343 if (next - addr != HPAGE_PMD_SIZE) {
339 int err;344 int err;
340 345
341 if (page_mapcount(page) != 1)
342 goto huge_unlock;
343
344 get_page(page);346 get_page(page);
345 spin_unlock(ptl);347 spin_unlock(ptl);
346 lock_page(page);348 lock_page(page);
@@ -426,6 +428,10 @@ regular_page: · 79 unmodified lines
426 continue;428 continue;
427 }429 }
428 430
431 /* Do not interfere with other mappings of this page */
432 if (page_mapcount(page) != 1)
433 continue;
434
429 VM_BUG_ON_PAGE(PageTransCompound(page), page);435 VM_BUG_ON_PAGE(PageTransCompound(page), page);
430 436
431 if (pte_young(ptent)) {437 if (pte_young(ptent)) {
mm/memcontrol.c+68−49
@@ -2297,28 +2297,41 @@ static void high_work_func(struct work_struct *work) · 2296 unmodified lines
2297 #define MEMCG_DELAY_SCALING_SHIFT 142297 #define MEMCG_DELAY_SCALING_SHIFT 14
2298 2298
2299/*2299/*
2300 * Scheduled by try_charge() to be executed from the userland return path2300 * Get the number of jiffies that we should penalise a mischievous cgroup which
2301 * and reclaims memory over the high limit.2301 * is exceeding its memory.high by checking both it and its ancestors.
2302 */2302 */
2303void mem_cgroup_handle_over_high(void)2303static unsigned long calculate_high_delay(struct mem_cgroup *memcg,
2304 unsigned int nr_pages)
2304{2305{
2305 unsigned long usage, high, clamped_high;2306 unsigned long penalty_jiffies;
2306 unsigned long pflags;2307 u64 max_overage = 0;
2307 unsigned long penalty_jiffies, overage;
2308 unsigned int nr_pages = current->memcg_nr_pages_over_high;
2309 struct mem_cgroup *memcg;
2310 2308
2311 if (likely(!nr_pages))2309 do {
2312 return;2310 unsigned long usage, high;
2311 u64 overage;
2313 2312
2314 memcg = get_mem_cgroup_from_mm(current->mm);2313 usage = page_counter_read(&memcg->memory);
2315 reclaim_high(memcg, nr_pages, GFP_KERNEL);2314 high = READ_ONCE(memcg->high);
2316 current->memcg_nr_pages_over_high = 0;2315
2316 /*
2317 * Prevent division by 0 in overage calculation by acting as if
2318 * it was a threshold of 1 page
2319 */
2320 high = max(high, 1UL);
2321
2322 overage = usage - high;
2323 overage <<= MEMCG_DELAY_PRECISION_SHIFT;
2324 overage = div64_u64(overage, high);
2325
2326 if (overage > max_overage)
2327 max_overage = overage;
2328 } while ((memcg = parent_mem_cgroup(memcg)) &&
2329 !mem_cgroup_is_root(memcg));
2330
2331 if (!max_overage)
2332 return 0;
2317 2333
2318 /*2334 /*
2319 * memory.high is breached and reclaim is unable to keep up. Throttle
2320 * allocators proactively to slow down excessive growth.
2321 *
2322 * We use overage compared to memory.high to calculate the number of2335 * We use overage compared to memory.high to calculate the number of
2323 * jiffies to sleep (penalty_jiffies). Ideally this value should be2336 * jiffies to sleep (penalty_jiffies). Ideally this value should be
2324 * fairly lenient on small overages, and increasingly harsh when the2337 * fairly lenient on small overages, and increasingly harsh when the
@@ -2326,24 +2339,9 @@ void mem_cgroup_handle_over_high(void) · 1 unmodified line
2326 * its crazy behaviour, so we exponentially increase the delay based on2339 * its crazy behaviour, so we exponentially increase the delay based on
2327 * overage amount.2340 * overage amount.
2328 */2341 */
2329 2342 penalty_jiffies = max_overage * max_overage * HZ;
2330 usage = page_counter_read(&memcg->memory);2343 penalty_jiffies >>= MEMCG_DELAY_PRECISION_SHIFT;
2331 high = READ_ONCE(memcg->high);2344 penalty_jiffies >>= MEMCG_DELAY_SCALING_SHIFT;
2332
2333 if (usage <= high)
2334 goto out;
2335
2336 /*
2337 * Prevent division by 0 in overage calculation by acting as if it was a
2338 * threshold of 1 page
2339 */
2340 clamped_high = max(high, 1UL);
2341
2342 overage = div_u64((u64)(usage - high) << MEMCG_DELAY_PRECISION_SHIFT,
2343 clamped_high);
2344
2345 penalty_jiffies = ((u64)overage * overage * HZ)
2346 >> (MEMCG_DELAY_PRECISION_SHIFT + MEMCG_DELAY_SCALING_SHIFT);
2347 2345
2348 /*2346 /*
2349 * Factor in the task's own contribution to the overage, such that four2347 * Factor in the task's own contribution to the overage, such that four
@@ -2360,7 +2358,32 @@ void mem_cgroup_handle_over_high(void) · 10 unmodified lines
2360 * application moving forwards and also permit diagnostics, albeit2358 * application moving forwards and also permit diagnostics, albeit
2361 * extremely slowly.2359 * extremely slowly.
2362 */2360 */
2363 penalty_jiffies = min(penalty_jiffies, MEMCG_MAX_HIGH_DELAY_JIFFIES);2361 return min(penalty_jiffies, MEMCG_MAX_HIGH_DELAY_JIFFIES);
2362}
2363
2364/*
2365 * Scheduled by try_charge() to be executed from the userland return path
2366 * and reclaims memory over the high limit.
2367 */
2368void mem_cgroup_handle_over_high(void)
2369{
2370 unsigned long penalty_jiffies;
2371 unsigned long pflags;
2372 unsigned int nr_pages = current->memcg_nr_pages_over_high;
2373 struct mem_cgroup *memcg;
2374
2375 if (likely(!nr_pages))
2376 return;
2377
2378 memcg = get_mem_cgroup_from_mm(current->mm);
2379 reclaim_high(memcg, nr_pages, GFP_KERNEL);
2380 current->memcg_nr_pages_over_high = 0;
2381
2382 /*
2383 * memory.high is breached and reclaim is unable to keep up. Throttle
2384 * allocators proactively to slow down excessive growth.
2385 */
2386 penalty_jiffies = calculate_high_delay(memcg, nr_pages);
2364 2387
2365 /*2388 /*
2366 * Don't sleep if the amount of jiffies this memcg owes us is so low2389 * Don't sleep if the amount of jiffies this memcg owes us is so low
@@ -4027,7 +4050,7 @@ static void __mem_cgroup_usage_unregister_event(struct mem_cgroup *memcg, · 1660 unmodified lines
4027 struct mem_cgroup_thresholds *thresholds;4050 struct mem_cgroup_thresholds *thresholds;
4028 struct mem_cgroup_threshold_ary *new;4051 struct mem_cgroup_threshold_ary *new;
4029 unsigned long usage;4052 unsigned long usage;
4030 int i, j, size;4053 int i, j, size, entries;
4031 4054
4032 mutex_lock(&memcg->thresholds_lock);4055 mutex_lock(&memcg->thresholds_lock);
4033 4056
@@ -4047,14 +4070,20 @@ static void __mem_cgroup_usage_unregister_event(struct mem_cgroup *memcg, · 13 unmodified lines
4047 __mem_cgroup_threshold(memcg, type == _MEMSWAP);4070 __mem_cgroup_threshold(memcg, type == _MEMSWAP);
4048 4071
4049 /* Calculate new number of threshold */4072 /* Calculate new number of threshold */
4050 size = 0;4073 size = entries = 0;
4051 for (i = 0; i < thresholds->primary->size; i++) {4074 for (i = 0; i < thresholds->primary->size; i++) {
4052 if (thresholds->primary->entries[i].eventfd != eventfd)4075 if (thresholds->primary->entries[i].eventfd != eventfd)
4053 size++;4076 size++;
4077 else
4078 entries++;
4054 }4079 }
4055 4080
4056 new = thresholds->spare;4081 new = thresholds->spare;
4057 4082
4083 /* If no items related to eventfd have been cleared, nothing to do */
4084 if (!entries)
4085 goto unlock;
4086
4058 /* Set thresholds array to NULL if we don't have thresholds */4087 /* Set thresholds array to NULL if we don't have thresholds */
4059 if (!size) {4088 if (!size) {
4060 kfree(new);4089 kfree(new);
@@ -6682,19 +6711,9 @@ void mem_cgroup_sk_alloc(struct sock *sk) · 2621 unmodified lines
6682 if (!mem_cgroup_sockets_enabled)6711 if (!mem_cgroup_sockets_enabled)
6683 return;6712 return;
6684 6713
6685 /*6714 /* Do not associate the sock with unrelated interrupted task's memcg. */
6686 * Socket cloning can throw us here with sk_memcg already6715 if (in_interrupt())
6687 * filled. It won't however, necessarily happen from
6688 * process context. So the test for root memcg given
6689 * the current task's memcg won't help us in this case.
6690 *
6691 * Respecting the original socket's memcg is a better
6692 * decision in this case.
6693 */
6694 if (sk->sk_memcg) {
6695 css_get(&sk->sk_memcg->css);
6696 return;6716 return;
6697 }
6698 6717
6699 rcu_read_lock();6718 rcu_read_lock();
6700 memcg = mem_cgroup_from_task(current);6719 memcg = mem_cgroup_from_task(current);
mm/mmu_notifier.c+18−9
@@ -307,7 +307,8 @@ static void mn_hlist_release(struct mmu_notifier_subscriptions *subscriptions, · 306 unmodified lines
307 * ->release returns.307 * ->release returns.
308 */308 */
309 id = srcu_read_lock(&srcu);309 id = srcu_read_lock(&srcu);
310 hlist_for_each_entry_rcu(subscription, &subscriptions->list, hlist)310 hlist_for_each_entry_rcu(subscription, &subscriptions->list, hlist,
311 srcu_read_lock_held(&srcu))
311 /*312 /*
312 * If ->release runs before mmu_notifier_unregister it must be313 * If ->release runs before mmu_notifier_unregister it must be
313 * handled, as it's the only way for the driver to flush all314 * handled, as it's the only way for the driver to flush all
@@ -370,7 +371,8 @@ int __mmu_notifier_clear_flush_young(struct mm_struct *mm, · 56 unmodified lines
370 371
371 id = srcu_read_lock(&srcu);372 id = srcu_read_lock(&srcu);
372 hlist_for_each_entry_rcu(subscription,373 hlist_for_each_entry_rcu(subscription,
373 &mm->notifier_subscriptions->list, hlist) {374 &mm->notifier_subscriptions->list, hlist,
375 srcu_read_lock_held(&srcu)) {
374 if (subscription->ops->clear_flush_young)376 if (subscription->ops->clear_flush_young)
375 young |= subscription->ops->clear_flush_young(377 young |= subscription->ops->clear_flush_young(
376 subscription, mm, start, end);378 subscription, mm, start, end);
@@ -389,7 +391,8 @@ int __mmu_notifier_clear_young(struct mm_struct *mm, · 12 unmodified lines
389 391
390 id = srcu_read_lock(&srcu);392 id = srcu_read_lock(&srcu);
391 hlist_for_each_entry_rcu(subscription,393 hlist_for_each_entry_rcu(subscription,
392 &mm->notifier_subscriptions->list, hlist) {394 &mm->notifier_subscriptions->list, hlist,
395 srcu_read_lock_held(&srcu)) {
393 if (subscription->ops->clear_young)396 if (subscription->ops->clear_young)
394 young |= subscription->ops->clear_young(subscription,397 young |= subscription->ops->clear_young(subscription,
395 mm, start, end);398 mm, start, end);
@@ -407,7 +410,8 @@ int __mmu_notifier_test_young(struct mm_struct *mm, · 11 unmodified lines
407 410
408 id = srcu_read_lock(&srcu);411 id = srcu_read_lock(&srcu);
409 hlist_for_each_entry_rcu(subscription,412 hlist_for_each_entry_rcu(subscription,
410 &mm->notifier_subscriptions->list, hlist) {413 &mm->notifier_subscriptions->list, hlist,
414 srcu_read_lock_held(&srcu)) {
411 if (subscription->ops->test_young) {415 if (subscription->ops->test_young) {
412 young = subscription->ops->test_young(subscription, mm,416 young = subscription->ops->test_young(subscription, mm,
413 address);417 address);
@@ -428,7 +432,8 @@ void __mmu_notifier_change_pte(struct mm_struct *mm, unsigned long address, · 14 unmodified lines
428 432
429 id = srcu_read_lock(&srcu);433 id = srcu_read_lock(&srcu);
430 hlist_for_each_entry_rcu(subscription,434 hlist_for_each_entry_rcu(subscription,
431 &mm->notifier_subscriptions->list, hlist) {435 &mm->notifier_subscriptions->list, hlist,
436 srcu_read_lock_held(&srcu)) {
432 if (subscription->ops->change_pte)437 if (subscription->ops->change_pte)
433 subscription->ops->change_pte(subscription, mm, address,438 subscription->ops->change_pte(subscription, mm, address,
434 pte);439 pte);
@@ -476,7 +481,8 @@ static int mn_hlist_invalidate_range_start( · 41 unmodified lines
476 int id;481 int id;
477 482
478 id = srcu_read_lock(&srcu);483 id = srcu_read_lock(&srcu);
479 hlist_for_each_entry_rcu(subscription, &subscriptions->list, hlist) {484 hlist_for_each_entry_rcu(subscription, &subscriptions->list, hlist,
485 srcu_read_lock_held(&srcu)) {
480 const struct mmu_notifier_ops *ops = subscription->ops;486 const struct mmu_notifier_ops *ops = subscription->ops;
481 487
482 if (ops->invalidate_range_start) {488 if (ops->invalidate_range_start) {
@@ -528,7 +534,8 @@ mn_hlist_invalidate_end(struct mmu_notifier_subscriptions *subscriptions, · 45 unmodified lines
528 int id;534 int id;
529 535
530 id = srcu_read_lock(&srcu);536 id = srcu_read_lock(&srcu);
531 hlist_for_each_entry_rcu(subscription, &subscriptions->list, hlist) {537 hlist_for_each_entry_rcu(subscription, &subscriptions->list, hlist,
538 srcu_read_lock_held(&srcu)) {
532 /*539 /*
533 * Call invalidate_range here too to avoid the need for the540 * Call invalidate_range here too to avoid the need for the
534 * subsystem of having to register an invalidate_range_end541 * subsystem of having to register an invalidate_range_end
@@ -582,7 +589,8 @@ void __mmu_notifier_invalidate_range(struct mm_struct *mm, · 47 unmodified lines
582 589
583 id = srcu_read_lock(&srcu);590 id = srcu_read_lock(&srcu);
584 hlist_for_each_entry_rcu(subscription,591 hlist_for_each_entry_rcu(subscription,
585 &mm->notifier_subscriptions->list, hlist) {592 &mm->notifier_subscriptions->list, hlist,
593 srcu_read_lock_held(&srcu)) {
586 if (subscription->ops->invalidate_range)594 if (subscription->ops->invalidate_range)
587 subscription->ops->invalidate_range(subscription, mm,595 subscription->ops->invalidate_range(subscription, mm,
588 start, end);596 start, end);
@@ -714,7 +722,8 @@ find_get_mmu_notifier(struct mm_struct *mm, const struct mmu_notifier_ops *ops) · 125 unmodified lines
714 722
715 spin_lock(&mm->notifier_subscriptions->lock);723 spin_lock(&mm->notifier_subscriptions->lock);
716 hlist_for_each_entry_rcu(subscription,724 hlist_for_each_entry_rcu(subscription,
717 &mm->notifier_subscriptions->list, hlist) {725 &mm->notifier_subscriptions->list, hlist,
726 lockdep_is_held(&mm->notifier_subscriptions->lock)) {
718 if (subscription->ops != ops)727 if (subscription->ops != ops)
719 continue;728 continue;
720 729
mm/nommu.c+7−3
@@ -370,10 +370,14 @@ void vm_unmap_aliases(void) · 369 unmodified lines
370EXPORT_SYMBOL_GPL(vm_unmap_aliases);370EXPORT_SYMBOL_GPL(vm_unmap_aliases);
371 371
372/*372/*
373 * Implement a stub for vmalloc_sync_all() if the architecture chose not to373 * Implement a stub for vmalloc_sync_[un]mapping() if the architecture
374 * have one.374 * chose not to have one.
375 */375 */
376void __weak vmalloc_sync_all(void)376void __weak vmalloc_sync_mappings(void)
377{
378}
379
380void __weak vmalloc_sync_unmappings(void)
377{381{
378}382}
379 383
mm/slub.c+30−11
@@ -1973,8 +1973,6 @@ static void *get_partial(struct kmem_cache *s, gfp_t flags, int node, · 1972 unmodified lines
1973 1973
1974 if (node == NUMA_NO_NODE)1974 if (node == NUMA_NO_NODE)
1975 searchnode = numa_mem_id();1975 searchnode = numa_mem_id();
1976 else if (!node_present_pages(node))
1977 searchnode = node_to_mem_node(node);
1978 1976
1979 object = get_partial_node(s, get_node(s, searchnode), c, flags);1977 object = get_partial_node(s, get_node(s, searchnode), c, flags);
1980 if (object || node != NUMA_NO_NODE)1978 if (object || node != NUMA_NO_NODE)
@@ -2563,17 +2561,27 @@ static void *___slab_alloc(struct kmem_cache *s, gfp_t gfpflags, int node, · 582 unmodified lines
2563 struct page *page;2561 struct page *page;
2564 2562
2565 page = c->page;2563 page = c->page;
2566 if (!page)2564 if (!page) {
2565 /*
2566 * if the node is not online or has no normal memory, just
2567 * ignore the node constraint
2568 */
2569 if (unlikely(node != NUMA_NO_NODE &&
2570 !node_state(node, N_NORMAL_MEMORY)))
2571 node = NUMA_NO_NODE;
2567 goto new_slab;2572 goto new_slab;
2573 }
2568redo:2574redo:
2569 2575
2570 if (unlikely(!node_match(page, node))) {2576 if (unlikely(!node_match(page, node))) {
2571 int searchnode = node;2577 /*
2572 2578 * same as above but node_match() being false already
2573 if (node != NUMA_NO_NODE && !node_present_pages(node))2579 * implies node != NUMA_NO_NODE
2574 searchnode = node_to_mem_node(node);2580 */
2575 2581 if (!node_state(node, N_NORMAL_MEMORY)) {
2576 if (unlikely(!node_match(page, searchnode))) {2582 node = NUMA_NO_NODE;
2583 goto redo;
2584 } else {
2577 stat(s, ALLOC_NODE_MISMATCH);2585 stat(s, ALLOC_NODE_MISMATCH);
2578 deactivate_slab(s, page, c->freelist, c);2586 deactivate_slab(s, page, c->freelist, c);
2579 goto new_slab;2587 goto new_slab;
@@ -2997,11 +3005,13 @@ redo: · 417 unmodified lines
2997 barrier();3005 barrier();
2998 3006
2999 if (likely(page == c->page)) {3007 if (likely(page == c->page)) {
3000 set_freepointer(s, tail_obj, c->freelist);3008 void **freelist = READ_ONCE(c->freelist);
3009
3010 set_freepointer(s, tail_obj, freelist);
3001 3011
3002 if (unlikely(!this_cpu_cmpxchg_double(3012 if (unlikely(!this_cpu_cmpxchg_double(
3003 s->cpu_slab->freelist, s->cpu_slab->tid,3013 s->cpu_slab->freelist, s->cpu_slab->tid,
3004 c->freelist, tid,3014 freelist, tid,
3005 head, next_tid(tid)))) {3015 head, next_tid(tid)))) {
3006 3016
3007 note_cmpxchg_failure("slab_free", s, tid);3017 note_cmpxchg_failure("slab_free", s, tid);
@@ -3174,6 +3184,15 @@ int kmem_cache_alloc_bulk(struct kmem_cache *s, gfp_t flags, size_t size, · 166 unmodified lines
3174 void *object = c->freelist;3184 void *object = c->freelist;
3175 3185
3176 if (unlikely(!object)) {3186 if (unlikely(!object)) {
3187 /*
3188 * We may have removed an object from c->freelist using
3189 * the fastpath in the previous iteration; in that case,
3190 * c->tid has not been bumped yet.
3191 * Since ___slab_alloc() may reenable interrupts while
3192 * allocating memory, we should bump c->tid now.
3193 */
3194 c->tid = next_tid(c->tid);
3195
3177 /*3196 /*
3178 * Invoking slow path likely have side-effect3197 * Invoking slow path likely have side-effect
3179 * of re-populating per CPU c->freelist3198 * of re-populating per CPU c->freelist
mm/sparse.c+6−2
@@ -734,6 +734,7 @@ static void section_deactivate(unsigned long pfn, unsigned long nr_pages, · 733 unmodified lines
734 struct mem_section *ms = __pfn_to_section(pfn);734 struct mem_section *ms = __pfn_to_section(pfn);
735 bool section_is_early = early_section(ms);735 bool section_is_early = early_section(ms);
736 struct page *memmap = NULL;736 struct page *memmap = NULL;
737 bool empty;
737 unsigned long *subsection_map = ms->usage738 unsigned long *subsection_map = ms->usage
738 ? &ms->usage->subsection_map[0] : NULL;739 ? &ms->usage->subsection_map[0] : NULL;
739 740
@@ -764,7 +765,8 @@ static void section_deactivate(unsigned long pfn, unsigned long nr_pages, · 24 unmodified lines
764 * For 2/ and 3/ the SPARSEMEM_VMEMMAP={y,n} cases are unified765 * For 2/ and 3/ the SPARSEMEM_VMEMMAP={y,n} cases are unified
765 */766 */
766 bitmap_xor(subsection_map, map, subsection_map, SUBSECTIONS_PER_SECTION);767 bitmap_xor(subsection_map, map, subsection_map, SUBSECTIONS_PER_SECTION);
767 if (bitmap_empty(subsection_map, SUBSECTIONS_PER_SECTION)) {768 empty = bitmap_empty(subsection_map, SUBSECTIONS_PER_SECTION);
769 if (empty) {
768 unsigned long section_nr = pfn_to_section_nr(pfn);770 unsigned long section_nr = pfn_to_section_nr(pfn);
769 771
770 /*772 /*
@@ -779,13 +781,15 @@ static void section_deactivate(unsigned long pfn, unsigned long nr_pages, · 8 unmodified lines
779 ms->usage = NULL;781 ms->usage = NULL;
780 }782 }
781 memmap = sparse_decode_mem_map(ms->section_mem_map, section_nr);783 memmap = sparse_decode_mem_map(ms->section_mem_map, section_nr);
782 ms->section_mem_map = (unsigned long)NULL;
783 }784 }
784 785
785 if (section_is_early && memmap)786 if (section_is_early && memmap)
786 free_map_bootmem(memmap);787 free_map_bootmem(memmap);
787 else788 else
788 depopulate_section_memmap(pfn, nr_pages, altmap);789 depopulate_section_memmap(pfn, nr_pages, altmap);
790
791 if (empty)
792 ms->section_mem_map = (unsigned long)NULL;
789}793}
790 794
791static struct page * __meminit section_activate(int nid, unsigned long pfn,795static struct page * __meminit section_activate(int nid, unsigned long pfn,
mm/vmalloc.c+7−4
@@ -1295,7 +1295,7 @@ static bool __purge_vmap_area_lazy(unsigned long start, unsigned long end) · 1294 unmodified lines
1295 * First make sure the mappings are removed from all page-tables1295 * First make sure the mappings are removed from all page-tables
1296 * before they are freed.1296 * before they are freed.
1297 */1297 */
1298 vmalloc_sync_all();1298 vmalloc_sync_unmappings();
1299 1299
1300 /*1300 /*
1301 * TODO: to calculate a flush range without looping.1301 * TODO: to calculate a flush range without looping.
@@ -3128,16 +3128,19 @@ int remap_vmalloc_range(struct vm_area_struct *vma, void *addr, · 1826 unmodified lines
3128EXPORT_SYMBOL(remap_vmalloc_range);3128EXPORT_SYMBOL(remap_vmalloc_range);
3129 3129
3130/*3130/*
3131 * Implement a stub for vmalloc_sync_all() if the architecture chose not to3131 * Implement stubs for vmalloc_sync_[un]mappings () if the architecture chose
3132 * have one.3132 * not to have one.
3133 *3133 *
3134 * The purpose of this function is to make sure the vmalloc area3134 * The purpose of this function is to make sure the vmalloc area
3135 * mappings are identical in all page-tables in the system.3135 * mappings are identical in all page-tables in the system.
3136 */3136 */
3137void __weak vmalloc_sync_all(void)3137void __weak vmalloc_sync_mappings(void)
3138{3138{
3139}3139}
3140 3140
3141void __weak vmalloc_sync_unmappings(void)
3142{
3143}
3141 3144
3142static int f(pte_t *pte, unsigned long addr, void *data)3145static int f(pte_t *pte, unsigned long addr, void *data)
3143{3146{
net/batman-adv/bat_iv_ogm.c+4−0
@@ -789,6 +789,10 @@ static void batadv_iv_ogm_schedule_buff(struct batadv_hard_iface *hard_iface) · 788 unmodified lines
789 789
790 lockdep_assert_held(&hard_iface->bat_iv.ogm_buff_mutex);790 lockdep_assert_held(&hard_iface->bat_iv.ogm_buff_mutex);
791 791
792 /* interface already disabled by batadv_iv_ogm_iface_disable */
793 if (!*ogm_buff)
794 return;
795
792 /* the interface gets activated here to avoid race conditions between796 /* the interface gets activated here to avoid race conditions between
793 * the moment of activating the interface in797 * the moment of activating the interface in
794 * hardif_activate_interface() where the originator mac is set and798 * hardif_activate_interface() where the originator mac is set and
net/caif/caif_dev.c+2−1
@@ -112,7 +112,8 @@ static struct caif_device_entry *caif_get(struct net_device *dev) · 111 unmodified lines
112 caif_device_list(dev_net(dev));112 caif_device_list(dev_net(dev));
113 struct caif_device_entry *caifd;113 struct caif_device_entry *caifd;
114 114
115 list_for_each_entry_rcu(caifd, &caifdevs->list, list) {115 list_for_each_entry_rcu(caifd, &caifdevs->list, list,
116 lockdep_rtnl_is_held()) {
116 if (caifd->netdev == dev)117 if (caifd->netdev == dev)
117 return caifd;118 return caifd;
118 }119 }
net/core/devlink.c+21−12
@@ -3352,34 +3352,41 @@ devlink_param_value_get_from_info(const struct devlink_param *param, · 3351 unmodified lines
3352 struct genl_info *info,3352 struct genl_info *info,
3353 union devlink_param_value *value)3353 union devlink_param_value *value)
3354{3354{
3355 struct nlattr *param_data;
3355 int len;3356 int len;
3356 3357
3357 if (param->type != DEVLINK_PARAM_TYPE_BOOL &&3358 param_data = info->attrs[DEVLINK_ATTR_PARAM_VALUE_DATA];
3358 !info->attrs[DEVLINK_ATTR_PARAM_VALUE_DATA])3359
3360 if (param->type != DEVLINK_PARAM_TYPE_BOOL && !param_data)
3359 return -EINVAL;3361 return -EINVAL;
3360 3362
3361 switch (param->type) {3363 switch (param->type) {
3362 case DEVLINK_PARAM_TYPE_U8:3364 case DEVLINK_PARAM_TYPE_U8:
3363 value->vu8 = nla_get_u8(info->attrs[DEVLINK_ATTR_PARAM_VALUE_DATA]);3365 if (nla_len(param_data) != sizeof(u8))
3366 return -EINVAL;
3367 value->vu8 = nla_get_u8(param_data);
3364 break;3368 break;
3365 case DEVLINK_PARAM_TYPE_U16:3369 case DEVLINK_PARAM_TYPE_U16:
3366 value->vu16 = nla_get_u16(info->attrs[DEVLINK_ATTR_PARAM_VALUE_DATA]);3370 if (nla_len(param_data) != sizeof(u16))
3371 return -EINVAL;
3372 value->vu16 = nla_get_u16(param_data);
3367 break;3373 break;
3368 case DEVLINK_PARAM_TYPE_U32:3374 case DEVLINK_PARAM_TYPE_U32:
3369 value->vu32 = nla_get_u32(info->attrs[DEVLINK_ATTR_PARAM_VALUE_DATA]);3375 if (nla_len(param_data) != sizeof(u32))
3376 return -EINVAL;
3377 value->vu32 = nla_get_u32(param_data);
3370 break;3378 break;
3371 case DEVLINK_PARAM_TYPE_STRING:3379 case DEVLINK_PARAM_TYPE_STRING:
3372 len = strnlen(nla_data(info->attrs[DEVLINK_ATTR_PARAM_VALUE_DATA]),3380 len = strnlen(nla_data(param_data), nla_len(param_data));
3373 nla_len(info->attrs[DEVLINK_ATTR_PARAM_VALUE_DATA]));3381 if (len == nla_len(param_data) ||
3374 if (len == nla_len(info->attrs[DEVLINK_ATTR_PARAM_VALUE_DATA]) ||
3375 len >= __DEVLINK_PARAM_MAX_STRING_VALUE)3382 len >= __DEVLINK_PARAM_MAX_STRING_VALUE)
3376 return -EINVAL;3383 return -EINVAL;
3377 strcpy(value->vstr,3384 strcpy(value->vstr, nla_data(param_data));
3378 nla_data(info->attrs[DEVLINK_ATTR_PARAM_VALUE_DATA]));
3379 break;3385 break;
3380 case DEVLINK_PARAM_TYPE_BOOL:3386 case DEVLINK_PARAM_TYPE_BOOL:
3381 value->vbool = info->attrs[DEVLINK_ATTR_PARAM_VALUE_DATA] ?3387 if (param_data && nla_len(param_data))
3382 true : false;3388 return -EINVAL;
3389 value->vbool = nla_get_flag(param_data);
3383 break;3390 break;
3384 }3391 }
3385 return 0;3392 return 0;
@@ -5951,6 +5958,8 @@ static const struct nla_policy devlink_nl_policy[DEVLINK_ATTR_MAX + 1] = { · 2565 unmodified lines
5951 [DEVLINK_ATTR_PARAM_VALUE_CMODE] = { .type = NLA_U8 },5958 [DEVLINK_ATTR_PARAM_VALUE_CMODE] = { .type = NLA_U8 },
5952 [DEVLINK_ATTR_REGION_NAME] = { .type = NLA_NUL_STRING },5959 [DEVLINK_ATTR_REGION_NAME] = { .type = NLA_NUL_STRING },
5953 [DEVLINK_ATTR_REGION_SNAPSHOT_ID] = { .type = NLA_U32 },5960 [DEVLINK_ATTR_REGION_SNAPSHOT_ID] = { .type = NLA_U32 },
5961 [DEVLINK_ATTR_REGION_CHUNK_ADDR] = { .type = NLA_U64 },
5962 [DEVLINK_ATTR_REGION_CHUNK_LEN] = { .type = NLA_U64 },
5954 [DEVLINK_ATTR_HEALTH_REPORTER_NAME] = { .type = NLA_NUL_STRING },5963 [DEVLINK_ATTR_HEALTH_REPORTER_NAME] = { .type = NLA_NUL_STRING },
5955 [DEVLINK_ATTR_HEALTH_REPORTER_GRACEFUL_PERIOD] = { .type = NLA_U64 },5964 [DEVLINK_ATTR_HEALTH_REPORTER_GRACEFUL_PERIOD] = { .type = NLA_U64 },
5956 [DEVLINK_ATTR_HEALTH_REPORTER_AUTO_RECOVER] = { .type = NLA_U8 },5965 [DEVLINK_ATTR_HEALTH_REPORTER_AUTO_RECOVER] = { .type = NLA_U8 },
net/core/netclassid_cgroup.c+37−10
@@ -53,30 +53,60 @@ static void cgrp_css_free(struct cgroup_subsys_state *css) · 52 unmodified lines
53 kfree(css_cls_state(css));53 kfree(css_cls_state(css));
54}54}
55 55
56/*
57 * To avoid freezing of sockets creation for tasks with big number of threads
58 * and opened sockets lets release file_lock every 1000 iterated descriptors.
59 * New sockets will already have been created with new classid.
60 */
61
62struct update_classid_context {
63 u32 classid;
64 unsigned int batch;
65};
66
67#define UPDATE_CLASSID_BATCH 1000
68
56static int update_classid_sock(const void *v, struct file *file, unsigned n)69static int update_classid_sock(const void *v, struct file *file, unsigned n)
57{70{
58 int err;71 int err;
72 struct update_classid_context *ctx = (void *)v;
59 struct socket *sock = sock_from_file(file, &err);73 struct socket *sock = sock_from_file(file, &err);
60 74
61 if (sock) {75 if (sock) {
62 spin_lock(&cgroup_sk_update_lock);76 spin_lock(&cgroup_sk_update_lock);
63 sock_cgroup_set_classid(&sock->sk->sk_cgrp_data,77 sock_cgroup_set_classid(&sock->sk->sk_cgrp_data, ctx->classid);
64 (unsigned long)v);
65 spin_unlock(&cgroup_sk_update_lock);78 spin_unlock(&cgroup_sk_update_lock);
66 }79 }
80 if (--ctx->batch == 0) {
81 ctx->batch = UPDATE_CLASSID_BATCH;
82 return n + 1;
83 }
67 return 0;84 return 0;
68}85}
69 86
87static void update_classid_task(struct task_struct *p, u32 classid)
88{
89 struct update_classid_context ctx = {
90 .classid = classid,
91 .batch = UPDATE_CLASSID_BATCH
92 };
93 unsigned int fd = 0;
94
95 do {
96 task_lock(p);
97 fd = iterate_fd(p->files, fd, update_classid_sock, &ctx);
98 task_unlock(p);
99 cond_resched();
100 } while (fd);
101}
102
70static void cgrp_attach(struct cgroup_taskset *tset)103static void cgrp_attach(struct cgroup_taskset *tset)
71{104{
72 struct cgroup_subsys_state *css;105 struct cgroup_subsys_state *css;
73 struct task_struct *p;106 struct task_struct *p;
74 107
75 cgroup_taskset_for_each(p, css, tset) {108 cgroup_taskset_for_each(p, css, tset) {
76 task_lock(p);109 update_classid_task(p, css_cls_state(css)->classid);
77 iterate_fd(p->files, 0, update_classid_sock,
78 (void *)(unsigned long)css_cls_state(css)->classid);
79 task_unlock(p);
80 }110 }
81}111}
82 112
@@ -98,10 +128,7 @@ static int write_classid(struct cgroup_subsys_state *css, struct cftype *cft, · 15 unmodified lines
98 128
99 css_task_iter_start(css, 0, &it);129 css_task_iter_start(css, 0, &it);
100 while ((p = css_task_iter_next(&it))) {130 while ((p = css_task_iter_next(&it))) {
101 task_lock(p);131 update_classid_task(p, cs->classid);
102 iterate_fd(p->files, 0, update_classid_sock,
103 (void *)(unsigned long)cs->classid);
104 task_unlock(p);
105 cond_resched();132 cond_resched();
106 }133 }
107 css_task_iter_end(&it);134 css_task_iter_end(&it);
net/core/sock.c+4−1
@@ -1830,7 +1830,10 @@ struct sock *sk_clone_lock(const struct sock *sk, const gfp_t priority) · 1829 unmodified lines
1830 atomic_set(&newsk->sk_zckey, 0);1830 atomic_set(&newsk->sk_zckey, 0);
1831 1831
1832 sock_reset_flag(newsk, SOCK_DONE);1832 sock_reset_flag(newsk, SOCK_DONE);
1833 mem_cgroup_sk_alloc(newsk);1833
1834 /* sk->sk_memcg will be populated at accept() time */
1835 newsk->sk_memcg = NULL;
1836
1834 cgroup_sk_alloc(&newsk->sk_cgrp_data);1837 cgroup_sk_alloc(&newsk->sk_cgrp_data);
1835 1838
1836 rcu_read_lock();1839 rcu_read_lock();
net/dsa/dsa_priv.h+2−0
@@ -117,7 +117,9 @@ static inline struct net_device *dsa_master_find_slave(struct net_device *dev, · 116 unmodified lines
117/* port.c */117/* port.c */
118int dsa_port_set_state(struct dsa_port *dp, u8 state,118int dsa_port_set_state(struct dsa_port *dp, u8 state,
119 struct switchdev_trans *trans);119 struct switchdev_trans *trans);
120int dsa_port_enable_rt(struct dsa_port *dp, struct phy_device *phy);
120int dsa_port_enable(struct dsa_port *dp, struct phy_device *phy);121int dsa_port_enable(struct dsa_port *dp, struct phy_device *phy);
122void dsa_port_disable_rt(struct dsa_port *dp);
121void dsa_port_disable(struct dsa_port *dp);123void dsa_port_disable(struct dsa_port *dp);
122int dsa_port_bridge_join(struct dsa_port *dp, struct net_device *br);124int dsa_port_bridge_join(struct dsa_port *dp, struct net_device *br);
123void dsa_port_bridge_leave(struct dsa_port *dp, struct net_device *br);125void dsa_port_bridge_leave(struct dsa_port *dp, struct net_device *br);
net/dsa/port.c+35−9
@@ -63,7 +63,7 @@ static void dsa_port_set_state_now(struct dsa_port *dp, u8 state) · 62 unmodified lines
63 pr_err("DSA: failed to set STP state %u (%d)\n", state, err);63 pr_err("DSA: failed to set STP state %u (%d)\n", state, err);
64}64}
65 65
66int dsa_port_enable(struct dsa_port *dp, struct phy_device *phy)66int dsa_port_enable_rt(struct dsa_port *dp, struct phy_device *phy)
67{67{
68 struct dsa_switch *ds = dp->ds;68 struct dsa_switch *ds = dp->ds;
69 int port = dp->index;69 int port = dp->index;
@@ -78,14 +78,31 @@ int dsa_port_enable(struct dsa_port *dp, struct phy_device *phy) · 8 unmodified lines
78 if (!dp->bridge_dev)78 if (!dp->bridge_dev)
79 dsa_port_set_state_now(dp, BR_STATE_FORWARDING);79 dsa_port_set_state_now(dp, BR_STATE_FORWARDING);
80 80
81 if (dp->pl)
82 phylink_start(dp->pl);
83
81 return 0;84 return 0;
82}85}
83 86
84void dsa_port_disable(struct dsa_port *dp)87int dsa_port_enable(struct dsa_port *dp, struct phy_device *phy)
88{
89 int err;
90
91 rtnl_lock();
92 err = dsa_port_enable_rt(dp, phy);
93 rtnl_unlock();
94
95 return err;
96}
97
98void dsa_port_disable_rt(struct dsa_port *dp)
85{99{
86 struct dsa_switch *ds = dp->ds;100 struct dsa_switch *ds = dp->ds;
87 int port = dp->index;101 int port = dp->index;
88 102
103 if (dp->pl)
104 phylink_stop(dp->pl);
105
89 if (!dp->bridge_dev)106 if (!dp->bridge_dev)
90 dsa_port_set_state_now(dp, BR_STATE_DISABLED);107 dsa_port_set_state_now(dp, BR_STATE_DISABLED);
91 108
@@ -93,6 +110,13 @@ void dsa_port_disable(struct dsa_port *dp) · 1 unmodified line
93 ds->ops->port_disable(ds, port);110 ds->ops->port_disable(ds, port);
94}111}
95 112
113void dsa_port_disable(struct dsa_port *dp)
114{
115 rtnl_lock();
116 dsa_port_disable_rt(dp);
117 rtnl_unlock();
118}
119
96int dsa_port_bridge_join(struct dsa_port *dp, struct net_device *br)120int dsa_port_bridge_join(struct dsa_port *dp, struct net_device *br)
97{121{
98 struct dsa_notifier_bridge_info info = {122 struct dsa_notifier_bridge_info info = {
@@ -614,10 +638,6 @@ static int dsa_port_phylink_register(struct dsa_port *dp) · 515 unmodified lines
614 goto err_phy_connect;638 goto err_phy_connect;
615 }639 }
616 640
617 rtnl_lock();
618 phylink_start(dp->pl);
619 rtnl_unlock();
620
621 return 0;641 return 0;
622 642
623err_phy_connect:643err_phy_connect:
@@ -628,9 +648,14 @@ err_phy_connect: · 4 unmodified lines
628int dsa_port_link_register_of(struct dsa_port *dp)648int dsa_port_link_register_of(struct dsa_port *dp)
629{649{
630 struct dsa_switch *ds = dp->ds;650 struct dsa_switch *ds = dp->ds;
651 struct device_node *phy_np;
631 652
632 if (!ds->ops->adjust_link)653 if (!ds->ops->adjust_link) {
633 return dsa_port_phylink_register(dp);654 phy_np = of_parse_phandle(dp->dn, "phy-handle", 0);
655 if (of_phy_is_fixed_link(dp->dn) || phy_np)
656 return dsa_port_phylink_register(dp);
657 return 0;
658 }
634 659
635 dev_warn(ds->dev,660 dev_warn(ds->dev,
636 "Using legacy PHYLIB callbacks. Please migrate to PHYLINK!\n");661 "Using legacy PHYLIB callbacks. Please migrate to PHYLINK!\n");
@@ -645,11 +670,12 @@ void dsa_port_link_unregister_of(struct dsa_port *dp) · 8 unmodified lines
645{670{
646 struct dsa_switch *ds = dp->ds;671 struct dsa_switch *ds = dp->ds;
647 672
648 if (!ds->ops->adjust_link) {673 if (!ds->ops->adjust_link && dp->pl) {
649 rtnl_lock();674 rtnl_lock();
650 phylink_disconnect_phy(dp->pl);675 phylink_disconnect_phy(dp->pl);
651 rtnl_unlock();676 rtnl_unlock();
652 phylink_destroy(dp->pl);677 phylink_destroy(dp->pl);
678 dp->pl = NULL;
653 return;679 return;
654 }680 }
655 681
net/dsa/slave.c+2−6
@@ -88,12 +88,10 @@ static int dsa_slave_open(struct net_device *dev) · 87 unmodified lines
88 goto clear_allmulti;88 goto clear_allmulti;
89 }89 }
90 90
91 err = dsa_port_enable(dp, dev->phydev);91 err = dsa_port_enable_rt(dp, dev->phydev);
92 if (err)92 if (err)
93 goto clear_promisc;93 goto clear_promisc;
94 94
95 phylink_start(dp->pl);
96
97 return 0;95 return 0;
98 96
99clear_promisc:97clear_promisc:
@@ -114,9 +112,7 @@ static int dsa_slave_close(struct net_device *dev) · 14 unmodified lines
114 struct net_device *master = dsa_slave_to_master(dev);112 struct net_device *master = dsa_slave_to_master(dev);
115 struct dsa_port *dp = dsa_slave_to_port(dev);113 struct dsa_port *dp = dsa_slave_to_port(dev);
116 114
117 phylink_stop(dp->pl);115 dsa_port_disable_rt(dp);
118
119 dsa_port_disable(dp);
120 116
121 dev_mc_unsync(master, dev);117 dev_mc_unsync(master, dev);
122 dev_uc_unsync(master, dev);118 dev_uc_unsync(master, dev);
net/ieee802154/nl_policy.c+6−0
@@ -21,7 +21,13 @@ const struct nla_policy ieee802154_policy[IEEE802154_ATTR_MAX + 1] = { · 20 unmodified lines
21 [IEEE802154_ATTR_HW_ADDR] = { .type = NLA_HW_ADDR, },21 [IEEE802154_ATTR_HW_ADDR] = { .type = NLA_HW_ADDR, },
22 [IEEE802154_ATTR_PAN_ID] = { .type = NLA_U16, },22 [IEEE802154_ATTR_PAN_ID] = { .type = NLA_U16, },
23 [IEEE802154_ATTR_CHANNEL] = { .type = NLA_U8, },23 [IEEE802154_ATTR_CHANNEL] = { .type = NLA_U8, },
24 [IEEE802154_ATTR_BCN_ORD] = { .type = NLA_U8, },
25 [IEEE802154_ATTR_SF_ORD] = { .type = NLA_U8, },
26 [IEEE802154_ATTR_PAN_COORD] = { .type = NLA_U8, },
27 [IEEE802154_ATTR_BAT_EXT] = { .type = NLA_U8, },
28 [IEEE802154_ATTR_COORD_REALIGN] = { .type = NLA_U8, },
24 [IEEE802154_ATTR_PAGE] = { .type = NLA_U8, },29 [IEEE802154_ATTR_PAGE] = { .type = NLA_U8, },
30 [IEEE802154_ATTR_DEV_TYPE] = { .type = NLA_U8, },
25 [IEEE802154_ATTR_COORD_SHORT_ADDR] = { .type = NLA_U16, },31 [IEEE802154_ATTR_COORD_SHORT_ADDR] = { .type = NLA_U16, },
26 [IEEE802154_ATTR_COORD_HW_ADDR] = { .type = NLA_HW_ADDR, },32 [IEEE802154_ATTR_COORD_HW_ADDR] = { .type = NLA_HW_ADDR, },
27 [IEEE802154_ATTR_COORD_PAN_ID] = { .type = NLA_U16, },33 [IEEE802154_ATTR_COORD_PAN_ID] = { .type = NLA_U16, },
net/ipv4/gre_demux.c+10−2
@@ -56,7 +56,9 @@ int gre_del_protocol(const struct gre_protocol *proto, u8 version) · 55 unmodified lines
56}56}
57EXPORT_SYMBOL_GPL(gre_del_protocol);57EXPORT_SYMBOL_GPL(gre_del_protocol);
58 58
59/* Fills in tpi and returns header length to be pulled. */59/* Fills in tpi and returns header length to be pulled.
60 * Note that caller must use pskb_may_pull() before pulling GRE header.
61 */
60int gre_parse_header(struct sk_buff *skb, struct tnl_ptk_info *tpi,62int gre_parse_header(struct sk_buff *skb, struct tnl_ptk_info *tpi,
61 bool *csum_err, __be16 proto, int nhs)63 bool *csum_err, __be16 proto, int nhs)
62{64{
@@ -110,8 +112,14 @@ int gre_parse_header(struct sk_buff *skb, struct tnl_ptk_info *tpi, · 47 unmodified lines
110 * - When dealing with WCCPv2, Skip extra 4 bytes in GRE header112 * - When dealing with WCCPv2, Skip extra 4 bytes in GRE header
111 */113 */
112 if (greh->flags == 0 && tpi->proto == htons(ETH_P_WCCP)) {114 if (greh->flags == 0 && tpi->proto == htons(ETH_P_WCCP)) {
115 u8 _val, *val;
116
117 val = skb_header_pointer(skb, nhs + hdr_len,
118 sizeof(_val), &_val);
119 if (!val)
120 return -EINVAL;
113 tpi->proto = proto;121 tpi->proto = proto;
114 if ((*(u8 *)options & 0xF0) != 0x40)122 if ((*val & 0xF0) != 0x40)
115 hdr_len += 4;123 hdr_len += 4;
116 }124 }
117 tpi->hdr_len = hdr_len;125 tpi->hdr_len = hdr_len;
net/ipv4/inet_connection_sock.c+20−0
@@ -482,8 +482,28 @@ struct sock *inet_csk_accept(struct sock *sk, int flags, int *err, bool kern) · 481 unmodified lines
482 }482 }
483 spin_unlock_bh(&queue->fastopenq.lock);483 spin_unlock_bh(&queue->fastopenq.lock);
484 }484 }
485
485out:486out:
486 release_sock(sk);487 release_sock(sk);
488 if (newsk && mem_cgroup_sockets_enabled) {
489 int amt;
490
491 /* atomically get the memory usage, set and charge the
492 * newsk->sk_memcg.
493 */
494 lock_sock(newsk);
495
496 /* The socket has not been accepted yet, no need to look at
497 * newsk->sk_wmem_queued.
498 */
499 amt = sk_mem_pages(newsk->sk_forward_alloc +
500 atomic_read(&newsk->sk_rmem_alloc));
501 mem_cgroup_sk_alloc(newsk);
502 if (newsk->sk_memcg && amt)
503 mem_cgroup_charge_skmem(newsk->sk_memcg, amt);
504
505 release_sock(newsk);
506 }
487 if (req)507 if (req)
488 reqsk_put(req);508 reqsk_put(req);
489 return newsk;509 return newsk;
net/ipv4/inet_diag.c+20−24
@@ -100,13 +100,9 @@ static size_t inet_sk_attr_size(struct sock *sk, · 99 unmodified lines
100 aux = handler->idiag_get_aux_size(sk, net_admin);100 aux = handler->idiag_get_aux_size(sk, net_admin);
101 101
102 return nla_total_size(sizeof(struct tcp_info))102 return nla_total_size(sizeof(struct tcp_info))
103 + nla_total_size(1) /* INET_DIAG_SHUTDOWN */
104 + nla_total_size(1) /* INET_DIAG_TOS */
105 + nla_total_size(1) /* INET_DIAG_TCLASS */
106 + nla_total_size(4) /* INET_DIAG_MARK */
107 + nla_total_size(4) /* INET_DIAG_CLASS_ID */
108 + nla_total_size(sizeof(struct inet_diag_meminfo))
109 + nla_total_size(sizeof(struct inet_diag_msg))103 + nla_total_size(sizeof(struct inet_diag_msg))
104 + inet_diag_msg_attrs_size()
105 + nla_total_size(sizeof(struct inet_diag_meminfo))
110 + nla_total_size(SK_MEMINFO_VARS * sizeof(u32))106 + nla_total_size(SK_MEMINFO_VARS * sizeof(u32))
111 + nla_total_size(TCP_CA_NAME_MAX)107 + nla_total_size(TCP_CA_NAME_MAX)
112 + nla_total_size(sizeof(struct tcpvegas_info))108 + nla_total_size(sizeof(struct tcpvegas_info))
@@ -147,6 +143,24 @@ int inet_diag_msg_attrs_fill(struct sock *sk, struct sk_buff *skb, · 34 unmodified lines
147 if (net_admin && nla_put_u32(skb, INET_DIAG_MARK, sk->sk_mark))143 if (net_admin && nla_put_u32(skb, INET_DIAG_MARK, sk->sk_mark))
148 goto errout;144 goto errout;
149 145
146 if (ext & (1 << (INET_DIAG_CLASS_ID - 1)) ||
147 ext & (1 << (INET_DIAG_TCLASS - 1))) {
148 u32 classid = 0;
149
150#ifdef CONFIG_SOCK_CGROUP_DATA
151 classid = sock_cgroup_classid(&sk->sk_cgrp_data);
152#endif
153 /* Fallback to socket priority if class id isn't set.
154 * Classful qdiscs use it as direct reference to class.
155 * For cgroup2 classid is always zero.
156 */
157 if (!classid)
158 classid = sk->sk_priority;
159
160 if (nla_put_u32(skb, INET_DIAG_CLASS_ID, classid))
161 goto errout;
162 }
163
150 r->idiag_uid = from_kuid_munged(user_ns, sock_i_uid(sk));164 r->idiag_uid = from_kuid_munged(user_ns, sock_i_uid(sk));
151 r->idiag_inode = sock_i_ino(sk);165 r->idiag_inode = sock_i_ino(sk);
152 166
@@ -284,24 +298,6 @@ int inet_sk_diag_fill(struct sock *sk, struct inet_connection_sock *icsk, · 131 unmodified lines
284 goto errout;298 goto errout;
285 }299 }
286 300
287 if (ext & (1 << (INET_DIAG_CLASS_ID - 1)) ||
288 ext & (1 << (INET_DIAG_TCLASS - 1))) {
289 u32 classid = 0;
290
291#ifdef CONFIG_SOCK_CGROUP_DATA
292 classid = sock_cgroup_classid(&sk->sk_cgrp_data);
293#endif
294 /* Fallback to socket priority if class id isn't set.
295 * Classful qdiscs use it as direct reference to class.
296 * For cgroup2 classid is always zero.
297 */
298 if (!classid)
299 classid = sk->sk_priority;
300
301 if (nla_put_u32(skb, INET_DIAG_CLASS_ID, classid))
302 goto errout;
303 }
304
305out:301out:
306 nlmsg_end(skb, nlh);302 nlmsg_end(skb, nlh);
307 return 0;303 return 0;
net/ipv4/raw_diag.c+3−2
@@ -100,8 +100,9 @@ static int raw_diag_dump_one(struct sk_buff *in_skb, · 99 unmodified lines
100 if (IS_ERR(sk))100 if (IS_ERR(sk))
101 return PTR_ERR(sk);101 return PTR_ERR(sk);
102 102
103 rep = nlmsg_new(sizeof(struct inet_diag_msg) +103 rep = nlmsg_new(nla_total_size(sizeof(struct inet_diag_msg)) +
104 sizeof(struct inet_diag_meminfo) + 64,104 inet_diag_msg_attrs_size() +
105 nla_total_size(sizeof(struct inet_diag_meminfo)) + 64,
105 GFP_KERNEL);106 GFP_KERNEL);
106 if (!rep) {107 if (!rep) {
107 sock_put(sk);108 sock_put(sk);
net/ipv4/udp_diag.c+3−2
@@ -64,8 +64,9 @@ static int udp_dump_one(struct udp_table *tbl, struct sk_buff *in_skb, · 63 unmodified lines
64 goto out;64 goto out;
65 65
66 err = -ENOMEM;66 err = -ENOMEM;
67 rep = nlmsg_new(sizeof(struct inet_diag_msg) +67 rep = nlmsg_new(nla_total_size(sizeof(struct inet_diag_msg)) +
68 sizeof(struct inet_diag_meminfo) + 64,68 inet_diag_msg_attrs_size() +
69 nla_total_size(sizeof(struct inet_diag_meminfo)) + 64,
69 GFP_KERNEL);70 GFP_KERNEL);
70 if (!rep)71 if (!rep)
71 goto out;72 goto out;
net/ipv6/addrconf.c+40−11
@@ -1226,11 +1226,13 @@ check_cleanup_prefix_route(struct inet6_ifaddr *ifp, unsigned long *expires) · 1225 unmodified lines
1226}1226}
1227 1227
1228static void1228static void
1229cleanup_prefix_route(struct inet6_ifaddr *ifp, unsigned long expires, bool del_rt)1229cleanup_prefix_route(struct inet6_ifaddr *ifp, unsigned long expires,
1230 bool del_rt, bool del_peer)
1230{1231{
1231 struct fib6_info *f6i;1232 struct fib6_info *f6i;
1232 1233
1233 f6i = addrconf_get_prefix_route(&ifp->addr, ifp->prefix_len,1234 f6i = addrconf_get_prefix_route(del_peer ? &ifp->peer_addr : &ifp->addr,
1235 ifp->prefix_len,
1234 ifp->idev->dev, 0, RTF_DEFAULT, true);1236 ifp->idev->dev, 0, RTF_DEFAULT, true);
1235 if (f6i) {1237 if (f6i) {
1236 if (del_rt)1238 if (del_rt)
@@ -1293,7 +1295,7 @@ static void ipv6_del_addr(struct inet6_ifaddr *ifp) · 56 unmodified lines
1293 1295
1294 if (action != CLEANUP_PREFIX_RT_NOP) {1296 if (action != CLEANUP_PREFIX_RT_NOP) {
1295 cleanup_prefix_route(ifp, expires,1297 cleanup_prefix_route(ifp, expires,
1296 action == CLEANUP_PREFIX_RT_DEL);1298 action == CLEANUP_PREFIX_RT_DEL, false);
1297 }1299 }
1298 1300
1299 /* clean up prefsrc entries */1301 /* clean up prefsrc entries */
@@ -3345,6 +3347,10 @@ static void addrconf_dev_config(struct net_device *dev) · 2045 unmodified lines
3345 (dev->type != ARPHRD_NONE) &&3347 (dev->type != ARPHRD_NONE) &&
3346 (dev->type != ARPHRD_RAWIP)) {3348 (dev->type != ARPHRD_RAWIP)) {
3347 /* Alas, we support only Ethernet autoconfiguration. */3349 /* Alas, we support only Ethernet autoconfiguration. */
3350 idev = __in6_dev_get(dev);
3351 if (!IS_ERR_OR_NULL(idev) && dev->flags & IFF_UP &&
3352 dev->flags & IFF_MULTICAST)
3353 ipv6_mc_up(idev);
3348 return;3354 return;
3349 }3355 }
3350 3356
@@ -4586,12 +4592,14 @@ inet6_rtm_deladdr(struct sk_buff *skb, struct nlmsghdr *nlh, · 1235 unmodified lines
4586}4592}
4587 4593
4588static int modify_prefix_route(struct inet6_ifaddr *ifp,4594static int modify_prefix_route(struct inet6_ifaddr *ifp,
4589 unsigned long expires, u32 flags)4595 unsigned long expires, u32 flags,
4596 bool modify_peer)
4590{4597{
4591 struct fib6_info *f6i;4598 struct fib6_info *f6i;
4592 u32 prio;4599 u32 prio;
4593 4600
4594 f6i = addrconf_get_prefix_route(&ifp->addr, ifp->prefix_len,4601 f6i = addrconf_get_prefix_route(modify_peer ? &ifp->peer_addr : &ifp->addr,
4602 ifp->prefix_len,
4595 ifp->idev->dev, 0, RTF_DEFAULT, true);4603 ifp->idev->dev, 0, RTF_DEFAULT, true);
4596 if (!f6i)4604 if (!f6i)
4597 return -ENOENT;4605 return -ENOENT;
@@ -4602,7 +4610,8 @@ static int modify_prefix_route(struct inet6_ifaddr *ifp, · 4 unmodified lines
4602 ip6_del_rt(dev_net(ifp->idev->dev), f6i);4610 ip6_del_rt(dev_net(ifp->idev->dev), f6i);
4603 4611
4604 /* add new one */4612 /* add new one */
4605 addrconf_prefix_route(&ifp->addr, ifp->prefix_len,4613 addrconf_prefix_route(modify_peer ? &ifp->peer_addr : &ifp->addr,
4614 ifp->prefix_len,
4606 ifp->rt_priority, ifp->idev->dev,4615 ifp->rt_priority, ifp->idev->dev,
4607 expires, flags, GFP_KERNEL);4616 expires, flags, GFP_KERNEL);
4608 } else {4617 } else {
@@ -4624,6 +4633,7 @@ static int inet6_addr_modify(struct inet6_ifaddr *ifp, struct ifa6_config *cfg) · 15 unmodified lines
4624 unsigned long timeout;4633 unsigned long timeout;
4625 bool was_managetempaddr;4634 bool was_managetempaddr;
4626 bool had_prefixroute;4635 bool had_prefixroute;
4636 bool new_peer = false;
4627 4637
4628 ASSERT_RTNL();4638 ASSERT_RTNL();
4629 4639
@@ -4655,6 +4665,13 @@ static int inet6_addr_modify(struct inet6_ifaddr *ifp, struct ifa6_config *cfg) · 25 unmodified lines
4655 cfg->preferred_lft = timeout;4665 cfg->preferred_lft = timeout;
4656 }4666 }
4657 4667
4668 if (cfg->peer_pfx &&
4669 memcmp(&ifp->peer_addr, cfg->peer_pfx, sizeof(struct in6_addr))) {
4670 if (!ipv6_addr_any(&ifp->peer_addr))
4671 cleanup_prefix_route(ifp, expires, true, true);
4672 new_peer = true;
4673 }
4674
4658 spin_lock_bh(&ifp->lock);4675 spin_lock_bh(&ifp->lock);
4659 was_managetempaddr = ifp->flags & IFA_F_MANAGETEMPADDR;4676 was_managetempaddr = ifp->flags & IFA_F_MANAGETEMPADDR;
4660 had_prefixroute = ifp->flags & IFA_F_PERMANENT &&4677 had_prefixroute = ifp->flags & IFA_F_PERMANENT &&
@@ -4670,6 +4687,9 @@ static int inet6_addr_modify(struct inet6_ifaddr *ifp, struct ifa6_config *cfg) · 9 unmodified lines
4670 if (cfg->rt_priority && cfg->rt_priority != ifp->rt_priority)4687 if (cfg->rt_priority && cfg->rt_priority != ifp->rt_priority)
4671 ifp->rt_priority = cfg->rt_priority;4688 ifp->rt_priority = cfg->rt_priority;
4672 4689
4690 if (new_peer)
4691 ifp->peer_addr = *cfg->peer_pfx;
4692
4673 spin_unlock_bh(&ifp->lock);4693 spin_unlock_bh(&ifp->lock);
4674 if (!(ifp->flags&IFA_F_TENTATIVE))4694 if (!(ifp->flags&IFA_F_TENTATIVE))
4675 ipv6_ifa_notify(0, ifp);4695 ipv6_ifa_notify(0, ifp);
@@ -4678,7 +4698,7 @@ static int inet6_addr_modify(struct inet6_ifaddr *ifp, struct ifa6_config *cfg) · 2 unmodified lines
4678 int rc = -ENOENT;4698 int rc = -ENOENT;
4679 4699
4680 if (had_prefixroute)4700 if (had_prefixroute)
4681 rc = modify_prefix_route(ifp, expires, flags);4701 rc = modify_prefix_route(ifp, expires, flags, false);
4682 4702
4683 /* prefix route could have been deleted; if so restore it */4703 /* prefix route could have been deleted; if so restore it */
4684 if (rc == -ENOENT) {4704 if (rc == -ENOENT) {
@@ -4686,6 +4706,15 @@ static int inet6_addr_modify(struct inet6_ifaddr *ifp, struct ifa6_config *cfg) · 1 unmodified line
4686 ifp->rt_priority, ifp->idev->dev,4706 ifp->rt_priority, ifp->idev->dev,
4687 expires, flags, GFP_KERNEL);4707 expires, flags, GFP_KERNEL);
4688 }4708 }
4709
4710 if (had_prefixroute && !ipv6_addr_any(&ifp->peer_addr))
4711 rc = modify_prefix_route(ifp, expires, flags, true);
4712
4713 if (rc == -ENOENT && !ipv6_addr_any(&ifp->peer_addr)) {
4714 addrconf_prefix_route(&ifp->peer_addr, ifp->prefix_len,
4715 ifp->rt_priority, ifp->idev->dev,
4716 expires, flags, GFP_KERNEL);
4717 }
4689 } else if (had_prefixroute) {4718 } else if (had_prefixroute) {
4690 enum cleanup_prefix_rt_t action;4719 enum cleanup_prefix_rt_t action;
4691 unsigned long rt_expires;4720 unsigned long rt_expires;
@@ -4696,7 +4725,7 @@ static int inet6_addr_modify(struct inet6_ifaddr *ifp, struct ifa6_config *cfg) · 4 unmodified lines
4696 4725
4697 if (action != CLEANUP_PREFIX_RT_NOP) {4726 if (action != CLEANUP_PREFIX_RT_NOP) {
4698 cleanup_prefix_route(ifp, rt_expires,4727 cleanup_prefix_route(ifp, rt_expires,
4699 action == CLEANUP_PREFIX_RT_DEL);4728 action == CLEANUP_PREFIX_RT_DEL, false);
4700 }4729 }
4701 }4730 }
4702 4731
@@ -5983,9 +6012,9 @@ static void __ipv6_ifa_notify(int event, struct inet6_ifaddr *ifp) · 1280 unmodified lines
5983 if (ifp->idev->cnf.forwarding)6012 if (ifp->idev->cnf.forwarding)
5984 addrconf_join_anycast(ifp);6013 addrconf_join_anycast(ifp);
5985 if (!ipv6_addr_any(&ifp->peer_addr))6014 if (!ipv6_addr_any(&ifp->peer_addr))
5986 addrconf_prefix_route(&ifp->peer_addr, 128, 0,6015 addrconf_prefix_route(&ifp->peer_addr, 128,
5987 ifp->idev->dev, 0, 0,6016 ifp->rt_priority, ifp->idev->dev,
5988 GFP_ATOMIC);6017 0, 0, GFP_ATOMIC);
5989 break;6018 break;
5990 case RTM_DELADDR:6019 case RTM_DELADDR:
5991 if (ifp->idev->cnf.forwarding)6020 if (ifp->idev->cnf.forwarding)
net/ipv6/seg6_iptunnel.c+1−1
@@ -268,7 +268,7 @@ static int seg6_do_srh(struct sk_buff *skb) · 267 unmodified lines
268 skb_mac_header_rebuild(skb);268 skb_mac_header_rebuild(skb);
269 skb_push(skb, skb->mac_len);269 skb_push(skb, skb->mac_len);
270 270
271 err = seg6_do_srh_encap(skb, tinfo->srh, NEXTHDR_NONE);271 err = seg6_do_srh_encap(skb, tinfo->srh, IPPROTO_ETHERNET);
272 if (err)272 if (err)
273 return err;273 return err;
274 274
net/ipv6/seg6_local.c+1−1
@@ -282,7 +282,7 @@ static int input_action_end_dx2(struct sk_buff *skb, · 281 unmodified lines
282 struct net_device *odev;282 struct net_device *odev;
283 struct ethhdr *eth;283 struct ethhdr *eth;
284 284
285 if (!decap_and_validate(skb, NEXTHDR_NONE))285 if (!decap_and_validate(skb, IPPROTO_ETHERNET))
286 goto drop;286 goto drop;
287 287
288 if (!pskb_may_pull(skb, ETH_HLEN))288 if (!pskb_may_pull(skb, ETH_HLEN))
net/mac80211/mesh_hwmp.c+2−1
@@ -1152,7 +1152,8 @@ int mesh_nexthop_resolve(struct ieee80211_sub_if_data *sdata, · 1151 unmodified lines
1152 }1152 }
1153 }1153 }
1154 1154
1155 if (!(mpath->flags & MESH_PATH_RESOLVING))1155 if (!(mpath->flags & MESH_PATH_RESOLVING) &&
1156 mesh_path_sel_is_hwmp(sdata))
1156 mesh_queue_preq(mpath, PREQ_Q_F_START);1157 mesh_queue_preq(mpath, PREQ_Q_F_START);
1157 1158
1158 if (skb_queue_len(&mpath->frame_queue) >= MESH_FRAME_QUEUE_LEN)1159 if (skb_queue_len(&mpath->frame_queue) >= MESH_FRAME_QUEUE_LEN)
net/mptcp/options.c+17−2
@@ -334,6 +334,8 @@ static bool mptcp_established_options_dss(struct sock *sk, struct sk_buff *skb, · 333 unmodified lines
334 struct mptcp_sock *msk;334 struct mptcp_sock *msk;
335 unsigned int ack_size;335 unsigned int ack_size;
336 bool ret = false;336 bool ret = false;
337 bool can_ack;
338 u64 ack_seq;
337 u8 tcp_fin;339 u8 tcp_fin;
338 340
339 if (skb) {341 if (skb) {
@@ -360,9 +362,22 @@ static bool mptcp_established_options_dss(struct sock *sk, struct sk_buff *skb, · 20 unmodified lines
360 ret = true;362 ret = true;
361 }363 }
362 364
365 /* passive sockets msk will set the 'can_ack' after accept(), even
366 * if the first subflow may have the already the remote key handy
367 */
368 can_ack = true;
363 opts->ext_copy.use_ack = 0;369 opts->ext_copy.use_ack = 0;
364 msk = mptcp_sk(subflow->conn);370 msk = mptcp_sk(subflow->conn);
365 if (!msk || !READ_ONCE(msk->can_ack)) {371 if (likely(msk && READ_ONCE(msk->can_ack))) {
372 ack_seq = msk->ack_seq;
373 } else if (subflow->can_ack) {
374 mptcp_crypto_key_sha(subflow->remote_key, NULL, &ack_seq);
375 ack_seq++;
376 } else {
377 can_ack = false;
378 }
379
380 if (unlikely(!can_ack)) {
366 *size = ALIGN(dss_size, 4);381 *size = ALIGN(dss_size, 4);
367 return ret;382 return ret;
368 }383 }
@@ -375,7 +390,7 @@ static bool mptcp_established_options_dss(struct sock *sk, struct sk_buff *skb, · 6 unmodified lines
375 390
376 dss_size += ack_size;391 dss_size += ack_size;
377 392
378 opts->ext_copy.data_ack = msk->ack_seq;393 opts->ext_copy.data_ack = ack_seq;
379 opts->ext_copy.ack64 = 1;394 opts->ext_copy.ack64 = 1;
380 opts->ext_copy.use_ack = 1;395 opts->ext_copy.use_ack = 1;
381 396
net/netfilter/nf_conntrack_standalone.c+1−1
@@ -411,7 +411,7 @@ static void *ct_cpu_seq_next(struct seq_file *seq, void *v, loff_t *pos) · 410 unmodified lines
411 *pos = cpu + 1;411 *pos = cpu + 1;
412 return per_cpu_ptr(net->ct.stat, cpu);412 return per_cpu_ptr(net->ct.stat, cpu);
413 }413 }
414 414 (*pos)++;
415 return NULL;415 return NULL;
416}416}
417 417
net/netfilter/nf_synproxy_core.c+1−1
@@ -267,7 +267,7 @@ static void *synproxy_cpu_seq_next(struct seq_file *seq, void *v, loff_t *pos) · 266 unmodified lines
267 *pos = cpu + 1;267 *pos = cpu + 1;
268 return per_cpu_ptr(snet->stats, cpu);268 return per_cpu_ptr(snet->stats, cpu);
269 }269 }
270 270 (*pos)++;
271 return NULL;271 return NULL;
272}272}
273 273
net/netfilter/nf_tables_api.c+14−8
@@ -1405,6 +1405,11 @@ static int nf_tables_fill_chain_info(struct sk_buff *skb, struct net *net, · 1404 unmodified lines
1405 lockdep_commit_lock_is_held(net));1405 lockdep_commit_lock_is_held(net));
1406 if (nft_dump_stats(skb, stats))1406 if (nft_dump_stats(skb, stats))
1407 goto nla_put_failure;1407 goto nla_put_failure;
1408
1409 if ((chain->flags & NFT_CHAIN_HW_OFFLOAD) &&
1410 nla_put_be32(skb, NFTA_CHAIN_FLAGS,
1411 htonl(NFT_CHAIN_HW_OFFLOAD)))
1412 goto nla_put_failure;
1408 }1413 }
1409 1414
1410 if (nla_put_be32(skb, NFTA_CHAIN_USE, htonl(chain->use)))1415 if (nla_put_be32(skb, NFTA_CHAIN_USE, htonl(chain->use)))
@@ -6300,8 +6305,13 @@ static int nf_tables_newflowtable(struct net *net, struct sock *nlsk, · 4889 unmodified lines
6300 goto err4;6305 goto err4;
6301 6306
6302 err = nft_register_flowtable_net_hooks(ctx.net, table, flowtable);6307 err = nft_register_flowtable_net_hooks(ctx.net, table, flowtable);
6303 if (err < 0)6308 if (err < 0) {
6309 list_for_each_entry_safe(hook, next, &flowtable->hook_list, list) {
6310 list_del_rcu(&hook->list);
6311 kfree_rcu(hook, rcu);
6312 }
6304 goto err4;6313 goto err4;
6314 }
6305 6315
6306 err = nft_trans_flowtable_add(&ctx, NFT_MSG_NEWFLOWTABLE, flowtable);6316 err = nft_trans_flowtable_add(&ctx, NFT_MSG_NEWFLOWTABLE, flowtable);
6307 if (err < 0)6317 if (err < 0)
@@ -7378,13 +7388,8 @@ static void nf_tables_module_autoload(struct net *net) · 1070 unmodified lines
7378 list_splice_init(&net->nft.module_list, &module_list);7388 list_splice_init(&net->nft.module_list, &module_list);
7379 mutex_unlock(&net->nft.commit_mutex);7389 mutex_unlock(&net->nft.commit_mutex);
7380 list_for_each_entry_safe(req, next, &module_list, list) {7390 list_for_each_entry_safe(req, next, &module_list, list) {
7381 if (req->done) {7391 request_module("%s", req->module);
7382 list_del(&req->list);7392 req->done = true;
7383 kfree(req);
7384 } else {
7385 request_module("%s", req->module);
7386 req->done = true;
7387 }
7388 }7393 }
7389 mutex_lock(&net->nft.commit_mutex);7394 mutex_lock(&net->nft.commit_mutex);
7390 list_splice(&module_list, &net->nft.module_list);7395 list_splice(&module_list, &net->nft.module_list);
@@ -8167,6 +8172,7 @@ static void __net_exit nf_tables_exit_net(struct net *net) · 776 unmodified lines
8167 __nft_release_tables(net);8172 __nft_release_tables(net);
8168 mutex_unlock(&net->nft.commit_mutex);8173 mutex_unlock(&net->nft.commit_mutex);
8169 WARN_ON_ONCE(!list_empty(&net->nft.tables));8174 WARN_ON_ONCE(!list_empty(&net->nft.tables));
8175 WARN_ON_ONCE(!list_empty(&net->nft.module_list));
8170}8176}
8171 8177
8172static struct pernet_operations nf_tables_net_ops = {8178static struct pernet_operations nf_tables_net_ops = {
net/netfilter/nfnetlink_cthelper.c+2−0
@@ -742,6 +742,8 @@ static const struct nla_policy nfnl_cthelper_policy[NFCTH_MAX+1] = { · 741 unmodified lines
742 [NFCTH_NAME] = { .type = NLA_NUL_STRING,742 [NFCTH_NAME] = { .type = NLA_NUL_STRING,
743 .len = NF_CT_HELPER_NAME_LEN-1 },743 .len = NF_CT_HELPER_NAME_LEN-1 },
744 [NFCTH_QUEUE_NUM] = { .type = NLA_U32, },744 [NFCTH_QUEUE_NUM] = { .type = NLA_U32, },
745 [NFCTH_PRIV_DATA_LEN] = { .type = NLA_U32, },
746 [NFCTH_STATUS] = { .type = NLA_U32, },
745};747};
746 748
747static const struct nfnl_callback nfnl_cthelper_cb[NFNL_MSG_CTHELPER_MAX] = {749static const struct nfnl_callback nfnl_cthelper_cb[NFNL_MSG_CTHELPER_MAX] = {
net/netfilter/nft_chain_nat.c+1−0
@@ -89,6 +89,7 @@ static const struct nft_chain_type nft_chain_nat_inet = { · 88 unmodified lines
89 .name = "nat",89 .name = "nat",
90 .type = NFT_CHAIN_T_NAT,90 .type = NFT_CHAIN_T_NAT,
91 .family = NFPROTO_INET,91 .family = NFPROTO_INET,
92 .owner = THIS_MODULE,
92 .hook_mask = (1 << NF_INET_PRE_ROUTING) |93 .hook_mask = (1 << NF_INET_PRE_ROUTING) |
93 (1 << NF_INET_LOCAL_IN) |94 (1 << NF_INET_LOCAL_IN) |
94 (1 << NF_INET_LOCAL_OUT) |95 (1 << NF_INET_LOCAL_OUT) |
net/netfilter/nft_payload.c+1−0
@@ -129,6 +129,7 @@ static const struct nla_policy nft_payload_policy[NFTA_PAYLOAD_MAX + 1] = { · 128 unmodified lines
129 [NFTA_PAYLOAD_LEN] = { .type = NLA_U32 },129 [NFTA_PAYLOAD_LEN] = { .type = NLA_U32 },
130 [NFTA_PAYLOAD_CSUM_TYPE] = { .type = NLA_U32 },130 [NFTA_PAYLOAD_CSUM_TYPE] = { .type = NLA_U32 },
131 [NFTA_PAYLOAD_CSUM_OFFSET] = { .type = NLA_U32 },131 [NFTA_PAYLOAD_CSUM_OFFSET] = { .type = NLA_U32 },
132 [NFTA_PAYLOAD_CSUM_FLAGS] = { .type = NLA_U32 },
132};133};
133 134
134static int nft_payload_init(const struct nft_ctx *ctx,135static int nft_payload_init(const struct nft_ctx *ctx,
net/netfilter/nft_tunnel.c+2−0
@@ -339,6 +339,8 @@ static const struct nla_policy nft_tunnel_key_policy[NFTA_TUNNEL_KEY_MAX + 1] = · 338 unmodified lines
339 [NFTA_TUNNEL_KEY_FLAGS] = { .type = NLA_U32, },339 [NFTA_TUNNEL_KEY_FLAGS] = { .type = NLA_U32, },
340 [NFTA_TUNNEL_KEY_TOS] = { .type = NLA_U8, },340 [NFTA_TUNNEL_KEY_TOS] = { .type = NLA_U8, },
341 [NFTA_TUNNEL_KEY_TTL] = { .type = NLA_U8, },341 [NFTA_TUNNEL_KEY_TTL] = { .type = NLA_U8, },
342 [NFTA_TUNNEL_KEY_SPORT] = { .type = NLA_U16, },
343 [NFTA_TUNNEL_KEY_DPORT] = { .type = NLA_U16, },
342 [NFTA_TUNNEL_KEY_OPTS] = { .type = NLA_NESTED, },344 [NFTA_TUNNEL_KEY_OPTS] = { .type = NLA_NESTED, },
343};345};
344 346
net/netfilter/x_tables.c+3−3
@@ -1551,6 +1551,9 @@ static void *xt_mttg_seq_next(struct seq_file *seq, void *v, loff_t *ppos, · 1550 unmodified lines
1551 uint8_t nfproto = (unsigned long)PDE_DATA(file_inode(seq->file));1551 uint8_t nfproto = (unsigned long)PDE_DATA(file_inode(seq->file));
1552 struct nf_mttg_trav *trav = seq->private;1552 struct nf_mttg_trav *trav = seq->private;
1553 1553
1554 if (ppos != NULL)
1555 ++(*ppos);
1556
1554 switch (trav->class) {1557 switch (trav->class) {
1555 case MTTG_TRAV_INIT:1558 case MTTG_TRAV_INIT:
1556 trav->class = MTTG_TRAV_NFP_UNSPEC;1559 trav->class = MTTG_TRAV_NFP_UNSPEC;
@@ -1576,9 +1579,6 @@ static void *xt_mttg_seq_next(struct seq_file *seq, void *v, loff_t *ppos, · 19 unmodified lines
1576 default:1579 default:
1577 return NULL;1580 return NULL;
1578 }1581 }
1579
1580 if (ppos != NULL)
1581 ++*ppos;
1582 return trav;1582 return trav;
1583}1583}
1584 1584
net/netfilter/xt_recent.c+1−1
@@ -492,12 +492,12 @@ static void *recent_seq_next(struct seq_file *seq, void *v, loff_t *pos) · 491 unmodified lines
492 const struct recent_entry *e = v;492 const struct recent_entry *e = v;
493 const struct list_head *head = e->list.next;493 const struct list_head *head = e->list.next;
494 494
495 (*pos)++;
495 while (head == &t->iphash[st->bucket]) {496 while (head == &t->iphash[st->bucket]) {
496 if (++st->bucket >= ip_list_hash_size)497 if (++st->bucket >= ip_list_hash_size)
497 return NULL;498 return NULL;
498 head = t->iphash[st->bucket].next;499 head = t->iphash[st->bucket].next;
499 }500 }
500 (*pos)++;
501 return list_entry(head, struct recent_entry, list);501 return list_entry(head, struct recent_entry, list);
502}502}
503 503
net/netlink/af_netlink.c+1−1
@@ -2434,7 +2434,7 @@ void netlink_ack(struct sk_buff *in_skb, struct nlmsghdr *nlh, int err, · 2433 unmodified lines
2434 in_skb->len))2434 in_skb->len))
2435 WARN_ON(nla_put_u32(skb, NLMSGERR_ATTR_OFFS,2435 WARN_ON(nla_put_u32(skb, NLMSGERR_ATTR_OFFS,
2436 (u8 *)extack->bad_attr -2436 (u8 *)extack->bad_attr -
2437 in_skb->data));2437 (u8 *)nlh));
2438 } else {2438 } else {
2439 if (extack->cookie_len)2439 if (extack->cookie_len)
2440 WARN_ON(nla_put(skb, NLMSGERR_ATTR_COOKIE,2440 WARN_ON(nla_put(skb, NLMSGERR_ATTR_COOKIE,
net/nfc/hci/core.c+16−3
@@ -181,13 +181,20 @@ exit: · 180 unmodified lines
181void nfc_hci_cmd_received(struct nfc_hci_dev *hdev, u8 pipe, u8 cmd,181void nfc_hci_cmd_received(struct nfc_hci_dev *hdev, u8 pipe, u8 cmd,
182 struct sk_buff *skb)182 struct sk_buff *skb)
183{183{
184 u8 gate = hdev->pipes[pipe].gate;
185 u8 status = NFC_HCI_ANY_OK;184 u8 status = NFC_HCI_ANY_OK;
186 struct hci_create_pipe_resp *create_info;185 struct hci_create_pipe_resp *create_info;
187 struct hci_delete_pipe_noti *delete_info;186 struct hci_delete_pipe_noti *delete_info;
188 struct hci_all_pipe_cleared_noti *cleared_info;187 struct hci_all_pipe_cleared_noti *cleared_info;
188 u8 gate;
189 189
190 pr_debug("from gate %x pipe %x cmd %x\n", gate, pipe, cmd);190 pr_debug("from pipe %x cmd %x\n", pipe, cmd);
191
192 if (pipe >= NFC_HCI_MAX_PIPES) {
193 status = NFC_HCI_ANY_E_NOK;
194 goto exit;
195 }
196
197 gate = hdev->pipes[pipe].gate;
191 198
192 switch (cmd) {199 switch (cmd) {
193 case NFC_HCI_ADM_NOTIFY_PIPE_CREATED:200 case NFC_HCI_ADM_NOTIFY_PIPE_CREATED:
@@ -375,8 +382,14 @@ void nfc_hci_event_received(struct nfc_hci_dev *hdev, u8 pipe, u8 event, · 181 unmodified lines
375 struct sk_buff *skb)382 struct sk_buff *skb)
376{383{
377 int r = 0;384 int r = 0;
378 u8 gate = hdev->pipes[pipe].gate;385 u8 gate;
386
387 if (pipe >= NFC_HCI_MAX_PIPES) {
388 pr_err("Discarded event %x to invalid pipe %x\n", event, pipe);
389 goto exit;
390 }
379 391
392 gate = hdev->pipes[pipe].gate;
380 if (gate == NFC_HCI_INVALID_GATE) {393 if (gate == NFC_HCI_INVALID_GATE) {
381 pr_err("Discarded event %x to unopened pipe %x\n", event, pipe);394 pr_err("Discarded event %x to unopened pipe %x\n", event, pipe);
382 goto exit;395 goto exit;
net/nfc/netlink.c+4−0
@@ -32,6 +32,7 @@ static const struct nla_policy nfc_genl_policy[NFC_ATTR_MAX + 1] = { · 31 unmodified lines
32 [NFC_ATTR_DEVICE_NAME] = { .type = NLA_STRING,32 [NFC_ATTR_DEVICE_NAME] = { .type = NLA_STRING,
33 .len = NFC_DEVICE_NAME_MAXSIZE },33 .len = NFC_DEVICE_NAME_MAXSIZE },
34 [NFC_ATTR_PROTOCOLS] = { .type = NLA_U32 },34 [NFC_ATTR_PROTOCOLS] = { .type = NLA_U32 },
35 [NFC_ATTR_TARGET_INDEX] = { .type = NLA_U32 },
35 [NFC_ATTR_COMM_MODE] = { .type = NLA_U8 },36 [NFC_ATTR_COMM_MODE] = { .type = NLA_U8 },
36 [NFC_ATTR_RF_MODE] = { .type = NLA_U8 },37 [NFC_ATTR_RF_MODE] = { .type = NLA_U8 },
37 [NFC_ATTR_DEVICE_POWERED] = { .type = NLA_U8 },38 [NFC_ATTR_DEVICE_POWERED] = { .type = NLA_U8 },
@@ -43,7 +44,10 @@ static const struct nla_policy nfc_genl_policy[NFC_ATTR_MAX + 1] = { · 5 unmodified lines
43 [NFC_ATTR_LLC_SDP] = { .type = NLA_NESTED },44 [NFC_ATTR_LLC_SDP] = { .type = NLA_NESTED },
44 [NFC_ATTR_FIRMWARE_NAME] = { .type = NLA_STRING,45 [NFC_ATTR_FIRMWARE_NAME] = { .type = NLA_STRING,
45 .len = NFC_FIRMWARE_NAME_MAXSIZE },46 .len = NFC_FIRMWARE_NAME_MAXSIZE },
47 [NFC_ATTR_SE_INDEX] = { .type = NLA_U32 },
46 [NFC_ATTR_SE_APDU] = { .type = NLA_BINARY },48 [NFC_ATTR_SE_APDU] = { .type = NLA_BINARY },
49 [NFC_ATTR_VENDOR_ID] = { .type = NLA_U32 },
50 [NFC_ATTR_VENDOR_SUBCMD] = { .type = NLA_U32 },
47 [NFC_ATTR_VENDOR_DATA] = { .type = NLA_BINARY },51 [NFC_ATTR_VENDOR_DATA] = { .type = NLA_BINARY },
48 52
49};53};
net/openvswitch/datapath.c+1−0
@@ -645,6 +645,7 @@ static const struct nla_policy packet_policy[OVS_PACKET_ATTR_MAX + 1] = { · 644 unmodified lines
645 [OVS_PACKET_ATTR_ACTIONS] = { .type = NLA_NESTED },645 [OVS_PACKET_ATTR_ACTIONS] = { .type = NLA_NESTED },
646 [OVS_PACKET_ATTR_PROBE] = { .type = NLA_FLAG },646 [OVS_PACKET_ATTR_PROBE] = { .type = NLA_FLAG },
647 [OVS_PACKET_ATTR_MRU] = { .type = NLA_U16 },647 [OVS_PACKET_ATTR_MRU] = { .type = NLA_U16 },
648 [OVS_PACKET_ATTR_HASH] = { .type = NLA_U64 },
648};649};
649 650
650static const struct genl_ops dp_packet_genl_ops[] = {651static const struct genl_ops dp_packet_genl_ops[] = {
net/packet/af_packet.c+7−6
@@ -2274,6 +2274,13 @@ static int tpacket_rcv(struct sk_buff *skb, struct net_device *dev, · 2273 unmodified lines
2274 TP_STATUS_KERNEL, (macoff+snaplen));2274 TP_STATUS_KERNEL, (macoff+snaplen));
2275 if (!h.raw)2275 if (!h.raw)
2276 goto drop_n_account;2276 goto drop_n_account;
2277
2278 if (do_vnet &&
2279 virtio_net_hdr_from_skb(skb, h.raw + macoff -
2280 sizeof(struct virtio_net_hdr),
2281 vio_le(), true, 0))
2282 goto drop_n_account;
2283
2277 if (po->tp_version <= TPACKET_V2) {2284 if (po->tp_version <= TPACKET_V2) {
2278 packet_increment_rx_head(po, &po->rx_ring);2285 packet_increment_rx_head(po, &po->rx_ring);
2279 /*2286 /*
@@ -2286,12 +2293,6 @@ static int tpacket_rcv(struct sk_buff *skb, struct net_device *dev, · 6 unmodified lines
2286 status |= TP_STATUS_LOSING;2293 status |= TP_STATUS_LOSING;
2287 }2294 }
2288 2295
2289 if (do_vnet &&
2290 virtio_net_hdr_from_skb(skb, h.raw + macoff -
2291 sizeof(struct virtio_net_hdr),
2292 vio_le(), true, 0))
2293 goto drop_n_account;
2294
2295 po->stats.stats1.tp_packets++;2296 po->stats.stats1.tp_packets++;
2296 if (copy_skb) {2297 if (copy_skb) {
2297 status |= TP_STATUS_COPY;2298 status |= TP_STATUS_COPY;
net/sched/sch_fq.c+1−0
@@ -744,6 +744,7 @@ static const struct nla_policy fq_policy[TCA_FQ_MAX + 1] = { · 743 unmodified lines
744 [TCA_FQ_FLOW_MAX_RATE] = { .type = NLA_U32 },744 [TCA_FQ_FLOW_MAX_RATE] = { .type = NLA_U32 },
745 [TCA_FQ_BUCKETS_LOG] = { .type = NLA_U32 },745 [TCA_FQ_BUCKETS_LOG] = { .type = NLA_U32 },
746 [TCA_FQ_FLOW_REFILL_DELAY] = { .type = NLA_U32 },746 [TCA_FQ_FLOW_REFILL_DELAY] = { .type = NLA_U32 },
747 [TCA_FQ_ORPHAN_MASK] = { .type = NLA_U32 },
747 [TCA_FQ_LOW_RATE_THRESHOLD] = { .type = NLA_U32 },748 [TCA_FQ_LOW_RATE_THRESHOLD] = { .type = NLA_U32 },
748 [TCA_FQ_CE_THRESHOLD] = { .type = NLA_U32 },749 [TCA_FQ_CE_THRESHOLD] = { .type = NLA_U32 },
749};750};
net/sched/sch_taprio.c+10−3
@@ -564,8 +564,10 @@ static struct sk_buff *taprio_dequeue_soft(struct Qdisc *sch) · 563 unmodified lines
564 prio = skb->priority;564 prio = skb->priority;
565 tc = netdev_get_prio_tc_map(dev, prio);565 tc = netdev_get_prio_tc_map(dev, prio);
566 566
567 if (!(gate_mask & BIT(tc)))567 if (!(gate_mask & BIT(tc))) {
568 skb = NULL;
568 continue;569 continue;
570 }
569 571
570 len = qdisc_pkt_len(skb);572 len = qdisc_pkt_len(skb);
571 guard = ktime_add_ns(taprio_get_time(q),573 guard = ktime_add_ns(taprio_get_time(q),
@@ -575,13 +577,17 @@ static struct sk_buff *taprio_dequeue_soft(struct Qdisc *sch) · 3 unmodified lines
575 * guard band ...577 * guard band ...
576 */578 */
577 if (gate_mask != TAPRIO_ALL_GATES_OPEN &&579 if (gate_mask != TAPRIO_ALL_GATES_OPEN &&
578 ktime_after(guard, entry->close_time))580 ktime_after(guard, entry->close_time)) {
581 skb = NULL;
579 continue;582 continue;
583 }
580 584
581 /* ... and no budget. */585 /* ... and no budget. */
582 if (gate_mask != TAPRIO_ALL_GATES_OPEN &&586 if (gate_mask != TAPRIO_ALL_GATES_OPEN &&
583 atomic_sub_return(len, &entry->budget) < 0)587 atomic_sub_return(len, &entry->budget) < 0) {
588 skb = NULL;
584 continue;589 continue;
590 }
585 591
586 skb = child->ops->dequeue(child);592 skb = child->ops->dequeue(child);
587 if (unlikely(!skb))593 if (unlikely(!skb))
@@ -768,6 +774,7 @@ static const struct nla_policy taprio_policy[TCA_TAPRIO_ATTR_MAX + 1] = { · 180 unmodified lines
768 [TCA_TAPRIO_ATTR_SCHED_CYCLE_TIME] = { .type = NLA_S64 },774 [TCA_TAPRIO_ATTR_SCHED_CYCLE_TIME] = { .type = NLA_S64 },
769 [TCA_TAPRIO_ATTR_SCHED_CYCLE_TIME_EXTENSION] = { .type = NLA_S64 },775 [TCA_TAPRIO_ATTR_SCHED_CYCLE_TIME_EXTENSION] = { .type = NLA_S64 },
770 [TCA_TAPRIO_ATTR_FLAGS] = { .type = NLA_U32 },776 [TCA_TAPRIO_ATTR_FLAGS] = { .type = NLA_U32 },
777 [TCA_TAPRIO_ATTR_TXTIME_DELAY] = { .type = NLA_U32 },
771};778};
772 779
773static int fill_sched_entry(struct nlattr **tb, struct sched_entry *entry,780static int fill_sched_entry(struct nlattr **tb, struct sched_entry *entry,
net/sctp/diag.c+2−6
@@ -237,15 +237,11 @@ static size_t inet_assoc_attr_size(struct sctp_association *asoc) · 236 unmodified lines
237 addrcnt++;237 addrcnt++;
238 238
239 return nla_total_size(sizeof(struct sctp_info))239 return nla_total_size(sizeof(struct sctp_info))
240 + nla_total_size(1) /* INET_DIAG_SHUTDOWN */
241 + nla_total_size(1) /* INET_DIAG_TOS */
242 + nla_total_size(1) /* INET_DIAG_TCLASS */
243 + nla_total_size(4) /* INET_DIAG_MARK */
244 + nla_total_size(4) /* INET_DIAG_CLASS_ID */
245 + nla_total_size(addrlen * asoc->peer.transport_count)240 + nla_total_size(addrlen * asoc->peer.transport_count)
246 + nla_total_size(addrlen * addrcnt)241 + nla_total_size(addrlen * addrcnt)
247 + nla_total_size(sizeof(struct inet_diag_meminfo))
248 + nla_total_size(sizeof(struct inet_diag_msg))242 + nla_total_size(sizeof(struct inet_diag_msg))
243 + inet_diag_msg_attrs_size()
244 + nla_total_size(sizeof(struct inet_diag_meminfo))
249 + 64;245 + 64;
250}246}
251 247
net/smc/smc_ib.c+1−0
@@ -582,6 +582,7 @@ static void smc_ib_remove_dev(struct ib_device *ibdev, void *client_data) · 581 unmodified lines
582 smc_smcr_terminate_all(smcibdev);582 smc_smcr_terminate_all(smcibdev);
583 smc_ib_cleanup_per_ibdev(smcibdev);583 smc_ib_cleanup_per_ibdev(smcibdev);
584 ib_unregister_event_handler(&smcibdev->event_handler);584 ib_unregister_event_handler(&smcibdev->event_handler);
585 cancel_work_sync(&smcibdev->port_event_work);
585 kfree(smcibdev);586 kfree(smcibdev);
586}587}
587 588
net/socket.c+5−3
@@ -1707,7 +1707,8 @@ SYSCALL_DEFINE2(listen, int, fd, int, backlog) · 1706 unmodified lines
1707 1707
1708int __sys_accept4_file(struct file *file, unsigned file_flags,1708int __sys_accept4_file(struct file *file, unsigned file_flags,
1709 struct sockaddr __user *upeer_sockaddr,1709 struct sockaddr __user *upeer_sockaddr,
1710 int __user *upeer_addrlen, int flags)1710 int __user *upeer_addrlen, int flags,
1711 unsigned long nofile)
1711{1712{
1712 struct socket *sock, *newsock;1713 struct socket *sock, *newsock;
1713 struct file *newfile;1714 struct file *newfile;
@@ -1738,7 +1739,7 @@ int __sys_accept4_file(struct file *file, unsigned file_flags, · 24 unmodified lines
1738 */1739 */
1739 __module_get(newsock->ops->owner);1740 __module_get(newsock->ops->owner);
1740 1741
1741 newfd = get_unused_fd_flags(flags);1742 newfd = __get_unused_fd_flags(flags, nofile);
1742 if (unlikely(newfd < 0)) {1743 if (unlikely(newfd < 0)) {
1743 err = newfd;1744 err = newfd;
1744 sock_release(newsock);1745 sock_release(newsock);
@@ -1807,7 +1808,8 @@ int __sys_accept4(int fd, struct sockaddr __user *upeer_sockaddr, · 62 unmodified lines
1807 f = fdget(fd);1808 f = fdget(fd);
1808 if (f.file) {1809 if (f.file) {
1809 ret = __sys_accept4_file(f.file, 0, upeer_sockaddr,1810 ret = __sys_accept4_file(f.file, 0, upeer_sockaddr,
1810 upeer_addrlen, flags);1811 upeer_addrlen, flags,
1812 rlimit(RLIMIT_NOFILE));
1811 if (f.flags)1813 if (f.flags)
1812 fput(f.file);1814 fput(f.file);
1813 }1815 }
net/tipc/netlink.c+1−0
@@ -116,6 +116,7 @@ const struct nla_policy tipc_nl_prop_policy[TIPC_NLA_PROP_MAX + 1] = { · 115 unmodified lines
116 [TIPC_NLA_PROP_PRIO] = { .type = NLA_U32 },116 [TIPC_NLA_PROP_PRIO] = { .type = NLA_U32 },
117 [TIPC_NLA_PROP_TOL] = { .type = NLA_U32 },117 [TIPC_NLA_PROP_TOL] = { .type = NLA_U32 },
118 [TIPC_NLA_PROP_WIN] = { .type = NLA_U32 },118 [TIPC_NLA_PROP_WIN] = { .type = NLA_U32 },
119 [TIPC_NLA_PROP_MTU] = { .type = NLA_U32 },
119 [TIPC_NLA_PROP_BROADCAST] = { .type = NLA_U32 },120 [TIPC_NLA_PROP_BROADCAST] = { .type = NLA_U32 },
120 [TIPC_NLA_PROP_BROADCAST_RATIO] = { .type = NLA_U32 }121 [TIPC_NLA_PROP_BROADCAST_RATIO] = { .type = NLA_U32 }
121};122};
net/wireless/nl80211.c+5−0
@@ -470,6 +470,8 @@ const struct nla_policy nl80211_policy[NUM_NL80211_ATTR] = { · 469 unmodified lines
470 [NL80211_ATTR_WOWLAN_TRIGGERS] = { .type = NLA_NESTED },470 [NL80211_ATTR_WOWLAN_TRIGGERS] = { .type = NLA_NESTED },
471 [NL80211_ATTR_STA_PLINK_STATE] =471 [NL80211_ATTR_STA_PLINK_STATE] =
472 NLA_POLICY_MAX(NLA_U8, NUM_NL80211_PLINK_STATES - 1),472 NLA_POLICY_MAX(NLA_U8, NUM_NL80211_PLINK_STATES - 1),
473 [NL80211_ATTR_MEASUREMENT_DURATION] = { .type = NLA_U16 },
474 [NL80211_ATTR_MEASUREMENT_DURATION_MANDATORY] = { .type = NLA_FLAG },
473 [NL80211_ATTR_MESH_PEER_AID] =475 [NL80211_ATTR_MESH_PEER_AID] =
474 NLA_POLICY_RANGE(NLA_U16, 1, IEEE80211_MAX_AID),476 NLA_POLICY_RANGE(NLA_U16, 1, IEEE80211_MAX_AID),
475 [NL80211_ATTR_SCHED_SCAN_INTERVAL] = { .type = NLA_U32 },477 [NL80211_ATTR_SCHED_SCAN_INTERVAL] = { .type = NLA_U32 },
@@ -531,6 +533,8 @@ const struct nla_policy nl80211_policy[NUM_NL80211_ATTR] = { · 55 unmodified lines
531 [NL80211_ATTR_MDID] = { .type = NLA_U16 },533 [NL80211_ATTR_MDID] = { .type = NLA_U16 },
532 [NL80211_ATTR_IE_RIC] = { .type = NLA_BINARY,534 [NL80211_ATTR_IE_RIC] = { .type = NLA_BINARY,
533 .len = IEEE80211_MAX_DATA_LEN },535 .len = IEEE80211_MAX_DATA_LEN },
536 [NL80211_ATTR_CRIT_PROT_ID] = { .type = NLA_U16 },
537 [NL80211_ATTR_MAX_CRIT_PROT_DURATION] = { .type = NLA_U16 },
534 [NL80211_ATTR_PEER_AID] =538 [NL80211_ATTR_PEER_AID] =
535 NLA_POLICY_RANGE(NLA_U16, 1, IEEE80211_MAX_AID),539 NLA_POLICY_RANGE(NLA_U16, 1, IEEE80211_MAX_AID),
536 [NL80211_ATTR_CH_SWITCH_COUNT] = { .type = NLA_U32 },540 [NL80211_ATTR_CH_SWITCH_COUNT] = { .type = NLA_U32 },
@@ -561,6 +565,7 @@ const struct nla_policy nl80211_policy[NUM_NL80211_ATTR] = { · 24 unmodified lines
561 NLA_POLICY_MAX(NLA_U8, IEEE80211_NUM_UPS - 1),565 NLA_POLICY_MAX(NLA_U8, IEEE80211_NUM_UPS - 1),
562 [NL80211_ATTR_ADMITTED_TIME] = { .type = NLA_U16 },566 [NL80211_ATTR_ADMITTED_TIME] = { .type = NLA_U16 },
563 [NL80211_ATTR_SMPS_MODE] = { .type = NLA_U8 },567 [NL80211_ATTR_SMPS_MODE] = { .type = NLA_U8 },
568 [NL80211_ATTR_OPER_CLASS] = { .type = NLA_U8 },
564 [NL80211_ATTR_MAC_MASK] = {569 [NL80211_ATTR_MAC_MASK] = {
565 .type = NLA_EXACT_LEN_WARN,570 .type = NLA_EXACT_LEN_WARN,
566 .len = ETH_ALEN571 .len = ETH_ALEN
scripts/Kconfig.include+7−0
@@ -44,3 +44,10 @@ $(error-if,$(success, $(LD) -v | grep -q gold), gold linker '$(LD)' not supporte · 43 unmodified lines
44 44
45# gcc version including patch level45# gcc version including patch level
46gcc-version := $(shell,$(srctree)/scripts/gcc-version.sh $(CC))46gcc-version := $(shell,$(srctree)/scripts/gcc-version.sh $(CC))
47
48# machine bit flags
49# $(m32-flag): -m32 if the compiler supports it, or an empty string otherwise.
50# $(m64-flag): -m64 if the compiler supports it, or an empty string otherwise.
51cc-option-bit = $(if-success,$(CC) -Werror $(1) -E -x c /dev/null -o /dev/null,$(1))
52m32-flag := $(cc-option-bit,-m32)
53m64-flag := $(cc-option-bit,-m64)
scripts/Makefile.extrawarn+1−0
@@ -48,6 +48,7 @@ KBUILD_CFLAGS += -Wno-initializer-overrides · 47 unmodified lines
48KBUILD_CFLAGS += -Wno-format48KBUILD_CFLAGS += -Wno-format
49KBUILD_CFLAGS += -Wno-sign-compare49KBUILD_CFLAGS += -Wno-sign-compare
50KBUILD_CFLAGS += -Wno-format-zero-length50KBUILD_CFLAGS += -Wno-format-zero-length
51KBUILD_CFLAGS += $(call cc-disable-warning, pointer-to-enum-cast)
51endif52endif
52 53
53endif54endif
scripts/export_report.pl+1−1
@@ -94,7 +94,7 @@ if (defined $opt{'o'}) { · 93 unmodified lines
94#94#
95while ( <$module_symvers> ) {95while ( <$module_symvers> ) {
96 chomp;96 chomp;
97 my (undef, $symbol, $namespace, $module, $gpl) = split('\t');97 my (undef, $symbol, $module, $gpl, $namespace) = split('\t');
98 $SYMBOL { $symbol } = [ $module , "0" , $symbol, $gpl];98 $SYMBOL { $symbol } = [ $module , "0" , $symbol, $gpl];
99}99}
100close($module_symvers);100close($module_symvers);
scripts/kallsyms.c+4−4
@@ -195,13 +195,13 @@ static struct sym_entry *read_symbol(FILE *in) · 194 unmodified lines
195 return NULL;195 return NULL;
196 }196 }
197 197
198 if (is_ignored_symbol(name, type))
199 return NULL;
200
201 /* Ignore most absolute/undefined (?) symbols. */
202 if (strcmp(name, "_text") == 0)198 if (strcmp(name, "_text") == 0)
203 _text = addr;199 _text = addr;
204 200
201 /* Ignore most absolute/undefined (?) symbols. */
202 if (is_ignored_symbol(name, type))
203 return NULL;
204
205 check_symbol_range(name, addr, text_ranges, ARRAY_SIZE(text_ranges));205 check_symbol_range(name, addr, text_ranges, ARRAY_SIZE(text_ranges));
206 check_symbol_range(name, addr, &percpu_range, 1);206 check_symbol_range(name, addr, &percpu_range, 1);
207 207
scripts/mod/modpost.c+14−13
@@ -308,7 +308,8 @@ static const char *sec_name(struct elf_info *elf, int secindex) · 307 unmodified lines
308 308
309static void *sym_get_data(const struct elf_info *info, const Elf_Sym *sym)309static void *sym_get_data(const struct elf_info *info, const Elf_Sym *sym)
310{310{
311 Elf_Shdr *sechdr = &info->sechdrs[sym->st_shndx];311 unsigned int secindex = get_secindex(info, sym);
312 Elf_Shdr *sechdr = &info->sechdrs[secindex];
312 unsigned long offset;313 unsigned long offset;
313 314
314 offset = sym->st_value;315 offset = sym->st_value;
@@ -2427,7 +2428,7 @@ static void write_if_changed(struct buffer *b, const char *fname) · 2112 unmodified lines
2427}2428}
2428 2429
2429/* parse Module.symvers file. line format:2430/* parse Module.symvers file. line format:
2430 * 0x12345678<tab>symbol<tab>module[[<tab>export]<tab>something]2431 * 0x12345678<tab>symbol<tab>module<tab>export<tab>namespace
2431 **/2432 **/
2432static void read_dump(const char *fname, unsigned int kernel)2433static void read_dump(const char *fname, unsigned int kernel)
2433{2434{
@@ -2440,7 +2441,7 @@ static void read_dump(const char *fname, unsigned int kernel) · 6 unmodified lines
2440 return;2441 return;
2441 2442
2442 while ((line = get_next_line(&pos, file, size))) {2443 while ((line = get_next_line(&pos, file, size))) {
2443 char *symname, *namespace, *modname, *d, *export, *end;2444 char *symname, *namespace, *modname, *d, *export;
2444 unsigned int crc;2445 unsigned int crc;
2445 struct module *mod;2446 struct module *mod;
2446 struct symbol *s;2447 struct symbol *s;
@@ -2448,16 +2449,16 @@ static void read_dump(const char *fname, unsigned int kernel) · 1 unmodified line
2448 if (!(symname = strchr(line, '\t')))2449 if (!(symname = strchr(line, '\t')))
2449 goto fail;2450 goto fail;
2450 *symname++ = '\0';2451 *symname++ = '\0';
2451 if (!(namespace = strchr(symname, '\t')))2452 if (!(modname = strchr(symname, '\t')))
2452 goto fail;
2453 *namespace++ = '\0';
2454 if (!(modname = strchr(namespace, '\t')))
2455 goto fail;2453 goto fail;
2456 *modname++ = '\0';2454 *modname++ = '\0';
2457 if ((export = strchr(modname, '\t')) != NULL)2455 if (!(export = strchr(modname, '\t')))
2458 *export++ = '\0';2456 goto fail;
2459 if (export && ((end = strchr(export, '\t')) != NULL))2457 *export++ = '\0';
2460 *end = '\0';2458 if (!(namespace = strchr(export, '\t')))
2459 goto fail;
2460 *namespace++ = '\0';
2461
2461 crc = strtoul(line, &d, 16);2462 crc = strtoul(line, &d, 16);
2462 if (*symname == '\0' || *modname == '\0' || *d != '\0')2463 if (*symname == '\0' || *modname == '\0' || *d != '\0')
2463 goto fail;2464 goto fail;
@@ -2508,9 +2509,9 @@ static void write_dump(const char *fname) · 44 unmodified lines
2508 namespace = symbol->namespace;2509 namespace = symbol->namespace;
2509 buf_printf(&buf, "0x%08x\t%s\t%s\t%s\t%s\n",2510 buf_printf(&buf, "0x%08x\t%s\t%s\t%s\t%s\n",
2510 symbol->crc, symbol->name,2511 symbol->crc, symbol->name,
2511 namespace ? namespace : "",
2512 symbol->module->name,2512 symbol->module->name,
2513 export_str(symbol->export));2513 export_str(symbol->export),
2514 namespace ? namespace : "");
2514 }2515 }
2515 symbol = symbol->next;2516 symbol = symbol->next;
2516 }2517 }
sound/core/oss/pcm_plugin.c+10−2
@@ -111,7 +111,7 @@ int snd_pcm_plug_alloc(struct snd_pcm_substream *plug, snd_pcm_uframes_t frames) · 110 unmodified lines
111 while (plugin->next) {111 while (plugin->next) {
112 if (plugin->dst_frames)112 if (plugin->dst_frames)
113 frames = plugin->dst_frames(plugin, frames);113 frames = plugin->dst_frames(plugin, frames);
114 if (snd_BUG_ON((snd_pcm_sframes_t)frames <= 0))114 if ((snd_pcm_sframes_t)frames <= 0)
115 return -ENXIO;115 return -ENXIO;
116 plugin = plugin->next;116 plugin = plugin->next;
117 err = snd_pcm_plugin_alloc(plugin, frames);117 err = snd_pcm_plugin_alloc(plugin, frames);
@@ -123,7 +123,7 @@ int snd_pcm_plug_alloc(struct snd_pcm_substream *plug, snd_pcm_uframes_t frames) · 5 unmodified lines
123 while (plugin->prev) {123 while (plugin->prev) {
124 if (plugin->src_frames)124 if (plugin->src_frames)
125 frames = plugin->src_frames(plugin, frames);125 frames = plugin->src_frames(plugin, frames);
126 if (snd_BUG_ON((snd_pcm_sframes_t)frames <= 0))126 if ((snd_pcm_sframes_t)frames <= 0)
127 return -ENXIO;127 return -ENXIO;
128 plugin = plugin->prev;128 plugin = plugin->prev;
129 err = snd_pcm_plugin_alloc(plugin, frames);129 err = snd_pcm_plugin_alloc(plugin, frames);
@@ -209,6 +209,8 @@ snd_pcm_sframes_t snd_pcm_plug_client_size(struct snd_pcm_substream *plug, snd_p · 79 unmodified lines
209 if (stream == SNDRV_PCM_STREAM_PLAYBACK) {209 if (stream == SNDRV_PCM_STREAM_PLAYBACK) {
210 plugin = snd_pcm_plug_last(plug);210 plugin = snd_pcm_plug_last(plug);
211 while (plugin && drv_frames > 0) {211 while (plugin && drv_frames > 0) {
212 if (drv_frames > plugin->buf_frames)
213 drv_frames = plugin->buf_frames;
212 plugin_prev = plugin->prev;214 plugin_prev = plugin->prev;
213 if (plugin->src_frames)215 if (plugin->src_frames)
214 drv_frames = plugin->src_frames(plugin, drv_frames);216 drv_frames = plugin->src_frames(plugin, drv_frames);
@@ -220,6 +222,8 @@ snd_pcm_sframes_t snd_pcm_plug_client_size(struct snd_pcm_substream *plug, snd_p · 5 unmodified lines
220 plugin_next = plugin->next;222 plugin_next = plugin->next;
221 if (plugin->dst_frames)223 if (plugin->dst_frames)
222 drv_frames = plugin->dst_frames(plugin, drv_frames);224 drv_frames = plugin->dst_frames(plugin, drv_frames);
225 if (drv_frames > plugin->buf_frames)
226 drv_frames = plugin->buf_frames;
223 plugin = plugin_next;227 plugin = plugin_next;
224 }228 }
225 } else229 } else
@@ -248,11 +252,15 @@ snd_pcm_sframes_t snd_pcm_plug_slave_size(struct snd_pcm_substream *plug, snd_pc · 22 unmodified lines
248 if (frames < 0)252 if (frames < 0)
249 return frames;253 return frames;
250 }254 }
255 if (frames > plugin->buf_frames)
256 frames = plugin->buf_frames;
251 plugin = plugin_next;257 plugin = plugin_next;
252 }258 }
253 } else if (stream == SNDRV_PCM_STREAM_CAPTURE) {259 } else if (stream == SNDRV_PCM_STREAM_CAPTURE) {
254 plugin = snd_pcm_plug_last(plug);260 plugin = snd_pcm_plug_last(plug);
255 while (plugin) {261 while (plugin) {
262 if (frames > plugin->buf_frames)
263 frames = plugin->buf_frames;
256 plugin_prev = plugin->prev;264 plugin_prev = plugin->prev;
257 if (plugin->src_frames) {265 if (plugin->src_frames) {
258 frames = plugin->src_frames(plugin, frames);266 frames = plugin->src_frames(plugin, frames);
sound/core/seq/oss/seq_oss_midi.c+1−0
@@ -602,6 +602,7 @@ send_midi_event(struct seq_oss_devinfo *dp, struct snd_seq_event *ev, struct seq · 601 unmodified lines
602 len = snd_seq_oss_timer_start(dp->timer);602 len = snd_seq_oss_timer_start(dp->timer);
603 if (ev->type == SNDRV_SEQ_EVENT_SYSEX) {603 if (ev->type == SNDRV_SEQ_EVENT_SYSEX) {
604 snd_seq_oss_readq_sysex(dp->readq, mdev->seq_device, ev);604 snd_seq_oss_readq_sysex(dp->readq, mdev->seq_device, ev);
605 snd_midi_event_reset_decode(mdev->coder);
605 } else {606 } else {
606 len = snd_midi_event_decode(mdev->coder, msg, sizeof(msg), ev);607 len = snd_midi_event_decode(mdev->coder, msg, sizeof(msg), ev);
607 if (len > 0)608 if (len > 0)
sound/core/seq/seq_virmidi.c+1−0
@@ -81,6 +81,7 @@ static int snd_virmidi_dev_receive_event(struct snd_virmidi_dev *rdev, · 80 unmodified lines
81 if ((ev->flags & SNDRV_SEQ_EVENT_LENGTH_MASK) != SNDRV_SEQ_EVENT_LENGTH_VARIABLE)81 if ((ev->flags & SNDRV_SEQ_EVENT_LENGTH_MASK) != SNDRV_SEQ_EVENT_LENGTH_VARIABLE)
82 continue;82 continue;
83 snd_seq_dump_var_event(ev, (snd_seq_dump_func_t)snd_rawmidi_receive, vmidi->substream);83 snd_seq_dump_var_event(ev, (snd_seq_dump_func_t)snd_rawmidi_receive, vmidi->substream);
84 snd_midi_event_reset_decode(vmidi->parser);
84 } else {85 } else {
85 len = snd_midi_event_decode(vmidi->parser, msg, sizeof(msg), ev);86 len = snd_midi_event_decode(vmidi->parser, msg, sizeof(msg), ev);
86 if (len > 0)87 if (len > 0)
sound/pci/hda/patch_realtek.c+25−0
@@ -8051,6 +8051,8 @@ static int patch_alc269(struct hda_codec *codec) · 8050 unmodified lines
8051 spec->gen.mixer_nid = 0;8051 spec->gen.mixer_nid = 0;
8052 break;8052 break;
8053 case 0x10ec0225:8053 case 0x10ec0225:
8054 codec->power_save_node = 1;
8055 /* fall through */
8054 case 0x10ec0295:8056 case 0x10ec0295:
8055 case 0x10ec0299:8057 case 0x10ec0299:
8056 spec->codec_variant = ALC269_TYPE_ALC225;8058 spec->codec_variant = ALC269_TYPE_ALC225;
@@ -8610,6 +8612,8 @@ enum { · 553 unmodified lines
8610 ALC669_FIXUP_ACER_ASPIRE_ETHOS,8612 ALC669_FIXUP_ACER_ASPIRE_ETHOS,
8611 ALC669_FIXUP_ACER_ASPIRE_ETHOS_HEADSET,8613 ALC669_FIXUP_ACER_ASPIRE_ETHOS_HEADSET,
8612 ALC671_FIXUP_HP_HEADSET_MIC2,8614 ALC671_FIXUP_HP_HEADSET_MIC2,
8615 ALC662_FIXUP_ACER_X2660G_HEADSET_MODE,
8616 ALC662_FIXUP_ACER_NITRO_HEADSET_MODE,
8613};8617};
8614 8618
8615static const struct hda_fixup alc662_fixups[] = {8619static const struct hda_fixup alc662_fixups[] = {
@@ -8955,6 +8959,25 @@ static const struct hda_fixup alc662_fixups[] = { · 339 unmodified lines
8955 .type = HDA_FIXUP_FUNC,8959 .type = HDA_FIXUP_FUNC,
8956 .v.func = alc671_fixup_hp_headset_mic2,8960 .v.func = alc671_fixup_hp_headset_mic2,
8957 },8961 },
8962 [ALC662_FIXUP_ACER_X2660G_HEADSET_MODE] = {
8963 .type = HDA_FIXUP_PINS,
8964 .v.pins = (const struct hda_pintbl[]) {
8965 { 0x1a, 0x02a1113c }, /* use as headset mic, without its own jack detect */
8966 { }
8967 },
8968 .chained = true,
8969 .chain_id = ALC662_FIXUP_USI_FUNC
8970 },
8971 [ALC662_FIXUP_ACER_NITRO_HEADSET_MODE] = {
8972 .type = HDA_FIXUP_PINS,
8973 .v.pins = (const struct hda_pintbl[]) {
8974 { 0x1a, 0x01a11140 }, /* use as headset mic, without its own jack detect */
8975 { 0x1b, 0x0221144f },
8976 { }
8977 },
8978 .chained = true,
8979 .chain_id = ALC662_FIXUP_USI_FUNC
8980 },
8958};8981};
8959 8982
8960static const struct snd_pci_quirk alc662_fixup_tbl[] = {8983static const struct snd_pci_quirk alc662_fixup_tbl[] = {
@@ -8966,6 +8989,8 @@ static const struct snd_pci_quirk alc662_fixup_tbl[] = { · 5 unmodified lines
8966 SND_PCI_QUIRK(0x1025, 0x0349, "eMachines eM250", ALC662_FIXUP_INV_DMIC),8989 SND_PCI_QUIRK(0x1025, 0x0349, "eMachines eM250", ALC662_FIXUP_INV_DMIC),
8967 SND_PCI_QUIRK(0x1025, 0x034a, "Gateway LT27", ALC662_FIXUP_INV_DMIC),8990 SND_PCI_QUIRK(0x1025, 0x034a, "Gateway LT27", ALC662_FIXUP_INV_DMIC),
8968 SND_PCI_QUIRK(0x1025, 0x038b, "Acer Aspire 8943G", ALC662_FIXUP_ASPIRE),8991 SND_PCI_QUIRK(0x1025, 0x038b, "Acer Aspire 8943G", ALC662_FIXUP_ASPIRE),
8992 SND_PCI_QUIRK(0x1025, 0x123c, "Acer Nitro N50-600", ALC662_FIXUP_ACER_NITRO_HEADSET_MODE),
8993 SND_PCI_QUIRK(0x1025, 0x124e, "Acer 2660G", ALC662_FIXUP_ACER_X2660G_HEADSET_MODE),
8969 SND_PCI_QUIRK(0x1028, 0x05d8, "Dell", ALC668_FIXUP_DELL_MIC_NO_PRESENCE),8994 SND_PCI_QUIRK(0x1028, 0x05d8, "Dell", ALC668_FIXUP_DELL_MIC_NO_PRESENCE),
8970 SND_PCI_QUIRK(0x1028, 0x05db, "Dell", ALC668_FIXUP_DELL_MIC_NO_PRESENCE),8995 SND_PCI_QUIRK(0x1028, 0x05db, "Dell", ALC668_FIXUP_DELL_MIC_NO_PRESENCE),
8971 SND_PCI_QUIRK(0x1028, 0x05fe, "Dell XPS 15", ALC668_FIXUP_DELL_XPS13),8996 SND_PCI_QUIRK(0x1028, 0x05fe, "Dell XPS 15", ALC668_FIXUP_DELL_XPS13),
sound/usb/line6/driver.c+1−1
@@ -305,7 +305,7 @@ static void line6_data_received(struct urb *urb) · 304 unmodified lines
305 line6_midibuf_read(mb, line6->buffer_message,305 line6_midibuf_read(mb, line6->buffer_message,
306 LINE6_MIDI_MESSAGE_MAXLEN);306 LINE6_MIDI_MESSAGE_MAXLEN);
307 307
308 if (done == 0)308 if (done <= 0)
309 break;309 break;
310 310
311 line6->message_length = done;311 line6->message_length = done;
sound/usb/line6/midibuf.c+1−1
@@ -159,7 +159,7 @@ int line6_midibuf_read(struct midi_buffer *this, unsigned char *data, · 158 unmodified lines
159 int midi_length_prev =159 int midi_length_prev =
160 midibuf_message_length(this->command_prev);160 midibuf_message_length(this->command_prev);
161 161
162 if (midi_length_prev > 0) {162 if (midi_length_prev > 1) {
163 midi_length = midi_length_prev - 1;163 midi_length = midi_length_prev - 1;
164 repeat = 1;164 repeat = 1;
165 } else165 } else
tools/include/uapi/asm/errno.h+7−7
@@ -1,18 +1,18 @@
1/* SPDX-License-Identifier: GPL-2.0 */1/* SPDX-License-Identifier: GPL-2.0 */
2#if defined(__i386__) || defined(__x86_64__)2#if defined(__i386__) || defined(__x86_64__)
3#include "../../arch/x86/include/uapi/asm/errno.h"3#include "../../../arch/x86/include/uapi/asm/errno.h"
4#elif defined(__powerpc__)4#elif defined(__powerpc__)
5#include "../../arch/powerpc/include/uapi/asm/errno.h"5#include "../../../arch/powerpc/include/uapi/asm/errno.h"
6#elif defined(__sparc__)6#elif defined(__sparc__)
7#include "../../arch/sparc/include/uapi/asm/errno.h"7#include "../../../arch/sparc/include/uapi/asm/errno.h"
8#elif defined(__alpha__)8#elif defined(__alpha__)
9#include "../../arch/alpha/include/uapi/asm/errno.h"9#include "../../../arch/alpha/include/uapi/asm/errno.h"
10#elif defined(__mips__)10#elif defined(__mips__)
11#include "../../arch/mips/include/uapi/asm/errno.h"11#include "../../../arch/mips/include/uapi/asm/errno.h"
12#elif defined(__ia64__)12#elif defined(__ia64__)
13#include "../../arch/ia64/include/uapi/asm/errno.h"13#include "../../../arch/ia64/include/uapi/asm/errno.h"
14#elif defined(__xtensa__)14#elif defined(__xtensa__)
15#include "../../arch/xtensa/include/uapi/asm/errno.h"15#include "../../../arch/xtensa/include/uapi/asm/errno.h"
16#else16#else
17#include <asm-generic/errno.h>17#include <asm-generic/errno.h>
18#endif18#endif
tools/perf/arch/arm64/util/arm-spe.c+10−10
@@ -11,17 +11,17 @@ · 10 unmodified lines
11#include <linux/zalloc.h>11#include <linux/zalloc.h>
12#include <time.h>12#include <time.h>
13 13
14#include "../../util/cpumap.h"14#include "../../../util/cpumap.h"
15#include "../../util/event.h"15#include "../../../util/event.h"
16#include "../../util/evsel.h"16#include "../../../util/evsel.h"
17#include "../../util/evlist.h"17#include "../../../util/evlist.h"
18#include "../../util/session.h"18#include "../../../util/session.h"
19#include <internal/lib.h> // page_size19#include <internal/lib.h> // page_size
20#include "../../util/pmu.h"20#include "../../../util/pmu.h"
21#include "../../util/debug.h"21#include "../../../util/debug.h"
22#include "../../util/auxtrace.h"22#include "../../../util/auxtrace.h"
23#include "../../util/record.h"23#include "../../../util/record.h"
24#include "../../util/arm-spe.h"24#include "../../../util/arm-spe.h"
25 25
26#define KiB(x) ((x) * 1024)26#define KiB(x) ((x) * 1024)
27#define MiB(x) ((x) * 1024 * 1024)27#define MiB(x) ((x) * 1024 * 1024)
tools/perf/arch/arm64/util/perf_regs.c+1−1
@@ -1,5 +1,5 @@
1// SPDX-License-Identifier: GPL-2.01// SPDX-License-Identifier: GPL-2.0
2#include "../../util/perf_regs.h"2#include "../../../util/perf_regs.h"
3 3
4const struct sample_reg sample_reg_masks[] = {4const struct sample_reg sample_reg_masks[] = {
5 SMPL_REG_END5 SMPL_REG_END
tools/perf/arch/powerpc/util/perf_regs.c+2−2
@@ -4,8 +4,8 @@ · 3 unmodified lines
4#include <regex.h>4#include <regex.h>
5#include <linux/zalloc.h>5#include <linux/zalloc.h>
6 6
7#include "../../util/perf_regs.h"7#include "../../../util/perf_regs.h"
8#include "../../util/debug.h"8#include "../../../util/debug.h"
9 9
10#include <linux/kernel.h>10#include <linux/kernel.h>
11 11
tools/perf/arch/x86/util/auxtrace.c+7−7
@@ -7,13 +7,13 @@ · 6 unmodified lines
7#include <errno.h>7#include <errno.h>
8#include <stdbool.h>8#include <stdbool.h>
9 9
10#include "../../util/header.h"10#include "../../../util/header.h"
11#include "../../util/debug.h"11#include "../../../util/debug.h"
12#include "../../util/pmu.h"12#include "../../../util/pmu.h"
13#include "../../util/auxtrace.h"13#include "../../../util/auxtrace.h"
14#include "../../util/intel-pt.h"14#include "../../../util/intel-pt.h"
15#include "../../util/intel-bts.h"15#include "../../../util/intel-bts.h"
16#include "../../util/evlist.h"16#include "../../../util/evlist.h"
17 17
18static18static
19struct auxtrace_record *auxtrace_record__init_intel(struct evlist *evlist,19struct auxtrace_record *auxtrace_record__init_intel(struct evlist *evlist,
tools/perf/arch/x86/util/event.c+6−6
@@ -3,12 +3,12 @@ · 2 unmodified lines
3#include <linux/string.h>3#include <linux/string.h>
4#include <linux/zalloc.h>4#include <linux/zalloc.h>
5 5
6#include "../../util/event.h"6#include "../../../util/event.h"
7#include "../../util/synthetic-events.h"7#include "../../../util/synthetic-events.h"
8#include "../../util/machine.h"8#include "../../../util/machine.h"
9#include "../../util/tool.h"9#include "../../../util/tool.h"
10#include "../../util/map.h"10#include "../../../util/map.h"
11#include "../../util/debug.h"11#include "../../../util/debug.h"
12 12
13#if defined(__x86_64__)13#if defined(__x86_64__)
14 14
tools/perf/arch/x86/util/header.c+2−2
@@ -7,8 +7,8 @@ · 6 unmodified lines
7#include <string.h>7#include <string.h>
8#include <regex.h>8#include <regex.h>
9 9
10#include "../../util/debug.h"10#include "../../../util/debug.h"
11#include "../../util/header.h"11#include "../../../util/header.h"
12 12
13static inline void13static inline void
14cpuid(unsigned int op, unsigned int *a, unsigned int *b, unsigned int *c,14cpuid(unsigned int op, unsigned int *a, unsigned int *b, unsigned int *c,
tools/perf/arch/x86/util/intel-bts.c+12−12
@@ -11,18 +11,18 @@ · 10 unmodified lines
11#include <linux/log2.h>11#include <linux/log2.h>
12#include <linux/zalloc.h>12#include <linux/zalloc.h>
13 13
14#include "../../util/cpumap.h"14#include "../../../util/cpumap.h"
15#include "../../util/event.h"15#include "../../../util/event.h"
16#include "../../util/evsel.h"16#include "../../../util/evsel.h"
17#include "../../util/evlist.h"17#include "../../../util/evlist.h"
18#include "../../util/mmap.h"18#include "../../../util/mmap.h"
19#include "../../util/session.h"19#include "../../../util/session.h"
20#include "../../util/pmu.h"20#include "../../../util/pmu.h"
21#include "../../util/debug.h"21#include "../../../util/debug.h"
22#include "../../util/record.h"22#include "../../../util/record.h"
23#include "../../util/tsc.h"23#include "../../../util/tsc.h"
24#include "../../util/auxtrace.h"24#include "../../../util/auxtrace.h"
25#include "../../util/intel-bts.h"25#include "../../../util/intel-bts.h"
26#include <internal/lib.h> // page_size26#include <internal/lib.h> // page_size
27 27
28#define KiB(x) ((x) * 1024)28#define KiB(x) ((x) * 1024)
tools/perf/arch/x86/util/intel-pt.c+15−15
@@ -13,23 +13,23 @@ · 12 unmodified lines
13#include <linux/zalloc.h>13#include <linux/zalloc.h>
14#include <cpuid.h>14#include <cpuid.h>
15 15
16#include "../../util/session.h"16#include "../../../util/session.h"
17#include "../../util/event.h"17#include "../../../util/event.h"
18#include "../../util/evlist.h"18#include "../../../util/evlist.h"
19#include "../../util/evsel.h"19#include "../../../util/evsel.h"
20#include "../../util/evsel_config.h"20#include "../../../util/evsel_config.h"
21#include "../../util/cpumap.h"21#include "../../../util/cpumap.h"
22#include "../../util/mmap.h"22#include "../../../util/mmap.h"
23#include <subcmd/parse-options.h>23#include <subcmd/parse-options.h>
24#include "../../util/parse-events.h"24#include "../../../util/parse-events.h"
25#include "../../util/pmu.h"25#include "../../../util/pmu.h"
26#include "../../util/debug.h"26#include "../../../util/debug.h"
27#include "../../util/auxtrace.h"27#include "../../../util/auxtrace.h"
28#include "../../util/record.h"28#include "../../../util/record.h"
29#include "../../util/target.h"29#include "../../../util/target.h"
30#include "../../util/tsc.h"30#include "../../../util/tsc.h"
31#include <internal/lib.h> // page_size31#include <internal/lib.h> // page_size
32#include "../../util/intel-pt.h"32#include "../../../util/intel-pt.h"
33 33
34#define KiB(x) ((x) * 1024)34#define KiB(x) ((x) * 1024)
35#define MiB(x) ((x) * 1024 * 1024)35#define MiB(x) ((x) * 1024 * 1024)
tools/perf/arch/x86/util/machine.c+3−3
@@ -5,9 +5,9 @@ · 4 unmodified lines
5#include <stdlib.h>5#include <stdlib.h>
6 6
7#include <internal/lib.h> // page_size7#include <internal/lib.h> // page_size
8#include "../../util/machine.h"8#include "../../../util/machine.h"
9#include "../../util/map.h"9#include "../../../util/map.h"
10#include "../../util/symbol.h"10#include "../../../util/symbol.h"
11#include <linux/ctype.h>11#include <linux/ctype.h>
12 12
13#include <symbol/kallsyms.h>13#include <symbol/kallsyms.h>
tools/perf/arch/x86/util/perf_regs.c+4−4
@@ -5,10 +5,10 @@ · 4 unmodified lines
5#include <linux/kernel.h>5#include <linux/kernel.h>
6#include <linux/zalloc.h>6#include <linux/zalloc.h>
7 7
8#include "../../perf-sys.h"8#include "../../../perf-sys.h"
9#include "../../util/perf_regs.h"9#include "../../../util/perf_regs.h"
10#include "../../util/debug.h"10#include "../../../util/debug.h"
11#include "../../util/event.h"11#include "../../../util/event.h"
12 12
13const struct sample_reg sample_reg_masks[] = {13const struct sample_reg sample_reg_masks[] = {
14 SMPL_REG(AX, PERF_REG_X86_AX),14 SMPL_REG(AX, PERF_REG_X86_AX),
tools/perf/arch/x86/util/pmu.c+3−3
@@ -4,9 +4,9 @@ · 3 unmodified lines
4#include <linux/stddef.h>4#include <linux/stddef.h>
5#include <linux/perf_event.h>5#include <linux/perf_event.h>
6 6
7#include "../../util/intel-pt.h"7#include "../../../util/intel-pt.h"
8#include "../../util/intel-bts.h"8#include "../../../util/intel-bts.h"
9#include "../../util/pmu.h"9#include "../../../util/pmu.h"
10 10
11struct perf_event_attr *perf_pmu__get_default_config(struct perf_pmu *pmu __maybe_unused)11struct perf_event_attr *perf_pmu__get_default_config(struct perf_pmu *pmu __maybe_unused)
12{12{
tools/perf/bench/bench.h+4−0
@@ -2,6 +2,10 @@ · 1 unmodified line
2#ifndef BENCH_H2#ifndef BENCH_H
3#define BENCH_H3#define BENCH_H
4 4
5#include <sys/time.h>
6
7extern struct timeval bench__start, bench__end, bench__runtime;
8
5/*9/*
6 * The madvise transparent hugepage constants were added in glibc10 * The madvise transparent hugepage constants were added in glibc
7 * 2.13. For compatibility with older versions of glibc, define these11 * 2.13. For compatibility with older versions of glibc, define these
tools/perf/bench/epoll-ctl.c+4−4
@@ -35,7 +35,6 @@ · 34 unmodified lines
35 35
36static unsigned int nthreads = 0;36static unsigned int nthreads = 0;
37static unsigned int nsecs = 8;37static unsigned int nsecs = 8;
38struct timeval start, end, runtime;
39static bool done, __verbose, randomize;38static bool done, __verbose, randomize;
40 39
41/*40/*
@@ -94,8 +93,8 @@ static void toggle_done(int sig __maybe_unused, · 52 unmodified lines
94{93{
95 /* inform all threads that we're done for the day */94 /* inform all threads that we're done for the day */
96 done = true;95 done = true;
97 gettimeofday(&end, NULL);96 gettimeofday(&bench__end, NULL);
98 timersub(&end, &start, &runtime);97 timersub(&bench__end, &bench__start, &bench__runtime);
99}98}
100 99
101static void nest_epollfd(void)100static void nest_epollfd(void)
@@ -313,6 +312,7 @@ int bench_epoll_ctl(int argc, const char **argv) · 211 unmodified lines
313 exit(EXIT_FAILURE);312 exit(EXIT_FAILURE);
314 }313 }
315 314
315 memset(&act, 0, sizeof(act));
316 sigfillset(&act.sa_mask);316 sigfillset(&act.sa_mask);
317 act.sa_sigaction = toggle_done;317 act.sa_sigaction = toggle_done;
318 sigaction(SIGINT, &act, NULL);318 sigaction(SIGINT, &act, NULL);
@@ -361,7 +361,7 @@ int bench_epoll_ctl(int argc, const char **argv) · 42 unmodified lines
361 361
362 threads_starting = nthreads;362 threads_starting = nthreads;
363 363
364 gettimeofday(&start, NULL);364 gettimeofday(&bench__start, NULL);
365 365
366 do_threads(worker, cpu);366 do_threads(worker, cpu);
367 367
tools/perf/bench/epoll-wait.c+6−6
@@ -90,7 +90,6 @@ · 89 unmodified lines
90 90
91static unsigned int nthreads = 0;91static unsigned int nthreads = 0;
92static unsigned int nsecs = 8;92static unsigned int nsecs = 8;
93struct timeval start, end, runtime;
94static bool wdone, done, __verbose, randomize, nonblocking;93static bool wdone, done, __verbose, randomize, nonblocking;
95 94
96/*95/*
@@ -276,8 +275,8 @@ static void toggle_done(int sig __maybe_unused, · 179 unmodified lines
276{275{
277 /* inform all threads that we're done for the day */276 /* inform all threads that we're done for the day */
278 done = true;277 done = true;
279 gettimeofday(&end, NULL);278 gettimeofday(&bench__end, NULL);
280 timersub(&end, &start, &runtime);279 timersub(&bench__end, &bench__start, &bench__runtime);
281}280}
282 281
283static void print_summary(void)282static void print_summary(void)
@@ -287,7 +286,7 @@ static void print_summary(void) · 3 unmodified lines
287 286
288 printf("\nAveraged %ld operations/sec (+- %.2f%%), total secs = %d\n",287 printf("\nAveraged %ld operations/sec (+- %.2f%%), total secs = %d\n",
289 avg, rel_stddev_stats(stddev, avg),288 avg, rel_stddev_stats(stddev, avg),
290 (int) runtime.tv_sec);289 (int)bench__runtime.tv_sec);
291}290}
292 291
293static int do_threads(struct worker *worker, struct perf_cpu_map *cpu)292static int do_threads(struct worker *worker, struct perf_cpu_map *cpu)
@@ -427,6 +426,7 @@ int bench_epoll_wait(int argc, const char **argv) · 133 unmodified lines
427 exit(EXIT_FAILURE);426 exit(EXIT_FAILURE);
428 }427 }
429 428
429 memset(&act, 0, sizeof(act));
430 sigfillset(&act.sa_mask);430 sigfillset(&act.sa_mask);
431 act.sa_sigaction = toggle_done;431 act.sa_sigaction = toggle_done;
432 sigaction(SIGINT, &act, NULL);432 sigaction(SIGINT, &act, NULL);
@@ -479,7 +479,7 @@ int bench_epoll_wait(int argc, const char **argv) · 46 unmodified lines
479 479
480 threads_starting = nthreads;480 threads_starting = nthreads;
481 481
482 gettimeofday(&start, NULL);482 gettimeofday(&bench__start, NULL);
483 483
484 do_threads(worker, cpu);484 do_threads(worker, cpu);
485 485
@@ -519,7 +519,7 @@ int bench_epoll_wait(int argc, const char **argv) · 33 unmodified lines
519 qsort(worker, nthreads, sizeof(struct worker), cmpworker);519 qsort(worker, nthreads, sizeof(struct worker), cmpworker);
520 520
521 for (i = 0; i < nthreads; i++) {521 for (i = 0; i < nthreads; i++) {
522 unsigned long t = worker[i].ops/runtime.tv_sec;522 unsigned long t = worker[i].ops / bench__runtime.tv_sec;
523 523
524 update_stats(&throughput_stats, t);524 update_stats(&throughput_stats, t);
525 525
tools/perf/bench/futex-hash.c+7−6
@@ -37,7 +37,7 @@ static unsigned int nfutexes = 1024; · 36 unmodified lines
37static bool fshared = false, done = false, silent = false;37static bool fshared = false, done = false, silent = false;
38static int futex_flag = 0;38static int futex_flag = 0;
39 39
40struct timeval start, end, runtime;40struct timeval bench__start, bench__end, bench__runtime;
41static pthread_mutex_t thread_lock;41static pthread_mutex_t thread_lock;
42static unsigned int threads_starting;42static unsigned int threads_starting;
43static struct stats throughput_stats;43static struct stats throughput_stats;
@@ -103,8 +103,8 @@ static void toggle_done(int sig __maybe_unused, · 59 unmodified lines
103{103{
104 /* inform all threads that we're done for the day */104 /* inform all threads that we're done for the day */
105 done = true;105 done = true;
106 gettimeofday(&end, NULL);106 gettimeofday(&bench__end, NULL);
107 timersub(&end, &start, &runtime);107 timersub(&bench__end, &bench__start, &bench__runtime);
108}108}
109 109
110static void print_summary(void)110static void print_summary(void)
@@ -114,7 +114,7 @@ static void print_summary(void) · 3 unmodified lines
114 114
115 printf("%sAveraged %ld operations/sec (+- %.2f%%), total secs = %d\n",115 printf("%sAveraged %ld operations/sec (+- %.2f%%), total secs = %d\n",
116 !silent ? "\n" : "", avg, rel_stddev_stats(stddev, avg),116 !silent ? "\n" : "", avg, rel_stddev_stats(stddev, avg),
117 (int) runtime.tv_sec);117 (int)bench__runtime.tv_sec);
118}118}
119 119
120int bench_futex_hash(int argc, const char **argv)120int bench_futex_hash(int argc, const char **argv)
@@ -137,6 +137,7 @@ int bench_futex_hash(int argc, const char **argv) · 16 unmodified lines
137 if (!cpu)137 if (!cpu)
138 goto errmem;138 goto errmem;
139 139
140 memset(&act, 0, sizeof(act));
140 sigfillset(&act.sa_mask);141 sigfillset(&act.sa_mask);
141 act.sa_sigaction = toggle_done;142 act.sa_sigaction = toggle_done;
142 sigaction(SIGINT, &act, NULL);143 sigaction(SIGINT, &act, NULL);
@@ -161,7 +162,7 @@ int bench_futex_hash(int argc, const char **argv) · 18 unmodified lines
161 162
162 threads_starting = nthreads;163 threads_starting = nthreads;
163 pthread_attr_init(&thread_attr);164 pthread_attr_init(&thread_attr);
164 gettimeofday(&start, NULL);165 gettimeofday(&bench__start, NULL);
165 for (i = 0; i < nthreads; i++) {166 for (i = 0; i < nthreads; i++) {
166 worker[i].tid = i;167 worker[i].tid = i;
167 worker[i].futex = calloc(nfutexes, sizeof(*worker[i].futex));168 worker[i].futex = calloc(nfutexes, sizeof(*worker[i].futex));
@@ -204,7 +205,7 @@ int bench_futex_hash(int argc, const char **argv) · 36 unmodified lines
204 pthread_mutex_destroy(&thread_lock);205 pthread_mutex_destroy(&thread_lock);
205 206
206 for (i = 0; i < nthreads; i++) {207 for (i = 0; i < nthreads; i++) {
207 unsigned long t = worker[i].ops/runtime.tv_sec;208 unsigned long t = worker[i].ops / bench__runtime.tv_sec;
208 update_stats(&throughput_stats, t);209 update_stats(&throughput_stats, t);
209 if (!silent) {210 if (!silent) {
210 if (nfutexes == 1)211 if (nfutexes == 1)
tools/perf/bench/futex-lock-pi.c+6−6
@@ -37,7 +37,6 @@ static bool silent = false, multi = false; · 36 unmodified lines
37static bool done = false, fshared = false;37static bool done = false, fshared = false;
38static unsigned int nthreads = 0;38static unsigned int nthreads = 0;
39static int futex_flag = 0;39static int futex_flag = 0;
40struct timeval start, end, runtime;
41static pthread_mutex_t thread_lock;40static pthread_mutex_t thread_lock;
42static unsigned int threads_starting;41static unsigned int threads_starting;
43static struct stats throughput_stats;42static struct stats throughput_stats;
@@ -64,7 +63,7 @@ static void print_summary(void) · 20 unmodified lines
64 63
65 printf("%sAveraged %ld operations/sec (+- %.2f%%), total secs = %d\n",64 printf("%sAveraged %ld operations/sec (+- %.2f%%), total secs = %d\n",
66 !silent ? "\n" : "", avg, rel_stddev_stats(stddev, avg),65 !silent ? "\n" : "", avg, rel_stddev_stats(stddev, avg),
67 (int) runtime.tv_sec);66 (int)bench__runtime.tv_sec);
68}67}
69 68
70static void toggle_done(int sig __maybe_unused,69static void toggle_done(int sig __maybe_unused,
@@ -73,8 +72,8 @@ static void toggle_done(int sig __maybe_unused, · 2 unmodified lines
73{72{
74 /* inform all threads that we're done for the day */73 /* inform all threads that we're done for the day */
75 done = true;74 done = true;
76 gettimeofday(&end, NULL);75 gettimeofday(&bench__end, NULL);
77 timersub(&end, &start, &runtime);76 timersub(&bench__end, &bench__start, &bench__runtime);
78}77}
79 78
80static void *workerfn(void *arg)79static void *workerfn(void *arg)
@@ -161,6 +160,7 @@ int bench_futex_lock_pi(int argc, const char **argv) · 80 unmodified lines
161 if (!cpu)160 if (!cpu)
162 err(EXIT_FAILURE, "calloc");161 err(EXIT_FAILURE, "calloc");
163 162
163 memset(&act, 0, sizeof(act));
164 sigfillset(&act.sa_mask);164 sigfillset(&act.sa_mask);
165 act.sa_sigaction = toggle_done;165 act.sa_sigaction = toggle_done;
166 sigaction(SIGINT, &act, NULL);166 sigaction(SIGINT, &act, NULL);
@@ -185,7 +185,7 @@ int bench_futex_lock_pi(int argc, const char **argv) · 18 unmodified lines
185 185
186 threads_starting = nthreads;186 threads_starting = nthreads;
187 pthread_attr_init(&thread_attr);187 pthread_attr_init(&thread_attr);
188 gettimeofday(&start, NULL);188 gettimeofday(&bench__start, NULL);
189 189
190 create_threads(worker, thread_attr, cpu);190 create_threads(worker, thread_attr, cpu);
191 pthread_attr_destroy(&thread_attr);191 pthread_attr_destroy(&thread_attr);
@@ -211,7 +211,7 @@ int bench_futex_lock_pi(int argc, const char **argv) · 19 unmodified lines
211 pthread_mutex_destroy(&thread_lock);211 pthread_mutex_destroy(&thread_lock);
212 212
213 for (i = 0; i < nthreads; i++) {213 for (i = 0; i < nthreads; i++) {
214 unsigned long t = worker[i].ops/runtime.tv_sec;214 unsigned long t = worker[i].ops / bench__runtime.tv_sec;
215 215
216 update_stats(&throughput_stats, t);216 update_stats(&throughput_stats, t);
217 if (!silent)217 if (!silent)
tools/perf/bench/futex-requeue.c+1−0
@@ -128,6 +128,7 @@ int bench_futex_requeue(int argc, const char **argv) · 127 unmodified lines
128 if (!cpu)128 if (!cpu)
129 err(EXIT_FAILURE, "cpu_map__new");129 err(EXIT_FAILURE, "cpu_map__new");
130 130
131 memset(&act, 0, sizeof(act));
131 sigfillset(&act.sa_mask);132 sigfillset(&act.sa_mask);
132 act.sa_sigaction = toggle_done;133 act.sa_sigaction = toggle_done;
133 sigaction(SIGINT, &act, NULL);134 sigaction(SIGINT, &act, NULL);
tools/perf/bench/futex-wake-parallel.c+1−0
@@ -234,6 +234,7 @@ int bench_futex_wake_parallel(int argc, const char **argv) · 233 unmodified lines
234 exit(EXIT_FAILURE);234 exit(EXIT_FAILURE);
235 }235 }
236 236
237 memset(&act, 0, sizeof(act));
237 sigfillset(&act.sa_mask);238 sigfillset(&act.sa_mask);
238 act.sa_sigaction = toggle_done;239 act.sa_sigaction = toggle_done;
239 sigaction(SIGINT, &act, NULL);240 sigaction(SIGINT, &act, NULL);
tools/perf/bench/futex-wake.c+3−2
@@ -43,7 +43,7 @@ static bool done = false, silent = false, fshared = false; · 42 unmodified lines
43static pthread_mutex_t thread_lock;43static pthread_mutex_t thread_lock;
44static pthread_cond_t thread_parent, thread_worker;44static pthread_cond_t thread_parent, thread_worker;
45static struct stats waketime_stats, wakeup_stats;45static struct stats waketime_stats, wakeup_stats;
46static unsigned int ncpus, threads_starting, nthreads = 0;46static unsigned int threads_starting, nthreads = 0;
47static int futex_flag = 0;47static int futex_flag = 0;
48 48
49static const struct option options[] = {49static const struct option options[] = {
@@ -136,12 +136,13 @@ int bench_futex_wake(int argc, const char **argv) · 86 unmodified lines
136 if (!cpu)136 if (!cpu)
137 err(EXIT_FAILURE, "calloc");137 err(EXIT_FAILURE, "calloc");
138 138
139 memset(&act, 0, sizeof(act));
139 sigfillset(&act.sa_mask);140 sigfillset(&act.sa_mask);
140 act.sa_sigaction = toggle_done;141 act.sa_sigaction = toggle_done;
141 sigaction(SIGINT, &act, NULL);142 sigaction(SIGINT, &act, NULL);
142 143
143 if (!nthreads)144 if (!nthreads)
144 nthreads = ncpus;145 nthreads = cpu->nr;
145 146
146 worker = calloc(nthreads, sizeof(*worker));147 worker = calloc(nthreads, sizeof(*worker));
147 if (!worker)148 if (!worker)
tools/perf/builtin-diff.c+2−1
@@ -1312,7 +1312,8 @@ static int cycles_printf(struct hist_entry *he, struct hist_entry *pair, · 1311 unmodified lines
1312 end_line = map__srcline(he->ms.map, bi->sym->start + bi->end,1312 end_line = map__srcline(he->ms.map, bi->sym->start + bi->end,
1313 he->ms.sym);1313 he->ms.sym);
1314 1314
1315 if ((start_line != SRCLINE_UNKNOWN) && (end_line != SRCLINE_UNKNOWN)) {1315 if ((strncmp(start_line, SRCLINE_UNKNOWN, strlen(SRCLINE_UNKNOWN)) != 0) &&
1316 (strncmp(end_line, SRCLINE_UNKNOWN, strlen(SRCLINE_UNKNOWN)) != 0)) {
1316 scnprintf(buf, sizeof(buf), "[%s -> %s] %4ld",1317 scnprintf(buf, sizeof(buf), "[%s -> %s] %4ld",
1317 start_line, end_line, block_he->diff.cycles);1318 start_line, end_line, block_he->diff.cycles);
1318 } else {1319 } else {
tools/perf/builtin-top.c+3−1
@@ -684,7 +684,9 @@ repeat: · 683 unmodified lines
684 delay_msecs = top->delay_secs * MSEC_PER_SEC;684 delay_msecs = top->delay_secs * MSEC_PER_SEC;
685 set_term_quiet_input(&save);685 set_term_quiet_input(&save);
686 /* trash return*/686 /* trash return*/
687 getc(stdin);687 clearerr(stdin);
688 if (poll(&stdin_poll, 1, 0) > 0)
689 getc(stdin);
688 690
689 while (!done) {691 while (!done) {
690 perf_top__print_sym_table(top);692 perf_top__print_sym_table(top);
tools/perf/pmu-events/jevents.c+9−6
@@ -1082,10 +1082,9 @@ static int process_one_file(const char *fpath, const struct stat *sb, · 1081 unmodified lines
1082 */1082 */
1083int main(int argc, char *argv[])1083int main(int argc, char *argv[])
1084{1084{
1085 int rc;1085 int rc, ret = 0;
1086 int maxfds;1086 int maxfds;
1087 char ldirname[PATH_MAX];1087 char ldirname[PATH_MAX];
1088
1089 const char *arch;1088 const char *arch;
1090 const char *output_file;1089 const char *output_file;
1091 const char *start_dirname;1090 const char *start_dirname;
@@ -1156,7 +1155,8 @@ int main(int argc, char *argv[]) · 64 unmodified lines
1156 /* Make build fail */1155 /* Make build fail */
1157 fclose(eventsfp);1156 fclose(eventsfp);
1158 free_arch_std_events();1157 free_arch_std_events();
1159 return 1;1158 ret = 1;
1159 goto out_free_mapfile;
1160 } else if (rc) {1160 } else if (rc) {
1161 goto empty_map;1161 goto empty_map;
1162 }1162 }
@@ -1174,14 +1174,17 @@ int main(int argc, char *argv[]) · 11 unmodified lines
1174 /* Make build fail */1174 /* Make build fail */
1175 fclose(eventsfp);1175 fclose(eventsfp);
1176 free_arch_std_events();1176 free_arch_std_events();
1177 return 1;1177 ret = 1;
1178 }1178 }
1179 1179
1180 return 0;1180
1181 goto out_free_mapfile;
1181 1182
1182empty_map:1183empty_map:
1183 fclose(eventsfp);1184 fclose(eventsfp);
1184 create_empty_mapping(output_file);1185 create_empty_mapping(output_file);
1185 free_arch_std_events();1186 free_arch_std_events();
1186 return 0;1187out_free_mapfile:
1188 free(mapfile);
1189 return ret;
1187}1190}
tools/perf/tests/bp_account.c+1−1
@@ -19,7 +19,7 @@ · 18 unmodified lines
19#include "../perf-sys.h"19#include "../perf-sys.h"
20#include "cloexec.h"20#include "cloexec.h"
21 21
22volatile long the_var;22static volatile long the_var;
23 23
24static noinline int test_function(void)24static noinline int test_function(void)
25{25{
tools/perf/util/block-info.c+2−1
@@ -295,7 +295,8 @@ static int block_range_entry(struct perf_hpp_fmt *fmt, struct perf_hpp *hpp, · 294 unmodified lines
295 end_line = map__srcline(he->ms.map, bi->sym->start + bi->end,295 end_line = map__srcline(he->ms.map, bi->sym->start + bi->end,
296 he->ms.sym);296 he->ms.sym);
297 297
298 if ((start_line != SRCLINE_UNKNOWN) && (end_line != SRCLINE_UNKNOWN)) {298 if ((strncmp(start_line, SRCLINE_UNKNOWN, strlen(SRCLINE_UNKNOWN)) != 0) &&
299 (strncmp(end_line, SRCLINE_UNKNOWN, strlen(SRCLINE_UNKNOWN)) != 0)) {
299 scnprintf(buf, sizeof(buf), "[%s -> %s]",300 scnprintf(buf, sizeof(buf), "[%s -> %s]",
300 start_line, end_line);301 start_line, end_line);
301 } else {302 } else {
tools/perf/util/env.c+2−2
@@ -343,11 +343,11 @@ static const char *normalize_arch(char *arch) · 342 unmodified lines
343 343
344const char *perf_env__arch(struct perf_env *env)344const char *perf_env__arch(struct perf_env *env)
345{345{
346 struct utsname uts;
347 char *arch_name;346 char *arch_name;
348 347
349 if (!env || !env->arch) { /* Assume local operation */348 if (!env || !env->arch) { /* Assume local operation */
350 if (uname(&uts) < 0)349 static struct utsname uts = { .machine[0] = '\0', };
350 if (uts.machine[0] == '\0' && uname(&uts) < 0)
351 return NULL;351 return NULL;
352 arch_name = uts.machine;352 arch_name = uts.machine;
353 } else353 } else
tools/perf/util/map.c+1−1
@@ -431,7 +431,7 @@ int map__fprintf_srcline(struct map *map, u64 addr, const char *prefix, · 430 unmodified lines
431 431
432 if (map && map->dso) {432 if (map && map->dso) {
433 char *srcline = map__srcline(map, addr, NULL);433 char *srcline = map__srcline(map, addr, NULL);
434 if (srcline != SRCLINE_UNKNOWN)434 if (strncmp(srcline, SRCLINE_UNKNOWN, strlen(SRCLINE_UNKNOWN)) != 0)
435 ret = fprintf(fp, "%s%s", prefix, srcline);435 ret = fprintf(fp, "%s%s", prefix, srcline);
436 free_srcline(srcline);436 free_srcline(srcline);
437 }437 }
tools/perf/util/parse-events.c+2−8
@@ -257,21 +257,15 @@ struct tracepoint_path *tracepoint_id_to_path(u64 config) · 256 unmodified lines
257 path = zalloc(sizeof(*path));257 path = zalloc(sizeof(*path));
258 if (!path)258 if (!path)
259 return NULL;259 return NULL;
260 path->system = malloc(MAX_EVENT_LENGTH);260 if (asprintf(&path->system, "%.*s", MAX_EVENT_LENGTH, sys_dirent->d_name) < 0) {
261 if (!path->system) {
262 free(path);261 free(path);
263 return NULL;262 return NULL;
264 }263 }
265 path->name = malloc(MAX_EVENT_LENGTH);264 if (asprintf(&path->name, "%.*s", MAX_EVENT_LENGTH, evt_dirent->d_name) < 0) {
266 if (!path->name) {
267 zfree(&path->system);265 zfree(&path->system);
268 free(path);266 free(path);
269 return NULL;267 return NULL;
270 }268 }
271 strncpy(path->system, sys_dirent->d_name,
272 MAX_EVENT_LENGTH);
273 strncpy(path->name, evt_dirent->d_name,
274 MAX_EVENT_LENGTH);
275 return path;269 return path;
276 }270 }
277 }271 }
tools/perf/util/symbol.c+6−7
@@ -1622,7 +1622,12 @@ int dso__load(struct dso *dso, struct map *map) · 1621 unmodified lines
1622 goto out;1622 goto out;
1623 }1623 }
1624 1624
1625 if (dso->kernel) {1625 kmod = dso->symtab_type == DSO_BINARY_TYPE__SYSTEM_PATH_KMODULE ||
1626 dso->symtab_type == DSO_BINARY_TYPE__SYSTEM_PATH_KMODULE_COMP ||
1627 dso->symtab_type == DSO_BINARY_TYPE__GUEST_KMODULE ||
1628 dso->symtab_type == DSO_BINARY_TYPE__GUEST_KMODULE_COMP;
1629
1630 if (dso->kernel && !kmod) {
1626 if (dso->kernel == DSO_TYPE_KERNEL)1631 if (dso->kernel == DSO_TYPE_KERNEL)
1627 ret = dso__load_kernel_sym(dso, map);1632 ret = dso__load_kernel_sym(dso, map);
1628 else if (dso->kernel == DSO_TYPE_GUEST_KERNEL)1633 else if (dso->kernel == DSO_TYPE_GUEST_KERNEL)
@@ -1650,12 +1655,6 @@ int dso__load(struct dso *dso, struct map *map) · 21 unmodified lines
1650 if (!name)1655 if (!name)
1651 goto out;1656 goto out;
1652 1657
1653 kmod = dso->symtab_type == DSO_BINARY_TYPE__SYSTEM_PATH_KMODULE ||
1654 dso->symtab_type == DSO_BINARY_TYPE__SYSTEM_PATH_KMODULE_COMP ||
1655 dso->symtab_type == DSO_BINARY_TYPE__GUEST_KMODULE ||
1656 dso->symtab_type == DSO_BINARY_TYPE__GUEST_KMODULE_COMP;
1657
1658
1659 /*1658 /*
1660 * Read the build id if possible. This is required for1659 * Read the build id if possible. This is required for
1661 * DSO_BINARY_TYPE__BUILDID_DEBUGINFO to work1660 * DSO_BINARY_TYPE__BUILDID_DEBUGINFO to work
tools/power/cpupower/utils/idle_monitor/amd_fam14h_idle.c+1−1
@@ -82,7 +82,7 @@ static struct pci_access *pci_acc; · 81 unmodified lines
82static struct pci_dev *amd_fam14h_pci_dev;82static struct pci_dev *amd_fam14h_pci_dev;
83static int nbp1_entered;83static int nbp1_entered;
84 84
85struct timespec start_time;85static struct timespec start_time;
86static unsigned long long timediff;86static unsigned long long timediff;
87 87
88#ifdef DEBUG88#ifdef DEBUG
tools/power/cpupower/utils/idle_monitor/cpuidle_sysfs.c+1−1
@@ -19,7 +19,7 @@ struct cpuidle_monitor cpuidle_sysfs_monitor; · 18 unmodified lines
19 19
20static unsigned long long **previous_count;20static unsigned long long **previous_count;
21static unsigned long long **current_count;21static unsigned long long **current_count;
22struct timespec start_time;22static struct timespec start_time;
23static unsigned long long timediff;23static unsigned long long timediff;
24 24
25static int cpuidle_get_count_percent(unsigned int id, double *percent,25static int cpuidle_get_count_percent(unsigned int id, double *percent,
tools/power/cpupower/utils/idle_monitor/cpupower-monitor.c+2−0
@@ -27,6 +27,8 @@ struct cpuidle_monitor *all_monitors[] = { · 26 unmodified lines
270270
28};28};
29 29
30int cpu_count;
31
30static struct cpuidle_monitor *monitors[MONITORS_MAX];32static struct cpuidle_monitor *monitors[MONITORS_MAX];
31static unsigned int avail_monitors;33static unsigned int avail_monitors;
32 34
tools/power/cpupower/utils/idle_monitor/cpupower-monitor.h+1−1
@@ -25,7 +25,7 @@ · 24 unmodified lines
25#endif25#endif
26#define CSTATE_DESC_LEN 6026#define CSTATE_DESC_LEN 60
27 27
28int cpu_count;28extern int cpu_count;
29 29
30/* Hard to define the right names ...: */30/* Hard to define the right names ...: */
31enum power_range_e {31enum power_range_e {
tools/power/x86/turbostat/Makefile+1−1
@@ -16,7 +16,7 @@ override CFLAGS += -D_FORTIFY_SOURCE=2 · 15 unmodified lines
16 16
17%: %.c17%: %.c
18 @mkdir -p $(BUILD_OUTPUT)18 @mkdir -p $(BUILD_OUTPUT)
19 $(CC) $(CFLAGS) $< -o $(BUILD_OUTPUT)/$@ $(LDFLAGS)19 $(CC) $(CFLAGS) $< -o $(BUILD_OUTPUT)/$@ $(LDFLAGS) -lcap
20 20
21.PHONY : clean21.PHONY : clean
22clean :22clean :
tools/power/x86/turbostat/turbostat.c+113−29
@@ -30,7 +30,7 @@ · 29 unmodified lines
30#include <sched.h>30#include <sched.h>
31#include <time.h>31#include <time.h>
32#include <cpuid.h>32#include <cpuid.h>
33#include <linux/capability.h>33#include <sys/capability.h>
34#include <errno.h>34#include <errno.h>
35#include <math.h>35#include <math.h>
36 36
@@ -304,6 +304,10 @@ int *irqs_per_cpu; /* indexed by cpu_num */ · 267 unmodified lines
304 304
305void setup_all_buffers(void);305void setup_all_buffers(void);
306 306
307char *sys_lpi_file;
308char *sys_lpi_file_sysfs = "/sys/devices/system/cpu/cpuidle/low_power_idle_system_residency_us";
309char *sys_lpi_file_debugfs = "/sys/kernel/debug/pmc_core/slp_s0_residency_usec";
310
307int cpu_is_not_present(int cpu)311int cpu_is_not_present(int cpu)
308{312{
309 return !CPU_ISSET_S(cpu, cpu_present_setsize, cpu_present_set);313 return !CPU_ISSET_S(cpu, cpu_present_setsize, cpu_present_set);
@@ -2916,8 +2920,6 @@ int snapshot_gfx_mhz(void) · 2606 unmodified lines
2916 *2920 *
2917 * record snapshot of2921 * record snapshot of
2918 * /sys/devices/system/cpu/cpuidle/low_power_idle_cpu_residency_us2922 * /sys/devices/system/cpu/cpuidle/low_power_idle_cpu_residency_us
2919 *
2920 * return 1 if config change requires a restart, else return 0
2921 */2923 */
2922int snapshot_cpu_lpi_us(void)2924int snapshot_cpu_lpi_us(void)
2923{2925{
@@ -2941,17 +2943,14 @@ int snapshot_cpu_lpi_us(void) · 17 unmodified lines
2941/*2943/*
2942 * snapshot_sys_lpi()2944 * snapshot_sys_lpi()
2943 *2945 *
2944 * record snapshot of2946 * record snapshot of sys_lpi_file
2945 * /sys/devices/system/cpu/cpuidle/low_power_idle_system_residency_us
2946 *
2947 * return 1 if config change requires a restart, else return 0
2948 */2947 */
2949int snapshot_sys_lpi_us(void)2948int snapshot_sys_lpi_us(void)
2950{2949{
2951 FILE *fp;2950 FILE *fp;
2952 int retval;2951 int retval;
2953 2952
2954 fp = fopen_or_die("/sys/devices/system/cpu/cpuidle/low_power_idle_system_residency_us", "r");2953 fp = fopen_or_die(sys_lpi_file, "r");
2955 2954
2956 retval = fscanf(fp, "%lld", &cpuidle_cur_sys_lpi_us);2955 retval = fscanf(fp, "%lld", &cpuidle_cur_sys_lpi_us);
2957 if (retval != 1) {2956 if (retval != 1) {
@@ -3151,28 +3150,42 @@ void check_dev_msr() · 193 unmodified lines
3151 err(-5, "no /dev/cpu/0/msr, Try \"# modprobe msr\" ");3150 err(-5, "no /dev/cpu/0/msr, Try \"# modprobe msr\" ");
3152}3151}
3153 3152
3154void check_permissions()3153/*
3154 * check for CAP_SYS_RAWIO
3155 * return 0 on success
3156 * return 1 on fail
3157 */
3158int check_for_cap_sys_rawio(void)
3155{3159{
3156 struct __user_cap_header_struct cap_header_data;3160 cap_t caps;
3157 cap_user_header_t cap_header = &cap_header_data;3161 cap_flag_value_t cap_flag_value;
3158 struct __user_cap_data_struct cap_data_data;
3159 cap_user_data_t cap_data = &cap_data_data;
3160 extern int capget(cap_user_header_t hdrp, cap_user_data_t datap);
3161 int do_exit = 0;
3162 char pathname[32];
3163 3162
3164 /* check for CAP_SYS_RAWIO */3163 caps = cap_get_proc();
3165 cap_header->pid = getpid();3164 if (caps == NULL)
3166 cap_header->version = _LINUX_CAPABILITY_VERSION;3165 err(-6, "cap_get_proc\n");
3167 if (capget(cap_header, cap_data) < 0)
3168 err(-6, "capget(2) failed");
3169 3166
3170 if ((cap_data->effective & (1 << CAP_SYS_RAWIO)) == 0) {3167 if (cap_get_flag(caps, CAP_SYS_RAWIO, CAP_EFFECTIVE, &cap_flag_value))
3171 do_exit++;3168 err(-6, "cap_get\n");
3169
3170 if (cap_flag_value != CAP_SET) {
3172 warnx("capget(CAP_SYS_RAWIO) failed,"3171 warnx("capget(CAP_SYS_RAWIO) failed,"
3173 " try \"# setcap cap_sys_rawio=ep %s\"", progname);3172 " try \"# setcap cap_sys_rawio=ep %s\"", progname);
3173 return 1;
3174 }3174 }
3175 3175
3176 if (cap_free(caps) == -1)
3177 err(-6, "cap_free\n");
3178
3179 return 0;
3180}
3181void check_permissions(void)
3182{
3183 int do_exit = 0;
3184 char pathname[32];
3185
3186 /* check for CAP_SYS_RAWIO */
3187 do_exit += check_for_cap_sys_rawio();
3188
3176 /* test file permissions */3189 /* test file permissions */
3177 sprintf(pathname, "/dev/cpu/%d/msr", base_cpu);3190 sprintf(pathname, "/dev/cpu/%d/msr", base_cpu);
3178 if (euidaccess(pathname, R_OK)) {3191 if (euidaccess(pathname, R_OK)) {
@@ -3265,6 +3278,7 @@ int probe_nhm_msrs(unsigned int family, unsigned int model) · 86 unmodified lines
3265 case INTEL_FAM6_ATOM_GOLDMONT: /* BXT */3278 case INTEL_FAM6_ATOM_GOLDMONT: /* BXT */
3266 case INTEL_FAM6_ATOM_GOLDMONT_PLUS:3279 case INTEL_FAM6_ATOM_GOLDMONT_PLUS:
3267 case INTEL_FAM6_ATOM_GOLDMONT_D: /* DNV */3280 case INTEL_FAM6_ATOM_GOLDMONT_D: /* DNV */
3281 case INTEL_FAM6_ATOM_TREMONT: /* EHL */
3268 pkg_cstate_limits = glm_pkg_cstate_limits;3282 pkg_cstate_limits = glm_pkg_cstate_limits;
3269 break;3283 break;
3270 default:3284 default:
@@ -3336,6 +3350,17 @@ int is_skx(unsigned int family, unsigned int model) · 65 unmodified lines
3336 }3350 }
3337 return 0;3351 return 0;
3338}3352}
3353int is_ehl(unsigned int family, unsigned int model)
3354{
3355 if (!genuine_intel)
3356 return 0;
3357
3358 switch (model) {
3359 case INTEL_FAM6_ATOM_TREMONT:
3360 return 1;
3361 }
3362 return 0;
3363}
3339 3364
3340int has_turbo_ratio_limit(unsigned int family, unsigned int model)3365int has_turbo_ratio_limit(unsigned int family, unsigned int model)
3341{3366{
@@ -3478,6 +3503,23 @@ dump_cstate_pstate_config_info(unsigned int family, unsigned int model) · 136 unmodified lines
3478 dump_nhm_cst_cfg();3503 dump_nhm_cst_cfg();
3479}3504}
3480 3505
3506static void dump_sysfs_file(char *path)
3507{
3508 FILE *input;
3509 char cpuidle_buf[64];
3510
3511 input = fopen(path, "r");
3512 if (input == NULL) {
3513 if (debug)
3514 fprintf(outf, "NSFOD %s\n", path);
3515 return;
3516 }
3517 if (!fgets(cpuidle_buf, sizeof(cpuidle_buf), input))
3518 err(1, "%s: failed to read file", path);
3519 fclose(input);
3520
3521 fprintf(outf, "%s: %s", strrchr(path, '/') + 1, cpuidle_buf);
3522}
3481static void3523static void
3482dump_sysfs_cstate_config(void)3524dump_sysfs_cstate_config(void)
3483{3525{
@@ -3491,6 +3533,15 @@ dump_sysfs_cstate_config(void) · 7 unmodified lines
3491 if (!DO_BIC(BIC_sysfs))3533 if (!DO_BIC(BIC_sysfs))
3492 return;3534 return;
3493 3535
3536 if (access("/sys/devices/system/cpu/cpuidle", R_OK)) {
3537 fprintf(outf, "cpuidle not loaded\n");
3538 return;
3539 }
3540
3541 dump_sysfs_file("/sys/devices/system/cpu/cpuidle/current_driver");
3542 dump_sysfs_file("/sys/devices/system/cpu/cpuidle/current_governor");
3543 dump_sysfs_file("/sys/devices/system/cpu/cpuidle/current_governor_ro");
3544
3494 for (state = 0; state < 10; ++state) {3545 for (state = 0; state < 10; ++state) {
3495 3546
3496 sprintf(path, "/sys/devices/system/cpu/cpu%d/cpuidle/state%d/name",3547 sprintf(path, "/sys/devices/system/cpu/cpu%d/cpuidle/state%d/name",
@@ -3894,6 +3945,20 @@ void rapl_probe_intel(unsigned int family, unsigned int model) · 397 unmodified lines
3894 else3945 else
3895 BIC_PRESENT(BIC_PkgWatt);3946 BIC_PRESENT(BIC_PkgWatt);
3896 break;3947 break;
3948 case INTEL_FAM6_ATOM_TREMONT: /* EHL */
3949 do_rapl = RAPL_PKG | RAPL_CORES | RAPL_CORE_POLICY | RAPL_DRAM | RAPL_DRAM_PERF_STATUS | RAPL_PKG_PERF_STATUS | RAPL_GFX | RAPL_PKG_POWER_INFO;
3950 if (rapl_joules) {
3951 BIC_PRESENT(BIC_Pkg_J);
3952 BIC_PRESENT(BIC_Cor_J);
3953 BIC_PRESENT(BIC_RAM_J);
3954 BIC_PRESENT(BIC_GFX_J);
3955 } else {
3956 BIC_PRESENT(BIC_PkgWatt);
3957 BIC_PRESENT(BIC_CorWatt);
3958 BIC_PRESENT(BIC_RAMWatt);
3959 BIC_PRESENT(BIC_GFXWatt);
3960 }
3961 break;
3897 case INTEL_FAM6_SKYLAKE_L: /* SKL */3962 case INTEL_FAM6_SKYLAKE_L: /* SKL */
3898 case INTEL_FAM6_CANNONLAKE_L: /* CNL */3963 case INTEL_FAM6_CANNONLAKE_L: /* CNL */
3899 do_rapl = RAPL_PKG | RAPL_CORES | RAPL_CORE_POLICY | RAPL_DRAM | RAPL_DRAM_PERF_STATUS | RAPL_PKG_PERF_STATUS | RAPL_GFX | RAPL_PKG_POWER_INFO;3964 do_rapl = RAPL_PKG | RAPL_CORES | RAPL_CORE_POLICY | RAPL_DRAM | RAPL_DRAM_PERF_STATUS | RAPL_PKG_PERF_STATUS | RAPL_GFX | RAPL_PKG_POWER_INFO;
@@ -4295,6 +4360,7 @@ int has_snb_msrs(unsigned int family, unsigned int model) · 395 unmodified lines
4295 case INTEL_FAM6_ATOM_GOLDMONT: /* BXT */4360 case INTEL_FAM6_ATOM_GOLDMONT: /* BXT */
4296 case INTEL_FAM6_ATOM_GOLDMONT_PLUS:4361 case INTEL_FAM6_ATOM_GOLDMONT_PLUS:
4297 case INTEL_FAM6_ATOM_GOLDMONT_D: /* DNV */4362 case INTEL_FAM6_ATOM_GOLDMONT_D: /* DNV */
4363 case INTEL_FAM6_ATOM_TREMONT: /* EHL */
4298 return 1;4364 return 1;
4299 }4365 }
4300 return 0;4366 return 0;
@@ -4324,6 +4390,7 @@ int has_c8910_msrs(unsigned int family, unsigned int model) · 23 unmodified lines
4324 case INTEL_FAM6_CANNONLAKE_L: /* CNL */4390 case INTEL_FAM6_CANNONLAKE_L: /* CNL */
4325 case INTEL_FAM6_ATOM_GOLDMONT: /* BXT */4391 case INTEL_FAM6_ATOM_GOLDMONT: /* BXT */
4326 case INTEL_FAM6_ATOM_GOLDMONT_PLUS:4392 case INTEL_FAM6_ATOM_GOLDMONT_PLUS:
4393 case INTEL_FAM6_ATOM_TREMONT: /* EHL */
4327 return 1;4394 return 1;
4328 }4395 }
4329 return 0;4396 return 0;
@@ -4610,14 +4677,24 @@ unsigned int intel_model_duplicates(unsigned int model) · 280 unmodified lines
4610 case INTEL_FAM6_SKYLAKE:4677 case INTEL_FAM6_SKYLAKE:
4611 case INTEL_FAM6_KABYLAKE_L:4678 case INTEL_FAM6_KABYLAKE_L:
4612 case INTEL_FAM6_KABYLAKE:4679 case INTEL_FAM6_KABYLAKE:
4680 case INTEL_FAM6_COMETLAKE_L:
4681 case INTEL_FAM6_COMETLAKE:
4613 return INTEL_FAM6_SKYLAKE_L;4682 return INTEL_FAM6_SKYLAKE_L;
4614 4683
4615 case INTEL_FAM6_ICELAKE_L:4684 case INTEL_FAM6_ICELAKE_L:
4616 case INTEL_FAM6_ICELAKE_NNPI:4685 case INTEL_FAM6_ICELAKE_NNPI:
4686 case INTEL_FAM6_TIGERLAKE_L:
4687 case INTEL_FAM6_TIGERLAKE:
4617 return INTEL_FAM6_CANNONLAKE_L;4688 return INTEL_FAM6_CANNONLAKE_L;
4618 4689
4619 case INTEL_FAM6_ATOM_TREMONT_D:4690 case INTEL_FAM6_ATOM_TREMONT_D:
4620 return INTEL_FAM6_ATOM_GOLDMONT_D;4691 return INTEL_FAM6_ATOM_GOLDMONT_D;
4692
4693 case INTEL_FAM6_ATOM_TREMONT_L:
4694 return INTEL_FAM6_ATOM_TREMONT;
4695
4696 case INTEL_FAM6_ICELAKE_X:
4697 return INTEL_FAM6_SKYLAKE_X;
4621 }4698 }
4622 return model;4699 return model;
4623}4700}
@@ -4872,7 +4949,8 @@ void process_cpuid() · 248 unmodified lines
4872 do_slm_cstates = is_slm(family, model);4949 do_slm_cstates = is_slm(family, model);
4873 do_knl_cstates = is_knl(family, model);4950 do_knl_cstates = is_knl(family, model);
4874 4951
4875 if (do_slm_cstates || do_knl_cstates || is_cnl(family, model))4952 if (do_slm_cstates || do_knl_cstates || is_cnl(family, model) ||
4953 is_ehl(family, model))
4876 BIC_NOT_PRESENT(BIC_CPU_c3);4954 BIC_NOT_PRESENT(BIC_CPU_c3);
4877 4955
4878 if (!quiet)4956 if (!quiet)
@@ -4907,10 +4985,16 @@ void process_cpuid() · 28 unmodified lines
4907 else4985 else
4908 BIC_NOT_PRESENT(BIC_CPU_LPI);4986 BIC_NOT_PRESENT(BIC_CPU_LPI);
4909 4987
4910 if (!access("/sys/devices/system/cpu/cpuidle/low_power_idle_system_residency_us", R_OK))4988 if (!access(sys_lpi_file_sysfs, R_OK)) {
4989 sys_lpi_file = sys_lpi_file_sysfs;
4911 BIC_PRESENT(BIC_SYS_LPI);4990 BIC_PRESENT(BIC_SYS_LPI);
4912 else4991 } else if (!access(sys_lpi_file_debugfs, R_OK)) {
4992 sys_lpi_file = sys_lpi_file_debugfs;
4993 BIC_PRESENT(BIC_SYS_LPI);
4994 } else {
4995 sys_lpi_file_sysfs = NULL;
4913 BIC_NOT_PRESENT(BIC_SYS_LPI);4996 BIC_NOT_PRESENT(BIC_SYS_LPI);
4997 }
4914 4998
4915 if (!quiet)4999 if (!quiet)
4916 decode_misc_feature_control();5000 decode_misc_feature_control();
@@ -5306,7 +5390,7 @@ int get_and_dump_counters(void) · 389 unmodified lines
5306}5390}
5307 5391
5308void print_version() {5392void print_version() {
5309 fprintf(outf, "turbostat version 19.08.31"5393 fprintf(outf, "turbostat version 20.03.20"
5310 " - Len Brown <lenb@kernel.org>\n");5394 " - Len Brown <lenb@kernel.org>\n");
5311}5395}
5312 5396
@@ -5323,9 +5407,9 @@ int add_counter(unsigned int msr_num, char *path, char *name, · 10 unmodified lines
5323 }5407 }
5324 5408
5325 msrp->msr_num = msr_num;5409 msrp->msr_num = msr_num;
5326 strncpy(msrp->name, name, NAME_BYTES);5410 strncpy(msrp->name, name, NAME_BYTES - 1);
5327 if (path)5411 if (path)
5328 strncpy(msrp->path, path, PATH_BYTES);5412 strncpy(msrp->path, path, PATH_BYTES - 1);
5329 msrp->width = width;5413 msrp->width = width;
5330 msrp->type = type;5414 msrp->type = type;
5331 msrp->format = format;5415 msrp->format = format;
tools/testing/ktest/ktest.pl+8−8
@@ -30,7 +30,7 @@ my %default = ( · 29 unmodified lines
30 "EMAIL_WHEN_STARTED" => 0,30 "EMAIL_WHEN_STARTED" => 0,
31 "NUM_TESTS" => 1,31 "NUM_TESTS" => 1,
32 "TEST_TYPE" => "build",32 "TEST_TYPE" => "build",
33 "BUILD_TYPE" => "randconfig",33 "BUILD_TYPE" => "oldconfig",
34 "MAKE_CMD" => "make",34 "MAKE_CMD" => "make",
35 "CLOSE_CONSOLE_SIGNAL" => "INT",35 "CLOSE_CONSOLE_SIGNAL" => "INT",
36 "TIMEOUT" => 120,36 "TIMEOUT" => 120,
@@ -1030,7 +1030,7 @@ sub __read_config { · 993 unmodified lines
1030 }1030 }
1031 1031
1032 if (!$skip && $rest !~ /^\s*$/) {1032 if (!$skip && $rest !~ /^\s*$/) {
1033 die "$name: $.: Gargbage found after $type\n$_";1033 die "$name: $.: Garbage found after $type\n$_";
1034 }1034 }
1035 1035
1036 if ($skip && $type eq "TEST_START") {1036 if ($skip && $type eq "TEST_START") {
@@ -1063,7 +1063,7 @@ sub __read_config { · 26 unmodified lines
1063 }1063 }
1064 1064
1065 if ($rest !~ /^\s*$/) {1065 if ($rest !~ /^\s*$/) {
1066 die "$name: $.: Gargbage found after DEFAULTS\n$_";1066 die "$name: $.: Garbage found after DEFAULTS\n$_";
1067 }1067 }
1068 1068
1069 } elsif (/^\s*INCLUDE\s+(\S+)/) {1069 } elsif (/^\s*INCLUDE\s+(\S+)/) {
@@ -1154,7 +1154,7 @@ sub __read_config { · 84 unmodified lines
1154 # on of these sections that have SKIP defined.1154 # on of these sections that have SKIP defined.
1155 # The save variable can be1155 # The save variable can be
1156 # defined multiple times and the new one simply overrides1156 # defined multiple times and the new one simply overrides
1157 # the prevous one.1157 # the previous one.
1158 set_variable($lvalue, $rvalue);1158 set_variable($lvalue, $rvalue);
1159 1159
1160 } else {1160 } else {
@@ -1234,7 +1234,7 @@ sub read_config { · 73 unmodified lines
1234 foreach my $option (keys %not_used) {1234 foreach my $option (keys %not_used) {
1235 print "$option\n";1235 print "$option\n";
1236 }1236 }
1237 print "Set IGRNORE_UNUSED = 1 to have ktest ignore unused variables\n";1237 print "Set IGNORE_UNUSED = 1 to have ktest ignore unused variables\n";
1238 if (!read_yn "Do you want to continue?") {1238 if (!read_yn "Do you want to continue?") {
1239 exit -1;1239 exit -1;
1240 }1240 }
@@ -1345,7 +1345,7 @@ sub eval_option { · 104 unmodified lines
1345 # Check for recursive evaluations.1345 # Check for recursive evaluations.
1346 # 100 deep should be more than enough.1346 # 100 deep should be more than enough.
1347 if ($r++ > 100) {1347 if ($r++ > 100) {
1348 die "Over 100 evaluations accurred with $option\n" .1348 die "Over 100 evaluations occurred with $option\n" .
1349 "Check for recursive variables\n";1349 "Check for recursive variables\n";
1350 }1350 }
1351 $prev = $option;1351 $prev = $option;
@@ -1383,7 +1383,7 @@ sub reboot { · 31 unmodified lines
1383 1383
1384 } else {1384 } else {
1385 # Make sure everything has been written to disk1385 # Make sure everything has been written to disk
1386 run_ssh("sync");1386 run_ssh("sync", 10);
1387 1387
1388 if (defined($time)) {1388 if (defined($time)) {
1389 start_monitor;1389 start_monitor;
@@ -1461,7 +1461,7 @@ sub get_test_name() { · 71 unmodified lines
1461 1461
1462sub dodie {1462sub dodie {
1463 1463
1464 # avoid recusion1464 # avoid recursion
1465 return if ($in_die);1465 return if ($in_die);
1466 $in_die = 1;1466 $in_die = 1;
1467 1467
tools/testing/ktest/sample.conf+11−11
@@ -10,7 +10,7 @@ · 9 unmodified lines
10#10#
11 11
12# Options set in the beginning of the file are considered to be12# Options set in the beginning of the file are considered to be
13# default options. These options can be overriden by test specific13# default options. These options can be overridden by test specific
14# options, with the following exceptions:14# options, with the following exceptions:
15#15#
16# LOG_FILE16# LOG_FILE
@@ -204,7 +204,7 @@ · 187 unmodified lines
204#204#
205# This config file can also contain "config variables".205# This config file can also contain "config variables".
206# These are assigned with ":=" instead of the ktest option206# These are assigned with ":=" instead of the ktest option
207# assigment "=".207# assignment "=".
208#208#
209# The difference between ktest options and config variables209# The difference between ktest options and config variables
210# is that config variables can be used multiple times,210# is that config variables can be used multiple times,
@@ -263,7 +263,7 @@ · 52 unmodified lines
263#### Using options in other options ####263#### Using options in other options ####
264#264#
265# Options that are defined in the config file may also be used265# Options that are defined in the config file may also be used
266# by other options. All options are evaulated at time of266# by other options. All options are evaluated at time of
267# use (except that config variables are evaluated at config267# use (except that config variables are evaluated at config
268# processing time).268# processing time).
269#269#
@@ -505,7 +505,7 @@ · 235 unmodified lines
505#TEST = ssh user@machine /root/run_test505#TEST = ssh user@machine /root/run_test
506 506
507# The build type is any make config type or special command507# The build type is any make config type or special command
508# (default randconfig)508# (default oldconfig)
509# nobuild - skip the clean and build step509# nobuild - skip the clean and build step
510# useconfig:/path/to/config - use the given config and run510# useconfig:/path/to/config - use the given config and run
511# oldconfig on it.511# oldconfig on it.
@@ -707,7 +707,7 @@ · 195 unmodified lines
707 707
708# Line to define a successful boot up in console output.708# Line to define a successful boot up in console output.
709# This is what the line contains, not the entire line. If you need709# This is what the line contains, not the entire line. If you need
710# the entire line to match, then use regural expression syntax like:710# the entire line to match, then use regular expression syntax like:
711# (do not add any quotes around it)711# (do not add any quotes around it)
712#712#
713# SUCCESS_LINE = ^MyBox Login:$713# SUCCESS_LINE = ^MyBox Login:$
@@ -839,7 +839,7 @@ · 125 unmodified lines
839# (ignored if POWEROFF_ON_SUCCESS is set)839# (ignored if POWEROFF_ON_SUCCESS is set)
840#REBOOT_ON_SUCCESS = 1840#REBOOT_ON_SUCCESS = 1
841 841
842# In case there are isses with rebooting, you can specify this842# In case there are issues with rebooting, you can specify this
843# to always powercycle after this amount of time after calling843# to always powercycle after this amount of time after calling
844# reboot.844# reboot.
845# Note, POWERCYCLE_AFTER_REBOOT = 0 does NOT disable it. It just845# Note, POWERCYCLE_AFTER_REBOOT = 0 does NOT disable it. It just
@@ -848,7 +848,7 @@ · 2 unmodified lines
848# (default undefined)848# (default undefined)
849#POWERCYCLE_AFTER_REBOOT = 5849#POWERCYCLE_AFTER_REBOOT = 5
850 850
851# In case there's isses with halting, you can specify this851# In case there's issues with halting, you can specify this
852# to always poweroff after this amount of time after calling852# to always poweroff after this amount of time after calling
853# halt.853# halt.
854# Note, POWEROFF_AFTER_HALT = 0 does NOT disable it. It just854# Note, POWEROFF_AFTER_HALT = 0 does NOT disable it. It just
@@ -972,7 +972,7 @@ · 117 unmodified lines
972#972#
973# PATCHCHECK_START is required and is the first patch to973# PATCHCHECK_START is required and is the first patch to
974# test (the SHA1 of the commit). You may also specify anything974# test (the SHA1 of the commit). You may also specify anything
975# that git checkout allows (branch name, tage, HEAD~3).975# that git checkout allows (branch name, tag, HEAD~3).
976#976#
977# PATCHCHECK_END is the last patch to check (default HEAD)977# PATCHCHECK_END is the last patch to check (default HEAD)
978#978#
@@ -994,7 +994,7 @@ · 15 unmodified lines
994# IGNORE_WARNINGS is set for the given commit's sha1994# IGNORE_WARNINGS is set for the given commit's sha1
995#995#
996# IGNORE_WARNINGS can be used to disable the failure of patchcheck996# IGNORE_WARNINGS can be used to disable the failure of patchcheck
997# on a particuler commit (SHA1). You can add more than one commit997# on a particular commit (SHA1). You can add more than one commit
998# by adding a list of SHA1s that are space delimited.998# by adding a list of SHA1s that are space delimited.
999#999#
1000# If BUILD_NOCLEAN is set, then make mrproper will not be run on1000# If BUILD_NOCLEAN is set, then make mrproper will not be run on
@@ -1093,7 +1093,7 @@ · 92 unmodified lines
1093# whatever reason. (Can't reboot, want to inspect each iteration)1093# whatever reason. (Can't reboot, want to inspect each iteration)
1094# Doing a BISECT_MANUAL will have the test wait for you to1094# Doing a BISECT_MANUAL will have the test wait for you to
1095# tell it if the test passed or failed after each iteration.1095# tell it if the test passed or failed after each iteration.
1096# This is basicall the same as running git bisect yourself1096# This is basically the same as running git bisect yourself
1097# but ktest will rebuild and install the kernel for you.1097# but ktest will rebuild and install the kernel for you.
1098#1098#
1099# BISECT_CHECK = 1 (optional, default 0)1099# BISECT_CHECK = 1 (optional, default 0)
@@ -1239,7 +1239,7 @@ · 139 unmodified lines
1239#1239#
1240# CONFIG_BISECT_EXEC (optional)1240# CONFIG_BISECT_EXEC (optional)
1241# The config bisect is a separate program that comes with ktest.pl.1241# The config bisect is a separate program that comes with ktest.pl.
1242# By befault, it will look for:1242# By default, it will look for:
1243# `pwd`/config-bisect.pl # the location ktest.pl was executed from.1243# `pwd`/config-bisect.pl # the location ktest.pl was executed from.
1244# If it does not find it there, it will look for:1244# If it does not find it there, it will look for:
1245# `dirname <ktest.pl>`/config-bisect.pl # The directory that holds ktest.pl1245# `dirname <ktest.pl>`/config-bisect.pl # The directory that holds ktest.pl
tools/testing/selftests/net/fib_tests.sh+31−3
@@ -1041,6 +1041,27 @@ ipv6_addr_metric_test() · 1040 unmodified lines
1041 fi1041 fi
1042 log_test $rc 0 "Prefix route with metric on link up"1042 log_test $rc 0 "Prefix route with metric on link up"
1043 1043
1044 # verify peer metric added correctly
1045 set -e
1046 run_cmd "$IP -6 addr flush dev dummy2"
1047 run_cmd "$IP -6 addr add dev dummy2 2001:db8:104::1 peer 2001:db8:104::2 metric 260"
1048 set +e
1049
1050 check_route6 "2001:db8:104::1 dev dummy2 proto kernel metric 260"
1051 log_test $? 0 "Set metric with peer route on local side"
1052 log_test $? 0 "User specified metric on local address"
1053 check_route6 "2001:db8:104::2 dev dummy2 proto kernel metric 260"
1054 log_test $? 0 "Set metric with peer route on peer side"
1055
1056 set -e
1057 run_cmd "$IP -6 addr change dev dummy2 2001:db8:104::1 peer 2001:db8:104::3 metric 261"
1058 set +e
1059
1060 check_route6 "2001:db8:104::1 dev dummy2 proto kernel metric 261"
1061 log_test $? 0 "Modify metric and peer address on local side"
1062 check_route6 "2001:db8:104::3 dev dummy2 proto kernel metric 261"
1063 log_test $? 0 "Modify metric and peer address on peer side"
1064
1044 $IP li del dummy11065 $IP li del dummy1
1045 $IP li del dummy21066 $IP li del dummy2
1046 cleanup1067 cleanup
@@ -1457,13 +1478,20 @@ ipv4_addr_metric_test() · 410 unmodified lines
1457 1478
1458 run_cmd "$IP addr flush dev dummy2"1479 run_cmd "$IP addr flush dev dummy2"
1459 run_cmd "$IP addr add dev dummy2 172.16.104.1/32 peer 172.16.104.2 metric 260"1480 run_cmd "$IP addr add dev dummy2 172.16.104.1/32 peer 172.16.104.2 metric 260"
1460 run_cmd "$IP addr change dev dummy2 172.16.104.1/32 peer 172.16.104.2 metric 261"
1461 rc=$?1481 rc=$?
1462 if [ $rc -eq 0 ]; then1482 if [ $rc -eq 0 ]; then
1463 check_route "172.16.104.2 dev dummy2 proto kernel scope link src 172.16.104.1 metric 261"1483 check_route "172.16.104.2 dev dummy2 proto kernel scope link src 172.16.104.1 metric 260"
1484 rc=$?
1485 fi
1486 log_test $rc 0 "Set metric of address with peer route"
1487
1488 run_cmd "$IP addr change dev dummy2 172.16.104.1/32 peer 172.16.104.3 metric 261"
1489 rc=$?
1490 if [ $rc -eq 0 ]; then
1491 check_route "172.16.104.3 dev dummy2 proto kernel scope link src 172.16.104.1 metric 261"
1464 rc=$?1492 rc=$?
1465 fi1493 fi
1466 log_test $rc 0 "Modify metric of address with peer route"1494 log_test $rc 0 "Modify metric and peer address for peer route"
1467 1495
1468 $IP li del dummy11496 $IP li del dummy1
1469 $IP li del dummy21497 $IP li del dummy2
tools/testing/selftests/tc-testing/config+1−0
@@ -57,3 +57,4 @@ CONFIG_NET_IFE_SKBMARK=m · 56 unmodified lines
57CONFIG_NET_IFE_SKBPRIO=m57CONFIG_NET_IFE_SKBPRIO=m
58CONFIG_NET_IFE_SKBTCINDEX=m58CONFIG_NET_IFE_SKBTCINDEX=m
59CONFIG_NET_SCH_FIFO=y59CONFIG_NET_SCH_FIFO=y
60CONFIG_NET_SCH_ETS=m
usr/Kconfig+11−11
@@ -124,17 +124,6 @@ choice · 123 unmodified lines
124 124
125 If in doubt, select 'None'125 If in doubt, select 'None'
126 126
127config INITRAMFS_COMPRESSION_NONE
128 bool "None"
129 help
130 Do not compress the built-in initramfs at all. This may sound wasteful
131 in space, but, you should be aware that the built-in initramfs will be
132 compressed at a later stage anyways along with the rest of the kernel,
133 on those architectures that support this. However, not compressing the
134 initramfs may lead to slightly higher memory consumption during a
135 short time at boot, while both the cpio image and the unpacked
136 filesystem image will be present in memory simultaneously
137
138config INITRAMFS_COMPRESSION_GZIP127config INITRAMFS_COMPRESSION_GZIP
139 bool "Gzip"128 bool "Gzip"
140 depends on RD_GZIP129 depends on RD_GZIP
@@ -207,4 +196,15 @@ config INITRAMFS_COMPRESSION_LZ4 · 66 unmodified lines
207 If you choose this, keep in mind that most distros don't provide lz4196 If you choose this, keep in mind that most distros don't provide lz4
208 by default which could cause a build failure.197 by default which could cause a build failure.
209 198
199config INITRAMFS_COMPRESSION_NONE
200 bool "None"
201 help
202 Do not compress the built-in initramfs at all. This may sound wasteful
203 in space, but, you should be aware that the built-in initramfs will be
204 compressed at a later stage anyways along with the rest of the kernel,
205 on those architectures that support this. However, not compressing the
206 initramfs may lead to slightly higher memory consumption during a
207 short time at boot, while both the cpio image and the unpacked
208 filesystem image will be present in memory simultaneously
209
210endchoice210endchoice