History

Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net

David S. Miller committed 7 years ago

Commit b1bf78b2 parents aea0a89 d146194197 files · +1786 −741Browse files

Unified · Split

197 files
  1. Documentation/admin-guide/kernel-parameters.txt +2 −0
  2. Documentation/admin-guide/security-bugs.rst +11 −10
  3. Documentation/devicetree/bindings/net/dsa/dsa.txt +1 −1
  4. Documentation/media/uapi/v4l/dev-meta.rst +1 −1
  5. Documentation/media/uapi/v4l/vidioc-g-fmt.rst +5 −0
  6. MAINTAINERS +25 −12
  7. arch/arm64/include/asm/sysreg.h +2 −2
  8. arch/arm64/kernel/cpufeature.c +1 −1
  9. arch/mips/configs/cavium_octeon_defconfig +1 −0
  10. arch/mips/kernel/setup.c +1 −0
  11. arch/mips/kernel/traps.c +1 −2
  12. arch/mips/loongson64/loongson-3/numa.c +2 −10
  13. arch/mips/sgi-ip27/ip27-memory.c +1 −10
  14. arch/riscv/Makefile +14 −1
  15. arch/riscv/boot/.gitignore +2 −0
  16. arch/riscv/boot/Makefile +33 −0
  17. arch/riscv/boot/install.sh +60 −0
  18. arch/riscv/include/asm/module.h +1 −0
  19. arch/riscv/include/asm/uaccess.h +2 −2
  20. arch/riscv/include/asm/unistd.h +2 −3
  21. arch/riscv/include/uapi/asm/unistd.h +19 −7
  22. arch/riscv/kernel/cpu.c +6 −3
  23. arch/riscv/kernel/head.S +10 −0
  24. arch/riscv/kernel/vmlinux.lds.S +1 −1
  25. drivers/acpi/acpi_platform.c +1 −0
  26. drivers/cpufreq/ti-cpufreq.c +21 −5
  27. drivers/dma-buf/udmabuf.c +1 −0
  28. drivers/gnss/serial.c +2 −1
  29. drivers/gnss/sirf.c +2 −1
  30. drivers/gpio/gpio-mockup.c +3 −3
  31. drivers/gpio/gpio-pxa.c +2 −2
  32. drivers/gpio/gpiolib.c +3 −2
  33. drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.c +5 −2
  34. drivers/gpu/drm/amd/amdgpu/amdgpu_display.c +7 −0
  35. drivers/gpu/drm/amd/amdgpu/amdgpu_mode.h +2 −0
  36. drivers/gpu/drm/amd/amdgpu/gmc_v6_0.c +1 −0
  37. drivers/gpu/drm/amd/amdgpu/soc15.c +32 −7
  38. drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c +16 −0
  39. drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.h +1 −0
  40. drivers/gpu/drm/amd/powerplay/hwmgr/smu7_hwmgr.c +10 −10
  41. drivers/gpu/drm/amd/powerplay/hwmgr/vega10_hwmgr.c +10 −15
  42. drivers/gpu/drm/amd/powerplay/hwmgr/vega12_hwmgr.c +10 −13
  43. drivers/gpu/drm/amd/powerplay/hwmgr/vega20_hwmgr.c +21 −9
  44. drivers/gpu/drm/ast/ast_drv.c +21 −0
  45. drivers/gpu/drm/ast/ast_mode.c +2 −1
  46. drivers/gpu/drm/drm_fb_helper.c +3 −0
  47. drivers/gpu/drm/i915/i915_gem_execbuffer.c +6 −1
  48. drivers/gpu/drm/i915/i915_gem_gtt.c +5 −0
  49. drivers/gpu/drm/i915/i915_gpu_error.c +14 −1
  50. drivers/gpu/drm/i915/i915_gpu_error.h +7 −1
  51. drivers/gpu/drm/i915/intel_display.c +39 −0
  52. drivers/gpu/drm/i915/intel_drv.h +1 −0
  53. drivers/gpu/drm/i915/intel_pm.c +40 −1
  54. drivers/gpu/drm/vc4/vc4_kms.c +6 −0
  55. drivers/gpu/drm/vc4/vc4_plane.c +13 −2
  56. drivers/hv/hv_kvp.c +22 −4
  57. drivers/iommu/amd_iommu_init.c +2 −1
  58. drivers/iommu/intel-iommu.c +1 −1
  59. drivers/iommu/intel-svm.c +1 −1
  60. drivers/iommu/ipmmu-vmsa.c +3 −0
  61. drivers/media/cec/cec-adap.c +38 −11
  62. drivers/media/i2c/tc358743.c +0 −1
  63. drivers/media/pci/intel/ipu3/ipu3-cio2.c +2 −4
  64. drivers/media/platform/omap3isp/isp.c +2 −1
  65. drivers/media/platform/vicodec/vicodec-core.c +1 −1
  66. drivers/media/platform/vim2m.c +1 −1
  67. drivers/media/v4l2-core/v4l2-ctrls.c +5 −0
  68. drivers/media/v4l2-core/v4l2-event.c +24 −19
  69. drivers/media/v4l2-core/v4l2-mem2mem.c +2 −2
  70. drivers/misc/atmel-ssc.c +1 −1
  71. drivers/misc/sgi-gru/grukdump.c +4 −0
  72. drivers/mmc/host/sdhci-pci-core.c +83 −3
  73. drivers/mtd/nand/raw/atmel/nand-controller.c +7 −4
  74. drivers/mtd/nand/raw/qcom_nandc.c +16 −16
  75. drivers/mtd/spi-nor/cadence-quadspi.c +16 −3
  76. drivers/mtd/spi-nor/spi-nor.c +98 −32
  77. drivers/net/ethernet/amazon/ena/ena_netdev.c +11 −12
  78. drivers/net/ethernet/amazon/ena/ena_netdev.h +1 −1
  79. drivers/net/ethernet/amd/sunlance.c +3 −1
  80. drivers/net/ethernet/broadcom/tg3.c +16 −2
  81. drivers/net/ethernet/cavium/thunder/nicvf_main.c +7 −2
  82. drivers/net/ethernet/cavium/thunder/nicvf_queues.c +3 −1
  83. drivers/net/ethernet/cortina/gemini.c +1 −1
  84. drivers/net/ethernet/faraday/ftmac100.c +3 −4
  85. drivers/net/ethernet/ibm/ibmvnic.c +31 −41
  86. drivers/net/ethernet/ibm/ibmvnic.h +1 −1
  87. drivers/net/ethernet/mellanox/mlx5/core/en.h +1 −0
  88. drivers/net/ethernet/mellanox/mlx5/core/en/port.c +15 −21
  89. drivers/net/ethernet/mellanox/mlx5/core/en/port_buffer.c +3 −1
  90. drivers/net/ethernet/mellanox/mlx5/core/en_ethtool.c +1 −2
  91. drivers/net/ethernet/mellanox/mlx5/core/en_main.c +31 −6
  92. drivers/net/ethernet/mellanox/mlx5/core/en_rx.c +6 −0
  93. drivers/net/ethernet/mellanox/mlx5/core/en_selftest.c +10 −16
  94. drivers/net/ethernet/mellanox/mlx5/core/en_stats.c +3 −0
  95. drivers/net/ethernet/mellanox/mlx5/core/en_stats.h +2 −0
  96. drivers/net/ethernet/mellanox/mlx5/core/en_tc.c +35 −34
  97. drivers/net/ethernet/mellanox/mlx5/core/fpga/ipsec.c +8 −2
  98. drivers/net/ethernet/mellanox/mlx5/core/ipoib/ipoib.c +1 −1
  99. drivers/net/ethernet/qlogic/qed/qed_dev.c +24 −5
  100. drivers/net/phy/mscc.c +5 −9
  101. drivers/net/team/team.c +0 −2
  102. drivers/net/virtio_net.c +5 −8
  103. drivers/net/wireless/ath/ath10k/mac.c +1 −1
  104. drivers/net/wireless/ath/ath9k/main.c +1 −2
  105. drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c +2 −1
  106. drivers/net/wireless/broadcom/brcm80211/brcmutil/d11.c +3 −0
  107. drivers/net/wireless/intel/iwlwifi/fw/acpi.h +3 −1
  108. drivers/net/wireless/intel/iwlwifi/fw/runtime.h +5 −1
  109. drivers/net/wireless/intel/iwlwifi/mvm/fw.c +29 −9
  110. drivers/net/wireless/intel/iwlwifi/mvm/mac80211.c +6 −6
  111. drivers/net/wireless/intel/iwlwifi/mvm/nvm.c +2 −3
  112. drivers/net/wireless/intel/iwlwifi/mvm/ops.c +2 −0
  113. drivers/net/wireless/mediatek/mt76/Kconfig +6 −0
  114. drivers/net/wireless/mediatek/mt76/mac80211.c +5 −3
  115. drivers/net/wireless/mediatek/mt76/mt76x02.h +0 −1
  116. drivers/net/wireless/mediatek/mt76/mt76x2/pci_init.c +4 −2
  117. drivers/net/wireless/mediatek/mt76/mt76x2/pci_main.c +2 −2
  118. drivers/net/wireless/ti/wlcore/sdio.c +11 −6
  119. drivers/nvme/host/fc.c +63 −10
  120. drivers/nvmem/core.c +6 −4
  121. drivers/opp/ti-opp-supply.c +4 −1
  122. drivers/scsi/qla2xxx/qla_os.c +8 −2
  123. drivers/scsi/ufs/ufs-hisi.c +9 −0
  124. drivers/scsi/ufs/ufs_quirks.h +6 −0
  125. drivers/scsi/ufs/ufshcd.c +2 −0
  126. drivers/slimbus/qcom-ngd-ctrl.c +0 −3
  127. drivers/slimbus/slimbus.h +0 −6
  128. drivers/staging/media/davinci_vpfe/dm365_ipipeif.c +1 −0
  129. drivers/staging/media/sunxi/cedrus/cedrus.c +1 −1
  130. drivers/uio/uio.c +5 −2
  131. drivers/usb/class/cdc-acm.c +3 −0
  132. drivers/usb/core/hub.c +14 −4
  133. drivers/usb/core/quirks.c +14 −0
  134. drivers/usb/dwc2/pci.c +1 −0
  135. drivers/usb/dwc3/core.c +1 −0
  136. drivers/usb/dwc3/dwc3-pci.c +3 −1
  137. drivers/usb/dwc3/gadget.c +4 −4
  138. drivers/usb/gadget/function/f_fs.c +8 −18
  139. drivers/usb/host/xhci-histb.c +4 −2
  140. drivers/usb/host/xhci-hub.c +49 −17
  141. drivers/usb/host/xhci-mtk.c +4 −2
  142. drivers/usb/host/xhci-pci.c +6 −0
  143. drivers/usb/host/xhci-plat.c +4 −2
  144. drivers/usb/host/xhci-ring.c +43 −2
  145. drivers/usb/host/xhci-tegra.c +1 −0
  146. drivers/usb/host/xhci.c +0 −2
  147. drivers/usb/host/xhci.h +2 −1
  148. drivers/usb/misc/appledisplay.c +1 −0
  149. fs/exec.c +3 −2
  150. fs/iomap.c +41 −12
  151. fs/read_write.c +7 −8
  152. fs/xfs/libxfs/xfs_bmap.c +4 −1
  153. fs/xfs/libxfs/xfs_ialloc_btree.c +7 −4
  154. fs/xfs/xfs_bmap_util.c +2 −8
  155. fs/xfs/xfs_bmap_util.h +3 −0
  156. fs/xfs/xfs_buf_item.c +21 −7
  157. fs/xfs/xfs_file.c +1 −1
  158. fs/xfs/xfs_reflink.c +14 −4
  159. fs/xfs/xfs_trace.h +4 −1
  160. include/linux/net_dim.h +2 −0
  161. include/linux/skbuff.h +17 −1
  162. include/linux/tcp.h +1 −0
  163. include/linux/usb/quirks.h +3 −0
  164. include/media/v4l2-mem2mem.h +1 −1
  165. include/net/sctp/sctp.h +12 −0
  166. include/uapi/linux/v4l2-controls.h +5 −0
  167. lib/test_firmware.c +1 −0
  168. net/ceph/messenger.c +9 −3
  169. net/core/dev.c +5 −2
  170. net/ipv4/tcp_input.c +13 −2
  171. net/ipv4/tcp_output.c +3 −3
  172. net/ipv4/tcp_timer.c +1 −1
  173. net/ipv6/addrconf.c +13 −6
  174. net/packet/af_packet.c +2 −2
  175. net/sched/act_police.c +22 −14
  176. net/sctp/output.c +4 −20
  177. net/sctp/socket.c +5 −21
  178. net/sctp/stream.c +0 −1
  179. net/smc/af_smc.c +7 −4
  180. net/smc/smc_cdc.c +15 −11
  181. net/smc/smc_cdc.h +45 −15
  182. net/smc/smc_core.c +14 −6
  183. net/smc/smc_core.h +3 −2
  184. net/smc/smc_ism.c +32 −11
  185. net/smc/smc_ism.h +1 −0
  186. net/smc/smc_wr.c +3 −1
  187. sound/core/oss/pcm_oss.c +3 −3
  188. sound/core/oss/pcm_plugin.c +3 −3
  189. sound/pci/hda/patch_ca0132.c +3 −2
  190. sound/pci/hda/patch_realtek.c +1 −0
  191. tools/power/cpupower/Makefile +6 −6
  192. tools/power/cpupower/bench/Makefile +1 −1
  193. tools/power/cpupower/debug/x86_64/Makefile +2 −2
  194. tools/power/cpupower/lib/cpufreq.c +1 −1
  195. tools/power/cpupower/lib/cpuidle.c +1 −1
  196. tools/power/cpupower/lib/cpupower.c +2 −2
  197. tools/power/cpupower/lib/cpupower_intern.h +1 −1
Documentation/admin-guide/kernel-parameters.txt+2−0
@@ -4713,6 +4713,8 @@ · 4712 unmodified lines
47134713 prevent spurious wakeup);
47144714 n = USB_QUIRK_DELAY_CTRL_MSG (Device needs a
47154715 pause after every control message);
4716+ o = USB_QUIRK_HUB_SLOW_RESET (Hub needs extra
4717+ delay after resetting its port);
47164718 Example: quirks=0781:5580:bk,0a5c:5834:gij
47174719
47184720 usbhid.mousepoll=
Documentation/admin-guide/security-bugs.rst+11−10
@@ -32,16 +32,17 @@ Disclosure and embargoed information · 31 unmodified lines
3232 The security list is not a disclosure channel. For that, see Coordination
3333 below.
3434
35−Once a robust fix has been developed, our preference is to release the
36−fix in a timely fashion, treating it no differently than any of the other
37−thousands of changes and fixes the Linux kernel project releases every
38−month.
39−
40−However, at the request of the reporter, we will postpone releasing the
41−fix for up to 5 business days after the date of the report or after the
42−embargo has lifted; whichever comes first. The only exception to that
43−rule is if the bug is publicly known, in which case the preference is to
44−release the fix as soon as it's available.
35+Once a robust fix has been developed, the release process starts. Fixes
36+for publicly known bugs are released immediately.
37+
38+Although our preference is to release fixes for publicly undisclosed bugs
39+as soon as they become available, this may be postponed at the request of
40+the reporter or an affected party for up to 7 calendar days from the start
41+of the release process, with an exceptional extension to 14 calendar days
42+if it is agreed that the criticality of the bug requires more time. The
43+only valid reason for deferring the publication of a fix is to accommodate
44+the logistics of QA and large scale rollouts which require release
45+coordination.
4546
4647 Whilst embargoed information may be shared with trusted individuals in
4748 order to develop a fix, such information will not be published alongside
Documentation/devicetree/bindings/net/dsa/dsa.txt+1−1
@@ -7,7 +7,7 @@ limitations. · 6 unmodified lines
77 Current Binding
88 ---------------
99
10−Switches are true Linux devices and can be probes by any means. Once
10+Switches are true Linux devices and can be probed by any means. Once
1111 probed, they register to the DSA framework, passing a node
1212 pointer. This node is expected to fulfil the following binding, and
1313 may contain additional properties as required by the device it is
Documentation/media/uapi/v4l/dev-meta.rst+1−1
@@ -40,7 +40,7 @@ To use the :ref:`format` ioctls applications set the ``type`` field of the · 39 unmodified lines
4040 the desired operation. Both drivers and applications must set the remainder of
4141 the :c:type:`v4l2_format` structure to 0.
4242
43−.. _v4l2-meta-format:
43+.. c:type:: v4l2_meta_format
4444
4545 .. tabularcolumns:: |p{1.4cm}|p{2.2cm}|p{13.9cm}|
4646
Documentation/media/uapi/v4l/vidioc-g-fmt.rst+5−0
@@ -132,6 +132,11 @@ The format as returned by :ref:`VIDIOC_TRY_FMT <VIDIOC_G_FMT>` must be identical · 131 unmodified lines
132132 - ``sdr``
133133 - Definition of a data format, see :ref:`pixfmt`, used by SDR
134134 capture and output devices.
135+ * -
136+ - struct :c:type:`v4l2_meta_format`
137+ - ``meta``
138+ - Definition of a metadata format, see :ref:`meta-formats`, used by
139+ metadata capture devices.
135140 * -
136141 - __u8
137142 - ``raw_data``\ [200]
MAINTAINERS+25−12
@@ -180,6 +180,7 @@ F: drivers/net/hamradio/6pack.c · 179 unmodified lines
180180
181181 8169 10/100/1000 GIGABIT ETHERNET DRIVER
182182 M: Realtek linux nic maintainers <nic_swsd@realtek.com>
183+M: Heiner Kallweit <hkallweit1@gmail.com>
183184 L: netdev@vger.kernel.org
184185 S: Maintained
185186 F: drivers/net/ethernet/realtek/r8169.c
@@ -5534,6 +5535,7 @@ F: net/bridge/ · 5348 unmodified lines
55345535 ETHERNET PHY LIBRARY
55355536 M: Andrew Lunn <andrew@lunn.ch>
55365537 M: Florian Fainelli <f.fainelli@gmail.com>
5538+M: Heiner Kallweit <hkallweit1@gmail.com>
55375539 L: netdev@vger.kernel.org
55385540 S: Maintained
55395541 F: Documentation/ABI/testing/sysfs-bus-mdio
@@ -6305,6 +6307,7 @@ F: tools/testing/selftests/gpio/ · 765 unmodified lines
63056307
63066308 GPIO SUBSYSTEM
63076309 M: Linus Walleij <linus.walleij@linaro.org>
6310+M: Bartosz Golaszewski <bgolaszewski@baylibre.com>
63086311 L: linux-gpio@vger.kernel.org
63096312 T: git git://git.kernel.org/pub/scm/linux/kernel/git/linusw/linux-gpio.git
63106313 S: Maintained
@@ -7442,6 +7445,20 @@ S: Maintained · 1131 unmodified lines
74427445 F: Documentation/fb/intelfb.txt
74437446 F: drivers/video/fbdev/intelfb/
74447447
7448+INTEL GPIO DRIVERS
7449+M: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
7450+L: linux-gpio@vger.kernel.org
7451+S: Maintained
7452+T: git git://git.kernel.org/pub/scm/linux/kernel/git/andy/linux-gpio-intel.git
7453+F: drivers/gpio/gpio-ich.c
7454+F: drivers/gpio/gpio-intel-mid.c
7455+F: drivers/gpio/gpio-lynxpoint.c
7456+F: drivers/gpio/gpio-merrifield.c
7457+F: drivers/gpio/gpio-ml-ioh.c
7458+F: drivers/gpio/gpio-pch.c
7459+F: drivers/gpio/gpio-sch.c
7460+F: drivers/gpio/gpio-sodaville.c
7461+
74457462 INTEL GVT-g DRIVERS (Intel GPU Virtualization)
74467463 M: Zhenyu Wang <zhenyuw@linux.intel.com>
74477464 M: Zhi Wang <zhi.a.wang@intel.com>
@@ -7452,12 +7469,6 @@ T: git https://github.com/intel/gvt-linux.git · 4 unmodified lines
74527469 S: Supported
74537470 F: drivers/gpu/drm/i915/gvt/
74547471
7455−INTEL PMIC GPIO DRIVER
7456−R: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
7457−S: Maintained
7458−F: drivers/gpio/gpio-*cove.c
7459−F: drivers/gpio/gpio-msic.c
7460−
74617472 INTEL HID EVENT DRIVER
74627473 M: Alex Hung <alex.hung@canonical.com>
74637474 L: platform-driver-x86@vger.kernel.org
@@ -7545,12 +7556,6 @@ W: https://01.org/linux-acpi · 81 unmodified lines
75457556 S: Supported
75467557 F: drivers/platform/x86/intel_menlow.c
75477558
7548−INTEL MERRIFIELD GPIO DRIVER
7549−M: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
7550−L: linux-gpio@vger.kernel.org
7551−S: Maintained
7552−F: drivers/gpio/gpio-merrifield.c
7553−
75547559 INTEL MIC DRIVERS (mic)
75557560 M: Sudeep Dutt <sudeep.dutt@intel.com>
75567561 M: Ashutosh Dixit <ashutosh.dixit@intel.com>
@@ -7583,6 +7588,13 @@ F: drivers/platform/x86/intel_punit_ipc.c · 26 unmodified lines
75837588 F: arch/x86/include/asm/intel_pmc_ipc.h
75847589 F: arch/x86/include/asm/intel_punit_ipc.h
75857590
7591+INTEL PMIC GPIO DRIVERS
7592+M: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
7593+S: Maintained
7594+T: git git://git.kernel.org/pub/scm/linux/kernel/git/andy/linux-gpio-intel.git
7595+F: drivers/gpio/gpio-*cove.c
7596+F: drivers/gpio/gpio-msic.c
7597+
75867598 INTEL MULTIFUNCTION PMIC DEVICE DRIVERS
75877599 R: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
75887600 S: Maintained
@@ -14086,6 +14098,7 @@ F: Documentation/devicetree/bindings/iio/proximity/vl53l0x.txt · 6497 unmodified lines
1408614098
1408714099 STABLE BRANCH
1408814100 M: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
14101+M: Sasha Levin <sashal@kernel.org>
1408914102 L: stable@vger.kernel.org
1409014103 S: Supported
1409114104 F: Documentation/process/stable-kernel-rules.rst
arch/arm64/include/asm/sysreg.h+2−2
@@ -468,7 +468,7 @@ · 467 unmodified lines
468468 SCTLR_ELx_SA | SCTLR_ELx_I | SCTLR_ELx_WXN | \
469469 SCTLR_ELx_DSSBS | ENDIAN_CLEAR_EL2 | SCTLR_EL2_RES0)
470470
471−#if (SCTLR_EL2_SET ^ SCTLR_EL2_CLEAR) != 0xffffffffffffffff
471+#if (SCTLR_EL2_SET ^ SCTLR_EL2_CLEAR) != 0xffffffffffffffffUL
472472 #error "Inconsistent SCTLR_EL2 set/clear bits"
473473 #endif
474474
@@ -509,7 +509,7 @@ · 34 unmodified lines
509509 SCTLR_EL1_UMA | SCTLR_ELx_WXN | ENDIAN_CLEAR_EL1 |\
510510 SCTLR_ELx_DSSBS | SCTLR_EL1_NTWI | SCTLR_EL1_RES0)
511511
512−#if (SCTLR_EL1_SET ^ SCTLR_EL1_CLEAR) != 0xffffffffffffffff
512+#if (SCTLR_EL1_SET ^ SCTLR_EL1_CLEAR) != 0xffffffffffffffffUL
513513 #error "Inconsistent SCTLR_EL1 set/clear bits"
514514 #endif
515515
arch/arm64/kernel/cpufeature.c+1−1
@@ -1333,7 +1333,6 @@ static const struct arm64_cpu_capabilities arm64_features[] = { · 1332 unmodified lines
13331333 .cpu_enable = cpu_enable_hw_dbm,
13341334 },
13351335 #endif
1336−#ifdef CONFIG_ARM64_SSBD
13371336 {
13381337 .desc = "CRC32 instructions",
13391338 .capability = ARM64_HAS_CRC32,
@@ -1343,6 +1342,7 @@ static const struct arm64_cpu_capabilities arm64_features[] = { · 3 unmodified lines
13431342 .field_pos = ID_AA64ISAR0_CRC32_SHIFT,
13441343 .min_field_value = 1,
13451344 },
1345+#ifdef CONFIG_ARM64_SSBD
13461346 {
13471347 .desc = "Speculative Store Bypassing Safe (SSBS)",
13481348 .capability = ARM64_SSBS,
arch/mips/configs/cavium_octeon_defconfig+1−0
@@ -140,6 +140,7 @@ CONFIG_RTC_CLASS=y · 139 unmodified lines
140140 CONFIG_RTC_DRV_DS1307=y
141141 CONFIG_STAGING=y
142142 CONFIG_OCTEON_ETHERNET=y
143+CONFIG_OCTEON_USB=y
143144 # CONFIG_IOMMU_SUPPORT is not set
144145 CONFIG_RAS=y
145146 CONFIG_EXT4_FS=y
arch/mips/kernel/setup.c+1−0
@@ -794,6 +794,7 @@ static void __init arch_mem_init(char **cmdline_p) · 793 unmodified lines
794794
795795 /* call board setup routine */
796796 plat_mem_setup();
797+ memblock_set_bottom_up(true);
797798
798799 /*
799800 * Make sure all kernel memory is in the maps. The "UP" and
arch/mips/kernel/traps.c+1−2
@@ -2260,10 +2260,8 @@ void __init trap_init(void) · 2259 unmodified lines
22602260 unsigned long size = 0x200 + VECTORSPACING*64;
22612261 phys_addr_t ebase_pa;
22622262
2263− memblock_set_bottom_up(true);
22642263 ebase = (unsigned long)
22652264 memblock_alloc_from(size, 1 << fls(size), 0);
2266− memblock_set_bottom_up(false);
22672265
22682266 /*
22692267 * Try to ensure ebase resides in KSeg0 if possible.
@@ -2307,6 +2305,7 @@ void __init trap_init(void) · 37 unmodified lines
23072305 if (board_ebase_setup)
23082306 board_ebase_setup();
23092307 per_cpu_trap_init(true);
2308+ memblock_set_bottom_up(false);
23102309
23112310 /*
23122311 * Copy the generic exception handlers to their final destination.
arch/mips/loongson64/loongson-3/numa.c+2−10
@@ -231,6 +231,8 @@ static __init void prom_meminit(void) · 230 unmodified lines
231231 cpumask_clear(&__node_data[(node)]->cpumask);
232232 }
233233 }
234+ max_low_pfn = PHYS_PFN(memblock_end_of_DRAM());
235+
234236 for (cpu = 0; cpu < loongson_sysconf.nr_cpus; cpu++) {
235237 node = cpu / loongson_sysconf.cores_per_node;
236238 if (node >= num_online_nodes())
@@ -248,19 +250,9 @@ static __init void prom_meminit(void) · 11 unmodified lines
248250
249251 void __init paging_init(void)
250252 {
251− unsigned node;
252253 unsigned long zones_size[MAX_NR_ZONES] = {0, };
253254
254255 pagetable_init();
255−
256− for_each_online_node(node) {
257− unsigned long start_pfn, end_pfn;
258−
259− get_pfn_range_for_nid(node, &start_pfn, &end_pfn);
260−
261− if (end_pfn > max_low_pfn)
262− max_low_pfn = end_pfn;
263− }
264256 #ifdef CONFIG_ZONE_DMA32
265257 zones_size[ZONE_DMA32] = MAX_DMA32_PFN;
266258 #endif
arch/mips/sgi-ip27/ip27-memory.c+1−10
@@ -435,6 +435,7 @@ void __init prom_meminit(void) · 434 unmodified lines
435435
436436 mlreset();
437437 szmem();
438+ max_low_pfn = PHYS_PFN(memblock_end_of_DRAM());
438439
439440 for (node = 0; node < MAX_COMPACT_NODES; node++) {
440441 if (node_online(node)) {
@@ -455,18 +456,8 @@ extern void setup_zero_pages(void); · 14 unmodified lines
455456 void __init paging_init(void)
456457 {
457458 unsigned long zones_size[MAX_NR_ZONES] = {0, };
458− unsigned node;
459459
460460 pagetable_init();
461−
462− for_each_online_node(node) {
463− unsigned long start_pfn, end_pfn;
464−
465− get_pfn_range_for_nid(node, &start_pfn, &end_pfn);
466−
467− if (end_pfn > max_low_pfn)
468− max_low_pfn = end_pfn;
469− }
470461 zones_size[ZONE_NORMAL] = max_low_pfn;
471462 free_area_init_nodes(zones_size);
472463 }
arch/riscv/Makefile+14−1
@@ -71,6 +71,10 @@ KBUILD_CFLAGS += $(call cc-option,-mstrict-align) · 70 unmodified lines
7171 # arch specific predefines for sparse
7272 CHECKFLAGS += -D__riscv -D__riscv_xlen=$(BITS)
7373
74+# Default target when executing plain make
75+boot := arch/riscv/boot
76+KBUILD_IMAGE := $(boot)/Image.gz
77+
7478 head-y := arch/riscv/kernel/head.o
7579
7680 core-y += arch/riscv/kernel/ arch/riscv/mm/
@@ -81,4 +85,13 @@ PHONY += vdso_install · 4 unmodified lines
8185 vdso_install:
8286 $(Q)$(MAKE) $(build)=arch/riscv/kernel/vdso $@
8387
84−all: vmlinux
88+all: Image.gz
89+
90+Image: vmlinux
91+ $(Q)$(MAKE) $(build)=$(boot) $(boot)/$@
92+
93+Image.%: Image
94+ $(Q)$(MAKE) $(build)=$(boot) $(boot)/$@
95+
96+zinstall install:
97+ $(Q)$(MAKE) $(build)=$(boot) $@
arch/riscv/boot/.gitignore+2−0
@@ -0,0 +1,2 @@
1+Image
2+Image.gz
arch/riscv/boot/Makefile+33−0
@@ -0,0 +1,33 @@
1+#
2+# arch/riscv/boot/Makefile
3+#
4+# This file is included by the global makefile so that you can add your own
5+# architecture-specific flags and dependencies.
6+#
7+# This file is subject to the terms and conditions of the GNU General Public
8+# License. See the file "COPYING" in the main directory of this archive
9+# for more details.
10+#
11+# Copyright (C) 2018, Anup Patel.
12+# Author: Anup Patel <anup@brainfault.org>
13+#
14+# Based on the ia64 and arm64 boot/Makefile.
15+#
16+
17+OBJCOPYFLAGS_Image :=-O binary -R .note -R .note.gnu.build-id -R .comment -S
18+
19+targets := Image
20+
21+$(obj)/Image: vmlinux FORCE
22+ $(call if_changed,objcopy)
23+
24+$(obj)/Image.gz: $(obj)/Image FORCE
25+ $(call if_changed,gzip)
26+
27+install:
28+ $(CONFIG_SHELL) $(srctree)/$(src)/install.sh $(KERNELRELEASE) \
29+ $(obj)/Image System.map "$(INSTALL_PATH)"
30+
31+zinstall:
32+ $(CONFIG_SHELL) $(srctree)/$(src)/install.sh $(KERNELRELEASE) \
33+ $(obj)/Image.gz System.map "$(INSTALL_PATH)"
arch/riscv/boot/install.sh+60−0
@@ -0,0 +1,60 @@
1+#!/bin/sh
2+#
3+# arch/riscv/boot/install.sh
4+#
5+# This file is subject to the terms and conditions of the GNU General Public
6+# License. See the file "COPYING" in the main directory of this archive
7+# for more details.
8+#
9+# Copyright (C) 1995 by Linus Torvalds
10+#
11+# Adapted from code in arch/i386/boot/Makefile by H. Peter Anvin
12+# Adapted from code in arch/i386/boot/install.sh by Russell King
13+#
14+# "make install" script for the RISC-V Linux port
15+#
16+# Arguments:
17+# $1 - kernel version
18+# $2 - kernel image file
19+# $3 - kernel map file
20+# $4 - default install path (blank if root directory)
21+#
22+
23+verify () {
24+ if [ ! -f "$1" ]; then
25+ echo "" 1>&2
26+ echo " *** Missing file: $1" 1>&2
27+ echo ' *** You need to run "make" before "make install".' 1>&2
28+ echo "" 1>&2
29+ exit 1
30+ fi
31+}
32+
33+# Make sure the files actually exist
34+verify "$2"
35+verify "$3"
36+
37+# User may have a custom install script
38+if [ -x ~/bin/${INSTALLKERNEL} ]; then exec ~/bin/${INSTALLKERNEL} "$@"; fi
39+if [ -x /sbin/${INSTALLKERNEL} ]; then exec /sbin/${INSTALLKERNEL} "$@"; fi
40+
41+if [ "$(basename $2)" = "Image.gz" ]; then
42+# Compressed install
43+ echo "Installing compressed kernel"
44+ base=vmlinuz
45+else
46+# Normal install
47+ echo "Installing normal kernel"
48+ base=vmlinux
49+fi
50+
51+if [ -f $4/$base-$1 ]; then
52+ mv $4/$base-$1 $4/$base-$1.old
53+fi
54+cat $2 > $4/$base-$1
55+
56+# Install system map file
57+if [ -f $4/System.map-$1 ]; then
58+ mv $4/System.map-$1 $4/System.map-$1.old
59+fi
60+cp $3 $4/System.map-$1
arch/riscv/include/asm/module.h+1−0
@@ -8,6 +8,7 @@ · 7 unmodified lines
88
99 #define MODULE_ARCH_VERMAGIC "riscv"
1010
11+struct module;
1112 u64 module_emit_got_entry(struct module *mod, u64 val);
1213 u64 module_emit_plt_entry(struct module *mod, u64 val);
1314
arch/riscv/include/asm/uaccess.h+2−2
@@ -400,13 +400,13 @@ extern unsigned long __must_check __asm_copy_from_user(void *to, · 399 unmodified lines
400400 static inline unsigned long
401401 raw_copy_from_user(void *to, const void __user *from, unsigned long n)
402402 {
403− return __asm_copy_to_user(to, from, n);
403+ return __asm_copy_from_user(to, from, n);
404404 }
405405
406406 static inline unsigned long
407407 raw_copy_to_user(void __user *to, const void *from, unsigned long n)
408408 {
409− return __asm_copy_from_user(to, from, n);
409+ return __asm_copy_to_user(to, from, n);
410410 }
411411
412412 extern long strncpy_from_user(char *dest, const char __user *src, long count);
arch/riscv/include/asm/unistd.h+2−3
@@ -13,10 +13,9 @@ · 12 unmodified lines
1313
1414 /*
1515 * There is explicitly no include guard here because this file is expected to
16− * be included multiple times. See uapi/asm/syscalls.h for more info.
16+ * be included multiple times.
1717 */
1818
19−#define __ARCH_WANT_NEW_STAT
2019 #define __ARCH_WANT_SYS_CLONE
20+
2121 #include <uapi/asm/unistd.h>
22−#include <uapi/asm/syscalls.h>
arch/riscv/include/uapi/asm/unistd.hrenamed from arch/riscv/include/uapi/asm/syscalls.h+19−7
@@ -1,13 +1,25 @@
1−/* SPDX-License-Identifier: GPL-2.0 */
1+/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
22 /*
3− * Copyright (C) 2017-2018 SiFive
3+ * Copyright (C) 2018 David Abdurachmanov <david.abdurachmanov@gmail.com>
4+ *
5+ * This program is free software; you can redistribute it and/or modify
6+ * it under the terms of the GNU General Public License version 2 as
7+ * published by the Free Software Foundation.
8+ *
9+ * This program is distributed in the hope that it will be useful,
10+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
11+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12+ * GNU General Public License for more details.
13+ *
14+ * You should have received a copy of the GNU General Public License
15+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
416 */
517
6−/*
7− * There is explicitly no include guard here because this file is expected to
8− * be included multiple times in order to define the syscall macros via
9− * __SYSCALL.
10− */
18+#ifdef __LP64__
19+#define __ARCH_WANT_NEW_STAT
20+#endif /* __LP64__ */
21+
22+#include <asm-generic/unistd.h>
1123
1224 /*
1325 * Allows the instruction cache to be flushed from userspace. Despite RISC-V
arch/riscv/kernel/cpu.c+6−3
@@ -64,7 +64,7 @@ int riscv_of_processor_hartid(struct device_node *node) · 63 unmodified lines
6464
6565 static void print_isa(struct seq_file *f, const char *orig_isa)
6666 {
67− static const char *ext = "mafdc";
67+ static const char *ext = "mafdcsu";
6868 const char *isa = orig_isa;
6969 const char *e;
7070
@@ -88,11 +88,14 @@ static void print_isa(struct seq_file *f, const char *orig_isa) · 17 unmodified lines
8888 /*
8989 * Check the rest of the ISA string for valid extensions, printing those
9090 * we find. RISC-V ISA strings define an order, so we only print the
91− * extension bits when they're in order.
91+ * extension bits when they're in order. Hide the supervisor (S)
92+ * extension from userspace as it's not accessible from there.
9293 */
9394 for (e = ext; *e != '\0'; ++e) {
9495 if (isa[0] == e[0]) {
95− seq_write(f, isa, 1);
96+ if (isa[0] != 's')
97+ seq_write(f, isa, 1);
98+
9699 isa++;
97100 }
98101 }
arch/riscv/kernel/head.S+10−0
@@ -44,6 +44,16 @@ ENTRY(_start) · 43 unmodified lines
4444 amoadd.w a3, a2, (a3)
4545 bnez a3, .Lsecondary_start
4646
47+ /* Clear BSS for flat non-ELF images */
48+ la a3, __bss_start
49+ la a4, __bss_stop
50+ ble a4, a3, clear_bss_done
51+clear_bss:
52+ REG_S zero, (a3)
53+ add a3, a3, RISCV_SZPTR
54+ blt a3, a4, clear_bss
55+clear_bss_done:
56+
4757 /* Save hart ID and DTB physical address */
4858 mv s0, a0
4959 mv s1, a1
arch/riscv/kernel/vmlinux.lds.S+1−1
@@ -74,7 +74,7 @@ SECTIONS · 73 unmodified lines
7474 *(.sbss*)
7575 }
7676
77− BSS_SECTION(0, 0, 0)
77+ BSS_SECTION(PAGE_SIZE, PAGE_SIZE, 0)
7878
7979 EXCEPTION_TABLE(0x10)
8080 NOTES
drivers/acpi/acpi_platform.c+1−0
@@ -30,6 +30,7 @@ static const struct acpi_device_id forbidden_id_list[] = { · 29 unmodified lines
3030 {"PNP0200", 0}, /* AT DMA Controller */
3131 {"ACPI0009", 0}, /* IOxAPIC */
3232 {"ACPI000A", 0}, /* IOAPIC */
33+ {"SMB0001", 0}, /* ACPI SMBUS virtual device */
3334 {"", 0},
3435 };
3536
drivers/cpufreq/ti-cpufreq.c+21−5
@@ -201,19 +201,28 @@ static const struct of_device_id ti_cpufreq_of_match[] = { · 200 unmodified lines
201201 {},
202202 };
203203
204+static const struct of_device_id *ti_cpufreq_match_node(void)
205+{
206+ struct device_node *np;
207+ const struct of_device_id *match;
208+
209+ np = of_find_node_by_path("/");
210+ match = of_match_node(ti_cpufreq_of_match, np);
211+ of_node_put(np);
212+
213+ return match;
214+}
215+
204216 static int ti_cpufreq_probe(struct platform_device *pdev)
205217 {
206218 u32 version[VERSION_COUNT];
207− struct device_node *np;
208219 const struct of_device_id *match;
209220 struct opp_table *ti_opp_table;
210221 struct ti_cpufreq_data *opp_data;
211222 const char * const reg_names[] = {"vdd", "vbb"};
212223 int ret;
213224
214− np = of_find_node_by_path("/");
215− match = of_match_node(ti_cpufreq_of_match, np);
216− of_node_put(np);
225+ match = dev_get_platdata(&pdev->dev);
217226 if (!match)
218227 return -ENODEV;
219228
@@ -290,7 +299,14 @@ fail_put_node: · 70 unmodified lines
290299
291300 static int ti_cpufreq_init(void)
292301 {
293− platform_device_register_simple("ti-cpufreq", -1, NULL, 0);
302+ const struct of_device_id *match;
303+
304+ /* Check to ensure we are on a compatible platform */
305+ match = ti_cpufreq_match_node();
306+ if (match)
307+ platform_device_register_data(NULL, "ti-cpufreq", -1, match,
308+ sizeof(*match));
309+
294310 return 0;
295311 }
296312 module_init(ti_cpufreq_init);
drivers/dma-buf/udmabuf.c+1−0
@@ -184,6 +184,7 @@ static long udmabuf_create(const struct udmabuf_create_list *head, · 183 unmodified lines
184184 exp_info.ops = &udmabuf_ops;
185185 exp_info.size = ubuf->pagecount << PAGE_SHIFT;
186186 exp_info.priv = ubuf;
187+ exp_info.flags = O_RDWR;
187188
188189 buf = dma_buf_export(&exp_info);
189190 if (IS_ERR(buf)) {
drivers/gnss/serial.c+2−1
@@ -13,6 +13,7 @@ · 12 unmodified lines
1313 #include <linux/of.h>
1414 #include <linux/pm.h>
1515 #include <linux/pm_runtime.h>
16+#include <linux/sched.h>
1617 #include <linux/serdev.h>
1718 #include <linux/slab.h>
1819
@@ -63,7 +64,7 @@ static int gnss_serial_write_raw(struct gnss_device *gdev, · 44 unmodified lines
6364 int ret;
6465
6566 /* write is only buffered synchronously */
66− ret = serdev_device_write(serdev, buf, count, 0);
67+ ret = serdev_device_write(serdev, buf, count, MAX_SCHEDULE_TIMEOUT);
6768 if (ret < 0)
6869 return ret;
6970
drivers/gnss/sirf.c+2−1
@@ -16,6 +16,7 @@ · 15 unmodified lines
1616 #include <linux/pm.h>
1717 #include <linux/pm_runtime.h>
1818 #include <linux/regulator/consumer.h>
19+#include <linux/sched.h>
1920 #include <linux/serdev.h>
2021 #include <linux/slab.h>
2122 #include <linux/wait.h>
@@ -83,7 +84,7 @@ static int sirf_write_raw(struct gnss_device *gdev, const unsigned char *buf, · 61 unmodified lines
8384 int ret;
8485
8586 /* write is only buffered synchronously */
86− ret = serdev_device_write(serdev, buf, count, 0);
87+ ret = serdev_device_write(serdev, buf, count, MAX_SCHEDULE_TIMEOUT);
8788 if (ret < 0)
8889 return ret;
8990
drivers/gpio/gpio-mockup.c+3−3
@@ -35,8 +35,8 @@ · 34 unmodified lines
3535 #define gpio_mockup_err(...) pr_err(GPIO_MOCKUP_NAME ": " __VA_ARGS__)
3636
3737 enum {
38− GPIO_MOCKUP_DIR_OUT = 0,
39− GPIO_MOCKUP_DIR_IN = 1,
38+ GPIO_MOCKUP_DIR_IN = 0,
39+ GPIO_MOCKUP_DIR_OUT = 1,
4040 };
4141
4242 /*
@@ -131,7 +131,7 @@ static int gpio_mockup_get_direction(struct gpio_chip *gc, unsigned int offset) · 88 unmodified lines
131131 {
132132 struct gpio_mockup_chip *chip = gpiochip_get_data(gc);
133133
134− return chip->lines[offset].dir;
134+ return !chip->lines[offset].dir;
135135 }
136136
137137 static int gpio_mockup_to_irq(struct gpio_chip *gc, unsigned int offset)
drivers/gpio/gpio-pxa.c+2−2
@@ -268,8 +268,8 @@ static int pxa_gpio_direction_input(struct gpio_chip *chip, unsigned offset) · 267 unmodified lines
268268
269269 if (pxa_gpio_has_pinctrl()) {
270270 ret = pinctrl_gpio_direction_input(chip->base + offset);
271− if (!ret)
272− return 0;
271+ if (ret)
272+ return ret;
273273 }
274274
275275 spin_lock_irqsave(&gpio_lock, flags);
drivers/gpio/gpiolib.c+3−2
@@ -1295,7 +1295,7 @@ int gpiochip_add_data_with_key(struct gpio_chip *chip, void *data, · 1294 unmodified lines
12951295 gdev->descs = kcalloc(chip->ngpio, sizeof(gdev->descs[0]), GFP_KERNEL);
12961296 if (!gdev->descs) {
12971297 status = -ENOMEM;
1298− goto err_free_gdev;
1298+ goto err_free_ida;
12991299 }
13001300
13011301 if (chip->ngpio == 0) {
@@ -1427,8 +1427,9 @@ err_free_label: · 125 unmodified lines
14271427 kfree_const(gdev->label);
14281428 err_free_descs:
14291429 kfree(gdev->descs);
1430−err_free_gdev:
1430+err_free_ida:
14311431 ida_simple_remove(&gpio_ida, gdev->id);
1432+err_free_gdev:
14321433 /* failures here can mean systems won't boot... */
14331434 pr_err("%s: GPIOs %d..%d (%s) failed to register, %d\n", __func__,
14341435 gdev->base, gdev->base + gdev->ngpio - 1,
drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.c+5−2
@@ -501,8 +501,11 @@ void amdgpu_amdkfd_set_compute_idle(struct kgd_dev *kgd, bool idle) · 500 unmodified lines
501501 {
502502 struct amdgpu_device *adev = (struct amdgpu_device *)kgd;
503503
504− amdgpu_dpm_switch_power_profile(adev,
505− PP_SMC_POWER_PROFILE_COMPUTE, !idle);
504+ if (adev->powerplay.pp_funcs &&
505+ adev->powerplay.pp_funcs->switch_power_profile)
506+ amdgpu_dpm_switch_power_profile(adev,
507+ PP_SMC_POWER_PROFILE_COMPUTE,
508+ !idle);
506509 }
507510
508511 bool amdgpu_amdkfd_is_kfd_vmid(struct amdgpu_device *adev, u32 vmid)
drivers/gpu/drm/amd/amdgpu/amdgpu_display.c+7−0
@@ -626,6 +626,13 @@ int amdgpu_display_modeset_create_props(struct amdgpu_device *adev) · 625 unmodified lines
626626 "dither",
627627 amdgpu_dither_enum_list, sz);
628628
629+ if (amdgpu_device_has_dc_support(adev)) {
630+ adev->mode_info.max_bpc_property =
631+ drm_property_create_range(adev->ddev, 0, "max bpc", 8, 16);
632+ if (!adev->mode_info.max_bpc_property)
633+ return -ENOMEM;
634+ }
635+
629636 return 0;
630637 }
631638
drivers/gpu/drm/amd/amdgpu/amdgpu_mode.h+2−0
@@ -339,6 +339,8 @@ struct amdgpu_mode_info { · 338 unmodified lines
339339 struct drm_property *audio_property;
340340 /* FMT dithering */
341341 struct drm_property *dither_property;
342+ /* maximum number of bits per channel for monitor color */
343+ struct drm_property *max_bpc_property;
342344 /* hardcoded DFP edid from BIOS */
343345 struct edid *bios_hardcoded_edid;
344346 int bios_hardcoded_edid_size;
drivers/gpu/drm/amd/amdgpu/gmc_v6_0.c+1−0
@@ -46,6 +46,7 @@ MODULE_FIRMWARE("amdgpu/tahiti_mc.bin"); · 45 unmodified lines
4646 MODULE_FIRMWARE("amdgpu/pitcairn_mc.bin");
4747 MODULE_FIRMWARE("amdgpu/verde_mc.bin");
4848 MODULE_FIRMWARE("amdgpu/oland_mc.bin");
49+MODULE_FIRMWARE("amdgpu/hainan_mc.bin");
4950 MODULE_FIRMWARE("amdgpu/si58_mc.bin");
5051
5152 #define MC_SEQ_MISC0__MT__MASK 0xf0000000
drivers/gpu/drm/amd/amdgpu/soc15.c+32−7
@@ -65,6 +65,13 @@ · 64 unmodified lines
6565 #define mmMP0_MISC_LIGHT_SLEEP_CTRL 0x01ba
6666 #define mmMP0_MISC_LIGHT_SLEEP_CTRL_BASE_IDX 0
6767
68+/* for Vega20 register name change */
69+#define mmHDP_MEM_POWER_CTRL 0x00d4
70+#define HDP_MEM_POWER_CTRL__IPH_MEM_POWER_CTRL_EN_MASK 0x00000001L
71+#define HDP_MEM_POWER_CTRL__IPH_MEM_POWER_LS_EN_MASK 0x00000002L
72+#define HDP_MEM_POWER_CTRL__RC_MEM_POWER_CTRL_EN_MASK 0x00010000L
73+#define HDP_MEM_POWER_CTRL__RC_MEM_POWER_LS_EN_MASK 0x00020000L
74+#define mmHDP_MEM_POWER_CTRL_BASE_IDX 0
6875 /*
6976 * Indirect registers accessor
7077 */
@@ -870,15 +877,33 @@ static void soc15_update_hdp_light_sleep(struct amdgpu_device *adev, bool enable · 799 unmodified lines
870877 {
871878 uint32_t def, data;
872879
873− def = data = RREG32(SOC15_REG_OFFSET(HDP, 0, mmHDP_MEM_POWER_LS));
880+ if (adev->asic_type == CHIP_VEGA20) {
881+ def = data = RREG32(SOC15_REG_OFFSET(HDP, 0, mmHDP_MEM_POWER_CTRL));
874882
875− if (enable && (adev->cg_flags & AMD_CG_SUPPORT_HDP_LS))
876− data |= HDP_MEM_POWER_LS__LS_ENABLE_MASK;
877− else
878− data &= ~HDP_MEM_POWER_LS__LS_ENABLE_MASK;
883+ if (enable && (adev->cg_flags & AMD_CG_SUPPORT_HDP_LS))
884+ data |= HDP_MEM_POWER_CTRL__IPH_MEM_POWER_CTRL_EN_MASK |
885+ HDP_MEM_POWER_CTRL__IPH_MEM_POWER_LS_EN_MASK |
886+ HDP_MEM_POWER_CTRL__RC_MEM_POWER_CTRL_EN_MASK |
887+ HDP_MEM_POWER_CTRL__RC_MEM_POWER_LS_EN_MASK;
888+ else
889+ data &= ~(HDP_MEM_POWER_CTRL__IPH_MEM_POWER_CTRL_EN_MASK |
890+ HDP_MEM_POWER_CTRL__IPH_MEM_POWER_LS_EN_MASK |
891+ HDP_MEM_POWER_CTRL__RC_MEM_POWER_CTRL_EN_MASK |
892+ HDP_MEM_POWER_CTRL__RC_MEM_POWER_LS_EN_MASK);
879893
880− if (def != data)
881− WREG32(SOC15_REG_OFFSET(HDP, 0, mmHDP_MEM_POWER_LS), data);
894+ if (def != data)
895+ WREG32(SOC15_REG_OFFSET(HDP, 0, mmHDP_MEM_POWER_CTRL), data);
896+ } else {
897+ def = data = RREG32(SOC15_REG_OFFSET(HDP, 0, mmHDP_MEM_POWER_LS));
898+
899+ if (enable && (adev->cg_flags & AMD_CG_SUPPORT_HDP_LS))
900+ data |= HDP_MEM_POWER_LS__LS_ENABLE_MASK;
901+ else
902+ data &= ~HDP_MEM_POWER_LS__LS_ENABLE_MASK;
903+
904+ if (def != data)
905+ WREG32(SOC15_REG_OFFSET(HDP, 0, mmHDP_MEM_POWER_LS), data);
906+ }
882907 }
883908
884909 static void soc15_update_drm_clock_gating(struct amdgpu_device *adev, bool enable)
drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c+16−0
@@ -2358,8 +2358,15 @@ static void update_stream_scaling_settings(const struct drm_display_mode *mode, · 2357 unmodified lines
23582358 static enum dc_color_depth
23592359 convert_color_depth_from_display_info(const struct drm_connector *connector)
23602360 {
2361+ struct dm_connector_state *dm_conn_state =
2362+ to_dm_connector_state(connector->state);
23612363 uint32_t bpc = connector->display_info.bpc;
23622364
2365+ /* TODO: Remove this when there's support for max_bpc in drm */
2366+ if (dm_conn_state && bpc > dm_conn_state->max_bpc)
2367+ /* Round down to nearest even number. */
2368+ bpc = dm_conn_state->max_bpc - (dm_conn_state->max_bpc & 1);
2369+
23632370 switch (bpc) {
23642371 case 0:
23652372 /*
@@ -2943,6 +2950,9 @@ int amdgpu_dm_connector_atomic_set_property(struct drm_connector *connector, · 577 unmodified lines
29432950 } else if (property == adev->mode_info.underscan_property) {
29442951 dm_new_state->underscan_enable = val;
29452952 ret = 0;
2953+ } else if (property == adev->mode_info.max_bpc_property) {
2954+ dm_new_state->max_bpc = val;
2955+ ret = 0;
29462956 }
29472957
29482958 return ret;
@@ -2985,6 +2995,9 @@ int amdgpu_dm_connector_atomic_get_property(struct drm_connector *connector, · 36 unmodified lines
29852995 } else if (property == adev->mode_info.underscan_property) {
29862996 *val = dm_state->underscan_enable;
29872997 ret = 0;
2998+ } else if (property == adev->mode_info.max_bpc_property) {
2999+ *val = dm_state->max_bpc;
3000+ ret = 0;
29883001 }
29893002 return ret;
29903003 }
@@ -3795,6 +3808,9 @@ void amdgpu_dm_connector_init_helper(struct amdgpu_display_manager *dm, · 804 unmodified lines
37953808 drm_object_attach_property(&aconnector->base.base,
37963809 adev->mode_info.underscan_vborder_property,
37973810 0);
3811+ drm_object_attach_property(&aconnector->base.base,
3812+ adev->mode_info.max_bpc_property,
3813+ 0);
37983814
37993815 }
38003816
drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.h+1−0
@@ -204,6 +204,7 @@ struct dm_connector_state { · 203 unmodified lines
204204 enum amdgpu_rmx_type scaling;
205205 uint8_t underscan_vborder;
206206 uint8_t underscan_hborder;
207+ uint8_t max_bpc;
207208 bool underscan_enable;
208209 bool freesync_enable;
209210 bool freesync_capable;
drivers/gpu/drm/amd/powerplay/hwmgr/smu7_hwmgr.c+10−10
@@ -4525,12 +4525,12 @@ static int smu7_get_sclk_od(struct pp_hwmgr *hwmgr) · 4524 unmodified lines
45254525 struct smu7_single_dpm_table *sclk_table = &(data->dpm_table.sclk_table);
45264526 struct smu7_single_dpm_table *golden_sclk_table =
45274527 &(data->golden_dpm_table.sclk_table);
4528− int value;
4528+ int value = sclk_table->dpm_levels[sclk_table->count - 1].value;
4529+ int golden_value = golden_sclk_table->dpm_levels
4530+ [golden_sclk_table->count - 1].value;
45294531
4530− value = (sclk_table->dpm_levels[sclk_table->count - 1].value -
4531− golden_sclk_table->dpm_levels[golden_sclk_table->count - 1].value) *
4532− 100 /
4533− golden_sclk_table->dpm_levels[golden_sclk_table->count - 1].value;
4532+ value -= golden_value;
4533+ value = DIV_ROUND_UP(value * 100, golden_value);
45344534
45354535 return value;
45364536 }
@@ -4567,12 +4567,12 @@ static int smu7_get_mclk_od(struct pp_hwmgr *hwmgr) · 30 unmodified lines
45674567 struct smu7_single_dpm_table *mclk_table = &(data->dpm_table.mclk_table);
45684568 struct smu7_single_dpm_table *golden_mclk_table =
45694569 &(data->golden_dpm_table.mclk_table);
4570− int value;
4570+ int value = mclk_table->dpm_levels[mclk_table->count - 1].value;
4571+ int golden_value = golden_mclk_table->dpm_levels
4572+ [golden_mclk_table->count - 1].value;
45714573
4572− value = (mclk_table->dpm_levels[mclk_table->count - 1].value -
4573− golden_mclk_table->dpm_levels[golden_mclk_table->count - 1].value) *
4574− 100 /
4575− golden_mclk_table->dpm_levels[golden_mclk_table->count - 1].value;
4574+ value -= golden_value;
4575+ value = DIV_ROUND_UP(value * 100, golden_value);
45764576
45774577 return value;
45784578 }
drivers/gpu/drm/amd/powerplay/hwmgr/vega10_hwmgr.c+10−15
@@ -4522,15 +4522,13 @@ static int vega10_get_sclk_od(struct pp_hwmgr *hwmgr) · 4521 unmodified lines
45224522 struct vega10_single_dpm_table *sclk_table = &(data->dpm_table.gfx_table);
45234523 struct vega10_single_dpm_table *golden_sclk_table =
45244524 &(data->golden_dpm_table.gfx_table);
4525− int value;
4526−
4527− value = (sclk_table->dpm_levels[sclk_table->count - 1].value -
4528− golden_sclk_table->dpm_levels
4529− [golden_sclk_table->count - 1].value) *
4530− 100 /
4531− golden_sclk_table->dpm_levels
4525+ int value = sclk_table->dpm_levels[sclk_table->count - 1].value;
4526+ int golden_value = golden_sclk_table->dpm_levels
45324527 [golden_sclk_table->count - 1].value;
45334528
4529+ value -= golden_value;
4530+ value = DIV_ROUND_UP(value * 100, golden_value);
4531+
45344532 return value;
45354533 }
45364534
@@ -4575,16 +4573,13 @@ static int vega10_get_mclk_od(struct pp_hwmgr *hwmgr) · 38 unmodified lines
45754573 struct vega10_single_dpm_table *mclk_table = &(data->dpm_table.mem_table);
45764574 struct vega10_single_dpm_table *golden_mclk_table =
45774575 &(data->golden_dpm_table.mem_table);
4578− int value;
4579−
4580− value = (mclk_table->dpm_levels
4581− [mclk_table->count - 1].value -
4582− golden_mclk_table->dpm_levels
4583− [golden_mclk_table->count - 1].value) *
4584− 100 /
4585− golden_mclk_table->dpm_levels
4576+ int value = mclk_table->dpm_levels[mclk_table->count - 1].value;
4577+ int golden_value = golden_mclk_table->dpm_levels
45864578 [golden_mclk_table->count - 1].value;
45874579
4580+ value -= golden_value;
4581+ value = DIV_ROUND_UP(value * 100, golden_value);
4582+
45884583 return value;
45894584 }
45904585
drivers/gpu/drm/amd/powerplay/hwmgr/vega12_hwmgr.c+10−13
@@ -2243,12 +2243,12 @@ static int vega12_get_sclk_od(struct pp_hwmgr *hwmgr) · 2242 unmodified lines
22432243 struct vega12_single_dpm_table *sclk_table = &(data->dpm_table.gfx_table);
22442244 struct vega12_single_dpm_table *golden_sclk_table =
22452245 &(data->golden_dpm_table.gfx_table);
2246− int value;
2246+ int value = sclk_table->dpm_levels[sclk_table->count - 1].value;
2247+ int golden_value = golden_sclk_table->dpm_levels
2248+ [golden_sclk_table->count - 1].value;
22472249
2248− value = (sclk_table->dpm_levels[sclk_table->count - 1].value -
2249− golden_sclk_table->dpm_levels[golden_sclk_table->count - 1].value) *
2250− 100 /
2251− golden_sclk_table->dpm_levels[golden_sclk_table->count - 1].value;
2250+ value -= golden_value;
2251+ value = DIV_ROUND_UP(value * 100, golden_value);
22522252
22532253 return value;
22542254 }
@@ -2264,16 +2264,13 @@ static int vega12_get_mclk_od(struct pp_hwmgr *hwmgr) · 9 unmodified lines
22642264 struct vega12_single_dpm_table *mclk_table = &(data->dpm_table.mem_table);
22652265 struct vega12_single_dpm_table *golden_mclk_table =
22662266 &(data->golden_dpm_table.mem_table);
2267− int value;
2268−
2269− value = (mclk_table->dpm_levels
2270− [mclk_table->count - 1].value -
2271− golden_mclk_table->dpm_levels
2272− [golden_mclk_table->count - 1].value) *
2273− 100 /
2274− golden_mclk_table->dpm_levels
2267+ int value = mclk_table->dpm_levels[mclk_table->count - 1].value;
2268+ int golden_value = golden_mclk_table->dpm_levels
22752269 [golden_mclk_table->count - 1].value;
22762270
2271+ value -= golden_value;
2272+ value = DIV_ROUND_UP(value * 100, golden_value);
2273+
22772274 return value;
22782275 }
22792276
drivers/gpu/drm/amd/powerplay/hwmgr/vega20_hwmgr.c+21−9
@@ -75,7 +75,17 @@ static void vega20_set_default_registry_data(struct pp_hwmgr *hwmgr) · 74 unmodified lines
7575 data->phy_clk_quad_eqn_b = PPREGKEY_VEGA20QUADRATICEQUATION_DFLT;
7676 data->phy_clk_quad_eqn_c = PPREGKEY_VEGA20QUADRATICEQUATION_DFLT;
7777
78− data->registry_data.disallowed_features = 0x0;
78+ /*
79+ * Disable the following features for now:
80+ * GFXCLK DS
81+ * SOCLK DS
82+ * LCLK DS
83+ * DCEFCLK DS
84+ * FCLK DS
85+ * MP1CLK DS
86+ * MP0CLK DS
87+ */
88+ data->registry_data.disallowed_features = 0xE0041C00;
7989 data->registry_data.od_state_in_dc_support = 0;
8090 data->registry_data.thermal_support = 1;
8191 data->registry_data.skip_baco_hardware = 0;
@@ -1313,12 +1323,13 @@ static int vega20_get_sclk_od( · 1231 unmodified lines
13131323 &(data->dpm_table.gfx_table);
13141324 struct vega20_single_dpm_table *golden_sclk_table =
13151325 &(data->golden_dpm_table.gfx_table);
1316− int value;
1326+ int value = sclk_table->dpm_levels[sclk_table->count - 1].value;
1327+ int golden_value = golden_sclk_table->dpm_levels
1328+ [golden_sclk_table->count - 1].value;
13171329
13181330 /* od percentage */
1319− value = DIV_ROUND_UP((sclk_table->dpm_levels[sclk_table->count - 1].value -
1320− golden_sclk_table->dpm_levels[golden_sclk_table->count - 1].value) * 100,
1321− golden_sclk_table->dpm_levels[golden_sclk_table->count - 1].value);
1331+ value -= golden_value;
1332+ value = DIV_ROUND_UP(value * 100, golden_value);
13221333
13231334 return value;
13241335 }
@@ -1358,12 +1369,13 @@ static int vega20_get_mclk_od( · 33 unmodified lines
13581369 &(data->dpm_table.mem_table);
13591370 struct vega20_single_dpm_table *golden_mclk_table =
13601371 &(data->golden_dpm_table.mem_table);
1361− int value;
1372+ int value = mclk_table->dpm_levels[mclk_table->count - 1].value;
1373+ int golden_value = golden_mclk_table->dpm_levels
1374+ [golden_mclk_table->count - 1].value;
13621375
13631376 /* od percentage */
1364− value = DIV_ROUND_UP((mclk_table->dpm_levels[mclk_table->count - 1].value -
1365− golden_mclk_table->dpm_levels[golden_mclk_table->count - 1].value) * 100,
1366− golden_mclk_table->dpm_levels[golden_mclk_table->count - 1].value);
1377+ value -= golden_value;
1378+ value = DIV_ROUND_UP(value * 100, golden_value);
13671379
13681380 return value;
13691381 }
drivers/gpu/drm/ast/ast_drv.c+21−0
@@ -60,8 +60,29 @@ static const struct pci_device_id pciidlist[] = { · 59 unmodified lines
6060
6161 MODULE_DEVICE_TABLE(pci, pciidlist);
6262
63+static void ast_kick_out_firmware_fb(struct pci_dev *pdev)
64+{
65+ struct apertures_struct *ap;
66+ bool primary = false;
67+
68+ ap = alloc_apertures(1);
69+ if (!ap)
70+ return;
71+
72+ ap->ranges[0].base = pci_resource_start(pdev, 0);
73+ ap->ranges[0].size = pci_resource_len(pdev, 0);
74+
75+#ifdef CONFIG_X86
76+ primary = pdev->resource[PCI_ROM_RESOURCE].flags & IORESOURCE_ROM_SHADOW;
77+#endif
78+ drm_fb_helper_remove_conflicting_framebuffers(ap, "astdrmfb", primary);
79+ kfree(ap);
80+}
81+
6382 static int ast_pci_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
6483 {
84+ ast_kick_out_firmware_fb(pdev);
85+
6586 return drm_get_pci_dev(pdev, ent, &driver);
6687 }
6788
drivers/gpu/drm/ast/ast_mode.c+2−1
@@ -568,6 +568,7 @@ static int ast_crtc_do_set_base(struct drm_crtc *crtc, · 567 unmodified lines
568568 }
569569 ast_bo_unreserve(bo);
570570
571+ ast_set_offset_reg(crtc);
571572 ast_set_start_address_crt1(crtc, (u32)gpu_addr);
572573
573574 return 0;
@@ -1254,7 +1255,7 @@ static int ast_cursor_move(struct drm_crtc *crtc, · 680 unmodified lines
12541255 ast_set_index_reg(ast, AST_IO_CRTC_PORT, 0xc7, ((y >> 8) & 0x07));
12551256
12561257 /* dummy write to fire HWC */
1257− ast_set_index_reg_mask(ast, AST_IO_CRTC_PORT, 0xCB, 0xFF, 0x00);
1258+ ast_show_cursor(crtc);
12581259
12591260 return 0;
12601261 }
drivers/gpu/drm/drm_fb_helper.c+3−0
@@ -219,6 +219,9 @@ int drm_fb_helper_single_add_all_connectors(struct drm_fb_helper *fb_helper) · 218 unmodified lines
219219 mutex_lock(&fb_helper->lock);
220220 drm_connector_list_iter_begin(dev, &conn_iter);
221221 drm_for_each_connector_iter(connector, &conn_iter) {
222+ if (connector->connector_type == DRM_MODE_CONNECTOR_WRITEBACK)
223+ continue;
224+
222225 ret = __drm_fb_helper_add_one_connector(fb_helper, connector);
223226 if (ret)
224227 goto fail;
drivers/gpu/drm/i915/i915_gem_execbuffer.c+6−1
@@ -1268,7 +1268,7 @@ relocate_entry(struct i915_vma *vma, · 1267 unmodified lines
12681268 else if (gen >= 4)
12691269 len = 4;
12701270 else
1271− len = 3;
1271+ len = 6;
12721272
12731273 batch = reloc_gpu(eb, vma, len);
12741274 if (IS_ERR(batch))
@@ -1309,6 +1309,11 @@ relocate_entry(struct i915_vma *vma, · 34 unmodified lines
13091309 *batch++ = MI_STORE_DWORD_IMM | MI_MEM_VIRTUAL;
13101310 *batch++ = addr;
13111311 *batch++ = target_offset;
1312+
1313+ /* And again for good measure (blb/pnv) */
1314+ *batch++ = MI_STORE_DWORD_IMM | MI_MEM_VIRTUAL;
1315+ *batch++ = addr;
1316+ *batch++ = target_offset;
13121317 }
13131318
13141319 goto out;
drivers/gpu/drm/i915/i915_gem_gtt.c+5−0
@@ -3413,6 +3413,11 @@ static int gen8_gmch_probe(struct i915_ggtt *ggtt) · 3412 unmodified lines
34133413 ggtt->vm.insert_page = bxt_vtd_ggtt_insert_page__BKL;
34143414 if (ggtt->vm.clear_range != nop_clear_range)
34153415 ggtt->vm.clear_range = bxt_vtd_ggtt_clear_range__BKL;
3416+
3417+ /* Prevent recursively calling stop_machine() and deadlocks. */
3418+ dev_info(dev_priv->drm.dev,
3419+ "Disabling error capture for VT-d workaround\n");
3420+ i915_disable_error_state(dev_priv, -ENODEV);
34163421 }
34173422
34183423 ggtt->invalidate = gen6_ggtt_invalidate;
drivers/gpu/drm/i915/i915_gpu_error.c+14−1
@@ -648,6 +648,9 @@ int i915_error_state_to_str(struct drm_i915_error_state_buf *m, · 647 unmodified lines
648648 return 0;
649649 }
650650
651+ if (IS_ERR(error))
652+ return PTR_ERR(error);
653+
651654 if (*error->error_msg)
652655 err_printf(m, "%s\n", error->error_msg);
653656 err_printf(m, "Kernel: " UTS_RELEASE "\n");
@@ -1859,6 +1862,7 @@ void i915_capture_error_state(struct drm_i915_private *i915, · 1205 unmodified lines
18591862 error = i915_capture_gpu_state(i915);
18601863 if (!error) {
18611864 DRM_DEBUG_DRIVER("out of memory, not capturing error state\n");
1865+ i915_disable_error_state(i915, -ENOMEM);
18621866 return;
18631867 }
18641868
@@ -1914,5 +1918,14 @@ void i915_reset_error_state(struct drm_i915_private *i915) · 49 unmodified lines
19141918 i915->gpu_error.first_error = NULL;
19151919 spin_unlock_irq(&i915->gpu_error.lock);
19161920
1917− i915_gpu_state_put(error);
1921+ if (!IS_ERR(error))
1922+ i915_gpu_state_put(error);
1923+}
1924+
1925+void i915_disable_error_state(struct drm_i915_private *i915, int err)
1926+{
1927+ spin_lock_irq(&i915->gpu_error.lock);
1928+ if (!i915->gpu_error.first_error)
1929+ i915->gpu_error.first_error = ERR_PTR(err);
1930+ spin_unlock_irq(&i915->gpu_error.lock);
19181931 }
drivers/gpu/drm/i915/i915_gpu_error.h+7−1
@@ -343,6 +343,7 @@ static inline void i915_gpu_state_put(struct i915_gpu_state *gpu) · 342 unmodified lines
343343
344344 struct i915_gpu_state *i915_first_error_state(struct drm_i915_private *i915);
345345 void i915_reset_error_state(struct drm_i915_private *i915);
346+void i915_disable_error_state(struct drm_i915_private *i915, int err);
346347
347348 #else
348349
@@ -355,13 +356,18 @@ static inline void i915_capture_error_state(struct drm_i915_private *dev_priv, · 6 unmodified lines
355356 static inline struct i915_gpu_state *
356357 i915_first_error_state(struct drm_i915_private *i915)
357358 {
358− return NULL;
359+ return ERR_PTR(-ENODEV);
359360 }
360361
361362 static inline void i915_reset_error_state(struct drm_i915_private *i915)
362363 {
363364 }
364365
366+static inline void i915_disable_error_state(struct drm_i915_private *i915,
367+ int err)
368+{
369+}
370+
365371 #endif /* IS_ENABLED(CONFIG_DRM_I915_CAPTURE_ERROR) */
366372
367373 #endif /* _I915_GPU_ERROR_H_ */
drivers/gpu/drm/i915/intel_display.c+39−0
@@ -2890,6 +2890,7 @@ intel_find_initial_plane_obj(struct intel_crtc *intel_crtc, · 2889 unmodified lines
28902890 return;
28912891
28922892 valid_fb:
2893+ intel_state->base.rotation = plane_config->rotation;
28932894 intel_fill_fb_ggtt_view(&intel_state->view, fb,
28942895 intel_state->base.rotation);
28952896 intel_state->color_plane[0].stride =
@@ -7882,8 +7883,15 @@ i9xx_get_initial_plane_config(struct intel_crtc *crtc, · 4986 unmodified lines
78827883 plane_config->tiling = I915_TILING_X;
78837884 fb->modifier = I915_FORMAT_MOD_X_TILED;
78847885 }
7886+
7887+ if (val & DISPPLANE_ROTATE_180)
7888+ plane_config->rotation = DRM_MODE_ROTATE_180;
78857889 }
78867890
7891+ if (IS_CHERRYVIEW(dev_priv) && pipe == PIPE_B &&
7892+ val & DISPPLANE_MIRROR)
7893+ plane_config->rotation |= DRM_MODE_REFLECT_X;
7894+
78877895 pixel_format = val & DISPPLANE_PIXFORMAT_MASK;
78887896 fourcc = i9xx_format_to_fourcc(pixel_format);
78897897 fb->format = drm_format_info(fourcc);
@@ -8952,6 +8960,29 @@ skylake_get_initial_plane_config(struct intel_crtc *crtc, · 1062 unmodified lines
89528960 goto error;
89538961 }
89548962
8963+ /*
8964+ * DRM_MODE_ROTATE_ is counter clockwise to stay compatible with Xrandr
8965+ * while i915 HW rotation is clockwise, thats why this swapping.
8966+ */
8967+ switch (val & PLANE_CTL_ROTATE_MASK) {
8968+ case PLANE_CTL_ROTATE_0:
8969+ plane_config->rotation = DRM_MODE_ROTATE_0;
8970+ break;
8971+ case PLANE_CTL_ROTATE_90:
8972+ plane_config->rotation = DRM_MODE_ROTATE_270;
8973+ break;
8974+ case PLANE_CTL_ROTATE_180:
8975+ plane_config->rotation = DRM_MODE_ROTATE_180;
8976+ break;
8977+ case PLANE_CTL_ROTATE_270:
8978+ plane_config->rotation = DRM_MODE_ROTATE_90;
8979+ break;
8980+ }
8981+
8982+ if (INTEL_GEN(dev_priv) >= 10 &&
8983+ val & PLANE_CTL_FLIP_HORIZONTAL)
8984+ plane_config->rotation |= DRM_MODE_REFLECT_X;
8985+
89558986 base = I915_READ(PLANE_SURF(pipe, plane_id)) & 0xfffff000;
89568987 plane_config->base = base;
89578988
@@ -15267,6 +15298,14 @@ retry: · 6309 unmodified lines
1526715298 ret = drm_atomic_add_affected_planes(state, crtc);
1526815299 if (ret)
1526915300 goto out;
15301+
15302+ /*
15303+ * FIXME hack to force a LUT update to avoid the
15304+ * plane update forcing the pipe gamma on without
15305+ * having a proper LUT loaded. Remove once we
15306+ * have readout for pipe gamma enable.
15307+ */
15308+ crtc_state->color_mgmt_changed = true;
1527015309 }
1527115310 }
1527215311
drivers/gpu/drm/i915/intel_drv.h+1−0
@@ -547,6 +547,7 @@ struct intel_initial_plane_config { · 546 unmodified lines
547547 unsigned int tiling;
548548 int size;
549549 u32 base;
550+ u8 rotation;
550551 };
551552
552553 #define SKL_MIN_SRC_W 8
drivers/gpu/drm/i915/intel_pm.c+40−1
@@ -2493,6 +2493,9 @@ static uint32_t ilk_compute_pri_wm(const struct intel_crtc_state *cstate, · 2492 unmodified lines
24932493 uint32_t method1, method2;
24942494 int cpp;
24952495
2496+ if (mem_value == 0)
2497+ return U32_MAX;
2498+
24962499 if (!intel_wm_plane_visible(cstate, pstate))
24972500 return 0;
24982501
@@ -2522,6 +2525,9 @@ static uint32_t ilk_compute_spr_wm(const struct intel_crtc_state *cstate, · 23 unmodified lines
25222525 uint32_t method1, method2;
25232526 int cpp;
25242527
2528+ if (mem_value == 0)
2529+ return U32_MAX;
2530+
25252531 if (!intel_wm_plane_visible(cstate, pstate))
25262532 return 0;
25272533
@@ -2545,6 +2551,9 @@ static uint32_t ilk_compute_cur_wm(const struct intel_crtc_state *cstate, · 17 unmodified lines
25452551 {
25462552 int cpp;
25472553
2554+ if (mem_value == 0)
2555+ return U32_MAX;
2556+
25482557 if (!intel_wm_plane_visible(cstate, pstate))
25492558 return 0;
25502559
@@ -3008,6 +3017,34 @@ static void snb_wm_latency_quirk(struct drm_i915_private *dev_priv) · 457 unmodified lines
30083017 intel_print_wm_latency(dev_priv, "Cursor", dev_priv->wm.cur_latency);
30093018 }
30103019
3020+static void snb_wm_lp3_irq_quirk(struct drm_i915_private *dev_priv)
3021+{
3022+ /*
3023+ * On some SNB machines (Thinkpad X220 Tablet at least)
3024+ * LP3 usage can cause vblank interrupts to be lost.
3025+ * The DEIIR bit will go high but it looks like the CPU
3026+ * never gets interrupted.
3027+ *
3028+ * It's not clear whether other interrupt source could
3029+ * be affected or if this is somehow limited to vblank
3030+ * interrupts only. To play it safe we disable LP3
3031+ * watermarks entirely.
3032+ */
3033+ if (dev_priv->wm.pri_latency[3] == 0 &&
3034+ dev_priv->wm.spr_latency[3] == 0 &&
3035+ dev_priv->wm.cur_latency[3] == 0)
3036+ return;
3037+
3038+ dev_priv->wm.pri_latency[3] = 0;
3039+ dev_priv->wm.spr_latency[3] = 0;
3040+ dev_priv->wm.cur_latency[3] = 0;
3041+
3042+ DRM_DEBUG_KMS("LP3 watermarks disabled due to potential for lost interrupts\n");
3043+ intel_print_wm_latency(dev_priv, "Primary", dev_priv->wm.pri_latency);
3044+ intel_print_wm_latency(dev_priv, "Sprite", dev_priv->wm.spr_latency);
3045+ intel_print_wm_latency(dev_priv, "Cursor", dev_priv->wm.cur_latency);
3046+}
3047+
30113048 static void ilk_setup_wm_latency(struct drm_i915_private *dev_priv)
30123049 {
30133050 intel_read_wm_latency(dev_priv, dev_priv->wm.pri_latency);
@@ -3024,8 +3061,10 @@ static void ilk_setup_wm_latency(struct drm_i915_private *dev_priv) · 10 unmodified lines
30243061 intel_print_wm_latency(dev_priv, "Sprite", dev_priv->wm.spr_latency);
30253062 intel_print_wm_latency(dev_priv, "Cursor", dev_priv->wm.cur_latency);
30263063
3027− if (IS_GEN6(dev_priv))
3064+ if (IS_GEN6(dev_priv)) {
30283065 snb_wm_latency_quirk(dev_priv);
3066+ snb_wm_lp3_irq_quirk(dev_priv);
3067+ }
30293068 }
30303069
30313070 static void skl_setup_wm_latency(struct drm_i915_private *dev_priv)
drivers/gpu/drm/vc4/vc4_kms.c+6−0
@@ -214,6 +214,12 @@ static int vc4_atomic_commit(struct drm_device *dev, · 213 unmodified lines
214214 return 0;
215215 }
216216
217+ /* We know for sure we don't want an async update here. Set
218+ * state->legacy_cursor_update to false to prevent
219+ * drm_atomic_helper_setup_commit() from auto-completing
220+ * commit->flip_done.
221+ */
222+ state->legacy_cursor_update = false;
217223 ret = drm_atomic_helper_setup_commit(state, nonblock);
218224 if (ret)
219225 return ret;
drivers/gpu/drm/vc4/vc4_plane.c+13−2
@@ -807,7 +807,7 @@ void vc4_plane_async_set_fb(struct drm_plane *plane, struct drm_framebuffer *fb) · 806 unmodified lines
807807 static void vc4_plane_atomic_async_update(struct drm_plane *plane,
808808 struct drm_plane_state *state)
809809 {
810− struct vc4_plane_state *vc4_state = to_vc4_plane_state(plane->state);
810+ struct vc4_plane_state *vc4_state, *new_vc4_state;
811811
812812 if (plane->state->fb != state->fb) {
813813 vc4_plane_async_set_fb(plane, state->fb);
@@ -828,7 +828,18 @@ static void vc4_plane_atomic_async_update(struct drm_plane *plane, · 14 unmodified lines
828828 plane->state->src_y = state->src_y;
829829
830830 /* Update the display list based on the new crtc_x/y. */
831− vc4_plane_atomic_check(plane, plane->state);
831+ vc4_plane_atomic_check(plane, state);
832+
833+ new_vc4_state = to_vc4_plane_state(state);
834+ vc4_state = to_vc4_plane_state(plane->state);
835+
836+ /* Update the current vc4_state pos0, pos2 and ptr0 dlist entries. */
837+ vc4_state->dlist[vc4_state->pos0_offset] =
838+ new_vc4_state->dlist[vc4_state->pos0_offset];
839+ vc4_state->dlist[vc4_state->pos2_offset] =
840+ new_vc4_state->dlist[vc4_state->pos2_offset];
841+ vc4_state->dlist[vc4_state->ptr0_offset] =
842+ new_vc4_state->dlist[vc4_state->ptr0_offset];
832843
833844 /* Note that we can't just call vc4_plane_write_dlist()
834845 * because that would smash the context data that the HVS is
drivers/hv/hv_kvp.c+22−4
@@ -353,6 +353,9 @@ static void process_ib_ipinfo(void *in_msg, void *out_msg, int op) · 352 unmodified lines
353353
354354 out->body.kvp_ip_val.dhcp_enabled = in->kvp_ip_val.dhcp_enabled;
355355
356+ /* fallthrough */
357+
358+ case KVP_OP_GET_IP_INFO:
356359 utf16s_to_utf8s((wchar_t *)in->kvp_ip_val.adapter_id,
357360 MAX_ADAPTER_ID_SIZE,
358361 UTF16_LITTLE_ENDIAN,
@@ -405,7 +408,11 @@ kvp_send_key(struct work_struct *dummy) · 46 unmodified lines
405408 process_ib_ipinfo(in_msg, message, KVP_OP_SET_IP_INFO);
406409 break;
407410 case KVP_OP_GET_IP_INFO:
408− /* We only need to pass on message->kvp_hdr.operation. */
411+ /*
412+ * We only need to pass on the info of operation, adapter_id
413+ * and addr_family to the userland kvp daemon.
414+ */
415+ process_ib_ipinfo(in_msg, message, KVP_OP_GET_IP_INFO);
409416 break;
410417 case KVP_OP_SET:
411418 switch (in_msg->body.kvp_set.data.value_type) {
@@ -446,9 +453,9 @@ kvp_send_key(struct work_struct *dummy) · 34 unmodified lines
446453
447454 }
448455
449− break;
450−
451− case KVP_OP_GET:
456+ /*
457+ * The key is always a string - utf16 encoding.
458+ */
452459 message->body.kvp_set.data.key_size =
453460 utf16s_to_utf8s(
454461 (wchar_t *)in_msg->body.kvp_set.data.key,
@@ -456,6 +463,17 @@ kvp_send_key(struct work_struct *dummy) · 1 unmodified line
456463 UTF16_LITTLE_ENDIAN,
457464 message->body.kvp_set.data.key,
458465 HV_KVP_EXCHANGE_MAX_KEY_SIZE - 1) + 1;
466+
467+ break;
468+
469+ case KVP_OP_GET:
470+ message->body.kvp_get.data.key_size =
471+ utf16s_to_utf8s(
472+ (wchar_t *)in_msg->body.kvp_get.data.key,
473+ in_msg->body.kvp_get.data.key_size,
474+ UTF16_LITTLE_ENDIAN,
475+ message->body.kvp_get.data.key,
476+ HV_KVP_EXCHANGE_MAX_KEY_SIZE - 1) + 1;
459477 break;
460478
461479 case KVP_OP_DELETE:
drivers/iommu/amd_iommu_init.c+2−1
@@ -797,7 +797,8 @@ static int iommu_init_ga_log(struct amd_iommu *iommu) · 796 unmodified lines
797797 entry = iommu_virt_to_phys(iommu->ga_log) | GA_LOG_SIZE_512;
798798 memcpy_toio(iommu->mmio_base + MMIO_GA_LOG_BASE_OFFSET,
799799 &entry, sizeof(entry));
800− entry = (iommu_virt_to_phys(iommu->ga_log) & 0xFFFFFFFFFFFFFULL) & ~7ULL;
800+ entry = (iommu_virt_to_phys(iommu->ga_log_tail) &
801+ (BIT_ULL(52)-1)) & ~7ULL;
801802 memcpy_toio(iommu->mmio_base + MMIO_GA_LOG_TAIL_OFFSET,
802803 &entry, sizeof(entry));
803804 writel(0x00, iommu->mmio_base + MMIO_GA_HEAD_OFFSET);
drivers/iommu/intel-iommu.c+1−1
@@ -3075,7 +3075,7 @@ static int copy_context_table(struct intel_iommu *iommu, · 3074 unmodified lines
30753075 }
30763076
30773077 if (old_ce)
3078− iounmap(old_ce);
3078+ memunmap(old_ce);
30793079
30803080 ret = 0;
30813081 if (devfn < 0x80)
drivers/iommu/intel-svm.c+1−1
@@ -595,7 +595,7 @@ static irqreturn_t prq_event_thread(int irq, void *d) · 594 unmodified lines
595595 pr_err("%s: Page request without PASID: %08llx %08llx\n",
596596 iommu->name, ((unsigned long long *)req)[0],
597597 ((unsigned long long *)req)[1]);
598− goto bad_req;
598+ goto no_pasid;
599599 }
600600
601601 if (!svm || svm->pasid != req->pasid) {
drivers/iommu/ipmmu-vmsa.c+3−0
@@ -498,6 +498,9 @@ static int ipmmu_domain_init_context(struct ipmmu_vmsa_domain *domain) · 497 unmodified lines
498498
499499 static void ipmmu_domain_destroy_context(struct ipmmu_vmsa_domain *domain)
500500 {
501+ if (!domain->mmu)
502+ return;
503+
501504 /*
502505 * Disable the context. Flush the TLB as required when modifying the
503506 * context registers.
drivers/media/cec/cec-adap.c+38−11
@@ -807,7 +807,7 @@ int cec_transmit_msg_fh(struct cec_adapter *adap, struct cec_msg *msg, · 806 unmodified lines
807807 }
808808
809809 if (adap->transmit_queue_sz >= CEC_MAX_MSG_TX_QUEUE_SZ) {
810− dprintk(1, "%s: transmit queue full\n", __func__);
810+ dprintk(2, "%s: transmit queue full\n", __func__);
811811 return -EBUSY;
812812 }
813813
@@ -1180,6 +1180,8 @@ static int cec_config_log_addr(struct cec_adapter *adap, · 366 unmodified lines
11801180 {
11811181 struct cec_log_addrs *las = &adap->log_addrs;
11821182 struct cec_msg msg = { };
1183+ const unsigned int max_retries = 2;
1184+ unsigned int i;
11831185 int err;
11841186
11851187 if (cec_has_log_addr(adap, log_addr))
@@ -1188,19 +1190,44 @@ static int cec_config_log_addr(struct cec_adapter *adap, · 2 unmodified lines
11881190 /* Send poll message */
11891191 msg.len = 1;
11901192 msg.msg[0] = (log_addr << 4) | log_addr;
1191− err = cec_transmit_msg_fh(adap, &msg, NULL, true);
11921193
1193− /*
1194− * While trying to poll the physical address was reset
1195− * and the adapter was unconfigured, so bail out.
1196− */
1197− if (!adap->is_configuring)
1198− return -EINTR;
1194+ for (i = 0; i < max_retries; i++) {
1195+ err = cec_transmit_msg_fh(adap, &msg, NULL, true);
11991196
1200− if (err)
1201− return err;
1197+ /*
1198+ * While trying to poll the physical address was reset
1199+ * and the adapter was unconfigured, so bail out.
1200+ */
1201+ if (!adap->is_configuring)
1202+ return -EINTR;
1203+
1204+ if (err)
1205+ return err;
12021206
1203− if (msg.tx_status & CEC_TX_STATUS_OK)
1207+ /*
1208+ * The message was aborted due to a disconnect or
1209+ * unconfigure, just bail out.
1210+ */
1211+ if (msg.tx_status & CEC_TX_STATUS_ABORTED)
1212+ return -EINTR;
1213+ if (msg.tx_status & CEC_TX_STATUS_OK)
1214+ return 0;
1215+ if (msg.tx_status & CEC_TX_STATUS_NACK)
1216+ break;
1217+ /*
1218+ * Retry up to max_retries times if the message was neither
1219+ * OKed or NACKed. This can happen due to e.g. a Lost
1220+ * Arbitration condition.
1221+ */
1222+ }
1223+
1224+ /*
1225+ * If we are unable to get an OK or a NACK after max_retries attempts
1226+ * (and note that each attempt already consists of four polls), then
1227+ * then we assume that something is really weird and that it is not a
1228+ * good idea to try and claim this logical address.
1229+ */
1230+ if (i == max_retries)
12041231 return 0;
12051232
12061233 /*
drivers/media/i2c/tc358743.c+0−1
@@ -1918,7 +1918,6 @@ static int tc358743_probe_of(struct tc358743_state *state) · 1917 unmodified lines
19181918 ret = v4l2_fwnode_endpoint_alloc_parse(of_fwnode_handle(ep), &endpoint);
19191919 if (ret) {
19201920 dev_err(dev, "failed to parse endpoint\n");
1921− ret = ret;
19221921 goto put_node;
19231922 }
19241923
drivers/media/pci/intel/ipu3/ipu3-cio2.c+2−4
@@ -1844,14 +1844,12 @@ fail_mutex_destroy: · 1843 unmodified lines
18441844 static void cio2_pci_remove(struct pci_dev *pci_dev)
18451845 {
18461846 struct cio2_device *cio2 = pci_get_drvdata(pci_dev);
1847− unsigned int i;
18481847
1848+ media_device_unregister(&cio2->media_dev);
18491849 cio2_notifier_exit(cio2);
1850+ cio2_queues_exit(cio2);
18501851 cio2_fbpt_exit_dummy(cio2);
1851− for (i = 0; i < CIO2_QUEUES; i++)
1852− cio2_queue_exit(cio2, &cio2->queue[i]);
18531852 v4l2_device_unregister(&cio2->v4l2_dev);
1854− media_device_unregister(&cio2->media_dev);
18551853 media_device_cleanup(&cio2->media_dev);
18561854 mutex_destroy(&cio2->lock);
18571855 }
drivers/media/platform/omap3isp/isp.c+2−1
@@ -1587,6 +1587,8 @@ static void isp_pm_complete(struct device *dev) · 1586 unmodified lines
15871587
15881588 static void isp_unregister_entities(struct isp_device *isp)
15891589 {
1590+ media_device_unregister(&isp->media_dev);
1591+
15901592 omap3isp_csi2_unregister_entities(&isp->isp_csi2a);
15911593 omap3isp_ccp2_unregister_entities(&isp->isp_ccp2);
15921594 omap3isp_ccdc_unregister_entities(&isp->isp_ccdc);
@@ -1597,7 +1599,6 @@ static void isp_unregister_entities(struct isp_device *isp) · 4 unmodified lines
15971599 omap3isp_stat_unregister_entities(&isp->isp_hist);
15981600
15991601 v4l2_device_unregister(&isp->v4l2_dev);
1600− media_device_unregister(&isp->media_dev);
16011602 media_device_cleanup(&isp->media_dev);
16021603 }
16031604
drivers/media/platform/vicodec/vicodec-core.c+1−1
@@ -42,7 +42,7 @@ MODULE_PARM_DESC(debug, " activates debug info"); · 41 unmodified lines
4242 #define MAX_WIDTH 4096U
4343 #define MIN_WIDTH 640U
4444 #define MAX_HEIGHT 2160U
45−#define MIN_HEIGHT 480U
45+#define MIN_HEIGHT 360U
4646
4747 #define dprintk(dev, fmt, arg...) \
4848 v4l2_dbg(1, debug, &dev->v4l2_dev, "%s: " fmt, __func__, ## arg)
drivers/media/platform/vim2m.c+1−1
@@ -1009,7 +1009,7 @@ static const struct v4l2_m2m_ops m2m_ops = { · 1008 unmodified lines
10091009
10101010 static const struct media_device_ops m2m_media_ops = {
10111011 .req_validate = vb2_request_validate,
1012− .req_queue = vb2_m2m_request_queue,
1012+ .req_queue = v4l2_m2m_request_queue,
10131013 };
10141014
10151015 static int vim2m_probe(struct platform_device *pdev)
drivers/media/v4l2-core/v4l2-ctrls.c+5−0
@@ -1664,6 +1664,11 @@ static int std_validate(const struct v4l2_ctrl *ctrl, u32 idx, · 1663 unmodified lines
16641664 p_mpeg2_slice_params->forward_ref_index >= VIDEO_MAX_FRAME)
16651665 return -EINVAL;
16661666
1667+ if (p_mpeg2_slice_params->pad ||
1668+ p_mpeg2_slice_params->picture.pad ||
1669+ p_mpeg2_slice_params->sequence.pad)
1670+ return -EINVAL;
1671+
16671672 return 0;
16681673
16691674 case V4L2_CTRL_TYPE_MPEG2_QUANTIZATION:
drivers/media/v4l2-core/v4l2-event.c+24−19
@@ -193,6 +193,22 @@ int v4l2_event_pending(struct v4l2_fh *fh) · 192 unmodified lines
193193 }
194194 EXPORT_SYMBOL_GPL(v4l2_event_pending);
195195
196+static void __v4l2_event_unsubscribe(struct v4l2_subscribed_event *sev)
197+{
198+ struct v4l2_fh *fh = sev->fh;
199+ unsigned int i;
200+
201+ lockdep_assert_held(&fh->subscribe_lock);
202+ assert_spin_locked(&fh->vdev->fh_lock);
203+
204+ /* Remove any pending events for this subscription */
205+ for (i = 0; i < sev->in_use; i++) {
206+ list_del(&sev->events[sev_pos(sev, i)].list);
207+ fh->navailable--;
208+ }
209+ list_del(&sev->list);
210+}
211+
196212 int v4l2_event_subscribe(struct v4l2_fh *fh,
197213 const struct v4l2_event_subscription *sub, unsigned elems,
198214 const struct v4l2_subscribed_event_ops *ops)
@@ -224,27 +240,23 @@ int v4l2_event_subscribe(struct v4l2_fh *fh, · 25 unmodified lines
224240
225241 spin_lock_irqsave(&fh->vdev->fh_lock, flags);
226242 found_ev = v4l2_event_subscribed(fh, sub->type, sub->id);
243+ if (!found_ev)
244+ list_add(&sev->list, &fh->subscribed);
227245 spin_unlock_irqrestore(&fh->vdev->fh_lock, flags);
228246
229247 if (found_ev) {
230248 /* Already listening */
231249 kvfree(sev);
232− goto out_unlock;
233− }
234−
235− if (sev->ops && sev->ops->add) {
250+ } else if (sev->ops && sev->ops->add) {
236251 ret = sev->ops->add(sev, elems);
237252 if (ret) {
253+ spin_lock_irqsave(&fh->vdev->fh_lock, flags);
254+ __v4l2_event_unsubscribe(sev);
255+ spin_unlock_irqrestore(&fh->vdev->fh_lock, flags);
238256 kvfree(sev);
239− goto out_unlock;
240257 }
241258 }
242259
243− spin_lock_irqsave(&fh->vdev->fh_lock, flags);
244− list_add(&sev->list, &fh->subscribed);
245− spin_unlock_irqrestore(&fh->vdev->fh_lock, flags);
246−
247−out_unlock:
248260 mutex_unlock(&fh->subscribe_lock);
249261
250262 return ret;
@@ -279,7 +291,6 @@ int v4l2_event_unsubscribe(struct v4l2_fh *fh, · 28 unmodified lines
279291 {
280292 struct v4l2_subscribed_event *sev;
281293 unsigned long flags;
282− int i;
283294
284295 if (sub->type == V4L2_EVENT_ALL) {
285296 v4l2_event_unsubscribe_all(fh);
@@ -291,14 +302,8 @@ int v4l2_event_unsubscribe(struct v4l2_fh *fh, · 5 unmodified lines
291302 spin_lock_irqsave(&fh->vdev->fh_lock, flags);
292303
293304 sev = v4l2_event_subscribed(fh, sub->type, sub->id);
294− if (sev != NULL) {
295− /* Remove any pending events for this subscription */
296− for (i = 0; i < sev->in_use; i++) {
297− list_del(&sev->events[sev_pos(sev, i)].list);
298− fh->navailable--;
299− }
300− list_del(&sev->list);
301− }
305+ if (sev != NULL)
306+ __v4l2_event_unsubscribe(sev);
302307
303308 spin_unlock_irqrestore(&fh->vdev->fh_lock, flags);
304309
drivers/media/v4l2-core/v4l2-mem2mem.c+2−2
@@ -953,7 +953,7 @@ void v4l2_m2m_buf_queue(struct v4l2_m2m_ctx *m2m_ctx, · 952 unmodified lines
953953 }
954954 EXPORT_SYMBOL_GPL(v4l2_m2m_buf_queue);
955955
956−void vb2_m2m_request_queue(struct media_request *req)
956+void v4l2_m2m_request_queue(struct media_request *req)
957957 {
958958 struct media_request_object *obj, *obj_safe;
959959 struct v4l2_m2m_ctx *m2m_ctx = NULL;
@@ -997,7 +997,7 @@ void vb2_m2m_request_queue(struct media_request *req) · 37 unmodified lines
997997 if (m2m_ctx)
998998 v4l2_m2m_try_schedule(m2m_ctx);
999999 }
1000−EXPORT_SYMBOL_GPL(vb2_m2m_request_queue);
1000+EXPORT_SYMBOL_GPL(v4l2_m2m_request_queue);
10011001
10021002 /* Videobuf2 ioctl helpers */
10031003
drivers/misc/atmel-ssc.c+1−1
@@ -132,7 +132,7 @@ static const struct of_device_id atmel_ssc_dt_ids[] = { · 131 unmodified lines
132132 MODULE_DEVICE_TABLE(of, atmel_ssc_dt_ids);
133133 #endif
134134
135−static inline const struct atmel_ssc_platform_data * __init
135+static inline const struct atmel_ssc_platform_data *
136136 atmel_ssc_get_driver_data(struct platform_device *pdev)
137137 {
138138 if (pdev->dev.of_node) {
drivers/misc/sgi-gru/grukdump.c+4−0
@@ -27,6 +27,9 @@ · 26 unmodified lines
2727 #include <linux/delay.h>
2828 #include <linux/bitops.h>
2929 #include <asm/uv/uv_hub.h>
30+
31+#include <linux/nospec.h>
32+
3033 #include "gru.h"
3134 #include "grutables.h"
3235 #include "gruhandles.h"
@@ -196,6 +199,7 @@ int gru_dump_chiplet_request(unsigned long arg) · 163 unmodified lines
196199 /* Currently, only dump by gid is implemented */
197200 if (req.gid >= gru_max_gids)
198201 return -EINVAL;
202+ req.gid = array_index_nospec(req.gid, gru_max_gids);
199203
200204 gru = GID_TO_GRU(req.gid);
201205 ubuf = req.buf;
drivers/mmc/host/sdhci-pci-core.c+83−3
@@ -12,6 +12,7 @@ · 11 unmodified lines
1212 * - JMicron (hardware and technical support)
1313 */
1414
15+#include <linux/bitfield.h>
1516 #include <linux/string.h>
1617 #include <linux/delay.h>
1718 #include <linux/highmem.h>
@@ -462,6 +463,9 @@ struct intel_host { · 444 unmodified lines
462463 u32 dsm_fns;
463464 int drv_strength;
464465 bool d3_retune;
466+ bool rpm_retune_ok;
467+ u32 glk_rx_ctrl1;
468+ u32 glk_tun_val;
465469 };
466470
467471 static const guid_t intel_dsm_guid =
@@ -791,6 +795,77 @@ cleanup: · 323 unmodified lines
791795 return ret;
792796 }
793797
798+#ifdef CONFIG_PM
799+#define GLK_RX_CTRL1 0x834
800+#define GLK_TUN_VAL 0x840
801+#define GLK_PATH_PLL GENMASK(13, 8)
802+#define GLK_DLY GENMASK(6, 0)
803+/* Workaround firmware failing to restore the tuning value */
804+static void glk_rpm_retune_wa(struct sdhci_pci_chip *chip, bool susp)
805+{
806+ struct sdhci_pci_slot *slot = chip->slots[0];
807+ struct intel_host *intel_host = sdhci_pci_priv(slot);
808+ struct sdhci_host *host = slot->host;
809+ u32 glk_rx_ctrl1;
810+ u32 glk_tun_val;
811+ u32 dly;
812+
813+ if (intel_host->rpm_retune_ok || !mmc_can_retune(host->mmc))
814+ return;
815+
816+ glk_rx_ctrl1 = sdhci_readl(host, GLK_RX_CTRL1);
817+ glk_tun_val = sdhci_readl(host, GLK_TUN_VAL);
818+
819+ if (susp) {
820+ intel_host->glk_rx_ctrl1 = glk_rx_ctrl1;
821+ intel_host->glk_tun_val = glk_tun_val;
822+ return;
823+ }
824+
825+ if (!intel_host->glk_tun_val)
826+ return;
827+
828+ if (glk_rx_ctrl1 != intel_host->glk_rx_ctrl1) {
829+ intel_host->rpm_retune_ok = true;
830+ return;
831+ }
832+
833+ dly = FIELD_PREP(GLK_DLY, FIELD_GET(GLK_PATH_PLL, glk_rx_ctrl1) +
834+ (intel_host->glk_tun_val << 1));
835+ if (dly == FIELD_GET(GLK_DLY, glk_rx_ctrl1))
836+ return;
837+
838+ glk_rx_ctrl1 = (glk_rx_ctrl1 & ~GLK_DLY) | dly;
839+ sdhci_writel(host, glk_rx_ctrl1, GLK_RX_CTRL1);
840+
841+ intel_host->rpm_retune_ok = true;
842+ chip->rpm_retune = true;
843+ mmc_retune_needed(host->mmc);
844+ pr_info("%s: Requiring re-tune after rpm resume", mmc_hostname(host->mmc));
845+}
846+
847+static void glk_rpm_retune_chk(struct sdhci_pci_chip *chip, bool susp)
848+{
849+ if (chip->pdev->device == PCI_DEVICE_ID_INTEL_GLK_EMMC &&
850+ !chip->rpm_retune)
851+ glk_rpm_retune_wa(chip, susp);
852+}
853+
854+static int glk_runtime_suspend(struct sdhci_pci_chip *chip)
855+{
856+ glk_rpm_retune_chk(chip, true);
857+
858+ return sdhci_cqhci_runtime_suspend(chip);
859+}
860+
861+static int glk_runtime_resume(struct sdhci_pci_chip *chip)
862+{
863+ glk_rpm_retune_chk(chip, false);
864+
865+ return sdhci_cqhci_runtime_resume(chip);
866+}
867+#endif
868+
794869 #ifdef CONFIG_ACPI
795870 static int ni_set_max_freq(struct sdhci_pci_slot *slot)
796871 {
@@ -879,8 +954,8 @@ static const struct sdhci_pci_fixes sdhci_intel_glk_emmc = { · 82 unmodified lines
879954 .resume = sdhci_cqhci_resume,
880955 #endif
881956 #ifdef CONFIG_PM
882− .runtime_suspend = sdhci_cqhci_runtime_suspend,
883− .runtime_resume = sdhci_cqhci_runtime_resume,
957+ .runtime_suspend = glk_runtime_suspend,
958+ .runtime_resume = glk_runtime_resume,
884959 #endif
885960 .quirks = SDHCI_QUIRK_NO_ENDATTR_IN_NOPDESC,
886961 .quirks2 = SDHCI_QUIRK2_PRESET_VALUE_BROKEN |
@@ -1762,8 +1837,13 @@ static struct sdhci_pci_slot *sdhci_pci_probe_slot( · 875 unmodified lines
17621837 device_init_wakeup(&pdev->dev, true);
17631838
17641839 if (slot->cd_idx >= 0) {
1765− ret = mmc_gpiod_request_cd(host->mmc, NULL, slot->cd_idx,
1840+ ret = mmc_gpiod_request_cd(host->mmc, "cd", slot->cd_idx,
17661841 slot->cd_override_level, 0, NULL);
1842+ if (ret && ret != -EPROBE_DEFER)
1843+ ret = mmc_gpiod_request_cd(host->mmc, NULL,
1844+ slot->cd_idx,
1845+ slot->cd_override_level,
1846+ 0, NULL);
17671847 if (ret == -EPROBE_DEFER)
17681848 goto remove;
17691849
drivers/mtd/nand/raw/atmel/nand-controller.c+7−4
@@ -2032,8 +2032,7 @@ atmel_hsmc_nand_controller_legacy_init(struct atmel_hsmc_nand_controller *nc) · 2031 unmodified lines
20322032 int ret;
20332033
20342034 nand_np = dev->of_node;
2035− nfc_np = of_find_compatible_node(dev->of_node, NULL,
2036− "atmel,sama5d3-nfc");
2035+ nfc_np = of_get_compatible_child(dev->of_node, "atmel,sama5d3-nfc");
20372036 if (!nfc_np) {
20382037 dev_err(dev, "Could not find device node for sama5d3-nfc\n");
20392038 return -ENODEV;
@@ -2447,15 +2446,19 @@ static int atmel_nand_controller_probe(struct platform_device *pdev) · 407 unmodified lines
24472446 }
24482447
24492448 if (caps->legacy_of_bindings) {
2449+ struct device_node *nfc_node;
24502450 u32 ale_offs = 21;
24512451
24522452 /*
24532453 * If we are parsing legacy DT props and the DT contains a
24542454 * valid NFC node, forward the request to the sama5 logic.
24552455 */
2456− if (of_find_compatible_node(pdev->dev.of_node, NULL,
2457− "atmel,sama5d3-nfc"))
2456+ nfc_node = of_get_compatible_child(pdev->dev.of_node,
2457+ "atmel,sama5d3-nfc");
2458+ if (nfc_node) {
24582459 caps = &atmel_sama5_nand_caps;
2460+ of_node_put(nfc_node);
2461+ }
24592462
24602463 /*
24612464 * Even if the compatible says we are dealing with an
drivers/mtd/nand/raw/qcom_nandc.c+16−16
@@ -150,15 +150,15 @@ · 149 unmodified lines
150150 #define NAND_VERSION_MINOR_SHIFT 16
151151
152152 /* NAND OP_CMDs */
153−#define PAGE_READ 0x2
154−#define PAGE_READ_WITH_ECC 0x3
155−#define PAGE_READ_WITH_ECC_SPARE 0x4
156−#define PROGRAM_PAGE 0x6
157−#define PAGE_PROGRAM_WITH_ECC 0x7
158−#define PROGRAM_PAGE_SPARE 0x9
159−#define BLOCK_ERASE 0xa
160−#define FETCH_ID 0xb
161−#define RESET_DEVICE 0xd
153+#define OP_PAGE_READ 0x2
154+#define OP_PAGE_READ_WITH_ECC 0x3
155+#define OP_PAGE_READ_WITH_ECC_SPARE 0x4
156+#define OP_PROGRAM_PAGE 0x6
157+#define OP_PAGE_PROGRAM_WITH_ECC 0x7
158+#define OP_PROGRAM_PAGE_SPARE 0x9
159+#define OP_BLOCK_ERASE 0xa
160+#define OP_FETCH_ID 0xb
161+#define OP_RESET_DEVICE 0xd
162162
163163 /* Default Value for NAND_DEV_CMD_VLD */
164164 #define NAND_DEV_CMD_VLD_VAL (READ_START_VLD | WRITE_START_VLD | \
@@ -692,11 +692,11 @@ static void update_rw_regs(struct qcom_nand_host *host, int num_cw, bool read) · 527 unmodified lines
692692
693693 if (read) {
694694 if (host->use_ecc)
695− cmd = PAGE_READ_WITH_ECC | PAGE_ACC | LAST_PAGE;
695+ cmd = OP_PAGE_READ_WITH_ECC | PAGE_ACC | LAST_PAGE;
696696 else
697− cmd = PAGE_READ | PAGE_ACC | LAST_PAGE;
697+ cmd = OP_PAGE_READ | PAGE_ACC | LAST_PAGE;
698698 } else {
699− cmd = PROGRAM_PAGE | PAGE_ACC | LAST_PAGE;
699+ cmd = OP_PROGRAM_PAGE | PAGE_ACC | LAST_PAGE;
700700 }
701701
702702 if (host->use_ecc) {
@@ -1170,7 +1170,7 @@ static int nandc_param(struct qcom_nand_host *host) · 467 unmodified lines
11701170 * in use. we configure the controller to perform a raw read of 512
11711171 * bytes to read onfi params
11721172 */
1173− nandc_set_reg(nandc, NAND_FLASH_CMD, PAGE_READ | PAGE_ACC | LAST_PAGE);
1173+ nandc_set_reg(nandc, NAND_FLASH_CMD, OP_PAGE_READ | PAGE_ACC | LAST_PAGE);
11741174 nandc_set_reg(nandc, NAND_ADDR0, 0);
11751175 nandc_set_reg(nandc, NAND_ADDR1, 0);
11761176 nandc_set_reg(nandc, NAND_DEV0_CFG0, 0 << CW_PER_PAGE
@@ -1224,7 +1224,7 @@ static int erase_block(struct qcom_nand_host *host, int page_addr) · 47 unmodified lines
12241224 struct qcom_nand_controller *nandc = get_qcom_nand_controller(chip);
12251225
12261226 nandc_set_reg(nandc, NAND_FLASH_CMD,
1227− BLOCK_ERASE | PAGE_ACC | LAST_PAGE);
1227+ OP_BLOCK_ERASE | PAGE_ACC | LAST_PAGE);
12281228 nandc_set_reg(nandc, NAND_ADDR0, page_addr);
12291229 nandc_set_reg(nandc, NAND_ADDR1, 0);
12301230 nandc_set_reg(nandc, NAND_DEV0_CFG0,
@@ -1255,7 +1255,7 @@ static int read_id(struct qcom_nand_host *host, int column) · 24 unmodified lines
12551255 if (column == -1)
12561256 return 0;
12571257
1258− nandc_set_reg(nandc, NAND_FLASH_CMD, FETCH_ID);
1258+ nandc_set_reg(nandc, NAND_FLASH_CMD, OP_FETCH_ID);
12591259 nandc_set_reg(nandc, NAND_ADDR0, column);
12601260 nandc_set_reg(nandc, NAND_ADDR1, 0);
12611261 nandc_set_reg(nandc, NAND_FLASH_CHIP_SELECT,
@@ -1276,7 +1276,7 @@ static int reset(struct qcom_nand_host *host) · 14 unmodified lines
12761276 struct nand_chip *chip = &host->chip;
12771277 struct qcom_nand_controller *nandc = get_qcom_nand_controller(chip);
12781278
1279− nandc_set_reg(nandc, NAND_FLASH_CMD, RESET_DEVICE);
1279+ nandc_set_reg(nandc, NAND_FLASH_CMD, OP_RESET_DEVICE);
12801280 nandc_set_reg(nandc, NAND_EXEC_CMD, 1);
12811281
12821282 write_reg_dma(nandc, NAND_FLASH_CMD, 1, NAND_BAM_NEXT_SGL);
drivers/mtd/spi-nor/cadence-quadspi.c+16−3
@@ -644,9 +644,23 @@ static int cqspi_indirect_write_execute(struct spi_nor *nor, loff_t to_addr, · 643 unmodified lines
644644 ndelay(cqspi->wr_delay);
645645
646646 while (remaining > 0) {
647+ size_t write_words, mod_bytes;
648+
647649 write_bytes = remaining > page_size ? page_size : remaining;
648− iowrite32_rep(cqspi->ahb_base, txbuf,
649− DIV_ROUND_UP(write_bytes, 4));
650+ write_words = write_bytes / 4;
651+ mod_bytes = write_bytes % 4;
652+ /* Write 4 bytes at a time then single bytes. */
653+ if (write_words) {
654+ iowrite32_rep(cqspi->ahb_base, txbuf, write_words);
655+ txbuf += (write_words * 4);
656+ }
657+ if (mod_bytes) {
658+ unsigned int temp = 0xFFFFFFFF;
659+
660+ memcpy(&temp, txbuf, mod_bytes);
661+ iowrite32(temp, cqspi->ahb_base);
662+ txbuf += mod_bytes;
663+ }
650664
651665 if (!wait_for_completion_timeout(&cqspi->transfer_complete,
652666 msecs_to_jiffies(CQSPI_TIMEOUT_MS))) {
@@ -655,7 +669,6 @@ static int cqspi_indirect_write_execute(struct spi_nor *nor, loff_t to_addr, · 2 unmodified lines
655669 goto failwr;
656670 }
657671
658− txbuf += write_bytes;
659672 remaining -= write_bytes;
660673
661674 if (remaining > 0)
drivers/mtd/spi-nor/spi-nor.c+98−32
@@ -2156,7 +2156,7 @@ spi_nor_set_pp_settings(struct spi_nor_pp_command *pp, · 2155 unmodified lines
21562156 * @nor: pointer to a 'struct spi_nor'
21572157 * @addr: offset in the serial flash memory
21582158 * @len: number of bytes to read
2159− * @buf: buffer where the data is copied into
2159+ * @buf: buffer where the data is copied into (dma-safe memory)
21602160 *
21612161 * Return: 0 on success, -errno otherwise.
21622162 */
@@ -2521,6 +2521,34 @@ static int spi_nor_map_cmp_erase_type(const void *l, const void *r) · 358 unmodified lines
25212521 return left->size - right->size;
25222522 }
25232523
2524+/**
2525+ * spi_nor_sort_erase_mask() - sort erase mask
2526+ * @map: the erase map of the SPI NOR
2527+ * @erase_mask: the erase type mask to be sorted
2528+ *
2529+ * Replicate the sort done for the map's erase types in BFPT: sort the erase
2530+ * mask in ascending order with the smallest erase type size starting from
2531+ * BIT(0) in the sorted erase mask.
2532+ *
2533+ * Return: sorted erase mask.
2534+ */
2535+static u8 spi_nor_sort_erase_mask(struct spi_nor_erase_map *map, u8 erase_mask)
2536+{
2537+ struct spi_nor_erase_type *erase_type = map->erase_type;
2538+ int i;
2539+ u8 sorted_erase_mask = 0;
2540+
2541+ if (!erase_mask)
2542+ return 0;
2543+
2544+ /* Replicate the sort done for the map's erase types. */
2545+ for (i = 0; i < SNOR_ERASE_TYPE_MAX; i++)
2546+ if (erase_type[i].size && erase_mask & BIT(erase_type[i].idx))
2547+ sorted_erase_mask |= BIT(i);
2548+
2549+ return sorted_erase_mask;
2550+}
2551+
25242552 /**
25252553 * spi_nor_regions_sort_erase_types() - sort erase types in each region
25262554 * @map: the erase map of the SPI NOR
@@ -2536,19 +2564,13 @@ static int spi_nor_map_cmp_erase_type(const void *l, const void *r) · 9 unmodified lines
25362564 static void spi_nor_regions_sort_erase_types(struct spi_nor_erase_map *map)
25372565 {
25382566 struct spi_nor_erase_region *region = map->regions;
2539− struct spi_nor_erase_type *erase_type = map->erase_type;
2540− int i;
25412567 u8 region_erase_mask, sorted_erase_mask;
25422568
25432569 while (region) {
25442570 region_erase_mask = region->offset & SNOR_ERASE_TYPE_MASK;
25452571
2546− /* Replicate the sort done for the map's erase types. */
2547− sorted_erase_mask = 0;
2548− for (i = 0; i < SNOR_ERASE_TYPE_MAX; i++)
2549− if (erase_type[i].size &&
2550− region_erase_mask & BIT(erase_type[i].idx))
2551− sorted_erase_mask |= BIT(i);
2572+ sorted_erase_mask = spi_nor_sort_erase_mask(map,
2573+ region_erase_mask);
25522574
25532575 /* Overwrite erase mask. */
25542576 region->offset = (region->offset & ~SNOR_ERASE_TYPE_MASK) |
@@ -2855,52 +2877,84 @@ static u8 spi_nor_smpt_read_dummy(const struct spi_nor *nor, const u32 settings) · 300 unmodified lines
28552877 * spi_nor_get_map_in_use() - get the configuration map in use
28562878 * @nor: pointer to a 'struct spi_nor'
28572879 * @smpt: pointer to the sector map parameter table
2880+ * @smpt_len: sector map parameter table length
2881+ *
2882+ * Return: pointer to the map in use, ERR_PTR(-errno) otherwise.
28582883 */
2859−static const u32 *spi_nor_get_map_in_use(struct spi_nor *nor, const u32 *smpt)
2884+static const u32 *spi_nor_get_map_in_use(struct spi_nor *nor, const u32 *smpt,
2885+ u8 smpt_len)
28602886 {
2861− const u32 *ret = NULL;
2862− u32 i, addr;
2887+ const u32 *ret;
2888+ u8 *buf;
2889+ u32 addr;
28632890 int err;
2891+ u8 i;
28642892 u8 addr_width, read_opcode, read_dummy;
2865− u8 read_data_mask, data_byte, map_id;
2893+ u8 read_data_mask, map_id;
2894+
2895+ /* Use a kmalloc'ed bounce buffer to guarantee it is DMA-able. */
2896+ buf = kmalloc(sizeof(*buf), GFP_KERNEL);
2897+ if (!buf)
2898+ return ERR_PTR(-ENOMEM);
28662899
28672900 addr_width = nor->addr_width;
28682901 read_dummy = nor->read_dummy;
28692902 read_opcode = nor->read_opcode;
28702903
28712904 map_id = 0;
2872− i = 0;
28732905 /* Determine if there are any optional Detection Command Descriptors */
2874− while (!(smpt[i] & SMPT_DESC_TYPE_MAP)) {
2906+ for (i = 0; i < smpt_len; i += 2) {
2907+ if (smpt[i] & SMPT_DESC_TYPE_MAP)
2908+ break;
2909+
28752910 read_data_mask = SMPT_CMD_READ_DATA(smpt[i]);
28762911 nor->addr_width = spi_nor_smpt_addr_width(nor, smpt[i]);
28772912 nor->read_dummy = spi_nor_smpt_read_dummy(nor, smpt[i]);
28782913 nor->read_opcode = SMPT_CMD_OPCODE(smpt[i]);
28792914 addr = smpt[i + 1];
28802915
2881− err = spi_nor_read_raw(nor, addr, 1, &data_byte);
2882− if (err)
2916+ err = spi_nor_read_raw(nor, addr, 1, buf);
2917+ if (err) {
2918+ ret = ERR_PTR(err);
28832919 goto out;
2920+ }
28842921
28852922 /*
28862923 * Build an index value that is used to select the Sector Map
28872924 * Configuration that is currently in use.
28882925 */
2889− map_id = map_id << 1 | !!(data_byte & read_data_mask);
2890− i = i + 2;
2926+ map_id = map_id << 1 | !!(*buf & read_data_mask);
28912927 }
28922928
2893− /* Find the matching configuration map */
2894− while (SMPT_MAP_ID(smpt[i]) != map_id) {
2929+ /*
2930+ * If command descriptors are provided, they always precede map
2931+ * descriptors in the table. There is no need to start the iteration
2932+ * over smpt array all over again.
2933+ *
2934+ * Find the matching configuration map.
2935+ */
2936+ ret = ERR_PTR(-EINVAL);
2937+ while (i < smpt_len) {
2938+ if (SMPT_MAP_ID(smpt[i]) == map_id) {
2939+ ret = smpt + i;
2940+ break;
2941+ }
2942+
2943+ /*
2944+ * If there are no more configuration map descriptors and no
2945+ * configuration ID matched the configuration identifier, the
2946+ * sector address map is unknown.
2947+ */
28952948 if (smpt[i] & SMPT_DESC_END)
2896− goto out;
2949+ break;
2950+
28972951 /* increment the table index to the next map */
28982952 i += SMPT_MAP_REGION_COUNT(smpt[i]) + 1;
28992953 }
29002954
2901− ret = smpt + i;
29022955 /* fall through */
29032956 out:
2957+ kfree(buf);
29042958 nor->addr_width = addr_width;
29052959 nor->read_dummy = read_dummy;
29062960 nor->read_opcode = read_opcode;
@@ -2946,7 +3000,7 @@ static int spi_nor_init_non_uniform_erase_map(struct spi_nor *nor, · 39 unmodified lines
29463000 u64 offset;
29473001 u32 region_count;
29483002 int i, j;
2949− u8 erase_type;
3003+ u8 erase_type, uniform_erase_type;
29503004
29513005 region_count = SMPT_MAP_REGION_COUNT(*smpt);
29523006 /*
@@ -2959,7 +3013,7 @@ static int spi_nor_init_non_uniform_erase_map(struct spi_nor *nor, · 6 unmodified lines
29593013 return -ENOMEM;
29603014 map->regions = region;
29613015
2962− map->uniform_erase_type = 0xff;
3016+ uniform_erase_type = 0xff;
29633017 offset = 0;
29643018 /* Populate regions. */
29653019 for (i = 0; i < region_count; i++) {
@@ -2974,12 +3028,15 @@ static int spi_nor_init_non_uniform_erase_map(struct spi_nor *nor, · 8 unmodified lines
29743028 * Save the erase types that are supported in all regions and
29753029 * can erase the entire flash memory.
29763030 */
2977− map->uniform_erase_type &= erase_type;
3031+ uniform_erase_type &= erase_type;
29783032
29793033 offset = (region[i].offset & ~SNOR_ERASE_FLAGS_MASK) +
29803034 region[i].size;
29813035 }
29823036
3037+ map->uniform_erase_type = spi_nor_sort_erase_mask(map,
3038+ uniform_erase_type);
3039+
29833040 spi_nor_region_mark_end(&region[i - 1]);
29843041
29853042 return 0;
@@ -3020,9 +3077,9 @@ static int spi_nor_parse_smpt(struct spi_nor *nor, · 34 unmodified lines
30203077 for (i = 0; i < smpt_header->length; i++)
30213078 smpt[i] = le32_to_cpu(smpt[i]);
30223079
3023− sector_map = spi_nor_get_map_in_use(nor, smpt);
3024− if (!sector_map) {
3025− ret = -EINVAL;
3080+ sector_map = spi_nor_get_map_in_use(nor, smpt, smpt_header->length);
3081+ if (IS_ERR(sector_map)) {
3082+ ret = PTR_ERR(sector_map);
30263083 goto out;
30273084 }
30283085
@@ -3125,7 +3182,7 @@ static int spi_nor_parse_sfdp(struct spi_nor *nor, · 96 unmodified lines
31253182 if (err)
31263183 goto exit;
31273184
3128− /* Parse other parameter headers. */
3185+ /* Parse optional parameter tables. */
31293186 for (i = 0; i < header.nph; i++) {
31303187 param_header = &param_headers[i];
31313188
@@ -3138,8 +3195,17 @@ static int spi_nor_parse_sfdp(struct spi_nor *nor, · 6 unmodified lines
31383195 break;
31393196 }
31403197
3141− if (err)
3142− goto exit;
3198+ if (err) {
3199+ dev_warn(dev, "Failed to parse optional parameter table: %04x\n",
3200+ SFDP_PARAM_HEADER_ID(param_header));
3201+ /*
3202+ * Let's not drop all information we extracted so far
3203+ * if optional table parsers fail. In case of failing,
3204+ * each optional parser is responsible to roll back to
3205+ * the previously known spi_nor data.
3206+ */
3207+ err = 0;
3208+ }
31433209 }
31443210
31453211 exit:
drivers/net/ethernet/amazon/ena/ena_netdev.c+11−12
@@ -1848,6 +1848,8 @@ static void ena_down(struct ena_adapter *adapter) · 1847 unmodified lines
18481848 rc = ena_com_dev_reset(adapter->ena_dev, adapter->reset_reason);
18491849 if (rc)
18501850 dev_err(&adapter->pdev->dev, "Device reset failed\n");
1851+ /* stop submitting admin commands on a device that was reset */
1852+ ena_com_set_admin_running_state(adapter->ena_dev, false);
18511853 }
18521854
18531855 ena_destroy_all_io_queues(adapter);
@@ -1914,6 +1916,9 @@ static int ena_close(struct net_device *netdev) · 60 unmodified lines
19141916
19151917 netif_dbg(adapter, ifdown, netdev, "%s\n", __func__);
19161918
1919+ if (!test_bit(ENA_FLAG_DEVICE_RUNNING, &adapter->flags))
1920+ return 0;
1921+
19171922 if (test_bit(ENA_FLAG_DEV_UP, &adapter->flags))
19181923 ena_down(adapter);
19191924
@@ -2613,9 +2618,7 @@ static void ena_destroy_device(struct ena_adapter *adapter, bool graceful) · 693 unmodified lines
26132618 ena_down(adapter);
26142619
26152620 /* Stop the device from sending AENQ events (in case reset flag is set
2616− * and device is up, ena_close already reset the device
2617− * In case the reset flag is set and the device is up, ena_down()
2618− * already perform the reset, so it can be skipped.
2621+ * and device is up, ena_down() already reset the device.
26192622 */
26202623 if (!(test_bit(ENA_FLAG_TRIGGER_RESET, &adapter->flags) && dev_up))
26212624 ena_com_dev_reset(adapter->ena_dev, adapter->reset_reason);
@@ -2694,8 +2697,8 @@ err_device_destroy: · 72 unmodified lines
26942697 ena_com_abort_admin_commands(ena_dev);
26952698 ena_com_wait_for_abort_completion(ena_dev);
26962699 ena_com_admin_destroy(ena_dev);
2697− ena_com_mmio_reg_read_request_destroy(ena_dev);
26982700 ena_com_dev_reset(ena_dev, ENA_REGS_RESET_DRIVER_INVALID_STATE);
2701+ ena_com_mmio_reg_read_request_destroy(ena_dev);
26992702 err:
27002703 clear_bit(ENA_FLAG_DEVICE_RUNNING, &adapter->flags);
27012704 clear_bit(ENA_FLAG_ONGOING_RESET, &adapter->flags);
@@ -3452,6 +3455,8 @@ err_rss: · 750 unmodified lines
34523455 ena_com_rss_destroy(ena_dev);
34533456 err_free_msix:
34543457 ena_com_dev_reset(ena_dev, ENA_REGS_RESET_INIT_ERR);
3458+ /* stop submitting admin commands on a device that was reset */
3459+ ena_com_set_admin_running_state(ena_dev, false);
34553460 ena_free_mgmnt_irq(adapter);
34563461 ena_disable_msix(adapter);
34573462 err_worker_destroy:
@@ -3498,18 +3503,12 @@ static void ena_remove(struct pci_dev *pdev) · 40 unmodified lines
34983503
34993504 cancel_work_sync(&adapter->reset_task);
35003505
3501− unregister_netdev(netdev);
3502−
3503− /* If the device is running then we want to make sure the device will be
3504− * reset to make sure no more events will be issued by the device.
3505− */
3506− if (test_bit(ENA_FLAG_DEVICE_RUNNING, &adapter->flags))
3507− set_bit(ENA_FLAG_TRIGGER_RESET, &adapter->flags);
3508−
35093506 rtnl_lock();
35103507 ena_destroy_device(adapter, true);
35113508 rtnl_unlock();
35123509
3510+ unregister_netdev(netdev);
3511+
35133512 free_netdev(netdev);
35143513
35153514 ena_com_rss_destroy(ena_dev);
drivers/net/ethernet/amazon/ena/ena_netdev.h+1−1
@@ -45,7 +45,7 @@ · 44 unmodified lines
4545
4646 #define DRV_MODULE_VER_MAJOR 2
4747 #define DRV_MODULE_VER_MINOR 0
48−#define DRV_MODULE_VER_SUBMINOR 1
48+#define DRV_MODULE_VER_SUBMINOR 2
4949
5050 #define DRV_MODULE_NAME "ena"
5151 #ifndef DRV_MODULE_VERSION
drivers/net/ethernet/amd/sunlance.c+3−1
@@ -1419,7 +1419,7 @@ static int sparc_lance_probe_one(struct platform_device *op, · 1418 unmodified lines
14191419
14201420 prop = of_get_property(nd, "tpe-link-test?", NULL);
14211421 if (!prop)
1422− goto no_link_test;
1422+ goto node_put;
14231423
14241424 if (strcmp(prop, "true")) {
14251425 printk(KERN_NOTICE "SunLance: warning: overriding option "
@@ -1428,6 +1428,8 @@ static int sparc_lance_probe_one(struct platform_device *op, · 2 unmodified lines
14281428 "to ecd@skynet.be\n");
14291429 auxio_set_lte(AUXIO_LTE_ON);
14301430 }
1431+node_put:
1432+ of_node_put(nd);
14311433 no_link_test:
14321434 lp->auto_select = 1;
14331435 lp->tpe = 0;
drivers/net/ethernet/broadcom/tg3.c+16−2
@@ -12434,6 +12434,7 @@ static int tg3_set_ringparam(struct net_device *dev, struct ethtool_ringparam *e · 12433 unmodified lines
1243412434 {
1243512435 struct tg3 *tp = netdev_priv(dev);
1243612436 int i, irq_sync = 0, err = 0;
12437+ bool reset_phy = false;
1243712438
1243812439 if ((ering->rx_pending > tp->rx_std_ring_mask) ||
1243912440 (ering->rx_jumbo_pending > tp->rx_jmb_ring_mask) ||
@@ -12465,7 +12466,13 @@ static int tg3_set_ringparam(struct net_device *dev, struct ethtool_ringparam *e · 25 unmodified lines
1246512466
1246612467 if (netif_running(dev)) {
1246712468 tg3_halt(tp, RESET_KIND_SHUTDOWN, 1);
12468− err = tg3_restart_hw(tp, false);
12469+ /* Reset PHY to avoid PHY lock up */
12470+ if (tg3_asic_rev(tp) == ASIC_REV_5717 ||
12471+ tg3_asic_rev(tp) == ASIC_REV_5719 ||
12472+ tg3_asic_rev(tp) == ASIC_REV_5720)
12473+ reset_phy = true;
12474+
12475+ err = tg3_restart_hw(tp, reset_phy);
1246912476 if (!err)
1247012477 tg3_netif_start(tp);
1247112478 }
@@ -12499,6 +12506,7 @@ static int tg3_set_pauseparam(struct net_device *dev, struct ethtool_pauseparam · 27 unmodified lines
1249912506 {
1250012507 struct tg3 *tp = netdev_priv(dev);
1250112508 int err = 0;
12509+ bool reset_phy = false;
1250212510
1250312511 if (tp->link_config.autoneg == AUTONEG_ENABLE)
1250412512 tg3_warn_mgmt_link_flap(tp);
@@ -12568,7 +12576,13 @@ static int tg3_set_pauseparam(struct net_device *dev, struct ethtool_pauseparam · 63 unmodified lines
1256812576
1256912577 if (netif_running(dev)) {
1257012578 tg3_halt(tp, RESET_KIND_SHUTDOWN, 1);
12571− err = tg3_restart_hw(tp, false);
12579+ /* Reset PHY to avoid PHY lock up */
12580+ if (tg3_asic_rev(tp) == ASIC_REV_5717 ||
12581+ tg3_asic_rev(tp) == ASIC_REV_5719 ||
12582+ tg3_asic_rev(tp) == ASIC_REV_5720)
12583+ reset_phy = true;
12584+
12585+ err = tg3_restart_hw(tp, reset_phy);
1257212586 if (!err)
1257312587 tg3_netif_start(tp);
1257412588 }
drivers/net/ethernet/cavium/thunder/nicvf_main.c+7−2
@@ -1784,6 +1784,7 @@ static int nicvf_xdp_setup(struct nicvf *nic, struct bpf_prog *prog) · 1783 unmodified lines
17841784 bool if_up = netif_running(nic->netdev);
17851785 struct bpf_prog *old_prog;
17861786 bool bpf_attached = false;
1787+ int ret = 0;
17871788
17881789 /* For now just support only the usual MTU sized frames */
17891790 if (prog && (dev->mtu > 1500)) {
@@ -1817,8 +1818,12 @@ static int nicvf_xdp_setup(struct nicvf *nic, struct bpf_prog *prog) · 27 unmodified lines
18171818 if (nic->xdp_prog) {
18181819 /* Attach BPF program */
18191820 nic->xdp_prog = bpf_prog_add(nic->xdp_prog, nic->rx_queues - 1);
1820− if (!IS_ERR(nic->xdp_prog))
1821+ if (!IS_ERR(nic->xdp_prog)) {
18211822 bpf_attached = true;
1823+ } else {
1824+ ret = PTR_ERR(nic->xdp_prog);
1825+ nic->xdp_prog = NULL;
1826+ }
18221827 }
18231828
18241829 /* Calculate Tx queues needed for XDP and network stack */
@@ -1830,7 +1835,7 @@ static int nicvf_xdp_setup(struct nicvf *nic, struct bpf_prog *prog) · 5 unmodified lines
18301835 netif_trans_update(nic->netdev);
18311836 }
18321837
1833− return 0;
1838+ return ret;
18341839 }
18351840
18361841 static int nicvf_xdp(struct net_device *netdev, struct netdev_bpf *xdp)
drivers/net/ethernet/cavium/thunder/nicvf_queues.c+3−1
@@ -585,10 +585,12 @@ static void nicvf_free_snd_queue(struct nicvf *nic, struct snd_queue *sq) · 584 unmodified lines
585585 if (!sq->dmem.base)
586586 return;
587587
588− if (sq->tso_hdrs)
588+ if (sq->tso_hdrs) {
589589 dma_free_coherent(&nic->pdev->dev,
590590 sq->dmem.q_len * TSO_HEADER_SIZE,
591591 sq->tso_hdrs, sq->tso_hdrs_phys);
592+ sq->tso_hdrs = NULL;
593+ }
592594
593595 /* Free pending skbs in the queue */
594596 smp_rmb();
drivers/net/ethernet/cortina/gemini.c+1−1
@@ -660,7 +660,7 @@ static void gmac_clean_txq(struct net_device *netdev, struct gmac_txq *txq, · 659 unmodified lines
660660
661661 u64_stats_update_begin(&port->tx_stats_syncp);
662662 port->tx_frag_stats[nfrags]++;
663− u64_stats_update_end(&port->ir_stats_syncp);
663+ u64_stats_update_end(&port->tx_stats_syncp);
664664 }
665665 }
666666
drivers/net/ethernet/faraday/ftmac100.c+3−4
@@ -872,11 +872,10 @@ static irqreturn_t ftmac100_interrupt(int irq, void *dev_id) · 871 unmodified lines
872872 struct net_device *netdev = dev_id;
873873 struct ftmac100 *priv = netdev_priv(netdev);
874874
875− if (likely(netif_running(netdev))) {
876− /* Disable interrupts for polling */
877− ftmac100_disable_all_int(priv);
875+ /* Disable interrupts for polling */
876+ ftmac100_disable_all_int(priv);
877+ if (likely(netif_running(netdev)))
878878 napi_schedule(&priv->napi);
879− }
880879
881880 return IRQ_HANDLED;
882881 }
drivers/net/ethernet/ibm/ibmvnic.c+31−41
@@ -485,8 +485,8 @@ static void release_rx_pools(struct ibmvnic_adapter *adapter) · 484 unmodified lines
485485
486486 for (j = 0; j < rx_pool->size; j++) {
487487 if (rx_pool->rx_buff[j].skb) {
488− dev_kfree_skb_any(rx_pool->rx_buff[i].skb);
489− rx_pool->rx_buff[i].skb = NULL;
488+ dev_kfree_skb_any(rx_pool->rx_buff[j].skb);
489+ rx_pool->rx_buff[j].skb = NULL;
490490 }
491491 }
492492
@@ -1103,20 +1103,15 @@ static int ibmvnic_open(struct net_device *netdev) · 610 unmodified lines
11031103 return 0;
11041104 }
11051105
1106− mutex_lock(&adapter->reset_lock);
1107−
11081106 if (adapter->state != VNIC_CLOSED) {
11091107 rc = ibmvnic_login(netdev);
1110− if (rc) {
1111− mutex_unlock(&adapter->reset_lock);
1108+ if (rc)
11121109 return rc;
1113− }
11141110
11151111 rc = init_resources(adapter);
11161112 if (rc) {
11171113 netdev_err(netdev, "failed to initialize resources\n");
11181114 release_resources(adapter);
1119− mutex_unlock(&adapter->reset_lock);
11201115 return rc;
11211116 }
11221117 }
@@ -1124,8 +1119,6 @@ static int ibmvnic_open(struct net_device *netdev) · 1 unmodified line
11241119 rc = __ibmvnic_open(netdev);
11251120 netif_carrier_on(netdev);
11261121
1127− mutex_unlock(&adapter->reset_lock);
1128−
11291122 return rc;
11301123 }
11311124
@@ -1269,10 +1262,8 @@ static int ibmvnic_close(struct net_device *netdev) · 137 unmodified lines
12691262 return 0;
12701263 }
12711264
1272− mutex_lock(&adapter->reset_lock);
12731265 rc = __ibmvnic_close(netdev);
12741266 ibmvnic_cleanup(netdev);
1275− mutex_unlock(&adapter->reset_lock);
12761267
12771268 return rc;
12781269 }
@@ -1746,6 +1737,7 @@ static int do_reset(struct ibmvnic_adapter *adapter, · 467 unmodified lines
17461737 struct ibmvnic_rwi *rwi, u32 reset_state)
17471738 {
17481739 u64 old_num_rx_queues, old_num_tx_queues;
1740+ u64 old_num_rx_slots, old_num_tx_slots;
17491741 struct net_device *netdev = adapter->netdev;
17501742 int i, rc;
17511743
@@ -1757,6 +1749,8 @@ static int do_reset(struct ibmvnic_adapter *adapter, · 5 unmodified lines
17571749
17581750 old_num_rx_queues = adapter->req_rx_queues;
17591751 old_num_tx_queues = adapter->req_tx_queues;
1752+ old_num_rx_slots = adapter->req_rx_add_entries_per_subcrq;
1753+ old_num_tx_slots = adapter->req_tx_entries_per_subcrq;
17601754
17611755 ibmvnic_cleanup(netdev);
17621756
@@ -1819,21 +1813,20 @@ static int do_reset(struct ibmvnic_adapter *adapter, · 56 unmodified lines
18191813 if (rc)
18201814 return rc;
18211815 } else if (adapter->req_rx_queues != old_num_rx_queues ||
1822− adapter->req_tx_queues != old_num_tx_queues) {
1823− adapter->map_id = 1;
1816+ adapter->req_tx_queues != old_num_tx_queues ||
1817+ adapter->req_rx_add_entries_per_subcrq !=
1818+ old_num_rx_slots ||
1819+ adapter->req_tx_entries_per_subcrq !=
1820+ old_num_tx_slots) {
18241821 release_rx_pools(adapter);
18251822 release_tx_pools(adapter);
1826− rc = init_rx_pools(netdev);
1827− if (rc)
1828− return rc;
1829− rc = init_tx_pools(netdev);
1830− if (rc)
1831− return rc;
1832−
18331823 release_napi(adapter);
1834− rc = init_napi(adapter);
1824+ release_vpd_data(adapter);
1825+
1826+ rc = init_resources(adapter);
18351827 if (rc)
18361828 return rc;
1829+
18371830 } else {
18381831 rc = reset_tx_pools(adapter);
18391832 if (rc)
@@ -1917,17 +1910,8 @@ static int do_hard_reset(struct ibmvnic_adapter *adapter, · 77 unmodified lines
19171910 adapter->state = VNIC_PROBED;
19181911 return 0;
19191912 }
1920− /* netif_set_real_num_xx_queues needs to take rtnl lock here
1921− * unless wait_for_reset is set, in which case the rtnl lock
1922− * has already been taken before initializing the reset
1923− */
1924− if (!adapter->wait_for_reset) {
1925− rtnl_lock();
1926− rc = init_resources(adapter);
1927− rtnl_unlock();
1928− } else {
1929− rc = init_resources(adapter);
1930− }
1913+
1914+ rc = init_resources(adapter);
19311915 if (rc)
19321916 return rc;
19331917
@@ -1986,13 +1970,21 @@ static void __ibmvnic_reset(struct work_struct *work) · 52 unmodified lines
19861970 struct ibmvnic_rwi *rwi;
19871971 struct ibmvnic_adapter *adapter;
19881972 struct net_device *netdev;
1973+ bool we_lock_rtnl = false;
19891974 u32 reset_state;
19901975 int rc = 0;
19911976
19921977 adapter = container_of(work, struct ibmvnic_adapter, ibmvnic_reset);
19931978 netdev = adapter->netdev;
19941979
1995− mutex_lock(&adapter->reset_lock);
1980+ /* netif_set_real_num_xx_queues needs to take rtnl lock here
1981+ * unless wait_for_reset is set, in which case the rtnl lock
1982+ * has already been taken before initializing the reset
1983+ */
1984+ if (!adapter->wait_for_reset) {
1985+ rtnl_lock();
1986+ we_lock_rtnl = true;
1987+ }
19961988 reset_state = adapter->state;
19971989
19981990 rwi = get_next_rwi(adapter);
@@ -2020,12 +2012,11 @@ static void __ibmvnic_reset(struct work_struct *work) · 21 unmodified lines
20202012 if (rc) {
20212013 netdev_dbg(adapter->netdev, "Reset failed\n");
20222014 free_all_rwi(adapter);
2023− mutex_unlock(&adapter->reset_lock);
2024− return;
20252015 }
20262016
20272017 adapter->resetting = false;
2028− mutex_unlock(&adapter->reset_lock);
2018+ if (we_lock_rtnl)
2019+ rtnl_unlock();
20292020 }
20302021
20312022 static int ibmvnic_reset(struct ibmvnic_adapter *adapter,
@@ -4768,7 +4759,6 @@ static int ibmvnic_probe(struct vio_dev *dev, const struct vio_device_id *id) · 2736 unmodified lines
47684759
47694760 INIT_WORK(&adapter->ibmvnic_reset, __ibmvnic_reset);
47704761 INIT_LIST_HEAD(&adapter->rwi_list);
4771− mutex_init(&adapter->reset_lock);
47724762 mutex_init(&adapter->rwi_lock);
47734763 adapter->resetting = false;
47744764
@@ -4840,8 +4830,8 @@ static int ibmvnic_remove(struct vio_dev *dev) · 65 unmodified lines
48404830 struct ibmvnic_adapter *adapter = netdev_priv(netdev);
48414831
48424832 adapter->state = VNIC_REMOVING;
4843− unregister_netdev(netdev);
4844− mutex_lock(&adapter->reset_lock);
4833+ rtnl_lock();
4834+ unregister_netdevice(netdev);
48454835
48464836 release_resources(adapter);
48474837 release_sub_crqs(adapter, 1);
@@ -4852,7 +4842,7 @@ static int ibmvnic_remove(struct vio_dev *dev) · 4 unmodified lines
48524842
48534843 adapter->state = VNIC_REMOVED;
48544844
4855− mutex_unlock(&adapter->reset_lock);
4845+ rtnl_unlock();
48564846 device_remove_file(&dev->dev, &dev_attr_failover);
48574847 free_netdev(netdev);
48584848 dev_set_drvdata(&dev->dev, NULL);
drivers/net/ethernet/ibm/ibmvnic.h+1−1
@@ -1075,7 +1075,7 @@ struct ibmvnic_adapter { · 1074 unmodified lines
10751075 struct tasklet_struct tasklet;
10761076 enum vnic_state state;
10771077 enum ibmvnic_reset_reason reset_reason;
1078− struct mutex reset_lock, rwi_lock;
1078+ struct mutex rwi_lock;
10791079 struct list_head rwi_list;
10801080 struct work_struct ibmvnic_reset;
10811081 bool resetting;
drivers/net/ethernet/mellanox/mlx5/core/en.h+1−0
@@ -569,6 +569,7 @@ struct mlx5e_rq { · 568 unmodified lines
569569
570570 unsigned long state;
571571 int ix;
572+ unsigned int hw_mtu;
572573
573574 struct net_dim dim; /* Dynamic Interrupt Moderation */
574575
drivers/net/ethernet/mellanox/mlx5/core/en/port.c+15−21
@@ -88,10 +88,8 @@ int mlx5e_port_linkspeed(struct mlx5_core_dev *mdev, u32 *speed) · 87 unmodified lines
8888
8989 eth_proto_oper = MLX5_GET(ptys_reg, out, eth_proto_oper);
9090 *speed = mlx5e_port_ptys2speed(eth_proto_oper);
91− if (!(*speed)) {
92− mlx5_core_warn(mdev, "cannot get port speed\n");
91+ if (!(*speed))
9392 err = -EINVAL;
94− }
9593
9694 return err;
9795 }
@@ -258,7 +256,7 @@ static int mlx5e_fec_admin_field(u32 *pplm, · 160 unmodified lines
258256 case 40000:
259257 if (!write)
260258 *fec_policy = MLX5_GET(pplm_reg, pplm,
261− fec_override_cap_10g_40g);
259+ fec_override_admin_10g_40g);
262260 else
263261 MLX5_SET(pplm_reg, pplm,
264262 fec_override_admin_10g_40g, *fec_policy);
@@ -310,7 +308,7 @@ static int mlx5e_get_fec_cap_field(u32 *pplm, · 45 unmodified lines
310308 case 10000:
311309 case 40000:
312310 *fec_cap = MLX5_GET(pplm_reg, pplm,
313− fec_override_admin_10g_40g);
311+ fec_override_cap_10g_40g);
314312 break;
315313 case 25000:
316314 *fec_cap = MLX5_GET(pplm_reg, pplm,
@@ -394,12 +392,12 @@ int mlx5e_get_fec_mode(struct mlx5_core_dev *dev, u32 *fec_mode_active, · 77 unmodified lines
394392
395393 int mlx5e_set_fec_mode(struct mlx5_core_dev *dev, u8 fec_policy)
396394 {
395+ u8 fec_policy_nofec = BIT(MLX5E_FEC_NOFEC);
397396 bool fec_mode_not_supp_in_speed = false;
398− u8 no_fec_policy = BIT(MLX5E_FEC_NOFEC);
399397 u32 out[MLX5_ST_SZ_DW(pplm_reg)] = {};
400398 u32 in[MLX5_ST_SZ_DW(pplm_reg)] = {};
401399 int sz = MLX5_ST_SZ_BYTES(pplm_reg);
402− u32 current_fec_speed;
400+ u8 fec_policy_auto = 0;
403401 u8 fec_caps = 0;
404402 int err;
405403 int i;
@@ -415,23 +413,19 @@ int mlx5e_set_fec_mode(struct mlx5_core_dev *dev, u8 fec_policy) · 9 unmodified lines
415413 if (err)
416414 return err;
417415
418− err = mlx5e_port_linkspeed(dev, &current_fec_speed);
419− if (err)
420− return err;
416+ MLX5_SET(pplm_reg, out, local_port, 1);
421417
422− memset(in, 0, sz);
423− MLX5_SET(pplm_reg, in, local_port, 1);
424− for (i = 0; i < MLX5E_FEC_SUPPORTED_SPEEDS && !!fec_policy; i++) {
418+ for (i = 0; i < MLX5E_FEC_SUPPORTED_SPEEDS; i++) {
425419 mlx5e_get_fec_cap_field(out, &fec_caps, fec_supported_speeds[i]);
426− /* policy supported for link speed */
427− if (!!(fec_caps & fec_policy)) {
428− mlx5e_fec_admin_field(in, &fec_policy, 1,
420+ /* policy supported for link speed, or policy is auto */
421+ if (fec_caps & fec_policy || fec_policy == fec_policy_auto) {
422+ mlx5e_fec_admin_field(out, &fec_policy, 1,
429423 fec_supported_speeds[i]);
430424 } else {
431− if (fec_supported_speeds[i] == current_fec_speed)
432− return -EOPNOTSUPP;
433− mlx5e_fec_admin_field(in, &no_fec_policy, 1,
434− fec_supported_speeds[i]);
425+ /* turn off FEC if supported. Else, leave it the same */
426+ if (fec_caps & fec_policy_nofec)
427+ mlx5e_fec_admin_field(out, &fec_policy_nofec, 1,
428+ fec_supported_speeds[i]);
435429 fec_mode_not_supp_in_speed = true;
436430 }
437431 }
@@ -441,5 +435,5 @@ int mlx5e_set_fec_mode(struct mlx5_core_dev *dev, u8 fec_policy) · 3 unmodified lines
441435 "FEC policy 0x%x is not supported for some speeds",
442436 fec_policy);
443437
444− return mlx5_core_access_reg(dev, in, sz, out, sz, MLX5_REG_PPLM, 0, 1);
438+ return mlx5_core_access_reg(dev, out, sz, out, sz, MLX5_REG_PPLM, 0, 1);
445439 }
drivers/net/ethernet/mellanox/mlx5/core/en/port_buffer.c+3−1
@@ -130,8 +130,10 @@ static u32 calculate_xoff(struct mlx5e_priv *priv, unsigned int mtu) · 129 unmodified lines
130130 int err;
131131
132132 err = mlx5e_port_linkspeed(priv->mdev, &speed);
133− if (err)
133+ if (err) {
134+ mlx5_core_warn(priv->mdev, "cannot get port speed\n");
134135 return 0;
136+ }
135137
136138 xoff = (301 + 216 * priv->dcbx.cable_len / 100) * speed / 1000 + 272 * mtu / 100;
137139
drivers/net/ethernet/mellanox/mlx5/core/en_ethtool.c+1−2
@@ -843,8 +843,7 @@ static int mlx5e_get_link_ksettings(struct net_device *netdev, · 842 unmodified lines
843843 ethtool_link_ksettings_add_link_mode(link_ksettings, supported,
844844 Autoneg);
845845
846− err = get_fec_supported_advertised(mdev, link_ksettings);
847− if (err)
846+ if (get_fec_supported_advertised(mdev, link_ksettings))
848847 netdev_dbg(netdev, "%s: FEC caps query failed: %d\n",
849848 __func__, err);
850849
drivers/net/ethernet/mellanox/mlx5/core/en_main.c+31−6
@@ -502,6 +502,7 @@ static int mlx5e_alloc_rq(struct mlx5e_channel *c, · 501 unmodified lines
502502 rq->channel = c;
503503 rq->ix = c->ix;
504504 rq->mdev = mdev;
505+ rq->hw_mtu = MLX5E_SW2HW_MTU(params, params->sw_mtu);
505506 rq->stats = &c->priv->channel_stats[c->ix].rq;
506507
507508 rq->xdp_prog = params->xdp_prog ? bpf_prog_inc(params->xdp_prog) : NULL;
@@ -1623,13 +1624,15 @@ static int mlx5e_alloc_cq_common(struct mlx5_core_dev *mdev, · 1115 unmodified lines
16231624 int err;
16241625 u32 i;
16251626
1627+ err = mlx5_vector2eqn(mdev, param->eq_ix, &eqn_not_used, &irqn);
1628+ if (err)
1629+ return err;
1630+
16261631 err = mlx5_cqwq_create(mdev, &param->wq, param->cqc, &cq->wq,
16271632 &cq->wq_ctrl);
16281633 if (err)
16291634 return err;
16301635
1631− mlx5_vector2eqn(mdev, param->eq_ix, &eqn_not_used, &irqn);
1632−
16331636 mcq->cqe_sz = 64;
16341637 mcq->set_ci_db = cq->wq_ctrl.db.db;
16351638 mcq->arm_db = cq->wq_ctrl.db.db + 1;
@@ -1687,6 +1690,10 @@ static int mlx5e_create_cq(struct mlx5e_cq *cq, struct mlx5e_cq_param *param) · 51 unmodified lines
16871690 int eqn;
16881691 int err;
16891692
1693+ err = mlx5_vector2eqn(mdev, param->eq_ix, &eqn, &irqn_not_used);
1694+ if (err)
1695+ return err;
1696+
16901697 inlen = MLX5_ST_SZ_BYTES(create_cq_in) +
16911698 sizeof(u64) * cq->wq_ctrl.buf.npages;
16921699 in = kvzalloc(inlen, GFP_KERNEL);
@@ -1700,8 +1707,6 @@ static int mlx5e_create_cq(struct mlx5e_cq *cq, struct mlx5e_cq_param *param) · 7 unmodified lines
17001707 mlx5_fill_page_frag_array(&cq->wq_ctrl.buf,
17011708 (__be64 *)MLX5_ADDR_OF(create_cq_in, in, pas));
17021709
1703− mlx5_vector2eqn(mdev, param->eq_ix, &eqn, &irqn_not_used);
1704−
17051710 MLX5_SET(cqc, cqc, cq_period_mode, param->cq_period_mode);
17061711 MLX5_SET(cqc, cqc, c_eqn, eqn);
17071712 MLX5_SET(cqc, cqc, uar_page, mdev->priv.uar->index);
@@ -1921,6 +1926,10 @@ static int mlx5e_open_channel(struct mlx5e_priv *priv, int ix, · 213 unmodified lines
19211926 int err;
19221927 int eqn;
19231928
1929+ err = mlx5_vector2eqn(priv->mdev, ix, &eqn, &irq);
1930+ if (err)
1931+ return err;
1932+
19241933 c = kvzalloc_node(sizeof(*c), GFP_KERNEL, cpu_to_node(cpu));
19251934 if (!c)
19261935 return -ENOMEM;
@@ -1937,7 +1946,6 @@ static int mlx5e_open_channel(struct mlx5e_priv *priv, int ix, · 10 unmodified lines
19371946 c->xdp = !!params->xdp_prog;
19381947 c->stats = &priv->channel_stats[ix].ch;
19391948
1940− mlx5_vector2eqn(priv->mdev, ix, &eqn, &irq);
19411949 c->irq_desc = irq_to_desc(irq);
19421950
19431951 netif_napi_add(netdev, &c->napi, mlx5e_napi_poll, 64);
@@ -3574,6 +3582,7 @@ static int set_feature_cvlan_filter(struct net_device *netdev, bool enable) · 1630 unmodified lines
35743582 return 0;
35753583 }
35763584
3585+#ifdef CONFIG_MLX5_ESWITCH
35773586 static int set_feature_tc_num_filters(struct net_device *netdev, bool enable)
35783587 {
35793588 struct mlx5e_priv *priv = netdev_priv(netdev);
@@ -3586,6 +3595,7 @@ static int set_feature_tc_num_filters(struct net_device *netdev, bool enable) · 6 unmodified lines
35863595
35873596 return 0;
35883597 }
3598+#endif
35893599
35903600 static int set_feature_rx_all(struct net_device *netdev, bool enable)
35913601 {
@@ -3684,7 +3694,9 @@ static int mlx5e_set_features(struct net_device *netdev, · 92 unmodified lines
36843694 err |= MLX5E_HANDLE_FEATURE(NETIF_F_LRO, set_feature_lro);
36853695 err |= MLX5E_HANDLE_FEATURE(NETIF_F_HW_VLAN_CTAG_FILTER,
36863696 set_feature_cvlan_filter);
3697+#ifdef CONFIG_MLX5_ESWITCH
36873698 err |= MLX5E_HANDLE_FEATURE(NETIF_F_HW_TC, set_feature_tc_num_filters);
3699+#endif
36883700 err |= MLX5E_HANDLE_FEATURE(NETIF_F_RXALL, set_feature_rx_all);
36893701 err |= MLX5E_HANDLE_FEATURE(NETIF_F_RXFCS, set_feature_rx_fcs);
36903702 err |= MLX5E_HANDLE_FEATURE(NETIF_F_HW_VLAN_CTAG_RX, set_feature_rx_vlan);
@@ -3755,10 +3767,11 @@ int mlx5e_change_mtu(struct net_device *netdev, int new_mtu, · 64 unmodified lines
37553767 }
37563768
37573769 if (params->rq_wq_type == MLX5_WQ_TYPE_LINKED_LIST_STRIDING_RQ) {
3770+ bool is_linear = mlx5e_rx_mpwqe_is_linear_skb(priv->mdev, &new_channels.params);
37583771 u8 ppw_old = mlx5e_mpwqe_log_pkts_per_wqe(params);
37593772 u8 ppw_new = mlx5e_mpwqe_log_pkts_per_wqe(&new_channels.params);
37603773
3761− reset = reset && (ppw_old != ppw_new);
3774+ reset = reset && (is_linear || (ppw_old != ppw_new));
37623775 }
37633776
37643777 if (!reset) {
@@ -4678,7 +4691,9 @@ static void mlx5e_build_nic_netdev(struct net_device *netdev) · 913 unmodified lines
46784691 FT_CAP(modify_root) &&
46794692 FT_CAP(identified_miss_table_mode) &&
46804693 FT_CAP(flow_table_modify)) {
4694+#ifdef CONFIG_MLX5_ESWITCH
46814695 netdev->hw_features |= NETIF_F_HW_TC;
4696+#endif
46824697 #ifdef CONFIG_MLX5_EN_ARFS
46834698 netdev->hw_features |= NETIF_F_NTUPLE;
46844699 #endif
@@ -5004,11 +5019,21 @@ err_free_netdev: · 319 unmodified lines
50045019 int mlx5e_attach_netdev(struct mlx5e_priv *priv)
50055020 {
50065021 const struct mlx5e_profile *profile;
5022+ int max_nch;
50075023 int err;
50085024
50095025 profile = priv->profile;
50105026 clear_bit(MLX5E_STATE_DESTROYING, &priv->state);
50115027
5028+ /* max number of channels may have changed */
5029+ max_nch = mlx5e_get_max_num_channels(priv->mdev);
5030+ if (priv->channels.params.num_channels > max_nch) {
5031+ mlx5_core_warn(priv->mdev, "MLX5E: Reducing number of channels to %d\n", max_nch);
5032+ priv->channels.params.num_channels = max_nch;
5033+ mlx5e_build_default_indir_rqt(priv->channels.params.indirection_rqt,
5034+ MLX5E_INDIR_RQT_SIZE, max_nch);
5035+ }
5036+
50125037 err = profile->init_tx(priv);
50135038 if (err)
50145039 goto out;
drivers/net/ethernet/mellanox/mlx5/core/en_rx.c+6−0
@@ -1104,6 +1104,12 @@ mlx5e_skb_from_cqe_mpwrq_linear(struct mlx5e_rq *rq, struct mlx5e_mpw_info *wi, · 1103 unmodified lines
11041104 u32 frag_size;
11051105 bool consumed;
11061106
1107+ /* Check packet size. Note LRO doesn't use linear SKB */
1108+ if (unlikely(cqe_bcnt > rq->hw_mtu)) {
1109+ rq->stats->oversize_pkts_sw_drop++;
1110+ return NULL;
1111+ }
1112+
11071113 va = page_address(di->page) + head_offset;
11081114 data = va + rx_headroom;
11091115 frag_size = MLX5_SKB_FRAG_SZ(rx_headroom + cqe_bcnt32);
drivers/net/ethernet/mellanox/mlx5/core/en_selftest.c+10−16
@@ -98,18 +98,17 @@ static int mlx5e_test_link_speed(struct mlx5e_priv *priv) · 97 unmodified lines
9898 return 1;
9999 }
100100
101−#ifdef CONFIG_INET
102−/* loopback test */
103−#define MLX5E_TEST_PKT_SIZE (MLX5E_RX_MAX_HEAD - NET_IP_ALIGN)
104−static const char mlx5e_test_text[ETH_GSTRING_LEN] = "MLX5E SELF TEST";
105−#define MLX5E_TEST_MAGIC 0x5AEED15C001ULL
106−
107101 struct mlx5ehdr {
108102 __be32 version;
109103 __be64 magic;
110− char text[ETH_GSTRING_LEN];
111104 };
112105
106+#ifdef CONFIG_INET
107+/* loopback test */
108+#define MLX5E_TEST_PKT_SIZE (sizeof(struct ethhdr) + sizeof(struct iphdr) +\
109+ sizeof(struct udphdr) + sizeof(struct mlx5ehdr))
110+#define MLX5E_TEST_MAGIC 0x5AEED15C001ULL
111+
113112 static struct sk_buff *mlx5e_test_get_udp_skb(struct mlx5e_priv *priv)
114113 {
115114 struct sk_buff *skb = NULL;
@@ -117,10 +116,7 @@ static struct sk_buff *mlx5e_test_get_udp_skb(struct mlx5e_priv *priv) · 1 unmodified line
117116 struct ethhdr *ethh;
118117 struct udphdr *udph;
119118 struct iphdr *iph;
120− int datalen, iplen;
121−
122− datalen = MLX5E_TEST_PKT_SIZE -
123− (sizeof(*ethh) + sizeof(*iph) + sizeof(*udph));
119+ int iplen;
124120
125121 skb = netdev_alloc_skb(priv->netdev, MLX5E_TEST_PKT_SIZE);
126122 if (!skb) {
@@ -149,7 +145,7 @@ static struct sk_buff *mlx5e_test_get_udp_skb(struct mlx5e_priv *priv) · 22 unmodified lines
149145 /* Fill UDP header */
150146 udph->source = htons(9);
151147 udph->dest = htons(9); /* Discard Protocol */
152− udph->len = htons(datalen + sizeof(struct udphdr));
148+ udph->len = htons(sizeof(struct mlx5ehdr) + sizeof(struct udphdr));
153149 udph->check = 0;
154150
155151 /* Fill IP header */
@@ -157,7 +153,8 @@ static struct sk_buff *mlx5e_test_get_udp_skb(struct mlx5e_priv *priv) · 1 unmodified line
157153 iph->ttl = 32;
158154 iph->version = 4;
159155 iph->protocol = IPPROTO_UDP;
160− iplen = sizeof(struct iphdr) + sizeof(struct udphdr) + datalen;
156+ iplen = sizeof(struct iphdr) + sizeof(struct udphdr) +
157+ sizeof(struct mlx5ehdr);
161158 iph->tot_len = htons(iplen);
162159 iph->frag_off = 0;
163160 iph->saddr = 0;
@@ -170,9 +167,6 @@ static struct sk_buff *mlx5e_test_get_udp_skb(struct mlx5e_priv *priv) · 6 unmodified lines
170167 mlxh = skb_put(skb, sizeof(*mlxh));
171168 mlxh->version = 0;
172169 mlxh->magic = cpu_to_be64(MLX5E_TEST_MAGIC);
173− strlcpy(mlxh->text, mlx5e_test_text, sizeof(mlxh->text));
174− datalen -= sizeof(*mlxh);
175− skb_put_zero(skb, datalen);
176170
177171 skb->csum = 0;
178172 skb->ip_summed = CHECKSUM_PARTIAL;
drivers/net/ethernet/mellanox/mlx5/core/en_stats.c+3−0
@@ -83,6 +83,7 @@ static const struct counter_desc sw_stats_desc[] = { · 82 unmodified lines
8383 { MLX5E_DECLARE_STAT(struct mlx5e_sw_stats, rx_wqe_err) },
8484 { MLX5E_DECLARE_STAT(struct mlx5e_sw_stats, rx_mpwqe_filler_cqes) },
8585 { MLX5E_DECLARE_STAT(struct mlx5e_sw_stats, rx_mpwqe_filler_strides) },
86+ { MLX5E_DECLARE_STAT(struct mlx5e_sw_stats, rx_oversize_pkts_sw_drop) },
8687 { MLX5E_DECLARE_STAT(struct mlx5e_sw_stats, rx_buff_alloc_err) },
8788 { MLX5E_DECLARE_STAT(struct mlx5e_sw_stats, rx_cqe_compress_blks) },
8889 { MLX5E_DECLARE_STAT(struct mlx5e_sw_stats, rx_cqe_compress_pkts) },
@@ -161,6 +162,7 @@ void mlx5e_grp_sw_update_stats(struct mlx5e_priv *priv) · 72 unmodified lines
161162 s->rx_wqe_err += rq_stats->wqe_err;
162163 s->rx_mpwqe_filler_cqes += rq_stats->mpwqe_filler_cqes;
163164 s->rx_mpwqe_filler_strides += rq_stats->mpwqe_filler_strides;
165+ s->rx_oversize_pkts_sw_drop += rq_stats->oversize_pkts_sw_drop;
164166 s->rx_buff_alloc_err += rq_stats->buff_alloc_err;
165167 s->rx_cqe_compress_blks += rq_stats->cqe_compress_blks;
166168 s->rx_cqe_compress_pkts += rq_stats->cqe_compress_pkts;
@@ -1189,6 +1191,7 @@ static const struct counter_desc rq_stats_desc[] = { · 1022 unmodified lines
11891191 { MLX5E_DECLARE_RX_STAT(struct mlx5e_rq_stats, wqe_err) },
11901192 { MLX5E_DECLARE_RX_STAT(struct mlx5e_rq_stats, mpwqe_filler_cqes) },
11911193 { MLX5E_DECLARE_RX_STAT(struct mlx5e_rq_stats, mpwqe_filler_strides) },
1194+ { MLX5E_DECLARE_RX_STAT(struct mlx5e_rq_stats, oversize_pkts_sw_drop) },
11921195 { MLX5E_DECLARE_RX_STAT(struct mlx5e_rq_stats, buff_alloc_err) },
11931196 { MLX5E_DECLARE_RX_STAT(struct mlx5e_rq_stats, cqe_compress_blks) },
11941197 { MLX5E_DECLARE_RX_STAT(struct mlx5e_rq_stats, cqe_compress_pkts) },
drivers/net/ethernet/mellanox/mlx5/core/en_stats.h+2−0
@@ -96,6 +96,7 @@ struct mlx5e_sw_stats { · 95 unmodified lines
9696 u64 rx_wqe_err;
9797 u64 rx_mpwqe_filler_cqes;
9898 u64 rx_mpwqe_filler_strides;
99+ u64 rx_oversize_pkts_sw_drop;
99100 u64 rx_buff_alloc_err;
100101 u64 rx_cqe_compress_blks;
101102 u64 rx_cqe_compress_pkts;
@@ -193,6 +194,7 @@ struct mlx5e_rq_stats { · 91 unmodified lines
193194 u64 wqe_err;
194195 u64 mpwqe_filler_cqes;
195196 u64 mpwqe_filler_strides;
197+ u64 oversize_pkts_sw_drop;
196198 u64 buff_alloc_err;
197199 u64 cqe_compress_blks;
198200 u64 cqe_compress_pkts;
drivers/net/ethernet/mellanox/mlx5/core/en_tc.c+35−34
@@ -1447,31 +1447,21 @@ static int __parse_cls_flower(struct mlx5e_priv *priv, · 1446 unmodified lines
14471447 inner_headers);
14481448 }
14491449
1450− if (dissector_uses_key(f->dissector, FLOW_DISSECTOR_KEY_ETH_ADDRS)) {
1451− struct flow_dissector_key_eth_addrs *key =
1450+ if (dissector_uses_key(f->dissector, FLOW_DISSECTOR_KEY_BASIC)) {
1451+ struct flow_dissector_key_basic *key =
14521452 skb_flow_dissector_target(f->dissector,
1453− FLOW_DISSECTOR_KEY_ETH_ADDRS,
1453+ FLOW_DISSECTOR_KEY_BASIC,
14541454 f->key);
1455− struct flow_dissector_key_eth_addrs *mask =
1455+ struct flow_dissector_key_basic *mask =
14561456 skb_flow_dissector_target(f->dissector,
1457− FLOW_DISSECTOR_KEY_ETH_ADDRS,
1457+ FLOW_DISSECTOR_KEY_BASIC,
14581458 f->mask);
1459+ MLX5_SET(fte_match_set_lyr_2_4, headers_c, ethertype,
1460+ ntohs(mask->n_proto));
1461+ MLX5_SET(fte_match_set_lyr_2_4, headers_v, ethertype,
1462+ ntohs(key->n_proto));
14591463
1460− ether_addr_copy(MLX5_ADDR_OF(fte_match_set_lyr_2_4, headers_c,
1461− dmac_47_16),
1462− mask->dst);
1463− ether_addr_copy(MLX5_ADDR_OF(fte_match_set_lyr_2_4, headers_v,
1464− dmac_47_16),
1465− key->dst);
1466−
1467− ether_addr_copy(MLX5_ADDR_OF(fte_match_set_lyr_2_4, headers_c,
1468− smac_47_16),
1469− mask->src);
1470− ether_addr_copy(MLX5_ADDR_OF(fte_match_set_lyr_2_4, headers_v,
1471− smac_47_16),
1472− key->src);
1473−
1474− if (!is_zero_ether_addr(mask->src) || !is_zero_ether_addr(mask->dst))
1464+ if (mask->n_proto)
14751465 *match_level = MLX5_MATCH_L2;
14761466 }
14771467
@@ -1505,9 +1495,10 @@ static int __parse_cls_flower(struct mlx5e_priv *priv, · 27 unmodified lines
15051495
15061496 *match_level = MLX5_MATCH_L2;
15071497 }
1508− } else {
1498+ } else if (*match_level != MLX5_MATCH_NONE) {
15091499 MLX5_SET(fte_match_set_lyr_2_4, headers_c, svlan_tag, 1);
15101500 MLX5_SET(fte_match_set_lyr_2_4, headers_c, cvlan_tag, 1);
1501+ *match_level = MLX5_MATCH_L2;
15111502 }
15121503
15131504 if (dissector_uses_key(f->dissector, FLOW_DISSECTOR_KEY_CVLAN)) {
@@ -1545,21 +1536,31 @@ static int __parse_cls_flower(struct mlx5e_priv *priv, · 31 unmodified lines
15451536 }
15461537 }
15471538
1548− if (dissector_uses_key(f->dissector, FLOW_DISSECTOR_KEY_BASIC)) {
1549− struct flow_dissector_key_basic *key =
1539+ if (dissector_uses_key(f->dissector, FLOW_DISSECTOR_KEY_ETH_ADDRS)) {
1540+ struct flow_dissector_key_eth_addrs *key =
15501541 skb_flow_dissector_target(f->dissector,
1551− FLOW_DISSECTOR_KEY_BASIC,
1542+ FLOW_DISSECTOR_KEY_ETH_ADDRS,
15521543 f->key);
1553− struct flow_dissector_key_basic *mask =
1544+ struct flow_dissector_key_eth_addrs *mask =
15541545 skb_flow_dissector_target(f->dissector,
1555− FLOW_DISSECTOR_KEY_BASIC,
1546+ FLOW_DISSECTOR_KEY_ETH_ADDRS,
15561547 f->mask);
1557− MLX5_SET(fte_match_set_lyr_2_4, headers_c, ethertype,
1558− ntohs(mask->n_proto));
1559− MLX5_SET(fte_match_set_lyr_2_4, headers_v, ethertype,
1560− ntohs(key->n_proto));
15611548
1562− if (mask->n_proto)
1549+ ether_addr_copy(MLX5_ADDR_OF(fte_match_set_lyr_2_4, headers_c,
1550+ dmac_47_16),
1551+ mask->dst);
1552+ ether_addr_copy(MLX5_ADDR_OF(fte_match_set_lyr_2_4, headers_v,
1553+ dmac_47_16),
1554+ key->dst);
1555+
1556+ ether_addr_copy(MLX5_ADDR_OF(fte_match_set_lyr_2_4, headers_c,
1557+ smac_47_16),
1558+ mask->src);
1559+ ether_addr_copy(MLX5_ADDR_OF(fte_match_set_lyr_2_4, headers_v,
1560+ smac_47_16),
1561+ key->src);
1562+
1563+ if (!is_zero_ether_addr(mask->src) || !is_zero_ether_addr(mask->dst))
15631564 *match_level = MLX5_MATCH_L2;
15641565 }
15651566
@@ -1586,10 +1587,10 @@ static int __parse_cls_flower(struct mlx5e_priv *priv, · 20 unmodified lines
15861587
15871588 /* the HW doesn't need L3 inline to match on frag=no */
15881589 if (!(key->flags & FLOW_DIS_IS_FRAGMENT))
1589− *match_level = MLX5_INLINE_MODE_L2;
1590+ *match_level = MLX5_MATCH_L2;
15901591 /* *** L2 attributes parsing up to here *** */
15911592 else
1592− *match_level = MLX5_INLINE_MODE_IP;
1593+ *match_level = MLX5_MATCH_L3;
15931594 }
15941595 }
15951596
@@ -2979,7 +2980,7 @@ static int parse_tc_fdb_actions(struct mlx5e_priv *priv, struct tcf_exts *exts, · 1383 unmodified lines
29792980 if (!actions_match_supported(priv, exts, parse_attr, flow, extack))
29802981 return -EOPNOTSUPP;
29812982
2982− if (attr->out_count > 1 && !mlx5_esw_has_fwd_fdb(priv->mdev)) {
2983+ if (attr->mirror_count > 0 && !mlx5_esw_has_fwd_fdb(priv->mdev)) {
29832984 NL_SET_ERR_MSG_MOD(extack,
29842985 "current firmware doesn't support split rule for port mirroring");
29852986 netdev_warn_once(priv->netdev, "current firmware doesn't support split rule for port mirroring\n");
drivers/net/ethernet/mellanox/mlx5/core/fpga/ipsec.c+8−2
@@ -83,8 +83,14 @@ struct mlx5_fpga_ipsec_rule { · 82 unmodified lines
8383 };
8484
8585 static const struct rhashtable_params rhash_sa = {
86− .key_len = FIELD_SIZEOF(struct mlx5_fpga_ipsec_sa_ctx, hw_sa),
87− .key_offset = offsetof(struct mlx5_fpga_ipsec_sa_ctx, hw_sa),
86+ /* Keep out "cmd" field from the key as it's
87+ * value is not constant during the lifetime
88+ * of the key object.
89+ */
90+ .key_len = FIELD_SIZEOF(struct mlx5_fpga_ipsec_sa_ctx, hw_sa) -
91+ FIELD_SIZEOF(struct mlx5_ifc_fpga_ipsec_sa_v1, cmd),
92+ .key_offset = offsetof(struct mlx5_fpga_ipsec_sa_ctx, hw_sa) +
93+ FIELD_SIZEOF(struct mlx5_ifc_fpga_ipsec_sa_v1, cmd),
8894 .head_offset = offsetof(struct mlx5_fpga_ipsec_sa_ctx, hash),
8995 .automatic_shrinking = true,
9096 .min_size = 1,
drivers/net/ethernet/mellanox/mlx5/core/ipoib/ipoib.c+1−1
@@ -560,9 +560,9 @@ static int mlx5i_close(struct net_device *netdev) · 559 unmodified lines
560560
561561 netif_carrier_off(epriv->netdev);
562562 mlx5_fs_remove_rx_underlay_qpn(mdev, ipriv->qp.qpn);
563− mlx5i_uninit_underlay_qp(epriv);
564563 mlx5e_deactivate_priv_channels(epriv);
565564 mlx5e_close_channels(&epriv->channels);
565+ mlx5i_uninit_underlay_qp(epriv);
566566 unlock:
567567 mutex_unlock(&epriv->state_lock);
568568 return 0;
drivers/net/ethernet/qlogic/qed/qed_dev.c+24−5
@@ -485,8 +485,16 @@ static u16 *qed_init_qm_get_idx_from_flags(struct qed_hwfn *p_hwfn, · 484 unmodified lines
485485 struct qed_qm_info *qm_info = &p_hwfn->qm_info;
486486
487487 /* Can't have multiple flags set here */
488− if (bitmap_weight((unsigned long *)&pq_flags, sizeof(pq_flags)) > 1)
488+ if (bitmap_weight((unsigned long *)&pq_flags,
489+ sizeof(pq_flags) * BITS_PER_BYTE) > 1) {
490+ DP_ERR(p_hwfn, "requested multiple pq flags 0x%x\n", pq_flags);
489491 goto err;
492+ }
493+
494+ if (!(qed_get_pq_flags(p_hwfn) & pq_flags)) {
495+ DP_ERR(p_hwfn, "pq flag 0x%x is not set\n", pq_flags);
496+ goto err;
497+ }
490498
491499 switch (pq_flags) {
492500 case PQ_FLAGS_RLS:
@@ -510,8 +518,7 @@ static u16 *qed_init_qm_get_idx_from_flags(struct qed_hwfn *p_hwfn, · 17 unmodified lines
510518 }
511519
512520 err:
513− DP_ERR(p_hwfn, "BAD pq flags %d\n", pq_flags);
514− return NULL;
521+ return &qm_info->start_pq;
515522 }
516523
517524 /* save pq index in qm info */
@@ -535,20 +542,32 @@ u16 qed_get_cm_pq_idx_mcos(struct qed_hwfn *p_hwfn, u8 tc) · 17 unmodified lines
535542 {
536543 u8 max_tc = qed_init_qm_get_num_tcs(p_hwfn);
537544
545+ if (max_tc == 0) {
546+ DP_ERR(p_hwfn, "pq with flag 0x%lx do not exist\n",
547+ PQ_FLAGS_MCOS);
548+ return p_hwfn->qm_info.start_pq;
549+ }
550+
538551 if (tc > max_tc)
539552 DP_ERR(p_hwfn, "tc %d must be smaller than %d\n", tc, max_tc);
540553
541− return qed_get_cm_pq_idx(p_hwfn, PQ_FLAGS_MCOS) + tc;
554+ return qed_get_cm_pq_idx(p_hwfn, PQ_FLAGS_MCOS) + (tc % max_tc);
542555 }
543556
544557 u16 qed_get_cm_pq_idx_vf(struct qed_hwfn *p_hwfn, u16 vf)
545558 {
546559 u16 max_vf = qed_init_qm_get_num_vfs(p_hwfn);
547560
561+ if (max_vf == 0) {
562+ DP_ERR(p_hwfn, "pq with flag 0x%lx do not exist\n",
563+ PQ_FLAGS_VFS);
564+ return p_hwfn->qm_info.start_pq;
565+ }
566+
548567 if (vf > max_vf)
549568 DP_ERR(p_hwfn, "vf %d must be smaller than %d\n", vf, max_vf);
550569
551− return qed_get_cm_pq_idx(p_hwfn, PQ_FLAGS_VFS) + vf;
570+ return qed_get_cm_pq_idx(p_hwfn, PQ_FLAGS_VFS) + (vf % max_vf);
552571 }
553572
554573 u16 qed_get_cm_pq_idx_ofld_mtc(struct qed_hwfn *p_hwfn, u8 tc)
drivers/net/phy/mscc.c+5−9
@@ -810,17 +810,13 @@ static int vsc85xx_default_config(struct phy_device *phydev) · 809 unmodified lines
810810
811811 phydev->mdix_ctrl = ETH_TP_MDI_AUTO;
812812 mutex_lock(&phydev->lock);
813− rc = phy_select_page(phydev, MSCC_PHY_PAGE_EXTENDED_2);
814− if (rc < 0)
815− goto out_unlock;
816813
817− reg_val = phy_read(phydev, MSCC_PHY_RGMII_CNTL);
818− reg_val &= ~(RGMII_RX_CLK_DELAY_MASK);
819− reg_val |= (RGMII_RX_CLK_DELAY_1_1_NS << RGMII_RX_CLK_DELAY_POS);
820− phy_write(phydev, MSCC_PHY_RGMII_CNTL, reg_val);
814+ reg_val = RGMII_RX_CLK_DELAY_1_1_NS << RGMII_RX_CLK_DELAY_POS;
815+
816+ rc = phy_modify_paged(phydev, MSCC_PHY_PAGE_EXTENDED_2,
817+ MSCC_PHY_RGMII_CNTL, RGMII_RX_CLK_DELAY_MASK,
818+ reg_val);
821819
822−out_unlock:
823− rc = phy_restore_page(phydev, rc, rc > 0 ? 0 : rc);
824820 mutex_unlock(&phydev->lock);
825821
826822 return rc;
drivers/net/team/team.c+0−2
@@ -985,8 +985,6 @@ static void team_port_disable(struct team *team, · 984 unmodified lines
985985 team->en_port_count--;
986986 team_queue_override_port_del(team, port);
987987 team_adjust_ops(team);
988− team_notify_peers(team);
989− team_mcast_rejoin(team);
990988 team_lower_state_changed(port);
991989 }
992990
drivers/net/virtio_net.c+5−8
@@ -70,7 +70,8 @@ static const unsigned long guest_offloads[] = { · 69 unmodified lines
7070 VIRTIO_NET_F_GUEST_TSO4,
7171 VIRTIO_NET_F_GUEST_TSO6,
7272 VIRTIO_NET_F_GUEST_ECN,
73− VIRTIO_NET_F_GUEST_UFO
73+ VIRTIO_NET_F_GUEST_UFO,
74+ VIRTIO_NET_F_GUEST_CSUM
7475 };
7576
7677 struct virtnet_stat_desc {
@@ -2334,9 +2335,6 @@ static int virtnet_clear_guest_offloads(struct virtnet_info *vi) · 2257 unmodified lines
23342335 if (!vi->guest_offloads)
23352336 return 0;
23362337
2337− if (virtio_has_feature(vi->vdev, VIRTIO_NET_F_GUEST_CSUM))
2338− offloads = 1ULL << VIRTIO_NET_F_GUEST_CSUM;
2339−
23402338 return virtnet_set_guest_offloads(vi, offloads);
23412339 }
23422340
@@ -2346,8 +2344,6 @@ static int virtnet_restore_guest_offloads(struct virtnet_info *vi) · 3 unmodified lines
23462344
23472345 if (!vi->guest_offloads)
23482346 return 0;
2349− if (virtio_has_feature(vi->vdev, VIRTIO_NET_F_GUEST_CSUM))
2350− offloads |= 1ULL << VIRTIO_NET_F_GUEST_CSUM;
23512347
23522348 return virtnet_set_guest_offloads(vi, offloads);
23532349 }
@@ -2365,8 +2361,9 @@ static int virtnet_xdp_set(struct net_device *dev, struct bpf_prog *prog, · 11 unmodified lines
23652361 && (virtio_has_feature(vi->vdev, VIRTIO_NET_F_GUEST_TSO4) ||
23662362 virtio_has_feature(vi->vdev, VIRTIO_NET_F_GUEST_TSO6) ||
23672363 virtio_has_feature(vi->vdev, VIRTIO_NET_F_GUEST_ECN) ||
2368− virtio_has_feature(vi->vdev, VIRTIO_NET_F_GUEST_UFO))) {
2369− NL_SET_ERR_MSG_MOD(extack, "Can't set XDP while host is implementing LRO, disable LRO first");
2364+ virtio_has_feature(vi->vdev, VIRTIO_NET_F_GUEST_UFO) ||
2365+ virtio_has_feature(vi->vdev, VIRTIO_NET_F_GUEST_CSUM))) {
2366+ NL_SET_ERR_MSG_MOD(extack, "Can't set XDP while host is implementing LRO/CSUM, disable LRO/CSUM first");
23702367 return -EOPNOTSUPP;
23712368 }
23722369
drivers/net/wireless/ath/ath10k/mac.c+1−1
@@ -6867,7 +6867,7 @@ static void ath10k_flush(struct ieee80211_hw *hw, struct ieee80211_vif *vif, · 6866 unmodified lines
68676867 u32 bitmap;
68686868
68696869 if (drop) {
6870− if (vif->type == NL80211_IFTYPE_STATION) {
6870+ if (vif && vif->type == NL80211_IFTYPE_STATION) {
68716871 bitmap = ~(1 << WMI_MGMT_TID);
68726872 list_for_each_entry(arvif, &ar->arvifs, list) {
68736873 if (arvif->vdev_type == WMI_VDEV_TYPE_STA)
drivers/net/wireless/ath/ath9k/main.c+1−2
@@ -1251,6 +1251,7 @@ static int ath9k_add_interface(struct ieee80211_hw *hw, · 1250 unmodified lines
12511251 struct ath_vif *avp = (void *)vif->drv_priv;
12521252 struct ath_node *an = &avp->mcast_node;
12531253
1254+ mutex_lock(&sc->mutex);
12541255 if (IS_ENABLED(CONFIG_ATH9K_TX99)) {
12551256 if (sc->cur_chan->nvifs >= 1) {
12561257 mutex_unlock(&sc->mutex);
@@ -1259,8 +1260,6 @@ static int ath9k_add_interface(struct ieee80211_hw *hw, · 2 unmodified lines
12591260 sc->tx99_vif = vif;
12601261 }
12611262
1262− mutex_lock(&sc->mutex);
1263−
12641263 ath_dbg(common, CONFIG, "Attach a VIF of type: %d\n", vif->type);
12651264 sc->cur_chan->nvifs++;
12661265
drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c+2−1
@@ -6005,7 +6005,8 @@ static int brcmf_construct_chaninfo(struct brcmf_cfg80211_info *cfg, · 6004 unmodified lines
60056005 * for subsequent chanspecs.
60066006 */
60076007 channel->flags = IEEE80211_CHAN_NO_HT40 |
6008− IEEE80211_CHAN_NO_80MHZ;
6008+ IEEE80211_CHAN_NO_80MHZ |
6009+ IEEE80211_CHAN_NO_160MHZ;
60096010 ch.bw = BRCMU_CHAN_BW_20;
60106011 cfg->d11inf.encchspec(&ch);
60116012 chaninfo = ch.chspec;
drivers/net/wireless/broadcom/brcm80211/brcmutil/d11.c+3−0
@@ -193,6 +193,9 @@ static void brcmu_d11ac_decchspec(struct brcmu_chan *ch) · 192 unmodified lines
193193 }
194194 break;
195195 case BRCMU_CHSPEC_D11AC_BW_160:
196+ ch->bw = BRCMU_CHAN_BW_160;
197+ ch->sb = brcmu_maskget16(ch->chspec, BRCMU_CHSPEC_D11AC_SB_MASK,
198+ BRCMU_CHSPEC_D11AC_SB_SHIFT);
196199 switch (ch->sb) {
197200 case BRCMU_CHAN_SB_LLL:
198201 ch->control_ch_num -= CH_70MHZ_APART;
drivers/net/wireless/intel/iwlwifi/fw/acpi.h+3−1
@@ -6,6 +6,7 @@ · 5 unmodified lines
66 * GPL LICENSE SUMMARY
77 *
88 * Copyright(c) 2017 Intel Deutschland GmbH
9+ * Copyright(c) 2018 Intel Corporation
910 *
1011 * This program is free software; you can redistribute it and/or modify
1112 * it under the terms of version 2 of the GNU General Public License as
@@ -26,6 +27,7 @@ · 14 unmodified lines
2627 * BSD LICENSE
2728 *
2829 * Copyright(c) 2017 Intel Deutschland GmbH
30+ * Copyright(c) 2018 Intel Corporation
2931 * All rights reserved.
3032 *
3133 * Redistribution and use in source and binary forms, with or without
@@ -81,7 +83,7 @@ · 49 unmodified lines
8183 #define ACPI_WRDS_WIFI_DATA_SIZE (ACPI_SAR_TABLE_SIZE + 2)
8284 #define ACPI_EWRD_WIFI_DATA_SIZE ((ACPI_SAR_PROFILE_NUM - 1) * \
8385 ACPI_SAR_TABLE_SIZE + 3)
84−#define ACPI_WGDS_WIFI_DATA_SIZE 18
86+#define ACPI_WGDS_WIFI_DATA_SIZE 19
8587 #define ACPI_WRDD_WIFI_DATA_SIZE 2
8688 #define ACPI_SPLC_WIFI_DATA_SIZE 2
8789
drivers/net/wireless/intel/iwlwifi/fw/runtime.h+5−1
@@ -154,7 +154,11 @@ void iwl_fw_runtime_init(struct iwl_fw_runtime *fwrt, struct iwl_trans *trans, · 153 unmodified lines
154154 const struct iwl_fw_runtime_ops *ops, void *ops_ctx,
155155 struct dentry *dbgfs_dir);
156156
157−void iwl_fw_runtime_exit(struct iwl_fw_runtime *fwrt);
157+static inline void iwl_fw_runtime_free(struct iwl_fw_runtime *fwrt)
158+{
159+ kfree(fwrt->dump.d3_debug_data);
160+ fwrt->dump.d3_debug_data = NULL;
161+}
158162
159163 void iwl_fw_runtime_suspend(struct iwl_fw_runtime *fwrt);
160164
drivers/net/wireless/intel/iwlwifi/mvm/fw.c+29−9
@@ -893,7 +893,7 @@ static int iwl_mvm_sar_geo_init(struct iwl_mvm *mvm) · 892 unmodified lines
893893 IWL_DEBUG_RADIO(mvm, "Sending GEO_TX_POWER_LIMIT\n");
894894
895895 BUILD_BUG_ON(ACPI_NUM_GEO_PROFILES * ACPI_WGDS_NUM_BANDS *
896− ACPI_WGDS_TABLE_SIZE != ACPI_WGDS_WIFI_DATA_SIZE);
896+ ACPI_WGDS_TABLE_SIZE + 1 != ACPI_WGDS_WIFI_DATA_SIZE);
897897
898898 BUILD_BUG_ON(ACPI_NUM_GEO_PROFILES > IWL_NUM_GEO_PROFILES);
899899
@@ -928,6 +928,11 @@ static int iwl_mvm_sar_get_ewrd_table(struct iwl_mvm *mvm) · 28 unmodified lines
928928 return -ENOENT;
929929 }
930930
931+static int iwl_mvm_sar_get_wgds_table(struct iwl_mvm *mvm)
932+{
933+ return -ENOENT;
934+}
935+
931936 static int iwl_mvm_sar_geo_init(struct iwl_mvm *mvm)
932937 {
933938 return 0;
@@ -954,8 +959,11 @@ static int iwl_mvm_sar_init(struct iwl_mvm *mvm) · 20 unmodified lines
954959 IWL_DEBUG_RADIO(mvm,
955960 "WRDS SAR BIOS table invalid or unavailable. (%d)\n",
956961 ret);
957− /* if not available, don't fail and don't bother with EWRD */
958− return 0;
962+ /*
963+ * If not available, don't fail and don't bother with EWRD.
964+ * Return 1 to tell that we can't use WGDS either.
965+ */
966+ return 1;
959967 }
960968
961969 ret = iwl_mvm_sar_get_ewrd_table(mvm);
@@ -968,9 +976,13 @@ static int iwl_mvm_sar_init(struct iwl_mvm *mvm) · 6 unmodified lines
968976 /* choose profile 1 (WRDS) as default for both chains */
969977 ret = iwl_mvm_sar_select_profile(mvm, 1, 1);
970978
971− /* if we don't have profile 0 from BIOS, just skip it */
979+ /*
980+ * If we don't have profile 0 from BIOS, just skip it. This
981+ * means that SAR Geo will not be enabled either, even if we
982+ * have other valid profiles.
983+ */
972984 if (ret == -ENOENT)
973− return 0;
985+ return 1;
974986
975987 return ret;
976988 }
@@ -1168,11 +1180,19 @@ int iwl_mvm_up(struct iwl_mvm *mvm) · 191 unmodified lines
11681180 iwl_mvm_unref(mvm, IWL_MVM_REF_UCODE_DOWN);
11691181
11701182 ret = iwl_mvm_sar_init(mvm);
1171− if (ret)
1172− goto error;
1183+ if (ret == 0) {
1184+ ret = iwl_mvm_sar_geo_init(mvm);
1185+ } else if (ret > 0 && !iwl_mvm_sar_get_wgds_table(mvm)) {
1186+ /*
1187+ * If basic SAR is not available, we check for WGDS,
1188+ * which should *not* be available either. If it is
1189+ * available, issue an error, because we can't use SAR
1190+ * Geo without basic SAR.
1191+ */
1192+ IWL_ERR(mvm, "BIOS contains WGDS but no WRDS\n");
1193+ }
11731194
1174− ret = iwl_mvm_sar_geo_init(mvm);
1175− if (ret)
1195+ if (ret < 0)
11761196 goto error;
11771197
11781198 iwl_mvm_leds_sync(mvm);
drivers/net/wireless/intel/iwlwifi/mvm/mac80211.c+6−6
@@ -301,8 +301,12 @@ struct ieee80211_regdomain *iwl_mvm_get_regdomain(struct wiphy *wiphy, · 300 unmodified lines
301301 goto out;
302302 }
303303
304− if (changed)
305− *changed = (resp->status == MCC_RESP_NEW_CHAN_PROFILE);
304+ if (changed) {
305+ u32 status = le32_to_cpu(resp->status);
306+
307+ *changed = (status == MCC_RESP_NEW_CHAN_PROFILE ||
308+ status == MCC_RESP_ILLEGAL);
309+ }
306310
307311 regd = iwl_parse_nvm_mcc_info(mvm->trans->dev, mvm->cfg,
308312 __le32_to_cpu(resp->n_channels),
@@ -4444,10 +4448,6 @@ static void iwl_mvm_mac_sta_statistics(struct ieee80211_hw *hw, · 4135 unmodified lines
44444448 sinfo->filled |= BIT_ULL(NL80211_STA_INFO_SIGNAL_AVG);
44454449 }
44464450
4447− if (!fw_has_capa(&mvm->fw->ucode_capa,
4448− IWL_UCODE_TLV_CAPA_RADIO_BEACON_STATS))
4449− return;
4450−
44514451 /* if beacon filtering isn't on mac80211 does it anyway */
44524452 if (!(vif->driver_flags & IEEE80211_VIF_BEACON_FILTER))
44534453 return;
drivers/net/wireless/intel/iwlwifi/mvm/nvm.c+2−3
@@ -539,9 +539,8 @@ iwl_mvm_update_mcc(struct iwl_mvm *mvm, const char *alpha2, · 538 unmodified lines
539539 }
540540
541541 IWL_DEBUG_LAR(mvm,
542− "MCC response status: 0x%x. new MCC: 0x%x ('%c%c') change: %d n_chans: %d\n",
543− status, mcc, mcc >> 8, mcc & 0xff,
544− !!(status == MCC_RESP_NEW_CHAN_PROFILE), n_channels);
542+ "MCC response status: 0x%x. new MCC: 0x%x ('%c%c') n_chans: %d\n",
543+ status, mcc, mcc >> 8, mcc & 0xff, n_channels);
545544
546545 exit:
547546 iwl_free_resp(&cmd);
drivers/net/wireless/intel/iwlwifi/mvm/ops.c+2−0
@@ -858,6 +858,7 @@ iwl_op_mode_mvm_start(struct iwl_trans *trans, const struct iwl_cfg *cfg, · 857 unmodified lines
858858 iwl_mvm_thermal_exit(mvm);
859859 out_free:
860860 iwl_fw_flush_dump(&mvm->fwrt);
861+ iwl_fw_runtime_free(&mvm->fwrt);
861862
862863 if (iwlmvm_mod_params.init_dbg)
863864 return op_mode;
@@ -910,6 +911,7 @@ static void iwl_op_mode_mvm_stop(struct iwl_op_mode *op_mode) · 46 unmodified lines
910911
911912 iwl_mvm_tof_clean(mvm);
912913
914+ iwl_fw_runtime_free(&mvm->fwrt);
913915 mutex_destroy(&mvm->mutex);
914916 mutex_destroy(&mvm->d0i3_suspend_mutex);
915917
drivers/net/wireless/mediatek/mt76/Kconfig+6−0
@@ -1,6 +1,12 @@
11 config MT76_CORE
22 tristate
33
4+config MT76_LEDS
5+ bool
6+ depends on MT76_CORE
7+ depends on LEDS_CLASS=y || MT76_CORE=LEDS_CLASS
8+ default y
9+
410 config MT76_USB
511 tristate
612 depends on MT76_CORE
drivers/net/wireless/mediatek/mt76/mac80211.c+5−3
@@ -345,9 +345,11 @@ int mt76_register_device(struct mt76_dev *dev, bool vht, · 344 unmodified lines
345345 mt76_check_sband(dev, NL80211_BAND_2GHZ);
346346 mt76_check_sband(dev, NL80211_BAND_5GHZ);
347347
348− ret = mt76_led_init(dev);
349− if (ret)
350− return ret;
348+ if (IS_ENABLED(CONFIG_MT76_LEDS)) {
349+ ret = mt76_led_init(dev);
350+ if (ret)
351+ return ret;
352+ }
351353
352354 return ieee80211_register_hw(hw);
353355 }
drivers/net/wireless/mediatek/mt76/mt76x02.h+0−1
@@ -71,7 +71,6 @@ struct mt76x02_dev { · 70 unmodified lines
7171 struct mac_address macaddr_list[8];
7272
7373 struct mutex phy_mutex;
74− struct mutex mutex;
7574
7675 u8 txdone_seq;
7776 DECLARE_KFIFO_PTR(txstatus_fifo, struct mt76x02_tx_status);
drivers/net/wireless/mediatek/mt76/mt76x2/pci_init.c+4−2
@@ -507,8 +507,10 @@ int mt76x2_register_device(struct mt76x02_dev *dev) · 506 unmodified lines
507507 mt76x2_dfs_init_detector(dev);
508508
509509 /* init led callbacks */
510− dev->mt76.led_cdev.brightness_set = mt76x2_led_set_brightness;
511− dev->mt76.led_cdev.blink_set = mt76x2_led_set_blink;
510+ if (IS_ENABLED(CONFIG_MT76_LEDS)) {
511+ dev->mt76.led_cdev.brightness_set = mt76x2_led_set_brightness;
512+ dev->mt76.led_cdev.blink_set = mt76x2_led_set_blink;
513+ }
512514
513515 ret = mt76_register_device(&dev->mt76, true, mt76x02_rates,
514516 ARRAY_SIZE(mt76x02_rates));
drivers/net/wireless/mediatek/mt76/mt76x2/pci_main.c+2−2
@@ -272,9 +272,9 @@ mt76x2_set_rts_threshold(struct ieee80211_hw *hw, u32 val) · 271 unmodified lines
272272 if (val != ~0 && val > 0xffff)
273273 return -EINVAL;
274274
275− mutex_lock(&dev->mutex);
275+ mutex_lock(&dev->mt76.mutex);
276276 mt76x2_mac_set_tx_protection(dev, val);
277− mutex_unlock(&dev->mutex);
277+ mutex_unlock(&dev->mt76.mutex);
278278
279279 return 0;
280280 }
drivers/net/wireless/ti/wlcore/sdio.c+11−6
@@ -285,7 +285,7 @@ static int wl1271_probe(struct sdio_func *func, · 284 unmodified lines
285285 struct resource res[2];
286286 mmc_pm_flag_t mmcflags;
287287 int ret = -ENOMEM;
288− int irq, wakeirq;
288+ int irq, wakeirq, num_irqs;
289289 const char *chip_family;
290290
291291 /* We are only able to handle the wlan function */
@@ -353,12 +353,17 @@ static int wl1271_probe(struct sdio_func *func, · 61 unmodified lines
353353 irqd_get_trigger_type(irq_get_irq_data(irq));
354354 res[0].name = "irq";
355355
356− res[1].start = wakeirq;
357− res[1].flags = IORESOURCE_IRQ |
358− irqd_get_trigger_type(irq_get_irq_data(wakeirq));
359− res[1].name = "wakeirq";
360356
361− ret = platform_device_add_resources(glue->core, res, ARRAY_SIZE(res));
357+ if (wakeirq > 0) {
358+ res[1].start = wakeirq;
359+ res[1].flags = IORESOURCE_IRQ |
360+ irqd_get_trigger_type(irq_get_irq_data(wakeirq));
361+ res[1].name = "wakeirq";
362+ num_irqs = 2;
363+ } else {
364+ num_irqs = 1;
365+ }
366+ ret = platform_device_add_resources(glue->core, res, num_irqs);
362367 if (ret) {
363368 dev_err(glue->dev, "can't add resources\n");
364369 goto out_dev_put;
drivers/nvme/host/fc.c+63−10
@@ -152,6 +152,7 @@ struct nvme_fc_ctrl { · 151 unmodified lines
152152
153153 bool ioq_live;
154154 bool assoc_active;
155+ atomic_t err_work_active;
155156 u64 association_id;
156157
157158 struct list_head ctrl_list; /* rport->ctrl_list */
@@ -160,6 +161,7 @@ struct nvme_fc_ctrl { · 2 unmodified lines
160161 struct blk_mq_tag_set tag_set;
161162
162163 struct delayed_work connect_work;
164+ struct work_struct err_work;
163165
164166 struct kref ref;
165167 u32 flags;
@@ -1531,6 +1533,10 @@ nvme_fc_abort_aen_ops(struct nvme_fc_ctrl *ctrl) · 1365 unmodified lines
15311533 struct nvme_fc_fcp_op *aen_op = ctrl->aen_ops;
15321534 int i;
15331535
1536+ /* ensure we've initialized the ops once */
1537+ if (!(aen_op->flags & FCOP_FLAGS_AEN))
1538+ return;
1539+
15341540 for (i = 0; i < NVME_NR_AEN_COMMANDS; i++, aen_op++)
15351541 __nvme_fc_abort_op(ctrl, aen_op);
15361542 }
@@ -2049,7 +2055,25 @@ nvme_fc_nvme_ctrl_freed(struct nvme_ctrl *nctrl) · 512 unmodified lines
20492055 static void
20502056 nvme_fc_error_recovery(struct nvme_fc_ctrl *ctrl, char *errmsg)
20512057 {
2052− /* only proceed if in LIVE state - e.g. on first error */
2058+ int active;
2059+
2060+ /*
2061+ * if an error (io timeout, etc) while (re)connecting,
2062+ * it's an error on creating the new association.
2063+ * Start the error recovery thread if it hasn't already
2064+ * been started. It is expected there could be multiple
2065+ * ios hitting this path before things are cleaned up.
2066+ */
2067+ if (ctrl->ctrl.state == NVME_CTRL_CONNECTING) {
2068+ active = atomic_xchg(&ctrl->err_work_active, 1);
2069+ if (!active && !schedule_work(&ctrl->err_work)) {
2070+ atomic_set(&ctrl->err_work_active, 0);
2071+ WARN_ON(1);
2072+ }
2073+ return;
2074+ }
2075+
2076+ /* Otherwise, only proceed if in LIVE state - e.g. on first error */
20532077 if (ctrl->ctrl.state != NVME_CTRL_LIVE)
20542078 return;
20552079
@@ -2814,6 +2838,7 @@ nvme_fc_delete_ctrl(struct nvme_ctrl *nctrl) · 758 unmodified lines
28142838 {
28152839 struct nvme_fc_ctrl *ctrl = to_fc_ctrl(nctrl);
28162840
2841+ cancel_work_sync(&ctrl->err_work);
28172842 cancel_delayed_work_sync(&ctrl->connect_work);
28182843 /*
28192844 * kill the association on the link side. this will block
@@ -2866,23 +2891,30 @@ nvme_fc_reconnect_or_delete(struct nvme_fc_ctrl *ctrl, int status) · 46 unmodified lines
28662891 }
28672892
28682893 static void
2869−nvme_fc_reset_ctrl_work(struct work_struct *work)
2894+__nvme_fc_terminate_io(struct nvme_fc_ctrl *ctrl)
28702895 {
2871− struct nvme_fc_ctrl *ctrl =
2872− container_of(work, struct nvme_fc_ctrl, ctrl.reset_work);
2873− int ret;
2874−
2875− nvme_stop_ctrl(&ctrl->ctrl);
2896+ nvme_stop_keep_alive(&ctrl->ctrl);
28762897
28772898 /* will block will waiting for io to terminate */
28782899 nvme_fc_delete_association(ctrl);
28792900
2880− if (!nvme_change_ctrl_state(&ctrl->ctrl, NVME_CTRL_CONNECTING)) {
2901+ if (ctrl->ctrl.state != NVME_CTRL_CONNECTING &&
2902+ !nvme_change_ctrl_state(&ctrl->ctrl, NVME_CTRL_CONNECTING))
28812903 dev_err(ctrl->ctrl.device,
28822904 "NVME-FC{%d}: error_recovery: Couldn't change state "
28832905 "to CONNECTING\n", ctrl->cnum);
2884− return;
2885− }
2906+}
2907+
2908+static void
2909+nvme_fc_reset_ctrl_work(struct work_struct *work)
2910+{
2911+ struct nvme_fc_ctrl *ctrl =
2912+ container_of(work, struct nvme_fc_ctrl, ctrl.reset_work);
2913+ int ret;
2914+
2915+ __nvme_fc_terminate_io(ctrl);
2916+
2917+ nvme_stop_ctrl(&ctrl->ctrl);
28862918
28872919 if (ctrl->rport->remoteport.port_state == FC_OBJSTATE_ONLINE)
28882920 ret = nvme_fc_create_association(ctrl);
@@ -2897,6 +2929,24 @@ nvme_fc_reset_ctrl_work(struct work_struct *work) · 8 unmodified lines
28972929 ctrl->cnum);
28982930 }
28992931
2932+static void
2933+nvme_fc_connect_err_work(struct work_struct *work)
2934+{
2935+ struct nvme_fc_ctrl *ctrl =
2936+ container_of(work, struct nvme_fc_ctrl, err_work);
2937+
2938+ __nvme_fc_terminate_io(ctrl);
2939+
2940+ atomic_set(&ctrl->err_work_active, 0);
2941+
2942+ /*
2943+ * Rescheduling the connection after recovering
2944+ * from the io error is left to the reconnect work
2945+ * item, which is what should have stalled waiting on
2946+ * the io that had the error that scheduled this work.
2947+ */
2948+}
2949+
29002950 static const struct nvme_ctrl_ops nvme_fc_ctrl_ops = {
29012951 .name = "fc",
29022952 .module = THIS_MODULE,
@@ -3007,6 +3057,7 @@ nvme_fc_init_ctrl(struct device *dev, struct nvmf_ctrl_options *opts, · 104 unmodified lines
30073057 ctrl->cnum = idx;
30083058 ctrl->ioq_live = false;
30093059 ctrl->assoc_active = false;
3060+ atomic_set(&ctrl->err_work_active, 0);
30103061 init_waitqueue_head(&ctrl->ioabort_wait);
30113062
30123063 get_device(ctrl->dev);
@@ -3014,6 +3065,7 @@ nvme_fc_init_ctrl(struct device *dev, struct nvmf_ctrl_options *opts, · 1 unmodified line
30143065
30153066 INIT_WORK(&ctrl->ctrl.reset_work, nvme_fc_reset_ctrl_work);
30163067 INIT_DELAYED_WORK(&ctrl->connect_work, nvme_fc_connect_ctrl_work);
3068+ INIT_WORK(&ctrl->err_work, nvme_fc_connect_err_work);
30173069 spin_lock_init(&ctrl->lock);
30183070
30193071 /* io queue count */
@@ -3103,6 +3155,7 @@ nvme_fc_init_ctrl(struct device *dev, struct nvmf_ctrl_options *opts, · 83 unmodified lines
31033155 fail_ctrl:
31043156 nvme_change_ctrl_state(&ctrl->ctrl, NVME_CTRL_DELETING);
31053157 cancel_work_sync(&ctrl->ctrl.reset_work);
3158+ cancel_work_sync(&ctrl->err_work);
31063159 cancel_delayed_work_sync(&ctrl->connect_work);
31073160
31083161 ctrl->ctrl.opts = NULL;
drivers/nvmem/core.c+6−4
@@ -44,6 +44,7 @@ struct nvmem_cell { · 43 unmodified lines
4444 int bytes;
4545 int bit_offset;
4646 int nbits;
47+ struct device_node *np;
4748 struct nvmem_device *nvmem;
4849 struct list_head node;
4950 };
@@ -298,6 +299,7 @@ static void nvmem_cell_drop(struct nvmem_cell *cell) · 248 unmodified lines
298299 mutex_lock(&nvmem_mutex);
299300 list_del(&cell->node);
300301 mutex_unlock(&nvmem_mutex);
302+ of_node_put(cell->np);
301303 kfree(cell->name);
302304 kfree(cell);
303305 }
@@ -530,6 +532,7 @@ static int nvmem_add_cells_from_of(struct nvmem_device *nvmem) · 226 unmodified lines
530532 return -ENOMEM;
531533
532534 cell->nvmem = nvmem;
535+ cell->np = of_node_get(child);
533536 cell->offset = be32_to_cpup(addr++);
534537 cell->bytes = be32_to_cpup(addr);
535538 cell->name = kasprintf(GFP_KERNEL, "%pOFn", child);
@@ -960,14 +963,13 @@ out: · 424 unmodified lines
960963
961964 #if IS_ENABLED(CONFIG_OF)
962965 static struct nvmem_cell *
963−nvmem_find_cell_by_index(struct nvmem_device *nvmem, int index)
966+nvmem_find_cell_by_node(struct nvmem_device *nvmem, struct device_node *np)
964967 {
965968 struct nvmem_cell *cell = NULL;
966− int i = 0;
967969
968970 mutex_lock(&nvmem_mutex);
969971 list_for_each_entry(cell, &nvmem->cells, node) {
970− if (index == i++)
972+ if (np == cell->np)
971973 break;
972974 }
973975 mutex_unlock(&nvmem_mutex);
@@ -1011,7 +1013,7 @@ struct nvmem_cell *of_nvmem_cell_get(struct device_node *np, const char *id) · 37 unmodified lines
10111013 if (IS_ERR(nvmem))
10121014 return ERR_CAST(nvmem);
10131015
1014− cell = nvmem_find_cell_by_index(nvmem, index);
1016+ cell = nvmem_find_cell_by_node(nvmem, cell_np);
10151017 if (!cell) {
10161018 __nvmem_device_put(nvmem);
10171019 return ERR_PTR(-ENOENT);
drivers/opp/ti-opp-supply.c+4−1
@@ -288,7 +288,10 @@ static int ti_opp_supply_set_opp(struct dev_pm_set_opp_data *data) · 287 unmodified lines
288288 int ret;
289289
290290 vdd_uv = _get_optimal_vdd_voltage(dev, &opp_data,
291− new_supply_vbb->u_volt);
291+ new_supply_vdd->u_volt);
292+
293+ if (new_supply_vdd->u_volt_min < vdd_uv)
294+ new_supply_vdd->u_volt_min = vdd_uv;
292295
293296 /* Scaling up? Scale voltage before frequency */
294297 if (freq > old_freq) {
drivers/scsi/qla2xxx/qla_os.c+8−2
@@ -1749,7 +1749,7 @@ qla2x00_loop_reset(scsi_qla_host_t *vha) · 1748 unmodified lines
17491749 static void
17501750 __qla2x00_abort_all_cmds(struct qla_qpair *qp, int res)
17511751 {
1752− int cnt;
1752+ int cnt, status;
17531753 unsigned long flags;
17541754 srb_t *sp;
17551755 scsi_qla_host_t *vha = qp->vha;
@@ -1799,10 +1799,16 @@ __qla2x00_abort_all_cmds(struct qla_qpair *qp, int res) · 43 unmodified lines
17991799 if (!sp_get(sp)) {
18001800 spin_unlock_irqrestore
18011801 (qp->qp_lock_ptr, flags);
1802− qla2xxx_eh_abort(
1802+ status = qla2xxx_eh_abort(
18031803 GET_CMD_SP(sp));
18041804 spin_lock_irqsave
18051805 (qp->qp_lock_ptr, flags);
1806+ /*
1807+ * Get rid of extra reference caused
1808+ * by early exit from qla2xxx_eh_abort
1809+ */
1810+ if (status == FAST_IO_FAIL)
1811+ atomic_dec(&sp->ref_count);
18061812 }
18071813 }
18081814 sp->done(sp, res);
drivers/scsi/ufs/ufs-hisi.c+9−0
@@ -20,6 +20,7 @@ · 19 unmodified lines
2020 #include "unipro.h"
2121 #include "ufs-hisi.h"
2222 #include "ufshci.h"
23+#include "ufs_quirks.h"
2324
2425 static int ufs_hisi_check_hibern8(struct ufs_hba *hba)
2526 {
@@ -390,6 +391,14 @@ static void ufs_hisi_set_dev_cap(struct ufs_hisi_dev_params *hisi_param) · 364 unmodified lines
390391
391392 static void ufs_hisi_pwr_change_pre_change(struct ufs_hba *hba)
392393 {
394+ if (hba->dev_quirks & UFS_DEVICE_QUIRK_HOST_VS_DEBUGSAVECONFIGTIME) {
395+ pr_info("ufs flash device must set VS_DebugSaveConfigTime 0x10\n");
396+ /* VS_DebugSaveConfigTime */
397+ ufshcd_dme_set(hba, UIC_ARG_MIB(0xD0A0), 0x10);
398+ /* sync length */
399+ ufshcd_dme_set(hba, UIC_ARG_MIB(0x1556), 0x48);
400+ }
401+
393402 /* update */
394403 ufshcd_dme_set(hba, UIC_ARG_MIB(0x15A8), 0x1);
395404 /* PA_TxSkip */
drivers/scsi/ufs/ufs_quirks.h+6−0
@@ -131,4 +131,10 @@ struct ufs_dev_fix { · 130 unmodified lines
131131 */
132132 #define UFS_DEVICE_QUIRK_HOST_PA_SAVECONFIGTIME (1 << 8)
133133
134+/*
135+ * Some UFS devices require VS_DebugSaveConfigTime is 0x10,
136+ * enabling this quirk ensure this.
137+ */
138+#define UFS_DEVICE_QUIRK_HOST_VS_DEBUGSAVECONFIGTIME (1 << 9)
139+
134140 #endif /* UFS_QUIRKS_H_ */
drivers/scsi/ufs/ufshcd.c+2−0
@@ -231,6 +231,8 @@ static struct ufs_dev_fix ufs_fixups[] = { · 230 unmodified lines
231231 UFS_FIX(UFS_VENDOR_SKHYNIX, UFS_ANY_MODEL, UFS_DEVICE_NO_VCCQ),
232232 UFS_FIX(UFS_VENDOR_SKHYNIX, UFS_ANY_MODEL,
233233 UFS_DEVICE_QUIRK_HOST_PA_SAVECONFIGTIME),
234+ UFS_FIX(UFS_VENDOR_SKHYNIX, "hB8aL1" /*H28U62301AMR*/,
235+ UFS_DEVICE_QUIRK_HOST_VS_DEBUGSAVECONFIGTIME),
234236
235237 END_FIX
236238 };
drivers/slimbus/qcom-ngd-ctrl.c+0−3
@@ -777,9 +777,6 @@ static int qcom_slim_ngd_xfer_msg(struct slim_controller *sctrl, · 776 unmodified lines
777777 u8 la = txn->la;
778778 bool usr_msg = false;
779779
780− if (txn->mc & SLIM_MSG_CLK_PAUSE_SEQ_FLG)
781− return -EPROTONOSUPPORT;
782−
783780 if (txn->mt == SLIM_MSG_MT_CORE &&
784781 (txn->mc >= SLIM_MSG_MC_BEGIN_RECONFIGURATION &&
785782 txn->mc <= SLIM_MSG_MC_RECONFIGURE_NOW))
drivers/slimbus/slimbus.h+0−6
@@ -61,12 +61,6 @@ · 60 unmodified lines
6161 #define SLIM_MSG_MC_NEXT_REMOVE_CHANNEL 0x58
6262 #define SLIM_MSG_MC_RECONFIGURE_NOW 0x5F
6363
64−/*
65− * Clock pause flag to indicate that the reconfig message
66− * corresponds to clock pause sequence
67− */
68−#define SLIM_MSG_CLK_PAUSE_SEQ_FLG (1U << 8)
69−
7064 /* Clock pause values per SLIMbus spec */
7165 #define SLIM_CLK_FAST 0
7266 #define SLIM_CLK_CONST_PHASE 1
drivers/staging/media/davinci_vpfe/dm365_ipipeif.c+1−0
@@ -310,6 +310,7 @@ static int ipipeif_hw_setup(struct v4l2_subdev *sd) · 309 unmodified lines
310310 ipipeif_write(val, ipipeif_base_addr, IPIPEIF_CFG2);
311311 break;
312312 }
313+ /* fall through */
313314
314315 case IPIPEIF_SDRAM_YUV:
315316 /* Set clock divider */
drivers/staging/media/sunxi/cedrus/cedrus.c+1−1
@@ -253,7 +253,7 @@ static const struct v4l2_m2m_ops cedrus_m2m_ops = { · 252 unmodified lines
253253
254254 static const struct media_device_ops cedrus_m2m_media_ops = {
255255 .req_validate = cedrus_request_validate,
256− .req_queue = vb2_m2m_request_queue,
256+ .req_queue = v4l2_m2m_request_queue,
257257 };
258258
259259 static int cedrus_probe(struct platform_device *pdev)
drivers/uio/uio.c+5−2
@@ -961,6 +961,8 @@ int __uio_register_device(struct module *owner, · 960 unmodified lines
961961 if (ret)
962962 goto err_uio_dev_add_attributes;
963963
964+ info->uio_dev = idev;
965+
964966 if (info->irq && (info->irq != UIO_IRQ_CUSTOM)) {
965967 /*
966968 * Note that we deliberately don't use devm_request_irq
@@ -972,11 +974,12 @@ int __uio_register_device(struct module *owner, · 5 unmodified lines
972974 */
973975 ret = request_irq(info->irq, uio_interrupt,
974976 info->irq_flags, info->name, idev);
975− if (ret)
977+ if (ret) {
978+ info->uio_dev = NULL;
976979 goto err_request_irq;
980+ }
977981 }
978982
979− info->uio_dev = idev;
980983 return 0;
981984
982985 err_request_irq:
drivers/usb/class/cdc-acm.c+3−0
@@ -1696,6 +1696,9 @@ static const struct usb_device_id acm_ids[] = { · 1695 unmodified lines
16961696 { USB_DEVICE(0x0572, 0x1328), /* Shiro / Aztech USB MODEM UM-3100 */
16971697 .driver_info = NO_UNION_NORMAL, /* has no union descriptor */
16981698 },
1699+ { USB_DEVICE(0x0572, 0x1349), /* Hiro (Conexant) USB MODEM H50228 */
1700+ .driver_info = NO_UNION_NORMAL, /* has no union descriptor */
1701+ },
16991702 { USB_DEVICE(0x20df, 0x0001), /* Simtec Electronics Entropy Key */
17001703 .driver_info = QUIRK_CONTROL_LINE_STATE, },
17011704 { USB_DEVICE(0x2184, 0x001c) }, /* GW Instek AFG-2225 */
drivers/usb/core/hub.c+14−4
@@ -2794,6 +2794,7 @@ static int hub_port_reset(struct usb_hub *hub, int port1, · 2793 unmodified lines
27942794 int i, status;
27952795 u16 portchange, portstatus;
27962796 struct usb_port *port_dev = hub->ports[port1 - 1];
2797+ int reset_recovery_time;
27972798
27982799 if (!hub_is_superspeed(hub->hdev)) {
27992800 if (warm) {
@@ -2849,7 +2850,9 @@ static int hub_port_reset(struct usb_hub *hub, int port1, · 49 unmodified lines
28492850 USB_PORT_FEAT_C_BH_PORT_RESET);
28502851 usb_clear_port_feature(hub->hdev, port1,
28512852 USB_PORT_FEAT_C_PORT_LINK_STATE);
2852− usb_clear_port_feature(hub->hdev, port1,
2853+
2854+ if (udev)
2855+ usb_clear_port_feature(hub->hdev, port1,
28532856 USB_PORT_FEAT_C_CONNECTION);
28542857
28552858 /*
@@ -2885,11 +2888,18 @@ static int hub_port_reset(struct usb_hub *hub, int port1, · 29 unmodified lines
28852888
28862889 done:
28872890 if (status == 0) {
2888− /* TRSTRCY = 10 ms; plus some extra */
28892891 if (port_dev->quirks & USB_PORT_QUIRK_FAST_ENUM)
28902892 usleep_range(10000, 12000);
2891− else
2892− msleep(10 + 40);
2893+ else {
2894+ /* TRSTRCY = 10 ms; plus some extra */
2895+ reset_recovery_time = 10 + 40;
2896+
2897+ /* Hub needs extra delay after resetting its port. */
2898+ if (hub->hdev->quirks & USB_QUIRK_HUB_SLOW_RESET)
2899+ reset_recovery_time += 100;
2900+
2901+ msleep(reset_recovery_time);
2902+ }
28932903
28942904 if (udev) {
28952905 struct usb_hcd *hcd = bus_to_hcd(udev->bus);
drivers/usb/core/quirks.c+14−0
@@ -128,6 +128,9 @@ static int quirks_param_set(const char *val, const struct kernel_param *kp) · 127 unmodified lines
128128 case 'n':
129129 flags |= USB_QUIRK_DELAY_CTRL_MSG;
130130 break;
131+ case 'o':
132+ flags |= USB_QUIRK_HUB_SLOW_RESET;
133+ break;
131134 /* Ignore unrecognized flag characters */
132135 }
133136 }
@@ -380,6 +383,9 @@ static const struct usb_device_id usb_quirk_list[] = { · 246 unmodified lines
380383 { USB_DEVICE(0x1a0a, 0x0200), .driver_info =
381384 USB_QUIRK_LINEAR_UFRAME_INTR_BINTERVAL },
382385
386+ /* Terminus Technology Inc. Hub */
387+ { USB_DEVICE(0x1a40, 0x0101), .driver_info = USB_QUIRK_HUB_SLOW_RESET },
388+
383389 /* Corsair K70 RGB */
384390 { USB_DEVICE(0x1b1c, 0x1b13), .driver_info = USB_QUIRK_DELAY_INIT },
385391
@@ -391,6 +397,9 @@ static const struct usb_device_id usb_quirk_list[] = { · 5 unmodified lines
391397 { USB_DEVICE(0x1b1c, 0x1b20), .driver_info = USB_QUIRK_DELAY_INIT |
392398 USB_QUIRK_DELAY_CTRL_MSG },
393399
400+ /* Corsair K70 LUX RGB */
401+ { USB_DEVICE(0x1b1c, 0x1b33), .driver_info = USB_QUIRK_DELAY_INIT },
402+
394403 /* Corsair K70 LUX */
395404 { USB_DEVICE(0x1b1c, 0x1b36), .driver_info = USB_QUIRK_DELAY_INIT },
396405
@@ -411,6 +420,11 @@ static const struct usb_device_id usb_quirk_list[] = { · 14 unmodified lines
411420 { USB_DEVICE(0x2040, 0x7200), .driver_info =
412421 USB_QUIRK_CONFIG_INTF_STRINGS },
413422
423+ /* Raydium Touchscreen */
424+ { USB_DEVICE(0x2386, 0x3114), .driver_info = USB_QUIRK_NO_LPM },
425+
426+ { USB_DEVICE(0x2386, 0x3119), .driver_info = USB_QUIRK_NO_LPM },
427+
414428 /* DJI CineSSD */
415429 { USB_DEVICE(0x2ca3, 0x0031), .driver_info = USB_QUIRK_NO_LPM },
416430
drivers/usb/dwc2/pci.c+1−0
@@ -120,6 +120,7 @@ static int dwc2_pci_probe(struct pci_dev *pci, · 119 unmodified lines
120120 dwc2 = platform_device_alloc("dwc2", PLATFORM_DEVID_AUTO);
121121 if (!dwc2) {
122122 dev_err(dev, "couldn't allocate dwc2 device\n");
123+ ret = -ENOMEM;
123124 goto err;
124125 }
125126
drivers/usb/dwc3/core.c+1−0
@@ -1499,6 +1499,7 @@ static int dwc3_probe(struct platform_device *pdev) · 1498 unmodified lines
14991499
15001500 err5:
15011501 dwc3_event_buffers_cleanup(dwc);
1502+ dwc3_ulpi_exit(dwc);
15021503
15031504 err4:
15041505 dwc3_free_scratch_buffers(dwc);
drivers/usb/dwc3/dwc3-pci.c+3−1
@@ -283,8 +283,10 @@ err: · 282 unmodified lines
283283 static void dwc3_pci_remove(struct pci_dev *pci)
284284 {
285285 struct dwc3_pci *dwc = pci_get_drvdata(pci);
286+ struct pci_dev *pdev = dwc->pci;
286287
287− gpiod_remove_lookup_table(&platform_bytcr_gpios);
288+ if (pdev->device == PCI_DEVICE_ID_INTEL_BYT)
289+ gpiod_remove_lookup_table(&platform_bytcr_gpios);
288290 #ifdef CONFIG_PM
289291 cancel_work_sync(&dwc->wakeup_work);
290292 #endif
drivers/usb/dwc3/gadget.c+4−4
@@ -1081,7 +1081,7 @@ static void dwc3_prepare_one_trb_sg(struct dwc3_ep *dep, · 1080 unmodified lines
10811081 /* Now prepare one extra TRB to align transfer size */
10821082 trb = &dep->trb_pool[dep->trb_enqueue];
10831083 __dwc3_prepare_one_trb(dep, trb, dwc->bounce_addr,
1084− maxp - rem, false, 0,
1084+ maxp - rem, false, 1,
10851085 req->request.stream_id,
10861086 req->request.short_not_ok,
10871087 req->request.no_interrupt);
@@ -1125,7 +1125,7 @@ static void dwc3_prepare_one_trb_linear(struct dwc3_ep *dep, · 37 unmodified lines
11251125 /* Now prepare one extra TRB to align transfer size */
11261126 trb = &dep->trb_pool[dep->trb_enqueue];
11271127 __dwc3_prepare_one_trb(dep, trb, dwc->bounce_addr, maxp - rem,
1128− false, 0, req->request.stream_id,
1128+ false, 1, req->request.stream_id,
11291129 req->request.short_not_ok,
11301130 req->request.no_interrupt);
11311131 } else if (req->request.zero && req->request.length &&
@@ -1141,7 +1141,7 @@ static void dwc3_prepare_one_trb_linear(struct dwc3_ep *dep, · 9 unmodified lines
11411141 /* Now prepare one extra TRB to handle ZLP */
11421142 trb = &dep->trb_pool[dep->trb_enqueue];
11431143 __dwc3_prepare_one_trb(dep, trb, dwc->bounce_addr, 0,
1144− false, 0, req->request.stream_id,
1144+ false, 1, req->request.stream_id,
11451145 req->request.short_not_ok,
11461146 req->request.no_interrupt);
11471147 } else {
@@ -2259,7 +2259,7 @@ static int dwc3_gadget_ep_reclaim_completed_trb(struct dwc3_ep *dep, · 1111 unmodified lines
22592259 * with one TRB pending in the ring. We need to manually clear HWO bit
22602260 * from that TRB.
22612261 */
2262− if ((req->zero || req->unaligned) && (trb->ctrl & DWC3_TRB_CTRL_HWO)) {
2262+ if ((req->zero || req->unaligned) && !(trb->ctrl & DWC3_TRB_CTRL_CHN)) {
22632263 trb->ctrl &= ~DWC3_TRB_CTRL_HWO;
22642264 return 1;
22652265 }
drivers/usb/gadget/function/f_fs.c+8−18
@@ -215,7 +215,6 @@ struct ffs_io_data { · 214 unmodified lines
215215
216216 struct mm_struct *mm;
217217 struct work_struct work;
218− struct work_struct cancellation_work;
219218
220219 struct usb_ep *ep;
221220 struct usb_request *req;
@@ -1073,31 +1072,22 @@ ffs_epfile_open(struct inode *inode, struct file *file) · 851 unmodified lines
10731072 return 0;
10741073 }
10751074
1076−static void ffs_aio_cancel_worker(struct work_struct *work)
1077−{
1078− struct ffs_io_data *io_data = container_of(work, struct ffs_io_data,
1079− cancellation_work);
1080−
1081− ENTER();
1082−
1083− usb_ep_dequeue(io_data->ep, io_data->req);
1084−}
1085−
10861075 static int ffs_aio_cancel(struct kiocb *kiocb)
10871076 {
10881077 struct ffs_io_data *io_data = kiocb->private;
1089− struct ffs_data *ffs = io_data->ffs;
1078+ struct ffs_epfile *epfile = kiocb->ki_filp->private_data;
10901079 int value;
10911080
10921081 ENTER();
10931082
1094− if (likely(io_data && io_data->ep && io_data->req)) {
1095− INIT_WORK(&io_data->cancellation_work, ffs_aio_cancel_worker);
1096− queue_work(ffs->io_completion_wq, &io_data->cancellation_work);
1097− value = -EINPROGRESS;
1098− } else {
1083+ spin_lock_irq(&epfile->ffs->eps_lock);
1084+
1085+ if (likely(io_data && io_data->ep && io_data->req))
1086+ value = usb_ep_dequeue(io_data->ep, io_data->req);
1087+ else
10991088 value = -EINVAL;
1100− }
1089+
1090+ spin_unlock_irq(&epfile->ffs->eps_lock);
11011091
11021092 return value;
11031093 }
drivers/usb/host/xhci-histb.c+4−2
@@ -325,14 +325,16 @@ static int xhci_histb_remove(struct platform_device *dev) · 324 unmodified lines
325325 struct xhci_hcd_histb *histb = platform_get_drvdata(dev);
326326 struct usb_hcd *hcd = histb->hcd;
327327 struct xhci_hcd *xhci = hcd_to_xhci(hcd);
328+ struct usb_hcd *shared_hcd = xhci->shared_hcd;
328329
329330 xhci->xhc_state |= XHCI_STATE_REMOVING;
330331
331− usb_remove_hcd(xhci->shared_hcd);
332+ usb_remove_hcd(shared_hcd);
333+ xhci->shared_hcd = NULL;
332334 device_wakeup_disable(&dev->dev);
333335
334336 usb_remove_hcd(hcd);
335− usb_put_hcd(xhci->shared_hcd);
337+ usb_put_hcd(shared_hcd);
336338
337339 xhci_histb_host_disable(histb);
338340 usb_put_hcd(hcd);
drivers/usb/host/xhci-hub.c+49−17
@@ -876,7 +876,7 @@ static u32 xhci_get_port_status(struct usb_hcd *hcd, · 875 unmodified lines
876876 status |= USB_PORT_STAT_SUSPEND;
877877 }
878878 if ((raw_port_status & PORT_PLS_MASK) == XDEV_RESUME &&
879− !DEV_SUPERSPEED_ANY(raw_port_status)) {
879+ !DEV_SUPERSPEED_ANY(raw_port_status) && hcd->speed < HCD_USB3) {
880880 if ((raw_port_status & PORT_RESET) ||
881881 !(raw_port_status & PORT_PE))
882882 return 0xffffffff;
@@ -921,7 +921,7 @@ static u32 xhci_get_port_status(struct usb_hcd *hcd, · 38 unmodified lines
921921 time_left = wait_for_completion_timeout(
922922 &bus_state->rexit_done[wIndex],
923923 msecs_to_jiffies(
924− XHCI_MAX_REXIT_TIMEOUT));
924+ XHCI_MAX_REXIT_TIMEOUT_MS));
925925 spin_lock_irqsave(&xhci->lock, flags);
926926
927927 if (time_left) {
@@ -935,7 +935,7 @@ static u32 xhci_get_port_status(struct usb_hcd *hcd, · 7 unmodified lines
935935 } else {
936936 int port_status = readl(port->addr);
937937 xhci_warn(xhci, "Port resume took longer than %i msec, port status = 0x%x\n",
938− XHCI_MAX_REXIT_TIMEOUT,
938+ XHCI_MAX_REXIT_TIMEOUT_MS,
939939 port_status);
940940 status |= USB_PORT_STAT_SUSPEND;
941941 clear_bit(wIndex, &bus_state->rexit_ports);
@@ -1474,15 +1474,18 @@ int xhci_bus_suspend(struct usb_hcd *hcd) · 532 unmodified lines
14741474 unsigned long flags;
14751475 struct xhci_hub *rhub;
14761476 struct xhci_port **ports;
1477+ u32 portsc_buf[USB_MAXCHILDREN];
1478+ bool wake_enabled;
14771479
14781480 rhub = xhci_get_rhub(hcd);
14791481 ports = rhub->ports;
14801482 max_ports = rhub->num_ports;
14811483 bus_state = &xhci->bus_state[hcd_index(hcd)];
1484+ wake_enabled = hcd->self.root_hub->do_remote_wakeup;
14821485
14831486 spin_lock_irqsave(&xhci->lock, flags);
14841487
1485− if (hcd->self.root_hub->do_remote_wakeup) {
1488+ if (wake_enabled) {
14861489 if (bus_state->resuming_ports || /* USB2 */
14871490 bus_state->port_remote_wakeup) { /* USB3 */
14881491 spin_unlock_irqrestore(&xhci->lock, flags);
@@ -1490,26 +1493,36 @@ int xhci_bus_suspend(struct usb_hcd *hcd) · 1 unmodified line
14901493 return -EBUSY;
14911494 }
14921495 }
1493−
1494− port_index = max_ports;
1496+ /*
1497+ * Prepare ports for suspend, but don't write anything before all ports
1498+ * are checked and we know bus suspend can proceed
1499+ */
14951500 bus_state->bus_suspended = 0;
1501+ port_index = max_ports;
14961502 while (port_index--) {
1497− /* suspend the port if the port is not suspended */
14981503 u32 t1, t2;
1499− int slot_id;
15001504
15011505 t1 = readl(ports[port_index]->addr);
15021506 t2 = xhci_port_state_to_neutral(t1);
1507+ portsc_buf[port_index] = 0;
15031508
1504− if ((t1 & PORT_PE) && !(t1 & PORT_PLS_MASK)) {
1505− xhci_dbg(xhci, "port %d not suspended\n", port_index);
1506− slot_id = xhci_find_slot_id_by_port(hcd, xhci,
1507− port_index + 1);
1508− if (slot_id) {
1509+ /* Bail out if a USB3 port has a new device in link training */
1510+ if ((t1 & PORT_PLS_MASK) == XDEV_POLLING) {
1511+ bus_state->bus_suspended = 0;
1512+ spin_unlock_irqrestore(&xhci->lock, flags);
1513+ xhci_dbg(xhci, "Bus suspend bailout, port in polling\n");
1514+ return -EBUSY;
1515+ }
1516+
1517+ /* suspend ports in U0, or bail out for new connect changes */
1518+ if ((t1 & PORT_PE) && (t1 & PORT_PLS_MASK) == XDEV_U0) {
1519+ if ((t1 & PORT_CSC) && wake_enabled) {
1520+ bus_state->bus_suspended = 0;
15091521 spin_unlock_irqrestore(&xhci->lock, flags);
1510− xhci_stop_device(xhci, slot_id, 1);
1511− spin_lock_irqsave(&xhci->lock, flags);
1522+ xhci_dbg(xhci, "Bus suspend bailout, port connect change\n");
1523+ return -EBUSY;
15121524 }
1525+ xhci_dbg(xhci, "port %d not suspended\n", port_index);
15131526 t2 &= ~PORT_PLS_MASK;
15141527 t2 |= PORT_LINK_STROBE | XDEV_U3;
15151528 set_bit(port_index, &bus_state->bus_suspended);
@@ -1518,7 +1531,7 @@ int xhci_bus_suspend(struct usb_hcd *hcd) · 2 unmodified lines
15181531 * including the USB 3.0 roothub, but only if CONFIG_PM
15191532 * is enabled, so also enable remote wake here.
15201533 */
1521− if (hcd->self.root_hub->do_remote_wakeup) {
1534+ if (wake_enabled) {
15221535 if (t1 & PORT_CONNECT) {
15231536 t2 |= PORT_WKOC_E | PORT_WKDISC_E;
15241537 t2 &= ~PORT_WKCONN_E;
@@ -1538,7 +1551,26 @@ int xhci_bus_suspend(struct usb_hcd *hcd) · 13 unmodified lines
15381551
15391552 t1 = xhci_port_state_to_neutral(t1);
15401553 if (t1 != t2)
1541− writel(t2, ports[port_index]->addr);
1554+ portsc_buf[port_index] = t2;
1555+ }
1556+
1557+ /* write port settings, stopping and suspending ports if needed */
1558+ port_index = max_ports;
1559+ while (port_index--) {
1560+ if (!portsc_buf[port_index])
1561+ continue;
1562+ if (test_bit(port_index, &bus_state->bus_suspended)) {
1563+ int slot_id;
1564+
1565+ slot_id = xhci_find_slot_id_by_port(hcd, xhci,
1566+ port_index + 1);
1567+ if (slot_id) {
1568+ spin_unlock_irqrestore(&xhci->lock, flags);
1569+ xhci_stop_device(xhci, slot_id, 1);
1570+ spin_lock_irqsave(&xhci->lock, flags);
1571+ }
1572+ }
1573+ writel(portsc_buf[port_index], ports[port_index]->addr);
15421574 }
15431575 hcd->state = HC_STATE_SUSPENDED;
15441576 bus_state->next_statechange = jiffies + msecs_to_jiffies(10);
drivers/usb/host/xhci-mtk.c+4−2
@@ -590,12 +590,14 @@ static int xhci_mtk_remove(struct platform_device *dev) · 589 unmodified lines
590590 struct xhci_hcd_mtk *mtk = platform_get_drvdata(dev);
591591 struct usb_hcd *hcd = mtk->hcd;
592592 struct xhci_hcd *xhci = hcd_to_xhci(hcd);
593+ struct usb_hcd *shared_hcd = xhci->shared_hcd;
593594
594− usb_remove_hcd(xhci->shared_hcd);
595+ usb_remove_hcd(shared_hcd);
596+ xhci->shared_hcd = NULL;
595597 device_init_wakeup(&dev->dev, false);
596598
597599 usb_remove_hcd(hcd);
598− usb_put_hcd(xhci->shared_hcd);
600+ usb_put_hcd(shared_hcd);
599601 usb_put_hcd(hcd);
600602 xhci_mtk_sch_exit(mtk);
601603 xhci_mtk_clks_disable(mtk);
drivers/usb/host/xhci-pci.c+6−0
@@ -248,6 +248,11 @@ static void xhci_pci_quirks(struct device *dev, struct xhci_hcd *xhci) · 247 unmodified lines
248248 if (pdev->vendor == PCI_VENDOR_ID_TI && pdev->device == 0x8241)
249249 xhci->quirks |= XHCI_LIMIT_ENDPOINT_INTERVAL_7;
250250
251+ if ((pdev->vendor == PCI_VENDOR_ID_BROADCOM ||
252+ pdev->vendor == PCI_VENDOR_ID_CAVIUM) &&
253+ pdev->device == 0x9026)
254+ xhci->quirks |= XHCI_RESET_PLL_ON_DISCONNECT;
255+
251256 if (xhci->quirks & XHCI_RESET_ON_RESUME)
252257 xhci_dbg_trace(xhci, trace_xhci_dbg_quirks,
253258 "QUIRK: Resetting on resume");
@@ -380,6 +385,7 @@ static void xhci_pci_remove(struct pci_dev *dev) · 126 unmodified lines
380385 if (xhci->shared_hcd) {
381386 usb_remove_hcd(xhci->shared_hcd);
382387 usb_put_hcd(xhci->shared_hcd);
388+ xhci->shared_hcd = NULL;
383389 }
384390
385391 /* Workaround for spurious wakeups at shutdown with HSW */
drivers/usb/host/xhci-plat.c+4−2
@@ -362,14 +362,16 @@ static int xhci_plat_remove(struct platform_device *dev) · 361 unmodified lines
362362 struct xhci_hcd *xhci = hcd_to_xhci(hcd);
363363 struct clk *clk = xhci->clk;
364364 struct clk *reg_clk = xhci->reg_clk;
365+ struct usb_hcd *shared_hcd = xhci->shared_hcd;
365366
366367 xhci->xhc_state |= XHCI_STATE_REMOVING;
367368
368− usb_remove_hcd(xhci->shared_hcd);
369+ usb_remove_hcd(shared_hcd);
370+ xhci->shared_hcd = NULL;
369371 usb_phy_shutdown(hcd->usb_phy);
370372
371373 usb_remove_hcd(hcd);
372− usb_put_hcd(xhci->shared_hcd);
374+ usb_put_hcd(shared_hcd);
373375
374376 clk_disable_unprepare(clk);
375377 clk_disable_unprepare(reg_clk);
drivers/usb/host/xhci-ring.c+43−2
@@ -1521,6 +1521,35 @@ static void handle_device_notification(struct xhci_hcd *xhci, · 1520 unmodified lines
15211521 usb_wakeup_notification(udev->parent, udev->portnum);
15221522 }
15231523
1524+/*
1525+ * Quirk hanlder for errata seen on Cavium ThunderX2 processor XHCI
1526+ * Controller.
1527+ * As per ThunderX2errata-129 USB 2 device may come up as USB 1
1528+ * If a connection to a USB 1 device is followed by another connection
1529+ * to a USB 2 device.
1530+ *
1531+ * Reset the PHY after the USB device is disconnected if device speed
1532+ * is less than HCD_USB3.
1533+ * Retry the reset sequence max of 4 times checking the PLL lock status.
1534+ *
1535+ */
1536+static void xhci_cavium_reset_phy_quirk(struct xhci_hcd *xhci)
1537+{
1538+ struct usb_hcd *hcd = xhci_to_hcd(xhci);
1539+ u32 pll_lock_check;
1540+ u32 retry_count = 4;
1541+
1542+ do {
1543+ /* Assert PHY reset */
1544+ writel(0x6F, hcd->regs + 0x1048);
1545+ udelay(10);
1546+ /* De-assert the PHY reset */
1547+ writel(0x7F, hcd->regs + 0x1048);
1548+ udelay(200);
1549+ pll_lock_check = readl(hcd->regs + 0x1070);
1550+ } while (!(pll_lock_check & 0x1) && --retry_count);
1551+}
1552+
15241553 static void handle_port_status(struct xhci_hcd *xhci,
15251554 union xhci_trb *event)
15261555 {
@@ -1556,6 +1585,13 @@ static void handle_port_status(struct xhci_hcd *xhci, · 29 unmodified lines
15561585 goto cleanup;
15571586 }
15581587
1588+ /* We might get interrupts after shared_hcd is removed */
1589+ if (port->rhub == &xhci->usb3_rhub && xhci->shared_hcd == NULL) {
1590+ xhci_dbg(xhci, "ignore port event for removed USB3 hcd\n");
1591+ bogus_port_status = true;
1592+ goto cleanup;
1593+ }
1594+
15591595 hcd = port->rhub->hcd;
15601596 bus_state = &xhci->bus_state[hcd_index(hcd)];
15611597 hcd_portnum = port->hcd_portnum;
@@ -1639,7 +1675,7 @@ static void handle_port_status(struct xhci_hcd *xhci, · 77 unmodified lines
16391675 * RExit to a disconnect state). If so, let the the driver know it's
16401676 * out of the RExit state.
16411677 */
1642− if (!DEV_SUPERSPEED_ANY(portsc) &&
1678+ if (!DEV_SUPERSPEED_ANY(portsc) && hcd->speed < HCD_USB3 &&
16431679 test_and_clear_bit(hcd_portnum,
16441680 &bus_state->rexit_ports)) {
16451681 complete(&bus_state->rexit_done[hcd_portnum]);
@@ -1647,8 +1683,12 @@ static void handle_port_status(struct xhci_hcd *xhci, · 1 unmodified line
16471683 goto cleanup;
16481684 }
16491685
1650− if (hcd->speed < HCD_USB3)
1686+ if (hcd->speed < HCD_USB3) {
16511687 xhci_test_and_clear_bit(xhci, port, PORT_PLC);
1688+ if ((xhci->quirks & XHCI_RESET_PLL_ON_DISCONNECT) &&
1689+ (portsc & PORT_CSC) && !(portsc & PORT_CONNECT))
1690+ xhci_cavium_reset_phy_quirk(xhci);
1691+ }
16521692
16531693 cleanup:
16541694 /* Update event ring dequeue pointer before dropping the lock */
@@ -2266,6 +2306,7 @@ static int handle_tx_event(struct xhci_hcd *xhci, · 611 unmodified lines
22662306 goto cleanup;
22672307 case COMP_RING_UNDERRUN:
22682308 case COMP_RING_OVERRUN:
2309+ case COMP_STOPPED_LENGTH_INVALID:
22692310 goto cleanup;
22702311 default:
22712312 xhci_err(xhci, "ERROR Transfer event for unknown stream ring slot %u ep %u\n",
drivers/usb/host/xhci-tegra.c+1−0
@@ -1303,6 +1303,7 @@ static int tegra_xusb_remove(struct platform_device *pdev) · 1302 unmodified lines
13031303
13041304 usb_remove_hcd(xhci->shared_hcd);
13051305 usb_put_hcd(xhci->shared_hcd);
1306+ xhci->shared_hcd = NULL;
13061307 usb_remove_hcd(tegra->hcd);
13071308 usb_put_hcd(tegra->hcd);
13081309
drivers/usb/host/xhci.c+0−2
@@ -719,8 +719,6 @@ static void xhci_stop(struct usb_hcd *hcd) · 718 unmodified lines
719719
720720 /* Only halt host and free memory after both hcds are removed */
721721 if (!usb_hcd_is_primary_hcd(hcd)) {
722− /* usb core will free this hcd shortly, unset pointer */
723− xhci->shared_hcd = NULL;
724722 mutex_unlock(&xhci->mutex);
725723 return;
726724 }
drivers/usb/host/xhci.h+2−1
@@ -1680,7 +1680,7 @@ struct xhci_bus_state { · 1679 unmodified lines
16801680 * It can take up to 20 ms to transition from RExit to U0 on the
16811681 * Intel Lynx Point LP xHCI host.
16821682 */
1683−#define XHCI_MAX_REXIT_TIMEOUT (20 * 1000)
1683+#define XHCI_MAX_REXIT_TIMEOUT_MS 20
16841684
16851685 static inline unsigned int hcd_index(struct usb_hcd *hcd)
16861686 {
@@ -1849,6 +1849,7 @@ struct xhci_hcd { · 162 unmodified lines
18491849 #define XHCI_INTEL_USB_ROLE_SW BIT_ULL(31)
18501850 #define XHCI_ZERO_64B_REGS BIT_ULL(32)
18511851 #define XHCI_DEFAULT_PM_RUNTIME_ALLOW BIT_ULL(33)
1852+#define XHCI_RESET_PLL_ON_DISCONNECT BIT_ULL(34)
18521853
18531854 unsigned int num_active_eps;
18541855 unsigned int limit_active_eps;
drivers/usb/misc/appledisplay.c+1−0
@@ -50,6 +50,7 @@ static const struct usb_device_id appledisplay_table[] = { · 49 unmodified lines
5050 { APPLEDISPLAY_DEVICE(0x9219) },
5151 { APPLEDISPLAY_DEVICE(0x921c) },
5252 { APPLEDISPLAY_DEVICE(0x921d) },
53+ { APPLEDISPLAY_DEVICE(0x9222) },
5354 { APPLEDISPLAY_DEVICE(0x9236) },
5455
5556 /* Terminating entry */
fs/exec.c+3−2
@@ -62,6 +62,7 @@ · 61 unmodified lines
6262 #include <linux/oom.h>
6363 #include <linux/compat.h>
6464 #include <linux/vmalloc.h>
65+#include <linux/freezer.h>
6566
6667 #include <linux/uaccess.h>
6768 #include <asm/mmu_context.h>
@@ -1083,7 +1084,7 @@ static int de_thread(struct task_struct *tsk) · 1015 unmodified lines
10831084 while (sig->notify_count) {
10841085 __set_current_state(TASK_KILLABLE);
10851086 spin_unlock_irq(lock);
1086− schedule();
1087+ freezable_schedule();
10871088 if (unlikely(__fatal_signal_pending(tsk)))
10881089 goto killed;
10891090 spin_lock_irq(lock);
@@ -1111,7 +1112,7 @@ static int de_thread(struct task_struct *tsk) · 21 unmodified lines
11111112 __set_current_state(TASK_KILLABLE);
11121113 write_unlock_irq(&tasklist_lock);
11131114 cgroup_threadgroup_change_end(tsk);
1114− schedule();
1115+ freezable_schedule();
11151116 if (unlikely(__fatal_signal_pending(tsk)))
11161117 goto killed;
11171118 }
fs/iomap.c+41−12
@@ -142,13 +142,14 @@ static void · 141 unmodified lines
142142 iomap_adjust_read_range(struct inode *inode, struct iomap_page *iop,
143143 loff_t *pos, loff_t length, unsigned *offp, unsigned *lenp)
144144 {
145+ loff_t orig_pos = *pos;
146+ loff_t isize = i_size_read(inode);
145147 unsigned block_bits = inode->i_blkbits;
146148 unsigned block_size = (1 << block_bits);
147149 unsigned poff = offset_in_page(*pos);
148150 unsigned plen = min_t(loff_t, PAGE_SIZE - poff, length);
149151 unsigned first = poff >> block_bits;
150152 unsigned last = (poff + plen - 1) >> block_bits;
151− unsigned end = offset_in_page(i_size_read(inode)) >> block_bits;
152153
153154 /*
154155 * If the block size is smaller than the page size we need to check the
@@ -183,8 +184,12 @@ iomap_adjust_read_range(struct inode *inode, struct iomap_page *iop, · 28 unmodified lines
183184 * handle both halves separately so that we properly zero data in the
184185 * page cache for blocks that are entirely outside of i_size.
185186 */
186− if (first <= end && last > end)
187− plen -= (last - end) * block_size;
187+ if (orig_pos <= isize && orig_pos + length > isize) {
188+ unsigned end = offset_in_page(isize - 1) >> block_bits;
189+
190+ if (first <= end && last > end)
191+ plen -= (last - end) * block_size;
192+ }
188193
189194 *offp = poff;
190195 *lenp = plen;
@@ -1580,7 +1585,7 @@ iomap_dio_bio_actor(struct inode *inode, loff_t pos, loff_t length, · 1389 unmodified lines
15801585 struct bio *bio;
15811586 bool need_zeroout = false;
15821587 bool use_fua = false;
1583− int nr_pages, ret;
1588+ int nr_pages, ret = 0;
15841589 size_t copied = 0;
15851590
15861591 if ((pos | length | align) & ((1 << blkbits) - 1))
@@ -1596,12 +1601,13 @@ iomap_dio_bio_actor(struct inode *inode, loff_t pos, loff_t length, · 9 unmodified lines
15961601
15971602 if (iomap->flags & IOMAP_F_NEW) {
15981603 need_zeroout = true;
1599− } else {
1604+ } else if (iomap->type == IOMAP_MAPPED) {
16001605 /*
1601− * Use a FUA write if we need datasync semantics, this
1602− * is a pure data IO that doesn't require any metadata
1603− * updates and the underlying device supports FUA. This
1604− * allows us to avoid cache flushes on IO completion.
1606+ * Use a FUA write if we need datasync semantics, this is a pure
1607+ * data IO that doesn't require any metadata updates (including
1608+ * after IO completion such as unwritten extent conversion) and
1609+ * the underlying device supports FUA. This allows us to avoid
1610+ * cache flushes on IO completion.
16051611 */
16061612 if (!(iomap->flags & (IOMAP_F_SHARED|IOMAP_F_DIRTY)) &&
16071613 (dio->flags & IOMAP_DIO_WRITE_FUA) &&
@@ -1644,8 +1650,14 @@ iomap_dio_bio_actor(struct inode *inode, loff_t pos, loff_t length, · 36 unmodified lines
16441650
16451651 ret = bio_iov_iter_get_pages(bio, &iter);
16461652 if (unlikely(ret)) {
1653+ /*
1654+ * We have to stop part way through an IO. We must fall
1655+ * through to the sub-block tail zeroing here, otherwise
1656+ * this short IO may expose stale data in the tail of
1657+ * the block we haven't written data to.
1658+ */
16471659 bio_put(bio);
1648− return copied ? copied : ret;
1660+ goto zero_tail;
16491661 }
16501662
16511663 n = bio->bi_iter.bi_size;
@@ -1676,13 +1688,21 @@ iomap_dio_bio_actor(struct inode *inode, loff_t pos, loff_t length, · 24 unmodified lines
16761688 dio->submit.cookie = submit_bio(bio);
16771689 } while (nr_pages);
16781690
1679− if (need_zeroout) {
1691+ /*
1692+ * We need to zeroout the tail of a sub-block write if the extent type
1693+ * requires zeroing or the write extends beyond EOF. If we don't zero
1694+ * the block tail in the latter case, we can expose stale data via mmap
1695+ * reads of the EOF block.
1696+ */
1697+zero_tail:
1698+ if (need_zeroout ||
1699+ ((dio->flags & IOMAP_DIO_WRITE) && pos >= i_size_read(inode))) {
16801700 /* zero out from the end of the write to the end of the block */
16811701 pad = pos & (fs_block_size - 1);
16821702 if (pad)
16831703 iomap_dio_zero(dio, iomap, pos, fs_block_size - pad);
16841704 }
1685− return copied;
1705+ return copied ? copied : ret;
16861706 }
16871707
16881708 static loff_t
@@ -1857,6 +1877,15 @@ iomap_dio_rw(struct kiocb *iocb, struct iov_iter *iter, · 168 unmodified lines
18571877 dio->wait_for_completion = true;
18581878 ret = 0;
18591879 }
1880+
1881+ /*
1882+ * Splicing to pipes can fail on a full pipe. We have to
1883+ * swallow this to make it look like a short IO
1884+ * otherwise the higher splice layers will completely
1885+ * mishandle the error and stop moving data.
1886+ */
1887+ if (ret == -EFAULT)
1888+ ret = 0;
18601889 break;
18611890 }
18621891 pos += ret;
fs/read_write.c+7−8
@@ -2094,17 +2094,18 @@ int vfs_dedupe_file_range(struct file *file, struct file_dedupe_range *same) · 2093 unmodified lines
20942094 off = same->src_offset;
20952095 len = same->src_length;
20962096
2097− ret = -EISDIR;
20982097 if (S_ISDIR(src->i_mode))
2099− goto out;
2098+ return -EISDIR;
21002099
2101− ret = -EINVAL;
21022100 if (!S_ISREG(src->i_mode))
2103− goto out;
2101+ return -EINVAL;
2102+
2103+ if (!file->f_op->remap_file_range)
2104+ return -EOPNOTSUPP;
21042105
21052106 ret = remap_verify_area(file, off, len, false);
21062107 if (ret < 0)
2107− goto out;
2108+ return ret;
21082109 ret = 0;
21092110
21102111 if (off + len > i_size_read(src))
@@ -2147,10 +2148,8 @@ next_fdput: · 36 unmodified lines
21472148 fdput(dst_fd);
21482149 next_loop:
21492150 if (fatal_signal_pending(current))
2150− goto out;
2151+ break;
21512152 }
2152−
2153−out:
21542153 return ret;
21552154 }
21562155 EXPORT_SYMBOL(vfs_dedupe_file_range);
fs/xfs/libxfs/xfs_bmap.c+4−1
@@ -1694,10 +1694,13 @@ xfs_bmap_add_extent_delay_real( · 1693 unmodified lines
16941694 case BMAP_LEFT_FILLING | BMAP_RIGHT_FILLING | BMAP_RIGHT_CONTIG:
16951695 /*
16961696 * Filling in all of a previously delayed allocation extent.
1697− * The right neighbor is contiguous, the left is not.
1697+ * The right neighbor is contiguous, the left is not. Take care
1698+ * with delay -> unwritten extent allocation here because the
1699+ * delalloc record we are overwriting is always written.
16981700 */
16991701 PREV.br_startblock = new->br_startblock;
17001702 PREV.br_blockcount += RIGHT.br_blockcount;
1703+ PREV.br_state = new->br_state;
17011704
17021705 xfs_iext_next(ifp, &bma->icur);
17031706 xfs_iext_remove(bma->ip, &bma->icur, state);
fs/xfs/libxfs/xfs_ialloc_btree.c+7−4
@@ -538,15 +538,18 @@ xfs_inobt_rec_check_count( · 537 unmodified lines
538538
539539 static xfs_extlen_t
540540 xfs_inobt_max_size(
541− struct xfs_mount *mp)
541+ struct xfs_mount *mp,
542+ xfs_agnumber_t agno)
542543 {
544+ xfs_agblock_t agblocks = xfs_ag_block_count(mp, agno);
545+
543546 /* Bail out if we're uninitialized, which can happen in mkfs. */
544547 if (mp->m_inobt_mxr[0] == 0)
545548 return 0;
546549
547550 return xfs_btree_calc_size(mp->m_inobt_mnr,
548− (uint64_t)mp->m_sb.sb_agblocks * mp->m_sb.sb_inopblock /
549− XFS_INODES_PER_CHUNK);
551+ (uint64_t)agblocks * mp->m_sb.sb_inopblock /
552+ XFS_INODES_PER_CHUNK);
550553 }
551554
552555 static int
@@ -594,7 +597,7 @@ xfs_finobt_calc_reserves( · 41 unmodified lines
594597 if (error)
595598 return error;
596599
597− *ask += xfs_inobt_max_size(mp);
600+ *ask += xfs_inobt_max_size(mp, agno);
598601 *used += tree_len;
599602 return 0;
600603 }
fs/xfs/xfs_bmap_util.c+2−8
@@ -1042,7 +1042,7 @@ out_trans_cancel: · 1041 unmodified lines
10421042 goto out_unlock;
10431043 }
10441044
1045−static int
1045+int
10461046 xfs_flush_unmap_range(
10471047 struct xfs_inode *ip,
10481048 xfs_off_t offset,
@@ -1195,13 +1195,7 @@ xfs_prepare_shift( · 146 unmodified lines
11951195 * Writeback and invalidate cache for the remainder of the file as we're
11961196 * about to shift down every extent from offset to EOF.
11971197 */
1198− error = filemap_write_and_wait_range(VFS_I(ip)->i_mapping, offset, -1);
1199− if (error)
1200− return error;
1201− error = invalidate_inode_pages2_range(VFS_I(ip)->i_mapping,
1202− offset >> PAGE_SHIFT, -1);
1203− if (error)
1204− return error;
1198+ error = xfs_flush_unmap_range(ip, offset, XFS_ISIZE(ip));
12051199
12061200 /*
12071201 * Clean out anything hanging around in the cow fork now that
fs/xfs/xfs_bmap_util.h+3−0
@@ -80,4 +80,7 @@ int xfs_bmap_count_blocks(struct xfs_trans *tp, struct xfs_inode *ip, · 79 unmodified lines
8080 int whichfork, xfs_extnum_t *nextents,
8181 xfs_filblks_t *count);
8282
83+int xfs_flush_unmap_range(struct xfs_inode *ip, xfs_off_t offset,
84+ xfs_off_t len);
85+
8386 #endif /* __XFS_BMAP_UTIL_H__ */
fs/xfs/xfs_buf_item.c+21−7
@@ -1233,9 +1233,23 @@ xfs_buf_iodone( · 1232 unmodified lines
12331233 }
12341234
12351235 /*
1236− * Requeue a failed buffer for writeback
1236+ * Requeue a failed buffer for writeback.
12371237 *
1238− * Return true if the buffer has been re-queued properly, false otherwise
1238+ * We clear the log item failed state here as well, but we have to be careful
1239+ * about reference counts because the only active reference counts on the buffer
1240+ * may be the failed log items. Hence if we clear the log item failed state
1241+ * before queuing the buffer for IO we can release all active references to
1242+ * the buffer and free it, leading to use after free problems in
1243+ * xfs_buf_delwri_queue. It makes no difference to the buffer or log items which
1244+ * order we process them in - the buffer is locked, and we own the buffer list
1245+ * so nothing on them is going to change while we are performing this action.
1246+ *
1247+ * Hence we can safely queue the buffer for IO before we clear the failed log
1248+ * item state, therefore always having an active reference to the buffer and
1249+ * avoiding the transient zero-reference state that leads to use-after-free.
1250+ *
1251+ * Return true if the buffer was added to the buffer list, false if it was
1252+ * already on the buffer list.
12391253 */
12401254 bool
12411255 xfs_buf_resubmit_failed_buffers(
@@ -1243,16 +1257,16 @@ xfs_buf_resubmit_failed_buffers( · 1 unmodified line
12431257 struct list_head *buffer_list)
12441258 {
12451259 struct xfs_log_item *lip;
1260+ bool ret;
1261+
1262+ ret = xfs_buf_delwri_queue(bp, buffer_list);
12461263
12471264 /*
1248− * Clear XFS_LI_FAILED flag from all items before resubmit
1249− *
1250− * XFS_LI_FAILED set/clear is protected by ail_lock, caller this
1265+ * XFS_LI_FAILED set/clear is protected by ail_lock, caller of this
12511266 * function already have it acquired
12521267 */
12531268 list_for_each_entry(lip, &bp->b_li_list, li_bio_list)
12541269 xfs_clear_li_failed(lip);
12551270
1256− /* Add this buffer back to the delayed write list */
1257− return xfs_buf_delwri_queue(bp, buffer_list);
1271+ return ret;
12581272 }
fs/xfs/xfs_file.c+1−1
@@ -920,7 +920,7 @@ out_unlock: · 919 unmodified lines
920920 }
921921
922922
923−loff_t
923+STATIC loff_t
924924 xfs_file_remap_range(
925925 struct file *file_in,
926926 loff_t pos_in,
fs/xfs/xfs_reflink.c+14−4
@@ -296,6 +296,7 @@ xfs_reflink_reserve_cow( · 295 unmodified lines
296296 if (error)
297297 return error;
298298
299+ xfs_trim_extent(imap, got.br_startoff, got.br_blockcount);
299300 trace_xfs_reflink_cow_alloc(ip, &got);
300301 return 0;
301302 }
@@ -1351,10 +1352,19 @@ xfs_reflink_remap_prep( · 1049 unmodified lines
13511352 if (ret)
13521353 goto out_unlock;
13531354
1354− /* Zap any page cache for the destination file's range. */
1355− truncate_inode_pages_range(&inode_out->i_data,
1356− round_down(pos_out, PAGE_SIZE),
1357− round_up(pos_out + *len, PAGE_SIZE) - 1);
1355+ /*
1356+ * If pos_out > EOF, we may have dirtied blocks between EOF and
1357+ * pos_out. In that case, we need to extend the flush and unmap to cover
1358+ * from EOF to the end of the copy length.
1359+ */
1360+ if (pos_out > XFS_ISIZE(dest)) {
1361+ loff_t flen = *len + (pos_out - XFS_ISIZE(dest));
1362+ ret = xfs_flush_unmap_range(dest, XFS_ISIZE(dest), flen);
1363+ } else {
1364+ ret = xfs_flush_unmap_range(dest, pos_out, *len);
1365+ }
1366+ if (ret)
1367+ goto out_unlock;
13581368
13591369 return 1;
13601370 out_unlock:
fs/xfs/xfs_trace.h+4−1
@@ -280,7 +280,10 @@ DECLARE_EVENT_CLASS(xfs_buf_class, · 279 unmodified lines
280280 ),
281281 TP_fast_assign(
282282 __entry->dev = bp->b_target->bt_dev;
283− __entry->bno = bp->b_bn;
283+ if (bp->b_bn == XFS_BUF_DADDR_NULL)
284+ __entry->bno = bp->b_maps[0].bm_bn;
285+ else
286+ __entry->bno = bp->b_bn;
284287 __entry->nblks = bp->b_length;
285288 __entry->hold = atomic_read(&bp->b_hold);
286289 __entry->pincount = atomic_read(&bp->b_pin_count);
include/linux/net_dim.h+2−0
@@ -406,6 +406,8 @@ static inline void net_dim(struct net_dim *dim, · 405 unmodified lines
406406 }
407407 /* fall through */
408408 case NET_DIM_START_MEASURE:
409+ net_dim_sample(end_sample.event_ctr, end_sample.pkt_ctr, end_sample.byte_ctr,
410+ &dim->start_sample);
409411 dim->state = NET_DIM_MEASURE_IN_PROGRESS;
410412 break;
411413 case NET_DIM_APPLY_NEW_PROFILE:
include/linux/skbuff.h+17−1
@@ -1334,6 +1334,22 @@ static inline void skb_zcopy_set(struct sk_buff *skb, struct ubuf_info *uarg) · 1333 unmodified lines
13341334 }
13351335 }
13361336
1337+static inline void skb_zcopy_set_nouarg(struct sk_buff *skb, void *val)
1338+{
1339+ skb_shinfo(skb)->destructor_arg = (void *)((uintptr_t) val | 0x1UL);
1340+ skb_shinfo(skb)->tx_flags |= SKBTX_ZEROCOPY_FRAG;
1341+}
1342+
1343+static inline bool skb_zcopy_is_nouarg(struct sk_buff *skb)
1344+{
1345+ return (uintptr_t) skb_shinfo(skb)->destructor_arg & 0x1UL;
1346+}
1347+
1348+static inline void *skb_zcopy_get_nouarg(struct sk_buff *skb)
1349+{
1350+ return (void *)((uintptr_t) skb_shinfo(skb)->destructor_arg & ~0x1UL);
1351+}
1352+
13371353 /* Release a reference on a zerocopy structure */
13381354 static inline void skb_zcopy_clear(struct sk_buff *skb, bool zerocopy)
13391355 {
@@ -1343,7 +1359,7 @@ static inline void skb_zcopy_clear(struct sk_buff *skb, bool zerocopy) · 3 unmodified lines
13431359 if (uarg->callback == sock_zerocopy_callback) {
13441360 uarg->zerocopy = uarg->zerocopy && zerocopy;
13451361 sock_zerocopy_put(uarg);
1346− } else {
1362+ } else if (!skb_zcopy_is_nouarg(skb)) {
13471363 uarg->callback(uarg, zerocopy);
13481364 }
13491365
include/linux/tcp.h+1−0
@@ -196,6 +196,7 @@ struct tcp_sock { · 195 unmodified lines
196196 u32 rcv_tstamp; /* timestamp of last received ACK (for keepalives) */
197197 u32 lsndtime; /* timestamp of last sent data packet (for restart window) */
198198 u32 last_oow_ack_time; /* timestamp of last out-of-window ACK */
199+ u32 compressed_ack_rcv_nxt;
199200
200201 u32 tsoffset; /* timestamp offset */
201202
include/linux/usb/quirks.h+3−0
@@ -66,4 +66,7 @@ · 65 unmodified lines
6666 /* Device needs a pause after every control message. */
6767 #define USB_QUIRK_DELAY_CTRL_MSG BIT(13)
6868
69+/* Hub needs extra delay after resetting its port. */
70+#define USB_QUIRK_HUB_SLOW_RESET BIT(14)
71+
6972 #endif /* __LINUX_USB_QUIRKS_H */
include/media/v4l2-mem2mem.h+1−1
@@ -624,7 +624,7 @@ v4l2_m2m_dst_buf_remove_by_idx(struct v4l2_m2m_ctx *m2m_ctx, unsigned int idx) · 623 unmodified lines
624624
625625 /* v4l2 request helper */
626626
627−void vb2_m2m_request_queue(struct media_request *req);
627+void v4l2_m2m_request_queue(struct media_request *req);
628628
629629 /* v4l2 ioctl helpers */
630630
include/net/sctp/sctp.h+12−0
@@ -608,4 +608,16 @@ static inline __u32 sctp_dst_mtu(const struct dst_entry *dst) · 607 unmodified lines
608608 SCTP_DEFAULT_MINSEGMENT));
609609 }
610610
611+static inline bool sctp_transport_pmtu_check(struct sctp_transport *t)
612+{
613+ __u32 pmtu = sctp_dst_mtu(t->dst);
614+
615+ if (t->pathmtu == pmtu)
616+ return true;
617+
618+ t->pathmtu = pmtu;
619+
620+ return false;
621+}
622+
611623 #endif /* __net_sctp_h__ */
include/uapi/linux/v4l2-controls.h+5−0
@@ -50,6 +50,8 @@ · 49 unmodified lines
5050 #ifndef __LINUX_V4L2_CONTROLS_H
5151 #define __LINUX_V4L2_CONTROLS_H
5252
53+#include <linux/types.h>
54+
5355 /* Control classes */
5456 #define V4L2_CTRL_CLASS_USER 0x00980000 /* Old-style 'user' controls */
5557 #define V4L2_CTRL_CLASS_MPEG 0x00990000 /* MPEG-compression controls */
@@ -1110,6 +1112,7 @@ struct v4l2_mpeg2_sequence { · 1054 unmodified lines
11101112 __u8 profile_and_level_indication;
11111113 __u8 progressive_sequence;
11121114 __u8 chroma_format;
1115+ __u8 pad;
11131116 };
11141117
11151118 struct v4l2_mpeg2_picture {
@@ -1128,6 +1131,7 @@ struct v4l2_mpeg2_picture { · 12 unmodified lines
11281131 __u8 alternate_scan;
11291132 __u8 repeat_first_field;
11301133 __u8 progressive_frame;
1134+ __u8 pad;
11311135 };
11321136
11331137 struct v4l2_ctrl_mpeg2_slice_params {
@@ -1142,6 +1146,7 @@ struct v4l2_ctrl_mpeg2_slice_params { · 8 unmodified lines
11421146
11431147 __u8 backward_ref_index;
11441148 __u8 forward_ref_index;
1149+ __u8 pad;
11451150 };
11461151
11471152 struct v4l2_ctrl_mpeg2_quantization {
lib/test_firmware.c+1−0
@@ -837,6 +837,7 @@ static ssize_t read_firmware_show(struct device *dev, · 836 unmodified lines
837837 if (req->fw->size > PAGE_SIZE) {
838838 pr_err("Testing interface must use PAGE_SIZE firmware for now\n");
839839 rc = -EINVAL;
840+ goto out;
840841 }
841842 memcpy(buf, req->fw->data, req->fw->size);
842843
net/ceph/messenger.c+9−3
@@ -580,9 +580,15 @@ static int ceph_tcp_sendpage(struct socket *sock, struct page *page, · 579 unmodified lines
580580 struct bio_vec bvec;
581581 int ret;
582582
583− /* sendpage cannot properly handle pages with page_count == 0,
584− * we need to fallback to sendmsg if that's the case */
585− if (page_count(page) >= 1)
583+ /*
584+ * sendpage cannot properly handle pages with page_count == 0,
585+ * we need to fall back to sendmsg if that's the case.
586+ *
587+ * Same goes for slab pages: skb_can_coalesce() allows
588+ * coalescing neighboring slab objects into a single frag which
589+ * triggers one of hardened usercopy checks.
590+ */
591+ if (page_count(page) >= 1 && !PageSlab(page))
586592 return __ceph_tcp_sendpage(sock, page, offset, size, more);
587593
588594 bvec.bv_page = page;
net/core/dev.c+5−2
@@ -5981,11 +5981,14 @@ bool napi_complete_done(struct napi_struct *n, int work_done) · 5980 unmodified lines
59815981 if (work_done)
59825982 timeout = n->dev->gro_flush_timeout;
59835983
5984+ /* When the NAPI instance uses a timeout and keeps postponing
5985+ * it, we need to bound somehow the time packets are kept in
5986+ * the GRO layer
5987+ */
5988+ napi_gro_flush(n, !!timeout);
59845989 if (timeout)
59855990 hrtimer_start(&n->timer, ns_to_ktime(timeout),
59865991 HRTIMER_MODE_REL_PINNED);
5987− else
5988− napi_gro_flush(n, false);
59895992 }
59905993 if (unlikely(!list_empty(&n->poll_list))) {
59915994 /* If n->poll_list is not empty, we need to mask irqs */
net/ipv4/tcp_input.c+13−2
@@ -4269,7 +4269,7 @@ static void tcp_sack_new_ofo_skb(struct sock *sk, u32 seq, u32 end_seq) · 4268 unmodified lines
42694269 * If the sack array is full, forget about the last one.
42704270 */
42714271 if (this_sack >= TCP_NUM_SACKS) {
4272− if (tp->compressed_ack)
4272+ if (tp->compressed_ack > TCP_FASTRETRANS_THRESH)
42734273 tcp_send_ack(sk);
42744274 this_sack--;
42754275 tp->rx_opt.num_sacks--;
@@ -4364,6 +4364,7 @@ static bool tcp_try_coalesce(struct sock *sk, · 88 unmodified lines
43644364 if (TCP_SKB_CB(from)->has_rxtstamp) {
43654365 TCP_SKB_CB(to)->has_rxtstamp = true;
43664366 to->tstamp = from->tstamp;
4367+ skb_hwtstamps(to)->hwtstamp = skb_hwtstamps(from)->hwtstamp;
43674368 }
43684369
43694370 return true;
@@ -5189,7 +5190,17 @@ send_now: · 819 unmodified lines
51895190 if (!tcp_is_sack(tp) ||
51905191 tp->compressed_ack >= sock_net(sk)->ipv4.sysctl_tcp_comp_sack_nr)
51915192 goto send_now;
5192− tp->compressed_ack++;
5193+
5194+ if (tp->compressed_ack_rcv_nxt != tp->rcv_nxt) {
5195+ tp->compressed_ack_rcv_nxt = tp->rcv_nxt;
5196+ if (tp->compressed_ack > TCP_FASTRETRANS_THRESH)
5197+ NET_ADD_STATS(sock_net(sk), LINUX_MIB_TCPACKCOMPRESSED,
5198+ tp->compressed_ack - TCP_FASTRETRANS_THRESH);
5199+ tp->compressed_ack = 0;
5200+ }
5201+
5202+ if (++tp->compressed_ack <= TCP_FASTRETRANS_THRESH)
5203+ goto send_now;
51935204
51945205 if (hrtimer_is_queued(&tp->compressed_ack_timer))
51955206 return;
net/ipv4/tcp_output.c+3−3
@@ -180,10 +180,10 @@ static inline void tcp_event_ack_sent(struct sock *sk, unsigned int pkts, · 179 unmodified lines
180180 {
181181 struct tcp_sock *tp = tcp_sk(sk);
182182
183− if (unlikely(tp->compressed_ack)) {
183+ if (unlikely(tp->compressed_ack > TCP_FASTRETRANS_THRESH)) {
184184 NET_ADD_STATS(sock_net(sk), LINUX_MIB_TCPACKCOMPRESSED,
185− tp->compressed_ack);
186− tp->compressed_ack = 0;
185+ tp->compressed_ack - TCP_FASTRETRANS_THRESH);
186+ tp->compressed_ack = TCP_FASTRETRANS_THRESH;
187187 if (hrtimer_try_to_cancel(&tp->compressed_ack_timer) == 1)
188188 __sock_put(sk);
189189 }
net/ipv4/tcp_timer.c+1−1
@@ -740,7 +740,7 @@ static enum hrtimer_restart tcp_compressed_ack_kick(struct hrtimer *timer) · 739 unmodified lines
740740
741741 bh_lock_sock(sk);
742742 if (!sock_owned_by_user(sk)) {
743− if (tp->compressed_ack)
743+ if (tp->compressed_ack > TCP_FASTRETRANS_THRESH)
744744 tcp_send_ack(sk);
745745 } else {
746746 if (!test_and_set_bit(TCP_DELACK_TIMER_DEFERRED,
net/ipv6/addrconf.c+13−6
@@ -179,7 +179,7 @@ static void addrconf_dad_start(struct inet6_ifaddr *ifp); · 178 unmodified lines
179179 static void addrconf_dad_work(struct work_struct *w);
180180 static void addrconf_dad_completed(struct inet6_ifaddr *ifp, bool bump_id,
181181 bool send_na);
182−static void addrconf_dad_run(struct inet6_dev *idev);
182+static void addrconf_dad_run(struct inet6_dev *idev, bool restart);
183183 static void addrconf_rs_timer(struct timer_list *t);
184184 static void __ipv6_ifa_notify(int event, struct inet6_ifaddr *ifa);
185185 static void ipv6_ifa_notify(int event, struct inet6_ifaddr *ifa);
@@ -3439,6 +3439,7 @@ static int addrconf_notify(struct notifier_block *this, unsigned long event, · 3253 unmodified lines
34393439 void *ptr)
34403440 {
34413441 struct net_device *dev = netdev_notifier_info_to_dev(ptr);
3442+ struct netdev_notifier_change_info *change_info;
34423443 struct netdev_notifier_changeupper_info *info;
34433444 struct inet6_dev *idev = __in6_dev_get(dev);
34443445 struct net *net = dev_net(dev);
@@ -3513,7 +3514,7 @@ static int addrconf_notify(struct notifier_block *this, unsigned long event, · 68 unmodified lines
35133514 break;
35143515 }
35153516
3516− if (idev) {
3517+ if (!IS_ERR_OR_NULL(idev)) {
35173518 if (idev->if_flags & IF_READY) {
35183519 /* device is already configured -
35193520 * but resend MLD reports, we might
@@ -3521,6 +3522,9 @@ static int addrconf_notify(struct notifier_block *this, unsigned long event, · 1 unmodified line
35213522 * multicast snooping switches
35223523 */
35233524 ipv6_mc_up(idev);
3525+ change_info = ptr;
3526+ if (change_info->flags_changed & IFF_NOARP)
3527+ addrconf_dad_run(idev, true);
35243528 rt6_sync_up(dev, RTNH_F_LINKDOWN);
35253529 break;
35263530 }
@@ -3555,7 +3559,7 @@ static int addrconf_notify(struct notifier_block *this, unsigned long event, · 28 unmodified lines
35553559
35563560 if (!IS_ERR_OR_NULL(idev)) {
35573561 if (run_pending)
3558− addrconf_dad_run(idev);
3562+ addrconf_dad_run(idev, false);
35593563
35603564 /* Device has an address by now */
35613565 rt6_sync_up(dev, RTNH_F_DEAD);
@@ -4173,16 +4177,19 @@ static void addrconf_dad_completed(struct inet6_ifaddr *ifp, bool bump_id, · 611 unmodified lines
41734177 addrconf_verify_rtnl();
41744178 }
41754179
4176−static void addrconf_dad_run(struct inet6_dev *idev)
4180+static void addrconf_dad_run(struct inet6_dev *idev, bool restart)
41774181 {
41784182 struct inet6_ifaddr *ifp;
41794183
41804184 read_lock_bh(&idev->lock);
41814185 list_for_each_entry(ifp, &idev->addr_list, if_list) {
41824186 spin_lock(&ifp->lock);
4183− if (ifp->flags & IFA_F_TENTATIVE &&
4184− ifp->state == INET6_IFADDR_STATE_DAD)
4187+ if ((ifp->flags & IFA_F_TENTATIVE &&
4188+ ifp->state == INET6_IFADDR_STATE_DAD) || restart) {
4189+ if (restart)
4190+ ifp->state = INET6_IFADDR_STATE_PREDAD;
41854191 addrconf_dad_kick(ifp);
4192+ }
41864193 spin_unlock(&ifp->lock);
41874194 }
41884195 read_unlock_bh(&idev->lock);
net/packet/af_packet.c+2−2
@@ -2394,7 +2394,7 @@ static void tpacket_destruct_skb(struct sk_buff *skb) · 2393 unmodified lines
23942394 void *ph;
23952395 __u32 ts;
23962396
2397− ph = skb_shinfo(skb)->destructor_arg;
2397+ ph = skb_zcopy_get_nouarg(skb);
23982398 packet_dec_pending(&po->tx_ring);
23992399
24002400 ts = __packet_set_timestamp(po, ph, skb);
@@ -2461,7 +2461,7 @@ static int tpacket_fill_skb(struct packet_sock *po, struct sk_buff *skb, · 60 unmodified lines
24612461 skb->mark = po->sk.sk_mark;
24622462 skb->tstamp = sockc->transmit_time;
24632463 sock_tx_timestamp(&po->sk, sockc->tsflags, &skb_shinfo(skb)->tx_flags);
2464− skb_shinfo(skb)->destructor_arg = ph.raw;
2464+ skb_zcopy_set_nouarg(skb, ph.raw);
24652465
24662466 skb_reserve(skb, hlen);
24672467 skb_reset_network_header(skb);
net/sched/act_police.c+22−14
@@ -27,10 +27,7 @@ struct tcf_police_params { · 26 unmodified lines
2727 u32 tcfp_ewma_rate;
2828 s64 tcfp_burst;
2929 u32 tcfp_mtu;
30− s64 tcfp_toks;
31− s64 tcfp_ptoks;
3230 s64 tcfp_mtu_ptoks;
33− s64 tcfp_t_c;
3431 struct psched_ratecfg rate;
3532 bool rate_present;
3633 struct psched_ratecfg peak;
@@ -41,6 +38,11 @@ struct tcf_police_params { · 4 unmodified lines
4138 struct tcf_police {
4239 struct tc_action common;
4340 struct tcf_police_params __rcu *params;
41+
42+ spinlock_t tcfp_lock ____cacheline_aligned_in_smp;
43+ s64 tcfp_toks;
44+ s64 tcfp_ptoks;
45+ s64 tcfp_t_c;
4446 };
4547
4648 #define to_police(pc) ((struct tcf_police *)pc)
@@ -122,6 +124,7 @@ static int tcf_police_init(struct net *net, struct nlattr *nla, · 75 unmodified lines
122124 return ret;
123125 }
124126 ret = ACT_P_CREATED;
127+ spin_lock_init(&(to_police(*a)->tcfp_lock));
125128 } else if (!ovr) {
126129 tcf_idr_release(*a, bind);
127130 return -EEXIST;
@@ -186,12 +189,9 @@ static int tcf_police_init(struct net *net, struct nlattr *nla, · 58 unmodified lines
186189 }
187190
188191 new->tcfp_burst = PSCHED_TICKS2NS(parm->burst);
189− new->tcfp_toks = new->tcfp_burst;
190− if (new->peak_present) {
192+ if (new->peak_present)
191193 new->tcfp_mtu_ptoks = (s64)psched_l2t_ns(&new->peak,
192194 new->tcfp_mtu);
193− new->tcfp_ptoks = new->tcfp_mtu_ptoks;
194− }
195195
196196 if (tb[TCA_POLICE_AVRATE])
197197 new->tcfp_ewma_rate = nla_get_u32(tb[TCA_POLICE_AVRATE]);
@@ -207,7 +207,12 @@ static int tcf_police_init(struct net *net, struct nlattr *nla, · 9 unmodified lines
207207 }
208208
209209 spin_lock_bh(&police->tcf_lock);
210− new->tcfp_t_c = ktime_get_ns();
210+ spin_lock_bh(&police->tcfp_lock);
211+ police->tcfp_t_c = ktime_get_ns();
212+ police->tcfp_toks = new->tcfp_burst;
213+ if (new->peak_present)
214+ police->tcfp_ptoks = new->tcfp_mtu_ptoks;
215+ spin_unlock_bh(&police->tcfp_lock);
211216 police->tcf_action = parm->action;
212217 rcu_swap_protected(police->params,
213218 new,
@@ -257,25 +262,28 @@ static int tcf_police_act(struct sk_buff *skb, const struct tc_action *a, · 43 unmodified lines
257262 }
258263
259264 now = ktime_get_ns();
260− toks = min_t(s64, now - p->tcfp_t_c, p->tcfp_burst);
265+ spin_lock_bh(&police->tcfp_lock);
266+ toks = min_t(s64, now - police->tcfp_t_c, p->tcfp_burst);
261267 if (p->peak_present) {
262− ptoks = toks + p->tcfp_ptoks;
268+ ptoks = toks + police->tcfp_ptoks;
263269 if (ptoks > p->tcfp_mtu_ptoks)
264270 ptoks = p->tcfp_mtu_ptoks;
265271 ptoks -= (s64)psched_l2t_ns(&p->peak,
266272 qdisc_pkt_len(skb));
267273 }
268− toks += p->tcfp_toks;
274+ toks += police->tcfp_toks;
269275 if (toks > p->tcfp_burst)
270276 toks = p->tcfp_burst;
271277 toks -= (s64)psched_l2t_ns(&p->rate, qdisc_pkt_len(skb));
272278 if ((toks|ptoks) >= 0) {
273− p->tcfp_t_c = now;
274− p->tcfp_toks = toks;
275− p->tcfp_ptoks = ptoks;
279+ police->tcfp_t_c = now;
280+ police->tcfp_toks = toks;
281+ police->tcfp_ptoks = ptoks;
282+ spin_unlock_bh(&police->tcfp_lock);
276283 ret = p->tcfp_result;
277284 goto inc_drops;
278285 }
286+ spin_unlock_bh(&police->tcfp_lock);
279287 }
280288
281289 inc_overlimits:
net/sctp/output.c+4−20
@@ -118,6 +118,9 @@ void sctp_packet_config(struct sctp_packet *packet, __u32 vtag, · 117 unmodified lines
118118 sctp_transport_route(tp, NULL, sp);
119119 if (asoc->param_flags & SPP_PMTUD_ENABLE)
120120 sctp_assoc_sync_pmtu(asoc);
121+ } else if (!sctp_transport_pmtu_check(tp)) {
122+ if (asoc->param_flags & SPP_PMTUD_ENABLE)
123+ sctp_assoc_sync_pmtu(asoc);
121124 }
122125
123126 if (asoc->pmtu_pending) {
@@ -396,25 +399,6 @@ finish: · 272 unmodified lines
396399 return retval;
397400 }
398401
399−static void sctp_packet_release_owner(struct sk_buff *skb)
400−{
401− sk_free(skb->sk);
402−}
403−
404−static void sctp_packet_set_owner_w(struct sk_buff *skb, struct sock *sk)
405−{
406− skb_orphan(skb);
407− skb->sk = sk;
408− skb->destructor = sctp_packet_release_owner;
409−
410− /*
411− * The data chunks have already been accounted for in sctp_sendmsg(),
412− * therefore only reserve a single byte to keep socket around until
413− * the packet has been transmitted.
414− */
415− refcount_inc(&sk->sk_wmem_alloc);
416−}
417−
418402 static void sctp_packet_gso_append(struct sk_buff *head, struct sk_buff *skb)
419403 {
420404 if (SCTP_OUTPUT_CB(head)->last == head)
@@ -601,7 +585,7 @@ int sctp_packet_transmit(struct sctp_packet *packet, gfp_t gfp) · 180 unmodified lines
601585 if (!head)
602586 goto out;
603587 skb_reserve(head, packet->overhead + MAX_HEADER);
604− sctp_packet_set_owner_w(head, sk);
588+ skb_set_owner_w(head, sk);
605589
606590 /* set sctp header */
607591 sh = skb_push(head, sizeof(struct sctphdr));
net/sctp/socket.c+5−21
@@ -3951,32 +3951,16 @@ static int sctp_setsockopt_pr_supported(struct sock *sk, · 3950 unmodified lines
39513951 unsigned int optlen)
39523952 {
39533953 struct sctp_assoc_value params;
3954− struct sctp_association *asoc;
3955− int retval = -EINVAL;
39563954
39573955 if (optlen != sizeof(params))
3958− goto out;
3959−
3960− if (copy_from_user(&params, optval, optlen)) {
3961− retval = -EFAULT;
3962− goto out;
3963− }
3964−
3965− asoc = sctp_id2assoc(sk, params.assoc_id);
3966− if (asoc) {
3967− asoc->prsctp_enable = !!params.assoc_value;
3968− } else if (!params.assoc_id) {
3969− struct sctp_sock *sp = sctp_sk(sk);
3956+ return -EINVAL;
39703957
3971− sp->ep->prsctp_enable = !!params.assoc_value;
3972− } else {
3973− goto out;
3974− }
3958+ if (copy_from_user(&params, optval, optlen))
3959+ return -EFAULT;
39753960
3976− retval = 0;
3961+ sctp_sk(sk)->ep->prsctp_enable = !!params.assoc_value;
39773962
3978−out:
3979− return retval;
3963+ return 0;
39803964 }
39813965
39823966 static int sctp_setsockopt_default_prinfo(struct sock *sk,
net/sctp/stream.c+0−1
@@ -535,7 +535,6 @@ int sctp_send_add_streams(struct sctp_association *asoc, · 534 unmodified lines
535535 goto out;
536536 }
537537
538− stream->incnt = incnt;
539538 stream->outcnt = outcnt;
540539
541540 asoc->strreset_outstanding = !!out + !!in;
net/smc/af_smc.c+7−4
@@ -127,6 +127,8 @@ static int smc_release(struct socket *sock) · 126 unmodified lines
127127 smc = smc_sk(sk);
128128
129129 /* cleanup for a dangling non-blocking connect */
130+ if (smc->connect_info && sk->sk_state == SMC_INIT)
131+ tcp_abort(smc->clcsock->sk, ECONNABORTED);
130132 flush_work(&smc->connect_work);
131133 kfree(smc->connect_info);
132134 smc->connect_info = NULL;
@@ -551,7 +553,8 @@ static int smc_connect_rdma(struct smc_sock *smc, · 418 unmodified lines
551553
552554 mutex_lock(&smc_create_lgr_pending);
553555 local_contact = smc_conn_create(smc, false, aclc->hdr.flag, ibdev,
554− ibport, &aclc->lcl, NULL, 0);
556+ ibport, ntoh24(aclc->qpn), &aclc->lcl,
557+ NULL, 0);
555558 if (local_contact < 0) {
556559 if (local_contact == -ENOMEM)
557560 reason_code = SMC_CLC_DECL_MEM;/* insufficient memory*/
@@ -621,7 +624,7 @@ static int smc_connect_ism(struct smc_sock *smc, · 63 unmodified lines
621624 int rc = 0;
622625
623626 mutex_lock(&smc_create_lgr_pending);
624− local_contact = smc_conn_create(smc, true, aclc->hdr.flag, NULL, 0,
627+ local_contact = smc_conn_create(smc, true, aclc->hdr.flag, NULL, 0, 0,
625628 NULL, ismdev, aclc->gid);
626629 if (local_contact < 0)
627630 return smc_connect_abort(smc, SMC_CLC_DECL_MEM, 0);
@@ -1086,7 +1089,7 @@ static int smc_listen_rdma_init(struct smc_sock *new_smc, · 458 unmodified lines
10861089 int *local_contact)
10871090 {
10881091 /* allocate connection / link group */
1089− *local_contact = smc_conn_create(new_smc, false, 0, ibdev, ibport,
1092+ *local_contact = smc_conn_create(new_smc, false, 0, ibdev, ibport, 0,
10901093 &pclc->lcl, NULL, 0);
10911094 if (*local_contact < 0) {
10921095 if (*local_contact == -ENOMEM)
@@ -1110,7 +1113,7 @@ static int smc_listen_ism_init(struct smc_sock *new_smc, · 17 unmodified lines
11101113 struct smc_clc_msg_smcd *pclc_smcd;
11111114
11121115 pclc_smcd = smc_get_clc_msg_smcd(pclc);
1113− *local_contact = smc_conn_create(new_smc, true, 0, NULL, 0, NULL,
1116+ *local_contact = smc_conn_create(new_smc, true, 0, NULL, 0, 0, NULL,
11141117 ismdev, pclc_smcd->gid);
11151118 if (*local_contact < 0) {
11161119 if (*local_contact == -ENOMEM)
net/smc/smc_cdc.c+15−11
@@ -81,7 +81,7 @@ static inline void smc_cdc_add_pending_send(struct smc_connection *conn, · 80 unmodified lines
8181 sizeof(struct smc_cdc_msg) > SMC_WR_BUF_SIZE,
8282 "must increase SMC_WR_BUF_SIZE to at least sizeof(struct smc_cdc_msg)");
8383 BUILD_BUG_ON_MSG(
84− sizeof(struct smc_cdc_msg) != SMC_WR_TX_SIZE,
84+ offsetofend(struct smc_cdc_msg, reserved) > SMC_WR_TX_SIZE,
8585 "must adapt SMC_WR_TX_SIZE to sizeof(struct smc_cdc_msg); if not all smc_wr upper layer protocols use the same message size any more, must start to set link->wr_tx_sges[i].length on each individual smc_wr_tx_send()");
8686 BUILD_BUG_ON_MSG(
8787 sizeof(struct smc_cdc_tx_pend) > SMC_WR_TX_PEND_PRIV_SIZE,
@@ -177,23 +177,24 @@ void smc_cdc_tx_dismiss_slots(struct smc_connection *conn) · 89 unmodified lines
177177 int smcd_cdc_msg_send(struct smc_connection *conn)
178178 {
179179 struct smc_sock *smc = container_of(conn, struct smc_sock, conn);
180+ union smc_host_cursor curs;
180181 struct smcd_cdc_msg cdc;
181182 int rc, diff;
182183
183184 memset(&cdc, 0, sizeof(cdc));
184185 cdc.common.type = SMC_CDC_MSG_TYPE;
185− cdc.prod_wrap = conn->local_tx_ctrl.prod.wrap;
186− cdc.prod_count = conn->local_tx_ctrl.prod.count;
187−
188− cdc.cons_wrap = conn->local_tx_ctrl.cons.wrap;
189− cdc.cons_count = conn->local_tx_ctrl.cons.count;
190− cdc.prod_flags = conn->local_tx_ctrl.prod_flags;
191− cdc.conn_state_flags = conn->local_tx_ctrl.conn_state_flags;
186+ curs.acurs.counter = atomic64_read(&conn->local_tx_ctrl.prod.acurs);
187+ cdc.prod.wrap = curs.wrap;
188+ cdc.prod.count = curs.count;
189+ curs.acurs.counter = atomic64_read(&conn->local_tx_ctrl.cons.acurs);
190+ cdc.cons.wrap = curs.wrap;
191+ cdc.cons.count = curs.count;
192+ cdc.cons.prod_flags = conn->local_tx_ctrl.prod_flags;
193+ cdc.cons.conn_state_flags = conn->local_tx_ctrl.conn_state_flags;
192194 rc = smcd_tx_ism_write(conn, &cdc, sizeof(cdc), 0, 1);
193195 if (rc)
194196 return rc;
195− smc_curs_copy(&conn->rx_curs_confirmed, &conn->local_tx_ctrl.cons,
196− conn);
197+ smc_curs_copy(&conn->rx_curs_confirmed, &curs, conn);
197198 /* Calculate transmitted data and increment free send buffer space */
198199 diff = smc_curs_diff(conn->sndbuf_desc->len, &conn->tx_curs_fin,
199200 &conn->tx_curs_sent);
@@ -331,13 +332,16 @@ static void smc_cdc_msg_recv(struct smc_sock *smc, struct smc_cdc_msg *cdc) · 131 unmodified lines
331332 static void smcd_cdc_rx_tsklet(unsigned long data)
332333 {
333334 struct smc_connection *conn = (struct smc_connection *)data;
335+ struct smcd_cdc_msg *data_cdc;
334336 struct smcd_cdc_msg cdc;
335337 struct smc_sock *smc;
336338
337339 if (!conn)
338340 return;
339341
340− memcpy(&cdc, conn->rmb_desc->cpu_addr, sizeof(cdc));
342+ data_cdc = (struct smcd_cdc_msg *)conn->rmb_desc->cpu_addr;
343+ smcd_curs_copy(&cdc.prod, &data_cdc->prod, conn);
344+ smcd_curs_copy(&cdc.cons, &data_cdc->cons, conn);
341345 smc = container_of(conn, struct smc_sock, conn);
342346 smc_cdc_msg_recv(smc, (struct smc_cdc_msg *)&cdc);
343347 }
net/smc/smc_cdc.h+45−15
@@ -48,21 +48,31 @@ struct smc_cdc_msg { · 47 unmodified lines
4848 struct smc_cdc_producer_flags prod_flags;
4949 struct smc_cdc_conn_state_flags conn_state_flags;
5050 u8 reserved[18];
51−} __packed; /* format defined in RFC7609 */
51+};
52+
53+/* SMC-D cursor format */
54+union smcd_cdc_cursor {
55+ struct {
56+ u16 wrap;
57+ u32 count;
58+ struct smc_cdc_producer_flags prod_flags;
59+ struct smc_cdc_conn_state_flags conn_state_flags;
60+ } __packed;
61+#ifdef KERNEL_HAS_ATOMIC64
62+ atomic64_t acurs; /* for atomic processing */
63+#else
64+ u64 acurs; /* for atomic processing */
65+#endif
66+} __aligned(8);
5267
5368 /* CDC message for SMC-D */
5469 struct smcd_cdc_msg {
5570 struct smc_wr_rx_hdr common; /* Type = 0xFE */
5671 u8 res1[7];
57− u16 prod_wrap;
58− u32 prod_count;
59− u8 res2[2];
60− u16 cons_wrap;
61− u32 cons_count;
62− struct smc_cdc_producer_flags prod_flags;
63− struct smc_cdc_conn_state_flags conn_state_flags;
72+ union smcd_cdc_cursor prod;
73+ union smcd_cdc_cursor cons;
6474 u8 res3[8];
65−} __packed;
75+} __aligned(8);
6676
6777 static inline bool smc_cdc_rxed_any_close(struct smc_connection *conn)
6878 {
@@ -135,6 +145,21 @@ static inline void smc_curs_copy_net(union smc_cdc_cursor *tgt, · 66 unmodified lines
135145 #endif
136146 }
137147
148+static inline void smcd_curs_copy(union smcd_cdc_cursor *tgt,
149+ union smcd_cdc_cursor *src,
150+ struct smc_connection *conn)
151+{
152+#ifndef KERNEL_HAS_ATOMIC64
153+ unsigned long flags;
154+
155+ spin_lock_irqsave(&conn->acurs_lock, flags);
156+ tgt->acurs = src->acurs;
157+ spin_unlock_irqrestore(&conn->acurs_lock, flags);
158+#else
159+ atomic64_set(&tgt->acurs, atomic64_read(&src->acurs));
160+#endif
161+}
162+
138163 /* calculate cursor difference between old and new, where old <= new */
139164 static inline int smc_curs_diff(unsigned int size,
140165 union smc_host_cursor *old,
@@ -222,12 +247,17 @@ static inline void smcr_cdc_msg_to_host(struct smc_host_cdc_msg *local, · 81 unmodified lines
222247 static inline void smcd_cdc_msg_to_host(struct smc_host_cdc_msg *local,
223248 struct smcd_cdc_msg *peer)
224249 {
225− local->prod.wrap = peer->prod_wrap;
226− local->prod.count = peer->prod_count;
227− local->cons.wrap = peer->cons_wrap;
228− local->cons.count = peer->cons_count;
229− local->prod_flags = peer->prod_flags;
230− local->conn_state_flags = peer->conn_state_flags;
250+ union smc_host_cursor temp;
251+
252+ temp.wrap = peer->prod.wrap;
253+ temp.count = peer->prod.count;
254+ atomic64_set(&local->prod.acurs, atomic64_read(&temp.acurs));
255+
256+ temp.wrap = peer->cons.wrap;
257+ temp.count = peer->cons.count;
258+ atomic64_set(&local->cons.acurs, atomic64_read(&temp.acurs));
259+ local->prod_flags = peer->cons.prod_flags;
260+ local->conn_state_flags = peer->cons.conn_state_flags;
231261 }
232262
233263 static inline void smc_cdc_msg_to_host(struct smc_host_cdc_msg *local,
net/smc/smc_core.c+14−6
@@ -189,6 +189,8 @@ free: · 188 unmodified lines
189189
190190 if (!lgr->is_smcd && lnk->state != SMC_LNK_INACTIVE)
191191 smc_llc_link_inactive(lnk);
192+ if (lgr->is_smcd)
193+ smc_ism_signal_shutdown(lgr);
192194 smc_lgr_free(lgr);
193195 }
194196 }
@@ -495,7 +497,7 @@ void smc_port_terminate(struct smc_ib_device *smcibdev, u8 ibport) · 300 unmodified lines
495497 }
496498
497499 /* Called when SMC-D device is terminated or peer is lost */
498−void smc_smcd_terminate(struct smcd_dev *dev, u64 peer_gid)
500+void smc_smcd_terminate(struct smcd_dev *dev, u64 peer_gid, unsigned short vlan)
499501 {
500502 struct smc_link_group *lgr, *l;
501503 LIST_HEAD(lgr_free_list);
@@ -505,7 +507,7 @@ void smc_smcd_terminate(struct smcd_dev *dev, u64 peer_gid) · 3 unmodified lines
505507 list_for_each_entry_safe(lgr, l, &smc_lgr_list.list, list) {
506508 if (lgr->is_smcd && lgr->smcd == dev &&
507509 (!peer_gid || lgr->peer_gid == peer_gid) &&
508− !list_empty(&lgr->list)) {
510+ (vlan == VLAN_VID_MASK || lgr->vlan_id == vlan)) {
509511 __smc_lgr_terminate(lgr);
510512 list_move(&lgr->list, &lgr_free_list);
511513 }
@@ -516,6 +518,8 @@ void smc_smcd_terminate(struct smcd_dev *dev, u64 peer_gid) · 4 unmodified lines
516518 list_for_each_entry_safe(lgr, l, &lgr_free_list, list) {
517519 list_del_init(&lgr->list);
518520 cancel_delayed_work_sync(&lgr->free_work);
521+ if (!peer_gid && vlan == VLAN_VID_MASK) /* dev terminated? */
522+ smc_ism_signal_shutdown(lgr);
519523 smc_lgr_free(lgr);
520524 }
521525 }
@@ -569,7 +573,7 @@ out: · 47 unmodified lines
569573
570574 static bool smcr_lgr_match(struct smc_link_group *lgr,
571575 struct smc_clc_msg_local *lcl,
572− enum smc_lgr_role role)
576+ enum smc_lgr_role role, u32 clcqpn)
573577 {
574578 return !memcmp(lgr->peer_systemid, lcl->id_for_peer,
575579 SMC_SYSTEMID_LEN) &&
@@ -577,7 +581,9 @@ static bool smcr_lgr_match(struct smc_link_group *lgr, · 1 unmodified line
577581 SMC_GID_SIZE) &&
578582 !memcmp(lgr->lnk[SMC_SINGLE_LINK].peer_mac, lcl->mac,
579583 sizeof(lcl->mac)) &&
580− lgr->role == role;
584+ lgr->role == role &&
585+ (lgr->role == SMC_SERV ||
586+ lgr->lnk[SMC_SINGLE_LINK].peer_qpn == clcqpn);
581587 }
582588
583589 static bool smcd_lgr_match(struct smc_link_group *lgr,
@@ -588,7 +594,7 @@ static bool smcd_lgr_match(struct smc_link_group *lgr, · 4 unmodified lines
588594
589595 /* create a new SMC connection (and a new link group if necessary) */
590596 int smc_conn_create(struct smc_sock *smc, bool is_smcd, int srv_first_contact,
591− struct smc_ib_device *smcibdev, u8 ibport,
597+ struct smc_ib_device *smcibdev, u8 ibport, u32 clcqpn,
592598 struct smc_clc_msg_local *lcl, struct smcd_dev *smcd,
593599 u64 peer_gid)
594600 {
@@ -613,7 +619,7 @@ int smc_conn_create(struct smc_sock *smc, bool is_smcd, int srv_first_contact, · 18 unmodified lines
613619 list_for_each_entry(lgr, &smc_lgr_list.list, list) {
614620 write_lock_bh(&lgr->conns_lock);
615621 if ((is_smcd ? smcd_lgr_match(lgr, smcd, peer_gid) :
616− smcr_lgr_match(lgr, lcl, role)) &&
622+ smcr_lgr_match(lgr, lcl, role, clcqpn)) &&
617623 !lgr->sync_err &&
618624 lgr->vlan_id == vlan_id &&
619625 (role == SMC_CLNT ||
@@ -1034,6 +1040,8 @@ void smc_core_exit(void) · 414 unmodified lines
10341040 smc_llc_link_inactive(lnk);
10351041 }
10361042 cancel_delayed_work_sync(&lgr->free_work);
1043+ if (lgr->is_smcd)
1044+ smc_ism_signal_shutdown(lgr);
10371045 smc_lgr_free(lgr); /* free link group */
10381046 }
10391047 }
net/smc/smc_core.h+3−2
@@ -249,7 +249,8 @@ struct smc_clc_msg_local; · 248 unmodified lines
249249 void smc_lgr_forget(struct smc_link_group *lgr);
250250 void smc_lgr_terminate(struct smc_link_group *lgr);
251251 void smc_port_terminate(struct smc_ib_device *smcibdev, u8 ibport);
252−void smc_smcd_terminate(struct smcd_dev *dev, u64 peer_gid);
252+void smc_smcd_terminate(struct smcd_dev *dev, u64 peer_gid,
253+ unsigned short vlan);
253254 int smc_buf_create(struct smc_sock *smc, bool is_smcd);
254255 int smc_uncompress_bufsize(u8 compressed);
255256 int smc_rmb_rtoken_handling(struct smc_connection *conn,
@@ -264,7 +265,7 @@ int smc_vlan_by_tcpsk(struct socket *clcsock, unsigned short *vlan_id); · 8 unmodified lines
264265
265266 void smc_conn_free(struct smc_connection *conn);
266267 int smc_conn_create(struct smc_sock *smc, bool is_smcd, int srv_first_contact,
267− struct smc_ib_device *smcibdev, u8 ibport,
268+ struct smc_ib_device *smcibdev, u8 ibport, u32 clcqpn,
268269 struct smc_clc_msg_local *lcl, struct smcd_dev *smcd,
269270 u64 peer_gid);
270271 void smcd_conn_free(struct smc_connection *conn);
net/smc/smc_ism.c+32−11
@@ -187,22 +187,28 @@ struct smc_ism_event_work { · 186 unmodified lines
187187 #define ISM_EVENT_REQUEST 0x0001
188188 #define ISM_EVENT_RESPONSE 0x0002
189189 #define ISM_EVENT_REQUEST_IR 0x00000001
190+#define ISM_EVENT_CODE_SHUTDOWN 0x80
190191 #define ISM_EVENT_CODE_TESTLINK 0x83
191192
193+union smcd_sw_event_info {
194+ u64 info;
195+ struct {
196+ u8 uid[SMC_LGR_ID_SIZE];
197+ unsigned short vlan_id;
198+ u16 code;
199+ };
200+};
201+
192202 static void smcd_handle_sw_event(struct smc_ism_event_work *wrk)
193203 {
194− union {
195− u64 info;
196− struct {
197− u32 uid;
198− unsigned short vlanid;
199− u16 code;
200− };
201− } ev_info;
204+ union smcd_sw_event_info ev_info;
202205
206+ ev_info.info = wrk->event.info;
203207 switch (wrk->event.code) {
208+ case ISM_EVENT_CODE_SHUTDOWN: /* Peer shut down DMBs */
209+ smc_smcd_terminate(wrk->smcd, wrk->event.tok, ev_info.vlan_id);
210+ break;
204211 case ISM_EVENT_CODE_TESTLINK: /* Activity timer */
205− ev_info.info = wrk->event.info;
206212 if (ev_info.code == ISM_EVENT_REQUEST) {
207213 ev_info.code = ISM_EVENT_RESPONSE;
208214 wrk->smcd->ops->signal_event(wrk->smcd,
@@ -215,6 +221,21 @@ static void smcd_handle_sw_event(struct smc_ism_event_work *wrk) · 6 unmodified lines
215221 }
216222 }
217223
224+int smc_ism_signal_shutdown(struct smc_link_group *lgr)
225+{
226+ int rc;
227+ union smcd_sw_event_info ev_info;
228+
229+ memcpy(ev_info.uid, lgr->id, SMC_LGR_ID_SIZE);
230+ ev_info.vlan_id = lgr->vlan_id;
231+ ev_info.code = ISM_EVENT_REQUEST;
232+ rc = lgr->smcd->ops->signal_event(lgr->smcd, lgr->peer_gid,
233+ ISM_EVENT_REQUEST_IR,
234+ ISM_EVENT_CODE_SHUTDOWN,
235+ ev_info.info);
236+ return rc;
237+}
238+
218239 /* worker for SMC-D events */
219240 static void smc_ism_event_work(struct work_struct *work)
220241 {
@@ -223,7 +244,7 @@ static void smc_ism_event_work(struct work_struct *work) · 2 unmodified lines
223244
224245 switch (wrk->event.type) {
225246 case ISM_EVENT_GID: /* GID event, token is peer GID */
226− smc_smcd_terminate(wrk->smcd, wrk->event.tok);
247+ smc_smcd_terminate(wrk->smcd, wrk->event.tok, VLAN_VID_MASK);
227248 break;
228249 case ISM_EVENT_DMB:
229250 break;
@@ -289,7 +310,7 @@ void smcd_unregister_dev(struct smcd_dev *smcd) · 59 unmodified lines
289310 spin_unlock(&smcd_dev_list.lock);
290311 flush_workqueue(smcd->event_wq);
291312 destroy_workqueue(smcd->event_wq);
292− smc_smcd_terminate(smcd, 0);
313+ smc_smcd_terminate(smcd, 0, VLAN_VID_MASK);
293314
294315 device_del(&smcd->dev);
295316 }
net/smc/smc_ism.h+1−0
@@ -45,4 +45,5 @@ int smc_ism_register_dmb(struct smc_link_group *lgr, int buf_size, · 44 unmodified lines
4545 int smc_ism_unregister_dmb(struct smcd_dev *dev, struct smc_buf_desc *dmb_desc);
4646 int smc_ism_write(struct smcd_dev *dev, const struct smc_ism_position *pos,
4747 void *data, size_t len);
48+int smc_ism_signal_shutdown(struct smc_link_group *lgr);
4849 #endif
net/smc/smc_wr.c+3−1
@@ -215,12 +215,14 @@ int smc_wr_tx_put_slot(struct smc_link *link, · 214 unmodified lines
215215
216216 pend = container_of(wr_pend_priv, struct smc_wr_tx_pend, priv);
217217 if (pend->idx < link->wr_tx_cnt) {
218+ u32 idx = pend->idx;
219+
218220 /* clear the full struct smc_wr_tx_pend including .priv */
219221 memset(&link->wr_tx_pends[pend->idx], 0,
220222 sizeof(link->wr_tx_pends[pend->idx]));
221223 memset(&link->wr_tx_bufs[pend->idx], 0,
222224 sizeof(link->wr_tx_bufs[pend->idx]));
223− test_and_clear_bit(pend->idx, link->wr_tx_mask);
225+ test_and_clear_bit(idx, link->wr_tx_mask);
224226 return 1;
225227 }
226228
sound/core/oss/pcm_oss.c+3−3
@@ -1062,8 +1062,8 @@ static int snd_pcm_oss_change_params_locked(struct snd_pcm_substream *substream) · 1061 unmodified lines
10621062 runtime->oss.channels = params_channels(params);
10631063 runtime->oss.rate = params_rate(params);
10641064
1065− vfree(runtime->oss.buffer);
1066− runtime->oss.buffer = vmalloc(runtime->oss.period_bytes);
1065+ kvfree(runtime->oss.buffer);
1066+ runtime->oss.buffer = kvzalloc(runtime->oss.period_bytes, GFP_KERNEL);
10671067 if (!runtime->oss.buffer) {
10681068 err = -ENOMEM;
10691069 goto failure;
@@ -2328,7 +2328,7 @@ static void snd_pcm_oss_release_substream(struct snd_pcm_substream *substream) · 1258 unmodified lines
23282328 {
23292329 struct snd_pcm_runtime *runtime;
23302330 runtime = substream->runtime;
2331− vfree(runtime->oss.buffer);
2331+ kvfree(runtime->oss.buffer);
23322332 runtime->oss.buffer = NULL;
23332333 #ifdef CONFIG_SND_PCM_OSS_PLUGINS
23342334 snd_pcm_oss_plugin_clear(substream);
sound/core/oss/pcm_plugin.c+3−3
@@ -66,8 +66,8 @@ static int snd_pcm_plugin_alloc(struct snd_pcm_plugin *plugin, snd_pcm_uframes_t · 65 unmodified lines
6666 return -ENXIO;
6767 size /= 8;
6868 if (plugin->buf_frames < frames) {
69− vfree(plugin->buf);
70− plugin->buf = vmalloc(size);
69+ kvfree(plugin->buf);
70+ plugin->buf = kvzalloc(size, GFP_KERNEL);
7171 plugin->buf_frames = frames;
7272 }
7373 if (!plugin->buf) {
@@ -191,7 +191,7 @@ int snd_pcm_plugin_free(struct snd_pcm_plugin *plugin) · 117 unmodified lines
191191 if (plugin->private_free)
192192 plugin->private_free(plugin);
193193 kfree(plugin->buf_channels);
194− vfree(plugin->buf);
194+ kvfree(plugin->buf);
195195 kfree(plugin);
196196 return 0;
197197 }
sound/pci/hda/patch_ca0132.c+3−2
@@ -1177,6 +1177,7 @@ static const struct snd_pci_quirk ca0132_quirks[] = { · 1176 unmodified lines
11771177 SND_PCI_QUIRK(0x1028, 0x0708, "Alienware 15 R2 2016", QUIRK_ALIENWARE),
11781178 SND_PCI_QUIRK(0x1102, 0x0010, "Sound Blaster Z", QUIRK_SBZ),
11791179 SND_PCI_QUIRK(0x1102, 0x0023, "Sound Blaster Z", QUIRK_SBZ),
1180+ SND_PCI_QUIRK(0x1102, 0x0033, "Sound Blaster ZxR", QUIRK_SBZ),
11801181 SND_PCI_QUIRK(0x1458, 0xA016, "Recon3Di", QUIRK_R3DI),
11811182 SND_PCI_QUIRK(0x1458, 0xA026, "Gigabyte G1.Sniper Z97", QUIRK_R3DI),
11821183 SND_PCI_QUIRK(0x1458, 0xA036, "Gigabyte GA-Z170X-Gaming 7", QUIRK_R3DI),
@@ -8413,7 +8414,7 @@ static void ca0132_free(struct hda_codec *codec) · 7230 unmodified lines
84138414
84148415 snd_hda_power_down(codec);
84158416 if (spec->mem_base)
8416− iounmap(spec->mem_base);
8417+ pci_iounmap(codec->bus->pci, spec->mem_base);
84178418 kfree(spec->spec_init_verbs);
84188419 kfree(codec->spec);
84198420 }
@@ -8488,7 +8489,7 @@ static void ca0132_config(struct hda_codec *codec) · 68 unmodified lines
84888489 break;
84898490 case QUIRK_AE5:
84908491 codec_dbg(codec, "%s: QUIRK_AE5 applied.\n", __func__);
8491− snd_hda_apply_pincfgs(codec, r3di_pincfgs);
8492+ snd_hda_apply_pincfgs(codec, ae5_pincfgs);
84928493 break;
84938494 }
84948495
sound/pci/hda/patch_realtek.c+1−0
@@ -6481,6 +6481,7 @@ static const struct snd_pci_quirk alc269_fixup_tbl[] = { · 6480 unmodified lines
64816481 SND_PCI_QUIRK(0x103c, 0x2336, "HP", ALC269_FIXUP_HP_MUTE_LED_MIC1),
64826482 SND_PCI_QUIRK(0x103c, 0x2337, "HP", ALC269_FIXUP_HP_MUTE_LED_MIC1),
64836483 SND_PCI_QUIRK(0x103c, 0x221c, "HP EliteBook 755 G2", ALC280_FIXUP_HP_HEADSET_MIC),
6484+ SND_PCI_QUIRK(0x103c, 0x820d, "HP Pavilion 15", ALC269_FIXUP_HP_MUTE_LED_MIC3),
64846485 SND_PCI_QUIRK(0x103c, 0x8256, "HP", ALC221_FIXUP_HP_FRONT_MIC),
64856486 SND_PCI_QUIRK(0x103c, 0x827e, "HP x360", ALC295_FIXUP_HP_X360),
64866487 SND_PCI_QUIRK(0x103c, 0x82bf, "HP", ALC221_FIXUP_HP_MIC_NO_PRESENCE),
tools/power/cpupower/Makefile+6−6
@@ -129,7 +129,7 @@ WARNINGS += $(call cc-supports,-Wno-pointer-sign) · 128 unmodified lines
129129 WARNINGS += $(call cc-supports,-Wdeclaration-after-statement)
130130 WARNINGS += -Wshadow
131131
132−CFLAGS += -DVERSION=\"$(VERSION)\" -DPACKAGE=\"$(PACKAGE)\" \
132+override CFLAGS += -DVERSION=\"$(VERSION)\" -DPACKAGE=\"$(PACKAGE)\" \
133133 -DPACKAGE_BUGREPORT=\"$(PACKAGE_BUGREPORT)\" -D_GNU_SOURCE
134134
135135 UTIL_OBJS = utils/helpers/amd.o utils/helpers/msr.o \
@@ -156,12 +156,12 @@ LIB_SRC = lib/cpufreq.c lib/cpupower.c lib/cpuidle.c · 20 unmodified lines
156156 LIB_OBJS = lib/cpufreq.o lib/cpupower.o lib/cpuidle.o
157157 LIB_OBJS := $(addprefix $(OUTPUT),$(LIB_OBJS))
158158
159−CFLAGS += -pipe
159+override CFLAGS += -pipe
160160
161161 ifeq ($(strip $(NLS)),true)
162162 INSTALL_NLS += install-gmo
163163 COMPILE_NLS += create-gmo
164− CFLAGS += -DNLS
164+ override CFLAGS += -DNLS
165165 endif
166166
167167 ifeq ($(strip $(CPUFREQ_BENCH)),true)
@@ -175,7 +175,7 @@ ifeq ($(strip $(STATIC)),true) · 7 unmodified lines
175175 UTIL_SRC += $(LIB_SRC)
176176 endif
177177
178−CFLAGS += $(WARNINGS)
178+override CFLAGS += $(WARNINGS)
179179
180180 ifeq ($(strip $(V)),false)
181181 QUIET=@
@@ -188,10 +188,10 @@ export QUIET ECHO · 6 unmodified lines
188188
189189 # if DEBUG is enabled, then we do not strip or optimize
190190 ifeq ($(strip $(DEBUG)),true)
191− CFLAGS += -O1 -g -DDEBUG
191+ override CFLAGS += -O1 -g -DDEBUG
192192 STRIPCMD = /bin/true -Since_we_are_debugging
193193 else
194− CFLAGS += $(OPTIMIZATION) -fomit-frame-pointer
194+ override CFLAGS += $(OPTIMIZATION) -fomit-frame-pointer
195195 STRIPCMD = $(STRIP) -s --remove-section=.note --remove-section=.comment
196196 endif
197197
tools/power/cpupower/bench/Makefile+1−1
@@ -9,7 +9,7 @@ endif · 8 unmodified lines
99 ifeq ($(strip $(STATIC)),true)
1010 LIBS = -L../ -L$(OUTPUT) -lm
1111 OBJS = $(OUTPUT)main.o $(OUTPUT)parse.o $(OUTPUT)system.o $(OUTPUT)benchmark.o \
12− $(OUTPUT)../lib/cpufreq.o $(OUTPUT)../lib/sysfs.o
12+ $(OUTPUT)../lib/cpufreq.o $(OUTPUT)../lib/cpupower.o
1313 else
1414 LIBS = -L../ -L$(OUTPUT) -lm -lcpupower
1515 OBJS = $(OUTPUT)main.o $(OUTPUT)parse.o $(OUTPUT)system.o $(OUTPUT)benchmark.o
tools/power/cpupower/debug/x86_64/Makefile+2−2
@@ -13,10 +13,10 @@ INSTALL = /usr/bin/install · 12 unmodified lines
1313 default: all
1414
1515 $(OUTPUT)centrino-decode: ../i386/centrino-decode.c
16− $(CC) $(CFLAGS) -o $@ $<
16+ $(CC) $(CFLAGS) -o $@ $(LDFLAGS) $<
1717
1818 $(OUTPUT)powernow-k8-decode: ../i386/powernow-k8-decode.c
19− $(CC) $(CFLAGS) -o $@ $<
19+ $(CC) $(CFLAGS) -o $@ $(LDFLAGS) $<
2020
2121 all: $(OUTPUT)centrino-decode $(OUTPUT)powernow-k8-decode
2222
tools/power/cpupower/lib/cpufreq.c+1−1
@@ -28,7 +28,7 @@ static unsigned int sysfs_cpufreq_read_file(unsigned int cpu, const char *fname, · 27 unmodified lines
2828
2929 snprintf(path, sizeof(path), PATH_TO_CPU "cpu%u/cpufreq/%s",
3030 cpu, fname);
31− return sysfs_read_file(path, buf, buflen);
31+ return cpupower_read_sysfs(path, buf, buflen);
3232 }
3333
3434 /* helper function to write a new value to a /sys file */
tools/power/cpupower/lib/cpuidle.c+1−1
@@ -319,7 +319,7 @@ static unsigned int sysfs_cpuidle_read_file(const char *fname, char *buf, · 318 unmodified lines
319319
320320 snprintf(path, sizeof(path), PATH_TO_CPU "cpuidle/%s", fname);
321321
322− return sysfs_read_file(path, buf, buflen);
322+ return cpupower_read_sysfs(path, buf, buflen);
323323 }
324324
325325
tools/power/cpupower/lib/cpupower.c+2−2
@@ -15,7 +15,7 @@ · 14 unmodified lines
1515 #include "cpupower.h"
1616 #include "cpupower_intern.h"
1717
18−unsigned int sysfs_read_file(const char *path, char *buf, size_t buflen)
18+unsigned int cpupower_read_sysfs(const char *path, char *buf, size_t buflen)
1919 {
2020 int fd;
2121 ssize_t numread;
@@ -95,7 +95,7 @@ static int sysfs_topology_read_file(unsigned int cpu, const char *fname, int *re · 73 unmodified lines
9595
9696 snprintf(path, sizeof(path), PATH_TO_CPU "cpu%u/topology/%s",
9797 cpu, fname);
98− if (sysfs_read_file(path, linebuf, MAX_LINE_LEN) == 0)
98+ if (cpupower_read_sysfs(path, linebuf, MAX_LINE_LEN) == 0)
9999 return -1;
100100 *result = strtol(linebuf, &endp, 0);
101101 if (endp == linebuf || errno == ERANGE)
tools/power/cpupower/lib/cpupower_intern.h+1−1
@@ -3,4 +3,4 @@ · 2 unmodified lines
33 #define MAX_LINE_LEN 4096
44 #define SYSFS_PATH_MAX 255
55
6−unsigned int sysfs_read_file(const char *path, char *buf, size_t buflen);
6+unsigned int cpupower_read_sysfs(const char *path, char *buf, size_t buflen);