History

nfsd: merge stable fix into main nfsd branch

J. Bruce Fields committed 9 years ago

Commit 60709c02 parents 7323f0d 0839ffb183 files · +1692 −1239Browse files

Unified · Split

183 files
  1. MAINTAINERS +1 −2
  2. Makefile +2 −2
  3. arch/arm64/crypto/aes-modes.S +42 −46
  4. arch/powerpc/Kconfig +1 −1
  5. arch/powerpc/include/asm/cpu_has_feature.h +2 −0
  6. arch/powerpc/include/asm/mmu.h +2 −0
  7. arch/powerpc/include/asm/module.h +0 −4
  8. arch/powerpc/include/asm/stackprotector.h +0 −40
  9. arch/powerpc/kernel/Makefile +0 −4
  10. arch/powerpc/kernel/asm-offsets.c +0 −3
  11. arch/powerpc/kernel/eeh_driver.c +1 −1
  12. arch/powerpc/kernel/entry_32.S +1 −5
  13. arch/powerpc/kernel/module_64.c +0 −8
  14. arch/powerpc/kernel/process.c +0 −6
  15. arch/powerpc/kernel/prom_init.c +3 −0
  16. arch/powerpc/mm/pgtable-radix.c +2 −2
  17. arch/sparc/include/asm/mmu_context_64.h +4 −4
  18. arch/sparc/kernel/irq_64.c +1 −1
  19. arch/sparc/kernel/sstate.c +3 −3
  20. arch/sparc/kernel/traps_64.c +73 −0
  21. arch/x86/events/intel/rapl.c +26 −34
  22. arch/x86/events/intel/uncore.c +91 −141
  23. arch/x86/include/asm/microcode.h +1 −0
  24. arch/x86/kernel/apic/io_apic.c +2 −0
  25. arch/x86/kernel/cpu/mcheck/mce.c +12 −19
  26. arch/x86/kernel/cpu/microcode/amd.c +3 −2
  27. arch/x86/kernel/cpu/microcode/core.c +17 −5
  28. arch/x86/kernel/cpu/microcode/intel.c +1 −8
  29. arch/x86/kernel/fpu/core.c +3 −1
  30. arch/x86/kernel/hpet.c +1 −0
  31. arch/x86/kvm/x86.c +1 −0
  32. arch/x86/platform/efi/efi_64.c +16 −0
  33. arch/xtensa/kernel/setup.c +1 −1
  34. crypto/algapi.c +1 −0
  35. drivers/ata/libata-core.c +4 −2
  36. drivers/ata/sata_mv.c +3 −0
  37. drivers/base/firmware_class.c +1 −4
  38. drivers/base/memory.c +6 −6
  39. drivers/bcma/bcma_private.h +3 −0
  40. drivers/bcma/driver_chipcommon.c +3 −8
  41. drivers/bcma/driver_mips.c +3 −0
  42. drivers/dma/cppi41.c +46 −23
  43. drivers/dma/pl330.c +6 −13
  44. drivers/firmware/efi/libstub/fdt.c +3 −11
  45. drivers/gpu/drm/amd/amdgpu/gmc_v6_0.c +3 −1
  46. drivers/gpu/drm/drm_atomic.c +8 −5
  47. drivers/gpu/drm/drm_atomic_helper.c +0 −9
  48. drivers/gpu/drm/drm_connector.c +18 −5
  49. drivers/gpu/drm/drm_drv.c +4 −0
  50. drivers/gpu/drm/i915/i915_drv.h +4 −12
  51. drivers/gpu/drm/i915/intel_atomic_plane.c +20 −0
  52. drivers/gpu/drm/i915/intel_display.c +42 −83
  53. drivers/gpu/drm/i915/intel_drv.h +7 −2
  54. drivers/gpu/drm/i915/intel_fbc.c +20 −32
  55. drivers/gpu/drm/i915/intel_fbdev.c +2 −2
  56. drivers/gpu/drm/i915/intel_sprite.c +4 −4
  57. drivers/gpu/drm/nouveau/dispnv04/hw.c +2 −1
  58. drivers/gpu/drm/nouveau/nouveau_fence.h +1 −0
  59. drivers/gpu/drm/nouveau/nouveau_led.h +1 −1
  60. drivers/gpu/drm/nouveau/nouveau_usif.c +2 −1
  61. drivers/gpu/drm/nouveau/nv50_display.c +6 −0
  62. drivers/gpu/drm/nouveau/nv84_fence.c +6 −0
  63. drivers/gpu/drm/nouveau/nvkm/engine/disp/hdagt215.c +1 −1
  64. drivers/gpu/drm/nouveau/nvkm/engine/disp/nv50.c +0 −2
  65. drivers/gpu/drm/radeon/radeon_drv.c +2 −1
  66. drivers/gpu/drm/radeon/radeon_gem.c +2 −2
  67. drivers/hid/hid-cp2112.c +12 −16
  68. drivers/hid/hid-ids.h +3 −0
  69. drivers/hid/hid-lg.c +1 −1
  70. drivers/hid/usbhid/hid-quirks.c +1 −0
  71. drivers/hid/wacom_wac.c +15 −13
  72. drivers/hv/ring_buffer.c +1 −0
  73. drivers/iio/adc/palmas_gpadc.c +2 −2
  74. drivers/iio/health/afe4403.c +2 −2
  75. drivers/iio/health/afe4404.c +2 −2
  76. drivers/iio/health/max30100.c +1 −1
  77. drivers/iio/humidity/dht11.c +4 −2
  78. drivers/input/rmi4/rmi_driver.c +2 −2
  79. drivers/input/touchscreen/wm97xx-core.c +1 −1
  80. drivers/mmc/host/sdhci.c +2 −1
  81. drivers/net/ethernet/adaptec/starfire.c +43 −2
  82. drivers/net/ethernet/cadence/macb.c +130 −58
  83. drivers/net/ethernet/cadence/macb.h +17 −3
  84. drivers/net/ethernet/cavium/thunder/thunder_xcv.c +1 −2
  85. drivers/net/ethernet/emulex/benet/be_main.c +28 −5
  86. drivers/net/ethernet/freescale/gianfar.c +2 −2
  87. drivers/net/ethernet/mellanox/mlx4/catas.c +1 −1
  88. drivers/net/ethernet/mellanox/mlx4/intf.c +12 −0
  89. drivers/net/ethernet/mellanox/mlx4/mlx4.h +1 −0
  90. drivers/net/ethernet/mellanox/mlx5/core/cmd.c +1 −1
  91. drivers/net/ethernet/mellanox/mlx5/core/en.h +4 −3
  92. drivers/net/ethernet/mellanox/mlx5/core/en_dcbnl.c +8 −3
  93. drivers/net/ethernet/mellanox/mlx5/core/en_ethtool.c +26 −15
  94. drivers/net/ethernet/mellanox/mlx5/core/en_fs.c +1 −1
  95. drivers/net/ethernet/mellanox/mlx5/core/en_fs_ethtool.c +1 −1
  96. drivers/net/ethernet/mellanox/mlx5/core/en_main.c +101 −101
  97. drivers/net/ethernet/mellanox/mlx5/core/en_tc.c +6 −7
  98. drivers/net/ethernet/mellanox/mlx5/core/eswitch.c +5 −5
  99. drivers/net/ethernet/mellanox/mlx5/core/eswitch_offloads.c +22 −14
  100. drivers/net/ethernet/mellanox/mlx5/core/fs_cmd.c +1 −1
  101. drivers/net/ethernet/mellanox/mlx5/core/fs_core.c +1 −1
  102. drivers/net/ethernet/mellanox/mlx5/core/main.c +1 −1
  103. drivers/net/ethernet/mellanox/mlx5/core/port.c +2 −2
  104. drivers/net/ethernet/mellanox/mlx5/core/vport.c +1 −1
  105. drivers/net/ethernet/stmicro/stmmac/dwmac1000_core.c +4 −0
  106. drivers/net/hyperv/netvsc.c +6 −0
  107. drivers/net/phy/micrel.c +1 −1
  108. drivers/net/wireless/intel/iwlwifi/iwl-8000.c +1 −1
  109. drivers/net/wireless/intel/iwlwifi/mvm/sta.c +4 −3
  110. drivers/net/wireless/intel/iwlwifi/mvm/tt.c +8 −4
  111. drivers/pci/pcie/aspm.c +13 −6
  112. drivers/pinctrl/berlin/berlin-bg4ct.c +1 −1
  113. drivers/pinctrl/intel/pinctrl-baytrail.c +20 −7
  114. drivers/pinctrl/intel/pinctrl-merrifield.c +3 −0
  115. drivers/pinctrl/sunxi/pinctrl-sunxi.c +1 −2
  116. drivers/regulator/axp20x-regulator.c +1 −1
  117. drivers/regulator/fixed.c +0 −46
  118. drivers/regulator/twl6030-regulator.c +1 −1
  119. drivers/rtc/Kconfig +4 −1
  120. drivers/rtc/rtc-jz4740.c +10 −2
  121. drivers/scsi/virtio_scsi.c +10 −1
  122. drivers/staging/greybus/timesync_platform.c +6 −0
  123. drivers/usb/core/quirks.c +4 −0
  124. drivers/usb/gadget/function/f_fs.c +12 −1
  125. drivers/usb/musb/musb_core.c +13 −13
  126. drivers/usb/musb/musb_core.h +0 −1
  127. drivers/usb/serial/option.c +1 −0
  128. drivers/usb/serial/pl2303.c +1 −0
  129. drivers/usb/serial/pl2303.h +1 −0
  130. drivers/usb/serial/qcserial.c +1 −0
  131. drivers/vfio/vfio_iommu_spapr_tce.c +5 −6
  132. drivers/vhost/vhost.c +4 −6
  133. drivers/virtio/virtio_ring.c +0 −7
  134. fs/cifs/readdir.c +1 −0
  135. fs/dax.c +5 −0
  136. fs/fscache/cookie.c +5 −0
  137. fs/fscache/netfs.c +1 −0
  138. fs/fscache/object.c +30 −2
  139. fs/iomap.c +3 −0
  140. fs/nfsd/vfs.c +60 −37
  141. include/asm-generic/export.h +6 −5
  142. include/drm/drmP.h +1 −0
  143. include/drm/drm_connector.h +15 −1
  144. include/linux/can/core.h +3 −4
  145. include/linux/cpuhotplug.h +0 −3
  146. include/linux/export.h +12 −5
  147. include/linux/fscache-cache.h +1 −0
  148. include/linux/hyperv.h +30 −2
  149. include/linux/irq.h +17 −0
  150. include/linux/log2.h +12 −1
  151. include/linux/memory_hotplug.h +2 −1
  152. include/linux/module.h +7 −7
  153. include/linux/netdevice.h +15 −14
  154. include/linux/percpu-refcount.h +2 −2
  155. include/net/ipv6.h +5 −0
  156. include/uapi/linux/ethtool.h +3 −1
  157. init/Kconfig +4 −0
  158. kernel/cgroup.c +5 −8
  159. kernel/events/core.c +46 −23
  160. kernel/irq/irqdomain.c +30 −14
  161. kernel/module.c +25 −28
  162. kernel/trace/trace_hwlat.c +5 −3
  163. kernel/trace/trace_kprobe.c +1 −1
  164. mm/filemap.c +5 −0
  165. mm/kasan/report.c +3 −0
  166. mm/memory_hotplug.c +21 −7
  167. mm/shmem.c +9 −2
  168. mm/zswap.c +29 −1
  169. net/can/af_can.c +10 −2
  170. net/can/af_can.h +2 −1
  171. net/can/bcm.c +18 −9
  172. net/can/gw.c +1 −1
  173. net/can/raw.c +2 −2
  174. net/ipv4/tcp_output.c +4 −2
  175. net/ipv6/ip6_output.c +1 −1
  176. net/ipv6/ip6_tunnel.c +1 −1
  177. net/sched/cls_flower.c +2 −2
  178. net/sched/cls_matchall.c +45 −82
  179. scripts/Makefile.build +2 −0
  180. scripts/genksyms/genksyms.c +14 −5
  181. scripts/kallsyms.c +12 −0
  182. scripts/mod/modpost.c +10 −0
  183. tools/objtool/arch/x86/decode.c +1 −1
MAINTAINERS+1−2
@@ -10195,7 +10195,6 @@ F: drivers/media/tuners/qt1010* · 10194 unmodified lines
10195QUALCOMM ATHEROS ATH9K WIRELESS DRIVER10195QUALCOMM ATHEROS ATH9K WIRELESS DRIVER
10196M: QCA ath9k Development <ath9k-devel@qca.qualcomm.com>10196M: QCA ath9k Development <ath9k-devel@qca.qualcomm.com>
10197L: linux-wireless@vger.kernel.org10197L: linux-wireless@vger.kernel.org
10198L: ath9k-devel@lists.ath9k.org
10199W: http://wireless.kernel.org/en/users/Drivers/ath9k10198W: http://wireless.kernel.org/en/users/Drivers/ath9k
10200S: Supported10199S: Supported
10201F: drivers/net/wireless/ath/ath9k/10200F: drivers/net/wireless/ath/ath9k/
@@ -13066,7 +13065,7 @@ F: drivers/input/serio/userio.c · 2864 unmodified lines
13066F: include/uapi/linux/userio.h13065F: include/uapi/linux/userio.h
13067 13066
13068VIRTIO CONSOLE DRIVER13067VIRTIO CONSOLE DRIVER
13069M: Amit Shah <amit.shah@redhat.com>13068M: Amit Shah <amit@kernel.org>
13070L: virtualization@lists.linux-foundation.org13069L: virtualization@lists.linux-foundation.org
13071S: Maintained13070S: Maintained
13072F: drivers/char/virtio_console.c13071F: drivers/char/virtio_console.c
Makefile+2−2
@@ -1,7 +1,7 @@
1VERSION = 41VERSION = 4
2PATCHLEVEL = 102PATCHLEVEL = 10
3SUBLEVEL = 03SUBLEVEL = 0
4EXTRAVERSION = -rc64EXTRAVERSION = -rc7
5NAME = Fearless Coyote5NAME = Fearless Coyote
6 6
7# *DOCUMENTATION*7# *DOCUMENTATION*
@@ -797,7 +797,7 @@ KBUILD_CFLAGS += $(call cc-option,-Werror=incompatible-pointer-types) · 789 unmodified lines
797KBUILD_ARFLAGS := $(call ar-option,D)797KBUILD_ARFLAGS := $(call ar-option,D)
798 798
799# check for 'asm goto'799# check for 'asm goto'
800ifeq ($(shell $(CONFIG_SHELL) $(srctree)/scripts/gcc-goto.sh $(CC)), y)800ifeq ($(shell $(CONFIG_SHELL) $(srctree)/scripts/gcc-goto.sh $(CC) $(KBUILD_CFLAGS)), y)
801 KBUILD_CFLAGS += -DCC_HAVE_ASM_GOTO801 KBUILD_CFLAGS += -DCC_HAVE_ASM_GOTO
802 KBUILD_AFLAGS += -DCC_HAVE_ASM_GOTO802 KBUILD_AFLAGS += -DCC_HAVE_ASM_GOTO
803endif803endif
arch/arm64/crypto/aes-modes.S+42−46
@@ -193,15 +193,16 @@ AES_ENTRY(aes_cbc_encrypt) · 192 unmodified lines
193 cbz w6, .Lcbcencloop193 cbz w6, .Lcbcencloop
194 194
195 ld1 {v0.16b}, [x5] /* get iv */195 ld1 {v0.16b}, [x5] /* get iv */
196 enc_prepare w3, x2, x5196 enc_prepare w3, x2, x6
197 197
198.Lcbcencloop:198.Lcbcencloop:
199 ld1 {v1.16b}, [x1], #16 /* get next pt block */199 ld1 {v1.16b}, [x1], #16 /* get next pt block */
200 eor v0.16b, v0.16b, v1.16b /* ..and xor with iv */200 eor v0.16b, v0.16b, v1.16b /* ..and xor with iv */
201 encrypt_block v0, w3, x2, x5, w6201 encrypt_block v0, w3, x2, x6, w7
202 st1 {v0.16b}, [x0], #16202 st1 {v0.16b}, [x0], #16
203 subs w4, w4, #1203 subs w4, w4, #1
204 bne .Lcbcencloop204 bne .Lcbcencloop
205 st1 {v0.16b}, [x5] /* return iv */
205 ret206 ret
206AES_ENDPROC(aes_cbc_encrypt)207AES_ENDPROC(aes_cbc_encrypt)
207 208
@@ -211,7 +212,7 @@ AES_ENTRY(aes_cbc_decrypt) · 3 unmodified lines
211 cbz w6, .LcbcdecloopNx212 cbz w6, .LcbcdecloopNx
212 213
213 ld1 {v7.16b}, [x5] /* get iv */214 ld1 {v7.16b}, [x5] /* get iv */
214 dec_prepare w3, x2, x5215 dec_prepare w3, x2, x6
215 216
216.LcbcdecloopNx:217.LcbcdecloopNx:
217#if INTERLEAVE >= 2218#if INTERLEAVE >= 2
@@ -248,7 +249,7 @@ AES_ENTRY(aes_cbc_decrypt) · 30 unmodified lines
248.Lcbcdecloop:249.Lcbcdecloop:
249 ld1 {v1.16b}, [x1], #16 /* get next ct block */250 ld1 {v1.16b}, [x1], #16 /* get next ct block */
250 mov v0.16b, v1.16b /* ...and copy to v0 */251 mov v0.16b, v1.16b /* ...and copy to v0 */
251 decrypt_block v0, w3, x2, x5, w6252 decrypt_block v0, w3, x2, x6, w7
252 eor v0.16b, v0.16b, v7.16b /* xor with iv => pt */253 eor v0.16b, v0.16b, v7.16b /* xor with iv => pt */
253 mov v7.16b, v1.16b /* ct is next iv */254 mov v7.16b, v1.16b /* ct is next iv */
254 st1 {v0.16b}, [x0], #16255 st1 {v0.16b}, [x0], #16
@@ -256,6 +257,7 @@ AES_ENTRY(aes_cbc_decrypt) · 1 unmodified line
256 bne .Lcbcdecloop257 bne .Lcbcdecloop
257.Lcbcdecout:258.Lcbcdecout:
258 FRAME_POP259 FRAME_POP
260 st1 {v7.16b}, [x5] /* return iv */
259 ret261 ret
260AES_ENDPROC(aes_cbc_decrypt)262AES_ENDPROC(aes_cbc_decrypt)
261 263
@@ -267,24 +269,15 @@ AES_ENDPROC(aes_cbc_decrypt) · 5 unmodified lines
267 269
268AES_ENTRY(aes_ctr_encrypt)270AES_ENTRY(aes_ctr_encrypt)
269 FRAME_PUSH271 FRAME_PUSH
270 cbnz w6, .Lctrfirst /* 1st time around? */272 cbz w6, .Lctrnotfirst /* 1st time around? */
271 umov x5, v4.d[1] /* keep swabbed ctr in reg */
272 rev x5, x5
273#if INTERLEAVE >= 2
274 cmn w5, w4 /* 32 bit overflow? */
275 bcs .Lctrinc
276 add x5, x5, #1 /* increment BE ctr */
277 b .LctrincNx
278#else
279 b .Lctrinc
280#endif
281.Lctrfirst:
282 enc_prepare w3, x2, x6273 enc_prepare w3, x2, x6
283 ld1 {v4.16b}, [x5]274 ld1 {v4.16b}, [x5]
284 umov x5, v4.d[1] /* keep swabbed ctr in reg */275
285 rev x5, x5276.Lctrnotfirst:
277 umov x8, v4.d[1] /* keep swabbed ctr in reg */
278 rev x8, x8
286#if INTERLEAVE >= 2279#if INTERLEAVE >= 2
287 cmn w5, w4 /* 32 bit overflow? */280 cmn w8, w4 /* 32 bit overflow? */
288 bcs .Lctrloop281 bcs .Lctrloop
289.LctrloopNx:282.LctrloopNx:
290 subs w4, w4, #INTERLEAVE283 subs w4, w4, #INTERLEAVE
@@ -292,11 +285,11 @@ AES_ENTRY(aes_ctr_encrypt) · 1 unmodified line
292#if INTERLEAVE == 2285#if INTERLEAVE == 2
293 mov v0.8b, v4.8b286 mov v0.8b, v4.8b
294 mov v1.8b, v4.8b287 mov v1.8b, v4.8b
295 rev x7, x5288 rev x7, x8
296 add x5, x5, #1289 add x8, x8, #1
297 ins v0.d[1], x7290 ins v0.d[1], x7
298 rev x7, x5291 rev x7, x8
299 add x5, x5, #1292 add x8, x8, #1
300 ins v1.d[1], x7293 ins v1.d[1], x7
301 ld1 {v2.16b-v3.16b}, [x1], #32 /* get 2 input blocks */294 ld1 {v2.16b-v3.16b}, [x1], #32 /* get 2 input blocks */
302 do_encrypt_block2x295 do_encrypt_block2x
@@ -305,7 +298,7 @@ AES_ENTRY(aes_ctr_encrypt) · 2 unmodified lines
305 st1 {v0.16b-v1.16b}, [x0], #32298 st1 {v0.16b-v1.16b}, [x0], #32
306#else299#else
307 ldr q8, =0x30000000200000001 /* addends 1,2,3[,0] */300 ldr q8, =0x30000000200000001 /* addends 1,2,3[,0] */
308 dup v7.4s, w5301 dup v7.4s, w8
309 mov v0.16b, v4.16b302 mov v0.16b, v4.16b
310 add v7.4s, v7.4s, v8.4s303 add v7.4s, v7.4s, v8.4s
311 mov v1.16b, v4.16b304 mov v1.16b, v4.16b
@@ -323,18 +316,12 @@ AES_ENTRY(aes_ctr_encrypt) · 11 unmodified lines
323 eor v2.16b, v7.16b, v2.16b316 eor v2.16b, v7.16b, v2.16b
324 eor v3.16b, v5.16b, v3.16b317 eor v3.16b, v5.16b, v3.16b
325 st1 {v0.16b-v3.16b}, [x0], #64318 st1 {v0.16b-v3.16b}, [x0], #64
326 add x5, x5, #INTERLEAVE319 add x8, x8, #INTERLEAVE
327#endif320#endif
328 cbz w4, .LctroutNx321 rev x7, x8
329.LctrincNx:
330 rev x7, x5
331 ins v4.d[1], x7322 ins v4.d[1], x7
323 cbz w4, .Lctrout
332 b .LctrloopNx324 b .LctrloopNx
333.LctroutNx:
334 sub x5, x5, #1
335 rev x7, x5
336 ins v4.d[1], x7
337 b .Lctrout
338.Lctr1x:325.Lctr1x:
339 adds w4, w4, #INTERLEAVE326 adds w4, w4, #INTERLEAVE
340 beq .Lctrout327 beq .Lctrout
@@ -342,30 +329,39 @@ AES_ENTRY(aes_ctr_encrypt) · 1 unmodified line
342.Lctrloop:329.Lctrloop:
343 mov v0.16b, v4.16b330 mov v0.16b, v4.16b
344 encrypt_block v0, w3, x2, x6, w7331 encrypt_block v0, w3, x2, x6, w7
332
333 adds x8, x8, #1 /* increment BE ctr */
334 rev x7, x8
335 ins v4.d[1], x7
336 bcs .Lctrcarry /* overflow? */
337
338.Lctrcarrydone:
345 subs w4, w4, #1339 subs w4, w4, #1
346 bmi .Lctrhalfblock /* blocks < 0 means 1/2 block */340 bmi .Lctrhalfblock /* blocks < 0 means 1/2 block */
347 ld1 {v3.16b}, [x1], #16341 ld1 {v3.16b}, [x1], #16
348 eor v3.16b, v0.16b, v3.16b342 eor v3.16b, v0.16b, v3.16b
349 st1 {v3.16b}, [x0], #16343 st1 {v3.16b}, [x0], #16
350 beq .Lctrout344 bne .Lctrloop
351.Lctrinc:345
352 adds x5, x5, #1 /* increment BE ctr */346.Lctrout:
353 rev x7, x5347 st1 {v4.16b}, [x5] /* return next CTR value */
354 ins v4.d[1], x7348 FRAME_POP
355 bcc .Lctrloop /* no overflow? */349 ret
356 umov x7, v4.d[0] /* load upper word of ctr */350
357 rev x7, x7 /* ... to handle the carry */
358 add x7, x7, #1
359 rev x7, x7
360 ins v4.d[0], x7
361 b .Lctrloop
362.Lctrhalfblock:351.Lctrhalfblock:
363 ld1 {v3.8b}, [x1]352 ld1 {v3.8b}, [x1]
364 eor v3.8b, v0.8b, v3.8b353 eor v3.8b, v0.8b, v3.8b
365 st1 {v3.8b}, [x0]354 st1 {v3.8b}, [x0]
366.Lctrout:
367 FRAME_POP355 FRAME_POP
368 ret356 ret
357
358.Lctrcarry:
359 umov x7, v4.d[0] /* load upper word of ctr */
360 rev x7, x7 /* ... to handle the carry */
361 add x7, x7, #1
362 rev x7, x7
363 ins v4.d[0], x7
364 b .Lctrcarrydone
369AES_ENDPROC(aes_ctr_encrypt)365AES_ENDPROC(aes_ctr_encrypt)
370 .ltorg366 .ltorg
371 367
arch/powerpc/Kconfig+1−1
@@ -164,7 +164,6 @@ config PPC · 163 unmodified lines
164 select ARCH_HAS_SCALED_CPUTIME if VIRT_CPU_ACCOUNTING_NATIVE164 select ARCH_HAS_SCALED_CPUTIME if VIRT_CPU_ACCOUNTING_NATIVE
165 select HAVE_ARCH_HARDENED_USERCOPY165 select HAVE_ARCH_HARDENED_USERCOPY
166 select HAVE_KERNEL_GZIP166 select HAVE_KERNEL_GZIP
167 select HAVE_CC_STACKPROTECTOR
168 167
169config GENERIC_CSUM168config GENERIC_CSUM
170 def_bool CPU_LITTLE_ENDIAN169 def_bool CPU_LITTLE_ENDIAN
@@ -484,6 +483,7 @@ config RELOCATABLE · 313 unmodified lines
484 bool "Build a relocatable kernel"483 bool "Build a relocatable kernel"
485 depends on (PPC64 && !COMPILE_TEST) || (FLATMEM && (44x || FSL_BOOKE))484 depends on (PPC64 && !COMPILE_TEST) || (FLATMEM && (44x || FSL_BOOKE))
486 select NONSTATIC_KERNEL485 select NONSTATIC_KERNEL
486 select MODULE_REL_CRCS if MODVERSIONS
487 help487 help
488 This builds a kernel image that is capable of running at the488 This builds a kernel image that is capable of running at the
489 location the kernel is loaded at. For ppc32, there is no any489 location the kernel is loaded at. For ppc32, there is no any
arch/powerpc/include/asm/cpu_has_feature.h+2−0
@@ -23,7 +23,9 @@ static __always_inline bool cpu_has_feature(unsigned long feature) · 22 unmodified lines
23{23{
24 int i;24 int i;
25 25
26#ifndef __clang__ /* clang can't cope with this */
26 BUILD_BUG_ON(!__builtin_constant_p(feature));27 BUILD_BUG_ON(!__builtin_constant_p(feature));
28#endif
27 29
28#ifdef CONFIG_JUMP_LABEL_FEATURE_CHECK_DEBUG30#ifdef CONFIG_JUMP_LABEL_FEATURE_CHECK_DEBUG
29 if (!static_key_initialized) {31 if (!static_key_initialized) {
arch/powerpc/include/asm/mmu.h+2−0
@@ -160,7 +160,9 @@ static __always_inline bool mmu_has_feature(unsigned long feature) · 159 unmodified lines
160{160{
161 int i;161 int i;
162 162
163#ifndef __clang__ /* clang can't cope with this */
163 BUILD_BUG_ON(!__builtin_constant_p(feature));164 BUILD_BUG_ON(!__builtin_constant_p(feature));
165#endif
164 166
165#ifdef CONFIG_JUMP_LABEL_FEATURE_CHECK_DEBUG167#ifdef CONFIG_JUMP_LABEL_FEATURE_CHECK_DEBUG
166 if (!static_key_initialized) {168 if (!static_key_initialized) {
arch/powerpc/include/asm/module.h+0−4
@@ -90,9 +90,5 @@ static inline int module_finalize_ftrace(struct module *mod, const Elf_Shdr *sec · 89 unmodified lines
90}90}
91#endif91#endif
92 92
93#if defined(CONFIG_MODVERSIONS) && defined(CONFIG_PPC64)
94#define ARCH_RELOCATES_KCRCTAB
95#define reloc_start PHYSICAL_START
96#endif
97#endif /* __KERNEL__ */93#endif /* __KERNEL__ */
98#endif /* _ASM_POWERPC_MODULE_H */94#endif /* _ASM_POWERPC_MODULE_H */
arch/powerpc/include/asm/stackprotector.h+0−40
@@ -1,40 +0,0 @@
1/*
2 * GCC stack protector support.
3 *
4 * Stack protector works by putting predefined pattern at the start of
5 * the stack frame and verifying that it hasn't been overwritten when
6 * returning from the function. The pattern is called stack canary
7 * and gcc expects it to be defined by a global variable called
8 * "__stack_chk_guard" on PPC. This unfortunately means that on SMP
9 * we cannot have a different canary value per task.
10 */
11
12#ifndef _ASM_STACKPROTECTOR_H
13#define _ASM_STACKPROTECTOR_H
14
15#include <linux/random.h>
16#include <linux/version.h>
17#include <asm/reg.h>
18
19extern unsigned long __stack_chk_guard;
20
21/*
22 * Initialize the stackprotector canary value.
23 *
24 * NOTE: this must only be called from functions that never return,
25 * and it must always be inlined.
26 */
27static __always_inline void boot_init_stack_canary(void)
28{
29 unsigned long canary;
30
31 /* Try to get a semi random initial value. */
32 get_random_bytes(&canary, sizeof(canary));
33 canary ^= mftb();
34 canary ^= LINUX_VERSION_CODE;
35
36 current->stack_canary = canary;
37 __stack_chk_guard = current->stack_canary;
38}
39
40#endif /* _ASM_STACKPROTECTOR_H */
arch/powerpc/kernel/Makefile+0−4
@@ -19,10 +19,6 @@ CFLAGS_init.o += $(DISABLE_LATENT_ENTROPY_PLUGIN) · 18 unmodified lines
19CFLAGS_btext.o += $(DISABLE_LATENT_ENTROPY_PLUGIN)19CFLAGS_btext.o += $(DISABLE_LATENT_ENTROPY_PLUGIN)
20CFLAGS_prom.o += $(DISABLE_LATENT_ENTROPY_PLUGIN)20CFLAGS_prom.o += $(DISABLE_LATENT_ENTROPY_PLUGIN)
21 21
22# -fstack-protector triggers protection checks in this code,
23# but it is being used too early to link to meaningful stack_chk logic.
24CFLAGS_prom_init.o += $(call cc-option, -fno-stack-protector)
25
26ifdef CONFIG_FUNCTION_TRACER22ifdef CONFIG_FUNCTION_TRACER
27# Do not trace early boot code23# Do not trace early boot code
28CFLAGS_REMOVE_cputable.o = -mno-sched-epilog $(CC_FLAGS_FTRACE)24CFLAGS_REMOVE_cputable.o = -mno-sched-epilog $(CC_FLAGS_FTRACE)
arch/powerpc/kernel/asm-offsets.c+0−3
@@ -91,9 +91,6 @@ int main(void) · 90 unmodified lines
91 DEFINE(TI_livepatch_sp, offsetof(struct thread_info, livepatch_sp));91 DEFINE(TI_livepatch_sp, offsetof(struct thread_info, livepatch_sp));
92#endif92#endif
93 93
94#ifdef CONFIG_CC_STACKPROTECTOR
95 DEFINE(TSK_STACK_CANARY, offsetof(struct task_struct, stack_canary));
96#endif
97 DEFINE(KSP, offsetof(struct thread_struct, ksp));94 DEFINE(KSP, offsetof(struct thread_struct, ksp));
98 DEFINE(PT_REGS, offsetof(struct thread_struct, regs));95 DEFINE(PT_REGS, offsetof(struct thread_struct, regs));
99#ifdef CONFIG_BOOKE96#ifdef CONFIG_BOOKE
arch/powerpc/kernel/eeh_driver.c+1−1
@@ -545,7 +545,7 @@ static void *eeh_pe_detach_dev(void *data, void *userdata) · 544 unmodified lines
545static void *__eeh_clear_pe_frozen_state(void *data, void *flag)545static void *__eeh_clear_pe_frozen_state(void *data, void *flag)
546{546{
547 struct eeh_pe *pe = (struct eeh_pe *)data;547 struct eeh_pe *pe = (struct eeh_pe *)data;
548 bool *clear_sw_state = flag;548 bool clear_sw_state = *(bool *)flag;
549 int i, rc = 1;549 int i, rc = 1;
550 550
551 for (i = 0; rc && i < 3; i++)551 for (i = 0; rc && i < 3; i++)
arch/powerpc/kernel/entry_32.S+1−5
@@ -674,11 +674,7 @@ BEGIN_FTR_SECTION · 673 unmodified lines
674 mtspr SPRN_SPEFSCR,r0 /* restore SPEFSCR reg */674 mtspr SPRN_SPEFSCR,r0 /* restore SPEFSCR reg */
675END_FTR_SECTION_IFSET(CPU_FTR_SPE)675END_FTR_SECTION_IFSET(CPU_FTR_SPE)
676#endif /* CONFIG_SPE */676#endif /* CONFIG_SPE */
677#if defined(CONFIG_CC_STACKPROTECTOR) && !defined(CONFIG_SMP)677
678 lwz r0,TSK_STACK_CANARY(r2)
679 lis r4,__stack_chk_guard@ha
680 stw r0,__stack_chk_guard@l(r4)
681#endif
682 lwz r0,_CCR(r1)678 lwz r0,_CCR(r1)
683 mtcrf 0xFF,r0679 mtcrf 0xFF,r0
684 /* r3-r12 are destroyed -- Cort */680 /* r3-r12 are destroyed -- Cort */
arch/powerpc/kernel/module_64.c+0−8
@@ -286,14 +286,6 @@ static void dedotify_versions(struct modversion_info *vers, · 285 unmodified lines
286 for (end = (void *)vers + size; vers < end; vers++)286 for (end = (void *)vers + size; vers < end; vers++)
287 if (vers->name[0] == '.') {287 if (vers->name[0] == '.') {
288 memmove(vers->name, vers->name+1, strlen(vers->name));288 memmove(vers->name, vers->name+1, strlen(vers->name));
289#ifdef ARCH_RELOCATES_KCRCTAB
290 /* The TOC symbol has no CRC computed. To avoid CRC
291 * check failing, we must force it to the expected
292 * value (see CRC check in module.c).
293 */
294 if (!strcmp(vers->name, "TOC."))
295 vers->crc = -(unsigned long)reloc_start;
296#endif
297 }289 }
298}290}
299 291
arch/powerpc/kernel/process.c+0−6
@@ -64,12 +64,6 @@ · 63 unmodified lines
64#include <linux/kprobes.h>64#include <linux/kprobes.h>
65#include <linux/kdebug.h>65#include <linux/kdebug.h>
66 66
67#ifdef CONFIG_CC_STACKPROTECTOR
68#include <linux/stackprotector.h>
69unsigned long __stack_chk_guard __read_mostly;
70EXPORT_SYMBOL(__stack_chk_guard);
71#endif
72
73/* Transactional Memory debug */67/* Transactional Memory debug */
74#ifdef TM_DEBUG_SW68#ifdef TM_DEBUG_SW
75#define TM_DEBUG(x...) printk(KERN_INFO x)69#define TM_DEBUG(x...) printk(KERN_INFO x)
arch/powerpc/kernel/prom_init.c+3−0
@@ -2834,6 +2834,9 @@ static void __init prom_find_boot_cpu(void) · 2833 unmodified lines
2834 2834
2835 cpu_pkg = call_prom("instance-to-package", 1, 1, prom_cpu);2835 cpu_pkg = call_prom("instance-to-package", 1, 1, prom_cpu);
2836 2836
2837 if (!PHANDLE_VALID(cpu_pkg))
2838 return;
2839
2837 prom_getprop(cpu_pkg, "reg", &rval, sizeof(rval));2840 prom_getprop(cpu_pkg, "reg", &rval, sizeof(rval));
2838 prom.cpu = be32_to_cpu(rval);2841 prom.cpu = be32_to_cpu(rval);
2839 2842
arch/powerpc/mm/pgtable-radix.c+2−2
@@ -65,7 +65,7 @@ int radix__map_kernel_page(unsigned long ea, unsigned long pa, · 64 unmodified lines
65 if (!pmdp)65 if (!pmdp)
66 return -ENOMEM;66 return -ENOMEM;
67 if (map_page_size == PMD_SIZE) {67 if (map_page_size == PMD_SIZE) {
68 ptep = (pte_t *)pudp;68 ptep = pmdp_ptep(pmdp);
69 goto set_the_pte;69 goto set_the_pte;
70 }70 }
71 ptep = pte_alloc_kernel(pmdp, ea);71 ptep = pte_alloc_kernel(pmdp, ea);
@@ -90,7 +90,7 @@ int radix__map_kernel_page(unsigned long ea, unsigned long pa, · 18 unmodified lines
90 }90 }
91 pmdp = pmd_offset(pudp, ea);91 pmdp = pmd_offset(pudp, ea);
92 if (map_page_size == PMD_SIZE) {92 if (map_page_size == PMD_SIZE) {
93 ptep = (pte_t *)pudp;93 ptep = pmdp_ptep(pmdp);
94 goto set_the_pte;94 goto set_the_pte;
95 }95 }
96 if (!pmd_present(*pmdp)) {96 if (!pmd_present(*pmdp)) {
arch/sparc/include/asm/mmu_context_64.h+4−4
@@ -35,15 +35,15 @@ void __tsb_context_switch(unsigned long pgd_pa, · 34 unmodified lines
35static inline void tsb_context_switch(struct mm_struct *mm)35static inline void tsb_context_switch(struct mm_struct *mm)
36{36{
37 __tsb_context_switch(__pa(mm->pgd),37 __tsb_context_switch(__pa(mm->pgd),
38 &mm->context.tsb_block[0],38 &mm->context.tsb_block[MM_TSB_BASE],
39#if defined(CONFIG_HUGETLB_PAGE) || defined(CONFIG_TRANSPARENT_HUGEPAGE)39#if defined(CONFIG_HUGETLB_PAGE) || defined(CONFIG_TRANSPARENT_HUGEPAGE)
40 (mm->context.tsb_block[1].tsb ?40 (mm->context.tsb_block[MM_TSB_HUGE].tsb ?
41 &mm->context.tsb_block[1] :41 &mm->context.tsb_block[MM_TSB_HUGE] :
42 NULL)42 NULL)
43#else43#else
44 NULL44 NULL
45#endif45#endif
46 , __pa(&mm->context.tsb_descr[0]));46 , __pa(&mm->context.tsb_descr[MM_TSB_BASE]));
47}47}
48 48
49void tsb_grow(struct mm_struct *mm,49void tsb_grow(struct mm_struct *mm,
arch/sparc/kernel/irq_64.c+1−1
@@ -1021,7 +1021,7 @@ static void __init alloc_one_queue(unsigned long *pa_ptr, unsigned long qmask) · 1020 unmodified lines
1021 unsigned long order = get_order(size);1021 unsigned long order = get_order(size);
1022 unsigned long p;1022 unsigned long p;
1023 1023
1024 p = __get_free_pages(GFP_KERNEL, order);1024 p = __get_free_pages(GFP_KERNEL | __GFP_ZERO, order);
1025 if (!p) {1025 if (!p) {
1026 prom_printf("SUN4V: Error, cannot allocate queue.\n");1026 prom_printf("SUN4V: Error, cannot allocate queue.\n");
1027 prom_halt();1027 prom_halt();
arch/sparc/kernel/sstate.c+3−3
@@ -43,8 +43,8 @@ static const char poweroff_msg[32] __attribute__((aligned(32))) = · 42 unmodified lines
43 "Linux powering off";43 "Linux powering off";
44static const char rebooting_msg[32] __attribute__((aligned(32))) =44static const char rebooting_msg[32] __attribute__((aligned(32))) =
45 "Linux rebooting";45 "Linux rebooting";
46static const char panicing_msg[32] __attribute__((aligned(32))) =46static const char panicking_msg[32] __attribute__((aligned(32))) =
47 "Linux panicing";47 "Linux panicking";
48 48
49static int sstate_reboot_call(struct notifier_block *np, unsigned long type, void *_unused)49static int sstate_reboot_call(struct notifier_block *np, unsigned long type, void *_unused)
50{50{
@@ -76,7 +76,7 @@ static struct notifier_block sstate_reboot_notifier = { · 25 unmodified lines
76 76
77static int sstate_panic_event(struct notifier_block *n, unsigned long event, void *ptr)77static int sstate_panic_event(struct notifier_block *n, unsigned long event, void *ptr)
78{78{
79 do_set_sstate(HV_SOFT_STATE_TRANSITION, panicing_msg);79 do_set_sstate(HV_SOFT_STATE_TRANSITION, panicking_msg);
80 80
81 return NOTIFY_DONE;81 return NOTIFY_DONE;
82}82}
arch/sparc/kernel/traps_64.c+73−0
@@ -2051,6 +2051,73 @@ void sun4v_resum_overflow(struct pt_regs *regs) · 2050 unmodified lines
2051 atomic_inc(&sun4v_resum_oflow_cnt);2051 atomic_inc(&sun4v_resum_oflow_cnt);
2052}2052}
2053 2053
2054/* Given a set of registers, get the virtual addressi that was being accessed
2055 * by the faulting instructions at tpc.
2056 */
2057static unsigned long sun4v_get_vaddr(struct pt_regs *regs)
2058{
2059 unsigned int insn;
2060
2061 if (!copy_from_user(&insn, (void __user *)regs->tpc, 4)) {
2062 return compute_effective_address(regs, insn,
2063 (insn >> 25) & 0x1f);
2064 }
2065 return 0;
2066}
2067
2068/* Attempt to handle non-resumable errors generated from userspace.
2069 * Returns true if the signal was handled, false otherwise.
2070 */
2071bool sun4v_nonresum_error_user_handled(struct pt_regs *regs,
2072 struct sun4v_error_entry *ent) {
2073
2074 unsigned int attrs = ent->err_attrs;
2075
2076 if (attrs & SUN4V_ERR_ATTRS_MEMORY) {
2077 unsigned long addr = ent->err_raddr;
2078 siginfo_t info;
2079
2080 if (addr == ~(u64)0) {
2081 /* This seems highly unlikely to ever occur */
2082 pr_emerg("SUN4V NON-RECOVERABLE ERROR: Memory error detected in unknown location!\n");
2083 } else {
2084 unsigned long page_cnt = DIV_ROUND_UP(ent->err_size,
2085 PAGE_SIZE);
2086
2087 /* Break the unfortunate news. */
2088 pr_emerg("SUN4V NON-RECOVERABLE ERROR: Memory failed at %016lX\n",
2089 addr);
2090 pr_emerg("SUN4V NON-RECOVERABLE ERROR: Claiming %lu ages.\n",
2091 page_cnt);
2092
2093 while (page_cnt-- > 0) {
2094 if (pfn_valid(addr >> PAGE_SHIFT))
2095 get_page(pfn_to_page(addr >> PAGE_SHIFT));
2096 addr += PAGE_SIZE;
2097 }
2098 }
2099 info.si_signo = SIGKILL;
2100 info.si_errno = 0;
2101 info.si_trapno = 0;
2102 force_sig_info(info.si_signo, &info, current);
2103
2104 return true;
2105 }
2106 if (attrs & SUN4V_ERR_ATTRS_PIO) {
2107 siginfo_t info;
2108
2109 info.si_signo = SIGBUS;
2110 info.si_code = BUS_ADRERR;
2111 info.si_addr = (void __user *)sun4v_get_vaddr(regs);
2112 force_sig_info(info.si_signo, &info, current);
2113
2114 return true;
2115 }
2116
2117 /* Default to doing nothing */
2118 return false;
2119}
2120
2054/* We run with %pil set to PIL_NORMAL_MAX and PSTATE_IE enabled in %pstate.2121/* We run with %pil set to PIL_NORMAL_MAX and PSTATE_IE enabled in %pstate.
2055 * Log the event, clear the first word of the entry, and die.2122 * Log the event, clear the first word of the entry, and die.
2056 */2123 */
@@ -2075,6 +2142,12 @@ void sun4v_nonresum_error(struct pt_regs *regs, unsigned long offset) · 18 unmodified lines
2075 2142
2076 put_cpu();2143 put_cpu();
2077 2144
2145 if (!(regs->tstate & TSTATE_PRIV) &&
2146 sun4v_nonresum_error_user_handled(regs, &local_copy)) {
2147 /* DON'T PANIC: This userspace error was handled. */
2148 return;
2149 }
2150
2078#ifdef CONFIG_PCI2151#ifdef CONFIG_PCI
2079 /* Check for the special PCI poke sequence. */2152 /* Check for the special PCI poke sequence. */
2080 if (pci_poke_in_progress && pci_poke_cpu == cpu) {2153 if (pci_poke_in_progress && pci_poke_cpu == cpu) {
arch/x86/events/intel/rapl.c+26−34
@@ -161,7 +161,13 @@ static u64 rapl_timer_ms; · 160 unmodified lines
161 161
162static inline struct rapl_pmu *cpu_to_rapl_pmu(unsigned int cpu)162static inline struct rapl_pmu *cpu_to_rapl_pmu(unsigned int cpu)
163{163{
164 return rapl_pmus->pmus[topology_logical_package_id(cpu)];164 unsigned int pkgid = topology_logical_package_id(cpu);
165
166 /*
167 * The unsigned check also catches the '-1' return value for non
168 * existent mappings in the topology map.
169 */
170 return pkgid < rapl_pmus->maxpkg ? rapl_pmus->pmus[pkgid] : NULL;
165}171}
166 172
167static inline u64 rapl_read_counter(struct perf_event *event)173static inline u64 rapl_read_counter(struct perf_event *event)
@@ -402,6 +408,8 @@ static int rapl_pmu_event_init(struct perf_event *event) · 234 unmodified lines
402 408
403 /* must be done before validate_group */409 /* must be done before validate_group */
404 pmu = cpu_to_rapl_pmu(event->cpu);410 pmu = cpu_to_rapl_pmu(event->cpu);
411 if (!pmu)
412 return -EINVAL;
405 event->cpu = pmu->cpu;413 event->cpu = pmu->cpu;
406 event->pmu_private = pmu;414 event->pmu_private = pmu;
407 event->hw.event_base = msr;415 event->hw.event_base = msr;
@@ -585,6 +593,20 @@ static int rapl_cpu_online(unsigned int cpu) · 177 unmodified lines
585 struct rapl_pmu *pmu = cpu_to_rapl_pmu(cpu);593 struct rapl_pmu *pmu = cpu_to_rapl_pmu(cpu);
586 int target;594 int target;
587 595
596 if (!pmu) {
597 pmu = kzalloc_node(sizeof(*pmu), GFP_KERNEL, cpu_to_node(cpu));
598 if (!pmu)
599 return -ENOMEM;
600
601 raw_spin_lock_init(&pmu->lock);
602 INIT_LIST_HEAD(&pmu->active_list);
603 pmu->pmu = &rapl_pmus->pmu;
604 pmu->timer_interval = ms_to_ktime(rapl_timer_ms);
605 rapl_hrtimer_init(pmu);
606
607 rapl_pmus->pmus[topology_logical_package_id(cpu)] = pmu;
608 }
609
588 /*610 /*
589 * Check if there is an online cpu in the package which collects rapl611 * Check if there is an online cpu in the package which collects rapl
590 * events already.612 * events already.
@@ -598,27 +620,6 @@ static int rapl_cpu_online(unsigned int cpu) · 7 unmodified lines
598 return 0;620 return 0;
599}621}
600 622
601static int rapl_cpu_prepare(unsigned int cpu)
602{
603 struct rapl_pmu *pmu = cpu_to_rapl_pmu(cpu);
604
605 if (pmu)
606 return 0;
607
608 pmu = kzalloc_node(sizeof(*pmu), GFP_KERNEL, cpu_to_node(cpu));
609 if (!pmu)
610 return -ENOMEM;
611
612 raw_spin_lock_init(&pmu->lock);
613 INIT_LIST_HEAD(&pmu->active_list);
614 pmu->pmu = &rapl_pmus->pmu;
615 pmu->timer_interval = ms_to_ktime(rapl_timer_ms);
616 pmu->cpu = -1;
617 rapl_hrtimer_init(pmu);
618 rapl_pmus->pmus[topology_logical_package_id(cpu)] = pmu;
619 return 0;
620}
621
622static int rapl_check_hw_unit(bool apply_quirk)623static int rapl_check_hw_unit(bool apply_quirk)
623{624{
624 u64 msr_rapl_power_unit_bits;625 u64 msr_rapl_power_unit_bits;
@@ -803,29 +804,21 @@ static int __init rapl_pmu_init(void) · 178 unmodified lines
803 /*804 /*
804 * Install callbacks. Core will call them for each online cpu.805 * Install callbacks. Core will call them for each online cpu.
805 */806 */
806
807 ret = cpuhp_setup_state(CPUHP_PERF_X86_RAPL_PREP, "perf/x86/rapl:prepare",
808 rapl_cpu_prepare, NULL);
809 if (ret)
810 goto out;
811
812 ret = cpuhp_setup_state(CPUHP_AP_PERF_X86_RAPL_ONLINE,807 ret = cpuhp_setup_state(CPUHP_AP_PERF_X86_RAPL_ONLINE,
813 "perf/x86/rapl:online",808 "perf/x86/rapl:online",
814 rapl_cpu_online, rapl_cpu_offline);809 rapl_cpu_online, rapl_cpu_offline);
815 if (ret)810 if (ret)
816 goto out1;811 goto out;
817 812
818 ret = perf_pmu_register(&rapl_pmus->pmu, "power", -1);813 ret = perf_pmu_register(&rapl_pmus->pmu, "power", -1);
819 if (ret)814 if (ret)
820 goto out2;815 goto out1;
821 816
822 rapl_advertise();817 rapl_advertise();
823 return 0;818 return 0;
824 819
825out2:
826 cpuhp_remove_state(CPUHP_AP_PERF_X86_RAPL_ONLINE);
827out1:820out1:
828 cpuhp_remove_state(CPUHP_PERF_X86_RAPL_PREP);821 cpuhp_remove_state(CPUHP_AP_PERF_X86_RAPL_ONLINE);
829out:822out:
830 pr_warn("Initialization failed (%d), disabled\n", ret);823 pr_warn("Initialization failed (%d), disabled\n", ret);
831 cleanup_rapl_pmus();824 cleanup_rapl_pmus();
@@ -836,7 +829,6 @@ module_init(rapl_pmu_init); · 4 unmodified lines
836static void __exit intel_rapl_exit(void)829static void __exit intel_rapl_exit(void)
837{830{
838 cpuhp_remove_state_nocalls(CPUHP_AP_PERF_X86_RAPL_ONLINE);831 cpuhp_remove_state_nocalls(CPUHP_AP_PERF_X86_RAPL_ONLINE);
839 cpuhp_remove_state_nocalls(CPUHP_PERF_X86_RAPL_PREP);
840 perf_pmu_unregister(&rapl_pmus->pmu);832 perf_pmu_unregister(&rapl_pmus->pmu);
841 cleanup_rapl_pmus();833 cleanup_rapl_pmus();
842}834}
arch/x86/events/intel/uncore.c+91−141
@@ -100,7 +100,13 @@ ssize_t uncore_event_show(struct kobject *kobj, · 99 unmodified lines
100 100
101struct intel_uncore_box *uncore_pmu_to_box(struct intel_uncore_pmu *pmu, int cpu)101struct intel_uncore_box *uncore_pmu_to_box(struct intel_uncore_pmu *pmu, int cpu)
102{102{
103 return pmu->boxes[topology_logical_package_id(cpu)];103 unsigned int pkgid = topology_logical_package_id(cpu);
104
105 /*
106 * The unsigned check also catches the '-1' return value for non
107 * existent mappings in the topology map.
108 */
109 return pkgid < max_packages ? pmu->boxes[pkgid] : NULL;
104}110}
105 111
106u64 uncore_msr_read_counter(struct intel_uncore_box *box, struct perf_event *event)112u64 uncore_msr_read_counter(struct intel_uncore_box *box, struct perf_event *event)
@@ -764,30 +770,6 @@ static void uncore_pmu_unregister(struct intel_uncore_pmu *pmu) · 657 unmodified lines
764 pmu->registered = false;770 pmu->registered = false;
765}771}
766 772
767static void __uncore_exit_boxes(struct intel_uncore_type *type, int cpu)
768{
769 struct intel_uncore_pmu *pmu = type->pmus;
770 struct intel_uncore_box *box;
771 int i, pkg;
772
773 if (pmu) {
774 pkg = topology_physical_package_id(cpu);
775 for (i = 0; i < type->num_boxes; i++, pmu++) {
776 box = pmu->boxes[pkg];
777 if (box)
778 uncore_box_exit(box);
779 }
780 }
781}
782
783static void uncore_exit_boxes(void *dummy)
784{
785 struct intel_uncore_type **types;
786
787 for (types = uncore_msr_uncores; *types; types++)
788 __uncore_exit_boxes(*types++, smp_processor_id());
789}
790
791static void uncore_free_boxes(struct intel_uncore_pmu *pmu)773static void uncore_free_boxes(struct intel_uncore_pmu *pmu)
792{774{
793 int pkg;775 int pkg;
@@ -1058,86 +1040,6 @@ static void uncore_pci_exit(void) · 264 unmodified lines
1058 }1040 }
1059}1041}
1060 1042
1061static int uncore_cpu_dying(unsigned int cpu)
1062{
1063 struct intel_uncore_type *type, **types = uncore_msr_uncores;
1064 struct intel_uncore_pmu *pmu;
1065 struct intel_uncore_box *box;
1066 int i, pkg;
1067
1068 pkg = topology_logical_package_id(cpu);
1069 for (; *types; types++) {
1070 type = *types;
1071 pmu = type->pmus;
1072 for (i = 0; i < type->num_boxes; i++, pmu++) {
1073 box = pmu->boxes[pkg];
1074 if (box && atomic_dec_return(&box->refcnt) == 0)
1075 uncore_box_exit(box);
1076 }
1077 }
1078 return 0;
1079}
1080
1081static int first_init;
1082
1083static int uncore_cpu_starting(unsigned int cpu)
1084{
1085 struct intel_uncore_type *type, **types = uncore_msr_uncores;
1086 struct intel_uncore_pmu *pmu;
1087 struct intel_uncore_box *box;
1088 int i, pkg, ncpus = 1;
1089
1090 if (first_init) {
1091 /*
1092 * On init we get the number of online cpus in the package
1093 * and set refcount for all of them.
1094 */
1095 ncpus = cpumask_weight(topology_core_cpumask(cpu));
1096 }
1097
1098 pkg = topology_logical_package_id(cpu);
1099 for (; *types; types++) {
1100 type = *types;
1101 pmu = type->pmus;
1102 for (i = 0; i < type->num_boxes; i++, pmu++) {
1103 box = pmu->boxes[pkg];
1104 if (!box)
1105 continue;
1106 /* The first cpu on a package activates the box */
1107 if (atomic_add_return(ncpus, &box->refcnt) == ncpus)
1108 uncore_box_init(box);
1109 }
1110 }
1111
1112 return 0;
1113}
1114
1115static int uncore_cpu_prepare(unsigned int cpu)
1116{
1117 struct intel_uncore_type *type, **types = uncore_msr_uncores;
1118 struct intel_uncore_pmu *pmu;
1119 struct intel_uncore_box *box;
1120 int i, pkg;
1121
1122 pkg = topology_logical_package_id(cpu);
1123 for (; *types; types++) {
1124 type = *types;
1125 pmu = type->pmus;
1126 for (i = 0; i < type->num_boxes; i++, pmu++) {
1127 if (pmu->boxes[pkg])
1128 continue;
1129 /* First cpu of a package allocates the box */
1130 box = uncore_alloc_box(type, cpu_to_node(cpu));
1131 if (!box)
1132 return -ENOMEM;
1133 box->pmu = pmu;
1134 box->pkgid = pkg;
1135 pmu->boxes[pkg] = box;
1136 }
1137 }
1138 return 0;
1139}
1140
1141static void uncore_change_type_ctx(struct intel_uncore_type *type, int old_cpu,1043static void uncore_change_type_ctx(struct intel_uncore_type *type, int old_cpu,
1142 int new_cpu)1044 int new_cpu)
1143{1045{
@@ -1177,12 +1079,14 @@ static void uncore_change_context(struct intel_uncore_type **uncores, · 33 unmodified lines
1177 1079
1178static int uncore_event_cpu_offline(unsigned int cpu)1080static int uncore_event_cpu_offline(unsigned int cpu)
1179{1081{
1180 int target;1082 struct intel_uncore_type *type, **types = uncore_msr_uncores;
1083 struct intel_uncore_pmu *pmu;
1084 struct intel_uncore_box *box;
1085 int i, pkg, target;
1181 1086
1182 /* Check if exiting cpu is used for collecting uncore events */1087 /* Check if exiting cpu is used for collecting uncore events */
1183 if (!cpumask_test_and_clear_cpu(cpu, &uncore_cpu_mask))1088 if (!cpumask_test_and_clear_cpu(cpu, &uncore_cpu_mask))
1184 return 0;1089 goto unref;
1185
1186 /* Find a new cpu to collect uncore events */1090 /* Find a new cpu to collect uncore events */
1187 target = cpumask_any_but(topology_core_cpumask(cpu), cpu);1091 target = cpumask_any_but(topology_core_cpumask(cpu), cpu);
1188 1092
@@ -1194,12 +1098,82 @@ static int uncore_event_cpu_offline(unsigned int cpu) · 5 unmodified lines
1194 1098
1195 uncore_change_context(uncore_msr_uncores, cpu, target);1099 uncore_change_context(uncore_msr_uncores, cpu, target);
1196 uncore_change_context(uncore_pci_uncores, cpu, target);1100 uncore_change_context(uncore_pci_uncores, cpu, target);
1101
1102unref:
1103 /* Clear the references */
1104 pkg = topology_logical_package_id(cpu);
1105 for (; *types; types++) {
1106 type = *types;
1107 pmu = type->pmus;
1108 for (i = 0; i < type->num_boxes; i++, pmu++) {
1109 box = pmu->boxes[pkg];
1110 if (box && atomic_dec_return(&box->refcnt) == 0)
1111 uncore_box_exit(box);
1112 }
1113 }
1197 return 0;1114 return 0;
1198}1115}
1199 1116
1117static int allocate_boxes(struct intel_uncore_type **types,
1118 unsigned int pkg, unsigned int cpu)
1119{
1120 struct intel_uncore_box *box, *tmp;
1121 struct intel_uncore_type *type;
1122 struct intel_uncore_pmu *pmu;
1123 LIST_HEAD(allocated);
1124 int i;
1125
1126 /* Try to allocate all required boxes */
1127 for (; *types; types++) {
1128 type = *types;
1129 pmu = type->pmus;
1130 for (i = 0; i < type->num_boxes; i++, pmu++) {
1131 if (pmu->boxes[pkg])
1132 continue;
1133 box = uncore_alloc_box(type, cpu_to_node(cpu));
1134 if (!box)
1135 goto cleanup;
1136 box->pmu = pmu;
1137 box->pkgid = pkg;
1138 list_add(&box->active_list, &allocated);
1139 }
1140 }
1141 /* Install them in the pmus */
1142 list_for_each_entry_safe(box, tmp, &allocated, active_list) {
1143 list_del_init(&box->active_list);
1144 box->pmu->boxes[pkg] = box;
1145 }
1146 return 0;
1147
1148cleanup:
1149 list_for_each_entry_safe(box, tmp, &allocated, active_list) {
1150 list_del_init(&box->active_list);
1151 kfree(box);
1152 }
1153 return -ENOMEM;
1154}
1155
1200static int uncore_event_cpu_online(unsigned int cpu)1156static int uncore_event_cpu_online(unsigned int cpu)
1201{1157{
1202 int target;1158 struct intel_uncore_type *type, **types = uncore_msr_uncores;
1159 struct intel_uncore_pmu *pmu;
1160 struct intel_uncore_box *box;
1161 int i, ret, pkg, target;
1162
1163 pkg = topology_logical_package_id(cpu);
1164 ret = allocate_boxes(types, pkg, cpu);
1165 if (ret)
1166 return ret;
1167
1168 for (; *types; types++) {
1169 type = *types;
1170 pmu = type->pmus;
1171 for (i = 0; i < type->num_boxes; i++, pmu++) {
1172 box = pmu->boxes[pkg];
1173 if (!box && atomic_inc_return(&box->refcnt) == 1)
1174 uncore_box_init(box);
1175 }
1176 }
1203 1177
1204 /*1178 /*
1205 * Check if there is an online cpu in the package1179 * Check if there is an online cpu in the package
@@ -1389,38 +1363,16 @@ static int __init intel_uncore_init(void) · 183 unmodified lines
1389 if (cret && pret)1363 if (cret && pret)
1390 return -ENODEV;1364 return -ENODEV;
1391 1365
1392 /*1366 /* Install hotplug callbacks to setup the targets for each package */
1393 * Install callbacks. Core will call them for each online cpu.1367 ret = cpuhp_setup_state(CPUHP_AP_PERF_X86_UNCORE_ONLINE,
1394 *1368 "perf/x86/intel/uncore:online",
1395 * The first online cpu of each package allocates and takes1369 uncore_event_cpu_online,
1396 * the refcounts for all other online cpus in that package.1370 uncore_event_cpu_offline);
1397 * If msrs are not enabled no allocation is required and1371 if (ret)
1398 * uncore_cpu_prepare() is not called for each online cpu.1372 goto err;
1399 */
1400 if (!cret) {
1401 ret = cpuhp_setup_state(CPUHP_PERF_X86_UNCORE_PREP,
1402 "perf/x86/intel/uncore:prepare",
1403 uncore_cpu_prepare, NULL);
1404 if (ret)
1405 goto err;
1406 } else {
1407 cpuhp_setup_state_nocalls(CPUHP_PERF_X86_UNCORE_PREP,
1408 "perf/x86/intel/uncore:prepare",
1409 uncore_cpu_prepare, NULL);
1410 }
1411 first_init = 1;
1412 cpuhp_setup_state(CPUHP_AP_PERF_X86_UNCORE_STARTING,
1413 "perf/x86/uncore:starting",
1414 uncore_cpu_starting, uncore_cpu_dying);
1415 first_init = 0;
1416 cpuhp_setup_state(CPUHP_AP_PERF_X86_UNCORE_ONLINE,
1417 "perf/x86/uncore:online",
1418 uncore_event_cpu_online, uncore_event_cpu_offline);
1419 return 0;1373 return 0;
1420 1374
1421err:1375err:
1422 /* Undo box->init_box() */
1423 on_each_cpu_mask(&uncore_cpu_mask, uncore_exit_boxes, NULL, 1);
1424 uncore_types_exit(uncore_msr_uncores);1376 uncore_types_exit(uncore_msr_uncores);
1425 uncore_pci_exit();1377 uncore_pci_exit();
1426 return ret;1378 return ret;
@@ -1429,9 +1381,7 @@ module_init(intel_uncore_init); · 2 unmodified lines
1429 1381
1430static void __exit intel_uncore_exit(void)1382static void __exit intel_uncore_exit(void)
1431{1383{
1432 cpuhp_remove_state_nocalls(CPUHP_AP_PERF_X86_UNCORE_ONLINE);1384 cpuhp_remove_state(CPUHP_AP_PERF_X86_UNCORE_ONLINE);
1433 cpuhp_remove_state_nocalls(CPUHP_AP_PERF_X86_UNCORE_STARTING);
1434 cpuhp_remove_state_nocalls(CPUHP_PERF_X86_UNCORE_PREP);
1435 uncore_types_exit(uncore_msr_uncores);1385 uncore_types_exit(uncore_msr_uncores);
1436 uncore_pci_exit();1386 uncore_pci_exit();
1437}1387}
arch/x86/include/asm/microcode.h+1−0
@@ -140,6 +140,7 @@ extern void __init load_ucode_bsp(void); · 139 unmodified lines
140extern void load_ucode_ap(void);140extern void load_ucode_ap(void);
141void reload_early_microcode(void);141void reload_early_microcode(void);
142extern bool get_builtin_firmware(struct cpio_data *cd, const char *name);142extern bool get_builtin_firmware(struct cpio_data *cd, const char *name);
143extern bool initrd_gone;
143#else144#else
144static inline int __init microcode_init(void) { return 0; };145static inline int __init microcode_init(void) { return 0; };
145static inline void __init load_ucode_bsp(void) { }146static inline void __init load_ucode_bsp(void) { }
arch/x86/kernel/apic/io_apic.c+2−0
@@ -2117,6 +2117,7 @@ static inline void __init check_timer(void) · 2116 unmodified lines
2117 if (idx != -1 && irq_trigger(idx))2117 if (idx != -1 && irq_trigger(idx))
2118 unmask_ioapic_irq(irq_get_chip_data(0));2118 unmask_ioapic_irq(irq_get_chip_data(0));
2119 }2119 }
2120 irq_domain_deactivate_irq(irq_data);
2120 irq_domain_activate_irq(irq_data);2121 irq_domain_activate_irq(irq_data);
2121 if (timer_irq_works()) {2122 if (timer_irq_works()) {
2122 if (disable_timer_pin_1 > 0)2123 if (disable_timer_pin_1 > 0)
@@ -2138,6 +2139,7 @@ static inline void __init check_timer(void) · 15 unmodified lines
2138 * legacy devices should be connected to IO APIC #02139 * legacy devices should be connected to IO APIC #0
2139 */2140 */
2140 replace_pin_at_irq_node(data, node, apic1, pin1, apic2, pin2);2141 replace_pin_at_irq_node(data, node, apic1, pin1, apic2, pin2);
2142 irq_domain_deactivate_irq(irq_data);
2141 irq_domain_activate_irq(irq_data);2143 irq_domain_activate_irq(irq_data);
2142 legacy_pic->unmask(0);2144 legacy_pic->unmask(0);
2143 if (timer_irq_works()) {2145 if (timer_irq_works()) {
arch/x86/kernel/cpu/mcheck/mce.c+12−19
@@ -1373,20 +1373,15 @@ static unsigned long mce_adjust_timer_default(unsigned long interval) · 1372 unmodified lines
1373 1373
1374static unsigned long (*mce_adjust_timer)(unsigned long interval) = mce_adjust_timer_default;1374static unsigned long (*mce_adjust_timer)(unsigned long interval) = mce_adjust_timer_default;
1375 1375
1376static void __restart_timer(struct timer_list *t, unsigned long interval)1376static void __start_timer(struct timer_list *t, unsigned long interval)
1377{1377{
1378 unsigned long when = jiffies + interval;1378 unsigned long when = jiffies + interval;
1379 unsigned long flags;1379 unsigned long flags;
1380 1380
1381 local_irq_save(flags);1381 local_irq_save(flags);
1382 1382
1383 if (timer_pending(t)) {1383 if (!timer_pending(t) || time_before(when, t->expires))
1384 if (time_before(when, t->expires))1384 mod_timer(t, round_jiffies(when));
1385 mod_timer(t, when);
1386 } else {
1387 t->expires = round_jiffies(when);
1388 add_timer_on(t, smp_processor_id());
1389 }
1390 1385
1391 local_irq_restore(flags);1386 local_irq_restore(flags);
1392}1387}
@@ -1421,7 +1416,7 @@ static void mce_timer_fn(unsigned long data) · 28 unmodified lines
1421 1416
1422done:1417done:
1423 __this_cpu_write(mce_next_interval, iv);1418 __this_cpu_write(mce_next_interval, iv);
1424 __restart_timer(t, iv);1419 __start_timer(t, iv);
1425}1420}
1426 1421
1427/*1422/*
@@ -1432,7 +1427,7 @@ void mce_timer_kick(unsigned long interval) · 4 unmodified lines
1432 struct timer_list *t = this_cpu_ptr(&mce_timer);1427 struct timer_list *t = this_cpu_ptr(&mce_timer);
1433 unsigned long iv = __this_cpu_read(mce_next_interval);1428 unsigned long iv = __this_cpu_read(mce_next_interval);
1434 1429
1435 __restart_timer(t, interval);1430 __start_timer(t, interval);
1436 1431
1437 if (interval < iv)1432 if (interval < iv)
1438 __this_cpu_write(mce_next_interval, interval);1433 __this_cpu_write(mce_next_interval, interval);
@@ -1779,17 +1774,15 @@ static void __mcheck_cpu_clear_vendor(struct cpuinfo_x86 *c) · 340 unmodified lines
1779 }1774 }
1780}1775}
1781 1776
1782static void mce_start_timer(unsigned int cpu, struct timer_list *t)1777static void mce_start_timer(struct timer_list *t)
1783{1778{
1784 unsigned long iv = check_interval * HZ;1779 unsigned long iv = check_interval * HZ;
1785 1780
1786 if (mca_cfg.ignore_ce || !iv)1781 if (mca_cfg.ignore_ce || !iv)
1787 return;1782 return;
1788 1783
1789 per_cpu(mce_next_interval, cpu) = iv;1784 this_cpu_write(mce_next_interval, iv);
1790 1785 __start_timer(t, iv);
1791 t->expires = round_jiffies(jiffies + iv);
1792 add_timer_on(t, cpu);
1793}1786}
1794 1787
1795static void __mcheck_cpu_setup_timer(void)1788static void __mcheck_cpu_setup_timer(void)
@@ -1806,7 +1799,7 @@ static void __mcheck_cpu_init_timer(void) · 10 unmodified lines
1806 unsigned int cpu = smp_processor_id();1799 unsigned int cpu = smp_processor_id();
1807 1800
1808 setup_pinned_timer(t, mce_timer_fn, cpu);1801 setup_pinned_timer(t, mce_timer_fn, cpu);
1809 mce_start_timer(cpu, t);1802 mce_start_timer(t);
1810}1803}
1811 1804
1812/* Handle unconfigured int18 (should never happen) */1805/* Handle unconfigured int18 (should never happen) */
@@ -2566,7 +2559,7 @@ static int mce_cpu_dead(unsigned int cpu) · 753 unmodified lines
2566 2559
2567static int mce_cpu_online(unsigned int cpu)2560static int mce_cpu_online(unsigned int cpu)
2568{2561{
2569 struct timer_list *t = &per_cpu(mce_timer, cpu);2562 struct timer_list *t = this_cpu_ptr(&mce_timer);
2570 int ret;2563 int ret;
2571 2564
2572 mce_device_create(cpu);2565 mce_device_create(cpu);
@@ -2577,13 +2570,13 @@ static int mce_cpu_online(unsigned int cpu) · 4 unmodified lines
2577 return ret;2570 return ret;
2578 }2571 }
2579 mce_reenable_cpu();2572 mce_reenable_cpu();
2580 mce_start_timer(cpu, t);2573 mce_start_timer(t);
2581 return 0;2574 return 0;
2582}2575}
2583 2576
2584static int mce_cpu_pre_down(unsigned int cpu)2577static int mce_cpu_pre_down(unsigned int cpu)
2585{2578{
2586 struct timer_list *t = &per_cpu(mce_timer, cpu);2579 struct timer_list *t = this_cpu_ptr(&mce_timer);
2587 2580
2588 mce_disable_cpu();2581 mce_disable_cpu();
2589 del_timer_sync(t);2582 del_timer_sync(t);
arch/x86/kernel/cpu/microcode/amd.c+3−2
@@ -384,8 +384,9 @@ void load_ucode_amd_ap(unsigned int family) · 383 unmodified lines
384reget:384reget:
385 if (!get_builtin_microcode(&cp, family)) {385 if (!get_builtin_microcode(&cp, family)) {
386#ifdef CONFIG_BLK_DEV_INITRD386#ifdef CONFIG_BLK_DEV_INITRD
387 cp = find_cpio_data(ucode_path, (void *)initrd_start,387 if (!initrd_gone)
388 initrd_end - initrd_start, NULL);388 cp = find_cpio_data(ucode_path, (void *)initrd_start,
389 initrd_end - initrd_start, NULL);
389#endif390#endif
390 if (!(cp.data && cp.size)) {391 if (!(cp.data && cp.size)) {
391 /*392 /*
arch/x86/kernel/cpu/microcode/core.c+17−5
@@ -46,6 +46,8 @@ · 45 unmodified lines
46static struct microcode_ops *microcode_ops;46static struct microcode_ops *microcode_ops;
47static bool dis_ucode_ldr = true;47static bool dis_ucode_ldr = true;
48 48
49bool initrd_gone;
50
49LIST_HEAD(microcode_cache);51LIST_HEAD(microcode_cache);
50 52
51/*53/*
@@ -190,21 +192,24 @@ void load_ucode_ap(void) · 138 unmodified lines
190static int __init save_microcode_in_initrd(void)192static int __init save_microcode_in_initrd(void)
191{193{
192 struct cpuinfo_x86 *c = &boot_cpu_data;194 struct cpuinfo_x86 *c = &boot_cpu_data;
195 int ret = -EINVAL;
193 196
194 switch (c->x86_vendor) {197 switch (c->x86_vendor) {
195 case X86_VENDOR_INTEL:198 case X86_VENDOR_INTEL:
196 if (c->x86 >= 6)199 if (c->x86 >= 6)
197 return save_microcode_in_initrd_intel();200 ret = save_microcode_in_initrd_intel();
198 break;201 break;
199 case X86_VENDOR_AMD:202 case X86_VENDOR_AMD:
200 if (c->x86 >= 0x10)203 if (c->x86 >= 0x10)
201 return save_microcode_in_initrd_amd(c->x86);204 ret = save_microcode_in_initrd_amd(c->x86);
202 break;205 break;
203 default:206 default:
204 break;207 break;
205 }208 }
206 209
207 return -EINVAL;210 initrd_gone = true;
211
212 return ret;
208}213}
209 214
210struct cpio_data find_microcode_in_initrd(const char *path, bool use_pa)215struct cpio_data find_microcode_in_initrd(const char *path, bool use_pa)
@@ -247,9 +252,16 @@ struct cpio_data find_microcode_in_initrd(const char *path, bool use_pa) · 36 unmodified lines
247 * has the virtual address of the beginning of the initrd. It also252 * has the virtual address of the beginning of the initrd. It also
248 * possibly relocates the ramdisk. In either case, initrd_start contains253 * possibly relocates the ramdisk. In either case, initrd_start contains
249 * the updated address so use that instead.254 * the updated address so use that instead.
255 *
256 * initrd_gone is for the hotplug case where we've thrown out initrd
257 * already.
250 */258 */
251 if (!use_pa && initrd_start)259 if (!use_pa) {
252 start = initrd_start;260 if (initrd_gone)
261 return (struct cpio_data){ NULL, 0, "" };
262 if (initrd_start)
263 start = initrd_start;
264 }
253 265
254 return find_cpio_data(path, (void *)start, size, NULL);266 return find_cpio_data(path, (void *)start, size, NULL);
255#else /* !CONFIG_BLK_DEV_INITRD */267#else /* !CONFIG_BLK_DEV_INITRD */
arch/x86/kernel/cpu/microcode/intel.c+1−8
@@ -41,7 +41,7 @@ · 40 unmodified lines
41 41
42static const char ucode_path[] = "kernel/x86/microcode/GenuineIntel.bin";42static const char ucode_path[] = "kernel/x86/microcode/GenuineIntel.bin";
43 43
44/* Current microcode patch used in early patching */44/* Current microcode patch used in early patching on the APs. */
45struct microcode_intel *intel_ucode_patch;45struct microcode_intel *intel_ucode_patch;
46 46
47static inline bool cpu_signatures_match(unsigned int s1, unsigned int p1,47static inline bool cpu_signatures_match(unsigned int s1, unsigned int p1,
@@ -607,12 +607,6 @@ int __init save_microcode_in_initrd_intel(void) · 559 unmodified lines
607 struct ucode_cpu_info uci;607 struct ucode_cpu_info uci;
608 struct cpio_data cp;608 struct cpio_data cp;
609 609
610 /*
611 * AP loading didn't find any microcode patch, no need to save anything.
612 */
613 if (!intel_ucode_patch || IS_ERR(intel_ucode_patch))
614 return 0;
615
616 if (!load_builtin_intel_microcode(&cp))610 if (!load_builtin_intel_microcode(&cp))
617 cp = find_microcode_in_initrd(ucode_path, false);611 cp = find_microcode_in_initrd(ucode_path, false);
618 612
@@ -628,7 +622,6 @@ int __init save_microcode_in_initrd_intel(void) · 9 unmodified lines
628 return 0;622 return 0;
629}623}
630 624
631
632/*625/*
633 * @res_patch, output: a pointer to the patch we found.626 * @res_patch, output: a pointer to the patch we found.
634 */627 */
arch/x86/kernel/fpu/core.c+3−1
@@ -9,6 +9,7 @@ · 8 unmodified lines
9#include <asm/fpu/regset.h>9#include <asm/fpu/regset.h>
10#include <asm/fpu/signal.h>10#include <asm/fpu/signal.h>
11#include <asm/fpu/types.h>11#include <asm/fpu/types.h>
12#include <asm/fpu/xstate.h>
12#include <asm/traps.h>13#include <asm/traps.h>
13 14
14#include <linux/hardirq.h>15#include <linux/hardirq.h>
@@ -183,7 +184,8 @@ void fpstate_init(union fpregs_state *state) · 168 unmodified lines
183 * it will #GP. Make sure it is replaced after the memset().184 * it will #GP. Make sure it is replaced after the memset().
184 */185 */
185 if (static_cpu_has(X86_FEATURE_XSAVES))186 if (static_cpu_has(X86_FEATURE_XSAVES))
186 state->xsave.header.xcomp_bv = XCOMP_BV_COMPACTED_FORMAT;187 state->xsave.header.xcomp_bv = XCOMP_BV_COMPACTED_FORMAT |
188 xfeatures_mask;
187 189
188 if (static_cpu_has(X86_FEATURE_FXSR))190 if (static_cpu_has(X86_FEATURE_FXSR))
189 fpstate_init_fxstate(&state->fxsave);191 fpstate_init_fxstate(&state->fxsave);
arch/x86/kernel/hpet.c+1−0
@@ -352,6 +352,7 @@ static int hpet_resume(struct clock_event_device *evt, int timer) · 351 unmodified lines
352 } else {352 } else {
353 struct hpet_dev *hdev = EVT_TO_HPET_DEV(evt);353 struct hpet_dev *hdev = EVT_TO_HPET_DEV(evt);
354 354
355 irq_domain_deactivate_irq(irq_get_irq_data(hdev->irq));
355 irq_domain_activate_irq(irq_get_irq_data(hdev->irq));356 irq_domain_activate_irq(irq_get_irq_data(hdev->irq));
356 disable_irq(hdev->irq);357 disable_irq(hdev->irq);
357 irq_set_affinity(hdev->irq, cpumask_of(hdev->cpu));358 irq_set_affinity(hdev->irq, cpumask_of(hdev->cpu));
arch/x86/kvm/x86.c+1−0
@@ -3182,6 +3182,7 @@ static void fill_xsave(u8 *dest, struct kvm_vcpu *vcpu) · 3181 unmodified lines
3182 memcpy(dest, xsave, XSAVE_HDR_OFFSET);3182 memcpy(dest, xsave, XSAVE_HDR_OFFSET);
3183 3183
3184 /* Set XSTATE_BV */3184 /* Set XSTATE_BV */
3185 xstate_bv &= vcpu->arch.guest_supported_xcr0 | XFEATURE_MASK_FPSSE;
3185 *(u64 *)(dest + XSAVE_HDR_OFFSET) = xstate_bv;3186 *(u64 *)(dest + XSAVE_HDR_OFFSET) = xstate_bv;
3186 3187
3187 /*3188 /*
arch/x86/platform/efi/efi_64.c+16−0
@@ -268,6 +268,22 @@ int __init efi_setup_page_tables(unsigned long pa_memmap, unsigned num_pages) · 267 unmodified lines
268 268
269 efi_scratch.use_pgd = true;269 efi_scratch.use_pgd = true;
270 270
271 /*
272 * Certain firmware versions are way too sentimential and still believe
273 * they are exclusive and unquestionable owners of the first physical page,
274 * even though they explicitly mark it as EFI_CONVENTIONAL_MEMORY
275 * (but then write-access it later during SetVirtualAddressMap()).
276 *
277 * Create a 1:1 mapping for this page, to avoid triple faults during early
278 * boot with such firmware. We are free to hand this page to the BIOS,
279 * as trim_bios_range() will reserve the first page and isolate it away
280 * from memory allocators anyway.
281 */
282 if (kernel_map_pages_in_pgd(pgd, 0x0, 0x0, 1, _PAGE_RW)) {
283 pr_err("Failed to create 1:1 mapping for the first page!\n");
284 return 1;
285 }
286
271 /*287 /*
272 * When making calls to the firmware everything needs to be 1:1288 * When making calls to the firmware everything needs to be 1:1
273 * mapped and addressable with 32-bit pointers. Map the kernel289 * mapped and addressable with 32-bit pointers. Map the kernel
arch/xtensa/kernel/setup.c+1−1
@@ -419,7 +419,7 @@ subsys_initcall(topology_init); · 418 unmodified lines
419 419
420void cpu_reset(void)420void cpu_reset(void)
421{421{
422#if XCHAL_HAVE_PTP_MMU422#if XCHAL_HAVE_PTP_MMU && IS_ENABLED(CONFIG_MMU)
423 local_irq_disable();423 local_irq_disable();
424 /*424 /*
425 * We have full MMU: all autoload ways, ways 7, 8 and 9 of DTLB must425 * We have full MMU: all autoload ways, ways 7, 8 and 9 of DTLB must
crypto/algapi.c+1−0
@@ -356,6 +356,7 @@ int crypto_register_alg(struct crypto_alg *alg) · 355 unmodified lines
356 struct crypto_larval *larval;356 struct crypto_larval *larval;
357 int err;357 int err;
358 358
359 alg->cra_flags &= ~CRYPTO_ALG_DEAD;
359 err = crypto_check_alg(alg);360 err = crypto_check_alg(alg);
360 if (err)361 if (err)
361 return err;362 return err;
drivers/ata/libata-core.c+4−2
@@ -1702,6 +1702,8 @@ unsigned ata_exec_internal_sg(struct ata_device *dev, · 1701 unmodified lines
1702 1702
1703 if (qc->err_mask & ~AC_ERR_OTHER)1703 if (qc->err_mask & ~AC_ERR_OTHER)
1704 qc->err_mask &= ~AC_ERR_OTHER;1704 qc->err_mask &= ~AC_ERR_OTHER;
1705 } else if (qc->tf.command == ATA_CMD_REQ_SENSE_DATA) {
1706 qc->result_tf.command |= ATA_SENSE;
1705 }1707 }
1706 1708
1707 /* finish up */1709 /* finish up */
@@ -4356,10 +4358,10 @@ static const struct ata_blacklist_entry ata_device_blacklist [] = { · 2648 unmodified lines
4356 { "ST380013AS", "3.20", ATA_HORKAGE_MAX_SEC_1024 },4358 { "ST380013AS", "3.20", ATA_HORKAGE_MAX_SEC_1024 },
4357 4359
4358 /*4360 /*
4359 * Device times out with higher max sects.4361 * These devices time out with higher max sects.
4360 * https://bugzilla.kernel.org/show_bug.cgi?id=1216714362 * https://bugzilla.kernel.org/show_bug.cgi?id=121671
4361 */4363 */
4362 { "LITEON CX1-JB256-HP", NULL, ATA_HORKAGE_MAX_SEC_1024 },4364 { "LITEON CX1-JB*-HP", NULL, ATA_HORKAGE_MAX_SEC_1024 },
4363 4365
4364 /* Devices we expect to fail diagnostics */4366 /* Devices we expect to fail diagnostics */
4365 4367
drivers/ata/sata_mv.c+3−0
@@ -4132,6 +4132,9 @@ static int mv_platform_probe(struct platform_device *pdev) · 4131 unmodified lines
4132 host->iomap = NULL;4132 host->iomap = NULL;
4133 hpriv->base = devm_ioremap(&pdev->dev, res->start,4133 hpriv->base = devm_ioremap(&pdev->dev, res->start,
4134 resource_size(res));4134 resource_size(res));
4135 if (!hpriv->base)
4136 return -ENOMEM;
4137
4135 hpriv->base -= SATAHC0_REG_BASE;4138 hpriv->base -= SATAHC0_REG_BASE;
4136 4139
4137 hpriv->clk = clk_get(&pdev->dev, NULL);4140 hpriv->clk = clk_get(&pdev->dev, NULL);
drivers/base/firmware_class.c+1−4
@@ -558,9 +558,6 @@ static void fw_load_abort(struct firmware_priv *fw_priv) · 557 unmodified lines
558 struct firmware_buf *buf = fw_priv->buf;558 struct firmware_buf *buf = fw_priv->buf;
559 559
560 __fw_load_abort(buf);560 __fw_load_abort(buf);
561
562 /* avoid user action after loading abort */
563 fw_priv->buf = NULL;
564}561}
565 562
566static LIST_HEAD(pending_fw_head);563static LIST_HEAD(pending_fw_head);
@@ -713,7 +710,7 @@ static ssize_t firmware_loading_store(struct device *dev, · 146 unmodified lines
713 710
714 mutex_lock(&fw_lock);711 mutex_lock(&fw_lock);
715 fw_buf = fw_priv->buf;712 fw_buf = fw_priv->buf;
716 if (!fw_buf)713 if (fw_state_is_aborted(&fw_buf->fw_st))
717 goto out;714 goto out;
718 715
719 switch (loading) {716 switch (loading) {
drivers/base/memory.c+6−6
@@ -389,33 +389,33 @@ static ssize_t show_valid_zones(struct device *dev, · 388 unmodified lines
389{389{
390 struct memory_block *mem = to_memory_block(dev);390 struct memory_block *mem = to_memory_block(dev);
391 unsigned long start_pfn, end_pfn;391 unsigned long start_pfn, end_pfn;
392 unsigned long valid_start, valid_end, valid_pages;
392 unsigned long nr_pages = PAGES_PER_SECTION * sections_per_block;393 unsigned long nr_pages = PAGES_PER_SECTION * sections_per_block;
393 struct page *first_page;
394 struct zone *zone;394 struct zone *zone;
395 int zone_shift = 0;395 int zone_shift = 0;
396 396
397 start_pfn = section_nr_to_pfn(mem->start_section_nr);397 start_pfn = section_nr_to_pfn(mem->start_section_nr);
398 end_pfn = start_pfn + nr_pages;398 end_pfn = start_pfn + nr_pages;
399 first_page = pfn_to_page(start_pfn);
400 399
401 /* The block contains more than one zone can not be offlined. */400 /* The block contains more than one zone can not be offlined. */
402 if (!test_pages_in_a_zone(start_pfn, end_pfn))401 if (!test_pages_in_a_zone(start_pfn, end_pfn, &valid_start, &valid_end))
403 return sprintf(buf, "none\n");402 return sprintf(buf, "none\n");
404 403
405 zone = page_zone(first_page);404 zone = page_zone(pfn_to_page(valid_start));
405 valid_pages = valid_end - valid_start;
406 406
407 /* MMOP_ONLINE_KEEP */407 /* MMOP_ONLINE_KEEP */
408 sprintf(buf, "%s", zone->name);408 sprintf(buf, "%s", zone->name);
409 409
410 /* MMOP_ONLINE_KERNEL */410 /* MMOP_ONLINE_KERNEL */
411 zone_can_shift(start_pfn, nr_pages, ZONE_NORMAL, &zone_shift);411 zone_can_shift(valid_start, valid_pages, ZONE_NORMAL, &zone_shift);
412 if (zone_shift) {412 if (zone_shift) {
413 strcat(buf, " ");413 strcat(buf, " ");
414 strcat(buf, (zone + zone_shift)->name);414 strcat(buf, (zone + zone_shift)->name);
415 }415 }
416 416
417 /* MMOP_ONLINE_MOVABLE */417 /* MMOP_ONLINE_MOVABLE */
418 zone_can_shift(start_pfn, nr_pages, ZONE_MOVABLE, &zone_shift);418 zone_can_shift(valid_start, valid_pages, ZONE_MOVABLE, &zone_shift);
419 if (zone_shift) {419 if (zone_shift) {
420 strcat(buf, " ");420 strcat(buf, " ");
421 strcat(buf, (zone + zone_shift)->name);421 strcat(buf, (zone + zone_shift)->name);
drivers/bcma/bcma_private.h+3−0
@@ -45,6 +45,9 @@ int bcma_sprom_get(struct bcma_bus *bus); · 44 unmodified lines
45void bcma_core_chipcommon_early_init(struct bcma_drv_cc *cc);45void bcma_core_chipcommon_early_init(struct bcma_drv_cc *cc);
46void bcma_core_chipcommon_init(struct bcma_drv_cc *cc);46void bcma_core_chipcommon_init(struct bcma_drv_cc *cc);
47void bcma_chipco_bcm4331_ext_pa_lines_ctl(struct bcma_drv_cc *cc, bool enable);47void bcma_chipco_bcm4331_ext_pa_lines_ctl(struct bcma_drv_cc *cc, bool enable);
48#ifdef CONFIG_BCMA_DRIVER_MIPS
49void bcma_chipco_serial_init(struct bcma_drv_cc *cc);
50#endif /* CONFIG_BCMA_DRIVER_MIPS */
48 51
49/* driver_chipcommon_b.c */52/* driver_chipcommon_b.c */
50int bcma_core_chipcommon_b_init(struct bcma_drv_cc_b *ccb);53int bcma_core_chipcommon_b_init(struct bcma_drv_cc_b *ccb);
drivers/bcma/driver_chipcommon.c+3−8
@@ -15,8 +15,6 @@ · 14 unmodified lines
15#include <linux/platform_device.h>15#include <linux/platform_device.h>
16#include <linux/bcma/bcma.h>16#include <linux/bcma/bcma.h>
17 17
18static void bcma_chipco_serial_init(struct bcma_drv_cc *cc);
19
20static inline u32 bcma_cc_write32_masked(struct bcma_drv_cc *cc, u16 offset,18static inline u32 bcma_cc_write32_masked(struct bcma_drv_cc *cc, u16 offset,
21 u32 mask, u32 value)19 u32 mask, u32 value)
22{20{
@@ -186,9 +184,6 @@ void bcma_core_chipcommon_early_init(struct bcma_drv_cc *cc) · 163 unmodified lines
186 if (cc->capabilities & BCMA_CC_CAP_PMU)184 if (cc->capabilities & BCMA_CC_CAP_PMU)
187 bcma_pmu_early_init(cc);185 bcma_pmu_early_init(cc);
188 186
189 if (IS_BUILTIN(CONFIG_BCM47XX) && bus->hosttype == BCMA_HOSTTYPE_SOC)
190 bcma_chipco_serial_init(cc);
191
192 if (bus->hosttype == BCMA_HOSTTYPE_SOC)187 if (bus->hosttype == BCMA_HOSTTYPE_SOC)
193 bcma_core_chipcommon_flash_detect(cc);188 bcma_core_chipcommon_flash_detect(cc);
194 189
@@ -378,9 +373,9 @@ u32 bcma_chipco_gpio_pulldown(struct bcma_drv_cc *cc, u32 mask, u32 value) · 183 unmodified lines
378 return res;373 return res;
379}374}
380 375
381static void bcma_chipco_serial_init(struct bcma_drv_cc *cc)376#ifdef CONFIG_BCMA_DRIVER_MIPS
377void bcma_chipco_serial_init(struct bcma_drv_cc *cc)
382{378{
383#if IS_BUILTIN(CONFIG_BCM47XX)
384 unsigned int irq;379 unsigned int irq;
385 u32 baud_base;380 u32 baud_base;
386 u32 i;381 u32 i;
@@ -422,5 +417,5 @@ static void bcma_chipco_serial_init(struct bcma_drv_cc *cc) · 35 unmodified lines
422 ports[i].baud_base = baud_base;417 ports[i].baud_base = baud_base;
423 ports[i].reg_shift = 0;418 ports[i].reg_shift = 0;
424 }419 }
425#endif /* CONFIG_BCM47XX */
426}420}
421#endif /* CONFIG_BCMA_DRIVER_MIPS */
drivers/bcma/driver_mips.c+3−0
@@ -278,9 +278,12 @@ static void bcma_core_mips_nvram_init(struct bcma_drv_mips *mcore) · 277 unmodified lines
278 278
279void bcma_core_mips_early_init(struct bcma_drv_mips *mcore)279void bcma_core_mips_early_init(struct bcma_drv_mips *mcore)
280{280{
281 struct bcma_bus *bus = mcore->core->bus;
282
281 if (mcore->early_setup_done)283 if (mcore->early_setup_done)
282 return;284 return;
283 285
286 bcma_chipco_serial_init(&bus->drv_cc);
284 bcma_core_mips_nvram_init(mcore);287 bcma_core_mips_nvram_init(mcore);
285 288
286 mcore->early_setup_done = true;289 mcore->early_setup_done = true;
drivers/dma/cppi41.c+46−23
@@ -153,6 +153,8 @@ struct cppi41_dd { · 152 unmodified lines
153 153
154 /* context for suspend/resume */154 /* context for suspend/resume */
155 unsigned int dma_tdfdq;155 unsigned int dma_tdfdq;
156
157 bool is_suspended;
156};158};
157 159
158#define FIST_COMPLETION_QUEUE 93160#define FIST_COMPLETION_QUEUE 93
@@ -257,6 +259,10 @@ static struct cppi41_channel *desc_to_chan(struct cppi41_dd *cdd, u32 desc) · 98 unmodified lines
257 BUG_ON(desc_num >= ALLOC_DECS_NUM);259 BUG_ON(desc_num >= ALLOC_DECS_NUM);
258 c = cdd->chan_busy[desc_num];260 c = cdd->chan_busy[desc_num];
259 cdd->chan_busy[desc_num] = NULL;261 cdd->chan_busy[desc_num] = NULL;
262
263 /* Usecount for chan_busy[], paired with push_desc_queue() */
264 pm_runtime_put(cdd->ddev.dev);
265
260 return c;266 return c;
261}267}
262 268
@@ -317,12 +323,12 @@ static irqreturn_t cppi41_irq(int irq, void *data) · 54 unmodified lines
317 323
318 while (val) {324 while (val) {
319 u32 desc, len;325 u32 desc, len;
320 int error;
321 326
322 error = pm_runtime_get(cdd->ddev.dev);327 /*
323 if (error < 0)328 * This should never trigger, see the comments in
324 dev_err(cdd->ddev.dev, "%s pm runtime get: %i\n",329 * push_desc_queue()
325 __func__, error);330 */
331 WARN_ON(cdd->is_suspended);
326 332
327 q_num = __fls(val);333 q_num = __fls(val);
328 val &= ~(1 << q_num);334 val &= ~(1 << q_num);
@@ -343,9 +349,6 @@ static irqreturn_t cppi41_irq(int irq, void *data) · 14 unmodified lines
343 c->residue = pd_trans_len(c->desc->pd6) - len;349 c->residue = pd_trans_len(c->desc->pd6) - len;
344 dma_cookie_complete(&c->txd);350 dma_cookie_complete(&c->txd);
345 dmaengine_desc_get_callback_invoke(&c->txd, NULL);351 dmaengine_desc_get_callback_invoke(&c->txd, NULL);
346
347 pm_runtime_mark_last_busy(cdd->ddev.dev);
348 pm_runtime_put_autosuspend(cdd->ddev.dev);
349 }352 }
350 }353 }
351 return IRQ_HANDLED;354 return IRQ_HANDLED;
@@ -447,6 +450,15 @@ static void push_desc_queue(struct cppi41_channel *c) · 95 unmodified lines
447 */450 */
448 __iowmb();451 __iowmb();
449 452
453 /*
454 * DMA transfers can take at least 200ms to complete with USB mass
455 * storage connected. To prevent autosuspend timeouts, we must use
456 * pm_runtime_get/put() when chan_busy[] is modified. This will get
457 * cleared in desc_to_chan() or cppi41_stop_chan() depending on the
458 * outcome of the transfer.
459 */
460 pm_runtime_get(cdd->ddev.dev);
461
450 desc_phys = lower_32_bits(c->desc_phys);462 desc_phys = lower_32_bits(c->desc_phys);
451 desc_num = (desc_phys - cdd->descs_phys) / sizeof(struct cppi41_desc);463 desc_num = (desc_phys - cdd->descs_phys) / sizeof(struct cppi41_desc);
452 WARN_ON(cdd->chan_busy[desc_num]);464 WARN_ON(cdd->chan_busy[desc_num]);
@@ -457,20 +469,26 @@ static void push_desc_queue(struct cppi41_channel *c) · 4 unmodified lines
457 cppi_writel(reg, cdd->qmgr_mem + QMGR_QUEUE_D(c->q_num));469 cppi_writel(reg, cdd->qmgr_mem + QMGR_QUEUE_D(c->q_num));
458}470}
459 471
460static void pending_desc(struct cppi41_channel *c)472/*
473 * Caller must hold cdd->lock to prevent push_desc_queue()
474 * getting called out of order. We have both cppi41_dma_issue_pending()
475 * and cppi41_runtime_resume() call this function.
476 */
477static void cppi41_run_queue(struct cppi41_dd *cdd)
461{478{
462 struct cppi41_dd *cdd = c->cdd;479 struct cppi41_channel *c, *_c;
463 unsigned long flags;
464 480
465 spin_lock_irqsave(&cdd->lock, flags);481 list_for_each_entry_safe(c, _c, &cdd->pending, node) {
466 list_add_tail(&c->node, &cdd->pending);482 push_desc_queue(c);
467 spin_unlock_irqrestore(&cdd->lock, flags);483 list_del(&c->node);
484 }
468}485}
469 486
470static void cppi41_dma_issue_pending(struct dma_chan *chan)487static void cppi41_dma_issue_pending(struct dma_chan *chan)
471{488{
472 struct cppi41_channel *c = to_cpp41_chan(chan);489 struct cppi41_channel *c = to_cpp41_chan(chan);
473 struct cppi41_dd *cdd = c->cdd;490 struct cppi41_dd *cdd = c->cdd;
491 unsigned long flags;
474 int error;492 int error;
475 493
476 error = pm_runtime_get(cdd->ddev.dev);494 error = pm_runtime_get(cdd->ddev.dev);
@@ -482,10 +500,11 @@ static void cppi41_dma_issue_pending(struct dma_chan *chan) · 5 unmodified lines
482 return;500 return;
483 }501 }
484 502
485 if (likely(pm_runtime_active(cdd->ddev.dev)))503 spin_lock_irqsave(&cdd->lock, flags);
486 push_desc_queue(c);504 list_add_tail(&c->node, &cdd->pending);
487 else505 if (!cdd->is_suspended)
488 pending_desc(c);506 cppi41_run_queue(cdd);
507 spin_unlock_irqrestore(&cdd->lock, flags);
489 508
490 pm_runtime_mark_last_busy(cdd->ddev.dev);509 pm_runtime_mark_last_busy(cdd->ddev.dev);
491 pm_runtime_put_autosuspend(cdd->ddev.dev);510 pm_runtime_put_autosuspend(cdd->ddev.dev);
@@ -705,6 +724,9 @@ static int cppi41_stop_chan(struct dma_chan *chan) · 213 unmodified lines
705 WARN_ON(!cdd->chan_busy[desc_num]);724 WARN_ON(!cdd->chan_busy[desc_num]);
706 cdd->chan_busy[desc_num] = NULL;725 cdd->chan_busy[desc_num] = NULL;
707 726
727 /* Usecount for chan_busy[], paired with push_desc_queue() */
728 pm_runtime_put(cdd->ddev.dev);
729
708 return 0;730 return 0;
709}731}
710 732
@@ -1150,8 +1172,12 @@ static int __maybe_unused cppi41_resume(struct device *dev) · 439 unmodified lines
1150static int __maybe_unused cppi41_runtime_suspend(struct device *dev)1172static int __maybe_unused cppi41_runtime_suspend(struct device *dev)
1151{1173{
1152 struct cppi41_dd *cdd = dev_get_drvdata(dev);1174 struct cppi41_dd *cdd = dev_get_drvdata(dev);
1175 unsigned long flags;
1153 1176
1177 spin_lock_irqsave(&cdd->lock, flags);
1178 cdd->is_suspended = true;
1154 WARN_ON(!list_empty(&cdd->pending));1179 WARN_ON(!list_empty(&cdd->pending));
1180 spin_unlock_irqrestore(&cdd->lock, flags);
1155 1181
1156 return 0;1182 return 0;
1157}1183}
@@ -1159,14 +1185,11 @@ static int __maybe_unused cppi41_runtime_suspend(struct device *dev) · 1 unmodified line
1159static int __maybe_unused cppi41_runtime_resume(struct device *dev)1185static int __maybe_unused cppi41_runtime_resume(struct device *dev)
1160{1186{
1161 struct cppi41_dd *cdd = dev_get_drvdata(dev);1187 struct cppi41_dd *cdd = dev_get_drvdata(dev);
1162 struct cppi41_channel *c, *_c;
1163 unsigned long flags;1188 unsigned long flags;
1164 1189
1165 spin_lock_irqsave(&cdd->lock, flags);1190 spin_lock_irqsave(&cdd->lock, flags);
1166 list_for_each_entry_safe(c, _c, &cdd->pending, node) {1191 cdd->is_suspended = false;
1167 push_desc_queue(c);1192 cppi41_run_queue(cdd);
1168 list_del(&c->node);
1169 }
1170 spin_unlock_irqrestore(&cdd->lock, flags);1193 spin_unlock_irqrestore(&cdd->lock, flags);
1171 1194
1172 return 0;1195 return 0;
drivers/dma/pl330.c+6−13
@@ -1699,7 +1699,6 @@ static bool _chan_ns(const struct pl330_dmac *pl330, int i) · 1698 unmodified lines
1699static struct pl330_thread *pl330_request_channel(struct pl330_dmac *pl330)1699static struct pl330_thread *pl330_request_channel(struct pl330_dmac *pl330)
1700{1700{
1701 struct pl330_thread *thrd = NULL;1701 struct pl330_thread *thrd = NULL;
1702 unsigned long flags;
1703 int chans, i;1702 int chans, i;
1704 1703
1705 if (pl330->state == DYING)1704 if (pl330->state == DYING)
@@ -1707,8 +1706,6 @@ static struct pl330_thread *pl330_request_channel(struct pl330_dmac *pl330) · 1 unmodified line
1707 1706
1708 chans = pl330->pcfg.num_chan;1707 chans = pl330->pcfg.num_chan;
1709 1708
1710 spin_lock_irqsave(&pl330->lock, flags);
1711
1712 for (i = 0; i < chans; i++) {1709 for (i = 0; i < chans; i++) {
1713 thrd = &pl330->channels[i];1710 thrd = &pl330->channels[i];
1714 if ((thrd->free) && (!_manager_ns(thrd) ||1711 if ((thrd->free) && (!_manager_ns(thrd) ||
@@ -1726,8 +1723,6 @@ static struct pl330_thread *pl330_request_channel(struct pl330_dmac *pl330) · 11 unmodified lines
1726 thrd = NULL;1723 thrd = NULL;
1727 }1724 }
1728 1725
1729 spin_unlock_irqrestore(&pl330->lock, flags);
1730
1731 return thrd;1726 return thrd;
1732}1727}
1733 1728
@@ -1745,7 +1740,6 @@ static inline void _free_event(struct pl330_thread *thrd, int ev) · 11 unmodified lines
1745static void pl330_release_channel(struct pl330_thread *thrd)1740static void pl330_release_channel(struct pl330_thread *thrd)
1746{1741{
1747 struct pl330_dmac *pl330;1742 struct pl330_dmac *pl330;
1748 unsigned long flags;
1749 1743
1750 if (!thrd || thrd->free)1744 if (!thrd || thrd->free)
1751 return;1745 return;
@@ -1757,10 +1751,8 @@ static void pl330_release_channel(struct pl330_thread *thrd) · 5 unmodified lines
1757 1751
1758 pl330 = thrd->dmac;1752 pl330 = thrd->dmac;
1759 1753
1760 spin_lock_irqsave(&pl330->lock, flags);
1761 _free_event(thrd, thrd->ev);1754 _free_event(thrd, thrd->ev);
1762 thrd->free = true;1755 thrd->free = true;
1763 spin_unlock_irqrestore(&pl330->lock, flags);
1764}1756}
1765 1757
1766/* Initialize the structure for PL330 configuration, that can be used1758/* Initialize the structure for PL330 configuration, that can be used
@@ -2122,20 +2114,20 @@ static int pl330_alloc_chan_resources(struct dma_chan *chan) · 355 unmodified lines
2122 struct pl330_dmac *pl330 = pch->dmac;2114 struct pl330_dmac *pl330 = pch->dmac;
2123 unsigned long flags;2115 unsigned long flags;
2124 2116
2125 spin_lock_irqsave(&pch->lock, flags);2117 spin_lock_irqsave(&pl330->lock, flags);
2126 2118
2127 dma_cookie_init(chan);2119 dma_cookie_init(chan);
2128 pch->cyclic = false;2120 pch->cyclic = false;
2129 2121
2130 pch->thread = pl330_request_channel(pl330);2122 pch->thread = pl330_request_channel(pl330);
2131 if (!pch->thread) {2123 if (!pch->thread) {
2132 spin_unlock_irqrestore(&pch->lock, flags);2124 spin_unlock_irqrestore(&pl330->lock, flags);
2133 return -ENOMEM;2125 return -ENOMEM;
2134 }2126 }
2135 2127
2136 tasklet_init(&pch->task, pl330_tasklet, (unsigned long) pch);2128 tasklet_init(&pch->task, pl330_tasklet, (unsigned long) pch);
2137 2129
2138 spin_unlock_irqrestore(&pch->lock, flags);2130 spin_unlock_irqrestore(&pl330->lock, flags);
2139 2131
2140 return 1;2132 return 1;
2141}2133}
@@ -2238,12 +2230,13 @@ static int pl330_pause(struct dma_chan *chan) · 96 unmodified lines
2238static void pl330_free_chan_resources(struct dma_chan *chan)2230static void pl330_free_chan_resources(struct dma_chan *chan)
2239{2231{
2240 struct dma_pl330_chan *pch = to_pchan(chan);2232 struct dma_pl330_chan *pch = to_pchan(chan);
2233 struct pl330_dmac *pl330 = pch->dmac;
2241 unsigned long flags;2234 unsigned long flags;
2242 2235
2243 tasklet_kill(&pch->task);2236 tasklet_kill(&pch->task);
2244 2237
2245 pm_runtime_get_sync(pch->dmac->ddma.dev);2238 pm_runtime_get_sync(pch->dmac->ddma.dev);
2246 spin_lock_irqsave(&pch->lock, flags);2239 spin_lock_irqsave(&pl330->lock, flags);
2247 2240
2248 pl330_release_channel(pch->thread);2241 pl330_release_channel(pch->thread);
2249 pch->thread = NULL;2242 pch->thread = NULL;
@@ -2251,7 +2244,7 @@ static void pl330_free_chan_resources(struct dma_chan *chan) · 1 unmodified line
2251 if (pch->cyclic)2244 if (pch->cyclic)
2252 list_splice_tail_init(&pch->work_list, &pch->dmac->desc_pool);2245 list_splice_tail_init(&pch->work_list, &pch->dmac->desc_pool);
2253 2246
2254 spin_unlock_irqrestore(&pch->lock, flags);2247 spin_unlock_irqrestore(&pl330->lock, flags);
2255 pm_runtime_mark_last_busy(pch->dmac->ddma.dev);2248 pm_runtime_mark_last_busy(pch->dmac->ddma.dev);
2256 pm_runtime_put_autosuspend(pch->dmac->ddma.dev);2249 pm_runtime_put_autosuspend(pch->dmac->ddma.dev);
2257}2250}
drivers/firmware/efi/libstub/fdt.c+3−11
@@ -187,6 +187,7 @@ static efi_status_t update_fdt_memmap(void *fdt, struct efi_boot_memmap *map) · 186 unmodified lines
187struct exit_boot_struct {187struct exit_boot_struct {
188 efi_memory_desc_t *runtime_map;188 efi_memory_desc_t *runtime_map;
189 int *runtime_entry_count;189 int *runtime_entry_count;
190 void *new_fdt_addr;
190};191};
191 192
192static efi_status_t exit_boot_func(efi_system_table_t *sys_table_arg,193static efi_status_t exit_boot_func(efi_system_table_t *sys_table_arg,
@@ -202,7 +203,7 @@ static efi_status_t exit_boot_func(efi_system_table_t *sys_table_arg, · 9 unmodified lines
202 efi_get_virtmap(*map->map, *map->map_size, *map->desc_size,203 efi_get_virtmap(*map->map, *map->map_size, *map->desc_size,
203 p->runtime_map, p->runtime_entry_count);204 p->runtime_map, p->runtime_entry_count);
204 205
205 return EFI_SUCCESS;206 return update_fdt_memmap(p->new_fdt_addr, map);
206}207}
207 208
208/*209/*
@@ -300,22 +301,13 @@ efi_status_t allocate_new_fdt_and_exit_boot(efi_system_table_t *sys_table, · 91 unmodified lines
300 301
301 priv.runtime_map = runtime_map;302 priv.runtime_map = runtime_map;
302 priv.runtime_entry_count = &runtime_entry_count;303 priv.runtime_entry_count = &runtime_entry_count;
304 priv.new_fdt_addr = (void *)*new_fdt_addr;
303 status = efi_exit_boot_services(sys_table, handle, &map, &priv,305 status = efi_exit_boot_services(sys_table, handle, &map, &priv,
304 exit_boot_func);306 exit_boot_func);
305 307
306 if (status == EFI_SUCCESS) {308 if (status == EFI_SUCCESS) {
307 efi_set_virtual_address_map_t *svam;309 efi_set_virtual_address_map_t *svam;
308 310
309 status = update_fdt_memmap((void *)*new_fdt_addr, &map);
310 if (status != EFI_SUCCESS) {
311 /*
312 * The kernel won't get far without the memory map, but
313 * may still be able to print something meaningful so
314 * return success here.
315 */
316 return EFI_SUCCESS;
317 }
318
319 /* Install the new virtual address map */311 /* Install the new virtual address map */
320 svam = sys_table->runtime->set_virtual_address_map;312 svam = sys_table->runtime->set_virtual_address_map;
321 status = svam(runtime_entry_count * desc_size, desc_size,313 status = svam(runtime_entry_count * desc_size, desc_size,
drivers/gpu/drm/amd/amdgpu/gmc_v6_0.c+3−1
@@ -254,6 +254,9 @@ static void gmc_v6_0_mc_program(struct amdgpu_device *adev) · 253 unmodified lines
254 }254 }
255 WREG32(mmHDP_REG_COHERENCY_FLUSH_CNTL, 0);255 WREG32(mmHDP_REG_COHERENCY_FLUSH_CNTL, 0);
256 256
257 if (adev->mode_info.num_crtc)
258 amdgpu_display_set_vga_render_state(adev, false);
259
257 gmc_v6_0_mc_stop(adev, &save);260 gmc_v6_0_mc_stop(adev, &save);
258 261
259 if (gmc_v6_0_wait_for_idle((void *)adev)) {262 if (gmc_v6_0_wait_for_idle((void *)adev)) {
@@ -283,7 +286,6 @@ static void gmc_v6_0_mc_program(struct amdgpu_device *adev) · 23 unmodified lines
283 dev_warn(adev->dev, "Wait for MC idle timedout !\n");286 dev_warn(adev->dev, "Wait for MC idle timedout !\n");
284 }287 }
285 gmc_v6_0_mc_resume(adev, &save);288 gmc_v6_0_mc_resume(adev, &save);
286 amdgpu_display_set_vga_render_state(adev, false);
287}289}
288 290
289static int gmc_v6_0_mc_init(struct amdgpu_device *adev)291static int gmc_v6_0_mc_init(struct amdgpu_device *adev)
drivers/gpu/drm/drm_atomic.c+8−5
@@ -2032,13 +2032,16 @@ static void complete_crtc_signaling(struct drm_device *dev, · 2031 unmodified lines
2032 }2032 }
2033 2033
2034 for_each_crtc_in_state(state, crtc, crtc_state, i) {2034 for_each_crtc_in_state(state, crtc, crtc_state, i) {
2035 struct drm_pending_vblank_event *event = crtc_state->event;
2035 /*2036 /*
2036 * TEST_ONLY and PAGE_FLIP_EVENT are mutually2037 * Free the allocated event. drm_atomic_helper_setup_commit
2037 * exclusive, if they weren't, this code should be2038 * can allocate an event too, so only free it if it's ours
2038 * called on success for TEST_ONLY too.2039 * to prevent a double free in drm_atomic_state_clear.
2039 */2040 */
2040 if (crtc_state->event)2041 if (event && (event->base.fence || event->base.file_priv)) {
2041 drm_event_cancel_free(dev, &crtc_state->event->base);2042 drm_event_cancel_free(dev, &event->base);
2043 crtc_state->event = NULL;
2044 }
2042 }2045 }
2043 2046
2044 if (!fence_state)2047 if (!fence_state)
drivers/gpu/drm/drm_atomic_helper.c+0−9
@@ -1666,9 +1666,6 @@ int drm_atomic_helper_prepare_planes(struct drm_device *dev, · 1665 unmodified lines
1666 1666
1667 funcs = plane->helper_private;1667 funcs = plane->helper_private;
1668 1668
1669 if (!drm_atomic_helper_framebuffer_changed(dev, state, plane_state->crtc))
1670 continue;
1671
1672 if (funcs->prepare_fb) {1669 if (funcs->prepare_fb) {
1673 ret = funcs->prepare_fb(plane, plane_state);1670 ret = funcs->prepare_fb(plane, plane_state);
1674 if (ret)1671 if (ret)
@@ -1685,9 +1682,6 @@ fail: · 10 unmodified lines
1685 if (j >= i)1682 if (j >= i)
1686 continue;1683 continue;
1687 1684
1688 if (!drm_atomic_helper_framebuffer_changed(dev, state, plane_state->crtc))
1689 continue;
1690
1691 funcs = plane->helper_private;1685 funcs = plane->helper_private;
1692 1686
1693 if (funcs->cleanup_fb)1687 if (funcs->cleanup_fb)
@@ -1954,9 +1948,6 @@ void drm_atomic_helper_cleanup_planes(struct drm_device *dev, · 260 unmodified lines
1954 for_each_plane_in_state(old_state, plane, plane_state, i) {1948 for_each_plane_in_state(old_state, plane, plane_state, i) {
1955 const struct drm_plane_helper_funcs *funcs;1949 const struct drm_plane_helper_funcs *funcs;
1956 1950
1957 if (!drm_atomic_helper_framebuffer_changed(dev, old_state, plane_state->crtc))
1958 continue;
1959
1960 funcs = plane->helper_private;1951 funcs = plane->helper_private;
1961 1952
1962 if (funcs->cleanup_fb)1953 if (funcs->cleanup_fb)
drivers/gpu/drm/drm_connector.c+18−5
@@ -225,6 +225,7 @@ int drm_connector_init(struct drm_device *dev, · 224 unmodified lines
225 225
226 INIT_LIST_HEAD(&connector->probed_modes);226 INIT_LIST_HEAD(&connector->probed_modes);
227 INIT_LIST_HEAD(&connector->modes);227 INIT_LIST_HEAD(&connector->modes);
228 mutex_init(&connector->mutex);
228 connector->edid_blob_ptr = NULL;229 connector->edid_blob_ptr = NULL;
229 connector->status = connector_status_unknown;230 connector->status = connector_status_unknown;
230 231
@@ -359,6 +360,8 @@ void drm_connector_cleanup(struct drm_connector *connector) · 128 unmodified lines
359 connector->funcs->atomic_destroy_state(connector,360 connector->funcs->atomic_destroy_state(connector,
360 connector->state);361 connector->state);
361 362
363 mutex_destroy(&connector->mutex);
364
362 memset(connector, 0, sizeof(*connector));365 memset(connector, 0, sizeof(*connector));
363}366}
364EXPORT_SYMBOL(drm_connector_cleanup);367EXPORT_SYMBOL(drm_connector_cleanup);
@@ -374,14 +377,18 @@ EXPORT_SYMBOL(drm_connector_cleanup); · 9 unmodified lines
374 */377 */
375int drm_connector_register(struct drm_connector *connector)378int drm_connector_register(struct drm_connector *connector)
376{379{
377 int ret;380 int ret = 0;
378 381
379 if (connector->registered)382 if (!connector->dev->registered)
380 return 0;383 return 0;
381 384
385 mutex_lock(&connector->mutex);
386 if (connector->registered)
387 goto unlock;
388
382 ret = drm_sysfs_connector_add(connector);389 ret = drm_sysfs_connector_add(connector);
383 if (ret)390 if (ret)
384 return ret;391 goto unlock;
385 392
386 ret = drm_debugfs_connector_add(connector);393 ret = drm_debugfs_connector_add(connector);
387 if (ret) {394 if (ret) {
@@ -397,12 +404,14 @@ int drm_connector_register(struct drm_connector *connector) · 9 unmodified lines
397 drm_mode_object_register(connector->dev, &connector->base);404 drm_mode_object_register(connector->dev, &connector->base);
398 405
399 connector->registered = true;406 connector->registered = true;
400 return 0;407 goto unlock;
401 408
402err_debugfs:409err_debugfs:
403 drm_debugfs_connector_remove(connector);410 drm_debugfs_connector_remove(connector);
404err_sysfs:411err_sysfs:
405 drm_sysfs_connector_remove(connector);412 drm_sysfs_connector_remove(connector);
413unlock:
414 mutex_unlock(&connector->mutex);
406 return ret;415 return ret;
407}416}
408EXPORT_SYMBOL(drm_connector_register);417EXPORT_SYMBOL(drm_connector_register);
@@ -415,8 +424,11 @@ EXPORT_SYMBOL(drm_connector_register); · 6 unmodified lines
415 */424 */
416void drm_connector_unregister(struct drm_connector *connector)425void drm_connector_unregister(struct drm_connector *connector)
417{426{
418 if (!connector->registered)427 mutex_lock(&connector->mutex);
428 if (!connector->registered) {
429 mutex_unlock(&connector->mutex);
419 return;430 return;
431 }
420 432
421 if (connector->funcs->early_unregister)433 if (connector->funcs->early_unregister)
422 connector->funcs->early_unregister(connector);434 connector->funcs->early_unregister(connector);
@@ -425,6 +437,7 @@ void drm_connector_unregister(struct drm_connector *connector) · 2 unmodified lines
425 drm_debugfs_connector_remove(connector);437 drm_debugfs_connector_remove(connector);
426 438
427 connector->registered = false;439 connector->registered = false;
440 mutex_unlock(&connector->mutex);
428}441}
429EXPORT_SYMBOL(drm_connector_unregister);442EXPORT_SYMBOL(drm_connector_unregister);
430 443
drivers/gpu/drm/drm_drv.c+4−0
@@ -745,6 +745,8 @@ int drm_dev_register(struct drm_device *dev, unsigned long flags) · 744 unmodified lines
745 if (ret)745 if (ret)
746 goto err_minors;746 goto err_minors;
747 747
748 dev->registered = true;
749
748 if (dev->driver->load) {750 if (dev->driver->load) {
749 ret = dev->driver->load(dev, flags);751 ret = dev->driver->load(dev, flags);
750 if (ret)752 if (ret)
@@ -785,6 +787,8 @@ void drm_dev_unregister(struct drm_device *dev) · 34 unmodified lines
785 787
786 drm_lastclose(dev);788 drm_lastclose(dev);
787 789
790 dev->registered = false;
791
788 if (drm_core_check_feature(dev, DRIVER_MODESET))792 if (drm_core_check_feature(dev, DRIVER_MODESET))
789 drm_modeset_unregister_all(dev);793 drm_modeset_unregister_all(dev);
790 794
drivers/gpu/drm/i915/i915_drv.h+4−12
@@ -1012,6 +1012,8 @@ struct intel_fbc { · 1011 unmodified lines
1012 struct work_struct underrun_work;1012 struct work_struct underrun_work;
1013 1013
1014 struct intel_fbc_state_cache {1014 struct intel_fbc_state_cache {
1015 struct i915_vma *vma;
1016
1015 struct {1017 struct {
1016 unsigned int mode_flags;1018 unsigned int mode_flags;
1017 uint32_t hsw_bdw_pixel_rate;1019 uint32_t hsw_bdw_pixel_rate;
@@ -1025,15 +1027,14 @@ struct intel_fbc { · 7 unmodified lines
1025 } plane;1027 } plane;
1026 1028
1027 struct {1029 struct {
1028 u64 ilk_ggtt_offset;
1029 uint32_t pixel_format;1030 uint32_t pixel_format;
1030 unsigned int stride;1031 unsigned int stride;
1031 int fence_reg;
1032 unsigned int tiling_mode;
1033 } fb;1032 } fb;
1034 } state_cache;1033 } state_cache;
1035 1034
1036 struct intel_fbc_reg_params {1035 struct intel_fbc_reg_params {
1036 struct i915_vma *vma;
1037
1037 struct {1038 struct {
1038 enum pipe pipe;1039 enum pipe pipe;
1039 enum plane plane;1040 enum plane plane;
@@ -1041,10 +1042,8 @@ struct intel_fbc { · 1 unmodified line
1041 } crtc;1042 } crtc;
1042 1043
1043 struct {1044 struct {
1044 u64 ggtt_offset;
1045 uint32_t pixel_format;1045 uint32_t pixel_format;
1046 unsigned int stride;1046 unsigned int stride;
1047 int fence_reg;
1048 } fb;1047 } fb;
1049 1048
1050 int cfb_size;1049 int cfb_size;
@@ -3168,13 +3167,6 @@ i915_gem_object_to_ggtt(struct drm_i915_gem_object *obj, · 2117 unmodified lines
3168 return i915_gem_obj_to_vma(obj, &to_i915(obj->base.dev)->ggtt.base, view);3167 return i915_gem_obj_to_vma(obj, &to_i915(obj->base.dev)->ggtt.base, view);
3169}3168}
3170 3169
3171static inline unsigned long
3172i915_gem_object_ggtt_offset(struct drm_i915_gem_object *o,
3173 const struct i915_ggtt_view *view)
3174{
3175 return i915_ggtt_offset(i915_gem_object_to_ggtt(o, view));
3176}
3177
3178/* i915_gem_fence_reg.c */3170/* i915_gem_fence_reg.c */
3179int __must_check i915_vma_get_fence(struct i915_vma *vma);3171int __must_check i915_vma_get_fence(struct i915_vma *vma);
3180int __must_check i915_vma_put_fence(struct i915_vma *vma);3172int __must_check i915_vma_put_fence(struct i915_vma *vma);
drivers/gpu/drm/i915/intel_atomic_plane.c+20−0
@@ -85,6 +85,8 @@ intel_plane_duplicate_state(struct drm_plane *plane) · 84 unmodified lines
85 85
86 __drm_atomic_helper_plane_duplicate_state(plane, state);86 __drm_atomic_helper_plane_duplicate_state(plane, state);
87 87
88 intel_state->vma = NULL;
89
88 return state;90 return state;
89}91}
90 92
@@ -100,6 +102,24 @@ void · 9 unmodified lines
100intel_plane_destroy_state(struct drm_plane *plane,102intel_plane_destroy_state(struct drm_plane *plane,
101 struct drm_plane_state *state)103 struct drm_plane_state *state)
102{104{
105 struct i915_vma *vma;
106
107 vma = fetch_and_zero(&to_intel_plane_state(state)->vma);
108
109 /*
110 * FIXME: Normally intel_cleanup_plane_fb handles destruction of vma.
111 * We currently don't clear all planes during driver unload, so we have
112 * to be able to unpin vma here for now.
113 *
114 * Normally this can only happen during unload when kmscon is disabled
115 * and userspace doesn't attempt to set a framebuffer at all.
116 */
117 if (vma) {
118 mutex_lock(&plane->dev->struct_mutex);
119 intel_unpin_fb_vma(vma);
120 mutex_unlock(&plane->dev->struct_mutex);
121 }
122
103 drm_atomic_helper_plane_destroy_state(plane, state);123 drm_atomic_helper_plane_destroy_state(plane, state);
104}124}
105 125
drivers/gpu/drm/i915/intel_display.c+42−83
@@ -2235,27 +2235,22 @@ intel_pin_and_fence_fb_obj(struct drm_framebuffer *fb, unsigned int rotation) · 2234 unmodified lines
2235 i915_vma_pin_fence(vma);2235 i915_vma_pin_fence(vma);
2236 }2236 }
2237 2237
2238 i915_vma_get(vma);
2238err:2239err:
2239 intel_runtime_pm_put(dev_priv);2240 intel_runtime_pm_put(dev_priv);
2240 return vma;2241 return vma;
2241}2242}
2242 2243
2243void intel_unpin_fb_obj(struct drm_framebuffer *fb, unsigned int rotation)2244void intel_unpin_fb_vma(struct i915_vma *vma)
2244{2245{
2245 struct drm_i915_gem_object *obj = intel_fb_obj(fb);2246 lockdep_assert_held(&vma->vm->dev->struct_mutex);
2246 struct i915_ggtt_view view;
2247 struct i915_vma *vma;
2248
2249 WARN_ON(!mutex_is_locked(&obj->base.dev->struct_mutex));
2250
2251 intel_fill_fb_ggtt_view(&view, fb, rotation);
2252 vma = i915_gem_object_to_ggtt(obj, &view);
2253 2247
2254 if (WARN_ON_ONCE(!vma))2248 if (WARN_ON_ONCE(!vma))
2255 return;2249 return;
2256 2250
2257 i915_vma_unpin_fence(vma);2251 i915_vma_unpin_fence(vma);
2258 i915_gem_object_unpin_from_display_plane(vma);2252 i915_gem_object_unpin_from_display_plane(vma);
2253 i915_vma_put(vma);
2259}2254}
2260 2255
2261static int intel_fb_pitch(const struct drm_framebuffer *fb, int plane,2256static int intel_fb_pitch(const struct drm_framebuffer *fb, int plane,
@@ -2750,7 +2745,6 @@ intel_find_initial_plane_obj(struct intel_crtc *intel_crtc, · 488 unmodified lines
2750 struct drm_device *dev = intel_crtc->base.dev;2745 struct drm_device *dev = intel_crtc->base.dev;
2751 struct drm_i915_private *dev_priv = to_i915(dev);2746 struct drm_i915_private *dev_priv = to_i915(dev);
2752 struct drm_crtc *c;2747 struct drm_crtc *c;
2753 struct intel_crtc *i;
2754 struct drm_i915_gem_object *obj;2748 struct drm_i915_gem_object *obj;
2755 struct drm_plane *primary = intel_crtc->base.primary;2749 struct drm_plane *primary = intel_crtc->base.primary;
2756 struct drm_plane_state *plane_state = primary->state;2750 struct drm_plane_state *plane_state = primary->state;
@@ -2775,20 +2769,20 @@ intel_find_initial_plane_obj(struct intel_crtc *intel_crtc, · 18 unmodified lines
2775 * an fb with another CRTC instead2769 * an fb with another CRTC instead
2776 */2770 */
2777 for_each_crtc(dev, c) {2771 for_each_crtc(dev, c) {
2778 i = to_intel_crtc(c);2772 struct intel_plane_state *state;
2779 2773
2780 if (c == &intel_crtc->base)2774 if (c == &intel_crtc->base)
2781 continue;2775 continue;
2782 2776
2783 if (!i->active)2777 if (!to_intel_crtc(c)->active)
2784 continue;2778 continue;
2785 2779
2786 fb = c->primary->fb;2780 state = to_intel_plane_state(c->primary->state);
2787 if (!fb)2781 if (!state->vma)
2788 continue;2782 continue;
2789 2783
2790 obj = intel_fb_obj(fb);2784 if (intel_plane_ggtt_offset(state) == plane_config->base) {
2791 if (i915_gem_object_ggtt_offset(obj, NULL) == plane_config->base) {2785 fb = c->primary->fb;
2792 drm_framebuffer_reference(fb);2786 drm_framebuffer_reference(fb);
2793 goto valid_fb;2787 goto valid_fb;
2794 }2788 }
@@ -2809,6 +2803,19 @@ intel_find_initial_plane_obj(struct intel_crtc *intel_crtc, · 14 unmodified lines
2809 return;2803 return;
2810 2804
2811valid_fb:2805valid_fb:
2806 mutex_lock(&dev->struct_mutex);
2807 intel_state->vma =
2808 intel_pin_and_fence_fb_obj(fb, primary->state->rotation);
2809 mutex_unlock(&dev->struct_mutex);
2810 if (IS_ERR(intel_state->vma)) {
2811 DRM_ERROR("failed to pin boot fb on pipe %d: %li\n",
2812 intel_crtc->pipe, PTR_ERR(intel_state->vma));
2813
2814 intel_state->vma = NULL;
2815 drm_framebuffer_unreference(fb);
2816 return;
2817 }
2818
2812 plane_state->src_x = 0;2819 plane_state->src_x = 0;
2813 plane_state->src_y = 0;2820 plane_state->src_y = 0;
2814 plane_state->src_w = fb->width << 16;2821 plane_state->src_w = fb->width << 16;
@@ -3104,13 +3111,13 @@ static void i9xx_update_primary_plane(struct drm_plane *primary, · 289 unmodified lines
3104 I915_WRITE(DSPSTRIDE(plane), fb->pitches[0]);3111 I915_WRITE(DSPSTRIDE(plane), fb->pitches[0]);
3105 if (INTEL_GEN(dev_priv) >= 4) {3112 if (INTEL_GEN(dev_priv) >= 4) {
3106 I915_WRITE(DSPSURF(plane),3113 I915_WRITE(DSPSURF(plane),
3107 intel_fb_gtt_offset(fb, rotation) +3114 intel_plane_ggtt_offset(plane_state) +
3108 intel_crtc->dspaddr_offset);3115 intel_crtc->dspaddr_offset);
3109 I915_WRITE(DSPTILEOFF(plane), (y << 16) | x);3116 I915_WRITE(DSPTILEOFF(plane), (y << 16) | x);
3110 I915_WRITE(DSPLINOFF(plane), linear_offset);3117 I915_WRITE(DSPLINOFF(plane), linear_offset);
3111 } else {3118 } else {
3112 I915_WRITE(DSPADDR(plane),3119 I915_WRITE(DSPADDR(plane),
3113 intel_fb_gtt_offset(fb, rotation) +3120 intel_plane_ggtt_offset(plane_state) +
3114 intel_crtc->dspaddr_offset);3121 intel_crtc->dspaddr_offset);
3115 }3122 }
3116 POSTING_READ(reg);3123 POSTING_READ(reg);
@@ -3207,7 +3214,7 @@ static void ironlake_update_primary_plane(struct drm_plane *primary, · 90 unmodified lines
3207 3214
3208 I915_WRITE(DSPSTRIDE(plane), fb->pitches[0]);3215 I915_WRITE(DSPSTRIDE(plane), fb->pitches[0]);
3209 I915_WRITE(DSPSURF(plane),3216 I915_WRITE(DSPSURF(plane),
3210 intel_fb_gtt_offset(fb, rotation) +3217 intel_plane_ggtt_offset(plane_state) +
3211 intel_crtc->dspaddr_offset);3218 intel_crtc->dspaddr_offset);
3212 if (IS_HASWELL(dev_priv) || IS_BROADWELL(dev_priv)) {3219 if (IS_HASWELL(dev_priv) || IS_BROADWELL(dev_priv)) {
3213 I915_WRITE(DSPOFFSET(plane), (y << 16) | x);3220 I915_WRITE(DSPOFFSET(plane), (y << 16) | x);
@@ -3230,23 +3237,6 @@ u32 intel_fb_stride_alignment(const struct drm_i915_private *dev_priv, · 16 unmodified lines
3230 }3237 }
3231}3238}
3232 3239
3233u32 intel_fb_gtt_offset(struct drm_framebuffer *fb,
3234 unsigned int rotation)
3235{
3236 struct drm_i915_gem_object *obj = intel_fb_obj(fb);
3237 struct i915_ggtt_view view;
3238 struct i915_vma *vma;
3239
3240 intel_fill_fb_ggtt_view(&view, fb, rotation);
3241
3242 vma = i915_gem_object_to_ggtt(obj, &view);
3243 if (WARN(!vma, "ggtt vma for display object not found! (view=%u)\n",
3244 view.type))
3245 return -1;
3246
3247 return i915_ggtt_offset(vma);
3248}
3249
3250static void skl_detach_scaler(struct intel_crtc *intel_crtc, int id)3240static void skl_detach_scaler(struct intel_crtc *intel_crtc, int id)
3251{3241{
3252 struct drm_device *dev = intel_crtc->base.dev;3242 struct drm_device *dev = intel_crtc->base.dev;
@@ -3441,7 +3431,7 @@ static void skylake_update_primary_plane(struct drm_plane *plane, · 188 unmodified lines
3441 }3431 }
3442 3432
3443 I915_WRITE(PLANE_SURF(pipe, 0),3433 I915_WRITE(PLANE_SURF(pipe, 0),
3444 intel_fb_gtt_offset(fb, rotation) + surf_addr);3434 intel_plane_ggtt_offset(plane_state) + surf_addr);
3445 3435
3446 POSTING_READ(PLANE_SURF(pipe, 0));3436 POSTING_READ(PLANE_SURF(pipe, 0));
3447}3437}
@@ -11536,7 +11526,7 @@ static void intel_unpin_work_fn(struct work_struct *__work) · 8088 unmodified lines
11536 flush_work(&work->mmio_work);11526 flush_work(&work->mmio_work);
11537 11527
11538 mutex_lock(&dev->struct_mutex);11528 mutex_lock(&dev->struct_mutex);
11539 intel_unpin_fb_obj(work->old_fb, primary->state->rotation);11529 intel_unpin_fb_vma(work->old_vma);
11540 i915_gem_object_put(work->pending_flip_obj);11530 i915_gem_object_put(work->pending_flip_obj);
11541 mutex_unlock(&dev->struct_mutex);11531 mutex_unlock(&dev->struct_mutex);
11542 11532
@@ -12246,8 +12236,10 @@ static int intel_crtc_page_flip(struct drm_crtc *crtc, · 703 unmodified lines
12246 goto cleanup_pending;12236 goto cleanup_pending;
12247 }12237 }
12248 12238
12249 work->gtt_offset = intel_fb_gtt_offset(fb, primary->state->rotation);12239 work->old_vma = to_intel_plane_state(primary->state)->vma;
12250 work->gtt_offset += intel_crtc->dspaddr_offset;12240 to_intel_plane_state(primary->state)->vma = vma;
12241
12242 work->gtt_offset = i915_ggtt_offset(vma) + intel_crtc->dspaddr_offset;
12251 work->rotation = crtc->primary->state->rotation;12243 work->rotation = crtc->primary->state->rotation;
12252 12244
12253 /*12245 /*
@@ -12301,7 +12293,8 @@ static int intel_crtc_page_flip(struct drm_crtc *crtc, · 47 unmodified lines
12301cleanup_request:12293cleanup_request:
12302 i915_add_request_no_flush(request);12294 i915_add_request_no_flush(request);
12303cleanup_unpin:12295cleanup_unpin:
12304 intel_unpin_fb_obj(fb, crtc->primary->state->rotation);12296 to_intel_plane_state(primary->state)->vma = work->old_vma;
12297 intel_unpin_fb_vma(vma);
12305cleanup_pending:12298cleanup_pending:
12306 atomic_dec(&intel_crtc->unpin_work_count);12299 atomic_dec(&intel_crtc->unpin_work_count);
12307unlock:12300unlock:
@@ -14794,6 +14787,8 @@ intel_prepare_plane_fb(struct drm_plane *plane, · 2486 unmodified lines
14794 DRM_DEBUG_KMS("failed to pin object\n");14787 DRM_DEBUG_KMS("failed to pin object\n");
14795 return PTR_ERR(vma);14788 return PTR_ERR(vma);
14796 }14789 }
14790
14791 to_intel_plane_state(new_state)->vma = vma;
14797 }14792 }
14798 14793
14799 return 0;14794 return 0;
@@ -14812,19 +14807,12 @@ void · 12 unmodified lines
14812intel_cleanup_plane_fb(struct drm_plane *plane,14807intel_cleanup_plane_fb(struct drm_plane *plane,
14813 struct drm_plane_state *old_state)14808 struct drm_plane_state *old_state)
14814{14809{
14815 struct drm_i915_private *dev_priv = to_i915(plane->dev);14810 struct i915_vma *vma;
14816 struct intel_plane_state *old_intel_state;
14817 struct drm_i915_gem_object *old_obj = intel_fb_obj(old_state->fb);
14818 struct drm_i915_gem_object *obj = intel_fb_obj(plane->state->fb);
14819
14820 old_intel_state = to_intel_plane_state(old_state);
14821
14822 if (!obj && !old_obj)
14823 return;
14824 14811
14825 if (old_obj && (plane->type != DRM_PLANE_TYPE_CURSOR ||14812 /* Should only be called after a successful intel_prepare_plane_fb()! */
14826 !INTEL_INFO(dev_priv)->cursor_needs_physical))14813 vma = fetch_and_zero(&to_intel_plane_state(old_state)->vma);
14827 intel_unpin_fb_obj(old_state->fb, old_state->rotation);14814 if (vma)
14815 intel_unpin_fb_vma(vma);
14828}14816}
14829 14817
14830int14818int
@@ -15166,7 +15154,7 @@ intel_update_cursor_plane(struct drm_plane *plane, · 335 unmodified lines
15166 if (!obj)15154 if (!obj)
15167 addr = 0;15155 addr = 0;
15168 else if (!INTEL_INFO(dev_priv)->cursor_needs_physical)15156 else if (!INTEL_INFO(dev_priv)->cursor_needs_physical)
15169 addr = i915_gem_object_ggtt_offset(obj, NULL);15157 addr = intel_plane_ggtt_offset(state);
15170 else15158 else
15171 addr = obj->phys_handle->busaddr;15159 addr = obj->phys_handle->busaddr;
15172 15160
@@ -17066,41 +17054,12 @@ void intel_display_resume(struct drm_device *dev) · 1893 unmodified lines
17066void intel_modeset_gem_init(struct drm_device *dev)17054void intel_modeset_gem_init(struct drm_device *dev)
17067{17055{
17068 struct drm_i915_private *dev_priv = to_i915(dev);17056 struct drm_i915_private *dev_priv = to_i915(dev);
17069 struct drm_crtc *c;
17070 struct drm_i915_gem_object *obj;
17071 17057
17072 intel_init_gt_powersave(dev_priv);17058 intel_init_gt_powersave(dev_priv);
17073 17059
17074 intel_modeset_init_hw(dev);17060 intel_modeset_init_hw(dev);
17075 17061
17076 intel_setup_overlay(dev_priv);17062 intel_setup_overlay(dev_priv);
17077
17078 /*
17079 * Make sure any fbs we allocated at startup are properly
17080 * pinned & fenced. When we do the allocation it's too early
17081 * for this.
17082 */
17083 for_each_crtc(dev, c) {
17084 struct i915_vma *vma;
17085
17086 obj = intel_fb_obj(c->primary->fb);
17087 if (obj == NULL)
17088 continue;
17089
17090 mutex_lock(&dev->struct_mutex);
17091 vma = intel_pin_and_fence_fb_obj(c->primary->fb,
17092 c->primary->state->rotation);
17093 mutex_unlock(&dev->struct_mutex);
17094 if (IS_ERR(vma)) {
17095 DRM_ERROR("failed to pin boot fb on pipe %d\n",
17096 to_intel_crtc(c)->pipe);
17097 drm_framebuffer_unreference(c->primary->fb);
17098 c->primary->fb = NULL;
17099 c->primary->crtc = c->primary->state->crtc = NULL;
17100 update_state_fb(c->primary);
17101 c->state->plane_mask &= ~(1 << drm_plane_index(c->primary));
17102 }
17103 }
17104}17063}
17105 17064
17106int intel_connector_register(struct drm_connector *connector)17065int intel_connector_register(struct drm_connector *connector)
drivers/gpu/drm/i915/intel_drv.h+7−2
@@ -377,6 +377,7 @@ struct intel_atomic_state { · 376 unmodified lines
377struct intel_plane_state {377struct intel_plane_state {
378 struct drm_plane_state base;378 struct drm_plane_state base;
379 struct drm_rect clip;379 struct drm_rect clip;
380 struct i915_vma *vma;
380 381
381 struct {382 struct {
382 u32 offset;383 u32 offset;
@@ -1046,6 +1047,7 @@ struct intel_flip_work { · 663 unmodified lines
1046 struct work_struct mmio_work;1047 struct work_struct mmio_work;
1047 1048
1048 struct drm_crtc *crtc;1049 struct drm_crtc *crtc;
1050 struct i915_vma *old_vma;
1049 struct drm_framebuffer *old_fb;1051 struct drm_framebuffer *old_fb;
1050 struct drm_i915_gem_object *pending_flip_obj;1052 struct drm_i915_gem_object *pending_flip_obj;
1051 struct drm_pending_vblank_event *event;1053 struct drm_pending_vblank_event *event;
@@ -1273,7 +1275,7 @@ void intel_release_load_detect_pipe(struct drm_connector *connector, · 221 unmodified lines
1273 struct drm_modeset_acquire_ctx *ctx);1275 struct drm_modeset_acquire_ctx *ctx);
1274struct i915_vma *1276struct i915_vma *
1275intel_pin_and_fence_fb_obj(struct drm_framebuffer *fb, unsigned int rotation);1277intel_pin_and_fence_fb_obj(struct drm_framebuffer *fb, unsigned int rotation);
1276void intel_unpin_fb_obj(struct drm_framebuffer *fb, unsigned int rotation);1278void intel_unpin_fb_vma(struct i915_vma *vma);
1277struct drm_framebuffer *1279struct drm_framebuffer *
1278__intel_framebuffer_create(struct drm_device *dev,1280__intel_framebuffer_create(struct drm_device *dev,
1279 struct drm_mode_fb_cmd2 *mode_cmd,1281 struct drm_mode_fb_cmd2 *mode_cmd,
@@ -1362,7 +1364,10 @@ void intel_mode_from_pipe_config(struct drm_display_mode *mode, · 82 unmodified lines
1362int skl_update_scaler_crtc(struct intel_crtc_state *crtc_state);1364int skl_update_scaler_crtc(struct intel_crtc_state *crtc_state);
1363int skl_max_scale(struct intel_crtc *crtc, struct intel_crtc_state *crtc_state);1365int skl_max_scale(struct intel_crtc *crtc, struct intel_crtc_state *crtc_state);
1364 1366
1365u32 intel_fb_gtt_offset(struct drm_framebuffer *fb, unsigned int rotation);1367static inline u32 intel_plane_ggtt_offset(const struct intel_plane_state *state)
1368{
1369 return i915_ggtt_offset(state->vma);
1370}
1366 1371
1367u32 skl_plane_ctl_format(uint32_t pixel_format);1372u32 skl_plane_ctl_format(uint32_t pixel_format);
1368u32 skl_plane_ctl_tiling(uint64_t fb_modifier);1373u32 skl_plane_ctl_tiling(uint64_t fb_modifier);
drivers/gpu/drm/i915/intel_fbc.c+20−32
@@ -173,7 +173,7 @@ static void i8xx_fbc_activate(struct drm_i915_private *dev_priv) · 172 unmodified lines
173 if (IS_I945GM(dev_priv))173 if (IS_I945GM(dev_priv))
174 fbc_ctl |= FBC_CTL_C3_IDLE; /* 945 needs special SR handling */174 fbc_ctl |= FBC_CTL_C3_IDLE; /* 945 needs special SR handling */
175 fbc_ctl |= (cfb_pitch & 0xff) << FBC_CTL_STRIDE_SHIFT;175 fbc_ctl |= (cfb_pitch & 0xff) << FBC_CTL_STRIDE_SHIFT;
176 fbc_ctl |= params->fb.fence_reg;176 fbc_ctl |= params->vma->fence->id;
177 I915_WRITE(FBC_CONTROL, fbc_ctl);177 I915_WRITE(FBC_CONTROL, fbc_ctl);
178}178}
179 179
@@ -193,8 +193,8 @@ static void g4x_fbc_activate(struct drm_i915_private *dev_priv) · 13 unmodified lines
193 else193 else
194 dpfc_ctl |= DPFC_CTL_LIMIT_1X;194 dpfc_ctl |= DPFC_CTL_LIMIT_1X;
195 195
196 if (params->fb.fence_reg != I915_FENCE_REG_NONE) {196 if (params->vma->fence) {
197 dpfc_ctl |= DPFC_CTL_FENCE_EN | params->fb.fence_reg;197 dpfc_ctl |= DPFC_CTL_FENCE_EN | params->vma->fence->id;
198 I915_WRITE(DPFC_FENCE_YOFF, params->crtc.fence_y_offset);198 I915_WRITE(DPFC_FENCE_YOFF, params->crtc.fence_y_offset);
199 } else {199 } else {
200 I915_WRITE(DPFC_FENCE_YOFF, 0);200 I915_WRITE(DPFC_FENCE_YOFF, 0);
@@ -251,13 +251,14 @@ static void ilk_fbc_activate(struct drm_i915_private *dev_priv) · 50 unmodified lines
251 break;251 break;
252 }252 }
253 253
254 if (params->fb.fence_reg != I915_FENCE_REG_NONE) {254 if (params->vma->fence) {
255 dpfc_ctl |= DPFC_CTL_FENCE_EN;255 dpfc_ctl |= DPFC_CTL_FENCE_EN;
256 if (IS_GEN5(dev_priv))256 if (IS_GEN5(dev_priv))
257 dpfc_ctl |= params->fb.fence_reg;257 dpfc_ctl |= params->vma->fence->id;
258 if (IS_GEN6(dev_priv)) {258 if (IS_GEN6(dev_priv)) {
259 I915_WRITE(SNB_DPFC_CTL_SA,259 I915_WRITE(SNB_DPFC_CTL_SA,
260 SNB_CPU_FENCE_ENABLE | params->fb.fence_reg);260 SNB_CPU_FENCE_ENABLE |
261 params->vma->fence->id);
261 I915_WRITE(DPFC_CPU_FENCE_OFFSET,262 I915_WRITE(DPFC_CPU_FENCE_OFFSET,
262 params->crtc.fence_y_offset);263 params->crtc.fence_y_offset);
263 }264 }
@@ -269,7 +270,8 @@ static void ilk_fbc_activate(struct drm_i915_private *dev_priv) · 5 unmodified lines
269 }270 }
270 271
271 I915_WRITE(ILK_DPFC_FENCE_YOFF, params->crtc.fence_y_offset);272 I915_WRITE(ILK_DPFC_FENCE_YOFF, params->crtc.fence_y_offset);
272 I915_WRITE(ILK_FBC_RT_BASE, params->fb.ggtt_offset | ILK_FBC_RT_VALID);273 I915_WRITE(ILK_FBC_RT_BASE,
274 i915_ggtt_offset(params->vma) | ILK_FBC_RT_VALID);
273 /* enable it... */275 /* enable it... */
274 I915_WRITE(ILK_DPFC_CONTROL, dpfc_ctl | DPFC_CTL_EN);276 I915_WRITE(ILK_DPFC_CONTROL, dpfc_ctl | DPFC_CTL_EN);
275 277
@@ -319,10 +321,11 @@ static void gen7_fbc_activate(struct drm_i915_private *dev_priv) · 43 unmodified lines
319 break;321 break;
320 }322 }
321 323
322 if (params->fb.fence_reg != I915_FENCE_REG_NONE) {324 if (params->vma->fence) {
323 dpfc_ctl |= IVB_DPFC_CTL_FENCE_EN;325 dpfc_ctl |= IVB_DPFC_CTL_FENCE_EN;
324 I915_WRITE(SNB_DPFC_CTL_SA,326 I915_WRITE(SNB_DPFC_CTL_SA,
325 SNB_CPU_FENCE_ENABLE | params->fb.fence_reg);327 SNB_CPU_FENCE_ENABLE |
328 params->vma->fence->id);
326 I915_WRITE(DPFC_CPU_FENCE_OFFSET, params->crtc.fence_y_offset);329 I915_WRITE(DPFC_CPU_FENCE_OFFSET, params->crtc.fence_y_offset);
327 } else {330 } else {
328 I915_WRITE(SNB_DPFC_CTL_SA,0);331 I915_WRITE(SNB_DPFC_CTL_SA,0);
@@ -727,14 +730,6 @@ static bool intel_fbc_hw_tracking_covers_screen(struct intel_crtc *crtc) · 398 unmodified lines
727 return effective_w <= max_w && effective_h <= max_h;730 return effective_w <= max_w && effective_h <= max_h;
728}731}
729 732
730/* XXX replace me when we have VMA tracking for intel_plane_state */
731static int get_fence_id(struct drm_framebuffer *fb)
732{
733 struct i915_vma *vma = i915_gem_object_to_ggtt(intel_fb_obj(fb), NULL);
734
735 return vma && vma->fence ? vma->fence->id : I915_FENCE_REG_NONE;
736}
737
738static void intel_fbc_update_state_cache(struct intel_crtc *crtc,733static void intel_fbc_update_state_cache(struct intel_crtc *crtc,
739 struct intel_crtc_state *crtc_state,734 struct intel_crtc_state *crtc_state,
740 struct intel_plane_state *plane_state)735 struct intel_plane_state *plane_state)
@@ -743,7 +738,8 @@ static void intel_fbc_update_state_cache(struct intel_crtc *crtc, · 2 unmodified lines
743 struct intel_fbc *fbc = &dev_priv->fbc;738 struct intel_fbc *fbc = &dev_priv->fbc;
744 struct intel_fbc_state_cache *cache = &fbc->state_cache;739 struct intel_fbc_state_cache *cache = &fbc->state_cache;
745 struct drm_framebuffer *fb = plane_state->base.fb;740 struct drm_framebuffer *fb = plane_state->base.fb;
746 struct drm_i915_gem_object *obj;741
742 cache->vma = NULL;
747 743
748 cache->crtc.mode_flags = crtc_state->base.adjusted_mode.flags;744 cache->crtc.mode_flags = crtc_state->base.adjusted_mode.flags;
749 if (IS_HASWELL(dev_priv) || IS_BROADWELL(dev_priv))745 if (IS_HASWELL(dev_priv) || IS_BROADWELL(dev_priv))
@@ -758,16 +754,10 @@ static void intel_fbc_update_state_cache(struct intel_crtc *crtc, · 8 unmodified lines
758 if (!cache->plane.visible)754 if (!cache->plane.visible)
759 return;755 return;
760 756
761 obj = intel_fb_obj(fb);
762
763 /* FIXME: We lack the proper locking here, so only run this on the
764 * platforms that need. */
765 if (IS_GEN(dev_priv, 5, 6))
766 cache->fb.ilk_ggtt_offset = i915_gem_object_ggtt_offset(obj, NULL);
767 cache->fb.pixel_format = fb->pixel_format;757 cache->fb.pixel_format = fb->pixel_format;
768 cache->fb.stride = fb->pitches[0];758 cache->fb.stride = fb->pitches[0];
769 cache->fb.fence_reg = get_fence_id(fb);759
770 cache->fb.tiling_mode = i915_gem_object_get_tiling(obj);760 cache->vma = plane_state->vma;
771}761}
772 762
773static bool intel_fbc_can_activate(struct intel_crtc *crtc)763static bool intel_fbc_can_activate(struct intel_crtc *crtc)
@@ -784,7 +774,7 @@ static bool intel_fbc_can_activate(struct intel_crtc *crtc) · 10 unmodified lines
784 return false;774 return false;
785 }775 }
786 776
787 if (!cache->plane.visible) {777 if (!cache->vma) {
788 fbc->no_fbc_reason = "primary plane not visible";778 fbc->no_fbc_reason = "primary plane not visible";
789 return false;779 return false;
790 }780 }
@@ -807,8 +797,7 @@ static bool intel_fbc_can_activate(struct intel_crtc *crtc) · 16 unmodified lines
807 * so have no fence associated with it) due to aperture constaints797 * so have no fence associated with it) due to aperture constaints
808 * at the time of pinning.798 * at the time of pinning.
809 */799 */
810 if (cache->fb.tiling_mode != I915_TILING_X ||800 if (!cache->vma->fence) {
811 cache->fb.fence_reg == I915_FENCE_REG_NONE) {
812 fbc->no_fbc_reason = "framebuffer not tiled or fenced";801 fbc->no_fbc_reason = "framebuffer not tiled or fenced";
813 return false;802 return false;
814 }803 }
@@ -888,17 +877,16 @@ static void intel_fbc_get_reg_params(struct intel_crtc *crtc, · 73 unmodified lines
888 * zero. */877 * zero. */
889 memset(params, 0, sizeof(*params));878 memset(params, 0, sizeof(*params));
890 879
880 params->vma = cache->vma;
881
891 params->crtc.pipe = crtc->pipe;882 params->crtc.pipe = crtc->pipe;
892 params->crtc.plane = crtc->plane;883 params->crtc.plane = crtc->plane;
893 params->crtc.fence_y_offset = get_crtc_fence_y_offset(crtc);884 params->crtc.fence_y_offset = get_crtc_fence_y_offset(crtc);
894 885
895 params->fb.pixel_format = cache->fb.pixel_format;886 params->fb.pixel_format = cache->fb.pixel_format;
896 params->fb.stride = cache->fb.stride;887 params->fb.stride = cache->fb.stride;
897 params->fb.fence_reg = cache->fb.fence_reg;
898 888
899 params->cfb_size = intel_fbc_calculate_cfb_size(dev_priv, cache);889 params->cfb_size = intel_fbc_calculate_cfb_size(dev_priv, cache);
900
901 params->fb.ggtt_offset = cache->fb.ilk_ggtt_offset;
902}890}
903 891
904static bool intel_fbc_reg_params_equal(struct intel_fbc_reg_params *params1,892static bool intel_fbc_reg_params_equal(struct intel_fbc_reg_params *params1,
drivers/gpu/drm/i915/intel_fbdev.c+2−2
@@ -284,7 +284,7 @@ static int intelfb_create(struct drm_fb_helper *helper, · 283 unmodified lines
284out_destroy_fbi:284out_destroy_fbi:
285 drm_fb_helper_release_fbi(helper);285 drm_fb_helper_release_fbi(helper);
286out_unpin:286out_unpin:
287 intel_unpin_fb_obj(&ifbdev->fb->base, DRM_ROTATE_0);287 intel_unpin_fb_vma(vma);
288out_unlock:288out_unlock:
289 mutex_unlock(&dev->struct_mutex);289 mutex_unlock(&dev->struct_mutex);
290 return ret;290 return ret;
@@ -549,7 +549,7 @@ static void intel_fbdev_destroy(struct intel_fbdev *ifbdev) · 258 unmodified lines
549 549
550 if (ifbdev->fb) {550 if (ifbdev->fb) {
551 mutex_lock(&ifbdev->helper.dev->struct_mutex);551 mutex_lock(&ifbdev->helper.dev->struct_mutex);
552 intel_unpin_fb_obj(&ifbdev->fb->base, DRM_ROTATE_0);552 intel_unpin_fb_vma(ifbdev->vma);
553 mutex_unlock(&ifbdev->helper.dev->struct_mutex);553 mutex_unlock(&ifbdev->helper.dev->struct_mutex);
554 554
555 drm_framebuffer_remove(&ifbdev->fb->base);555 drm_framebuffer_remove(&ifbdev->fb->base);
drivers/gpu/drm/i915/intel_sprite.c+4−4
@@ -273,7 +273,7 @@ skl_update_plane(struct drm_plane *drm_plane, · 272 unmodified lines
273 273
274 I915_WRITE(PLANE_CTL(pipe, plane), plane_ctl);274 I915_WRITE(PLANE_CTL(pipe, plane), plane_ctl);
275 I915_WRITE(PLANE_SURF(pipe, plane),275 I915_WRITE(PLANE_SURF(pipe, plane),
276 intel_fb_gtt_offset(fb, rotation) + surf_addr);276 intel_plane_ggtt_offset(plane_state) + surf_addr);
277 POSTING_READ(PLANE_SURF(pipe, plane));277 POSTING_READ(PLANE_SURF(pipe, plane));
278}278}
279 279
@@ -458,7 +458,7 @@ vlv_update_plane(struct drm_plane *dplane, · 178 unmodified lines
458 I915_WRITE(SPSIZE(pipe, plane), (crtc_h << 16) | crtc_w);458 I915_WRITE(SPSIZE(pipe, plane), (crtc_h << 16) | crtc_w);
459 I915_WRITE(SPCNTR(pipe, plane), sprctl);459 I915_WRITE(SPCNTR(pipe, plane), sprctl);
460 I915_WRITE(SPSURF(pipe, plane),460 I915_WRITE(SPSURF(pipe, plane),
461 intel_fb_gtt_offset(fb, rotation) + sprsurf_offset);461 intel_plane_ggtt_offset(plane_state) + sprsurf_offset);
462 POSTING_READ(SPSURF(pipe, plane));462 POSTING_READ(SPSURF(pipe, plane));
463}463}
464 464
@@ -594,7 +594,7 @@ ivb_update_plane(struct drm_plane *plane, · 129 unmodified lines
594 I915_WRITE(SPRSCALE(pipe), sprscale);594 I915_WRITE(SPRSCALE(pipe), sprscale);
595 I915_WRITE(SPRCTL(pipe), sprctl);595 I915_WRITE(SPRCTL(pipe), sprctl);
596 I915_WRITE(SPRSURF(pipe),596 I915_WRITE(SPRSURF(pipe),
597 intel_fb_gtt_offset(fb, rotation) + sprsurf_offset);597 intel_plane_ggtt_offset(plane_state) + sprsurf_offset);
598 POSTING_READ(SPRSURF(pipe));598 POSTING_READ(SPRSURF(pipe));
599}599}
600 600
@@ -721,7 +721,7 @@ ilk_update_plane(struct drm_plane *plane, · 120 unmodified lines
721 I915_WRITE(DVSSCALE(pipe), dvsscale);721 I915_WRITE(DVSSCALE(pipe), dvsscale);
722 I915_WRITE(DVSCNTR(pipe), dvscntr);722 I915_WRITE(DVSCNTR(pipe), dvscntr);
723 I915_WRITE(DVSSURF(pipe),723 I915_WRITE(DVSSURF(pipe),
724 intel_fb_gtt_offset(fb, rotation) + dvssurf_offset);724 intel_plane_ggtt_offset(plane_state) + dvssurf_offset);
725 POSTING_READ(DVSSURF(pipe));725 POSTING_READ(DVSSURF(pipe));
726}726}
727 727
drivers/gpu/drm/nouveau/dispnv04/hw.c+2−1
@@ -222,6 +222,7 @@ nouveau_hw_get_clock(struct drm_device *dev, enum nvbios_pll_type plltype) · 221 unmodified lines
222 uint32_t mpllP;222 uint32_t mpllP;
223 223
224 pci_read_config_dword(pci_get_bus_and_slot(0, 3), 0x6c, &mpllP);224 pci_read_config_dword(pci_get_bus_and_slot(0, 3), 0x6c, &mpllP);
225 mpllP = (mpllP >> 8) & 0xf;
225 if (!mpllP)226 if (!mpllP)
226 mpllP = 4;227 mpllP = 4;
227 228
@@ -232,7 +233,7 @@ nouveau_hw_get_clock(struct drm_device *dev, enum nvbios_pll_type plltype) · 4 unmodified lines
232 uint32_t clock;233 uint32_t clock;
233 234
234 pci_read_config_dword(pci_get_bus_and_slot(0, 5), 0x4c, &clock);235 pci_read_config_dword(pci_get_bus_and_slot(0, 5), 0x4c, &clock);
235 return clock;236 return clock / 1000;
236 }237 }
237 238
238 ret = nouveau_hw_get_pllvals(dev, plltype, &pllvals);239 ret = nouveau_hw_get_pllvals(dev, plltype, &pllvals);
drivers/gpu/drm/nouveau/nouveau_fence.h+1−0
@@ -99,6 +99,7 @@ struct nv84_fence_priv { · 98 unmodified lines
99 struct nouveau_bo *bo;99 struct nouveau_bo *bo;
100 struct nouveau_bo *bo_gart;100 struct nouveau_bo *bo_gart;
101 u32 *suspend;101 u32 *suspend;
102 struct mutex mutex;
102};103};
103 104
104int nv84_fence_context_new(struct nouveau_channel *);105int nv84_fence_context_new(struct nouveau_channel *);
drivers/gpu/drm/nouveau/nouveau_led.h+1−1
@@ -42,7 +42,7 @@ nouveau_led(struct drm_device *dev) · 41 unmodified lines
42}42}
43 43
44/* nouveau_led.c */44/* nouveau_led.c */
45#if IS_ENABLED(CONFIG_LEDS_CLASS)45#if IS_REACHABLE(CONFIG_LEDS_CLASS)
46int nouveau_led_init(struct drm_device *dev);46int nouveau_led_init(struct drm_device *dev);
47void nouveau_led_suspend(struct drm_device *dev);47void nouveau_led_suspend(struct drm_device *dev);
48void nouveau_led_resume(struct drm_device *dev);48void nouveau_led_resume(struct drm_device *dev);
drivers/gpu/drm/nouveau/nouveau_usif.c+2−1
@@ -313,7 +313,8 @@ usif_ioctl(struct drm_file *filp, void __user *user, u32 argc) · 312 unmodified lines
313 if (!(ret = nvif_unpack(-ENOSYS, &data, &size, argv->v0, 0, 0, true))) {313 if (!(ret = nvif_unpack(-ENOSYS, &data, &size, argv->v0, 0, 0, true))) {
314 /* block access to objects not created via this interface */314 /* block access to objects not created via this interface */
315 owner = argv->v0.owner;315 owner = argv->v0.owner;
316 if (argv->v0.object == 0ULL)316 if (argv->v0.object == 0ULL &&
317 argv->v0.type != NVIF_IOCTL_V0_DEL)
317 argv->v0.owner = NVDRM_OBJECT_ANY; /* except client */318 argv->v0.owner = NVDRM_OBJECT_ANY; /* except client */
318 else319 else
319 argv->v0.owner = NVDRM_OBJECT_USIF;320 argv->v0.owner = NVDRM_OBJECT_USIF;
drivers/gpu/drm/nouveau/nv50_display.c+6−0
@@ -4052,6 +4052,11 @@ nv50_disp_atomic_commit_tail(struct drm_atomic_state *state) · 4051 unmodified lines
4052 }4052 }
4053 }4053 }
4054 4054
4055 for_each_crtc_in_state(state, crtc, crtc_state, i) {
4056 if (crtc->state->event)
4057 drm_crtc_vblank_get(crtc);
4058 }
4059
4055 /* Update plane(s). */4060 /* Update plane(s). */
4056 for_each_plane_in_state(state, plane, plane_state, i) {4061 for_each_plane_in_state(state, plane, plane_state, i) {
4057 struct nv50_wndw_atom *asyw = nv50_wndw_atom(plane->state);4062 struct nv50_wndw_atom *asyw = nv50_wndw_atom(plane->state);
@@ -4101,6 +4106,7 @@ nv50_disp_atomic_commit_tail(struct drm_atomic_state *state) · 43 unmodified lines
4101 drm_crtc_send_vblank_event(crtc, crtc->state->event);4106 drm_crtc_send_vblank_event(crtc, crtc->state->event);
4102 spin_unlock_irqrestore(&crtc->dev->event_lock, flags);4107 spin_unlock_irqrestore(&crtc->dev->event_lock, flags);
4103 crtc->state->event = NULL;4108 crtc->state->event = NULL;
4109 drm_crtc_vblank_put(crtc);
4104 }4110 }
4105 }4111 }
4106 4112
drivers/gpu/drm/nouveau/nv84_fence.c+6−0
@@ -107,8 +107,10 @@ nv84_fence_context_del(struct nouveau_channel *chan) · 106 unmodified lines
107 struct nv84_fence_chan *fctx = chan->fence;107 struct nv84_fence_chan *fctx = chan->fence;
108 108
109 nouveau_bo_wr32(priv->bo, chan->chid * 16 / 4, fctx->base.sequence);109 nouveau_bo_wr32(priv->bo, chan->chid * 16 / 4, fctx->base.sequence);
110 mutex_lock(&priv->mutex);
110 nouveau_bo_vma_del(priv->bo, &fctx->vma_gart);111 nouveau_bo_vma_del(priv->bo, &fctx->vma_gart);
111 nouveau_bo_vma_del(priv->bo, &fctx->vma);112 nouveau_bo_vma_del(priv->bo, &fctx->vma);
113 mutex_unlock(&priv->mutex);
112 nouveau_fence_context_del(&fctx->base);114 nouveau_fence_context_del(&fctx->base);
113 chan->fence = NULL;115 chan->fence = NULL;
114 nouveau_fence_context_free(&fctx->base);116 nouveau_fence_context_free(&fctx->base);
@@ -134,11 +136,13 @@ nv84_fence_context_new(struct nouveau_channel *chan) · 19 unmodified lines
134 fctx->base.sync32 = nv84_fence_sync32;136 fctx->base.sync32 = nv84_fence_sync32;
135 fctx->base.sequence = nv84_fence_read(chan);137 fctx->base.sequence = nv84_fence_read(chan);
136 138
139 mutex_lock(&priv->mutex);
137 ret = nouveau_bo_vma_add(priv->bo, cli->vm, &fctx->vma);140 ret = nouveau_bo_vma_add(priv->bo, cli->vm, &fctx->vma);
138 if (ret == 0) {141 if (ret == 0) {
139 ret = nouveau_bo_vma_add(priv->bo_gart, cli->vm,142 ret = nouveau_bo_vma_add(priv->bo_gart, cli->vm,
140 &fctx->vma_gart);143 &fctx->vma_gart);
141 }144 }
145 mutex_unlock(&priv->mutex);
142 146
143 if (ret)147 if (ret)
144 nv84_fence_context_del(chan);148 nv84_fence_context_del(chan);
@@ -212,6 +216,8 @@ nv84_fence_create(struct nouveau_drm *drm) · 67 unmodified lines
212 priv->base.context_base = dma_fence_context_alloc(priv->base.contexts);216 priv->base.context_base = dma_fence_context_alloc(priv->base.contexts);
213 priv->base.uevent = true;217 priv->base.uevent = true;
214 218
219 mutex_init(&priv->mutex);
220
215 /* Use VRAM if there is any ; otherwise fallback to system memory */221 /* Use VRAM if there is any ; otherwise fallback to system memory */
216 domain = drm->device.info.ram_size != 0 ? TTM_PL_FLAG_VRAM :222 domain = drm->device.info.ram_size != 0 ? TTM_PL_FLAG_VRAM :
217 /*223 /*
drivers/gpu/drm/nouveau/nvkm/engine/disp/hdagt215.c+1−1
@@ -59,7 +59,7 @@ gt215_hda_eld(NV50_DISP_MTHD_V1) · 58 unmodified lines
59 );59 );
60 }60 }
61 for (i = 0; i < size; i++)61 for (i = 0; i < size; i++)
62 nvkm_wr32(device, 0x61c440 + soff, (i << 8) | args->v0.data[0]);62 nvkm_wr32(device, 0x61c440 + soff, (i << 8) | args->v0.data[i]);
63 for (; i < 0x60; i++)63 for (; i < 0x60; i++)
64 nvkm_wr32(device, 0x61c440 + soff, (i << 8));64 nvkm_wr32(device, 0x61c440 + soff, (i << 8));
65 nvkm_mask(device, 0x61c448 + soff, 0x80000003, 0x80000003);65 nvkm_mask(device, 0x61c448 + soff, 0x80000003, 0x80000003);
drivers/gpu/drm/nouveau/nvkm/engine/disp/nv50.c+0−2
@@ -433,8 +433,6 @@ nv50_disp_dptmds_war(struct nvkm_device *device) · 432 unmodified lines
433 case 0x94:433 case 0x94:
434 case 0x96:434 case 0x96:
435 case 0x98:435 case 0x98:
436 case 0xaa:
437 case 0xac:
438 return true;436 return true;
439 default:437 default:
440 break;438 break;
drivers/gpu/drm/radeon/radeon_drv.c+2−1
@@ -97,9 +97,10 @@ · 96 unmodified lines
97 * 2.46.0 - Add PFP_SYNC_ME support on evergreen97 * 2.46.0 - Add PFP_SYNC_ME support on evergreen
98 * 2.47.0 - Add UVD_NO_OP register support98 * 2.47.0 - Add UVD_NO_OP register support
99 * 2.48.0 - TA_CS_BC_BASE_ADDR allowed on SI99 * 2.48.0 - TA_CS_BC_BASE_ADDR allowed on SI
100 * 2.49.0 - DRM_RADEON_GEM_INFO ioctl returns correct vram_size/visible values
100 */101 */
101#define KMS_DRIVER_MAJOR 2102#define KMS_DRIVER_MAJOR 2
102#define KMS_DRIVER_MINOR 48103#define KMS_DRIVER_MINOR 49
103#define KMS_DRIVER_PATCHLEVEL 0104#define KMS_DRIVER_PATCHLEVEL 0
104int radeon_driver_load_kms(struct drm_device *dev, unsigned long flags);105int radeon_driver_load_kms(struct drm_device *dev, unsigned long flags);
105int radeon_driver_unload_kms(struct drm_device *dev);106int radeon_driver_unload_kms(struct drm_device *dev);
drivers/gpu/drm/radeon/radeon_gem.c+2−2
@@ -220,8 +220,8 @@ int radeon_gem_info_ioctl(struct drm_device *dev, void *data, · 219 unmodified lines
220 220
221 man = &rdev->mman.bdev.man[TTM_PL_VRAM];221 man = &rdev->mman.bdev.man[TTM_PL_VRAM];
222 222
223 args->vram_size = rdev->mc.real_vram_size;223 args->vram_size = (u64)man->size << PAGE_SHIFT;
224 args->vram_visible = (u64)man->size << PAGE_SHIFT;224 args->vram_visible = rdev->mc.visible_vram_size;
225 args->vram_visible -= rdev->vram_pin_size;225 args->vram_visible -= rdev->vram_pin_size;
226 args->gart_size = rdev->mc.gtt_size;226 args->gart_size = rdev->mc.gtt_size;
227 args->gart_size -= rdev->gart_pin_size;227 args->gart_size -= rdev->gart_pin_size;
drivers/hid/hid-cp2112.c+12−16
@@ -168,7 +168,7 @@ struct cp2112_device { · 167 unmodified lines
168 atomic_t xfer_avail;168 atomic_t xfer_avail;
169 struct gpio_chip gc;169 struct gpio_chip gc;
170 u8 *in_out_buffer;170 u8 *in_out_buffer;
171 spinlock_t lock;171 struct mutex lock;
172 172
173 struct gpio_desc *desc[8];173 struct gpio_desc *desc[8];
174 bool gpio_poll;174 bool gpio_poll;
@@ -186,10 +186,9 @@ static int cp2112_gpio_direction_input(struct gpio_chip *chip, unsigned offset) · 11 unmodified lines
186 struct cp2112_device *dev = gpiochip_get_data(chip);186 struct cp2112_device *dev = gpiochip_get_data(chip);
187 struct hid_device *hdev = dev->hdev;187 struct hid_device *hdev = dev->hdev;
188 u8 *buf = dev->in_out_buffer;188 u8 *buf = dev->in_out_buffer;
189 unsigned long flags;
190 int ret;189 int ret;
191 190
192 spin_lock_irqsave(&dev->lock, flags);191 mutex_lock(&dev->lock);
193 192
194 ret = hid_hw_raw_request(hdev, CP2112_GPIO_CONFIG, buf,193 ret = hid_hw_raw_request(hdev, CP2112_GPIO_CONFIG, buf,
195 CP2112_GPIO_CONFIG_LENGTH, HID_FEATURE_REPORT,194 CP2112_GPIO_CONFIG_LENGTH, HID_FEATURE_REPORT,
@@ -213,8 +212,8 @@ static int cp2112_gpio_direction_input(struct gpio_chip *chip, unsigned offset) · 17 unmodified lines
213 ret = 0;212 ret = 0;
214 213
215exit:214exit:
216 spin_unlock_irqrestore(&dev->lock, flags);215 mutex_unlock(&dev->lock);
217 return ret <= 0 ? ret : -EIO;216 return ret < 0 ? ret : -EIO;
218}217}
219 218
220static void cp2112_gpio_set(struct gpio_chip *chip, unsigned offset, int value)219static void cp2112_gpio_set(struct gpio_chip *chip, unsigned offset, int value)
@@ -222,10 +221,9 @@ static void cp2112_gpio_set(struct gpio_chip *chip, unsigned offset, int value) · 1 unmodified line
222 struct cp2112_device *dev = gpiochip_get_data(chip);221 struct cp2112_device *dev = gpiochip_get_data(chip);
223 struct hid_device *hdev = dev->hdev;222 struct hid_device *hdev = dev->hdev;
224 u8 *buf = dev->in_out_buffer;223 u8 *buf = dev->in_out_buffer;
225 unsigned long flags;
226 int ret;224 int ret;
227 225
228 spin_lock_irqsave(&dev->lock, flags);226 mutex_lock(&dev->lock);
229 227
230 buf[0] = CP2112_GPIO_SET;228 buf[0] = CP2112_GPIO_SET;
231 buf[1] = value ? 0xff : 0;229 buf[1] = value ? 0xff : 0;
@@ -237,7 +235,7 @@ static void cp2112_gpio_set(struct gpio_chip *chip, unsigned offset, int value) · 5 unmodified lines
237 if (ret < 0)235 if (ret < 0)
238 hid_err(hdev, "error setting GPIO values: %d\n", ret);236 hid_err(hdev, "error setting GPIO values: %d\n", ret);
239 237
240 spin_unlock_irqrestore(&dev->lock, flags);238 mutex_unlock(&dev->lock);
241}239}
242 240
243static int cp2112_gpio_get_all(struct gpio_chip *chip)241static int cp2112_gpio_get_all(struct gpio_chip *chip)
@@ -245,10 +243,9 @@ static int cp2112_gpio_get_all(struct gpio_chip *chip) · 1 unmodified line
245 struct cp2112_device *dev = gpiochip_get_data(chip);243 struct cp2112_device *dev = gpiochip_get_data(chip);
246 struct hid_device *hdev = dev->hdev;244 struct hid_device *hdev = dev->hdev;
247 u8 *buf = dev->in_out_buffer;245 u8 *buf = dev->in_out_buffer;
248 unsigned long flags;
249 int ret;246 int ret;
250 247
251 spin_lock_irqsave(&dev->lock, flags);248 mutex_lock(&dev->lock);
252 249
253 ret = hid_hw_raw_request(hdev, CP2112_GPIO_GET, buf,250 ret = hid_hw_raw_request(hdev, CP2112_GPIO_GET, buf,
254 CP2112_GPIO_GET_LENGTH, HID_FEATURE_REPORT,251 CP2112_GPIO_GET_LENGTH, HID_FEATURE_REPORT,
@@ -262,7 +259,7 @@ static int cp2112_gpio_get_all(struct gpio_chip *chip) · 7 unmodified lines
262 ret = buf[1];259 ret = buf[1];
263 260
264exit:261exit:
265 spin_unlock_irqrestore(&dev->lock, flags);262 mutex_unlock(&dev->lock);
266 263
267 return ret;264 return ret;
268}265}
@@ -284,10 +281,9 @@ static int cp2112_gpio_direction_output(struct gpio_chip *chip, · 15 unmodified lines
284 struct cp2112_device *dev = gpiochip_get_data(chip);281 struct cp2112_device *dev = gpiochip_get_data(chip);
285 struct hid_device *hdev = dev->hdev;282 struct hid_device *hdev = dev->hdev;
286 u8 *buf = dev->in_out_buffer;283 u8 *buf = dev->in_out_buffer;
287 unsigned long flags;
288 int ret;284 int ret;
289 285
290 spin_lock_irqsave(&dev->lock, flags);286 mutex_lock(&dev->lock);
291 287
292 ret = hid_hw_raw_request(hdev, CP2112_GPIO_CONFIG, buf,288 ret = hid_hw_raw_request(hdev, CP2112_GPIO_CONFIG, buf,
293 CP2112_GPIO_CONFIG_LENGTH, HID_FEATURE_REPORT,289 CP2112_GPIO_CONFIG_LENGTH, HID_FEATURE_REPORT,
@@ -308,7 +304,7 @@ static int cp2112_gpio_direction_output(struct gpio_chip *chip, · 14 unmodified lines
308 goto fail;304 goto fail;
309 }305 }
310 306
311 spin_unlock_irqrestore(&dev->lock, flags);307 mutex_unlock(&dev->lock);
312 308
313 /*309 /*
314 * Set gpio value when output direction is already set,310 * Set gpio value when output direction is already set,
@@ -319,7 +315,7 @@ static int cp2112_gpio_direction_output(struct gpio_chip *chip, · 4 unmodified lines
319 return 0;315 return 0;
320 316
321fail:317fail:
322 spin_unlock_irqrestore(&dev->lock, flags);318 mutex_unlock(&dev->lock);
323 return ret < 0 ? ret : -EIO;319 return ret < 0 ? ret : -EIO;
324}320}
325 321
@@ -1235,7 +1231,7 @@ static int cp2112_probe(struct hid_device *hdev, const struct hid_device_id *id) · 909 unmodified lines
1235 if (!dev->in_out_buffer)1231 if (!dev->in_out_buffer)
1236 return -ENOMEM;1232 return -ENOMEM;
1237 1233
1238 spin_lock_init(&dev->lock);1234 mutex_init(&dev->lock);
1239 1235
1240 ret = hid_parse(hdev);1236 ret = hid_parse(hdev);
1241 if (ret) {1237 if (ret) {
drivers/hid/hid-ids.h+3−0
@@ -76,6 +76,9 @@ · 75 unmodified lines
76#define USB_VENDOR_ID_ALPS_JP 0x044E76#define USB_VENDOR_ID_ALPS_JP 0x044E
77#define HID_DEVICE_ID_ALPS_U1_DUAL 0x120B77#define HID_DEVICE_ID_ALPS_U1_DUAL 0x120B
78 78
79#define USB_VENDOR_ID_AMI 0x046b
80#define USB_DEVICE_ID_AMI_VIRT_KEYBOARD_AND_MOUSE 0xff10
81
79#define USB_VENDOR_ID_ANTON 0x113082#define USB_VENDOR_ID_ANTON 0x1130
80#define USB_DEVICE_ID_ANTON_TOUCH_PAD 0x310183#define USB_DEVICE_ID_ANTON_TOUCH_PAD 0x3101
81 84
drivers/hid/hid-lg.c+1−1
@@ -872,7 +872,7 @@ static const struct hid_device_id lg_devices[] = { · 871 unmodified lines
872 { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_WINGMAN_FFG),872 { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_WINGMAN_FFG),
873 .driver_data = LG_NOGET | LG_FF4 },873 .driver_data = LG_NOGET | LG_FF4 },
874 { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_RUMBLEPAD2),874 { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_RUMBLEPAD2),
875 .driver_data = LG_FF2 },875 .driver_data = LG_NOGET | LG_FF2 },
876 { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_FLIGHT_SYSTEM_G940),876 { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_FLIGHT_SYSTEM_G940),
877 .driver_data = LG_FF3 },877 .driver_data = LG_FF3 },
878 { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_SPACENAVIGATOR),878 { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_SPACENAVIGATOR),
drivers/hid/usbhid/hid-quirks.c+1−0
@@ -57,6 +57,7 @@ static const struct hid_blacklist { · 56 unmodified lines
57 { USB_VENDOR_ID_AIREN, USB_DEVICE_ID_AIREN_SLIMPLUS, HID_QUIRK_NOGET },57 { USB_VENDOR_ID_AIREN, USB_DEVICE_ID_AIREN_SLIMPLUS, HID_QUIRK_NOGET },
58 { USB_VENDOR_ID_AKAI, USB_DEVICE_ID_AKAI_MPKMINI2, HID_QUIRK_NO_INIT_REPORTS },58 { USB_VENDOR_ID_AKAI, USB_DEVICE_ID_AKAI_MPKMINI2, HID_QUIRK_NO_INIT_REPORTS },
59 { USB_VENDOR_ID_AKAI_09E8, USB_DEVICE_ID_AKAI_09E8_MIDIMIX, HID_QUIRK_NO_INIT_REPORTS },59 { USB_VENDOR_ID_AKAI_09E8, USB_DEVICE_ID_AKAI_09E8_MIDIMIX, HID_QUIRK_NO_INIT_REPORTS },
60 { USB_VENDOR_ID_AMI, USB_DEVICE_ID_AMI_VIRT_KEYBOARD_AND_MOUSE, HID_QUIRK_ALWAYS_POLL },
60 { USB_VENDOR_ID_ATEN, USB_DEVICE_ID_ATEN_UC100KM, HID_QUIRK_NOGET },61 { USB_VENDOR_ID_ATEN, USB_DEVICE_ID_ATEN_UC100KM, HID_QUIRK_NOGET },
61 { USB_VENDOR_ID_ATEN, USB_DEVICE_ID_ATEN_CS124U, HID_QUIRK_NOGET },62 { USB_VENDOR_ID_ATEN, USB_DEVICE_ID_ATEN_CS124U, HID_QUIRK_NOGET },
62 { USB_VENDOR_ID_ATEN, USB_DEVICE_ID_ATEN_2PORTKVM, HID_QUIRK_NOGET },63 { USB_VENDOR_ID_ATEN, USB_DEVICE_ID_ATEN_2PORTKVM, HID_QUIRK_NOGET },
drivers/hid/wacom_wac.c+15−13
@@ -166,19 +166,21 @@ static int wacom_pl_irq(struct wacom_wac *wacom) · 165 unmodified lines
166 wacom->id[0] = STYLUS_DEVICE_ID;166 wacom->id[0] = STYLUS_DEVICE_ID;
167 }167 }
168 168
169 pressure = (signed char)((data[7] << 1) | ((data[4] >> 2) & 1));169 if (prox) {
170 if (features->pressure_max > 255)170 pressure = (signed char)((data[7] << 1) | ((data[4] >> 2) & 1));
171 pressure = (pressure << 1) | ((data[4] >> 6) & 1);171 if (features->pressure_max > 255)
172 pressure += (features->pressure_max + 1) / 2;172 pressure = (pressure << 1) | ((data[4] >> 6) & 1);
173 173 pressure += (features->pressure_max + 1) / 2;
174 input_report_abs(input, ABS_X, data[3] | (data[2] << 7) | ((data[1] & 0x03) << 14));174
175 input_report_abs(input, ABS_Y, data[6] | (data[5] << 7) | ((data[4] & 0x03) << 14));175 input_report_abs(input, ABS_X, data[3] | (data[2] << 7) | ((data[1] & 0x03) << 14));
176 input_report_abs(input, ABS_PRESSURE, pressure);176 input_report_abs(input, ABS_Y, data[6] | (data[5] << 7) | ((data[4] & 0x03) << 14));
177 177 input_report_abs(input, ABS_PRESSURE, pressure);
178 input_report_key(input, BTN_TOUCH, data[4] & 0x08);178
179 input_report_key(input, BTN_STYLUS, data[4] & 0x10);179 input_report_key(input, BTN_TOUCH, data[4] & 0x08);
180 /* Only allow the stylus2 button to be reported for the pen tool. */180 input_report_key(input, BTN_STYLUS, data[4] & 0x10);
181 input_report_key(input, BTN_STYLUS2, (wacom->tool[0] == BTN_TOOL_PEN) && (data[4] & 0x20));181 /* Only allow the stylus2 button to be reported for the pen tool. */
182 input_report_key(input, BTN_STYLUS2, (wacom->tool[0] == BTN_TOOL_PEN) && (data[4] & 0x20));
183 }
182 184
183 if (!prox)185 if (!prox)
184 wacom->id[0] = 0;186 wacom->id[0] = 0;
drivers/hv/ring_buffer.c+1−0
@@ -383,6 +383,7 @@ int hv_ringbuffer_read(struct vmbus_channel *channel, · 382 unmodified lines
383 return ret;383 return ret;
384 }384 }
385 385
386 init_cached_read_index(channel);
386 next_read_location = hv_get_next_read_location(inring_info);387 next_read_location = hv_get_next_read_location(inring_info);
387 next_read_location = hv_copyfrom_ringbuffer(inring_info, &desc,388 next_read_location = hv_copyfrom_ringbuffer(inring_info, &desc,
388 sizeof(desc),389 sizeof(desc),
drivers/iio/adc/palmas_gpadc.c+2−2
@@ -775,7 +775,7 @@ static int palmas_adc_wakeup_reset(struct palmas_gpadc *adc) · 774 unmodified lines
775 775
776static int palmas_gpadc_suspend(struct device *dev)776static int palmas_gpadc_suspend(struct device *dev)
777{777{
778 struct iio_dev *indio_dev = dev_to_iio_dev(dev);778 struct iio_dev *indio_dev = dev_get_drvdata(dev);
779 struct palmas_gpadc *adc = iio_priv(indio_dev);779 struct palmas_gpadc *adc = iio_priv(indio_dev);
780 int wakeup = adc->wakeup1_enable || adc->wakeup2_enable;780 int wakeup = adc->wakeup1_enable || adc->wakeup2_enable;
781 int ret;781 int ret;
@@ -798,7 +798,7 @@ static int palmas_gpadc_suspend(struct device *dev) · 16 unmodified lines
798 798
799static int palmas_gpadc_resume(struct device *dev)799static int palmas_gpadc_resume(struct device *dev)
800{800{
801 struct iio_dev *indio_dev = dev_to_iio_dev(dev);801 struct iio_dev *indio_dev = dev_get_drvdata(dev);
802 struct palmas_gpadc *adc = iio_priv(indio_dev);802 struct palmas_gpadc *adc = iio_priv(indio_dev);
803 int wakeup = adc->wakeup1_enable || adc->wakeup2_enable;803 int wakeup = adc->wakeup1_enable || adc->wakeup2_enable;
804 int ret;804 int ret;
drivers/iio/health/afe4403.c+2−2
@@ -422,7 +422,7 @@ MODULE_DEVICE_TABLE(of, afe4403_of_match); · 421 unmodified lines
422 422
423static int __maybe_unused afe4403_suspend(struct device *dev)423static int __maybe_unused afe4403_suspend(struct device *dev)
424{424{
425 struct iio_dev *indio_dev = dev_to_iio_dev(dev);425 struct iio_dev *indio_dev = spi_get_drvdata(to_spi_device(dev));
426 struct afe4403_data *afe = iio_priv(indio_dev);426 struct afe4403_data *afe = iio_priv(indio_dev);
427 int ret;427 int ret;
428 428
@@ -443,7 +443,7 @@ static int __maybe_unused afe4403_suspend(struct device *dev) · 14 unmodified lines
443 443
444static int __maybe_unused afe4403_resume(struct device *dev)444static int __maybe_unused afe4403_resume(struct device *dev)
445{445{
446 struct iio_dev *indio_dev = dev_to_iio_dev(dev);446 struct iio_dev *indio_dev = spi_get_drvdata(to_spi_device(dev));
447 struct afe4403_data *afe = iio_priv(indio_dev);447 struct afe4403_data *afe = iio_priv(indio_dev);
448 int ret;448 int ret;
449 449
drivers/iio/health/afe4404.c+2−2
@@ -428,7 +428,7 @@ MODULE_DEVICE_TABLE(of, afe4404_of_match); · 427 unmodified lines
428 428
429static int __maybe_unused afe4404_suspend(struct device *dev)429static int __maybe_unused afe4404_suspend(struct device *dev)
430{430{
431 struct iio_dev *indio_dev = dev_to_iio_dev(dev);431 struct iio_dev *indio_dev = i2c_get_clientdata(to_i2c_client(dev));
432 struct afe4404_data *afe = iio_priv(indio_dev);432 struct afe4404_data *afe = iio_priv(indio_dev);
433 int ret;433 int ret;
434 434
@@ -449,7 +449,7 @@ static int __maybe_unused afe4404_suspend(struct device *dev) · 14 unmodified lines
449 449
450static int __maybe_unused afe4404_resume(struct device *dev)450static int __maybe_unused afe4404_resume(struct device *dev)
451{451{
452 struct iio_dev *indio_dev = dev_to_iio_dev(dev);452 struct iio_dev *indio_dev = i2c_get_clientdata(to_i2c_client(dev));
453 struct afe4404_data *afe = iio_priv(indio_dev);453 struct afe4404_data *afe = iio_priv(indio_dev);
454 int ret;454 int ret;
455 455
drivers/iio/health/max30100.c+1−1
@@ -238,7 +238,7 @@ static irqreturn_t max30100_interrupt_handler(int irq, void *private) · 237 unmodified lines
238 238
239 mutex_lock(&data->lock);239 mutex_lock(&data->lock);
240 240
241 while (cnt || (cnt = max30100_fifo_count(data) > 0)) {241 while (cnt || (cnt = max30100_fifo_count(data)) > 0) {
242 ret = max30100_read_measurement(data);242 ret = max30100_read_measurement(data);
243 if (ret)243 if (ret)
244 break;244 break;
drivers/iio/humidity/dht11.c+4−2
@@ -71,7 +71,8 @@ · 70 unmodified lines
71 * a) select an implementation using busy loop polling on those systems71 * a) select an implementation using busy loop polling on those systems
72 * b) use the checksum to do some probabilistic decoding72 * b) use the checksum to do some probabilistic decoding
73 */73 */
74#define DHT11_START_TRANSMISSION 18 /* ms */74#define DHT11_START_TRANSMISSION_MIN 18000 /* us */
75#define DHT11_START_TRANSMISSION_MAX 20000 /* us */
75#define DHT11_MIN_TIMERES 34000 /* ns */76#define DHT11_MIN_TIMERES 34000 /* ns */
76#define DHT11_THRESHOLD 49000 /* ns */77#define DHT11_THRESHOLD 49000 /* ns */
77#define DHT11_AMBIG_LOW 23000 /* ns */78#define DHT11_AMBIG_LOW 23000 /* ns */
@@ -228,7 +229,8 @@ static int dht11_read_raw(struct iio_dev *iio_dev, · 150 unmodified lines
228 ret = gpio_direction_output(dht11->gpio, 0);229 ret = gpio_direction_output(dht11->gpio, 0);
229 if (ret)230 if (ret)
230 goto err;231 goto err;
231 msleep(DHT11_START_TRANSMISSION);232 usleep_range(DHT11_START_TRANSMISSION_MIN,
233 DHT11_START_TRANSMISSION_MAX);
232 ret = gpio_direction_input(dht11->gpio);234 ret = gpio_direction_input(dht11->gpio);
233 if (ret)235 if (ret)
234 goto err;236 goto err;
drivers/input/rmi4/rmi_driver.c+2−2
@@ -901,7 +901,7 @@ void rmi_enable_irq(struct rmi_device *rmi_dev, bool clear_wake) · 900 unmodified lines
901 data->enabled = true;901 data->enabled = true;
902 if (clear_wake && device_may_wakeup(rmi_dev->xport->dev)) {902 if (clear_wake && device_may_wakeup(rmi_dev->xport->dev)) {
903 retval = disable_irq_wake(irq);903 retval = disable_irq_wake(irq);
904 if (!retval)904 if (retval)
905 dev_warn(&rmi_dev->dev,905 dev_warn(&rmi_dev->dev,
906 "Failed to disable irq for wake: %d\n",906 "Failed to disable irq for wake: %d\n",
907 retval);907 retval);
@@ -936,7 +936,7 @@ void rmi_disable_irq(struct rmi_device *rmi_dev, bool enable_wake) · 28 unmodified lines
936 disable_irq(irq);936 disable_irq(irq);
937 if (enable_wake && device_may_wakeup(rmi_dev->xport->dev)) {937 if (enable_wake && device_may_wakeup(rmi_dev->xport->dev)) {
938 retval = enable_irq_wake(irq);938 retval = enable_irq_wake(irq);
939 if (!retval)939 if (retval)
940 dev_warn(&rmi_dev->dev,940 dev_warn(&rmi_dev->dev,
941 "Failed to enable irq for wake: %d\n",941 "Failed to enable irq for wake: %d\n",
942 retval);942 retval);
drivers/input/touchscreen/wm97xx-core.c+1−1
@@ -682,7 +682,7 @@ static int wm97xx_probe(struct device *dev) · 681 unmodified lines
682 }682 }
683 platform_set_drvdata(wm->battery_dev, wm);683 platform_set_drvdata(wm->battery_dev, wm);
684 wm->battery_dev->dev.parent = dev;684 wm->battery_dev->dev.parent = dev;
685 wm->battery_dev->dev.platform_data = pdata->batt_pdata;685 wm->battery_dev->dev.platform_data = pdata ? pdata->batt_pdata : NULL;
686 ret = platform_device_add(wm->battery_dev);686 ret = platform_device_add(wm->battery_dev);
687 if (ret < 0)687 if (ret < 0)
688 goto batt_reg_err;688 goto batt_reg_err;
drivers/mmc/host/sdhci.c+2−1
@@ -2733,7 +2733,8 @@ static irqreturn_t sdhci_irq(int irq, void *dev_id) · 2732 unmodified lines
2733 if (intmask & SDHCI_INT_RETUNE)2733 if (intmask & SDHCI_INT_RETUNE)
2734 mmc_retune_needed(host->mmc);2734 mmc_retune_needed(host->mmc);
2735 2735
2736 if (intmask & SDHCI_INT_CARD_INT) {2736 if ((intmask & SDHCI_INT_CARD_INT) &&
2737 (host->ier & SDHCI_INT_CARD_INT)) {
2737 sdhci_enable_sdio_irq_nolock(host, false);2738 sdhci_enable_sdio_irq_nolock(host, false);
2738 host->thread_isr |= SDHCI_INT_CARD_INT;2739 host->thread_isr |= SDHCI_INT_CARD_INT;
2739 result = IRQ_WAKE_THREAD;2740 result = IRQ_WAKE_THREAD;
drivers/net/ethernet/adaptec/starfire.c+43−2
@@ -1152,6 +1152,12 @@ static void init_ring(struct net_device *dev) · 1151 unmodified lines
1152 if (skb == NULL)1152 if (skb == NULL)
1153 break;1153 break;
1154 np->rx_info[i].mapping = pci_map_single(np->pci_dev, skb->data, np->rx_buf_sz, PCI_DMA_FROMDEVICE);1154 np->rx_info[i].mapping = pci_map_single(np->pci_dev, skb->data, np->rx_buf_sz, PCI_DMA_FROMDEVICE);
1155 if (pci_dma_mapping_error(np->pci_dev,
1156 np->rx_info[i].mapping)) {
1157 dev_kfree_skb(skb);
1158 np->rx_info[i].skb = NULL;
1159 break;
1160 }
1155 /* Grrr, we cannot offset to correctly align the IP header. */1161 /* Grrr, we cannot offset to correctly align the IP header. */
1156 np->rx_ring[i].rxaddr = cpu_to_dma(np->rx_info[i].mapping | RxDescValid);1162 np->rx_ring[i].rxaddr = cpu_to_dma(np->rx_info[i].mapping | RxDescValid);
1157 }1163 }
@@ -1182,8 +1188,9 @@ static netdev_tx_t start_tx(struct sk_buff *skb, struct net_device *dev) · 24 unmodified lines
1182{1188{
1183 struct netdev_private *np = netdev_priv(dev);1189 struct netdev_private *np = netdev_priv(dev);
1184 unsigned int entry;1190 unsigned int entry;
1191 unsigned int prev_tx;
1185 u32 status;1192 u32 status;
1186 int i;1193 int i, j;
1187 1194
1188 /*1195 /*
1189 * be cautious here, wrapping the queue has weird semantics1196 * be cautious here, wrapping the queue has weird semantics
@@ -1201,6 +1208,7 @@ static netdev_tx_t start_tx(struct sk_buff *skb, struct net_device *dev) · 11 unmodified lines
1201 }1208 }
1202#endif /* ZEROCOPY && HAS_BROKEN_FIRMWARE */1209#endif /* ZEROCOPY && HAS_BROKEN_FIRMWARE */
1203 1210
1211 prev_tx = np->cur_tx;
1204 entry = np->cur_tx % TX_RING_SIZE;1212 entry = np->cur_tx % TX_RING_SIZE;
1205 for (i = 0; i < skb_num_frags(skb); i++) {1213 for (i = 0; i < skb_num_frags(skb); i++) {
1206 int wrap_ring = 0;1214 int wrap_ring = 0;
@@ -1234,6 +1242,11 @@ static netdev_tx_t start_tx(struct sk_buff *skb, struct net_device *dev) · 27 unmodified lines
1234 skb_frag_size(this_frag),1242 skb_frag_size(this_frag),
1235 PCI_DMA_TODEVICE);1243 PCI_DMA_TODEVICE);
1236 }1244 }
1245 if (pci_dma_mapping_error(np->pci_dev,
1246 np->tx_info[entry].mapping)) {
1247 dev->stats.tx_dropped++;
1248 goto err_out;
1249 }
1237 1250
1238 np->tx_ring[entry].addr = cpu_to_dma(np->tx_info[entry].mapping);1251 np->tx_ring[entry].addr = cpu_to_dma(np->tx_info[entry].mapping);
1239 np->tx_ring[entry].status = cpu_to_le32(status);1252 np->tx_ring[entry].status = cpu_to_le32(status);
@@ -1268,8 +1281,30 @@ static netdev_tx_t start_tx(struct sk_buff *skb, struct net_device *dev) · 28 unmodified lines
1268 netif_stop_queue(dev);1281 netif_stop_queue(dev);
1269 1282
1270 return NETDEV_TX_OK;1283 return NETDEV_TX_OK;
1271}
1272 1284
1285err_out:
1286 entry = prev_tx % TX_RING_SIZE;
1287 np->tx_info[entry].skb = NULL;
1288 if (i > 0) {
1289 pci_unmap_single(np->pci_dev,
1290 np->tx_info[entry].mapping,
1291 skb_first_frag_len(skb),
1292 PCI_DMA_TODEVICE);
1293 np->tx_info[entry].mapping = 0;
1294 entry = (entry + np->tx_info[entry].used_slots) % TX_RING_SIZE;
1295 for (j = 1; j < i; j++) {
1296 pci_unmap_single(np->pci_dev,
1297 np->tx_info[entry].mapping,
1298 skb_frag_size(
1299 &skb_shinfo(skb)->frags[j-1]),
1300 PCI_DMA_TODEVICE);
1301 entry++;
1302 }
1303 }
1304 dev_kfree_skb_any(skb);
1305 np->cur_tx = prev_tx;
1306 return NETDEV_TX_OK;
1307}
1273 1308
1274/* The interrupt handler does all of the Rx thread work and cleans up1309/* The interrupt handler does all of the Rx thread work and cleans up
1275 after the Tx thread. */1310 after the Tx thread. */
@@ -1569,6 +1604,12 @@ static void refill_rx_ring(struct net_device *dev) · 293 unmodified lines
1569 break; /* Better luck next round. */1604 break; /* Better luck next round. */
1570 np->rx_info[entry].mapping =1605 np->rx_info[entry].mapping =
1571 pci_map_single(np->pci_dev, skb->data, np->rx_buf_sz, PCI_DMA_FROMDEVICE);1606 pci_map_single(np->pci_dev, skb->data, np->rx_buf_sz, PCI_DMA_FROMDEVICE);
1607 if (pci_dma_mapping_error(np->pci_dev,
1608 np->rx_info[entry].mapping)) {
1609 dev_kfree_skb(skb);
1610 np->rx_info[entry].skb = NULL;
1611 break;
1612 }
1572 np->rx_ring[entry].rxaddr =1613 np->rx_ring[entry].rxaddr =
1573 cpu_to_dma(np->rx_info[entry].mapping | RxDescValid);1614 cpu_to_dma(np->rx_info[entry].mapping | RxDescValid);
1574 }1615 }
drivers/net/ethernet/cadence/macb.c+130−58
@@ -43,13 +43,13 @@ · 42 unmodified lines
43#define DEFAULT_RX_RING_SIZE 512 /* must be power of 2 */43#define DEFAULT_RX_RING_SIZE 512 /* must be power of 2 */
44#define MIN_RX_RING_SIZE 6444#define MIN_RX_RING_SIZE 64
45#define MAX_RX_RING_SIZE 819245#define MAX_RX_RING_SIZE 8192
46#define RX_RING_BYTES(bp) (sizeof(struct macb_dma_desc) \46#define RX_RING_BYTES(bp) (macb_dma_desc_get_size(bp) \
47 * (bp)->rx_ring_size)47 * (bp)->rx_ring_size)
48 48
49#define DEFAULT_TX_RING_SIZE 512 /* must be power of 2 */49#define DEFAULT_TX_RING_SIZE 512 /* must be power of 2 */
50#define MIN_TX_RING_SIZE 6450#define MIN_TX_RING_SIZE 64
51#define MAX_TX_RING_SIZE 409651#define MAX_TX_RING_SIZE 4096
52#define TX_RING_BYTES(bp) (sizeof(struct macb_dma_desc) \52#define TX_RING_BYTES(bp) (macb_dma_desc_get_size(bp) \
53 * (bp)->tx_ring_size)53 * (bp)->tx_ring_size)
54 54
55/* level of occupied TX descriptors under which we wake up TX process */55/* level of occupied TX descriptors under which we wake up TX process */
@@ -78,6 +78,37 @@ · 22 unmodified lines
78 */78 */
79#define MACB_HALT_TIMEOUT 123079#define MACB_HALT_TIMEOUT 1230
80 80
81/* DMA buffer descriptor might be different size
82 * depends on hardware configuration.
83 */
84static unsigned int macb_dma_desc_get_size(struct macb *bp)
85{
86#ifdef CONFIG_ARCH_DMA_ADDR_T_64BIT
87 if (bp->hw_dma_cap == HW_DMA_CAP_64B)
88 return sizeof(struct macb_dma_desc) + sizeof(struct macb_dma_desc_64);
89#endif
90 return sizeof(struct macb_dma_desc);
91}
92
93static unsigned int macb_adj_dma_desc_idx(struct macb *bp, unsigned int idx)
94{
95#ifdef CONFIG_ARCH_DMA_ADDR_T_64BIT
96 /* Dma buffer descriptor is 4 words length (instead of 2 words)
97 * for 64b GEM.
98 */
99 if (bp->hw_dma_cap == HW_DMA_CAP_64B)
100 idx <<= 1;
101#endif
102 return idx;
103}
104
105#ifdef CONFIG_ARCH_DMA_ADDR_T_64BIT
106static struct macb_dma_desc_64 *macb_64b_desc(struct macb *bp, struct macb_dma_desc *desc)
107{
108 return (struct macb_dma_desc_64 *)((void *)desc + sizeof(struct macb_dma_desc));
109}
110#endif
111
81/* Ring buffer accessors */112/* Ring buffer accessors */
82static unsigned int macb_tx_ring_wrap(struct macb *bp, unsigned int index)113static unsigned int macb_tx_ring_wrap(struct macb *bp, unsigned int index)
83{114{
@@ -87,7 +118,9 @@ static unsigned int macb_tx_ring_wrap(struct macb *bp, unsigned int index) · 3 unmodified lines
87static struct macb_dma_desc *macb_tx_desc(struct macb_queue *queue,118static struct macb_dma_desc *macb_tx_desc(struct macb_queue *queue,
88 unsigned int index)119 unsigned int index)
89{120{
90 return &queue->tx_ring[macb_tx_ring_wrap(queue->bp, index)];121 index = macb_tx_ring_wrap(queue->bp, index);
122 index = macb_adj_dma_desc_idx(queue->bp, index);
123 return &queue->tx_ring[index];
91}124}
92 125
93static struct macb_tx_skb *macb_tx_skb(struct macb_queue *queue,126static struct macb_tx_skb *macb_tx_skb(struct macb_queue *queue,
@@ -101,7 +134,7 @@ static dma_addr_t macb_tx_dma(struct macb_queue *queue, unsigned int index) · 7 unmodified lines
101 dma_addr_t offset;134 dma_addr_t offset;
102 135
103 offset = macb_tx_ring_wrap(queue->bp, index) *136 offset = macb_tx_ring_wrap(queue->bp, index) *
104 sizeof(struct macb_dma_desc);137 macb_dma_desc_get_size(queue->bp);
105 138
106 return queue->tx_ring_dma + offset;139 return queue->tx_ring_dma + offset;
107}140}
@@ -113,7 +146,9 @@ static unsigned int macb_rx_ring_wrap(struct macb *bp, unsigned int index) · 5 unmodified lines
113 146
114static struct macb_dma_desc *macb_rx_desc(struct macb *bp, unsigned int index)147static struct macb_dma_desc *macb_rx_desc(struct macb *bp, unsigned int index)
115{148{
116 return &bp->rx_ring[macb_rx_ring_wrap(bp, index)];149 index = macb_rx_ring_wrap(bp, index);
150 index = macb_adj_dma_desc_idx(bp, index);
151 return &bp->rx_ring[index];
117}152}
118 153
119static void *macb_rx_buffer(struct macb *bp, unsigned int index)154static void *macb_rx_buffer(struct macb *bp, unsigned int index)
@@ -560,12 +595,32 @@ static void macb_tx_unmap(struct macb *bp, struct macb_tx_skb *tx_skb) · 440 unmodified lines
560 }595 }
561}596}
562 597
563static inline void macb_set_addr(struct macb_dma_desc *desc, dma_addr_t addr)598static void macb_set_addr(struct macb *bp, struct macb_dma_desc *desc, dma_addr_t addr)
564{599{
565 desc->addr = (u32)addr;
566#ifdef CONFIG_ARCH_DMA_ADDR_T_64BIT600#ifdef CONFIG_ARCH_DMA_ADDR_T_64BIT
567 desc->addrh = (u32)(addr >> 32);601 struct macb_dma_desc_64 *desc_64;
602
603 if (bp->hw_dma_cap == HW_DMA_CAP_64B) {
604 desc_64 = macb_64b_desc(bp, desc);
605 desc_64->addrh = upper_32_bits(addr);
606 }
568#endif607#endif
608 desc->addr = lower_32_bits(addr);
609}
610
611static dma_addr_t macb_get_addr(struct macb *bp, struct macb_dma_desc *desc)
612{
613 dma_addr_t addr = 0;
614#ifdef CONFIG_ARCH_DMA_ADDR_T_64BIT
615 struct macb_dma_desc_64 *desc_64;
616
617 if (bp->hw_dma_cap == HW_DMA_CAP_64B) {
618 desc_64 = macb_64b_desc(bp, desc);
619 addr = ((u64)(desc_64->addrh) << 32);
620 }
621#endif
622 addr |= MACB_BF(RX_WADDR, MACB_BFEXT(RX_WADDR, desc->addr));
623 return addr;
569}624}
570 625
571static void macb_tx_error_task(struct work_struct *work)626static void macb_tx_error_task(struct work_struct *work)
@@ -649,16 +704,17 @@ static void macb_tx_error_task(struct work_struct *work) · 77 unmodified lines
649 704
650 /* Set end of TX queue */705 /* Set end of TX queue */
651 desc = macb_tx_desc(queue, 0);706 desc = macb_tx_desc(queue, 0);
652 macb_set_addr(desc, 0);707 macb_set_addr(bp, desc, 0);
653 desc->ctrl = MACB_BIT(TX_USED);708 desc->ctrl = MACB_BIT(TX_USED);
654 709
655 /* Make descriptor updates visible to hardware */710 /* Make descriptor updates visible to hardware */
656 wmb();711 wmb();
657 712
658 /* Reinitialize the TX desc queue */713 /* Reinitialize the TX desc queue */
659 queue_writel(queue, TBQP, (u32)(queue->tx_ring_dma));714 queue_writel(queue, TBQP, lower_32_bits(queue->tx_ring_dma));
660#ifdef CONFIG_ARCH_DMA_ADDR_T_64BIT715#ifdef CONFIG_ARCH_DMA_ADDR_T_64BIT
661 queue_writel(queue, TBQPH, (u32)(queue->tx_ring_dma >> 32));716 if (bp->hw_dma_cap == HW_DMA_CAP_64B)
717 queue_writel(queue, TBQPH, upper_32_bits(queue->tx_ring_dma));
662#endif718#endif
663 /* Make TX ring reflect state of hardware */719 /* Make TX ring reflect state of hardware */
664 queue->tx_head = 0;720 queue->tx_head = 0;
@@ -750,6 +806,7 @@ static void gem_rx_refill(struct macb *bp) · 85 unmodified lines
750 unsigned int entry;806 unsigned int entry;
751 struct sk_buff *skb;807 struct sk_buff *skb;
752 dma_addr_t paddr;808 dma_addr_t paddr;
809 struct macb_dma_desc *desc;
753 810
754 while (CIRC_SPACE(bp->rx_prepared_head, bp->rx_tail,811 while (CIRC_SPACE(bp->rx_prepared_head, bp->rx_tail,
755 bp->rx_ring_size) > 0) {812 bp->rx_ring_size) > 0) {
@@ -759,6 +816,7 @@ static void gem_rx_refill(struct macb *bp) · 3 unmodified lines
759 rmb();816 rmb();
760 817
761 bp->rx_prepared_head++;818 bp->rx_prepared_head++;
819 desc = macb_rx_desc(bp, entry);
762 820
763 if (!bp->rx_skbuff[entry]) {821 if (!bp->rx_skbuff[entry]) {
764 /* allocate sk_buff for this free entry in ring */822 /* allocate sk_buff for this free entry in ring */
@@ -782,14 +840,14 @@ static void gem_rx_refill(struct macb *bp) · 17 unmodified lines
782 840
783 if (entry == bp->rx_ring_size - 1)841 if (entry == bp->rx_ring_size - 1)
784 paddr |= MACB_BIT(RX_WRAP);842 paddr |= MACB_BIT(RX_WRAP);
785 macb_set_addr(&(bp->rx_ring[entry]), paddr);843 macb_set_addr(bp, desc, paddr);
786 bp->rx_ring[entry].ctrl = 0;844 desc->ctrl = 0;
787 845
788 /* properly align Ethernet header */846 /* properly align Ethernet header */
789 skb_reserve(skb, NET_IP_ALIGN);847 skb_reserve(skb, NET_IP_ALIGN);
790 } else {848 } else {
791 bp->rx_ring[entry].addr &= ~MACB_BIT(RX_USED);849 desc->addr &= ~MACB_BIT(RX_USED);
792 bp->rx_ring[entry].ctrl = 0;850 desc->ctrl = 0;
793 }851 }
794 }852 }
795 853
@@ -835,16 +893,13 @@ static int gem_rx(struct macb *bp, int budget) · 39 unmodified lines
835 bool rxused;893 bool rxused;
836 894
837 entry = macb_rx_ring_wrap(bp, bp->rx_tail);895 entry = macb_rx_ring_wrap(bp, bp->rx_tail);
838 desc = &bp->rx_ring[entry];896 desc = macb_rx_desc(bp, entry);
839 897
840 /* Make hw descriptor updates visible to CPU */898 /* Make hw descriptor updates visible to CPU */
841 rmb();899 rmb();
842 900
843 rxused = (desc->addr & MACB_BIT(RX_USED)) ? true : false;901 rxused = (desc->addr & MACB_BIT(RX_USED)) ? true : false;
844 addr = MACB_BF(RX_WADDR, MACB_BFEXT(RX_WADDR, desc->addr));902 addr = macb_get_addr(bp, desc);
845#ifdef CONFIG_ARCH_DMA_ADDR_T_64BIT
846 addr |= ((u64)(desc->addrh) << 32);
847#endif
848 ctrl = desc->ctrl;903 ctrl = desc->ctrl;
849 904
850 if (!rxused)905 if (!rxused)
@@ -987,15 +1042,17 @@ static int macb_rx_frame(struct macb *bp, unsigned int first_frag, · 136 unmodified lines
987static inline void macb_init_rx_ring(struct macb *bp)1042static inline void macb_init_rx_ring(struct macb *bp)
988{1043{
989 dma_addr_t addr;1044 dma_addr_t addr;
1045 struct macb_dma_desc *desc = NULL;
990 int i;1046 int i;
991 1047
992 addr = bp->rx_buffers_dma;1048 addr = bp->rx_buffers_dma;
993 for (i = 0; i < bp->rx_ring_size; i++) {1049 for (i = 0; i < bp->rx_ring_size; i++) {
994 bp->rx_ring[i].addr = addr;1050 desc = macb_rx_desc(bp, i);
995 bp->rx_ring[i].ctrl = 0;1051 macb_set_addr(bp, desc, addr);
1052 desc->ctrl = 0;
996 addr += bp->rx_buffer_size;1053 addr += bp->rx_buffer_size;
997 }1054 }
998 bp->rx_ring[bp->rx_ring_size - 1].addr |= MACB_BIT(RX_WRAP);1055 desc->addr |= MACB_BIT(RX_WRAP);
999 bp->rx_tail = 0;1056 bp->rx_tail = 0;
1000}1057}
1001 1058
@@ -1008,15 +1065,14 @@ static int macb_rx(struct macb *bp, int budget) · 6 unmodified lines
1008 1065
1009 for (tail = bp->rx_tail; budget > 0; tail++) {1066 for (tail = bp->rx_tail; budget > 0; tail++) {
1010 struct macb_dma_desc *desc = macb_rx_desc(bp, tail);1067 struct macb_dma_desc *desc = macb_rx_desc(bp, tail);
1011 u32 addr, ctrl;1068 u32 ctrl;
1012 1069
1013 /* Make hw descriptor updates visible to CPU */1070 /* Make hw descriptor updates visible to CPU */
1014 rmb();1071 rmb();
1015 1072
1016 addr = desc->addr;
1017 ctrl = desc->ctrl;1073 ctrl = desc->ctrl;
1018 1074
1019 if (!(addr & MACB_BIT(RX_USED)))1075 if (!(desc->addr & MACB_BIT(RX_USED)))
1020 break;1076 break;
1021 1077
1022 if (ctrl & MACB_BIT(RX_SOF)) {1078 if (ctrl & MACB_BIT(RX_SOF)) {
@@ -1336,7 +1392,7 @@ static unsigned int macb_tx_map(struct macb *bp, · 313 unmodified lines
1336 i = tx_head;1392 i = tx_head;
1337 entry = macb_tx_ring_wrap(bp, i);1393 entry = macb_tx_ring_wrap(bp, i);
1338 ctrl = MACB_BIT(TX_USED);1394 ctrl = MACB_BIT(TX_USED);
1339 desc = &queue->tx_ring[entry];1395 desc = macb_tx_desc(queue, entry);
1340 desc->ctrl = ctrl;1396 desc->ctrl = ctrl;
1341 1397
1342 if (lso_ctrl) {1398 if (lso_ctrl) {
@@ -1358,7 +1414,7 @@ static unsigned int macb_tx_map(struct macb *bp, · 15 unmodified lines
1358 i--;1414 i--;
1359 entry = macb_tx_ring_wrap(bp, i);1415 entry = macb_tx_ring_wrap(bp, i);
1360 tx_skb = &queue->tx_skb[entry];1416 tx_skb = &queue->tx_skb[entry];
1361 desc = &queue->tx_ring[entry];1417 desc = macb_tx_desc(queue, entry);
1362 1418
1363 ctrl = (u32)tx_skb->size;1419 ctrl = (u32)tx_skb->size;
1364 if (eof) {1420 if (eof) {
@@ -1379,7 +1435,7 @@ static unsigned int macb_tx_map(struct macb *bp, · 14 unmodified lines
1379 ctrl |= MACB_BF(MSS_MFS, mss_mfs);1435 ctrl |= MACB_BF(MSS_MFS, mss_mfs);
1380 1436
1381 /* Set TX buffer descriptor */1437 /* Set TX buffer descriptor */
1382 macb_set_addr(desc, tx_skb->mapping);1438 macb_set_addr(bp, desc, tx_skb->mapping);
1383 /* desc->addr must be visible to hardware before clearing1439 /* desc->addr must be visible to hardware before clearing
1384 * 'TX_USED' bit in desc->ctrl.1440 * 'TX_USED' bit in desc->ctrl.
1385 */1441 */
@@ -1586,11 +1642,9 @@ static void gem_free_rx_buffers(struct macb *bp) · 200 unmodified lines
1586 if (!skb)1642 if (!skb)
1587 continue;1643 continue;
1588 1644
1589 desc = &bp->rx_ring[i];1645 desc = macb_rx_desc(bp, i);
1590 addr = MACB_BF(RX_WADDR, MACB_BFEXT(RX_WADDR, desc->addr));1646 addr = macb_get_addr(bp, desc);
1591#ifdef CONFIG_ARCH_DMA_ADDR_T_64BIT1647
1592 addr |= ((u64)(desc->addrh) << 32);
1593#endif
1594 dma_unmap_single(&bp->pdev->dev, addr, bp->rx_buffer_size,1648 dma_unmap_single(&bp->pdev->dev, addr, bp->rx_buffer_size,
1595 DMA_FROM_DEVICE);1649 DMA_FROM_DEVICE);
1596 dev_kfree_skb_any(skb);1650 dev_kfree_skb_any(skb);
@@ -1711,15 +1765,17 @@ out_err: · 114 unmodified lines
1711static void gem_init_rings(struct macb *bp)1765static void gem_init_rings(struct macb *bp)
1712{1766{
1713 struct macb_queue *queue;1767 struct macb_queue *queue;
1768 struct macb_dma_desc *desc = NULL;
1714 unsigned int q;1769 unsigned int q;
1715 int i;1770 int i;
1716 1771
1717 for (q = 0, queue = bp->queues; q < bp->num_queues; ++q, ++queue) {1772 for (q = 0, queue = bp->queues; q < bp->num_queues; ++q, ++queue) {
1718 for (i = 0; i < bp->tx_ring_size; i++) {1773 for (i = 0; i < bp->tx_ring_size; i++) {
1719 queue->tx_ring[i].addr = 0;1774 desc = macb_tx_desc(queue, i);
1720 queue->tx_ring[i].ctrl = MACB_BIT(TX_USED);1775 macb_set_addr(bp, desc, 0);
1776 desc->ctrl = MACB_BIT(TX_USED);
1721 }1777 }
1722 queue->tx_ring[bp->tx_ring_size - 1].ctrl |= MACB_BIT(TX_WRAP);1778 desc->ctrl |= MACB_BIT(TX_WRAP);
1723 queue->tx_head = 0;1779 queue->tx_head = 0;
1724 queue->tx_tail = 0;1780 queue->tx_tail = 0;
1725 }1781 }
@@ -1733,16 +1789,18 @@ static void gem_init_rings(struct macb *bp) · 7 unmodified lines
1733static void macb_init_rings(struct macb *bp)1789static void macb_init_rings(struct macb *bp)
1734{1790{
1735 int i;1791 int i;
1792 struct macb_dma_desc *desc = NULL;
1736 1793
1737 macb_init_rx_ring(bp);1794 macb_init_rx_ring(bp);
1738 1795
1739 for (i = 0; i < bp->tx_ring_size; i++) {1796 for (i = 0; i < bp->tx_ring_size; i++) {
1740 bp->queues[0].tx_ring[i].addr = 0;1797 desc = macb_tx_desc(&bp->queues[0], i);
1741 bp->queues[0].tx_ring[i].ctrl = MACB_BIT(TX_USED);1798 macb_set_addr(bp, desc, 0);
1799 desc->ctrl = MACB_BIT(TX_USED);
1742 }1800 }
1743 bp->queues[0].tx_head = 0;1801 bp->queues[0].tx_head = 0;
1744 bp->queues[0].tx_tail = 0;1802 bp->queues[0].tx_tail = 0;
1745 bp->queues[0].tx_ring[bp->tx_ring_size - 1].ctrl |= MACB_BIT(TX_WRAP);1803 desc->ctrl |= MACB_BIT(TX_WRAP);
1746}1804}
1747 1805
1748static void macb_reset_hw(struct macb *bp)1806static void macb_reset_hw(struct macb *bp)
@@ -1863,7 +1921,8 @@ static void macb_configure_dma(struct macb *bp) · 114 unmodified lines
1863 dmacfg &= ~GEM_BIT(TXCOEN);1921 dmacfg &= ~GEM_BIT(TXCOEN);
1864 1922
1865#ifdef CONFIG_ARCH_DMA_ADDR_T_64BIT1923#ifdef CONFIG_ARCH_DMA_ADDR_T_64BIT
1866 dmacfg |= GEM_BIT(ADDR64);1924 if (bp->hw_dma_cap == HW_DMA_CAP_64B)
1925 dmacfg |= GEM_BIT(ADDR64);
1867#endif1926#endif
1868 netdev_dbg(bp->dev, "Cadence configure DMA with 0x%08x\n",1927 netdev_dbg(bp->dev, "Cadence configure DMA with 0x%08x\n",
1869 dmacfg);1928 dmacfg);
@@ -1910,14 +1969,16 @@ static void macb_init_hw(struct macb *bp) · 40 unmodified lines
1910 macb_configure_dma(bp);1969 macb_configure_dma(bp);
1911 1970
1912 /* Initialize TX and RX buffers */1971 /* Initialize TX and RX buffers */
1913 macb_writel(bp, RBQP, (u32)(bp->rx_ring_dma));1972 macb_writel(bp, RBQP, lower_32_bits(bp->rx_ring_dma));
1914#ifdef CONFIG_ARCH_DMA_ADDR_T_64BIT1973#ifdef CONFIG_ARCH_DMA_ADDR_T_64BIT
1915 macb_writel(bp, RBQPH, (u32)(bp->rx_ring_dma >> 32));1974 if (bp->hw_dma_cap == HW_DMA_CAP_64B)
1975 macb_writel(bp, RBQPH, upper_32_bits(bp->rx_ring_dma));
1916#endif1976#endif
1917 for (q = 0, queue = bp->queues; q < bp->num_queues; ++q, ++queue) {1977 for (q = 0, queue = bp->queues; q < bp->num_queues; ++q, ++queue) {
1918 queue_writel(queue, TBQP, (u32)(queue->tx_ring_dma));1978 queue_writel(queue, TBQP, lower_32_bits(queue->tx_ring_dma));
1919#ifdef CONFIG_ARCH_DMA_ADDR_T_64BIT1979#ifdef CONFIG_ARCH_DMA_ADDR_T_64BIT
1920 queue_writel(queue, TBQPH, (u32)(queue->tx_ring_dma >> 32));1980 if (bp->hw_dma_cap == HW_DMA_CAP_64B)
1981 queue_writel(queue, TBQPH, upper_32_bits(queue->tx_ring_dma));
1921#endif1982#endif
1922 1983
1923 /* Enable interrupts */1984 /* Enable interrupts */
@@ -2627,7 +2688,8 @@ static int macb_init(struct platform_device *pdev) · 703 unmodified lines
2627 queue->IMR = GEM_IMR(hw_q - 1);2688 queue->IMR = GEM_IMR(hw_q - 1);
2628 queue->TBQP = GEM_TBQP(hw_q - 1);2689 queue->TBQP = GEM_TBQP(hw_q - 1);
2629#ifdef CONFIG_ARCH_DMA_ADDR_T_64BIT2690#ifdef CONFIG_ARCH_DMA_ADDR_T_64BIT
2630 queue->TBQPH = GEM_TBQPH(hw_q -1);2691 if (bp->hw_dma_cap == HW_DMA_CAP_64B)
2692 queue->TBQPH = GEM_TBQPH(hw_q - 1);
2631#endif2693#endif
2632 } else {2694 } else {
2633 /* queue0 uses legacy registers */2695 /* queue0 uses legacy registers */
@@ -2637,7 +2699,8 @@ static int macb_init(struct platform_device *pdev) · 3 unmodified lines
2637 queue->IMR = MACB_IMR;2699 queue->IMR = MACB_IMR;
2638 queue->TBQP = MACB_TBQP;2700 queue->TBQP = MACB_TBQP;
2639#ifdef CONFIG_ARCH_DMA_ADDR_T_64BIT2701#ifdef CONFIG_ARCH_DMA_ADDR_T_64BIT
2640 queue->TBQPH = MACB_TBQPH;2702 if (bp->hw_dma_cap == HW_DMA_CAP_64B)
2703 queue->TBQPH = MACB_TBQPH;
2641#endif2704#endif
2642 }2705 }
2643 2706
@@ -2730,13 +2793,14 @@ static int macb_init(struct platform_device *pdev) · 86 unmodified lines
2730static int at91ether_start(struct net_device *dev)2793static int at91ether_start(struct net_device *dev)
2731{2794{
2732 struct macb *lp = netdev_priv(dev);2795 struct macb *lp = netdev_priv(dev);
2796 struct macb_dma_desc *desc;
2733 dma_addr_t addr;2797 dma_addr_t addr;
2734 u32 ctl;2798 u32 ctl;
2735 int i;2799 int i;
2736 2800
2737 lp->rx_ring = dma_alloc_coherent(&lp->pdev->dev,2801 lp->rx_ring = dma_alloc_coherent(&lp->pdev->dev,
2738 (AT91ETHER_MAX_RX_DESCR *2802 (AT91ETHER_MAX_RX_DESCR *
2739 sizeof(struct macb_dma_desc)),2803 macb_dma_desc_get_size(lp)),
2740 &lp->rx_ring_dma, GFP_KERNEL);2804 &lp->rx_ring_dma, GFP_KERNEL);
2741 if (!lp->rx_ring)2805 if (!lp->rx_ring)
2742 return -ENOMEM;2806 return -ENOMEM;
@@ -2748,7 +2812,7 @@ static int at91ether_start(struct net_device *dev) · 5 unmodified lines
2748 if (!lp->rx_buffers) {2812 if (!lp->rx_buffers) {
2749 dma_free_coherent(&lp->pdev->dev,2813 dma_free_coherent(&lp->pdev->dev,
2750 AT91ETHER_MAX_RX_DESCR *2814 AT91ETHER_MAX_RX_DESCR *
2751 sizeof(struct macb_dma_desc),2815 macb_dma_desc_get_size(lp),
2752 lp->rx_ring, lp->rx_ring_dma);2816 lp->rx_ring, lp->rx_ring_dma);
2753 lp->rx_ring = NULL;2817 lp->rx_ring = NULL;
2754 return -ENOMEM;2818 return -ENOMEM;
@@ -2756,13 +2820,14 @@ static int at91ether_start(struct net_device *dev) · 1 unmodified line
2756 2820
2757 addr = lp->rx_buffers_dma;2821 addr = lp->rx_buffers_dma;
2758 for (i = 0; i < AT91ETHER_MAX_RX_DESCR; i++) {2822 for (i = 0; i < AT91ETHER_MAX_RX_DESCR; i++) {
2759 lp->rx_ring[i].addr = addr;2823 desc = macb_rx_desc(lp, i);
2760 lp->rx_ring[i].ctrl = 0;2824 macb_set_addr(lp, desc, addr);
2825 desc->ctrl = 0;
2761 addr += AT91ETHER_MAX_RBUFF_SZ;2826 addr += AT91ETHER_MAX_RBUFF_SZ;
2762 }2827 }
2763 2828
2764 /* Set the Wrap bit on the last descriptor */2829 /* Set the Wrap bit on the last descriptor */
2765 lp->rx_ring[AT91ETHER_MAX_RX_DESCR - 1].addr |= MACB_BIT(RX_WRAP);2830 desc->addr |= MACB_BIT(RX_WRAP);
2766 2831
2767 /* Reset buffer index */2832 /* Reset buffer index */
2768 lp->rx_tail = 0;2833 lp->rx_tail = 0;
@@ -2834,7 +2899,7 @@ static int at91ether_close(struct net_device *dev) · 65 unmodified lines
2834 2899
2835 dma_free_coherent(&lp->pdev->dev,2900 dma_free_coherent(&lp->pdev->dev,
2836 AT91ETHER_MAX_RX_DESCR *2901 AT91ETHER_MAX_RX_DESCR *
2837 sizeof(struct macb_dma_desc),2902 macb_dma_desc_get_size(lp),
2838 lp->rx_ring, lp->rx_ring_dma);2903 lp->rx_ring, lp->rx_ring_dma);
2839 lp->rx_ring = NULL;2904 lp->rx_ring = NULL;
2840 2905
@@ -2885,13 +2950,15 @@ static int at91ether_start_xmit(struct sk_buff *skb, struct net_device *dev) · 44 unmodified lines
2885static void at91ether_rx(struct net_device *dev)2950static void at91ether_rx(struct net_device *dev)
2886{2951{
2887 struct macb *lp = netdev_priv(dev);2952 struct macb *lp = netdev_priv(dev);
2953 struct macb_dma_desc *desc;
2888 unsigned char *p_recv;2954 unsigned char *p_recv;
2889 struct sk_buff *skb;2955 struct sk_buff *skb;
2890 unsigned int pktlen;2956 unsigned int pktlen;
2891 2957
2892 while (lp->rx_ring[lp->rx_tail].addr & MACB_BIT(RX_USED)) {2958 desc = macb_rx_desc(lp, lp->rx_tail);
2959 while (desc->addr & MACB_BIT(RX_USED)) {
2893 p_recv = lp->rx_buffers + lp->rx_tail * AT91ETHER_MAX_RBUFF_SZ;2960 p_recv = lp->rx_buffers + lp->rx_tail * AT91ETHER_MAX_RBUFF_SZ;
2894 pktlen = MACB_BF(RX_FRMLEN, lp->rx_ring[lp->rx_tail].ctrl);2961 pktlen = MACB_BF(RX_FRMLEN, desc->ctrl);
2895 skb = netdev_alloc_skb(dev, pktlen + 2);2962 skb = netdev_alloc_skb(dev, pktlen + 2);
2896 if (skb) {2963 if (skb) {
2897 skb_reserve(skb, 2);2964 skb_reserve(skb, 2);
@@ -2905,17 +2972,19 @@ static void at91ether_rx(struct net_device *dev) · 7 unmodified lines
2905 lp->stats.rx_dropped++;2972 lp->stats.rx_dropped++;
2906 }2973 }
2907 2974
2908 if (lp->rx_ring[lp->rx_tail].ctrl & MACB_BIT(RX_MHASH_MATCH))2975 if (desc->ctrl & MACB_BIT(RX_MHASH_MATCH))
2909 lp->stats.multicast++;2976 lp->stats.multicast++;
2910 2977
2911 /* reset ownership bit */2978 /* reset ownership bit */
2912 lp->rx_ring[lp->rx_tail].addr &= ~MACB_BIT(RX_USED);2979 desc->addr &= ~MACB_BIT(RX_USED);
2913 2980
2914 /* wrap after last buffer */2981 /* wrap after last buffer */
2915 if (lp->rx_tail == AT91ETHER_MAX_RX_DESCR - 1)2982 if (lp->rx_tail == AT91ETHER_MAX_RX_DESCR - 1)
2916 lp->rx_tail = 0;2983 lp->rx_tail = 0;
2917 else2984 else
2918 lp->rx_tail++;2985 lp->rx_tail++;
2986
2987 desc = macb_rx_desc(lp, lp->rx_tail);
2919 }2988 }
2920}2989}
2921 2990
@@ -3211,8 +3280,11 @@ static int macb_probe(struct platform_device *pdev) · 289 unmodified lines
3211 device_init_wakeup(&pdev->dev, bp->wol & MACB_WOL_HAS_MAGIC_PACKET);3280 device_init_wakeup(&pdev->dev, bp->wol & MACB_WOL_HAS_MAGIC_PACKET);
3212 3281
3213#ifdef CONFIG_ARCH_DMA_ADDR_T_64BIT3282#ifdef CONFIG_ARCH_DMA_ADDR_T_64BIT
3214 if (GEM_BFEXT(DBWDEF, gem_readl(bp, DCFG1)) > GEM_DBW32)3283 if (GEM_BFEXT(DAW64, gem_readl(bp, DCFG6))) {
3215 dma_set_mask(&pdev->dev, DMA_BIT_MASK(44));3284 dma_set_mask(&pdev->dev, DMA_BIT_MASK(44));
3285 bp->hw_dma_cap = HW_DMA_CAP_64B;
3286 } else
3287 bp->hw_dma_cap = HW_DMA_CAP_32B;
3216#endif3288#endif
3217 3289
3218 spin_lock_init(&bp->lock);3290 spin_lock_init(&bp->lock);
drivers/net/ethernet/cadence/macb.h+17−3
@@ -385,6 +385,8 @@ · 384 unmodified lines
385/* Bitfields in DCFG6. */385/* Bitfields in DCFG6. */
386#define GEM_PBUF_LSO_OFFSET 27386#define GEM_PBUF_LSO_OFFSET 27
387#define GEM_PBUF_LSO_SIZE 1387#define GEM_PBUF_LSO_SIZE 1
388#define GEM_DAW64_OFFSET 23
389#define GEM_DAW64_SIZE 1
388 390
389/* Constants for CLK */391/* Constants for CLK */
390#define MACB_CLK_DIV8 0392#define MACB_CLK_DIV8 0
@@ -487,12 +489,20 @@ · 96 unmodified lines
487struct macb_dma_desc {489struct macb_dma_desc {
488 u32 addr;490 u32 addr;
489 u32 ctrl;491 u32 ctrl;
492};
493
490#ifdef CONFIG_ARCH_DMA_ADDR_T_64BIT494#ifdef CONFIG_ARCH_DMA_ADDR_T_64BIT
491 u32 addrh;495enum macb_hw_dma_cap {
492 u32 resvd;496 HW_DMA_CAP_32B,
493#endif497 HW_DMA_CAP_64B,
494};498};
495 499
500struct macb_dma_desc_64 {
501 u32 addrh;
502 u32 resvd;
503};
504#endif
505
496/* DMA descriptor bitfields */506/* DMA descriptor bitfields */
497#define MACB_RX_USED_OFFSET 0507#define MACB_RX_USED_OFFSET 0
498#define MACB_RX_USED_SIZE 1508#define MACB_RX_USED_SIZE 1
@@ -874,6 +884,10 @@ struct macb { · 375 unmodified lines
874 unsigned int jumbo_max_len;884 unsigned int jumbo_max_len;
875 885
876 u32 wol;886 u32 wol;
887
888#ifdef CONFIG_ARCH_DMA_ADDR_T_64BIT
889 enum macb_hw_dma_cap hw_dma_cap;
890#endif
877};891};
878 892
879static inline bool macb_is_gem(struct macb *bp)893static inline bool macb_is_gem(struct macb *bp)
drivers/net/ethernet/cavium/thunder/thunder_xcv.c+1−2
@@ -116,8 +116,7 @@ void xcv_setup_link(bool link_up, int link_speed) · 115 unmodified lines
116 int speed = 2;116 int speed = 2;
117 117
118 if (!xcv) {118 if (!xcv) {
119 dev_err(&xcv->pdev->dev,119 pr_err("XCV init not done, probe may have failed\n");
120 "XCV init not done, probe may have failed\n");
121 return;120 return;
122 }121 }
123 122
drivers/net/ethernet/emulex/benet/be_main.c+28−5
@@ -362,8 +362,10 @@ static int be_mac_addr_set(struct net_device *netdev, void *p) · 361 unmodified lines
362 status = -EPERM;362 status = -EPERM;
363 goto err;363 goto err;
364 }364 }
365done:365
366 /* Remember currently programmed MAC */
366 ether_addr_copy(adapter->dev_mac, addr->sa_data);367 ether_addr_copy(adapter->dev_mac, addr->sa_data);
368done:
367 ether_addr_copy(netdev->dev_addr, addr->sa_data);369 ether_addr_copy(netdev->dev_addr, addr->sa_data);
368 dev_info(dev, "MAC address changed to %pM\n", addr->sa_data);370 dev_info(dev, "MAC address changed to %pM\n", addr->sa_data);
369 return 0;371 return 0;
@@ -3618,8 +3620,10 @@ static void be_disable_if_filters(struct be_adapter *adapter) · 3248 unmodified lines
3618{3620{
3619 /* Don't delete MAC on BE3 VFs without FILTMGMT privilege */3621 /* Don't delete MAC on BE3 VFs without FILTMGMT privilege */
3620 if (!BEx_chip(adapter) || !be_virtfn(adapter) ||3622 if (!BEx_chip(adapter) || !be_virtfn(adapter) ||
3621 check_privilege(adapter, BE_PRIV_FILTMGMT))3623 check_privilege(adapter, BE_PRIV_FILTMGMT)) {
3622 be_dev_mac_del(adapter, adapter->pmac_id[0]);3624 be_dev_mac_del(adapter, adapter->pmac_id[0]);
3625 eth_zero_addr(adapter->dev_mac);
3626 }
3623 3627
3624 be_clear_uc_list(adapter);3628 be_clear_uc_list(adapter);
3625 be_clear_mc_list(adapter);3629 be_clear_mc_list(adapter);
@@ -3773,12 +3777,27 @@ static int be_enable_if_filters(struct be_adapter *adapter) · 147 unmodified lines
3773 if (status)3777 if (status)
3774 return status;3778 return status;
3775 3779
3776 /* Don't add MAC on BE3 VFs without FILTMGMT privilege */3780 /* Normally this condition usually true as the ->dev_mac is zeroed.
3777 if (!BEx_chip(adapter) || !be_virtfn(adapter) ||3781 * But on BE3 VFs the initial MAC is pre-programmed by PF and
3778 check_privilege(adapter, BE_PRIV_FILTMGMT)) {3782 * subsequent be_dev_mac_add() can fail (after fresh boot)
3783 */
3784 if (!ether_addr_equal(adapter->dev_mac, adapter->netdev->dev_addr)) {
3785 int old_pmac_id = -1;
3786
3787 /* Remember old programmed MAC if any - can happen on BE3 VF */
3788 if (!is_zero_ether_addr(adapter->dev_mac))
3789 old_pmac_id = adapter->pmac_id[0];
3790
3779 status = be_dev_mac_add(adapter, adapter->netdev->dev_addr);3791 status = be_dev_mac_add(adapter, adapter->netdev->dev_addr);
3780 if (status)3792 if (status)
3781 return status;3793 return status;
3794
3795 /* Delete the old programmed MAC as we successfully programmed
3796 * a new MAC
3797 */
3798 if (old_pmac_id >= 0 && old_pmac_id != adapter->pmac_id[0])
3799 be_dev_mac_del(adapter, old_pmac_id);
3800
3782 ether_addr_copy(adapter->dev_mac, adapter->netdev->dev_addr);3801 ether_addr_copy(adapter->dev_mac, adapter->netdev->dev_addr);
3783 }3802 }
3784 3803
@@ -4552,6 +4571,10 @@ static int be_mac_setup(struct be_adapter *adapter) · 767 unmodified lines
4552 4571
4553 memcpy(adapter->netdev->dev_addr, mac, ETH_ALEN);4572 memcpy(adapter->netdev->dev_addr, mac, ETH_ALEN);
4554 memcpy(adapter->netdev->perm_addr, mac, ETH_ALEN);4573 memcpy(adapter->netdev->perm_addr, mac, ETH_ALEN);
4574
4575 /* Initial MAC for BE3 VFs is already programmed by PF */
4576 if (BEx_chip(adapter) && be_virtfn(adapter))
4577 memcpy(adapter->dev_mac, mac, ETH_ALEN);
4555 }4578 }
4556 4579
4557 return 0;4580 return 0;
drivers/net/ethernet/freescale/gianfar.c+2−2
@@ -2010,8 +2010,8 @@ static void free_skb_rx_queue(struct gfar_priv_rx_q *rx_queue) · 2009 unmodified lines
2010 if (!rxb->page)2010 if (!rxb->page)
2011 continue;2011 continue;
2012 2012
2013 dma_unmap_single(rx_queue->dev, rxb->dma,2013 dma_unmap_page(rx_queue->dev, rxb->dma,
2014 PAGE_SIZE, DMA_FROM_DEVICE);2014 PAGE_SIZE, DMA_FROM_DEVICE);
2015 __free_page(rxb->page);2015 __free_page(rxb->page);
2016 2016
2017 rxb->page = NULL;2017 rxb->page = NULL;
drivers/net/ethernet/mellanox/mlx4/catas.c+1−1
@@ -158,7 +158,7 @@ static int mlx4_reset_slave(struct mlx4_dev *dev) · 157 unmodified lines
158 return -ETIMEDOUT;158 return -ETIMEDOUT;
159}159}
160 160
161static int mlx4_comm_internal_err(u32 slave_read)161int mlx4_comm_internal_err(u32 slave_read)
162{162{
163 return (u32)COMM_CHAN_EVENT_INTERNAL_ERR ==163 return (u32)COMM_CHAN_EVENT_INTERNAL_ERR ==
164 (slave_read & (u32)COMM_CHAN_EVENT_INTERNAL_ERR) ? 1 : 0;164 (slave_read & (u32)COMM_CHAN_EVENT_INTERNAL_ERR) ? 1 : 0;
drivers/net/ethernet/mellanox/mlx4/intf.c+12−0
@@ -222,6 +222,18 @@ void mlx4_unregister_device(struct mlx4_dev *dev) · 221 unmodified lines
222 return;222 return;
223 223
224 mlx4_stop_catas_poll(dev);224 mlx4_stop_catas_poll(dev);
225 if (dev->persist->interface_state & MLX4_INTERFACE_STATE_DELETION &&
226 mlx4_is_slave(dev)) {
227 /* In mlx4_remove_one on a VF */
228 u32 slave_read =
229 swab32(readl(&mlx4_priv(dev)->mfunc.comm->slave_read));
230
231 if (mlx4_comm_internal_err(slave_read)) {
232 mlx4_dbg(dev, "%s: comm channel is down, entering error state.\n",
233 __func__);
234 mlx4_enter_error_state(dev->persist);
235 }
236 }
225 mutex_lock(&intf_mutex);237 mutex_lock(&intf_mutex);
226 238
227 list_for_each_entry(intf, &intf_list, list)239 list_for_each_entry(intf, &intf_list, list)
drivers/net/ethernet/mellanox/mlx4/mlx4.h+1−0
@@ -1220,6 +1220,7 @@ void mlx4_qp_event(struct mlx4_dev *dev, u32 qpn, int event_type); · 1219 unmodified lines
1220void mlx4_srq_event(struct mlx4_dev *dev, u32 srqn, int event_type);1220void mlx4_srq_event(struct mlx4_dev *dev, u32 srqn, int event_type);
1221 1221
1222void mlx4_enter_error_state(struct mlx4_dev_persistent *persist);1222void mlx4_enter_error_state(struct mlx4_dev_persistent *persist);
1223int mlx4_comm_internal_err(u32 slave_read);
1223 1224
1224int mlx4_SENSE_PORT(struct mlx4_dev *dev, int port,1225int mlx4_SENSE_PORT(struct mlx4_dev *dev, int port,
1225 enum mlx4_port_type *type);1226 enum mlx4_port_type *type);
drivers/net/ethernet/mellanox/mlx5/core/cmd.c+1−1
@@ -1728,7 +1728,7 @@ int mlx5_cmd_init(struct mlx5_core_dev *dev) · 1727 unmodified lines
1728 if (cmd->cmdif_rev > CMD_IF_REV) {1728 if (cmd->cmdif_rev > CMD_IF_REV) {
1729 dev_err(&dev->pdev->dev, "driver does not support command interface version. driver %d, firmware %d\n",1729 dev_err(&dev->pdev->dev, "driver does not support command interface version. driver %d, firmware %d\n",
1730 CMD_IF_REV, cmd->cmdif_rev);1730 CMD_IF_REV, cmd->cmdif_rev);
1731 err = -ENOTSUPP;1731 err = -EOPNOTSUPP;
1732 goto err_free_page;1732 goto err_free_page;
1733 }1733 }
1734 1734
drivers/net/ethernet/mellanox/mlx5/core/en.h+4−3
@@ -791,7 +791,8 @@ void mlx5e_disable_vlan_filter(struct mlx5e_priv *priv); · 790 unmodified lines
791int mlx5e_modify_rqs_vsd(struct mlx5e_priv *priv, bool vsd);791int mlx5e_modify_rqs_vsd(struct mlx5e_priv *priv, bool vsd);
792 792
793int mlx5e_redirect_rqt(struct mlx5e_priv *priv, u32 rqtn, int sz, int ix);793int mlx5e_redirect_rqt(struct mlx5e_priv *priv, u32 rqtn, int sz, int ix);
794void mlx5e_build_tir_ctx_hash(void *tirc, struct mlx5e_priv *priv);794void mlx5e_build_indir_tir_ctx_hash(struct mlx5e_priv *priv, void *tirc,
795 enum mlx5e_traffic_types tt);
795 796
796int mlx5e_open_locked(struct net_device *netdev);797int mlx5e_open_locked(struct net_device *netdev);
797int mlx5e_close_locked(struct net_device *netdev);798int mlx5e_close_locked(struct net_device *netdev);
@@ -863,12 +864,12 @@ static inline void mlx5e_arfs_destroy_tables(struct mlx5e_priv *priv) {} · 65 unmodified lines
863 864
864static inline int mlx5e_arfs_enable(struct mlx5e_priv *priv)865static inline int mlx5e_arfs_enable(struct mlx5e_priv *priv)
865{866{
866 return -ENOTSUPP;867 return -EOPNOTSUPP;
867}868}
868 869
869static inline int mlx5e_arfs_disable(struct mlx5e_priv *priv)870static inline int mlx5e_arfs_disable(struct mlx5e_priv *priv)
870{871{
871 return -ENOTSUPP;872 return -EOPNOTSUPP;
872}873}
873#else874#else
874int mlx5e_arfs_create_tables(struct mlx5e_priv *priv);875int mlx5e_arfs_create_tables(struct mlx5e_priv *priv);
drivers/net/ethernet/mellanox/mlx5/core/en_dcbnl.c+8−3
@@ -89,7 +89,7 @@ static int mlx5e_dcbnl_ieee_getets(struct net_device *netdev, · 88 unmodified lines
89 int i;89 int i;
90 90
91 if (!MLX5_CAP_GEN(priv->mdev, ets))91 if (!MLX5_CAP_GEN(priv->mdev, ets))
92 return -ENOTSUPP;92 return -EOPNOTSUPP;
93 93
94 ets->ets_cap = mlx5_max_tc(priv->mdev) + 1;94 ets->ets_cap = mlx5_max_tc(priv->mdev) + 1;
95 for (i = 0; i < ets->ets_cap; i++) {95 for (i = 0; i < ets->ets_cap; i++) {
@@ -236,7 +236,7 @@ static int mlx5e_dcbnl_ieee_setets(struct net_device *netdev, · 140 unmodified lines
236 int err;236 int err;
237 237
238 if (!MLX5_CAP_GEN(priv->mdev, ets))238 if (!MLX5_CAP_GEN(priv->mdev, ets))
239 return -ENOTSUPP;239 return -EOPNOTSUPP;
240 240
241 err = mlx5e_dbcnl_validate_ets(netdev, ets);241 err = mlx5e_dbcnl_validate_ets(netdev, ets);
242 if (err)242 if (err)
@@ -402,7 +402,7 @@ static u8 mlx5e_dcbnl_setall(struct net_device *netdev) · 159 unmodified lines
402 struct mlx5_core_dev *mdev = priv->mdev;402 struct mlx5_core_dev *mdev = priv->mdev;
403 struct ieee_ets ets;403 struct ieee_ets ets;
404 struct ieee_pfc pfc;404 struct ieee_pfc pfc;
405 int err = -ENOTSUPP;405 int err = -EOPNOTSUPP;
406 int i;406 int i;
407 407
408 if (!MLX5_CAP_GEN(mdev, ets))408 if (!MLX5_CAP_GEN(mdev, ets))
@@ -511,6 +511,11 @@ static void mlx5e_dcbnl_getpgtccfgtx(struct net_device *netdev, · 102 unmodified lines
511 struct mlx5e_priv *priv = netdev_priv(netdev);511 struct mlx5e_priv *priv = netdev_priv(netdev);
512 struct mlx5_core_dev *mdev = priv->mdev;512 struct mlx5_core_dev *mdev = priv->mdev;
513 513
514 if (!MLX5_CAP_GEN(priv->mdev, ets)) {
515 netdev_err(netdev, "%s, ets is not supported\n", __func__);
516 return;
517 }
518
514 if (priority >= CEE_DCBX_MAX_PRIO) {519 if (priority >= CEE_DCBX_MAX_PRIO) {
515 netdev_err(netdev,520 netdev_err(netdev,
516 "%s, priority is out of range\n", __func__);521 "%s, priority is out of range\n", __func__);
drivers/net/ethernet/mellanox/mlx5/core/en_ethtool.c+26−15
@@ -595,7 +595,7 @@ static int mlx5e_get_coalesce(struct net_device *netdev, · 594 unmodified lines
595 struct mlx5e_priv *priv = netdev_priv(netdev);595 struct mlx5e_priv *priv = netdev_priv(netdev);
596 596
597 if (!MLX5_CAP_GEN(priv->mdev, cq_moderation))597 if (!MLX5_CAP_GEN(priv->mdev, cq_moderation))
598 return -ENOTSUPP;598 return -EOPNOTSUPP;
599 599
600 coal->rx_coalesce_usecs = priv->params.rx_cq_moderation.usec;600 coal->rx_coalesce_usecs = priv->params.rx_cq_moderation.usec;
601 coal->rx_max_coalesced_frames = priv->params.rx_cq_moderation.pkts;601 coal->rx_max_coalesced_frames = priv->params.rx_cq_moderation.pkts;
@@ -620,7 +620,7 @@ static int mlx5e_set_coalesce(struct net_device *netdev, · 18 unmodified lines
620 int i;620 int i;
621 621
622 if (!MLX5_CAP_GEN(mdev, cq_moderation))622 if (!MLX5_CAP_GEN(mdev, cq_moderation))
623 return -ENOTSUPP;623 return -EOPNOTSUPP;
624 624
625 mutex_lock(&priv->state_lock);625 mutex_lock(&priv->state_lock);
626 626
@@ -980,15 +980,18 @@ static int mlx5e_get_rxfh(struct net_device *netdev, u32 *indir, u8 *key, · 353 unmodified lines
980 980
981static void mlx5e_modify_tirs_hash(struct mlx5e_priv *priv, void *in, int inlen)981static void mlx5e_modify_tirs_hash(struct mlx5e_priv *priv, void *in, int inlen)
982{982{
983 struct mlx5_core_dev *mdev = priv->mdev;
984 void *tirc = MLX5_ADDR_OF(modify_tir_in, in, ctx);983 void *tirc = MLX5_ADDR_OF(modify_tir_in, in, ctx);
985 int i;984 struct mlx5_core_dev *mdev = priv->mdev;
985 int ctxlen = MLX5_ST_SZ_BYTES(tirc);
986 int tt;
986 987
987 MLX5_SET(modify_tir_in, in, bitmask.hash, 1);988 MLX5_SET(modify_tir_in, in, bitmask.hash, 1);
988 mlx5e_build_tir_ctx_hash(tirc, priv);
989 989
990 for (i = 0; i < MLX5E_NUM_INDIR_TIRS; i++)990 for (tt = 0; tt < MLX5E_NUM_INDIR_TIRS; tt++) {
991 mlx5_core_modify_tir(mdev, priv->indir_tir[i].tirn, in, inlen);991 memset(tirc, 0, ctxlen);
992 mlx5e_build_indir_tir_ctx_hash(priv, tirc, tt);
993 mlx5_core_modify_tir(mdev, priv->indir_tir[tt].tirn, in, inlen);
994 }
992}995}
993 996
994static int mlx5e_set_rxfh(struct net_device *dev, const u32 *indir,997static int mlx5e_set_rxfh(struct net_device *dev, const u32 *indir,
@@ -996,6 +999,7 @@ static int mlx5e_set_rxfh(struct net_device *dev, const u32 *indir, · 1 unmodified line
996{999{
997 struct mlx5e_priv *priv = netdev_priv(dev);1000 struct mlx5e_priv *priv = netdev_priv(dev);
998 int inlen = MLX5_ST_SZ_BYTES(modify_tir_in);1001 int inlen = MLX5_ST_SZ_BYTES(modify_tir_in);
1002 bool hash_changed = false;
999 void *in;1003 void *in;
1000 1004
1001 if ((hfunc != ETH_RSS_HASH_NO_CHANGE) &&1005 if ((hfunc != ETH_RSS_HASH_NO_CHANGE) &&
@@ -1017,14 +1021,21 @@ static int mlx5e_set_rxfh(struct net_device *dev, const u32 *indir, · 15 unmodified lines
1017 mlx5e_redirect_rqt(priv, rqtn, MLX5E_INDIR_RQT_SIZE, 0);1021 mlx5e_redirect_rqt(priv, rqtn, MLX5E_INDIR_RQT_SIZE, 0);
1018 }1022 }
1019 1023
1020 if (key)1024 if (hfunc != ETH_RSS_HASH_NO_CHANGE &&
1025 hfunc != priv->params.rss_hfunc) {
1026 priv->params.rss_hfunc = hfunc;
1027 hash_changed = true;
1028 }
1029
1030 if (key) {
1021 memcpy(priv->params.toeplitz_hash_key, key,1031 memcpy(priv->params.toeplitz_hash_key, key,
1022 sizeof(priv->params.toeplitz_hash_key));1032 sizeof(priv->params.toeplitz_hash_key));
1033 hash_changed = hash_changed ||
1034 priv->params.rss_hfunc == ETH_RSS_HASH_TOP;
1035 }
1023 1036
1024 if (hfunc != ETH_RSS_HASH_NO_CHANGE)1037 if (hash_changed)
1025 priv->params.rss_hfunc = hfunc;1038 mlx5e_modify_tirs_hash(priv, in, inlen);
1026
1027 mlx5e_modify_tirs_hash(priv, in, inlen);
1028 1039
1029 mutex_unlock(&priv->state_lock);1040 mutex_unlock(&priv->state_lock);
1030 1041
@@ -1296,7 +1307,7 @@ static int mlx5e_set_wol(struct net_device *netdev, struct ethtool_wolinfo *wol) · 265 unmodified lines
1296 u32 mlx5_wol_mode;1307 u32 mlx5_wol_mode;
1297 1308
1298 if (!wol_supported)1309 if (!wol_supported)
1299 return -ENOTSUPP;1310 return -EOPNOTSUPP;
1300 1311
1301 if (wol->wolopts & ~wol_supported)1312 if (wol->wolopts & ~wol_supported)
1302 return -EINVAL;1313 return -EINVAL;
@@ -1426,7 +1437,7 @@ static int set_pflag_rx_cqe_based_moder(struct net_device *netdev, bool enable) · 123 unmodified lines
1426 1437
1427 if (rx_cq_period_mode == MLX5_CQ_PERIOD_MODE_START_FROM_CQE &&1438 if (rx_cq_period_mode == MLX5_CQ_PERIOD_MODE_START_FROM_CQE &&
1428 !MLX5_CAP_GEN(mdev, cq_period_start_from_cqe))1439 !MLX5_CAP_GEN(mdev, cq_period_start_from_cqe))
1429 return -ENOTSUPP;1440 return -EOPNOTSUPP;
1430 1441
1431 if (!rx_mode_changed)1442 if (!rx_mode_changed)
1432 return 0;1443 return 0;
@@ -1452,7 +1463,7 @@ static int set_pflag_rx_cqe_compress(struct net_device *netdev, · 19 unmodified lines
1452 bool reset;1463 bool reset;
1453 1464
1454 if (!MLX5_CAP_GEN(mdev, cqe_compression))1465 if (!MLX5_CAP_GEN(mdev, cqe_compression))
1455 return -ENOTSUPP;1466 return -EOPNOTSUPP;
1456 1467
1457 if (enable && priv->tstamp.hwtstamp_config.rx_filter != HWTSTAMP_FILTER_NONE) {1468 if (enable && priv->tstamp.hwtstamp_config.rx_filter != HWTSTAMP_FILTER_NONE) {
1458 netdev_err(netdev, "Can't enable cqe compression while timestamping is enabled.\n");1469 netdev_err(netdev, "Can't enable cqe compression while timestamping is enabled.\n");
drivers/net/ethernet/mellanox/mlx5/core/en_fs.c+1−1
@@ -1089,7 +1089,7 @@ int mlx5e_create_flow_steering(struct mlx5e_priv *priv) · 1088 unmodified lines
1089 MLX5_FLOW_NAMESPACE_KERNEL);1089 MLX5_FLOW_NAMESPACE_KERNEL);
1090 1090
1091 if (!priv->fs.ns)1091 if (!priv->fs.ns)
1092 return -EINVAL;1092 return -EOPNOTSUPP;
1093 1093
1094 err = mlx5e_arfs_create_tables(priv);1094 err = mlx5e_arfs_create_tables(priv);
1095 if (err) {1095 if (err) {
drivers/net/ethernet/mellanox/mlx5/core/en_fs_ethtool.c+1−1
@@ -92,7 +92,7 @@ static struct mlx5e_ethtool_table *get_flow_table(struct mlx5e_priv *priv, · 91 unmodified lines
92 ns = mlx5_get_flow_namespace(priv->mdev,92 ns = mlx5_get_flow_namespace(priv->mdev,
93 MLX5_FLOW_NAMESPACE_ETHTOOL);93 MLX5_FLOW_NAMESPACE_ETHTOOL);
94 if (!ns)94 if (!ns)
95 return ERR_PTR(-ENOTSUPP);95 return ERR_PTR(-EOPNOTSUPP);
96 96
97 table_size = min_t(u32, BIT(MLX5_CAP_FLOWTABLE(priv->mdev,97 table_size = min_t(u32, BIT(MLX5_CAP_FLOWTABLE(priv->mdev,
98 flow_table_properties_nic_receive.log_max_ft_size)),98 flow_table_properties_nic_receive.log_max_ft_size)),
drivers/net/ethernet/mellanox/mlx5/core/en_main.c+101−101
@@ -2022,8 +2022,23 @@ static void mlx5e_build_tir_ctx_lro(void *tirc, struct mlx5e_priv *priv) · 2021 unmodified lines
2022 MLX5_SET(tirc, tirc, lro_timeout_period_usecs, priv->params.lro_timeout);2022 MLX5_SET(tirc, tirc, lro_timeout_period_usecs, priv->params.lro_timeout);
2023}2023}
2024 2024
2025void mlx5e_build_tir_ctx_hash(void *tirc, struct mlx5e_priv *priv)2025void mlx5e_build_indir_tir_ctx_hash(struct mlx5e_priv *priv, void *tirc,
2026 enum mlx5e_traffic_types tt)
2026{2027{
2028 void *hfso = MLX5_ADDR_OF(tirc, tirc, rx_hash_field_selector_outer);
2029
2030#define MLX5_HASH_IP (MLX5_HASH_FIELD_SEL_SRC_IP |\
2031 MLX5_HASH_FIELD_SEL_DST_IP)
2032
2033#define MLX5_HASH_IP_L4PORTS (MLX5_HASH_FIELD_SEL_SRC_IP |\
2034 MLX5_HASH_FIELD_SEL_DST_IP |\
2035 MLX5_HASH_FIELD_SEL_L4_SPORT |\
2036 MLX5_HASH_FIELD_SEL_L4_DPORT)
2037
2038#define MLX5_HASH_IP_IPSEC_SPI (MLX5_HASH_FIELD_SEL_SRC_IP |\
2039 MLX5_HASH_FIELD_SEL_DST_IP |\
2040 MLX5_HASH_FIELD_SEL_IPSEC_SPI)
2041
2027 MLX5_SET(tirc, tirc, rx_hash_fn,2042 MLX5_SET(tirc, tirc, rx_hash_fn,
2028 mlx5e_rx_hash_fn(priv->params.rss_hfunc));2043 mlx5e_rx_hash_fn(priv->params.rss_hfunc));
2029 if (priv->params.rss_hfunc == ETH_RSS_HASH_TOP) {2044 if (priv->params.rss_hfunc == ETH_RSS_HASH_TOP) {
@@ -2035,6 +2050,88 @@ void mlx5e_build_tir_ctx_hash(void *tirc, struct mlx5e_priv *priv) · 5 unmodified lines
2035 MLX5_SET(tirc, tirc, rx_hash_symmetric, 1);2050 MLX5_SET(tirc, tirc, rx_hash_symmetric, 1);
2036 memcpy(rss_key, priv->params.toeplitz_hash_key, len);2051 memcpy(rss_key, priv->params.toeplitz_hash_key, len);
2037 }2052 }
2053
2054 switch (tt) {
2055 case MLX5E_TT_IPV4_TCP:
2056 MLX5_SET(rx_hash_field_select, hfso, l3_prot_type,
2057 MLX5_L3_PROT_TYPE_IPV4);
2058 MLX5_SET(rx_hash_field_select, hfso, l4_prot_type,
2059 MLX5_L4_PROT_TYPE_TCP);
2060 MLX5_SET(rx_hash_field_select, hfso, selected_fields,
2061 MLX5_HASH_IP_L4PORTS);
2062 break;
2063
2064 case MLX5E_TT_IPV6_TCP:
2065 MLX5_SET(rx_hash_field_select, hfso, l3_prot_type,
2066 MLX5_L3_PROT_TYPE_IPV6);
2067 MLX5_SET(rx_hash_field_select, hfso, l4_prot_type,
2068 MLX5_L4_PROT_TYPE_TCP);
2069 MLX5_SET(rx_hash_field_select, hfso, selected_fields,
2070 MLX5_HASH_IP_L4PORTS);
2071 break;
2072
2073 case MLX5E_TT_IPV4_UDP:
2074 MLX5_SET(rx_hash_field_select, hfso, l3_prot_type,
2075 MLX5_L3_PROT_TYPE_IPV4);
2076 MLX5_SET(rx_hash_field_select, hfso, l4_prot_type,
2077 MLX5_L4_PROT_TYPE_UDP);
2078 MLX5_SET(rx_hash_field_select, hfso, selected_fields,
2079 MLX5_HASH_IP_L4PORTS);
2080 break;
2081
2082 case MLX5E_TT_IPV6_UDP:
2083 MLX5_SET(rx_hash_field_select, hfso, l3_prot_type,
2084 MLX5_L3_PROT_TYPE_IPV6);
2085 MLX5_SET(rx_hash_field_select, hfso, l4_prot_type,
2086 MLX5_L4_PROT_TYPE_UDP);
2087 MLX5_SET(rx_hash_field_select, hfso, selected_fields,
2088 MLX5_HASH_IP_L4PORTS);
2089 break;
2090
2091 case MLX5E_TT_IPV4_IPSEC_AH:
2092 MLX5_SET(rx_hash_field_select, hfso, l3_prot_type,
2093 MLX5_L3_PROT_TYPE_IPV4);
2094 MLX5_SET(rx_hash_field_select, hfso, selected_fields,
2095 MLX5_HASH_IP_IPSEC_SPI);
2096 break;
2097
2098 case MLX5E_TT_IPV6_IPSEC_AH:
2099 MLX5_SET(rx_hash_field_select, hfso, l3_prot_type,
2100 MLX5_L3_PROT_TYPE_IPV6);
2101 MLX5_SET(rx_hash_field_select, hfso, selected_fields,
2102 MLX5_HASH_IP_IPSEC_SPI);
2103 break;
2104
2105 case MLX5E_TT_IPV4_IPSEC_ESP:
2106 MLX5_SET(rx_hash_field_select, hfso, l3_prot_type,
2107 MLX5_L3_PROT_TYPE_IPV4);
2108 MLX5_SET(rx_hash_field_select, hfso, selected_fields,
2109 MLX5_HASH_IP_IPSEC_SPI);
2110 break;
2111
2112 case MLX5E_TT_IPV6_IPSEC_ESP:
2113 MLX5_SET(rx_hash_field_select, hfso, l3_prot_type,
2114 MLX5_L3_PROT_TYPE_IPV6);
2115 MLX5_SET(rx_hash_field_select, hfso, selected_fields,
2116 MLX5_HASH_IP_IPSEC_SPI);
2117 break;
2118
2119 case MLX5E_TT_IPV4:
2120 MLX5_SET(rx_hash_field_select, hfso, l3_prot_type,
2121 MLX5_L3_PROT_TYPE_IPV4);
2122 MLX5_SET(rx_hash_field_select, hfso, selected_fields,
2123 MLX5_HASH_IP);
2124 break;
2125
2126 case MLX5E_TT_IPV6:
2127 MLX5_SET(rx_hash_field_select, hfso, l3_prot_type,
2128 MLX5_L3_PROT_TYPE_IPV6);
2129 MLX5_SET(rx_hash_field_select, hfso, selected_fields,
2130 MLX5_HASH_IP);
2131 break;
2132 default:
2133 WARN_ONCE(true, "%s: bad traffic type!\n", __func__);
2134 }
2038}2135}
2039 2136
2040static int mlx5e_modify_tirs_lro(struct mlx5e_priv *priv)2137static int mlx5e_modify_tirs_lro(struct mlx5e_priv *priv)
@@ -2404,110 +2501,13 @@ void mlx5e_cleanup_nic_tx(struct mlx5e_priv *priv) · 363 unmodified lines
2404static void mlx5e_build_indir_tir_ctx(struct mlx5e_priv *priv, u32 *tirc,2501static void mlx5e_build_indir_tir_ctx(struct mlx5e_priv *priv, u32 *tirc,
2405 enum mlx5e_traffic_types tt)2502 enum mlx5e_traffic_types tt)
2406{2503{
2407 void *hfso = MLX5_ADDR_OF(tirc, tirc, rx_hash_field_selector_outer);
2408
2409 MLX5_SET(tirc, tirc, transport_domain, priv->mdev->mlx5e_res.td.tdn);2504 MLX5_SET(tirc, tirc, transport_domain, priv->mdev->mlx5e_res.td.tdn);
2410 2505
2411#define MLX5_HASH_IP (MLX5_HASH_FIELD_SEL_SRC_IP |\
2412 MLX5_HASH_FIELD_SEL_DST_IP)
2413
2414#define MLX5_HASH_IP_L4PORTS (MLX5_HASH_FIELD_SEL_SRC_IP |\
2415 MLX5_HASH_FIELD_SEL_DST_IP |\
2416 MLX5_HASH_FIELD_SEL_L4_SPORT |\
2417 MLX5_HASH_FIELD_SEL_L4_DPORT)
2418
2419#define MLX5_HASH_IP_IPSEC_SPI (MLX5_HASH_FIELD_SEL_SRC_IP |\
2420 MLX5_HASH_FIELD_SEL_DST_IP |\
2421 MLX5_HASH_FIELD_SEL_IPSEC_SPI)
2422
2423 mlx5e_build_tir_ctx_lro(tirc, priv);2506 mlx5e_build_tir_ctx_lro(tirc, priv);
2424 2507
2425 MLX5_SET(tirc, tirc, disp_type, MLX5_TIRC_DISP_TYPE_INDIRECT);2508 MLX5_SET(tirc, tirc, disp_type, MLX5_TIRC_DISP_TYPE_INDIRECT);
2426 MLX5_SET(tirc, tirc, indirect_table, priv->indir_rqt.rqtn);2509 MLX5_SET(tirc, tirc, indirect_table, priv->indir_rqt.rqtn);
2427 mlx5e_build_tir_ctx_hash(tirc, priv);2510 mlx5e_build_indir_tir_ctx_hash(priv, tirc, tt);
2428
2429 switch (tt) {
2430 case MLX5E_TT_IPV4_TCP:
2431 MLX5_SET(rx_hash_field_select, hfso, l3_prot_type,
2432 MLX5_L3_PROT_TYPE_IPV4);
2433 MLX5_SET(rx_hash_field_select, hfso, l4_prot_type,
2434 MLX5_L4_PROT_TYPE_TCP);
2435 MLX5_SET(rx_hash_field_select, hfso, selected_fields,
2436 MLX5_HASH_IP_L4PORTS);
2437 break;
2438
2439 case MLX5E_TT_IPV6_TCP:
2440 MLX5_SET(rx_hash_field_select, hfso, l3_prot_type,
2441 MLX5_L3_PROT_TYPE_IPV6);
2442 MLX5_SET(rx_hash_field_select, hfso, l4_prot_type,
2443 MLX5_L4_PROT_TYPE_TCP);
2444 MLX5_SET(rx_hash_field_select, hfso, selected_fields,
2445 MLX5_HASH_IP_L4PORTS);
2446 break;
2447
2448 case MLX5E_TT_IPV4_UDP:
2449 MLX5_SET(rx_hash_field_select, hfso, l3_prot_type,
2450 MLX5_L3_PROT_TYPE_IPV4);
2451 MLX5_SET(rx_hash_field_select, hfso, l4_prot_type,
2452 MLX5_L4_PROT_TYPE_UDP);
2453 MLX5_SET(rx_hash_field_select, hfso, selected_fields,
2454 MLX5_HASH_IP_L4PORTS);
2455 break;
2456
2457 case MLX5E_TT_IPV6_UDP:
2458 MLX5_SET(rx_hash_field_select, hfso, l3_prot_type,
2459 MLX5_L3_PROT_TYPE_IPV6);
2460 MLX5_SET(rx_hash_field_select, hfso, l4_prot_type,
2461 MLX5_L4_PROT_TYPE_UDP);
2462 MLX5_SET(rx_hash_field_select, hfso, selected_fields,
2463 MLX5_HASH_IP_L4PORTS);
2464 break;
2465
2466 case MLX5E_TT_IPV4_IPSEC_AH:
2467 MLX5_SET(rx_hash_field_select, hfso, l3_prot_type,
2468 MLX5_L3_PROT_TYPE_IPV4);
2469 MLX5_SET(rx_hash_field_select, hfso, selected_fields,
2470 MLX5_HASH_IP_IPSEC_SPI);
2471 break;
2472
2473 case MLX5E_TT_IPV6_IPSEC_AH:
2474 MLX5_SET(rx_hash_field_select, hfso, l3_prot_type,
2475 MLX5_L3_PROT_TYPE_IPV6);
2476 MLX5_SET(rx_hash_field_select, hfso, selected_fields,
2477 MLX5_HASH_IP_IPSEC_SPI);
2478 break;
2479
2480 case MLX5E_TT_IPV4_IPSEC_ESP:
2481 MLX5_SET(rx_hash_field_select, hfso, l3_prot_type,
2482 MLX5_L3_PROT_TYPE_IPV4);
2483 MLX5_SET(rx_hash_field_select, hfso, selected_fields,
2484 MLX5_HASH_IP_IPSEC_SPI);
2485 break;
2486
2487 case MLX5E_TT_IPV6_IPSEC_ESP:
2488 MLX5_SET(rx_hash_field_select, hfso, l3_prot_type,
2489 MLX5_L3_PROT_TYPE_IPV6);
2490 MLX5_SET(rx_hash_field_select, hfso, selected_fields,
2491 MLX5_HASH_IP_IPSEC_SPI);
2492 break;
2493
2494 case MLX5E_TT_IPV4:
2495 MLX5_SET(rx_hash_field_select, hfso, l3_prot_type,
2496 MLX5_L3_PROT_TYPE_IPV4);
2497 MLX5_SET(rx_hash_field_select, hfso, selected_fields,
2498 MLX5_HASH_IP);
2499 break;
2500
2501 case MLX5E_TT_IPV6:
2502 MLX5_SET(rx_hash_field_select, hfso, l3_prot_type,
2503 MLX5_L3_PROT_TYPE_IPV6);
2504 MLX5_SET(rx_hash_field_select, hfso, selected_fields,
2505 MLX5_HASH_IP);
2506 break;
2507 default:
2508 WARN_ONCE(true,
2509 "mlx5e_build_indir_tir_ctx: bad traffic type!\n");
2510 }
2511}2511}
2512 2512
2513static void mlx5e_build_direct_tir_ctx(struct mlx5e_priv *priv, u32 *tirc,2513static void mlx5e_build_direct_tir_ctx(struct mlx5e_priv *priv, u32 *tirc,
@@ -3331,7 +3331,7 @@ static const struct net_device_ops mlx5e_netdev_ops_sriov = { · 817 unmodified lines
3331static int mlx5e_check_required_hca_cap(struct mlx5_core_dev *mdev)3331static int mlx5e_check_required_hca_cap(struct mlx5_core_dev *mdev)
3332{3332{
3333 if (MLX5_CAP_GEN(mdev, port_type) != MLX5_CAP_PORT_TYPE_ETH)3333 if (MLX5_CAP_GEN(mdev, port_type) != MLX5_CAP_PORT_TYPE_ETH)
3334 return -ENOTSUPP;3334 return -EOPNOTSUPP;
3335 if (!MLX5_CAP_GEN(mdev, eth_net_offloads) ||3335 if (!MLX5_CAP_GEN(mdev, eth_net_offloads) ||
3336 !MLX5_CAP_GEN(mdev, nic_flow_table) ||3336 !MLX5_CAP_GEN(mdev, nic_flow_table) ||
3337 !MLX5_CAP_ETH(mdev, csum_cap) ||3337 !MLX5_CAP_ETH(mdev, csum_cap) ||
@@ -3343,7 +3343,7 @@ static int mlx5e_check_required_hca_cap(struct mlx5_core_dev *mdev) · 5 unmodified lines
3343 < 3) {3343 < 3) {
3344 mlx5_core_warn(mdev,3344 mlx5_core_warn(mdev,
3345 "Not creating net device, some required device capabilities are missing\n");3345 "Not creating net device, some required device capabilities are missing\n");
3346 return -ENOTSUPP;3346 return -EOPNOTSUPP;
3347 }3347 }
3348 if (!MLX5_CAP_ETH(mdev, self_lb_en_modifiable))3348 if (!MLX5_CAP_ETH(mdev, self_lb_en_modifiable))
3349 mlx5_core_warn(mdev, "Self loop back prevention is not supported\n");3349 mlx5_core_warn(mdev, "Self loop back prevention is not supported\n");
drivers/net/ethernet/mellanox/mlx5/core/en_tc.c+6−7
@@ -663,6 +663,7 @@ static int mlx5e_route_lookup_ipv4(struct mlx5e_priv *priv, · 662 unmodified lines
663 __be32 *saddr,663 __be32 *saddr,
664 int *out_ttl)664 int *out_ttl)
665{665{
666 struct mlx5_eswitch *esw = priv->mdev->priv.eswitch;
666 struct rtable *rt;667 struct rtable *rt;
667 struct neighbour *n = NULL;668 struct neighbour *n = NULL;
668 int ttl;669 int ttl;
@@ -677,12 +678,11 @@ static int mlx5e_route_lookup_ipv4(struct mlx5e_priv *priv, · 8 unmodified lines
677#else678#else
678 return -EOPNOTSUPP;679 return -EOPNOTSUPP;
679#endif680#endif
680 681 /* if the egress device isn't on the same HW e-switch, we use the uplink */
681 if (!switchdev_port_same_parent_id(priv->netdev, rt->dst.dev)) {682 if (!switchdev_port_same_parent_id(priv->netdev, rt->dst.dev))
682 pr_warn("%s: can't offload, devices not on same HW e-switch\n", __func__);683 *out_dev = mlx5_eswitch_get_uplink_netdev(esw);
683 ip_rt_put(rt);684 else
684 return -EOPNOTSUPP;685 *out_dev = rt->dst.dev;
685 }
686 686
687 ttl = ip4_dst_hoplimit(&rt->dst);687 ttl = ip4_dst_hoplimit(&rt->dst);
688 n = dst_neigh_lookup(&rt->dst, &fl4->daddr);688 n = dst_neigh_lookup(&rt->dst, &fl4->daddr);
@@ -693,7 +693,6 @@ static int mlx5e_route_lookup_ipv4(struct mlx5e_priv *priv, · 4 unmodified lines
693 *out_n = n;693 *out_n = n;
694 *saddr = fl4->saddr;694 *saddr = fl4->saddr;
695 *out_ttl = ttl;695 *out_ttl = ttl;
696 *out_dev = rt->dst.dev;
697 696
698 return 0;697 return 0;
699}698}
drivers/net/ethernet/mellanox/mlx5/core/eswitch.c+5−5
@@ -133,7 +133,7 @@ static int modify_esw_vport_cvlan(struct mlx5_core_dev *dev, u32 vport, · 132 unmodified lines
133 133
134 if (!MLX5_CAP_ESW(dev, vport_cvlan_strip) ||134 if (!MLX5_CAP_ESW(dev, vport_cvlan_strip) ||
135 !MLX5_CAP_ESW(dev, vport_cvlan_insert_if_not_exist))135 !MLX5_CAP_ESW(dev, vport_cvlan_insert_if_not_exist))
136 return -ENOTSUPP;136 return -EOPNOTSUPP;
137 137
138 esw_debug(dev, "Set Vport[%d] VLAN %d qos %d set=%x\n",138 esw_debug(dev, "Set Vport[%d] VLAN %d qos %d set=%x\n",
139 vport, vlan, qos, set_flags);139 vport, vlan, qos, set_flags);
@@ -353,7 +353,7 @@ static int esw_create_legacy_fdb_table(struct mlx5_eswitch *esw, int nvports) · 213 unmodified lines
353 root_ns = mlx5_get_flow_namespace(dev, MLX5_FLOW_NAMESPACE_FDB);353 root_ns = mlx5_get_flow_namespace(dev, MLX5_FLOW_NAMESPACE_FDB);
354 if (!root_ns) {354 if (!root_ns) {
355 esw_warn(dev, "Failed to get FDB flow namespace\n");355 esw_warn(dev, "Failed to get FDB flow namespace\n");
356 return -ENOMEM;356 return -EOPNOTSUPP;
357 }357 }
358 358
359 flow_group_in = mlx5_vzalloc(inlen);359 flow_group_in = mlx5_vzalloc(inlen);
@@ -962,7 +962,7 @@ static int esw_vport_enable_egress_acl(struct mlx5_eswitch *esw, · 602 unmodified lines
962 root_ns = mlx5_get_flow_namespace(dev, MLX5_FLOW_NAMESPACE_ESW_EGRESS);962 root_ns = mlx5_get_flow_namespace(dev, MLX5_FLOW_NAMESPACE_ESW_EGRESS);
963 if (!root_ns) {963 if (!root_ns) {
964 esw_warn(dev, "Failed to get E-Switch egress flow namespace\n");964 esw_warn(dev, "Failed to get E-Switch egress flow namespace\n");
965 return -EIO;965 return -EOPNOTSUPP;
966 }966 }
967 967
968 flow_group_in = mlx5_vzalloc(inlen);968 flow_group_in = mlx5_vzalloc(inlen);
@@ -1079,7 +1079,7 @@ static int esw_vport_enable_ingress_acl(struct mlx5_eswitch *esw, · 110 unmodified lines
1079 root_ns = mlx5_get_flow_namespace(dev, MLX5_FLOW_NAMESPACE_ESW_INGRESS);1079 root_ns = mlx5_get_flow_namespace(dev, MLX5_FLOW_NAMESPACE_ESW_INGRESS);
1080 if (!root_ns) {1080 if (!root_ns) {
1081 esw_warn(dev, "Failed to get E-Switch ingress flow namespace\n");1081 esw_warn(dev, "Failed to get E-Switch ingress flow namespace\n");
1082 return -EIO;1082 return -EOPNOTSUPP;
1083 }1083 }
1084 1084
1085 flow_group_in = mlx5_vzalloc(inlen);1085 flow_group_in = mlx5_vzalloc(inlen);
@@ -1630,7 +1630,7 @@ int mlx5_eswitch_enable_sriov(struct mlx5_eswitch *esw, int nvfs, int mode) · 544 unmodified lines
1630 if (!MLX5_CAP_GEN(esw->dev, eswitch_flow_table) ||1630 if (!MLX5_CAP_GEN(esw->dev, eswitch_flow_table) ||
1631 !MLX5_CAP_ESW_FLOWTABLE_FDB(esw->dev, ft_support)) {1631 !MLX5_CAP_ESW_FLOWTABLE_FDB(esw->dev, ft_support)) {
1632 esw_warn(esw->dev, "E-Switch FDB is not supported, aborting ...\n");1632 esw_warn(esw->dev, "E-Switch FDB is not supported, aborting ...\n");
1633 return -ENOTSUPP;1633 return -EOPNOTSUPP;
1634 }1634 }
1635 1635
1636 if (!MLX5_CAP_ESW_INGRESS_ACL(esw->dev, ft_support))1636 if (!MLX5_CAP_ESW_INGRESS_ACL(esw->dev, ft_support))
drivers/net/ethernet/mellanox/mlx5/core/eswitch_offloads.c+22−14
@@ -166,7 +166,7 @@ static int esw_add_vlan_action_check(struct mlx5_esw_flow_attr *attr, · 165 unmodified lines
166 return 0;166 return 0;
167 167
168out_notsupp:168out_notsupp:
169 return -ENOTSUPP;169 return -EOPNOTSUPP;
170}170}
171 171
172int mlx5_eswitch_add_vlan_action(struct mlx5_eswitch *esw,172int mlx5_eswitch_add_vlan_action(struct mlx5_eswitch *esw,
@@ -424,6 +424,7 @@ static int esw_create_offloads_fdb_table(struct mlx5_eswitch *esw, int nvports) · 251 unmodified lines
424 root_ns = mlx5_get_flow_namespace(dev, MLX5_FLOW_NAMESPACE_FDB);424 root_ns = mlx5_get_flow_namespace(dev, MLX5_FLOW_NAMESPACE_FDB);
425 if (!root_ns) {425 if (!root_ns) {
426 esw_warn(dev, "Failed to get FDB flow namespace\n");426 esw_warn(dev, "Failed to get FDB flow namespace\n");
427 err = -EOPNOTSUPP;
427 goto ns_err;428 goto ns_err;
428 }429 }
429 430
@@ -535,7 +536,7 @@ static int esw_create_offloads_table(struct mlx5_eswitch *esw) · 105 unmodified lines
535 ns = mlx5_get_flow_namespace(dev, MLX5_FLOW_NAMESPACE_OFFLOADS);536 ns = mlx5_get_flow_namespace(dev, MLX5_FLOW_NAMESPACE_OFFLOADS);
536 if (!ns) {537 if (!ns) {
537 esw_warn(esw->dev, "Failed to get offloads flow namespace\n");538 esw_warn(esw->dev, "Failed to get offloads flow namespace\n");
538 return -ENOMEM;539 return -EOPNOTSUPP;
539 }540 }
540 541
541 ft_offloads = mlx5_create_flow_table(ns, 0, dev->priv.sriov.num_vfs + 2, 0, 0);542 ft_offloads = mlx5_create_flow_table(ns, 0, dev->priv.sriov.num_vfs + 2, 0, 0);
@@ -655,7 +656,7 @@ static int esw_offloads_start(struct mlx5_eswitch *esw) · 113 unmodified lines
655 esw_warn(esw->dev, "Failed setting eswitch to offloads, err %d\n", err);656 esw_warn(esw->dev, "Failed setting eswitch to offloads, err %d\n", err);
656 err1 = mlx5_eswitch_enable_sriov(esw, num_vfs, SRIOV_LEGACY);657 err1 = mlx5_eswitch_enable_sriov(esw, num_vfs, SRIOV_LEGACY);
657 if (err1)658 if (err1)
658 esw_warn(esw->dev, "Failed setting eswitch back to legacy, err %d\n", err);659 esw_warn(esw->dev, "Failed setting eswitch back to legacy, err %d\n", err1);
659 }660 }
660 if (esw->offloads.inline_mode == MLX5_INLINE_MODE_NONE) {661 if (esw->offloads.inline_mode == MLX5_INLINE_MODE_NONE) {
661 if (mlx5_eswitch_inline_mode_get(esw,662 if (mlx5_eswitch_inline_mode_get(esw,
@@ -674,9 +675,14 @@ int esw_offloads_init(struct mlx5_eswitch *esw, int nvports) · 12 unmodified lines
674 int vport;675 int vport;
675 int err;676 int err;
676 677
678 /* disable PF RoCE so missed packets don't go through RoCE steering */
679 mlx5_dev_list_lock();
680 mlx5_remove_dev_by_protocol(esw->dev, MLX5_INTERFACE_PROTOCOL_IB);
681 mlx5_dev_list_unlock();
682
677 err = esw_create_offloads_fdb_table(esw, nvports);683 err = esw_create_offloads_fdb_table(esw, nvports);
678 if (err)684 if (err)
679 return err;685 goto create_fdb_err;
680 686
681 err = esw_create_offloads_table(esw);687 err = esw_create_offloads_table(esw);
682 if (err)688 if (err)
@@ -696,11 +702,6 @@ int esw_offloads_init(struct mlx5_eswitch *esw, int nvports) · 13 unmodified lines
696 goto err_reps;702 goto err_reps;
697 }703 }
698 704
699 /* disable PF RoCE so missed packets don't go through RoCE steering */
700 mlx5_dev_list_lock();
701 mlx5_remove_dev_by_protocol(esw->dev, MLX5_INTERFACE_PROTOCOL_IB);
702 mlx5_dev_list_unlock();
703
704 return 0;705 return 0;
705 706
706err_reps:707err_reps:
@@ -717,6 +718,13 @@ create_fg_err: · 10 unmodified lines
717 718
718create_ft_err:719create_ft_err:
719 esw_destroy_offloads_fdb_table(esw);720 esw_destroy_offloads_fdb_table(esw);
721
722create_fdb_err:
723 /* enable back PF RoCE */
724 mlx5_dev_list_lock();
725 mlx5_add_dev_by_protocol(esw->dev, MLX5_INTERFACE_PROTOCOL_IB);
726 mlx5_dev_list_unlock();
727
720 return err;728 return err;
721}729}
722 730
@@ -724,11 +732,6 @@ static int esw_offloads_stop(struct mlx5_eswitch *esw) · 1 unmodified line
724{732{
725 int err, err1, num_vfs = esw->dev->priv.sriov.num_vfs;733 int err, err1, num_vfs = esw->dev->priv.sriov.num_vfs;
726 734
727 /* enable back PF RoCE */
728 mlx5_dev_list_lock();
729 mlx5_add_dev_by_protocol(esw->dev, MLX5_INTERFACE_PROTOCOL_IB);
730 mlx5_dev_list_unlock();
731
732 mlx5_eswitch_disable_sriov(esw);735 mlx5_eswitch_disable_sriov(esw);
733 err = mlx5_eswitch_enable_sriov(esw, num_vfs, SRIOV_LEGACY);736 err = mlx5_eswitch_enable_sriov(esw, num_vfs, SRIOV_LEGACY);
734 if (err) {737 if (err) {
@@ -738,6 +741,11 @@ static int esw_offloads_stop(struct mlx5_eswitch *esw) · 3 unmodified lines
738 esw_warn(esw->dev, "Failed setting eswitch back to offloads, err %d\n", err);741 esw_warn(esw->dev, "Failed setting eswitch back to offloads, err %d\n", err);
739 }742 }
740 743
744 /* enable back PF RoCE */
745 mlx5_dev_list_lock();
746 mlx5_add_dev_by_protocol(esw->dev, MLX5_INTERFACE_PROTOCOL_IB);
747 mlx5_dev_list_unlock();
748
741 return err;749 return err;
742}750}
743 751
drivers/net/ethernet/mellanox/mlx5/core/fs_cmd.c+1−1
@@ -322,7 +322,7 @@ int mlx5_cmd_update_fte(struct mlx5_core_dev *dev, · 321 unmodified lines
322 flow_table_properties_nic_receive.322 flow_table_properties_nic_receive.
323 flow_modify_en);323 flow_modify_en);
324 if (!atomic_mod_cap)324 if (!atomic_mod_cap)
325 return -ENOTSUPP;325 return -EOPNOTSUPP;
326 opmod = 1;326 opmod = 1;
327 327
328 return mlx5_cmd_set_fte(dev, opmod, modify_mask, ft, group_id, fte);328 return mlx5_cmd_set_fte(dev, opmod, modify_mask, ft, group_id, fte);
drivers/net/ethernet/mellanox/mlx5/core/fs_core.c+1−1
@@ -1822,7 +1822,7 @@ static int create_anchor_flow_table(struct mlx5_flow_steering *steering) · 1821 unmodified lines
1822 struct mlx5_flow_table *ft;1822 struct mlx5_flow_table *ft;
1823 1823
1824 ns = mlx5_get_flow_namespace(steering->dev, MLX5_FLOW_NAMESPACE_ANCHOR);1824 ns = mlx5_get_flow_namespace(steering->dev, MLX5_FLOW_NAMESPACE_ANCHOR);
1825 if (!ns)1825 if (WARN_ON(!ns))
1826 return -EINVAL;1826 return -EINVAL;
1827 ft = mlx5_create_flow_table(ns, ANCHOR_PRIO, ANCHOR_SIZE, ANCHOR_LEVEL, 0);1827 ft = mlx5_create_flow_table(ns, ANCHOR_PRIO, ANCHOR_SIZE, ANCHOR_LEVEL, 0);
1828 if (IS_ERR(ft)) {1828 if (IS_ERR(ft)) {
drivers/net/ethernet/mellanox/mlx5/core/main.c+1−1
@@ -807,7 +807,7 @@ static int mlx5_core_set_issi(struct mlx5_core_dev *dev) · 806 unmodified lines
807 return 0;807 return 0;
808 }808 }
809 809
810 return -ENOTSUPP;810 return -EOPNOTSUPP;
811}811}
812 812
813 813
drivers/net/ethernet/mellanox/mlx5/core/port.c+2−2
@@ -620,7 +620,7 @@ static int mlx5_set_port_qetcr_reg(struct mlx5_core_dev *mdev, u32 *in, · 619 unmodified lines
620 u32 out[MLX5_ST_SZ_DW(qtct_reg)];620 u32 out[MLX5_ST_SZ_DW(qtct_reg)];
621 621
622 if (!MLX5_CAP_GEN(mdev, ets))622 if (!MLX5_CAP_GEN(mdev, ets))
623 return -ENOTSUPP;623 return -EOPNOTSUPP;
624 624
625 return mlx5_core_access_reg(mdev, in, inlen, out, sizeof(out),625 return mlx5_core_access_reg(mdev, in, inlen, out, sizeof(out),
626 MLX5_REG_QETCR, 0, 1);626 MLX5_REG_QETCR, 0, 1);
@@ -632,7 +632,7 @@ static int mlx5_query_port_qetcr_reg(struct mlx5_core_dev *mdev, u32 *out, · 5 unmodified lines
632 u32 in[MLX5_ST_SZ_DW(qtct_reg)];632 u32 in[MLX5_ST_SZ_DW(qtct_reg)];
633 633
634 if (!MLX5_CAP_GEN(mdev, ets))634 if (!MLX5_CAP_GEN(mdev, ets))
635 return -ENOTSUPP;635 return -EOPNOTSUPP;
636 636
637 memset(in, 0, sizeof(in));637 memset(in, 0, sizeof(in));
638 return mlx5_core_access_reg(mdev, in, sizeof(in), out, outlen,638 return mlx5_core_access_reg(mdev, in, sizeof(in), out, outlen,
drivers/net/ethernet/mellanox/mlx5/core/vport.c+1−1
@@ -532,7 +532,7 @@ int mlx5_modify_nic_vport_node_guid(struct mlx5_core_dev *mdev, · 531 unmodified lines
532 if (!MLX5_CAP_GEN(mdev, vport_group_manager))532 if (!MLX5_CAP_GEN(mdev, vport_group_manager))
533 return -EACCES;533 return -EACCES;
534 if (!MLX5_CAP_ESW(mdev, nic_vport_node_guid_modify))534 if (!MLX5_CAP_ESW(mdev, nic_vport_node_guid_modify))
535 return -ENOTSUPP;535 return -EOPNOTSUPP;
536 536
537 in = mlx5_vzalloc(inlen);537 in = mlx5_vzalloc(inlen);
538 if (!in)538 if (!in)
drivers/net/ethernet/stmicro/stmmac/dwmac1000_core.c+4−0
@@ -305,8 +305,12 @@ static int dwmac1000_irq_status(struct mac_device_info *hw, · 304 unmodified lines
305{305{
306 void __iomem *ioaddr = hw->pcsr;306 void __iomem *ioaddr = hw->pcsr;
307 u32 intr_status = readl(ioaddr + GMAC_INT_STATUS);307 u32 intr_status = readl(ioaddr + GMAC_INT_STATUS);
308 u32 intr_mask = readl(ioaddr + GMAC_INT_MASK);
308 int ret = 0;309 int ret = 0;
309 310
311 /* Discard masked bits */
312 intr_status &= ~intr_mask;
313
310 /* Not used events (e.g. MMC interrupts) are not handled. */314 /* Not used events (e.g. MMC interrupts) are not handled. */
311 if ((intr_status & GMAC_INT_STATUS_MMCTIS))315 if ((intr_status & GMAC_INT_STATUS_MMCTIS))
312 x->mmc_tx_irq_n++;316 x->mmc_tx_irq_n++;
drivers/net/hyperv/netvsc.c+6−0
@@ -1295,6 +1295,9 @@ void netvsc_channel_cb(void *context) · 1294 unmodified lines
1295 ndev = hv_get_drvdata(device);1295 ndev = hv_get_drvdata(device);
1296 buffer = get_per_channel_state(channel);1296 buffer = get_per_channel_state(channel);
1297 1297
1298 /* commit_rd_index() -> hv_signal_on_read() needs this. */
1299 init_cached_read_index(channel);
1300
1298 do {1301 do {
1299 desc = get_next_pkt_raw(channel);1302 desc = get_next_pkt_raw(channel);
1300 if (desc != NULL) {1303 if (desc != NULL) {
@@ -1347,6 +1350,9 @@ void netvsc_channel_cb(void *context) · 46 unmodified lines
1347 1350
1348 bufferlen = bytes_recvd;1351 bufferlen = bytes_recvd;
1349 }1352 }
1353
1354 init_cached_read_index(channel);
1355
1350 } while (1);1356 } while (1);
1351 1357
1352 if (bufferlen > NETVSC_PACKET_SIZE)1358 if (bufferlen > NETVSC_PACKET_SIZE)
drivers/net/phy/micrel.c+1−1
@@ -1012,7 +1012,7 @@ static struct phy_driver ksphy_driver[] = { · 1011 unmodified lines
1012 .phy_id = PHY_ID_KSZ8795,1012 .phy_id = PHY_ID_KSZ8795,
1013 .phy_id_mask = MICREL_PHY_ID_MASK,1013 .phy_id_mask = MICREL_PHY_ID_MASK,
1014 .name = "Micrel KSZ8795",1014 .name = "Micrel KSZ8795",
1015 .features = (SUPPORTED_Pause | SUPPORTED_Asym_Pause),1015 .features = PHY_BASIC_FEATURES,
1016 .flags = PHY_HAS_MAGICANEG | PHY_HAS_INTERRUPT,1016 .flags = PHY_HAS_MAGICANEG | PHY_HAS_INTERRUPT,
1017 .config_init = kszphy_config_init,1017 .config_init = kszphy_config_init,
1018 .config_aneg = ksz8873mll_config_aneg,1018 .config_aneg = ksz8873mll_config_aneg,
drivers/net/wireless/intel/iwlwifi/iwl-8000.c+1−1
@@ -91,7 +91,7 @@ · 90 unmodified lines
91 91
92#define IWL8000_FW_PRE "iwlwifi-8000C-"92#define IWL8000_FW_PRE "iwlwifi-8000C-"
93#define IWL8000_MODULE_FIRMWARE(api) \93#define IWL8000_MODULE_FIRMWARE(api) \
94 IWL8000_FW_PRE "-" __stringify(api) ".ucode"94 IWL8000_FW_PRE __stringify(api) ".ucode"
95 95
96#define IWL8265_FW_PRE "iwlwifi-8265-"96#define IWL8265_FW_PRE "iwlwifi-8265-"
97#define IWL8265_MODULE_FIRMWARE(api) \97#define IWL8265_MODULE_FIRMWARE(api) \
drivers/net/wireless/intel/iwlwifi/mvm/sta.c+4−3
@@ -1164,9 +1164,10 @@ static void iwl_mvm_realloc_queues_after_restart(struct iwl_mvm *mvm, · 1163 unmodified lines
1164 .frame_limit = IWL_FRAME_LIMIT,1164 .frame_limit = IWL_FRAME_LIMIT,
1165 };1165 };
1166 1166
1167 /* Make sure reserved queue is still marked as such (or allocated) */1167 /* Make sure reserved queue is still marked as such (if allocated) */
1168 mvm->queue_info[mvm_sta->reserved_queue].status =1168 if (mvm_sta->reserved_queue != IEEE80211_INVAL_HW_QUEUE)
1169 IWL_MVM_QUEUE_RESERVED;1169 mvm->queue_info[mvm_sta->reserved_queue].status =
1170 IWL_MVM_QUEUE_RESERVED;
1170 1171
1171 for (i = 0; i <= IWL_MAX_TID_COUNT; i++) {1172 for (i = 0; i <= IWL_MAX_TID_COUNT; i++) {
1172 struct iwl_mvm_tid_data *tid_data = &mvm_sta->tid_data[i];1173 struct iwl_mvm_tid_data *tid_data = &mvm_sta->tid_data[i];
drivers/net/wireless/intel/iwlwifi/mvm/tt.c+8−4
@@ -843,8 +843,10 @@ static void iwl_mvm_thermal_zone_unregister(struct iwl_mvm *mvm) · 842 unmodified lines
843 return;843 return;
844 844
845 IWL_DEBUG_TEMP(mvm, "Thermal zone device unregister\n");845 IWL_DEBUG_TEMP(mvm, "Thermal zone device unregister\n");
846 thermal_zone_device_unregister(mvm->tz_device.tzone);846 if (mvm->tz_device.tzone) {
847 mvm->tz_device.tzone = NULL;847 thermal_zone_device_unregister(mvm->tz_device.tzone);
848 mvm->tz_device.tzone = NULL;
849 }
848}850}
849 851
850static void iwl_mvm_cooling_device_unregister(struct iwl_mvm *mvm)852static void iwl_mvm_cooling_device_unregister(struct iwl_mvm *mvm)
@@ -853,8 +855,10 @@ static void iwl_mvm_cooling_device_unregister(struct iwl_mvm *mvm) · 2 unmodified lines
853 return;855 return;
854 856
855 IWL_DEBUG_TEMP(mvm, "Cooling device unregister\n");857 IWL_DEBUG_TEMP(mvm, "Cooling device unregister\n");
856 thermal_cooling_device_unregister(mvm->cooling_dev.cdev);858 if (mvm->cooling_dev.cdev) {
857 mvm->cooling_dev.cdev = NULL;859 thermal_cooling_device_unregister(mvm->cooling_dev.cdev);
860 mvm->cooling_dev.cdev = NULL;
861 }
858}862}
859#endif /* CONFIG_THERMAL */863#endif /* CONFIG_THERMAL */
860 864
drivers/pci/pcie/aspm.c+13−6
@@ -532,25 +532,32 @@ static struct pcie_link_state *alloc_pcie_link_state(struct pci_dev *pdev) · 531 unmodified lines
532 link = kzalloc(sizeof(*link), GFP_KERNEL);532 link = kzalloc(sizeof(*link), GFP_KERNEL);
533 if (!link)533 if (!link)
534 return NULL;534 return NULL;
535
535 INIT_LIST_HEAD(&link->sibling);536 INIT_LIST_HEAD(&link->sibling);
536 INIT_LIST_HEAD(&link->children);537 INIT_LIST_HEAD(&link->children);
537 INIT_LIST_HEAD(&link->link);538 INIT_LIST_HEAD(&link->link);
538 link->pdev = pdev;539 link->pdev = pdev;
539 if (pci_pcie_type(pdev) != PCI_EXP_TYPE_ROOT_PORT) {540
541 /*
542 * Root Ports and PCI/PCI-X to PCIe Bridges are roots of PCIe
543 * hierarchies.
544 */
545 if (pci_pcie_type(pdev) == PCI_EXP_TYPE_ROOT_PORT ||
546 pci_pcie_type(pdev) == PCI_EXP_TYPE_PCIE_BRIDGE) {
547 link->root = link;
548 } else {
540 struct pcie_link_state *parent;549 struct pcie_link_state *parent;
550
541 parent = pdev->bus->parent->self->link_state;551 parent = pdev->bus->parent->self->link_state;
542 if (!parent) {552 if (!parent) {
543 kfree(link);553 kfree(link);
544 return NULL;554 return NULL;
545 }555 }
556
546 link->parent = parent;557 link->parent = parent;
558 link->root = link->parent->root;
547 list_add(&link->link, &parent->children);559 list_add(&link->link, &parent->children);
548 }560 }
549 /* Setup a pointer to the root port link */
550 if (!link->parent)
551 link->root = link;
552 else
553 link->root = link->parent->root;
554 561
555 list_add(&link->sibling, &link_list);562 list_add(&link->sibling, &link_list);
556 pdev->link_state = link;563 pdev->link_state = link;
drivers/pinctrl/berlin/berlin-bg4ct.c+1−1
@@ -217,7 +217,7 @@ static const struct berlin_desc_group berlin4ct_soc_pinctrl_groups[] = { · 216 unmodified lines
217 BERLIN_PINCTRL_GROUP("SCRD0_CRD_PRES", 0xc, 0x3, 0x15,217 BERLIN_PINCTRL_GROUP("SCRD0_CRD_PRES", 0xc, 0x3, 0x15,
218 BERLIN_PINCTRL_FUNCTION(0x0, "gpio"), /* GPIO20 */218 BERLIN_PINCTRL_FUNCTION(0x0, "gpio"), /* GPIO20 */
219 BERLIN_PINCTRL_FUNCTION(0x1, "scrd0"), /* crd pres */219 BERLIN_PINCTRL_FUNCTION(0x1, "scrd0"), /* crd pres */
220 BERLIN_PINCTRL_FUNCTION(0x1, "sd1a")), /* DAT3 */220 BERLIN_PINCTRL_FUNCTION(0x3, "sd1a")), /* DAT3 */
221 BERLIN_PINCTRL_GROUP("SPI1_SS0n", 0xc, 0x3, 0x18,221 BERLIN_PINCTRL_GROUP("SPI1_SS0n", 0xc, 0x3, 0x18,
222 BERLIN_PINCTRL_FUNCTION(0x0, "spi1"), /* SS0n */222 BERLIN_PINCTRL_FUNCTION(0x0, "spi1"), /* SS0n */
223 BERLIN_PINCTRL_FUNCTION(0x1, "gpio"), /* GPIO37 */223 BERLIN_PINCTRL_FUNCTION(0x1, "gpio"), /* GPIO37 */
drivers/pinctrl/intel/pinctrl-baytrail.c+20−7
@@ -731,16 +731,23 @@ static void __iomem *byt_gpio_reg(struct byt_gpio *vg, unsigned int offset, · 730 unmodified lines
731 int reg)731 int reg)
732{732{
733 struct byt_community *comm = byt_get_community(vg, offset);733 struct byt_community *comm = byt_get_community(vg, offset);
734 u32 reg_offset = 0;734 u32 reg_offset;
735 735
736 if (!comm)736 if (!comm)
737 return NULL;737 return NULL;
738 738
739 offset -= comm->pin_base;739 offset -= comm->pin_base;
740 if (reg == BYT_INT_STAT_REG)740 switch (reg) {
741 case BYT_INT_STAT_REG:
741 reg_offset = (offset / 32) * 4;742 reg_offset = (offset / 32) * 4;
742 else743 break;
744 case BYT_DEBOUNCE_REG:
745 reg_offset = 0;
746 break;
747 default:
743 reg_offset = comm->pad_map[offset] * 16;748 reg_offset = comm->pad_map[offset] * 16;
749 break;
750 }
744 751
745 return comm->reg_base + reg_offset + reg;752 return comm->reg_base + reg_offset + reg;
746}753}
@@ -1243,10 +1250,12 @@ static int byt_pin_config_set(struct pinctrl_dev *pctl_dev, · 496 unmodified lines
1243 debounce = readl(db_reg);1250 debounce = readl(db_reg);
1244 debounce &= ~BYT_DEBOUNCE_PULSE_MASK;1251 debounce &= ~BYT_DEBOUNCE_PULSE_MASK;
1245 1252
1253 if (arg)
1254 conf |= BYT_DEBOUNCE_EN;
1255 else
1256 conf &= ~BYT_DEBOUNCE_EN;
1257
1246 switch (arg) {1258 switch (arg) {
1247 case 0:
1248 conf &= BYT_DEBOUNCE_EN;
1249 break;
1250 case 375:1259 case 375:
1251 debounce |= BYT_DEBOUNCE_PULSE_375US;1260 debounce |= BYT_DEBOUNCE_PULSE_375US;
1252 break;1261 break;
@@ -1269,7 +1278,9 @@ static int byt_pin_config_set(struct pinctrl_dev *pctl_dev, · 16 unmodified lines
1269 debounce |= BYT_DEBOUNCE_PULSE_24MS;1278 debounce |= BYT_DEBOUNCE_PULSE_24MS;
1270 break;1279 break;
1271 default:1280 default:
1272 ret = -EINVAL;1281 if (arg)
1282 ret = -EINVAL;
1283 break;
1273 }1284 }
1274 1285
1275 if (!ret)1286 if (!ret)
@@ -1612,7 +1623,9 @@ static void byt_gpio_irq_handler(struct irq_desc *desc) · 336 unmodified lines
1612 continue;1623 continue;
1613 }1624 }
1614 1625
1626 raw_spin_lock(&vg->lock);
1615 pending = readl(reg);1627 pending = readl(reg);
1628 raw_spin_unlock(&vg->lock);
1616 for_each_set_bit(pin, &pending, 32) {1629 for_each_set_bit(pin, &pending, 32) {
1617 virq = irq_find_mapping(vg->chip.irqdomain, base + pin);1630 virq = irq_find_mapping(vg->chip.irqdomain, base + pin);
1618 generic_handle_irq(virq);1631 generic_handle_irq(virq);
drivers/pinctrl/intel/pinctrl-merrifield.c+3−0
@@ -794,6 +794,9 @@ static int mrfld_config_set(struct pinctrl_dev *pctldev, unsigned int pin, · 793 unmodified lines
794 unsigned int i;794 unsigned int i;
795 int ret;795 int ret;
796 796
797 if (!mrfld_buf_available(mp, pin))
798 return -ENOTSUPP;
799
797 for (i = 0; i < nconfigs; i++) {800 for (i = 0; i < nconfigs; i++) {
798 switch (pinconf_to_config_param(configs[i])) {801 switch (pinconf_to_config_param(configs[i])) {
799 case PIN_CONFIG_BIAS_DISABLE:802 case PIN_CONFIG_BIAS_DISABLE:
drivers/pinctrl/sunxi/pinctrl-sunxi.c+1−2
@@ -564,8 +564,7 @@ static int sunxi_pconf_group_set(struct pinctrl_dev *pctldev, · 563 unmodified lines
564 val = arg / 10 - 1;564 val = arg / 10 - 1;
565 break;565 break;
566 case PIN_CONFIG_BIAS_DISABLE:566 case PIN_CONFIG_BIAS_DISABLE:
567 val = 0;567 continue;
568 break;
569 case PIN_CONFIG_BIAS_PULL_UP:568 case PIN_CONFIG_BIAS_PULL_UP:
570 if (arg == 0)569 if (arg == 0)
571 return -EINVAL;570 return -EINVAL;
drivers/regulator/axp20x-regulator.c+1−1
@@ -272,7 +272,7 @@ static const struct regulator_desc axp806_regulators[] = { · 271 unmodified lines
272 64, AXP806_DCDCD_V_CTRL, 0x3f, AXP806_PWR_OUT_CTRL1,272 64, AXP806_DCDCD_V_CTRL, 0x3f, AXP806_PWR_OUT_CTRL1,
273 BIT(3)),273 BIT(3)),
274 AXP_DESC(AXP806, DCDCE, "dcdce", "vine", 1100, 3400, 100,274 AXP_DESC(AXP806, DCDCE, "dcdce", "vine", 1100, 3400, 100,
275 AXP806_DCDCB_V_CTRL, 0x1f, AXP806_PWR_OUT_CTRL1, BIT(4)),275 AXP806_DCDCE_V_CTRL, 0x1f, AXP806_PWR_OUT_CTRL1, BIT(4)),
276 AXP_DESC(AXP806, ALDO1, "aldo1", "aldoin", 700, 3300, 100,276 AXP_DESC(AXP806, ALDO1, "aldo1", "aldoin", 700, 3300, 100,
277 AXP806_ALDO1_V_CTRL, 0x1f, AXP806_PWR_OUT_CTRL1, BIT(5)),277 AXP806_ALDO1_V_CTRL, 0x1f, AXP806_PWR_OUT_CTRL1, BIT(5)),
278 AXP_DESC(AXP806, ALDO2, "aldo2", "aldoin", 700, 3400, 100,278 AXP_DESC(AXP806, ALDO2, "aldo2", "aldoin", 700, 3400, 100,
drivers/regulator/fixed.c+0−46
@@ -30,9 +30,6 @@ · 29 unmodified lines
30#include <linux/of_gpio.h>30#include <linux/of_gpio.h>
31#include <linux/regulator/of_regulator.h>31#include <linux/regulator/of_regulator.h>
32#include <linux/regulator/machine.h>32#include <linux/regulator/machine.h>
33#include <linux/acpi.h>
34#include <linux/property.h>
35#include <linux/gpio/consumer.h>
36 33
37struct fixed_voltage_data {34struct fixed_voltage_data {
38 struct regulator_desc desc;35 struct regulator_desc desc;
@@ -97,44 +94,6 @@ of_get_fixed_voltage_config(struct device *dev, · 58 unmodified lines
97 return config;94 return config;
98}95}
99 96
100/**
101 * acpi_get_fixed_voltage_config - extract fixed_voltage_config structure info
102 * @dev: device requesting for fixed_voltage_config
103 * @desc: regulator description
104 *
105 * Populates fixed_voltage_config structure by extracting data through ACPI
106 * interface, returns a pointer to the populated structure of NULL if memory
107 * alloc fails.
108 */
109static struct fixed_voltage_config *
110acpi_get_fixed_voltage_config(struct device *dev,
111 const struct regulator_desc *desc)
112{
113 struct fixed_voltage_config *config;
114 const char *supply_name;
115 struct gpio_desc *gpiod;
116 int ret;
117
118 config = devm_kzalloc(dev, sizeof(*config), GFP_KERNEL);
119 if (!config)
120 return ERR_PTR(-ENOMEM);
121
122 ret = device_property_read_string(dev, "supply-name", &supply_name);
123 if (!ret)
124 config->supply_name = supply_name;
125
126 gpiod = gpiod_get(dev, "gpio", GPIOD_ASIS);
127 if (IS_ERR(gpiod))
128 return ERR_PTR(-ENODEV);
129
130 config->gpio = desc_to_gpio(gpiod);
131 config->enable_high = device_property_read_bool(dev,
132 "enable-active-high");
133 gpiod_put(gpiod);
134
135 return config;
136}
137
138static struct regulator_ops fixed_voltage_ops = {97static struct regulator_ops fixed_voltage_ops = {
139};98};
140 99
@@ -155,11 +114,6 @@ static int reg_fixed_voltage_probe(struct platform_device *pdev) · 14 unmodified lines
155 &drvdata->desc);114 &drvdata->desc);
156 if (IS_ERR(config))115 if (IS_ERR(config))
157 return PTR_ERR(config);116 return PTR_ERR(config);
158 } else if (ACPI_HANDLE(&pdev->dev)) {
159 config = acpi_get_fixed_voltage_config(&pdev->dev,
160 &drvdata->desc);
161 if (IS_ERR(config))
162 return PTR_ERR(config);
163 } else {117 } else {
164 config = dev_get_platdata(&pdev->dev);118 config = dev_get_platdata(&pdev->dev);
165 }119 }
drivers/regulator/twl6030-regulator.c+1−1
@@ -452,7 +452,7 @@ static int twl6030smps_map_voltage(struct regulator_dev *rdev, int min_uV, · 451 unmodified lines
452 vsel = 62;452 vsel = 62;
453 else if ((min_uV > 1800000) && (min_uV <= 1900000))453 else if ((min_uV > 1800000) && (min_uV <= 1900000))
454 vsel = 61;454 vsel = 61;
455 else if ((min_uV > 1350000) && (min_uV <= 1800000))455 else if ((min_uV > 1500000) && (min_uV <= 1800000))
456 vsel = 60;456 vsel = 60;
457 else if ((min_uV > 1350000) && (min_uV <= 1500000))457 else if ((min_uV > 1350000) && (min_uV <= 1500000))
458 vsel = 59;458 vsel = 59;
drivers/rtc/Kconfig+4−1
@@ -1551,12 +1551,15 @@ config RTC_DRV_MPC5121 · 1550 unmodified lines
1551 will be called rtc-mpc5121.1551 will be called rtc-mpc5121.
1552 1552
1553config RTC_DRV_JZ47401553config RTC_DRV_JZ4740
1554 bool "Ingenic JZ4740 SoC"1554 tristate "Ingenic JZ4740 SoC"
1555 depends on MACH_INGENIC || COMPILE_TEST1555 depends on MACH_INGENIC || COMPILE_TEST
1556 help1556 help
1557 If you say yes here you get support for the Ingenic JZ47xx SoCs RTC1557 If you say yes here you get support for the Ingenic JZ47xx SoCs RTC
1558 controllers.1558 controllers.
1559 1559
1560 This driver can also be buillt as a module. If so, the module
1561 will be called rtc-jz4740.
1562
1560config RTC_DRV_LPC24XX1563config RTC_DRV_LPC24XX
1561 tristate "NXP RTC for LPC178x/18xx/408x/43xx"1564 tristate "NXP RTC for LPC178x/18xx/408x/43xx"
1562 depends on ARCH_LPC18XX || COMPILE_TEST1565 depends on ARCH_LPC18XX || COMPILE_TEST
drivers/rtc/rtc-jz4740.c+10−2
@@ -17,6 +17,7 @@ · 16 unmodified lines
17#include <linux/clk.h>17#include <linux/clk.h>
18#include <linux/io.h>18#include <linux/io.h>
19#include <linux/kernel.h>19#include <linux/kernel.h>
20#include <linux/module.h>
20#include <linux/of_device.h>21#include <linux/of_device.h>
21#include <linux/platform_device.h>22#include <linux/platform_device.h>
22#include <linux/reboot.h>23#include <linux/reboot.h>
@@ -294,7 +295,7 @@ static void jz4740_rtc_power_off(void) · 271 unmodified lines
294 JZ_REG_RTC_RESET_COUNTER, reset_counter_ticks);295 JZ_REG_RTC_RESET_COUNTER, reset_counter_ticks);
295 296
296 jz4740_rtc_poweroff(dev_for_power_off);297 jz4740_rtc_poweroff(dev_for_power_off);
297 machine_halt();298 kernel_halt();
298}299}
299 300
300static const struct of_device_id jz4740_rtc_of_match[] = {301static const struct of_device_id jz4740_rtc_of_match[] = {
@@ -302,6 +303,7 @@ static const struct of_device_id jz4740_rtc_of_match[] = { · 1 unmodified line
302 { .compatible = "ingenic,jz4780-rtc", .data = (void *)ID_JZ4780 },303 { .compatible = "ingenic,jz4780-rtc", .data = (void *)ID_JZ4780 },
303 {},304 {},
304};305};
306MODULE_DEVICE_TABLE(of, jz4740_rtc_of_match);
305 307
306static int jz4740_rtc_probe(struct platform_device *pdev)308static int jz4740_rtc_probe(struct platform_device *pdev)
307{309{
@@ -429,6 +431,7 @@ static const struct platform_device_id jz4740_rtc_ids[] = { · 121 unmodified lines
429 { "jz4780-rtc", ID_JZ4780 },431 { "jz4780-rtc", ID_JZ4780 },
430 {}432 {}
431};433};
434MODULE_DEVICE_TABLE(platform, jz4740_rtc_ids);
432 435
433static struct platform_driver jz4740_rtc_driver = {436static struct platform_driver jz4740_rtc_driver = {
434 .probe = jz4740_rtc_probe,437 .probe = jz4740_rtc_probe,
@@ -440,4 +443,9 @@ static struct platform_driver jz4740_rtc_driver = { · 5 unmodified lines
440 .id_table = jz4740_rtc_ids,443 .id_table = jz4740_rtc_ids,
441};444};
442 445
443builtin_platform_driver(jz4740_rtc_driver);446module_platform_driver(jz4740_rtc_driver);
447
448MODULE_AUTHOR("Lars-Peter Clausen <lars@metafoo.de>");
449MODULE_LICENSE("GPL");
450MODULE_DESCRIPTION("RTC driver for the JZ4740 SoC\n");
451MODULE_ALIAS("platform:jz4740-rtc");
drivers/scsi/virtio_scsi.c+10−1
@@ -534,7 +534,9 @@ static int virtscsi_queuecommand(struct virtio_scsi *vscsi, · 533 unmodified lines
534{534{
535 struct Scsi_Host *shost = virtio_scsi_host(vscsi->vdev);535 struct Scsi_Host *shost = virtio_scsi_host(vscsi->vdev);
536 struct virtio_scsi_cmd *cmd = scsi_cmd_priv(sc);536 struct virtio_scsi_cmd *cmd = scsi_cmd_priv(sc);
537 unsigned long flags;
537 int req_size;538 int req_size;
539 int ret;
538 540
539 BUG_ON(scsi_sg_count(sc) > shost->sg_tablesize);541 BUG_ON(scsi_sg_count(sc) > shost->sg_tablesize);
540 542
@@ -562,8 +564,15 @@ static int virtscsi_queuecommand(struct virtio_scsi *vscsi, · 21 unmodified lines
562 req_size = sizeof(cmd->req.cmd);564 req_size = sizeof(cmd->req.cmd);
563 }565 }
564 566
565 if (virtscsi_kick_cmd(req_vq, cmd, req_size, sizeof(cmd->resp.cmd)) != 0)567 ret = virtscsi_kick_cmd(req_vq, cmd, req_size, sizeof(cmd->resp.cmd));
568 if (ret == -EIO) {
569 cmd->resp.cmd.response = VIRTIO_SCSI_S_BAD_TARGET;
570 spin_lock_irqsave(&req_vq->vq_lock, flags);
571 virtscsi_complete_cmd(vscsi, cmd);
572 spin_unlock_irqrestore(&req_vq->vq_lock, flags);
573 } else if (ret != 0) {
566 return SCSI_MLQUEUE_HOST_BUSY;574 return SCSI_MLQUEUE_HOST_BUSY;
575 }
567 return 0;576 return 0;
568}577}
569 578
drivers/staging/greybus/timesync_platform.c+6−0
@@ -45,12 +45,18 @@ u32 gb_timesync_platform_get_clock_rate(void) · 44 unmodified lines
45 45
46int gb_timesync_platform_lock_bus(struct gb_timesync_svc *pdata)46int gb_timesync_platform_lock_bus(struct gb_timesync_svc *pdata)
47{47{
48 if (!arche_platform_change_state_cb)
49 return 0;
50
48 return arche_platform_change_state_cb(ARCHE_PLATFORM_STATE_TIME_SYNC,51 return arche_platform_change_state_cb(ARCHE_PLATFORM_STATE_TIME_SYNC,
49 pdata);52 pdata);
50}53}
51 54
52void gb_timesync_platform_unlock_bus(void)55void gb_timesync_platform_unlock_bus(void)
53{56{
57 if (!arche_platform_change_state_cb)
58 return;
59
54 arche_platform_change_state_cb(ARCHE_PLATFORM_STATE_ACTIVE, NULL);60 arche_platform_change_state_cb(ARCHE_PLATFORM_STATE_ACTIVE, NULL);
55}61}
56 62
drivers/usb/core/quirks.c+4−0
@@ -37,6 +37,10 @@ static const struct usb_device_id usb_quirk_list[] = { · 36 unmodified lines
37 /* CBM - Flash disk */37 /* CBM - Flash disk */
38 { USB_DEVICE(0x0204, 0x6025), .driver_info = USB_QUIRK_RESET_RESUME },38 { USB_DEVICE(0x0204, 0x6025), .driver_info = USB_QUIRK_RESET_RESUME },
39 39
40 /* WORLDE easy key (easykey.25) MIDI controller */
41 { USB_DEVICE(0x0218, 0x0401), .driver_info =
42 USB_QUIRK_CONFIG_INTF_STRINGS },
43
40 /* HP 5300/5370C scanner */44 /* HP 5300/5370C scanner */
41 { USB_DEVICE(0x03f0, 0x0701), .driver_info =45 { USB_DEVICE(0x03f0, 0x0701), .driver_info =
42 USB_QUIRK_STRING_FETCH_255 },46 USB_QUIRK_STRING_FETCH_255 },
drivers/usb/gadget/function/f_fs.c+12−1
@@ -2269,6 +2269,8 @@ static int __ffs_data_do_os_desc(enum ffs_os_desc_type type, · 2268 unmodified lines
2269 if (len < sizeof(*d) || h->interface >= ffs->interfaces_count)2269 if (len < sizeof(*d) || h->interface >= ffs->interfaces_count)
2270 return -EINVAL;2270 return -EINVAL;
2271 length = le32_to_cpu(d->dwSize);2271 length = le32_to_cpu(d->dwSize);
2272 if (len < length)
2273 return -EINVAL;
2272 type = le32_to_cpu(d->dwPropertyDataType);2274 type = le32_to_cpu(d->dwPropertyDataType);
2273 if (type < USB_EXT_PROP_UNICODE ||2275 if (type < USB_EXT_PROP_UNICODE ||
2274 type > USB_EXT_PROP_UNICODE_MULTI) {2276 type > USB_EXT_PROP_UNICODE_MULTI) {
@@ -2277,6 +2279,11 @@ static int __ffs_data_do_os_desc(enum ffs_os_desc_type type, · 2 unmodified lines
2277 return -EINVAL;2279 return -EINVAL;
2278 }2280 }
2279 pnl = le16_to_cpu(d->wPropertyNameLength);2281 pnl = le16_to_cpu(d->wPropertyNameLength);
2282 if (length < 14 + pnl) {
2283 pr_vdebug("invalid os descriptor length: %d pnl:%d (descriptor %d)\n",
2284 length, pnl, type);
2285 return -EINVAL;
2286 }
2280 pdl = le32_to_cpu(*(u32 *)((u8 *)data + 10 + pnl));2287 pdl = le32_to_cpu(*(u32 *)((u8 *)data + 10 + pnl));
2281 if (length != 14 + pnl + pdl) {2288 if (length != 14 + pnl + pdl) {
2282 pr_vdebug("invalid os descriptor length: %d pnl:%d pdl:%d (descriptor %d)\n",2289 pr_vdebug("invalid os descriptor length: %d pnl:%d pdl:%d (descriptor %d)\n",
@@ -2363,6 +2370,9 @@ static int __ffs_data_got_descs(struct ffs_data *ffs, · 80 unmodified lines
2363 }2370 }
2364 }2371 }
2365 if (flags & (1 << i)) {2372 if (flags & (1 << i)) {
2373 if (len < 4) {
2374 goto error;
2375 }
2366 os_descs_count = get_unaligned_le32(data);2376 os_descs_count = get_unaligned_le32(data);
2367 data += 4;2377 data += 4;
2368 len -= 4;2378 len -= 4;
@@ -2435,7 +2445,8 @@ static int __ffs_data_got_strings(struct ffs_data *ffs, · 66 unmodified lines
2435 2445
2436 ENTER();2446 ENTER();
2437 2447
2438 if (unlikely(get_unaligned_le32(data) != FUNCTIONFS_STRINGS_MAGIC ||2448 if (unlikely(len < 16 ||
2449 get_unaligned_le32(data) != FUNCTIONFS_STRINGS_MAGIC ||
2439 get_unaligned_le32(data + 4) != len))2450 get_unaligned_le32(data + 4) != len))
2440 goto error;2451 goto error;
2441 str_count = get_unaligned_le32(data + 8);2452 str_count = get_unaligned_le32(data + 8);
drivers/usb/musb/musb_core.c+13−13
@@ -594,11 +594,11 @@ static irqreturn_t musb_stage0_irq(struct musb *musb, u8 int_usb, · 593 unmodified lines
594 | MUSB_PORT_STAT_RESUME;594 | MUSB_PORT_STAT_RESUME;
595 musb->rh_timer = jiffies595 musb->rh_timer = jiffies
596 + msecs_to_jiffies(USB_RESUME_TIMEOUT);596 + msecs_to_jiffies(USB_RESUME_TIMEOUT);
597 musb->need_finish_resume = 1;
598
599 musb->xceiv->otg->state = OTG_STATE_A_HOST;597 musb->xceiv->otg->state = OTG_STATE_A_HOST;
600 musb->is_active = 1;598 musb->is_active = 1;
601 musb_host_resume_root_hub(musb);599 musb_host_resume_root_hub(musb);
600 schedule_delayed_work(&musb->finish_resume_work,
601 msecs_to_jiffies(USB_RESUME_TIMEOUT));
602 break;602 break;
603 case OTG_STATE_B_WAIT_ACON:603 case OTG_STATE_B_WAIT_ACON:
604 musb->xceiv->otg->state = OTG_STATE_B_PERIPHERAL;604 musb->xceiv->otg->state = OTG_STATE_B_PERIPHERAL;
@@ -1925,6 +1925,14 @@ static void musb_pm_runtime_check_session(struct musb *musb) · 1320 unmodified lines
1925static void musb_irq_work(struct work_struct *data)1925static void musb_irq_work(struct work_struct *data)
1926{1926{
1927 struct musb *musb = container_of(data, struct musb, irq_work.work);1927 struct musb *musb = container_of(data, struct musb, irq_work.work);
1928 int error;
1929
1930 error = pm_runtime_get_sync(musb->controller);
1931 if (error < 0) {
1932 dev_err(musb->controller, "Could not enable: %i\n", error);
1933
1934 return;
1935 }
1928 1936
1929 musb_pm_runtime_check_session(musb);1937 musb_pm_runtime_check_session(musb);
1930 1938
@@ -1932,6 +1940,9 @@ static void musb_irq_work(struct work_struct *data) · 1 unmodified line
1932 musb->xceiv_old_state = musb->xceiv->otg->state;1940 musb->xceiv_old_state = musb->xceiv->otg->state;
1933 sysfs_notify(&musb->controller->kobj, NULL, "mode");1941 sysfs_notify(&musb->controller->kobj, NULL, "mode");
1934 }1942 }
1943
1944 pm_runtime_mark_last_busy(musb->controller);
1945 pm_runtime_put_autosuspend(musb->controller);
1935}1946}
1936 1947
1937static void musb_recover_from_babble(struct musb *musb)1948static void musb_recover_from_babble(struct musb *musb)
@@ -2710,11 +2721,6 @@ static int musb_resume(struct device *dev) · 772 unmodified lines
2710 mask = MUSB_DEVCTL_BDEVICE | MUSB_DEVCTL_FSDEV | MUSB_DEVCTL_LSDEV;2721 mask = MUSB_DEVCTL_BDEVICE | MUSB_DEVCTL_FSDEV | MUSB_DEVCTL_LSDEV;
2711 if ((devctl & mask) != (musb->context.devctl & mask))2722 if ((devctl & mask) != (musb->context.devctl & mask))
2712 musb->port1_status = 0;2723 musb->port1_status = 0;
2713 if (musb->need_finish_resume) {
2714 musb->need_finish_resume = 0;
2715 schedule_delayed_work(&musb->finish_resume_work,
2716 msecs_to_jiffies(USB_RESUME_TIMEOUT));
2717 }
2718 2724
2719 /*2725 /*
2720 * The USB HUB code expects the device to be in RPM_ACTIVE once it came2726 * The USB HUB code expects the device to be in RPM_ACTIVE once it came
@@ -2766,12 +2772,6 @@ static int musb_runtime_resume(struct device *dev) · 45 unmodified lines
2766 2772
2767 musb_restore_context(musb);2773 musb_restore_context(musb);
2768 2774
2769 if (musb->need_finish_resume) {
2770 musb->need_finish_resume = 0;
2771 schedule_delayed_work(&musb->finish_resume_work,
2772 msecs_to_jiffies(USB_RESUME_TIMEOUT));
2773 }
2774
2775 spin_lock_irqsave(&musb->lock, flags);2775 spin_lock_irqsave(&musb->lock, flags);
2776 error = musb_run_resume_work(musb);2776 error = musb_run_resume_work(musb);
2777 if (error)2777 if (error)
drivers/usb/musb/musb_core.h+0−1
@@ -410,7 +410,6 @@ struct musb { · 409 unmodified lines
410 410
411 /* is_suspended means USB B_PERIPHERAL suspend */411 /* is_suspended means USB B_PERIPHERAL suspend */
412 unsigned is_suspended:1;412 unsigned is_suspended:1;
413 unsigned need_finish_resume :1;
414 413
415 /* may_wakeup means remote wakeup is enabled */414 /* may_wakeup means remote wakeup is enabled */
416 unsigned may_wakeup:1;415 unsigned may_wakeup:1;
drivers/usb/serial/option.c+1−0
@@ -2007,6 +2007,7 @@ static const struct usb_device_id option_ids[] = { · 2006 unmodified lines
2007 { USB_DEVICE_AND_INTERFACE_INFO(WETELECOM_VENDOR_ID, WETELECOM_PRODUCT_WMD200, 0xff, 0xff, 0xff) },2007 { USB_DEVICE_AND_INTERFACE_INFO(WETELECOM_VENDOR_ID, WETELECOM_PRODUCT_WMD200, 0xff, 0xff, 0xff) },
2008 { USB_DEVICE_AND_INTERFACE_INFO(WETELECOM_VENDOR_ID, WETELECOM_PRODUCT_6802, 0xff, 0xff, 0xff) },2008 { USB_DEVICE_AND_INTERFACE_INFO(WETELECOM_VENDOR_ID, WETELECOM_PRODUCT_6802, 0xff, 0xff, 0xff) },
2009 { USB_DEVICE_AND_INTERFACE_INFO(WETELECOM_VENDOR_ID, WETELECOM_PRODUCT_WMD300, 0xff, 0xff, 0xff) },2009 { USB_DEVICE_AND_INTERFACE_INFO(WETELECOM_VENDOR_ID, WETELECOM_PRODUCT_WMD300, 0xff, 0xff, 0xff) },
2010 { USB_DEVICE_AND_INTERFACE_INFO(0x03f0, 0x421d, 0xff, 0xff, 0xff) }, /* HP lt2523 (Novatel E371) */
2010 { } /* Terminating entry */2011 { } /* Terminating entry */
2011};2012};
2012MODULE_DEVICE_TABLE(usb, option_ids);2013MODULE_DEVICE_TABLE(usb, option_ids);
drivers/usb/serial/pl2303.c+1−0
@@ -49,6 +49,7 @@ static const struct usb_device_id id_table[] = { · 48 unmodified lines
49 { USB_DEVICE(IODATA_VENDOR_ID, IODATA_PRODUCT_ID) },49 { USB_DEVICE(IODATA_VENDOR_ID, IODATA_PRODUCT_ID) },
50 { USB_DEVICE(IODATA_VENDOR_ID, IODATA_PRODUCT_ID_RSAQ5) },50 { USB_DEVICE(IODATA_VENDOR_ID, IODATA_PRODUCT_ID_RSAQ5) },
51 { USB_DEVICE(ATEN_VENDOR_ID, ATEN_PRODUCT_ID) },51 { USB_DEVICE(ATEN_VENDOR_ID, ATEN_PRODUCT_ID) },
52 { USB_DEVICE(ATEN_VENDOR_ID, ATEN_PRODUCT_ID2) },
52 { USB_DEVICE(ATEN_VENDOR_ID2, ATEN_PRODUCT_ID) },53 { USB_DEVICE(ATEN_VENDOR_ID2, ATEN_PRODUCT_ID) },
53 { USB_DEVICE(ELCOM_VENDOR_ID, ELCOM_PRODUCT_ID) },54 { USB_DEVICE(ELCOM_VENDOR_ID, ELCOM_PRODUCT_ID) },
54 { USB_DEVICE(ELCOM_VENDOR_ID, ELCOM_PRODUCT_ID_UCSGT) },55 { USB_DEVICE(ELCOM_VENDOR_ID, ELCOM_PRODUCT_ID_UCSGT) },
drivers/usb/serial/pl2303.h+1−0
@@ -27,6 +27,7 @@ · 26 unmodified lines
27#define ATEN_VENDOR_ID 0x055727#define ATEN_VENDOR_ID 0x0557
28#define ATEN_VENDOR_ID2 0x054728#define ATEN_VENDOR_ID2 0x0547
29#define ATEN_PRODUCT_ID 0x200829#define ATEN_PRODUCT_ID 0x2008
30#define ATEN_PRODUCT_ID2 0x2118
30 31
31#define IODATA_VENDOR_ID 0x04bb32#define IODATA_VENDOR_ID 0x04bb
32#define IODATA_PRODUCT_ID 0x0a0333#define IODATA_PRODUCT_ID 0x0a03
drivers/usb/serial/qcserial.c+1−0
@@ -124,6 +124,7 @@ static const struct usb_device_id id_table[] = { · 123 unmodified lines
124 {USB_DEVICE(0x1410, 0xa021)}, /* Novatel Gobi 3000 Composite */124 {USB_DEVICE(0x1410, 0xa021)}, /* Novatel Gobi 3000 Composite */
125 {USB_DEVICE(0x413c, 0x8193)}, /* Dell Gobi 3000 QDL */125 {USB_DEVICE(0x413c, 0x8193)}, /* Dell Gobi 3000 QDL */
126 {USB_DEVICE(0x413c, 0x8194)}, /* Dell Gobi 3000 Composite */126 {USB_DEVICE(0x413c, 0x8194)}, /* Dell Gobi 3000 Composite */
127 {USB_DEVICE(0x413c, 0x81a6)}, /* Dell DW5570 QDL (MC8805) */
127 {USB_DEVICE(0x1199, 0x68a4)}, /* Sierra Wireless QDL */128 {USB_DEVICE(0x1199, 0x68a4)}, /* Sierra Wireless QDL */
128 {USB_DEVICE(0x1199, 0x68a5)}, /* Sierra Wireless Modem */129 {USB_DEVICE(0x1199, 0x68a5)}, /* Sierra Wireless Modem */
129 {USB_DEVICE(0x1199, 0x68a8)}, /* Sierra Wireless QDL */130 {USB_DEVICE(0x1199, 0x68a8)}, /* Sierra Wireless QDL */
drivers/vfio/vfio_iommu_spapr_tce.c+5−6
@@ -1123,12 +1123,11 @@ static long tce_iommu_ioctl(void *iommu_data, · 1122 unmodified lines
1123 mutex_lock(&container->lock);1123 mutex_lock(&container->lock);
1124 1124
1125 ret = tce_iommu_create_default_window(container);1125 ret = tce_iommu_create_default_window(container);
1126 if (ret)1126 if (!ret)
1127 return ret;1127 ret = tce_iommu_create_window(container,
1128 1128 create.page_shift,
1129 ret = tce_iommu_create_window(container, create.page_shift,1129 create.window_size, create.levels,
1130 create.window_size, create.levels,1130 &create.start_addr);
1131 &create.start_addr);
1132 1131
1133 mutex_unlock(&container->lock);1132 mutex_unlock(&container->lock);
1134 1133
drivers/vhost/vhost.c+4−6
@@ -130,14 +130,14 @@ static long vhost_get_vring_endian(struct vhost_virtqueue *vq, u32 idx, · 129 unmodified lines
130 130
131static void vhost_init_is_le(struct vhost_virtqueue *vq)131static void vhost_init_is_le(struct vhost_virtqueue *vq)
132{132{
133 if (vhost_has_feature(vq, VIRTIO_F_VERSION_1))133 vq->is_le = vhost_has_feature(vq, VIRTIO_F_VERSION_1)
134 vq->is_le = true;134 || virtio_legacy_is_little_endian();
135}135}
136#endif /* CONFIG_VHOST_CROSS_ENDIAN_LEGACY */136#endif /* CONFIG_VHOST_CROSS_ENDIAN_LEGACY */
137 137
138static void vhost_reset_is_le(struct vhost_virtqueue *vq)138static void vhost_reset_is_le(struct vhost_virtqueue *vq)
139{139{
140 vq->is_le = virtio_legacy_is_little_endian();140 vhost_init_is_le(vq);
141}141}
142 142
143struct vhost_flush_struct {143struct vhost_flush_struct {
@@ -1714,10 +1714,8 @@ int vhost_vq_init_access(struct vhost_virtqueue *vq) · 1570 unmodified lines
1714 int r;1714 int r;
1715 bool is_le = vq->is_le;1715 bool is_le = vq->is_le;
1716 1716
1717 if (!vq->private_data) {1717 if (!vq->private_data)
1718 vhost_reset_is_le(vq);
1719 return 0;1718 return 0;
1720 }
1721 1719
1722 vhost_init_is_le(vq);1720 vhost_init_is_le(vq);
1723 1721
drivers/virtio/virtio_ring.c+0−7
@@ -159,13 +159,6 @@ static bool vring_use_dma_api(struct virtio_device *vdev) · 158 unmodified lines
159 if (xen_domain())159 if (xen_domain())
160 return true;160 return true;
161 161
162 /*
163 * On ARM-based machines, the DMA ops will do the right thing,
164 * so always use them with legacy devices.
165 */
166 if (IS_ENABLED(CONFIG_ARM) || IS_ENABLED(CONFIG_ARM64))
167 return !virtio_has_feature(vdev, VIRTIO_F_VERSION_1);
168
169 return false;162 return false;
170}163}
171 164
fs/cifs/readdir.c+1−0
@@ -285,6 +285,7 @@ initiate_cifs_search(const unsigned int xid, struct file *file) · 284 unmodified lines
285 rc = -ENOMEM;285 rc = -ENOMEM;
286 goto error_exit;286 goto error_exit;
287 }287 }
288 spin_lock_init(&cifsFile->file_info_lock);
288 file->private_data = cifsFile;289 file->private_data = cifsFile;
289 cifsFile->tlink = cifs_get_tlink(tlink);290 cifsFile->tlink = cifs_get_tlink(tlink);
290 tcon = tlink_tcon(tlink);291 tcon = tlink_tcon(tlink);
fs/dax.c+5−0
@@ -1031,6 +1031,11 @@ dax_iomap_actor(struct inode *inode, loff_t pos, loff_t length, void *data, · 1030 unmodified lines
1031 struct blk_dax_ctl dax = { 0 };1031 struct blk_dax_ctl dax = { 0 };
1032 ssize_t map_len;1032 ssize_t map_len;
1033 1033
1034 if (fatal_signal_pending(current)) {
1035 ret = -EINTR;
1036 break;
1037 }
1038
1034 dax.sector = dax_iomap_sector(iomap, pos);1039 dax.sector = dax_iomap_sector(iomap, pos);
1035 dax.size = (length + offset + PAGE_SIZE - 1) & PAGE_MASK;1040 dax.size = (length + offset + PAGE_SIZE - 1) & PAGE_MASK;
1036 map_len = dax_map_atomic(iomap->bdev, &dax);1041 map_len = dax_map_atomic(iomap->bdev, &dax);
fs/fscache/cookie.c+5−0
@@ -542,6 +542,7 @@ void __fscache_disable_cookie(struct fscache_cookie *cookie, bool invalidate) · 541 unmodified lines
542 hlist_for_each_entry(object, &cookie->backing_objects, cookie_link) {542 hlist_for_each_entry(object, &cookie->backing_objects, cookie_link) {
543 if (invalidate)543 if (invalidate)
544 set_bit(FSCACHE_OBJECT_RETIRED, &object->flags);544 set_bit(FSCACHE_OBJECT_RETIRED, &object->flags);
545 clear_bit(FSCACHE_OBJECT_PENDING_WRITE, &object->flags);
545 fscache_raise_event(object, FSCACHE_OBJECT_EV_KILL);546 fscache_raise_event(object, FSCACHE_OBJECT_EV_KILL);
546 }547 }
547 } else {548 } else {
@@ -560,6 +561,10 @@ void __fscache_disable_cookie(struct fscache_cookie *cookie, bool invalidate) · 12 unmodified lines
560 wait_on_atomic_t(&cookie->n_active, fscache_wait_atomic_t,561 wait_on_atomic_t(&cookie->n_active, fscache_wait_atomic_t,
561 TASK_UNINTERRUPTIBLE);562 TASK_UNINTERRUPTIBLE);
562 563
564 /* Make sure any pending writes are cancelled. */
565 if (cookie->def->type != FSCACHE_COOKIE_TYPE_INDEX)
566 fscache_invalidate_writes(cookie);
567
563 /* Reset the cookie state if it wasn't relinquished */568 /* Reset the cookie state if it wasn't relinquished */
564 if (!test_bit(FSCACHE_COOKIE_RELINQUISHED, &cookie->flags)) {569 if (!test_bit(FSCACHE_COOKIE_RELINQUISHED, &cookie->flags)) {
565 atomic_inc(&cookie->n_active);570 atomic_inc(&cookie->n_active);
fs/fscache/netfs.c+1−0
@@ -48,6 +48,7 @@ int __fscache_register_netfs(struct fscache_netfs *netfs) · 47 unmodified lines
48 cookie->flags = 1 << FSCACHE_COOKIE_ENABLED;48 cookie->flags = 1 << FSCACHE_COOKIE_ENABLED;
49 49
50 spin_lock_init(&cookie->lock);50 spin_lock_init(&cookie->lock);
51 spin_lock_init(&cookie->stores_lock);
51 INIT_HLIST_HEAD(&cookie->backing_objects);52 INIT_HLIST_HEAD(&cookie->backing_objects);
52 53
53 /* check the netfs type is not already present */54 /* check the netfs type is not already present */
fs/fscache/object.c+30−2
@@ -30,6 +30,7 @@ static const struct fscache_state *fscache_look_up_object(struct fscache_object · 29 unmodified lines
30static const struct fscache_state *fscache_object_available(struct fscache_object *, int);30static const struct fscache_state *fscache_object_available(struct fscache_object *, int);
31static const struct fscache_state *fscache_parent_ready(struct fscache_object *, int);31static const struct fscache_state *fscache_parent_ready(struct fscache_object *, int);
32static const struct fscache_state *fscache_update_object(struct fscache_object *, int);32static const struct fscache_state *fscache_update_object(struct fscache_object *, int);
33static const struct fscache_state *fscache_object_dead(struct fscache_object *, int);
33 34
34#define __STATE_NAME(n) fscache_osm_##n35#define __STATE_NAME(n) fscache_osm_##n
35#define STATE(n) (&__STATE_NAME(n))36#define STATE(n) (&__STATE_NAME(n))
@@ -91,7 +92,7 @@ static WORK_STATE(LOOKUP_FAILURE, "LCFL", fscache_lookup_failure); · 55 unmodified lines
91static WORK_STATE(KILL_OBJECT, "KILL", fscache_kill_object);92static WORK_STATE(KILL_OBJECT, "KILL", fscache_kill_object);
92static WORK_STATE(KILL_DEPENDENTS, "KDEP", fscache_kill_dependents);93static WORK_STATE(KILL_DEPENDENTS, "KDEP", fscache_kill_dependents);
93static WORK_STATE(DROP_OBJECT, "DROP", fscache_drop_object);94static WORK_STATE(DROP_OBJECT, "DROP", fscache_drop_object);
94static WORK_STATE(OBJECT_DEAD, "DEAD", (void*)2UL);95static WORK_STATE(OBJECT_DEAD, "DEAD", fscache_object_dead);
95 96
96static WAIT_STATE(WAIT_FOR_INIT, "?INI",97static WAIT_STATE(WAIT_FOR_INIT, "?INI",
97 TRANSIT_TO(INIT_OBJECT, 1 << FSCACHE_OBJECT_EV_NEW_CHILD));98 TRANSIT_TO(INIT_OBJECT, 1 << FSCACHE_OBJECT_EV_NEW_CHILD));
@@ -229,6 +230,10 @@ execute_work_state: · 131 unmodified lines
229 event = -1;230 event = -1;
230 if (new_state == NO_TRANSIT) {231 if (new_state == NO_TRANSIT) {
231 _debug("{OBJ%x} %s notrans", object->debug_id, state->name);232 _debug("{OBJ%x} %s notrans", object->debug_id, state->name);
233 if (unlikely(state == STATE(OBJECT_DEAD))) {
234 _leave(" [dead]");
235 return;
236 }
232 fscache_enqueue_object(object);237 fscache_enqueue_object(object);
233 event_mask = object->oob_event_mask;238 event_mask = object->oob_event_mask;
234 goto unmask_events;239 goto unmask_events;
@@ -239,7 +244,7 @@ execute_work_state: · 4 unmodified lines
239 object->state = state = new_state;244 object->state = state = new_state;
240 245
241 if (state->work) {246 if (state->work) {
242 if (unlikely(state->work == ((void *)2UL))) {247 if (unlikely(state == STATE(OBJECT_DEAD))) {
243 _leave(" [dead]");248 _leave(" [dead]");
244 return;249 return;
245 }250 }
@@ -645,6 +650,12 @@ static const struct fscache_state *fscache_kill_object(struct fscache_object *ob · 399 unmodified lines
645 fscache_mark_object_dead(object);650 fscache_mark_object_dead(object);
646 object->oob_event_mask = 0;651 object->oob_event_mask = 0;
647 652
653 if (test_bit(FSCACHE_OBJECT_RETIRED, &object->flags)) {
654 /* Reject any new read/write ops and abort any that are pending. */
655 clear_bit(FSCACHE_OBJECT_PENDING_WRITE, &object->flags);
656 fscache_cancel_all_ops(object);
657 }
658
648 if (list_empty(&object->dependents) &&659 if (list_empty(&object->dependents) &&
649 object->n_ops == 0 &&660 object->n_ops == 0 &&
650 object->n_children == 0)661 object->n_children == 0)
@@ -1077,3 +1088,20 @@ void fscache_object_mark_killed(struct fscache_object *object, · 426 unmodified lines
1077 }1088 }
1078}1089}
1079EXPORT_SYMBOL(fscache_object_mark_killed);1090EXPORT_SYMBOL(fscache_object_mark_killed);
1091
1092/*
1093 * The object is dead. We can get here if an object gets queued by an event
1094 * that would lead to its death (such as EV_KILL) when the dispatcher is
1095 * already running (and so can be requeued) but hasn't yet cleared the event
1096 * mask.
1097 */
1098static const struct fscache_state *fscache_object_dead(struct fscache_object *object,
1099 int event)
1100{
1101 if (!test_and_set_bit(FSCACHE_OBJECT_RUN_AFTER_DEAD,
1102 &object->flags))
1103 return NO_TRANSIT;
1104
1105 WARN(true, "FS-Cache object redispatched after death");
1106 return NO_TRANSIT;
1107}
fs/iomap.c+3−0
@@ -114,6 +114,9 @@ iomap_write_begin(struct inode *inode, loff_t pos, unsigned len, unsigned flags, · 113 unmodified lines
114 114
115 BUG_ON(pos + len > iomap->offset + iomap->length);115 BUG_ON(pos + len > iomap->offset + iomap->length);
116 116
117 if (fatal_signal_pending(current))
118 return -EINTR;
119
117 page = grab_cache_page_write_begin(inode->i_mapping, index, flags);120 page = grab_cache_page_write_begin(inode->i_mapping, index, flags);
118 if (!page)121 if (!page)
119 return -ENOMEM;122 return -ENOMEM;
fs/nfsd/vfs.c+60−37
@@ -332,6 +332,37 @@ nfsd_sanitize_attrs(struct inode *inode, struct iattr *iap) · 331 unmodified lines
332 }332 }
333}333}
334 334
335static __be32
336nfsd_get_write_access(struct svc_rqst *rqstp, struct svc_fh *fhp,
337 struct iattr *iap)
338{
339 struct inode *inode = d_inode(fhp->fh_dentry);
340 int host_err;
341
342 if (iap->ia_size < inode->i_size) {
343 __be32 err;
344
345 err = nfsd_permission(rqstp, fhp->fh_export, fhp->fh_dentry,
346 NFSD_MAY_TRUNC | NFSD_MAY_OWNER_OVERRIDE);
347 if (err)
348 return err;
349 }
350
351 host_err = get_write_access(inode);
352 if (host_err)
353 goto out_nfserrno;
354
355 host_err = locks_verify_truncate(inode, NULL, iap->ia_size);
356 if (host_err)
357 goto out_put_write_access;
358 return 0;
359
360out_put_write_access:
361 put_write_access(inode);
362out_nfserrno:
363 return nfserrno(host_err);
364}
365
335/*366/*
336 * Set various file attributes. After this call fhp needs an fh_put.367 * Set various file attributes. After this call fhp needs an fh_put.
337 */368 */
@@ -346,6 +377,7 @@ nfsd_setattr(struct svc_rqst *rqstp, struct svc_fh *fhp, struct iattr *iap, · 8 unmodified lines
346 __be32 err;377 __be32 err;
347 int host_err;378 int host_err;
348 bool get_write_count;379 bool get_write_count;
380 int size_change = 0;
349 381
350 if (iap->ia_valid & (ATTR_ATIME | ATTR_MTIME | ATTR_SIZE))382 if (iap->ia_valid & (ATTR_ATIME | ATTR_MTIME | ATTR_SIZE))
351 accmode |= NFSD_MAY_WRITE|NFSD_MAY_OWNER_OVERRIDE;383 accmode |= NFSD_MAY_WRITE|NFSD_MAY_OWNER_OVERRIDE;
@@ -358,11 +390,11 @@ nfsd_setattr(struct svc_rqst *rqstp, struct svc_fh *fhp, struct iattr *iap, · 6 unmodified lines
358 /* Get inode */390 /* Get inode */
359 err = fh_verify(rqstp, fhp, ftype, accmode);391 err = fh_verify(rqstp, fhp, ftype, accmode);
360 if (err)392 if (err)
361 return err;393 goto out;
362 if (get_write_count) {394 if (get_write_count) {
363 host_err = fh_want_write(fhp);395 host_err = fh_want_write(fhp);
364 if (host_err)396 if (host_err)
365 goto out_host_err;397 return nfserrno(host_err);
366 }398 }
367 399
368 dentry = fhp->fh_dentry;400 dentry = fhp->fh_dentry;
@@ -373,59 +405,50 @@ nfsd_setattr(struct svc_rqst *rqstp, struct svc_fh *fhp, struct iattr *iap, · 4 unmodified lines
373 iap->ia_valid &= ~ATTR_MODE;405 iap->ia_valid &= ~ATTR_MODE;
374 406
375 if (!iap->ia_valid)407 if (!iap->ia_valid)
376 return 0;408 goto out;
377 409
378 nfsd_sanitize_attrs(inode, iap);410 nfsd_sanitize_attrs(inode, iap);
379 411
380 if (check_guard && guardtime != inode->i_ctime.tv_sec)
381 return nfserr_notsync;
382
383 /*412 /*
384 * The size case is special, it changes the file in addition to the413 * The size case is special, it changes the file in addition to the
385 * attributes, and file systems don't expect it to be mixed with414 * attributes.
386 * "random" attribute changes. We thus split out the size change
387 * into a separate call for vfs_truncate, and do the rest as a
388 * a separate setattr call.
389 */415 */
390 if (iap->ia_valid & ATTR_SIZE) {416 if (iap->ia_valid & ATTR_SIZE) {
391 struct path path = {417 err = nfsd_get_write_access(rqstp, fhp, iap);
392 .mnt = fhp->fh_export->ex_path.mnt,418 if (err)
393 .dentry = dentry,419 goto out;
394 };420 size_change = 1;
395 bool implicit_mtime = false;
396 421
397 /*422 /*
398 * vfs_truncate implicity updates the mtime IFF the file size423 * RFC5661, Section 18.30.4:
399 * actually changes. Avoid the additional seattr call below if424 * Changing the size of a file with SETATTR indirectly
400 * the only other attribute that the client sends is the mtime.425 * changes the time_modify and change attributes.
426 *
427 * (and similar for the older RFCs)
401 */428 */
402 if (iap->ia_size != i_size_read(inode) &&429 if (iap->ia_size != i_size_read(inode))
403 ((iap->ia_valid & ~(ATTR_SIZE | ATTR_MTIME)) == 0))430 iap->ia_valid |= ATTR_MTIME;
404 implicit_mtime = true;
405
406 host_err = vfs_truncate(&path, iap->ia_size);
407 if (host_err)
408 goto out_host_err;
409
410 iap->ia_valid &= ~ATTR_SIZE;
411 if (implicit_mtime)
412 iap->ia_valid &= ~ATTR_MTIME;
413 if (!iap->ia_valid)
414 goto done;
415 }431 }
416 432
417 iap->ia_valid |= ATTR_CTIME;433 iap->ia_valid |= ATTR_CTIME;
418 434
435 if (check_guard && guardtime != inode->i_ctime.tv_sec) {
436 err = nfserr_notsync;
437 goto out_put_write_access;
438 }
439
419 fh_lock(fhp);440 fh_lock(fhp);
420 host_err = notify_change(dentry, iap, NULL);441 host_err = notify_change(dentry, iap, NULL);
421 fh_unlock(fhp);442 fh_unlock(fhp);
422 if (host_err)443 err = nfserrno(host_err);
423 goto out_host_err;
424 444
425done:445out_put_write_access:
426 host_err = commit_metadata(fhp);446 if (size_change)
427out_host_err:447 put_write_access(inode);
428 return nfserrno(host_err);448 if (!err)
449 err = nfserrno(commit_metadata(fhp));
450out:
451 return err;
429}452}
430 453
431#if defined(CONFIG_NFSD_V4)454#if defined(CONFIG_NFSD_V4)
include/asm-generic/export.h+6−5
@@ -9,18 +9,15 @@ · 8 unmodified lines
9#ifndef KSYM_ALIGN9#ifndef KSYM_ALIGN
10#define KSYM_ALIGN 810#define KSYM_ALIGN 8
11#endif11#endif
12#ifndef KCRC_ALIGN
13#define KCRC_ALIGN 8
14#endif
15#else12#else
16#define __put .long13#define __put .long
17#ifndef KSYM_ALIGN14#ifndef KSYM_ALIGN
18#define KSYM_ALIGN 415#define KSYM_ALIGN 4
19#endif16#endif
17#endif
20#ifndef KCRC_ALIGN18#ifndef KCRC_ALIGN
21#define KCRC_ALIGN 419#define KCRC_ALIGN 4
22#endif20#endif
23#endif
24 21
25#ifdef CONFIG_HAVE_UNDERSCORE_SYMBOL_PREFIX22#ifdef CONFIG_HAVE_UNDERSCORE_SYMBOL_PREFIX
26#define KSYM(name) _##name23#define KSYM(name) _##name
@@ -52,7 +49,11 @@ KSYM(__kstrtab_\name): · 25 unmodified lines
52 .section ___kcrctab\sec+\name,"a"49 .section ___kcrctab\sec+\name,"a"
53 .balign KCRC_ALIGN50 .balign KCRC_ALIGN
54KSYM(__kcrctab_\name):51KSYM(__kcrctab_\name):
55 __put KSYM(__crc_\name)52#if defined(CONFIG_MODULE_REL_CRCS)
53 .long KSYM(__crc_\name) - .
54#else
55 .long KSYM(__crc_\name)
56#endif
56 .weak KSYM(__crc_\name)57 .weak KSYM(__crc_\name)
57 .previous58 .previous
58#endif59#endif
include/drm/drmP.h+1−0
@@ -517,6 +517,7 @@ struct drm_device { · 516 unmodified lines
517 struct drm_minor *control; /**< Control node */517 struct drm_minor *control; /**< Control node */
518 struct drm_minor *primary; /**< Primary node */518 struct drm_minor *primary; /**< Primary node */
519 struct drm_minor *render; /**< Render node */519 struct drm_minor *render; /**< Render node */
520 bool registered;
520 521
521 /* currently active master for this device. Protected by master_mutex */522 /* currently active master for this device. Protected by master_mutex */
522 struct drm_master *master;523 struct drm_master *master;
include/drm/drm_connector.h+15−1
@@ -381,6 +381,8 @@ struct drm_connector_funcs { · 380 unmodified lines
381 * core drm connector interfaces. Everything added from this callback381 * core drm connector interfaces. Everything added from this callback
382 * should be unregistered in the early_unregister callback.382 * should be unregistered in the early_unregister callback.
383 *383 *
384 * This is called while holding drm_connector->mutex.
385 *
384 * Returns:386 * Returns:
385 *387 *
386 * 0 on success, or a negative error code on failure.388 * 0 on success, or a negative error code on failure.
@@ -395,6 +397,8 @@ struct drm_connector_funcs { · 8 unmodified lines
395 * late_register(). It is called from drm_connector_unregister(),397 * late_register(). It is called from drm_connector_unregister(),
396 * early in the driver unload sequence to disable userspace access398 * early in the driver unload sequence to disable userspace access
397 * before data structures are torndown.399 * before data structures are torndown.
400 *
401 * This is called while holding drm_connector->mutex.
398 */402 */
399 void (*early_unregister)(struct drm_connector *connector);403 void (*early_unregister)(struct drm_connector *connector);
400 404
@@ -559,7 +563,6 @@ struct drm_cmdline_mode { · 158 unmodified lines
559 * @interlace_allowed: can this connector handle interlaced modes?563 * @interlace_allowed: can this connector handle interlaced modes?
560 * @doublescan_allowed: can this connector handle doublescan?564 * @doublescan_allowed: can this connector handle doublescan?
561 * @stereo_allowed: can this connector handle stereo modes?565 * @stereo_allowed: can this connector handle stereo modes?
562 * @registered: is this connector exposed (registered) with userspace?
563 * @modes: modes available on this connector (from fill_modes() + user)566 * @modes: modes available on this connector (from fill_modes() + user)
564 * @status: one of the drm_connector_status enums (connected, not, or unknown)567 * @status: one of the drm_connector_status enums (connected, not, or unknown)
565 * @probed_modes: list of modes derived directly from the display568 * @probed_modes: list of modes derived directly from the display
@@ -607,6 +610,13 @@ struct drm_connector { · 41 unmodified lines
607 610
608 char *name;611 char *name;
609 612
613 /**
614 * @mutex: Lock for general connector state, but currently only protects
615 * @registered. Most of the connector state is still protected by the
616 * mutex in &drm_mode_config.
617 */
618 struct mutex mutex;
619
610 /**620 /**
611 * @index: Compacted connector index, which matches the position inside621 * @index: Compacted connector index, which matches the position inside
612 * the mode_config.list for drivers not supporting hot-add/removing. Can622 * the mode_config.list for drivers not supporting hot-add/removing. Can
@@ -620,6 +630,10 @@ struct drm_connector { · 7 unmodified lines
620 bool interlace_allowed;630 bool interlace_allowed;
621 bool doublescan_allowed;631 bool doublescan_allowed;
622 bool stereo_allowed;632 bool stereo_allowed;
633 /**
634 * @registered: Is this connector exposed (registered) with userspace?
635 * Protected by @mutex.
636 */
623 bool registered;637 bool registered;
624 struct list_head modes; /* list of modes on this connector */638 struct list_head modes; /* list of modes on this connector */
625 639
include/linux/can/core.h+3−4
@@ -45,10 +45,9 @@ struct can_proto { · 44 unmodified lines
45extern int can_proto_register(const struct can_proto *cp);45extern int can_proto_register(const struct can_proto *cp);
46extern void can_proto_unregister(const struct can_proto *cp);46extern void can_proto_unregister(const struct can_proto *cp);
47 47
48extern int can_rx_register(struct net_device *dev, canid_t can_id,48int can_rx_register(struct net_device *dev, canid_t can_id, canid_t mask,
49 canid_t mask,49 void (*func)(struct sk_buff *, void *),
50 void (*func)(struct sk_buff *, void *),50 void *data, char *ident, struct sock *sk);
51 void *data, char *ident);
52 51
53extern void can_rx_unregister(struct net_device *dev, canid_t can_id,52extern void can_rx_unregister(struct net_device *dev, canid_t can_id,
54 canid_t mask,53 canid_t mask,
include/linux/cpuhotplug.h+0−3
@@ -8,9 +8,7 @@ enum cpuhp_state { · 7 unmodified lines
8 CPUHP_CREATE_THREADS,8 CPUHP_CREATE_THREADS,
9 CPUHP_PERF_PREPARE,9 CPUHP_PERF_PREPARE,
10 CPUHP_PERF_X86_PREPARE,10 CPUHP_PERF_X86_PREPARE,
11 CPUHP_PERF_X86_UNCORE_PREP,
12 CPUHP_PERF_X86_AMD_UNCORE_PREP,11 CPUHP_PERF_X86_AMD_UNCORE_PREP,
13 CPUHP_PERF_X86_RAPL_PREP,
14 CPUHP_PERF_BFIN,12 CPUHP_PERF_BFIN,
15 CPUHP_PERF_POWER,13 CPUHP_PERF_POWER,
16 CPUHP_PERF_SUPERH,14 CPUHP_PERF_SUPERH,
@@ -86,7 +84,6 @@ enum cpuhp_state { · 69 unmodified lines
86 CPUHP_AP_IRQ_ARMADA_XP_STARTING,84 CPUHP_AP_IRQ_ARMADA_XP_STARTING,
87 CPUHP_AP_IRQ_BCM2836_STARTING,85 CPUHP_AP_IRQ_BCM2836_STARTING,
88 CPUHP_AP_ARM_MVEBU_COHERENCY,86 CPUHP_AP_ARM_MVEBU_COHERENCY,
89 CPUHP_AP_PERF_X86_UNCORE_STARTING,
90 CPUHP_AP_PERF_X86_AMD_UNCORE_STARTING,87 CPUHP_AP_PERF_X86_AMD_UNCORE_STARTING,
91 CPUHP_AP_PERF_X86_STARTING,88 CPUHP_AP_PERF_X86_STARTING,
92 CPUHP_AP_PERF_X86_AMD_IBS_STARTING,89 CPUHP_AP_PERF_X86_AMD_IBS_STARTING,
include/linux/export.h+12−5
@@ -43,12 +43,19 @@ extern struct module __this_module; · 42 unmodified lines
43#ifdef CONFIG_MODVERSIONS43#ifdef CONFIG_MODVERSIONS
44/* Mark the CRC weak since genksyms apparently decides not to44/* Mark the CRC weak since genksyms apparently decides not to
45 * generate a checksums for some symbols */45 * generate a checksums for some symbols */
46#if defined(CONFIG_MODULE_REL_CRCS)
46#define __CRC_SYMBOL(sym, sec) \47#define __CRC_SYMBOL(sym, sec) \
47 extern __visible void *__crc_##sym __attribute__((weak)); \48 asm(" .section \"___kcrctab" sec "+" #sym "\", \"a\" \n" \
48 static const unsigned long __kcrctab_##sym \49 " .weak " VMLINUX_SYMBOL_STR(__crc_##sym) " \n" \
49 __used \50 " .long " VMLINUX_SYMBOL_STR(__crc_##sym) " - . \n" \
50 __attribute__((section("___kcrctab" sec "+" #sym), used)) \51 " .previous \n");
51 = (unsigned long) &__crc_##sym;52#else
53#define __CRC_SYMBOL(sym, sec) \
54 asm(" .section \"___kcrctab" sec "+" #sym "\", \"a\" \n" \
55 " .weak " VMLINUX_SYMBOL_STR(__crc_##sym) " \n" \
56 " .long " VMLINUX_SYMBOL_STR(__crc_##sym) " \n" \
57 " .previous \n");
58#endif
52#else59#else
53#define __CRC_SYMBOL(sym, sec)60#define __CRC_SYMBOL(sym, sec)
54#endif61#endif
include/linux/fscache-cache.h+1−0
@@ -360,6 +360,7 @@ struct fscache_object { · 359 unmodified lines
360#define FSCACHE_OBJECT_IS_AVAILABLE 5 /* T if object has become active */360#define FSCACHE_OBJECT_IS_AVAILABLE 5 /* T if object has become active */
361#define FSCACHE_OBJECT_RETIRED 6 /* T if object was retired on relinquishment */361#define FSCACHE_OBJECT_RETIRED 6 /* T if object was retired on relinquishment */
362#define FSCACHE_OBJECT_KILLED_BY_CACHE 7 /* T if object was killed by the cache */362#define FSCACHE_OBJECT_KILLED_BY_CACHE 7 /* T if object was killed by the cache */
363#define FSCACHE_OBJECT_RUN_AFTER_DEAD 8 /* T if object has been dispatched after death */
363 364
364 struct list_head cache_link; /* link in cache->object_list */365 struct list_head cache_link; /* link in cache->object_list */
365 struct hlist_node cookie_link; /* link in cookie->backing_objects */366 struct hlist_node cookie_link; /* link in cookie->backing_objects */
include/linux/hyperv.h+30−2
@@ -128,6 +128,7 @@ struct hv_ring_buffer_info { · 127 unmodified lines
128 u32 ring_data_startoffset;128 u32 ring_data_startoffset;
129 u32 priv_write_index;129 u32 priv_write_index;
130 u32 priv_read_index;130 u32 priv_read_index;
131 u32 cached_read_index;
131};132};
132 133
133/*134/*
@@ -180,6 +181,19 @@ static inline u32 hv_get_bytes_to_write(struct hv_ring_buffer_info *rbi) · 46 unmodified lines
180 return write;181 return write;
181}182}
182 183
184static inline u32 hv_get_cached_bytes_to_write(
185 const struct hv_ring_buffer_info *rbi)
186{
187 u32 read_loc, write_loc, dsize, write;
188
189 dsize = rbi->ring_datasize;
190 read_loc = rbi->cached_read_index;
191 write_loc = rbi->ring_buffer->write_index;
192
193 write = write_loc >= read_loc ? dsize - (write_loc - read_loc) :
194 read_loc - write_loc;
195 return write;
196}
183/*197/*
184 * VMBUS version is 32 bit entity broken up into198 * VMBUS version is 32 bit entity broken up into
185 * two 16 bit quantities: major_number. minor_number.199 * two 16 bit quantities: major_number. minor_number.
@@ -1488,7 +1502,7 @@ hv_get_ring_buffer(struct hv_ring_buffer_info *ring_info) · 1302 unmodified lines
1488 1502
1489static inline void hv_signal_on_read(struct vmbus_channel *channel)1503static inline void hv_signal_on_read(struct vmbus_channel *channel)
1490{1504{
1491 u32 cur_write_sz;1505 u32 cur_write_sz, cached_write_sz;
1492 u32 pending_sz;1506 u32 pending_sz;
1493 struct hv_ring_buffer_info *rbi = &channel->inbound;1507 struct hv_ring_buffer_info *rbi = &channel->inbound;
1494 1508
@@ -1512,12 +1526,24 @@ static inline void hv_signal_on_read(struct vmbus_channel *channel) · 17 unmodified lines
1512 1526
1513 cur_write_sz = hv_get_bytes_to_write(rbi);1527 cur_write_sz = hv_get_bytes_to_write(rbi);
1514 1528
1515 if (cur_write_sz >= pending_sz)1529 if (cur_write_sz < pending_sz)
1530 return;
1531
1532 cached_write_sz = hv_get_cached_bytes_to_write(rbi);
1533 if (cached_write_sz < pending_sz)
1516 vmbus_setevent(channel);1534 vmbus_setevent(channel);
1517 1535
1518 return;1536 return;
1519}1537}
1520 1538
1539static inline void
1540init_cached_read_index(struct vmbus_channel *channel)
1541{
1542 struct hv_ring_buffer_info *rbi = &channel->inbound;
1543
1544 rbi->cached_read_index = rbi->ring_buffer->read_index;
1545}
1546
1521/*1547/*
1522 * An API to support in-place processing of incoming VMBUS packets.1548 * An API to support in-place processing of incoming VMBUS packets.
1523 */1549 */
@@ -1569,6 +1595,8 @@ static inline void put_pkt_raw(struct vmbus_channel *channel, · 45 unmodified lines
1569 * This call commits the read index and potentially signals the host.1595 * This call commits the read index and potentially signals the host.
1570 * Here is the pattern for using the "in-place" consumption APIs:1596 * Here is the pattern for using the "in-place" consumption APIs:
1571 *1597 *
1598 * init_cached_read_index();
1599 *
1572 * while (get_next_pkt_raw() {1600 * while (get_next_pkt_raw() {
1573 * process the packet "in-place";1601 * process the packet "in-place";
1574 * put_pkt_raw();1602 * put_pkt_raw();
include/linux/irq.h+17−0
@@ -184,6 +184,7 @@ struct irq_data { · 183 unmodified lines
184 *184 *
185 * IRQD_TRIGGER_MASK - Mask for the trigger type bits185 * IRQD_TRIGGER_MASK - Mask for the trigger type bits
186 * IRQD_SETAFFINITY_PENDING - Affinity setting is pending186 * IRQD_SETAFFINITY_PENDING - Affinity setting is pending
187 * IRQD_ACTIVATED - Interrupt has already been activated
187 * IRQD_NO_BALANCING - Balancing disabled for this IRQ188 * IRQD_NO_BALANCING - Balancing disabled for this IRQ
188 * IRQD_PER_CPU - Interrupt is per cpu189 * IRQD_PER_CPU - Interrupt is per cpu
189 * IRQD_AFFINITY_SET - Interrupt affinity was set190 * IRQD_AFFINITY_SET - Interrupt affinity was set
@@ -202,6 +203,7 @@ struct irq_data { · 12 unmodified lines
202enum {203enum {
203 IRQD_TRIGGER_MASK = 0xf,204 IRQD_TRIGGER_MASK = 0xf,
204 IRQD_SETAFFINITY_PENDING = (1 << 8),205 IRQD_SETAFFINITY_PENDING = (1 << 8),
206 IRQD_ACTIVATED = (1 << 9),
205 IRQD_NO_BALANCING = (1 << 10),207 IRQD_NO_BALANCING = (1 << 10),
206 IRQD_PER_CPU = (1 << 11),208 IRQD_PER_CPU = (1 << 11),
207 IRQD_AFFINITY_SET = (1 << 12),209 IRQD_AFFINITY_SET = (1 << 12),
@@ -312,6 +314,21 @@ static inline bool irqd_affinity_is_managed(struct irq_data *d) · 104 unmodified lines
312 return __irqd_to_state(d) & IRQD_AFFINITY_MANAGED;314 return __irqd_to_state(d) & IRQD_AFFINITY_MANAGED;
313}315}
314 316
317static inline bool irqd_is_activated(struct irq_data *d)
318{
319 return __irqd_to_state(d) & IRQD_ACTIVATED;
320}
321
322static inline void irqd_set_activated(struct irq_data *d)
323{
324 __irqd_to_state(d) |= IRQD_ACTIVATED;
325}
326
327static inline void irqd_clr_activated(struct irq_data *d)
328{
329 __irqd_to_state(d) &= ~IRQD_ACTIVATED;
330}
331
315#undef __irqd_to_state332#undef __irqd_to_state
316 333
317static inline irq_hw_number_t irqd_to_hwirq(struct irq_data *d)334static inline irq_hw_number_t irqd_to_hwirq(struct irq_data *d)
include/linux/log2.h+12−1
@@ -203,6 +203,17 @@ unsigned long __rounddown_pow_of_two(unsigned long n) · 202 unmodified lines
203 * ... and so on.203 * ... and so on.
204 */204 */
205 205
206#define order_base_2(n) ilog2(roundup_pow_of_two(n))206static inline __attribute_const__
207int __order_base_2(unsigned long n)
208{
209 return n > 1 ? ilog2(n - 1) + 1 : 0;
210}
207 211
212#define order_base_2(n) \
213( \
214 __builtin_constant_p(n) ? ( \
215 ((n) == 0 || (n) == 1) ? 0 : \
216 ilog2((n) - 1) + 1) : \
217 __order_base_2(n) \
218)
208#endif /* _LINUX_LOG2_H */219#endif /* _LINUX_LOG2_H */
include/linux/memory_hotplug.h+2−1
@@ -85,7 +85,8 @@ extern int zone_grow_waitqueues(struct zone *zone, unsigned long nr_pages); · 84 unmodified lines
85extern int add_one_highpage(struct page *page, int pfn, int bad_ppro);85extern int add_one_highpage(struct page *page, int pfn, int bad_ppro);
86/* VM interface that may be used by firmware interface */86/* VM interface that may be used by firmware interface */
87extern int online_pages(unsigned long, unsigned long, int);87extern int online_pages(unsigned long, unsigned long, int);
88extern int test_pages_in_a_zone(unsigned long, unsigned long);88extern int test_pages_in_a_zone(unsigned long start_pfn, unsigned long end_pfn,
89 unsigned long *valid_start, unsigned long *valid_end);
89extern void __offline_isolated_pages(unsigned long, unsigned long);90extern void __offline_isolated_pages(unsigned long, unsigned long);
90 91
91typedef void (*online_page_callback_t)(struct page *page);92typedef void (*online_page_callback_t)(struct page *page);
include/linux/module.h+7−7
@@ -346,7 +346,7 @@ struct module { · 345 unmodified lines
346 346
347 /* Exported symbols */347 /* Exported symbols */
348 const struct kernel_symbol *syms;348 const struct kernel_symbol *syms;
349 const unsigned long *crcs;349 const s32 *crcs;
350 unsigned int num_syms;350 unsigned int num_syms;
351 351
352 /* Kernel parameters. */352 /* Kernel parameters. */
@@ -359,18 +359,18 @@ struct module { · 6 unmodified lines
359 /* GPL-only exported symbols. */359 /* GPL-only exported symbols. */
360 unsigned int num_gpl_syms;360 unsigned int num_gpl_syms;
361 const struct kernel_symbol *gpl_syms;361 const struct kernel_symbol *gpl_syms;
362 const unsigned long *gpl_crcs;362 const s32 *gpl_crcs;
363 363
364#ifdef CONFIG_UNUSED_SYMBOLS364#ifdef CONFIG_UNUSED_SYMBOLS
365 /* unused exported symbols. */365 /* unused exported symbols. */
366 const struct kernel_symbol *unused_syms;366 const struct kernel_symbol *unused_syms;
367 const unsigned long *unused_crcs;367 const s32 *unused_crcs;
368 unsigned int num_unused_syms;368 unsigned int num_unused_syms;
369 369
370 /* GPL-only, unused exported symbols. */370 /* GPL-only, unused exported symbols. */
371 unsigned int num_unused_gpl_syms;371 unsigned int num_unused_gpl_syms;
372 const struct kernel_symbol *unused_gpl_syms;372 const struct kernel_symbol *unused_gpl_syms;
373 const unsigned long *unused_gpl_crcs;373 const s32 *unused_gpl_crcs;
374#endif374#endif
375 375
376#ifdef CONFIG_MODULE_SIG376#ifdef CONFIG_MODULE_SIG
@@ -382,7 +382,7 @@ struct module { · 5 unmodified lines
382 382
383 /* symbols that will be GPL-only in the near future. */383 /* symbols that will be GPL-only in the near future. */
384 const struct kernel_symbol *gpl_future_syms;384 const struct kernel_symbol *gpl_future_syms;
385 const unsigned long *gpl_future_crcs;385 const s32 *gpl_future_crcs;
386 unsigned int num_gpl_future_syms;386 unsigned int num_gpl_future_syms;
387 387
388 /* Exception table */388 /* Exception table */
@@ -523,7 +523,7 @@ struct module *find_module(const char *name); · 134 unmodified lines
523 523
524struct symsearch {524struct symsearch {
525 const struct kernel_symbol *start, *stop;525 const struct kernel_symbol *start, *stop;
526 const unsigned long *crcs;526 const s32 *crcs;
527 enum {527 enum {
528 NOT_GPL_ONLY,528 NOT_GPL_ONLY,
529 GPL_ONLY,529 GPL_ONLY,
@@ -539,7 +539,7 @@ struct symsearch { · 9 unmodified lines
539 */539 */
540const struct kernel_symbol *find_symbol(const char *name,540const struct kernel_symbol *find_symbol(const char *name,
541 struct module **owner,541 struct module **owner,
542 const unsigned long **crc,542 const s32 **crc,
543 bool gplok,543 bool gplok,
544 bool warn);544 bool warn);
545 545
include/linux/netdevice.h+15−14
@@ -866,11 +866,15 @@ struct netdev_xdp { · 865 unmodified lines
866 * of useless work if you return NETDEV_TX_BUSY.866 * of useless work if you return NETDEV_TX_BUSY.
867 * Required; cannot be NULL.867 * Required; cannot be NULL.
868 *868 *
869 * netdev_features_t (*ndo_fix_features)(struct net_device *dev,869 * netdev_features_t (*ndo_features_check)(struct sk_buff *skb,
870 * netdev_features_t features);870 * struct net_device *dev
871 * Adjusts the requested feature flags according to device-specific871 * netdev_features_t features);
872 * constraints, and returns the resulting flags. Must not modify872 * Called by core transmit path to determine if device is capable of
873 * the device state.873 * performing offload operations on a given packet. This is to give
874 * the device an opportunity to implement any restrictions that cannot
875 * be otherwise expressed by feature flags. The check is called with
876 * the set of features that the stack has calculated and it returns
877 * those the driver believes to be appropriate.
874 *878 *
875 * u16 (*ndo_select_queue)(struct net_device *dev, struct sk_buff *skb,879 * u16 (*ndo_select_queue)(struct net_device *dev, struct sk_buff *skb,
876 * void *accel_priv, select_queue_fallback_t fallback);880 * void *accel_priv, select_queue_fallback_t fallback);
@@ -1028,6 +1032,12 @@ struct netdev_xdp { · 151 unmodified lines
1028 * Called to release previously enslaved netdev.1032 * Called to release previously enslaved netdev.
1029 *1033 *
1030 * Feature/offload setting functions.1034 * Feature/offload setting functions.
1035 * netdev_features_t (*ndo_fix_features)(struct net_device *dev,
1036 * netdev_features_t features);
1037 * Adjusts the requested feature flags according to device-specific
1038 * constraints, and returns the resulting flags. Must not modify
1039 * the device state.
1040 *
1031 * int (*ndo_set_features)(struct net_device *dev, netdev_features_t features);1041 * int (*ndo_set_features)(struct net_device *dev, netdev_features_t features);
1032 * Called to update device configuration to new features. Passed1042 * Called to update device configuration to new features. Passed
1033 * feature set might be less than what was returned by ndo_fix_features()).1043 * feature set might be less than what was returned by ndo_fix_features()).
@@ -1100,15 +1110,6 @@ struct netdev_xdp { · 66 unmodified lines
1100 * Callback to use for xmit over the accelerated station. This1110 * Callback to use for xmit over the accelerated station. This
1101 * is used in place of ndo_start_xmit on accelerated net1111 * is used in place of ndo_start_xmit on accelerated net
1102 * devices.1112 * devices.
1103 * netdev_features_t (*ndo_features_check)(struct sk_buff *skb,
1104 * struct net_device *dev
1105 * netdev_features_t features);
1106 * Called by core transmit path to determine if device is capable of
1107 * performing offload operations on a given packet. This is to give
1108 * the device an opportunity to implement any restrictions that cannot
1109 * be otherwise expressed by feature flags. The check is called with
1110 * the set of features that the stack has calculated and it returns
1111 * those the driver believes to be appropriate.
1112 * int (*ndo_set_tx_maxrate)(struct net_device *dev,1113 * int (*ndo_set_tx_maxrate)(struct net_device *dev,
1113 * int queue_index, u32 maxrate);1114 * int queue_index, u32 maxrate);
1114 * Called when a user wants to set a max-rate limitation of specific1115 * Called when a user wants to set a max-rate limitation of specific
include/linux/percpu-refcount.h+2−2
@@ -204,7 +204,7 @@ static inline void percpu_ref_get(struct percpu_ref *ref) · 203 unmodified lines
204static inline bool percpu_ref_tryget(struct percpu_ref *ref)204static inline bool percpu_ref_tryget(struct percpu_ref *ref)
205{205{
206 unsigned long __percpu *percpu_count;206 unsigned long __percpu *percpu_count;
207 int ret;207 bool ret;
208 208
209 rcu_read_lock_sched();209 rcu_read_lock_sched();
210 210
@@ -238,7 +238,7 @@ static inline bool percpu_ref_tryget(struct percpu_ref *ref) · 27 unmodified lines
238static inline bool percpu_ref_tryget_live(struct percpu_ref *ref)238static inline bool percpu_ref_tryget_live(struct percpu_ref *ref)
239{239{
240 unsigned long __percpu *percpu_count;240 unsigned long __percpu *percpu_count;
241 int ret = false;241 bool ret = false;
242 242
243 rcu_read_lock_sched();243 rcu_read_lock_sched();
244 244
include/net/ipv6.h+5−0
@@ -776,6 +776,11 @@ static inline __be32 ip6_make_flowlabel(struct net *net, struct sk_buff *skb, · 775 unmodified lines
776{776{
777 u32 hash;777 u32 hash;
778 778
779 /* @flowlabel may include more than a flow label, eg, the traffic class.
780 * Here we want only the flow label value.
781 */
782 flowlabel &= IPV6_FLOWLABEL_MASK;
783
779 if (flowlabel ||784 if (flowlabel ||
780 net->ipv6.sysctl.auto_flowlabels == IP6_AUTO_FLOW_LABEL_OFF ||785 net->ipv6.sysctl.auto_flowlabels == IP6_AUTO_FLOW_LABEL_OFF ||
781 (!autolabel &&786 (!autolabel &&
include/uapi/linux/ethtool.h+3−1
@@ -1384,6 +1384,8 @@ enum ethtool_link_mode_bit_indices { · 1383 unmodified lines
1384 ETHTOOL_LINK_MODE_10000baseLR_Full_BIT = 44,1384 ETHTOOL_LINK_MODE_10000baseLR_Full_BIT = 44,
1385 ETHTOOL_LINK_MODE_10000baseLRM_Full_BIT = 45,1385 ETHTOOL_LINK_MODE_10000baseLRM_Full_BIT = 45,
1386 ETHTOOL_LINK_MODE_10000baseER_Full_BIT = 46,1386 ETHTOOL_LINK_MODE_10000baseER_Full_BIT = 46,
1387 ETHTOOL_LINK_MODE_2500baseT_Full_BIT = 47,
1388 ETHTOOL_LINK_MODE_5000baseT_Full_BIT = 48,
1387 1389
1388 1390
1389 /* Last allowed bit for __ETHTOOL_LINK_MODE_LEGACY_MASK is bit1391 /* Last allowed bit for __ETHTOOL_LINK_MODE_LEGACY_MASK is bit
@@ -1393,7 +1395,7 @@ enum ethtool_link_mode_bit_indices { · 3 unmodified lines
1393 */1395 */
1394 1396
1395 __ETHTOOL_LINK_MODE_LAST1397 __ETHTOOL_LINK_MODE_LAST
1396 = ETHTOOL_LINK_MODE_10000baseER_Full_BIT,1398 = ETHTOOL_LINK_MODE_5000baseT_Full_BIT,
1397};1399};
1398 1400
1399#define __ETHTOOL_LINK_MODE_LEGACY_MASK(base_name) \1401#define __ETHTOOL_LINK_MODE_LEGACY_MASK(base_name) \
init/Kconfig+4−0
@@ -1987,6 +1987,10 @@ config MODVERSIONS · 1986 unmodified lines
1987 make them incompatible with the kernel you are running. If1987 make them incompatible with the kernel you are running. If
1988 unsure, say N.1988 unsure, say N.
1989 1989
1990config MODULE_REL_CRCS
1991 bool
1992 depends on MODVERSIONS
1993
1990config MODULE_SRCVERSION_ALL1994config MODULE_SRCVERSION_ALL
1991 bool "Source checksum for all modules"1995 bool "Source checksum for all modules"
1992 help1996 help
kernel/cgroup.c+5−8
@@ -5221,6 +5221,11 @@ err_free_css: · 5220 unmodified lines
5221 return ERR_PTR(err);5221 return ERR_PTR(err);
5222}5222}
5223 5223
5224/*
5225 * The returned cgroup is fully initialized including its control mask, but
5226 * it isn't associated with its kernfs_node and doesn't have the control
5227 * mask applied.
5228 */
5224static struct cgroup *cgroup_create(struct cgroup *parent)5229static struct cgroup *cgroup_create(struct cgroup *parent)
5225{5230{
5226 struct cgroup_root *root = parent->root;5231 struct cgroup_root *root = parent->root;
@@ -5288,11 +5293,6 @@ static struct cgroup *cgroup_create(struct cgroup *parent) · 61 unmodified lines
5288 5293
5289 cgroup_propagate_control(cgrp);5294 cgroup_propagate_control(cgrp);
5290 5295
5291 /* @cgrp doesn't have dir yet so the following will only create csses */
5292 ret = cgroup_apply_control_enable(cgrp);
5293 if (ret)
5294 goto out_destroy;
5295
5296 return cgrp;5296 return cgrp;
5297 5297
5298out_cancel_ref:5298out_cancel_ref:
@@ -5300,9 +5300,6 @@ out_cancel_ref: · 1 unmodified line
5300out_free_cgrp:5300out_free_cgrp:
5301 kfree(cgrp);5301 kfree(cgrp);
5302 return ERR_PTR(ret);5302 return ERR_PTR(ret);
5303out_destroy:
5304 cgroup_destroy_locked(cgrp);
5305 return ERR_PTR(ret);
5306}5303}
5307 5304
5308static int cgroup_mkdir(struct kernfs_node *parent_kn, const char *name,5305static int cgroup_mkdir(struct kernfs_node *parent_kn, const char *name,
kernel/events/core.c+46−23
@@ -1469,7 +1469,6 @@ ctx_group_list(struct perf_event *event, struct perf_event_context *ctx) · 1468 unmodified lines
1469static void1469static void
1470list_add_event(struct perf_event *event, struct perf_event_context *ctx)1470list_add_event(struct perf_event *event, struct perf_event_context *ctx)
1471{1471{
1472
1473 lockdep_assert_held(&ctx->lock);1472 lockdep_assert_held(&ctx->lock);
1474 1473
1475 WARN_ON_ONCE(event->attach_state & PERF_ATTACH_CONTEXT);1474 WARN_ON_ONCE(event->attach_state & PERF_ATTACH_CONTEXT);
@@ -1624,6 +1623,8 @@ static void perf_group_attach(struct perf_event *event) · 148 unmodified lines
1624{1623{
1625 struct perf_event *group_leader = event->group_leader, *pos;1624 struct perf_event *group_leader = event->group_leader, *pos;
1626 1625
1626 lockdep_assert_held(&event->ctx->lock);
1627
1627 /*1628 /*
1628 * We can have double attach due to group movement in perf_event_open.1629 * We can have double attach due to group movement in perf_event_open.
1629 */1630 */
@@ -1697,6 +1698,8 @@ static void perf_group_detach(struct perf_event *event) · 67 unmodified lines
1697 struct perf_event *sibling, *tmp;1698 struct perf_event *sibling, *tmp;
1698 struct list_head *list = NULL;1699 struct list_head *list = NULL;
1699 1700
1701 lockdep_assert_held(&event->ctx->lock);
1702
1700 /*1703 /*
1701 * We can have double detach due to exit/hot-unplug + close.1704 * We can have double detach due to exit/hot-unplug + close.
1702 */1705 */
@@ -1895,9 +1898,29 @@ __perf_remove_from_context(struct perf_event *event, · 192 unmodified lines
1895 */1898 */
1896static void perf_remove_from_context(struct perf_event *event, unsigned long flags)1899static void perf_remove_from_context(struct perf_event *event, unsigned long flags)
1897{1900{
1898 lockdep_assert_held(&event->ctx->mutex);1901 struct perf_event_context *ctx = event->ctx;
1902
1903 lockdep_assert_held(&ctx->mutex);
1899 1904
1900 event_function_call(event, __perf_remove_from_context, (void *)flags);1905 event_function_call(event, __perf_remove_from_context, (void *)flags);
1906
1907 /*
1908 * The above event_function_call() can NO-OP when it hits
1909 * TASK_TOMBSTONE. In that case we must already have been detached
1910 * from the context (by perf_event_exit_event()) but the grouping
1911 * might still be in-tact.
1912 */
1913 WARN_ON_ONCE(event->attach_state & PERF_ATTACH_CONTEXT);
1914 if ((flags & DETACH_GROUP) &&
1915 (event->attach_state & PERF_ATTACH_GROUP)) {
1916 /*
1917 * Since in that case we cannot possibly be scheduled, simply
1918 * detach now.
1919 */
1920 raw_spin_lock_irq(&ctx->lock);
1921 perf_group_detach(event);
1922 raw_spin_unlock_irq(&ctx->lock);
1923 }
1901}1924}
1902 1925
1903/*1926/*
@@ -6609,6 +6632,27 @@ static void perf_event_mmap_event(struct perf_mmap_event *mmap_event) · 4705 unmodified lines
6609 char *buf = NULL;6632 char *buf = NULL;
6610 char *name;6633 char *name;
6611 6634
6635 if (vma->vm_flags & VM_READ)
6636 prot |= PROT_READ;
6637 if (vma->vm_flags & VM_WRITE)
6638 prot |= PROT_WRITE;
6639 if (vma->vm_flags & VM_EXEC)
6640 prot |= PROT_EXEC;
6641
6642 if (vma->vm_flags & VM_MAYSHARE)
6643 flags = MAP_SHARED;
6644 else
6645 flags = MAP_PRIVATE;
6646
6647 if (vma->vm_flags & VM_DENYWRITE)
6648 flags |= MAP_DENYWRITE;
6649 if (vma->vm_flags & VM_MAYEXEC)
6650 flags |= MAP_EXECUTABLE;
6651 if (vma->vm_flags & VM_LOCKED)
6652 flags |= MAP_LOCKED;
6653 if (vma->vm_flags & VM_HUGETLB)
6654 flags |= MAP_HUGETLB;
6655
6612 if (file) {6656 if (file) {
6613 struct inode *inode;6657 struct inode *inode;
6614 dev_t dev;6658 dev_t dev;
@@ -6635,27 +6679,6 @@ static void perf_event_mmap_event(struct perf_mmap_event *mmap_event) · 20 unmodified lines
6635 maj = MAJOR(dev);6679 maj = MAJOR(dev);
6636 min = MINOR(dev);6680 min = MINOR(dev);
6637 6681
6638 if (vma->vm_flags & VM_READ)
6639 prot |= PROT_READ;
6640 if (vma->vm_flags & VM_WRITE)
6641 prot |= PROT_WRITE;
6642 if (vma->vm_flags & VM_EXEC)
6643 prot |= PROT_EXEC;
6644
6645 if (vma->vm_flags & VM_MAYSHARE)
6646 flags = MAP_SHARED;
6647 else
6648 flags = MAP_PRIVATE;
6649
6650 if (vma->vm_flags & VM_DENYWRITE)
6651 flags |= MAP_DENYWRITE;
6652 if (vma->vm_flags & VM_MAYEXEC)
6653 flags |= MAP_EXECUTABLE;
6654 if (vma->vm_flags & VM_LOCKED)
6655 flags |= MAP_LOCKED;
6656 if (vma->vm_flags & VM_HUGETLB)
6657 flags |= MAP_HUGETLB;
6658
6659 goto got_name;6682 goto got_name;
6660 } else {6683 } else {
6661 if (vma->vm_ops && vma->vm_ops->name) {6684 if (vma->vm_ops && vma->vm_ops->name) {
kernel/irq/irqdomain.c+30−14
@@ -1346,6 +1346,30 @@ void irq_domain_free_irqs_parent(struct irq_domain *domain, · 1345 unmodified lines
1346}1346}
1347EXPORT_SYMBOL_GPL(irq_domain_free_irqs_parent);1347EXPORT_SYMBOL_GPL(irq_domain_free_irqs_parent);
1348 1348
1349static void __irq_domain_activate_irq(struct irq_data *irq_data)
1350{
1351 if (irq_data && irq_data->domain) {
1352 struct irq_domain *domain = irq_data->domain;
1353
1354 if (irq_data->parent_data)
1355 __irq_domain_activate_irq(irq_data->parent_data);
1356 if (domain->ops->activate)
1357 domain->ops->activate(domain, irq_data);
1358 }
1359}
1360
1361static void __irq_domain_deactivate_irq(struct irq_data *irq_data)
1362{
1363 if (irq_data && irq_data->domain) {
1364 struct irq_domain *domain = irq_data->domain;
1365
1366 if (domain->ops->deactivate)
1367 domain->ops->deactivate(domain, irq_data);
1368 if (irq_data->parent_data)
1369 __irq_domain_deactivate_irq(irq_data->parent_data);
1370 }
1371}
1372
1349/**1373/**
1350 * irq_domain_activate_irq - Call domain_ops->activate recursively to activate1374 * irq_domain_activate_irq - Call domain_ops->activate recursively to activate
1351 * interrupt1375 * interrupt
@@ -1356,13 +1380,9 @@ EXPORT_SYMBOL_GPL(irq_domain_free_irqs_parent); · 4 unmodified lines
1356 */1380 */
1357void irq_domain_activate_irq(struct irq_data *irq_data)1381void irq_domain_activate_irq(struct irq_data *irq_data)
1358{1382{
1359 if (irq_data && irq_data->domain) {1383 if (!irqd_is_activated(irq_data)) {
1360 struct irq_domain *domain = irq_data->domain;1384 __irq_domain_activate_irq(irq_data);
1361 1385 irqd_set_activated(irq_data);
1362 if (irq_data->parent_data)
1363 irq_domain_activate_irq(irq_data->parent_data);
1364 if (domain->ops->activate)
1365 domain->ops->activate(domain, irq_data);
1366 }1386 }
1367}1387}
1368 1388
@@ -1376,13 +1396,9 @@ void irq_domain_activate_irq(struct irq_data *irq_data) · 7 unmodified lines
1376 */1396 */
1377void irq_domain_deactivate_irq(struct irq_data *irq_data)1397void irq_domain_deactivate_irq(struct irq_data *irq_data)
1378{1398{
1379 if (irq_data && irq_data->domain) {1399 if (irqd_is_activated(irq_data)) {
1380 struct irq_domain *domain = irq_data->domain;1400 __irq_domain_deactivate_irq(irq_data);
1381 1401 irqd_clr_activated(irq_data);
1382 if (domain->ops->deactivate)
1383 domain->ops->deactivate(domain, irq_data);
1384 if (irq_data->parent_data)
1385 irq_domain_deactivate_irq(irq_data->parent_data);
1386 }1402 }
1387}1403}
1388 1404
kernel/module.c+25−28
@@ -389,16 +389,16 @@ extern const struct kernel_symbol __start___ksymtab_gpl[]; · 388 unmodified lines
389extern const struct kernel_symbol __stop___ksymtab_gpl[];389extern const struct kernel_symbol __stop___ksymtab_gpl[];
390extern const struct kernel_symbol __start___ksymtab_gpl_future[];390extern const struct kernel_symbol __start___ksymtab_gpl_future[];
391extern const struct kernel_symbol __stop___ksymtab_gpl_future[];391extern const struct kernel_symbol __stop___ksymtab_gpl_future[];
392extern const unsigned long __start___kcrctab[];392extern const s32 __start___kcrctab[];
393extern const unsigned long __start___kcrctab_gpl[];393extern const s32 __start___kcrctab_gpl[];
394extern const unsigned long __start___kcrctab_gpl_future[];394extern const s32 __start___kcrctab_gpl_future[];
395#ifdef CONFIG_UNUSED_SYMBOLS395#ifdef CONFIG_UNUSED_SYMBOLS
396extern const struct kernel_symbol __start___ksymtab_unused[];396extern const struct kernel_symbol __start___ksymtab_unused[];
397extern const struct kernel_symbol __stop___ksymtab_unused[];397extern const struct kernel_symbol __stop___ksymtab_unused[];
398extern const struct kernel_symbol __start___ksymtab_unused_gpl[];398extern const struct kernel_symbol __start___ksymtab_unused_gpl[];
399extern const struct kernel_symbol __stop___ksymtab_unused_gpl[];399extern const struct kernel_symbol __stop___ksymtab_unused_gpl[];
400extern const unsigned long __start___kcrctab_unused[];400extern const s32 __start___kcrctab_unused[];
401extern const unsigned long __start___kcrctab_unused_gpl[];401extern const s32 __start___kcrctab_unused_gpl[];
402#endif402#endif
403 403
404#ifndef CONFIG_MODVERSIONS404#ifndef CONFIG_MODVERSIONS
@@ -497,7 +497,7 @@ struct find_symbol_arg { · 92 unmodified lines
497 497
498 /* Output */498 /* Output */
499 struct module *owner;499 struct module *owner;
500 const unsigned long *crc;500 const s32 *crc;
501 const struct kernel_symbol *sym;501 const struct kernel_symbol *sym;
502};502};
503 503
@@ -563,7 +563,7 @@ static bool find_symbol_in_section(const struct symsearch *syms, · 59 unmodified lines
563 * (optional) module which owns it. Needs preempt disabled or module_mutex. */563 * (optional) module which owns it. Needs preempt disabled or module_mutex. */
564const struct kernel_symbol *find_symbol(const char *name,564const struct kernel_symbol *find_symbol(const char *name,
565 struct module **owner,565 struct module **owner,
566 const unsigned long **crc,566 const s32 **crc,
567 bool gplok,567 bool gplok,
568 bool warn)568 bool warn)
569{569{
@@ -1249,23 +1249,17 @@ static int try_to_force_load(struct module *mod, const char *reason) · 679 unmodified lines
1249}1249}
1250 1250
1251#ifdef CONFIG_MODVERSIONS1251#ifdef CONFIG_MODVERSIONS
1252/* If the arch applies (non-zero) relocations to kernel kcrctab, unapply it. */1252
1253static unsigned long maybe_relocated(unsigned long crc,1253static u32 resolve_rel_crc(const s32 *crc)
1254 const struct module *crc_owner)
1255{1254{
1256#ifdef ARCH_RELOCATES_KCRCTAB1255 return *(u32 *)((void *)crc + *crc);
1257 if (crc_owner == NULL)
1258 return crc - (unsigned long)reloc_start;
1259#endif
1260 return crc;
1261}1256}
1262 1257
1263static int check_version(Elf_Shdr *sechdrs,1258static int check_version(Elf_Shdr *sechdrs,
1264 unsigned int versindex,1259 unsigned int versindex,
1265 const char *symname,1260 const char *symname,
1266 struct module *mod,1261 struct module *mod,
1267 const unsigned long *crc,1262 const s32 *crc)
1268 const struct module *crc_owner)
1269{1263{
1270 unsigned int i, num_versions;1264 unsigned int i, num_versions;
1271 struct modversion_info *versions;1265 struct modversion_info *versions;
@@ -1283,13 +1277,19 @@ static int check_version(Elf_Shdr *sechdrs, · 11 unmodified lines
1283 / sizeof(struct modversion_info);1277 / sizeof(struct modversion_info);
1284 1278
1285 for (i = 0; i < num_versions; i++) {1279 for (i = 0; i < num_versions; i++) {
1280 u32 crcval;
1281
1286 if (strcmp(versions[i].name, symname) != 0)1282 if (strcmp(versions[i].name, symname) != 0)
1287 continue;1283 continue;
1288 1284
1289 if (versions[i].crc == maybe_relocated(*crc, crc_owner))1285 if (IS_ENABLED(CONFIG_MODULE_REL_CRCS))
1286 crcval = resolve_rel_crc(crc);
1287 else
1288 crcval = *crc;
1289 if (versions[i].crc == crcval)
1290 return 1;1290 return 1;
1291 pr_debug("Found checksum %lX vs module %lX\n",1291 pr_debug("Found checksum %X vs module %lX\n",
1292 maybe_relocated(*crc, crc_owner), versions[i].crc);1292 crcval, versions[i].crc);
1293 goto bad_version;1293 goto bad_version;
1294 }1294 }
1295 1295
@@ -1307,7 +1307,7 @@ static inline int check_modstruct_version(Elf_Shdr *sechdrs, · 11 unmodified lines
1307 unsigned int versindex,1307 unsigned int versindex,
1308 struct module *mod)1308 struct module *mod)
1309{1309{
1310 const unsigned long *crc;1310 const s32 *crc;
1311 1311
1312 /*1312 /*
1313 * Since this should be found in kernel (which can't be removed), no1313 * Since this should be found in kernel (which can't be removed), no
@@ -1321,8 +1321,7 @@ static inline int check_modstruct_version(Elf_Shdr *sechdrs, · 7 unmodified lines
1321 }1321 }
1322 preempt_enable();1322 preempt_enable();
1323 return check_version(sechdrs, versindex,1323 return check_version(sechdrs, versindex,
1324 VMLINUX_SYMBOL_STR(module_layout), mod, crc,1324 VMLINUX_SYMBOL_STR(module_layout), mod, crc);
1325 NULL);
1326}1325}
1327 1326
1328/* First part is kernel version, which we ignore if module has crcs. */1327/* First part is kernel version, which we ignore if module has crcs. */
@@ -1340,8 +1339,7 @@ static inline int check_version(Elf_Shdr *sechdrs, · 11 unmodified lines
1340 unsigned int versindex,1339 unsigned int versindex,
1341 const char *symname,1340 const char *symname,
1342 struct module *mod,1341 struct module *mod,
1343 const unsigned long *crc,1342 const s32 *crc)
1344 const struct module *crc_owner)
1345{1343{
1346 return 1;1344 return 1;
1347}1345}
@@ -1368,7 +1366,7 @@ static const struct kernel_symbol *resolve_symbol(struct module *mod, · 20 unmodified lines
1368{1366{
1369 struct module *owner;1367 struct module *owner;
1370 const struct kernel_symbol *sym;1368 const struct kernel_symbol *sym;
1371 const unsigned long *crc;1369 const s32 *crc;
1372 int err;1370 int err;
1373 1371
1374 /*1372 /*
@@ -1383,8 +1381,7 @@ static const struct kernel_symbol *resolve_symbol(struct module *mod, · 8 unmodified lines
1383 if (!sym)1381 if (!sym)
1384 goto unlock;1382 goto unlock;
1385 1383
1386 if (!check_version(info->sechdrs, info->index.vers, name, mod, crc,1384 if (!check_version(info->sechdrs, info->index.vers, name, mod, crc)) {
1387 owner)) {
1388 sym = ERR_PTR(-EINVAL);1385 sym = ERR_PTR(-EINVAL);
1389 goto getname;1386 goto getname;
1390 }1387 }
kernel/trace/trace_hwlat.c+5−3
@@ -266,7 +266,7 @@ out: · 265 unmodified lines
266static struct cpumask save_cpumask;266static struct cpumask save_cpumask;
267static bool disable_migrate;267static bool disable_migrate;
268 268
269static void move_to_next_cpu(void)269static void move_to_next_cpu(bool initmask)
270{270{
271 static struct cpumask *current_mask;271 static struct cpumask *current_mask;
272 int next_cpu;272 int next_cpu;
@@ -275,7 +275,7 @@ static void move_to_next_cpu(void) · 2 unmodified lines
275 return;275 return;
276 276
277 /* Just pick the first CPU on first iteration */277 /* Just pick the first CPU on first iteration */
278 if (!current_mask) {278 if (initmask) {
279 current_mask = &save_cpumask;279 current_mask = &save_cpumask;
280 get_online_cpus();280 get_online_cpus();
281 cpumask_and(current_mask, cpu_online_mask, tracing_buffer_mask);281 cpumask_and(current_mask, cpu_online_mask, tracing_buffer_mask);
@@ -330,10 +330,12 @@ static void move_to_next_cpu(void) · 48 unmodified lines
330static int kthread_fn(void *data)330static int kthread_fn(void *data)
331{331{
332 u64 interval;332 u64 interval;
333 bool initmask = true;
333 334
334 while (!kthread_should_stop()) {335 while (!kthread_should_stop()) {
335 336
336 move_to_next_cpu();337 move_to_next_cpu(initmask);
338 initmask = false;
337 339
338 local_irq_disable();340 local_irq_disable();
339 get_sample();341 get_sample();
kernel/trace/trace_kprobe.c+1−1
@@ -1372,7 +1372,7 @@ kprobe_trace_selftest_target(int a1, int a2, int a3, int a4, int a5, int a6) · 1371 unmodified lines
1372 return a1 + a2 + a3 + a4 + a5 + a6;1372 return a1 + a2 + a3 + a4 + a5 + a6;
1373}1373}
1374 1374
1375static struct __init trace_event_file *1375static __init struct trace_event_file *
1376find_trace_probe_file(struct trace_kprobe *tk, struct trace_array *tr)1376find_trace_probe_file(struct trace_kprobe *tk, struct trace_array *tr)
1377{1377{
1378 struct trace_event_file *file;1378 struct trace_event_file *file;
mm/filemap.c+5−0
@@ -1791,6 +1791,11 @@ static ssize_t do_generic_file_read(struct file *filp, loff_t *ppos, · 1790 unmodified lines
1791 1791
1792 cond_resched();1792 cond_resched();
1793find_page:1793find_page:
1794 if (fatal_signal_pending(current)) {
1795 error = -EINTR;
1796 goto out;
1797 }
1798
1794 page = find_get_page(mapping, index);1799 page = find_get_page(mapping, index);
1795 if (!page) {1800 if (!page) {
1796 page_cache_sync_readahead(mapping,1801 page_cache_sync_readahead(mapping,
mm/kasan/report.c+3−0
@@ -13,6 +13,7 @@ · 12 unmodified lines
13 *13 *
14 */14 */
15 15
16#include <linux/ftrace.h>
16#include <linux/kernel.h>17#include <linux/kernel.h>
17#include <linux/mm.h>18#include <linux/mm.h>
18#include <linux/printk.h>19#include <linux/printk.h>
@@ -300,6 +301,8 @@ void kasan_report(unsigned long addr, size_t size, · 281 unmodified lines
300 if (likely(!kasan_report_enabled()))301 if (likely(!kasan_report_enabled()))
301 return;302 return;
302 303
304 disable_trace_on_warning();
305
303 info.access_addr = (void *)addr;306 info.access_addr = (void *)addr;
304 info.access_size = size;307 info.access_size = size;
305 info.is_write = is_write;308 info.is_write = is_write;
mm/memory_hotplug.c+21−7
@@ -1483,17 +1483,20 @@ bool is_mem_section_removable(unsigned long start_pfn, unsigned long nr_pages) · 1482 unmodified lines
1483}1483}
1484 1484
1485/*1485/*
1486 * Confirm all pages in a range [start, end) is belongs to the same zone.1486 * Confirm all pages in a range [start, end) belong to the same zone.
1487 * When true, return its valid [start, end).
1487 */1488 */
1488int test_pages_in_a_zone(unsigned long start_pfn, unsigned long end_pfn)1489int test_pages_in_a_zone(unsigned long start_pfn, unsigned long end_pfn,
1490 unsigned long *valid_start, unsigned long *valid_end)
1489{1491{
1490 unsigned long pfn, sec_end_pfn;1492 unsigned long pfn, sec_end_pfn;
1493 unsigned long start, end;
1491 struct zone *zone = NULL;1494 struct zone *zone = NULL;
1492 struct page *page;1495 struct page *page;
1493 int i;1496 int i;
1494 for (pfn = start_pfn, sec_end_pfn = SECTION_ALIGN_UP(start_pfn);1497 for (pfn = start_pfn, sec_end_pfn = SECTION_ALIGN_UP(start_pfn + 1);
1495 pfn < end_pfn;1498 pfn < end_pfn;
1496 pfn = sec_end_pfn + 1, sec_end_pfn += PAGES_PER_SECTION) {1499 pfn = sec_end_pfn, sec_end_pfn += PAGES_PER_SECTION) {
1497 /* Make sure the memory section is present first */1500 /* Make sure the memory section is present first */
1498 if (!present_section_nr(pfn_to_section_nr(pfn)))1501 if (!present_section_nr(pfn_to_section_nr(pfn)))
1499 continue;1502 continue;
@@ -1509,10 +1512,20 @@ int test_pages_in_a_zone(unsigned long start_pfn, unsigned long end_pfn) · 9 unmodified lines
1509 page = pfn_to_page(pfn + i);1512 page = pfn_to_page(pfn + i);
1510 if (zone && page_zone(page) != zone)1513 if (zone && page_zone(page) != zone)
1511 return 0;1514 return 0;
1515 if (!zone)
1516 start = pfn + i;
1512 zone = page_zone(page);1517 zone = page_zone(page);
1518 end = pfn + MAX_ORDER_NR_PAGES;
1513 }1519 }
1514 }1520 }
1515 return 1;1521
1522 if (zone) {
1523 *valid_start = start;
1524 *valid_end = end;
1525 return 1;
1526 } else {
1527 return 0;
1528 }
1516}1529}
1517 1530
1518/*1531/*
@@ -1839,6 +1852,7 @@ static int __ref __offline_pages(unsigned long start_pfn, · 320 unmodified lines
1839 long offlined_pages;1852 long offlined_pages;
1840 int ret, drain, retry_max, node;1853 int ret, drain, retry_max, node;
1841 unsigned long flags;1854 unsigned long flags;
1855 unsigned long valid_start, valid_end;
1842 struct zone *zone;1856 struct zone *zone;
1843 struct memory_notify arg;1857 struct memory_notify arg;
1844 1858
@@ -1849,10 +1863,10 @@ static int __ref __offline_pages(unsigned long start_pfn, · 4 unmodified lines
1849 return -EINVAL;1863 return -EINVAL;
1850 /* This makes hotplug much easier...and readable.1864 /* This makes hotplug much easier...and readable.
1851 we assume this for now. .*/1865 we assume this for now. .*/
1852 if (!test_pages_in_a_zone(start_pfn, end_pfn))1866 if (!test_pages_in_a_zone(start_pfn, end_pfn, &valid_start, &valid_end))
1853 return -EINVAL;1867 return -EINVAL;
1854 1868
1855 zone = page_zone(pfn_to_page(start_pfn));1869 zone = page_zone(pfn_to_page(valid_start));
1856 node = zone_to_nid(zone);1870 node = zone_to_nid(zone);
1857 nr_pages = end_pfn - start_pfn;1871 nr_pages = end_pfn - start_pfn;
1858 1872
mm/shmem.c+9−2
@@ -415,6 +415,7 @@ static unsigned long shmem_unused_huge_shrink(struct shmem_sb_info *sbinfo, · 414 unmodified lines
415 struct shrink_control *sc, unsigned long nr_to_split)415 struct shrink_control *sc, unsigned long nr_to_split)
416{416{
417 LIST_HEAD(list), *pos, *next;417 LIST_HEAD(list), *pos, *next;
418 LIST_HEAD(to_remove);
418 struct inode *inode;419 struct inode *inode;
419 struct shmem_inode_info *info;420 struct shmem_inode_info *info;
420 struct page *page;421 struct page *page;
@@ -441,9 +442,8 @@ static unsigned long shmem_unused_huge_shrink(struct shmem_sb_info *sbinfo, · 20 unmodified lines
441 /* Check if there's anything to gain */442 /* Check if there's anything to gain */
442 if (round_up(inode->i_size, PAGE_SIZE) ==443 if (round_up(inode->i_size, PAGE_SIZE) ==
443 round_up(inode->i_size, HPAGE_PMD_SIZE)) {444 round_up(inode->i_size, HPAGE_PMD_SIZE)) {
444 list_del_init(&info->shrinklist);445 list_move(&info->shrinklist, &to_remove);
445 removed++;446 removed++;
446 iput(inode);
447 goto next;447 goto next;
448 }448 }
449 449
@@ -454,6 +454,13 @@ next: · 4 unmodified lines
454 }454 }
455 spin_unlock(&sbinfo->shrinklist_lock);455 spin_unlock(&sbinfo->shrinklist_lock);
456 456
457 list_for_each_safe(pos, next, &to_remove) {
458 info = list_entry(pos, struct shmem_inode_info, shrinklist);
459 inode = &info->vfs_inode;
460 list_del_init(&info->shrinklist);
461 iput(inode);
462 }
463
457 list_for_each_safe(pos, next, &list) {464 list_for_each_safe(pos, next, &list) {
458 int ret;465 int ret;
459 466
mm/zswap.c+29−1
@@ -78,7 +78,13 @@ static u64 zswap_duplicate_entry; · 77 unmodified lines
78 78
79/* Enable/disable zswap (disabled by default) */79/* Enable/disable zswap (disabled by default) */
80static bool zswap_enabled;80static bool zswap_enabled;
81module_param_named(enabled, zswap_enabled, bool, 0644);81static int zswap_enabled_param_set(const char *,
82 const struct kernel_param *);
83static struct kernel_param_ops zswap_enabled_param_ops = {
84 .set = zswap_enabled_param_set,
85 .get = param_get_bool,
86};
87module_param_cb(enabled, &zswap_enabled_param_ops, &zswap_enabled, 0644);
82 88
83/* Crypto compressor to use */89/* Crypto compressor to use */
84#define ZSWAP_COMPRESSOR_DEFAULT "lzo"90#define ZSWAP_COMPRESSOR_DEFAULT "lzo"
@@ -176,6 +182,9 @@ static atomic_t zswap_pools_count = ATOMIC_INIT(0); · 91 unmodified lines
176/* used by param callback function */182/* used by param callback function */
177static bool zswap_init_started;183static bool zswap_init_started;
178 184
185/* fatal error during init */
186static bool zswap_init_failed;
187
179/*********************************188/*********************************
180* helpers and fwd declarations189* helpers and fwd declarations
181**********************************/190**********************************/
@@ -624,6 +633,11 @@ static int __zswap_param_set(const char *val, const struct kernel_param *kp, · 442 unmodified lines
624 char *s = strstrip((char *)val);633 char *s = strstrip((char *)val);
625 int ret;634 int ret;
626 635
636 if (zswap_init_failed) {
637 pr_err("can't set param, initialization failed\n");
638 return -ENODEV;
639 }
640
627 /* no change required */641 /* no change required */
628 if (!strcmp(s, *(char **)kp->arg))642 if (!strcmp(s, *(char **)kp->arg))
629 return 0;643 return 0;
@@ -703,6 +717,17 @@ static int zswap_zpool_param_set(const char *val, · 73 unmodified lines
703 return __zswap_param_set(val, kp, NULL, zswap_compressor);717 return __zswap_param_set(val, kp, NULL, zswap_compressor);
704}718}
705 719
720static int zswap_enabled_param_set(const char *val,
721 const struct kernel_param *kp)
722{
723 if (zswap_init_failed) {
724 pr_err("can't enable, initialization failed\n");
725 return -ENODEV;
726 }
727
728 return param_set_bool(val, kp);
729}
730
706/*********************************731/*********************************
707* writeback code732* writeback code
708**********************************/733**********************************/
@@ -1201,6 +1226,9 @@ hp_fail: · 492 unmodified lines
1201dstmem_fail:1226dstmem_fail:
1202 zswap_entry_cache_destroy();1227 zswap_entry_cache_destroy();
1203cache_fail:1228cache_fail:
1229 /* if built-in, we aren't unloaded on failure; don't allow use */
1230 zswap_init_failed = true;
1231 zswap_enabled = false;
1204 return -ENOMEM;1232 return -ENOMEM;
1205}1233}
1206/* must be late so crypto has time to come up */1234/* must be late so crypto has time to come up */
net/can/af_can.c+10−2
@@ -445,6 +445,7 @@ static struct hlist_head *find_rcv_list(canid_t *can_id, canid_t *mask, · 444 unmodified lines
445 * @func: callback function on filter match445 * @func: callback function on filter match
446 * @data: returned parameter for callback function446 * @data: returned parameter for callback function
447 * @ident: string for calling module identification447 * @ident: string for calling module identification
448 * @sk: socket pointer (might be NULL)
448 *449 *
449 * Description:450 * Description:
450 * Invokes the callback function with the received sk_buff and the given451 * Invokes the callback function with the received sk_buff and the given
@@ -468,7 +469,7 @@ static struct hlist_head *find_rcv_list(canid_t *can_id, canid_t *mask, · 17 unmodified lines
468 */469 */
469int can_rx_register(struct net_device *dev, canid_t can_id, canid_t mask,470int can_rx_register(struct net_device *dev, canid_t can_id, canid_t mask,
470 void (*func)(struct sk_buff *, void *), void *data,471 void (*func)(struct sk_buff *, void *), void *data,
471 char *ident)472 char *ident, struct sock *sk)
472{473{
473 struct receiver *r;474 struct receiver *r;
474 struct hlist_head *rl;475 struct hlist_head *rl;
@@ -496,6 +497,7 @@ int can_rx_register(struct net_device *dev, canid_t can_id, canid_t mask, · 21 unmodified lines
496 r->func = func;497 r->func = func;
497 r->data = data;498 r->data = data;
498 r->ident = ident;499 r->ident = ident;
500 r->sk = sk;
499 501
500 hlist_add_head_rcu(&r->list, rl);502 hlist_add_head_rcu(&r->list, rl);
501 d->entries++;503 d->entries++;
@@ -520,8 +522,11 @@ EXPORT_SYMBOL(can_rx_register); · 18 unmodified lines
520static void can_rx_delete_receiver(struct rcu_head *rp)522static void can_rx_delete_receiver(struct rcu_head *rp)
521{523{
522 struct receiver *r = container_of(rp, struct receiver, rcu);524 struct receiver *r = container_of(rp, struct receiver, rcu);
525 struct sock *sk = r->sk;
523 526
524 kmem_cache_free(rcv_cache, r);527 kmem_cache_free(rcv_cache, r);
528 if (sk)
529 sock_put(sk);
525}530}
526 531
527/**532/**
@@ -596,8 +601,11 @@ void can_rx_unregister(struct net_device *dev, canid_t can_id, canid_t mask, · 68 unmodified lines
596 spin_unlock(&can_rcvlists_lock);601 spin_unlock(&can_rcvlists_lock);
597 602
598 /* schedule the receiver item for deletion */603 /* schedule the receiver item for deletion */
599 if (r)604 if (r) {
605 if (r->sk)
606 sock_hold(r->sk);
600 call_rcu(&r->rcu, can_rx_delete_receiver);607 call_rcu(&r->rcu, can_rx_delete_receiver);
608 }
601}609}
602EXPORT_SYMBOL(can_rx_unregister);610EXPORT_SYMBOL(can_rx_unregister);
603 611
net/can/af_can.h+2−1
@@ -50,13 +50,14 @@ · 49 unmodified lines
50 50
51struct receiver {51struct receiver {
52 struct hlist_node list;52 struct hlist_node list;
53 struct rcu_head rcu;
54 canid_t can_id;53 canid_t can_id;
55 canid_t mask;54 canid_t mask;
56 unsigned long matches;55 unsigned long matches;
57 void (*func)(struct sk_buff *, void *);56 void (*func)(struct sk_buff *, void *);
58 void *data;57 void *data;
59 char *ident;58 char *ident;
59 struct sock *sk;
60 struct rcu_head rcu;
60};61};
61 62
62#define CAN_SFF_RCV_ARRAY_SZ (1 << CAN_SFF_ID_BITS)63#define CAN_SFF_RCV_ARRAY_SZ (1 << CAN_SFF_ID_BITS)
net/can/bcm.c+18−9
@@ -734,14 +734,23 @@ static struct bcm_op *bcm_find_op(struct list_head *ops, · 733 unmodified lines
734 734
735static void bcm_remove_op(struct bcm_op *op)735static void bcm_remove_op(struct bcm_op *op)
736{736{
737 hrtimer_cancel(&op->timer);737 if (op->tsklet.func) {
738 hrtimer_cancel(&op->thrtimer);738 while (test_bit(TASKLET_STATE_SCHED, &op->tsklet.state) ||
739 739 test_bit(TASKLET_STATE_RUN, &op->tsklet.state) ||
740 if (op->tsklet.func)740 hrtimer_active(&op->timer)) {
741 tasklet_kill(&op->tsklet);741 hrtimer_cancel(&op->timer);
742 tasklet_kill(&op->tsklet);
743 }
744 }
742 745
743 if (op->thrtsklet.func)746 if (op->thrtsklet.func) {
744 tasklet_kill(&op->thrtsklet);747 while (test_bit(TASKLET_STATE_SCHED, &op->thrtsklet.state) ||
748 test_bit(TASKLET_STATE_RUN, &op->thrtsklet.state) ||
749 hrtimer_active(&op->thrtimer)) {
750 hrtimer_cancel(&op->thrtimer);
751 tasklet_kill(&op->thrtsklet);
752 }
753 }
745 754
746 if ((op->frames) && (op->frames != &op->sframe))755 if ((op->frames) && (op->frames != &op->sframe))
747 kfree(op->frames);756 kfree(op->frames);
@@ -1216,7 +1225,7 @@ static int bcm_rx_setup(struct bcm_msg_head *msg_head, struct msghdr *msg, · 468 unmodified lines
1216 err = can_rx_register(dev, op->can_id,1225 err = can_rx_register(dev, op->can_id,
1217 REGMASK(op->can_id),1226 REGMASK(op->can_id),
1218 bcm_rx_handler, op,1227 bcm_rx_handler, op,
1219 "bcm");1228 "bcm", sk);
1220 1229
1221 op->rx_reg_dev = dev;1230 op->rx_reg_dev = dev;
1222 dev_put(dev);1231 dev_put(dev);
@@ -1225,7 +1234,7 @@ static int bcm_rx_setup(struct bcm_msg_head *msg_head, struct msghdr *msg, · 2 unmodified lines
1225 } else1234 } else
1226 err = can_rx_register(NULL, op->can_id,1235 err = can_rx_register(NULL, op->can_id,
1227 REGMASK(op->can_id),1236 REGMASK(op->can_id),
1228 bcm_rx_handler, op, "bcm");1237 bcm_rx_handler, op, "bcm", sk);
1229 if (err) {1238 if (err) {
1230 /* this bcm rx op is broken -> remove it */1239 /* this bcm rx op is broken -> remove it */
1231 list_del(&op->list);1240 list_del(&op->list);
net/can/gw.c+1−1
@@ -442,7 +442,7 @@ static inline int cgw_register_filter(struct cgw_job *gwj) · 441 unmodified lines
442{442{
443 return can_rx_register(gwj->src.dev, gwj->ccgw.filter.can_id,443 return can_rx_register(gwj->src.dev, gwj->ccgw.filter.can_id,
444 gwj->ccgw.filter.can_mask, can_can_gw_rcv,444 gwj->ccgw.filter.can_mask, can_can_gw_rcv,
445 gwj, "gw");445 gwj, "gw", NULL);
446}446}
447 447
448static inline void cgw_unregister_filter(struct cgw_job *gwj)448static inline void cgw_unregister_filter(struct cgw_job *gwj)
net/can/raw.c+2−2
@@ -190,7 +190,7 @@ static int raw_enable_filters(struct net_device *dev, struct sock *sk, · 189 unmodified lines
190 for (i = 0; i < count; i++) {190 for (i = 0; i < count; i++) {
191 err = can_rx_register(dev, filter[i].can_id,191 err = can_rx_register(dev, filter[i].can_id,
192 filter[i].can_mask,192 filter[i].can_mask,
193 raw_rcv, sk, "raw");193 raw_rcv, sk, "raw", sk);
194 if (err) {194 if (err) {
195 /* clean up successfully registered filters */195 /* clean up successfully registered filters */
196 while (--i >= 0)196 while (--i >= 0)
@@ -211,7 +211,7 @@ static int raw_enable_errfilter(struct net_device *dev, struct sock *sk, · 14 unmodified lines
211 211
212 if (err_mask)212 if (err_mask)
213 err = can_rx_register(dev, 0, err_mask | CAN_ERR_FLAG,213 err = can_rx_register(dev, 0, err_mask | CAN_ERR_FLAG,
214 raw_rcv, sk, "raw");214 raw_rcv, sk, "raw", sk);
215 215
216 return err;216 return err;
217}217}
net/ipv4/tcp_output.c+4−2
@@ -2518,9 +2518,11 @@ u32 __tcp_select_window(struct sock *sk) · 2517 unmodified lines
2518 int full_space = min_t(int, tp->window_clamp, allowed_space);2518 int full_space = min_t(int, tp->window_clamp, allowed_space);
2519 int window;2519 int window;
2520 2520
2521 if (mss > full_space)2521 if (unlikely(mss > full_space)) {
2522 mss = full_space;2522 mss = full_space;
2523 2523 if (mss <= 0)
2524 return 0;
2525 }
2524 if (free_space < (full_space >> 1)) {2526 if (free_space < (full_space >> 1)) {
2525 icsk->icsk_ack.quick = 0;2527 icsk->icsk_ack.quick = 0;
2526 2528
net/ipv6/ip6_output.c+1−1
@@ -1344,7 +1344,7 @@ emsgsize: · 1343 unmodified lines
1344 */1344 */
1345 if (transhdrlen && sk->sk_protocol == IPPROTO_UDP &&1345 if (transhdrlen && sk->sk_protocol == IPPROTO_UDP &&
1346 headersize == sizeof(struct ipv6hdr) &&1346 headersize == sizeof(struct ipv6hdr) &&
1347 length < mtu - headersize &&1347 length <= mtu - headersize &&
1348 !(flags & MSG_MORE) &&1348 !(flags & MSG_MORE) &&
1349 rt->dst.dev->features & (NETIF_F_IPV6_CSUM | NETIF_F_HW_CSUM))1349 rt->dst.dev->features & (NETIF_F_IPV6_CSUM | NETIF_F_HW_CSUM))
1350 csummode = CHECKSUM_PARTIAL;1350 csummode = CHECKSUM_PARTIAL;
net/ipv6/ip6_tunnel.c+1−1
@@ -441,7 +441,7 @@ __u16 ip6_tnl_parse_tlv_enc_lim(struct sk_buff *skb, __u8 *raw) · 440 unmodified lines
441 if (i + sizeof(*tel) > optlen)441 if (i + sizeof(*tel) > optlen)
442 break;442 break;
443 443
444 tel = (struct ipv6_tlv_tnl_enc_lim *) skb->data + off + i;444 tel = (struct ipv6_tlv_tnl_enc_lim *)(skb->data + off + i);
445 /* return index of option if found and valid */445 /* return index of option if found and valid */
446 if (tel->type == IPV6_TLV_TNL_ENCAP_LIMIT &&446 if (tel->type == IPV6_TLV_TNL_ENCAP_LIMIT &&
447 tel->length == 1)447 tel->length == 1)
net/sched/cls_flower.c+2−2
@@ -568,9 +568,9 @@ static int fl_set_key(struct net *net, struct nlattr **tb, · 567 unmodified lines
568 &mask->icmp.type,568 &mask->icmp.type,
569 TCA_FLOWER_KEY_ICMPV6_TYPE_MASK,569 TCA_FLOWER_KEY_ICMPV6_TYPE_MASK,
570 sizeof(key->icmp.type));570 sizeof(key->icmp.type));
571 fl_set_key_val(tb, &key->icmp.code, TCA_FLOWER_KEY_ICMPV4_CODE,571 fl_set_key_val(tb, &key->icmp.code, TCA_FLOWER_KEY_ICMPV6_CODE,
572 &mask->icmp.code,572 &mask->icmp.code,
573 TCA_FLOWER_KEY_ICMPV4_CODE_MASK,573 TCA_FLOWER_KEY_ICMPV6_CODE_MASK,
574 sizeof(key->icmp.code));574 sizeof(key->icmp.code));
575 }575 }
576 576
net/sched/cls_matchall.c+45−82
@@ -16,16 +16,11 @@ · 15 unmodified lines
16#include <net/sch_generic.h>16#include <net/sch_generic.h>
17#include <net/pkt_cls.h>17#include <net/pkt_cls.h>
18 18
19struct cls_mall_filter {19struct cls_mall_head {
20 struct tcf_exts exts;20 struct tcf_exts exts;
21 struct tcf_result res;21 struct tcf_result res;
22 u32 handle;22 u32 handle;
23 struct rcu_head rcu;
24 u32 flags;23 u32 flags;
25};
26
27struct cls_mall_head {
28 struct cls_mall_filter *filter;
29 struct rcu_head rcu;24 struct rcu_head rcu;
30};25};
31 26
@@ -33,38 +28,29 @@ static int mall_classify(struct sk_buff *skb, const struct tcf_proto *tp, · 1 unmodified line
33 struct tcf_result *res)28 struct tcf_result *res)
34{29{
35 struct cls_mall_head *head = rcu_dereference_bh(tp->root);30 struct cls_mall_head *head = rcu_dereference_bh(tp->root);
36 struct cls_mall_filter *f = head->filter;
37 31
38 if (tc_skip_sw(f->flags))32 if (tc_skip_sw(head->flags))
39 return -1;33 return -1;
40 34
41 return tcf_exts_exec(skb, &f->exts, res);35 return tcf_exts_exec(skb, &head->exts, res);
42}36}
43 37
44static int mall_init(struct tcf_proto *tp)38static int mall_init(struct tcf_proto *tp)
45{39{
46 struct cls_mall_head *head;
47
48 head = kzalloc(sizeof(*head), GFP_KERNEL);
49 if (!head)
50 return -ENOBUFS;
51
52 rcu_assign_pointer(tp->root, head);
53
54 return 0;40 return 0;
55}41}
56 42
57static void mall_destroy_filter(struct rcu_head *head)43static void mall_destroy_rcu(struct rcu_head *rcu)
58{44{
59 struct cls_mall_filter *f = container_of(head, struct cls_mall_filter, rcu);45 struct cls_mall_head *head = container_of(rcu, struct cls_mall_head,
46 rcu);
60 47
61 tcf_exts_destroy(&f->exts);48 tcf_exts_destroy(&head->exts);
62 49 kfree(head);
63 kfree(f);
64}50}
65 51
66static int mall_replace_hw_filter(struct tcf_proto *tp,52static int mall_replace_hw_filter(struct tcf_proto *tp,
67 struct cls_mall_filter *f,53 struct cls_mall_head *head,
68 unsigned long cookie)54 unsigned long cookie)
69{55{
70 struct net_device *dev = tp->q->dev_queue->dev;56 struct net_device *dev = tp->q->dev_queue->dev;
@@ -74,7 +60,7 @@ static int mall_replace_hw_filter(struct tcf_proto *tp, · 3 unmodified lines
74 offload.type = TC_SETUP_MATCHALL;60 offload.type = TC_SETUP_MATCHALL;
75 offload.cls_mall = &mall_offload;61 offload.cls_mall = &mall_offload;
76 offload.cls_mall->command = TC_CLSMATCHALL_REPLACE;62 offload.cls_mall->command = TC_CLSMATCHALL_REPLACE;
77 offload.cls_mall->exts = &f->exts;63 offload.cls_mall->exts = &head->exts;
78 offload.cls_mall->cookie = cookie;64 offload.cls_mall->cookie = cookie;
79 65
80 return dev->netdev_ops->ndo_setup_tc(dev, tp->q->handle, tp->protocol,66 return dev->netdev_ops->ndo_setup_tc(dev, tp->q->handle, tp->protocol,
@@ -82,7 +68,7 @@ static int mall_replace_hw_filter(struct tcf_proto *tp, · 1 unmodified line
82}68}
83 69
84static void mall_destroy_hw_filter(struct tcf_proto *tp,70static void mall_destroy_hw_filter(struct tcf_proto *tp,
85 struct cls_mall_filter *f,71 struct cls_mall_head *head,
86 unsigned long cookie)72 unsigned long cookie)
87{73{
88 struct net_device *dev = tp->q->dev_queue->dev;74 struct net_device *dev = tp->q->dev_queue->dev;
@@ -103,29 +89,20 @@ static bool mall_destroy(struct tcf_proto *tp, bool force) · 14 unmodified lines
103{89{
104 struct cls_mall_head *head = rtnl_dereference(tp->root);90 struct cls_mall_head *head = rtnl_dereference(tp->root);
105 struct net_device *dev = tp->q->dev_queue->dev;91 struct net_device *dev = tp->q->dev_queue->dev;
106 struct cls_mall_filter *f = head->filter;
107 92
108 if (!force && f)93 if (!head)
109 return false;94 return true;
110 95
111 if (f) {96 if (tc_should_offload(dev, tp, head->flags))
112 if (tc_should_offload(dev, tp, f->flags))97 mall_destroy_hw_filter(tp, head, (unsigned long) head);
113 mall_destroy_hw_filter(tp, f, (unsigned long) f);
114 98
115 call_rcu(&f->rcu, mall_destroy_filter);99 call_rcu(&head->rcu, mall_destroy_rcu);
116 }
117 kfree_rcu(head, rcu);
118 return true;100 return true;
119}101}
120 102
121static unsigned long mall_get(struct tcf_proto *tp, u32 handle)103static unsigned long mall_get(struct tcf_proto *tp, u32 handle)
122{104{
123 struct cls_mall_head *head = rtnl_dereference(tp->root);105 return 0UL;
124 struct cls_mall_filter *f = head->filter;
125
126 if (f && f->handle == handle)
127 return (unsigned long) f;
128 return 0;
129}106}
130 107
131static const struct nla_policy mall_policy[TCA_MATCHALL_MAX + 1] = {108static const struct nla_policy mall_policy[TCA_MATCHALL_MAX + 1] = {
@@ -134,7 +111,7 @@ static const struct nla_policy mall_policy[TCA_MATCHALL_MAX + 1] = { · 2 unmodified lines
134};111};
135 112
136static int mall_set_parms(struct net *net, struct tcf_proto *tp,113static int mall_set_parms(struct net *net, struct tcf_proto *tp,
137 struct cls_mall_filter *f,114 struct cls_mall_head *head,
138 unsigned long base, struct nlattr **tb,115 unsigned long base, struct nlattr **tb,
139 struct nlattr *est, bool ovr)116 struct nlattr *est, bool ovr)
140{117{
@@ -147,11 +124,11 @@ static int mall_set_parms(struct net *net, struct tcf_proto *tp, · 6 unmodified lines
147 return err;124 return err;
148 125
149 if (tb[TCA_MATCHALL_CLASSID]) {126 if (tb[TCA_MATCHALL_CLASSID]) {
150 f->res.classid = nla_get_u32(tb[TCA_MATCHALL_CLASSID]);127 head->res.classid = nla_get_u32(tb[TCA_MATCHALL_CLASSID]);
151 tcf_bind_filter(tp, &f->res, base);128 tcf_bind_filter(tp, &head->res, base);
152 }129 }
153 130
154 tcf_exts_change(tp, &f->exts, &e);131 tcf_exts_change(tp, &head->exts, &e);
155 132
156 return 0;133 return 0;
157}134}
@@ -162,21 +139,17 @@ static int mall_change(struct net *net, struct sk_buff *in_skb, · 4 unmodified lines
162 unsigned long *arg, bool ovr)139 unsigned long *arg, bool ovr)
163{140{
164 struct cls_mall_head *head = rtnl_dereference(tp->root);141 struct cls_mall_head *head = rtnl_dereference(tp->root);
165 struct cls_mall_filter *fold = (struct cls_mall_filter *) *arg;
166 struct net_device *dev = tp->q->dev_queue->dev;142 struct net_device *dev = tp->q->dev_queue->dev;
167 struct cls_mall_filter *f;
168 struct nlattr *tb[TCA_MATCHALL_MAX + 1];143 struct nlattr *tb[TCA_MATCHALL_MAX + 1];
144 struct cls_mall_head *new;
169 u32 flags = 0;145 u32 flags = 0;
170 int err;146 int err;
171 147
172 if (!tca[TCA_OPTIONS])148 if (!tca[TCA_OPTIONS])
173 return -EINVAL;149 return -EINVAL;
174 150
175 if (head->filter)151 if (head)
176 return -EBUSY;152 return -EEXIST;
177
178 if (fold)
179 return -EINVAL;
180 153
181 err = nla_parse_nested(tb, TCA_MATCHALL_MAX,154 err = nla_parse_nested(tb, TCA_MATCHALL_MAX,
182 tca[TCA_OPTIONS], mall_policy);155 tca[TCA_OPTIONS], mall_policy);
@@ -189,23 +162,23 @@ static int mall_change(struct net *net, struct sk_buff *in_skb, · 6 unmodified lines
189 return -EINVAL;162 return -EINVAL;
190 }163 }
191 164
192 f = kzalloc(sizeof(*f), GFP_KERNEL);165 new = kzalloc(sizeof(*new), GFP_KERNEL);
193 if (!f)166 if (!new)
194 return -ENOBUFS;167 return -ENOBUFS;
195 168
196 tcf_exts_init(&f->exts, TCA_MATCHALL_ACT, 0);169 tcf_exts_init(&new->exts, TCA_MATCHALL_ACT, 0);
197 170
198 if (!handle)171 if (!handle)
199 handle = 1;172 handle = 1;
200 f->handle = handle;173 new->handle = handle;
201 f->flags = flags;174 new->flags = flags;
202 175
203 err = mall_set_parms(net, tp, f, base, tb, tca[TCA_RATE], ovr);176 err = mall_set_parms(net, tp, new, base, tb, tca[TCA_RATE], ovr);
204 if (err)177 if (err)
205 goto errout;178 goto errout;
206 179
207 if (tc_should_offload(dev, tp, flags)) {180 if (tc_should_offload(dev, tp, flags)) {
208 err = mall_replace_hw_filter(tp, f, (unsigned long) f);181 err = mall_replace_hw_filter(tp, new, (unsigned long) new);
209 if (err) {182 if (err) {
210 if (tc_skip_sw(flags))183 if (tc_skip_sw(flags))
211 goto errout;184 goto errout;
@@ -214,39 +187,29 @@ static int mall_change(struct net *net, struct sk_buff *in_skb, · 2 unmodified lines
214 }187 }
215 }188 }
216 189
217 *arg = (unsigned long) f;190 *arg = (unsigned long) head;
218 rcu_assign_pointer(head->filter, f);191 rcu_assign_pointer(tp->root, new);
219 192 if (head)
193 call_rcu(&head->rcu, mall_destroy_rcu);
220 return 0;194 return 0;
221 195
222errout:196errout:
223 kfree(f);197 kfree(new);
224 return err;198 return err;
225}199}
226 200
227static int mall_delete(struct tcf_proto *tp, unsigned long arg)201static int mall_delete(struct tcf_proto *tp, unsigned long arg)
228{202{
229 struct cls_mall_head *head = rtnl_dereference(tp->root);203 return -EOPNOTSUPP;
230 struct cls_mall_filter *f = (struct cls_mall_filter *) arg;
231 struct net_device *dev = tp->q->dev_queue->dev;
232
233 if (tc_should_offload(dev, tp, f->flags))
234 mall_destroy_hw_filter(tp, f, (unsigned long) f);
235
236 RCU_INIT_POINTER(head->filter, NULL);
237 tcf_unbind_filter(tp, &f->res);
238 call_rcu(&f->rcu, mall_destroy_filter);
239 return 0;
240}204}
241 205
242static void mall_walk(struct tcf_proto *tp, struct tcf_walker *arg)206static void mall_walk(struct tcf_proto *tp, struct tcf_walker *arg)
243{207{
244 struct cls_mall_head *head = rtnl_dereference(tp->root);208 struct cls_mall_head *head = rtnl_dereference(tp->root);
245 struct cls_mall_filter *f = head->filter;
246 209
247 if (arg->count < arg->skip)210 if (arg->count < arg->skip)
248 goto skip;211 goto skip;
249 if (arg->fn(tp, (unsigned long) f, arg) < 0)212 if (arg->fn(tp, (unsigned long) head, arg) < 0)
250 arg->stop = 1;213 arg->stop = 1;
251skip:214skip:
252 arg->count++;215 arg->count++;
@@ -255,28 +218,28 @@ skip: · 2 unmodified lines
255static int mall_dump(struct net *net, struct tcf_proto *tp, unsigned long fh,218static int mall_dump(struct net *net, struct tcf_proto *tp, unsigned long fh,
256 struct sk_buff *skb, struct tcmsg *t)219 struct sk_buff *skb, struct tcmsg *t)
257{220{
258 struct cls_mall_filter *f = (struct cls_mall_filter *) fh;221 struct cls_mall_head *head = (struct cls_mall_head *) fh;
259 struct nlattr *nest;222 struct nlattr *nest;
260 223
261 if (!f)224 if (!head)
262 return skb->len;225 return skb->len;
263 226
264 t->tcm_handle = f->handle;227 t->tcm_handle = head->handle;
265 228
266 nest = nla_nest_start(skb, TCA_OPTIONS);229 nest = nla_nest_start(skb, TCA_OPTIONS);
267 if (!nest)230 if (!nest)
268 goto nla_put_failure;231 goto nla_put_failure;
269 232
270 if (f->res.classid &&233 if (head->res.classid &&
271 nla_put_u32(skb, TCA_MATCHALL_CLASSID, f->res.classid))234 nla_put_u32(skb, TCA_MATCHALL_CLASSID, head->res.classid))
272 goto nla_put_failure;235 goto nla_put_failure;
273 236
274 if (tcf_exts_dump(skb, &f->exts))237 if (tcf_exts_dump(skb, &head->exts))
275 goto nla_put_failure;238 goto nla_put_failure;
276 239
277 nla_nest_end(skb, nest);240 nla_nest_end(skb, nest);
278 241
279 if (tcf_exts_dump_stats(skb, &f->exts) < 0)242 if (tcf_exts_dump_stats(skb, &head->exts) < 0)
280 goto nla_put_failure;243 goto nla_put_failure;
281 244
282 return skb->len;245 return skb->len;
scripts/Makefile.build+2−0
@@ -164,6 +164,7 @@ cmd_gensymtypes_c = \ · 163 unmodified lines
164 $(CPP) -D__GENKSYMS__ $(c_flags) $< | \164 $(CPP) -D__GENKSYMS__ $(c_flags) $< | \
165 $(GENKSYMS) $(if $(1), -T $(2)) \165 $(GENKSYMS) $(if $(1), -T $(2)) \
166 $(patsubst y,-s _,$(CONFIG_HAVE_UNDERSCORE_SYMBOL_PREFIX)) \166 $(patsubst y,-s _,$(CONFIG_HAVE_UNDERSCORE_SYMBOL_PREFIX)) \
167 $(patsubst y,-R,$(CONFIG_MODULE_REL_CRCS)) \
167 $(if $(KBUILD_PRESERVE),-p) \168 $(if $(KBUILD_PRESERVE),-p) \
168 -r $(firstword $(wildcard $(2:.symtypes=.symref) /dev/null))169 -r $(firstword $(wildcard $(2:.symtypes=.symref) /dev/null))
169 170
@@ -337,6 +338,7 @@ cmd_gensymtypes_S = \ · 167 unmodified lines
337 $(CPP) -D__GENKSYMS__ $(c_flags) -xc - | \338 $(CPP) -D__GENKSYMS__ $(c_flags) -xc - | \
338 $(GENKSYMS) $(if $(1), -T $(2)) \339 $(GENKSYMS) $(if $(1), -T $(2)) \
339 $(patsubst y,-s _,$(CONFIG_HAVE_UNDERSCORE_SYMBOL_PREFIX)) \340 $(patsubst y,-s _,$(CONFIG_HAVE_UNDERSCORE_SYMBOL_PREFIX)) \
341 $(patsubst y,-R,$(CONFIG_MODULE_REL_CRCS)) \
340 $(if $(KBUILD_PRESERVE),-p) \342 $(if $(KBUILD_PRESERVE),-p) \
341 -r $(firstword $(wildcard $(2:.symtypes=.symref) /dev/null))343 -r $(firstword $(wildcard $(2:.symtypes=.symref) /dev/null))
342 344
scripts/genksyms/genksyms.c+14−5
@@ -44,7 +44,7 @@ char *cur_filename, *source_file; · 43 unmodified lines
44int in_source_file;44int in_source_file;
45 45
46static int flag_debug, flag_dump_defs, flag_reference, flag_dump_types,46static int flag_debug, flag_dump_defs, flag_reference, flag_dump_types,
47 flag_preserve, flag_warnings;47 flag_preserve, flag_warnings, flag_rel_crcs;
48static const char *mod_prefix = "";48static const char *mod_prefix = "";
49 49
50static int errors;50static int errors;
@@ -693,7 +693,10 @@ void export_symbol(const char *name) · 642 unmodified lines
693 fputs(">\n", debugfile);693 fputs(">\n", debugfile);
694 694
695 /* Used as a linker script. */695 /* Used as a linker script. */
696 printf("%s__crc_%s = 0x%08lx ;\n", mod_prefix, name, crc);696 printf(!flag_rel_crcs ? "%s__crc_%s = 0x%08lx;\n" :
697 "SECTIONS { .rodata : ALIGN(4) { "
698 "%s__crc_%s = .; LONG(0x%08lx); } }\n",
699 mod_prefix, name, crc);
697 }700 }
698}701}
699 702
@@ -730,7 +733,7 @@ void error_with_pos(const char *fmt, ...) · 30 unmodified lines
730 733
731static void genksyms_usage(void)734static void genksyms_usage(void)
732{735{
733 fputs("Usage:\n" "genksyms [-adDTwqhV] > /path/to/.tmp_obj.ver\n" "\n"736 fputs("Usage:\n" "genksyms [-adDTwqhVR] > /path/to/.tmp_obj.ver\n" "\n"
734#ifdef __GNU_LIBRARY__737#ifdef __GNU_LIBRARY__
735 " -s, --symbol-prefix Select symbol prefix\n"738 " -s, --symbol-prefix Select symbol prefix\n"
736 " -d, --debug Increment the debug level (repeatable)\n"739 " -d, --debug Increment the debug level (repeatable)\n"
@@ -742,6 +745,7 @@ static void genksyms_usage(void) · 5 unmodified lines
742 " -q, --quiet Disable warnings (default)\n"745 " -q, --quiet Disable warnings (default)\n"
743 " -h, --help Print this message\n"746 " -h, --help Print this message\n"
744 " -V, --version Print the release version\n"747 " -V, --version Print the release version\n"
748 " -R, --relative-crc Emit section relative symbol CRCs\n"
745#else /* __GNU_LIBRARY__ */749#else /* __GNU_LIBRARY__ */
746 " -s Select symbol prefix\n"750 " -s Select symbol prefix\n"
747 " -d Increment the debug level (repeatable)\n"751 " -d Increment the debug level (repeatable)\n"
@@ -753,6 +757,7 @@ static void genksyms_usage(void) · 5 unmodified lines
753 " -q Disable warnings (default)\n"757 " -q Disable warnings (default)\n"
754 " -h Print this message\n"758 " -h Print this message\n"
755 " -V Print the release version\n"759 " -V Print the release version\n"
760 " -R Emit section relative symbol CRCs\n"
756#endif /* __GNU_LIBRARY__ */761#endif /* __GNU_LIBRARY__ */
757 , stderr);762 , stderr);
758}763}
@@ -774,13 +779,14 @@ int main(int argc, char **argv) · 15 unmodified lines
774 {"preserve", 0, 0, 'p'},779 {"preserve", 0, 0, 'p'},
775 {"version", 0, 0, 'V'},780 {"version", 0, 0, 'V'},
776 {"help", 0, 0, 'h'},781 {"help", 0, 0, 'h'},
782 {"relative-crc", 0, 0, 'R'},
777 {0, 0, 0, 0}783 {0, 0, 0, 0}
778 };784 };
779 785
780 while ((o = getopt_long(argc, argv, "s:dwqVDr:T:ph",786 while ((o = getopt_long(argc, argv, "s:dwqVDr:T:phR",
781 &long_opts[0], NULL)) != EOF)787 &long_opts[0], NULL)) != EOF)
782#else /* __GNU_LIBRARY__ */788#else /* __GNU_LIBRARY__ */
783 while ((o = getopt(argc, argv, "s:dwqVDr:T:ph")) != EOF)789 while ((o = getopt(argc, argv, "s:dwqVDr:T:phR")) != EOF)
784#endif /* __GNU_LIBRARY__ */790#endif /* __GNU_LIBRARY__ */
785 switch (o) {791 switch (o) {
786 case 's':792 case 's':
@@ -823,6 +829,9 @@ int main(int argc, char **argv) · 36 unmodified lines
823 case 'h':829 case 'h':
824 genksyms_usage();830 genksyms_usage();
825 return 0;831 return 0;
832 case 'R':
833 flag_rel_crcs = 1;
834 break;
826 default:835 default:
827 genksyms_usage();836 genksyms_usage();
828 return 1;837 return 1;
scripts/kallsyms.c+12−0
@@ -219,6 +219,10 @@ static int symbol_valid(struct sym_entry *s) · 218 unmodified lines
219 "_SDA2_BASE_", /* ppc */219 "_SDA2_BASE_", /* ppc */
220 NULL };220 NULL };
221 221
222 static char *special_prefixes[] = {
223 "__crc_", /* modversions */
224 NULL };
225
222 static char *special_suffixes[] = {226 static char *special_suffixes[] = {
223 "_veneer", /* arm */227 "_veneer", /* arm */
224 "_from_arm", /* arm */228 "_from_arm", /* arm */
@@ -259,6 +263,14 @@ static int symbol_valid(struct sym_entry *s) · 34 unmodified lines
259 if (strcmp(sym_name, special_symbols[i]) == 0)263 if (strcmp(sym_name, special_symbols[i]) == 0)
260 return 0;264 return 0;
261 265
266 for (i = 0; special_prefixes[i]; i++) {
267 int l = strlen(special_prefixes[i]);
268
269 if (l <= strlen(sym_name) &&
270 strncmp(sym_name, special_prefixes[i], l) == 0)
271 return 0;
272 }
273
262 for (i = 0; special_suffixes[i]; i++) {274 for (i = 0; special_suffixes[i]; i++) {
263 int l = strlen(sym_name) - strlen(special_suffixes[i]);275 int l = strlen(sym_name) - strlen(special_suffixes[i]);
264 276
scripts/mod/modpost.c+10−0
@@ -621,6 +621,16 @@ static void handle_modversions(struct module *mod, struct elf_info *info, · 620 unmodified lines
621 if (strncmp(symname, CRC_PFX, strlen(CRC_PFX)) == 0) {621 if (strncmp(symname, CRC_PFX, strlen(CRC_PFX)) == 0) {
622 is_crc = true;622 is_crc = true;
623 crc = (unsigned int) sym->st_value;623 crc = (unsigned int) sym->st_value;
624 if (sym->st_shndx != SHN_UNDEF && sym->st_shndx != SHN_ABS) {
625 unsigned int *crcp;
626
627 /* symbol points to the CRC in the ELF object */
628 crcp = (void *)info->hdr + sym->st_value +
629 info->sechdrs[sym->st_shndx].sh_offset -
630 (info->hdr->e_type != ET_REL ?
631 info->sechdrs[sym->st_shndx].sh_addr : 0);
632 crc = *crcp;
633 }
624 sym_update_crc(symname + strlen(CRC_PFX), mod, crc,634 sym_update_crc(symname + strlen(CRC_PFX), mod, crc,
625 export);635 export);
626 }636 }
tools/objtool/arch/x86/decode.c+1−1
@@ -150,9 +150,9 @@ int arch_decode_instruction(struct elf *elf, struct section *sec, · 149 unmodified lines
150 *type = INSN_RETURN;150 *type = INSN_RETURN;
151 break;151 break;
152 152
153 case 0xc5: /* iret */
154 case 0xca: /* retf */153 case 0xca: /* retf */
155 case 0xcb: /* retf */154 case 0xcb: /* retf */
155 case 0xcf: /* iret */
156 *type = INSN_CONTEXT_SWITCH;156 *type = INSN_CONTEXT_SWITCH;
157 break;157 break;
158 158