History

Merge tag 'usb-serial-4.6-rc7' of git://git.kernel.org/pub/scm/linux/kernel/git/johan/usb-serial into usb-next

Johan writes: USB-serial fixes for v4.6-rc7 Here are some more new device ids.

Greg Kroah-Hartman committed 10 years ago

Commit 545feef2 parents 792f752 74d2a91214 files · +2540 −1223Browse files

Unified · Split

214 files
  1. .mailmap +4 −0
  2. Documentation/devicetree/bindings/arc/archs-pct.txt +1 −1
  3. Documentation/devicetree/bindings/arc/pct.txt +1 −1
  4. Documentation/devicetree/bindings/arm/cpus.txt +0 −1
  5. Documentation/devicetree/bindings/i2c/i2c-rk3x.txt +2 −2
  6. Documentation/sysctl/vm.txt +10 −9
  7. MAINTAINERS +12 −3
  8. Makefile +2 −2
  9. arch/arc/Kconfig +2 −0
  10. arch/arc/include/asm/irqflags-arcv2.h +35 −1
  11. arch/arc/kernel/entry-arcv2.S +9 −1
  12. arch/arc/kernel/entry-compact.S +3 −0
  13. arch/arc/mm/init.c +4 −0
  14. arch/arm/boot/dts/am33xx.dtsi +1 −1
  15. arch/arm/boot/dts/am4372.dtsi +1 −1
  16. arch/arm/boot/dts/am57xx-beagle-x15.dts +0 −17
  17. arch/arm/boot/dts/dm814x-clocks.dtsi +212 −31
  18. arch/arm/boot/dts/dra62x-clocks.dtsi +26 −0
  19. arch/arm/boot/dts/dra7xx-clocks.dtsi +17 −1
  20. arch/arm/boot/dts/qcom-msm8974.dtsi +1 −13
  21. arch/arm/boot/dts/r8a7791-koelsch.dts +1 −0
  22. arch/arm/boot/dts/r8a7791-porter.dts +1 −13
  23. arch/arm/boot/dts/r8a7791.dtsi +1 −4
  24. arch/arm/mach-imx/devices/platform-sdhci-esdhc-imx.c +3 −2
  25. arch/arm/mach-omap2/clockdomains7xx_data.c +1 −1
  26. arch/arm/mach-omap2/io.c +2 −1
  27. arch/arm/mach-omap2/omap-wakeupgen.c +7 −0
  28. arch/arm/mach-omap2/pm34xx.c +13 −10
  29. arch/arm/mach-shmobile/timer.c +11 −17
  30. arch/arm64/boot/dts/socionext/uniphier-ph1-ld20-ref.dts +0 −1
  31. arch/arm64/boot/dts/socionext/uniphier-ph1-ld20.dtsi +5 −15
  32. arch/nios2/lib/memset.c +1 −1
  33. arch/powerpc/include/asm/systbl.h +2 −0
  34. arch/powerpc/include/asm/unistd.h +1 −1
  35. arch/powerpc/include/uapi/asm/unistd.h +2 −0
  36. arch/s390/include/asm/mmu.h +1 −1
  37. arch/s390/include/asm/mmu_context.h +22 −6
  38. arch/s390/include/asm/pgalloc.h +2 −2
  39. arch/s390/include/asm/processor.h +1 −1
  40. arch/s390/include/asm/tlbflush.h +3 −6
  41. arch/s390/mm/init.c +2 −1
  42. arch/s390/mm/mmap.c +3 −3
  43. arch/s390/mm/pgalloc.c +28 −57
  44. arch/s390/pci/pci_dma.c +10 −6
  45. arch/x86/events/amd/core.c +1 −1
  46. arch/x86/events/intel/core.c +1 −0
  47. arch/x86/events/intel/lbr.c +4 −2
  48. arch/x86/events/intel/pt.c +64 −11
  49. arch/x86/events/intel/pt.h +3 −0
  50. arch/x86/events/intel/rapl.c +1 −0
  51. arch/x86/include/asm/perf_event.h +4 −0
  52. arch/x86/kernel/apic/vector.c +2 −1
  53. arch/x86/kernel/head_32.S +0 −6
  54. arch/x86/kvm/vmx.c +4 −0
  55. arch/x86/mm/setup_nx.c +3 −2
  56. arch/x86/xen/spinlock.c +6 −0
  57. drivers/block/rbd.c +25 −27
  58. drivers/cpufreq/cpufreq_governor.c +2 −6
  59. drivers/cpufreq/intel_pstate.c +5 −0
  60. drivers/crypto/talitos.c +57 −30
  61. drivers/edac/i7core_edac.c +1 −1
  62. drivers/edac/sb_edac.c +1 −1
  63. drivers/firmware/efi/vars.c +26 −11
  64. drivers/firmware/psci.c +1 −1
  65. drivers/gpu/drm/amd/amdgpu/amdgpu_atpx_handler.c +7 −4
  66. drivers/gpu/drm/amd/amdgpu/amdgpu_device.c +1 −7
  67. drivers/gpu/drm/amd/amdgpu/gmc_v7_0.c +4 −1
  68. drivers/gpu/drm/amd/amdgpu/gmc_v8_0.c +4 −1
  69. drivers/gpu/drm/drm_dp_mst_topology.c +20 −0
  70. drivers/gpu/drm/etnaviv/etnaviv_gpu.c +18 −13
  71. drivers/gpu/drm/radeon/evergreen.c +153 −1
  72. drivers/gpu/drm/radeon/evergreen_reg.h +46 −0
  73. drivers/gpu/drm/ttm/ttm_bo.c +4 −13
  74. drivers/gpu/drm/virtio/virtgpu_display.c +12 −0
  75. drivers/gpu/drm/vmwgfx/vmwgfx_execbuf.c +5 −5
  76. drivers/gpu/drm/vmwgfx/vmwgfx_fb.c +3 −3
  77. drivers/i2c/busses/Kconfig +2 −2
  78. drivers/i2c/busses/i2c-cpm.c +2 −2
  79. drivers/i2c/busses/i2c-exynos5.c +19 −5
  80. drivers/i2c/busses/i2c-ismt.c +2 −0
  81. drivers/i2c/busses/i2c-rk3x.c +1 −0
  82. drivers/infiniband/core/cache.c +2 −1
  83. drivers/infiniband/core/ucm.c +4 −0
  84. drivers/infiniband/core/ucma.c +3 −0
  85. drivers/infiniband/core/uverbs_main.c +5 −0
  86. drivers/infiniband/core/verbs.c +2 −1
  87. drivers/infiniband/hw/cxgb3/iwch_provider.c +2 −0
  88. drivers/infiniband/hw/cxgb4/cq.c +1 −1
  89. drivers/infiniband/hw/cxgb4/provider.c +2 −0
  90. drivers/infiniband/hw/cxgb4/qp.c +21 −3
  91. drivers/infiniband/hw/mlx5/main.c +3 −3
  92. drivers/infiniband/hw/nes/nes_nic.c +0 −3
  93. drivers/infiniband/hw/qib/qib_file_ops.c +5 −0
  94. drivers/infiniband/sw/rdmavt/qp.c +2 −2
  95. drivers/media/usb/usbvision/usbvision-video.c +0 −7
  96. drivers/media/v4l2-core/videobuf2-core.c +15 −5
  97. drivers/media/v4l2-core/videobuf2-memops.c +1 −1
  98. drivers/media/v4l2-core/videobuf2-v4l2.c +12 −8
  99. drivers/misc/cxl/context.c +7 −0
  100. drivers/misc/cxl/cxl.h +2 −0
  101. drivers/misc/cxl/irq.c +0 −1
  102. drivers/misc/cxl/native.c +31 −0
  103. drivers/mmc/host/Kconfig +1 −0
  104. drivers/mmc/host/sdhci-acpi.c +81 −0
  105. drivers/mmc/host/sunxi-mmc.c +5 −0
  106. drivers/net/Kconfig +2 −3
  107. drivers/net/ethernet/mellanox/mlx4/en_tx.c +4 −2
  108. drivers/net/ethernet/mellanox/mlx5/core/en.h +1 −1
  109. drivers/net/ethernet/mellanox/mlx5/core/en_ethtool.c +4 −4
  110. drivers/net/ethernet/mellanox/mlx5/core/en_main.c +57 −15
  111. drivers/net/ethernet/mellanox/mlx5/core/fs_core.c +18 −30
  112. drivers/net/ethernet/mellanox/mlx5/core/main.c +21 −4
  113. drivers/net/ethernet/mellanox/mlx5/core/port.c +5 −5
  114. drivers/net/ethernet/mellanox/mlx5/core/vport.c +40 −0
  115. drivers/net/ethernet/qlogic/qlcnic/qlcnic.h +2 −2
  116. drivers/net/ethernet/stmicro/stmmac/dwmac-socfpga.c +16 −34
  117. drivers/net/macsec.c +42 −23
  118. drivers/platform/x86/toshiba_acpi.c +1 −1
  119. drivers/rapidio/devices/rio_mport_cdev.c +2 −2
  120. drivers/s390/char/sclp_ctl.c +7 −5
  121. drivers/scsi/cxgbi/libcxgbi.c +1 −0
  122. drivers/soc/mediatek/mtk-scpsys.c +6 −5
  123. drivers/staging/media/davinci_vpfe/vpfe_video.c +34 −20
  124. drivers/staging/rdma/hfi1/TODO +1 −1
  125. drivers/staging/rdma/hfi1/file_ops.c +35 −56
  126. drivers/staging/rdma/hfi1/mmu_rb.c +25 −15
  127. drivers/staging/rdma/hfi1/mmu_rb.h +2 −1
  128. drivers/staging/rdma/hfi1/qp.c +2 −0
  129. drivers/staging/rdma/hfi1/user_exp_rcv.c +7 −4
  130. drivers/staging/rdma/hfi1/user_sdma.c +22 −11
  131. drivers/thermal/hisi_thermal.c +2 −2
  132. drivers/thermal/thermal_core.c +1 −1
  133. drivers/tty/pty.c +8 −10
  134. drivers/tty/tty_io.c +3 −3
  135. drivers/usb/serial/option.c +148 −7
  136. fs/ceph/mds_client.c +2 −4
  137. fs/devpts/inode.c +12 −41
  138. fs/ocfs2/dlm/dlmmaster.c +2 −0
  139. fs/proc/task_mmu.c +30 −3
  140. include/linux/ceph/auth.h +5 −5
  141. include/linux/ceph/osd_client.h +0 −1
  142. include/linux/cgroup-defs.h +1 −0
  143. include/linux/cpuset.h +0 −6
  144. include/linux/devpts_fs.h +3 −3
  145. include/linux/huge_mm.h +5 −0
  146. include/linux/lockdep.h +5 −3
  147. include/linux/mlx5/device.h +11 −0
  148. include/linux/mlx5/driver.h +4 −3
  149. include/linux/mlx5/port.h +3 −3
  150. include/linux/mlx5/vport.h +2 −0
  151. include/linux/mm.h +4 −0
  152. include/linux/tty_driver.h +2 −2
  153. include/media/videobuf2-core.h +8 −0
  154. include/net/switchdev.h +4 −0
  155. include/rdma/ib.h +16 −0
  156. include/sound/hda_i915.h +2 −3
  157. include/uapi/linux/if_macsec.h +2 −2
  158. include/uapi/linux/v4l2-dv-timings.h +20 −10
  159. kernel/bpf/verifier.c +0 −1
  160. kernel/cgroup.c +5 −2
  161. kernel/cpuset.c +2 −2
  162. kernel/events/core.c +38 −17
  163. kernel/kcov.c +2 −1
  164. kernel/kexec_core.c +5 −2
  165. kernel/locking/lockdep.c +34 −3
  166. kernel/locking/lockdep_proc.c +2 −0
  167. kernel/workqueue.c +29 −0
  168. lib/stackdepot.c +0 −4
  169. mm/huge_memory.c +5 −7
  170. mm/memcontrol.c +19 −18
  171. mm/memory-failure.c +9 −1
  172. mm/memory.c +40 −0
  173. mm/migrate.c +7 −1
  174. mm/page_io.c +5 −1
  175. mm/swap.c +5 −0
  176. mm/vmscan.c +15 −15
  177. net/bridge/br_mdb.c +79 −45
  178. net/bridge/br_multicast.c +5 −3
  179. net/bridge/br_private.h +2 −2
  180. net/ceph/auth.c +2 −6
  181. net/ceph/auth_none.c +39 −32
  182. net/ceph/auth_none.h +1 −2
  183. net/ceph/auth_x.c +10 −11
  184. net/ceph/auth_x.h +1 −0
  185. net/ceph/osd_client.c +2 −4
  186. net/ipv4/fib_frontend.c +5 −1
  187. net/ipv6/addrconf.c +15 −33
  188. net/switchdev/switchdev.c +6 −0
  189. sound/hda/ext/hdac_ext_stream.c +2 −3
  190. sound/hda/hdac_i915.c +51 −11
  191. sound/pci/hda/hda_intel.c +4 −52
  192. sound/pci/hda/patch_hdmi.c +1 −0
  193. sound/pci/hda/patch_realtek.c +1 −0
  194. sound/soc/codecs/Kconfig +1 −0
  195. sound/soc/codecs/arizona.c +12 −0
  196. sound/soc/codecs/arizona.h +2 −0
  197. sound/soc/codecs/cs35l32.c +13 −4
  198. sound/soc/codecs/cs47l24.c +3 −0
  199. sound/soc/codecs/hdac_hdmi.c +42 −52
  200. sound/soc/codecs/nau8825.c +71 −55
  201. sound/soc/codecs/rt5640.c +1 −1
  202. sound/soc/codecs/rt5640.h +18 −18
  203. sound/soc/codecs/wm5102.c +5 −0
  204. sound/soc/codecs/wm5110.c +2 −0
  205. sound/soc/codecs/wm8962.c +1 −1
  206. sound/soc/codecs/wm8997.c +2 −0
  207. sound/soc/codecs/wm8998.c +2 −0
  208. sound/soc/intel/Kconfig +0 −1
  209. sound/soc/intel/haswell/sst-haswell-ipc.c +1 −1
  210. sound/soc/intel/skylake/skl-sst-dsp.c +5 −0
  211. sound/soc/intel/skylake/skl-topology.c +28 −14
  212. sound/soc/intel/skylake/skl-topology.h +4 −4
  213. sound/soc/intel/skylake/skl.c +23 −9
  214. sound/soc/soc-dapm.c +7 −0
.mailmap+4−0
@@ -48,6 +48,9 @@ Felix Kuhling <fxkuehl@gmx.de> · 47 unmodified lines
48Felix Moeller <felix@derklecks.de>48Felix Moeller <felix@derklecks.de>
49Filipe Lautert <filipe@icewall.org>49Filipe Lautert <filipe@icewall.org>
50Franck Bui-Huu <vagabon.xyz@gmail.com>50Franck Bui-Huu <vagabon.xyz@gmail.com>
51Frank Rowand <frowand.list@gmail.com> <frowand@mvista.com>
52Frank Rowand <frowand.list@gmail.com> <frank.rowand@am.sony.com>
53Frank Rowand <frowand.list@gmail.com> <frank.rowand@sonymobile.com>
51Frank Zago <fzago@systemfabricworks.com>54Frank Zago <fzago@systemfabricworks.com>
52Greg Kroah-Hartman <greg@echidna.(none)>55Greg Kroah-Hartman <greg@echidna.(none)>
53Greg Kroah-Hartman <gregkh@suse.de>56Greg Kroah-Hartman <gregkh@suse.de>
@@ -79,6 +82,7 @@ Kay Sievers <kay.sievers@vrfy.org> · 25 unmodified lines
79Kenneth W Chen <kenneth.w.chen@intel.com>82Kenneth W Chen <kenneth.w.chen@intel.com>
80Konstantin Khlebnikov <koct9i@gmail.com> <k.khlebnikov@samsung.com>83Konstantin Khlebnikov <koct9i@gmail.com> <k.khlebnikov@samsung.com>
81Koushik <raghavendra.koushik@neterion.com>84Koushik <raghavendra.koushik@neterion.com>
85Krzysztof Kozlowski <krzk@kernel.org> <k.kozlowski.k@gmail.com>
82Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>86Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
83Leonid I Ananiev <leonid.i.ananiev@intel.com>87Leonid I Ananiev <leonid.i.ananiev@intel.com>
84Linas Vepstas <linas@austin.ibm.com>88Linas Vepstas <linas@austin.ibm.com>
Documentation/devicetree/bindings/arc/archs-pct.txt+1−1
@@ -2,7 +2,7 @@ · 1 unmodified line
2 2
3The ARC HS can be configured with a pipeline performance monitor for counting3The ARC HS can be configured with a pipeline performance monitor for counting
4CPU and cache events like cache misses and hits. Like conventional PCT there4CPU and cache events like cache misses and hits. Like conventional PCT there
5are 100+ hardware conditions dynamically mapped to upto 32 counters.5are 100+ hardware conditions dynamically mapped to up to 32 counters.
6It also supports overflow interrupts.6It also supports overflow interrupts.
7 7
8Required properties:8Required properties:
Documentation/devicetree/bindings/arc/pct.txt+1−1
@@ -2,7 +2,7 @@ · 1 unmodified line
2 2
3The ARC700 can be configured with a pipeline performance monitor for counting3The ARC700 can be configured with a pipeline performance monitor for counting
4CPU and cache events like cache misses and hits. Like conventional PCT there4CPU and cache events like cache misses and hits. Like conventional PCT there
5are 100+ hardware conditions dynamically mapped to upto 32 counters5are 100+ hardware conditions dynamically mapped to up to 32 counters
6 6
7Note that:7Note that:
8 * The ARC 700 PCT does not support interrupts; although HW events may be8 * The ARC 700 PCT does not support interrupts; although HW events may be
Documentation/devicetree/bindings/arm/cpus.txt+0−1
@@ -192,7 +192,6 @@ nodes to be present and contain the properties described below. · 191 unmodified lines
192 can be one of:192 can be one of:
193 "allwinner,sun6i-a31"193 "allwinner,sun6i-a31"
194 "allwinner,sun8i-a23"194 "allwinner,sun8i-a23"
195 "arm,psci"
196 "arm,realview-smp"195 "arm,realview-smp"
197 "brcm,bcm-nsp-smp"196 "brcm,bcm-nsp-smp"
198 "brcm,brahma-b15"197 "brcm,brahma-b15"
Documentation/devicetree/bindings/i2c/i2c-rk3x.txt+2−2
@@ -6,8 +6,8 @@ RK3xxx SoCs. · 5 unmodified lines
6Required properties :6Required properties :
7 7
8 - reg : Offset and length of the register set for the device8 - reg : Offset and length of the register set for the device
9 - compatible : should be "rockchip,rk3066-i2c", "rockchip,rk3188-i2c" or9 - compatible : should be "rockchip,rk3066-i2c", "rockchip,rk3188-i2c",
10 "rockchip,rk3288-i2c".10 "rockchip,rk3228-i2c" or "rockchip,rk3288-i2c".
11 - interrupts : interrupt number11 - interrupts : interrupt number
12 - clocks : parent clock12 - clocks : parent clock
13 13
Documentation/sysctl/vm.txt+10−9
@@ -581,15 +581,16 @@ Specify "[Nn]ode" for node order · 580 unmodified lines
581"Zone Order" orders the zonelists by zone type, then by node within each581"Zone Order" orders the zonelists by zone type, then by node within each
582zone. Specify "[Zz]one" for zone order.582zone. Specify "[Zz]one" for zone order.
583 583
584Specify "[Dd]efault" to request automatic configuration. Autoconfiguration584Specify "[Dd]efault" to request automatic configuration.
585will select "node" order in following case.585
586(1) if the DMA zone does not exist or586On 32-bit, the Normal zone needs to be preserved for allocations accessible
587(2) if the DMA zone comprises greater than 50% of the available memory or587by the kernel, so "zone" order will be selected.
588(3) if any node's DMA zone comprises greater than 70% of its local memory and588
589 the amount of local memory is big enough.589On 64-bit, devices that require DMA32/DMA are relatively rare, so "node"
590 590order will be selected.
591Otherwise, "zone" order will be selected. Default order is recommended unless591
592this is causing problems for your system/application.592Default order is recommended unless this is causing problems for your
593system/application.
593 594
594==============================================================595==============================================================
595 596
MAINTAINERS+12−3
@@ -6027,7 +6027,7 @@ F: include/scsi/*iscsi* · 6026 unmodified lines
6027 6027
6028ISCSI EXTENSIONS FOR RDMA (ISER) INITIATOR6028ISCSI EXTENSIONS FOR RDMA (ISER) INITIATOR
6029M: Or Gerlitz <ogerlitz@mellanox.com>6029M: Or Gerlitz <ogerlitz@mellanox.com>
6030M: Sagi Grimberg <sagig@mellanox.com>6030M: Sagi Grimberg <sagi@grimberg.me>
6031M: Roi Dayan <roid@mellanox.com>6031M: Roi Dayan <roid@mellanox.com>
6032L: linux-rdma@vger.kernel.org6032L: linux-rdma@vger.kernel.org
6033S: Supported6033S: Supported
@@ -6037,7 +6037,7 @@ Q: http://patchwork.kernel.org/project/linux-rdma/list/ · 3 unmodified lines
6037F: drivers/infiniband/ulp/iser/6037F: drivers/infiniband/ulp/iser/
6038 6038
6039ISCSI EXTENSIONS FOR RDMA (ISER) TARGET6039ISCSI EXTENSIONS FOR RDMA (ISER) TARGET
6040M: Sagi Grimberg <sagig@mellanox.com>6040M: Sagi Grimberg <sagi@grimberg.me>
6041T: git git://git.kernel.org/pub/scm/linux/kernel/git/nab/target-pending.git master6041T: git git://git.kernel.org/pub/scm/linux/kernel/git/nab/target-pending.git master
6042L: linux-rdma@vger.kernel.org6042L: linux-rdma@vger.kernel.org
6043L: target-devel@vger.kernel.org6043L: target-devel@vger.kernel.org
@@ -6400,7 +6400,7 @@ F: mm/kmemleak.c · 356 unmodified lines
6400F: mm/kmemleak-test.c6400F: mm/kmemleak-test.c
6401 6401
6402KPROBES6402KPROBES
6403M: Ananth N Mavinakayanahalli <ananth@in.ibm.com>6403M: Ananth N Mavinakayanahalli <ananth@linux.vnet.ibm.com>
6404M: Anil S Keshavamurthy <anil.s.keshavamurthy@intel.com>6404M: Anil S Keshavamurthy <anil.s.keshavamurthy@intel.com>
6405M: "David S. Miller" <davem@davemloft.net>6405M: "David S. Miller" <davem@davemloft.net>
6406M: Masami Hiramatsu <mhiramat@kernel.org>6406M: Masami Hiramatsu <mhiramat@kernel.org>
@@ -11071,6 +11071,15 @@ S: Maintained · 4664 unmodified lines
11071F: drivers/clk/ti/11071F: drivers/clk/ti/
11072F: include/linux/clk/ti.h11072F: include/linux/clk/ti.h
11073 11073
11074TI ETHERNET SWITCH DRIVER (CPSW)
11075M: Mugunthan V N <mugunthanvnm@ti.com>
11076R: Grygorii Strashko <grygorii.strashko@ti.com>
11077L: linux-omap@vger.kernel.org
11078L: netdev@vger.kernel.org
11079S: Maintained
11080F: drivers/net/ethernet/ti/cpsw*
11081F: drivers/net/ethernet/ti/davinci*
11082
11074TI FLASH MEDIA INTERFACE DRIVER11083TI FLASH MEDIA INTERFACE DRIVER
11075M: Alex Dubov <oakad@yahoo.com>11084M: Alex Dubov <oakad@yahoo.com>
11076S: Maintained11085S: Maintained
Makefile+2−2
@@ -1,8 +1,8 @@
1VERSION = 41VERSION = 4
2PATCHLEVEL = 62PATCHLEVEL = 6
3SUBLEVEL = 03SUBLEVEL = 0
4EXTRAVERSION = -rc54EXTRAVERSION = -rc6
5NAME = Blurry Fish Butt5NAME = Charred Weasel
6 6
7# *DOCUMENTATION*7# *DOCUMENTATION*
8# To see a list of typical targets execute "make help"8# To see a list of typical targets execute "make help"
arch/arc/Kconfig+2−0
@@ -35,8 +35,10 @@ config ARC · 34 unmodified lines
35 select NO_BOOTMEM35 select NO_BOOTMEM
36 select OF36 select OF
37 select OF_EARLY_FLATTREE37 select OF_EARLY_FLATTREE
38 select OF_RESERVED_MEM
38 select PERF_USE_VMALLOC39 select PERF_USE_VMALLOC
39 select HAVE_DEBUG_STACKOVERFLOW40 select HAVE_DEBUG_STACKOVERFLOW
41 select HAVE_GENERIC_DMA_COHERENT
40 42
41config MIGHT_HAVE_PCI43config MIGHT_HAVE_PCI
42 bool44 bool
arch/arc/include/asm/irqflags-arcv2.h+35−1
@@ -18,6 +18,12 @@ · 17 unmodified lines
18#define STATUS_AD_MASK (1<<STATUS_AD_BIT)18#define STATUS_AD_MASK (1<<STATUS_AD_BIT)
19#define STATUS_IE_MASK (1<<STATUS_IE_BIT)19#define STATUS_IE_MASK (1<<STATUS_IE_BIT)
20 20
21/* status32 Bits as encoded/expected by CLRI/SETI */
22#define CLRI_STATUS_IE_BIT 4
23
24#define CLRI_STATUS_E_MASK 0xF
25#define CLRI_STATUS_IE_MASK (1 << CLRI_STATUS_IE_BIT)
26
21#define AUX_USER_SP 0x00D27#define AUX_USER_SP 0x00D
22#define AUX_IRQ_CTRL 0x00E28#define AUX_IRQ_CTRL 0x00E
23#define AUX_IRQ_ACT 0x043 /* Active Intr across all levels */29#define AUX_IRQ_ACT 0x043 /* Active Intr across all levels */
@@ -100,6 +106,13 @@ static inline long arch_local_save_flags(void) · 76 unmodified lines
100 :106 :
101 : "memory");107 : "memory");
102 108
109 /* To be compatible with irq_save()/irq_restore()
110 * encode the irq bits as expected by CLRI/SETI
111 * (this was needed to make CONFIG_TRACE_IRQFLAGS work)
112 */
113 temp = (1 << 5) |
114 ((!!(temp & STATUS_IE_MASK)) << CLRI_STATUS_IE_BIT) |
115 (temp & CLRI_STATUS_E_MASK);
103 return temp;116 return temp;
104}117}
105 118
@@ -108,7 +121,7 @@ static inline long arch_local_save_flags(void) · 2 unmodified lines
108 */121 */
109static inline int arch_irqs_disabled_flags(unsigned long flags)122static inline int arch_irqs_disabled_flags(unsigned long flags)
110{123{
111 return !(flags & (STATUS_IE_MASK));124 return !(flags & CLRI_STATUS_IE_MASK);
112}125}
113 126
114static inline int arch_irqs_disabled(void)127static inline int arch_irqs_disabled(void)
@@ -128,11 +141,32 @@ static inline void arc_softirq_clear(int irq) · 13 unmodified lines
128 141
129#else142#else
130 143
144#ifdef CONFIG_TRACE_IRQFLAGS
145
146.macro TRACE_ASM_IRQ_DISABLE
147 bl trace_hardirqs_off
148.endm
149
150.macro TRACE_ASM_IRQ_ENABLE
151 bl trace_hardirqs_on
152.endm
153
154#else
155
156.macro TRACE_ASM_IRQ_DISABLE
157.endm
158
159.macro TRACE_ASM_IRQ_ENABLE
160.endm
161
162#endif
131.macro IRQ_DISABLE scratch163.macro IRQ_DISABLE scratch
132 clri164 clri
165 TRACE_ASM_IRQ_DISABLE
133.endm166.endm
134 167
135.macro IRQ_ENABLE scratch168.macro IRQ_ENABLE scratch
169 TRACE_ASM_IRQ_ENABLE
136 seti170 seti
137.endm171.endm
138 172
arch/arc/kernel/entry-arcv2.S+9−1
@@ -69,8 +69,11 @@ ENTRY(handle_interrupt) · 68 unmodified lines
69 69
70 clri ; To make status32.IE agree with CPU internal state70 clri ; To make status32.IE agree with CPU internal state
71 71
72 lr r0, [ICAUSE]72#ifdef CONFIG_TRACE_IRQFLAGS
73 TRACE_ASM_IRQ_DISABLE
74#endif
73 75
76 lr r0, [ICAUSE]
74 mov blink, ret_from_exception77 mov blink, ret_from_exception
75 78
76 b.d arch_do_IRQ79 b.d arch_do_IRQ
@@ -169,6 +172,11 @@ END(EV_TLBProtV) · 92 unmodified lines
169 172
170.Lrestore_regs:173.Lrestore_regs:
171 174
175 # Interrpts are actually disabled from this point on, but will get
176 # reenabled after we return from interrupt/exception.
177 # But irq tracer needs to be told now...
178 TRACE_ASM_IRQ_ENABLE
179
172 ld r0, [sp, PT_status32] ; U/K mode at time of entry180 ld r0, [sp, PT_status32] ; U/K mode at time of entry
173 lr r10, [AUX_IRQ_ACT]181 lr r10, [AUX_IRQ_ACT]
174 182
arch/arc/kernel/entry-compact.S+3−0
@@ -341,6 +341,9 @@ END(call_do_page_fault) · 340 unmodified lines
341 341
342.Lrestore_regs:342.Lrestore_regs:
343 343
344 # Interrpts are actually disabled from this point on, but will get
345 # reenabled after we return from interrupt/exception.
346 # But irq tracer needs to be told now...
344 TRACE_ASM_IRQ_ENABLE347 TRACE_ASM_IRQ_ENABLE
345 348
346 lr r10, [status32]349 lr r10, [status32]
arch/arc/mm/init.c+4−0
@@ -13,6 +13,7 @@ · 12 unmodified lines
13#ifdef CONFIG_BLK_DEV_INITRD13#ifdef CONFIG_BLK_DEV_INITRD
14#include <linux/initrd.h>14#include <linux/initrd.h>
15#endif15#endif
16#include <linux/of_fdt.h>
16#include <linux/swap.h>17#include <linux/swap.h>
17#include <linux/module.h>18#include <linux/module.h>
18#include <linux/highmem.h>19#include <linux/highmem.h>
@@ -136,6 +137,9 @@ void __init setup_arch_memory(void) · 117 unmodified lines
136 memblock_reserve(__pa(initrd_start), initrd_end - initrd_start);137 memblock_reserve(__pa(initrd_start), initrd_end - initrd_start);
137#endif138#endif
138 139
140 early_init_fdt_reserve_self();
141 early_init_fdt_scan_reserved_mem();
142
139 memblock_dump_all();143 memblock_dump_all();
140 144
141 /*----------------- node/zones setup --------------------------*/145 /*----------------- node/zones setup --------------------------*/
arch/arm/boot/dts/am33xx.dtsi+1−1
@@ -860,7 +860,7 @@ · 859 unmodified lines
860 ti,no-idle-on-init;860 ti,no-idle-on-init;
861 reg = <0x50000000 0x2000>;861 reg = <0x50000000 0x2000>;
862 interrupts = <100>;862 interrupts = <100>;
863 dmas = <&edma 52>;863 dmas = <&edma 52 0>;
864 dma-names = "rxtx";864 dma-names = "rxtx";
865 gpmc,num-cs = <7>;865 gpmc,num-cs = <7>;
866 gpmc,num-waitpins = <2>;866 gpmc,num-waitpins = <2>;
arch/arm/boot/dts/am4372.dtsi+1−1
@@ -884,7 +884,7 @@ · 883 unmodified lines
884 gpmc: gpmc@50000000 {884 gpmc: gpmc@50000000 {
885 compatible = "ti,am3352-gpmc";885 compatible = "ti,am3352-gpmc";
886 ti,hwmods = "gpmc";886 ti,hwmods = "gpmc";
887 dmas = <&edma 52>;887 dmas = <&edma 52 0>;
888 dma-names = "rxtx";888 dma-names = "rxtx";
889 clocks = <&l3s_gclk>;889 clocks = <&l3s_gclk>;
890 clock-names = "fck";890 clock-names = "fck";
arch/arm/boot/dts/am57xx-beagle-x15.dts+0−17
@@ -99,13 +99,6 @@ · 98 unmodified lines
99 #cooling-cells = <2>;99 #cooling-cells = <2>;
100 };100 };
101 101
102 extcon_usb1: extcon_usb1 {
103 compatible = "linux,extcon-usb-gpio";
104 id-gpio = <&gpio7 25 GPIO_ACTIVE_HIGH>;
105 pinctrl-names = "default";
106 pinctrl-0 = <&extcon_usb1_pins>;
107 };
108
109 hdmi0: connector {102 hdmi0: connector {
110 compatible = "hdmi-connector";103 compatible = "hdmi-connector";
111 label = "hdmi";104 label = "hdmi";
@@ -349,12 +342,6 @@ · 237 unmodified lines
349 >;342 >;
350 };343 };
351 344
352 extcon_usb1_pins: extcon_usb1_pins {
353 pinctrl-single,pins = <
354 DRA7XX_CORE_IOPAD(0x37ec, PIN_INPUT_PULLUP | MUX_MODE14) /* uart1_rtsn.gpio7_25 */
355 >;
356 };
357
358 tpd12s015_pins: pinmux_tpd12s015_pins {345 tpd12s015_pins: pinmux_tpd12s015_pins {
359 pinctrl-single,pins = <346 pinctrl-single,pins = <
360 DRA7XX_CORE_IOPAD(0x37b0, PIN_OUTPUT | MUX_MODE14) /* gpio7_10 CT_CP_HPD */347 DRA7XX_CORE_IOPAD(0x37b0, PIN_OUTPUT | MUX_MODE14) /* gpio7_10 CT_CP_HPD */
@@ -706,10 +693,6 @@ · 345 unmodified lines
706 pinctrl-0 = <&usb1_pins>;693 pinctrl-0 = <&usb1_pins>;
707};694};
708 695
709&omap_dwc3_1 {
710 extcon = <&extcon_usb1>;
711};
712
713&omap_dwc3_2 {696&omap_dwc3_2 {
714 extcon = <&extcon_usb2>;697 extcon = <&extcon_usb2>;
715};698};
arch/arm/boot/dts/dm814x-clocks.dtsi+212−31
@@ -4,6 +4,157 @@ · 3 unmodified lines
4 * published by the Free Software Foundation.4 * published by the Free Software Foundation.
5 */5 */
6 6
7&pllss {
8 /*
9 * See TRM "2.6.10 Connected outputso DPLLS" and
10 * "2.6.11 Connected Outputs of DPLLJ". Only clkout is
11 * connected except for hdmi and usb.
12 */
13 adpll_mpu_ck: adpll@40 {
14 #clock-cells = <1>;
15 compatible = "ti,dm814-adpll-s-clock";
16 reg = <0x40 0x40>;
17 clocks = <&devosc_ck &devosc_ck &devosc_ck>;
18 clock-names = "clkinp", "clkinpulow", "clkinphif";
19 clock-output-names = "481c5040.adpll.dcoclkldo",
20 "481c5040.adpll.clkout",
21 "481c5040.adpll.clkoutx2",
22 "481c5040.adpll.clkouthif";
23 };
24
25 adpll_dsp_ck: adpll@80 {
26 #clock-cells = <1>;
27 compatible = "ti,dm814-adpll-lj-clock";
28 reg = <0x80 0x30>;
29 clocks = <&devosc_ck &devosc_ck>;
30 clock-names = "clkinp", "clkinpulow";
31 clock-output-names = "481c5080.adpll.dcoclkldo",
32 "481c5080.adpll.clkout",
33 "481c5080.adpll.clkoutldo";
34 };
35
36 adpll_sgx_ck: adpll@b0 {
37 #clock-cells = <1>;
38 compatible = "ti,dm814-adpll-lj-clock";
39 reg = <0xb0 0x30>;
40 clocks = <&devosc_ck &devosc_ck>;
41 clock-names = "clkinp", "clkinpulow";
42 clock-output-names = "481c50b0.adpll.dcoclkldo",
43 "481c50b0.adpll.clkout",
44 "481c50b0.adpll.clkoutldo";
45 };
46
47 adpll_hdvic_ck: adpll@e0 {
48 #clock-cells = <1>;
49 compatible = "ti,dm814-adpll-lj-clock";
50 reg = <0xe0 0x30>;
51 clocks = <&devosc_ck &devosc_ck>;
52 clock-names = "clkinp", "clkinpulow";
53 clock-output-names = "481c50e0.adpll.dcoclkldo",
54 "481c50e0.adpll.clkout",
55 "481c50e0.adpll.clkoutldo";
56 };
57
58 adpll_l3_ck: adpll@110 {
59 #clock-cells = <1>;
60 compatible = "ti,dm814-adpll-lj-clock";
61 reg = <0x110 0x30>;
62 clocks = <&devosc_ck &devosc_ck>;
63 clock-names = "clkinp", "clkinpulow";
64 clock-output-names = "481c5110.adpll.dcoclkldo",
65 "481c5110.adpll.clkout",
66 "481c5110.adpll.clkoutldo";
67 };
68
69 adpll_isp_ck: adpll@140 {
70 #clock-cells = <1>;
71 compatible = "ti,dm814-adpll-lj-clock";
72 reg = <0x140 0x30>;
73 clocks = <&devosc_ck &devosc_ck>;
74 clock-names = "clkinp", "clkinpulow";
75 clock-output-names = "481c5140.adpll.dcoclkldo",
76 "481c5140.adpll.clkout",
77 "481c5140.adpll.clkoutldo";
78 };
79
80 adpll_dss_ck: adpll@170 {
81 #clock-cells = <1>;
82 compatible = "ti,dm814-adpll-lj-clock";
83 reg = <0x170 0x30>;
84 clocks = <&devosc_ck &devosc_ck>;
85 clock-names = "clkinp", "clkinpulow";
86 clock-output-names = "481c5170.adpll.dcoclkldo",
87 "481c5170.adpll.clkout",
88 "481c5170.adpll.clkoutldo";
89 };
90
91 adpll_video0_ck: adpll@1a0 {
92 #clock-cells = <1>;
93 compatible = "ti,dm814-adpll-lj-clock";
94 reg = <0x1a0 0x30>;
95 clocks = <&devosc_ck &devosc_ck>;
96 clock-names = "clkinp", "clkinpulow";
97 clock-output-names = "481c51a0.adpll.dcoclkldo",
98 "481c51a0.adpll.clkout",
99 "481c51a0.adpll.clkoutldo";
100 };
101
102 adpll_video1_ck: adpll@1d0 {
103 #clock-cells = <1>;
104 compatible = "ti,dm814-adpll-lj-clock";
105 reg = <0x1d0 0x30>;
106 clocks = <&devosc_ck &devosc_ck>;
107 clock-names = "clkinp", "clkinpulow";
108 clock-output-names = "481c51d0.adpll.dcoclkldo",
109 "481c51d0.adpll.clkout",
110 "481c51d0.adpll.clkoutldo";
111 };
112
113 adpll_hdmi_ck: adpll@200 {
114 #clock-cells = <1>;
115 compatible = "ti,dm814-adpll-lj-clock";
116 reg = <0x200 0x30>;
117 clocks = <&devosc_ck &devosc_ck>;
118 clock-names = "clkinp", "clkinpulow";
119 clock-output-names = "481c5200.adpll.dcoclkldo",
120 "481c5200.adpll.clkout",
121 "481c5200.adpll.clkoutldo";
122 };
123
124 adpll_audio_ck: adpll@230 {
125 #clock-cells = <1>;
126 compatible = "ti,dm814-adpll-lj-clock";
127 reg = <0x230 0x30>;
128 clocks = <&devosc_ck &devosc_ck>;
129 clock-names = "clkinp", "clkinpulow";
130 clock-output-names = "481c5230.adpll.dcoclkldo",
131 "481c5230.adpll.clkout",
132 "481c5230.adpll.clkoutldo";
133 };
134
135 adpll_usb_ck: adpll@260 {
136 #clock-cells = <1>;
137 compatible = "ti,dm814-adpll-lj-clock";
138 reg = <0x260 0x30>;
139 clocks = <&devosc_ck &devosc_ck>;
140 clock-names = "clkinp", "clkinpulow";
141 clock-output-names = "481c5260.adpll.dcoclkldo",
142 "481c5260.adpll.clkout",
143 "481c5260.adpll.clkoutldo";
144 };
145
146 adpll_ddr_ck: adpll@290 {
147 #clock-cells = <1>;
148 compatible = "ti,dm814-adpll-lj-clock";
149 reg = <0x290 0x30>;
150 clocks = <&devosc_ck &devosc_ck>;
151 clock-names = "clkinp", "clkinpulow";
152 clock-output-names = "481c5290.adpll.dcoclkldo",
153 "481c5290.adpll.clkout",
154 "481c5290.adpll.clkoutldo";
155 };
156};
157
7&pllss_clocks {158&pllss_clocks {
8 timer1_fck: timer1_fck {159 timer1_fck: timer1_fck {
9 #clock-cells = <0>;160 #clock-cells = <0>;
@@ -23,6 +174,24 @@ · 13 unmodified lines
23 reg = <0x2e0>;174 reg = <0x2e0>;
24 };175 };
25 176
177 /* CPTS_RFT_CLK in RMII_REFCLK_SRC, usually sourced from auiod */
178 cpsw_cpts_rft_clk: cpsw_cpts_rft_clk {
179 #clock-cells = <0>;
180 compatible = "ti,mux-clock";
181 clocks = <&adpll_video0_ck 1
182 &adpll_video1_ck 1
183 &adpll_audio_ck 1>;
184 ti,bit-shift = <1>;
185 reg = <0x2e8>;
186 };
187
188 /* REVISIT: Set up with a proper mux using RMII_REFCLK_SRC */
189 cpsw_125mhz_gclk: cpsw_125mhz_gclk {
190 #clock-cells = <0>;
191 compatible = "fixed-clock";
192 clock-frequency = <125000000>;
193 };
194
26 sysclk18_ck: sysclk18_ck {195 sysclk18_ck: sysclk18_ck {
27 #clock-cells = <0>;196 #clock-cells = <0>;
28 compatible = "ti,mux-clock";197 compatible = "ti,mux-clock";
@@ -79,37 +248,6 @@ · 50 unmodified lines
79 compatible = "fixed-clock";248 compatible = "fixed-clock";
80 clock-frequency = <1000000000>;249 clock-frequency = <1000000000>;
81 };250 };
82
83 sysclk4_ck: sysclk4_ck {
84 #clock-cells = <0>;
85 compatible = "fixed-clock";
86 clock-frequency = <222000000>;
87 };
88
89 sysclk6_ck: sysclk6_ck {
90 #clock-cells = <0>;
91 compatible = "fixed-clock";
92 clock-frequency = <100000000>;
93 };
94
95 sysclk10_ck: sysclk10_ck {
96 #clock-cells = <0>;
97 compatible = "fixed-clock";
98 clock-frequency = <48000000>;
99 };
100
101 cpsw_125mhz_gclk: cpsw_125mhz_gclk {
102 #clock-cells = <0>;
103 compatible = "fixed-clock";
104 clock-frequency = <125000000>;
105 };
106
107 cpsw_cpts_rft_clk: cpsw_cpts_rft_clk {
108 #clock-cells = <0>;
109 compatible = "fixed-clock";
110 clock-frequency = <250000000>;
111 };
112
113};251};
114 252
115&prcm_clocks {253&prcm_clocks {
@@ -138,6 +276,49 @@ · 22 unmodified lines
138 clock-div = <78125>;276 clock-div = <78125>;
139 };277 };
140 278
279 /* L4_HS 220 MHz*/
280 sysclk4_ck: sysclk4_ck {
281 #clock-cells = <0>;
282 compatible = "ti,fixed-factor-clock";
283 clocks = <&adpll_l3_ck 1>;
284 ti,clock-mult = <1>;
285 ti,clock-div = <1>;
286 };
287
288 /* L4_FWCFG */
289 sysclk5_ck: sysclk5_ck {
290 #clock-cells = <0>;
291 compatible = "ti,fixed-factor-clock";
292 clocks = <&adpll_l3_ck 1>;
293 ti,clock-mult = <1>;
294 ti,clock-div = <2>;
295 };
296
297 /* L4_LS 110 MHz */
298 sysclk6_ck: sysclk6_ck {
299 #clock-cells = <0>;
300 compatible = "ti,fixed-factor-clock";
301 clocks = <&adpll_l3_ck 1>;
302 ti,clock-mult = <1>;
303 ti,clock-div = <2>;
304 };
305
306 sysclk8_ck: sysclk8_ck {
307 #clock-cells = <0>;
308 compatible = "ti,fixed-factor-clock";
309 clocks = <&adpll_usb_ck 1>;
310 ti,clock-mult = <1>;
311 ti,clock-div = <1>;
312 };
313
314 sysclk10_ck: sysclk10_ck {
315 compatible = "ti,divider-clock";
316 reg = <0x324>;
317 ti,max-div = <7>;
318 #clock-cells = <0>;
319 clocks = <&adpll_usb_ck 1>;
320 };
321
141 aud_clkin0_ck: aud_clkin0_ck {322 aud_clkin0_ck: aud_clkin0_ck {
142 #clock-cells = <0>;323 #clock-cells = <0>;
143 compatible = "fixed-clock";324 compatible = "fixed-clock";
arch/arm/boot/dts/dra62x-clocks.dtsi+26−0
@@ -6,6 +6,32 @@ · 5 unmodified lines
6 6
7#include "dm814x-clocks.dtsi"7#include "dm814x-clocks.dtsi"
8 8
9/* Compared to dm814x, dra62x does not have hdic, l3 or dss PLLs */
10&adpll_hdvic_ck {
11 status = "disabled";
12};
13
14&adpll_l3_ck {
15 status = "disabled";
16};
17
18&adpll_dss_ck {
19 status = "disabled";
20};
21
22/* Compared to dm814x, dra62x has interconnect clocks on isp PLL */
23&sysclk4_ck {
24 clocks = <&adpll_isp_ck 1>;
25};
26
27&sysclk5_ck {
28 clocks = <&adpll_isp_ck 1>;
29};
30
31&sysclk6_ck {
32 clocks = <&adpll_isp_ck 1>;
33};
34
9/*35/*
10 * Compared to dm814x, dra62x has different shifts and more mux options.36 * Compared to dm814x, dra62x has different shifts and more mux options.
11 * Please add the extra options for ysclk_14 and 16 if really needed.37 * Please add the extra options for ysclk_14 and 16 if really needed.
arch/arm/boot/dts/dra7xx-clocks.dtsi+17−1
@@ -98,12 +98,20 @@ · 97 unmodified lines
98 clock-frequency = <32768>;98 clock-frequency = <32768>;
99 };99 };
100 100
101 sys_32k_ck: sys_32k_ck {101 sys_clk32_crystal_ck: sys_clk32_crystal_ck {
102 #clock-cells = <0>;102 #clock-cells = <0>;
103 compatible = "fixed-clock";103 compatible = "fixed-clock";
104 clock-frequency = <32768>;104 clock-frequency = <32768>;
105 };105 };
106 106
107 sys_clk32_pseudo_ck: sys_clk32_pseudo_ck {
108 #clock-cells = <0>;
109 compatible = "fixed-factor-clock";
110 clocks = <&sys_clkin1>;
111 clock-mult = <1>;
112 clock-div = <610>;
113 };
114
107 virt_12000000_ck: virt_12000000_ck {115 virt_12000000_ck: virt_12000000_ck {
108 #clock-cells = <0>;116 #clock-cells = <0>;
109 compatible = "fixed-clock";117 compatible = "fixed-clock";
@@ -2170,4 +2178,12 @@ · 2060 unmodified lines
2170 ti,bit-shift = <22>;2178 ti,bit-shift = <22>;
2171 reg = <0x0558>;2179 reg = <0x0558>;
2172 };2180 };
2181
2182 sys_32k_ck: sys_32k_ck {
2183 #clock-cells = <0>;
2184 compatible = "ti,mux-clock";
2185 clocks = <&sys_clk32_crystal_ck>, <&sys_clk32_pseudo_ck>, <&sys_clk32_pseudo_ck>, <&sys_clk32_pseudo_ck>;
2186 ti,bit-shift = <8>;
2187 reg = <0x6c4>;
2188 };
2173};2189};
arch/arm/boot/dts/qcom-msm8974.dtsi+1−13
@@ -1,6 +1,6 @@
1/dts-v1/;1/dts-v1/;
2 2
3#include <dt-bindings/interrupt-controller/arm-gic.h>3#include <dt-bindings/interrupt-controller/irq.h>
4#include <dt-bindings/clock/qcom,gcc-msm8974.h>4#include <dt-bindings/clock/qcom,gcc-msm8974.h>
5#include "skeleton.dtsi"5#include "skeleton.dtsi"
6 6
@@ -460,8 +460,6 @@ · 453 unmodified lines
460 clock-names = "core", "iface";460 clock-names = "core", "iface";
461 #address-cells = <1>;461 #address-cells = <1>;
462 #size-cells = <0>;462 #size-cells = <0>;
463 dmas = <&blsp2_dma 20>, <&blsp2_dma 21>;
464 dma-names = "tx", "rx";
465 };463 };
466 464
467 spmi_bus: spmi@fc4cf000 {465 spmi_bus: spmi@fc4cf000 {
@@ -479,16 +477,6 @@ · 11 unmodified lines
479 interrupt-controller;477 interrupt-controller;
480 #interrupt-cells = <4>;478 #interrupt-cells = <4>;
481 };479 };
482
483 blsp2_dma: dma-controller@f9944000 {
484 compatible = "qcom,bam-v1.4.0";
485 reg = <0xf9944000 0x19000>;
486 interrupts = <GIC_SPI 239 IRQ_TYPE_LEVEL_HIGH>;
487 clocks = <&gcc GCC_BLSP2_AHB_CLK>;
488 clock-names = "bam_clk";
489 #dma-cells = <1>;
490 qcom,ee = <0>;
491 };
492 };480 };
493 481
494 smd {482 smd {
arch/arm/boot/dts/r8a7791-koelsch.dts+1−0
@@ -661,6 +661,7 @@ · 660 unmodified lines
661};661};
662 662
663&pcie_bus_clk {663&pcie_bus_clk {
664 clock-frequency = <100000000>;
664 status = "okay";665 status = "okay";
665};666};
666 667
arch/arm/boot/dts/r8a7791-porter.dts+1−13
@@ -143,19 +143,11 @@ · 142 unmodified lines
143};143};
144 144
145&pfc {145&pfc {
146 pinctrl-0 = <&scif_clk_pins>;
147 pinctrl-names = "default";
148
149 scif0_pins: serial0 {146 scif0_pins: serial0 {
150 renesas,groups = "scif0_data_d";147 renesas,groups = "scif0_data_d";
151 renesas,function = "scif0";148 renesas,function = "scif0";
152 };149 };
153 150
154 scif_clk_pins: scif_clk {
155 renesas,groups = "scif_clk";
156 renesas,function = "scif_clk";
157 };
158
159 ether_pins: ether {151 ether_pins: ether {
160 renesas,groups = "eth_link", "eth_mdio", "eth_rmii";152 renesas,groups = "eth_link", "eth_mdio", "eth_rmii";
161 renesas,function = "eth";153 renesas,function = "eth";
@@ -229,11 +221,6 @@ · 67 unmodified lines
229 status = "okay";221 status = "okay";
230};222};
231 223
232&scif_clk {
233 clock-frequency = <14745600>;
234 status = "okay";
235};
236
237&ether {224&ether {
238 pinctrl-0 = <&ether_pins &phy1_pins>;225 pinctrl-0 = <&ether_pins &phy1_pins>;
239 pinctrl-names = "default";226 pinctrl-names = "default";
@@ -414,6 +401,7 @@ · 174 unmodified lines
414};401};
415 402
416&pcie_bus_clk {403&pcie_bus_clk {
404 clock-frequency = <100000000>;
417 status = "okay";405 status = "okay";
418};406};
419 407
arch/arm/boot/dts/r8a7791.dtsi+1−4
@@ -1083,9 +1083,8 @@ · 1082 unmodified lines
1083 pcie_bus_clk: pcie_bus_clk {1083 pcie_bus_clk: pcie_bus_clk {
1084 compatible = "fixed-clock";1084 compatible = "fixed-clock";
1085 #clock-cells = <0>;1085 #clock-cells = <0>;
1086 clock-frequency = <100000000>;1086 clock-frequency = <0>;
1087 clock-output-names = "pcie_bus";1087 clock-output-names = "pcie_bus";
1088 status = "disabled";
1089 };1088 };
1090 1089
1091 /* External SCIF clock */1090 /* External SCIF clock */
@@ -1094,7 +1093,6 @@ · 2 unmodified lines
1094 #clock-cells = <0>;1093 #clock-cells = <0>;
1095 /* This value must be overridden by the board. */1094 /* This value must be overridden by the board. */
1096 clock-frequency = <0>;1095 clock-frequency = <0>;
1097 status = "disabled";
1098 };1096 };
1099 1097
1100 /* External USB clock - can be overridden by the board */1098 /* External USB clock - can be overridden by the board */
@@ -1112,7 +1110,6 @@ · 11 unmodified lines
1112 /* This value must be overridden by the board. */1110 /* This value must be overridden by the board. */
1113 clock-frequency = <0>;1111 clock-frequency = <0>;
1114 clock-output-names = "can_clk";1112 clock-output-names = "can_clk";
1115 status = "disabled";
1116 };1113 };
1117 1114
1118 /* Special CPG clocks */1115 /* Special CPG clocks */
arch/arm/mach-imx/devices/platform-sdhci-esdhc-imx.c+3−2
@@ -71,6 +71,7 @@ struct platform_device *__init imx_add_sdhci_esdhc_imx( · 70 unmodified lines
71 if (!pdata)71 if (!pdata)
72 pdata = &default_esdhc_pdata;72 pdata = &default_esdhc_pdata;
73 73
74 return imx_add_platform_device(data->devid, data->id, res,74 return imx_add_platform_device_dmamask(data->devid, data->id, res,
75 ARRAY_SIZE(res), pdata, sizeof(*pdata));75 ARRAY_SIZE(res), pdata, sizeof(*pdata),
76 DMA_BIT_MASK(32));
76}77}
arch/arm/mach-omap2/clockdomains7xx_data.c+1−1
@@ -461,7 +461,7 @@ static struct clockdomain ipu_7xx_clkdm = { · 460 unmodified lines
461 .cm_inst = DRA7XX_CM_CORE_AON_IPU_INST,461 .cm_inst = DRA7XX_CM_CORE_AON_IPU_INST,
462 .clkdm_offs = DRA7XX_CM_CORE_AON_IPU_IPU_CDOFFS,462 .clkdm_offs = DRA7XX_CM_CORE_AON_IPU_IPU_CDOFFS,
463 .dep_bit = DRA7XX_IPU_STATDEP_SHIFT,463 .dep_bit = DRA7XX_IPU_STATDEP_SHIFT,
464 .flags = CLKDM_CAN_HWSUP_SWSUP,464 .flags = CLKDM_CAN_SWSUP,
465};465};
466 466
467static struct clockdomain mpu1_7xx_clkdm = {467static struct clockdomain mpu1_7xx_clkdm = {
arch/arm/mach-omap2/io.c+2−1
@@ -737,7 +737,8 @@ void __init omap5_init_late(void) · 736 unmodified lines
737#ifdef CONFIG_SOC_DRA7XX737#ifdef CONFIG_SOC_DRA7XX
738void __init dra7xx_init_early(void)738void __init dra7xx_init_early(void)
739{739{
740 omap2_set_globals_tap(-1, OMAP2_L4_IO_ADDRESS(DRA7XX_TAP_BASE));740 omap2_set_globals_tap(DRA7XX_CLASS,
741 OMAP2_L4_IO_ADDRESS(DRA7XX_TAP_BASE));
741 omap2_set_globals_prcm_mpu(OMAP2_L4_IO_ADDRESS(OMAP54XX_PRCM_MPU_BASE));742 omap2_set_globals_prcm_mpu(OMAP2_L4_IO_ADDRESS(OMAP54XX_PRCM_MPU_BASE));
742 omap2_control_base_init();743 omap2_control_base_init();
743 omap4_pm_init_early();744 omap4_pm_init_early();
arch/arm/mach-omap2/omap-wakeupgen.c+7−0
@@ -274,6 +274,10 @@ static inline void omap5_irq_save_context(void) · 273 unmodified lines
274 */274 */
275static void irq_save_context(void)275static void irq_save_context(void)
276{276{
277 /* DRA7 has no SAR to save */
278 if (soc_is_dra7xx())
279 return;
280
277 if (!sar_base)281 if (!sar_base)
278 sar_base = omap4_get_sar_ram_base();282 sar_base = omap4_get_sar_ram_base();
279 283
@@ -290,6 +294,9 @@ static void irq_sar_clear(void) · 10 unmodified lines
290{294{
291 u32 val;295 u32 val;
292 u32 offset = SAR_BACKUP_STATUS_OFFSET;296 u32 offset = SAR_BACKUP_STATUS_OFFSET;
297 /* DRA7 has no SAR to save */
298 if (soc_is_dra7xx())
299 return;
293 300
294 if (soc_is_omap54xx())301 if (soc_is_omap54xx())
295 offset = OMAP5_SAR_BACKUP_STATUS_OFFSET;302 offset = OMAP5_SAR_BACKUP_STATUS_OFFSET;
arch/arm/mach-omap2/pm34xx.c+13−10
@@ -198,7 +198,6 @@ void omap_sram_idle(void) · 197 unmodified lines
198 int per_next_state = PWRDM_POWER_ON;198 int per_next_state = PWRDM_POWER_ON;
199 int core_next_state = PWRDM_POWER_ON;199 int core_next_state = PWRDM_POWER_ON;
200 int per_going_off;200 int per_going_off;
201 int core_prev_state;
202 u32 sdrc_pwr = 0;201 u32 sdrc_pwr = 0;
203 202
204 mpu_next_state = pwrdm_read_next_pwrst(mpu_pwrdm);203 mpu_next_state = pwrdm_read_next_pwrst(mpu_pwrdm);
@@ -278,16 +277,20 @@ void omap_sram_idle(void) · 73 unmodified lines
278 sdrc_write_reg(sdrc_pwr, SDRC_POWER);277 sdrc_write_reg(sdrc_pwr, SDRC_POWER);
279 278
280 /* CORE */279 /* CORE */
281 if (core_next_state < PWRDM_POWER_ON) {280 if (core_next_state < PWRDM_POWER_ON &&
282 core_prev_state = pwrdm_read_prev_pwrst(core_pwrdm);281 pwrdm_read_prev_pwrst(core_pwrdm) == PWRDM_POWER_OFF) {
283 if (core_prev_state == PWRDM_POWER_OFF) {282 omap3_core_restore_context();
284 omap3_core_restore_context();283 omap3_cm_restore_context();
285 omap3_cm_restore_context();284 omap3_sram_restore_context();
286 omap3_sram_restore_context();285 omap2_sms_restore_context();
287 omap2_sms_restore_context();286 } else {
288 }287 /*
288 * In off-mode resume path above, omap3_core_restore_context
289 * also handles the INTC autoidle restore done here so limit
290 * this to non-off mode resume paths so we don't do it twice.
291 */
292 omap3_intc_resume_idle();
289 }293 }
290 omap3_intc_resume_idle();
291 294
292 pwrdm_post_transition(NULL);295 pwrdm_post_transition(NULL);
293 296
arch/arm/mach-shmobile/timer.c+11−17
@@ -40,8 +40,7 @@ static void __init shmobile_setup_delay_hz(unsigned int max_cpu_core_hz, · 39 unmodified lines
40void __init shmobile_init_delay(void)40void __init shmobile_init_delay(void)
41{41{
42 struct device_node *np, *cpus;42 struct device_node *np, *cpus;
43 bool is_a7_a8_a9 = false;43 unsigned int div = 0;
44 bool is_a15 = false;
45 bool has_arch_timer = false;44 bool has_arch_timer = false;
46 u32 max_freq = 0;45 u32 max_freq = 0;
47 46
@@ -55,27 +54,22 @@ void __init shmobile_init_delay(void) · 7 unmodified lines
55 if (!of_property_read_u32(np, "clock-frequency", &freq))54 if (!of_property_read_u32(np, "clock-frequency", &freq))
56 max_freq = max(max_freq, freq);55 max_freq = max(max_freq, freq);
57 56
58 if (of_device_is_compatible(np, "arm,cortex-a8") ||57 if (of_device_is_compatible(np, "arm,cortex-a8")) {
59 of_device_is_compatible(np, "arm,cortex-a9")) {58 div = 2;
60 is_a7_a8_a9 = true;59 } else if (of_device_is_compatible(np, "arm,cortex-a9")) {
61 } else if (of_device_is_compatible(np, "arm,cortex-a7")) {60 div = 1;
62 is_a7_a8_a9 = true;61 } else if (of_device_is_compatible(np, "arm,cortex-a7") ||
63 has_arch_timer = true;62 of_device_is_compatible(np, "arm,cortex-a15")) {
64 } else if (of_device_is_compatible(np, "arm,cortex-a15")) {63 div = 1;
65 is_a15 = true;
66 has_arch_timer = true;64 has_arch_timer = true;
67 }65 }
68 }66 }
69 67
70 of_node_put(cpus);68 of_node_put(cpus);
71 69
72 if (!max_freq)70 if (!max_freq || !div)
73 return;71 return;
74 72
75 if (!has_arch_timer || !IS_ENABLED(CONFIG_ARM_ARCH_TIMER)) {73 if (!has_arch_timer || !IS_ENABLED(CONFIG_ARM_ARCH_TIMER))
76 if (is_a7_a8_a9)74 shmobile_setup_delay_hz(max_freq, 1, div);
77 shmobile_setup_delay_hz(max_freq, 1, 3);
78 else if (is_a15)
79 shmobile_setup_delay_hz(max_freq, 2, 4);
80 }
81}75}
arch/arm64/boot/dts/socionext/uniphier-ph1-ld20-ref.dts+0−1
@@ -70,7 +70,6 @@ · 69 unmodified lines
70 i2c3 = &i2c3;70 i2c3 = &i2c3;
71 i2c4 = &i2c4;71 i2c4 = &i2c4;
72 i2c5 = &i2c5;72 i2c5 = &i2c5;
73 i2c6 = &i2c6;
74 };73 };
75};74};
76 75
arch/arm64/boot/dts/socionext/uniphier-ph1-ld20.dtsi+5−15
@@ -201,15 +201,12 @@ · 200 unmodified lines
201 201
202 i2c2: i2c@58782000 {202 i2c2: i2c@58782000 {
203 compatible = "socionext,uniphier-fi2c";203 compatible = "socionext,uniphier-fi2c";
204 status = "disabled";
205 reg = <0x58782000 0x80>;204 reg = <0x58782000 0x80>;
206 #address-cells = <1>;205 #address-cells = <1>;
207 #size-cells = <0>;206 #size-cells = <0>;
208 interrupts = <0 43 4>;207 interrupts = <0 43 4>;
209 pinctrl-names = "default";
210 pinctrl-0 = <&pinctrl_i2c2>;
211 clocks = <&i2c_clk>;208 clocks = <&i2c_clk>;
212 clock-frequency = <100000>;209 clock-frequency = <400000>;
213 };210 };
214 211
215 i2c3: i2c@58783000 {212 i2c3: i2c@58783000 {
@@ -227,12 +224,15 @@ · 11 unmodified lines
227 224
228 i2c4: i2c@58784000 {225 i2c4: i2c@58784000 {
229 compatible = "socionext,uniphier-fi2c";226 compatible = "socionext,uniphier-fi2c";
227 status = "disabled";
230 reg = <0x58784000 0x80>;228 reg = <0x58784000 0x80>;
231 #address-cells = <1>;229 #address-cells = <1>;
232 #size-cells = <0>;230 #size-cells = <0>;
233 interrupts = <0 45 4>;231 interrupts = <0 45 4>;
232 pinctrl-names = "default";
233 pinctrl-0 = <&pinctrl_i2c4>;
234 clocks = <&i2c_clk>;234 clocks = <&i2c_clk>;
235 clock-frequency = <400000>;235 clock-frequency = <100000>;
236 };236 };
237 237
238 i2c5: i2c@58785000 {238 i2c5: i2c@58785000 {
@@ -245,16 +245,6 @@ · 6 unmodified lines
245 clock-frequency = <400000>;245 clock-frequency = <400000>;
246 };246 };
247 247
248 i2c6: i2c@58786000 {
249 compatible = "socionext,uniphier-fi2c";
250 reg = <0x58786000 0x80>;
251 #address-cells = <1>;
252 #size-cells = <0>;
253 interrupts = <0 26 4>;
254 clocks = <&i2c_clk>;
255 clock-frequency = <400000>;
256 };
257
258 system_bus: system-bus@58c00000 {248 system_bus: system-bus@58c00000 {
259 compatible = "socionext,uniphier-system-bus";249 compatible = "socionext,uniphier-system-bus";
260 status = "disabled";250 status = "disabled";
arch/nios2/lib/memset.c+1−1
@@ -68,7 +68,7 @@ void *memset(void *s, int c, size_t count) · 67 unmodified lines
68 "=r" (charcnt), /* %1 Output */68 "=r" (charcnt), /* %1 Output */
69 "=r" (dwordcnt), /* %2 Output */69 "=r" (dwordcnt), /* %2 Output */
70 "=r" (fill8reg), /* %3 Output */70 "=r" (fill8reg), /* %3 Output */
71 "=r" (wrkrega) /* %4 Output */71 "=&r" (wrkrega) /* %4 Output only */
72 : "r" (c), /* %5 Input */72 : "r" (c), /* %5 Input */
73 "0" (s), /* %0 Input/Output */73 "0" (s), /* %0 Input/Output */
74 "1" (count) /* %1 Input/Output */74 "1" (count) /* %1 Input/Output */
arch/powerpc/include/asm/systbl.h+2−0
@@ -384,3 +384,5 @@ SYSCALL(ni_syscall) · 383 unmodified lines
384SYSCALL(ni_syscall)384SYSCALL(ni_syscall)
385SYSCALL(mlock2)385SYSCALL(mlock2)
386SYSCALL(copy_file_range)386SYSCALL(copy_file_range)
387COMPAT_SYS_SPU(preadv2)
388COMPAT_SYS_SPU(pwritev2)
arch/powerpc/include/asm/unistd.h+1−1
@@ -12,7 +12,7 @@ · 11 unmodified lines
12#include <uapi/asm/unistd.h>12#include <uapi/asm/unistd.h>
13 13
14 14
15#define NR_syscalls 38015#define NR_syscalls 382
16 16
17#define __NR__exit __NR_exit17#define __NR__exit __NR_exit
18 18
arch/powerpc/include/uapi/asm/unistd.h+2−0
@@ -390,5 +390,7 @@ · 389 unmodified lines
390#define __NR_membarrier 365390#define __NR_membarrier 365
391#define __NR_mlock2 378391#define __NR_mlock2 378
392#define __NR_copy_file_range 379392#define __NR_copy_file_range 379
393#define __NR_preadv2 380
394#define __NR_pwritev2 381
393 395
394#endif /* _UAPI_ASM_POWERPC_UNISTD_H_ */396#endif /* _UAPI_ASM_POWERPC_UNISTD_H_ */
arch/s390/include/asm/mmu.h+1−1
@@ -11,7 +11,7 @@ typedef struct { · 10 unmodified lines
11 spinlock_t list_lock;11 spinlock_t list_lock;
12 struct list_head pgtable_list;12 struct list_head pgtable_list;
13 struct list_head gmap_list;13 struct list_head gmap_list;
14 unsigned long asce_bits;14 unsigned long asce;
15 unsigned long asce_limit;15 unsigned long asce_limit;
16 unsigned long vdso_base;16 unsigned long vdso_base;
17 /* The mmu context allocates 4K page tables. */17 /* The mmu context allocates 4K page tables. */
arch/s390/include/asm/mmu_context.h+22−6
@@ -26,12 +26,28 @@ static inline int init_new_context(struct task_struct *tsk, · 25 unmodified lines
26 mm->context.has_pgste = 0;26 mm->context.has_pgste = 0;
27 mm->context.use_skey = 0;27 mm->context.use_skey = 0;
28#endif28#endif
29 if (mm->context.asce_limit == 0) {29 switch (mm->context.asce_limit) {
30 case 1UL << 42:
31 /*
32 * forked 3-level task, fall through to set new asce with new
33 * mm->pgd
34 */
35 case 0:
30 /* context created by exec, set asce limit to 4TB */36 /* context created by exec, set asce limit to 4TB */
31 mm->context.asce_bits = _ASCE_TABLE_LENGTH |
32 _ASCE_USER_BITS | _ASCE_TYPE_REGION3;
33 mm->context.asce_limit = STACK_TOP_MAX;37 mm->context.asce_limit = STACK_TOP_MAX;
34 } else if (mm->context.asce_limit == (1UL << 31)) {38 mm->context.asce = __pa(mm->pgd) | _ASCE_TABLE_LENGTH |
39 _ASCE_USER_BITS | _ASCE_TYPE_REGION3;
40 break;
41 case 1UL << 53:
42 /* forked 4-level task, set new asce with new mm->pgd */
43 mm->context.asce = __pa(mm->pgd) | _ASCE_TABLE_LENGTH |
44 _ASCE_USER_BITS | _ASCE_TYPE_REGION2;
45 break;
46 case 1UL << 31:
47 /* forked 2-level compat task, set new asce with new mm->pgd */
48 mm->context.asce = __pa(mm->pgd) | _ASCE_TABLE_LENGTH |
49 _ASCE_USER_BITS | _ASCE_TYPE_SEGMENT;
50 /* pgd_alloc() did not increase mm->nr_pmds */
35 mm_inc_nr_pmds(mm);51 mm_inc_nr_pmds(mm);
36 }52 }
37 crst_table_init((unsigned long *) mm->pgd, pgd_entry_type(mm));53 crst_table_init((unsigned long *) mm->pgd, pgd_entry_type(mm));
@@ -42,7 +58,7 @@ static inline int init_new_context(struct task_struct *tsk, · 4 unmodified lines
42 58
43static inline void set_user_asce(struct mm_struct *mm)59static inline void set_user_asce(struct mm_struct *mm)
44{60{
45 S390_lowcore.user_asce = mm->context.asce_bits | __pa(mm->pgd);61 S390_lowcore.user_asce = mm->context.asce;
46 if (current->thread.mm_segment.ar4)62 if (current->thread.mm_segment.ar4)
47 __ctl_load(S390_lowcore.user_asce, 7, 7);63 __ctl_load(S390_lowcore.user_asce, 7, 7);
48 set_cpu_flag(CIF_ASCE);64 set_cpu_flag(CIF_ASCE);
@@ -71,7 +87,7 @@ static inline void switch_mm(struct mm_struct *prev, struct mm_struct *next, · 22 unmodified lines
71{87{
72 int cpu = smp_processor_id();88 int cpu = smp_processor_id();
73 89
74 S390_lowcore.user_asce = next->context.asce_bits | __pa(next->pgd);90 S390_lowcore.user_asce = next->context.asce;
75 if (prev == next)91 if (prev == next)
76 return;92 return;
77 if (MACHINE_HAS_TLB_LC)93 if (MACHINE_HAS_TLB_LC)
arch/s390/include/asm/pgalloc.h+2−2
@@ -52,8 +52,8 @@ static inline unsigned long pgd_entry_type(struct mm_struct *mm) · 51 unmodified lines
52 return _REGION2_ENTRY_EMPTY;52 return _REGION2_ENTRY_EMPTY;
53}53}
54 54
55int crst_table_upgrade(struct mm_struct *, unsigned long limit);55int crst_table_upgrade(struct mm_struct *);
56void crst_table_downgrade(struct mm_struct *, unsigned long limit);56void crst_table_downgrade(struct mm_struct *);
57 57
58static inline pud_t *pud_alloc_one(struct mm_struct *mm, unsigned long address)58static inline pud_t *pud_alloc_one(struct mm_struct *mm, unsigned long address)
59{59{
arch/s390/include/asm/processor.h+1−1
@@ -175,7 +175,7 @@ extern __vector128 init_task_fpu_regs[__NUM_VXRS]; · 174 unmodified lines
175 regs->psw.mask = PSW_USER_BITS | PSW_MASK_BA; \175 regs->psw.mask = PSW_USER_BITS | PSW_MASK_BA; \
176 regs->psw.addr = new_psw; \176 regs->psw.addr = new_psw; \
177 regs->gprs[15] = new_stackp; \177 regs->gprs[15] = new_stackp; \
178 crst_table_downgrade(current->mm, 1UL << 31); \178 crst_table_downgrade(current->mm); \
179 execve_tail(); \179 execve_tail(); \
180} while (0)180} while (0)
181 181
arch/s390/include/asm/tlbflush.h+3−6
@@ -110,8 +110,7 @@ static inline void __tlb_flush_asce(struct mm_struct *mm, unsigned long asce) · 109 unmodified lines
110static inline void __tlb_flush_kernel(void)110static inline void __tlb_flush_kernel(void)
111{111{
112 if (MACHINE_HAS_IDTE)112 if (MACHINE_HAS_IDTE)
113 __tlb_flush_idte((unsigned long) init_mm.pgd |113 __tlb_flush_idte(init_mm.context.asce);
114 init_mm.context.asce_bits);
115 else114 else
116 __tlb_flush_global();115 __tlb_flush_global();
117}116}
@@ -133,8 +132,7 @@ static inline void __tlb_flush_asce(struct mm_struct *mm, unsigned long asce) · 15 unmodified lines
133static inline void __tlb_flush_kernel(void)132static inline void __tlb_flush_kernel(void)
134{133{
135 if (MACHINE_HAS_TLB_LC)134 if (MACHINE_HAS_TLB_LC)
136 __tlb_flush_idte_local((unsigned long) init_mm.pgd |135 __tlb_flush_idte_local(init_mm.context.asce);
137 init_mm.context.asce_bits);
138 else136 else
139 __tlb_flush_local();137 __tlb_flush_local();
140}138}
@@ -148,8 +146,7 @@ static inline void __tlb_flush_mm(struct mm_struct * mm) · 7 unmodified lines
148 * only ran on the local cpu.146 * only ran on the local cpu.
149 */147 */
150 if (MACHINE_HAS_IDTE && list_empty(&mm->context.gmap_list))148 if (MACHINE_HAS_IDTE && list_empty(&mm->context.gmap_list))
151 __tlb_flush_asce(mm, (unsigned long) mm->pgd |149 __tlb_flush_asce(mm, mm->context.asce);
152 mm->context.asce_bits);
153 else150 else
154 __tlb_flush_full(mm);151 __tlb_flush_full(mm);
155}152}
arch/s390/mm/init.c+2−1
@@ -89,7 +89,8 @@ void __init paging_init(void) · 88 unmodified lines
89 asce_bits = _ASCE_TYPE_REGION3 | _ASCE_TABLE_LENGTH;89 asce_bits = _ASCE_TYPE_REGION3 | _ASCE_TABLE_LENGTH;
90 pgd_type = _REGION3_ENTRY_EMPTY;90 pgd_type = _REGION3_ENTRY_EMPTY;
91 }91 }
92 S390_lowcore.kernel_asce = (__pa(init_mm.pgd) & PAGE_MASK) | asce_bits;92 init_mm.context.asce = (__pa(init_mm.pgd) & PAGE_MASK) | asce_bits;
93 S390_lowcore.kernel_asce = init_mm.context.asce;
93 clear_table((unsigned long *) init_mm.pgd, pgd_type,94 clear_table((unsigned long *) init_mm.pgd, pgd_type,
94 sizeof(unsigned long)*2048);95 sizeof(unsigned long)*2048);
95 vmem_map_init();96 vmem_map_init();
arch/s390/mm/mmap.c+3−3
@@ -174,7 +174,7 @@ int s390_mmap_check(unsigned long addr, unsigned long len, unsigned long flags) · 173 unmodified lines
174 if (!(flags & MAP_FIXED))174 if (!(flags & MAP_FIXED))
175 addr = 0;175 addr = 0;
176 if ((addr + len) >= TASK_SIZE)176 if ((addr + len) >= TASK_SIZE)
177 return crst_table_upgrade(current->mm, TASK_MAX_SIZE);177 return crst_table_upgrade(current->mm);
178 return 0;178 return 0;
179}179}
180 180
@@ -191,7 +191,7 @@ s390_get_unmapped_area(struct file *filp, unsigned long addr, · 10 unmodified lines
191 return area;191 return area;
192 if (area == -ENOMEM && !is_compat_task() && TASK_SIZE < TASK_MAX_SIZE) {192 if (area == -ENOMEM && !is_compat_task() && TASK_SIZE < TASK_MAX_SIZE) {
193 /* Upgrade the page table to 4 levels and retry. */193 /* Upgrade the page table to 4 levels and retry. */
194 rc = crst_table_upgrade(mm, TASK_MAX_SIZE);194 rc = crst_table_upgrade(mm);
195 if (rc)195 if (rc)
196 return (unsigned long) rc;196 return (unsigned long) rc;
197 area = arch_get_unmapped_area(filp, addr, len, pgoff, flags);197 area = arch_get_unmapped_area(filp, addr, len, pgoff, flags);
@@ -213,7 +213,7 @@ s390_get_unmapped_area_topdown(struct file *filp, const unsigned long addr, · 15 unmodified lines
213 return area;213 return area;
214 if (area == -ENOMEM && !is_compat_task() && TASK_SIZE < TASK_MAX_SIZE) {214 if (area == -ENOMEM && !is_compat_task() && TASK_SIZE < TASK_MAX_SIZE) {
215 /* Upgrade the page table to 4 levels and retry. */215 /* Upgrade the page table to 4 levels and retry. */
216 rc = crst_table_upgrade(mm, TASK_MAX_SIZE);216 rc = crst_table_upgrade(mm);
217 if (rc)217 if (rc)
218 return (unsigned long) rc;218 return (unsigned long) rc;
219 area = arch_get_unmapped_area_topdown(filp, addr, len,219 area = arch_get_unmapped_area_topdown(filp, addr, len,
arch/s390/mm/pgalloc.c+28−57
@@ -76,81 +76,52 @@ static void __crst_table_upgrade(void *arg) · 75 unmodified lines
76 __tlb_flush_local();76 __tlb_flush_local();
77}77}
78 78
79int crst_table_upgrade(struct mm_struct *mm, unsigned long limit)79int crst_table_upgrade(struct mm_struct *mm)
80{80{
81 unsigned long *table, *pgd;81 unsigned long *table, *pgd;
82 unsigned long entry;
83 int flush;
84 82
85 BUG_ON(limit > TASK_MAX_SIZE);83 /* upgrade should only happen from 3 to 4 levels */
86 flush = 0;84 BUG_ON(mm->context.asce_limit != (1UL << 42));
87repeat:85
88 table = crst_table_alloc(mm);86 table = crst_table_alloc(mm);
89 if (!table)87 if (!table)
90 return -ENOMEM;88 return -ENOMEM;
89
91 spin_lock_bh(&mm->page_table_lock);90 spin_lock_bh(&mm->page_table_lock);
92 if (mm->context.asce_limit < limit) {91 pgd = (unsigned long *) mm->pgd;
93 pgd = (unsigned long *) mm->pgd;92 crst_table_init(table, _REGION2_ENTRY_EMPTY);
94 if (mm->context.asce_limit <= (1UL << 31)) {93 pgd_populate(mm, (pgd_t *) table, (pud_t *) pgd);
95 entry = _REGION3_ENTRY_EMPTY;94 mm->pgd = (pgd_t *) table;
96 mm->context.asce_limit = 1UL << 42;95 mm->context.asce_limit = 1UL << 53;
97 mm->context.asce_bits = _ASCE_TABLE_LENGTH |96 mm->context.asce = __pa(mm->pgd) | _ASCE_TABLE_LENGTH |
98 _ASCE_USER_BITS |97 _ASCE_USER_BITS | _ASCE_TYPE_REGION2;
99 _ASCE_TYPE_REGION3;98 mm->task_size = mm->context.asce_limit;
100 } else {
101 entry = _REGION2_ENTRY_EMPTY;
102 mm->context.asce_limit = 1UL << 53;
103 mm->context.asce_bits = _ASCE_TABLE_LENGTH |
104 _ASCE_USER_BITS |
105 _ASCE_TYPE_REGION2;
106 }
107 crst_table_init(table, entry);
108 pgd_populate(mm, (pgd_t *) table, (pud_t *) pgd);
109 mm->pgd = (pgd_t *) table;
110 mm->task_size = mm->context.asce_limit;
111 table = NULL;
112 flush = 1;
113 }
114 spin_unlock_bh(&mm->page_table_lock);99 spin_unlock_bh(&mm->page_table_lock);
115 if (table)100
116 crst_table_free(mm, table);101 on_each_cpu(__crst_table_upgrade, mm, 0);
117 if (mm->context.asce_limit < limit)
118 goto repeat;
119 if (flush)
120 on_each_cpu(__crst_table_upgrade, mm, 0);
121 return 0;102 return 0;
122}103}
123 104
124void crst_table_downgrade(struct mm_struct *mm, unsigned long limit)105void crst_table_downgrade(struct mm_struct *mm)
125{106{
126 pgd_t *pgd;107 pgd_t *pgd;
127 108
109 /* downgrade should only happen from 3 to 2 levels (compat only) */
110 BUG_ON(mm->context.asce_limit != (1UL << 42));
111
128 if (current->active_mm == mm) {112 if (current->active_mm == mm) {
129 clear_user_asce();113 clear_user_asce();
130 __tlb_flush_mm(mm);114 __tlb_flush_mm(mm);
131 }115 }
132 while (mm->context.asce_limit > limit) {116
133 pgd = mm->pgd;117 pgd = mm->pgd;
134 switch (pgd_val(*pgd) & _REGION_ENTRY_TYPE_MASK) {118 mm->pgd = (pgd_t *) (pgd_val(*pgd) & _REGION_ENTRY_ORIGIN);
135 case _REGION_ENTRY_TYPE_R2:119 mm->context.asce_limit = 1UL << 31;
136 mm->context.asce_limit = 1UL << 42;120 mm->context.asce = __pa(mm->pgd) | _ASCE_TABLE_LENGTH |
137 mm->context.asce_bits = _ASCE_TABLE_LENGTH |121 _ASCE_USER_BITS | _ASCE_TYPE_SEGMENT;
138 _ASCE_USER_BITS |122 mm->task_size = mm->context.asce_limit;
139 _ASCE_TYPE_REGION3;123 crst_table_free(mm, (unsigned long *) pgd);
140 break;124
141 case _REGION_ENTRY_TYPE_R3:
142 mm->context.asce_limit = 1UL << 31;
143 mm->context.asce_bits = _ASCE_TABLE_LENGTH |
144 _ASCE_USER_BITS |
145 _ASCE_TYPE_SEGMENT;
146 break;
147 default:
148 BUG();
149 }
150 mm->pgd = (pgd_t *) (pgd_val(*pgd) & _REGION_ENTRY_ORIGIN);
151 mm->task_size = mm->context.asce_limit;
152 crst_table_free(mm, (unsigned long *) pgd);
153 }
154 if (current->active_mm == mm)125 if (current->active_mm == mm)
155 set_user_asce(mm);126 set_user_asce(mm);
156}127}
arch/s390/pci/pci_dma.c+10−6
@@ -457,7 +457,7 @@ int zpci_dma_init_device(struct zpci_dev *zdev) · 456 unmodified lines
457 zdev->dma_table = dma_alloc_cpu_table();457 zdev->dma_table = dma_alloc_cpu_table();
458 if (!zdev->dma_table) {458 if (!zdev->dma_table) {
459 rc = -ENOMEM;459 rc = -ENOMEM;
460 goto out_clean;460 goto out;
461 }461 }
462 462
463 /*463 /*
@@ -477,18 +477,22 @@ int zpci_dma_init_device(struct zpci_dev *zdev) · 13 unmodified lines
477 zdev->iommu_bitmap = vzalloc(zdev->iommu_pages / 8);477 zdev->iommu_bitmap = vzalloc(zdev->iommu_pages / 8);
478 if (!zdev->iommu_bitmap) {478 if (!zdev->iommu_bitmap) {
479 rc = -ENOMEM;479 rc = -ENOMEM;
480 goto out_reg;480 goto free_dma_table;
481 }481 }
482 482
483 rc = zpci_register_ioat(zdev, 0, zdev->start_dma, zdev->end_dma,483 rc = zpci_register_ioat(zdev, 0, zdev->start_dma, zdev->end_dma,
484 (u64) zdev->dma_table);484 (u64) zdev->dma_table);
485 if (rc)485 if (rc)
486 goto out_reg;486 goto free_bitmap;
487 return 0;
488 487
489out_reg:488 return 0;
489free_bitmap:
490 vfree(zdev->iommu_bitmap);
491 zdev->iommu_bitmap = NULL;
492free_dma_table:
490 dma_free_cpu_table(zdev->dma_table);493 dma_free_cpu_table(zdev->dma_table);
491out_clean:494 zdev->dma_table = NULL;
495out:
492 return rc;496 return rc;
493}497}
494 498
arch/x86/events/amd/core.c+1−1
@@ -115,7 +115,7 @@ static __initconst const u64 amd_hw_cache_event_ids · 114 unmodified lines
115/*115/*
116 * AMD Performance Monitor K7 and later.116 * AMD Performance Monitor K7 and later.
117 */117 */
118static const u64 amd_perfmon_event_map[] =118static const u64 amd_perfmon_event_map[PERF_COUNT_HW_MAX] =
119{119{
120 [PERF_COUNT_HW_CPU_CYCLES] = 0x0076,120 [PERF_COUNT_HW_CPU_CYCLES] = 0x0076,
121 [PERF_COUNT_HW_INSTRUCTIONS] = 0x00c0,121 [PERF_COUNT_HW_INSTRUCTIONS] = 0x00c0,
arch/x86/events/intel/core.c+1−0
@@ -3639,6 +3639,7 @@ __init int intel_pmu_init(void) · 3638 unmodified lines
3639 3639
3640 case 78: /* 14nm Skylake Mobile */3640 case 78: /* 14nm Skylake Mobile */
3641 case 94: /* 14nm Skylake Desktop */3641 case 94: /* 14nm Skylake Desktop */
3642 case 85: /* 14nm Skylake Server */
3642 x86_pmu.late_ack = true;3643 x86_pmu.late_ack = true;
3643 memcpy(hw_cache_event_ids, skl_hw_cache_event_ids, sizeof(hw_cache_event_ids));3644 memcpy(hw_cache_event_ids, skl_hw_cache_event_ids, sizeof(hw_cache_event_ids));
3644 memcpy(hw_cache_extra_regs, skl_hw_cache_extra_regs, sizeof(hw_cache_extra_regs));3645 memcpy(hw_cache_extra_regs, skl_hw_cache_extra_regs, sizeof(hw_cache_extra_regs));
arch/x86/events/intel/lbr.c+4−2
@@ -63,7 +63,7 @@ static enum { · 62 unmodified lines
63 63
64#define LBR_PLM (LBR_KERNEL | LBR_USER)64#define LBR_PLM (LBR_KERNEL | LBR_USER)
65 65
66#define LBR_SEL_MASK 0x1ff /* valid bits in LBR_SELECT */66#define LBR_SEL_MASK 0x3ff /* valid bits in LBR_SELECT */
67#define LBR_NOT_SUPP -1 /* LBR filter not supported */67#define LBR_NOT_SUPP -1 /* LBR filter not supported */
68#define LBR_IGN 0 /* ignored */68#define LBR_IGN 0 /* ignored */
69 69
@@ -610,8 +610,10 @@ static int intel_pmu_setup_hw_lbr_filter(struct perf_event *event) · 540 unmodified lines
610 * The first 9 bits (LBR_SEL_MASK) in LBR_SELECT operate610 * The first 9 bits (LBR_SEL_MASK) in LBR_SELECT operate
611 * in suppress mode. So LBR_SELECT should be set to611 * in suppress mode. So LBR_SELECT should be set to
612 * (~mask & LBR_SEL_MASK) | (mask & ~LBR_SEL_MASK)612 * (~mask & LBR_SEL_MASK) | (mask & ~LBR_SEL_MASK)
613 * But the 10th bit LBR_CALL_STACK does not operate
614 * in suppress mode.
613 */615 */
614 reg->config = mask ^ x86_pmu.lbr_sel_mask;616 reg->config = mask ^ (x86_pmu.lbr_sel_mask & ~LBR_CALL_STACK);
615 617
616 if ((br_type & PERF_SAMPLE_BRANCH_NO_CYCLES) &&618 if ((br_type & PERF_SAMPLE_BRANCH_NO_CYCLES) &&
617 (br_type & PERF_SAMPLE_BRANCH_NO_FLAGS) &&619 (br_type & PERF_SAMPLE_BRANCH_NO_FLAGS) &&
arch/x86/events/intel/pt.c+64−11
@@ -136,9 +136,21 @@ static int __init pt_pmu_hw_init(void) · 135 unmodified lines
136 struct dev_ext_attribute *de_attrs;136 struct dev_ext_attribute *de_attrs;
137 struct attribute **attrs;137 struct attribute **attrs;
138 size_t size;138 size_t size;
139 u64 reg;
139 int ret;140 int ret;
140 long i;141 long i;
141 142
143 if (boot_cpu_has(X86_FEATURE_VMX)) {
144 /*
145 * Intel SDM, 36.5 "Tracing post-VMXON" says that
146 * "IA32_VMX_MISC[bit 14]" being 1 means PT can trace
147 * post-VMXON.
148 */
149 rdmsrl(MSR_IA32_VMX_MISC, reg);
150 if (reg & BIT(14))
151 pt_pmu.vmx = true;
152 }
153
142 attrs = NULL;154 attrs = NULL;
143 155
144 for (i = 0; i < PT_CPUID_LEAVES; i++) {156 for (i = 0; i < PT_CPUID_LEAVES; i++) {
@@ -269,20 +281,23 @@ static void pt_config(struct perf_event *event) · 124 unmodified lines
269 281
270 reg |= (event->attr.config & PT_CONFIG_MASK);282 reg |= (event->attr.config & PT_CONFIG_MASK);
271 283
284 event->hw.config = reg;
272 wrmsrl(MSR_IA32_RTIT_CTL, reg);285 wrmsrl(MSR_IA32_RTIT_CTL, reg);
273}286}
274 287
275static void pt_config_start(bool start)288static void pt_config_stop(struct perf_event *event)
276{289{
277 u64 ctl;290 u64 ctl = READ_ONCE(event->hw.config);
291
292 /* may be already stopped by a PMI */
293 if (!(ctl & RTIT_CTL_TRACEEN))
294 return;
278 295
279 rdmsrl(MSR_IA32_RTIT_CTL, ctl);296 ctl &= ~RTIT_CTL_TRACEEN;
280 if (start)
281 ctl |= RTIT_CTL_TRACEEN;
282 else
283 ctl &= ~RTIT_CTL_TRACEEN;
284 wrmsrl(MSR_IA32_RTIT_CTL, ctl);297 wrmsrl(MSR_IA32_RTIT_CTL, ctl);
285 298
299 WRITE_ONCE(event->hw.config, ctl);
300
286 /*301 /*
287 * A wrmsr that disables trace generation serializes other PT302 * A wrmsr that disables trace generation serializes other PT
288 * registers and causes all data packets to be written to memory,303 * registers and causes all data packets to be written to memory,
@@ -291,8 +306,7 @@ static void pt_config_start(bool start) · 2 unmodified lines
291 * The below WMB, separating data store and aux_head store matches306 * The below WMB, separating data store and aux_head store matches
292 * the consumer's RMB that separates aux_head load and data load.307 * the consumer's RMB that separates aux_head load and data load.
293 */308 */
294 if (!start)309 wmb();
295 wmb();
296}310}
297 311
298static void pt_config_buffer(void *buf, unsigned int topa_idx,312static void pt_config_buffer(void *buf, unsigned int topa_idx,
@@ -942,11 +956,17 @@ void intel_pt_interrupt(void) · 643 unmodified lines
942 if (!ACCESS_ONCE(pt->handle_nmi))956 if (!ACCESS_ONCE(pt->handle_nmi))
943 return;957 return;
944 958
945 pt_config_start(false);959 /*
960 * If VMX is on and PT does not support it, don't touch anything.
961 */
962 if (READ_ONCE(pt->vmx_on))
963 return;
946 964
947 if (!event)965 if (!event)
948 return;966 return;
949 967
968 pt_config_stop(event);
969
950 buf = perf_get_aux(&pt->handle);970 buf = perf_get_aux(&pt->handle);
951 if (!buf)971 if (!buf)
952 return;972 return;
@@ -983,6 +1003,35 @@ void intel_pt_interrupt(void) · 30 unmodified lines
983 }1003 }
984}1004}
985 1005
1006void intel_pt_handle_vmx(int on)
1007{
1008 struct pt *pt = this_cpu_ptr(&pt_ctx);
1009 struct perf_event *event;
1010 unsigned long flags;
1011
1012 /* PT plays nice with VMX, do nothing */
1013 if (pt_pmu.vmx)
1014 return;
1015
1016 /*
1017 * VMXON will clear RTIT_CTL.TraceEn; we need to make
1018 * sure to not try to set it while VMX is on. Disable
1019 * interrupts to avoid racing with pmu callbacks;
1020 * concurrent PMI should be handled fine.
1021 */
1022 local_irq_save(flags);
1023 WRITE_ONCE(pt->vmx_on, on);
1024
1025 if (on) {
1026 /* prevent pt_config_stop() from writing RTIT_CTL */
1027 event = pt->handle.event;
1028 if (event)
1029 event->hw.config = 0;
1030 }
1031 local_irq_restore(flags);
1032}
1033EXPORT_SYMBOL_GPL(intel_pt_handle_vmx);
1034
986/*1035/*
987 * PMU callbacks1036 * PMU callbacks
988 */1037 */
@@ -992,6 +1041,9 @@ static void pt_event_start(struct perf_event *event, int mode) · 3 unmodified lines
992 struct pt *pt = this_cpu_ptr(&pt_ctx);1041 struct pt *pt = this_cpu_ptr(&pt_ctx);
993 struct pt_buffer *buf = perf_get_aux(&pt->handle);1042 struct pt_buffer *buf = perf_get_aux(&pt->handle);
994 1043
1044 if (READ_ONCE(pt->vmx_on))
1045 return;
1046
995 if (!buf || pt_buffer_is_full(buf, pt)) {1047 if (!buf || pt_buffer_is_full(buf, pt)) {
996 event->hw.state = PERF_HES_STOPPED;1048 event->hw.state = PERF_HES_STOPPED;
997 return;1049 return;
@@ -1014,7 +1066,8 @@ static void pt_event_stop(struct perf_event *event, int mode) · 16 unmodified lines
1014 * see comment in intel_pt_interrupt().1066 * see comment in intel_pt_interrupt().
1015 */1067 */
1016 ACCESS_ONCE(pt->handle_nmi) = 0;1068 ACCESS_ONCE(pt->handle_nmi) = 0;
1017 pt_config_start(false);1069
1070 pt_config_stop(event);
1018 1071
1019 if (event->hw.state == PERF_HES_STOPPED)1072 if (event->hw.state == PERF_HES_STOPPED)
1020 return;1073 return;
arch/x86/events/intel/pt.h+3−0
@@ -65,6 +65,7 @@ enum pt_capabilities { · 64 unmodified lines
65struct pt_pmu {65struct pt_pmu {
66 struct pmu pmu;66 struct pmu pmu;
67 u32 caps[PT_CPUID_REGS_NUM * PT_CPUID_LEAVES];67 u32 caps[PT_CPUID_REGS_NUM * PT_CPUID_LEAVES];
68 bool vmx;
68};69};
69 70
70/**71/**
@@ -107,10 +108,12 @@ struct pt_buffer { · 36 unmodified lines
107 * struct pt - per-cpu pt context108 * struct pt - per-cpu pt context
108 * @handle: perf output handle109 * @handle: perf output handle
109 * @handle_nmi: do handle PT PMI on this cpu, there's an active event110 * @handle_nmi: do handle PT PMI on this cpu, there's an active event
111 * @vmx_on: 1 if VMX is ON on this cpu
110 */112 */
111struct pt {113struct pt {
112 struct perf_output_handle handle;114 struct perf_output_handle handle;
113 int handle_nmi;115 int handle_nmi;
116 int vmx_on;
114};117};
115 118
116#endif /* __INTEL_PT_H__ */119#endif /* __INTEL_PT_H__ */
arch/x86/events/intel/rapl.c+1−0
@@ -718,6 +718,7 @@ static int __init rapl_pmu_init(void) · 717 unmodified lines
718 break;718 break;
719 case 60: /* Haswell */719 case 60: /* Haswell */
720 case 69: /* Haswell-Celeron */720 case 69: /* Haswell-Celeron */
721 case 70: /* Haswell GT3e */
721 case 61: /* Broadwell */722 case 61: /* Broadwell */
722 case 71: /* Broadwell-H */723 case 71: /* Broadwell-H */
723 rapl_cntr_mask = RAPL_IDX_HSW;724 rapl_cntr_mask = RAPL_IDX_HSW;
arch/x86/include/asm/perf_event.h+4−0
@@ -285,6 +285,10 @@ static inline void perf_events_lapic_init(void) { } · 284 unmodified lines
285static inline void perf_check_microcode(void) { }285static inline void perf_check_microcode(void) { }
286#endif286#endif
287 287
288#ifdef CONFIG_CPU_SUP_INTEL
289 extern void intel_pt_handle_vmx(int on);
290#endif
291
288#if defined(CONFIG_PERF_EVENTS) && defined(CONFIG_CPU_SUP_AMD)292#if defined(CONFIG_PERF_EVENTS) && defined(CONFIG_CPU_SUP_AMD)
289 extern void amd_pmu_enable_virt(void);293 extern void amd_pmu_enable_virt(void);
290 extern void amd_pmu_disable_virt(void);294 extern void amd_pmu_disable_virt(void);
arch/x86/kernel/apic/vector.c+2−1
@@ -256,7 +256,8 @@ static void clear_irq_vector(int irq, struct apic_chip_data *data) · 255 unmodified lines
256 struct irq_desc *desc;256 struct irq_desc *desc;
257 int cpu, vector;257 int cpu, vector;
258 258
259 BUG_ON(!data->cfg.vector);259 if (!data->cfg.vector)
260 return;
260 261
261 vector = data->cfg.vector;262 vector = data->cfg.vector;
262 for_each_cpu_and(cpu, data->domain, cpu_online_mask)263 for_each_cpu_and(cpu, data->domain, cpu_online_mask)
arch/x86/kernel/head_32.S+0−6
@@ -389,12 +389,6 @@ default_entry: · 388 unmodified lines
389 /* Make changes effective */389 /* Make changes effective */
390 wrmsr390 wrmsr
391 391
392 /*
393 * And make sure that all the mappings we set up have NX set from
394 * the beginning.
395 */
396 orl $(1 << (_PAGE_BIT_NX - 32)), pa(__supported_pte_mask + 4)
397
398enable_paging:392enable_paging:
399 393
400/*394/*
arch/x86/kvm/vmx.c+4−0
@@ -3103,6 +3103,8 @@ static __init int vmx_disabled_by_bios(void) · 3102 unmodified lines
3103 3103
3104static void kvm_cpu_vmxon(u64 addr)3104static void kvm_cpu_vmxon(u64 addr)
3105{3105{
3106 intel_pt_handle_vmx(1);
3107
3106 asm volatile (ASM_VMX_VMXON_RAX3108 asm volatile (ASM_VMX_VMXON_RAX
3107 : : "a"(&addr), "m"(addr)3109 : : "a"(&addr), "m"(addr)
3108 : "memory", "cc");3110 : "memory", "cc");
@@ -3172,6 +3174,8 @@ static void vmclear_local_loaded_vmcss(void) · 63 unmodified lines
3172static void kvm_cpu_vmxoff(void)3174static void kvm_cpu_vmxoff(void)
3173{3175{
3174 asm volatile (__ex(ASM_VMX_VMXOFF) : : : "cc");3176 asm volatile (__ex(ASM_VMX_VMXOFF) : : : "cc");
3177
3178 intel_pt_handle_vmx(0);
3175}3179}
3176 3180
3177static void hardware_disable(void)3181static void hardware_disable(void)
arch/x86/mm/setup_nx.c+3−2
@@ -32,8 +32,9 @@ early_param("noexec", noexec_setup); · 31 unmodified lines
32 32
33void x86_configure_nx(void)33void x86_configure_nx(void)
34{34{
35 /* If disable_nx is set, clear NX on all new mappings going forward. */35 if (boot_cpu_has(X86_FEATURE_NX) && !disable_nx)
36 if (disable_nx)36 __supported_pte_mask |= _PAGE_NX;
37 else
37 __supported_pte_mask &= ~_PAGE_NX;38 __supported_pte_mask &= ~_PAGE_NX;
38}39}
39 40
arch/x86/xen/spinlock.c+6−0
@@ -27,6 +27,12 @@ static bool xen_pvspin = true; · 26 unmodified lines
27 27
28static void xen_qlock_kick(int cpu)28static void xen_qlock_kick(int cpu)
29{29{
30 int irq = per_cpu(lock_kicker_irq, cpu);
31
32 /* Don't kick if the target's kicker interrupt is not initialized. */
33 if (irq == -1)
34 return;
35
30 xen_send_IPI_one(cpu, XEN_SPIN_UNLOCK_VECTOR);36 xen_send_IPI_one(cpu, XEN_SPIN_UNLOCK_VECTOR);
31}37}
32 38
drivers/block/rbd.c+25−27
@@ -538,7 +538,6 @@ static int _rbd_dev_v2_snap_size(struct rbd_device *rbd_dev, u64 snap_id, · 537 unmodified lines
538 u8 *order, u64 *snap_size);538 u8 *order, u64 *snap_size);
539static int _rbd_dev_v2_snap_features(struct rbd_device *rbd_dev, u64 snap_id,539static int _rbd_dev_v2_snap_features(struct rbd_device *rbd_dev, u64 snap_id,
540 u64 *snap_features);540 u64 *snap_features);
541static u64 rbd_snap_id_by_name(struct rbd_device *rbd_dev, const char *name);
542 541
543static int rbd_open(struct block_device *bdev, fmode_t mode)542static int rbd_open(struct block_device *bdev, fmode_t mode)
544{543{
@@ -3127,9 +3126,6 @@ static void rbd_watch_cb(u64 ver, u64 notify_id, u8 opcode, void *data) · 2582 unmodified lines
3127 struct rbd_device *rbd_dev = (struct rbd_device *)data;3126 struct rbd_device *rbd_dev = (struct rbd_device *)data;
3128 int ret;3127 int ret;
3129 3128
3130 if (!rbd_dev)
3131 return;
3132
3133 dout("%s: \"%s\" notify_id %llu opcode %u\n", __func__,3129 dout("%s: \"%s\" notify_id %llu opcode %u\n", __func__,
3134 rbd_dev->header_name, (unsigned long long)notify_id,3130 rbd_dev->header_name, (unsigned long long)notify_id,
3135 (unsigned int)opcode);3131 (unsigned int)opcode);
@@ -3263,6 +3259,9 @@ static void rbd_dev_header_unwatch_sync(struct rbd_device *rbd_dev) · 127 unmodified lines
3263 3259
3264 ceph_osdc_cancel_event(rbd_dev->watch_event);3260 ceph_osdc_cancel_event(rbd_dev->watch_event);
3265 rbd_dev->watch_event = NULL;3261 rbd_dev->watch_event = NULL;
3262
3263 dout("%s flushing notifies\n", __func__);
3264 ceph_osdc_flush_notifies(&rbd_dev->rbd_client->client->osdc);
3266}3265}
3267 3266
3268/*3267/*
@@ -3642,21 +3641,14 @@ static void rbd_exists_validate(struct rbd_device *rbd_dev) · 373 unmodified lines
3642static void rbd_dev_update_size(struct rbd_device *rbd_dev)3641static void rbd_dev_update_size(struct rbd_device *rbd_dev)
3643{3642{
3644 sector_t size;3643 sector_t size;
3645 bool removing;
3646 3644
3647 /*3645 /*
3648 * Don't hold the lock while doing disk operations,3646 * If EXISTS is not set, rbd_dev->disk may be NULL, so don't
3649 * or lock ordering will conflict with the bdev mutex via:3647 * try to update its size. If REMOVING is set, updating size
3650 * rbd_add() -> blkdev_get() -> rbd_open()3648 * is just useless work since the device can't be opened.
3651 */3649 */
3652 spin_lock_irq(&rbd_dev->lock);3650 if (test_bit(RBD_DEV_FLAG_EXISTS, &rbd_dev->flags) &&
3653 removing = test_bit(RBD_DEV_FLAG_REMOVING, &rbd_dev->flags);3651 !test_bit(RBD_DEV_FLAG_REMOVING, &rbd_dev->flags)) {
3654 spin_unlock_irq(&rbd_dev->lock);
3655 /*
3656 * If the device is being removed, rbd_dev->disk has
3657 * been destroyed, so don't try to update its size
3658 */
3659 if (!removing) {
3660 size = (sector_t)rbd_dev->mapping.size / SECTOR_SIZE;3652 size = (sector_t)rbd_dev->mapping.size / SECTOR_SIZE;
3661 dout("setting size to %llu sectors", (unsigned long long)size);3653 dout("setting size to %llu sectors", (unsigned long long)size);
3662 set_capacity(rbd_dev->disk, size);3654 set_capacity(rbd_dev->disk, size);
@@ -4191,7 +4183,7 @@ static int _rbd_dev_v2_snap_features(struct rbd_device *rbd_dev, u64 snap_id, · 528 unmodified lines
4191 __le64 features;4183 __le64 features;
4192 __le64 incompat;4184 __le64 incompat;
4193 } __attribute__ ((packed)) features_buf = { 0 };4185 } __attribute__ ((packed)) features_buf = { 0 };
4194 u64 incompat;4186 u64 unsup;
4195 int ret;4187 int ret;
4196 4188
4197 ret = rbd_obj_method_sync(rbd_dev, rbd_dev->header_name,4189 ret = rbd_obj_method_sync(rbd_dev, rbd_dev->header_name,
@@ -4204,9 +4196,12 @@ static int _rbd_dev_v2_snap_features(struct rbd_device *rbd_dev, u64 snap_id, · 6 unmodified lines
4204 if (ret < sizeof (features_buf))4196 if (ret < sizeof (features_buf))
4205 return -ERANGE;4197 return -ERANGE;
4206 4198
4207 incompat = le64_to_cpu(features_buf.incompat);4199 unsup = le64_to_cpu(features_buf.incompat) & ~RBD_FEATURES_SUPPORTED;
4208 if (incompat & ~RBD_FEATURES_SUPPORTED)4200 if (unsup) {
4201 rbd_warn(rbd_dev, "image uses unsupported features: 0x%llx",
4202 unsup);
4209 return -ENXIO;4203 return -ENXIO;
4204 }
4210 4205
4211 *snap_features = le64_to_cpu(features_buf.features);4206 *snap_features = le64_to_cpu(features_buf.features);
4212 4207
@@ -5187,6 +5182,10 @@ out_err: · 974 unmodified lines
5187 return ret;5182 return ret;
5188}5183}
5189 5184
5185/*
5186 * rbd_dev->header_rwsem must be locked for write and will be unlocked
5187 * upon return.
5188 */
5190static int rbd_dev_device_setup(struct rbd_device *rbd_dev)5189static int rbd_dev_device_setup(struct rbd_device *rbd_dev)
5191{5190{
5192 int ret;5191 int ret;
@@ -5195,7 +5194,7 @@ static int rbd_dev_device_setup(struct rbd_device *rbd_dev) · 2 unmodified lines
5195 5194
5196 ret = rbd_dev_id_get(rbd_dev);5195 ret = rbd_dev_id_get(rbd_dev);
5197 if (ret)5196 if (ret)
5198 return ret;5197 goto err_out_unlock;
5199 5198
5200 BUILD_BUG_ON(DEV_NAME_LEN5199 BUILD_BUG_ON(DEV_NAME_LEN
5201 < sizeof (RBD_DRV_NAME) + MAX_INT_FORMAT_WIDTH);5200 < sizeof (RBD_DRV_NAME) + MAX_INT_FORMAT_WIDTH);
@@ -5236,8 +5235,9 @@ static int rbd_dev_device_setup(struct rbd_device *rbd_dev) · 34 unmodified lines
5236 /* Everything's ready. Announce the disk to the world. */5235 /* Everything's ready. Announce the disk to the world. */
5237 5236
5238 set_bit(RBD_DEV_FLAG_EXISTS, &rbd_dev->flags);5237 set_bit(RBD_DEV_FLAG_EXISTS, &rbd_dev->flags);
5239 add_disk(rbd_dev->disk);5238 up_write(&rbd_dev->header_rwsem);
5240 5239
5240 add_disk(rbd_dev->disk);
5241 pr_info("%s: added with size 0x%llx\n", rbd_dev->disk->disk_name,5241 pr_info("%s: added with size 0x%llx\n", rbd_dev->disk->disk_name,
5242 (unsigned long long) rbd_dev->mapping.size);5242 (unsigned long long) rbd_dev->mapping.size);
5243 5243
@@ -5252,6 +5252,8 @@ err_out_blkdev: · 8 unmodified lines
5252 unregister_blkdev(rbd_dev->major, rbd_dev->name);5252 unregister_blkdev(rbd_dev->major, rbd_dev->name);
5253err_out_id:5253err_out_id:
5254 rbd_dev_id_put(rbd_dev);5254 rbd_dev_id_put(rbd_dev);
5255err_out_unlock:
5256 up_write(&rbd_dev->header_rwsem);
5255 return ret;5257 return ret;
5256}5258}
5257 5259
@@ -5442,6 +5444,7 @@ static ssize_t do_rbd_add(struct bus_type *bus, · 184 unmodified lines
5442 spec = NULL; /* rbd_dev now owns this */5444 spec = NULL; /* rbd_dev now owns this */
5443 rbd_opts = NULL; /* rbd_dev now owns this */5445 rbd_opts = NULL; /* rbd_dev now owns this */
5444 5446
5447 down_write(&rbd_dev->header_rwsem);
5445 rc = rbd_dev_image_probe(rbd_dev, 0);5448 rc = rbd_dev_image_probe(rbd_dev, 0);
5446 if (rc < 0)5449 if (rc < 0)
5447 goto err_out_rbd_dev;5450 goto err_out_rbd_dev;
@@ -5471,6 +5474,7 @@ out: · 23 unmodified lines
5471 return rc;5474 return rc;
5472 5475
5473err_out_rbd_dev:5476err_out_rbd_dev:
5477 up_write(&rbd_dev->header_rwsem);
5474 rbd_dev_destroy(rbd_dev);5478 rbd_dev_destroy(rbd_dev);
5475err_out_client:5479err_out_client:
5476 rbd_put_client(rbdc);5480 rbd_put_client(rbdc);
@@ -5577,12 +5581,6 @@ static ssize_t do_rbd_remove(struct bus_type *bus, · 100 unmodified lines
5577 return ret;5581 return ret;
5578 5582
5579 rbd_dev_header_unwatch_sync(rbd_dev);5583 rbd_dev_header_unwatch_sync(rbd_dev);
5580 /*
5581 * flush remaining watch callbacks - these must be complete
5582 * before the osd_client is shutdown
5583 */
5584 dout("%s: flushing notifies", __func__);
5585 ceph_osdc_flush_notifies(&rbd_dev->rbd_client->client->osdc);
5586 5584
5587 /*5585 /*
5588 * Don't free anything from rbd_dev->disk until after all5586 * Don't free anything from rbd_dev->disk until after all
drivers/cpufreq/cpufreq_governor.c+2−6
@@ -193,12 +193,8 @@ unsigned int dbs_update(struct cpufreq_policy *policy) · 192 unmodified lines
193 wall_time = cur_wall_time - j_cdbs->prev_cpu_wall;193 wall_time = cur_wall_time - j_cdbs->prev_cpu_wall;
194 j_cdbs->prev_cpu_wall = cur_wall_time;194 j_cdbs->prev_cpu_wall = cur_wall_time;
195 195
196 if (cur_idle_time <= j_cdbs->prev_cpu_idle) {196 idle_time = cur_idle_time - j_cdbs->prev_cpu_idle;
197 idle_time = 0;197 j_cdbs->prev_cpu_idle = cur_idle_time;
198 } else {
199 idle_time = cur_idle_time - j_cdbs->prev_cpu_idle;
200 j_cdbs->prev_cpu_idle = cur_idle_time;
201 }
202 198
203 if (ignore_nice) {199 if (ignore_nice) {
204 u64 cur_nice = kcpustat_cpu(j).cpustat[CPUTIME_NICE];200 u64 cur_nice = kcpustat_cpu(j).cpustat[CPUTIME_NICE];
drivers/cpufreq/intel_pstate.c+5−0
@@ -813,6 +813,11 @@ static int core_get_max_pstate(void) · 812 unmodified lines
813 if (err)813 if (err)
814 goto skip_tar;814 goto skip_tar;
815 815
816 /* For level 1 and 2, bits[23:16] contain the ratio */
817 if (tdp_ctrl)
818 tdp_ratio >>= 16;
819
820 tdp_ratio &= 0xff; /* ratios are only 8 bits long */
816 if (tdp_ratio - 1 == tar) {821 if (tdp_ratio - 1 == tar) {
817 max_pstate = tar;822 max_pstate = tar;
818 pr_debug("max_pstate=TAC %x\n", max_pstate);823 pr_debug("max_pstate=TAC %x\n", max_pstate);
drivers/crypto/talitos.c+57−30
@@ -63,6 +63,14 @@ static void to_talitos_ptr(struct talitos_ptr *ptr, dma_addr_t dma_addr, · 62 unmodified lines
63 ptr->eptr = upper_32_bits(dma_addr);63 ptr->eptr = upper_32_bits(dma_addr);
64}64}
65 65
66static void copy_talitos_ptr(struct talitos_ptr *dst_ptr,
67 struct talitos_ptr *src_ptr, bool is_sec1)
68{
69 dst_ptr->ptr = src_ptr->ptr;
70 if (!is_sec1)
71 dst_ptr->eptr = src_ptr->eptr;
72}
73
66static void to_talitos_ptr_len(struct talitos_ptr *ptr, unsigned int len,74static void to_talitos_ptr_len(struct talitos_ptr *ptr, unsigned int len,
67 bool is_sec1)75 bool is_sec1)
68{76{
@@ -1083,21 +1091,20 @@ static int ipsec_esp(struct talitos_edesc *edesc, struct aead_request *areq, · 1014 unmodified lines
1083 sg_count = dma_map_sg(dev, areq->src, edesc->src_nents ?: 1,1091 sg_count = dma_map_sg(dev, areq->src, edesc->src_nents ?: 1,
1084 (areq->src == areq->dst) ? DMA_BIDIRECTIONAL1092 (areq->src == areq->dst) ? DMA_BIDIRECTIONAL
1085 : DMA_TO_DEVICE);1093 : DMA_TO_DEVICE);
1086
1087 /* hmac data */1094 /* hmac data */
1088 desc->ptr[1].len = cpu_to_be16(areq->assoclen);1095 desc->ptr[1].len = cpu_to_be16(areq->assoclen);
1089 if (sg_count > 1 &&1096 if (sg_count > 1 &&
1090 (ret = sg_to_link_tbl_offset(areq->src, sg_count, 0,1097 (ret = sg_to_link_tbl_offset(areq->src, sg_count, 0,
1091 areq->assoclen,1098 areq->assoclen,
1092 &edesc->link_tbl[tbl_off])) > 1) {1099 &edesc->link_tbl[tbl_off])) > 1) {
1093 tbl_off += ret;
1094
1095 to_talitos_ptr(&desc->ptr[1], edesc->dma_link_tbl + tbl_off *1100 to_talitos_ptr(&desc->ptr[1], edesc->dma_link_tbl + tbl_off *
1096 sizeof(struct talitos_ptr), 0);1101 sizeof(struct talitos_ptr), 0);
1097 desc->ptr[1].j_extent = DESC_PTR_LNKTBL_JUMP;1102 desc->ptr[1].j_extent = DESC_PTR_LNKTBL_JUMP;
1098 1103
1099 dma_sync_single_for_device(dev, edesc->dma_link_tbl,1104 dma_sync_single_for_device(dev, edesc->dma_link_tbl,
1100 edesc->dma_len, DMA_BIDIRECTIONAL);1105 edesc->dma_len, DMA_BIDIRECTIONAL);
1106
1107 tbl_off += ret;
1101 } else {1108 } else {
1102 to_talitos_ptr(&desc->ptr[1], sg_dma_address(areq->src), 0);1109 to_talitos_ptr(&desc->ptr[1], sg_dma_address(areq->src), 0);
1103 desc->ptr[1].j_extent = 0;1110 desc->ptr[1].j_extent = 0;
@@ -1126,11 +1133,13 @@ static int ipsec_esp(struct talitos_edesc *edesc, struct aead_request *areq, · 22 unmodified lines
1126 if (edesc->desc.hdr & DESC_HDR_MODE1_MDEU_CICV)1133 if (edesc->desc.hdr & DESC_HDR_MODE1_MDEU_CICV)
1127 sg_link_tbl_len += authsize;1134 sg_link_tbl_len += authsize;
1128 1135
1129 if (sg_count > 1 &&1136 if (sg_count == 1) {
1130 (ret = sg_to_link_tbl_offset(areq->src, sg_count, areq->assoclen,1137 to_talitos_ptr(&desc->ptr[4], sg_dma_address(areq->src) +
1131 sg_link_tbl_len,1138 areq->assoclen, 0);
1132 &edesc->link_tbl[tbl_off])) > 1) {1139 } else if ((ret = sg_to_link_tbl_offset(areq->src, sg_count,
1133 tbl_off += ret;1140 areq->assoclen, sg_link_tbl_len,
1141 &edesc->link_tbl[tbl_off])) >
1142 1) {
1134 desc->ptr[4].j_extent |= DESC_PTR_LNKTBL_JUMP;1143 desc->ptr[4].j_extent |= DESC_PTR_LNKTBL_JUMP;
1135 to_talitos_ptr(&desc->ptr[4], edesc->dma_link_tbl +1144 to_talitos_ptr(&desc->ptr[4], edesc->dma_link_tbl +
1136 tbl_off *1145 tbl_off *
@@ -1138,8 +1147,10 @@ static int ipsec_esp(struct talitos_edesc *edesc, struct aead_request *areq, · 1 unmodified line
1138 dma_sync_single_for_device(dev, edesc->dma_link_tbl,1147 dma_sync_single_for_device(dev, edesc->dma_link_tbl,
1139 edesc->dma_len,1148 edesc->dma_len,
1140 DMA_BIDIRECTIONAL);1149 DMA_BIDIRECTIONAL);
1141 } else1150 tbl_off += ret;
1142 to_talitos_ptr(&desc->ptr[4], sg_dma_address(areq->src), 0);1151 } else {
1152 copy_talitos_ptr(&desc->ptr[4], &edesc->link_tbl[tbl_off], 0);
1153 }
1143 1154
1144 /* cipher out */1155 /* cipher out */
1145 desc->ptr[5].len = cpu_to_be16(cryptlen);1156 desc->ptr[5].len = cpu_to_be16(cryptlen);
@@ -1151,11 +1162,13 @@ static int ipsec_esp(struct talitos_edesc *edesc, struct aead_request *areq, · 5 unmodified lines
1151 1162
1152 edesc->icv_ool = false;1163 edesc->icv_ool = false;
1153 1164
1154 if (sg_count > 1 &&1165 if (sg_count == 1) {
1155 (sg_count = sg_to_link_tbl_offset(areq->dst, sg_count,1166 to_talitos_ptr(&desc->ptr[5], sg_dma_address(areq->dst) +
1167 areq->assoclen, 0);
1168 } else if ((sg_count =
1169 sg_to_link_tbl_offset(areq->dst, sg_count,
1156 areq->assoclen, cryptlen,1170 areq->assoclen, cryptlen,
1157 &edesc->link_tbl[tbl_off])) >1171 &edesc->link_tbl[tbl_off])) > 1) {
1158 1) {
1159 struct talitos_ptr *tbl_ptr = &edesc->link_tbl[tbl_off];1172 struct talitos_ptr *tbl_ptr = &edesc->link_tbl[tbl_off];
1160 1173
1161 to_talitos_ptr(&desc->ptr[5], edesc->dma_link_tbl +1174 to_talitos_ptr(&desc->ptr[5], edesc->dma_link_tbl +
@@ -1178,8 +1191,9 @@ static int ipsec_esp(struct talitos_edesc *edesc, struct aead_request *areq, · 16 unmodified lines
1178 edesc->dma_len, DMA_BIDIRECTIONAL);1191 edesc->dma_len, DMA_BIDIRECTIONAL);
1179 1192
1180 edesc->icv_ool = true;1193 edesc->icv_ool = true;
1181 } else1194 } else {
1182 to_talitos_ptr(&desc->ptr[5], sg_dma_address(areq->dst), 0);1195 copy_talitos_ptr(&desc->ptr[5], &edesc->link_tbl[tbl_off], 0);
1196 }
1183 1197
1184 /* iv out */1198 /* iv out */
1185 map_single_talitos_ptr(dev, &desc->ptr[6], ivsize, ctx->iv,1199 map_single_talitos_ptr(dev, &desc->ptr[6], ivsize, ctx->iv,
@@ -2629,21 +2643,11 @@ struct talitos_crypto_alg { · 1443 unmodified lines
2629 struct talitos_alg_template algt;2643 struct talitos_alg_template algt;
2630};2644};
2631 2645
2632static int talitos_cra_init(struct crypto_tfm *tfm)2646static int talitos_init_common(struct talitos_ctx *ctx,
2647 struct talitos_crypto_alg *talitos_alg)
2633{2648{
2634 struct crypto_alg *alg = tfm->__crt_alg;
2635 struct talitos_crypto_alg *talitos_alg;
2636 struct talitos_ctx *ctx = crypto_tfm_ctx(tfm);
2637 struct talitos_private *priv;2649 struct talitos_private *priv;
2638 2650
2639 if ((alg->cra_flags & CRYPTO_ALG_TYPE_MASK) == CRYPTO_ALG_TYPE_AHASH)
2640 talitos_alg = container_of(__crypto_ahash_alg(alg),
2641 struct talitos_crypto_alg,
2642 algt.alg.hash);
2643 else
2644 talitos_alg = container_of(alg, struct talitos_crypto_alg,
2645 algt.alg.crypto);
2646
2647 /* update context with ptr to dev */2651 /* update context with ptr to dev */
2648 ctx->dev = talitos_alg->dev;2652 ctx->dev = talitos_alg->dev;
2649 2653
@@ -2661,10 +2665,33 @@ static int talitos_cra_init(struct crypto_tfm *tfm) · 11 unmodified lines
2661 return 0;2665 return 0;
2662}2666}
2663 2667
2668static int talitos_cra_init(struct crypto_tfm *tfm)
2669{
2670 struct crypto_alg *alg = tfm->__crt_alg;
2671 struct talitos_crypto_alg *talitos_alg;
2672 struct talitos_ctx *ctx = crypto_tfm_ctx(tfm);
2673
2674 if ((alg->cra_flags & CRYPTO_ALG_TYPE_MASK) == CRYPTO_ALG_TYPE_AHASH)
2675 talitos_alg = container_of(__crypto_ahash_alg(alg),
2676 struct talitos_crypto_alg,
2677 algt.alg.hash);
2678 else
2679 talitos_alg = container_of(alg, struct talitos_crypto_alg,
2680 algt.alg.crypto);
2681
2682 return talitos_init_common(ctx, talitos_alg);
2683}
2684
2664static int talitos_cra_init_aead(struct crypto_aead *tfm)2685static int talitos_cra_init_aead(struct crypto_aead *tfm)
2665{2686{
2666 talitos_cra_init(crypto_aead_tfm(tfm));2687 struct aead_alg *alg = crypto_aead_alg(tfm);
2667 return 0;2688 struct talitos_crypto_alg *talitos_alg;
2689 struct talitos_ctx *ctx = crypto_aead_ctx(tfm);
2690
2691 talitos_alg = container_of(alg, struct talitos_crypto_alg,
2692 algt.alg.aead);
2693
2694 return talitos_init_common(ctx, talitos_alg);
2668}2695}
2669 2696
2670static int talitos_cra_init_ahash(struct crypto_tfm *tfm)2697static int talitos_cra_init_ahash(struct crypto_tfm *tfm)
drivers/edac/i7core_edac.c+1−1
@@ -1866,7 +1866,7 @@ static int i7core_mce_check_error(struct notifier_block *nb, unsigned long val, · 1865 unmodified lines
1866 1866
1867 i7_dev = get_i7core_dev(mce->socketid);1867 i7_dev = get_i7core_dev(mce->socketid);
1868 if (!i7_dev)1868 if (!i7_dev)
1869 return NOTIFY_BAD;1869 return NOTIFY_DONE;
1870 1870
1871 mci = i7_dev->mci;1871 mci = i7_dev->mci;
1872 pvt = mci->pvt_info;1872 pvt = mci->pvt_info;
drivers/edac/sb_edac.c+1−1
@@ -3168,7 +3168,7 @@ static int sbridge_mce_check_error(struct notifier_block *nb, unsigned long val, · 3167 unmodified lines
3168 3168
3169 mci = get_mci_for_node_id(mce->socketid);3169 mci = get_mci_for_node_id(mce->socketid);
3170 if (!mci)3170 if (!mci)
3171 return NOTIFY_BAD;3171 return NOTIFY_DONE;
3172 pvt = mci->pvt_info;3172 pvt = mci->pvt_info;
3173 3173
3174 /*3174 /*
drivers/firmware/efi/vars.c+26−11
@@ -202,29 +202,44 @@ static const struct variable_validate variable_validate[] = { · 201 unmodified lines
202 { NULL_GUID, "", NULL },202 { NULL_GUID, "", NULL },
203};203};
204 204
205/*
206 * Check if @var_name matches the pattern given in @match_name.
207 *
208 * @var_name: an array of @len non-NUL characters.
209 * @match_name: a NUL-terminated pattern string, optionally ending in "*". A
210 * final "*" character matches any trailing characters @var_name,
211 * including the case when there are none left in @var_name.
212 * @match: on output, the number of non-wildcard characters in @match_name
213 * that @var_name matches, regardless of the return value.
214 * @return: whether @var_name fully matches @match_name.
215 */
205static bool216static bool
206variable_matches(const char *var_name, size_t len, const char *match_name,217variable_matches(const char *var_name, size_t len, const char *match_name,
207 int *match)218 int *match)
208{219{
209 for (*match = 0; ; (*match)++) {220 for (*match = 0; ; (*match)++) {
210 char c = match_name[*match];221 char c = match_name[*match];
211 char u = var_name[*match];
212 222
213 /* Wildcard in the matching name means we've matched */223 switch (c) {
214 if (c == '*')224 case '*':
225 /* Wildcard in @match_name means we've matched. */
215 return true;226 return true;
216 227
217 /* Case sensitive match */228 case '\0':
218 if (!c && *match == len)229 /* @match_name has ended. Has @var_name too? */
219 return true;230 return (*match == len);
220 231
221 if (c != u)232 default:
233 /*
234 * We've reached a non-wildcard char in @match_name.
235 * Continue only if there's an identical character in
236 * @var_name.
237 */
238 if (*match < len && c == var_name[*match])
239 continue;
222 return false;240 return false;
223 241 }
224 if (!c)
225 return true;
226 }242 }
227 return true;
228}243}
229 244
230bool245bool
drivers/firmware/psci.c+1−1
@@ -360,7 +360,7 @@ static struct cpuidle_ops psci_cpuidle_ops __initdata = { · 359 unmodified lines
360 .init = psci_dt_cpu_init_idle,360 .init = psci_dt_cpu_init_idle,
361};361};
362 362
363CPUIDLE_METHOD_OF_DECLARE(psci, "arm,psci", &psci_cpuidle_ops);363CPUIDLE_METHOD_OF_DECLARE(psci, "psci", &psci_cpuidle_ops);
364#endif364#endif
365#endif365#endif
366 366
drivers/gpu/drm/amd/amdgpu/amdgpu_atpx_handler.c+7−4
@@ -63,10 +63,6 @@ bool amdgpu_has_atpx(void) { · 62 unmodified lines
63 return amdgpu_atpx_priv.atpx_detected;63 return amdgpu_atpx_priv.atpx_detected;
64}64}
65 65
66bool amdgpu_has_atpx_dgpu_power_cntl(void) {
67 return amdgpu_atpx_priv.atpx.functions.power_cntl;
68}
69
70/**66/**
71 * amdgpu_atpx_call - call an ATPX method67 * amdgpu_atpx_call - call an ATPX method
72 *68 *
@@ -146,6 +142,13 @@ static void amdgpu_atpx_parse_functions(struct amdgpu_atpx_functions *f, u32 mas · 73 unmodified lines
146 */142 */
147static int amdgpu_atpx_validate(struct amdgpu_atpx *atpx)143static int amdgpu_atpx_validate(struct amdgpu_atpx *atpx)
148{144{
145 /* make sure required functions are enabled */
146 /* dGPU power control is required */
147 if (atpx->functions.power_cntl == false) {
148 printk("ATPX dGPU power cntl not present, forcing\n");
149 atpx->functions.power_cntl = true;
150 }
151
149 if (atpx->functions.px_params) {152 if (atpx->functions.px_params) {
150 union acpi_object *info;153 union acpi_object *info;
151 struct atpx_px_params output;154 struct atpx_px_params output;
drivers/gpu/drm/amd/amdgpu/amdgpu_device.c+1−7
@@ -62,12 +62,6 @@ static const char *amdgpu_asic_name[] = { · 61 unmodified lines
62 "LAST",62 "LAST",
63};63};
64 64
65#if defined(CONFIG_VGA_SWITCHEROO)
66bool amdgpu_has_atpx_dgpu_power_cntl(void);
67#else
68static inline bool amdgpu_has_atpx_dgpu_power_cntl(void) { return false; }
69#endif
70
71bool amdgpu_device_is_px(struct drm_device *dev)65bool amdgpu_device_is_px(struct drm_device *dev)
72{66{
73 struct amdgpu_device *adev = dev->dev_private;67 struct amdgpu_device *adev = dev->dev_private;
@@ -1485,7 +1479,7 @@ int amdgpu_device_init(struct amdgpu_device *adev, · 1411 unmodified lines
1485 1479
1486 if (amdgpu_runtime_pm == 1)1480 if (amdgpu_runtime_pm == 1)
1487 runtime = true;1481 runtime = true;
1488 if (amdgpu_device_is_px(ddev) && amdgpu_has_atpx_dgpu_power_cntl())1482 if (amdgpu_device_is_px(ddev))
1489 runtime = true;1483 runtime = true;
1490 vga_switcheroo_register_client(adev->pdev, &amdgpu_switcheroo_ops, runtime);1484 vga_switcheroo_register_client(adev->pdev, &amdgpu_switcheroo_ops, runtime);
1491 if (runtime)1485 if (runtime)
drivers/gpu/drm/amd/amdgpu/gmc_v7_0.c+4−1
@@ -910,7 +910,10 @@ static int gmc_v7_0_late_init(void *handle) · 909 unmodified lines
910{910{
911 struct amdgpu_device *adev = (struct amdgpu_device *)handle;911 struct amdgpu_device *adev = (struct amdgpu_device *)handle;
912 912
913 return amdgpu_irq_get(adev, &adev->mc.vm_fault, 0);913 if (amdgpu_vm_fault_stop != AMDGPU_VM_FAULT_STOP_ALWAYS)
914 return amdgpu_irq_get(adev, &adev->mc.vm_fault, 0);
915 else
916 return 0;
914}917}
915 918
916static int gmc_v7_0_sw_init(void *handle)919static int gmc_v7_0_sw_init(void *handle)
drivers/gpu/drm/amd/amdgpu/gmc_v8_0.c+4−1
@@ -870,7 +870,10 @@ static int gmc_v8_0_late_init(void *handle) · 869 unmodified lines
870{870{
871 struct amdgpu_device *adev = (struct amdgpu_device *)handle;871 struct amdgpu_device *adev = (struct amdgpu_device *)handle;
872 872
873 return amdgpu_irq_get(adev, &adev->mc.vm_fault, 0);873 if (amdgpu_vm_fault_stop != AMDGPU_VM_FAULT_STOP_ALWAYS)
874 return amdgpu_irq_get(adev, &adev->mc.vm_fault, 0);
875 else
876 return 0;
874}877}
875 878
876#define mmMC_SEQ_MISC0_FIJI 0xA71879#define mmMC_SEQ_MISC0_FIJI 0xA71
drivers/gpu/drm/drm_dp_mst_topology.c+20−0
@@ -1796,6 +1796,11 @@ int drm_dp_update_payload_part1(struct drm_dp_mst_topology_mgr *mgr) · 1795 unmodified lines
1796 req_payload.start_slot = cur_slots;1796 req_payload.start_slot = cur_slots;
1797 if (mgr->proposed_vcpis[i]) {1797 if (mgr->proposed_vcpis[i]) {
1798 port = container_of(mgr->proposed_vcpis[i], struct drm_dp_mst_port, vcpi);1798 port = container_of(mgr->proposed_vcpis[i], struct drm_dp_mst_port, vcpi);
1799 port = drm_dp_get_validated_port_ref(mgr, port);
1800 if (!port) {
1801 mutex_unlock(&mgr->payload_lock);
1802 return -EINVAL;
1803 }
1799 req_payload.num_slots = mgr->proposed_vcpis[i]->num_slots;1804 req_payload.num_slots = mgr->proposed_vcpis[i]->num_slots;
1800 req_payload.vcpi = mgr->proposed_vcpis[i]->vcpi;1805 req_payload.vcpi = mgr->proposed_vcpis[i]->vcpi;
1801 } else {1806 } else {
@@ -1823,6 +1828,9 @@ int drm_dp_update_payload_part1(struct drm_dp_mst_topology_mgr *mgr) · 21 unmodified lines
1823 mgr->payloads[i].payload_state = req_payload.payload_state;1828 mgr->payloads[i].payload_state = req_payload.payload_state;
1824 }1829 }
1825 cur_slots += req_payload.num_slots;1830 cur_slots += req_payload.num_slots;
1831
1832 if (port)
1833 drm_dp_put_port(port);
1826 }1834 }
1827 1835
1828 for (i = 0; i < mgr->max_payloads; i++) {1836 for (i = 0; i < mgr->max_payloads; i++) {
@@ -2128,6 +2136,8 @@ int drm_dp_mst_topology_mgr_resume(struct drm_dp_mst_topology_mgr *mgr) · 299 unmodified lines
2128 2136
2129 if (mgr->mst_primary) {2137 if (mgr->mst_primary) {
2130 int sret;2138 int sret;
2139 u8 guid[16];
2140
2131 sret = drm_dp_dpcd_read(mgr->aux, DP_DPCD_REV, mgr->dpcd, DP_RECEIVER_CAP_SIZE);2141 sret = drm_dp_dpcd_read(mgr->aux, DP_DPCD_REV, mgr->dpcd, DP_RECEIVER_CAP_SIZE);
2132 if (sret != DP_RECEIVER_CAP_SIZE) {2142 if (sret != DP_RECEIVER_CAP_SIZE) {
2133 DRM_DEBUG_KMS("dpcd read failed - undocked during suspend?\n");2143 DRM_DEBUG_KMS("dpcd read failed - undocked during suspend?\n");
@@ -2142,6 +2152,16 @@ int drm_dp_mst_topology_mgr_resume(struct drm_dp_mst_topology_mgr *mgr) · 8 unmodified lines
2142 ret = -1;2152 ret = -1;
2143 goto out_unlock;2153 goto out_unlock;
2144 }2154 }
2155
2156 /* Some hubs forget their guids after they resume */
2157 sret = drm_dp_dpcd_read(mgr->aux, DP_GUID, guid, 16);
2158 if (sret != 16) {
2159 DRM_DEBUG_KMS("dpcd read failed - undocked during suspend?\n");
2160 ret = -1;
2161 goto out_unlock;
2162 }
2163 drm_dp_check_mstb_guid(mgr->mst_primary, guid);
2164
2145 ret = 0;2165 ret = 0;
2146 } else2166 } else
2147 ret = -1;2167 ret = -1;
drivers/gpu/drm/etnaviv/etnaviv_gpu.c+18−13
@@ -572,6 +572,24 @@ int etnaviv_gpu_init(struct etnaviv_gpu *gpu) · 571 unmodified lines
572 goto fail;572 goto fail;
573 }573 }
574 574
575 /*
576 * Set the GPU linear window to be at the end of the DMA window, where
577 * the CMA area is likely to reside. This ensures that we are able to
578 * map the command buffers while having the linear window overlap as
579 * much RAM as possible, so we can optimize mappings for other buffers.
580 *
581 * For 3D cores only do this if MC2.0 is present, as with MC1.0 it leads
582 * to different views of the memory on the individual engines.
583 */
584 if (!(gpu->identity.features & chipFeatures_PIPE_3D) ||
585 (gpu->identity.minor_features0 & chipMinorFeatures0_MC20)) {
586 u32 dma_mask = (u32)dma_get_required_mask(gpu->dev);
587 if (dma_mask < PHYS_OFFSET + SZ_2G)
588 gpu->memory_base = PHYS_OFFSET;
589 else
590 gpu->memory_base = dma_mask - SZ_2G + 1;
591 }
592
575 ret = etnaviv_hw_reset(gpu);593 ret = etnaviv_hw_reset(gpu);
576 if (ret)594 if (ret)
577 goto fail;595 goto fail;
@@ -1566,7 +1584,6 @@ static int etnaviv_gpu_platform_probe(struct platform_device *pdev) · 988 unmodified lines
1566{1584{
1567 struct device *dev = &pdev->dev;1585 struct device *dev = &pdev->dev;
1568 struct etnaviv_gpu *gpu;1586 struct etnaviv_gpu *gpu;
1569 u32 dma_mask;
1570 int err = 0;1587 int err = 0;
1571 1588
1572 gpu = devm_kzalloc(dev, sizeof(*gpu), GFP_KERNEL);1589 gpu = devm_kzalloc(dev, sizeof(*gpu), GFP_KERNEL);
@@ -1576,18 +1593,6 @@ static int etnaviv_gpu_platform_probe(struct platform_device *pdev) · 3 unmodified lines
1576 gpu->dev = &pdev->dev;1593 gpu->dev = &pdev->dev;
1577 mutex_init(&gpu->lock);1594 mutex_init(&gpu->lock);
1578 1595
1579 /*
1580 * Set the GPU linear window to be at the end of the DMA window, where
1581 * the CMA area is likely to reside. This ensures that we are able to
1582 * map the command buffers while having the linear window overlap as
1583 * much RAM as possible, so we can optimize mappings for other buffers.
1584 */
1585 dma_mask = (u32)dma_get_required_mask(dev);
1586 if (dma_mask < PHYS_OFFSET + SZ_2G)
1587 gpu->memory_base = PHYS_OFFSET;
1588 else
1589 gpu->memory_base = dma_mask - SZ_2G + 1;
1590
1591 /* Map registers: */1596 /* Map registers: */
1592 gpu->mmio = etnaviv_ioremap(pdev, NULL, dev_name(gpu->dev));1597 gpu->mmio = etnaviv_ioremap(pdev, NULL, dev_name(gpu->dev));
1593 if (IS_ERR(gpu->mmio))1598 if (IS_ERR(gpu->mmio))
drivers/gpu/drm/radeon/evergreen.c+153−1
@@ -2608,10 +2608,152 @@ static void evergreen_agp_enable(struct radeon_device *rdev) · 2607 unmodified lines
2608 WREG32(VM_CONTEXT1_CNTL, 0);2608 WREG32(VM_CONTEXT1_CNTL, 0);
2609}2609}
2610 2610
2611static const unsigned ni_dig_offsets[] =
2612{
2613 NI_DIG0_REGISTER_OFFSET,
2614 NI_DIG1_REGISTER_OFFSET,
2615 NI_DIG2_REGISTER_OFFSET,
2616 NI_DIG3_REGISTER_OFFSET,
2617 NI_DIG4_REGISTER_OFFSET,
2618 NI_DIG5_REGISTER_OFFSET
2619};
2620
2621static const unsigned ni_tx_offsets[] =
2622{
2623 NI_DCIO_UNIPHY0_UNIPHY_TX_CONTROL1,
2624 NI_DCIO_UNIPHY1_UNIPHY_TX_CONTROL1,
2625 NI_DCIO_UNIPHY2_UNIPHY_TX_CONTROL1,
2626 NI_DCIO_UNIPHY3_UNIPHY_TX_CONTROL1,
2627 NI_DCIO_UNIPHY4_UNIPHY_TX_CONTROL1,
2628 NI_DCIO_UNIPHY5_UNIPHY_TX_CONTROL1
2629};
2630
2631static const unsigned evergreen_dp_offsets[] =
2632{
2633 EVERGREEN_DP0_REGISTER_OFFSET,
2634 EVERGREEN_DP1_REGISTER_OFFSET,
2635 EVERGREEN_DP2_REGISTER_OFFSET,
2636 EVERGREEN_DP3_REGISTER_OFFSET,
2637 EVERGREEN_DP4_REGISTER_OFFSET,
2638 EVERGREEN_DP5_REGISTER_OFFSET
2639};
2640
2641
2642/*
2643 * Assumption is that EVERGREEN_CRTC_MASTER_EN enable for requested crtc
2644 * We go from crtc to connector and it is not relible since it
2645 * should be an opposite direction .If crtc is enable then
2646 * find the dig_fe which selects this crtc and insure that it enable.
2647 * if such dig_fe is found then find dig_be which selects found dig_be and
2648 * insure that it enable and in DP_SST mode.
2649 * if UNIPHY_PLL_CONTROL1.enable then we should disconnect timing
2650 * from dp symbols clocks .
2651 */
2652static bool evergreen_is_dp_sst_stream_enabled(struct radeon_device *rdev,
2653 unsigned crtc_id, unsigned *ret_dig_fe)
2654{
2655 unsigned i;
2656 unsigned dig_fe;
2657 unsigned dig_be;
2658 unsigned dig_en_be;
2659 unsigned uniphy_pll;
2660 unsigned digs_fe_selected;
2661 unsigned dig_be_mode;
2662 unsigned dig_fe_mask;
2663 bool is_enabled = false;
2664 bool found_crtc = false;
2665
2666 /* loop through all running dig_fe to find selected crtc */
2667 for (i = 0; i < ARRAY_SIZE(ni_dig_offsets); i++) {
2668 dig_fe = RREG32(NI_DIG_FE_CNTL + ni_dig_offsets[i]);
2669 if (dig_fe & NI_DIG_FE_CNTL_SYMCLK_FE_ON &&
2670 crtc_id == NI_DIG_FE_CNTL_SOURCE_SELECT(dig_fe)) {
2671 /* found running pipe */
2672 found_crtc = true;
2673 dig_fe_mask = 1 << i;
2674 dig_fe = i;
2675 break;
2676 }
2677 }
2678
2679 if (found_crtc) {
2680 /* loop through all running dig_be to find selected dig_fe */
2681 for (i = 0; i < ARRAY_SIZE(ni_dig_offsets); i++) {
2682 dig_be = RREG32(NI_DIG_BE_CNTL + ni_dig_offsets[i]);
2683 /* if dig_fe_selected by dig_be? */
2684 digs_fe_selected = NI_DIG_BE_CNTL_FE_SOURCE_SELECT(dig_be);
2685 dig_be_mode = NI_DIG_FE_CNTL_MODE(dig_be);
2686 if (dig_fe_mask & digs_fe_selected &&
2687 /* if dig_be in sst mode? */
2688 dig_be_mode == NI_DIG_BE_DPSST) {
2689 dig_en_be = RREG32(NI_DIG_BE_EN_CNTL +
2690 ni_dig_offsets[i]);
2691 uniphy_pll = RREG32(NI_DCIO_UNIPHY0_PLL_CONTROL1 +
2692 ni_tx_offsets[i]);
2693 /* dig_be enable and tx is running */
2694 if (dig_en_be & NI_DIG_BE_EN_CNTL_ENABLE &&
2695 dig_en_be & NI_DIG_BE_EN_CNTL_SYMBCLK_ON &&
2696 uniphy_pll & NI_DCIO_UNIPHY0_PLL_CONTROL1_ENABLE) {
2697 is_enabled = true;
2698 *ret_dig_fe = dig_fe;
2699 break;
2700 }
2701 }
2702 }
2703 }
2704
2705 return is_enabled;
2706}
2707
2708/*
2709 * Blank dig when in dp sst mode
2710 * Dig ignores crtc timing
2711 */
2712static void evergreen_blank_dp_output(struct radeon_device *rdev,
2713 unsigned dig_fe)
2714{
2715 unsigned stream_ctrl;
2716 unsigned fifo_ctrl;
2717 unsigned counter = 0;
2718
2719 if (dig_fe >= ARRAY_SIZE(evergreen_dp_offsets)) {
2720 DRM_ERROR("invalid dig_fe %d\n", dig_fe);
2721 return;
2722 }
2723
2724 stream_ctrl = RREG32(EVERGREEN_DP_VID_STREAM_CNTL +
2725 evergreen_dp_offsets[dig_fe]);
2726 if (!(stream_ctrl & EVERGREEN_DP_VID_STREAM_CNTL_ENABLE)) {
2727 DRM_ERROR("dig %d , should be enable\n", dig_fe);
2728 return;
2729 }
2730
2731 stream_ctrl &=~EVERGREEN_DP_VID_STREAM_CNTL_ENABLE;
2732 WREG32(EVERGREEN_DP_VID_STREAM_CNTL +
2733 evergreen_dp_offsets[dig_fe], stream_ctrl);
2734
2735 stream_ctrl = RREG32(EVERGREEN_DP_VID_STREAM_CNTL +
2736 evergreen_dp_offsets[dig_fe]);
2737 while (counter < 32 && stream_ctrl & EVERGREEN_DP_VID_STREAM_STATUS) {
2738 msleep(1);
2739 counter++;
2740 stream_ctrl = RREG32(EVERGREEN_DP_VID_STREAM_CNTL +
2741 evergreen_dp_offsets[dig_fe]);
2742 }
2743 if (counter >= 32 )
2744 DRM_ERROR("counter exceeds %d\n", counter);
2745
2746 fifo_ctrl = RREG32(EVERGREEN_DP_STEER_FIFO + evergreen_dp_offsets[dig_fe]);
2747 fifo_ctrl |= EVERGREEN_DP_STEER_FIFO_RESET;
2748 WREG32(EVERGREEN_DP_STEER_FIFO + evergreen_dp_offsets[dig_fe], fifo_ctrl);
2749
2750}
2751
2611void evergreen_mc_stop(struct radeon_device *rdev, struct evergreen_mc_save *save)2752void evergreen_mc_stop(struct radeon_device *rdev, struct evergreen_mc_save *save)
2612{2753{
2613 u32 crtc_enabled, tmp, frame_count, blackout;2754 u32 crtc_enabled, tmp, frame_count, blackout;
2614 int i, j;2755 int i, j;
2756 unsigned dig_fe;
2615 2757
2616 if (!ASIC_IS_NODCE(rdev)) {2758 if (!ASIC_IS_NODCE(rdev)) {
2617 save->vga_render_control = RREG32(VGA_RENDER_CONTROL);2759 save->vga_render_control = RREG32(VGA_RENDER_CONTROL);
@@ -2651,7 +2793,17 @@ void evergreen_mc_stop(struct radeon_device *rdev, struct evergreen_mc_save *sav · 33 unmodified lines
2651 break;2793 break;
2652 udelay(1);2794 udelay(1);
2653 }2795 }
2654 2796 /*we should disable dig if it drives dp sst*/
2797 /*but we are in radeon_device_init and the topology is unknown*/
2798 /*and it is available after radeon_modeset_init*/
2799 /*the following method radeon_atom_encoder_dpms_dig*/
2800 /*does the job if we initialize it properly*/
2801 /*for now we do it this manually*/
2802 /**/
2803 if (ASIC_IS_DCE5(rdev) &&
2804 evergreen_is_dp_sst_stream_enabled(rdev, i ,&dig_fe))
2805 evergreen_blank_dp_output(rdev, dig_fe);
2806 /*we could remove 6 lines below*/
2655 /* XXX this is a hack to avoid strange behavior with EFI on certain systems */2807 /* XXX this is a hack to avoid strange behavior with EFI on certain systems */
2656 WREG32(EVERGREEN_CRTC_UPDATE_LOCK + crtc_offsets[i], 1);2808 WREG32(EVERGREEN_CRTC_UPDATE_LOCK + crtc_offsets[i], 1);
2657 tmp = RREG32(EVERGREEN_CRTC_CONTROL + crtc_offsets[i]);2809 tmp = RREG32(EVERGREEN_CRTC_CONTROL + crtc_offsets[i]);
drivers/gpu/drm/radeon/evergreen_reg.h+46−0
@@ -250,8 +250,43 @@ · 249 unmodified lines
250 250
251/* HDMI blocks at 0x7030, 0x7c30, 0x10830, 0x11430, 0x12030, 0x12c30 */251/* HDMI blocks at 0x7030, 0x7c30, 0x10830, 0x11430, 0x12030, 0x12c30 */
252#define EVERGREEN_HDMI_BASE 0x7030252#define EVERGREEN_HDMI_BASE 0x7030
253/*DIG block*/
254#define NI_DIG0_REGISTER_OFFSET (0x7000 - 0x7000)
255#define NI_DIG1_REGISTER_OFFSET (0x7C00 - 0x7000)
256#define NI_DIG2_REGISTER_OFFSET (0x10800 - 0x7000)
257#define NI_DIG3_REGISTER_OFFSET (0x11400 - 0x7000)
258#define NI_DIG4_REGISTER_OFFSET (0x12000 - 0x7000)
259#define NI_DIG5_REGISTER_OFFSET (0x12C00 - 0x7000)
260
261
262#define NI_DIG_FE_CNTL 0x7000
263# define NI_DIG_FE_CNTL_SOURCE_SELECT(x) ((x) & 0x3)
264# define NI_DIG_FE_CNTL_SYMCLK_FE_ON (1<<24)
265
266
267#define NI_DIG_BE_CNTL 0x7140
268# define NI_DIG_BE_CNTL_FE_SOURCE_SELECT(x) (((x) >> 8 ) & 0x3F)
269# define NI_DIG_FE_CNTL_MODE(x) (((x) >> 16) & 0x7 )
270
271#define NI_DIG_BE_EN_CNTL 0x7144
272# define NI_DIG_BE_EN_CNTL_ENABLE (1 << 0)
273# define NI_DIG_BE_EN_CNTL_SYMBCLK_ON (1 << 8)
274# define NI_DIG_BE_DPSST 0
253 275
254/* Display Port block */276/* Display Port block */
277#define EVERGREEN_DP0_REGISTER_OFFSET (0x730C - 0x730C)
278#define EVERGREEN_DP1_REGISTER_OFFSET (0x7F0C - 0x730C)
279#define EVERGREEN_DP2_REGISTER_OFFSET (0x10B0C - 0x730C)
280#define EVERGREEN_DP3_REGISTER_OFFSET (0x1170C - 0x730C)
281#define EVERGREEN_DP4_REGISTER_OFFSET (0x1230C - 0x730C)
282#define EVERGREEN_DP5_REGISTER_OFFSET (0x12F0C - 0x730C)
283
284
285#define EVERGREEN_DP_VID_STREAM_CNTL 0x730C
286# define EVERGREEN_DP_VID_STREAM_CNTL_ENABLE (1 << 0)
287# define EVERGREEN_DP_VID_STREAM_STATUS (1 <<16)
288#define EVERGREEN_DP_STEER_FIFO 0x7310
289# define EVERGREEN_DP_STEER_FIFO_RESET (1 << 0)
255#define EVERGREEN_DP_SEC_CNTL 0x7280290#define EVERGREEN_DP_SEC_CNTL 0x7280
256# define EVERGREEN_DP_SEC_STREAM_ENABLE (1 << 0)291# define EVERGREEN_DP_SEC_STREAM_ENABLE (1 << 0)
257# define EVERGREEN_DP_SEC_ASP_ENABLE (1 << 4)292# define EVERGREEN_DP_SEC_ASP_ENABLE (1 << 4)
@@ -266,4 +301,15 @@ · 8 unmodified lines
266# define EVERGREEN_DP_SEC_N_BASE_MULTIPLE(x) (((x) & 0xf) << 24)301# define EVERGREEN_DP_SEC_N_BASE_MULTIPLE(x) (((x) & 0xf) << 24)
267# define EVERGREEN_DP_SEC_SS_EN (1 << 28)302# define EVERGREEN_DP_SEC_SS_EN (1 << 28)
268 303
304/*DCIO_UNIPHY block*/
305#define NI_DCIO_UNIPHY0_UNIPHY_TX_CONTROL1 (0x6600 -0x6600)
306#define NI_DCIO_UNIPHY1_UNIPHY_TX_CONTROL1 (0x6640 -0x6600)
307#define NI_DCIO_UNIPHY2_UNIPHY_TX_CONTROL1 (0x6680 - 0x6600)
308#define NI_DCIO_UNIPHY3_UNIPHY_TX_CONTROL1 (0x66C0 - 0x6600)
309#define NI_DCIO_UNIPHY4_UNIPHY_TX_CONTROL1 (0x6700 - 0x6600)
310#define NI_DCIO_UNIPHY5_UNIPHY_TX_CONTROL1 (0x6740 - 0x6600)
311
312#define NI_DCIO_UNIPHY0_PLL_CONTROL1 0x6618
313# define NI_DCIO_UNIPHY0_PLL_CONTROL1_ENABLE (1 << 0)
314
269#endif315#endif
drivers/gpu/drm/ttm/ttm_bo.c+4−13
@@ -230,22 +230,13 @@ EXPORT_SYMBOL(ttm_bo_del_sub_from_lru); · 229 unmodified lines
230 230
231void ttm_bo_move_to_lru_tail(struct ttm_buffer_object *bo)231void ttm_bo_move_to_lru_tail(struct ttm_buffer_object *bo)
232{232{
233 struct ttm_bo_device *bdev = bo->bdev;233 int put_count = 0;
234 struct ttm_mem_type_manager *man;
235 234
236 lockdep_assert_held(&bo->resv->lock.base);235 lockdep_assert_held(&bo->resv->lock.base);
237 236
238 if (bo->mem.placement & TTM_PL_FLAG_NO_EVICT) {237 put_count = ttm_bo_del_from_lru(bo);
239 list_del_init(&bo->swap);238 ttm_bo_list_ref_sub(bo, put_count, true);
240 list_del_init(&bo->lru);239 ttm_bo_add_to_lru(bo);
241
242 } else {
243 if (bo->ttm && !(bo->ttm->page_flags & TTM_PAGE_FLAG_SG))
244 list_move_tail(&bo->swap, &bo->glob->swap_lru);
245
246 man = &bdev->man[bo->mem.mem_type];
247 list_move_tail(&bo->lru, &man->lru);
248 }
249}240}
250EXPORT_SYMBOL(ttm_bo_move_to_lru_tail);241EXPORT_SYMBOL(ttm_bo_move_to_lru_tail);
251 242
drivers/gpu/drm/virtio/virtgpu_display.c+12−0
@@ -267,11 +267,23 @@ static int virtio_gpu_crtc_atomic_check(struct drm_crtc *crtc, · 266 unmodified lines
267 return 0;267 return 0;
268}268}
269 269
270static void virtio_gpu_crtc_atomic_flush(struct drm_crtc *crtc,
271 struct drm_crtc_state *old_state)
272{
273 unsigned long flags;
274
275 spin_lock_irqsave(&crtc->dev->event_lock, flags);
276 if (crtc->state->event)
277 drm_crtc_send_vblank_event(crtc, crtc->state->event);
278 spin_unlock_irqrestore(&crtc->dev->event_lock, flags);
279}
280
270static const struct drm_crtc_helper_funcs virtio_gpu_crtc_helper_funcs = {281static const struct drm_crtc_helper_funcs virtio_gpu_crtc_helper_funcs = {
271 .enable = virtio_gpu_crtc_enable,282 .enable = virtio_gpu_crtc_enable,
272 .disable = virtio_gpu_crtc_disable,283 .disable = virtio_gpu_crtc_disable,
273 .mode_set_nofb = virtio_gpu_crtc_mode_set_nofb,284 .mode_set_nofb = virtio_gpu_crtc_mode_set_nofb,
274 .atomic_check = virtio_gpu_crtc_atomic_check,285 .atomic_check = virtio_gpu_crtc_atomic_check,
286 .atomic_flush = virtio_gpu_crtc_atomic_flush,
275};287};
276 288
277static void virtio_gpu_enc_mode_set(struct drm_encoder *encoder,289static void virtio_gpu_enc_mode_set(struct drm_encoder *encoder,
drivers/gpu/drm/vmwgfx/vmwgfx_execbuf.c+5−5
@@ -3293,19 +3293,19 @@ static const struct vmw_cmd_entry vmw_cmd_entries[SVGA_3D_CMD_MAX] = { · 3292 unmodified lines
3293 &vmw_cmd_dx_cid_check, true, false, true),3293 &vmw_cmd_dx_cid_check, true, false, true),
3294 VMW_CMD_DEF(SVGA_3D_CMD_DX_DEFINE_QUERY, &vmw_cmd_dx_define_query,3294 VMW_CMD_DEF(SVGA_3D_CMD_DX_DEFINE_QUERY, &vmw_cmd_dx_define_query,
3295 true, false, true),3295 true, false, true),
3296 VMW_CMD_DEF(SVGA_3D_CMD_DX_DESTROY_QUERY, &vmw_cmd_ok,3296 VMW_CMD_DEF(SVGA_3D_CMD_DX_DESTROY_QUERY, &vmw_cmd_dx_cid_check,
3297 true, false, true),3297 true, false, true),
3298 VMW_CMD_DEF(SVGA_3D_CMD_DX_BIND_QUERY, &vmw_cmd_dx_bind_query,3298 VMW_CMD_DEF(SVGA_3D_CMD_DX_BIND_QUERY, &vmw_cmd_dx_bind_query,
3299 true, false, true),3299 true, false, true),
3300 VMW_CMD_DEF(SVGA_3D_CMD_DX_SET_QUERY_OFFSET,3300 VMW_CMD_DEF(SVGA_3D_CMD_DX_SET_QUERY_OFFSET,
3301 &vmw_cmd_ok, true, false, true),3301 &vmw_cmd_dx_cid_check, true, false, true),
3302 VMW_CMD_DEF(SVGA_3D_CMD_DX_BEGIN_QUERY, &vmw_cmd_ok,3302 VMW_CMD_DEF(SVGA_3D_CMD_DX_BEGIN_QUERY, &vmw_cmd_dx_cid_check,
3303 true, false, true),3303 true, false, true),
3304 VMW_CMD_DEF(SVGA_3D_CMD_DX_END_QUERY, &vmw_cmd_ok,3304 VMW_CMD_DEF(SVGA_3D_CMD_DX_END_QUERY, &vmw_cmd_dx_cid_check,
3305 true, false, true),3305 true, false, true),
3306 VMW_CMD_DEF(SVGA_3D_CMD_DX_READBACK_QUERY, &vmw_cmd_invalid,3306 VMW_CMD_DEF(SVGA_3D_CMD_DX_READBACK_QUERY, &vmw_cmd_invalid,
3307 true, false, true),3307 true, false, true),
3308 VMW_CMD_DEF(SVGA_3D_CMD_DX_SET_PREDICATION, &vmw_cmd_invalid,3308 VMW_CMD_DEF(SVGA_3D_CMD_DX_SET_PREDICATION, &vmw_cmd_dx_cid_check,
3309 true, false, true),3309 true, false, true),
3310 VMW_CMD_DEF(SVGA_3D_CMD_DX_SET_VIEWPORTS, &vmw_cmd_dx_cid_check,3310 VMW_CMD_DEF(SVGA_3D_CMD_DX_SET_VIEWPORTS, &vmw_cmd_dx_cid_check,
3311 true, false, true),3311 true, false, true),
drivers/gpu/drm/vmwgfx/vmwgfx_fb.c+3−3
@@ -573,9 +573,9 @@ static int vmw_fb_set_par(struct fb_info *info) · 572 unmodified lines
573 mode = old_mode;573 mode = old_mode;
574 old_mode = NULL;574 old_mode = NULL;
575 } else if (!vmw_kms_validate_mode_vram(vmw_priv,575 } else if (!vmw_kms_validate_mode_vram(vmw_priv,
576 mode->hdisplay *576 mode->hdisplay *
577 (var->bits_per_pixel + 7) / 8,577 DIV_ROUND_UP(var->bits_per_pixel, 8),
578 mode->vdisplay)) {578 mode->vdisplay)) {
579 drm_mode_destroy(vmw_priv->dev, mode);579 drm_mode_destroy(vmw_priv->dev, mode);
580 return -EINVAL;580 return -EINVAL;
581 }581 }
drivers/i2c/busses/Kconfig+2−2
@@ -975,10 +975,10 @@ config I2C_XLR · 974 unmodified lines
975 975
976config I2C_XLP9XX976config I2C_XLP9XX
977 tristate "XLP9XX I2C support"977 tristate "XLP9XX I2C support"
978 depends on CPU_XLP || COMPILE_TEST978 depends on CPU_XLP || ARCH_VULCAN || COMPILE_TEST
979 help979 help
980 This driver enables support for the on-chip I2C interface of980 This driver enables support for the on-chip I2C interface of
981 the Broadcom XLP9xx/XLP5xx MIPS processors.981 the Broadcom XLP9xx/XLP5xx MIPS and Vulcan ARM64 processors.
982 982
983 This driver can also be built as a module. If so, the module will983 This driver can also be built as a module. If so, the module will
984 be called i2c-xlp9xx.984 be called i2c-xlp9xx.
drivers/i2c/busses/i2c-cpm.c+2−2
@@ -116,8 +116,8 @@ struct cpm_i2c { · 115 unmodified lines
116 cbd_t __iomem *rbase;116 cbd_t __iomem *rbase;
117 u_char *txbuf[CPM_MAXBD];117 u_char *txbuf[CPM_MAXBD];
118 u_char *rxbuf[CPM_MAXBD];118 u_char *rxbuf[CPM_MAXBD];
119 u32 txdma[CPM_MAXBD];119 dma_addr_t txdma[CPM_MAXBD];
120 u32 rxdma[CPM_MAXBD];120 dma_addr_t rxdma[CPM_MAXBD];
121};121};
122 122
123static irqreturn_t cpm_i2c_interrupt(int irq, void *dev_id)123static irqreturn_t cpm_i2c_interrupt(int irq, void *dev_id)
drivers/i2c/busses/i2c-exynos5.c+19−5
@@ -671,7 +671,9 @@ static int exynos5_i2c_xfer(struct i2c_adapter *adap, · 670 unmodified lines
671 return -EIO;671 return -EIO;
672 }672 }
673 673
674 clk_prepare_enable(i2c->clk);674 ret = clk_enable(i2c->clk);
675 if (ret)
676 return ret;
675 677
676 for (i = 0; i < num; i++, msgs++) {678 for (i = 0; i < num; i++, msgs++) {
677 stop = (i == num - 1);679 stop = (i == num - 1);
@@ -695,7 +697,7 @@ static int exynos5_i2c_xfer(struct i2c_adapter *adap, · 17 unmodified lines
695 }697 }
696 698
697 out:699 out:
698 clk_disable_unprepare(i2c->clk);700 clk_disable(i2c->clk);
699 return ret;701 return ret;
700}702}
701 703
@@ -747,7 +749,9 @@ static int exynos5_i2c_probe(struct platform_device *pdev) · 45 unmodified lines
747 return -ENOENT;749 return -ENOENT;
748 }750 }
749 751
750 clk_prepare_enable(i2c->clk);752 ret = clk_prepare_enable(i2c->clk);
753 if (ret)
754 return ret;
751 755
752 mem = platform_get_resource(pdev, IORESOURCE_MEM, 0);756 mem = platform_get_resource(pdev, IORESOURCE_MEM, 0);
753 i2c->regs = devm_ioremap_resource(&pdev->dev, mem);757 i2c->regs = devm_ioremap_resource(&pdev->dev, mem);
@@ -799,6 +803,10 @@ static int exynos5_i2c_probe(struct platform_device *pdev) · 45 unmodified lines
799 803
800 platform_set_drvdata(pdev, i2c);804 platform_set_drvdata(pdev, i2c);
801 805
806 clk_disable(i2c->clk);
807
808 return 0;
809
802 err_clk:810 err_clk:
803 clk_disable_unprepare(i2c->clk);811 clk_disable_unprepare(i2c->clk);
804 return ret;812 return ret;
@@ -810,6 +818,8 @@ static int exynos5_i2c_remove(struct platform_device *pdev) · 5 unmodified lines
810 818
811 i2c_del_adapter(&i2c->adap);819 i2c_del_adapter(&i2c->adap);
812 820
821 clk_unprepare(i2c->clk);
822
813 return 0;823 return 0;
814}824}
815 825
@@ -821,6 +831,8 @@ static int exynos5_i2c_suspend_noirq(struct device *dev) · 5 unmodified lines
821 831
822 i2c->suspended = 1;832 i2c->suspended = 1;
823 833
834 clk_unprepare(i2c->clk);
835
824 return 0;836 return 0;
825}837}
826 838
@@ -830,7 +842,9 @@ static int exynos5_i2c_resume_noirq(struct device *dev) · 3 unmodified lines
830 struct exynos5_i2c *i2c = platform_get_drvdata(pdev);842 struct exynos5_i2c *i2c = platform_get_drvdata(pdev);
831 int ret = 0;843 int ret = 0;
832 844
833 clk_prepare_enable(i2c->clk);845 ret = clk_prepare_enable(i2c->clk);
846 if (ret)
847 return ret;
834 848
835 ret = exynos5_hsi2c_clock_setup(i2c);849 ret = exynos5_hsi2c_clock_setup(i2c);
836 if (ret) {850 if (ret) {
@@ -839,7 +853,7 @@ static int exynos5_i2c_resume_noirq(struct device *dev) · 2 unmodified lines
839 }853 }
840 854
841 exynos5_i2c_init(i2c);855 exynos5_i2c_init(i2c);
842 clk_disable_unprepare(i2c->clk);856 clk_disable(i2c->clk);
843 i2c->suspended = 0;857 i2c->suspended = 0;
844 858
845 return 0;859 return 0;
drivers/i2c/busses/i2c-ismt.c+2−0
@@ -75,6 +75,7 @@ · 74 unmodified lines
75/* PCI DIDs for the Intel SMBus Message Transport (SMT) Devices */75/* PCI DIDs for the Intel SMBus Message Transport (SMT) Devices */
76#define PCI_DEVICE_ID_INTEL_S1200_SMT0 0x0c5976#define PCI_DEVICE_ID_INTEL_S1200_SMT0 0x0c59
77#define PCI_DEVICE_ID_INTEL_S1200_SMT1 0x0c5a77#define PCI_DEVICE_ID_INTEL_S1200_SMT1 0x0c5a
78#define PCI_DEVICE_ID_INTEL_DNV_SMT 0x19ac
78#define PCI_DEVICE_ID_INTEL_AVOTON_SMT 0x1f1579#define PCI_DEVICE_ID_INTEL_AVOTON_SMT 0x1f15
79 80
80#define ISMT_DESC_ENTRIES 2 /* number of descriptor entries */81#define ISMT_DESC_ENTRIES 2 /* number of descriptor entries */
@@ -180,6 +181,7 @@ struct ismt_priv { · 99 unmodified lines
180static const struct pci_device_id ismt_ids[] = {181static const struct pci_device_id ismt_ids[] = {
181 { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_S1200_SMT0) },182 { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_S1200_SMT0) },
182 { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_S1200_SMT1) },183 { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_S1200_SMT1) },
184 { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_DNV_SMT) },
183 { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_AVOTON_SMT) },185 { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_AVOTON_SMT) },
184 { 0, }186 { 0, }
185};187};
drivers/i2c/busses/i2c-rk3x.c+1−0
@@ -855,6 +855,7 @@ static struct rk3x_i2c_soc_data soc_data[3] = { · 854 unmodified lines
855static const struct of_device_id rk3x_i2c_match[] = {855static const struct of_device_id rk3x_i2c_match[] = {
856 { .compatible = "rockchip,rk3066-i2c", .data = (void *)&soc_data[0] },856 { .compatible = "rockchip,rk3066-i2c", .data = (void *)&soc_data[0] },
857 { .compatible = "rockchip,rk3188-i2c", .data = (void *)&soc_data[1] },857 { .compatible = "rockchip,rk3188-i2c", .data = (void *)&soc_data[1] },
858 { .compatible = "rockchip,rk3228-i2c", .data = (void *)&soc_data[2] },
858 { .compatible = "rockchip,rk3288-i2c", .data = (void *)&soc_data[2] },859 { .compatible = "rockchip,rk3288-i2c", .data = (void *)&soc_data[2] },
859 {},860 {},
860};861};
drivers/infiniband/core/cache.c+2−1
@@ -691,7 +691,8 @@ void ib_cache_gid_set_default_gid(struct ib_device *ib_dev, u8 port, · 690 unmodified lines
691 NULL);691 NULL);
692 692
693 /* Coudn't find default GID location */693 /* Coudn't find default GID location */
694 WARN_ON(ix < 0);694 if (WARN_ON(ix < 0))
695 goto release;
695 696
696 zattr_type.gid_type = gid_type;697 zattr_type.gid_type = gid_type;
697 698
drivers/infiniband/core/ucm.c+4−0
@@ -48,6 +48,7 @@ · 47 unmodified lines
48 48
49#include <asm/uaccess.h>49#include <asm/uaccess.h>
50 50
51#include <rdma/ib.h>
51#include <rdma/ib_cm.h>52#include <rdma/ib_cm.h>
52#include <rdma/ib_user_cm.h>53#include <rdma/ib_user_cm.h>
53#include <rdma/ib_marshall.h>54#include <rdma/ib_marshall.h>
@@ -1103,6 +1104,9 @@ static ssize_t ib_ucm_write(struct file *filp, const char __user *buf, · 1049 unmodified lines
1103 struct ib_ucm_cmd_hdr hdr;1104 struct ib_ucm_cmd_hdr hdr;
1104 ssize_t result;1105 ssize_t result;
1105 1106
1107 if (WARN_ON_ONCE(!ib_safe_file_access(filp)))
1108 return -EACCES;
1109
1106 if (len < sizeof(hdr))1110 if (len < sizeof(hdr))
1107 return -EINVAL;1111 return -EINVAL;
1108 1112
drivers/infiniband/core/ucma.c+3−0
@@ -1574,6 +1574,9 @@ static ssize_t ucma_write(struct file *filp, const char __user *buf, · 1573 unmodified lines
1574 struct rdma_ucm_cmd_hdr hdr;1574 struct rdma_ucm_cmd_hdr hdr;
1575 ssize_t ret;1575 ssize_t ret;
1576 1576
1577 if (WARN_ON_ONCE(!ib_safe_file_access(filp)))
1578 return -EACCES;
1579
1577 if (len < sizeof(hdr))1580 if (len < sizeof(hdr))
1578 return -EINVAL;1581 return -EINVAL;
1579 1582
drivers/infiniband/core/uverbs_main.c+5−0
@@ -48,6 +48,8 @@ · 47 unmodified lines
48 48
49#include <asm/uaccess.h>49#include <asm/uaccess.h>
50 50
51#include <rdma/ib.h>
52
51#include "uverbs.h"53#include "uverbs.h"
52 54
53MODULE_AUTHOR("Roland Dreier");55MODULE_AUTHOR("Roland Dreier");
@@ -709,6 +711,9 @@ static ssize_t ib_uverbs_write(struct file *filp, const char __user *buf, · 655 unmodified lines
709 int srcu_key;711 int srcu_key;
710 ssize_t ret;712 ssize_t ret;
711 713
714 if (WARN_ON_ONCE(!ib_safe_file_access(filp)))
715 return -EACCES;
716
712 if (count < sizeof hdr)717 if (count < sizeof hdr)
713 return -EINVAL;718 return -EINVAL;
714 719
drivers/infiniband/core/verbs.c+2−1
@@ -1860,6 +1860,7 @@ EXPORT_SYMBOL(ib_drain_rq); · 1859 unmodified lines
1860void ib_drain_qp(struct ib_qp *qp)1860void ib_drain_qp(struct ib_qp *qp)
1861{1861{
1862 ib_drain_sq(qp);1862 ib_drain_sq(qp);
1863 ib_drain_rq(qp);1863 if (!qp->srq)
1864 ib_drain_rq(qp);
1864}1865}
1865EXPORT_SYMBOL(ib_drain_qp);1866EXPORT_SYMBOL(ib_drain_qp);
drivers/infiniband/hw/cxgb3/iwch_provider.c+2−0
@@ -1390,6 +1390,8 @@ int iwch_register_device(struct iwch_dev *dev) · 1389 unmodified lines
1390 dev->ibdev.iwcm->add_ref = iwch_qp_add_ref;1390 dev->ibdev.iwcm->add_ref = iwch_qp_add_ref;
1391 dev->ibdev.iwcm->rem_ref = iwch_qp_rem_ref;1391 dev->ibdev.iwcm->rem_ref = iwch_qp_rem_ref;
1392 dev->ibdev.iwcm->get_qp = iwch_get_qp;1392 dev->ibdev.iwcm->get_qp = iwch_get_qp;
1393 memcpy(dev->ibdev.iwcm->ifname, dev->rdev.t3cdev_p->lldev->name,
1394 sizeof(dev->ibdev.iwcm->ifname));
1393 1395
1394 ret = ib_register_device(&dev->ibdev, NULL);1396 ret = ib_register_device(&dev->ibdev, NULL);
1395 if (ret)1397 if (ret)
drivers/infiniband/hw/cxgb4/cq.c+1−1
@@ -162,7 +162,7 @@ static int create_cq(struct c4iw_rdev *rdev, struct t4_cq *cq, · 161 unmodified lines
162 cq->bar2_va = c4iw_bar2_addrs(rdev, cq->cqid, T4_BAR2_QTYPE_INGRESS,162 cq->bar2_va = c4iw_bar2_addrs(rdev, cq->cqid, T4_BAR2_QTYPE_INGRESS,
163 &cq->bar2_qid,163 &cq->bar2_qid,
164 user ? &cq->bar2_pa : NULL);164 user ? &cq->bar2_pa : NULL);
165 if (user && !cq->bar2_va) {165 if (user && !cq->bar2_pa) {
166 pr_warn(MOD "%s: cqid %u not in BAR2 range.\n",166 pr_warn(MOD "%s: cqid %u not in BAR2 range.\n",
167 pci_name(rdev->lldi.pdev), cq->cqid);167 pci_name(rdev->lldi.pdev), cq->cqid);
168 ret = -EINVAL;168 ret = -EINVAL;
drivers/infiniband/hw/cxgb4/provider.c+2−0
@@ -580,6 +580,8 @@ int c4iw_register_device(struct c4iw_dev *dev) · 579 unmodified lines
580 dev->ibdev.iwcm->add_ref = c4iw_qp_add_ref;580 dev->ibdev.iwcm->add_ref = c4iw_qp_add_ref;
581 dev->ibdev.iwcm->rem_ref = c4iw_qp_rem_ref;581 dev->ibdev.iwcm->rem_ref = c4iw_qp_rem_ref;
582 dev->ibdev.iwcm->get_qp = c4iw_get_qp;582 dev->ibdev.iwcm->get_qp = c4iw_get_qp;
583 memcpy(dev->ibdev.iwcm->ifname, dev->rdev.lldi.ports[0]->name,
584 sizeof(dev->ibdev.iwcm->ifname));
583 585
584 ret = ib_register_device(&dev->ibdev, NULL);586 ret = ib_register_device(&dev->ibdev, NULL);
585 if (ret)587 if (ret)
drivers/infiniband/hw/cxgb4/qp.c+21−3
@@ -185,6 +185,10 @@ void __iomem *c4iw_bar2_addrs(struct c4iw_rdev *rdev, unsigned int qid, · 184 unmodified lines
185 185
186 if (pbar2_pa)186 if (pbar2_pa)
187 *pbar2_pa = (rdev->bar2_pa + bar2_qoffset) & PAGE_MASK;187 *pbar2_pa = (rdev->bar2_pa + bar2_qoffset) & PAGE_MASK;
188
189 if (is_t4(rdev->lldi.adapter_type))
190 return NULL;
191
188 return rdev->bar2_kva + bar2_qoffset;192 return rdev->bar2_kva + bar2_qoffset;
189}193}
190 194
@@ -270,7 +274,7 @@ static int create_qp(struct c4iw_rdev *rdev, struct t4_wq *wq, · 79 unmodified lines
270 /*274 /*
271 * User mode must have bar2 access.275 * User mode must have bar2 access.
272 */276 */
273 if (user && (!wq->sq.bar2_va || !wq->rq.bar2_va)) {277 if (user && (!wq->sq.bar2_pa || !wq->rq.bar2_pa)) {
274 pr_warn(MOD "%s: sqid %u or rqid %u not in BAR2 range.\n",278 pr_warn(MOD "%s: sqid %u or rqid %u not in BAR2 range.\n",
275 pci_name(rdev->lldi.pdev), wq->sq.qid, wq->rq.qid);279 pci_name(rdev->lldi.pdev), wq->sq.qid, wq->rq.qid);
276 goto free_dma;280 goto free_dma;
@@ -1895,13 +1899,27 @@ int c4iw_ib_query_qp(struct ib_qp *ibqp, struct ib_qp_attr *attr, · 1618 unmodified lines
1895void c4iw_drain_sq(struct ib_qp *ibqp)1899void c4iw_drain_sq(struct ib_qp *ibqp)
1896{1900{
1897 struct c4iw_qp *qp = to_c4iw_qp(ibqp);1901 struct c4iw_qp *qp = to_c4iw_qp(ibqp);
1902 unsigned long flag;
1903 bool need_to_wait;
1898 1904
1899 wait_for_completion(&qp->sq_drained);1905 spin_lock_irqsave(&qp->lock, flag);
1906 need_to_wait = !t4_sq_empty(&qp->wq);
1907 spin_unlock_irqrestore(&qp->lock, flag);
1908
1909 if (need_to_wait)
1910 wait_for_completion(&qp->sq_drained);
1900}1911}
1901 1912
1902void c4iw_drain_rq(struct ib_qp *ibqp)1913void c4iw_drain_rq(struct ib_qp *ibqp)
1903{1914{
1904 struct c4iw_qp *qp = to_c4iw_qp(ibqp);1915 struct c4iw_qp *qp = to_c4iw_qp(ibqp);
1916 unsigned long flag;
1917 bool need_to_wait;
1918
1919 spin_lock_irqsave(&qp->lock, flag);
1920 need_to_wait = !t4_rq_empty(&qp->wq);
1921 spin_unlock_irqrestore(&qp->lock, flag);
1905 1922
1906 wait_for_completion(&qp->rq_drained);1923 if (need_to_wait)
1924 wait_for_completion(&qp->rq_drained);
1907}1925}
drivers/infiniband/hw/mlx5/main.c+3−3
@@ -530,7 +530,7 @@ static int mlx5_ib_query_device(struct ib_device *ibdev, · 529 unmodified lines
530 sizeof(struct mlx5_wqe_ctrl_seg)) /530 sizeof(struct mlx5_wqe_ctrl_seg)) /
531 sizeof(struct mlx5_wqe_data_seg);531 sizeof(struct mlx5_wqe_data_seg);
532 props->max_sge = min(max_rq_sg, max_sq_sg);532 props->max_sge = min(max_rq_sg, max_sq_sg);
533 props->max_sge_rd = props->max_sge;533 props->max_sge_rd = MLX5_MAX_SGE_RD;
534 props->max_cq = 1 << MLX5_CAP_GEN(mdev, log_max_cq);534 props->max_cq = 1 << MLX5_CAP_GEN(mdev, log_max_cq);
535 props->max_cqe = (1 << MLX5_CAP_GEN(mdev, log_max_cq_sz)) - 1;535 props->max_cqe = (1 << MLX5_CAP_GEN(mdev, log_max_cq_sz)) - 1;
536 props->max_mr = 1 << MLX5_CAP_GEN(mdev, log_max_mkey);536 props->max_mr = 1 << MLX5_CAP_GEN(mdev, log_max_mkey);
@@ -671,8 +671,8 @@ static int mlx5_query_hca_port(struct ib_device *ibdev, u8 port, · 134 unmodified lines
671 struct mlx5_ib_dev *dev = to_mdev(ibdev);671 struct mlx5_ib_dev *dev = to_mdev(ibdev);
672 struct mlx5_core_dev *mdev = dev->mdev;672 struct mlx5_core_dev *mdev = dev->mdev;
673 struct mlx5_hca_vport_context *rep;673 struct mlx5_hca_vport_context *rep;
674 int max_mtu;674 u16 max_mtu;
675 int oper_mtu;675 u16 oper_mtu;
676 int err;676 int err;
677 u8 ib_link_width_oper;677 u8 ib_link_width_oper;
678 u8 vl_hw_cap;678 u8 vl_hw_cap;
drivers/infiniband/hw/nes/nes_nic.c+0−3
@@ -500,9 +500,6 @@ static int nes_netdev_start_xmit(struct sk_buff *skb, struct net_device *netdev) · 499 unmodified lines
500 * skb_shinfo(skb)->nr_frags, skb_is_gso(skb));500 * skb_shinfo(skb)->nr_frags, skb_is_gso(skb));
501 */501 */
502 502
503 if (!netif_carrier_ok(netdev))
504 return NETDEV_TX_OK;
505
506 if (netif_queue_stopped(netdev))503 if (netif_queue_stopped(netdev))
507 return NETDEV_TX_BUSY;504 return NETDEV_TX_BUSY;
508 505
drivers/infiniband/hw/qib/qib_file_ops.c+5−0
@@ -45,6 +45,8 @@ · 44 unmodified lines
45#include <linux/export.h>45#include <linux/export.h>
46#include <linux/uio.h>46#include <linux/uio.h>
47 47
48#include <rdma/ib.h>
49
48#include "qib.h"50#include "qib.h"
49#include "qib_common.h"51#include "qib_common.h"
50#include "qib_user_sdma.h"52#include "qib_user_sdma.h"
@@ -2067,6 +2069,9 @@ static ssize_t qib_write(struct file *fp, const char __user *data, · 2016 unmodified lines
2067 ssize_t ret = 0;2069 ssize_t ret = 0;
2068 void *dest;2070 void *dest;
2069 2071
2072 if (WARN_ON_ONCE(!ib_safe_file_access(fp)))
2073 return -EACCES;
2074
2070 if (count < sizeof(cmd.type)) {2075 if (count < sizeof(cmd.type)) {
2071 ret = -EINVAL;2076 ret = -EINVAL;
2072 goto bail;2077 goto bail;
drivers/infiniband/sw/rdmavt/qp.c+2−2
@@ -1637,9 +1637,9 @@ bail: · 1636 unmodified lines
1637 spin_unlock_irqrestore(&qp->s_hlock, flags);1637 spin_unlock_irqrestore(&qp->s_hlock, flags);
1638 if (nreq) {1638 if (nreq) {
1639 if (call_send)1639 if (call_send)
1640 rdi->driver_f.schedule_send_no_lock(qp);
1641 else
1642 rdi->driver_f.do_send(qp);1640 rdi->driver_f.do_send(qp);
1641 else
1642 rdi->driver_f.schedule_send_no_lock(qp);
1643 }1643 }
1644 return err;1644 return err;
1645}1645}
drivers/media/usb/usbvision/usbvision-video.c+0−7
@@ -1452,13 +1452,6 @@ static int usbvision_probe(struct usb_interface *intf, · 1451 unmodified lines
1452 printk(KERN_INFO "%s: %s found\n", __func__,1452 printk(KERN_INFO "%s: %s found\n", __func__,
1453 usbvision_device_data[model].model_string);1453 usbvision_device_data[model].model_string);
1454 1454
1455 /*
1456 * this is a security check.
1457 * an exploit using an incorrect bInterfaceNumber is known
1458 */
1459 if (ifnum >= USB_MAXINTERFACES || !dev->actconfig->interface[ifnum])
1460 return -ENODEV;
1461
1462 if (usbvision_device_data[model].interface >= 0)1455 if (usbvision_device_data[model].interface >= 0)
1463 interface = &dev->actconfig->interface[usbvision_device_data[model].interface]->altsetting[0];1456 interface = &dev->actconfig->interface[usbvision_device_data[model].interface]->altsetting[0];
1464 else if (ifnum < dev->actconfig->desc.bNumInterfaces)1457 else if (ifnum < dev->actconfig->desc.bNumInterfaces)
drivers/media/v4l2-core/videobuf2-core.c+15−5
@@ -1645,7 +1645,7 @@ static int __vb2_wait_for_done_vb(struct vb2_queue *q, int nonblocking) · 1644 unmodified lines
1645 * Will sleep if required for nonblocking == false.1645 * Will sleep if required for nonblocking == false.
1646 */1646 */
1647static int __vb2_get_done_vb(struct vb2_queue *q, struct vb2_buffer **vb,1647static int __vb2_get_done_vb(struct vb2_queue *q, struct vb2_buffer **vb,
1648 int nonblocking)1648 void *pb, int nonblocking)
1649{1649{
1650 unsigned long flags;1650 unsigned long flags;
1651 int ret;1651 int ret;
@@ -1666,10 +1666,10 @@ static int __vb2_get_done_vb(struct vb2_queue *q, struct vb2_buffer **vb, · 14 unmodified lines
1666 /*1666 /*
1667 * Only remove the buffer from done_list if v4l2_buffer can handle all1667 * Only remove the buffer from done_list if v4l2_buffer can handle all
1668 * the planes.1668 * the planes.
1669 * Verifying planes is NOT necessary since it already has been checked
1670 * before the buffer is queued/prepared. So it can never fail.
1671 */1669 */
1672 list_del(&(*vb)->done_entry);1670 ret = call_bufop(q, verify_planes_array, *vb, pb);
1671 if (!ret)
1672 list_del(&(*vb)->done_entry);
1673 spin_unlock_irqrestore(&q->done_lock, flags);1673 spin_unlock_irqrestore(&q->done_lock, flags);
1674 1674
1675 return ret;1675 return ret;
@@ -1748,7 +1748,7 @@ int vb2_core_dqbuf(struct vb2_queue *q, unsigned int *pindex, void *pb, · 72 unmodified lines
1748 struct vb2_buffer *vb = NULL;1748 struct vb2_buffer *vb = NULL;
1749 int ret;1749 int ret;
1750 1750
1751 ret = __vb2_get_done_vb(q, &vb, nonblocking);1751 ret = __vb2_get_done_vb(q, &vb, pb, nonblocking);
1752 if (ret < 0)1752 if (ret < 0)
1753 return ret;1753 return ret;
1754 1754
@@ -2297,6 +2297,16 @@ unsigned int vb2_core_poll(struct vb2_queue *q, struct file *file, · 542 unmodified lines
2297 if (!vb2_is_streaming(q) || q->error)2297 if (!vb2_is_streaming(q) || q->error)
2298 return POLLERR;2298 return POLLERR;
2299 2299
2300 /*
2301 * If this quirk is set and QBUF hasn't been called yet then
2302 * return POLLERR as well. This only affects capture queues, output
2303 * queues will always initialize waiting_for_buffers to false.
2304 * This quirk is set by V4L2 for backwards compatibility reasons.
2305 */
2306 if (q->quirk_poll_must_check_waiting_for_buffers &&
2307 q->waiting_for_buffers && (req_events & (POLLIN | POLLRDNORM)))
2308 return POLLERR;
2309
2300 /*2310 /*
2301 * For output streams you can call write() as long as there are fewer2311 * For output streams you can call write() as long as there are fewer
2302 * buffers queued than there are buffers available.2312 * buffers queued than there are buffers available.
drivers/media/v4l2-core/videobuf2-memops.c+1−1
@@ -49,7 +49,7 @@ struct frame_vector *vb2_create_framevec(unsigned long start, · 48 unmodified lines
49 vec = frame_vector_create(nr);49 vec = frame_vector_create(nr);
50 if (!vec)50 if (!vec)
51 return ERR_PTR(-ENOMEM);51 return ERR_PTR(-ENOMEM);
52 ret = get_vaddr_frames(start, nr, write, 1, vec);52 ret = get_vaddr_frames(start & PAGE_MASK, nr, write, true, vec);
53 if (ret < 0)53 if (ret < 0)
54 goto out_destroy;54 goto out_destroy;
55 /* We accept only complete set of PFNs */55 /* We accept only complete set of PFNs */
drivers/media/v4l2-core/videobuf2-v4l2.c+12−8
@@ -74,6 +74,11 @@ static int __verify_planes_array(struct vb2_buffer *vb, const struct v4l2_buffer · 73 unmodified lines
74 return 0;74 return 0;
75}75}
76 76
77static int __verify_planes_array_core(struct vb2_buffer *vb, const void *pb)
78{
79 return __verify_planes_array(vb, pb);
80}
81
77/**82/**
78 * __verify_length() - Verify that the bytesused value for each plane fits in83 * __verify_length() - Verify that the bytesused value for each plane fits in
79 * the plane length and that the data offset doesn't exceed the bytesused value.84 * the plane length and that the data offset doesn't exceed the bytesused value.
@@ -437,6 +442,7 @@ static int __fill_vb2_buffer(struct vb2_buffer *vb, · 357 unmodified lines
437}442}
438 443
439static const struct vb2_buf_ops v4l2_buf_ops = {444static const struct vb2_buf_ops v4l2_buf_ops = {
445 .verify_planes_array = __verify_planes_array_core,
440 .fill_user_buffer = __fill_v4l2_buffer,446 .fill_user_buffer = __fill_v4l2_buffer,
441 .fill_vb2_buffer = __fill_vb2_buffer,447 .fill_vb2_buffer = __fill_vb2_buffer,
442 .copy_timestamp = __copy_timestamp,448 .copy_timestamp = __copy_timestamp,
@@ -765,6 +771,12 @@ int vb2_queue_init(struct vb2_queue *q) · 322 unmodified lines
765 q->is_output = V4L2_TYPE_IS_OUTPUT(q->type);771 q->is_output = V4L2_TYPE_IS_OUTPUT(q->type);
766 q->copy_timestamp = (q->timestamp_flags & V4L2_BUF_FLAG_TIMESTAMP_MASK)772 q->copy_timestamp = (q->timestamp_flags & V4L2_BUF_FLAG_TIMESTAMP_MASK)
767 == V4L2_BUF_FLAG_TIMESTAMP_COPY;773 == V4L2_BUF_FLAG_TIMESTAMP_COPY;
774 /*
775 * For compatibility with vb1: if QBUF hasn't been called yet, then
776 * return POLLERR as well. This only affects capture queues, output
777 * queues will always initialize waiting_for_buffers to false.
778 */
779 q->quirk_poll_must_check_waiting_for_buffers = true;
768 780
769 return vb2_core_queue_init(q);781 return vb2_core_queue_init(q);
770}782}
@@ -818,14 +830,6 @@ unsigned int vb2_poll(struct vb2_queue *q, struct file *file, poll_table *wait) · 47 unmodified lines
818 poll_wait(file, &fh->wait, wait);830 poll_wait(file, &fh->wait, wait);
819 }831 }
820 832
821 /*
822 * For compatibility with vb1: if QBUF hasn't been called yet, then
823 * return POLLERR as well. This only affects capture queues, output
824 * queues will always initialize waiting_for_buffers to false.
825 */
826 if (q->waiting_for_buffers && (req_events & (POLLIN | POLLRDNORM)))
827 return POLLERR;
828
829 return res | vb2_core_poll(q, file, wait);833 return res | vb2_core_poll(q, file, wait);
830}834}
831EXPORT_SYMBOL_GPL(vb2_poll);835EXPORT_SYMBOL_GPL(vb2_poll);
drivers/misc/cxl/context.c+7−0
@@ -223,6 +223,13 @@ int __detach_context(struct cxl_context *ctx) · 222 unmodified lines
223 cxl_ops->link_ok(ctx->afu->adapter, ctx->afu));223 cxl_ops->link_ok(ctx->afu->adapter, ctx->afu));
224 flush_work(&ctx->fault_work); /* Only needed for dedicated process */224 flush_work(&ctx->fault_work); /* Only needed for dedicated process */
225 225
226 /*
227 * Wait until no further interrupts are presented by the PSL
228 * for this context.
229 */
230 if (cxl_ops->irq_wait)
231 cxl_ops->irq_wait(ctx);
232
226 /* release the reference to the group leader and mm handling pid */233 /* release the reference to the group leader and mm handling pid */
227 put_pid(ctx->pid);234 put_pid(ctx->pid);
228 put_pid(ctx->glpid);235 put_pid(ctx->glpid);
drivers/misc/cxl/cxl.h+2−0
@@ -274,6 +274,7 @@ static const cxl_p2n_reg_t CXL_PSL_WED_An = {0x0A0}; · 273 unmodified lines
274#define CXL_PSL_DSISR_An_PE (1ull << (63-4)) /* PSL Error (implementation specific) */274#define CXL_PSL_DSISR_An_PE (1ull << (63-4)) /* PSL Error (implementation specific) */
275#define CXL_PSL_DSISR_An_AE (1ull << (63-5)) /* AFU Error */275#define CXL_PSL_DSISR_An_AE (1ull << (63-5)) /* AFU Error */
276#define CXL_PSL_DSISR_An_OC (1ull << (63-6)) /* OS Context Warning */276#define CXL_PSL_DSISR_An_OC (1ull << (63-6)) /* OS Context Warning */
277#define CXL_PSL_DSISR_PENDING (CXL_PSL_DSISR_TRANS | CXL_PSL_DSISR_An_PE | CXL_PSL_DSISR_An_AE | CXL_PSL_DSISR_An_OC)
277/* NOTE: Bits 32:63 are undefined if DSISR[DS] = 1 */278/* NOTE: Bits 32:63 are undefined if DSISR[DS] = 1 */
278#define CXL_PSL_DSISR_An_M DSISR_NOHPTE /* PTE not found */279#define CXL_PSL_DSISR_An_M DSISR_NOHPTE /* PTE not found */
279#define CXL_PSL_DSISR_An_P DSISR_PROTFAULT /* Storage protection violation */280#define CXL_PSL_DSISR_An_P DSISR_PROTFAULT /* Storage protection violation */
@@ -855,6 +856,7 @@ struct cxl_backend_ops { · 575 unmodified lines
855 u64 dsisr, u64 errstat);856 u64 dsisr, u64 errstat);
856 irqreturn_t (*psl_interrupt)(int irq, void *data);857 irqreturn_t (*psl_interrupt)(int irq, void *data);
857 int (*ack_irq)(struct cxl_context *ctx, u64 tfc, u64 psl_reset_mask);858 int (*ack_irq)(struct cxl_context *ctx, u64 tfc, u64 psl_reset_mask);
859 void (*irq_wait)(struct cxl_context *ctx);
858 int (*attach_process)(struct cxl_context *ctx, bool kernel,860 int (*attach_process)(struct cxl_context *ctx, bool kernel,
859 u64 wed, u64 amr);861 u64 wed, u64 amr);
860 int (*detach_process)(struct cxl_context *ctx);862 int (*detach_process)(struct cxl_context *ctx);
drivers/misc/cxl/irq.c+0−1
@@ -203,7 +203,6 @@ unsigned int cxl_map_irq(struct cxl *adapter, irq_hw_number_t hwirq, · 202 unmodified lines
203void cxl_unmap_irq(unsigned int virq, void *cookie)203void cxl_unmap_irq(unsigned int virq, void *cookie)
204{204{
205 free_irq(virq, cookie);205 free_irq(virq, cookie);
206 irq_dispose_mapping(virq);
207}206}
208 207
209int cxl_register_one_irq(struct cxl *adapter,208int cxl_register_one_irq(struct cxl *adapter,
drivers/misc/cxl/native.c+31−0
@@ -14,6 +14,7 @@ · 13 unmodified lines
14#include <linux/mutex.h>14#include <linux/mutex.h>
15#include <linux/mm.h>15#include <linux/mm.h>
16#include <linux/uaccess.h>16#include <linux/uaccess.h>
17#include <linux/delay.h>
17#include <asm/synch.h>18#include <asm/synch.h>
18#include <misc/cxl-base.h>19#include <misc/cxl-base.h>
19 20
@@ -797,6 +798,35 @@ static irqreturn_t native_irq_multiplexed(int irq, void *data) · 777 unmodified lines
797 return fail_psl_irq(afu, &irq_info);798 return fail_psl_irq(afu, &irq_info);
798}799}
799 800
801void native_irq_wait(struct cxl_context *ctx)
802{
803 u64 dsisr;
804 int timeout = 1000;
805 int ph;
806
807 /*
808 * Wait until no further interrupts are presented by the PSL
809 * for this context.
810 */
811 while (timeout--) {
812 ph = cxl_p2n_read(ctx->afu, CXL_PSL_PEHandle_An) & 0xffff;
813 if (ph != ctx->pe)
814 return;
815 dsisr = cxl_p2n_read(ctx->afu, CXL_PSL_DSISR_An);
816 if ((dsisr & CXL_PSL_DSISR_PENDING) == 0)
817 return;
818 /*
819 * We are waiting for the workqueue to process our
820 * irq, so need to let that run here.
821 */
822 msleep(1);
823 }
824
825 dev_warn(&ctx->afu->dev, "WARNING: waiting on DSI for PE %i"
826 " DSISR %016llx!\n", ph, dsisr);
827 return;
828}
829
800static irqreturn_t native_slice_irq_err(int irq, void *data)830static irqreturn_t native_slice_irq_err(int irq, void *data)
801{831{
802 struct cxl_afu *afu = data;832 struct cxl_afu *afu = data;
@@ -1076,6 +1106,7 @@ const struct cxl_backend_ops cxl_native_ops = { · 273 unmodified lines
1076 .handle_psl_slice_error = native_handle_psl_slice_error,1106 .handle_psl_slice_error = native_handle_psl_slice_error,
1077 .psl_interrupt = NULL,1107 .psl_interrupt = NULL,
1078 .ack_irq = native_ack_irq,1108 .ack_irq = native_ack_irq,
1109 .irq_wait = native_irq_wait,
1079 .attach_process = native_attach_process,1110 .attach_process = native_attach_process,
1080 .detach_process = native_detach_process,1111 .detach_process = native_detach_process,
1081 .support_attributes = native_support_attributes,1112 .support_attributes = native_support_attributes,
drivers/mmc/host/Kconfig+1−0
@@ -97,6 +97,7 @@ config MMC_RICOH_MMC · 96 unmodified lines
97config MMC_SDHCI_ACPI97config MMC_SDHCI_ACPI
98 tristate "SDHCI support for ACPI enumerated SDHCI controllers"98 tristate "SDHCI support for ACPI enumerated SDHCI controllers"
99 depends on MMC_SDHCI && ACPI99 depends on MMC_SDHCI && ACPI
100 select IOSF_MBI if X86
100 help101 help
101 This selects support for ACPI enumerated SDHCI controllers,102 This selects support for ACPI enumerated SDHCI controllers,
102 identified by ACPI Compatibility ID PNP0D40 or specific103 identified by ACPI Compatibility ID PNP0D40 or specific
drivers/mmc/host/sdhci-acpi.c+81−0
@@ -41,6 +41,11 @@ · 40 unmodified lines
41#include <linux/mmc/pm.h>41#include <linux/mmc/pm.h>
42#include <linux/mmc/slot-gpio.h>42#include <linux/mmc/slot-gpio.h>
43 43
44#ifdef CONFIG_X86
45#include <asm/cpu_device_id.h>
46#include <asm/iosf_mbi.h>
47#endif
48
44#include "sdhci.h"49#include "sdhci.h"
45 50
46enum {51enum {
@@ -116,6 +121,75 @@ static const struct sdhci_acpi_chip sdhci_acpi_chip_int = { · 69 unmodified lines
116 .ops = &sdhci_acpi_ops_int,121 .ops = &sdhci_acpi_ops_int,
117};122};
118 123
124#ifdef CONFIG_X86
125
126static bool sdhci_acpi_byt(void)
127{
128 static const struct x86_cpu_id byt[] = {
129 { X86_VENDOR_INTEL, 6, 0x37 },
130 {}
131 };
132
133 return x86_match_cpu(byt);
134}
135
136#define BYT_IOSF_SCCEP 0x63
137#define BYT_IOSF_OCP_NETCTRL0 0x1078
138#define BYT_IOSF_OCP_TIMEOUT_BASE GENMASK(10, 8)
139
140static void sdhci_acpi_byt_setting(struct device *dev)
141{
142 u32 val = 0;
143
144 if (!sdhci_acpi_byt())
145 return;
146
147 if (iosf_mbi_read(BYT_IOSF_SCCEP, MBI_CR_READ, BYT_IOSF_OCP_NETCTRL0,
148 &val)) {
149 dev_err(dev, "%s read error\n", __func__);
150 return;
151 }
152
153 if (!(val & BYT_IOSF_OCP_TIMEOUT_BASE))
154 return;
155
156 val &= ~BYT_IOSF_OCP_TIMEOUT_BASE;
157
158 if (iosf_mbi_write(BYT_IOSF_SCCEP, MBI_CR_WRITE, BYT_IOSF_OCP_NETCTRL0,
159 val)) {
160 dev_err(dev, "%s write error\n", __func__);
161 return;
162 }
163
164 dev_dbg(dev, "%s completed\n", __func__);
165}
166
167static bool sdhci_acpi_byt_defer(struct device *dev)
168{
169 if (!sdhci_acpi_byt())
170 return false;
171
172 if (!iosf_mbi_available())
173 return true;
174
175 sdhci_acpi_byt_setting(dev);
176
177 return false;
178}
179
180#else
181
182static inline void sdhci_acpi_byt_setting(struct device *dev)
183{
184}
185
186static inline bool sdhci_acpi_byt_defer(struct device *dev)
187{
188 return false;
189}
190
191#endif
192
119static int bxt_get_cd(struct mmc_host *mmc)193static int bxt_get_cd(struct mmc_host *mmc)
120{194{
121 int gpio_cd = mmc_gpio_get_cd(mmc);195 int gpio_cd = mmc_gpio_get_cd(mmc);
@@ -322,6 +396,9 @@ static int sdhci_acpi_probe(struct platform_device *pdev) · 200 unmodified lines
322 if (acpi_bus_get_status(device) || !device->status.present)396 if (acpi_bus_get_status(device) || !device->status.present)
323 return -ENODEV;397 return -ENODEV;
324 398
399 if (sdhci_acpi_byt_defer(dev))
400 return -EPROBE_DEFER;
401
325 hid = acpi_device_hid(device);402 hid = acpi_device_hid(device);
326 uid = device->pnp.unique_id;403 uid = device->pnp.unique_id;
327 404
@@ -447,6 +524,8 @@ static int sdhci_acpi_resume(struct device *dev) · 119 unmodified lines
447{524{
448 struct sdhci_acpi_host *c = dev_get_drvdata(dev);525 struct sdhci_acpi_host *c = dev_get_drvdata(dev);
449 526
527 sdhci_acpi_byt_setting(&c->pdev->dev);
528
450 return sdhci_resume_host(c->host);529 return sdhci_resume_host(c->host);
451}530}
452 531
@@ -470,6 +549,8 @@ static int sdhci_acpi_runtime_resume(struct device *dev) · 17 unmodified lines
470{549{
471 struct sdhci_acpi_host *c = dev_get_drvdata(dev);550 struct sdhci_acpi_host *c = dev_get_drvdata(dev);
472 551
552 sdhci_acpi_byt_setting(&c->pdev->dev);
553
473 return sdhci_runtime_resume_host(c->host);554 return sdhci_runtime_resume_host(c->host);
474}555}
475 556
drivers/mmc/host/sunxi-mmc.c+5−0
@@ -1129,6 +1129,11 @@ static int sunxi_mmc_probe(struct platform_device *pdev) · 1128 unmodified lines
1129 MMC_CAP_1_8V_DDR |1129 MMC_CAP_1_8V_DDR |
1130 MMC_CAP_ERASE | MMC_CAP_SDIO_IRQ;1130 MMC_CAP_ERASE | MMC_CAP_SDIO_IRQ;
1131 1131
1132 /* TODO MMC DDR is not working on A80 */
1133 if (of_device_is_compatible(pdev->dev.of_node,
1134 "allwinner,sun9i-a80-mmc"))
1135 mmc->caps &= ~MMC_CAP_1_8V_DDR;
1136
1132 ret = mmc_of_parse(mmc);1137 ret = mmc_of_parse(mmc);
1133 if (ret)1138 if (ret)
1134 goto error_free_dma;1139 goto error_free_dma;
drivers/net/Kconfig+2−3
@@ -62,9 +62,8 @@ config DUMMY · 61 unmodified lines
62 this device is consigned into oblivion) with a configurable IP62 this device is consigned into oblivion) with a configurable IP
63 address. It is most commonly used in order to make your currently63 address. It is most commonly used in order to make your currently
64 inactive SLIP address seem like a real address for local programs.64 inactive SLIP address seem like a real address for local programs.
65 If you use SLIP or PPP, you might want to say Y here. Since this65 If you use SLIP or PPP, you might want to say Y here. It won't
66 thing often comes in handy, the default is Y. It won't enlarge your66 enlarge your kernel. What a deal. Read about it in the Network
67 kernel either. What a deal. Read about it in the Network
68 Administrator's Guide, available from67 Administrator's Guide, available from
69 <http://www.tldp.org/docs.html#guide>.68 <http://www.tldp.org/docs.html#guide>.
70 69
drivers/net/ethernet/mellanox/mlx4/en_tx.c+4−2
@@ -405,7 +405,6 @@ static bool mlx4_en_process_tx_cq(struct net_device *dev, · 404 unmodified lines
405 u32 packets = 0;405 u32 packets = 0;
406 u32 bytes = 0;406 u32 bytes = 0;
407 int factor = priv->cqe_factor;407 int factor = priv->cqe_factor;
408 u64 timestamp = 0;
409 int done = 0;408 int done = 0;
410 int budget = priv->tx_work_limit;409 int budget = priv->tx_work_limit;
411 u32 last_nr_txbb;410 u32 last_nr_txbb;
@@ -445,9 +444,12 @@ static bool mlx4_en_process_tx_cq(struct net_device *dev, · 33 unmodified lines
445 new_index = be16_to_cpu(cqe->wqe_index) & size_mask;444 new_index = be16_to_cpu(cqe->wqe_index) & size_mask;
446 445
447 do {446 do {
447 u64 timestamp = 0;
448
448 txbbs_skipped += last_nr_txbb;449 txbbs_skipped += last_nr_txbb;
449 ring_index = (ring_index + last_nr_txbb) & size_mask;450 ring_index = (ring_index + last_nr_txbb) & size_mask;
450 if (ring->tx_info[ring_index].ts_requested)451
452 if (unlikely(ring->tx_info[ring_index].ts_requested))
451 timestamp = mlx4_en_get_cqe_ts(cqe);453 timestamp = mlx4_en_get_cqe_ts(cqe);
452 454
453 /* free next descriptor */455 /* free next descriptor */
drivers/net/ethernet/mellanox/mlx5/core/en.h+1−1
@@ -609,7 +609,7 @@ enum mlx5e_link_mode { · 608 unmodified lines
609 MLX5E_100GBASE_KR4 = 22,609 MLX5E_100GBASE_KR4 = 22,
610 MLX5E_100GBASE_LR4 = 23,610 MLX5E_100GBASE_LR4 = 23,
611 MLX5E_100BASE_TX = 24,611 MLX5E_100BASE_TX = 24,
612 MLX5E_100BASE_T = 25,612 MLX5E_1000BASE_T = 25,
613 MLX5E_10GBASE_T = 26,613 MLX5E_10GBASE_T = 26,
614 MLX5E_25GBASE_CR = 27,614 MLX5E_25GBASE_CR = 27,
615 MLX5E_25GBASE_KR = 28,615 MLX5E_25GBASE_KR = 28,
drivers/net/ethernet/mellanox/mlx5/core/en_ethtool.c+4−4
@@ -138,10 +138,10 @@ static const struct { · 137 unmodified lines
138 [MLX5E_100BASE_TX] = {138 [MLX5E_100BASE_TX] = {
139 .speed = 100,139 .speed = 100,
140 },140 },
141 [MLX5E_100BASE_T] = {141 [MLX5E_1000BASE_T] = {
142 .supported = SUPPORTED_100baseT_Full,142 .supported = SUPPORTED_1000baseT_Full,
143 .advertised = ADVERTISED_100baseT_Full,143 .advertised = ADVERTISED_1000baseT_Full,
144 .speed = 100,144 .speed = 1000,
145 },145 },
146 [MLX5E_10GBASE_T] = {146 [MLX5E_10GBASE_T] = {
147 .supported = SUPPORTED_10000baseT_Full,147 .supported = SUPPORTED_10000baseT_Full,
drivers/net/ethernet/mellanox/mlx5/core/en_main.c+57−15
@@ -1404,24 +1404,50 @@ static int mlx5e_refresh_tirs_self_loopback_enable(struct mlx5e_priv *priv) · 1403 unmodified lines
1404 return 0;1404 return 0;
1405}1405}
1406 1406
1407static int mlx5e_set_dev_port_mtu(struct net_device *netdev)1407static int mlx5e_set_mtu(struct mlx5e_priv *priv, u16 mtu)
1408{1408{
1409 struct mlx5e_priv *priv = netdev_priv(netdev);
1410 struct mlx5_core_dev *mdev = priv->mdev;1409 struct mlx5_core_dev *mdev = priv->mdev;
1411 int hw_mtu;1410 u16 hw_mtu = MLX5E_SW2HW_MTU(mtu);
1412 int err;1411 int err;
1413 1412
1414 err = mlx5_set_port_mtu(mdev, MLX5E_SW2HW_MTU(netdev->mtu), 1);1413 err = mlx5_set_port_mtu(mdev, hw_mtu, 1);
1415 if (err)1414 if (err)
1416 return err;1415 return err;
1417 1416
1418 mlx5_query_port_oper_mtu(mdev, &hw_mtu, 1);1417 /* Update vport context MTU */
1418 mlx5_modify_nic_vport_mtu(mdev, hw_mtu);
1419 return 0;
1420}
1419 1421
1420 if (MLX5E_HW2SW_MTU(hw_mtu) != netdev->mtu)1422static void mlx5e_query_mtu(struct mlx5e_priv *priv, u16 *mtu)
1421 netdev_warn(netdev, "%s: Port MTU %d is different than netdev mtu %d\n",1423{
1422 __func__, MLX5E_HW2SW_MTU(hw_mtu), netdev->mtu);1424 struct mlx5_core_dev *mdev = priv->mdev;
1425 u16 hw_mtu = 0;
1426 int err;
1423 1427
1424 netdev->mtu = MLX5E_HW2SW_MTU(hw_mtu);1428 err = mlx5_query_nic_vport_mtu(mdev, &hw_mtu);
1429 if (err || !hw_mtu) /* fallback to port oper mtu */
1430 mlx5_query_port_oper_mtu(mdev, &hw_mtu, 1);
1431
1432 *mtu = MLX5E_HW2SW_MTU(hw_mtu);
1433}
1434
1435static int mlx5e_set_dev_port_mtu(struct net_device *netdev)
1436{
1437 struct mlx5e_priv *priv = netdev_priv(netdev);
1438 u16 mtu;
1439 int err;
1440
1441 err = mlx5e_set_mtu(priv, netdev->mtu);
1442 if (err)
1443 return err;
1444
1445 mlx5e_query_mtu(priv, &mtu);
1446 if (mtu != netdev->mtu)
1447 netdev_warn(netdev, "%s: VPort MTU %d is different than netdev mtu %d\n",
1448 __func__, mtu, netdev->mtu);
1449
1450 netdev->mtu = mtu;
1425 return 0;1451 return 0;
1426}1452}
1427 1453
@@ -1999,22 +2025,27 @@ static int mlx5e_set_features(struct net_device *netdev, · 571 unmodified lines
1999 return err;2025 return err;
2000}2026}
2001 2027
2028#define MXL5_HW_MIN_MTU 64
2029#define MXL5E_MIN_MTU (MXL5_HW_MIN_MTU + ETH_FCS_LEN)
2030
2002static int mlx5e_change_mtu(struct net_device *netdev, int new_mtu)2031static int mlx5e_change_mtu(struct net_device *netdev, int new_mtu)
2003{2032{
2004 struct mlx5e_priv *priv = netdev_priv(netdev);2033 struct mlx5e_priv *priv = netdev_priv(netdev);
2005 struct mlx5_core_dev *mdev = priv->mdev;2034 struct mlx5_core_dev *mdev = priv->mdev;
2006 bool was_opened;2035 bool was_opened;
2007 int max_mtu;2036 u16 max_mtu;
2037 u16 min_mtu;
2008 int err = 0;2038 int err = 0;
2009 2039
2010 mlx5_query_port_max_mtu(mdev, &max_mtu, 1);2040 mlx5_query_port_max_mtu(mdev, &max_mtu, 1);
2011 2041
2012 max_mtu = MLX5E_HW2SW_MTU(max_mtu);2042 max_mtu = MLX5E_HW2SW_MTU(max_mtu);
2043 min_mtu = MLX5E_HW2SW_MTU(MXL5E_MIN_MTU);
2013 2044
2014 if (new_mtu > max_mtu) {2045 if (new_mtu > max_mtu || new_mtu < min_mtu) {
2015 netdev_err(netdev,2046 netdev_err(netdev,
2016 "%s: Bad MTU (%d) > (%d) Max\n",2047 "%s: Bad MTU (%d), valid range is: [%d..%d]\n",
2017 __func__, new_mtu, max_mtu);2048 __func__, new_mtu, min_mtu, max_mtu);
2018 return -EINVAL;2049 return -EINVAL;
2019 }2050 }
2020 2051
@@ -2602,7 +2633,16 @@ static void mlx5e_destroy_netdev(struct mlx5_core_dev *mdev, void *vpriv) · 581 unmodified lines
2602 schedule_work(&priv->set_rx_mode_work);2633 schedule_work(&priv->set_rx_mode_work);
2603 mlx5e_disable_async_events(priv);2634 mlx5e_disable_async_events(priv);
2604 flush_scheduled_work();2635 flush_scheduled_work();
2605 unregister_netdev(netdev);2636 if (test_bit(MLX5_INTERFACE_STATE_SHUTDOWN, &mdev->intf_state)) {
2637 netif_device_detach(netdev);
2638 mutex_lock(&priv->state_lock);
2639 if (test_bit(MLX5E_STATE_OPENED, &priv->state))
2640 mlx5e_close_locked(netdev);
2641 mutex_unlock(&priv->state_lock);
2642 } else {
2643 unregister_netdev(netdev);
2644 }
2645
2606 mlx5e_tc_cleanup(priv);2646 mlx5e_tc_cleanup(priv);
2607 mlx5e_vxlan_cleanup(priv);2647 mlx5e_vxlan_cleanup(priv);
2608 mlx5e_destroy_flow_tables(priv);2648 mlx5e_destroy_flow_tables(priv);
@@ -2615,7 +2655,9 @@ static void mlx5e_destroy_netdev(struct mlx5_core_dev *mdev, void *vpriv) · 6 unmodified lines
2615 mlx5_core_dealloc_transport_domain(priv->mdev, priv->tdn);2655 mlx5_core_dealloc_transport_domain(priv->mdev, priv->tdn);
2616 mlx5_core_dealloc_pd(priv->mdev, priv->pdn);2656 mlx5_core_dealloc_pd(priv->mdev, priv->pdn);
2617 mlx5_unmap_free_uar(priv->mdev, &priv->cq_uar);2657 mlx5_unmap_free_uar(priv->mdev, &priv->cq_uar);
2618 free_netdev(netdev);2658
2659 if (!test_bit(MLX5_INTERFACE_STATE_SHUTDOWN, &mdev->intf_state))
2660 free_netdev(netdev);
2619}2661}
2620 2662
2621static void *mlx5e_get_netdev(void *vpriv)2663static void *mlx5e_get_netdev(void *vpriv)
drivers/net/ethernet/mellanox/mlx5/core/fs_core.c+18−30
@@ -1065,33 +1065,6 @@ unlock_fg: · 1064 unmodified lines
1065 return rule;1065 return rule;
1066}1066}
1067 1067
1068static struct mlx5_flow_rule *add_rule_to_auto_fg(struct mlx5_flow_table *ft,
1069 u8 match_criteria_enable,
1070 u32 *match_criteria,
1071 u32 *match_value,
1072 u8 action,
1073 u32 flow_tag,
1074 struct mlx5_flow_destination *dest)
1075{
1076 struct mlx5_flow_rule *rule;
1077 struct mlx5_flow_group *g;
1078
1079 g = create_autogroup(ft, match_criteria_enable, match_criteria);
1080 if (IS_ERR(g))
1081 return (void *)g;
1082
1083 rule = add_rule_fg(g, match_value,
1084 action, flow_tag, dest);
1085 if (IS_ERR(rule)) {
1086 /* Remove assumes refcount > 0 and autogroup creates a group
1087 * with a refcount = 0.
1088 */
1089 tree_get_node(&g->node);
1090 tree_remove_node(&g->node);
1091 }
1092 return rule;
1093}
1094
1095static struct mlx5_flow_rule *1068static struct mlx5_flow_rule *
1096_mlx5_add_flow_rule(struct mlx5_flow_table *ft,1069_mlx5_add_flow_rule(struct mlx5_flow_table *ft,
1097 u8 match_criteria_enable,1070 u8 match_criteria_enable,
@@ -1119,8 +1092,23 @@ _mlx5_add_flow_rule(struct mlx5_flow_table *ft, · 21 unmodified lines
1119 goto unlock;1092 goto unlock;
1120 }1093 }
1121 1094
1122 rule = add_rule_to_auto_fg(ft, match_criteria_enable, match_criteria,1095 g = create_autogroup(ft, match_criteria_enable, match_criteria);
1123 match_value, action, flow_tag, dest);1096 if (IS_ERR(g)) {
1097 rule = (void *)g;
1098 goto unlock;
1099 }
1100
1101 rule = add_rule_fg(g, match_value,
1102 action, flow_tag, dest);
1103 if (IS_ERR(rule)) {
1104 /* Remove assumes refcount > 0 and autogroup creates a group
1105 * with a refcount = 0.
1106 */
1107 unlock_ref_node(&ft->node);
1108 tree_get_node(&g->node);
1109 tree_remove_node(&g->node);
1110 return rule;
1111 }
1124unlock:1112unlock:
1125 unlock_ref_node(&ft->node);1113 unlock_ref_node(&ft->node);
1126 return rule;1114 return rule;
@@ -1288,7 +1276,7 @@ struct mlx5_flow_namespace *mlx5_get_flow_namespace(struct mlx5_core_dev *dev, · 161 unmodified lines
1288{1276{
1289 struct mlx5_flow_root_namespace *root_ns = dev->priv.root_ns;1277 struct mlx5_flow_root_namespace *root_ns = dev->priv.root_ns;
1290 int prio;1278 int prio;
1291 static struct fs_prio *fs_prio;1279 struct fs_prio *fs_prio;
1292 struct mlx5_flow_namespace *ns;1280 struct mlx5_flow_namespace *ns;
1293 1281
1294 if (!root_ns)1282 if (!root_ns)
drivers/net/ethernet/mellanox/mlx5/core/main.c+21−4
@@ -966,7 +966,7 @@ static int mlx5_load_one(struct mlx5_core_dev *dev, struct mlx5_priv *priv) · 965 unmodified lines
966 int err;966 int err;
967 967
968 mutex_lock(&dev->intf_state_mutex);968 mutex_lock(&dev->intf_state_mutex);
969 if (dev->interface_state == MLX5_INTERFACE_STATE_UP) {969 if (test_bit(MLX5_INTERFACE_STATE_UP, &dev->intf_state)) {
970 dev_warn(&dev->pdev->dev, "%s: interface is up, NOP\n",970 dev_warn(&dev->pdev->dev, "%s: interface is up, NOP\n",
971 __func__);971 __func__);
972 goto out;972 goto out;
@@ -1133,7 +1133,8 @@ static int mlx5_load_one(struct mlx5_core_dev *dev, struct mlx5_priv *priv) · 160 unmodified lines
1133 if (err)1133 if (err)
1134 pr_info("failed request module on %s\n", MLX5_IB_MOD);1134 pr_info("failed request module on %s\n", MLX5_IB_MOD);
1135 1135
1136 dev->interface_state = MLX5_INTERFACE_STATE_UP;1136 clear_bit(MLX5_INTERFACE_STATE_DOWN, &dev->intf_state);
1137 set_bit(MLX5_INTERFACE_STATE_UP, &dev->intf_state);
1137out:1138out:
1138 mutex_unlock(&dev->intf_state_mutex);1139 mutex_unlock(&dev->intf_state_mutex);
1139 1140
@@ -1207,7 +1208,7 @@ static int mlx5_unload_one(struct mlx5_core_dev *dev, struct mlx5_priv *priv) · 67 unmodified lines
1207 }1208 }
1208 1209
1209 mutex_lock(&dev->intf_state_mutex);1210 mutex_lock(&dev->intf_state_mutex);
1210 if (dev->interface_state == MLX5_INTERFACE_STATE_DOWN) {1211 if (test_bit(MLX5_INTERFACE_STATE_DOWN, &dev->intf_state)) {
1211 dev_warn(&dev->pdev->dev, "%s: interface is down, NOP\n",1212 dev_warn(&dev->pdev->dev, "%s: interface is down, NOP\n",
1212 __func__);1213 __func__);
1213 goto out;1214 goto out;
@@ -1241,7 +1242,8 @@ static int mlx5_unload_one(struct mlx5_core_dev *dev, struct mlx5_priv *priv) · 27 unmodified lines
1241 mlx5_cmd_cleanup(dev);1242 mlx5_cmd_cleanup(dev);
1242 1243
1243out:1244out:
1244 dev->interface_state = MLX5_INTERFACE_STATE_DOWN;1245 clear_bit(MLX5_INTERFACE_STATE_UP, &dev->intf_state);
1246 set_bit(MLX5_INTERFACE_STATE_DOWN, &dev->intf_state);
1245 mutex_unlock(&dev->intf_state_mutex);1247 mutex_unlock(&dev->intf_state_mutex);
1246 return err;1248 return err;
1247}1249}
@@ -1452,6 +1454,18 @@ static const struct pci_error_handlers mlx5_err_handler = { · 204 unmodified lines
1452 .resume = mlx5_pci_resume1454 .resume = mlx5_pci_resume
1453};1455};
1454 1456
1457static void shutdown(struct pci_dev *pdev)
1458{
1459 struct mlx5_core_dev *dev = pci_get_drvdata(pdev);
1460 struct mlx5_priv *priv = &dev->priv;
1461
1462 dev_info(&pdev->dev, "Shutdown was called\n");
1463 /* Notify mlx5 clients that the kernel is being shut down */
1464 set_bit(MLX5_INTERFACE_STATE_SHUTDOWN, &dev->intf_state);
1465 mlx5_unload_one(dev, priv);
1466 mlx5_pci_disable_device(dev);
1467}
1468
1455static const struct pci_device_id mlx5_core_pci_table[] = {1469static const struct pci_device_id mlx5_core_pci_table[] = {
1456 { PCI_VDEVICE(MELLANOX, 0x1011) }, /* Connect-IB */1470 { PCI_VDEVICE(MELLANOX, 0x1011) }, /* Connect-IB */
1457 { PCI_VDEVICE(MELLANOX, 0x1012), MLX5_PCI_DEV_IS_VF}, /* Connect-IB VF */1471 { PCI_VDEVICE(MELLANOX, 0x1012), MLX5_PCI_DEV_IS_VF}, /* Connect-IB VF */
@@ -1459,6 +1473,8 @@ static const struct pci_device_id mlx5_core_pci_table[] = { · 1 unmodified line
1459 { PCI_VDEVICE(MELLANOX, 0x1014), MLX5_PCI_DEV_IS_VF}, /* ConnectX-4 VF */1473 { PCI_VDEVICE(MELLANOX, 0x1014), MLX5_PCI_DEV_IS_VF}, /* ConnectX-4 VF */
1460 { PCI_VDEVICE(MELLANOX, 0x1015) }, /* ConnectX-4LX */1474 { PCI_VDEVICE(MELLANOX, 0x1015) }, /* ConnectX-4LX */
1461 { PCI_VDEVICE(MELLANOX, 0x1016), MLX5_PCI_DEV_IS_VF}, /* ConnectX-4LX VF */1475 { PCI_VDEVICE(MELLANOX, 0x1016), MLX5_PCI_DEV_IS_VF}, /* ConnectX-4LX VF */
1476 { PCI_VDEVICE(MELLANOX, 0x1017) }, /* ConnectX-5 */
1477 { PCI_VDEVICE(MELLANOX, 0x1018), MLX5_PCI_DEV_IS_VF}, /* ConnectX-5 VF */
1462 { 0, }1478 { 0, }
1463};1479};
1464 1480
@@ -1469,6 +1485,7 @@ static struct pci_driver mlx5_core_driver = { · 4 unmodified lines
1469 .id_table = mlx5_core_pci_table,1485 .id_table = mlx5_core_pci_table,
1470 .probe = init_one,1486 .probe = init_one,
1471 .remove = remove_one,1487 .remove = remove_one,
1488 .shutdown = shutdown,
1472 .err_handler = &mlx5_err_handler,1489 .err_handler = &mlx5_err_handler,
1473 .sriov_configure = mlx5_core_sriov_configure,1490 .sriov_configure = mlx5_core_sriov_configure,
1474};1491};
drivers/net/ethernet/mellanox/mlx5/core/port.c+5−5
@@ -247,8 +247,8 @@ int mlx5_query_port_admin_status(struct mlx5_core_dev *dev, · 246 unmodified lines
247}247}
248EXPORT_SYMBOL_GPL(mlx5_query_port_admin_status);248EXPORT_SYMBOL_GPL(mlx5_query_port_admin_status);
249 249
250static void mlx5_query_port_mtu(struct mlx5_core_dev *dev, int *admin_mtu,250static void mlx5_query_port_mtu(struct mlx5_core_dev *dev, u16 *admin_mtu,
251 int *max_mtu, int *oper_mtu, u8 port)251 u16 *max_mtu, u16 *oper_mtu, u8 port)
252{252{
253 u32 in[MLX5_ST_SZ_DW(pmtu_reg)];253 u32 in[MLX5_ST_SZ_DW(pmtu_reg)];
254 u32 out[MLX5_ST_SZ_DW(pmtu_reg)];254 u32 out[MLX5_ST_SZ_DW(pmtu_reg)];
@@ -268,7 +268,7 @@ static void mlx5_query_port_mtu(struct mlx5_core_dev *dev, int *admin_mtu, · 13 unmodified lines
268 *admin_mtu = MLX5_GET(pmtu_reg, out, admin_mtu);268 *admin_mtu = MLX5_GET(pmtu_reg, out, admin_mtu);
269}269}
270 270
271int mlx5_set_port_mtu(struct mlx5_core_dev *dev, int mtu, u8 port)271int mlx5_set_port_mtu(struct mlx5_core_dev *dev, u16 mtu, u8 port)
272{272{
273 u32 in[MLX5_ST_SZ_DW(pmtu_reg)];273 u32 in[MLX5_ST_SZ_DW(pmtu_reg)];
274 u32 out[MLX5_ST_SZ_DW(pmtu_reg)];274 u32 out[MLX5_ST_SZ_DW(pmtu_reg)];
@@ -283,14 +283,14 @@ int mlx5_set_port_mtu(struct mlx5_core_dev *dev, int mtu, u8 port) · 8 unmodified lines
283}283}
284EXPORT_SYMBOL_GPL(mlx5_set_port_mtu);284EXPORT_SYMBOL_GPL(mlx5_set_port_mtu);
285 285
286void mlx5_query_port_max_mtu(struct mlx5_core_dev *dev, int *max_mtu,286void mlx5_query_port_max_mtu(struct mlx5_core_dev *dev, u16 *max_mtu,
287 u8 port)287 u8 port)
288{288{
289 mlx5_query_port_mtu(dev, NULL, max_mtu, NULL, port);289 mlx5_query_port_mtu(dev, NULL, max_mtu, NULL, port);
290}290}
291EXPORT_SYMBOL_GPL(mlx5_query_port_max_mtu);291EXPORT_SYMBOL_GPL(mlx5_query_port_max_mtu);
292 292
293void mlx5_query_port_oper_mtu(struct mlx5_core_dev *dev, int *oper_mtu,293void mlx5_query_port_oper_mtu(struct mlx5_core_dev *dev, u16 *oper_mtu,
294 u8 port)294 u8 port)
295{295{
296 mlx5_query_port_mtu(dev, NULL, NULL, oper_mtu, port);296 mlx5_query_port_mtu(dev, NULL, NULL, oper_mtu, port);
drivers/net/ethernet/mellanox/mlx5/core/vport.c+40−0
@@ -196,6 +196,46 @@ int mlx5_modify_nic_vport_mac_address(struct mlx5_core_dev *mdev, · 195 unmodified lines
196}196}
197EXPORT_SYMBOL_GPL(mlx5_modify_nic_vport_mac_address);197EXPORT_SYMBOL_GPL(mlx5_modify_nic_vport_mac_address);
198 198
199int mlx5_query_nic_vport_mtu(struct mlx5_core_dev *mdev, u16 *mtu)
200{
201 int outlen = MLX5_ST_SZ_BYTES(query_nic_vport_context_out);
202 u32 *out;
203 int err;
204
205 out = mlx5_vzalloc(outlen);
206 if (!out)
207 return -ENOMEM;
208
209 err = mlx5_query_nic_vport_context(mdev, 0, out, outlen);
210 if (!err)
211 *mtu = MLX5_GET(query_nic_vport_context_out, out,
212 nic_vport_context.mtu);
213
214 kvfree(out);
215 return err;
216}
217EXPORT_SYMBOL_GPL(mlx5_query_nic_vport_mtu);
218
219int mlx5_modify_nic_vport_mtu(struct mlx5_core_dev *mdev, u16 mtu)
220{
221 int inlen = MLX5_ST_SZ_BYTES(modify_nic_vport_context_in);
222 void *in;
223 int err;
224
225 in = mlx5_vzalloc(inlen);
226 if (!in)
227 return -ENOMEM;
228
229 MLX5_SET(modify_nic_vport_context_in, in, field_select.mtu, 1);
230 MLX5_SET(modify_nic_vport_context_in, in, nic_vport_context.mtu, mtu);
231
232 err = mlx5_modify_nic_vport_context(mdev, in, inlen);
233
234 kvfree(in);
235 return err;
236}
237EXPORT_SYMBOL_GPL(mlx5_modify_nic_vport_mtu);
238
199int mlx5_query_nic_vport_mac_list(struct mlx5_core_dev *dev,239int mlx5_query_nic_vport_mac_list(struct mlx5_core_dev *dev,
200 u32 vport,240 u32 vport,
201 enum mlx5_list_type list_type,241 enum mlx5_list_type list_type,
drivers/net/ethernet/qlogic/qlcnic/qlcnic.h+2−2
@@ -37,8 +37,8 @@ · 36 unmodified lines
37 37
38#define _QLCNIC_LINUX_MAJOR 538#define _QLCNIC_LINUX_MAJOR 5
39#define _QLCNIC_LINUX_MINOR 339#define _QLCNIC_LINUX_MINOR 3
40#define _QLCNIC_LINUX_SUBVERSION 6340#define _QLCNIC_LINUX_SUBVERSION 64
41#define QLCNIC_LINUX_VERSIONID "5.3.63"41#define QLCNIC_LINUX_VERSIONID "5.3.64"
42#define QLCNIC_DRV_IDC_VER 0x0142#define QLCNIC_DRV_IDC_VER 0x01
43#define QLCNIC_DRIVER_VERSION ((_QLCNIC_LINUX_MAJOR << 16) |\43#define QLCNIC_DRIVER_VERSION ((_QLCNIC_LINUX_MAJOR << 16) |\
44 (_QLCNIC_LINUX_MINOR << 8) | (_QLCNIC_LINUX_SUBVERSION))44 (_QLCNIC_LINUX_MINOR << 8) | (_QLCNIC_LINUX_SUBVERSION))
drivers/net/ethernet/stmicro/stmmac/dwmac-socfpga.c+16−34
@@ -49,7 +49,6 @@ struct socfpga_dwmac { · 48 unmodified lines
49 u32 reg_shift;49 u32 reg_shift;
50 struct device *dev;50 struct device *dev;
51 struct regmap *sys_mgr_base_addr;51 struct regmap *sys_mgr_base_addr;
52 struct reset_control *stmmac_rst;
53 void __iomem *splitter_base;52 void __iomem *splitter_base;
54 bool f2h_ptp_ref_clk;53 bool f2h_ptp_ref_clk;
55};54};
@@ -92,15 +91,6 @@ static int socfpga_dwmac_parse_data(struct socfpga_dwmac *dwmac, struct device * · 36 unmodified lines
92 struct device_node *np_splitter;91 struct device_node *np_splitter;
93 struct resource res_splitter;92 struct resource res_splitter;
94 93
95 dwmac->stmmac_rst = devm_reset_control_get(dev,
96 STMMAC_RESOURCE_NAME);
97 if (IS_ERR(dwmac->stmmac_rst)) {
98 dev_info(dev, "Could not get reset control!\n");
99 if (PTR_ERR(dwmac->stmmac_rst) == -EPROBE_DEFER)
100 return -EPROBE_DEFER;
101 dwmac->stmmac_rst = NULL;
102 }
103
104 dwmac->interface = of_get_phy_mode(np);94 dwmac->interface = of_get_phy_mode(np);
105 95
106 sys_mgr_base_addr = syscon_regmap_lookup_by_phandle(np, "altr,sysmgr-syscon");96 sys_mgr_base_addr = syscon_regmap_lookup_by_phandle(np, "altr,sysmgr-syscon");
@@ -194,30 +184,23 @@ static int socfpga_dwmac_setup(struct socfpga_dwmac *dwmac) · 87 unmodified lines
194 return 0;184 return 0;
195}185}
196 186
197static void socfpga_dwmac_exit(struct platform_device *pdev, void *priv)
198{
199 struct socfpga_dwmac *dwmac = priv;
200
201 /* On socfpga platform exit, assert and hold reset to the
202 * enet controller - the default state after a hard reset.
203 */
204 if (dwmac->stmmac_rst)
205 reset_control_assert(dwmac->stmmac_rst);
206}
207
208static int socfpga_dwmac_init(struct platform_device *pdev, void *priv)187static int socfpga_dwmac_init(struct platform_device *pdev, void *priv)
209{188{
210 struct socfpga_dwmac *dwmac = priv;189 struct socfpga_dwmac *dwmac = priv;
211 struct net_device *ndev = platform_get_drvdata(pdev);190 struct net_device *ndev = platform_get_drvdata(pdev);
212 struct stmmac_priv *stpriv = NULL;191 struct stmmac_priv *stpriv = NULL;
213 int ret = 0;192 int ret = 0;
214 193
215 if (ndev)194 if (!ndev)
216 stpriv = netdev_priv(ndev);195 return -EINVAL;
196
197 stpriv = netdev_priv(ndev);
198 if (!stpriv)
199 return -EINVAL;
217 200
218 /* Assert reset to the enet controller before changing the phy mode */201 /* Assert reset to the enet controller before changing the phy mode */
219 if (dwmac->stmmac_rst)202 if (stpriv->stmmac_rst)
220 reset_control_assert(dwmac->stmmac_rst);203 reset_control_assert(stpriv->stmmac_rst);
221 204
222 /* Setup the phy mode in the system manager registers according to205 /* Setup the phy mode in the system manager registers according to
223 * devicetree configuration206 * devicetree configuration
@@ -227,8 +210,8 @@ static int socfpga_dwmac_init(struct platform_device *pdev, void *priv) · 3 unmodified lines
227 /* Deassert reset for the phy configuration to be sampled by210 /* Deassert reset for the phy configuration to be sampled by
228 * the enet controller, and operation to start in requested mode211 * the enet controller, and operation to start in requested mode
229 */212 */
230 if (dwmac->stmmac_rst)213 if (stpriv->stmmac_rst)
231 reset_control_deassert(dwmac->stmmac_rst);214 reset_control_deassert(stpriv->stmmac_rst);
232 215
233 /* Before the enet controller is suspended, the phy is suspended.216 /* Before the enet controller is suspended, the phy is suspended.
234 * This causes the phy clock to be gated. The enet controller is217 * This causes the phy clock to be gated. The enet controller is
@@ -245,7 +228,7 @@ static int socfpga_dwmac_init(struct platform_device *pdev, void *priv) · 10 unmodified lines
245 * control register 0, and can be modified by the phy driver228 * control register 0, and can be modified by the phy driver
246 * framework.229 * framework.
247 */230 */
248 if (stpriv && stpriv->phydev)231 if (stpriv->phydev)
249 phy_resume(stpriv->phydev);232 phy_resume(stpriv->phydev);
250 233
251 return ret;234 return ret;
@@ -285,14 +268,13 @@ static int socfpga_dwmac_probe(struct platform_device *pdev) · 33 unmodified lines
285 268
286 plat_dat->bsp_priv = dwmac;269 plat_dat->bsp_priv = dwmac;
287 plat_dat->init = socfpga_dwmac_init;270 plat_dat->init = socfpga_dwmac_init;
288 plat_dat->exit = socfpga_dwmac_exit;
289 plat_dat->fix_mac_speed = socfpga_dwmac_fix_mac_speed;271 plat_dat->fix_mac_speed = socfpga_dwmac_fix_mac_speed;
290 272
291 ret = socfpga_dwmac_init(pdev, plat_dat->bsp_priv);273 ret = stmmac_dvr_probe(&pdev->dev, plat_dat, &stmmac_res);
292 if (ret)274 if (!ret)
293 return ret;275 ret = socfpga_dwmac_init(pdev, dwmac);
294 276
295 return stmmac_dvr_probe(&pdev->dev, plat_dat, &stmmac_res);277 return ret;
296}278}
297 279
298static const struct of_device_id socfpga_dwmac_match[] = {280static const struct of_device_id socfpga_dwmac_match[] = {
drivers/net/macsec.c+42−23
@@ -880,12 +880,12 @@ static struct sk_buff *macsec_decrypt(struct sk_buff *skb, · 879 unmodified lines
880 macsec_skb_cb(skb)->valid = false;880 macsec_skb_cb(skb)->valid = false;
881 skb = skb_share_check(skb, GFP_ATOMIC);881 skb = skb_share_check(skb, GFP_ATOMIC);
882 if (!skb)882 if (!skb)
883 return NULL;883 return ERR_PTR(-ENOMEM);
884 884
885 req = aead_request_alloc(rx_sa->key.tfm, GFP_ATOMIC);885 req = aead_request_alloc(rx_sa->key.tfm, GFP_ATOMIC);
886 if (!req) {886 if (!req) {
887 kfree_skb(skb);887 kfree_skb(skb);
888 return NULL;888 return ERR_PTR(-ENOMEM);
889 }889 }
890 890
891 hdr = (struct macsec_eth_header *)skb->data;891 hdr = (struct macsec_eth_header *)skb->data;
@@ -905,7 +905,7 @@ static struct sk_buff *macsec_decrypt(struct sk_buff *skb, · 13 unmodified lines
905 skb = skb_unshare(skb, GFP_ATOMIC);905 skb = skb_unshare(skb, GFP_ATOMIC);
906 if (!skb) {906 if (!skb) {
907 aead_request_free(req);907 aead_request_free(req);
908 return NULL;908 return ERR_PTR(-ENOMEM);
909 }909 }
910 } else {910 } else {
911 /* integrity only: all headers + data authenticated */911 /* integrity only: all headers + data authenticated */
@@ -921,14 +921,14 @@ static struct sk_buff *macsec_decrypt(struct sk_buff *skb, · 9 unmodified lines
921 dev_hold(dev);921 dev_hold(dev);
922 ret = crypto_aead_decrypt(req);922 ret = crypto_aead_decrypt(req);
923 if (ret == -EINPROGRESS) {923 if (ret == -EINPROGRESS) {
924 return NULL;924 return ERR_PTR(ret);
925 } else if (ret != 0) {925 } else if (ret != 0) {
926 /* decryption/authentication failed926 /* decryption/authentication failed
927 * 10.6 if validateFrames is disabled, deliver anyway927 * 10.6 if validateFrames is disabled, deliver anyway
928 */928 */
929 if (ret != -EBADMSG) {929 if (ret != -EBADMSG) {
930 kfree_skb(skb);930 kfree_skb(skb);
931 skb = NULL;931 skb = ERR_PTR(ret);
932 }932 }
933 } else {933 } else {
934 macsec_skb_cb(skb)->valid = true;934 macsec_skb_cb(skb)->valid = true;
@@ -1146,8 +1146,10 @@ static rx_handler_result_t macsec_handle_frame(struct sk_buff **pskb) · 211 unmodified lines
1146 secy->validate_frames != MACSEC_VALIDATE_DISABLED)1146 secy->validate_frames != MACSEC_VALIDATE_DISABLED)
1147 skb = macsec_decrypt(skb, dev, rx_sa, sci, secy);1147 skb = macsec_decrypt(skb, dev, rx_sa, sci, secy);
1148 1148
1149 if (!skb) {1149 if (IS_ERR(skb)) {
1150 macsec_rxsa_put(rx_sa);1150 /* the decrypt callback needs the reference */
1151 if (PTR_ERR(skb) != -EINPROGRESS)
1152 macsec_rxsa_put(rx_sa);
1151 rcu_read_unlock();1153 rcu_read_unlock();
1152 *pskb = NULL;1154 *pskb = NULL;
1153 return RX_HANDLER_CONSUMED;1155 return RX_HANDLER_CONSUMED;
@@ -1161,7 +1163,8 @@ deliver: · 7 unmodified lines
1161 macsec_extra_len(macsec_skb_cb(skb)->has_sci));1163 macsec_extra_len(macsec_skb_cb(skb)->has_sci));
1162 macsec_reset_skb(skb, secy->netdev);1164 macsec_reset_skb(skb, secy->netdev);
1163 1165
1164 macsec_rxsa_put(rx_sa);1166 if (rx_sa)
1167 macsec_rxsa_put(rx_sa);
1165 count_rx(dev, skb->len);1168 count_rx(dev, skb->len);
1166 1169
1167 rcu_read_unlock();1170 rcu_read_unlock();
@@ -1622,8 +1625,9 @@ static int macsec_add_rxsa(struct sk_buff *skb, struct genl_info *info) · 454 unmodified lines
1622 }1625 }
1623 1626
1624 rx_sa = kmalloc(sizeof(*rx_sa), GFP_KERNEL);1627 rx_sa = kmalloc(sizeof(*rx_sa), GFP_KERNEL);
1625 if (init_rx_sa(rx_sa, nla_data(tb_sa[MACSEC_SA_ATTR_KEY]), secy->key_len,1628 if (!rx_sa || init_rx_sa(rx_sa, nla_data(tb_sa[MACSEC_SA_ATTR_KEY]),
1626 secy->icv_len)) {1629 secy->key_len, secy->icv_len)) {
1630 kfree(rx_sa);
1627 rtnl_unlock();1631 rtnl_unlock();
1628 return -ENOMEM;1632 return -ENOMEM;
1629 }1633 }
@@ -1768,6 +1772,7 @@ static int macsec_add_txsa(struct sk_buff *skb, struct genl_info *info) · 138 unmodified lines
1768 tx_sa = kmalloc(sizeof(*tx_sa), GFP_KERNEL);1772 tx_sa = kmalloc(sizeof(*tx_sa), GFP_KERNEL);
1769 if (!tx_sa || init_tx_sa(tx_sa, nla_data(tb_sa[MACSEC_SA_ATTR_KEY]),1773 if (!tx_sa || init_tx_sa(tx_sa, nla_data(tb_sa[MACSEC_SA_ATTR_KEY]),
1770 secy->key_len, secy->icv_len)) {1774 secy->key_len, secy->icv_len)) {
1775 kfree(tx_sa);
1771 rtnl_unlock();1776 rtnl_unlock();
1772 return -ENOMEM;1777 return -ENOMEM;
1773 }1778 }
@@ -2227,7 +2232,8 @@ static int nla_put_secy(struct macsec_secy *secy, struct sk_buff *skb) · 453 unmodified lines
2227 return 1;2232 return 1;
2228 2233
2229 if (nla_put_sci(skb, MACSEC_SECY_ATTR_SCI, secy->sci) ||2234 if (nla_put_sci(skb, MACSEC_SECY_ATTR_SCI, secy->sci) ||
2230 nla_put_u64(skb, MACSEC_SECY_ATTR_CIPHER_SUITE, DEFAULT_CIPHER_ID) ||2235 nla_put_u64(skb, MACSEC_SECY_ATTR_CIPHER_SUITE,
2236 MACSEC_DEFAULT_CIPHER_ID) ||
2231 nla_put_u8(skb, MACSEC_SECY_ATTR_ICV_LEN, secy->icv_len) ||2237 nla_put_u8(skb, MACSEC_SECY_ATTR_ICV_LEN, secy->icv_len) ||
2232 nla_put_u8(skb, MACSEC_SECY_ATTR_OPER, secy->operational) ||2238 nla_put_u8(skb, MACSEC_SECY_ATTR_OPER, secy->operational) ||
2233 nla_put_u8(skb, MACSEC_SECY_ATTR_PROTECT, secy->protect_frames) ||2239 nla_put_u8(skb, MACSEC_SECY_ATTR_PROTECT, secy->protect_frames) ||
@@ -2268,7 +2274,7 @@ static int dump_secy(struct macsec_secy *secy, struct net_device *dev, · 34 unmodified lines
2268 if (!hdr)2274 if (!hdr)
2269 return -EMSGSIZE;2275 return -EMSGSIZE;
2270 2276
2271 rtnl_lock();2277 genl_dump_check_consistent(cb, hdr, &macsec_fam);
2272 2278
2273 if (nla_put_u32(skb, MACSEC_ATTR_IFINDEX, dev->ifindex))2279 if (nla_put_u32(skb, MACSEC_ATTR_IFINDEX, dev->ifindex))
2274 goto nla_put_failure;2280 goto nla_put_failure;
@@ -2429,18 +2435,17 @@ static int dump_secy(struct macsec_secy *secy, struct net_device *dev, · 154 unmodified lines
2429 2435
2430 nla_nest_end(skb, rxsc_list);2436 nla_nest_end(skb, rxsc_list);
2431 2437
2432 rtnl_unlock();
2433
2434 genlmsg_end(skb, hdr);2438 genlmsg_end(skb, hdr);
2435 2439
2436 return 0;2440 return 0;
2437 2441
2438nla_put_failure:2442nla_put_failure:
2439 rtnl_unlock();
2440 genlmsg_cancel(skb, hdr);2443 genlmsg_cancel(skb, hdr);
2441 return -EMSGSIZE;2444 return -EMSGSIZE;
2442}2445}
2443 2446
2447static int macsec_generation = 1; /* protected by RTNL */
2448
2444static int macsec_dump_txsc(struct sk_buff *skb, struct netlink_callback *cb)2449static int macsec_dump_txsc(struct sk_buff *skb, struct netlink_callback *cb)
2445{2450{
2446 struct net *net = sock_net(skb->sk);2451 struct net *net = sock_net(skb->sk);
@@ -2450,6 +2455,10 @@ static int macsec_dump_txsc(struct sk_buff *skb, struct netlink_callback *cb) · 3 unmodified lines
2450 dev_idx = cb->args[0];2455 dev_idx = cb->args[0];
2451 2456
2452 d = 0;2457 d = 0;
2458 rtnl_lock();
2459
2460 cb->seq = macsec_generation;
2461
2453 for_each_netdev(net, dev) {2462 for_each_netdev(net, dev) {
2454 struct macsec_secy *secy;2463 struct macsec_secy *secy;
2455 2464
@@ -2467,6 +2476,7 @@ next: · 11 unmodified lines
2467 }2476 }
2468 2477
2469done:2478done:
2479 rtnl_unlock();
2470 cb->args[0] = d;2480 cb->args[0] = d;
2471 return skb->len;2481 return skb->len;
2472}2482}
@@ -2920,10 +2930,14 @@ static void macsec_dellink(struct net_device *dev, struct list_head *head) · 447 unmodified lines
2920 struct net_device *real_dev = macsec->real_dev;2930 struct net_device *real_dev = macsec->real_dev;
2921 struct macsec_rxh_data *rxd = macsec_data_rtnl(real_dev);2931 struct macsec_rxh_data *rxd = macsec_data_rtnl(real_dev);
2922 2932
2933 macsec_generation++;
2934
2923 unregister_netdevice_queue(dev, head);2935 unregister_netdevice_queue(dev, head);
2924 list_del_rcu(&macsec->secys);2936 list_del_rcu(&macsec->secys);
2925 if (list_empty(&rxd->secys))2937 if (list_empty(&rxd->secys)) {
2926 netdev_rx_handler_unregister(real_dev);2938 netdev_rx_handler_unregister(real_dev);
2939 kfree(rxd);
2940 }
2927 2941
2928 macsec_del_dev(macsec);2942 macsec_del_dev(macsec);
2929}2943}
@@ -2945,8 +2959,10 @@ static int register_macsec_dev(struct net_device *real_dev, · 15 unmodified lines
2945 2959
2946 err = netdev_rx_handler_register(real_dev, macsec_handle_frame,2960 err = netdev_rx_handler_register(real_dev, macsec_handle_frame,
2947 rxd);2961 rxd);
2948 if (err < 0)2962 if (err < 0) {
2963 kfree(rxd);
2949 return err;2964 return err;
2965 }
2950 }2966 }
2951 2967
2952 list_add_tail_rcu(&macsec->secys, &rxd->secys);2968 list_add_tail_rcu(&macsec->secys, &rxd->secys);
@@ -3066,6 +3082,8 @@ static int macsec_newlink(struct net *net, struct net_device *dev, · 113 unmodified lines
3066 if (err < 0)3082 if (err < 0)
3067 goto del_dev;3083 goto del_dev;
3068 3084
3085 macsec_generation++;
3086
3069 dev_hold(real_dev);3087 dev_hold(real_dev);
3070 3088
3071 return 0;3089 return 0;
@@ -3079,7 +3097,7 @@ unregister: · 7 unmodified lines
3079 3097
3080static int macsec_validate_attr(struct nlattr *tb[], struct nlattr *data[])3098static int macsec_validate_attr(struct nlattr *tb[], struct nlattr *data[])
3081{3099{
3082 u64 csid = DEFAULT_CIPHER_ID;3100 u64 csid = MACSEC_DEFAULT_CIPHER_ID;
3083 u8 icv_len = DEFAULT_ICV_LEN;3101 u8 icv_len = DEFAULT_ICV_LEN;
3084 int flag;3102 int flag;
3085 bool es, scb, sci;3103 bool es, scb, sci;
@@ -3094,8 +3112,8 @@ static int macsec_validate_attr(struct nlattr *tb[], struct nlattr *data[]) · 8 unmodified lines
3094 icv_len = nla_get_u8(data[IFLA_MACSEC_ICV_LEN]);3112 icv_len = nla_get_u8(data[IFLA_MACSEC_ICV_LEN]);
3095 3113
3096 switch (csid) {3114 switch (csid) {
3097 case DEFAULT_CIPHER_ID:3115 case MACSEC_DEFAULT_CIPHER_ID:
3098 case DEFAULT_CIPHER_ALT:3116 case MACSEC_DEFAULT_CIPHER_ALT:
3099 if (icv_len < MACSEC_MIN_ICV_LEN ||3117 if (icv_len < MACSEC_MIN_ICV_LEN ||
3100 icv_len > MACSEC_MAX_ICV_LEN)3118 icv_len > MACSEC_MAX_ICV_LEN)
3101 return -EINVAL;3119 return -EINVAL;
@@ -3129,8 +3147,8 @@ static int macsec_validate_attr(struct nlattr *tb[], struct nlattr *data[]) · 27 unmodified lines
3129 nla_get_u8(data[IFLA_MACSEC_VALIDATION]) > MACSEC_VALIDATE_MAX)3147 nla_get_u8(data[IFLA_MACSEC_VALIDATION]) > MACSEC_VALIDATE_MAX)
3130 return -EINVAL;3148 return -EINVAL;
3131 3149
3132 if ((data[IFLA_MACSEC_PROTECT] &&3150 if ((data[IFLA_MACSEC_REPLAY_PROTECT] &&
3133 nla_get_u8(data[IFLA_MACSEC_PROTECT])) &&3151 nla_get_u8(data[IFLA_MACSEC_REPLAY_PROTECT])) &&
3134 !data[IFLA_MACSEC_WINDOW])3152 !data[IFLA_MACSEC_WINDOW])
3135 return -EINVAL;3153 return -EINVAL;
3136 3154
@@ -3168,7 +3186,8 @@ static int macsec_fill_info(struct sk_buff *skb, · 31 unmodified lines
3168 3186
3169 if (nla_put_sci(skb, IFLA_MACSEC_SCI, secy->sci) ||3187 if (nla_put_sci(skb, IFLA_MACSEC_SCI, secy->sci) ||
3170 nla_put_u8(skb, IFLA_MACSEC_ICV_LEN, secy->icv_len) ||3188 nla_put_u8(skb, IFLA_MACSEC_ICV_LEN, secy->icv_len) ||
3171 nla_put_u64(skb, IFLA_MACSEC_CIPHER_SUITE, DEFAULT_CIPHER_ID) ||3189 nla_put_u64(skb, IFLA_MACSEC_CIPHER_SUITE,
3190 MACSEC_DEFAULT_CIPHER_ID) ||
3172 nla_put_u8(skb, IFLA_MACSEC_ENCODING_SA, tx_sc->encoding_sa) ||3191 nla_put_u8(skb, IFLA_MACSEC_ENCODING_SA, tx_sc->encoding_sa) ||
3173 nla_put_u8(skb, IFLA_MACSEC_ENCRYPT, tx_sc->encrypt) ||3192 nla_put_u8(skb, IFLA_MACSEC_ENCRYPT, tx_sc->encrypt) ||
3174 nla_put_u8(skb, IFLA_MACSEC_PROTECT, secy->protect_frames) ||3193 nla_put_u8(skb, IFLA_MACSEC_PROTECT, secy->protect_frames) ||
drivers/platform/x86/toshiba_acpi.c+1−1
@@ -135,7 +135,7 @@ MODULE_LICENSE("GPL"); · 134 unmodified lines
135/* Field definitions */135/* Field definitions */
136#define HCI_ACCEL_MASK 0x7fff136#define HCI_ACCEL_MASK 0x7fff
137#define HCI_HOTKEY_DISABLE 0x0b137#define HCI_HOTKEY_DISABLE 0x0b
138#define HCI_HOTKEY_ENABLE 0x01138#define HCI_HOTKEY_ENABLE 0x09
139#define HCI_HOTKEY_SPECIAL_FUNCTIONS 0x10139#define HCI_HOTKEY_SPECIAL_FUNCTIONS 0x10
140#define HCI_LCD_BRIGHTNESS_BITS 3140#define HCI_LCD_BRIGHTNESS_BITS 3
141#define HCI_LCD_BRIGHTNESS_SHIFT (16-HCI_LCD_BRIGHTNESS_BITS)141#define HCI_LCD_BRIGHTNESS_SHIFT (16-HCI_LCD_BRIGHTNESS_BITS)
drivers/rapidio/devices/rio_mport_cdev.c+2−2
@@ -2669,9 +2669,9 @@ static int __init mport_init(void) · 2668 unmodified lines
2669 2669
2670 /* Create device class needed by udev */2670 /* Create device class needed by udev */
2671 dev_class = class_create(THIS_MODULE, DRV_NAME);2671 dev_class = class_create(THIS_MODULE, DRV_NAME);
2672 if (!dev_class) {2672 if (IS_ERR(dev_class)) {
2673 rmcd_error("Unable to create " DRV_NAME " class");2673 rmcd_error("Unable to create " DRV_NAME " class");
2674 return -EINVAL;2674 return PTR_ERR(dev_class);
2675 }2675 }
2676 2676
2677 ret = alloc_chrdev_region(&dev_number, 0, RIO_MAX_MPORTS, DRV_NAME);2677 ret = alloc_chrdev_region(&dev_number, 0, RIO_MAX_MPORTS, DRV_NAME);
drivers/s390/char/sclp_ctl.c+7−5
@@ -56,6 +56,7 @@ static int sclp_ctl_ioctl_sccb(void __user *user_area) · 55 unmodified lines
56{56{
57 struct sclp_ctl_sccb ctl_sccb;57 struct sclp_ctl_sccb ctl_sccb;
58 struct sccb_header *sccb;58 struct sccb_header *sccb;
59 unsigned long copied;
59 int rc;60 int rc;
60 61
61 if (copy_from_user(&ctl_sccb, user_area, sizeof(ctl_sccb)))62 if (copy_from_user(&ctl_sccb, user_area, sizeof(ctl_sccb)))
@@ -65,14 +66,15 @@ static int sclp_ctl_ioctl_sccb(void __user *user_area) · 3 unmodified lines
65 sccb = (void *) get_zeroed_page(GFP_KERNEL | GFP_DMA);66 sccb = (void *) get_zeroed_page(GFP_KERNEL | GFP_DMA);
66 if (!sccb)67 if (!sccb)
67 return -ENOMEM;68 return -ENOMEM;
68 if (copy_from_user(sccb, u64_to_uptr(ctl_sccb.sccb), sizeof(*sccb))) {69 copied = PAGE_SIZE -
70 copy_from_user(sccb, u64_to_uptr(ctl_sccb.sccb), PAGE_SIZE);
71 if (offsetof(struct sccb_header, length) +
72 sizeof(sccb->length) > copied || sccb->length > copied) {
69 rc = -EFAULT;73 rc = -EFAULT;
70 goto out_free;74 goto out_free;
71 }75 }
72 if (sccb->length > PAGE_SIZE || sccb->length < 8)76 if (sccb->length < 8) {
73 return -EINVAL;77 rc = -EINVAL;
74 if (copy_from_user(sccb, u64_to_uptr(ctl_sccb.sccb), sccb->length)) {
75 rc = -EFAULT;
76 goto out_free;78 goto out_free;
77 }79 }
78 rc = sclp_sync_request(ctl_sccb.cmdw, sccb);80 rc = sclp_sync_request(ctl_sccb.cmdw, sccb);
drivers/scsi/cxgbi/libcxgbi.c+1−0
@@ -688,6 +688,7 @@ static struct rt6_info *find_route_ipv6(const struct in6_addr *saddr, · 687 unmodified lines
688{688{
689 struct flowi6 fl;689 struct flowi6 fl;
690 690
691 memset(&fl, 0, sizeof(fl));
691 if (saddr)692 if (saddr)
692 memcpy(&fl.saddr, saddr, sizeof(struct in6_addr));693 memcpy(&fl.saddr, saddr, sizeof(struct in6_addr));
693 if (daddr)694 if (daddr)
drivers/soc/mediatek/mtk-scpsys.c+6−5
@@ -491,13 +491,14 @@ static int scpsys_probe(struct platform_device *pdev) · 490 unmodified lines
491 genpd->dev_ops.active_wakeup = scpsys_active_wakeup;491 genpd->dev_ops.active_wakeup = scpsys_active_wakeup;
492 492
493 /*493 /*
494 * With CONFIG_PM disabled turn on all domains to make the494 * Initially turn on all domains to make the domains usable
495 * hardware usable.495 * with !CONFIG_PM and to get the hardware in sync with the
496 * software. The unused domains will be switched off during
497 * late_init time.
496 */498 */
497 if (!IS_ENABLED(CONFIG_PM))499 genpd->power_on(genpd);
498 genpd->power_on(genpd);
499 500
500 pm_genpd_init(genpd, NULL, true);501 pm_genpd_init(genpd, NULL, false);
501 }502 }
502 503
503 /*504 /*
drivers/staging/media/davinci_vpfe/vpfe_video.c+34−20
@@ -172,9 +172,11 @@ static int vpfe_prepare_pipeline(struct vpfe_video_device *video) · 171 unmodified lines
172static int vpfe_update_pipe_state(struct vpfe_video_device *video)172static int vpfe_update_pipe_state(struct vpfe_video_device *video)
173{173{
174 struct vpfe_pipeline *pipe = &video->pipe;174 struct vpfe_pipeline *pipe = &video->pipe;
175 int ret;
175 176
176 if (vpfe_prepare_pipeline(video))177 ret = vpfe_prepare_pipeline(video);
177 return vpfe_prepare_pipeline(video);178 if (ret)
179 return ret;
178 180
179 /*181 /*
180 * Find out if there is any input video182 * Find out if there is any input video
@@ -182,9 +184,10 @@ static int vpfe_update_pipe_state(struct vpfe_video_device *video) · 1 unmodified line
182 */184 */
183 if (pipe->input_num == 0) {185 if (pipe->input_num == 0) {
184 pipe->state = VPFE_PIPELINE_STREAM_CONTINUOUS;186 pipe->state = VPFE_PIPELINE_STREAM_CONTINUOUS;
185 if (vpfe_update_current_ext_subdev(video)) {187 ret = vpfe_update_current_ext_subdev(video);
188 if (ret) {
186 pr_err("Invalid external subdev\n");189 pr_err("Invalid external subdev\n");
187 return vpfe_update_current_ext_subdev(video);190 return ret;
188 }191 }
189 } else {192 } else {
190 pipe->state = VPFE_PIPELINE_STREAM_SINGLESHOT;193 pipe->state = VPFE_PIPELINE_STREAM_SINGLESHOT;
@@ -667,6 +670,7 @@ static int vpfe_enum_fmt(struct file *file, void *priv, · 476 unmodified lines
667 struct v4l2_subdev *subdev;670 struct v4l2_subdev *subdev;
668 struct v4l2_format format;671 struct v4l2_format format;
669 struct media_pad *remote;672 struct media_pad *remote;
673 int ret;
670 674
671 v4l2_dbg(1, debug, &vpfe_dev->v4l2_dev, "vpfe_enum_fmt\n");675 v4l2_dbg(1, debug, &vpfe_dev->v4l2_dev, "vpfe_enum_fmt\n");
672 676
@@ -695,10 +699,11 @@ static int vpfe_enum_fmt(struct file *file, void *priv, · 22 unmodified lines
695 sd_fmt.pad = remote->index;699 sd_fmt.pad = remote->index;
696 sd_fmt.which = V4L2_SUBDEV_FORMAT_ACTIVE;700 sd_fmt.which = V4L2_SUBDEV_FORMAT_ACTIVE;
697 /* get output format of remote subdev */701 /* get output format of remote subdev */
698 if (v4l2_subdev_call(subdev, pad, get_fmt, NULL, &sd_fmt)) {702 ret = v4l2_subdev_call(subdev, pad, get_fmt, NULL, &sd_fmt);
703 if (ret) {
699 v4l2_err(&vpfe_dev->v4l2_dev,704 v4l2_err(&vpfe_dev->v4l2_dev,
700 "invalid remote subdev for video node\n");705 "invalid remote subdev for video node\n");
701 return v4l2_subdev_call(subdev, pad, get_fmt, NULL, &sd_fmt);706 return ret;
702 }707 }
703 /* convert to pix format */708 /* convert to pix format */
704 mbus.code = sd_fmt.format.code;709 mbus.code = sd_fmt.format.code;
@@ -725,6 +730,7 @@ static int vpfe_s_fmt(struct file *file, void *priv, · 20 unmodified lines
725 struct vpfe_video_device *video = video_drvdata(file);730 struct vpfe_video_device *video = video_drvdata(file);
726 struct vpfe_device *vpfe_dev = video->vpfe_dev;731 struct vpfe_device *vpfe_dev = video->vpfe_dev;
727 struct v4l2_format format;732 struct v4l2_format format;
733 int ret;
728 734
729 v4l2_dbg(1, debug, &vpfe_dev->v4l2_dev, "vpfe_s_fmt\n");735 v4l2_dbg(1, debug, &vpfe_dev->v4l2_dev, "vpfe_s_fmt\n");
730 /* If streaming is started, return error */736 /* If streaming is started, return error */
@@ -733,8 +739,9 @@ static int vpfe_s_fmt(struct file *file, void *priv, · 2 unmodified lines
733 return -EBUSY;739 return -EBUSY;
734 }740 }
735 /* get adjacent subdev's output pad format */741 /* get adjacent subdev's output pad format */
736 if (__vpfe_video_get_format(video, &format))742 ret = __vpfe_video_get_format(video, &format);
737 return __vpfe_video_get_format(video, &format);743 if (ret)
744 return ret;
738 *fmt = format;745 *fmt = format;
739 video->fmt = *fmt;746 video->fmt = *fmt;
740 return 0;747 return 0;
@@ -757,11 +764,13 @@ static int vpfe_try_fmt(struct file *file, void *priv, · 16 unmodified lines
757 struct vpfe_video_device *video = video_drvdata(file);764 struct vpfe_video_device *video = video_drvdata(file);
758 struct vpfe_device *vpfe_dev = video->vpfe_dev;765 struct vpfe_device *vpfe_dev = video->vpfe_dev;
759 struct v4l2_format format;766 struct v4l2_format format;
767 int ret;
760 768
761 v4l2_dbg(1, debug, &vpfe_dev->v4l2_dev, "vpfe_try_fmt\n");769 v4l2_dbg(1, debug, &vpfe_dev->v4l2_dev, "vpfe_try_fmt\n");
762 /* get adjacent subdev's output pad format */770 /* get adjacent subdev's output pad format */
763 if (__vpfe_video_get_format(video, &format))771 ret = __vpfe_video_get_format(video, &format);
764 return __vpfe_video_get_format(video, &format);772 if (ret)
773 return ret;
765 774
766 *fmt = format;775 *fmt = format;
767 return 0;776 return 0;
@@ -838,8 +847,9 @@ static int vpfe_s_input(struct file *file, void *priv, unsigned int index) · 70 unmodified lines
838 847
839 v4l2_dbg(1, debug, &vpfe_dev->v4l2_dev, "vpfe_s_input\n");848 v4l2_dbg(1, debug, &vpfe_dev->v4l2_dev, "vpfe_s_input\n");
840 849
841 if (mutex_lock_interruptible(&video->lock))850 ret = mutex_lock_interruptible(&video->lock);
842 return mutex_lock_interruptible(&video->lock);851 if (ret)
852 return ret;
843 /*853 /*
844 * If streaming is started return device busy854 * If streaming is started return device busy
845 * error855 * error
@@ -940,8 +950,9 @@ static int vpfe_s_std(struct file *file, void *priv, v4l2_std_id std_id) · 94 unmodified lines
940 v4l2_dbg(1, debug, &vpfe_dev->v4l2_dev, "vpfe_s_std\n");950 v4l2_dbg(1, debug, &vpfe_dev->v4l2_dev, "vpfe_s_std\n");
941 951
942 /* Call decoder driver function to set the standard */952 /* Call decoder driver function to set the standard */
943 if (mutex_lock_interruptible(&video->lock))953 ret = mutex_lock_interruptible(&video->lock);
944 return mutex_lock_interruptible(&video->lock);954 if (ret)
955 return ret;
945 sdinfo = video->current_ext_subdev;956 sdinfo = video->current_ext_subdev;
946 /* If streaming is started, return device busy error */957 /* If streaming is started, return device busy error */
947 if (video->started) {958 if (video->started) {
@@ -1327,8 +1338,9 @@ static int vpfe_reqbufs(struct file *file, void *priv, · 379 unmodified lines
1327 return -EINVAL;1338 return -EINVAL;
1328 }1339 }
1329 1340
1330 if (mutex_lock_interruptible(&video->lock))1341 ret = mutex_lock_interruptible(&video->lock);
1331 return mutex_lock_interruptible(&video->lock);1342 if (ret)
1343 return ret;
1332 1344
1333 if (video->io_usrs != 0) {1345 if (video->io_usrs != 0) {
1334 v4l2_err(&vpfe_dev->v4l2_dev, "Only one IO user allowed\n");1346 v4l2_err(&vpfe_dev->v4l2_dev, "Only one IO user allowed\n");
@@ -1354,10 +1366,11 @@ static int vpfe_reqbufs(struct file *file, void *priv, · 19 unmodified lines
1354 q->buf_struct_size = sizeof(struct vpfe_cap_buffer);1366 q->buf_struct_size = sizeof(struct vpfe_cap_buffer);
1355 q->timestamp_flags = V4L2_BUF_FLAG_TIMESTAMP_MONOTONIC;1367 q->timestamp_flags = V4L2_BUF_FLAG_TIMESTAMP_MONOTONIC;
1356 1368
1357 if (vb2_queue_init(q)) {1369 ret = vb2_queue_init(q);
1370 if (ret) {
1358 v4l2_err(&vpfe_dev->v4l2_dev, "vb2_queue_init() failed\n");1371 v4l2_err(&vpfe_dev->v4l2_dev, "vb2_queue_init() failed\n");
1359 vb2_dma_contig_cleanup_ctx(vpfe_dev->pdev);1372 vb2_dma_contig_cleanup_ctx(vpfe_dev->pdev);
1360 return vb2_queue_init(q);1373 return ret;
1361 }1374 }
1362 1375
1363 fh->io_allowed = 1;1376 fh->io_allowed = 1;
@@ -1533,8 +1546,9 @@ static int vpfe_streamoff(struct file *file, void *priv, · 169 unmodified lines
1533 return -EINVAL;1546 return -EINVAL;
1534 }1547 }
1535 1548
1536 if (mutex_lock_interruptible(&video->lock))1549 ret = mutex_lock_interruptible(&video->lock);
1537 return mutex_lock_interruptible(&video->lock);1550 if (ret)
1551 return ret;
1538 1552
1539 vpfe_stop_capture(video);1553 vpfe_stop_capture(video);
1540 ret = vb2_streamoff(&video->buffer_queue, buf_type);1554 ret = vb2_streamoff(&video->buffer_queue, buf_type);
drivers/staging/rdma/hfi1/TODO+1−1
@@ -3,4 +3,4 @@ July, 2015 · 2 unmodified lines
3- Remove unneeded file entries in sysfs3- Remove unneeded file entries in sysfs
4- Remove software processing of IB protocol and place in library for use4- Remove software processing of IB protocol and place in library for use
5 by qib, ipath (if still present), hfi1, and eventually soft-roce5 by qib, ipath (if still present), hfi1, and eventually soft-roce
6 6- Replace incorrect uAPI
drivers/staging/rdma/hfi1/file_ops.c+35−56
@@ -49,6 +49,8 @@ · 48 unmodified lines
49#include <linux/vmalloc.h>49#include <linux/vmalloc.h>
50#include <linux/io.h>50#include <linux/io.h>
51 51
52#include <rdma/ib.h>
53
52#include "hfi.h"54#include "hfi.h"
53#include "pio.h"55#include "pio.h"
54#include "device.h"56#include "device.h"
@@ -190,6 +192,10 @@ static ssize_t hfi1_file_write(struct file *fp, const char __user *data, · 135 unmodified lines
190 int uctxt_required = 1;192 int uctxt_required = 1;
191 int must_be_root = 0;193 int must_be_root = 0;
192 194
195 /* FIXME: This interface cannot continue out of staging */
196 if (WARN_ON_ONCE(!ib_safe_file_access(fp)))
197 return -EACCES;
198
193 if (count < sizeof(cmd)) {199 if (count < sizeof(cmd)) {
194 ret = -EINVAL;200 ret = -EINVAL;
195 goto bail;201 goto bail;
@@ -791,15 +797,16 @@ static int hfi1_file_close(struct inode *inode, struct file *fp) · 595 unmodified lines
791 spin_unlock_irqrestore(&dd->uctxt_lock, flags);797 spin_unlock_irqrestore(&dd->uctxt_lock, flags);
792 798
793 dd->rcd[uctxt->ctxt] = NULL;799 dd->rcd[uctxt->ctxt] = NULL;
800
801 hfi1_user_exp_rcv_free(fdata);
802 hfi1_clear_ctxt_pkey(dd, uctxt->ctxt);
803
794 uctxt->rcvwait_to = 0;804 uctxt->rcvwait_to = 0;
795 uctxt->piowait_to = 0;805 uctxt->piowait_to = 0;
796 uctxt->rcvnowait = 0;806 uctxt->rcvnowait = 0;
797 uctxt->pionowait = 0;807 uctxt->pionowait = 0;
798 uctxt->event_flags = 0;808 uctxt->event_flags = 0;
799 809
800 hfi1_user_exp_rcv_free(fdata);
801 hfi1_clear_ctxt_pkey(dd, uctxt->ctxt);
802
803 hfi1_stats.sps_ctxts--;810 hfi1_stats.sps_ctxts--;
804 if (++dd->freectxts == dd->num_user_contexts)811 if (++dd->freectxts == dd->num_user_contexts)
805 aspm_enable_all(dd);812 aspm_enable_all(dd);
@@ -1127,27 +1134,13 @@ bail: · 321 unmodified lines
1127 1134
1128static int user_init(struct file *fp)1135static int user_init(struct file *fp)
1129{1136{
1130 int ret;
1131 unsigned int rcvctrl_ops = 0;1137 unsigned int rcvctrl_ops = 0;
1132 struct hfi1_filedata *fd = fp->private_data;1138 struct hfi1_filedata *fd = fp->private_data;
1133 struct hfi1_ctxtdata *uctxt = fd->uctxt;1139 struct hfi1_ctxtdata *uctxt = fd->uctxt;
1134 1140
1135 /* make sure that the context has already been setup */1141 /* make sure that the context has already been setup */
1136 if (!test_bit(HFI1_CTXT_SETUP_DONE, &uctxt->event_flags)) {1142 if (!test_bit(HFI1_CTXT_SETUP_DONE, &uctxt->event_flags))
1137 ret = -EFAULT;1143 return -EFAULT;
1138 goto done;
1139 }
1140
1141 /*
1142 * Subctxts don't need to initialize anything since master
1143 * has done it.
1144 */
1145 if (fd->subctxt) {
1146 ret = wait_event_interruptible(uctxt->wait, !test_bit(
1147 HFI1_CTXT_MASTER_UNINIT,
1148 &uctxt->event_flags));
1149 goto expected;
1150 }
1151 1144
1152 /* initialize poll variables... */1145 /* initialize poll variables... */
1153 uctxt->urgent = 0;1146 uctxt->urgent = 0;
@@ -1202,19 +1195,7 @@ static int user_init(struct file *fp) · 48 unmodified lines
1202 wake_up(&uctxt->wait);1195 wake_up(&uctxt->wait);
1203 }1196 }
1204 1197
1205expected:1198 return 0;
1206 /*
1207 * Expected receive has to be setup for all processes (including
1208 * shared contexts). However, it has to be done after the master
1209 * context has been fully configured as it depends on the
1210 * eager/expected split of the RcvArray entries.
1211 * Setting it up here ensures that the subcontexts will be waiting
1212 * (due to the above wait_event_interruptible() until the master
1213 * is setup.
1214 */
1215 ret = hfi1_user_exp_rcv_init(fp);
1216done:
1217 return ret;
1218}1199}
1219 1200
1220static int get_ctxt_info(struct file *fp, void __user *ubase, __u32 len)1201static int get_ctxt_info(struct file *fp, void __user *ubase, __u32 len)
@@ -1261,7 +1242,7 @@ static int setup_ctxt(struct file *fp) · 40 unmodified lines
1261 int ret = 0;1242 int ret = 0;
1262 1243
1263 /*1244 /*
1264 * Context should be set up only once (including allocation and1245 * Context should be set up only once, including allocation and
1265 * programming of eager buffers. This is done if context sharing1246 * programming of eager buffers. This is done if context sharing
1266 * is not requested or by the master process.1247 * is not requested or by the master process.
1267 */1248 */
@@ -1282,8 +1263,27 @@ static int setup_ctxt(struct file *fp) · 14 unmodified lines
1282 if (ret)1263 if (ret)
1283 goto done;1264 goto done;
1284 }1265 }
1266 } else {
1267 ret = wait_event_interruptible(uctxt->wait, !test_bit(
1268 HFI1_CTXT_MASTER_UNINIT,
1269 &uctxt->event_flags));
1270 if (ret)
1271 goto done;
1285 }1272 }
1273
1286 ret = hfi1_user_sdma_alloc_queues(uctxt, fp);1274 ret = hfi1_user_sdma_alloc_queues(uctxt, fp);
1275 if (ret)
1276 goto done;
1277 /*
1278 * Expected receive has to be setup for all processes (including
1279 * shared contexts). However, it has to be done after the master
1280 * context has been fully configured as it depends on the
1281 * eager/expected split of the RcvArray entries.
1282 * Setting it up here ensures that the subcontexts will be waiting
1283 * (due to the above wait_event_interruptible() until the master
1284 * is setup.
1285 */
1286 ret = hfi1_user_exp_rcv_init(fp);
1287 if (ret)1287 if (ret)
1288 goto done;1288 goto done;
1289 1289
@@ -1565,29 +1565,8 @@ static loff_t ui_lseek(struct file *filp, loff_t offset, int whence) · 275 unmodified lines
1565{1565{
1566 struct hfi1_devdata *dd = filp->private_data;1566 struct hfi1_devdata *dd = filp->private_data;
1567 1567
1568 switch (whence) {1568 return fixed_size_llseek(filp, offset, whence,
1569 case SEEK_SET:1569 (dd->kregend - dd->kregbase) + DC8051_DATA_MEM_SIZE);
1570 break;
1571 case SEEK_CUR:
1572 offset += filp->f_pos;
1573 break;
1574 case SEEK_END:
1575 offset = ((dd->kregend - dd->kregbase) + DC8051_DATA_MEM_SIZE) -
1576 offset;
1577 break;
1578 default:
1579 return -EINVAL;
1580 }
1581
1582 if (offset < 0)
1583 return -EINVAL;
1584
1585 if (offset >= (dd->kregend - dd->kregbase) + DC8051_DATA_MEM_SIZE)
1586 return -EINVAL;
1587
1588 filp->f_pos = offset;
1589
1590 return filp->f_pos;
1591}1570}
1592 1571
1593/* NOTE: assumes unsigned long is 8 bytes */1572/* NOTE: assumes unsigned long is 8 bytes */
drivers/staging/rdma/hfi1/mmu_rb.c+25−15
@@ -71,6 +71,7 @@ static inline void mmu_notifier_range_start(struct mmu_notifier *, · 70 unmodified lines
71 struct mm_struct *,71 struct mm_struct *,
72 unsigned long, unsigned long);72 unsigned long, unsigned long);
73static void mmu_notifier_mem_invalidate(struct mmu_notifier *,73static void mmu_notifier_mem_invalidate(struct mmu_notifier *,
74 struct mm_struct *,
74 unsigned long, unsigned long);75 unsigned long, unsigned long);
75static struct mmu_rb_node *__mmu_rb_search(struct mmu_rb_handler *,76static struct mmu_rb_node *__mmu_rb_search(struct mmu_rb_handler *,
76 unsigned long, unsigned long);77 unsigned long, unsigned long);
@@ -137,7 +138,7 @@ void hfi1_mmu_rb_unregister(struct rb_root *root) · 60 unmodified lines
137 rbnode = rb_entry(node, struct mmu_rb_node, node);138 rbnode = rb_entry(node, struct mmu_rb_node, node);
138 rb_erase(node, root);139 rb_erase(node, root);
139 if (handler->ops->remove)140 if (handler->ops->remove)
140 handler->ops->remove(root, rbnode, false);141 handler->ops->remove(root, rbnode, NULL);
141 }142 }
142 }143 }
143 144
@@ -176,7 +177,7 @@ unlock: · 32 unmodified lines
176 return ret;177 return ret;
177}178}
178 179
179/* Caller must host handler lock */180/* Caller must hold handler lock */
180static struct mmu_rb_node *__mmu_rb_search(struct mmu_rb_handler *handler,181static struct mmu_rb_node *__mmu_rb_search(struct mmu_rb_handler *handler,
181 unsigned long addr,182 unsigned long addr,
182 unsigned long len)183 unsigned long len)
@@ -200,15 +201,21 @@ static struct mmu_rb_node *__mmu_rb_search(struct mmu_rb_handler *handler, · 17 unmodified lines
200 return node;201 return node;
201}202}
202 203
204/* Caller must *not* hold handler lock. */
203static void __mmu_rb_remove(struct mmu_rb_handler *handler,205static void __mmu_rb_remove(struct mmu_rb_handler *handler,
204 struct mmu_rb_node *node, bool arg)206 struct mmu_rb_node *node, struct mm_struct *mm)
205{207{
208 unsigned long flags;
209
206 /* Validity of handler and node pointers has been checked by caller. */210 /* Validity of handler and node pointers has been checked by caller. */
207 hfi1_cdbg(MMU, "Removing node addr 0x%llx, len %u", node->addr,211 hfi1_cdbg(MMU, "Removing node addr 0x%llx, len %u", node->addr,
208 node->len);212 node->len);
213 spin_lock_irqsave(&handler->lock, flags);
209 __mmu_int_rb_remove(node, handler->root);214 __mmu_int_rb_remove(node, handler->root);
215 spin_unlock_irqrestore(&handler->lock, flags);
216
210 if (handler->ops->remove)217 if (handler->ops->remove)
211 handler->ops->remove(handler->root, node, arg);218 handler->ops->remove(handler->root, node, mm);
212}219}
213 220
214struct mmu_rb_node *hfi1_mmu_rb_search(struct rb_root *root, unsigned long addr,221struct mmu_rb_node *hfi1_mmu_rb_search(struct rb_root *root, unsigned long addr,
@@ -231,14 +238,11 @@ struct mmu_rb_node *hfi1_mmu_rb_search(struct rb_root *root, unsigned long addr, · 16 unmodified lines
231void hfi1_mmu_rb_remove(struct rb_root *root, struct mmu_rb_node *node)238void hfi1_mmu_rb_remove(struct rb_root *root, struct mmu_rb_node *node)
232{239{
233 struct mmu_rb_handler *handler = find_mmu_handler(root);240 struct mmu_rb_handler *handler = find_mmu_handler(root);
234 unsigned long flags;
235 241
236 if (!handler || !node)242 if (!handler || !node)
237 return;243 return;
238 244
239 spin_lock_irqsave(&handler->lock, flags);245 __mmu_rb_remove(handler, node, NULL);
240 __mmu_rb_remove(handler, node, false);
241 spin_unlock_irqrestore(&handler->lock, flags);
242}246}
243 247
244static struct mmu_rb_handler *find_mmu_handler(struct rb_root *root)248static struct mmu_rb_handler *find_mmu_handler(struct rb_root *root)
@@ -260,7 +264,7 @@ unlock: · 15 unmodified lines
260static inline void mmu_notifier_page(struct mmu_notifier *mn,264static inline void mmu_notifier_page(struct mmu_notifier *mn,
261 struct mm_struct *mm, unsigned long addr)265 struct mm_struct *mm, unsigned long addr)
262{266{
263 mmu_notifier_mem_invalidate(mn, addr, addr + PAGE_SIZE);267 mmu_notifier_mem_invalidate(mn, mm, addr, addr + PAGE_SIZE);
264}268}
265 269
266static inline void mmu_notifier_range_start(struct mmu_notifier *mn,270static inline void mmu_notifier_range_start(struct mmu_notifier *mn,
@@ -268,25 +272,31 @@ static inline void mmu_notifier_range_start(struct mmu_notifier *mn, · 1 unmodified line
268 unsigned long start,272 unsigned long start,
269 unsigned long end)273 unsigned long end)
270{274{
271 mmu_notifier_mem_invalidate(mn, start, end);275 mmu_notifier_mem_invalidate(mn, mm, start, end);
272}276}
273 277
274static void mmu_notifier_mem_invalidate(struct mmu_notifier *mn,278static void mmu_notifier_mem_invalidate(struct mmu_notifier *mn,
279 struct mm_struct *mm,
275 unsigned long start, unsigned long end)280 unsigned long start, unsigned long end)
276{281{
277 struct mmu_rb_handler *handler =282 struct mmu_rb_handler *handler =
278 container_of(mn, struct mmu_rb_handler, mn);283 container_of(mn, struct mmu_rb_handler, mn);
279 struct rb_root *root = handler->root;284 struct rb_root *root = handler->root;
280 struct mmu_rb_node *node;285 struct mmu_rb_node *node, *ptr = NULL;
281 unsigned long flags;286 unsigned long flags;
282 287
283 spin_lock_irqsave(&handler->lock, flags);288 spin_lock_irqsave(&handler->lock, flags);
284 for (node = __mmu_int_rb_iter_first(root, start, end - 1); node;289 for (node = __mmu_int_rb_iter_first(root, start, end - 1);
285 node = __mmu_int_rb_iter_next(node, start, end - 1)) {290 node; node = ptr) {
291 /* Guard against node removal. */
292 ptr = __mmu_int_rb_iter_next(node, start, end - 1);
286 hfi1_cdbg(MMU, "Invalidating node addr 0x%llx, len %u",293 hfi1_cdbg(MMU, "Invalidating node addr 0x%llx, len %u",
287 node->addr, node->len);294 node->addr, node->len);
288 if (handler->ops->invalidate(root, node))295 if (handler->ops->invalidate(root, node)) {
289 __mmu_rb_remove(handler, node, true);296 spin_unlock_irqrestore(&handler->lock, flags);
297 __mmu_rb_remove(handler, node, mm);
298 spin_lock_irqsave(&handler->lock, flags);
299 }
290 }300 }
291 spin_unlock_irqrestore(&handler->lock, flags);301 spin_unlock_irqrestore(&handler->lock, flags);
292}302}
drivers/staging/rdma/hfi1/mmu_rb.h+2−1
@@ -59,7 +59,8 @@ struct mmu_rb_node { · 58 unmodified lines
59struct mmu_rb_ops {59struct mmu_rb_ops {
60 bool (*filter)(struct mmu_rb_node *, unsigned long, unsigned long);60 bool (*filter)(struct mmu_rb_node *, unsigned long, unsigned long);
61 int (*insert)(struct rb_root *, struct mmu_rb_node *);61 int (*insert)(struct rb_root *, struct mmu_rb_node *);
62 void (*remove)(struct rb_root *, struct mmu_rb_node *, bool);62 void (*remove)(struct rb_root *, struct mmu_rb_node *,
63 struct mm_struct *);
63 int (*invalidate)(struct rb_root *, struct mmu_rb_node *);64 int (*invalidate)(struct rb_root *, struct mmu_rb_node *);
64};65};
65 66
drivers/staging/rdma/hfi1/qp.c+2−0
@@ -519,10 +519,12 @@ static void iowait_sdma_drained(struct iowait *wait) · 518 unmodified lines
519 * do the flush work until that QP's519 * do the flush work until that QP's
520 * sdma work has finished.520 * sdma work has finished.
521 */521 */
522 spin_lock(&qp->s_lock);
522 if (qp->s_flags & RVT_S_WAIT_DMA) {523 if (qp->s_flags & RVT_S_WAIT_DMA) {
523 qp->s_flags &= ~RVT_S_WAIT_DMA;524 qp->s_flags &= ~RVT_S_WAIT_DMA;
524 hfi1_schedule_send(qp);525 hfi1_schedule_send(qp);
525 }526 }
527 spin_unlock(&qp->s_lock);
526}528}
527 529
528/**530/**
drivers/staging/rdma/hfi1/user_exp_rcv.c+7−4
@@ -87,7 +87,8 @@ static u32 find_phys_blocks(struct page **, unsigned, struct tid_pageset *); · 86 unmodified lines
87static int set_rcvarray_entry(struct file *, unsigned long, u32,87static int set_rcvarray_entry(struct file *, unsigned long, u32,
88 struct tid_group *, struct page **, unsigned);88 struct tid_group *, struct page **, unsigned);
89static int mmu_rb_insert(struct rb_root *, struct mmu_rb_node *);89static int mmu_rb_insert(struct rb_root *, struct mmu_rb_node *);
90static void mmu_rb_remove(struct rb_root *, struct mmu_rb_node *, bool);90static void mmu_rb_remove(struct rb_root *, struct mmu_rb_node *,
91 struct mm_struct *);
91static int mmu_rb_invalidate(struct rb_root *, struct mmu_rb_node *);92static int mmu_rb_invalidate(struct rb_root *, struct mmu_rb_node *);
92static int program_rcvarray(struct file *, unsigned long, struct tid_group *,93static int program_rcvarray(struct file *, unsigned long, struct tid_group *,
93 struct tid_pageset *, unsigned, u16, struct page **,94 struct tid_pageset *, unsigned, u16, struct page **,
@@ -254,6 +255,8 @@ int hfi1_user_exp_rcv_free(struct hfi1_filedata *fd) · 160 unmodified lines
254 struct hfi1_ctxtdata *uctxt = fd->uctxt;255 struct hfi1_ctxtdata *uctxt = fd->uctxt;
255 struct tid_group *grp, *gptr;256 struct tid_group *grp, *gptr;
256 257
258 if (!test_bit(HFI1_CTXT_SETUP_DONE, &uctxt->event_flags))
259 return 0;
257 /*260 /*
258 * The notifier would have been removed when the process'es mm261 * The notifier would have been removed when the process'es mm
259 * was freed.262 * was freed.
@@ -899,7 +902,7 @@ static int unprogram_rcvarray(struct file *fp, u32 tidinfo, · 639 unmodified lines
899 if (!node || node->rcventry != (uctxt->expected_base + rcventry))902 if (!node || node->rcventry != (uctxt->expected_base + rcventry))
900 return -EBADF;903 return -EBADF;
901 if (HFI1_CAP_IS_USET(TID_UNMAP))904 if (HFI1_CAP_IS_USET(TID_UNMAP))
902 mmu_rb_remove(&fd->tid_rb_root, &node->mmu, false);905 mmu_rb_remove(&fd->tid_rb_root, &node->mmu, NULL);
903 else906 else
904 hfi1_mmu_rb_remove(&fd->tid_rb_root, &node->mmu);907 hfi1_mmu_rb_remove(&fd->tid_rb_root, &node->mmu);
905 908
@@ -965,7 +968,7 @@ static void unlock_exp_tids(struct hfi1_ctxtdata *uctxt, · 59 unmodified lines
965 continue;968 continue;
966 if (HFI1_CAP_IS_USET(TID_UNMAP))969 if (HFI1_CAP_IS_USET(TID_UNMAP))
967 mmu_rb_remove(&fd->tid_rb_root,970 mmu_rb_remove(&fd->tid_rb_root,
968 &node->mmu, false);971 &node->mmu, NULL);
969 else972 else
970 hfi1_mmu_rb_remove(&fd->tid_rb_root,973 hfi1_mmu_rb_remove(&fd->tid_rb_root,
971 &node->mmu);974 &node->mmu);
@@ -1032,7 +1035,7 @@ static int mmu_rb_insert(struct rb_root *root, struct mmu_rb_node *node) · 60 unmodified lines
1032}1035}
1033 1036
1034static void mmu_rb_remove(struct rb_root *root, struct mmu_rb_node *node,1037static void mmu_rb_remove(struct rb_root *root, struct mmu_rb_node *node,
1035 bool notifier)1038 struct mm_struct *mm)
1036{1039{
1037 struct hfi1_filedata *fdata =1040 struct hfi1_filedata *fdata =
1038 container_of(root, struct hfi1_filedata, tid_rb_root);1041 container_of(root, struct hfi1_filedata, tid_rb_root);
drivers/staging/rdma/hfi1/user_sdma.c+22−11
@@ -278,7 +278,8 @@ static inline void pq_update(struct hfi1_user_sdma_pkt_q *); · 277 unmodified lines
278static void user_sdma_free_request(struct user_sdma_request *, bool);278static void user_sdma_free_request(struct user_sdma_request *, bool);
279static int pin_vector_pages(struct user_sdma_request *,279static int pin_vector_pages(struct user_sdma_request *,
280 struct user_sdma_iovec *);280 struct user_sdma_iovec *);
281static void unpin_vector_pages(struct mm_struct *, struct page **, unsigned);281static void unpin_vector_pages(struct mm_struct *, struct page **, unsigned,
282 unsigned);
282static int check_header_template(struct user_sdma_request *,283static int check_header_template(struct user_sdma_request *,
283 struct hfi1_pkt_header *, u32, u32);284 struct hfi1_pkt_header *, u32, u32);
284static int set_txreq_header(struct user_sdma_request *,285static int set_txreq_header(struct user_sdma_request *,
@@ -299,7 +300,8 @@ static int defer_packet_queue( · 14 unmodified lines
299static void activate_packet_queue(struct iowait *, int);300static void activate_packet_queue(struct iowait *, int);
300static bool sdma_rb_filter(struct mmu_rb_node *, unsigned long, unsigned long);301static bool sdma_rb_filter(struct mmu_rb_node *, unsigned long, unsigned long);
301static int sdma_rb_insert(struct rb_root *, struct mmu_rb_node *);302static int sdma_rb_insert(struct rb_root *, struct mmu_rb_node *);
302static void sdma_rb_remove(struct rb_root *, struct mmu_rb_node *, bool);303static void sdma_rb_remove(struct rb_root *, struct mmu_rb_node *,
304 struct mm_struct *);
303static int sdma_rb_invalidate(struct rb_root *, struct mmu_rb_node *);305static int sdma_rb_invalidate(struct rb_root *, struct mmu_rb_node *);
304 306
305static struct mmu_rb_ops sdma_rb_ops = {307static struct mmu_rb_ops sdma_rb_ops = {
@@ -1063,8 +1065,10 @@ static int pin_vector_pages(struct user_sdma_request *req, · 757 unmodified lines
1063 rb_node = hfi1_mmu_rb_search(&pq->sdma_rb_root,1065 rb_node = hfi1_mmu_rb_search(&pq->sdma_rb_root,
1064 (unsigned long)iovec->iov.iov_base,1066 (unsigned long)iovec->iov.iov_base,
1065 iovec->iov.iov_len);1067 iovec->iov.iov_len);
1066 if (rb_node)1068 if (rb_node && !IS_ERR(rb_node))
1067 node = container_of(rb_node, struct sdma_mmu_node, rb);1069 node = container_of(rb_node, struct sdma_mmu_node, rb);
1070 else
1071 rb_node = NULL;
1068 1072
1069 if (!node) {1073 if (!node) {
1070 node = kzalloc(sizeof(*node), GFP_KERNEL);1074 node = kzalloc(sizeof(*node), GFP_KERNEL);
@@ -1107,7 +1111,8 @@ retry: · 36 unmodified lines
1107 goto bail;1111 goto bail;
1108 }1112 }
1109 if (pinned != npages) {1113 if (pinned != npages) {
1110 unpin_vector_pages(current->mm, pages, pinned);1114 unpin_vector_pages(current->mm, pages, node->npages,
1115 pinned);
1111 ret = -EFAULT;1116 ret = -EFAULT;
1112 goto bail;1117 goto bail;
1113 }1118 }
@@ -1147,9 +1152,9 @@ bail: · 33 unmodified lines
1147}1152}
1148 1153
1149static void unpin_vector_pages(struct mm_struct *mm, struct page **pages,1154static void unpin_vector_pages(struct mm_struct *mm, struct page **pages,
1150 unsigned npages)1155 unsigned start, unsigned npages)
1151{1156{
1152 hfi1_release_user_pages(mm, pages, npages, 0);1157 hfi1_release_user_pages(mm, pages + start, npages, 0);
1153 kfree(pages);1158 kfree(pages);
1154}1159}
1155 1160
@@ -1502,7 +1507,7 @@ static void user_sdma_free_request(struct user_sdma_request *req, bool unpin) · 346 unmodified lines
1502 &req->pq->sdma_rb_root,1507 &req->pq->sdma_rb_root,
1503 (unsigned long)req->iovs[i].iov.iov_base,1508 (unsigned long)req->iovs[i].iov.iov_base,
1504 req->iovs[i].iov.iov_len);1509 req->iovs[i].iov.iov_len);
1505 if (!mnode)1510 if (!mnode || IS_ERR(mnode))
1506 continue;1511 continue;
1507 1512
1508 node = container_of(mnode, struct sdma_mmu_node, rb);1513 node = container_of(mnode, struct sdma_mmu_node, rb);
@@ -1547,7 +1552,7 @@ static int sdma_rb_insert(struct rb_root *root, struct mmu_rb_node *mnode) · 38 unmodified lines
1547}1552}
1548 1553
1549static void sdma_rb_remove(struct rb_root *root, struct mmu_rb_node *mnode,1554static void sdma_rb_remove(struct rb_root *root, struct mmu_rb_node *mnode,
1550 bool notifier)1555 struct mm_struct *mm)
1551{1556{
1552 struct sdma_mmu_node *node =1557 struct sdma_mmu_node *node =
1553 container_of(mnode, struct sdma_mmu_node, rb);1558 container_of(mnode, struct sdma_mmu_node, rb);
@@ -1557,14 +1562,20 @@ static void sdma_rb_remove(struct rb_root *root, struct mmu_rb_node *mnode, · 3 unmodified lines
1557 node->pq->n_locked -= node->npages;1562 node->pq->n_locked -= node->npages;
1558 spin_unlock(&node->pq->evict_lock);1563 spin_unlock(&node->pq->evict_lock);
1559 1564
1560 unpin_vector_pages(notifier ? NULL : current->mm, node->pages,1565 /*
1566 * If mm is set, we are being called by the MMU notifier and we
1567 * should not pass a mm_struct to unpin_vector_page(). This is to
1568 * prevent a deadlock when hfi1_release_user_pages() attempts to
1569 * take the mmap_sem, which the MMU notifier has already taken.
1570 */
1571 unpin_vector_pages(mm ? NULL : current->mm, node->pages, 0,
1561 node->npages);1572 node->npages);
1562 /*1573 /*
1563 * If called by the MMU notifier, we have to adjust the pinned1574 * If called by the MMU notifier, we have to adjust the pinned
1564 * page count ourselves.1575 * page count ourselves.
1565 */1576 */
1566 if (notifier)1577 if (mm)
1567 current->mm->pinned_vm -= node->npages;1578 mm->pinned_vm -= node->npages;
1568 kfree(node);1579 kfree(node);
1569}1580}
1570 1581
drivers/thermal/hisi_thermal.c+2−2
@@ -68,12 +68,12 @@ static inline int _step_to_temp(int step) · 67 unmodified lines
68 * Every step equals (1 * 200) / 255 celsius, and finally68 * Every step equals (1 * 200) / 255 celsius, and finally
69 * need convert to millicelsius.69 * need convert to millicelsius.
70 */70 */
71 return (HISI_TEMP_BASE + (step * 200 / 255)) * 1000;71 return (HISI_TEMP_BASE * 1000 + (step * 200000 / 255));
72}72}
73 73
74static inline long _temp_to_step(long temp)74static inline long _temp_to_step(long temp)
75{75{
76 return ((temp / 1000 - HISI_TEMP_BASE) * 255 / 200);76 return ((temp - HISI_TEMP_BASE * 1000) * 255) / 200000;
77}77}
78 78
79static long hisi_thermal_get_sensor_temp(struct hisi_thermal_data *data,79static long hisi_thermal_get_sensor_temp(struct hisi_thermal_data *data,
drivers/thermal/thermal_core.c+1−1
@@ -959,7 +959,7 @@ static DEVICE_ATTR(sustainable_power, S_IWUSR | S_IRUGO, sustainable_power_show, · 958 unmodified lines
959 struct thermal_zone_device *tz = to_thermal_zone(dev); \959 struct thermal_zone_device *tz = to_thermal_zone(dev); \
960 \960 \
961 if (tz->tzp) \961 if (tz->tzp) \
962 return sprintf(buf, "%u\n", tz->tzp->name); \962 return sprintf(buf, "%d\n", tz->tzp->name); \
963 else \963 else \
964 return -EIO; \964 return -EIO; \
965 } \965 } \
drivers/tty/pty.c+8−10
@@ -626,7 +626,7 @@ static int pty_unix98_ioctl(struct tty_struct *tty, · 625 unmodified lines
626 */626 */
627 627
628static struct tty_struct *ptm_unix98_lookup(struct tty_driver *driver,628static struct tty_struct *ptm_unix98_lookup(struct tty_driver *driver,
629 struct inode *ptm_inode, int idx)629 struct file *file, int idx)
630{630{
631 /* Master must be open via /dev/ptmx */631 /* Master must be open via /dev/ptmx */
632 return ERR_PTR(-EIO);632 return ERR_PTR(-EIO);
@@ -642,12 +642,12 @@ static struct tty_struct *ptm_unix98_lookup(struct tty_driver *driver, · 9 unmodified lines
642 */642 */
643 643
644static struct tty_struct *pts_unix98_lookup(struct tty_driver *driver,644static struct tty_struct *pts_unix98_lookup(struct tty_driver *driver,
645 struct inode *pts_inode, int idx)645 struct file *file, int idx)
646{646{
647 struct tty_struct *tty;647 struct tty_struct *tty;
648 648
649 mutex_lock(&devpts_mutex);649 mutex_lock(&devpts_mutex);
650 tty = devpts_get_priv(pts_inode);650 tty = devpts_get_priv(file->f_path.dentry);
651 mutex_unlock(&devpts_mutex);651 mutex_unlock(&devpts_mutex);
652 /* Master must be open before slave */652 /* Master must be open before slave */
653 if (!tty)653 if (!tty)
@@ -722,7 +722,7 @@ static int ptmx_open(struct inode *inode, struct file *filp) · 68 unmodified lines
722{722{
723 struct pts_fs_info *fsi;723 struct pts_fs_info *fsi;
724 struct tty_struct *tty;724 struct tty_struct *tty;
725 struct inode *slave_inode;725 struct dentry *dentry;
726 int retval;726 int retval;
727 int index;727 int index;
728 728
@@ -769,14 +769,12 @@ static int ptmx_open(struct inode *inode, struct file *filp) · 40 unmodified lines
769 769
770 tty_add_file(tty, filp);770 tty_add_file(tty, filp);
771 771
772 slave_inode = devpts_pty_new(fsi,772 dentry = devpts_pty_new(fsi, index, tty->link);
773 MKDEV(UNIX98_PTY_SLAVE_MAJOR, index), index,773 if (IS_ERR(dentry)) {
774 tty->link);774 retval = PTR_ERR(dentry);
775 if (IS_ERR(slave_inode)) {
776 retval = PTR_ERR(slave_inode);
777 goto err_release;775 goto err_release;
778 }776 }
779 tty->link->driver_data = slave_inode;777 tty->link->driver_data = dentry;
780 778
781 retval = ptm_driver->ops->open(tty, filp);779 retval = ptm_driver->ops->open(tty, filp);
782 if (retval)780 if (retval)
drivers/tty/tty_io.c+3−3
@@ -1367,12 +1367,12 @@ static ssize_t tty_line_name(struct tty_driver *driver, int index, char *p) · 1366 unmodified lines
1367 * Locking: tty_mutex must be held. If the tty is found, bump the tty kref.1367 * Locking: tty_mutex must be held. If the tty is found, bump the tty kref.
1368 */1368 */
1369static struct tty_struct *tty_driver_lookup_tty(struct tty_driver *driver,1369static struct tty_struct *tty_driver_lookup_tty(struct tty_driver *driver,
1370 struct inode *inode, int idx)1370 struct file *file, int idx)
1371{1371{
1372 struct tty_struct *tty;1372 struct tty_struct *tty;
1373 1373
1374 if (driver->ops->lookup)1374 if (driver->ops->lookup)
1375 tty = driver->ops->lookup(driver, inode, idx);1375 tty = driver->ops->lookup(driver, file, idx);
1376 else1376 else
1377 tty = driver->ttys[idx];1377 tty = driver->ttys[idx];
1378 1378
@@ -2040,7 +2040,7 @@ static struct tty_struct *tty_open_by_driver(dev_t device, struct inode *inode, · 661 unmodified lines
2040 }2040 }
2041 2041
2042 /* check whether we're reopening an existing tty */2042 /* check whether we're reopening an existing tty */
2043 tty = tty_driver_lookup_tty(driver, inode, index);2043 tty = tty_driver_lookup_tty(driver, filp, index);
2044 if (IS_ERR(tty)) {2044 if (IS_ERR(tty)) {
2045 mutex_unlock(&tty_mutex);2045 mutex_unlock(&tty_mutex);
2046 goto out;2046 goto out;
drivers/usb/serial/option.c+148−7
@@ -375,18 +375,22 @@ static void option_instat_callback(struct urb *urb); · 374 unmodified lines
375#define HAIER_PRODUCT_CE81B 0x10f8375#define HAIER_PRODUCT_CE81B 0x10f8
376#define HAIER_PRODUCT_CE100 0x2009376#define HAIER_PRODUCT_CE100 0x2009
377 377
378/* Cinterion (formerly Siemens) products */378/* Gemalto's Cinterion products (formerly Siemens) */
379#define SIEMENS_VENDOR_ID 0x0681379#define SIEMENS_VENDOR_ID 0x0681
380#define CINTERION_VENDOR_ID 0x1e2d380#define CINTERION_VENDOR_ID 0x1e2d
381#define CINTERION_PRODUCT_HC25_MDMNET 0x0040
381#define CINTERION_PRODUCT_HC25_MDM 0x0047382#define CINTERION_PRODUCT_HC25_MDM 0x0047
382#define CINTERION_PRODUCT_HC25_MDMNET 0x0040383#define CINTERION_PRODUCT_HC28_MDMNET 0x004A /* same for HC28J */
383#define CINTERION_PRODUCT_HC28_MDM 0x004C384#define CINTERION_PRODUCT_HC28_MDM 0x004C
384#define CINTERION_PRODUCT_HC28_MDMNET 0x004A /* same for HC28J */
385#define CINTERION_PRODUCT_EU3_E 0x0051385#define CINTERION_PRODUCT_EU3_E 0x0051
386#define CINTERION_PRODUCT_EU3_P 0x0052386#define CINTERION_PRODUCT_EU3_P 0x0052
387#define CINTERION_PRODUCT_PH8 0x0053387#define CINTERION_PRODUCT_PH8 0x0053
388#define CINTERION_PRODUCT_AHXX 0x0055388#define CINTERION_PRODUCT_AHXX 0x0055
389#define CINTERION_PRODUCT_PLXX 0x0060389#define CINTERION_PRODUCT_PLXX 0x0060
390#define CINTERION_PRODUCT_PH8_2RMNET 0x0082
391#define CINTERION_PRODUCT_PH8_AUDIO 0x0083
392#define CINTERION_PRODUCT_AHXX_2RMNET 0x0084
393#define CINTERION_PRODUCT_AHXX_AUDIO 0x0085
390 394
391/* Olivetti products */395/* Olivetti products */
392#define OLIVETTI_VENDOR_ID 0x0b3c396#define OLIVETTI_VENDOR_ID 0x0b3c
@@ -633,6 +637,10 @@ static const struct option_blacklist_info telit_le922_blacklist_usbcfg3 = { · 240 unmodified lines
633 .reserved = BIT(1) | BIT(2) | BIT(3),637 .reserved = BIT(1) | BIT(2) | BIT(3),
634};638};
635 639
640static const struct option_blacklist_info cinterion_rmnet2_blacklist = {
641 .reserved = BIT(4) | BIT(5),
642};
643
636static const struct usb_device_id option_ids[] = {644static const struct usb_device_id option_ids[] = {
637 { USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_COLT) },645 { USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_COLT) },
638 { USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_RICOLA) },646 { USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_RICOLA) },
@@ -1602,7 +1610,79 @@ static const struct usb_device_id option_ids[] = { · 963 unmodified lines
1602 .driver_info = (kernel_ulong_t)&net_intf3_blacklist },1610 .driver_info = (kernel_ulong_t)&net_intf3_blacklist },
1603 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0178, 0xff, 0xff, 0xff),1611 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0178, 0xff, 0xff, 0xff),
1604 .driver_info = (kernel_ulong_t)&net_intf3_blacklist },1612 .driver_info = (kernel_ulong_t)&net_intf3_blacklist },
1605 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0xffe9, 0xff, 0xff, 0xff) },1613 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0xff42, 0xff, 0xff, 0xff) },
1614 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0xff43, 0xff, 0xff, 0xff) },
1615 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0xff44, 0xff, 0xff, 0xff) },
1616 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0xff45, 0xff, 0xff, 0xff) },
1617 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0xff46, 0xff, 0xff, 0xff) },
1618 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0xff47, 0xff, 0xff, 0xff) },
1619 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0xff48, 0xff, 0xff, 0xff) },
1620 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0xff49, 0xff, 0xff, 0xff) },
1621 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0xff4a, 0xff, 0xff, 0xff) },
1622 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0xff4b, 0xff, 0xff, 0xff) },
1623 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0xff4c, 0xff, 0xff, 0xff) },
1624 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0xff4d, 0xff, 0xff, 0xff) },
1625 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0xff4e, 0xff, 0xff, 0xff) },
1626 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0xff4f, 0xff, 0xff, 0xff) },
1627 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0xff50, 0xff, 0xff, 0xff) },
1628 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0xff51, 0xff, 0xff, 0xff) },
1629 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0xff52, 0xff, 0xff, 0xff) },
1630 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0xff53, 0xff, 0xff, 0xff) },
1631 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0xff54, 0xff, 0xff, 0xff) },
1632 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0xff55, 0xff, 0xff, 0xff) },
1633 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0xff56, 0xff, 0xff, 0xff) },
1634 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0xff57, 0xff, 0xff, 0xff) },
1635 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0xff58, 0xff, 0xff, 0xff) },
1636 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0xff59, 0xff, 0xff, 0xff) },
1637 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0xff5a, 0xff, 0xff, 0xff) },
1638 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0xff5b, 0xff, 0xff, 0xff) },
1639 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0xff5c, 0xff, 0xff, 0xff) },
1640 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0xff5d, 0xff, 0xff, 0xff) },
1641 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0xff5e, 0xff, 0xff, 0xff) },
1642 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0xff5f, 0xff, 0xff, 0xff) },
1643 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0xff60, 0xff, 0xff, 0xff) },
1644 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0xff61, 0xff, 0xff, 0xff) },
1645 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0xff62, 0xff, 0xff, 0xff) },
1646 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0xff63, 0xff, 0xff, 0xff) },
1647 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0xff64, 0xff, 0xff, 0xff) },
1648 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0xff65, 0xff, 0xff, 0xff) },
1649 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0xff66, 0xff, 0xff, 0xff) },
1650 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0xff67, 0xff, 0xff, 0xff) },
1651 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0xff68, 0xff, 0xff, 0xff) },
1652 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0xff69, 0xff, 0xff, 0xff) },
1653 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0xff6a, 0xff, 0xff, 0xff) },
1654 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0xff6b, 0xff, 0xff, 0xff) },
1655 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0xff6c, 0xff, 0xff, 0xff) },
1656 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0xff6d, 0xff, 0xff, 0xff) },
1657 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0xff6e, 0xff, 0xff, 0xff) },
1658 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0xff6f, 0xff, 0xff, 0xff) },
1659 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0xff70, 0xff, 0xff, 0xff) },
1660 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0xff71, 0xff, 0xff, 0xff) },
1661 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0xff72, 0xff, 0xff, 0xff) },
1662 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0xff73, 0xff, 0xff, 0xff) },
1663 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0xff74, 0xff, 0xff, 0xff) },
1664 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0xff75, 0xff, 0xff, 0xff) },
1665 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0xff76, 0xff, 0xff, 0xff) },
1666 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0xff77, 0xff, 0xff, 0xff) },
1667 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0xff78, 0xff, 0xff, 0xff) },
1668 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0xff79, 0xff, 0xff, 0xff) },
1669 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0xff7a, 0xff, 0xff, 0xff) },
1670 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0xff7b, 0xff, 0xff, 0xff) },
1671 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0xff7c, 0xff, 0xff, 0xff) },
1672 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0xff7d, 0xff, 0xff, 0xff) },
1673 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0xff7e, 0xff, 0xff, 0xff) },
1674 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0xff7f, 0xff, 0xff, 0xff) },
1675 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0xff80, 0xff, 0xff, 0xff) },
1676 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0xff81, 0xff, 0xff, 0xff) },
1677 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0xff82, 0xff, 0xff, 0xff) },
1678 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0xff83, 0xff, 0xff, 0xff) },
1679 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0xff84, 0xff, 0xff, 0xff) },
1680 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0xff85, 0xff, 0xff, 0xff) },
1681 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0xff86, 0xff, 0xff, 0xff) },
1682 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0xff87, 0xff, 0xff, 0xff) },
1683 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0xff88, 0xff, 0xff, 0xff) },
1684 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0xff89, 0xff, 0xff, 0xff) },
1685 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0xff8a, 0xff, 0xff, 0xff) },
1606 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0xff8b, 0xff, 0xff, 0xff) },1686 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0xff8b, 0xff, 0xff, 0xff) },
1607 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0xff8c, 0xff, 0xff, 0xff) },1687 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0xff8c, 0xff, 0xff, 0xff) },
1608 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0xff8d, 0xff, 0xff, 0xff) },1688 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0xff8d, 0xff, 0xff, 0xff) },
@@ -1613,6 +1693,61 @@ static const struct usb_device_id option_ids[] = { · 4 unmodified lines
1613 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0xff92, 0xff, 0xff, 0xff) },1693 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0xff92, 0xff, 0xff, 0xff) },
1614 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0xff93, 0xff, 0xff, 0xff) },1694 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0xff93, 0xff, 0xff, 0xff) },
1615 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0xff94, 0xff, 0xff, 0xff) },1695 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0xff94, 0xff, 0xff, 0xff) },
1696 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0xff9f, 0xff, 0xff, 0xff) },
1697 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0xffa0, 0xff, 0xff, 0xff) },
1698 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0xffa1, 0xff, 0xff, 0xff) },
1699 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0xffa2, 0xff, 0xff, 0xff) },
1700 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0xffa3, 0xff, 0xff, 0xff) },
1701 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0xffa4, 0xff, 0xff, 0xff) },
1702 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0xffa5, 0xff, 0xff, 0xff) },
1703 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0xffa6, 0xff, 0xff, 0xff) },
1704 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0xffa7, 0xff, 0xff, 0xff) },
1705 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0xffa8, 0xff, 0xff, 0xff) },
1706 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0xffa9, 0xff, 0xff, 0xff) },
1707 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0xffaa, 0xff, 0xff, 0xff) },
1708 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0xffab, 0xff, 0xff, 0xff) },
1709 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0xffac, 0xff, 0xff, 0xff) },
1710 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0xffae, 0xff, 0xff, 0xff) },
1711 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0xffaf, 0xff, 0xff, 0xff) },
1712 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0xffb0, 0xff, 0xff, 0xff) },
1713 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0xffb1, 0xff, 0xff, 0xff) },
1714 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0xffb2, 0xff, 0xff, 0xff) },
1715 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0xffb3, 0xff, 0xff, 0xff) },
1716 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0xffb4, 0xff, 0xff, 0xff) },
1717 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0xffb5, 0xff, 0xff, 0xff) },
1718 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0xffb6, 0xff, 0xff, 0xff) },
1719 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0xffb7, 0xff, 0xff, 0xff) },
1720 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0xffb8, 0xff, 0xff, 0xff) },
1721 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0xffb9, 0xff, 0xff, 0xff) },
1722 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0xffba, 0xff, 0xff, 0xff) },
1723 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0xffbb, 0xff, 0xff, 0xff) },
1724 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0xffbc, 0xff, 0xff, 0xff) },
1725 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0xffbd, 0xff, 0xff, 0xff) },
1726 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0xffbe, 0xff, 0xff, 0xff) },
1727 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0xffbf, 0xff, 0xff, 0xff) },
1728 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0xffc0, 0xff, 0xff, 0xff) },
1729 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0xffc1, 0xff, 0xff, 0xff) },
1730 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0xffc2, 0xff, 0xff, 0xff) },
1731 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0xffc3, 0xff, 0xff, 0xff) },
1732 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0xffc4, 0xff, 0xff, 0xff) },
1733 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0xffc5, 0xff, 0xff, 0xff) },
1734 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0xffc6, 0xff, 0xff, 0xff) },
1735 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0xffc7, 0xff, 0xff, 0xff) },
1736 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0xffc8, 0xff, 0xff, 0xff) },
1737 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0xffc9, 0xff, 0xff, 0xff) },
1738 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0xffca, 0xff, 0xff, 0xff) },
1739 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0xffcb, 0xff, 0xff, 0xff) },
1740 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0xffcc, 0xff, 0xff, 0xff) },
1741 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0xffcd, 0xff, 0xff, 0xff) },
1742 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0xffce, 0xff, 0xff, 0xff) },
1743 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0xffcf, 0xff, 0xff, 0xff) },
1744 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0xffd0, 0xff, 0xff, 0xff) },
1745 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0xffd1, 0xff, 0xff, 0xff) },
1746 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0xffd2, 0xff, 0xff, 0xff) },
1747 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0xffd3, 0xff, 0xff, 0xff) },
1748 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0xffd4, 0xff, 0xff, 0xff) },
1749 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0xffd5, 0xff, 0xff, 0xff) },
1750 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0xffe9, 0xff, 0xff, 0xff) },
1616 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0xffec, 0xff, 0xff, 0xff) },1751 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0xffec, 0xff, 0xff, 0xff) },
1617 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0xffee, 0xff, 0xff, 0xff) },1752 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0xffee, 0xff, 0xff, 0xff) },
1618 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0xfff6, 0xff, 0xff, 0xff) },1753 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0xfff6, 0xff, 0xff, 0xff) },
@@ -1712,7 +1847,13 @@ static const struct usb_device_id option_ids[] = { · 93 unmodified lines
1712 { USB_DEVICE_INTERFACE_CLASS(CINTERION_VENDOR_ID, CINTERION_PRODUCT_AHXX, 0xff) },1847 { USB_DEVICE_INTERFACE_CLASS(CINTERION_VENDOR_ID, CINTERION_PRODUCT_AHXX, 0xff) },
1713 { USB_DEVICE(CINTERION_VENDOR_ID, CINTERION_PRODUCT_PLXX),1848 { USB_DEVICE(CINTERION_VENDOR_ID, CINTERION_PRODUCT_PLXX),
1714 .driver_info = (kernel_ulong_t)&net_intf4_blacklist },1849 .driver_info = (kernel_ulong_t)&net_intf4_blacklist },
1715 { USB_DEVICE(CINTERION_VENDOR_ID, CINTERION_PRODUCT_HC28_MDM) }, 1850 { USB_DEVICE_INTERFACE_CLASS(CINTERION_VENDOR_ID, CINTERION_PRODUCT_PH8_2RMNET, 0xff),
1851 .driver_info = (kernel_ulong_t)&cinterion_rmnet2_blacklist },
1852 { USB_DEVICE_INTERFACE_CLASS(CINTERION_VENDOR_ID, CINTERION_PRODUCT_PH8_AUDIO, 0xff),
1853 .driver_info = (kernel_ulong_t)&net_intf4_blacklist },
1854 { USB_DEVICE_INTERFACE_CLASS(CINTERION_VENDOR_ID, CINTERION_PRODUCT_AHXX_2RMNET, 0xff) },
1855 { USB_DEVICE_INTERFACE_CLASS(CINTERION_VENDOR_ID, CINTERION_PRODUCT_AHXX_AUDIO, 0xff) },
1856 { USB_DEVICE(CINTERION_VENDOR_ID, CINTERION_PRODUCT_HC28_MDM) },
1716 { USB_DEVICE(CINTERION_VENDOR_ID, CINTERION_PRODUCT_HC28_MDMNET) },1857 { USB_DEVICE(CINTERION_VENDOR_ID, CINTERION_PRODUCT_HC28_MDMNET) },
1717 { USB_DEVICE(SIEMENS_VENDOR_ID, CINTERION_PRODUCT_HC25_MDM) },1858 { USB_DEVICE(SIEMENS_VENDOR_ID, CINTERION_PRODUCT_HC25_MDM) },
1718 { USB_DEVICE(SIEMENS_VENDOR_ID, CINTERION_PRODUCT_HC25_MDMNET) },1859 { USB_DEVICE(SIEMENS_VENDOR_ID, CINTERION_PRODUCT_HC25_MDMNET) },
fs/ceph/mds_client.c+2−4
@@ -386,9 +386,7 @@ void ceph_put_mds_session(struct ceph_mds_session *s) · 385 unmodified lines
386 atomic_read(&s->s_ref), atomic_read(&s->s_ref)-1);386 atomic_read(&s->s_ref), atomic_read(&s->s_ref)-1);
387 if (atomic_dec_and_test(&s->s_ref)) {387 if (atomic_dec_and_test(&s->s_ref)) {
388 if (s->s_auth.authorizer)388 if (s->s_auth.authorizer)
389 ceph_auth_destroy_authorizer(389 ceph_auth_destroy_authorizer(s->s_auth.authorizer);
390 s->s_mdsc->fsc->client->monc.auth,
391 s->s_auth.authorizer);
392 kfree(s);390 kfree(s);
393 }391 }
394}392}
@@ -3900,7 +3898,7 @@ static struct ceph_auth_handshake *get_authorizer(struct ceph_connection *con, · 3505 unmodified lines
3900 struct ceph_auth_handshake *auth = &s->s_auth;3898 struct ceph_auth_handshake *auth = &s->s_auth;
3901 3899
3902 if (force_new && auth->authorizer) {3900 if (force_new && auth->authorizer) {
3903 ceph_auth_destroy_authorizer(ac, auth->authorizer);3901 ceph_auth_destroy_authorizer(auth->authorizer);
3904 auth->authorizer = NULL;3902 auth->authorizer = NULL;
3905 }3903 }
3906 if (!auth->authorizer) {3904 if (!auth->authorizer) {
fs/devpts/inode.c+12−41
@@ -604,8 +604,7 @@ void devpts_put_ref(struct pts_fs_info *fsi) · 603 unmodified lines
604 *604 *
605 * The created inode is returned. Remove it from /dev/pts/ by devpts_pty_kill.605 * The created inode is returned. Remove it from /dev/pts/ by devpts_pty_kill.
606 */606 */
607struct inode *devpts_pty_new(struct pts_fs_info *fsi, dev_t device, int index,607struct dentry *devpts_pty_new(struct pts_fs_info *fsi, int index, void *priv)
608 void *priv)
609{608{
610 struct dentry *dentry;609 struct dentry *dentry;
611 struct super_block *sb;610 struct super_block *sb;
@@ -629,25 +628,21 @@ struct inode *devpts_pty_new(struct pts_fs_info *fsi, dev_t device, int index, · 17 unmodified lines
629 inode->i_uid = opts->setuid ? opts->uid : current_fsuid();628 inode->i_uid = opts->setuid ? opts->uid : current_fsuid();
630 inode->i_gid = opts->setgid ? opts->gid : current_fsgid();629 inode->i_gid = opts->setgid ? opts->gid : current_fsgid();
631 inode->i_mtime = inode->i_atime = inode->i_ctime = CURRENT_TIME;630 inode->i_mtime = inode->i_atime = inode->i_ctime = CURRENT_TIME;
632 init_special_inode(inode, S_IFCHR|opts->mode, device);631 init_special_inode(inode, S_IFCHR|opts->mode, MKDEV(UNIX98_PTY_SLAVE_MAJOR, index));
633 inode->i_private = priv;
634 632
635 sprintf(s, "%d", index);633 sprintf(s, "%d", index);
636 634
637 inode_lock(d_inode(root));
638
639 dentry = d_alloc_name(root, s);635 dentry = d_alloc_name(root, s);
640 if (dentry) {636 if (dentry) {
637 dentry->d_fsdata = priv;
641 d_add(dentry, inode);638 d_add(dentry, inode);
642 fsnotify_create(d_inode(root), dentry);639 fsnotify_create(d_inode(root), dentry);
643 } else {640 } else {
644 iput(inode);641 iput(inode);
645 inode = ERR_PTR(-ENOMEM);642 dentry = ERR_PTR(-ENOMEM);
646 }643 }
647 644
648 inode_unlock(d_inode(root));645 return dentry;
649
650 return inode;
651}646}
652 647
653/**648/**
@@ -656,24 +651,10 @@ struct inode *devpts_pty_new(struct pts_fs_info *fsi, dev_t device, int index, · 2 unmodified lines
656 *651 *
657 * Returns whatever was passed as priv in devpts_pty_new for a given inode.652 * Returns whatever was passed as priv in devpts_pty_new for a given inode.
658 */653 */
659void *devpts_get_priv(struct inode *pts_inode)654void *devpts_get_priv(struct dentry *dentry)
660{655{
661 struct dentry *dentry;656 WARN_ON_ONCE(dentry->d_sb->s_magic != DEVPTS_SUPER_MAGIC);
662 void *priv = NULL;657 return dentry->d_fsdata;
663
664 BUG_ON(pts_inode->i_rdev == MKDEV(TTYAUX_MAJOR, PTMX_MINOR));
665
666 /* Ensure dentry has not been deleted by devpts_pty_kill() */
667 dentry = d_find_alias(pts_inode);
668 if (!dentry)
669 return NULL;
670
671 if (pts_inode->i_sb->s_magic == DEVPTS_SUPER_MAGIC)
672 priv = pts_inode->i_private;
673
674 dput(dentry);
675
676 return priv;
677}658}
678 659
679/**660/**
@@ -682,24 +663,14 @@ void *devpts_get_priv(struct inode *pts_inode) · 2 unmodified lines
682 *663 *
683 * This is an inverse operation of devpts_pty_new.664 * This is an inverse operation of devpts_pty_new.
684 */665 */
685void devpts_pty_kill(struct inode *inode)666void devpts_pty_kill(struct dentry *dentry)
686{667{
687 struct super_block *sb = pts_sb_from_inode(inode);668 WARN_ON_ONCE(dentry->d_sb->s_magic != DEVPTS_SUPER_MAGIC);
688 struct dentry *root = sb->s_root;
689 struct dentry *dentry;
690 669
691 BUG_ON(inode->i_rdev == MKDEV(TTYAUX_MAJOR, PTMX_MINOR));670 dentry->d_fsdata = NULL;
692 671 drop_nlink(dentry->d_inode);
693 inode_lock(d_inode(root));
694
695 dentry = d_find_alias(inode);
696
697 drop_nlink(inode);
698 d_delete(dentry);672 d_delete(dentry);
699 dput(dentry); /* d_alloc_name() in devpts_pty_new() */673 dput(dentry); /* d_alloc_name() in devpts_pty_new() */
700 dput(dentry); /* d_find_alias above */
701
702 inode_unlock(d_inode(root));
703}674}
704 675
705static int __init init_devpts_fs(void)676static int __init init_devpts_fs(void)
fs/ocfs2/dlm/dlmmaster.c+2−0
@@ -2455,6 +2455,8 @@ int dlm_deref_lockres_done_handler(struct o2net_msg *msg, u32 len, void *data, · 2454 unmodified lines
2455 2455
2456 spin_unlock(&dlm->spinlock);2456 spin_unlock(&dlm->spinlock);
2457 2457
2458 ret = 0;
2459
2458done:2460done:
2459 dlm_put(dlm);2461 dlm_put(dlm);
2460 return ret;2462 return ret;
fs/proc/task_mmu.c+30−3
@@ -1518,6 +1518,32 @@ static struct page *can_gather_numa_stats(pte_t pte, struct vm_area_struct *vma, · 1517 unmodified lines
1518 return page;1518 return page;
1519}1519}
1520 1520
1521#ifdef CONFIG_TRANSPARENT_HUGEPAGE
1522static struct page *can_gather_numa_stats_pmd(pmd_t pmd,
1523 struct vm_area_struct *vma,
1524 unsigned long addr)
1525{
1526 struct page *page;
1527 int nid;
1528
1529 if (!pmd_present(pmd))
1530 return NULL;
1531
1532 page = vm_normal_page_pmd(vma, addr, pmd);
1533 if (!page)
1534 return NULL;
1535
1536 if (PageReserved(page))
1537 return NULL;
1538
1539 nid = page_to_nid(page);
1540 if (!node_isset(nid, node_states[N_MEMORY]))
1541 return NULL;
1542
1543 return page;
1544}
1545#endif
1546
1521static int gather_pte_stats(pmd_t *pmd, unsigned long addr,1547static int gather_pte_stats(pmd_t *pmd, unsigned long addr,
1522 unsigned long end, struct mm_walk *walk)1548 unsigned long end, struct mm_walk *walk)
1523{1549{
@@ -1527,14 +1553,14 @@ static int gather_pte_stats(pmd_t *pmd, unsigned long addr, · 3 unmodified lines
1527 pte_t *orig_pte;1553 pte_t *orig_pte;
1528 pte_t *pte;1554 pte_t *pte;
1529 1555
1556#ifdef CONFIG_TRANSPARENT_HUGEPAGE
1530 ptl = pmd_trans_huge_lock(pmd, vma);1557 ptl = pmd_trans_huge_lock(pmd, vma);
1531 if (ptl) {1558 if (ptl) {
1532 pte_t huge_pte = *(pte_t *)pmd;
1533 struct page *page;1559 struct page *page;
1534 1560
1535 page = can_gather_numa_stats(huge_pte, vma, addr);1561 page = can_gather_numa_stats_pmd(*pmd, vma, addr);
1536 if (page)1562 if (page)
1537 gather_stats(page, md, pte_dirty(huge_pte),1563 gather_stats(page, md, pmd_dirty(*pmd),
1538 HPAGE_PMD_SIZE/PAGE_SIZE);1564 HPAGE_PMD_SIZE/PAGE_SIZE);
1539 spin_unlock(ptl);1565 spin_unlock(ptl);
1540 return 0;1566 return 0;
@@ -1542,6 +1568,7 @@ static int gather_pte_stats(pmd_t *pmd, unsigned long addr, · 1 unmodified line
1542 1568
1543 if (pmd_trans_unstable(pmd))1569 if (pmd_trans_unstable(pmd))
1544 return 0;1570 return 0;
1571#endif
1545 orig_pte = pte = pte_offset_map_lock(walk->mm, pmd, addr, &ptl);1572 orig_pte = pte = pte_offset_map_lock(walk->mm, pmd, addr, &ptl);
1546 do {1573 do {
1547 struct page *page = can_gather_numa_stats(*pte, vma, addr);1574 struct page *page = can_gather_numa_stats(*pte, vma, addr);
include/linux/ceph/auth.h+5−5
@@ -12,9 +12,12 @@ · 11 unmodified lines
12 */12 */
13 13
14struct ceph_auth_client;14struct ceph_auth_client;
15struct ceph_authorizer;
16struct ceph_msg;15struct ceph_msg;
17 16
17struct ceph_authorizer {
18 void (*destroy)(struct ceph_authorizer *);
19};
20
18struct ceph_auth_handshake {21struct ceph_auth_handshake {
19 struct ceph_authorizer *authorizer;22 struct ceph_authorizer *authorizer;
20 void *authorizer_buf;23 void *authorizer_buf;
@@ -62,8 +65,6 @@ struct ceph_auth_client_ops { · 41 unmodified lines
62 struct ceph_auth_handshake *auth);65 struct ceph_auth_handshake *auth);
63 int (*verify_authorizer_reply)(struct ceph_auth_client *ac,66 int (*verify_authorizer_reply)(struct ceph_auth_client *ac,
64 struct ceph_authorizer *a, size_t len);67 struct ceph_authorizer *a, size_t len);
65 void (*destroy_authorizer)(struct ceph_auth_client *ac,
66 struct ceph_authorizer *a);
67 void (*invalidate_authorizer)(struct ceph_auth_client *ac,68 void (*invalidate_authorizer)(struct ceph_auth_client *ac,
68 int peer_type);69 int peer_type);
69 70
@@ -112,8 +113,7 @@ extern int ceph_auth_is_authenticated(struct ceph_auth_client *ac); · 42 unmodified lines
112extern int ceph_auth_create_authorizer(struct ceph_auth_client *ac,113extern int ceph_auth_create_authorizer(struct ceph_auth_client *ac,
113 int peer_type,114 int peer_type,
114 struct ceph_auth_handshake *auth);115 struct ceph_auth_handshake *auth);
115extern void ceph_auth_destroy_authorizer(struct ceph_auth_client *ac,116void ceph_auth_destroy_authorizer(struct ceph_authorizer *a);
116 struct ceph_authorizer *a);
117extern int ceph_auth_update_authorizer(struct ceph_auth_client *ac,117extern int ceph_auth_update_authorizer(struct ceph_auth_client *ac,
118 int peer_type,118 int peer_type,
119 struct ceph_auth_handshake *a);119 struct ceph_auth_handshake *a);
include/linux/ceph/osd_client.h+0−1
@@ -16,7 +16,6 @@ struct ceph_msg; · 15 unmodified lines
16struct ceph_snap_context;16struct ceph_snap_context;
17struct ceph_osd_request;17struct ceph_osd_request;
18struct ceph_osd_client;18struct ceph_osd_client;
19struct ceph_authorizer;
20 19
21/*20/*
22 * completion callback for async writepages21 * completion callback for async writepages
include/linux/cgroup-defs.h+1−0
@@ -444,6 +444,7 @@ struct cgroup_subsys { · 443 unmodified lines
444 int (*can_attach)(struct cgroup_taskset *tset);444 int (*can_attach)(struct cgroup_taskset *tset);
445 void (*cancel_attach)(struct cgroup_taskset *tset);445 void (*cancel_attach)(struct cgroup_taskset *tset);
446 void (*attach)(struct cgroup_taskset *tset);446 void (*attach)(struct cgroup_taskset *tset);
447 void (*post_attach)(void);
447 int (*can_fork)(struct task_struct *task);448 int (*can_fork)(struct task_struct *task);
448 void (*cancel_fork)(struct task_struct *task);449 void (*cancel_fork)(struct task_struct *task);
449 void (*fork)(struct task_struct *task);450 void (*fork)(struct task_struct *task);
include/linux/cpuset.h+0−6
@@ -137,8 +137,6 @@ static inline void set_mems_allowed(nodemask_t nodemask) · 136 unmodified lines
137 task_unlock(current);137 task_unlock(current);
138}138}
139 139
140extern void cpuset_post_attach_flush(void);
141
142#else /* !CONFIG_CPUSETS */140#else /* !CONFIG_CPUSETS */
143 141
144static inline bool cpusets_enabled(void) { return false; }142static inline bool cpusets_enabled(void) { return false; }
@@ -245,10 +243,6 @@ static inline bool read_mems_allowed_retry(unsigned int seq) · 100 unmodified lines
245 return false;243 return false;
246}244}
247 245
248static inline void cpuset_post_attach_flush(void)
249{
250}
251
252#endif /* !CONFIG_CPUSETS */246#endif /* !CONFIG_CPUSETS */
253 247
254#endif /* _LINUX_CPUSET_H */248#endif /* _LINUX_CPUSET_H */
include/linux/devpts_fs.h+3−3
@@ -27,11 +27,11 @@ int devpts_new_index(struct pts_fs_info *); · 26 unmodified lines
27void devpts_kill_index(struct pts_fs_info *, int);27void devpts_kill_index(struct pts_fs_info *, int);
28 28
29/* mknod in devpts */29/* mknod in devpts */
30struct inode *devpts_pty_new(struct pts_fs_info *, dev_t, int, void *);30struct dentry *devpts_pty_new(struct pts_fs_info *, int, void *);
31/* get private structure */31/* get private structure */
32void *devpts_get_priv(struct inode *pts_inode);32void *devpts_get_priv(struct dentry *);
33/* unlink */33/* unlink */
34void devpts_pty_kill(struct inode *inode);34void devpts_pty_kill(struct dentry *);
35 35
36#endif36#endif
37 37
include/linux/huge_mm.h+5−0
@@ -152,6 +152,7 @@ static inline bool is_huge_zero_pmd(pmd_t pmd) · 151 unmodified lines
152}152}
153 153
154struct page *get_huge_zero_page(void);154struct page *get_huge_zero_page(void);
155void put_huge_zero_page(void);
155 156
156#else /* CONFIG_TRANSPARENT_HUGEPAGE */157#else /* CONFIG_TRANSPARENT_HUGEPAGE */
157#define HPAGE_PMD_SHIFT ({ BUILD_BUG(); 0; })158#define HPAGE_PMD_SHIFT ({ BUILD_BUG(); 0; })
@@ -208,6 +209,10 @@ static inline bool is_huge_zero_page(struct page *page) · 50 unmodified lines
208 return false;209 return false;
209}210}
210 211
212static inline void put_huge_zero_page(void)
213{
214 BUILD_BUG();
215}
211 216
212static inline struct page *follow_devmap_pmd(struct vm_area_struct *vma,217static inline struct page *follow_devmap_pmd(struct vm_area_struct *vma,
213 unsigned long addr, pmd_t *pmd, int flags)218 unsigned long addr, pmd_t *pmd, int flags)
include/linux/lockdep.h+5−3
@@ -196,9 +196,11 @@ struct lock_list { · 195 unmodified lines
196 * We record lock dependency chains, so that we can cache them:196 * We record lock dependency chains, so that we can cache them:
197 */197 */
198struct lock_chain {198struct lock_chain {
199 u8 irq_context;199 /* see BUILD_BUG_ON()s in lookup_chain_cache() */
200 u8 depth;200 unsigned int irq_context : 2,
201 u16 base;201 depth : 6,
202 base : 24;
203 /* 4 byte hole */
202 struct hlist_node entry;204 struct hlist_node entry;
203 u64 chain_key;205 u64 chain_key;
204};206};
include/linux/mlx5/device.h+11−0
@@ -392,6 +392,17 @@ enum { · 391 unmodified lines
392 MLX5_CAP_OFF_CMDIF_CSUM = 46,392 MLX5_CAP_OFF_CMDIF_CSUM = 46,
393};393};
394 394
395enum {
396 /*
397 * Max wqe size for rdma read is 512 bytes, so this
398 * limits our max_sge_rd as the wqe needs to fit:
399 * - ctrl segment (16 bytes)
400 * - rdma segment (16 bytes)
401 * - scatter elements (16 bytes each)
402 */
403 MLX5_MAX_SGE_RD = (512 - 16 - 16) / 16
404};
405
395struct mlx5_inbox_hdr {406struct mlx5_inbox_hdr {
396 __be16 opcode;407 __be16 opcode;
397 u8 rsvd[4];408 u8 rsvd[4];
include/linux/mlx5/driver.h+4−3
@@ -519,8 +519,9 @@ enum mlx5_device_state { · 518 unmodified lines
519};519};
520 520
521enum mlx5_interface_state {521enum mlx5_interface_state {
522 MLX5_INTERFACE_STATE_DOWN,522 MLX5_INTERFACE_STATE_DOWN = BIT(0),
523 MLX5_INTERFACE_STATE_UP,523 MLX5_INTERFACE_STATE_UP = BIT(1),
524 MLX5_INTERFACE_STATE_SHUTDOWN = BIT(2),
524};525};
525 526
526enum mlx5_pci_status {527enum mlx5_pci_status {
@@ -544,7 +545,7 @@ struct mlx5_core_dev { · 17 unmodified lines
544 enum mlx5_device_state state;545 enum mlx5_device_state state;
545 /* sync interface state */546 /* sync interface state */
546 struct mutex intf_state_mutex;547 struct mutex intf_state_mutex;
547 enum mlx5_interface_state interface_state;548 unsigned long intf_state;
548 void (*event) (struct mlx5_core_dev *dev,549 void (*event) (struct mlx5_core_dev *dev,
549 enum mlx5_dev_event event,550 enum mlx5_dev_event event,
550 unsigned long param);551 unsigned long param);
include/linux/mlx5/port.h+3−3
@@ -54,9 +54,9 @@ int mlx5_set_port_admin_status(struct mlx5_core_dev *dev, · 53 unmodified lines
54int mlx5_query_port_admin_status(struct mlx5_core_dev *dev,54int mlx5_query_port_admin_status(struct mlx5_core_dev *dev,
55 enum mlx5_port_status *status);55 enum mlx5_port_status *status);
56 56
57int mlx5_set_port_mtu(struct mlx5_core_dev *dev, int mtu, u8 port);57int mlx5_set_port_mtu(struct mlx5_core_dev *dev, u16 mtu, u8 port);
58void mlx5_query_port_max_mtu(struct mlx5_core_dev *dev, int *max_mtu, u8 port);58void mlx5_query_port_max_mtu(struct mlx5_core_dev *dev, u16 *max_mtu, u8 port);
59void mlx5_query_port_oper_mtu(struct mlx5_core_dev *dev, int *oper_mtu,59void mlx5_query_port_oper_mtu(struct mlx5_core_dev *dev, u16 *oper_mtu,
60 u8 port);60 u8 port);
61 61
62int mlx5_query_port_vl_hw_cap(struct mlx5_core_dev *dev,62int mlx5_query_port_vl_hw_cap(struct mlx5_core_dev *dev,
include/linux/mlx5/vport.h+2−0
@@ -45,6 +45,8 @@ int mlx5_query_nic_vport_mac_address(struct mlx5_core_dev *mdev, · 44 unmodified lines
45 u16 vport, u8 *addr);45 u16 vport, u8 *addr);
46int mlx5_modify_nic_vport_mac_address(struct mlx5_core_dev *dev,46int mlx5_modify_nic_vport_mac_address(struct mlx5_core_dev *dev,
47 u16 vport, u8 *addr);47 u16 vport, u8 *addr);
48int mlx5_query_nic_vport_mtu(struct mlx5_core_dev *mdev, u16 *mtu);
49int mlx5_modify_nic_vport_mtu(struct mlx5_core_dev *mdev, u16 mtu);
48int mlx5_query_nic_vport_system_image_guid(struct mlx5_core_dev *mdev,50int mlx5_query_nic_vport_system_image_guid(struct mlx5_core_dev *mdev,
49 u64 *system_image_guid);51 u64 *system_image_guid);
50int mlx5_query_nic_vport_node_guid(struct mlx5_core_dev *mdev, u64 *node_guid);52int mlx5_query_nic_vport_node_guid(struct mlx5_core_dev *mdev, u64 *node_guid);
include/linux/mm.h+4−0
@@ -1031,6 +1031,8 @@ static inline bool page_mapped(struct page *page) · 1030 unmodified lines
1031 page = compound_head(page);1031 page = compound_head(page);
1032 if (atomic_read(compound_mapcount_ptr(page)) >= 0)1032 if (atomic_read(compound_mapcount_ptr(page)) >= 0)
1033 return true;1033 return true;
1034 if (PageHuge(page))
1035 return false;
1034 for (i = 0; i < hpage_nr_pages(page); i++) {1036 for (i = 0; i < hpage_nr_pages(page); i++) {
1035 if (atomic_read(&page[i]._mapcount) >= 0)1037 if (atomic_read(&page[i]._mapcount) >= 0)
1036 return true;1038 return true;
@@ -1138,6 +1140,8 @@ struct zap_details { · 101 unmodified lines
1138 1140
1139struct page *vm_normal_page(struct vm_area_struct *vma, unsigned long addr,1141struct page *vm_normal_page(struct vm_area_struct *vma, unsigned long addr,
1140 pte_t pte);1142 pte_t pte);
1143struct page *vm_normal_page_pmd(struct vm_area_struct *vma, unsigned long addr,
1144 pmd_t pmd);
1141 1145
1142int zap_vma_ptes(struct vm_area_struct *vma, unsigned long address,1146int zap_vma_ptes(struct vm_area_struct *vma, unsigned long address,
1143 unsigned long size);1147 unsigned long size);
include/linux/tty_driver.h+2−2
@@ -7,7 +7,7 @@ · 6 unmodified lines
7 * defined; unless noted otherwise, they are optional, and can be7 * defined; unless noted otherwise, they are optional, and can be
8 * filled in with a null pointer.8 * filled in with a null pointer.
9 *9 *
10 * struct tty_struct * (*lookup)(struct tty_driver *self, int idx)10 * struct tty_struct * (*lookup)(struct tty_driver *self, struct file *, int idx)
11 *11 *
12 * Return the tty device corresponding to idx, NULL if there is not12 * Return the tty device corresponding to idx, NULL if there is not
13 * one currently in use and an ERR_PTR value on error. Called under13 * one currently in use and an ERR_PTR value on error. Called under
@@ -250,7 +250,7 @@ struct serial_icounter_struct; · 236 unmodified lines
250 250
251struct tty_operations {251struct tty_operations {
252 struct tty_struct * (*lookup)(struct tty_driver *driver,252 struct tty_struct * (*lookup)(struct tty_driver *driver,
253 struct inode *inode, int idx);253 struct file *filp, int idx);
254 int (*install)(struct tty_driver *driver, struct tty_struct *tty);254 int (*install)(struct tty_driver *driver, struct tty_struct *tty);
255 void (*remove)(struct tty_driver *driver, struct tty_struct *tty);255 void (*remove)(struct tty_driver *driver, struct tty_struct *tty);
256 int (*open)(struct tty_struct * tty, struct file * filp);256 int (*open)(struct tty_struct * tty, struct file * filp);
include/media/videobuf2-core.h+8−0
@@ -375,6 +375,9 @@ struct vb2_ops { · 374 unmodified lines
375/**375/**
376 * struct vb2_ops - driver-specific callbacks376 * struct vb2_ops - driver-specific callbacks
377 *377 *
378 * @verify_planes_array: Verify that a given user space structure contains
379 * enough planes for the buffer. This is called
380 * for each dequeued buffer.
378 * @fill_user_buffer: given a vb2_buffer fill in the userspace structure.381 * @fill_user_buffer: given a vb2_buffer fill in the userspace structure.
379 * For V4L2 this is a struct v4l2_buffer.382 * For V4L2 this is a struct v4l2_buffer.
380 * @fill_vb2_buffer: given a userspace structure, fill in the vb2_buffer.383 * @fill_vb2_buffer: given a userspace structure, fill in the vb2_buffer.
@@ -384,6 +387,7 @@ struct vb2_ops { · 3 unmodified lines
384 * the vb2_buffer struct.387 * the vb2_buffer struct.
385 */388 */
386struct vb2_buf_ops {389struct vb2_buf_ops {
390 int (*verify_planes_array)(struct vb2_buffer *vb, const void *pb);
387 void (*fill_user_buffer)(struct vb2_buffer *vb, void *pb);391 void (*fill_user_buffer)(struct vb2_buffer *vb, void *pb);
388 int (*fill_vb2_buffer)(struct vb2_buffer *vb, const void *pb,392 int (*fill_vb2_buffer)(struct vb2_buffer *vb, const void *pb,
389 struct vb2_plane *planes);393 struct vb2_plane *planes);
@@ -400,6 +404,9 @@ struct vb2_buf_ops { · 10 unmodified lines
400 * @fileio_read_once: report EOF after reading the first buffer404 * @fileio_read_once: report EOF after reading the first buffer
401 * @fileio_write_immediately: queue buffer after each write() call405 * @fileio_write_immediately: queue buffer after each write() call
402 * @allow_zero_bytesused: allow bytesused == 0 to be passed to the driver406 * @allow_zero_bytesused: allow bytesused == 0 to be passed to the driver
407 * @quirk_poll_must_check_waiting_for_buffers: Return POLLERR at poll when QBUF
408 * has not been called. This is a vb1 idiom that has been adopted
409 * also by vb2.
403 * @lock: pointer to a mutex that protects the vb2_queue struct. The410 * @lock: pointer to a mutex that protects the vb2_queue struct. The
404 * driver can set this to a mutex to let the v4l2 core serialize411 * driver can set this to a mutex to let the v4l2 core serialize
405 * the queuing ioctls. If the driver wants to handle locking412 * the queuing ioctls. If the driver wants to handle locking
@@ -463,6 +470,7 @@ struct vb2_queue { · 57 unmodified lines
463 unsigned fileio_read_once:1;470 unsigned fileio_read_once:1;
464 unsigned fileio_write_immediately:1;471 unsigned fileio_write_immediately:1;
465 unsigned allow_zero_bytesused:1;472 unsigned allow_zero_bytesused:1;
473 unsigned quirk_poll_must_check_waiting_for_buffers:1;
466 474
467 struct mutex *lock;475 struct mutex *lock;
468 void *owner;476 void *owner;
include/net/switchdev.h+4−0
@@ -54,6 +54,8 @@ struct switchdev_attr { · 53 unmodified lines
54 struct net_device *orig_dev;54 struct net_device *orig_dev;
55 enum switchdev_attr_id id;55 enum switchdev_attr_id id;
56 u32 flags;56 u32 flags;
57 void *complete_priv;
58 void (*complete)(struct net_device *dev, int err, void *priv);
57 union {59 union {
58 struct netdev_phys_item_id ppid; /* PORT_PARENT_ID */60 struct netdev_phys_item_id ppid; /* PORT_PARENT_ID */
59 u8 stp_state; /* PORT_STP_STATE */61 u8 stp_state; /* PORT_STP_STATE */
@@ -75,6 +77,8 @@ struct switchdev_obj { · 15 unmodified lines
75 struct net_device *orig_dev;77 struct net_device *orig_dev;
76 enum switchdev_obj_id id;78 enum switchdev_obj_id id;
77 u32 flags;79 u32 flags;
80 void *complete_priv;
81 void (*complete)(struct net_device *dev, int err, void *priv);
78};82};
79 83
80/* SWITCHDEV_OBJ_ID_PORT_VLAN */84/* SWITCHDEV_OBJ_ID_PORT_VLAN */
include/rdma/ib.h+16−0
@@ -34,6 +34,7 @@ · 33 unmodified lines
34#define _RDMA_IB_H34#define _RDMA_IB_H
35 35
36#include <linux/types.h>36#include <linux/types.h>
37#include <linux/sched.h>
37 38
38struct ib_addr {39struct ib_addr {
39 union {40 union {
@@ -86,4 +87,19 @@ struct sockaddr_ib { · 46 unmodified lines
86 __u64 sib_scope_id;87 __u64 sib_scope_id;
87};88};
88 89
90/*
91 * The IB interfaces that use write() as bi-directional ioctl() are
92 * fundamentally unsafe, since there are lots of ways to trigger "write()"
93 * calls from various contexts with elevated privileges. That includes the
94 * traditional suid executable error message writes, but also various kernel
95 * interfaces that can write to file descriptors.
96 *
97 * This function provides protection for the legacy API by restricting the
98 * calling context.
99 */
100static inline bool ib_safe_file_access(struct file *filp)
101{
102 return filp->f_cred == current_cred() && segment_eq(get_fs(), USER_DS);
103}
104
89#endif /* _RDMA_IB_H */105#endif /* _RDMA_IB_H */
include/sound/hda_i915.h+2−3
@@ -9,7 +9,7 @@ · 8 unmodified lines
9#ifdef CONFIG_SND_HDA_I9159#ifdef CONFIG_SND_HDA_I915
10int snd_hdac_set_codec_wakeup(struct hdac_bus *bus, bool enable);10int snd_hdac_set_codec_wakeup(struct hdac_bus *bus, bool enable);
11int snd_hdac_display_power(struct hdac_bus *bus, bool enable);11int snd_hdac_display_power(struct hdac_bus *bus, bool enable);
12int snd_hdac_get_display_clk(struct hdac_bus *bus);12void snd_hdac_i915_set_bclk(struct hdac_bus *bus);
13int snd_hdac_sync_audio_rate(struct hdac_bus *bus, hda_nid_t nid, int rate);13int snd_hdac_sync_audio_rate(struct hdac_bus *bus, hda_nid_t nid, int rate);
14int snd_hdac_acomp_get_eld(struct hdac_bus *bus, hda_nid_t nid,14int snd_hdac_acomp_get_eld(struct hdac_bus *bus, hda_nid_t nid,
15 bool *audio_enabled, char *buffer, int max_bytes);15 bool *audio_enabled, char *buffer, int max_bytes);
@@ -25,9 +25,8 @@ static inline int snd_hdac_display_power(struct hdac_bus *bus, bool enable) · 9 unmodified lines
25{25{
26 return 0;26 return 0;
27}27}
28static inline int snd_hdac_get_display_clk(struct hdac_bus *bus)28static inline void snd_hdac_i915_set_bclk(struct hdac_bus *bus)
29{29{
30 return 0;
31}30}
32static inline int snd_hdac_sync_audio_rate(struct hdac_bus *bus, hda_nid_t nid,31static inline int snd_hdac_sync_audio_rate(struct hdac_bus *bus, hda_nid_t nid,
33 int rate)32 int rate)
include/uapi/linux/if_macsec.h+2−2
@@ -19,8 +19,8 @@ · 18 unmodified lines
19 19
20#define MACSEC_MAX_KEY_LEN 12820#define MACSEC_MAX_KEY_LEN 128
21 21
22#define DEFAULT_CIPHER_ID 0x0080020001000001ULL22#define MACSEC_DEFAULT_CIPHER_ID 0x0080020001000001ULL
23#define DEFAULT_CIPHER_ALT 0x0080C20001000001ULL23#define MACSEC_DEFAULT_CIPHER_ALT 0x0080C20001000001ULL
24 24
25#define MACSEC_MIN_ICV_LEN 825#define MACSEC_MIN_ICV_LEN 8
26#define MACSEC_MAX_ICV_LEN 3226#define MACSEC_MAX_ICV_LEN 32
include/uapi/linux/v4l2-dv-timings.h+20−10
@@ -183,7 +183,8 @@ · 182 unmodified lines
183 183
184#define V4L2_DV_BT_CEA_3840X2160P24 { \184#define V4L2_DV_BT_CEA_3840X2160P24 { \
185 .type = V4L2_DV_BT_656_1120, \185 .type = V4L2_DV_BT_656_1120, \
186 V4L2_INIT_BT_TIMINGS(3840, 2160, 0, V4L2_DV_HSYNC_POS_POL, \186 V4L2_INIT_BT_TIMINGS(3840, 2160, 0, \
187 V4L2_DV_HSYNC_POS_POL | V4L2_DV_VSYNC_POS_POL, \
187 297000000, 1276, 88, 296, 8, 10, 72, 0, 0, 0, \188 297000000, 1276, 88, 296, 8, 10, 72, 0, 0, 0, \
188 V4L2_DV_BT_STD_CEA861, \189 V4L2_DV_BT_STD_CEA861, \
189 V4L2_DV_FL_CAN_REDUCE_FPS | V4L2_DV_FL_IS_CE_VIDEO) \190 V4L2_DV_FL_CAN_REDUCE_FPS | V4L2_DV_FL_IS_CE_VIDEO) \
@@ -191,14 +192,16 @@ · 1 unmodified line
191 192
192#define V4L2_DV_BT_CEA_3840X2160P25 { \193#define V4L2_DV_BT_CEA_3840X2160P25 { \
193 .type = V4L2_DV_BT_656_1120, \194 .type = V4L2_DV_BT_656_1120, \
194 V4L2_INIT_BT_TIMINGS(3840, 2160, 0, V4L2_DV_HSYNC_POS_POL, \195 V4L2_INIT_BT_TIMINGS(3840, 2160, 0, \
196 V4L2_DV_HSYNC_POS_POL | V4L2_DV_VSYNC_POS_POL, \
195 297000000, 1056, 88, 296, 8, 10, 72, 0, 0, 0, \197 297000000, 1056, 88, 296, 8, 10, 72, 0, 0, 0, \
196 V4L2_DV_BT_STD_CEA861, V4L2_DV_FL_IS_CE_VIDEO) \198 V4L2_DV_BT_STD_CEA861, V4L2_DV_FL_IS_CE_VIDEO) \
197}199}
198 200
199#define V4L2_DV_BT_CEA_3840X2160P30 { \201#define V4L2_DV_BT_CEA_3840X2160P30 { \
200 .type = V4L2_DV_BT_656_1120, \202 .type = V4L2_DV_BT_656_1120, \
201 V4L2_INIT_BT_TIMINGS(3840, 2160, 0, V4L2_DV_HSYNC_POS_POL, \203 V4L2_INIT_BT_TIMINGS(3840, 2160, 0, \
204 V4L2_DV_HSYNC_POS_POL | V4L2_DV_VSYNC_POS_POL, \
202 297000000, 176, 88, 296, 8, 10, 72, 0, 0, 0, \205 297000000, 176, 88, 296, 8, 10, 72, 0, 0, 0, \
203 V4L2_DV_BT_STD_CEA861, \206 V4L2_DV_BT_STD_CEA861, \
204 V4L2_DV_FL_CAN_REDUCE_FPS | V4L2_DV_FL_IS_CE_VIDEO) \207 V4L2_DV_FL_CAN_REDUCE_FPS | V4L2_DV_FL_IS_CE_VIDEO) \
@@ -206,14 +209,16 @@ · 1 unmodified line
206 209
207#define V4L2_DV_BT_CEA_3840X2160P50 { \210#define V4L2_DV_BT_CEA_3840X2160P50 { \
208 .type = V4L2_DV_BT_656_1120, \211 .type = V4L2_DV_BT_656_1120, \
209 V4L2_INIT_BT_TIMINGS(3840, 2160, 0, V4L2_DV_HSYNC_POS_POL, \212 V4L2_INIT_BT_TIMINGS(3840, 2160, 0, \
213 V4L2_DV_HSYNC_POS_POL | V4L2_DV_VSYNC_POS_POL, \
210 594000000, 1056, 88, 296, 8, 10, 72, 0, 0, 0, \214 594000000, 1056, 88, 296, 8, 10, 72, 0, 0, 0, \
211 V4L2_DV_BT_STD_CEA861, V4L2_DV_FL_IS_CE_VIDEO) \215 V4L2_DV_BT_STD_CEA861, V4L2_DV_FL_IS_CE_VIDEO) \
212}216}
213 217
214#define V4L2_DV_BT_CEA_3840X2160P60 { \218#define V4L2_DV_BT_CEA_3840X2160P60 { \
215 .type = V4L2_DV_BT_656_1120, \219 .type = V4L2_DV_BT_656_1120, \
216 V4L2_INIT_BT_TIMINGS(3840, 2160, 0, V4L2_DV_HSYNC_POS_POL, \220 V4L2_INIT_BT_TIMINGS(3840, 2160, 0, \
221 V4L2_DV_HSYNC_POS_POL | V4L2_DV_VSYNC_POS_POL, \
217 594000000, 176, 88, 296, 8, 10, 72, 0, 0, 0, \222 594000000, 176, 88, 296, 8, 10, 72, 0, 0, 0, \
218 V4L2_DV_BT_STD_CEA861, \223 V4L2_DV_BT_STD_CEA861, \
219 V4L2_DV_FL_CAN_REDUCE_FPS | V4L2_DV_FL_IS_CE_VIDEO) \224 V4L2_DV_FL_CAN_REDUCE_FPS | V4L2_DV_FL_IS_CE_VIDEO) \
@@ -221,7 +226,8 @@ · 1 unmodified line
221 226
222#define V4L2_DV_BT_CEA_4096X2160P24 { \227#define V4L2_DV_BT_CEA_4096X2160P24 { \
223 .type = V4L2_DV_BT_656_1120, \228 .type = V4L2_DV_BT_656_1120, \
224 V4L2_INIT_BT_TIMINGS(4096, 2160, 0, V4L2_DV_HSYNC_POS_POL, \229 V4L2_INIT_BT_TIMINGS(4096, 2160, 0, \
230 V4L2_DV_HSYNC_POS_POL | V4L2_DV_VSYNC_POS_POL, \
225 297000000, 1020, 88, 296, 8, 10, 72, 0, 0, 0, \231 297000000, 1020, 88, 296, 8, 10, 72, 0, 0, 0, \
226 V4L2_DV_BT_STD_CEA861, \232 V4L2_DV_BT_STD_CEA861, \
227 V4L2_DV_FL_CAN_REDUCE_FPS | V4L2_DV_FL_IS_CE_VIDEO) \233 V4L2_DV_FL_CAN_REDUCE_FPS | V4L2_DV_FL_IS_CE_VIDEO) \
@@ -229,14 +235,16 @@ · 1 unmodified line
229 235
230#define V4L2_DV_BT_CEA_4096X2160P25 { \236#define V4L2_DV_BT_CEA_4096X2160P25 { \
231 .type = V4L2_DV_BT_656_1120, \237 .type = V4L2_DV_BT_656_1120, \
232 V4L2_INIT_BT_TIMINGS(4096, 2160, 0, V4L2_DV_HSYNC_POS_POL, \238 V4L2_INIT_BT_TIMINGS(4096, 2160, 0, \
239 V4L2_DV_HSYNC_POS_POL | V4L2_DV_VSYNC_POS_POL, \
233 297000000, 968, 88, 128, 8, 10, 72, 0, 0, 0, \240 297000000, 968, 88, 128, 8, 10, 72, 0, 0, 0, \
234 V4L2_DV_BT_STD_CEA861, V4L2_DV_FL_IS_CE_VIDEO) \241 V4L2_DV_BT_STD_CEA861, V4L2_DV_FL_IS_CE_VIDEO) \
235}242}
236 243
237#define V4L2_DV_BT_CEA_4096X2160P30 { \244#define V4L2_DV_BT_CEA_4096X2160P30 { \
238 .type = V4L2_DV_BT_656_1120, \245 .type = V4L2_DV_BT_656_1120, \
239 V4L2_INIT_BT_TIMINGS(4096, 2160, 0, V4L2_DV_HSYNC_POS_POL, \246 V4L2_INIT_BT_TIMINGS(4096, 2160, 0, \
247 V4L2_DV_HSYNC_POS_POL | V4L2_DV_VSYNC_POS_POL, \
240 297000000, 88, 88, 128, 8, 10, 72, 0, 0, 0, \248 297000000, 88, 88, 128, 8, 10, 72, 0, 0, 0, \
241 V4L2_DV_BT_STD_CEA861, \249 V4L2_DV_BT_STD_CEA861, \
242 V4L2_DV_FL_CAN_REDUCE_FPS | V4L2_DV_FL_IS_CE_VIDEO) \250 V4L2_DV_FL_CAN_REDUCE_FPS | V4L2_DV_FL_IS_CE_VIDEO) \
@@ -244,14 +252,16 @@ · 1 unmodified line
244 252
245#define V4L2_DV_BT_CEA_4096X2160P50 { \253#define V4L2_DV_BT_CEA_4096X2160P50 { \
246 .type = V4L2_DV_BT_656_1120, \254 .type = V4L2_DV_BT_656_1120, \
247 V4L2_INIT_BT_TIMINGS(4096, 2160, 0, V4L2_DV_HSYNC_POS_POL, \255 V4L2_INIT_BT_TIMINGS(4096, 2160, 0, \
256 V4L2_DV_HSYNC_POS_POL | V4L2_DV_VSYNC_POS_POL, \
248 594000000, 968, 88, 128, 8, 10, 72, 0, 0, 0, \257 594000000, 968, 88, 128, 8, 10, 72, 0, 0, 0, \
249 V4L2_DV_BT_STD_CEA861, V4L2_DV_FL_IS_CE_VIDEO) \258 V4L2_DV_BT_STD_CEA861, V4L2_DV_FL_IS_CE_VIDEO) \
250}259}
251 260
252#define V4L2_DV_BT_CEA_4096X2160P60 { \261#define V4L2_DV_BT_CEA_4096X2160P60 { \
253 .type = V4L2_DV_BT_656_1120, \262 .type = V4L2_DV_BT_656_1120, \
254 V4L2_INIT_BT_TIMINGS(4096, 2160, 0, V4L2_DV_HSYNC_POS_POL, \263 V4L2_INIT_BT_TIMINGS(4096, 2160, 0, \
264 V4L2_DV_HSYNC_POS_POL | V4L2_DV_VSYNC_POS_POL, \
255 594000000, 88, 88, 128, 8, 10, 72, 0, 0, 0, \265 594000000, 88, 88, 128, 8, 10, 72, 0, 0, 0, \
256 V4L2_DV_BT_STD_CEA861, \266 V4L2_DV_BT_STD_CEA861, \
257 V4L2_DV_FL_CAN_REDUCE_FPS | V4L2_DV_FL_IS_CE_VIDEO) \267 V4L2_DV_FL_CAN_REDUCE_FPS | V4L2_DV_FL_IS_CE_VIDEO) \
kernel/bpf/verifier.c+0−1
@@ -2030,7 +2030,6 @@ static int replace_map_fd_with_map_ptr(struct verifier_env *env) · 2029 unmodified lines
2030 if (IS_ERR(map)) {2030 if (IS_ERR(map)) {
2031 verbose("fd %d is not pointing to valid bpf_map\n",2031 verbose("fd %d is not pointing to valid bpf_map\n",
2032 insn->imm);2032 insn->imm);
2033 fdput(f);
2034 return PTR_ERR(map);2033 return PTR_ERR(map);
2035 }2034 }
2036 2035
kernel/cgroup.c+5−2
@@ -2825,9 +2825,10 @@ static ssize_t __cgroup_procs_write(struct kernfs_open_file *of, char *buf, · 2824 unmodified lines
2825 size_t nbytes, loff_t off, bool threadgroup)2825 size_t nbytes, loff_t off, bool threadgroup)
2826{2826{
2827 struct task_struct *tsk;2827 struct task_struct *tsk;
2828 struct cgroup_subsys *ss;
2828 struct cgroup *cgrp;2829 struct cgroup *cgrp;
2829 pid_t pid;2830 pid_t pid;
2830 int ret;2831 int ssid, ret;
2831 2832
2832 if (kstrtoint(strstrip(buf), 0, &pid) || pid < 0)2833 if (kstrtoint(strstrip(buf), 0, &pid) || pid < 0)
2833 return -EINVAL;2834 return -EINVAL;
@@ -2875,8 +2876,10 @@ out_unlock_rcu: · 41 unmodified lines
2875 rcu_read_unlock();2876 rcu_read_unlock();
2876out_unlock_threadgroup:2877out_unlock_threadgroup:
2877 percpu_up_write(&cgroup_threadgroup_rwsem);2878 percpu_up_write(&cgroup_threadgroup_rwsem);
2879 for_each_subsys(ss, ssid)
2880 if (ss->post_attach)
2881 ss->post_attach();
2878 cgroup_kn_unlock(of->kn);2882 cgroup_kn_unlock(of->kn);
2879 cpuset_post_attach_flush();
2880 return ret ?: nbytes;2883 return ret ?: nbytes;
2881}2884}
2882 2885
kernel/cpuset.c+2−2
@@ -58,7 +58,6 @@ · 57 unmodified lines
58#include <asm/uaccess.h>58#include <asm/uaccess.h>
59#include <linux/atomic.h>59#include <linux/atomic.h>
60#include <linux/mutex.h>60#include <linux/mutex.h>
61#include <linux/workqueue.h>
62#include <linux/cgroup.h>61#include <linux/cgroup.h>
63#include <linux/wait.h>62#include <linux/wait.h>
64 63
@@ -1016,7 +1015,7 @@ static void cpuset_migrate_mm(struct mm_struct *mm, const nodemask_t *from, · 951 unmodified lines
1016 }1015 }
1017}1016}
1018 1017
1019void cpuset_post_attach_flush(void)1018static void cpuset_post_attach(void)
1020{1019{
1021 flush_workqueue(cpuset_migrate_mm_wq);1020 flush_workqueue(cpuset_migrate_mm_wq);
1022}1021}
@@ -2087,6 +2086,7 @@ struct cgroup_subsys cpuset_cgrp_subsys = { · 1064 unmodified lines
2087 .can_attach = cpuset_can_attach,2086 .can_attach = cpuset_can_attach,
2088 .cancel_attach = cpuset_cancel_attach,2087 .cancel_attach = cpuset_cancel_attach,
2089 .attach = cpuset_attach,2088 .attach = cpuset_attach,
2089 .post_attach = cpuset_post_attach,
2090 .bind = cpuset_bind,2090 .bind = cpuset_bind,
2091 .legacy_cftypes = files,2091 .legacy_cftypes = files,
2092 .early_init = true,2092 .early_init = true,
kernel/events/core.c+38−17
@@ -412,7 +412,8 @@ int perf_cpu_time_max_percent_handler(struct ctl_table *table, int write, · 411 unmodified lines
412 if (ret || !write)412 if (ret || !write)
413 return ret;413 return ret;
414 414
415 if (sysctl_perf_cpu_time_max_percent == 100) {415 if (sysctl_perf_cpu_time_max_percent == 100 ||
416 sysctl_perf_cpu_time_max_percent == 0) {
416 printk(KERN_WARNING417 printk(KERN_WARNING
417 "perf: Dynamic interrupt throttling disabled, can hang your system!\n");418 "perf: Dynamic interrupt throttling disabled, can hang your system!\n");
418 WRITE_ONCE(perf_sample_allowed_ns, 0);419 WRITE_ONCE(perf_sample_allowed_ns, 0);
@@ -1105,6 +1106,7 @@ static void put_ctx(struct perf_event_context *ctx) · 686 unmodified lines
1105 * function.1106 * function.
1106 *1107 *
1107 * Lock order:1108 * Lock order:
1109 * cred_guard_mutex
1108 * task_struct::perf_event_mutex1110 * task_struct::perf_event_mutex
1109 * perf_event_context::mutex1111 * perf_event_context::mutex
1110 * perf_event::child_mutex;1112 * perf_event::child_mutex;
@@ -3420,7 +3422,6 @@ static struct task_struct * · 2309 unmodified lines
3420find_lively_task_by_vpid(pid_t vpid)3422find_lively_task_by_vpid(pid_t vpid)
3421{3423{
3422 struct task_struct *task;3424 struct task_struct *task;
3423 int err;
3424 3425
3425 rcu_read_lock();3426 rcu_read_lock();
3426 if (!vpid)3427 if (!vpid)
@@ -3434,16 +3435,7 @@ find_lively_task_by_vpid(pid_t vpid) · 7 unmodified lines
3434 if (!task)3435 if (!task)
3435 return ERR_PTR(-ESRCH);3436 return ERR_PTR(-ESRCH);
3436 3437
3437 /* Reuse ptrace permission checks for now. */
3438 err = -EACCES;
3439 if (!ptrace_may_access(task, PTRACE_MODE_READ_REALCREDS))
3440 goto errout;
3441
3442 return task;3438 return task;
3443errout:
3444 put_task_struct(task);
3445 return ERR_PTR(err);
3446
3447}3439}
3448 3440
3449/*3441/*
@@ -8413,6 +8405,24 @@ SYSCALL_DEFINE5(perf_event_open, · 4963 unmodified lines
8413 8405
8414 get_online_cpus();8406 get_online_cpus();
8415 8407
8408 if (task) {
8409 err = mutex_lock_interruptible(&task->signal->cred_guard_mutex);
8410 if (err)
8411 goto err_cpus;
8412
8413 /*
8414 * Reuse ptrace permission checks for now.
8415 *
8416 * We must hold cred_guard_mutex across this and any potential
8417 * perf_install_in_context() call for this new event to
8418 * serialize against exec() altering our credentials (and the
8419 * perf_event_exit_task() that could imply).
8420 */
8421 err = -EACCES;
8422 if (!ptrace_may_access(task, PTRACE_MODE_READ_REALCREDS))
8423 goto err_cred;
8424 }
8425
8416 if (flags & PERF_FLAG_PID_CGROUP)8426 if (flags & PERF_FLAG_PID_CGROUP)
8417 cgroup_fd = pid;8427 cgroup_fd = pid;
8418 8428
@@ -8420,7 +8430,7 @@ SYSCALL_DEFINE5(perf_event_open, · 1 unmodified line
8420 NULL, NULL, cgroup_fd);8430 NULL, NULL, cgroup_fd);
8421 if (IS_ERR(event)) {8431 if (IS_ERR(event)) {
8422 err = PTR_ERR(event);8432 err = PTR_ERR(event);
8423 goto err_cpus;8433 goto err_cred;
8424 }8434 }
8425 8435
8426 if (is_sampling_event(event)) {8436 if (is_sampling_event(event)) {
@@ -8479,11 +8489,6 @@ SYSCALL_DEFINE5(perf_event_open, · 52 unmodified lines
8479 goto err_context;8489 goto err_context;
8480 }8490 }
8481 8491
8482 if (task) {
8483 put_task_struct(task);
8484 task = NULL;
8485 }
8486
8487 /*8492 /*
8488 * Look up the group leader (we will attach this event to it):8493 * Look up the group leader (we will attach this event to it):
8489 */8494 */
@@ -8581,6 +8586,11 @@ SYSCALL_DEFINE5(perf_event_open, · 91 unmodified lines
8581 8586
8582 WARN_ON_ONCE(ctx->parent_ctx);8587 WARN_ON_ONCE(ctx->parent_ctx);
8583 8588
8589 /*
8590 * This is the point on no return; we cannot fail hereafter. This is
8591 * where we start modifying current state.
8592 */
8593
8584 if (move_group) {8594 if (move_group) {
8585 /*8595 /*
8586 * See perf_event_ctx_lock() for comments on the details8596 * See perf_event_ctx_lock() for comments on the details
@@ -8652,6 +8662,11 @@ SYSCALL_DEFINE5(perf_event_open, · 65 unmodified lines
8652 mutex_unlock(&gctx->mutex);8662 mutex_unlock(&gctx->mutex);
8653 mutex_unlock(&ctx->mutex);8663 mutex_unlock(&ctx->mutex);
8654 8664
8665 if (task) {
8666 mutex_unlock(&task->signal->cred_guard_mutex);
8667 put_task_struct(task);
8668 }
8669
8655 put_online_cpus();8670 put_online_cpus();
8656 8671
8657 mutex_lock(&current->perf_event_mutex);8672 mutex_lock(&current->perf_event_mutex);
@@ -8684,6 +8699,9 @@ err_alloc: · 26 unmodified lines
8684 */8699 */
8685 if (!event_file)8700 if (!event_file)
8686 free_event(event);8701 free_event(event);
8702err_cred:
8703 if (task)
8704 mutex_unlock(&task->signal->cred_guard_mutex);
8687err_cpus:8705err_cpus:
8688 put_online_cpus();8706 put_online_cpus();
8689err_task:8707err_task:
@@ -8968,6 +8986,9 @@ static void perf_event_exit_task_context(struct task_struct *child, int ctxn) · 278 unmodified lines
8968 8986
8969/*8987/*
8970 * When a child task exits, feed back event values to parent events.8988 * When a child task exits, feed back event values to parent events.
8989 *
8990 * Can be called with cred_guard_mutex held when called from
8991 * install_exec_creds().
8971 */8992 */
8972void perf_event_exit_task(struct task_struct *child)8993void perf_event_exit_task(struct task_struct *child)
8973{8994{
kernel/kcov.c+2−1
@@ -1,5 +1,6 @@
1#define pr_fmt(fmt) "kcov: " fmt1#define pr_fmt(fmt) "kcov: " fmt
2 2
3#define DISABLE_BRANCH_PROFILING
3#include <linux/compiler.h>4#include <linux/compiler.h>
4#include <linux/types.h>5#include <linux/types.h>
5#include <linux/file.h>6#include <linux/file.h>
@@ -43,7 +44,7 @@ struct kcov { · 37 unmodified lines
43 * Entry point from instrumented code.44 * Entry point from instrumented code.
44 * This is called once per basic-block/edge.45 * This is called once per basic-block/edge.
45 */46 */
46void __sanitizer_cov_trace_pc(void)47void notrace __sanitizer_cov_trace_pc(void)
47{48{
48 struct task_struct *t;49 struct task_struct *t;
49 enum kcov_mode mode;50 enum kcov_mode mode;
kernel/kexec_core.c+5−2
@@ -1415,6 +1415,9 @@ static int __init crash_save_vmcoreinfo_init(void) · 1414 unmodified lines
1415 VMCOREINFO_OFFSET(page, lru);1415 VMCOREINFO_OFFSET(page, lru);
1416 VMCOREINFO_OFFSET(page, _mapcount);1416 VMCOREINFO_OFFSET(page, _mapcount);
1417 VMCOREINFO_OFFSET(page, private);1417 VMCOREINFO_OFFSET(page, private);
1418 VMCOREINFO_OFFSET(page, compound_dtor);
1419 VMCOREINFO_OFFSET(page, compound_order);
1420 VMCOREINFO_OFFSET(page, compound_head);
1418 VMCOREINFO_OFFSET(pglist_data, node_zones);1421 VMCOREINFO_OFFSET(pglist_data, node_zones);
1419 VMCOREINFO_OFFSET(pglist_data, nr_zones);1422 VMCOREINFO_OFFSET(pglist_data, nr_zones);
1420#ifdef CONFIG_FLAT_NODE_MEM_MAP1423#ifdef CONFIG_FLAT_NODE_MEM_MAP
@@ -1447,8 +1450,8 @@ static int __init crash_save_vmcoreinfo_init(void) · 26 unmodified lines
1447#ifdef CONFIG_X861450#ifdef CONFIG_X86
1448 VMCOREINFO_NUMBER(KERNEL_IMAGE_SIZE);1451 VMCOREINFO_NUMBER(KERNEL_IMAGE_SIZE);
1449#endif1452#endif
1450#ifdef CONFIG_HUGETLBFS1453#ifdef CONFIG_HUGETLB_PAGE
1451 VMCOREINFO_SYMBOL(free_huge_page);1454 VMCOREINFO_NUMBER(HUGETLB_PAGE_DTOR);
1452#endif1455#endif
1453 1456
1454 arch_crash_save_vmcoreinfo();1457 arch_crash_save_vmcoreinfo();
kernel/locking/lockdep.c+34−3
@@ -2176,15 +2176,37 @@ cache_hit: · 2175 unmodified lines
2176 chain->irq_context = hlock->irq_context;2176 chain->irq_context = hlock->irq_context;
2177 i = get_first_held_lock(curr, hlock);2177 i = get_first_held_lock(curr, hlock);
2178 chain->depth = curr->lockdep_depth + 1 - i;2178 chain->depth = curr->lockdep_depth + 1 - i;
2179
2180 BUILD_BUG_ON((1UL << 24) <= ARRAY_SIZE(chain_hlocks));
2181 BUILD_BUG_ON((1UL << 6) <= ARRAY_SIZE(curr->held_locks));
2182 BUILD_BUG_ON((1UL << 8*sizeof(chain_hlocks[0])) <= ARRAY_SIZE(lock_classes));
2183
2179 if (likely(nr_chain_hlocks + chain->depth <= MAX_LOCKDEP_CHAIN_HLOCKS)) {2184 if (likely(nr_chain_hlocks + chain->depth <= MAX_LOCKDEP_CHAIN_HLOCKS)) {
2180 chain->base = nr_chain_hlocks;2185 chain->base = nr_chain_hlocks;
2181 nr_chain_hlocks += chain->depth;
2182 for (j = 0; j < chain->depth - 1; j++, i++) {2186 for (j = 0; j < chain->depth - 1; j++, i++) {
2183 int lock_id = curr->held_locks[i].class_idx - 1;2187 int lock_id = curr->held_locks[i].class_idx - 1;
2184 chain_hlocks[chain->base + j] = lock_id;2188 chain_hlocks[chain->base + j] = lock_id;
2185 }2189 }
2186 chain_hlocks[chain->base + j] = class - lock_classes;2190 chain_hlocks[chain->base + j] = class - lock_classes;
2187 }2191 }
2192
2193 if (nr_chain_hlocks < MAX_LOCKDEP_CHAIN_HLOCKS)
2194 nr_chain_hlocks += chain->depth;
2195
2196#ifdef CONFIG_DEBUG_LOCKDEP
2197 /*
2198 * Important for check_no_collision().
2199 */
2200 if (unlikely(nr_chain_hlocks > MAX_LOCKDEP_CHAIN_HLOCKS)) {
2201 if (debug_locks_off_graph_unlock())
2202 return 0;
2203
2204 print_lockdep_off("BUG: MAX_LOCKDEP_CHAIN_HLOCKS too low!");
2205 dump_stack();
2206 return 0;
2207 }
2208#endif
2209
2188 hlist_add_head_rcu(&chain->entry, hash_head);2210 hlist_add_head_rcu(&chain->entry, hash_head);
2189 debug_atomic_inc(chain_lookup_misses);2211 debug_atomic_inc(chain_lookup_misses);
2190 inc_chains();2212 inc_chains();
@@ -2932,6 +2954,11 @@ static int mark_irqflags(struct task_struct *curr, struct held_lock *hlock) · 741 unmodified lines
2932 return 1;2954 return 1;
2933}2955}
2934 2956
2957static inline unsigned int task_irq_context(struct task_struct *task)
2958{
2959 return 2 * !!task->hardirq_context + !!task->softirq_context;
2960}
2961
2935static int separate_irq_context(struct task_struct *curr,2962static int separate_irq_context(struct task_struct *curr,
2936 struct held_lock *hlock)2963 struct held_lock *hlock)
2937{2964{
@@ -2940,8 +2967,6 @@ static int separate_irq_context(struct task_struct *curr, · 2 unmodified lines
2940 /*2967 /*
2941 * Keep track of points where we cross into an interrupt context:2968 * Keep track of points where we cross into an interrupt context:
2942 */2969 */
2943 hlock->irq_context = 2*(curr->hardirq_context ? 1 : 0) +
2944 curr->softirq_context;
2945 if (depth) {2970 if (depth) {
2946 struct held_lock *prev_hlock;2971 struct held_lock *prev_hlock;
2947 2972
@@ -2973,6 +2998,11 @@ static inline int mark_irqflags(struct task_struct *curr, · 25 unmodified lines
2973 return 1;2998 return 1;
2974}2999}
2975 3000
3001static inline unsigned int task_irq_context(struct task_struct *task)
3002{
3003 return 0;
3004}
3005
2976static inline int separate_irq_context(struct task_struct *curr,3006static inline int separate_irq_context(struct task_struct *curr,
2977 struct held_lock *hlock)3007 struct held_lock *hlock)
2978{3008{
@@ -3241,6 +3271,7 @@ static int __lock_acquire(struct lockdep_map *lock, unsigned int subclass, · 262 unmodified lines
3241 hlock->acquire_ip = ip;3271 hlock->acquire_ip = ip;
3242 hlock->instance = lock;3272 hlock->instance = lock;
3243 hlock->nest_lock = nest_lock;3273 hlock->nest_lock = nest_lock;
3274 hlock->irq_context = task_irq_context(curr);
3244 hlock->trylock = trylock;3275 hlock->trylock = trylock;
3245 hlock->read = read;3276 hlock->read = read;
3246 hlock->check = check;3277 hlock->check = check;
kernel/locking/lockdep_proc.c+2−0
@@ -141,6 +141,8 @@ static int lc_show(struct seq_file *m, void *v) · 140 unmodified lines
141 int i;141 int i;
142 142
143 if (v == SEQ_START_TOKEN) {143 if (v == SEQ_START_TOKEN) {
144 if (nr_chain_hlocks > MAX_LOCKDEP_CHAIN_HLOCKS)
145 seq_printf(m, "(buggered) ");
144 seq_printf(m, "all lock chains:\n");146 seq_printf(m, "all lock chains:\n");
145 return 0;147 return 0;
146 }148 }
kernel/workqueue.c+29−0
@@ -666,6 +666,35 @@ static void set_work_pool_and_clear_pending(struct work_struct *work, · 665 unmodified lines
666 */666 */
667 smp_wmb();667 smp_wmb();
668 set_work_data(work, (unsigned long)pool_id << WORK_OFFQ_POOL_SHIFT, 0);668 set_work_data(work, (unsigned long)pool_id << WORK_OFFQ_POOL_SHIFT, 0);
669 /*
670 * The following mb guarantees that previous clear of a PENDING bit
671 * will not be reordered with any speculative LOADS or STORES from
672 * work->current_func, which is executed afterwards. This possible
673 * reordering can lead to a missed execution on attempt to qeueue
674 * the same @work. E.g. consider this case:
675 *
676 * CPU#0 CPU#1
677 * ---------------------------- --------------------------------
678 *
679 * 1 STORE event_indicated
680 * 2 queue_work_on() {
681 * 3 test_and_set_bit(PENDING)
682 * 4 } set_..._and_clear_pending() {
683 * 5 set_work_data() # clear bit
684 * 6 smp_mb()
685 * 7 work->current_func() {
686 * 8 LOAD event_indicated
687 * }
688 *
689 * Without an explicit full barrier speculative LOAD on line 8 can
690 * be executed before CPU#0 does STORE on line 1. If that happens,
691 * CPU#0 observes the PENDING bit is still set and new execution of
692 * a @work is not queued in a hope, that CPU#1 will eventually
693 * finish the queued @work. Meanwhile CPU#1 does not see
694 * event_indicated is set, because speculative LOAD was executed
695 * before actual STORE.
696 */
697 smp_mb();
669}698}
670 699
671static void clear_work_data(struct work_struct *work)700static void clear_work_data(struct work_struct *work)
lib/stackdepot.c+0−4
@@ -210,10 +210,6 @@ depot_stack_handle_t depot_save_stack(struct stack_trace *trace, · 209 unmodified lines
210 goto fast_exit;210 goto fast_exit;
211 211
212 hash = hash_stack(trace->entries, trace->nr_entries);212 hash = hash_stack(trace->entries, trace->nr_entries);
213 /* Bad luck, we won't store this stack. */
214 if (hash == 0)
215 goto exit;
216
217 bucket = &stack_table[hash & STACK_HASH_MASK];213 bucket = &stack_table[hash & STACK_HASH_MASK];
218 214
219 /*215 /*
mm/huge_memory.c+5−7
@@ -232,7 +232,7 @@ retry: · 231 unmodified lines
232 return READ_ONCE(huge_zero_page);232 return READ_ONCE(huge_zero_page);
233}233}
234 234
235static void put_huge_zero_page(void)235void put_huge_zero_page(void)
236{236{
237 /*237 /*
238 * Counter should never go to zero here. Only shrinker can put238 * Counter should never go to zero here. Only shrinker can put
@@ -1684,12 +1684,12 @@ int zap_huge_pmd(struct mmu_gather *tlb, struct vm_area_struct *vma, · 1445 unmodified lines
1684 if (vma_is_dax(vma)) {1684 if (vma_is_dax(vma)) {
1685 spin_unlock(ptl);1685 spin_unlock(ptl);
1686 if (is_huge_zero_pmd(orig_pmd))1686 if (is_huge_zero_pmd(orig_pmd))
1687 put_huge_zero_page();1687 tlb_remove_page(tlb, pmd_page(orig_pmd));
1688 } else if (is_huge_zero_pmd(orig_pmd)) {1688 } else if (is_huge_zero_pmd(orig_pmd)) {
1689 pte_free(tlb->mm, pgtable_trans_huge_withdraw(tlb->mm, pmd));1689 pte_free(tlb->mm, pgtable_trans_huge_withdraw(tlb->mm, pmd));
1690 atomic_long_dec(&tlb->mm->nr_ptes);1690 atomic_long_dec(&tlb->mm->nr_ptes);
1691 spin_unlock(ptl);1691 spin_unlock(ptl);
1692 put_huge_zero_page();1692 tlb_remove_page(tlb, pmd_page(orig_pmd));
1693 } else {1693 } else {
1694 struct page *page = pmd_page(orig_pmd);1694 struct page *page = pmd_page(orig_pmd);
1695 page_remove_rmap(page, true);1695 page_remove_rmap(page, true);
@@ -1960,10 +1960,9 @@ int khugepaged_enter_vma_merge(struct vm_area_struct *vma, · 264 unmodified lines
1960 * page fault if needed.1960 * page fault if needed.
1961 */1961 */
1962 return 0;1962 return 0;
1963 if (vma->vm_ops)1963 if (vma->vm_ops || (vm_flags & VM_NO_THP))
1964 /* khugepaged not yet working on file or special mappings */1964 /* khugepaged not yet working on file or special mappings */
1965 return 0;1965 return 0;
1966 VM_BUG_ON_VMA(vm_flags & VM_NO_THP, vma);
1967 hstart = (vma->vm_start + ~HPAGE_PMD_MASK) & HPAGE_PMD_MASK;1966 hstart = (vma->vm_start + ~HPAGE_PMD_MASK) & HPAGE_PMD_MASK;
1968 hend = vma->vm_end & HPAGE_PMD_MASK;1967 hend = vma->vm_end & HPAGE_PMD_MASK;
1969 if (hstart < hend)1968 if (hstart < hend)
@@ -2352,8 +2351,7 @@ static bool hugepage_vma_check(struct vm_area_struct *vma) · 382 unmodified lines
2352 return false;2351 return false;
2353 if (is_vma_temporary_stack(vma))2352 if (is_vma_temporary_stack(vma))
2354 return false;2353 return false;
2355 VM_BUG_ON_VMA(vma->vm_flags & VM_NO_THP, vma);2354 return !(vma->vm_flags & VM_NO_THP);
2356 return true;
2357}2355}
2358 2356
2359static void collapse_huge_page(struct mm_struct *mm,2357static void collapse_huge_page(struct mm_struct *mm,
mm/memcontrol.c+19−18
@@ -207,6 +207,7 @@ static void mem_cgroup_oom_notify(struct mem_cgroup *memcg); · 206 unmodified lines
207/* "mc" and its members are protected by cgroup_mutex */207/* "mc" and its members are protected by cgroup_mutex */
208static struct move_charge_struct {208static struct move_charge_struct {
209 spinlock_t lock; /* for from, to */209 spinlock_t lock; /* for from, to */
210 struct mm_struct *mm;
210 struct mem_cgroup *from;211 struct mem_cgroup *from;
211 struct mem_cgroup *to;212 struct mem_cgroup *to;
212 unsigned long flags;213 unsigned long flags;
@@ -4667,6 +4668,8 @@ static void __mem_cgroup_clear_mc(void) · 4454 unmodified lines
4667 4668
4668static void mem_cgroup_clear_mc(void)4669static void mem_cgroup_clear_mc(void)
4669{4670{
4671 struct mm_struct *mm = mc.mm;
4672
4670 /*4673 /*
4671 * we must clear moving_task before waking up waiters at the end of4674 * we must clear moving_task before waking up waiters at the end of
4672 * task migration.4675 * task migration.
@@ -4676,7 +4679,10 @@ static void mem_cgroup_clear_mc(void) · 3 unmodified lines
4676 spin_lock(&mc.lock);4679 spin_lock(&mc.lock);
4677 mc.from = NULL;4680 mc.from = NULL;
4678 mc.to = NULL;4681 mc.to = NULL;
4682 mc.mm = NULL;
4679 spin_unlock(&mc.lock);4683 spin_unlock(&mc.lock);
4684
4685 mmput(mm);
4680}4686}
4681 4687
4682static int mem_cgroup_can_attach(struct cgroup_taskset *tset)4688static int mem_cgroup_can_attach(struct cgroup_taskset *tset)
@@ -4733,6 +4739,7 @@ static int mem_cgroup_can_attach(struct cgroup_taskset *tset) · 50 unmodified lines
4733 VM_BUG_ON(mc.moved_swap);4739 VM_BUG_ON(mc.moved_swap);
4734 4740
4735 spin_lock(&mc.lock);4741 spin_lock(&mc.lock);
4742 mc.mm = mm;
4736 mc.from = from;4743 mc.from = from;
4737 mc.to = memcg;4744 mc.to = memcg;
4738 mc.flags = move_flags;4745 mc.flags = move_flags;
@@ -4742,8 +4749,9 @@ static int mem_cgroup_can_attach(struct cgroup_taskset *tset) · 3 unmodified lines
4742 ret = mem_cgroup_precharge_mc(mm);4749 ret = mem_cgroup_precharge_mc(mm);
4743 if (ret)4750 if (ret)
4744 mem_cgroup_clear_mc();4751 mem_cgroup_clear_mc();
4752 } else {
4753 mmput(mm);
4745 }4754 }
4746 mmput(mm);
4747 return ret;4755 return ret;
4748}4756}
4749 4757
@@ -4852,11 +4860,11 @@ put: /* get_mctgt_type() gets the page */ · 102 unmodified lines
4852 return ret;4860 return ret;
4853}4861}
4854 4862
4855static void mem_cgroup_move_charge(struct mm_struct *mm)4863static void mem_cgroup_move_charge(void)
4856{4864{
4857 struct mm_walk mem_cgroup_move_charge_walk = {4865 struct mm_walk mem_cgroup_move_charge_walk = {
4858 .pmd_entry = mem_cgroup_move_charge_pte_range,4866 .pmd_entry = mem_cgroup_move_charge_pte_range,
4859 .mm = mm,4867 .mm = mc.mm,
4860 };4868 };
4861 4869
4862 lru_add_drain_all();4870 lru_add_drain_all();
@@ -4868,7 +4876,7 @@ static void mem_cgroup_move_charge(struct mm_struct *mm) · 5 unmodified lines
4868 atomic_inc(&mc.from->moving_account);4876 atomic_inc(&mc.from->moving_account);
4869 synchronize_rcu();4877 synchronize_rcu();
4870retry:4878retry:
4871 if (unlikely(!down_read_trylock(&mm->mmap_sem))) {4879 if (unlikely(!down_read_trylock(&mc.mm->mmap_sem))) {
4872 /*4880 /*
4873 * Someone who are holding the mmap_sem might be waiting in4881 * Someone who are holding the mmap_sem might be waiting in
4874 * waitq. So we cancel all extra charges, wake up all waiters,4882 * waitq. So we cancel all extra charges, wake up all waiters,
@@ -4885,23 +4893,16 @@ retry: · 10 unmodified lines
4885 * additional charge, the page walk just aborts.4893 * additional charge, the page walk just aborts.
4886 */4894 */
4887 walk_page_range(0, ~0UL, &mem_cgroup_move_charge_walk);4895 walk_page_range(0, ~0UL, &mem_cgroup_move_charge_walk);
4888 up_read(&mm->mmap_sem);4896 up_read(&mc.mm->mmap_sem);
4889 atomic_dec(&mc.from->moving_account);4897 atomic_dec(&mc.from->moving_account);
4890}4898}
4891 4899
4892static void mem_cgroup_move_task(struct cgroup_taskset *tset)4900static void mem_cgroup_move_task(void)
4893{4901{
4894 struct cgroup_subsys_state *css;4902 if (mc.to) {
4895 struct task_struct *p = cgroup_taskset_first(tset, &css);4903 mem_cgroup_move_charge();
4896 struct mm_struct *mm = get_task_mm(p);
4897
4898 if (mm) {
4899 if (mc.to)
4900 mem_cgroup_move_charge(mm);
4901 mmput(mm);
4902 }
4903 if (mc.to)
4904 mem_cgroup_clear_mc();4904 mem_cgroup_clear_mc();
4905 }
4905}4906}
4906#else /* !CONFIG_MMU */4907#else /* !CONFIG_MMU */
4907static int mem_cgroup_can_attach(struct cgroup_taskset *tset)4908static int mem_cgroup_can_attach(struct cgroup_taskset *tset)
@@ -4911,7 +4912,7 @@ static int mem_cgroup_can_attach(struct cgroup_taskset *tset) · 3 unmodified lines
4911static void mem_cgroup_cancel_attach(struct cgroup_taskset *tset)4912static void mem_cgroup_cancel_attach(struct cgroup_taskset *tset)
4912{4913{
4913}4914}
4914static void mem_cgroup_move_task(struct cgroup_taskset *tset)4915static void mem_cgroup_move_task(void)
4915{4916{
4916}4917}
4917#endif4918#endif
@@ -5195,7 +5196,7 @@ struct cgroup_subsys memory_cgrp_subsys = { · 277 unmodified lines
5195 .css_reset = mem_cgroup_css_reset,5196 .css_reset = mem_cgroup_css_reset,
5196 .can_attach = mem_cgroup_can_attach,5197 .can_attach = mem_cgroup_can_attach,
5197 .cancel_attach = mem_cgroup_cancel_attach,5198 .cancel_attach = mem_cgroup_cancel_attach,
5198 .attach = mem_cgroup_move_task,5199 .post_attach = mem_cgroup_move_task,
5199 .bind = mem_cgroup_bind,5200 .bind = mem_cgroup_bind,
5200 .dfl_cftypes = memory_files,5201 .dfl_cftypes = memory_files,
5201 .legacy_cftypes = mem_cgroup_legacy_files,5202 .legacy_cftypes = mem_cgroup_legacy_files,
mm/memory-failure.c+9−1
@@ -888,7 +888,15 @@ int get_hwpoison_page(struct page *page) · 887 unmodified lines
888 }888 }
889 }889 }
890 890
891 return get_page_unless_zero(head);891 if (get_page_unless_zero(head)) {
892 if (head == compound_head(page))
893 return 1;
894
895 pr_info("MCE: %#lx cannot catch tail\n", page_to_pfn(page));
896 put_page(head);
897 }
898
899 return 0;
892}900}
893EXPORT_SYMBOL_GPL(get_hwpoison_page);901EXPORT_SYMBOL_GPL(get_hwpoison_page);
894 902
mm/memory.c+40−0
@@ -789,6 +789,46 @@ out: · 788 unmodified lines
789 return pfn_to_page(pfn);789 return pfn_to_page(pfn);
790}790}
791 791
792#ifdef CONFIG_TRANSPARENT_HUGEPAGE
793struct page *vm_normal_page_pmd(struct vm_area_struct *vma, unsigned long addr,
794 pmd_t pmd)
795{
796 unsigned long pfn = pmd_pfn(pmd);
797
798 /*
799 * There is no pmd_special() but there may be special pmds, e.g.
800 * in a direct-access (dax) mapping, so let's just replicate the
801 * !HAVE_PTE_SPECIAL case from vm_normal_page() here.
802 */
803 if (unlikely(vma->vm_flags & (VM_PFNMAP|VM_MIXEDMAP))) {
804 if (vma->vm_flags & VM_MIXEDMAP) {
805 if (!pfn_valid(pfn))
806 return NULL;
807 goto out;
808 } else {
809 unsigned long off;
810 off = (addr - vma->vm_start) >> PAGE_SHIFT;
811 if (pfn == vma->vm_pgoff + off)
812 return NULL;
813 if (!is_cow_mapping(vma->vm_flags))
814 return NULL;
815 }
816 }
817
818 if (is_zero_pfn(pfn))
819 return NULL;
820 if (unlikely(pfn > highest_memmap_pfn))
821 return NULL;
822
823 /*
824 * NOTE! We still have PageReserved() pages in the page tables.
825 * eg. VDSO mappings can cause them to exist.
826 */
827out:
828 return pfn_to_page(pfn);
829}
830#endif
831
792/*832/*
793 * copy one vm_area from one task to the other. Assumes the page tables833 * copy one vm_area from one task to the other. Assumes the page tables
794 * already present in the new task to be cleared in the whole range834 * already present in the new task to be cleared in the whole range
mm/migrate.c+7−1
@@ -975,7 +975,13 @@ out: · 974 unmodified lines
975 dec_zone_page_state(page, NR_ISOLATED_ANON +975 dec_zone_page_state(page, NR_ISOLATED_ANON +
976 page_is_file_cache(page));976 page_is_file_cache(page));
977 /* Soft-offlined page shouldn't go through lru cache list */977 /* Soft-offlined page shouldn't go through lru cache list */
978 if (reason == MR_MEMORY_FAILURE) {978 if (reason == MR_MEMORY_FAILURE && rc == MIGRATEPAGE_SUCCESS) {
979 /*
980 * With this release, we free successfully migrated
981 * page and set PG_HWPoison on just freed page
982 * intentionally. Although it's rather weird, it's how
983 * HWPoison flag works at the moment.
984 */
979 put_page(page);985 put_page(page);
980 if (!test_set_page_hwpoison(page))986 if (!test_set_page_hwpoison(page))
981 num_poisoned_pages_inc();987 num_poisoned_pages_inc();
mm/page_io.c+5−1
@@ -353,7 +353,11 @@ int swap_readpage(struct page *page) · 352 unmodified lines
353 353
354 ret = bdev_read_page(sis->bdev, swap_page_sector(page), page);354 ret = bdev_read_page(sis->bdev, swap_page_sector(page), page);
355 if (!ret) {355 if (!ret) {
356 swap_slot_free_notify(page);356 if (trylock_page(page)) {
357 swap_slot_free_notify(page);
358 unlock_page(page);
359 }
360
357 count_vm_event(PSWPIN);361 count_vm_event(PSWPIN);
358 return 0;362 return 0;
359 }363 }
mm/swap.c+5−0
@@ -728,6 +728,11 @@ void release_pages(struct page **pages, int nr, bool cold) · 727 unmodified lines
728 zone = NULL;728 zone = NULL;
729 }729 }
730 730
731 if (is_huge_zero_page(page)) {
732 put_huge_zero_page();
733 continue;
734 }
735
731 page = compound_head(page);736 page = compound_head(page);
732 if (!put_page_testzero(page))737 if (!put_page_testzero(page))
733 continue;738 continue;
mm/vmscan.c+15−15
@@ -2553,7 +2553,7 @@ static bool shrink_zones(struct zonelist *zonelist, struct scan_control *sc) · 2552 unmodified lines
2553 sc->gfp_mask |= __GFP_HIGHMEM;2553 sc->gfp_mask |= __GFP_HIGHMEM;
2554 2554
2555 for_each_zone_zonelist_nodemask(zone, z, zonelist,2555 for_each_zone_zonelist_nodemask(zone, z, zonelist,
2556 requested_highidx, sc->nodemask) {2556 gfp_zone(sc->gfp_mask), sc->nodemask) {
2557 enum zone_type classzone_idx;2557 enum zone_type classzone_idx;
2558 2558
2559 if (!populated_zone(zone))2559 if (!populated_zone(zone))
@@ -3318,6 +3318,20 @@ static void kswapd_try_to_sleep(pg_data_t *pgdat, int order, · 758 unmodified lines
3318 /* Try to sleep for a short interval */3318 /* Try to sleep for a short interval */
3319 if (prepare_kswapd_sleep(pgdat, order, remaining,3319 if (prepare_kswapd_sleep(pgdat, order, remaining,
3320 balanced_classzone_idx)) {3320 balanced_classzone_idx)) {
3321 /*
3322 * Compaction records what page blocks it recently failed to
3323 * isolate pages from and skips them in the future scanning.
3324 * When kswapd is going to sleep, it is reasonable to assume
3325 * that pages and compaction may succeed so reset the cache.
3326 */
3327 reset_isolation_suitable(pgdat);
3328
3329 /*
3330 * We have freed the memory, now we should compact it to make
3331 * allocation of the requested order possible.
3332 */
3333 wakeup_kcompactd(pgdat, order, classzone_idx);
3334
3321 remaining = schedule_timeout(HZ/10);3335 remaining = schedule_timeout(HZ/10);
3322 finish_wait(&pgdat->kswapd_wait, &wait);3336 finish_wait(&pgdat->kswapd_wait, &wait);
3323 prepare_to_wait(&pgdat->kswapd_wait, &wait, TASK_INTERRUPTIBLE);3337 prepare_to_wait(&pgdat->kswapd_wait, &wait, TASK_INTERRUPTIBLE);
@@ -3341,20 +3355,6 @@ static void kswapd_try_to_sleep(pg_data_t *pgdat, int order, · 17 unmodified lines
3341 */3355 */
3342 set_pgdat_percpu_threshold(pgdat, calculate_normal_threshold);3356 set_pgdat_percpu_threshold(pgdat, calculate_normal_threshold);
3343 3357
3344 /*
3345 * Compaction records what page blocks it recently failed to
3346 * isolate pages from and skips them in the future scanning.
3347 * When kswapd is going to sleep, it is reasonable to assume
3348 * that pages and compaction may succeed so reset the cache.
3349 */
3350 reset_isolation_suitable(pgdat);
3351
3352 /*
3353 * We have freed the memory, now we should compact it to make
3354 * allocation of the requested order possible.
3355 */
3356 wakeup_kcompactd(pgdat, order, classzone_idx);
3357
3358 if (!kthread_should_stop())3358 if (!kthread_should_stop())
3359 schedule();3359 schedule();
3360 3360
net/bridge/br_mdb.c+79−45
@@ -61,6 +61,19 @@ static void __mdb_entry_fill_flags(struct br_mdb_entry *e, unsigned char flags) · 60 unmodified lines
61 e->flags |= MDB_FLAGS_OFFLOAD;61 e->flags |= MDB_FLAGS_OFFLOAD;
62}62}
63 63
64static void __mdb_entry_to_br_ip(struct br_mdb_entry *entry, struct br_ip *ip)
65{
66 memset(ip, 0, sizeof(struct br_ip));
67 ip->vid = entry->vid;
68 ip->proto = entry->addr.proto;
69 if (ip->proto == htons(ETH_P_IP))
70 ip->u.ip4 = entry->addr.u.ip4;
71#if IS_ENABLED(CONFIG_IPV6)
72 else
73 ip->u.ip6 = entry->addr.u.ip6;
74#endif
75}
76
64static int br_mdb_fill_info(struct sk_buff *skb, struct netlink_callback *cb,77static int br_mdb_fill_info(struct sk_buff *skb, struct netlink_callback *cb,
65 struct net_device *dev)78 struct net_device *dev)
66{79{
@@ -243,9 +256,45 @@ static inline size_t rtnl_mdb_nlmsg_size(void) · 176 unmodified lines
243 + nla_total_size(sizeof(struct br_mdb_entry));256 + nla_total_size(sizeof(struct br_mdb_entry));
244}257}
245 258
246static void __br_mdb_notify(struct net_device *dev, struct br_mdb_entry *entry,259struct br_mdb_complete_info {
247 int type, struct net_bridge_port_group *pg)260 struct net_bridge_port *port;
261 struct br_ip ip;
262};
263
264static void br_mdb_complete(struct net_device *dev, int err, void *priv)
248{265{
266 struct br_mdb_complete_info *data = priv;
267 struct net_bridge_port_group __rcu **pp;
268 struct net_bridge_port_group *p;
269 struct net_bridge_mdb_htable *mdb;
270 struct net_bridge_mdb_entry *mp;
271 struct net_bridge_port *port = data->port;
272 struct net_bridge *br = port->br;
273
274 if (err)
275 goto err;
276
277 spin_lock_bh(&br->multicast_lock);
278 mdb = mlock_dereference(br->mdb, br);
279 mp = br_mdb_ip_get(mdb, &data->ip);
280 if (!mp)
281 goto out;
282 for (pp = &mp->ports; (p = mlock_dereference(*pp, br)) != NULL;
283 pp = &p->next) {
284 if (p->port != port)
285 continue;
286 p->flags |= MDB_PG_FLAGS_OFFLOAD;
287 }
288out:
289 spin_unlock_bh(&br->multicast_lock);
290err:
291 kfree(priv);
292}
293
294static void __br_mdb_notify(struct net_device *dev, struct net_bridge_port *p,
295 struct br_mdb_entry *entry, int type)
296{
297 struct br_mdb_complete_info *complete_info;
249 struct switchdev_obj_port_mdb mdb = {298 struct switchdev_obj_port_mdb mdb = {
250 .obj = {299 .obj = {
251 .id = SWITCHDEV_OBJ_ID_PORT_MDB,300 .id = SWITCHDEV_OBJ_ID_PORT_MDB,
@@ -268,9 +317,14 @@ static void __br_mdb_notify(struct net_device *dev, struct br_mdb_entry *entry, · 16 unmodified lines
268 317
269 mdb.obj.orig_dev = port_dev;318 mdb.obj.orig_dev = port_dev;
270 if (port_dev && type == RTM_NEWMDB) {319 if (port_dev && type == RTM_NEWMDB) {
271 err = switchdev_port_obj_add(port_dev, &mdb.obj);320 complete_info = kmalloc(sizeof(*complete_info), GFP_ATOMIC);
272 if (!err && pg)321 if (complete_info) {
273 pg->flags |= MDB_PG_FLAGS_OFFLOAD;322 complete_info->port = p;
323 __mdb_entry_to_br_ip(entry, &complete_info->ip);
324 mdb.obj.complete_priv = complete_info;
325 mdb.obj.complete = br_mdb_complete;
326 switchdev_port_obj_add(port_dev, &mdb.obj);
327 }
274 } else if (port_dev && type == RTM_DELMDB) {328 } else if (port_dev && type == RTM_DELMDB) {
275 switchdev_port_obj_del(port_dev, &mdb.obj);329 switchdev_port_obj_del(port_dev, &mdb.obj);
276 }330 }
@@ -291,21 +345,21 @@ errout: · 14 unmodified lines
291 rtnl_set_sk_err(net, RTNLGRP_MDB, err);345 rtnl_set_sk_err(net, RTNLGRP_MDB, err);
292}346}
293 347
294void br_mdb_notify(struct net_device *dev, struct net_bridge_port_group *pg,348void br_mdb_notify(struct net_device *dev, struct net_bridge_port *port,
295 int type)349 struct br_ip *group, int type, u8 flags)
296{350{
297 struct br_mdb_entry entry;351 struct br_mdb_entry entry;
298 352
299 memset(&entry, 0, sizeof(entry));353 memset(&entry, 0, sizeof(entry));
300 entry.ifindex = pg->port->dev->ifindex;354 entry.ifindex = port->dev->ifindex;
301 entry.addr.proto = pg->addr.proto;355 entry.addr.proto = group->proto;
302 entry.addr.u.ip4 = pg->addr.u.ip4;356 entry.addr.u.ip4 = group->u.ip4;
303#if IS_ENABLED(CONFIG_IPV6)357#if IS_ENABLED(CONFIG_IPV6)
304 entry.addr.u.ip6 = pg->addr.u.ip6;358 entry.addr.u.ip6 = group->u.ip6;
305#endif359#endif
306 entry.vid = pg->addr.vid;360 entry.vid = group->vid;
307 __mdb_entry_fill_flags(&entry, pg->flags);361 __mdb_entry_fill_flags(&entry, flags);
308 __br_mdb_notify(dev, &entry, type, pg);362 __br_mdb_notify(dev, port, &entry, type);
309}363}
310 364
311static int nlmsg_populate_rtr_fill(struct sk_buff *skb,365static int nlmsg_populate_rtr_fill(struct sk_buff *skb,
@@ -450,8 +504,7 @@ static int br_mdb_parse(struct sk_buff *skb, struct nlmsghdr *nlh, · 138 unmodified lines
450}504}
451 505
452static int br_mdb_add_group(struct net_bridge *br, struct net_bridge_port *port,506static int br_mdb_add_group(struct net_bridge *br, struct net_bridge_port *port,
453 struct br_ip *group, unsigned char state,507 struct br_ip *group, unsigned char state)
454 struct net_bridge_port_group **pg)
455{508{
456 struct net_bridge_mdb_entry *mp;509 struct net_bridge_mdb_entry *mp;
457 struct net_bridge_port_group *p;510 struct net_bridge_port_group *p;
@@ -482,7 +535,6 @@ static int br_mdb_add_group(struct net_bridge *br, struct net_bridge_port *port, · 24 unmodified lines
482 if (unlikely(!p))535 if (unlikely(!p))
483 return -ENOMEM;536 return -ENOMEM;
484 rcu_assign_pointer(*pp, p);537 rcu_assign_pointer(*pp, p);
485 *pg = p;
486 if (state == MDB_TEMPORARY)538 if (state == MDB_TEMPORARY)
487 mod_timer(&p->timer, now + br->multicast_membership_interval);539 mod_timer(&p->timer, now + br->multicast_membership_interval);
488 540
@@ -490,8 +542,7 @@ static int br_mdb_add_group(struct net_bridge *br, struct net_bridge_port *port, · 1 unmodified line
490}542}
491 543
492static int __br_mdb_add(struct net *net, struct net_bridge *br,544static int __br_mdb_add(struct net *net, struct net_bridge *br,
493 struct br_mdb_entry *entry,545 struct br_mdb_entry *entry)
494 struct net_bridge_port_group **pg)
495{546{
496 struct br_ip ip;547 struct br_ip ip;
497 struct net_device *dev;548 struct net_device *dev;
@@ -509,18 +560,10 @@ static int __br_mdb_add(struct net *net, struct net_bridge *br, · 11 unmodified lines
509 if (!p || p->br != br || p->state == BR_STATE_DISABLED)560 if (!p || p->br != br || p->state == BR_STATE_DISABLED)
510 return -EINVAL;561 return -EINVAL;
511 562
512 memset(&ip, 0, sizeof(ip));563 __mdb_entry_to_br_ip(entry, &ip);
513 ip.vid = entry->vid;
514 ip.proto = entry->addr.proto;
515 if (ip.proto == htons(ETH_P_IP))
516 ip.u.ip4 = entry->addr.u.ip4;
517#if IS_ENABLED(CONFIG_IPV6)
518 else
519 ip.u.ip6 = entry->addr.u.ip6;
520#endif
521 564
522 spin_lock_bh(&br->multicast_lock);565 spin_lock_bh(&br->multicast_lock);
523 ret = br_mdb_add_group(br, p, &ip, entry->state, pg);566 ret = br_mdb_add_group(br, p, &ip, entry->state);
524 spin_unlock_bh(&br->multicast_lock);567 spin_unlock_bh(&br->multicast_lock);
525 return ret;568 return ret;
526}569}
@@ -528,7 +571,6 @@ static int __br_mdb_add(struct net *net, struct net_bridge *br, · 1 unmodified line
528static int br_mdb_add(struct sk_buff *skb, struct nlmsghdr *nlh)571static int br_mdb_add(struct sk_buff *skb, struct nlmsghdr *nlh)
529{572{
530 struct net *net = sock_net(skb->sk);573 struct net *net = sock_net(skb->sk);
531 struct net_bridge_port_group *pg;
532 struct net_bridge_vlan_group *vg;574 struct net_bridge_vlan_group *vg;
533 struct net_device *dev, *pdev;575 struct net_device *dev, *pdev;
534 struct br_mdb_entry *entry;576 struct br_mdb_entry *entry;
@@ -558,15 +600,15 @@ static int br_mdb_add(struct sk_buff *skb, struct nlmsghdr *nlh) · 23 unmodified lines
558 if (br_vlan_enabled(br) && vg && entry->vid == 0) {600 if (br_vlan_enabled(br) && vg && entry->vid == 0) {
559 list_for_each_entry(v, &vg->vlan_list, vlist) {601 list_for_each_entry(v, &vg->vlan_list, vlist) {
560 entry->vid = v->vid;602 entry->vid = v->vid;
561 err = __br_mdb_add(net, br, entry, &pg);603 err = __br_mdb_add(net, br, entry);
562 if (err)604 if (err)
563 break;605 break;
564 __br_mdb_notify(dev, entry, RTM_NEWMDB, pg);606 __br_mdb_notify(dev, p, entry, RTM_NEWMDB);
565 }607 }
566 } else {608 } else {
567 err = __br_mdb_add(net, br, entry, &pg);609 err = __br_mdb_add(net, br, entry);
568 if (!err)610 if (!err)
569 __br_mdb_notify(dev, entry, RTM_NEWMDB, pg);611 __br_mdb_notify(dev, p, entry, RTM_NEWMDB);
570 }612 }
571 613
572 return err;614 return err;
@@ -584,15 +626,7 @@ static int __br_mdb_del(struct net_bridge *br, struct br_mdb_entry *entry) · 11 unmodified lines
584 if (!netif_running(br->dev) || br->multicast_disabled)626 if (!netif_running(br->dev) || br->multicast_disabled)
585 return -EINVAL;627 return -EINVAL;
586 628
587 memset(&ip, 0, sizeof(ip));629 __mdb_entry_to_br_ip(entry, &ip);
588 ip.vid = entry->vid;
589 ip.proto = entry->addr.proto;
590 if (ip.proto == htons(ETH_P_IP))
591 ip.u.ip4 = entry->addr.u.ip4;
592#if IS_ENABLED(CONFIG_IPV6)
593 else
594 ip.u.ip6 = entry->addr.u.ip6;
595#endif
596 630
597 spin_lock_bh(&br->multicast_lock);631 spin_lock_bh(&br->multicast_lock);
598 mdb = mlock_dereference(br->mdb, br);632 mdb = mlock_dereference(br->mdb, br);
@@ -662,12 +696,12 @@ static int br_mdb_del(struct sk_buff *skb, struct nlmsghdr *nlh) · 63 unmodified lines
662 entry->vid = v->vid;696 entry->vid = v->vid;
663 err = __br_mdb_del(br, entry);697 err = __br_mdb_del(br, entry);
664 if (!err)698 if (!err)
665 __br_mdb_notify(dev, entry, RTM_DELMDB, NULL);699 __br_mdb_notify(dev, p, entry, RTM_DELMDB);
666 }700 }
667 } else {701 } else {
668 err = __br_mdb_del(br, entry);702 err = __br_mdb_del(br, entry);
669 if (!err)703 if (!err)
670 __br_mdb_notify(dev, entry, RTM_DELMDB, NULL);704 __br_mdb_notify(dev, p, entry, RTM_DELMDB);
671 }705 }
672 706
673 return err;707 return err;
net/bridge/br_multicast.c+5−3
@@ -283,7 +283,8 @@ static void br_multicast_del_pg(struct net_bridge *br, · 282 unmodified lines
283 rcu_assign_pointer(*pp, p->next);283 rcu_assign_pointer(*pp, p->next);
284 hlist_del_init(&p->mglist);284 hlist_del_init(&p->mglist);
285 del_timer(&p->timer);285 del_timer(&p->timer);
286 br_mdb_notify(br->dev, p, RTM_DELMDB);286 br_mdb_notify(br->dev, p->port, &pg->addr, RTM_DELMDB,
287 p->flags);
287 call_rcu_bh(&p->rcu, br_multicast_free_pg);288 call_rcu_bh(&p->rcu, br_multicast_free_pg);
288 289
289 if (!mp->ports && !mp->mglist &&290 if (!mp->ports && !mp->mglist &&
@@ -705,7 +706,7 @@ static int br_multicast_add_group(struct net_bridge *br, · 415 unmodified lines
705 if (unlikely(!p))706 if (unlikely(!p))
706 goto err;707 goto err;
707 rcu_assign_pointer(*pp, p);708 rcu_assign_pointer(*pp, p);
708 br_mdb_notify(br->dev, p, RTM_NEWMDB);709 br_mdb_notify(br->dev, port, group, RTM_NEWMDB, 0);
709 710
710found:711found:
711 mod_timer(&p->timer, now + br->multicast_membership_interval);712 mod_timer(&p->timer, now + br->multicast_membership_interval);
@@ -1461,7 +1462,8 @@ br_multicast_leave_group(struct net_bridge *br, · 749 unmodified lines
1461 hlist_del_init(&p->mglist);1462 hlist_del_init(&p->mglist);
1462 del_timer(&p->timer);1463 del_timer(&p->timer);
1463 call_rcu_bh(&p->rcu, br_multicast_free_pg);1464 call_rcu_bh(&p->rcu, br_multicast_free_pg);
1464 br_mdb_notify(br->dev, p, RTM_DELMDB);1465 br_mdb_notify(br->dev, port, group, RTM_DELMDB,
1466 p->flags);
1465 1467
1466 if (!mp->ports && !mp->mglist &&1468 if (!mp->ports && !mp->mglist &&
1467 netif_running(br->dev))1469 netif_running(br->dev))
net/bridge/br_private.h+2−2
@@ -560,8 +560,8 @@ br_multicast_new_port_group(struct net_bridge_port *port, struct br_ip *group, · 559 unmodified lines
560 unsigned char flags);560 unsigned char flags);
561void br_mdb_init(void);561void br_mdb_init(void);
562void br_mdb_uninit(void);562void br_mdb_uninit(void);
563void br_mdb_notify(struct net_device *dev, struct net_bridge_port_group *pg,563void br_mdb_notify(struct net_device *dev, struct net_bridge_port *port,
564 int type);564 struct br_ip *group, int type, u8 flags);
565void br_rtr_notify(struct net_device *dev, struct net_bridge_port *port,565void br_rtr_notify(struct net_device *dev, struct net_bridge_port *port,
566 int type);566 int type);
567 567
net/ceph/auth.c+2−6
@@ -293,13 +293,9 @@ int ceph_auth_create_authorizer(struct ceph_auth_client *ac, · 292 unmodified lines
293}293}
294EXPORT_SYMBOL(ceph_auth_create_authorizer);294EXPORT_SYMBOL(ceph_auth_create_authorizer);
295 295
296void ceph_auth_destroy_authorizer(struct ceph_auth_client *ac,296void ceph_auth_destroy_authorizer(struct ceph_authorizer *a)
297 struct ceph_authorizer *a)
298{297{
299 mutex_lock(&ac->mutex);298 a->destroy(a);
300 if (ac->ops && ac->ops->destroy_authorizer)
301 ac->ops->destroy_authorizer(ac, a);
302 mutex_unlock(&ac->mutex);
303}299}
304EXPORT_SYMBOL(ceph_auth_destroy_authorizer);300EXPORT_SYMBOL(ceph_auth_destroy_authorizer);
305 301
net/ceph/auth_none.c+39−32
@@ -16,7 +16,6 @@ static void reset(struct ceph_auth_client *ac) · 15 unmodified lines
16 struct ceph_auth_none_info *xi = ac->private;16 struct ceph_auth_none_info *xi = ac->private;
17 17
18 xi->starting = true;18 xi->starting = true;
19 xi->built_authorizer = false;
20}19}
21 20
22static void destroy(struct ceph_auth_client *ac)21static void destroy(struct ceph_auth_client *ac)
@@ -39,6 +38,27 @@ static int should_authenticate(struct ceph_auth_client *ac) · 16 unmodified lines
39 return xi->starting;38 return xi->starting;
40}39}
41 40
41static int ceph_auth_none_build_authorizer(struct ceph_auth_client *ac,
42 struct ceph_none_authorizer *au)
43{
44 void *p = au->buf;
45 void *const end = p + sizeof(au->buf);
46 int ret;
47
48 ceph_encode_8_safe(&p, end, 1, e_range);
49 ret = ceph_entity_name_encode(ac->name, &p, end);
50 if (ret < 0)
51 return ret;
52
53 ceph_encode_64_safe(&p, end, ac->global_id, e_range);
54 au->buf_len = p - (void *)au->buf;
55 dout("%s built authorizer len %d\n", __func__, au->buf_len);
56 return 0;
57
58e_range:
59 return -ERANGE;
60}
61
42static int build_request(struct ceph_auth_client *ac, void *buf, void *end)62static int build_request(struct ceph_auth_client *ac, void *buf, void *end)
43{63{
44 return 0;64 return 0;
@@ -57,32 +77,32 @@ static int handle_reply(struct ceph_auth_client *ac, int result, · 12 unmodified lines
57 return result;77 return result;
58}78}
59 79
80static void ceph_auth_none_destroy_authorizer(struct ceph_authorizer *a)
81{
82 kfree(a);
83}
84
60/*85/*
61 * build an 'authorizer' with our entity_name and global_id. we can86 * build an 'authorizer' with our entity_name and global_id. it is
62 * reuse a single static copy since it is identical for all services87 * identical for all services we connect to.
63 * we connect to.
64 */88 */
65static int ceph_auth_none_create_authorizer(89static int ceph_auth_none_create_authorizer(
66 struct ceph_auth_client *ac, int peer_type,90 struct ceph_auth_client *ac, int peer_type,
67 struct ceph_auth_handshake *auth)91 struct ceph_auth_handshake *auth)
68{92{
69 struct ceph_auth_none_info *ai = ac->private;93 struct ceph_none_authorizer *au;
70 struct ceph_none_authorizer *au = &ai->au;
71 void *p, *end;
72 int ret;94 int ret;
73 95
74 if (!ai->built_authorizer) {96 au = kmalloc(sizeof(*au), GFP_NOFS);
75 p = au->buf;97 if (!au)
76 end = p + sizeof(au->buf);98 return -ENOMEM;
77 ceph_encode_8(&p, 1);99
78 ret = ceph_entity_name_encode(ac->name, &p, end - 8);100 au->base.destroy = ceph_auth_none_destroy_authorizer;
79 if (ret < 0)101
80 goto bad;102 ret = ceph_auth_none_build_authorizer(ac, au);
81 ceph_decode_need(&p, end, sizeof(u64), bad2);103 if (ret) {
82 ceph_encode_64(&p, ac->global_id);104 kfree(au);
83 au->buf_len = p - (void *)au->buf;105 return ret;
84 ai->built_authorizer = true;
85 dout("built authorizer len %d\n", au->buf_len);
86 }106 }
87 107
88 auth->authorizer = (struct ceph_authorizer *) au;108 auth->authorizer = (struct ceph_authorizer *) au;
@@ -92,17 +112,6 @@ static int ceph_auth_none_create_authorizer( · 3 unmodified lines
92 auth->authorizer_reply_buf_len = sizeof (au->reply_buf);112 auth->authorizer_reply_buf_len = sizeof (au->reply_buf);
93 113
94 return 0;114 return 0;
95
96bad2:
97 ret = -ERANGE;
98bad:
99 return ret;
100}
101
102static void ceph_auth_none_destroy_authorizer(struct ceph_auth_client *ac,
103 struct ceph_authorizer *a)
104{
105 /* nothing to do */
106}115}
107 116
108static const struct ceph_auth_client_ops ceph_auth_none_ops = {117static const struct ceph_auth_client_ops ceph_auth_none_ops = {
@@ -114,7 +123,6 @@ static const struct ceph_auth_client_ops ceph_auth_none_ops = { · 5 unmodified lines
114 .build_request = build_request,123 .build_request = build_request,
115 .handle_reply = handle_reply,124 .handle_reply = handle_reply,
116 .create_authorizer = ceph_auth_none_create_authorizer,125 .create_authorizer = ceph_auth_none_create_authorizer,
117 .destroy_authorizer = ceph_auth_none_destroy_authorizer,
118};126};
119 127
120int ceph_auth_none_init(struct ceph_auth_client *ac)128int ceph_auth_none_init(struct ceph_auth_client *ac)
@@ -127,7 +135,6 @@ int ceph_auth_none_init(struct ceph_auth_client *ac) · 6 unmodified lines
127 return -ENOMEM;135 return -ENOMEM;
128 136
129 xi->starting = true;137 xi->starting = true;
130 xi->built_authorizer = false;
131 138
132 ac->protocol = CEPH_AUTH_NONE;139 ac->protocol = CEPH_AUTH_NONE;
133 ac->private = xi;140 ac->private = xi;
net/ceph/auth_none.h+1−2
@@ -12,6 +12,7 @@ · 11 unmodified lines
12 */12 */
13 13
14struct ceph_none_authorizer {14struct ceph_none_authorizer {
15 struct ceph_authorizer base;
15 char buf[128];16 char buf[128];
16 int buf_len;17 int buf_len;
17 char reply_buf[0];18 char reply_buf[0];
@@ -19,8 +20,6 @@ struct ceph_none_authorizer { · 1 unmodified line
19 20
20struct ceph_auth_none_info {21struct ceph_auth_none_info {
21 bool starting;22 bool starting;
22 bool built_authorizer;
23 struct ceph_none_authorizer au; /* we only need one; it's static */
24};23};
25 24
26int ceph_auth_none_init(struct ceph_auth_client *ac);25int ceph_auth_none_init(struct ceph_auth_client *ac);
net/ceph/auth_x.c+10−11
@@ -565,6 +565,14 @@ static int ceph_x_handle_reply(struct ceph_auth_client *ac, int result, · 564 unmodified lines
565 return -EAGAIN;565 return -EAGAIN;
566}566}
567 567
568static void ceph_x_destroy_authorizer(struct ceph_authorizer *a)
569{
570 struct ceph_x_authorizer *au = (void *)a;
571
572 ceph_x_authorizer_cleanup(au);
573 kfree(au);
574}
575
568static int ceph_x_create_authorizer(576static int ceph_x_create_authorizer(
569 struct ceph_auth_client *ac, int peer_type,577 struct ceph_auth_client *ac, int peer_type,
570 struct ceph_auth_handshake *auth)578 struct ceph_auth_handshake *auth)
@@ -581,6 +589,8 @@ static int ceph_x_create_authorizer( · 10 unmodified lines
581 if (!au)589 if (!au)
582 return -ENOMEM;590 return -ENOMEM;
583 591
592 au->base.destroy = ceph_x_destroy_authorizer;
593
584 ret = ceph_x_build_authorizer(ac, th, au);594 ret = ceph_x_build_authorizer(ac, th, au);
585 if (ret) {595 if (ret) {
586 kfree(au);596 kfree(au);
@@ -643,16 +653,6 @@ static int ceph_x_verify_authorizer_reply(struct ceph_auth_client *ac, · 56 unmodified lines
643 return ret;653 return ret;
644}654}
645 655
646static void ceph_x_destroy_authorizer(struct ceph_auth_client *ac,
647 struct ceph_authorizer *a)
648{
649 struct ceph_x_authorizer *au = (void *)a;
650
651 ceph_x_authorizer_cleanup(au);
652 kfree(au);
653}
654
655
656static void ceph_x_reset(struct ceph_auth_client *ac)656static void ceph_x_reset(struct ceph_auth_client *ac)
657{657{
658 struct ceph_x_info *xi = ac->private;658 struct ceph_x_info *xi = ac->private;
@@ -770,7 +770,6 @@ static const struct ceph_auth_client_ops ceph_x_ops = { · 111 unmodified lines
770 .create_authorizer = ceph_x_create_authorizer,770 .create_authorizer = ceph_x_create_authorizer,
771 .update_authorizer = ceph_x_update_authorizer,771 .update_authorizer = ceph_x_update_authorizer,
772 .verify_authorizer_reply = ceph_x_verify_authorizer_reply,772 .verify_authorizer_reply = ceph_x_verify_authorizer_reply,
773 .destroy_authorizer = ceph_x_destroy_authorizer,
774 .invalidate_authorizer = ceph_x_invalidate_authorizer,773 .invalidate_authorizer = ceph_x_invalidate_authorizer,
775 .reset = ceph_x_reset,774 .reset = ceph_x_reset,
776 .destroy = ceph_x_destroy,775 .destroy = ceph_x_destroy,
net/ceph/auth_x.h+1−0
@@ -26,6 +26,7 @@ struct ceph_x_ticket_handler { · 25 unmodified lines
26 26
27 27
28struct ceph_x_authorizer {28struct ceph_x_authorizer {
29 struct ceph_authorizer base;
29 struct ceph_crypto_key session_key;30 struct ceph_crypto_key session_key;
30 struct ceph_buffer *buf;31 struct ceph_buffer *buf;
31 unsigned int service;32 unsigned int service;
net/ceph/osd_client.c+2−4
@@ -1087,10 +1087,8 @@ static void put_osd(struct ceph_osd *osd) · 1086 unmodified lines
1087 dout("put_osd %p %d -> %d\n", osd, atomic_read(&osd->o_ref),1087 dout("put_osd %p %d -> %d\n", osd, atomic_read(&osd->o_ref),
1088 atomic_read(&osd->o_ref) - 1);1088 atomic_read(&osd->o_ref) - 1);
1089 if (atomic_dec_and_test(&osd->o_ref)) {1089 if (atomic_dec_and_test(&osd->o_ref)) {
1090 struct ceph_auth_client *ac = osd->o_osdc->client->monc.auth;
1091
1092 if (osd->o_auth.authorizer)1090 if (osd->o_auth.authorizer)
1093 ceph_auth_destroy_authorizer(ac, osd->o_auth.authorizer);1091 ceph_auth_destroy_authorizer(osd->o_auth.authorizer);
1094 kfree(osd);1092 kfree(osd);
1095 }1093 }
1096}1094}
@@ -2984,7 +2982,7 @@ static struct ceph_auth_handshake *get_authorizer(struct ceph_connection *con, · 1887 unmodified lines
2984 struct ceph_auth_handshake *auth = &o->o_auth;2982 struct ceph_auth_handshake *auth = &o->o_auth;
2985 2983
2986 if (force_new && auth->authorizer) {2984 if (force_new && auth->authorizer) {
2987 ceph_auth_destroy_authorizer(ac, auth->authorizer);2985 ceph_auth_destroy_authorizer(auth->authorizer);
2988 auth->authorizer = NULL;2986 auth->authorizer = NULL;
2989 }2987 }
2990 if (!auth->authorizer) {2988 if (!auth->authorizer) {
net/ipv4/fib_frontend.c+5−1
@@ -904,7 +904,11 @@ void fib_del_ifaddr(struct in_ifaddr *ifa, struct in_ifaddr *iprim) · 903 unmodified lines
904 if (ifa->ifa_flags & IFA_F_SECONDARY) {904 if (ifa->ifa_flags & IFA_F_SECONDARY) {
905 prim = inet_ifa_byprefix(in_dev, any, ifa->ifa_mask);905 prim = inet_ifa_byprefix(in_dev, any, ifa->ifa_mask);
906 if (!prim) {906 if (!prim) {
907 pr_warn("%s: bug: prim == NULL\n", __func__);907 /* if the device has been deleted, we don't perform
908 * address promotion
909 */
910 if (!in_dev->dead)
911 pr_warn("%s: bug: prim == NULL\n", __func__);
908 return;912 return;
909 }913 }
910 if (iprim && iprim != prim) {914 if (iprim && iprim != prim) {
net/ipv6/addrconf.c+15−33
@@ -3176,35 +3176,9 @@ static void addrconf_gre_config(struct net_device *dev) · 3175 unmodified lines
3176}3176}
3177#endif3177#endif
3178 3178
3179#if IS_ENABLED(CONFIG_NET_L3_MASTER_DEV)
3180/* If the host route is cached on the addr struct make sure it is associated
3181 * with the proper table. e.g., enslavement can change and if so the cached
3182 * host route needs to move to the new table.
3183 */
3184static void l3mdev_check_host_rt(struct inet6_dev *idev,
3185 struct inet6_ifaddr *ifp)
3186{
3187 if (ifp->rt) {
3188 u32 tb_id = l3mdev_fib_table(idev->dev) ? : RT6_TABLE_LOCAL;
3189
3190 if (tb_id != ifp->rt->rt6i_table->tb6_id) {
3191 ip6_del_rt(ifp->rt);
3192 ifp->rt = NULL;
3193 }
3194 }
3195}
3196#else
3197static void l3mdev_check_host_rt(struct inet6_dev *idev,
3198 struct inet6_ifaddr *ifp)
3199{
3200}
3201#endif
3202
3203static int fixup_permanent_addr(struct inet6_dev *idev,3179static int fixup_permanent_addr(struct inet6_dev *idev,
3204 struct inet6_ifaddr *ifp)3180 struct inet6_ifaddr *ifp)
3205{3181{
3206 l3mdev_check_host_rt(idev, ifp);
3207
3208 if (!ifp->rt) {3182 if (!ifp->rt) {
3209 struct rt6_info *rt;3183 struct rt6_info *rt;
3210 3184
@@ -3304,6 +3278,9 @@ static int addrconf_notify(struct notifier_block *this, unsigned long event, · 93 unmodified lines
3304 break;3278 break;
3305 3279
3306 if (event == NETDEV_UP) {3280 if (event == NETDEV_UP) {
3281 /* restore routes for permanent addresses */
3282 addrconf_permanent_addr(dev);
3283
3307 if (!addrconf_qdisc_ok(dev)) {3284 if (!addrconf_qdisc_ok(dev)) {
3308 /* device is not ready yet. */3285 /* device is not ready yet. */
3309 pr_info("ADDRCONF(NETDEV_UP): %s: link is not ready\n",3286 pr_info("ADDRCONF(NETDEV_UP): %s: link is not ready\n",
@@ -3337,9 +3314,6 @@ static int addrconf_notify(struct notifier_block *this, unsigned long event, · 27 unmodified lines
3337 run_pending = 1;3314 run_pending = 1;
3338 }3315 }
3339 3316
3340 /* restore routes for permanent addresses */
3341 addrconf_permanent_addr(dev);
3342
3343 switch (dev->type) {3317 switch (dev->type) {
3344#if IS_ENABLED(CONFIG_IPV6_SIT)3318#if IS_ENABLED(CONFIG_IPV6_SIT)
3345 case ARPHRD_SIT:3319 case ARPHRD_SIT:
@@ -3556,6 +3530,8 @@ restart: · 210 unmodified lines
3556 3530
3557 INIT_LIST_HEAD(&del_list);3531 INIT_LIST_HEAD(&del_list);
3558 list_for_each_entry_safe(ifa, tmp, &idev->addr_list, if_list) {3532 list_for_each_entry_safe(ifa, tmp, &idev->addr_list, if_list) {
3533 struct rt6_info *rt = NULL;
3534
3559 addrconf_del_dad_work(ifa);3535 addrconf_del_dad_work(ifa);
3560 3536
3561 write_unlock_bh(&idev->lock);3537 write_unlock_bh(&idev->lock);
@@ -3568,6 +3544,9 @@ restart: · 6 unmodified lines
3568 ifa->state = 0;3544 ifa->state = 0;
3569 if (!(ifa->flags & IFA_F_NODAD))3545 if (!(ifa->flags & IFA_F_NODAD))
3570 ifa->flags |= IFA_F_TENTATIVE;3546 ifa->flags |= IFA_F_TENTATIVE;
3547
3548 rt = ifa->rt;
3549 ifa->rt = NULL;
3571 } else {3550 } else {
3572 state = ifa->state;3551 state = ifa->state;
3573 ifa->state = INET6_IFADDR_STATE_DEAD;3552 ifa->state = INET6_IFADDR_STATE_DEAD;
@@ -3578,6 +3557,9 @@ restart: · 4 unmodified lines
3578 3557
3579 spin_unlock_bh(&ifa->lock);3558 spin_unlock_bh(&ifa->lock);
3580 3559
3560 if (rt)
3561 ip6_del_rt(rt);
3562
3581 if (state != INET6_IFADDR_STATE_DEAD) {3563 if (state != INET6_IFADDR_STATE_DEAD) {
3582 __ipv6_ifa_notify(RTM_DELADDR, ifa);3564 __ipv6_ifa_notify(RTM_DELADDR, ifa);
3583 inet6addr_notifier_call_chain(NETDEV_DOWN, ifa);3565 inet6addr_notifier_call_chain(NETDEV_DOWN, ifa);
@@ -5343,10 +5325,10 @@ static void __ipv6_ifa_notify(int event, struct inet6_ifaddr *ifp) · 1759 unmodified lines
5343 if (rt)5325 if (rt)
5344 ip6_del_rt(rt);5326 ip6_del_rt(rt);
5345 }5327 }
5346 dst_hold(&ifp->rt->dst);5328 if (ifp->rt) {
5347 5329 dst_hold(&ifp->rt->dst);
5348 ip6_del_rt(ifp->rt);5330 ip6_del_rt(ifp->rt);
5349 5331 }
5350 rt_genid_bump_ipv6(net);5332 rt_genid_bump_ipv6(net);
5351 break;5333 break;
5352 }5334 }
net/switchdev/switchdev.c+6−0
@@ -305,6 +305,8 @@ static void switchdev_port_attr_set_deferred(struct net_device *dev, · 304 unmodified lines
305 if (err && err != -EOPNOTSUPP)305 if (err && err != -EOPNOTSUPP)
306 netdev_err(dev, "failed (err=%d) to set attribute (id=%d)\n",306 netdev_err(dev, "failed (err=%d) to set attribute (id=%d)\n",
307 err, attr->id);307 err, attr->id);
308 if (attr->complete)
309 attr->complete(dev, err, attr->complete_priv);
308}310}
309 311
310static int switchdev_port_attr_set_defer(struct net_device *dev,312static int switchdev_port_attr_set_defer(struct net_device *dev,
@@ -434,6 +436,8 @@ static void switchdev_port_obj_add_deferred(struct net_device *dev, · 123 unmodified lines
434 if (err && err != -EOPNOTSUPP)436 if (err && err != -EOPNOTSUPP)
435 netdev_err(dev, "failed (err=%d) to add object (id=%d)\n",437 netdev_err(dev, "failed (err=%d) to add object (id=%d)\n",
436 err, obj->id);438 err, obj->id);
439 if (obj->complete)
440 obj->complete(dev, err, obj->complete_priv);
437}441}
438 442
439static int switchdev_port_obj_add_defer(struct net_device *dev,443static int switchdev_port_obj_add_defer(struct net_device *dev,
@@ -502,6 +506,8 @@ static void switchdev_port_obj_del_deferred(struct net_device *dev, · 62 unmodified lines
502 if (err && err != -EOPNOTSUPP)506 if (err && err != -EOPNOTSUPP)
503 netdev_err(dev, "failed (err=%d) to del object (id=%d)\n",507 netdev_err(dev, "failed (err=%d) to del object (id=%d)\n",
504 err, obj->id);508 err, obj->id);
509 if (obj->complete)
510 obj->complete(dev, err, obj->complete_priv);
505}511}
506 512
507static int switchdev_port_obj_del_defer(struct net_device *dev,513static int switchdev_port_obj_del_defer(struct net_device *dev,
sound/hda/ext/hdac_ext_stream.c+2−3
@@ -104,12 +104,11 @@ EXPORT_SYMBOL_GPL(snd_hdac_ext_stream_init_all); · 103 unmodified lines
104 */104 */
105void snd_hdac_stream_free_all(struct hdac_ext_bus *ebus)105void snd_hdac_stream_free_all(struct hdac_ext_bus *ebus)
106{106{
107 struct hdac_stream *s;107 struct hdac_stream *s, *_s;
108 struct hdac_ext_stream *stream;108 struct hdac_ext_stream *stream;
109 struct hdac_bus *bus = ebus_to_hbus(ebus);109 struct hdac_bus *bus = ebus_to_hbus(ebus);
110 110
111 while (!list_empty(&bus->stream_list)) {111 list_for_each_entry_safe(s, _s, &bus->stream_list, list) {
112 s = list_first_entry(&bus->stream_list, struct hdac_stream, list);
113 stream = stream_to_hdac_ext_stream(s);112 stream = stream_to_hdac_ext_stream(s);
114 snd_hdac_ext_stream_decouple(ebus, stream, false);113 snd_hdac_ext_stream_decouple(ebus, stream, false);
115 list_del(&s->list);114 list_del(&s->list);
sound/hda/hdac_i915.c+51−11
@@ -20,6 +20,7 @@ · 19 unmodified lines
20#include <sound/core.h>20#include <sound/core.h>
21#include <sound/hdaudio.h>21#include <sound/hdaudio.h>
22#include <sound/hda_i915.h>22#include <sound/hda_i915.h>
23#include <sound/hda_register.h>
23 24
24static struct i915_audio_component *hdac_acomp;25static struct i915_audio_component *hdac_acomp;
25 26
@@ -97,26 +98,65 @@ int snd_hdac_display_power(struct hdac_bus *bus, bool enable) · 71 unmodified lines
97}98}
98EXPORT_SYMBOL_GPL(snd_hdac_display_power);99EXPORT_SYMBOL_GPL(snd_hdac_display_power);
99 100
101#define CONTROLLER_IN_GPU(pci) (((pci)->device == 0x0a0c) || \
102 ((pci)->device == 0x0c0c) || \
103 ((pci)->device == 0x0d0c) || \
104 ((pci)->device == 0x160c))
105
100/**106/**
101 * snd_hdac_get_display_clk - Get CDCLK in kHz107 * snd_hdac_i915_set_bclk - Reprogram BCLK for HSW/BDW
102 * @bus: HDA core bus108 * @bus: HDA core bus
103 *109 *
104 * This function is supposed to be used only by a HD-audio controller110 * Intel HSW/BDW display HDA controller is in GPU. Both its power and link BCLK
105 * driver that needs the interaction with i915 graphics.111 * depends on GPU. Two Extended Mode registers EM4 (M value) and EM5 (N Value)
112 * are used to convert CDClk (Core Display Clock) to 24MHz BCLK:
113 * BCLK = CDCLK * M / N
114 * The values will be lost when the display power well is disabled and need to
115 * be restored to avoid abnormal playback speed.
106 *116 *
107 * This function queries CDCLK value in kHz from the graphics driver and117 * Call this function at initializing and changing power well, as well as
108 * returns the value. A negative code is returned in error.118 * at ELD notifier for the hotplug.
109 */119 */
110int snd_hdac_get_display_clk(struct hdac_bus *bus)120void snd_hdac_i915_set_bclk(struct hdac_bus *bus)
111{121{
112 struct i915_audio_component *acomp = bus->audio_component;122 struct i915_audio_component *acomp = bus->audio_component;
123 struct pci_dev *pci = to_pci_dev(bus->dev);
124 int cdclk_freq;
125 unsigned int bclk_m, bclk_n;
126
127 if (!acomp || !acomp->ops || !acomp->ops->get_cdclk_freq)
128 return; /* only for i915 binding */
129 if (!CONTROLLER_IN_GPU(pci))
130 return; /* only HSW/BDW */
131
132 cdclk_freq = acomp->ops->get_cdclk_freq(acomp->dev);
133 switch (cdclk_freq) {
134 case 337500:
135 bclk_m = 16;
136 bclk_n = 225;
137 break;
138
139 case 450000:
140 default: /* default CDCLK 450MHz */
141 bclk_m = 4;
142 bclk_n = 75;
143 break;
144
145 case 540000:
146 bclk_m = 4;
147 bclk_n = 90;
148 break;
149
150 case 675000:
151 bclk_m = 8;
152 bclk_n = 225;
153 break;
154 }
113 155
114 if (!acomp || !acomp->ops)156 snd_hdac_chip_writew(bus, HSW_EM4, bclk_m);
115 return -ENODEV;157 snd_hdac_chip_writew(bus, HSW_EM5, bclk_n);
116
117 return acomp->ops->get_cdclk_freq(acomp->dev);
118}158}
119EXPORT_SYMBOL_GPL(snd_hdac_get_display_clk);159EXPORT_SYMBOL_GPL(snd_hdac_i915_set_bclk);
120 160
121/* There is a fixed mapping between audio pin node and display port161/* There is a fixed mapping between audio pin node and display port
122 * on current Intel platforms:162 * on current Intel platforms:
sound/pci/hda/hda_intel.c+4−52
@@ -857,50 +857,6 @@ static int param_set_xint(const char *val, const struct kernel_param *kp) · 856 unmodified lines
857#define azx_del_card_list(chip) /* NOP */857#define azx_del_card_list(chip) /* NOP */
858#endif /* CONFIG_PM */858#endif /* CONFIG_PM */
859 859
860/* Intel HSW/BDW display HDA controller is in GPU. Both its power and link BCLK
861 * depends on GPU. Two Extended Mode registers EM4 (M value) and EM5 (N Value)
862 * are used to convert CDClk (Core Display Clock) to 24MHz BCLK:
863 * BCLK = CDCLK * M / N
864 * The values will be lost when the display power well is disabled and need to
865 * be restored to avoid abnormal playback speed.
866 */
867static void haswell_set_bclk(struct hda_intel *hda)
868{
869 struct azx *chip = &hda->chip;
870 int cdclk_freq;
871 unsigned int bclk_m, bclk_n;
872
873 if (!hda->need_i915_power)
874 return;
875
876 cdclk_freq = snd_hdac_get_display_clk(azx_bus(chip));
877 switch (cdclk_freq) {
878 case 337500:
879 bclk_m = 16;
880 bclk_n = 225;
881 break;
882
883 case 450000:
884 default: /* default CDCLK 450MHz */
885 bclk_m = 4;
886 bclk_n = 75;
887 break;
888
889 case 540000:
890 bclk_m = 4;
891 bclk_n = 90;
892 break;
893
894 case 675000:
895 bclk_m = 8;
896 bclk_n = 225;
897 break;
898 }
899
900 azx_writew(chip, HSW_EM4, bclk_m);
901 azx_writew(chip, HSW_EM5, bclk_n);
902}
903
904#if defined(CONFIG_PM_SLEEP) || defined(SUPPORT_VGA_SWITCHEROO)860#if defined(CONFIG_PM_SLEEP) || defined(SUPPORT_VGA_SWITCHEROO)
905/*861/*
906 * power management862 * power management
@@ -958,7 +914,7 @@ static int azx_resume(struct device *dev) · 51 unmodified lines
958 if (chip->driver_caps & AZX_DCAPS_I915_POWERWELL914 if (chip->driver_caps & AZX_DCAPS_I915_POWERWELL
959 && hda->need_i915_power) {915 && hda->need_i915_power) {
960 snd_hdac_display_power(azx_bus(chip), true);916 snd_hdac_display_power(azx_bus(chip), true);
961 haswell_set_bclk(hda);917 snd_hdac_i915_set_bclk(azx_bus(chip));
962 }918 }
963 if (chip->msi)919 if (chip->msi)
964 if (pci_enable_msi(pci) < 0)920 if (pci_enable_msi(pci) < 0)
@@ -1058,7 +1014,7 @@ static int azx_runtime_resume(struct device *dev) · 93 unmodified lines
1058 bus = azx_bus(chip);1014 bus = azx_bus(chip);
1059 if (hda->need_i915_power) {1015 if (hda->need_i915_power) {
1060 snd_hdac_display_power(bus, true);1016 snd_hdac_display_power(bus, true);
1061 haswell_set_bclk(hda);1017 snd_hdac_i915_set_bclk(bus);
1062 } else {1018 } else {
1063 /* toggle codec wakeup bit for STATESTS read */1019 /* toggle codec wakeup bit for STATESTS read */
1064 snd_hdac_set_codec_wakeup(bus, true);1020 snd_hdac_set_codec_wakeup(bus, true);
@@ -1796,12 +1752,8 @@ static int azx_first_init(struct azx *chip) · 731 unmodified lines
1796 /* initialize chip */1752 /* initialize chip */
1797 azx_init_pci(chip);1753 azx_init_pci(chip);
1798 1754
1799 if (chip->driver_caps & AZX_DCAPS_I915_POWERWELL) {1755 if (chip->driver_caps & AZX_DCAPS_I915_POWERWELL)
1800 struct hda_intel *hda;1756 snd_hdac_i915_set_bclk(bus);
1801
1802 hda = container_of(chip, struct hda_intel, chip);
1803 haswell_set_bclk(hda);
1804 }
1805 1757
1806 hda_intel_init_chip(chip, (probe_only[dev] & 2) == 0);1758 hda_intel_init_chip(chip, (probe_only[dev] & 2) == 0);
1807 1759
sound/pci/hda/patch_hdmi.c+1−0
@@ -2232,6 +2232,7 @@ static void intel_pin_eld_notify(void *audio_ptr, int port) · 2231 unmodified lines
2232 if (atomic_read(&(codec)->core.in_pm))2232 if (atomic_read(&(codec)->core.in_pm))
2233 return;2233 return;
2234 2234
2235 snd_hdac_i915_set_bclk(&codec->bus->core);
2235 check_presence_and_report(codec, pin_nid);2236 check_presence_and_report(codec, pin_nid);
2236}2237}
2237 2238
sound/pci/hda/patch_realtek.c+1−0
@@ -5584,6 +5584,7 @@ static const struct snd_pci_quirk alc269_fixup_tbl[] = { · 5583 unmodified lines
5584 SND_PCI_QUIRK(0x17aa, 0x5034, "Thinkpad T450", ALC292_FIXUP_TPT440_DOCK),5584 SND_PCI_QUIRK(0x17aa, 0x5034, "Thinkpad T450", ALC292_FIXUP_TPT440_DOCK),
5585 SND_PCI_QUIRK(0x17aa, 0x5036, "Thinkpad T450s", ALC292_FIXUP_TPT440_DOCK),5585 SND_PCI_QUIRK(0x17aa, 0x5036, "Thinkpad T450s", ALC292_FIXUP_TPT440_DOCK),
5586 SND_PCI_QUIRK(0x17aa, 0x503c, "Thinkpad L450", ALC292_FIXUP_TPT440_DOCK),5586 SND_PCI_QUIRK(0x17aa, 0x503c, "Thinkpad L450", ALC292_FIXUP_TPT440_DOCK),
5587 SND_PCI_QUIRK(0x17aa, 0x504a, "ThinkPad X260", ALC292_FIXUP_TPT440_DOCK),
5587 SND_PCI_QUIRK(0x17aa, 0x504b, "Thinkpad", ALC293_FIXUP_LENOVO_SPK_NOISE),5588 SND_PCI_QUIRK(0x17aa, 0x504b, "Thinkpad", ALC293_FIXUP_LENOVO_SPK_NOISE),
5588 SND_PCI_QUIRK(0x17aa, 0x5109, "Thinkpad", ALC269_FIXUP_LIMIT_INT_MIC_BOOST),5589 SND_PCI_QUIRK(0x17aa, 0x5109, "Thinkpad", ALC269_FIXUP_LIMIT_INT_MIC_BOOST),
5589 SND_PCI_QUIRK(0x17aa, 0x3bf8, "Quanta FL1", ALC269_FIXUP_PCM_44K),5590 SND_PCI_QUIRK(0x17aa, 0x3bf8, "Quanta FL1", ALC269_FIXUP_PCM_44K),
sound/soc/codecs/Kconfig+1−0
@@ -629,6 +629,7 @@ config SND_SOC_RT5514 · 628 unmodified lines
629 629
630config SND_SOC_RT5616630config SND_SOC_RT5616
631 tristate "Realtek RT5616 CODEC"631 tristate "Realtek RT5616 CODEC"
632 depends on I2C
632 633
633config SND_SOC_RT5631634config SND_SOC_RT5631
634 tristate "Realtek ALC5631/RT5631 CODEC"635 tristate "Realtek ALC5631/RT5631 CODEC"
sound/soc/codecs/arizona.c+12−0
@@ -249,6 +249,18 @@ int arizona_init_spk(struct snd_soc_codec *codec) · 248 unmodified lines
249}249}
250EXPORT_SYMBOL_GPL(arizona_init_spk);250EXPORT_SYMBOL_GPL(arizona_init_spk);
251 251
252int arizona_free_spk(struct snd_soc_codec *codec)
253{
254 struct arizona_priv *priv = snd_soc_codec_get_drvdata(codec);
255 struct arizona *arizona = priv->arizona;
256
257 arizona_free_irq(arizona, ARIZONA_IRQ_SPK_OVERHEAT_WARN, arizona);
258 arizona_free_irq(arizona, ARIZONA_IRQ_SPK_OVERHEAT, arizona);
259
260 return 0;
261}
262EXPORT_SYMBOL_GPL(arizona_free_spk);
263
252static const struct snd_soc_dapm_route arizona_mono_routes[] = {264static const struct snd_soc_dapm_route arizona_mono_routes[] = {
253 { "OUT1R", NULL, "OUT1L" },265 { "OUT1R", NULL, "OUT1L" },
254 { "OUT2R", NULL, "OUT2L" },266 { "OUT2R", NULL, "OUT2L" },
sound/soc/codecs/arizona.h+2−0
@@ -307,6 +307,8 @@ extern int arizona_init_spk(struct snd_soc_codec *codec); · 306 unmodified lines
307extern int arizona_init_gpio(struct snd_soc_codec *codec);307extern int arizona_init_gpio(struct snd_soc_codec *codec);
308extern int arizona_init_mono(struct snd_soc_codec *codec);308extern int arizona_init_mono(struct snd_soc_codec *codec);
309 309
310extern int arizona_free_spk(struct snd_soc_codec *codec);
311
310extern int arizona_init_dai(struct arizona_priv *priv, int dai);312extern int arizona_init_dai(struct arizona_priv *priv, int dai);
311 313
312int arizona_set_output_mode(struct snd_soc_codec *codec, int output,314int arizona_set_output_mode(struct snd_soc_codec *codec, int output,
sound/soc/codecs/cs35l32.c+13−4
@@ -274,7 +274,9 @@ static int cs35l32_handle_of_data(struct i2c_client *i2c_client, · 273 unmodified lines
274 if (of_property_read_u32(np, "cirrus,sdout-share", &val) >= 0)274 if (of_property_read_u32(np, "cirrus,sdout-share", &val) >= 0)
275 pdata->sdout_share = val;275 pdata->sdout_share = val;
276 276
277 of_property_read_u32(np, "cirrus,boost-manager", &val);277 if (of_property_read_u32(np, "cirrus,boost-manager", &val))
278 val = -1u;
279
278 switch (val) {280 switch (val) {
279 case CS35L32_BOOST_MGR_AUTO:281 case CS35L32_BOOST_MGR_AUTO:
280 case CS35L32_BOOST_MGR_AUTO_AUDIO:282 case CS35L32_BOOST_MGR_AUTO_AUDIO:
@@ -282,13 +284,15 @@ static int cs35l32_handle_of_data(struct i2c_client *i2c_client, · 1 unmodified line
282 case CS35L32_BOOST_MGR_FIXED:284 case CS35L32_BOOST_MGR_FIXED:
283 pdata->boost_mng = val;285 pdata->boost_mng = val;
284 break;286 break;
287 case -1u:
285 default:288 default:
286 dev_err(&i2c_client->dev,289 dev_err(&i2c_client->dev,
287 "Wrong cirrus,boost-manager DT value %d\n", val);290 "Wrong cirrus,boost-manager DT value %d\n", val);
288 pdata->boost_mng = CS35L32_BOOST_MGR_BYPASS;291 pdata->boost_mng = CS35L32_BOOST_MGR_BYPASS;
289 }292 }
290 293
291 of_property_read_u32(np, "cirrus,sdout-datacfg", &val);294 if (of_property_read_u32(np, "cirrus,sdout-datacfg", &val))
295 val = -1u;
292 switch (val) {296 switch (val) {
293 case CS35L32_DATA_CFG_LR_VP:297 case CS35L32_DATA_CFG_LR_VP:
294 case CS35L32_DATA_CFG_LR_STAT:298 case CS35L32_DATA_CFG_LR_STAT:
@@ -296,13 +300,15 @@ static int cs35l32_handle_of_data(struct i2c_client *i2c_client, · 1 unmodified line
296 case CS35L32_DATA_CFG_LR_VPSTAT:300 case CS35L32_DATA_CFG_LR_VPSTAT:
297 pdata->sdout_datacfg = val;301 pdata->sdout_datacfg = val;
298 break;302 break;
303 case -1u:
299 default:304 default:
300 dev_err(&i2c_client->dev,305 dev_err(&i2c_client->dev,
301 "Wrong cirrus,sdout-datacfg DT value %d\n", val);306 "Wrong cirrus,sdout-datacfg DT value %d\n", val);
302 pdata->sdout_datacfg = CS35L32_DATA_CFG_LR;307 pdata->sdout_datacfg = CS35L32_DATA_CFG_LR;
303 }308 }
304 309
305 of_property_read_u32(np, "cirrus,battery-threshold", &val);310 if (of_property_read_u32(np, "cirrus,battery-threshold", &val))
311 val = -1u;
306 switch (val) {312 switch (val) {
307 case CS35L32_BATT_THRESH_3_1V:313 case CS35L32_BATT_THRESH_3_1V:
308 case CS35L32_BATT_THRESH_3_2V:314 case CS35L32_BATT_THRESH_3_2V:
@@ -310,13 +316,15 @@ static int cs35l32_handle_of_data(struct i2c_client *i2c_client, · 1 unmodified line
310 case CS35L32_BATT_THRESH_3_4V:316 case CS35L32_BATT_THRESH_3_4V:
311 pdata->batt_thresh = val;317 pdata->batt_thresh = val;
312 break;318 break;
319 case -1u:
313 default:320 default:
314 dev_err(&i2c_client->dev,321 dev_err(&i2c_client->dev,
315 "Wrong cirrus,battery-threshold DT value %d\n", val);322 "Wrong cirrus,battery-threshold DT value %d\n", val);
316 pdata->batt_thresh = CS35L32_BATT_THRESH_3_3V;323 pdata->batt_thresh = CS35L32_BATT_THRESH_3_3V;
317 }324 }
318 325
319 of_property_read_u32(np, "cirrus,battery-recovery", &val);326 if (of_property_read_u32(np, "cirrus,battery-recovery", &val))
327 val = -1u;
320 switch (val) {328 switch (val) {
321 case CS35L32_BATT_RECOV_3_1V:329 case CS35L32_BATT_RECOV_3_1V:
322 case CS35L32_BATT_RECOV_3_2V:330 case CS35L32_BATT_RECOV_3_2V:
@@ -326,6 +334,7 @@ static int cs35l32_handle_of_data(struct i2c_client *i2c_client, · 3 unmodified lines
326 case CS35L32_BATT_RECOV_3_6V:334 case CS35L32_BATT_RECOV_3_6V:
327 pdata->batt_recov = val;335 pdata->batt_recov = val;
328 break;336 break;
337 case -1u:
329 default:338 default:
330 dev_err(&i2c_client->dev,339 dev_err(&i2c_client->dev,
331 "Wrong cirrus,battery-recovery DT value %d\n", val);340 "Wrong cirrus,battery-recovery DT value %d\n", val);
sound/soc/codecs/cs47l24.c+3−0
@@ -1108,6 +1108,9 @@ static int cs47l24_codec_remove(struct snd_soc_codec *codec) · 1107 unmodified lines
1108 priv->core.arizona->dapm = NULL;1108 priv->core.arizona->dapm = NULL;
1109 1109
1110 arizona_free_irq(arizona, ARIZONA_IRQ_DSP_IRQ1, priv);1110 arizona_free_irq(arizona, ARIZONA_IRQ_DSP_IRQ1, priv);
1111
1112 arizona_free_spk(codec);
1113
1111 return 0;1114 return 0;
1112}1115}
1113 1116
sound/soc/codecs/hdac_hdmi.c+42−52
@@ -1420,32 +1420,39 @@ static int hdmi_codec_remove(struct snd_soc_codec *codec) · 1419 unmodified lines
1420}1420}
1421 1421
1422#ifdef CONFIG_PM1422#ifdef CONFIG_PM
1423static int hdmi_codec_resume(struct snd_soc_codec *codec)1423static int hdmi_codec_prepare(struct device *dev)
1424{1424{
1425 struct hdac_ext_device *edev = snd_soc_codec_get_drvdata(codec);1425 struct hdac_ext_device *edev = to_hda_ext_device(dev);
1426 struct hdac_device *hdac = &edev->hdac;
1427
1428 pm_runtime_get_sync(&edev->hdac.dev);
1429
1430 /*
1431 * Power down afg.
1432 * codec_read is preferred over codec_write to set the power state.
1433 * This way verb is send to set the power state and response
1434 * is received. So setting power state is ensured without using loop
1435 * to read the state.
1436 */
1437 snd_hdac_codec_read(hdac, hdac->afg, 0, AC_VERB_SET_POWER_STATE,
1438 AC_PWRST_D3);
1439
1440 return 0;
1441}
1442
1443static void hdmi_codec_complete(struct device *dev)
1444{
1445 struct hdac_ext_device *edev = to_hda_ext_device(dev);
1426 struct hdac_hdmi_priv *hdmi = edev->private_data;1446 struct hdac_hdmi_priv *hdmi = edev->private_data;
1427 struct hdac_hdmi_pin *pin;1447 struct hdac_hdmi_pin *pin;
1428 struct hdac_device *hdac = &edev->hdac;1448 struct hdac_device *hdac = &edev->hdac;
1429 struct hdac_bus *bus = hdac->bus;
1430 int err;
1431 unsigned long timeout;
1432
1433 hdac_hdmi_skl_enable_all_pins(&edev->hdac);
1434 hdac_hdmi_skl_enable_dp12(&edev->hdac);
1435 1449
1436 /* Power up afg */1450 /* Power up afg */
1437 if (!snd_hdac_check_power_state(hdac, hdac->afg, AC_PWRST_D0)) {1451 snd_hdac_codec_read(hdac, hdac->afg, 0, AC_VERB_SET_POWER_STATE,
1438 1452 AC_PWRST_D0);
1439 snd_hdac_codec_write(hdac, hdac->afg, 0,
1440 AC_VERB_SET_POWER_STATE, AC_PWRST_D0);
1441 1453
1442 /* Wait till power state is set to D0 */1454 hdac_hdmi_skl_enable_all_pins(&edev->hdac);
1443 timeout = jiffies + msecs_to_jiffies(1000);1455 hdac_hdmi_skl_enable_dp12(&edev->hdac);
1444 while (!snd_hdac_check_power_state(hdac, hdac->afg, AC_PWRST_D0)
1445 && time_before(jiffies, timeout)) {
1446 msleep(50);
1447 }
1448 }
1449 1456
1450 /*1457 /*
1451 * As the ELD notify callback request is not entertained while the1458 * As the ELD notify callback request is not entertained while the
@@ -1455,28 +1462,16 @@ static int hdmi_codec_resume(struct snd_soc_codec *codec) · 3 unmodified lines
1455 list_for_each_entry(pin, &hdmi->pin_list, head)1462 list_for_each_entry(pin, &hdmi->pin_list, head)
1456 hdac_hdmi_present_sense(pin, 1);1463 hdac_hdmi_present_sense(pin, 1);
1457 1464
1458 /*1465 pm_runtime_put_sync(&edev->hdac.dev);
1459 * Codec power is turned ON during controller resume.
1460 * Turn it OFF here
1461 */
1462 err = snd_hdac_display_power(bus, false);
1463 if (err < 0) {
1464 dev_err(bus->dev,
1465 "Cannot turn OFF display power on i915, err: %d\n",
1466 err);
1467 return err;
1468 }
1469
1470 return 0;
1471}1466}
1472#else1467#else
1473#define hdmi_codec_resume NULL1468#define hdmi_codec_prepare NULL
1469#define hdmi_codec_complete NULL
1474#endif1470#endif
1475 1471
1476static struct snd_soc_codec_driver hdmi_hda_codec = {1472static struct snd_soc_codec_driver hdmi_hda_codec = {
1477 .probe = hdmi_codec_probe,1473 .probe = hdmi_codec_probe,
1478 .remove = hdmi_codec_remove,1474 .remove = hdmi_codec_remove,
1479 .resume = hdmi_codec_resume,
1480 .idle_bias_off = true,1475 .idle_bias_off = true,
1481};1476};
1482 1477
@@ -1561,7 +1556,6 @@ static int hdac_hdmi_runtime_suspend(struct device *dev) · 78 unmodified lines
1561 struct hdac_ext_device *edev = to_hda_ext_device(dev);1556 struct hdac_ext_device *edev = to_hda_ext_device(dev);
1562 struct hdac_device *hdac = &edev->hdac;1557 struct hdac_device *hdac = &edev->hdac;
1563 struct hdac_bus *bus = hdac->bus;1558 struct hdac_bus *bus = hdac->bus;
1564 unsigned long timeout;
1565 int err;1559 int err;
1566 1560
1567 dev_dbg(dev, "Enter: %s\n", __func__);1561 dev_dbg(dev, "Enter: %s\n", __func__);
@@ -1570,20 +1564,15 @@ static int hdac_hdmi_runtime_suspend(struct device *dev) · 2 unmodified lines
1570 if (!bus)1564 if (!bus)
1571 return 0;1565 return 0;
1572 1566
1573 /* Power down afg */1567 /*
1574 if (!snd_hdac_check_power_state(hdac, hdac->afg, AC_PWRST_D3)) {1568 * Power down afg.
1575 snd_hdac_codec_write(hdac, hdac->afg, 0,1569 * codec_read is preferred over codec_write to set the power state.
1576 AC_VERB_SET_POWER_STATE, AC_PWRST_D3);1570 * This way verb is send to set the power state and response
1577 1571 * is received. So setting power state is ensured without using loop
1578 /* Wait till power state is set to D3 */1572 * to read the state.
1579 timeout = jiffies + msecs_to_jiffies(1000);1573 */
1580 while (!snd_hdac_check_power_state(hdac, hdac->afg, AC_PWRST_D3)1574 snd_hdac_codec_read(hdac, hdac->afg, 0, AC_VERB_SET_POWER_STATE,
1581 && time_before(jiffies, timeout)) {1575 AC_PWRST_D3);
1582
1583 msleep(50);
1584 }
1585 }
1586
1587 err = snd_hdac_display_power(bus, false);1576 err = snd_hdac_display_power(bus, false);
1588 if (err < 0) {1577 if (err < 0) {
1589 dev_err(bus->dev, "Cannot turn on display power on i915\n");1578 dev_err(bus->dev, "Cannot turn on display power on i915\n");
@@ -1616,9 +1605,8 @@ static int hdac_hdmi_runtime_resume(struct device *dev) · 26 unmodified lines
1616 hdac_hdmi_skl_enable_dp12(&edev->hdac);1605 hdac_hdmi_skl_enable_dp12(&edev->hdac);
1617 1606
1618 /* Power up afg */1607 /* Power up afg */
1619 if (!snd_hdac_check_power_state(hdac, hdac->afg, AC_PWRST_D0))1608 snd_hdac_codec_read(hdac, hdac->afg, 0, AC_VERB_SET_POWER_STATE,
1620 snd_hdac_codec_write(hdac, hdac->afg, 0,1609 AC_PWRST_D0);
1621 AC_VERB_SET_POWER_STATE, AC_PWRST_D0);
1622 1610
1623 return 0;1611 return 0;
1624}1612}
@@ -1629,6 +1617,8 @@ static int hdac_hdmi_runtime_resume(struct device *dev) · 4 unmodified lines
1629 1617
1630static const struct dev_pm_ops hdac_hdmi_pm = {1618static const struct dev_pm_ops hdac_hdmi_pm = {
1631 SET_RUNTIME_PM_OPS(hdac_hdmi_runtime_suspend, hdac_hdmi_runtime_resume, NULL)1619 SET_RUNTIME_PM_OPS(hdac_hdmi_runtime_suspend, hdac_hdmi_runtime_resume, NULL)
1620 .prepare = hdmi_codec_prepare,
1621 .complete = hdmi_codec_complete,
1632};1622};
1633 1623
1634static const struct hda_device_id hdmi_list[] = {1624static const struct hda_device_id hdmi_list[] = {
sound/soc/codecs/nau8825.c+71−55
@@ -343,9 +343,12 @@ static const struct snd_soc_dapm_widget nau8825_dapm_widgets[] = { · 342 unmodified lines
343 SND_SOC_DAPM_SUPPLY("ADC Power", NAU8825_REG_ANALOG_ADC_2, 6, 0, NULL,343 SND_SOC_DAPM_SUPPLY("ADC Power", NAU8825_REG_ANALOG_ADC_2, 6, 0, NULL,
344 0),344 0),
345 345
346 /* ADC for button press detection */346 /* ADC for button press detection. A dapm supply widget is used to
347 SND_SOC_DAPM_ADC("SAR", NULL, NAU8825_REG_SAR_CTRL,347 * prevent dapm_power_widgets keeping the codec at SND_SOC_BIAS_ON
348 NAU8825_SAR_ADC_EN_SFT, 0),348 * during suspend.
349 */
350 SND_SOC_DAPM_SUPPLY("SAR", NAU8825_REG_SAR_CTRL,
351 NAU8825_SAR_ADC_EN_SFT, 0, NULL, 0),
349 352
350 SND_SOC_DAPM_PGA_S("ADACL", 2, NAU8825_REG_RDAC, 12, 0, NULL, 0),353 SND_SOC_DAPM_PGA_S("ADACL", 2, NAU8825_REG_RDAC, 12, 0, NULL, 0),
351 SND_SOC_DAPM_PGA_S("ADACR", 2, NAU8825_REG_RDAC, 13, 0, NULL, 0),354 SND_SOC_DAPM_PGA_S("ADACR", 2, NAU8825_REG_RDAC, 13, 0, NULL, 0),
@@ -607,6 +610,16 @@ static bool nau8825_is_jack_inserted(struct regmap *regmap) · 255 unmodified lines
607 610
608static void nau8825_restart_jack_detection(struct regmap *regmap)611static void nau8825_restart_jack_detection(struct regmap *regmap)
609{612{
613 /* Chip needs one FSCLK cycle in order to generate interrupts,
614 * as we cannot guarantee one will be provided by the system. Turning
615 * master mode on then off enables us to generate that FSCLK cycle
616 * with a minimum of contention on the clock bus.
617 */
618 regmap_update_bits(regmap, NAU8825_REG_I2S_PCM_CTRL2,
619 NAU8825_I2S_MS_MASK, NAU8825_I2S_MS_MASTER);
620 regmap_update_bits(regmap, NAU8825_REG_I2S_PCM_CTRL2,
621 NAU8825_I2S_MS_MASK, NAU8825_I2S_MS_SLAVE);
622
610 /* this will restart the entire jack detection process including MIC/GND623 /* this will restart the entire jack detection process including MIC/GND
611 * switching and create interrupts. We have to go from 0 to 1 and back624 * switching and create interrupts. We have to go from 0 to 1 and back
612 * to 0 to restart.625 * to 0 to restart.
@@ -728,7 +741,10 @@ static irqreturn_t nau8825_interrupt(int irq, void *data) · 115 unmodified lines
728 struct regmap *regmap = nau8825->regmap;741 struct regmap *regmap = nau8825->regmap;
729 int active_irq, clear_irq = 0, event = 0, event_mask = 0;742 int active_irq, clear_irq = 0, event = 0, event_mask = 0;
730 743
731 regmap_read(regmap, NAU8825_REG_IRQ_STATUS, &active_irq);744 if (regmap_read(regmap, NAU8825_REG_IRQ_STATUS, &active_irq)) {
745 dev_err(nau8825->dev, "failed to read irq status\n");
746 return IRQ_NONE;
747 }
732 748
733 if ((active_irq & NAU8825_JACK_EJECTION_IRQ_MASK) ==749 if ((active_irq & NAU8825_JACK_EJECTION_IRQ_MASK) ==
734 NAU8825_JACK_EJECTION_DETECTED) {750 NAU8825_JACK_EJECTION_DETECTED) {
@@ -1141,33 +1157,74 @@ static int nau8825_set_bias_level(struct snd_soc_codec *codec, · 406 unmodified lines
1141 return ret;1157 return ret;
1142 }1158 }
1143 }1159 }
1144
1145 ret = regcache_sync(nau8825->regmap);
1146 if (ret) {
1147 dev_err(codec->dev,
1148 "Failed to sync cache: %d\n", ret);
1149 return ret;
1150 }
1151 }1160 }
1152
1153 break;1161 break;
1154 1162
1155 case SND_SOC_BIAS_OFF:1163 case SND_SOC_BIAS_OFF:
1156 if (nau8825->mclk_freq)1164 if (nau8825->mclk_freq)
1157 clk_disable_unprepare(nau8825->mclk);1165 clk_disable_unprepare(nau8825->mclk);
1158
1159 regcache_mark_dirty(nau8825->regmap);
1160 break;1166 break;
1161 }1167 }
1162 return 0;1168 return 0;
1163}1169}
1164 1170
1171#ifdef CONFIG_PM
1172static int nau8825_suspend(struct snd_soc_codec *codec)
1173{
1174 struct nau8825 *nau8825 = snd_soc_codec_get_drvdata(codec);
1175
1176 disable_irq(nau8825->irq);
1177 regcache_cache_only(nau8825->regmap, true);
1178 regcache_mark_dirty(nau8825->regmap);
1179
1180 return 0;
1181}
1182
1183static int nau8825_resume(struct snd_soc_codec *codec)
1184{
1185 struct nau8825 *nau8825 = snd_soc_codec_get_drvdata(codec);
1186
1187 /* The chip may lose power and reset in S3. regcache_sync restores
1188 * register values including configurations for sysclk, irq, and
1189 * jack/button detection.
1190 */
1191 regcache_cache_only(nau8825->regmap, false);
1192 regcache_sync(nau8825->regmap);
1193
1194 /* Check the jack plug status directly. If the headset is unplugged
1195 * during S3 when the chip has no power, there will be no jack
1196 * detection irq even after the nau8825_restart_jack_detection below,
1197 * because the chip just thinks no headset has ever been plugged in.
1198 */
1199 if (!nau8825_is_jack_inserted(nau8825->regmap)) {
1200 nau8825_eject_jack(nau8825);
1201 snd_soc_jack_report(nau8825->jack, 0, SND_JACK_HEADSET);
1202 }
1203
1204 enable_irq(nau8825->irq);
1205
1206 /* Run jack detection to check the type (OMTP or CTIA) of the headset
1207 * if there is one. This handles the case where a different type of
1208 * headset is plugged in during S3. This triggers an IRQ iff a headset
1209 * is already plugged in.
1210 */
1211 nau8825_restart_jack_detection(nau8825->regmap);
1212
1213 return 0;
1214}
1215#else
1216#define nau8825_suspend NULL
1217#define nau8825_resume NULL
1218#endif
1219
1165static struct snd_soc_codec_driver nau8825_codec_driver = {1220static struct snd_soc_codec_driver nau8825_codec_driver = {
1166 .probe = nau8825_codec_probe,1221 .probe = nau8825_codec_probe,
1167 .set_sysclk = nau8825_set_sysclk,1222 .set_sysclk = nau8825_set_sysclk,
1168 .set_pll = nau8825_set_pll,1223 .set_pll = nau8825_set_pll,
1169 .set_bias_level = nau8825_set_bias_level,1224 .set_bias_level = nau8825_set_bias_level,
1170 .suspend_bias_off = true,1225 .suspend_bias_off = true,
1226 .suspend = nau8825_suspend,
1227 .resume = nau8825_resume,
1171 1228
1172 .controls = nau8825_controls,1229 .controls = nau8825_controls,
1173 .num_controls = ARRAY_SIZE(nau8825_controls),1230 .num_controls = ARRAY_SIZE(nau8825_controls),
@@ -1277,16 +1334,6 @@ static int nau8825_setup_irq(struct nau8825 *nau8825) · 103 unmodified lines
1277 regmap_update_bits(regmap, NAU8825_REG_ENA_CTRL,1334 regmap_update_bits(regmap, NAU8825_REG_ENA_CTRL,
1278 NAU8825_ENABLE_DACR, NAU8825_ENABLE_DACR);1335 NAU8825_ENABLE_DACR, NAU8825_ENABLE_DACR);
1279 1336
1280 /* Chip needs one FSCLK cycle in order to generate interrupts,
1281 * as we cannot guarantee one will be provided by the system. Turning
1282 * master mode on then off enables us to generate that FSCLK cycle
1283 * with a minimum of contention on the clock bus.
1284 */
1285 regmap_update_bits(regmap, NAU8825_REG_I2S_PCM_CTRL2,
1286 NAU8825_I2S_MS_MASK, NAU8825_I2S_MS_MASTER);
1287 regmap_update_bits(regmap, NAU8825_REG_I2S_PCM_CTRL2,
1288 NAU8825_I2S_MS_MASK, NAU8825_I2S_MS_SLAVE);
1289
1290 ret = devm_request_threaded_irq(nau8825->dev, nau8825->irq, NULL,1337 ret = devm_request_threaded_irq(nau8825->dev, nau8825->irq, NULL,
1291 nau8825_interrupt, IRQF_TRIGGER_LOW | IRQF_ONESHOT,1338 nau8825_interrupt, IRQF_TRIGGER_LOW | IRQF_ONESHOT,
1292 "nau8825", nau8825);1339 "nau8825", nau8825);
@@ -1354,36 +1401,6 @@ static int nau8825_i2c_remove(struct i2c_client *client) · 61 unmodified lines
1354 return 0;1401 return 0;
1355}1402}
1356 1403
1357#ifdef CONFIG_PM_SLEEP
1358static int nau8825_suspend(struct device *dev)
1359{
1360 struct i2c_client *client = to_i2c_client(dev);
1361 struct nau8825 *nau8825 = dev_get_drvdata(dev);
1362
1363 disable_irq(client->irq);
1364 regcache_cache_only(nau8825->regmap, true);
1365 regcache_mark_dirty(nau8825->regmap);
1366
1367 return 0;
1368}
1369
1370static int nau8825_resume(struct device *dev)
1371{
1372 struct i2c_client *client = to_i2c_client(dev);
1373 struct nau8825 *nau8825 = dev_get_drvdata(dev);
1374
1375 regcache_cache_only(nau8825->regmap, false);
1376 regcache_sync(nau8825->regmap);
1377 enable_irq(client->irq);
1378
1379 return 0;
1380}
1381#endif
1382
1383static const struct dev_pm_ops nau8825_pm = {
1384 SET_SYSTEM_SLEEP_PM_OPS(nau8825_suspend, nau8825_resume)
1385};
1386
1387static const struct i2c_device_id nau8825_i2c_ids[] = {1404static const struct i2c_device_id nau8825_i2c_ids[] = {
1388 { "nau8825", 0 },1405 { "nau8825", 0 },
1389 { }1406 { }
@@ -1410,7 +1427,6 @@ static struct i2c_driver nau8825_driver = { · 20 unmodified lines
1410 .name = "nau8825",1427 .name = "nau8825",
1411 .of_match_table = of_match_ptr(nau8825_of_ids),1428 .of_match_table = of_match_ptr(nau8825_of_ids),
1412 .acpi_match_table = ACPI_PTR(nau8825_acpi_match),1429 .acpi_match_table = ACPI_PTR(nau8825_acpi_match),
1413 .pm = &nau8825_pm,
1414 },1430 },
1415 .probe = nau8825_i2c_probe,1431 .probe = nau8825_i2c_probe,
1416 .remove = nau8825_i2c_remove,1432 .remove = nau8825_i2c_remove,
sound/soc/codecs/rt5640.c+1−1
@@ -359,7 +359,7 @@ static const DECLARE_TLV_DB_RANGE(bst_tlv, · 358 unmodified lines
359 359
360/* Interface data select */360/* Interface data select */
361static const char * const rt5640_data_select[] = {361static const char * const rt5640_data_select[] = {
362 "Normal", "left copy to right", "right copy to left", "Swap"};362 "Normal", "Swap", "left copy to right", "right copy to left"};
363 363
364static SOC_ENUM_SINGLE_DECL(rt5640_if1_dac_enum, RT5640_DIG_INF_DATA,364static SOC_ENUM_SINGLE_DECL(rt5640_if1_dac_enum, RT5640_DIG_INF_DATA,
365 RT5640_IF1_DAC_SEL_SFT, rt5640_data_select);365 RT5640_IF1_DAC_SEL_SFT, rt5640_data_select);
sound/soc/codecs/rt5640.h+18−18
@@ -443,39 +443,39 @@ · 442 unmodified lines
443#define RT5640_IF1_DAC_SEL_MASK (0x3 << 14)443#define RT5640_IF1_DAC_SEL_MASK (0x3 << 14)
444#define RT5640_IF1_DAC_SEL_SFT 14444#define RT5640_IF1_DAC_SEL_SFT 14
445#define RT5640_IF1_DAC_SEL_NOR (0x0 << 14)445#define RT5640_IF1_DAC_SEL_NOR (0x0 << 14)
446#define RT5640_IF1_DAC_SEL_L2R (0x1 << 14)446#define RT5640_IF1_DAC_SEL_SWAP (0x1 << 14)
447#define RT5640_IF1_DAC_SEL_R2L (0x2 << 14)447#define RT5640_IF1_DAC_SEL_L2R (0x2 << 14)
448#define RT5640_IF1_DAC_SEL_SWAP (0x3 << 14)448#define RT5640_IF1_DAC_SEL_R2L (0x3 << 14)
449#define RT5640_IF1_ADC_SEL_MASK (0x3 << 12)449#define RT5640_IF1_ADC_SEL_MASK (0x3 << 12)
450#define RT5640_IF1_ADC_SEL_SFT 12450#define RT5640_IF1_ADC_SEL_SFT 12
451#define RT5640_IF1_ADC_SEL_NOR (0x0 << 12)451#define RT5640_IF1_ADC_SEL_NOR (0x0 << 12)
452#define RT5640_IF1_ADC_SEL_L2R (0x1 << 12)452#define RT5640_IF1_ADC_SEL_SWAP (0x1 << 12)
453#define RT5640_IF1_ADC_SEL_R2L (0x2 << 12)453#define RT5640_IF1_ADC_SEL_L2R (0x2 << 12)
454#define RT5640_IF1_ADC_SEL_SWAP (0x3 << 12)454#define RT5640_IF1_ADC_SEL_R2L (0x3 << 12)
455#define RT5640_IF2_DAC_SEL_MASK (0x3 << 10)455#define RT5640_IF2_DAC_SEL_MASK (0x3 << 10)
456#define RT5640_IF2_DAC_SEL_SFT 10456#define RT5640_IF2_DAC_SEL_SFT 10
457#define RT5640_IF2_DAC_SEL_NOR (0x0 << 10)457#define RT5640_IF2_DAC_SEL_NOR (0x0 << 10)
458#define RT5640_IF2_DAC_SEL_L2R (0x1 << 10)458#define RT5640_IF2_DAC_SEL_SWAP (0x1 << 10)
459#define RT5640_IF2_DAC_SEL_R2L (0x2 << 10)459#define RT5640_IF2_DAC_SEL_L2R (0x2 << 10)
460#define RT5640_IF2_DAC_SEL_SWAP (0x3 << 10)460#define RT5640_IF2_DAC_SEL_R2L (0x3 << 10)
461#define RT5640_IF2_ADC_SEL_MASK (0x3 << 8)461#define RT5640_IF2_ADC_SEL_MASK (0x3 << 8)
462#define RT5640_IF2_ADC_SEL_SFT 8462#define RT5640_IF2_ADC_SEL_SFT 8
463#define RT5640_IF2_ADC_SEL_NOR (0x0 << 8)463#define RT5640_IF2_ADC_SEL_NOR (0x0 << 8)
464#define RT5640_IF2_ADC_SEL_L2R (0x1 << 8)464#define RT5640_IF2_ADC_SEL_SWAP (0x1 << 8)
465#define RT5640_IF2_ADC_SEL_R2L (0x2 << 8)465#define RT5640_IF2_ADC_SEL_L2R (0x2 << 8)
466#define RT5640_IF2_ADC_SEL_SWAP (0x3 << 8)466#define RT5640_IF2_ADC_SEL_R2L (0x3 << 8)
467#define RT5640_IF3_DAC_SEL_MASK (0x3 << 6)467#define RT5640_IF3_DAC_SEL_MASK (0x3 << 6)
468#define RT5640_IF3_DAC_SEL_SFT 6468#define RT5640_IF3_DAC_SEL_SFT 6
469#define RT5640_IF3_DAC_SEL_NOR (0x0 << 6)469#define RT5640_IF3_DAC_SEL_NOR (0x0 << 6)
470#define RT5640_IF3_DAC_SEL_L2R (0x1 << 6)470#define RT5640_IF3_DAC_SEL_SWAP (0x1 << 6)
471#define RT5640_IF3_DAC_SEL_R2L (0x2 << 6)471#define RT5640_IF3_DAC_SEL_L2R (0x2 << 6)
472#define RT5640_IF3_DAC_SEL_SWAP (0x3 << 6)472#define RT5640_IF3_DAC_SEL_R2L (0x3 << 6)
473#define RT5640_IF3_ADC_SEL_MASK (0x3 << 4)473#define RT5640_IF3_ADC_SEL_MASK (0x3 << 4)
474#define RT5640_IF3_ADC_SEL_SFT 4474#define RT5640_IF3_ADC_SEL_SFT 4
475#define RT5640_IF3_ADC_SEL_NOR (0x0 << 4)475#define RT5640_IF3_ADC_SEL_NOR (0x0 << 4)
476#define RT5640_IF3_ADC_SEL_L2R (0x1 << 4)476#define RT5640_IF3_ADC_SEL_SWAP (0x1 << 4)
477#define RT5640_IF3_ADC_SEL_R2L (0x2 << 4)477#define RT5640_IF3_ADC_SEL_L2R (0x2 << 4)
478#define RT5640_IF3_ADC_SEL_SWAP (0x3 << 4)478#define RT5640_IF3_ADC_SEL_R2L (0x3 << 4)
479 479
480/* REC Left Mixer Control 1 (0x3b) */480/* REC Left Mixer Control 1 (0x3b) */
481#define RT5640_G_HP_L_RM_L_MASK (0x7 << 13)481#define RT5640_G_HP_L_RM_L_MASK (0x7 << 13)
sound/soc/codecs/wm5102.c+5−0
@@ -1955,11 +1955,16 @@ err_adsp2_codec_probe: · 1954 unmodified lines
1955static int wm5102_codec_remove(struct snd_soc_codec *codec)1955static int wm5102_codec_remove(struct snd_soc_codec *codec)
1956{1956{
1957 struct wm5102_priv *priv = snd_soc_codec_get_drvdata(codec);1957 struct wm5102_priv *priv = snd_soc_codec_get_drvdata(codec);
1958 struct arizona *arizona = priv->core.arizona;
1958 1959
1959 wm_adsp2_codec_remove(&priv->core.adsp[0], codec);1960 wm_adsp2_codec_remove(&priv->core.adsp[0], codec);
1960 1961
1961 priv->core.arizona->dapm = NULL;1962 priv->core.arizona->dapm = NULL;
1962 1963
1964 arizona_free_irq(arizona, ARIZONA_IRQ_DSP_IRQ1, priv);
1965
1966 arizona_free_spk(codec);
1967
1963 return 0;1968 return 0;
1964}1969}
1965 1970
sound/soc/codecs/wm5110.c+2−0
@@ -2298,6 +2298,8 @@ static int wm5110_codec_remove(struct snd_soc_codec *codec) · 2297 unmodified lines
2298 2298
2299 arizona_free_irq(arizona, ARIZONA_IRQ_DSP_IRQ1, priv);2299 arizona_free_irq(arizona, ARIZONA_IRQ_DSP_IRQ1, priv);
2300 2300
2301 arizona_free_spk(codec);
2302
2301 return 0;2303 return 0;
2302}2304}
2303 2305
sound/soc/codecs/wm8962.c+1−1
@@ -2471,7 +2471,7 @@ static void wm8962_configure_bclk(struct snd_soc_codec *codec) · 2470 unmodified lines
2471 break;2471 break;
2472 default:2472 default:
2473 dev_warn(codec->dev, "Unknown DSPCLK divisor read back\n");2473 dev_warn(codec->dev, "Unknown DSPCLK divisor read back\n");
2474 dspclk = wm8962->sysclk;2474 dspclk = wm8962->sysclk_rate;
2475 }2475 }
2476 2476
2477 dev_dbg(codec->dev, "DSPCLK is %dHz, BCLK %d\n", dspclk, wm8962->bclk);2477 dev_dbg(codec->dev, "DSPCLK is %dHz, BCLK %d\n", dspclk, wm8962->bclk);
sound/soc/codecs/wm8997.c+2−0
@@ -1072,6 +1072,8 @@ static int wm8997_codec_remove(struct snd_soc_codec *codec) · 1071 unmodified lines
1072 1072
1073 priv->core.arizona->dapm = NULL;1073 priv->core.arizona->dapm = NULL;
1074 1074
1075 arizona_free_spk(codec);
1076
1075 return 0;1077 return 0;
1076}1078}
1077 1079
sound/soc/codecs/wm8998.c+2−0
@@ -1324,6 +1324,8 @@ static int wm8998_codec_remove(struct snd_soc_codec *codec) · 1323 unmodified lines
1324 1324
1325 priv->core.arizona->dapm = NULL;1325 priv->core.arizona->dapm = NULL;
1326 1326
1327 arizona_free_spk(codec);
1328
1327 return 0;1329 return 0;
1328}1330}
1329 1331
sound/soc/intel/Kconfig+0−1
@@ -163,7 +163,6 @@ config SND_SOC_INTEL_SKYLAKE · 162 unmodified lines
163 tristate163 tristate
164 select SND_HDA_EXT_CORE164 select SND_HDA_EXT_CORE
165 select SND_SOC_TOPOLOGY165 select SND_SOC_TOPOLOGY
166 select SND_HDA_I915
167 select SND_SOC_INTEL_SST166 select SND_SOC_INTEL_SST
168 167
169config SND_SOC_INTEL_SKL_RT286_MACH168config SND_SOC_INTEL_SKL_RT286_MACH
sound/soc/intel/haswell/sst-haswell-ipc.c+1−1
@@ -1345,7 +1345,7 @@ int sst_hsw_stream_reset(struct sst_hsw *hsw, struct sst_hsw_stream *stream) · 1344 unmodified lines
1345 return 0;1345 return 0;
1346 1346
1347 /* wait for pause to complete before we reset the stream */1347 /* wait for pause to complete before we reset the stream */
1348 while (stream->running && tries--)1348 while (stream->running && --tries)
1349 msleep(1);1349 msleep(1);
1350 if (!tries) {1350 if (!tries) {
1351 dev_err(hsw->dev, "error: reset stream %d still running\n",1351 dev_err(hsw->dev, "error: reset stream %d still running\n",
sound/soc/intel/skylake/skl-sst-dsp.c+5−0
@@ -336,6 +336,11 @@ void skl_dsp_free(struct sst_dsp *dsp) · 335 unmodified lines
336 skl_ipc_int_disable(dsp);336 skl_ipc_int_disable(dsp);
337 337
338 free_irq(dsp->irq, dsp);338 free_irq(dsp->irq, dsp);
339 dsp->cl_dev.ops.cl_cleanup_controller(dsp);
340 skl_cldma_int_disable(dsp);
341 skl_ipc_op_int_disable(dsp);
342 skl_ipc_int_disable(dsp);
343
339 skl_dsp_disable_core(dsp);344 skl_dsp_disable_core(dsp);
340}345}
341EXPORT_SYMBOL_GPL(skl_dsp_free);346EXPORT_SYMBOL_GPL(skl_dsp_free);
sound/soc/intel/skylake/skl-topology.c+28−14
@@ -239,6 +239,7 @@ static void skl_tplg_update_buffer_size(struct skl_sst *ctx, · 238 unmodified lines
239{239{
240 int multiplier = 1;240 int multiplier = 1;
241 struct skl_module_fmt *in_fmt, *out_fmt;241 struct skl_module_fmt *in_fmt, *out_fmt;
242 int in_rate, out_rate;
242 243
243 244
244 /* Since fixups is applied to pin 0 only, ibs, obs needs245 /* Since fixups is applied to pin 0 only, ibs, obs needs
@@ -249,15 +250,24 @@ static void skl_tplg_update_buffer_size(struct skl_sst *ctx, · 4 unmodified lines
249 250
250 if (mcfg->m_type == SKL_MODULE_TYPE_SRCINT)251 if (mcfg->m_type == SKL_MODULE_TYPE_SRCINT)
251 multiplier = 5;252 multiplier = 5;
252 mcfg->ibs = (in_fmt->s_freq / 1000) *253
253 (mcfg->in_fmt->channels) *254 if (in_fmt->s_freq % 1000)
254 (mcfg->in_fmt->bit_depth >> 3) *255 in_rate = (in_fmt->s_freq / 1000) + 1;
255 multiplier;256 else
256 257 in_rate = (in_fmt->s_freq / 1000);
257 mcfg->obs = (mcfg->out_fmt->s_freq / 1000) *258
258 (mcfg->out_fmt->channels) *259 mcfg->ibs = in_rate * (mcfg->in_fmt->channels) *
259 (mcfg->out_fmt->bit_depth >> 3) *260 (mcfg->in_fmt->bit_depth >> 3) *
260 multiplier;261 multiplier;
262
263 if (mcfg->out_fmt->s_freq % 1000)
264 out_rate = (mcfg->out_fmt->s_freq / 1000) + 1;
265 else
266 out_rate = (mcfg->out_fmt->s_freq / 1000);
267
268 mcfg->obs = out_rate * (mcfg->out_fmt->channels) *
269 (mcfg->out_fmt->bit_depth >> 3) *
270 multiplier;
261}271}
262 272
263static int skl_tplg_update_be_blob(struct snd_soc_dapm_widget *w,273static int skl_tplg_update_be_blob(struct snd_soc_dapm_widget *w,
@@ -485,11 +495,15 @@ skl_tplg_init_pipe_modules(struct skl *skl, struct skl_pipe *pipe) · 221 unmodified lines
485 if (!skl_is_pipe_mcps_avail(skl, mconfig))495 if (!skl_is_pipe_mcps_avail(skl, mconfig))
486 return -ENOMEM;496 return -ENOMEM;
487 497
498 skl_tplg_alloc_pipe_mcps(skl, mconfig);
499
488 if (mconfig->is_loadable && ctx->dsp->fw_ops.load_mod) {500 if (mconfig->is_loadable && ctx->dsp->fw_ops.load_mod) {
489 ret = ctx->dsp->fw_ops.load_mod(ctx->dsp,501 ret = ctx->dsp->fw_ops.load_mod(ctx->dsp,
490 mconfig->id.module_id, mconfig->guid);502 mconfig->id.module_id, mconfig->guid);
491 if (ret < 0)503 if (ret < 0)
492 return ret;504 return ret;
505
506 mconfig->m_state = SKL_MODULE_LOADED;
493 }507 }
494 508
495 /* update blob if blob is null for be with default value */509 /* update blob if blob is null for be with default value */
@@ -509,7 +523,6 @@ skl_tplg_init_pipe_modules(struct skl *skl, struct skl_pipe *pipe) · 13 unmodified lines
509 ret = skl_tplg_set_module_params(w, ctx);523 ret = skl_tplg_set_module_params(w, ctx);
510 if (ret < 0)524 if (ret < 0)
511 return ret;525 return ret;
512 skl_tplg_alloc_pipe_mcps(skl, mconfig);
513 }526 }
514 527
515 return 0;528 return 0;
@@ -524,7 +537,8 @@ static int skl_tplg_unload_pipe_modules(struct skl_sst *ctx, · 8 unmodified lines
524 list_for_each_entry(w_module, &pipe->w_list, node) {537 list_for_each_entry(w_module, &pipe->w_list, node) {
525 mconfig = w_module->w->priv;538 mconfig = w_module->w->priv;
526 539
527 if (mconfig->is_loadable && ctx->dsp->fw_ops.unload_mod)540 if (mconfig->is_loadable && ctx->dsp->fw_ops.unload_mod &&
541 mconfig->m_state > SKL_MODULE_UNINIT)
528 return ctx->dsp->fw_ops.unload_mod(ctx->dsp,542 return ctx->dsp->fw_ops.unload_mod(ctx->dsp,
529 mconfig->id.module_id);543 mconfig->id.module_id);
530 }544 }
@@ -558,6 +572,9 @@ static int skl_tplg_mixer_dapm_pre_pmu_event(struct snd_soc_dapm_widget *w, · 27 unmodified lines
558 if (!skl_is_pipe_mem_avail(skl, mconfig))572 if (!skl_is_pipe_mem_avail(skl, mconfig))
559 return -ENOMEM;573 return -ENOMEM;
560 574
575 skl_tplg_alloc_pipe_mem(skl, mconfig);
576 skl_tplg_alloc_pipe_mcps(skl, mconfig);
577
561 /*578 /*
562 * Create a list of modules for pipe.579 * Create a list of modules for pipe.
563 * This list contains modules from source to sink580 * This list contains modules from source to sink
@@ -601,9 +618,6 @@ static int skl_tplg_mixer_dapm_pre_pmu_event(struct snd_soc_dapm_widget *w, · 37 unmodified lines
601 src_module = dst_module;618 src_module = dst_module;
602 }619 }
603 620
604 skl_tplg_alloc_pipe_mem(skl, mconfig);
605 skl_tplg_alloc_pipe_mcps(skl, mconfig);
606
607 return 0;621 return 0;
608}622}
609 623
sound/soc/intel/skylake/skl-topology.h+4−4
@@ -274,10 +274,10 @@ struct skl_pipe { · 273 unmodified lines
274 274
275enum skl_module_state {275enum skl_module_state {
276 SKL_MODULE_UNINIT = 0,276 SKL_MODULE_UNINIT = 0,
277 SKL_MODULE_INIT_DONE = 1,277 SKL_MODULE_LOADED = 1,
278 SKL_MODULE_LOADED = 2,278 SKL_MODULE_INIT_DONE = 2,
279 SKL_MODULE_UNLOADED = 3,279 SKL_MODULE_BIND_DONE = 3,
280 SKL_MODULE_BIND_DONE = 4280 SKL_MODULE_UNLOADED = 4,
281};281};
282 282
283struct skl_module_cfg {283struct skl_module_cfg {
sound/soc/intel/skylake/skl.c+23−9
@@ -222,6 +222,7 @@ static int skl_suspend(struct device *dev) · 221 unmodified lines
222 struct hdac_ext_bus *ebus = pci_get_drvdata(pci);222 struct hdac_ext_bus *ebus = pci_get_drvdata(pci);
223 struct skl *skl = ebus_to_skl(ebus);223 struct skl *skl = ebus_to_skl(ebus);
224 struct hdac_bus *bus = ebus_to_hbus(ebus);224 struct hdac_bus *bus = ebus_to_hbus(ebus);
225 int ret = 0;
225 226
226 /*227 /*
227 * Do not suspend if streams which are marked ignore suspend are228 * Do not suspend if streams which are marked ignore suspend are
@@ -232,10 +233,20 @@ static int skl_suspend(struct device *dev) · 4 unmodified lines
232 enable_irq_wake(bus->irq);233 enable_irq_wake(bus->irq);
233 pci_save_state(pci);234 pci_save_state(pci);
234 pci_disable_device(pci);235 pci_disable_device(pci);
235 return 0;
236 } else {236 } else {
237 return _skl_suspend(ebus);237 ret = _skl_suspend(ebus);
238 if (ret < 0)
239 return ret;
240 }
241
242 if (IS_ENABLED(CONFIG_SND_SOC_HDAC_HDMI)) {
243 ret = snd_hdac_display_power(bus, false);
244 if (ret < 0)
245 dev_err(bus->dev,
246 "Cannot turn OFF display power on i915\n");
238 }247 }
248
249 return ret;
239}250}
240 251
241static int skl_resume(struct device *dev)252static int skl_resume(struct device *dev)
@@ -316,17 +327,20 @@ static int skl_free(struct hdac_ext_bus *ebus) · 74 unmodified lines
316 327
317 if (bus->irq >= 0)328 if (bus->irq >= 0)
318 free_irq(bus->irq, (void *)bus);329 free_irq(bus->irq, (void *)bus);
319 if (bus->remap_addr)
320 iounmap(bus->remap_addr);
321
322 snd_hdac_bus_free_stream_pages(bus);330 snd_hdac_bus_free_stream_pages(bus);
323 snd_hdac_stream_free_all(ebus);331 snd_hdac_stream_free_all(ebus);
324 snd_hdac_link_free_all(ebus);332 snd_hdac_link_free_all(ebus);
333
334 if (bus->remap_addr)
335 iounmap(bus->remap_addr);
336
325 pci_release_regions(skl->pci);337 pci_release_regions(skl->pci);
326 pci_disable_device(skl->pci);338 pci_disable_device(skl->pci);
327 339
328 snd_hdac_ext_bus_exit(ebus);340 snd_hdac_ext_bus_exit(ebus);
329 341
342 if (IS_ENABLED(CONFIG_SND_SOC_HDAC_HDMI))
343 snd_hdac_i915_exit(&ebus->bus);
330 return 0;344 return 0;
331}345}
332 346
@@ -719,12 +733,12 @@ static void skl_remove(struct pci_dev *pci) · 386 unmodified lines
719 if (skl->tplg)733 if (skl->tplg)
720 release_firmware(skl->tplg);734 release_firmware(skl->tplg);
721 735
722 if (IS_ENABLED(CONFIG_SND_SOC_HDAC_HDMI))
723 snd_hdac_i915_exit(&ebus->bus);
724
725 if (pci_dev_run_wake(pci))736 if (pci_dev_run_wake(pci))
726 pm_runtime_get_noresume(&pci->dev);737 pm_runtime_get_noresume(&pci->dev);
727 pci_dev_put(pci);738
739 /* codec removal, invoke bus_device_remove */
740 snd_hdac_ext_bus_device_remove(ebus);
741
728 skl_platform_unregister(&pci->dev);742 skl_platform_unregister(&pci->dev);
729 skl_free_dsp(skl);743 skl_free_dsp(skl);
730 skl_machine_device_unregister(skl);744 skl_machine_device_unregister(skl);
sound/soc/soc-dapm.c+7−0
@@ -2188,6 +2188,13 @@ static ssize_t dapm_widget_show_component(struct snd_soc_component *cmpnt, · 2187 unmodified lines
2188 int count = 0;2188 int count = 0;
2189 char *state = "not set";2189 char *state = "not set";
2190 2190
2191 /* card won't be set for the dummy component, as a spot fix
2192 * we're checking for that case specifically here but in future
2193 * we will ensure that the dummy component looks like others.
2194 */
2195 if (!cmpnt->card)
2196 return 0;
2197
2191 list_for_each_entry(w, &cmpnt->card->widgets, list) {2198 list_for_each_entry(w, &cmpnt->card->widgets, list) {
2192 if (w->dapm != dapm)2199 if (w->dapm != dapm)
2193 continue;2200 continue;