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
4848 Felix Moeller <felix@derklecks.de>
4949 Filipe Lautert <filipe@icewall.org>
5050 Franck Bui-Huu <vagabon.xyz@gmail.com>
51+Frank Rowand <frowand.list@gmail.com> <frowand@mvista.com>
52+Frank Rowand <frowand.list@gmail.com> <frank.rowand@am.sony.com>
53+Frank Rowand <frowand.list@gmail.com> <frank.rowand@sonymobile.com>
5154 Frank Zago <fzago@systemfabricworks.com>
5255 Greg Kroah-Hartman <greg@echidna.(none)>
5356 Greg Kroah-Hartman <gregkh@suse.de>
@@ -79,6 +82,7 @@ Kay Sievers <kay.sievers@vrfy.org> · 25 unmodified lines
7982 Kenneth W Chen <kenneth.w.chen@intel.com>
8083 Konstantin Khlebnikov <koct9i@gmail.com> <k.khlebnikov@samsung.com>
8184 Koushik <raghavendra.koushik@neterion.com>
85+Krzysztof Kozlowski <krzk@kernel.org> <k.kozlowski.k@gmail.com>
8286 Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
8387 Leonid I Ananiev <leonid.i.ananiev@intel.com>
8488 Linas Vepstas <linas@austin.ibm.com>
Documentation/devicetree/bindings/arc/archs-pct.txt+1−1
@@ -2,7 +2,7 @@ · 1 unmodified line
22
33 The ARC HS can be configured with a pipeline performance monitor for counting
44 CPU and cache events like cache misses and hits. Like conventional PCT there
5−are 100+ hardware conditions dynamically mapped to upto 32 counters.
5+are 100+ hardware conditions dynamically mapped to up to 32 counters.
66 It also supports overflow interrupts.
77
88 Required properties:
Documentation/devicetree/bindings/arc/pct.txt+1−1
@@ -2,7 +2,7 @@ · 1 unmodified line
22
33 The ARC700 can be configured with a pipeline performance monitor for counting
44 CPU and cache events like cache misses and hits. Like conventional PCT there
5−are 100+ hardware conditions dynamically mapped to upto 32 counters
5+are 100+ hardware conditions dynamically mapped to up to 32 counters
66
77 Note that:
88 * 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
192192 can be one of:
193193 "allwinner,sun6i-a31"
194194 "allwinner,sun8i-a23"
195− "arm,psci"
196195 "arm,realview-smp"
197196 "brcm,bcm-nsp-smp"
198197 "brcm,brahma-b15"
Documentation/devicetree/bindings/i2c/i2c-rk3x.txt+2−2
@@ -6,8 +6,8 @@ RK3xxx SoCs. · 5 unmodified lines
66 Required properties :
77
88 - reg : Offset and length of the register set for the device
9− - compatible : should be "rockchip,rk3066-i2c", "rockchip,rk3188-i2c" or
10− "rockchip,rk3288-i2c".
9+ - compatible : should be "rockchip,rk3066-i2c", "rockchip,rk3188-i2c",
10+ "rockchip,rk3228-i2c" or "rockchip,rk3288-i2c".
1111 - interrupts : interrupt number
1212 - clocks : parent clock
1313
Documentation/sysctl/vm.txt+10−9
@@ -581,15 +581,16 @@ Specify "[Nn]ode" for node order · 580 unmodified lines
581581 "Zone Order" orders the zonelists by zone type, then by node within each
582582 zone. Specify "[Zz]one" for zone order.
583583
584−Specify "[Dd]efault" to request automatic configuration. Autoconfiguration
585−will select "node" order in following case.
586−(1) if the DMA zone does not exist or
587−(2) if the DMA zone comprises greater than 50% of the available memory or
588−(3) if any node's DMA zone comprises greater than 70% of its local memory and
589− the amount of local memory is big enough.
590−
591−Otherwise, "zone" order will be selected. Default order is recommended unless
592−this is causing problems for your system/application.
584+Specify "[Dd]efault" to request automatic configuration.
585+
586+On 32-bit, the Normal zone needs to be preserved for allocations accessible
587+by the kernel, so "zone" order will be selected.
588+
589+On 64-bit, devices that require DMA32/DMA are relatively rare, so "node"
590+order will be selected.
591+
592+Default order is recommended unless this is causing problems for your
593+system/application.
593594
594595 ==============================================================
595596
MAINTAINERS+12−3
@@ -6027,7 +6027,7 @@ F: include/scsi/*iscsi* · 6026 unmodified lines
60276027
60286028 ISCSI EXTENSIONS FOR RDMA (ISER) INITIATOR
60296029 M: Or Gerlitz <ogerlitz@mellanox.com>
6030−M: Sagi Grimberg <sagig@mellanox.com>
6030+M: Sagi Grimberg <sagi@grimberg.me>
60316031 M: Roi Dayan <roid@mellanox.com>
60326032 L: linux-rdma@vger.kernel.org
60336033 S: Supported
@@ -6037,7 +6037,7 @@ Q: http://patchwork.kernel.org/project/linux-rdma/list/ · 3 unmodified lines
60376037 F: drivers/infiniband/ulp/iser/
60386038
60396039 ISCSI EXTENSIONS FOR RDMA (ISER) TARGET
6040−M: Sagi Grimberg <sagig@mellanox.com>
6040+M: Sagi Grimberg <sagi@grimberg.me>
60416041 T: git git://git.kernel.org/pub/scm/linux/kernel/git/nab/target-pending.git master
60426042 L: linux-rdma@vger.kernel.org
60436043 L: target-devel@vger.kernel.org
@@ -6400,7 +6400,7 @@ F: mm/kmemleak.c · 356 unmodified lines
64006400 F: mm/kmemleak-test.c
64016401
64026402 KPROBES
6403−M: Ananth N Mavinakayanahalli <ananth@in.ibm.com>
6403+M: Ananth N Mavinakayanahalli <ananth@linux.vnet.ibm.com>
64046404 M: Anil S Keshavamurthy <anil.s.keshavamurthy@intel.com>
64056405 M: "David S. Miller" <davem@davemloft.net>
64066406 M: Masami Hiramatsu <mhiramat@kernel.org>
@@ -11071,6 +11071,15 @@ S: Maintained · 4664 unmodified lines
1107111071 F: drivers/clk/ti/
1107211072 F: include/linux/clk/ti.h
1107311073
11074+TI ETHERNET SWITCH DRIVER (CPSW)
11075+M: Mugunthan V N <mugunthanvnm@ti.com>
11076+R: Grygorii Strashko <grygorii.strashko@ti.com>
11077+L: linux-omap@vger.kernel.org
11078+L: netdev@vger.kernel.org
11079+S: Maintained
11080+F: drivers/net/ethernet/ti/cpsw*
11081+F: drivers/net/ethernet/ti/davinci*
11082+
1107411083 TI FLASH MEDIA INTERFACE DRIVER
1107511084 M: Alex Dubov <oakad@yahoo.com>
1107611085 S: Maintained
Makefile+2−2
@@ -1,8 +1,8 @@
11 VERSION = 4
22 PATCHLEVEL = 6
33 SUBLEVEL = 0
4−EXTRAVERSION = -rc5
5−NAME = Blurry Fish Butt
4+EXTRAVERSION = -rc6
5+NAME = Charred Weasel
66
77 # *DOCUMENTATION*
88 # To see a list of typical targets execute "make help"
arch/arc/Kconfig+2−0
@@ -35,8 +35,10 @@ config ARC · 34 unmodified lines
3535 select NO_BOOTMEM
3636 select OF
3737 select OF_EARLY_FLATTREE
38+ select OF_RESERVED_MEM
3839 select PERF_USE_VMALLOC
3940 select HAVE_DEBUG_STACKOVERFLOW
41+ select HAVE_GENERIC_DMA_COHERENT
4042
4143 config MIGHT_HAVE_PCI
4244 bool
arch/arc/include/asm/irqflags-arcv2.h+35−1
@@ -18,6 +18,12 @@ · 17 unmodified lines
1818 #define STATUS_AD_MASK (1<<STATUS_AD_BIT)
1919 #define STATUS_IE_MASK (1<<STATUS_IE_BIT)
2020
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+
2127 #define AUX_USER_SP 0x00D
2228 #define AUX_IRQ_CTRL 0x00E
2329 #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
100106 :
101107 : "memory");
102108
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);
103116 return temp;
104117 }
105118
@@ -108,7 +121,7 @@ static inline long arch_local_save_flags(void) · 2 unmodified lines
108121 */
109122 static inline int arch_irqs_disabled_flags(unsigned long flags)
110123 {
111− return !(flags & (STATUS_IE_MASK));
124+ return !(flags & CLRI_STATUS_IE_MASK);
112125 }
113126
114127 static inline int arch_irqs_disabled(void)
@@ -128,11 +141,32 @@ static inline void arc_softirq_clear(int irq) · 13 unmodified lines
128141
129142 #else
130143
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
131163 .macro IRQ_DISABLE scratch
132164 clri
165+ TRACE_ASM_IRQ_DISABLE
133166 .endm
134167
135168 .macro IRQ_ENABLE scratch
169+ TRACE_ASM_IRQ_ENABLE
136170 seti
137171 .endm
138172
arch/arc/kernel/entry-arcv2.S+9−1
@@ -69,8 +69,11 @@ ENTRY(handle_interrupt) · 68 unmodified lines
6969
7070 clri ; To make status32.IE agree with CPU internal state
7171
72− lr r0, [ICAUSE]
72+#ifdef CONFIG_TRACE_IRQFLAGS
73+ TRACE_ASM_IRQ_DISABLE
74+#endif
7375
76+ lr r0, [ICAUSE]
7477 mov blink, ret_from_exception
7578
7679 b.d arch_do_IRQ
@@ -169,6 +172,11 @@ END(EV_TLBProtV) · 92 unmodified lines
169172
170173 .Lrestore_regs:
171174
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+
172180 ld r0, [sp, PT_status32] ; U/K mode at time of entry
173181 lr r10, [AUX_IRQ_ACT]
174182
arch/arc/kernel/entry-compact.S+3−0
@@ -341,6 +341,9 @@ END(call_do_page_fault) · 340 unmodified lines
341341
342342 .Lrestore_regs:
343343
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...
344347 TRACE_ASM_IRQ_ENABLE
345348
346349 lr r10, [status32]
arch/arc/mm/init.c+4−0
@@ -13,6 +13,7 @@ · 12 unmodified lines
1313 #ifdef CONFIG_BLK_DEV_INITRD
1414 #include <linux/initrd.h>
1515 #endif
16+#include <linux/of_fdt.h>
1617 #include <linux/swap.h>
1718 #include <linux/module.h>
1819 #include <linux/highmem.h>
@@ -136,6 +137,9 @@ void __init setup_arch_memory(void) · 117 unmodified lines
136137 memblock_reserve(__pa(initrd_start), initrd_end - initrd_start);
137138 #endif
138139
140+ early_init_fdt_reserve_self();
141+ early_init_fdt_scan_reserved_mem();
142+
139143 memblock_dump_all();
140144
141145 /*----------------- node/zones setup --------------------------*/
arch/arm/boot/dts/am33xx.dtsi+1−1
@@ -860,7 +860,7 @@ · 859 unmodified lines
860860 ti,no-idle-on-init;
861861 reg = <0x50000000 0x2000>;
862862 interrupts = <100>;
863− dmas = <&edma 52>;
863+ dmas = <&edma 52 0>;
864864 dma-names = "rxtx";
865865 gpmc,num-cs = <7>;
866866 gpmc,num-waitpins = <2>;
arch/arm/boot/dts/am4372.dtsi+1−1
@@ -884,7 +884,7 @@ · 883 unmodified lines
884884 gpmc: gpmc@50000000 {
885885 compatible = "ti,am3352-gpmc";
886886 ti,hwmods = "gpmc";
887− dmas = <&edma 52>;
887+ dmas = <&edma 52 0>;
888888 dma-names = "rxtx";
889889 clocks = <&l3s_gclk>;
890890 clock-names = "fck";
arch/arm/boot/dts/am57xx-beagle-x15.dts+0−17
@@ -99,13 +99,6 @@ · 98 unmodified lines
9999 #cooling-cells = <2>;
100100 };
101101
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−
109102 hdmi0: connector {
110103 compatible = "hdmi-connector";
111104 label = "hdmi";
@@ -349,12 +342,6 @@ · 237 unmodified lines
349342 >;
350343 };
351344
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−
358345 tpd12s015_pins: pinmux_tpd12s015_pins {
359346 pinctrl-single,pins = <
360347 DRA7XX_CORE_IOPAD(0x37b0, PIN_OUTPUT | MUX_MODE14) /* gpio7_10 CT_CP_HPD */
@@ -706,10 +693,6 @@ · 345 unmodified lines
706693 pinctrl-0 = <&usb1_pins>;
707694 };
708695
709−&omap_dwc3_1 {
710− extcon = <&extcon_usb1>;
711−};
712−
713696 &omap_dwc3_2 {
714697 extcon = <&extcon_usb2>;
715698 };
arch/arm/boot/dts/dm814x-clocks.dtsi+212−31
@@ -4,6 +4,157 @@ · 3 unmodified lines
44 * published by the Free Software Foundation.
55 */
66
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+
7158 &pllss_clocks {
8159 timer1_fck: timer1_fck {
9160 #clock-cells = <0>;
@@ -23,6 +174,24 @@ · 13 unmodified lines
23174 reg = <0x2e0>;
24175 };
25176
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+
26195 sysclk18_ck: sysclk18_ck {
27196 #clock-cells = <0>;
28197 compatible = "ti,mux-clock";
@@ -79,37 +248,6 @@ · 50 unmodified lines
79248 compatible = "fixed-clock";
80249 clock-frequency = <1000000000>;
81250 };
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−
113251 };
114252
115253 &prcm_clocks {
@@ -138,6 +276,49 @@ · 22 unmodified lines
138276 clock-div = <78125>;
139277 };
140278
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+
141322 aud_clkin0_ck: aud_clkin0_ck {
142323 #clock-cells = <0>;
143324 compatible = "fixed-clock";
arch/arm/boot/dts/dra62x-clocks.dtsi+26−0
@@ -6,6 +6,32 @@ · 5 unmodified lines
66
77 #include "dm814x-clocks.dtsi"
88
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+
935 /*
1036 * Compared to dm814x, dra62x has different shifts and more mux options.
1137 * 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
9898 clock-frequency = <32768>;
9999 };
100100
101− sys_32k_ck: sys_32k_ck {
101+ sys_clk32_crystal_ck: sys_clk32_crystal_ck {
102102 #clock-cells = <0>;
103103 compatible = "fixed-clock";
104104 clock-frequency = <32768>;
105105 };
106106
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+
107115 virt_12000000_ck: virt_12000000_ck {
108116 #clock-cells = <0>;
109117 compatible = "fixed-clock";
@@ -2170,4 +2178,12 @@ · 2060 unmodified lines
21702178 ti,bit-shift = <22>;
21712179 reg = <0x0558>;
21722180 };
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+ };
21732189 };
arch/arm/boot/dts/qcom-msm8974.dtsi+1−13
@@ -1,6 +1,6 @@
11 /dts-v1/;
22
3−#include <dt-bindings/interrupt-controller/arm-gic.h>
3+#include <dt-bindings/interrupt-controller/irq.h>
44 #include <dt-bindings/clock/qcom,gcc-msm8974.h>
55 #include "skeleton.dtsi"
66
@@ -460,8 +460,6 @@ · 453 unmodified lines
460460 clock-names = "core", "iface";
461461 #address-cells = <1>;
462462 #size-cells = <0>;
463− dmas = <&blsp2_dma 20>, <&blsp2_dma 21>;
464− dma-names = "tx", "rx";
465463 };
466464
467465 spmi_bus: spmi@fc4cf000 {
@@ -479,16 +477,6 @@ · 11 unmodified lines
479477 interrupt-controller;
480478 #interrupt-cells = <4>;
481479 };
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− };
492480 };
493481
494482 smd {
arch/arm/boot/dts/r8a7791-koelsch.dts+1−0
@@ -661,6 +661,7 @@ · 660 unmodified lines
661661 };
662662
663663 &pcie_bus_clk {
664+ clock-frequency = <100000000>;
664665 status = "okay";
665666 };
666667
arch/arm/boot/dts/r8a7791-porter.dts+1−13
@@ -143,19 +143,11 @@ · 142 unmodified lines
143143 };
144144
145145 &pfc {
146− pinctrl-0 = <&scif_clk_pins>;
147− pinctrl-names = "default";
148−
149146 scif0_pins: serial0 {
150147 renesas,groups = "scif0_data_d";
151148 renesas,function = "scif0";
152149 };
153150
154− scif_clk_pins: scif_clk {
155− renesas,groups = "scif_clk";
156− renesas,function = "scif_clk";
157− };
158−
159151 ether_pins: ether {
160152 renesas,groups = "eth_link", "eth_mdio", "eth_rmii";
161153 renesas,function = "eth";
@@ -229,11 +221,6 @@ · 67 unmodified lines
229221 status = "okay";
230222 };
231223
232−&scif_clk {
233− clock-frequency = <14745600>;
234− status = "okay";
235−};
236−
237224 &ether {
238225 pinctrl-0 = <&ether_pins &phy1_pins>;
239226 pinctrl-names = "default";
@@ -414,6 +401,7 @@ · 174 unmodified lines
414401 };
415402
416403 &pcie_bus_clk {
404+ clock-frequency = <100000000>;
417405 status = "okay";
418406 };
419407
arch/arm/boot/dts/r8a7791.dtsi+1−4
@@ -1083,9 +1083,8 @@ · 1082 unmodified lines
10831083 pcie_bus_clk: pcie_bus_clk {
10841084 compatible = "fixed-clock";
10851085 #clock-cells = <0>;
1086− clock-frequency = <100000000>;
1086+ clock-frequency = <0>;
10871087 clock-output-names = "pcie_bus";
1088− status = "disabled";
10891088 };
10901089
10911090 /* External SCIF clock */
@@ -1094,7 +1093,6 @@ · 2 unmodified lines
10941093 #clock-cells = <0>;
10951094 /* This value must be overridden by the board. */
10961095 clock-frequency = <0>;
1097− status = "disabled";
10981096 };
10991097
11001098 /* External USB clock - can be overridden by the board */
@@ -1112,7 +1110,6 @@ · 11 unmodified lines
11121110 /* This value must be overridden by the board. */
11131111 clock-frequency = <0>;
11141112 clock-output-names = "can_clk";
1115− status = "disabled";
11161113 };
11171114
11181115 /* 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
7171 if (!pdata)
7272 pdata = &default_esdhc_pdata;
7373
74− return imx_add_platform_device(data->devid, data->id, res,
75− ARRAY_SIZE(res), pdata, sizeof(*pdata));
74+ return imx_add_platform_device_dmamask(data->devid, data->id, res,
75+ ARRAY_SIZE(res), pdata, sizeof(*pdata),
76+ DMA_BIT_MASK(32));
7677 }
arch/arm/mach-omap2/clockdomains7xx_data.c+1−1
@@ -461,7 +461,7 @@ static struct clockdomain ipu_7xx_clkdm = { · 460 unmodified lines
461461 .cm_inst = DRA7XX_CM_CORE_AON_IPU_INST,
462462 .clkdm_offs = DRA7XX_CM_CORE_AON_IPU_IPU_CDOFFS,
463463 .dep_bit = DRA7XX_IPU_STATDEP_SHIFT,
464− .flags = CLKDM_CAN_HWSUP_SWSUP,
464+ .flags = CLKDM_CAN_SWSUP,
465465 };
466466
467467 static 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
737737 #ifdef CONFIG_SOC_DRA7XX
738738 void __init dra7xx_init_early(void)
739739 {
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));
741742 omap2_set_globals_prcm_mpu(OMAP2_L4_IO_ADDRESS(OMAP54XX_PRCM_MPU_BASE));
742743 omap2_control_base_init();
743744 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
274274 */
275275 static void irq_save_context(void)
276276 {
277+ /* DRA7 has no SAR to save */
278+ if (soc_is_dra7xx())
279+ return;
280+
277281 if (!sar_base)
278282 sar_base = omap4_get_sar_ram_base();
279283
@@ -290,6 +294,9 @@ static void irq_sar_clear(void) · 10 unmodified lines
290294 {
291295 u32 val;
292296 u32 offset = SAR_BACKUP_STATUS_OFFSET;
297+ /* DRA7 has no SAR to save */
298+ if (soc_is_dra7xx())
299+ return;
293300
294301 if (soc_is_omap54xx())
295302 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
198198 int per_next_state = PWRDM_POWER_ON;
199199 int core_next_state = PWRDM_POWER_ON;
200200 int per_going_off;
201− int core_prev_state;
202201 u32 sdrc_pwr = 0;
203202
204203 mpu_next_state = pwrdm_read_next_pwrst(mpu_pwrdm);
@@ -278,16 +277,20 @@ void omap_sram_idle(void) · 73 unmodified lines
278277 sdrc_write_reg(sdrc_pwr, SDRC_POWER);
279278
280279 /* CORE */
281− if (core_next_state < PWRDM_POWER_ON) {
282− core_prev_state = pwrdm_read_prev_pwrst(core_pwrdm);
283− if (core_prev_state == PWRDM_POWER_OFF) {
284− omap3_core_restore_context();
285− omap3_cm_restore_context();
286− omap3_sram_restore_context();
287− omap2_sms_restore_context();
288− }
280+ if (core_next_state < PWRDM_POWER_ON &&
281+ pwrdm_read_prev_pwrst(core_pwrdm) == PWRDM_POWER_OFF) {
282+ omap3_core_restore_context();
283+ omap3_cm_restore_context();
284+ omap3_sram_restore_context();
285+ omap2_sms_restore_context();
286+ } else {
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();
289293 }
290− omap3_intc_resume_idle();
291294
292295 pwrdm_post_transition(NULL);
293296
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
4040 void __init shmobile_init_delay(void)
4141 {
4242 struct device_node *np, *cpus;
43− bool is_a7_a8_a9 = false;
44− bool is_a15 = false;
43+ unsigned int div = 0;
4544 bool has_arch_timer = false;
4645 u32 max_freq = 0;
4746
@@ -55,27 +54,22 @@ void __init shmobile_init_delay(void) · 7 unmodified lines
5554 if (!of_property_read_u32(np, "clock-frequency", &freq))
5655 max_freq = max(max_freq, freq);
5756
58− if (of_device_is_compatible(np, "arm,cortex-a8") ||
59− of_device_is_compatible(np, "arm,cortex-a9")) {
60− is_a7_a8_a9 = true;
61− } else if (of_device_is_compatible(np, "arm,cortex-a7")) {
62− is_a7_a8_a9 = true;
63− has_arch_timer = true;
64− } else if (of_device_is_compatible(np, "arm,cortex-a15")) {
65− is_a15 = true;
57+ if (of_device_is_compatible(np, "arm,cortex-a8")) {
58+ div = 2;
59+ } else if (of_device_is_compatible(np, "arm,cortex-a9")) {
60+ div = 1;
61+ } else if (of_device_is_compatible(np, "arm,cortex-a7") ||
62+ of_device_is_compatible(np, "arm,cortex-a15")) {
63+ div = 1;
6664 has_arch_timer = true;
6765 }
6866 }
6967
7068 of_node_put(cpus);
7169
72− if (!max_freq)
70+ if (!max_freq || !div)
7371 return;
7472
75− if (!has_arch_timer || !IS_ENABLED(CONFIG_ARM_ARCH_TIMER)) {
76− if (is_a7_a8_a9)
77− shmobile_setup_delay_hz(max_freq, 1, 3);
78− else if (is_a15)
79− shmobile_setup_delay_hz(max_freq, 2, 4);
80− }
73+ if (!has_arch_timer || !IS_ENABLED(CONFIG_ARM_ARCH_TIMER))
74+ shmobile_setup_delay_hz(max_freq, 1, div);
8175 }
arch/arm64/boot/dts/socionext/uniphier-ph1-ld20-ref.dts+0−1
@@ -70,7 +70,6 @@ · 69 unmodified lines
7070 i2c3 = &i2c3;
7171 i2c4 = &i2c4;
7272 i2c5 = &i2c5;
73− i2c6 = &i2c6;
7473 };
7574 };
7675
arch/arm64/boot/dts/socionext/uniphier-ph1-ld20.dtsi+5−15
@@ -201,15 +201,12 @@ · 200 unmodified lines
201201
202202 i2c2: i2c@58782000 {
203203 compatible = "socionext,uniphier-fi2c";
204− status = "disabled";
205204 reg = <0x58782000 0x80>;
206205 #address-cells = <1>;
207206 #size-cells = <0>;
208207 interrupts = <0 43 4>;
209− pinctrl-names = "default";
210− pinctrl-0 = <&pinctrl_i2c2>;
211208 clocks = <&i2c_clk>;
212− clock-frequency = <100000>;
209+ clock-frequency = <400000>;
213210 };
214211
215212 i2c3: i2c@58783000 {
@@ -227,12 +224,15 @@ · 11 unmodified lines
227224
228225 i2c4: i2c@58784000 {
229226 compatible = "socionext,uniphier-fi2c";
227+ status = "disabled";
230228 reg = <0x58784000 0x80>;
231229 #address-cells = <1>;
232230 #size-cells = <0>;
233231 interrupts = <0 45 4>;
232+ pinctrl-names = "default";
233+ pinctrl-0 = <&pinctrl_i2c4>;
234234 clocks = <&i2c_clk>;
235− clock-frequency = <400000>;
235+ clock-frequency = <100000>;
236236 };
237237
238238 i2c5: i2c@58785000 {
@@ -245,16 +245,6 @@ · 6 unmodified lines
245245 clock-frequency = <400000>;
246246 };
247247
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−
258248 system_bus: system-bus@58c00000 {
259249 compatible = "socionext,uniphier-system-bus";
260250 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
6868 "=r" (charcnt), /* %1 Output */
6969 "=r" (dwordcnt), /* %2 Output */
7070 "=r" (fill8reg), /* %3 Output */
71− "=r" (wrkrega) /* %4 Output */
71+ "=&r" (wrkrega) /* %4 Output only */
7272 : "r" (c), /* %5 Input */
7373 "0" (s), /* %0 Input/Output */
7474 "1" (count) /* %1 Input/Output */
arch/powerpc/include/asm/systbl.h+2−0
@@ -384,3 +384,5 @@ SYSCALL(ni_syscall) · 383 unmodified lines
384384 SYSCALL(ni_syscall)
385385 SYSCALL(mlock2)
386386 SYSCALL(copy_file_range)
387+COMPAT_SYS_SPU(preadv2)
388+COMPAT_SYS_SPU(pwritev2)
arch/powerpc/include/asm/unistd.h+1−1
@@ -12,7 +12,7 @@ · 11 unmodified lines
1212 #include <uapi/asm/unistd.h>
1313
1414
15−#define NR_syscalls 380
15+#define NR_syscalls 382
1616
1717 #define __NR__exit __NR_exit
1818
arch/powerpc/include/uapi/asm/unistd.h+2−0
@@ -390,5 +390,7 @@ · 389 unmodified lines
390390 #define __NR_membarrier 365
391391 #define __NR_mlock2 378
392392 #define __NR_copy_file_range 379
393+#define __NR_preadv2 380
394+#define __NR_pwritev2 381
393395
394396 #endif /* _UAPI_ASM_POWERPC_UNISTD_H_ */
arch/s390/include/asm/mmu.h+1−1
@@ -11,7 +11,7 @@ typedef struct { · 10 unmodified lines
1111 spinlock_t list_lock;
1212 struct list_head pgtable_list;
1313 struct list_head gmap_list;
14− unsigned long asce_bits;
14+ unsigned long asce;
1515 unsigned long asce_limit;
1616 unsigned long vdso_base;
1717 /* 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
2626 mm->context.has_pgste = 0;
2727 mm->context.use_skey = 0;
2828 #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:
3036 /* context created by exec, set asce limit to 4TB */
31− mm->context.asce_bits = _ASCE_TABLE_LENGTH |
32− _ASCE_USER_BITS | _ASCE_TYPE_REGION3;
3337 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 */
3551 mm_inc_nr_pmds(mm);
3652 }
3753 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
4258
4359 static inline void set_user_asce(struct mm_struct *mm)
4460 {
45− S390_lowcore.user_asce = mm->context.asce_bits | __pa(mm->pgd);
61+ S390_lowcore.user_asce = mm->context.asce;
4662 if (current->thread.mm_segment.ar4)
4763 __ctl_load(S390_lowcore.user_asce, 7, 7);
4864 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
7187 {
7288 int cpu = smp_processor_id();
7389
74− S390_lowcore.user_asce = next->context.asce_bits | __pa(next->pgd);
90+ S390_lowcore.user_asce = next->context.asce;
7591 if (prev == next)
7692 return;
7793 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
5252 return _REGION2_ENTRY_EMPTY;
5353 }
5454
55−int crst_table_upgrade(struct mm_struct *, unsigned long limit);
56−void crst_table_downgrade(struct mm_struct *, unsigned long limit);
55+int crst_table_upgrade(struct mm_struct *);
56+void crst_table_downgrade(struct mm_struct *);
5757
5858 static inline pud_t *pud_alloc_one(struct mm_struct *mm, unsigned long address)
5959 {
arch/s390/include/asm/processor.h+1−1
@@ -175,7 +175,7 @@ extern __vector128 init_task_fpu_regs[__NUM_VXRS]; · 174 unmodified lines
175175 regs->psw.mask = PSW_USER_BITS | PSW_MASK_BA; \
176176 regs->psw.addr = new_psw; \
177177 regs->gprs[15] = new_stackp; \
178− crst_table_downgrade(current->mm, 1UL << 31); \
178+ crst_table_downgrade(current->mm); \
179179 execve_tail(); \
180180 } while (0)
181181
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
110110 static inline void __tlb_flush_kernel(void)
111111 {
112112 if (MACHINE_HAS_IDTE)
113− __tlb_flush_idte((unsigned long) init_mm.pgd |
114− init_mm.context.asce_bits);
113+ __tlb_flush_idte(init_mm.context.asce);
115114 else
116115 __tlb_flush_global();
117116 }
@@ -133,8 +132,7 @@ static inline void __tlb_flush_asce(struct mm_struct *mm, unsigned long asce) · 15 unmodified lines
133132 static inline void __tlb_flush_kernel(void)
134133 {
135134 if (MACHINE_HAS_TLB_LC)
136− __tlb_flush_idte_local((unsigned long) init_mm.pgd |
137− init_mm.context.asce_bits);
135+ __tlb_flush_idte_local(init_mm.context.asce);
138136 else
139137 __tlb_flush_local();
140138 }
@@ -148,8 +146,7 @@ static inline void __tlb_flush_mm(struct mm_struct * mm) · 7 unmodified lines
148146 * only ran on the local cpu.
149147 */
150148 if (MACHINE_HAS_IDTE && list_empty(&mm->context.gmap_list))
151− __tlb_flush_asce(mm, (unsigned long) mm->pgd |
152− mm->context.asce_bits);
149+ __tlb_flush_asce(mm, mm->context.asce);
153150 else
154151 __tlb_flush_full(mm);
155152 }
arch/s390/mm/init.c+2−1
@@ -89,7 +89,8 @@ void __init paging_init(void) · 88 unmodified lines
8989 asce_bits = _ASCE_TYPE_REGION3 | _ASCE_TABLE_LENGTH;
9090 pgd_type = _REGION3_ENTRY_EMPTY;
9191 }
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;
9394 clear_table((unsigned long *) init_mm.pgd, pgd_type,
9495 sizeof(unsigned long)*2048);
9596 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
174174 if (!(flags & MAP_FIXED))
175175 addr = 0;
176176 if ((addr + len) >= TASK_SIZE)
177− return crst_table_upgrade(current->mm, TASK_MAX_SIZE);
177+ return crst_table_upgrade(current->mm);
178178 return 0;
179179 }
180180
@@ -191,7 +191,7 @@ s390_get_unmapped_area(struct file *filp, unsigned long addr, · 10 unmodified lines
191191 return area;
192192 if (area == -ENOMEM && !is_compat_task() && TASK_SIZE < TASK_MAX_SIZE) {
193193 /* Upgrade the page table to 4 levels and retry. */
194− rc = crst_table_upgrade(mm, TASK_MAX_SIZE);
194+ rc = crst_table_upgrade(mm);
195195 if (rc)
196196 return (unsigned long) rc;
197197 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
213213 return area;
214214 if (area == -ENOMEM && !is_compat_task() && TASK_SIZE < TASK_MAX_SIZE) {
215215 /* Upgrade the page table to 4 levels and retry. */
216− rc = crst_table_upgrade(mm, TASK_MAX_SIZE);
216+ rc = crst_table_upgrade(mm);
217217 if (rc)
218218 return (unsigned long) rc;
219219 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
7676 __tlb_flush_local();
7777 }
7878
79−int crst_table_upgrade(struct mm_struct *mm, unsigned long limit)
79+int crst_table_upgrade(struct mm_struct *mm)
8080 {
8181 unsigned long *table, *pgd;
82− unsigned long entry;
83− int flush;
8482
85− BUG_ON(limit > TASK_MAX_SIZE);
86− flush = 0;
87−repeat:
83+ /* upgrade should only happen from 3 to 4 levels */
84+ BUG_ON(mm->context.asce_limit != (1UL << 42));
85+
8886 table = crst_table_alloc(mm);
8987 if (!table)
9088 return -ENOMEM;
89+
9190 spin_lock_bh(&mm->page_table_lock);
92− if (mm->context.asce_limit < limit) {
93− pgd = (unsigned long *) mm->pgd;
94− if (mm->context.asce_limit <= (1UL << 31)) {
95− entry = _REGION3_ENTRY_EMPTY;
96− mm->context.asce_limit = 1UL << 42;
97− mm->context.asce_bits = _ASCE_TABLE_LENGTH |
98− _ASCE_USER_BITS |
99− _ASCE_TYPE_REGION3;
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− }
91+ pgd = (unsigned long *) mm->pgd;
92+ crst_table_init(table, _REGION2_ENTRY_EMPTY);
93+ pgd_populate(mm, (pgd_t *) table, (pud_t *) pgd);
94+ mm->pgd = (pgd_t *) table;
95+ mm->context.asce_limit = 1UL << 53;
96+ mm->context.asce = __pa(mm->pgd) | _ASCE_TABLE_LENGTH |
97+ _ASCE_USER_BITS | _ASCE_TYPE_REGION2;
98+ mm->task_size = mm->context.asce_limit;
11499 spin_unlock_bh(&mm->page_table_lock);
115− if (table)
116− crst_table_free(mm, table);
117− if (mm->context.asce_limit < limit)
118− goto repeat;
119− if (flush)
120− on_each_cpu(__crst_table_upgrade, mm, 0);
100+
101+ on_each_cpu(__crst_table_upgrade, mm, 0);
121102 return 0;
122103 }
123104
124−void crst_table_downgrade(struct mm_struct *mm, unsigned long limit)
105+void crst_table_downgrade(struct mm_struct *mm)
125106 {
126107 pgd_t *pgd;
127108
109+ /* downgrade should only happen from 3 to 2 levels (compat only) */
110+ BUG_ON(mm->context.asce_limit != (1UL << 42));
111+
128112 if (current->active_mm == mm) {
129113 clear_user_asce();
130114 __tlb_flush_mm(mm);
131115 }
132− while (mm->context.asce_limit > limit) {
133− pgd = mm->pgd;
134− switch (pgd_val(*pgd) & _REGION_ENTRY_TYPE_MASK) {
135− case _REGION_ENTRY_TYPE_R2:
136− mm->context.asce_limit = 1UL << 42;
137− mm->context.asce_bits = _ASCE_TABLE_LENGTH |
138− _ASCE_USER_BITS |
139− _ASCE_TYPE_REGION3;
140− break;
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− }
116+
117+ pgd = mm->pgd;
118+ mm->pgd = (pgd_t *) (pgd_val(*pgd) & _REGION_ENTRY_ORIGIN);
119+ mm->context.asce_limit = 1UL << 31;
120+ mm->context.asce = __pa(mm->pgd) | _ASCE_TABLE_LENGTH |
121+ _ASCE_USER_BITS | _ASCE_TYPE_SEGMENT;
122+ mm->task_size = mm->context.asce_limit;
123+ crst_table_free(mm, (unsigned long *) pgd);
124+
154125 if (current->active_mm == mm)
155126 set_user_asce(mm);
156127 }
arch/s390/pci/pci_dma.c+10−6
@@ -457,7 +457,7 @@ int zpci_dma_init_device(struct zpci_dev *zdev) · 456 unmodified lines
457457 zdev->dma_table = dma_alloc_cpu_table();
458458 if (!zdev->dma_table) {
459459 rc = -ENOMEM;
460− goto out_clean;
460+ goto out;
461461 }
462462
463463 /*
@@ -477,18 +477,22 @@ int zpci_dma_init_device(struct zpci_dev *zdev) · 13 unmodified lines
477477 zdev->iommu_bitmap = vzalloc(zdev->iommu_pages / 8);
478478 if (!zdev->iommu_bitmap) {
479479 rc = -ENOMEM;
480− goto out_reg;
480+ goto free_dma_table;
481481 }
482482
483483 rc = zpci_register_ioat(zdev, 0, zdev->start_dma, zdev->end_dma,
484484 (u64) zdev->dma_table);
485485 if (rc)
486− goto out_reg;
487− return 0;
486+ goto free_bitmap;
488487
489−out_reg:
488+ return 0;
489+free_bitmap:
490+ vfree(zdev->iommu_bitmap);
491+ zdev->iommu_bitmap = NULL;
492+free_dma_table:
490493 dma_free_cpu_table(zdev->dma_table);
491−out_clean:
494+ zdev->dma_table = NULL;
495+out:
492496 return rc;
493497 }
494498
arch/x86/events/amd/core.c+1−1
@@ -115,7 +115,7 @@ static __initconst const u64 amd_hw_cache_event_ids · 114 unmodified lines
115115 /*
116116 * AMD Performance Monitor K7 and later.
117117 */
118−static const u64 amd_perfmon_event_map[] =
118+static const u64 amd_perfmon_event_map[PERF_COUNT_HW_MAX] =
119119 {
120120 [PERF_COUNT_HW_CPU_CYCLES] = 0x0076,
121121 [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
36393639
36403640 case 78: /* 14nm Skylake Mobile */
36413641 case 94: /* 14nm Skylake Desktop */
3642+ case 85: /* 14nm Skylake Server */
36423643 x86_pmu.late_ack = true;
36433644 memcpy(hw_cache_event_ids, skl_hw_cache_event_ids, sizeof(hw_cache_event_ids));
36443645 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
6363
6464 #define LBR_PLM (LBR_KERNEL | LBR_USER)
6565
66−#define LBR_SEL_MASK 0x1ff /* valid bits in LBR_SELECT */
66+#define LBR_SEL_MASK 0x3ff /* valid bits in LBR_SELECT */
6767 #define LBR_NOT_SUPP -1 /* LBR filter not supported */
6868 #define LBR_IGN 0 /* ignored */
6969
@@ -610,8 +610,10 @@ static int intel_pmu_setup_hw_lbr_filter(struct perf_event *event) · 540 unmodified lines
610610 * The first 9 bits (LBR_SEL_MASK) in LBR_SELECT operate
611611 * in suppress mode. So LBR_SELECT should be set to
612612 * (~mask & LBR_SEL_MASK) | (mask & ~LBR_SEL_MASK)
613+ * But the 10th bit LBR_CALL_STACK does not operate
614+ * in suppress mode.
613615 */
614− reg->config = mask ^ x86_pmu.lbr_sel_mask;
616+ reg->config = mask ^ (x86_pmu.lbr_sel_mask & ~LBR_CALL_STACK);
615617
616618 if ((br_type & PERF_SAMPLE_BRANCH_NO_CYCLES) &&
617619 (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
136136 struct dev_ext_attribute *de_attrs;
137137 struct attribute **attrs;
138138 size_t size;
139+ u64 reg;
139140 int ret;
140141 long i;
141142
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+
142154 attrs = NULL;
143155
144156 for (i = 0; i < PT_CPUID_LEAVES; i++) {
@@ -269,20 +281,23 @@ static void pt_config(struct perf_event *event) · 124 unmodified lines
269281
270282 reg |= (event->attr.config & PT_CONFIG_MASK);
271283
284+ event->hw.config = reg;
272285 wrmsrl(MSR_IA32_RTIT_CTL, reg);
273286 }
274287
275−static void pt_config_start(bool start)
288+static void pt_config_stop(struct perf_event *event)
276289 {
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;
278295
279− rdmsrl(MSR_IA32_RTIT_CTL, ctl);
280− if (start)
281− ctl |= RTIT_CTL_TRACEEN;
282− else
283− ctl &= ~RTIT_CTL_TRACEEN;
296+ ctl &= ~RTIT_CTL_TRACEEN;
284297 wrmsrl(MSR_IA32_RTIT_CTL, ctl);
285298
299+ WRITE_ONCE(event->hw.config, ctl);
300+
286301 /*
287302 * A wrmsr that disables trace generation serializes other PT
288303 * 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
291306 * The below WMB, separating data store and aux_head store matches
292307 * the consumer's RMB that separates aux_head load and data load.
293308 */
294− if (!start)
295− wmb();
309+ wmb();
296310 }
297311
298312 static void pt_config_buffer(void *buf, unsigned int topa_idx,
@@ -942,11 +956,17 @@ void intel_pt_interrupt(void) · 643 unmodified lines
942956 if (!ACCESS_ONCE(pt->handle_nmi))
943957 return;
944958
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;
946964
947965 if (!event)
948966 return;
949967
968+ pt_config_stop(event);
969+
950970 buf = perf_get_aux(&pt->handle);
951971 if (!buf)
952972 return;
@@ -983,6 +1003,35 @@ void intel_pt_interrupt(void) · 30 unmodified lines
9831003 }
9841004 }
9851005
1006+void 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+}
1033+EXPORT_SYMBOL_GPL(intel_pt_handle_vmx);
1034+
9861035 /*
9871036 * PMU callbacks
9881037 */
@@ -992,6 +1041,9 @@ static void pt_event_start(struct perf_event *event, int mode) · 3 unmodified lines
9921041 struct pt *pt = this_cpu_ptr(&pt_ctx);
9931042 struct pt_buffer *buf = perf_get_aux(&pt->handle);
9941043
1044+ if (READ_ONCE(pt->vmx_on))
1045+ return;
1046+
9951047 if (!buf || pt_buffer_is_full(buf, pt)) {
9961048 event->hw.state = PERF_HES_STOPPED;
9971049 return;
@@ -1014,7 +1066,8 @@ static void pt_event_stop(struct perf_event *event, int mode) · 16 unmodified lines
10141066 * see comment in intel_pt_interrupt().
10151067 */
10161068 ACCESS_ONCE(pt->handle_nmi) = 0;
1017− pt_config_start(false);
1069+
1070+ pt_config_stop(event);
10181071
10191072 if (event->hw.state == PERF_HES_STOPPED)
10201073 return;
arch/x86/events/intel/pt.h+3−0
@@ -65,6 +65,7 @@ enum pt_capabilities { · 64 unmodified lines
6565 struct pt_pmu {
6666 struct pmu pmu;
6767 u32 caps[PT_CPUID_REGS_NUM * PT_CPUID_LEAVES];
68+ bool vmx;
6869 };
6970
7071 /**
@@ -107,10 +108,12 @@ struct pt_buffer { · 36 unmodified lines
107108 * struct pt - per-cpu pt context
108109 * @handle: perf output handle
109110 * @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
110112 */
111113 struct pt {
112114 struct perf_output_handle handle;
113115 int handle_nmi;
116+ int vmx_on;
114117 };
115118
116119 #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
718718 break;
719719 case 60: /* Haswell */
720720 case 69: /* Haswell-Celeron */
721+ case 70: /* Haswell GT3e */
721722 case 61: /* Broadwell */
722723 case 71: /* Broadwell-H */
723724 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
285285 static inline void perf_check_microcode(void) { }
286286 #endif
287287
288+#ifdef CONFIG_CPU_SUP_INTEL
289+ extern void intel_pt_handle_vmx(int on);
290+#endif
291+
288292 #if defined(CONFIG_PERF_EVENTS) && defined(CONFIG_CPU_SUP_AMD)
289293 extern void amd_pmu_enable_virt(void);
290294 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
256256 struct irq_desc *desc;
257257 int cpu, vector;
258258
259− BUG_ON(!data->cfg.vector);
259+ if (!data->cfg.vector)
260+ return;
260261
261262 vector = data->cfg.vector;
262263 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
389389 /* Make changes effective */
390390 wrmsr
391391
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−
398392 enable_paging:
399393
400394 /*
arch/x86/kvm/vmx.c+4−0
@@ -3103,6 +3103,8 @@ static __init int vmx_disabled_by_bios(void) · 3102 unmodified lines
31033103
31043104 static void kvm_cpu_vmxon(u64 addr)
31053105 {
3106+ intel_pt_handle_vmx(1);
3107+
31063108 asm volatile (ASM_VMX_VMXON_RAX
31073109 : : "a"(&addr), "m"(addr)
31083110 : "memory", "cc");
@@ -3172,6 +3174,8 @@ static void vmclear_local_loaded_vmcss(void) · 63 unmodified lines
31723174 static void kvm_cpu_vmxoff(void)
31733175 {
31743176 asm volatile (__ex(ASM_VMX_VMXOFF) : : : "cc");
3177+
3178+ intel_pt_handle_vmx(0);
31753179 }
31763180
31773181 static void hardware_disable(void)
arch/x86/mm/setup_nx.c+3−2
@@ -32,8 +32,9 @@ early_param("noexec", noexec_setup); · 31 unmodified lines
3232
3333 void x86_configure_nx(void)
3434 {
35− /* If disable_nx is set, clear NX on all new mappings going forward. */
36− if (disable_nx)
35+ if (boot_cpu_has(X86_FEATURE_NX) && !disable_nx)
36+ __supported_pte_mask |= _PAGE_NX;
37+ else
3738 __supported_pte_mask &= ~_PAGE_NX;
3839 }
3940
arch/x86/xen/spinlock.c+6−0
@@ -27,6 +27,12 @@ static bool xen_pvspin = true; · 26 unmodified lines
2727
2828 static void xen_qlock_kick(int cpu)
2929 {
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+
3036 xen_send_IPI_one(cpu, XEN_SPIN_UNLOCK_VECTOR);
3137 }
3238
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
538538 u8 *order, u64 *snap_size);
539539 static int _rbd_dev_v2_snap_features(struct rbd_device *rbd_dev, u64 snap_id,
540540 u64 *snap_features);
541−static u64 rbd_snap_id_by_name(struct rbd_device *rbd_dev, const char *name);
542541
543542 static int rbd_open(struct block_device *bdev, fmode_t mode)
544543 {
@@ -3127,9 +3126,6 @@ static void rbd_watch_cb(u64 ver, u64 notify_id, u8 opcode, void *data) · 2582 unmodified lines
31273126 struct rbd_device *rbd_dev = (struct rbd_device *)data;
31283127 int ret;
31293128
3130− if (!rbd_dev)
3131− return;
3132−
31333129 dout("%s: \"%s\" notify_id %llu opcode %u\n", __func__,
31343130 rbd_dev->header_name, (unsigned long long)notify_id,
31353131 (unsigned int)opcode);
@@ -3263,6 +3259,9 @@ static void rbd_dev_header_unwatch_sync(struct rbd_device *rbd_dev) · 127 unmodified lines
32633259
32643260 ceph_osdc_cancel_event(rbd_dev->watch_event);
32653261 rbd_dev->watch_event = NULL;
3262+
3263+ dout("%s flushing notifies\n", __func__);
3264+ ceph_osdc_flush_notifies(&rbd_dev->rbd_client->client->osdc);
32663265 }
32673266
32683267 /*
@@ -3642,21 +3641,14 @@ static void rbd_exists_validate(struct rbd_device *rbd_dev) · 373 unmodified lines
36423641 static void rbd_dev_update_size(struct rbd_device *rbd_dev)
36433642 {
36443643 sector_t size;
3645− bool removing;
36463644
36473645 /*
3648− * Don't hold the lock while doing disk operations,
3649− * or lock ordering will conflict with the bdev mutex via:
3650− * rbd_add() -> blkdev_get() -> rbd_open()
3646+ * If EXISTS is not set, rbd_dev->disk may be NULL, so don't
3647+ * try to update its size. If REMOVING is set, updating size
3648+ * is just useless work since the device can't be opened.
36513649 */
3652− spin_lock_irq(&rbd_dev->lock);
3653− removing = 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) {
3650+ if (test_bit(RBD_DEV_FLAG_EXISTS, &rbd_dev->flags) &&
3651+ !test_bit(RBD_DEV_FLAG_REMOVING, &rbd_dev->flags)) {
36603652 size = (sector_t)rbd_dev->mapping.size / SECTOR_SIZE;
36613653 dout("setting size to %llu sectors", (unsigned long long)size);
36623654 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
41914183 __le64 features;
41924184 __le64 incompat;
41934185 } __attribute__ ((packed)) features_buf = { 0 };
4194− u64 incompat;
4186+ u64 unsup;
41954187 int ret;
41964188
41974189 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
42044196 if (ret < sizeof (features_buf))
42054197 return -ERANGE;
42064198
4207− incompat = le64_to_cpu(features_buf.incompat);
4208− if (incompat & ~RBD_FEATURES_SUPPORTED)
4199+ unsup = le64_to_cpu(features_buf.incompat) & ~RBD_FEATURES_SUPPORTED;
4200+ if (unsup) {
4201+ rbd_warn(rbd_dev, "image uses unsupported features: 0x%llx",
4202+ unsup);
42094203 return -ENXIO;
4204+ }
42104205
42114206 *snap_features = le64_to_cpu(features_buf.features);
42124207
@@ -5187,6 +5182,10 @@ out_err: · 974 unmodified lines
51875182 return ret;
51885183 }
51895184
5185+/*
5186+ * rbd_dev->header_rwsem must be locked for write and will be unlocked
5187+ * upon return.
5188+ */
51905189 static int rbd_dev_device_setup(struct rbd_device *rbd_dev)
51915190 {
51925191 int ret;
@@ -5195,7 +5194,7 @@ static int rbd_dev_device_setup(struct rbd_device *rbd_dev) · 2 unmodified lines
51955194
51965195 ret = rbd_dev_id_get(rbd_dev);
51975196 if (ret)
5198− return ret;
5197+ goto err_out_unlock;
51995198
52005199 BUILD_BUG_ON(DEV_NAME_LEN
52015200 < 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
52365235 /* Everything's ready. Announce the disk to the world. */
52375236
52385237 set_bit(RBD_DEV_FLAG_EXISTS, &rbd_dev->flags);
5239− add_disk(rbd_dev->disk);
5238+ up_write(&rbd_dev->header_rwsem);
52405239
5240+ add_disk(rbd_dev->disk);
52415241 pr_info("%s: added with size 0x%llx\n", rbd_dev->disk->disk_name,
52425242 (unsigned long long) rbd_dev->mapping.size);
52435243
@@ -5252,6 +5252,8 @@ err_out_blkdev: · 8 unmodified lines
52525252 unregister_blkdev(rbd_dev->major, rbd_dev->name);
52535253 err_out_id:
52545254 rbd_dev_id_put(rbd_dev);
5255+err_out_unlock:
5256+ up_write(&rbd_dev->header_rwsem);
52555257 return ret;
52565258 }
52575259
@@ -5442,6 +5444,7 @@ static ssize_t do_rbd_add(struct bus_type *bus, · 184 unmodified lines
54425444 spec = NULL; /* rbd_dev now owns this */
54435445 rbd_opts = NULL; /* rbd_dev now owns this */
54445446
5447+ down_write(&rbd_dev->header_rwsem);
54455448 rc = rbd_dev_image_probe(rbd_dev, 0);
54465449 if (rc < 0)
54475450 goto err_out_rbd_dev;
@@ -5471,6 +5474,7 @@ out: · 23 unmodified lines
54715474 return rc;
54725475
54735476 err_out_rbd_dev:
5477+ up_write(&rbd_dev->header_rwsem);
54745478 rbd_dev_destroy(rbd_dev);
54755479 err_out_client:
54765480 rbd_put_client(rbdc);
@@ -5577,12 +5581,6 @@ static ssize_t do_rbd_remove(struct bus_type *bus, · 100 unmodified lines
55775581 return ret;
55785582
55795583 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);
55865584
55875585 /*
55885586 * 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
193193 wall_time = cur_wall_time - j_cdbs->prev_cpu_wall;
194194 j_cdbs->prev_cpu_wall = cur_wall_time;
195195
196− if (cur_idle_time <= j_cdbs->prev_cpu_idle) {
197− idle_time = 0;
198− } else {
199− idle_time = cur_idle_time - j_cdbs->prev_cpu_idle;
200− j_cdbs->prev_cpu_idle = cur_idle_time;
201− }
196+ idle_time = cur_idle_time - j_cdbs->prev_cpu_idle;
197+ j_cdbs->prev_cpu_idle = cur_idle_time;
202198
203199 if (ignore_nice) {
204200 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
813813 if (err)
814814 goto skip_tar;
815815
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 */
816821 if (tdp_ratio - 1 == tar) {
817822 max_pstate = tar;
818823 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
6363 ptr->eptr = upper_32_bits(dma_addr);
6464 }
6565
66+static 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+
6674 static void to_talitos_ptr_len(struct talitos_ptr *ptr, unsigned int len,
6775 bool is_sec1)
6876 {
@@ -1083,21 +1091,20 @@ static int ipsec_esp(struct talitos_edesc *edesc, struct aead_request *areq, · 1014 unmodified lines
10831091 sg_count = dma_map_sg(dev, areq->src, edesc->src_nents ?: 1,
10841092 (areq->src == areq->dst) ? DMA_BIDIRECTIONAL
10851093 : DMA_TO_DEVICE);
1086−
10871094 /* hmac data */
10881095 desc->ptr[1].len = cpu_to_be16(areq->assoclen);
10891096 if (sg_count > 1 &&
10901097 (ret = sg_to_link_tbl_offset(areq->src, sg_count, 0,
10911098 areq->assoclen,
10921099 &edesc->link_tbl[tbl_off])) > 1) {
1093− tbl_off += ret;
1094−
10951100 to_talitos_ptr(&desc->ptr[1], edesc->dma_link_tbl + tbl_off *
10961101 sizeof(struct talitos_ptr), 0);
10971102 desc->ptr[1].j_extent = DESC_PTR_LNKTBL_JUMP;
10981103
10991104 dma_sync_single_for_device(dev, edesc->dma_link_tbl,
11001105 edesc->dma_len, DMA_BIDIRECTIONAL);
1106+
1107+ tbl_off += ret;
11011108 } else {
11021109 to_talitos_ptr(&desc->ptr[1], sg_dma_address(areq->src), 0);
11031110 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
11261133 if (edesc->desc.hdr & DESC_HDR_MODE1_MDEU_CICV)
11271134 sg_link_tbl_len += authsize;
11281135
1129− if (sg_count > 1 &&
1130− (ret = sg_to_link_tbl_offset(areq->src, sg_count, areq->assoclen,
1131− sg_link_tbl_len,
1132− &edesc->link_tbl[tbl_off])) > 1) {
1133− tbl_off += ret;
1136+ if (sg_count == 1) {
1137+ to_talitos_ptr(&desc->ptr[4], sg_dma_address(areq->src) +
1138+ areq->assoclen, 0);
1139+ } else if ((ret = sg_to_link_tbl_offset(areq->src, sg_count,
1140+ areq->assoclen, sg_link_tbl_len,
1141+ &edesc->link_tbl[tbl_off])) >
1142+ 1) {
11341143 desc->ptr[4].j_extent |= DESC_PTR_LNKTBL_JUMP;
11351144 to_talitos_ptr(&desc->ptr[4], edesc->dma_link_tbl +
11361145 tbl_off *
@@ -1138,8 +1147,10 @@ static int ipsec_esp(struct talitos_edesc *edesc, struct aead_request *areq, · 1 unmodified line
11381147 dma_sync_single_for_device(dev, edesc->dma_link_tbl,
11391148 edesc->dma_len,
11401149 DMA_BIDIRECTIONAL);
1141− } else
1142− to_talitos_ptr(&desc->ptr[4], sg_dma_address(areq->src), 0);
1150+ tbl_off += ret;
1151+ } else {
1152+ copy_talitos_ptr(&desc->ptr[4], &edesc->link_tbl[tbl_off], 0);
1153+ }
11431154
11441155 /* cipher out */
11451156 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
11511162
11521163 edesc->icv_ool = false;
11531164
1154− if (sg_count > 1 &&
1155− (sg_count = sg_to_link_tbl_offset(areq->dst, sg_count,
1165+ if (sg_count == 1) {
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,
11561170 areq->assoclen, cryptlen,
1157− &edesc->link_tbl[tbl_off])) >
1158− 1) {
1171+ &edesc->link_tbl[tbl_off])) > 1) {
11591172 struct talitos_ptr *tbl_ptr = &edesc->link_tbl[tbl_off];
11601173
11611174 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
11781191 edesc->dma_len, DMA_BIDIRECTIONAL);
11791192
11801193 edesc->icv_ool = true;
1181− } else
1182− to_talitos_ptr(&desc->ptr[5], sg_dma_address(areq->dst), 0);
1194+ } else {
1195+ copy_talitos_ptr(&desc->ptr[5], &edesc->link_tbl[tbl_off], 0);
1196+ }
11831197
11841198 /* iv out */
11851199 map_single_talitos_ptr(dev, &desc->ptr[6], ivsize, ctx->iv,
@@ -2629,21 +2643,11 @@ struct talitos_crypto_alg { · 1443 unmodified lines
26292643 struct talitos_alg_template algt;
26302644 };
26312645
2632−static int talitos_cra_init(struct crypto_tfm *tfm)
2646+static int talitos_init_common(struct talitos_ctx *ctx,
2647+ struct talitos_crypto_alg *talitos_alg)
26332648 {
2634− struct crypto_alg *alg = tfm->__crt_alg;
2635− struct talitos_crypto_alg *talitos_alg;
2636− struct talitos_ctx *ctx = crypto_tfm_ctx(tfm);
26372649 struct talitos_private *priv;
26382650
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−
26472651 /* update context with ptr to dev */
26482652 ctx->dev = talitos_alg->dev;
26492653
@@ -2661,10 +2665,33 @@ static int talitos_cra_init(struct crypto_tfm *tfm) · 11 unmodified lines
26612665 return 0;
26622666 }
26632667
2668+static 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+
26642685 static int talitos_cra_init_aead(struct crypto_aead *tfm)
26652686 {
2666− talitos_cra_init(crypto_aead_tfm(tfm));
2667− return 0;
2687+ struct aead_alg *alg = crypto_aead_alg(tfm);
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);
26682695 }
26692696
26702697 static 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
18661866
18671867 i7_dev = get_i7core_dev(mce->socketid);
18681868 if (!i7_dev)
1869− return NOTIFY_BAD;
1869+ return NOTIFY_DONE;
18701870
18711871 mci = i7_dev->mci;
18721872 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
31683168
31693169 mci = get_mci_for_node_id(mce->socketid);
31703170 if (!mci)
3171− return NOTIFY_BAD;
3171+ return NOTIFY_DONE;
31723172 pvt = mci->pvt_info;
31733173
31743174 /*
drivers/firmware/efi/vars.c+26−11
@@ -202,29 +202,44 @@ static const struct variable_validate variable_validate[] = { · 201 unmodified lines
202202 { NULL_GUID, "", NULL },
203203 };
204204
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+ */
205216 static bool
206217 variable_matches(const char *var_name, size_t len, const char *match_name,
207218 int *match)
208219 {
209220 for (*match = 0; ; (*match)++) {
210221 char c = match_name[*match];
211− char u = var_name[*match];
212222
213− /* Wildcard in the matching name means we've matched */
214− if (c == '*')
223+ switch (c) {
224+ case '*':
225+ /* Wildcard in @match_name means we've matched. */
215226 return true;
216227
217− /* Case sensitive match */
218− if (!c && *match == len)
219− return true;
228+ case '\0':
229+ /* @match_name has ended. Has @var_name too? */
230+ return (*match == len);
220231
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;
222240 return false;
223−
224− if (!c)
225− return true;
241+ }
226242 }
227− return true;
228243 }
229244
230245 bool
drivers/firmware/psci.c+1−1
@@ -360,7 +360,7 @@ static struct cpuidle_ops psci_cpuidle_ops __initdata = { · 359 unmodified lines
360360 .init = psci_dt_cpu_init_idle,
361361 };
362362
363−CPUIDLE_METHOD_OF_DECLARE(psci, "arm,psci", &psci_cpuidle_ops);
363+CPUIDLE_METHOD_OF_DECLARE(psci, "psci", &psci_cpuidle_ops);
364364 #endif
365365 #endif
366366
drivers/gpu/drm/amd/amdgpu/amdgpu_atpx_handler.c+7−4
@@ -63,10 +63,6 @@ bool amdgpu_has_atpx(void) { · 62 unmodified lines
6363 return amdgpu_atpx_priv.atpx_detected;
6464 }
6565
66−bool amdgpu_has_atpx_dgpu_power_cntl(void) {
67− return amdgpu_atpx_priv.atpx.functions.power_cntl;
68−}
69−
7066 /**
7167 * amdgpu_atpx_call - call an ATPX method
7268 *
@@ -146,6 +142,13 @@ static void amdgpu_atpx_parse_functions(struct amdgpu_atpx_functions *f, u32 mas · 73 unmodified lines
146142 */
147143 static int amdgpu_atpx_validate(struct amdgpu_atpx *atpx)
148144 {
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+
149152 if (atpx->functions.px_params) {
150153 union acpi_object *info;
151154 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
6262 "LAST",
6363 };
6464
65−#if defined(CONFIG_VGA_SWITCHEROO)
66−bool amdgpu_has_atpx_dgpu_power_cntl(void);
67−#else
68−static inline bool amdgpu_has_atpx_dgpu_power_cntl(void) { return false; }
69−#endif
70−
7165 bool amdgpu_device_is_px(struct drm_device *dev)
7266 {
7367 struct amdgpu_device *adev = dev->dev_private;
@@ -1485,7 +1479,7 @@ int amdgpu_device_init(struct amdgpu_device *adev, · 1411 unmodified lines
14851479
14861480 if (amdgpu_runtime_pm == 1)
14871481 runtime = true;
1488− if (amdgpu_device_is_px(ddev) && amdgpu_has_atpx_dgpu_power_cntl())
1482+ if (amdgpu_device_is_px(ddev))
14891483 runtime = true;
14901484 vga_switcheroo_register_client(adev->pdev, &amdgpu_switcheroo_ops, runtime);
14911485 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
910910 {
911911 struct amdgpu_device *adev = (struct amdgpu_device *)handle;
912912
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;
914917 }
915918
916919 static 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
870870 {
871871 struct amdgpu_device *adev = (struct amdgpu_device *)handle;
872872
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;
874877 }
875878
876879 #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
17961796 req_payload.start_slot = cur_slots;
17971797 if (mgr->proposed_vcpis[i]) {
17981798 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+ }
17991804 req_payload.num_slots = mgr->proposed_vcpis[i]->num_slots;
18001805 req_payload.vcpi = mgr->proposed_vcpis[i]->vcpi;
18011806 } else {
@@ -1823,6 +1828,9 @@ int drm_dp_update_payload_part1(struct drm_dp_mst_topology_mgr *mgr) · 21 unmodified lines
18231828 mgr->payloads[i].payload_state = req_payload.payload_state;
18241829 }
18251830 cur_slots += req_payload.num_slots;
1831+
1832+ if (port)
1833+ drm_dp_put_port(port);
18261834 }
18271835
18281836 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
21282136
21292137 if (mgr->mst_primary) {
21302138 int sret;
2139+ u8 guid[16];
2140+
21312141 sret = drm_dp_dpcd_read(mgr->aux, DP_DPCD_REV, mgr->dpcd, DP_RECEIVER_CAP_SIZE);
21322142 if (sret != DP_RECEIVER_CAP_SIZE) {
21332143 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
21422152 ret = -1;
21432153 goto out_unlock;
21442154 }
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+
21452165 ret = 0;
21462166 } else
21472167 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
572572 goto fail;
573573 }
574574
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+
575593 ret = etnaviv_hw_reset(gpu);
576594 if (ret)
577595 goto fail;
@@ -1566,7 +1584,6 @@ static int etnaviv_gpu_platform_probe(struct platform_device *pdev) · 988 unmodified lines
15661584 {
15671585 struct device *dev = &pdev->dev;
15681586 struct etnaviv_gpu *gpu;
1569− u32 dma_mask;
15701587 int err = 0;
15711588
15721589 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
15761593 gpu->dev = &pdev->dev;
15771594 mutex_init(&gpu->lock);
15781595
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−
15911596 /* Map registers: */
15921597 gpu->mmio = etnaviv_ioremap(pdev, NULL, dev_name(gpu->dev));
15931598 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
26082608 WREG32(VM_CONTEXT1_CNTL, 0);
26092609 }
26102610
2611+static 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+
2621+static 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+
2631+static 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+ */
2652+static 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+ */
2712+static 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+
26112752 void evergreen_mc_stop(struct radeon_device *rdev, struct evergreen_mc_save *save)
26122753 {
26132754 u32 crtc_enabled, tmp, frame_count, blackout;
26142755 int i, j;
2756+ unsigned dig_fe;
26152757
26162758 if (!ASIC_IS_NODCE(rdev)) {
26172759 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
26512793 break;
26522794 udelay(1);
26532795 }
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*/
26552807 /* XXX this is a hack to avoid strange behavior with EFI on certain systems */
26562808 WREG32(EVERGREEN_CRTC_UPDATE_LOCK + crtc_offsets[i], 1);
26572809 tmp = RREG32(EVERGREEN_CRTC_CONTROL + crtc_offsets[i]);
drivers/gpu/drm/radeon/evergreen_reg.h+46−0
@@ -250,8 +250,43 @@ · 249 unmodified lines
250250
251251 /* HDMI blocks at 0x7030, 0x7c30, 0x10830, 0x11430, 0x12030, 0x12c30 */
252252 #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
253275
254276 /* 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)
255290 #define EVERGREEN_DP_SEC_CNTL 0x7280
256291 # define EVERGREEN_DP_SEC_STREAM_ENABLE (1 << 0)
257292 # define EVERGREEN_DP_SEC_ASP_ENABLE (1 << 4)
@@ -266,4 +301,15 @@ · 8 unmodified lines
266301 # define EVERGREEN_DP_SEC_N_BASE_MULTIPLE(x) (((x) & 0xf) << 24)
267302 # define EVERGREEN_DP_SEC_SS_EN (1 << 28)
268303
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+
269315 #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
230230
231231 void ttm_bo_move_to_lru_tail(struct ttm_buffer_object *bo)
232232 {
233− struct ttm_bo_device *bdev = bo->bdev;
234− struct ttm_mem_type_manager *man;
233+ int put_count = 0;
235234
236235 lockdep_assert_held(&bo->resv->lock.base);
237236
238− if (bo->mem.placement & TTM_PL_FLAG_NO_EVICT) {
239− list_del_init(&bo->swap);
240− list_del_init(&bo->lru);
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− }
237+ put_count = ttm_bo_del_from_lru(bo);
238+ ttm_bo_list_ref_sub(bo, put_count, true);
239+ ttm_bo_add_to_lru(bo);
249240 }
250241 EXPORT_SYMBOL(ttm_bo_move_to_lru_tail);
251242
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
267267 return 0;
268268 }
269269
270+static 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+
270281 static const struct drm_crtc_helper_funcs virtio_gpu_crtc_helper_funcs = {
271282 .enable = virtio_gpu_crtc_enable,
272283 .disable = virtio_gpu_crtc_disable,
273284 .mode_set_nofb = virtio_gpu_crtc_mode_set_nofb,
274285 .atomic_check = virtio_gpu_crtc_atomic_check,
286+ .atomic_flush = virtio_gpu_crtc_atomic_flush,
275287 };
276288
277289 static 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
32933293 &vmw_cmd_dx_cid_check, true, false, true),
32943294 VMW_CMD_DEF(SVGA_3D_CMD_DX_DEFINE_QUERY, &vmw_cmd_dx_define_query,
32953295 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,
32973297 true, false, true),
32983298 VMW_CMD_DEF(SVGA_3D_CMD_DX_BIND_QUERY, &vmw_cmd_dx_bind_query,
32993299 true, false, true),
33003300 VMW_CMD_DEF(SVGA_3D_CMD_DX_SET_QUERY_OFFSET,
3301− &vmw_cmd_ok, true, false, true),
3302− VMW_CMD_DEF(SVGA_3D_CMD_DX_BEGIN_QUERY, &vmw_cmd_ok,
3301+ &vmw_cmd_dx_cid_check, true, false, true),
3302+ VMW_CMD_DEF(SVGA_3D_CMD_DX_BEGIN_QUERY, &vmw_cmd_dx_cid_check,
33033303 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,
33053305 true, false, true),
33063306 VMW_CMD_DEF(SVGA_3D_CMD_DX_READBACK_QUERY, &vmw_cmd_invalid,
33073307 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,
33093309 true, false, true),
33103310 VMW_CMD_DEF(SVGA_3D_CMD_DX_SET_VIEWPORTS, &vmw_cmd_dx_cid_check,
33113311 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
573573 mode = old_mode;
574574 old_mode = NULL;
575575 } else if (!vmw_kms_validate_mode_vram(vmw_priv,
576− mode->hdisplay *
577− (var->bits_per_pixel + 7) / 8,
578− mode->vdisplay)) {
576+ mode->hdisplay *
577+ DIV_ROUND_UP(var->bits_per_pixel, 8),
578+ mode->vdisplay)) {
579579 drm_mode_destroy(vmw_priv->dev, mode);
580580 return -EINVAL;
581581 }
drivers/i2c/busses/Kconfig+2−2
@@ -975,10 +975,10 @@ config I2C_XLR · 974 unmodified lines
975975
976976 config I2C_XLP9XX
977977 tristate "XLP9XX I2C support"
978− depends on CPU_XLP || COMPILE_TEST
978+ depends on CPU_XLP || ARCH_VULCAN || COMPILE_TEST
979979 help
980980 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.
982982
983983 This driver can also be built as a module. If so, the module will
984984 be called i2c-xlp9xx.
drivers/i2c/busses/i2c-cpm.c+2−2
@@ -116,8 +116,8 @@ struct cpm_i2c { · 115 unmodified lines
116116 cbd_t __iomem *rbase;
117117 u_char *txbuf[CPM_MAXBD];
118118 u_char *rxbuf[CPM_MAXBD];
119− u32 txdma[CPM_MAXBD];
120− u32 rxdma[CPM_MAXBD];
119+ dma_addr_t txdma[CPM_MAXBD];
120+ dma_addr_t rxdma[CPM_MAXBD];
121121 };
122122
123123 static 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
671671 return -EIO;
672672 }
673673
674− clk_prepare_enable(i2c->clk);
674+ ret = clk_enable(i2c->clk);
675+ if (ret)
676+ return ret;
675677
676678 for (i = 0; i < num; i++, msgs++) {
677679 stop = (i == num - 1);
@@ -695,7 +697,7 @@ static int exynos5_i2c_xfer(struct i2c_adapter *adap, · 17 unmodified lines
695697 }
696698
697699 out:
698− clk_disable_unprepare(i2c->clk);
700+ clk_disable(i2c->clk);
699701 return ret;
700702 }
701703
@@ -747,7 +749,9 @@ static int exynos5_i2c_probe(struct platform_device *pdev) · 45 unmodified lines
747749 return -ENOENT;
748750 }
749751
750− clk_prepare_enable(i2c->clk);
752+ ret = clk_prepare_enable(i2c->clk);
753+ if (ret)
754+ return ret;
751755
752756 mem = platform_get_resource(pdev, IORESOURCE_MEM, 0);
753757 i2c->regs = devm_ioremap_resource(&pdev->dev, mem);
@@ -799,6 +803,10 @@ static int exynos5_i2c_probe(struct platform_device *pdev) · 45 unmodified lines
799803
800804 platform_set_drvdata(pdev, i2c);
801805
806+ clk_disable(i2c->clk);
807+
808+ return 0;
809+
802810 err_clk:
803811 clk_disable_unprepare(i2c->clk);
804812 return ret;
@@ -810,6 +818,8 @@ static int exynos5_i2c_remove(struct platform_device *pdev) · 5 unmodified lines
810818
811819 i2c_del_adapter(&i2c->adap);
812820
821+ clk_unprepare(i2c->clk);
822+
813823 return 0;
814824 }
815825
@@ -821,6 +831,8 @@ static int exynos5_i2c_suspend_noirq(struct device *dev) · 5 unmodified lines
821831
822832 i2c->suspended = 1;
823833
834+ clk_unprepare(i2c->clk);
835+
824836 return 0;
825837 }
826838
@@ -830,7 +842,9 @@ static int exynos5_i2c_resume_noirq(struct device *dev) · 3 unmodified lines
830842 struct exynos5_i2c *i2c = platform_get_drvdata(pdev);
831843 int ret = 0;
832844
833− clk_prepare_enable(i2c->clk);
845+ ret = clk_prepare_enable(i2c->clk);
846+ if (ret)
847+ return ret;
834848
835849 ret = exynos5_hsi2c_clock_setup(i2c);
836850 if (ret) {
@@ -839,7 +853,7 @@ static int exynos5_i2c_resume_noirq(struct device *dev) · 2 unmodified lines
839853 }
840854
841855 exynos5_i2c_init(i2c);
842− clk_disable_unprepare(i2c->clk);
856+ clk_disable(i2c->clk);
843857 i2c->suspended = 0;
844858
845859 return 0;
drivers/i2c/busses/i2c-ismt.c+2−0
@@ -75,6 +75,7 @@ · 74 unmodified lines
7575 /* PCI DIDs for the Intel SMBus Message Transport (SMT) Devices */
7676 #define PCI_DEVICE_ID_INTEL_S1200_SMT0 0x0c59
7777 #define PCI_DEVICE_ID_INTEL_S1200_SMT1 0x0c5a
78+#define PCI_DEVICE_ID_INTEL_DNV_SMT 0x19ac
7879 #define PCI_DEVICE_ID_INTEL_AVOTON_SMT 0x1f15
7980
8081 #define ISMT_DESC_ENTRIES 2 /* number of descriptor entries */
@@ -180,6 +181,7 @@ struct ismt_priv { · 99 unmodified lines
180181 static const struct pci_device_id ismt_ids[] = {
181182 { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_S1200_SMT0) },
182183 { 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) },
183185 { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_AVOTON_SMT) },
184186 { 0, }
185187 };
drivers/i2c/busses/i2c-rk3x.c+1−0
@@ -855,6 +855,7 @@ static struct rk3x_i2c_soc_data soc_data[3] = { · 854 unmodified lines
855855 static const struct of_device_id rk3x_i2c_match[] = {
856856 { .compatible = "rockchip,rk3066-i2c", .data = (void *)&soc_data[0] },
857857 { .compatible = "rockchip,rk3188-i2c", .data = (void *)&soc_data[1] },
858+ { .compatible = "rockchip,rk3228-i2c", .data = (void *)&soc_data[2] },
858859 { .compatible = "rockchip,rk3288-i2c", .data = (void *)&soc_data[2] },
859860 {},
860861 };
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
691691 NULL);
692692
693693 /* Coudn't find default GID location */
694− WARN_ON(ix < 0);
694+ if (WARN_ON(ix < 0))
695+ goto release;
695696
696697 zattr_type.gid_type = gid_type;
697698
drivers/infiniband/core/ucm.c+4−0
@@ -48,6 +48,7 @@ · 47 unmodified lines
4848
4949 #include <asm/uaccess.h>
5050
51+#include <rdma/ib.h>
5152 #include <rdma/ib_cm.h>
5253 #include <rdma/ib_user_cm.h>
5354 #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
11031104 struct ib_ucm_cmd_hdr hdr;
11041105 ssize_t result;
11051106
1107+ if (WARN_ON_ONCE(!ib_safe_file_access(filp)))
1108+ return -EACCES;
1109+
11061110 if (len < sizeof(hdr))
11071111 return -EINVAL;
11081112
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
15741574 struct rdma_ucm_cmd_hdr hdr;
15751575 ssize_t ret;
15761576
1577+ if (WARN_ON_ONCE(!ib_safe_file_access(filp)))
1578+ return -EACCES;
1579+
15771580 if (len < sizeof(hdr))
15781581 return -EINVAL;
15791582
drivers/infiniband/core/uverbs_main.c+5−0
@@ -48,6 +48,8 @@ · 47 unmodified lines
4848
4949 #include <asm/uaccess.h>
5050
51+#include <rdma/ib.h>
52+
5153 #include "uverbs.h"
5254
5355 MODULE_AUTHOR("Roland Dreier");
@@ -709,6 +711,9 @@ static ssize_t ib_uverbs_write(struct file *filp, const char __user *buf, · 655 unmodified lines
709711 int srcu_key;
710712 ssize_t ret;
711713
714+ if (WARN_ON_ONCE(!ib_safe_file_access(filp)))
715+ return -EACCES;
716+
712717 if (count < sizeof hdr)
713718 return -EINVAL;
714719
drivers/infiniband/core/verbs.c+2−1
@@ -1860,6 +1860,7 @@ EXPORT_SYMBOL(ib_drain_rq); · 1859 unmodified lines
18601860 void ib_drain_qp(struct ib_qp *qp)
18611861 {
18621862 ib_drain_sq(qp);
1863− ib_drain_rq(qp);
1863+ if (!qp->srq)
1864+ ib_drain_rq(qp);
18641865 }
18651866 EXPORT_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
13901390 dev->ibdev.iwcm->add_ref = iwch_qp_add_ref;
13911391 dev->ibdev.iwcm->rem_ref = iwch_qp_rem_ref;
13921392 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));
13931395
13941396 ret = ib_register_device(&dev->ibdev, NULL);
13951397 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
162162 cq->bar2_va = c4iw_bar2_addrs(rdev, cq->cqid, T4_BAR2_QTYPE_INGRESS,
163163 &cq->bar2_qid,
164164 user ? &cq->bar2_pa : NULL);
165− if (user && !cq->bar2_va) {
165+ if (user && !cq->bar2_pa) {
166166 pr_warn(MOD "%s: cqid %u not in BAR2 range.\n",
167167 pci_name(rdev->lldi.pdev), cq->cqid);
168168 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
580580 dev->ibdev.iwcm->add_ref = c4iw_qp_add_ref;
581581 dev->ibdev.iwcm->rem_ref = c4iw_qp_rem_ref;
582582 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));
583585
584586 ret = ib_register_device(&dev->ibdev, NULL);
585587 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
185185
186186 if (pbar2_pa)
187187 *pbar2_pa = (rdev->bar2_pa + bar2_qoffset) & PAGE_MASK;
188+
189+ if (is_t4(rdev->lldi.adapter_type))
190+ return NULL;
191+
188192 return rdev->bar2_kva + bar2_qoffset;
189193 }
190194
@@ -270,7 +274,7 @@ static int create_qp(struct c4iw_rdev *rdev, struct t4_wq *wq, · 79 unmodified lines
270274 /*
271275 * User mode must have bar2 access.
272276 */
273− if (user && (!wq->sq.bar2_va || !wq->rq.bar2_va)) {
277+ if (user && (!wq->sq.bar2_pa || !wq->rq.bar2_pa)) {
274278 pr_warn(MOD "%s: sqid %u or rqid %u not in BAR2 range.\n",
275279 pci_name(rdev->lldi.pdev), wq->sq.qid, wq->rq.qid);
276280 goto free_dma;
@@ -1895,13 +1899,27 @@ int c4iw_ib_query_qp(struct ib_qp *ibqp, struct ib_qp_attr *attr, · 1618 unmodified lines
18951899 void c4iw_drain_sq(struct ib_qp *ibqp)
18961900 {
18971901 struct c4iw_qp *qp = to_c4iw_qp(ibqp);
1902+ unsigned long flag;
1903+ bool need_to_wait;
18981904
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);
19001911 }
19011912
19021913 void c4iw_drain_rq(struct ib_qp *ibqp)
19031914 {
19041915 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);
19051922
1906− wait_for_completion(&qp->rq_drained);
1923+ if (need_to_wait)
1924+ wait_for_completion(&qp->rq_drained);
19071925 }
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
530530 sizeof(struct mlx5_wqe_ctrl_seg)) /
531531 sizeof(struct mlx5_wqe_data_seg);
532532 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;
534534 props->max_cq = 1 << MLX5_CAP_GEN(mdev, log_max_cq);
535535 props->max_cqe = (1 << MLX5_CAP_GEN(mdev, log_max_cq_sz)) - 1;
536536 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
671671 struct mlx5_ib_dev *dev = to_mdev(ibdev);
672672 struct mlx5_core_dev *mdev = dev->mdev;
673673 struct mlx5_hca_vport_context *rep;
674− int max_mtu;
675− int oper_mtu;
674+ u16 max_mtu;
675+ u16 oper_mtu;
676676 int err;
677677 u8 ib_link_width_oper;
678678 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
500500 * skb_shinfo(skb)->nr_frags, skb_is_gso(skb));
501501 */
502502
503− if (!netif_carrier_ok(netdev))
504− return NETDEV_TX_OK;
505−
506503 if (netif_queue_stopped(netdev))
507504 return NETDEV_TX_BUSY;
508505
drivers/infiniband/hw/qib/qib_file_ops.c+5−0
@@ -45,6 +45,8 @@ · 44 unmodified lines
4545 #include <linux/export.h>
4646 #include <linux/uio.h>
4747
48+#include <rdma/ib.h>
49+
4850 #include "qib.h"
4951 #include "qib_common.h"
5052 #include "qib_user_sdma.h"
@@ -2067,6 +2069,9 @@ static ssize_t qib_write(struct file *fp, const char __user *data, · 2016 unmodified lines
20672069 ssize_t ret = 0;
20682070 void *dest;
20692071
2072+ if (WARN_ON_ONCE(!ib_safe_file_access(fp)))
2073+ return -EACCES;
2074+
20702075 if (count < sizeof(cmd.type)) {
20712076 ret = -EINVAL;
20722077 goto bail;
drivers/infiniband/sw/rdmavt/qp.c+2−2
@@ -1637,9 +1637,9 @@ bail: · 1636 unmodified lines
16371637 spin_unlock_irqrestore(&qp->s_hlock, flags);
16381638 if (nreq) {
16391639 if (call_send)
1640− rdi->driver_f.schedule_send_no_lock(qp);
1641− else
16421640 rdi->driver_f.do_send(qp);
1641+ else
1642+ rdi->driver_f.schedule_send_no_lock(qp);
16431643 }
16441644 return err;
16451645 }
drivers/media/usb/usbvision/usbvision-video.c+0−7
@@ -1452,13 +1452,6 @@ static int usbvision_probe(struct usb_interface *intf, · 1451 unmodified lines
14521452 printk(KERN_INFO "%s: %s found\n", __func__,
14531453 usbvision_device_data[model].model_string);
14541454
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−
14621455 if (usbvision_device_data[model].interface >= 0)
14631456 interface = &dev->actconfig->interface[usbvision_device_data[model].interface]->altsetting[0];
14641457 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
16451645 * Will sleep if required for nonblocking == false.
16461646 */
16471647 static int __vb2_get_done_vb(struct vb2_queue *q, struct vb2_buffer **vb,
1648− int nonblocking)
1648+ void *pb, int nonblocking)
16491649 {
16501650 unsigned long flags;
16511651 int ret;
@@ -1666,10 +1666,10 @@ static int __vb2_get_done_vb(struct vb2_queue *q, struct vb2_buffer **vb, · 14 unmodified lines
16661666 /*
16671667 * Only remove the buffer from done_list if v4l2_buffer can handle all
16681668 * 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.
16711669 */
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);
16731673 spin_unlock_irqrestore(&q->done_lock, flags);
16741674
16751675 return ret;
@@ -1748,7 +1748,7 @@ int vb2_core_dqbuf(struct vb2_queue *q, unsigned int *pindex, void *pb, · 72 unmodified lines
17481748 struct vb2_buffer *vb = NULL;
17491749 int ret;
17501750
1751− ret = __vb2_get_done_vb(q, &vb, nonblocking);
1751+ ret = __vb2_get_done_vb(q, &vb, pb, nonblocking);
17521752 if (ret < 0)
17531753 return ret;
17541754
@@ -2297,6 +2297,16 @@ unsigned int vb2_core_poll(struct vb2_queue *q, struct file *file, · 542 unmodified lines
22972297 if (!vb2_is_streaming(q) || q->error)
22982298 return POLLERR;
22992299
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+
23002310 /*
23012311 * For output streams you can call write() as long as there are fewer
23022312 * 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
4949 vec = frame_vector_create(nr);
5050 if (!vec)
5151 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);
5353 if (ret < 0)
5454 goto out_destroy;
5555 /* 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
7474 return 0;
7575 }
7676
77+static int __verify_planes_array_core(struct vb2_buffer *vb, const void *pb)
78+{
79+ return __verify_planes_array(vb, pb);
80+}
81+
7782 /**
7883 * __verify_length() - Verify that the bytesused value for each plane fits in
7984 * 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
437442 }
438443
439444 static const struct vb2_buf_ops v4l2_buf_ops = {
445+ .verify_planes_array = __verify_planes_array_core,
440446 .fill_user_buffer = __fill_v4l2_buffer,
441447 .fill_vb2_buffer = __fill_vb2_buffer,
442448 .copy_timestamp = __copy_timestamp,
@@ -765,6 +771,12 @@ int vb2_queue_init(struct vb2_queue *q) · 322 unmodified lines
765771 q->is_output = V4L2_TYPE_IS_OUTPUT(q->type);
766772 q->copy_timestamp = (q->timestamp_flags & V4L2_BUF_FLAG_TIMESTAMP_MASK)
767773 == 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;
768780
769781 return vb2_core_queue_init(q);
770782 }
@@ -818,14 +830,6 @@ unsigned int vb2_poll(struct vb2_queue *q, struct file *file, poll_table *wait) · 47 unmodified lines
818830 poll_wait(file, &fh->wait, wait);
819831 }
820832
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−
829833 return res | vb2_core_poll(q, file, wait);
830834 }
831835 EXPORT_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
223223 cxl_ops->link_ok(ctx->afu->adapter, ctx->afu));
224224 flush_work(&ctx->fault_work); /* Only needed for dedicated process */
225225
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+
226233 /* release the reference to the group leader and mm handling pid */
227234 put_pid(ctx->pid);
228235 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
274274 #define CXL_PSL_DSISR_An_PE (1ull << (63-4)) /* PSL Error (implementation specific) */
275275 #define CXL_PSL_DSISR_An_AE (1ull << (63-5)) /* AFU Error */
276276 #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)
277278 /* NOTE: Bits 32:63 are undefined if DSISR[DS] = 1 */
278279 #define CXL_PSL_DSISR_An_M DSISR_NOHPTE /* PTE not found */
279280 #define CXL_PSL_DSISR_An_P DSISR_PROTFAULT /* Storage protection violation */
@@ -855,6 +856,7 @@ struct cxl_backend_ops { · 575 unmodified lines
855856 u64 dsisr, u64 errstat);
856857 irqreturn_t (*psl_interrupt)(int irq, void *data);
857858 int (*ack_irq)(struct cxl_context *ctx, u64 tfc, u64 psl_reset_mask);
859+ void (*irq_wait)(struct cxl_context *ctx);
858860 int (*attach_process)(struct cxl_context *ctx, bool kernel,
859861 u64 wed, u64 amr);
860862 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
203203 void cxl_unmap_irq(unsigned int virq, void *cookie)
204204 {
205205 free_irq(virq, cookie);
206− irq_dispose_mapping(virq);
207206 }
208207
209208 int cxl_register_one_irq(struct cxl *adapter,
drivers/misc/cxl/native.c+31−0
@@ -14,6 +14,7 @@ · 13 unmodified lines
1414 #include <linux/mutex.h>
1515 #include <linux/mm.h>
1616 #include <linux/uaccess.h>
17+#include <linux/delay.h>
1718 #include <asm/synch.h>
1819 #include <misc/cxl-base.h>
1920
@@ -797,6 +798,35 @@ static irqreturn_t native_irq_multiplexed(int irq, void *data) · 777 unmodified lines
797798 return fail_psl_irq(afu, &irq_info);
798799 }
799800
801+void 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+
800830 static irqreturn_t native_slice_irq_err(int irq, void *data)
801831 {
802832 struct cxl_afu *afu = data;
@@ -1076,6 +1106,7 @@ const struct cxl_backend_ops cxl_native_ops = { · 273 unmodified lines
10761106 .handle_psl_slice_error = native_handle_psl_slice_error,
10771107 .psl_interrupt = NULL,
10781108 .ack_irq = native_ack_irq,
1109+ .irq_wait = native_irq_wait,
10791110 .attach_process = native_attach_process,
10801111 .detach_process = native_detach_process,
10811112 .support_attributes = native_support_attributes,
drivers/mmc/host/Kconfig+1−0
@@ -97,6 +97,7 @@ config MMC_RICOH_MMC · 96 unmodified lines
9797 config MMC_SDHCI_ACPI
9898 tristate "SDHCI support for ACPI enumerated SDHCI controllers"
9999 depends on MMC_SDHCI && ACPI
100+ select IOSF_MBI if X86
100101 help
101102 This selects support for ACPI enumerated SDHCI controllers,
102103 identified by ACPI Compatibility ID PNP0D40 or specific
drivers/mmc/host/sdhci-acpi.c+81−0
@@ -41,6 +41,11 @@ · 40 unmodified lines
4141 #include <linux/mmc/pm.h>
4242 #include <linux/mmc/slot-gpio.h>
4343
44+#ifdef CONFIG_X86
45+#include <asm/cpu_device_id.h>
46+#include <asm/iosf_mbi.h>
47+#endif
48+
4449 #include "sdhci.h"
4550
4651 enum {
@@ -116,6 +121,75 @@ static const struct sdhci_acpi_chip sdhci_acpi_chip_int = { · 69 unmodified lines
116121 .ops = &sdhci_acpi_ops_int,
117122 };
118123
124+#ifdef CONFIG_X86
125+
126+static 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+
140+static 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+
167+static 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+
182+static inline void sdhci_acpi_byt_setting(struct device *dev)
183+{
184+}
185+
186+static inline bool sdhci_acpi_byt_defer(struct device *dev)
187+{
188+ return false;
189+}
190+
191+#endif
192+
119193 static int bxt_get_cd(struct mmc_host *mmc)
120194 {
121195 int gpio_cd = mmc_gpio_get_cd(mmc);
@@ -322,6 +396,9 @@ static int sdhci_acpi_probe(struct platform_device *pdev) · 200 unmodified lines
322396 if (acpi_bus_get_status(device) || !device->status.present)
323397 return -ENODEV;
324398
399+ if (sdhci_acpi_byt_defer(dev))
400+ return -EPROBE_DEFER;
401+
325402 hid = acpi_device_hid(device);
326403 uid = device->pnp.unique_id;
327404
@@ -447,6 +524,8 @@ static int sdhci_acpi_resume(struct device *dev) · 119 unmodified lines
447524 {
448525 struct sdhci_acpi_host *c = dev_get_drvdata(dev);
449526
527+ sdhci_acpi_byt_setting(&c->pdev->dev);
528+
450529 return sdhci_resume_host(c->host);
451530 }
452531
@@ -470,6 +549,8 @@ static int sdhci_acpi_runtime_resume(struct device *dev) · 17 unmodified lines
470549 {
471550 struct sdhci_acpi_host *c = dev_get_drvdata(dev);
472551
552+ sdhci_acpi_byt_setting(&c->pdev->dev);
553+
473554 return sdhci_runtime_resume_host(c->host);
474555 }
475556
drivers/mmc/host/sunxi-mmc.c+5−0
@@ -1129,6 +1129,11 @@ static int sunxi_mmc_probe(struct platform_device *pdev) · 1128 unmodified lines
11291129 MMC_CAP_1_8V_DDR |
11301130 MMC_CAP_ERASE | MMC_CAP_SDIO_IRQ;
11311131
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+
11321137 ret = mmc_of_parse(mmc);
11331138 if (ret)
11341139 goto error_free_dma;
drivers/net/Kconfig+2−3
@@ -62,9 +62,8 @@ config DUMMY · 61 unmodified lines
6262 this device is consigned into oblivion) with a configurable IP
6363 address. It is most commonly used in order to make your currently
6464 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 this
66− thing often comes in handy, the default is Y. It won't enlarge your
67− kernel either. What a deal. Read about it in the Network
65+ If you use SLIP or PPP, you might want to say Y here. It won't
66+ enlarge your kernel. What a deal. Read about it in the Network
6867 Administrator's Guide, available from
6968 <http://www.tldp.org/docs.html#guide>.
7069
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
405405 u32 packets = 0;
406406 u32 bytes = 0;
407407 int factor = priv->cqe_factor;
408− u64 timestamp = 0;
409408 int done = 0;
410409 int budget = priv->tx_work_limit;
411410 u32 last_nr_txbb;
@@ -445,9 +444,12 @@ static bool mlx4_en_process_tx_cq(struct net_device *dev, · 33 unmodified lines
445444 new_index = be16_to_cpu(cqe->wqe_index) & size_mask;
446445
447446 do {
447+ u64 timestamp = 0;
448+
448449 txbbs_skipped += last_nr_txbb;
449450 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))
451453 timestamp = mlx4_en_get_cqe_ts(cqe);
452454
453455 /* free next descriptor */
drivers/net/ethernet/mellanox/mlx5/core/en.h+1−1
@@ -609,7 +609,7 @@ enum mlx5e_link_mode { · 608 unmodified lines
609609 MLX5E_100GBASE_KR4 = 22,
610610 MLX5E_100GBASE_LR4 = 23,
611611 MLX5E_100BASE_TX = 24,
612− MLX5E_100BASE_T = 25,
612+ MLX5E_1000BASE_T = 25,
613613 MLX5E_10GBASE_T = 26,
614614 MLX5E_25GBASE_CR = 27,
615615 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
138138 [MLX5E_100BASE_TX] = {
139139 .speed = 100,
140140 },
141− [MLX5E_100BASE_T] = {
142− .supported = SUPPORTED_100baseT_Full,
143− .advertised = ADVERTISED_100baseT_Full,
144− .speed = 100,
141+ [MLX5E_1000BASE_T] = {
142+ .supported = SUPPORTED_1000baseT_Full,
143+ .advertised = ADVERTISED_1000baseT_Full,
144+ .speed = 1000,
145145 },
146146 [MLX5E_10GBASE_T] = {
147147 .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
14041404 return 0;
14051405 }
14061406
1407−static int mlx5e_set_dev_port_mtu(struct net_device *netdev)
1407+static int mlx5e_set_mtu(struct mlx5e_priv *priv, u16 mtu)
14081408 {
1409− struct mlx5e_priv *priv = netdev_priv(netdev);
14101409 struct mlx5_core_dev *mdev = priv->mdev;
1411− int hw_mtu;
1410+ u16 hw_mtu = MLX5E_SW2HW_MTU(mtu);
14121411 int err;
14131412
1414− err = mlx5_set_port_mtu(mdev, MLX5E_SW2HW_MTU(netdev->mtu), 1);
1413+ err = mlx5_set_port_mtu(mdev, hw_mtu, 1);
14151414 if (err)
14161415 return err;
14171416
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+}
14191421
1420− if (MLX5E_HW2SW_MTU(hw_mtu) != netdev->mtu)
1421− netdev_warn(netdev, "%s: Port MTU %d is different than netdev mtu %d\n",
1422− __func__, MLX5E_HW2SW_MTU(hw_mtu), netdev->mtu);
1422+static void mlx5e_query_mtu(struct mlx5e_priv *priv, u16 *mtu)
1423+{
1424+ struct mlx5_core_dev *mdev = priv->mdev;
1425+ u16 hw_mtu = 0;
1426+ int err;
14231427
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+
1435+static 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;
14251451 return 0;
14261452 }
14271453
@@ -1999,22 +2025,27 @@ static int mlx5e_set_features(struct net_device *netdev, · 571 unmodified lines
19992025 return err;
20002026 }
20012027
2028+#define MXL5_HW_MIN_MTU 64
2029+#define MXL5E_MIN_MTU (MXL5_HW_MIN_MTU + ETH_FCS_LEN)
2030+
20022031 static int mlx5e_change_mtu(struct net_device *netdev, int new_mtu)
20032032 {
20042033 struct mlx5e_priv *priv = netdev_priv(netdev);
20052034 struct mlx5_core_dev *mdev = priv->mdev;
20062035 bool was_opened;
2007− int max_mtu;
2036+ u16 max_mtu;
2037+ u16 min_mtu;
20082038 int err = 0;
20092039
20102040 mlx5_query_port_max_mtu(mdev, &max_mtu, 1);
20112041
20122042 max_mtu = MLX5E_HW2SW_MTU(max_mtu);
2043+ min_mtu = MLX5E_HW2SW_MTU(MXL5E_MIN_MTU);
20132044
2014− if (new_mtu > max_mtu) {
2045+ if (new_mtu > max_mtu || new_mtu < min_mtu) {
20152046 netdev_err(netdev,
2016− "%s: Bad MTU (%d) > (%d) Max\n",
2017− __func__, new_mtu, max_mtu);
2047+ "%s: Bad MTU (%d), valid range is: [%d..%d]\n",
2048+ __func__, new_mtu, min_mtu, max_mtu);
20182049 return -EINVAL;
20192050 }
20202051
@@ -2602,7 +2633,16 @@ static void mlx5e_destroy_netdev(struct mlx5_core_dev *mdev, void *vpriv) · 581 unmodified lines
26022633 schedule_work(&priv->set_rx_mode_work);
26032634 mlx5e_disable_async_events(priv);
26042635 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+
26062646 mlx5e_tc_cleanup(priv);
26072647 mlx5e_vxlan_cleanup(priv);
26082648 mlx5e_destroy_flow_tables(priv);
@@ -2615,7 +2655,9 @@ static void mlx5e_destroy_netdev(struct mlx5_core_dev *mdev, void *vpriv) · 6 unmodified lines
26152655 mlx5_core_dealloc_transport_domain(priv->mdev, priv->tdn);
26162656 mlx5_core_dealloc_pd(priv->mdev, priv->pdn);
26172657 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);
26192661 }
26202662
26212663 static 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
10651065 return rule;
10661066 }
10671067
1068−static 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−
10951068 static struct mlx5_flow_rule *
10961069 _mlx5_add_flow_rule(struct mlx5_flow_table *ft,
10971070 u8 match_criteria_enable,
@@ -1119,8 +1092,23 @@ _mlx5_add_flow_rule(struct mlx5_flow_table *ft, · 21 unmodified lines
11191092 goto unlock;
11201093 }
11211094
1122− rule = add_rule_to_auto_fg(ft, match_criteria_enable, match_criteria,
1123− match_value, action, flow_tag, dest);
1095+ g = create_autogroup(ft, match_criteria_enable, match_criteria);
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+ }
11241112 unlock:
11251113 unlock_ref_node(&ft->node);
11261114 return rule;
@@ -1288,7 +1276,7 @@ struct mlx5_flow_namespace *mlx5_get_flow_namespace(struct mlx5_core_dev *dev, · 161 unmodified lines
12881276 {
12891277 struct mlx5_flow_root_namespace *root_ns = dev->priv.root_ns;
12901278 int prio;
1291− static struct fs_prio *fs_prio;
1279+ struct fs_prio *fs_prio;
12921280 struct mlx5_flow_namespace *ns;
12931281
12941282 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
966966 int err;
967967
968968 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)) {
970970 dev_warn(&dev->pdev->dev, "%s: interface is up, NOP\n",
971971 __func__);
972972 goto out;
@@ -1133,7 +1133,8 @@ static int mlx5_load_one(struct mlx5_core_dev *dev, struct mlx5_priv *priv) · 160 unmodified lines
11331133 if (err)
11341134 pr_info("failed request module on %s\n", MLX5_IB_MOD);
11351135
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);
11371138 out:
11381139 mutex_unlock(&dev->intf_state_mutex);
11391140
@@ -1207,7 +1208,7 @@ static int mlx5_unload_one(struct mlx5_core_dev *dev, struct mlx5_priv *priv) · 67 unmodified lines
12071208 }
12081209
12091210 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)) {
12111212 dev_warn(&dev->pdev->dev, "%s: interface is down, NOP\n",
12121213 __func__);
12131214 goto out;
@@ -1241,7 +1242,8 @@ static int mlx5_unload_one(struct mlx5_core_dev *dev, struct mlx5_priv *priv) · 27 unmodified lines
12411242 mlx5_cmd_cleanup(dev);
12421243
12431244 out:
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);
12451247 mutex_unlock(&dev->intf_state_mutex);
12461248 return err;
12471249 }
@@ -1452,6 +1454,18 @@ static const struct pci_error_handlers mlx5_err_handler = { · 204 unmodified lines
14521454 .resume = mlx5_pci_resume
14531455 };
14541456
1457+static 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+
14551469 static const struct pci_device_id mlx5_core_pci_table[] = {
14561470 { PCI_VDEVICE(MELLANOX, 0x1011) }, /* Connect-IB */
14571471 { 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
14591473 { PCI_VDEVICE(MELLANOX, 0x1014), MLX5_PCI_DEV_IS_VF}, /* ConnectX-4 VF */
14601474 { PCI_VDEVICE(MELLANOX, 0x1015) }, /* ConnectX-4LX */
14611475 { 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 */
14621478 { 0, }
14631479 };
14641480
@@ -1469,6 +1485,7 @@ static struct pci_driver mlx5_core_driver = { · 4 unmodified lines
14691485 .id_table = mlx5_core_pci_table,
14701486 .probe = init_one,
14711487 .remove = remove_one,
1488+ .shutdown = shutdown,
14721489 .err_handler = &mlx5_err_handler,
14731490 .sriov_configure = mlx5_core_sriov_configure,
14741491 };
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
247247 }
248248 EXPORT_SYMBOL_GPL(mlx5_query_port_admin_status);
249249
250−static void mlx5_query_port_mtu(struct mlx5_core_dev *dev, int *admin_mtu,
251− int *max_mtu, int *oper_mtu, u8 port)
250+static void mlx5_query_port_mtu(struct mlx5_core_dev *dev, u16 *admin_mtu,
251+ u16 *max_mtu, u16 *oper_mtu, u8 port)
252252 {
253253 u32 in[MLX5_ST_SZ_DW(pmtu_reg)];
254254 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
268268 *admin_mtu = MLX5_GET(pmtu_reg, out, admin_mtu);
269269 }
270270
271−int mlx5_set_port_mtu(struct mlx5_core_dev *dev, int mtu, u8 port)
271+int mlx5_set_port_mtu(struct mlx5_core_dev *dev, u16 mtu, u8 port)
272272 {
273273 u32 in[MLX5_ST_SZ_DW(pmtu_reg)];
274274 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
283283 }
284284 EXPORT_SYMBOL_GPL(mlx5_set_port_mtu);
285285
286−void mlx5_query_port_max_mtu(struct mlx5_core_dev *dev, int *max_mtu,
286+void mlx5_query_port_max_mtu(struct mlx5_core_dev *dev, u16 *max_mtu,
287287 u8 port)
288288 {
289289 mlx5_query_port_mtu(dev, NULL, max_mtu, NULL, port);
290290 }
291291 EXPORT_SYMBOL_GPL(mlx5_query_port_max_mtu);
292292
293−void mlx5_query_port_oper_mtu(struct mlx5_core_dev *dev, int *oper_mtu,
293+void mlx5_query_port_oper_mtu(struct mlx5_core_dev *dev, u16 *oper_mtu,
294294 u8 port)
295295 {
296296 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
196196 }
197197 EXPORT_SYMBOL_GPL(mlx5_modify_nic_vport_mac_address);
198198
199+int 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+}
217+EXPORT_SYMBOL_GPL(mlx5_query_nic_vport_mtu);
218+
219+int 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+}
237+EXPORT_SYMBOL_GPL(mlx5_modify_nic_vport_mtu);
238+
199239 int mlx5_query_nic_vport_mac_list(struct mlx5_core_dev *dev,
200240 u32 vport,
201241 enum mlx5_list_type list_type,
drivers/net/ethernet/qlogic/qlcnic/qlcnic.h+2−2
@@ -37,8 +37,8 @@ · 36 unmodified lines
3737
3838 #define _QLCNIC_LINUX_MAJOR 5
3939 #define _QLCNIC_LINUX_MINOR 3
40−#define _QLCNIC_LINUX_SUBVERSION 63
41−#define QLCNIC_LINUX_VERSIONID "5.3.63"
40+#define _QLCNIC_LINUX_SUBVERSION 64
41+#define QLCNIC_LINUX_VERSIONID "5.3.64"
4242 #define QLCNIC_DRV_IDC_VER 0x01
4343 #define QLCNIC_DRIVER_VERSION ((_QLCNIC_LINUX_MAJOR << 16) |\
4444 (_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
4949 u32 reg_shift;
5050 struct device *dev;
5151 struct regmap *sys_mgr_base_addr;
52− struct reset_control *stmmac_rst;
5352 void __iomem *splitter_base;
5453 bool f2h_ptp_ref_clk;
5554 };
@@ -92,15 +91,6 @@ static int socfpga_dwmac_parse_data(struct socfpga_dwmac *dwmac, struct device * · 36 unmodified lines
9291 struct device_node *np_splitter;
9392 struct resource res_splitter;
9493
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−
10494 dwmac->interface = of_get_phy_mode(np);
10595
10696 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
194184 return 0;
195185 }
196186
197−static 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−
208187 static int socfpga_dwmac_init(struct platform_device *pdev, void *priv)
209188 {
210− struct socfpga_dwmac *dwmac = priv;
189+ struct socfpga_dwmac *dwmac = priv;
211190 struct net_device *ndev = platform_get_drvdata(pdev);
212191 struct stmmac_priv *stpriv = NULL;
213192 int ret = 0;
214193
215− if (ndev)
216− stpriv = netdev_priv(ndev);
194+ if (!ndev)
195+ return -EINVAL;
196+
197+ stpriv = netdev_priv(ndev);
198+ if (!stpriv)
199+ return -EINVAL;
217200
218201 /* Assert reset to the enet controller before changing the phy mode */
219− if (dwmac->stmmac_rst)
220− reset_control_assert(dwmac->stmmac_rst);
202+ if (stpriv->stmmac_rst)
203+ reset_control_assert(stpriv->stmmac_rst);
221204
222205 /* Setup the phy mode in the system manager registers according to
223206 * devicetree configuration
@@ -227,8 +210,8 @@ static int socfpga_dwmac_init(struct platform_device *pdev, void *priv) · 3 unmodified lines
227210 /* Deassert reset for the phy configuration to be sampled by
228211 * the enet controller, and operation to start in requested mode
229212 */
230− if (dwmac->stmmac_rst)
231− reset_control_deassert(dwmac->stmmac_rst);
213+ if (stpriv->stmmac_rst)
214+ reset_control_deassert(stpriv->stmmac_rst);
232215
233216 /* Before the enet controller is suspended, the phy is suspended.
234217 * 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
245228 * control register 0, and can be modified by the phy driver
246229 * framework.
247230 */
248− if (stpriv && stpriv->phydev)
231+ if (stpriv->phydev)
249232 phy_resume(stpriv->phydev);
250233
251234 return ret;
@@ -285,14 +268,13 @@ static int socfpga_dwmac_probe(struct platform_device *pdev) · 33 unmodified lines
285268
286269 plat_dat->bsp_priv = dwmac;
287270 plat_dat->init = socfpga_dwmac_init;
288− plat_dat->exit = socfpga_dwmac_exit;
289271 plat_dat->fix_mac_speed = socfpga_dwmac_fix_mac_speed;
290272
291− ret = socfpga_dwmac_init(pdev, plat_dat->bsp_priv);
292− if (ret)
293− return ret;
273+ ret = stmmac_dvr_probe(&pdev->dev, plat_dat, &stmmac_res);
274+ if (!ret)
275+ ret = socfpga_dwmac_init(pdev, dwmac);
294276
295− return stmmac_dvr_probe(&pdev->dev, plat_dat, &stmmac_res);
277+ return ret;
296278 }
297279
298280 static 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
880880 macsec_skb_cb(skb)->valid = false;
881881 skb = skb_share_check(skb, GFP_ATOMIC);
882882 if (!skb)
883− return NULL;
883+ return ERR_PTR(-ENOMEM);
884884
885885 req = aead_request_alloc(rx_sa->key.tfm, GFP_ATOMIC);
886886 if (!req) {
887887 kfree_skb(skb);
888− return NULL;
888+ return ERR_PTR(-ENOMEM);
889889 }
890890
891891 hdr = (struct macsec_eth_header *)skb->data;
@@ -905,7 +905,7 @@ static struct sk_buff *macsec_decrypt(struct sk_buff *skb, · 13 unmodified lines
905905 skb = skb_unshare(skb, GFP_ATOMIC);
906906 if (!skb) {
907907 aead_request_free(req);
908− return NULL;
908+ return ERR_PTR(-ENOMEM);
909909 }
910910 } else {
911911 /* integrity only: all headers + data authenticated */
@@ -921,14 +921,14 @@ static struct sk_buff *macsec_decrypt(struct sk_buff *skb, · 9 unmodified lines
921921 dev_hold(dev);
922922 ret = crypto_aead_decrypt(req);
923923 if (ret == -EINPROGRESS) {
924− return NULL;
924+ return ERR_PTR(ret);
925925 } else if (ret != 0) {
926926 /* decryption/authentication failed
927927 * 10.6 if validateFrames is disabled, deliver anyway
928928 */
929929 if (ret != -EBADMSG) {
930930 kfree_skb(skb);
931− skb = NULL;
931+ skb = ERR_PTR(ret);
932932 }
933933 } else {
934934 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
11461146 secy->validate_frames != MACSEC_VALIDATE_DISABLED)
11471147 skb = macsec_decrypt(skb, dev, rx_sa, sci, secy);
11481148
1149− if (!skb) {
1150− macsec_rxsa_put(rx_sa);
1149+ if (IS_ERR(skb)) {
1150+ /* the decrypt callback needs the reference */
1151+ if (PTR_ERR(skb) != -EINPROGRESS)
1152+ macsec_rxsa_put(rx_sa);
11511153 rcu_read_unlock();
11521154 *pskb = NULL;
11531155 return RX_HANDLER_CONSUMED;
@@ -1161,7 +1163,8 @@ deliver: · 7 unmodified lines
11611163 macsec_extra_len(macsec_skb_cb(skb)->has_sci));
11621164 macsec_reset_skb(skb, secy->netdev);
11631165
1164− macsec_rxsa_put(rx_sa);
1166+ if (rx_sa)
1167+ macsec_rxsa_put(rx_sa);
11651168 count_rx(dev, skb->len);
11661169
11671170 rcu_read_unlock();
@@ -1622,8 +1625,9 @@ static int macsec_add_rxsa(struct sk_buff *skb, struct genl_info *info) · 454 unmodified lines
16221625 }
16231626
16241627 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,
1626− secy->icv_len)) {
1628+ if (!rx_sa || init_rx_sa(rx_sa, nla_data(tb_sa[MACSEC_SA_ATTR_KEY]),
1629+ secy->key_len, secy->icv_len)) {
1630+ kfree(rx_sa);
16271631 rtnl_unlock();
16281632 return -ENOMEM;
16291633 }
@@ -1768,6 +1772,7 @@ static int macsec_add_txsa(struct sk_buff *skb, struct genl_info *info) · 138 unmodified lines
17681772 tx_sa = kmalloc(sizeof(*tx_sa), GFP_KERNEL);
17691773 if (!tx_sa || init_tx_sa(tx_sa, nla_data(tb_sa[MACSEC_SA_ATTR_KEY]),
17701774 secy->key_len, secy->icv_len)) {
1775+ kfree(tx_sa);
17711776 rtnl_unlock();
17721777 return -ENOMEM;
17731778 }
@@ -2227,7 +2232,8 @@ static int nla_put_secy(struct macsec_secy *secy, struct sk_buff *skb) · 453 unmodified lines
22272232 return 1;
22282233
22292234 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) ||
22312237 nla_put_u8(skb, MACSEC_SECY_ATTR_ICV_LEN, secy->icv_len) ||
22322238 nla_put_u8(skb, MACSEC_SECY_ATTR_OPER, secy->operational) ||
22332239 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
22682274 if (!hdr)
22692275 return -EMSGSIZE;
22702276
2271− rtnl_lock();
2277+ genl_dump_check_consistent(cb, hdr, &macsec_fam);
22722278
22732279 if (nla_put_u32(skb, MACSEC_ATTR_IFINDEX, dev->ifindex))
22742280 goto nla_put_failure;
@@ -2429,18 +2435,17 @@ static int dump_secy(struct macsec_secy *secy, struct net_device *dev, · 154 unmodified lines
24292435
24302436 nla_nest_end(skb, rxsc_list);
24312437
2432− rtnl_unlock();
2433−
24342438 genlmsg_end(skb, hdr);
24352439
24362440 return 0;
24372441
24382442 nla_put_failure:
2439− rtnl_unlock();
24402443 genlmsg_cancel(skb, hdr);
24412444 return -EMSGSIZE;
24422445 }
24432446
2447+static int macsec_generation = 1; /* protected by RTNL */
2448+
24442449 static int macsec_dump_txsc(struct sk_buff *skb, struct netlink_callback *cb)
24452450 {
24462451 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
24502455 dev_idx = cb->args[0];
24512456
24522457 d = 0;
2458+ rtnl_lock();
2459+
2460+ cb->seq = macsec_generation;
2461+
24532462 for_each_netdev(net, dev) {
24542463 struct macsec_secy *secy;
24552464
@@ -2467,6 +2476,7 @@ next: · 11 unmodified lines
24672476 }
24682477
24692478 done:
2479+ rtnl_unlock();
24702480 cb->args[0] = d;
24712481 return skb->len;
24722482 }
@@ -2920,10 +2930,14 @@ static void macsec_dellink(struct net_device *dev, struct list_head *head) · 447 unmodified lines
29202930 struct net_device *real_dev = macsec->real_dev;
29212931 struct macsec_rxh_data *rxd = macsec_data_rtnl(real_dev);
29222932
2933+ macsec_generation++;
2934+
29232935 unregister_netdevice_queue(dev, head);
29242936 list_del_rcu(&macsec->secys);
2925− if (list_empty(&rxd->secys))
2937+ if (list_empty(&rxd->secys)) {
29262938 netdev_rx_handler_unregister(real_dev);
2939+ kfree(rxd);
2940+ }
29272941
29282942 macsec_del_dev(macsec);
29292943 }
@@ -2945,8 +2959,10 @@ static int register_macsec_dev(struct net_device *real_dev, · 15 unmodified lines
29452959
29462960 err = netdev_rx_handler_register(real_dev, macsec_handle_frame,
29472961 rxd);
2948− if (err < 0)
2962+ if (err < 0) {
2963+ kfree(rxd);
29492964 return err;
2965+ }
29502966 }
29512967
29522968 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
30663082 if (err < 0)
30673083 goto del_dev;
30683084
3085+ macsec_generation++;
3086+
30693087 dev_hold(real_dev);
30703088
30713089 return 0;
@@ -3079,7 +3097,7 @@ unregister: · 7 unmodified lines
30793097
30803098 static int macsec_validate_attr(struct nlattr *tb[], struct nlattr *data[])
30813099 {
3082− u64 csid = DEFAULT_CIPHER_ID;
3100+ u64 csid = MACSEC_DEFAULT_CIPHER_ID;
30833101 u8 icv_len = DEFAULT_ICV_LEN;
30843102 int flag;
30853103 bool es, scb, sci;
@@ -3094,8 +3112,8 @@ static int macsec_validate_attr(struct nlattr *tb[], struct nlattr *data[]) · 8 unmodified lines
30943112 icv_len = nla_get_u8(data[IFLA_MACSEC_ICV_LEN]);
30953113
30963114 switch (csid) {
3097− case DEFAULT_CIPHER_ID:
3098− case DEFAULT_CIPHER_ALT:
3115+ case MACSEC_DEFAULT_CIPHER_ID:
3116+ case MACSEC_DEFAULT_CIPHER_ALT:
30993117 if (icv_len < MACSEC_MIN_ICV_LEN ||
31003118 icv_len > MACSEC_MAX_ICV_LEN)
31013119 return -EINVAL;
@@ -3129,8 +3147,8 @@ static int macsec_validate_attr(struct nlattr *tb[], struct nlattr *data[]) · 27 unmodified lines
31293147 nla_get_u8(data[IFLA_MACSEC_VALIDATION]) > MACSEC_VALIDATE_MAX)
31303148 return -EINVAL;
31313149
3132− if ((data[IFLA_MACSEC_PROTECT] &&
3133− nla_get_u8(data[IFLA_MACSEC_PROTECT])) &&
3150+ if ((data[IFLA_MACSEC_REPLAY_PROTECT] &&
3151+ nla_get_u8(data[IFLA_MACSEC_REPLAY_PROTECT])) &&
31343152 !data[IFLA_MACSEC_WINDOW])
31353153 return -EINVAL;
31363154
@@ -3168,7 +3186,8 @@ static int macsec_fill_info(struct sk_buff *skb, · 31 unmodified lines
31683186
31693187 if (nla_put_sci(skb, IFLA_MACSEC_SCI, secy->sci) ||
31703188 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) ||
31723191 nla_put_u8(skb, IFLA_MACSEC_ENCODING_SA, tx_sc->encoding_sa) ||
31733192 nla_put_u8(skb, IFLA_MACSEC_ENCRYPT, tx_sc->encrypt) ||
31743193 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
135135 /* Field definitions */
136136 #define HCI_ACCEL_MASK 0x7fff
137137 #define HCI_HOTKEY_DISABLE 0x0b
138−#define HCI_HOTKEY_ENABLE 0x01
138+#define HCI_HOTKEY_ENABLE 0x09
139139 #define HCI_HOTKEY_SPECIAL_FUNCTIONS 0x10
140140 #define HCI_LCD_BRIGHTNESS_BITS 3
141141 #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
26692669
26702670 /* Create device class needed by udev */
26712671 dev_class = class_create(THIS_MODULE, DRV_NAME);
2672− if (!dev_class) {
2672+ if (IS_ERR(dev_class)) {
26732673 rmcd_error("Unable to create " DRV_NAME " class");
2674− return -EINVAL;
2674+ return PTR_ERR(dev_class);
26752675 }
26762676
26772677 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
5656 {
5757 struct sclp_ctl_sccb ctl_sccb;
5858 struct sccb_header *sccb;
59+ unsigned long copied;
5960 int rc;
6061
6162 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
6566 sccb = (void *) get_zeroed_page(GFP_KERNEL | GFP_DMA);
6667 if (!sccb)
6768 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) {
6973 rc = -EFAULT;
7074 goto out_free;
7175 }
72− if (sccb->length > PAGE_SIZE || sccb->length < 8)
73− return -EINVAL;
74− if (copy_from_user(sccb, u64_to_uptr(ctl_sccb.sccb), sccb->length)) {
75− rc = -EFAULT;
76+ if (sccb->length < 8) {
77+ rc = -EINVAL;
7678 goto out_free;
7779 }
7880 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
688688 {
689689 struct flowi6 fl;
690690
691+ memset(&fl, 0, sizeof(fl));
691692 if (saddr)
692693 memcpy(&fl.saddr, saddr, sizeof(struct in6_addr));
693694 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
491491 genpd->dev_ops.active_wakeup = scpsys_active_wakeup;
492492
493493 /*
494− * With CONFIG_PM disabled turn on all domains to make the
495− * hardware usable.
494+ * Initially turn on all domains to make the domains 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.
496498 */
497− if (!IS_ENABLED(CONFIG_PM))
498− genpd->power_on(genpd);
499+ genpd->power_on(genpd);
499500
500− pm_genpd_init(genpd, NULL, true);
501+ pm_genpd_init(genpd, NULL, false);
501502 }
502503
503504 /*
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
172172 static int vpfe_update_pipe_state(struct vpfe_video_device *video)
173173 {
174174 struct vpfe_pipeline *pipe = &video->pipe;
175+ int ret;
175176
176− if (vpfe_prepare_pipeline(video))
177− return vpfe_prepare_pipeline(video);
177+ ret = vpfe_prepare_pipeline(video);
178+ if (ret)
179+ return ret;
178180
179181 /*
180182 * 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
182184 */
183185 if (pipe->input_num == 0) {
184186 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) {
186189 pr_err("Invalid external subdev\n");
187− return vpfe_update_current_ext_subdev(video);
190+ return ret;
188191 }
189192 } else {
190193 pipe->state = VPFE_PIPELINE_STREAM_SINGLESHOT;
@@ -667,6 +670,7 @@ static int vpfe_enum_fmt(struct file *file, void *priv, · 476 unmodified lines
667670 struct v4l2_subdev *subdev;
668671 struct v4l2_format format;
669672 struct media_pad *remote;
673+ int ret;
670674
671675 v4l2_dbg(1, debug, &vpfe_dev->v4l2_dev, "vpfe_enum_fmt\n");
672676
@@ -695,10 +699,11 @@ static int vpfe_enum_fmt(struct file *file, void *priv, · 22 unmodified lines
695699 sd_fmt.pad = remote->index;
696700 sd_fmt.which = V4L2_SUBDEV_FORMAT_ACTIVE;
697701 /* 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) {
699704 v4l2_err(&vpfe_dev->v4l2_dev,
700705 "invalid remote subdev for video node\n");
701− return v4l2_subdev_call(subdev, pad, get_fmt, NULL, &sd_fmt);
706+ return ret;
702707 }
703708 /* convert to pix format */
704709 mbus.code = sd_fmt.format.code;
@@ -725,6 +730,7 @@ static int vpfe_s_fmt(struct file *file, void *priv, · 20 unmodified lines
725730 struct vpfe_video_device *video = video_drvdata(file);
726731 struct vpfe_device *vpfe_dev = video->vpfe_dev;
727732 struct v4l2_format format;
733+ int ret;
728734
729735 v4l2_dbg(1, debug, &vpfe_dev->v4l2_dev, "vpfe_s_fmt\n");
730736 /* If streaming is started, return error */
@@ -733,8 +739,9 @@ static int vpfe_s_fmt(struct file *file, void *priv, · 2 unmodified lines
733739 return -EBUSY;
734740 }
735741 /* get adjacent subdev's output pad format */
736− if (__vpfe_video_get_format(video, &format))
737− return __vpfe_video_get_format(video, &format);
742+ ret = __vpfe_video_get_format(video, &format);
743+ if (ret)
744+ return ret;
738745 *fmt = format;
739746 video->fmt = *fmt;
740747 return 0;
@@ -757,11 +764,13 @@ static int vpfe_try_fmt(struct file *file, void *priv, · 16 unmodified lines
757764 struct vpfe_video_device *video = video_drvdata(file);
758765 struct vpfe_device *vpfe_dev = video->vpfe_dev;
759766 struct v4l2_format format;
767+ int ret;
760768
761769 v4l2_dbg(1, debug, &vpfe_dev->v4l2_dev, "vpfe_try_fmt\n");
762770 /* get adjacent subdev's output pad format */
763− if (__vpfe_video_get_format(video, &format))
764− return __vpfe_video_get_format(video, &format);
771+ ret = __vpfe_video_get_format(video, &format);
772+ if (ret)
773+ return ret;
765774
766775 *fmt = format;
767776 return 0;
@@ -838,8 +847,9 @@ static int vpfe_s_input(struct file *file, void *priv, unsigned int index) · 70 unmodified lines
838847
839848 v4l2_dbg(1, debug, &vpfe_dev->v4l2_dev, "vpfe_s_input\n");
840849
841− if (mutex_lock_interruptible(&video->lock))
842− return mutex_lock_interruptible(&video->lock);
850+ ret = mutex_lock_interruptible(&video->lock);
851+ if (ret)
852+ return ret;
843853 /*
844854 * If streaming is started return device busy
845855 * error
@@ -940,8 +950,9 @@ static int vpfe_s_std(struct file *file, void *priv, v4l2_std_id std_id) · 94 unmodified lines
940950 v4l2_dbg(1, debug, &vpfe_dev->v4l2_dev, "vpfe_s_std\n");
941951
942952 /* Call decoder driver function to set the standard */
943− if (mutex_lock_interruptible(&video->lock))
944− return mutex_lock_interruptible(&video->lock);
953+ ret = mutex_lock_interruptible(&video->lock);
954+ if (ret)
955+ return ret;
945956 sdinfo = video->current_ext_subdev;
946957 /* If streaming is started, return device busy error */
947958 if (video->started) {
@@ -1327,8 +1338,9 @@ static int vpfe_reqbufs(struct file *file, void *priv, · 379 unmodified lines
13271338 return -EINVAL;
13281339 }
13291340
1330− if (mutex_lock_interruptible(&video->lock))
1331− return mutex_lock_interruptible(&video->lock);
1341+ ret = mutex_lock_interruptible(&video->lock);
1342+ if (ret)
1343+ return ret;
13321344
13331345 if (video->io_usrs != 0) {
13341346 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
13541366 q->buf_struct_size = sizeof(struct vpfe_cap_buffer);
13551367 q->timestamp_flags = V4L2_BUF_FLAG_TIMESTAMP_MONOTONIC;
13561368
1357− if (vb2_queue_init(q)) {
1369+ ret = vb2_queue_init(q);
1370+ if (ret) {
13581371 v4l2_err(&vpfe_dev->v4l2_dev, "vb2_queue_init() failed\n");
13591372 vb2_dma_contig_cleanup_ctx(vpfe_dev->pdev);
1360− return vb2_queue_init(q);
1373+ return ret;
13611374 }
13621375
13631376 fh->io_allowed = 1;
@@ -1533,8 +1546,9 @@ static int vpfe_streamoff(struct file *file, void *priv, · 169 unmodified lines
15331546 return -EINVAL;
15341547 }
15351548
1536− if (mutex_lock_interruptible(&video->lock))
1537− return mutex_lock_interruptible(&video->lock);
1549+ ret = mutex_lock_interruptible(&video->lock);
1550+ if (ret)
1551+ return ret;
15381552
15391553 vpfe_stop_capture(video);
15401554 ret = vb2_streamoff(&video->buffer_queue, buf_type);
drivers/staging/rdma/hfi1/TODO+1−1
@@ -3,4 +3,4 @@ July, 2015 · 2 unmodified lines
33 - Remove unneeded file entries in sysfs
44 - Remove software processing of IB protocol and place in library for use
55 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
4949 #include <linux/vmalloc.h>
5050 #include <linux/io.h>
5151
52+#include <rdma/ib.h>
53+
5254 #include "hfi.h"
5355 #include "pio.h"
5456 #include "device.h"
@@ -190,6 +192,10 @@ static ssize_t hfi1_file_write(struct file *fp, const char __user *data, · 135 unmodified lines
190192 int uctxt_required = 1;
191193 int must_be_root = 0;
192194
195+ /* FIXME: This interface cannot continue out of staging */
196+ if (WARN_ON_ONCE(!ib_safe_file_access(fp)))
197+ return -EACCES;
198+
193199 if (count < sizeof(cmd)) {
194200 ret = -EINVAL;
195201 goto bail;
@@ -791,15 +797,16 @@ static int hfi1_file_close(struct inode *inode, struct file *fp) · 595 unmodified lines
791797 spin_unlock_irqrestore(&dd->uctxt_lock, flags);
792798
793799 dd->rcd[uctxt->ctxt] = NULL;
800+
801+ hfi1_user_exp_rcv_free(fdata);
802+ hfi1_clear_ctxt_pkey(dd, uctxt->ctxt);
803+
794804 uctxt->rcvwait_to = 0;
795805 uctxt->piowait_to = 0;
796806 uctxt->rcvnowait = 0;
797807 uctxt->pionowait = 0;
798808 uctxt->event_flags = 0;
799809
800− hfi1_user_exp_rcv_free(fdata);
801− hfi1_clear_ctxt_pkey(dd, uctxt->ctxt);
802−
803810 hfi1_stats.sps_ctxts--;
804811 if (++dd->freectxts == dd->num_user_contexts)
805812 aspm_enable_all(dd);
@@ -1127,27 +1134,13 @@ bail: · 321 unmodified lines
11271134
11281135 static int user_init(struct file *fp)
11291136 {
1130− int ret;
11311137 unsigned int rcvctrl_ops = 0;
11321138 struct hfi1_filedata *fd = fp->private_data;
11331139 struct hfi1_ctxtdata *uctxt = fd->uctxt;
11341140
11351141 /* make sure that the context has already been setup */
1136− if (!test_bit(HFI1_CTXT_SETUP_DONE, &uctxt->event_flags)) {
1137− ret = -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− }
1142+ if (!test_bit(HFI1_CTXT_SETUP_DONE, &uctxt->event_flags))
1143+ return -EFAULT;
11511144
11521145 /* initialize poll variables... */
11531146 uctxt->urgent = 0;
@@ -1202,19 +1195,7 @@ static int user_init(struct file *fp) · 48 unmodified lines
12021195 wake_up(&uctxt->wait);
12031196 }
12041197
1205−expected:
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);
1216−done:
1217− return ret;
1198+ return 0;
12181199 }
12191200
12201201 static 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
12611242 int ret = 0;
12621243
12631244 /*
1264− * Context should be set up only once (including allocation and
1245+ * Context should be set up only once, including allocation and
12651246 * programming of eager buffers. This is done if context sharing
12661247 * is not requested or by the master process.
12671248 */
@@ -1282,8 +1263,27 @@ static int setup_ctxt(struct file *fp) · 14 unmodified lines
12821263 if (ret)
12831264 goto done;
12841265 }
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;
12851272 }
1273+
12861274 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);
12871287 if (ret)
12881288 goto done;
12891289
@@ -1565,29 +1565,8 @@ static loff_t ui_lseek(struct file *filp, loff_t offset, int whence) · 275 unmodified lines
15651565 {
15661566 struct hfi1_devdata *dd = filp->private_data;
15671567
1568− switch (whence) {
1569− case SEEK_SET:
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;
1568+ return fixed_size_llseek(filp, offset, whence,
1569+ (dd->kregend - dd->kregbase) + DC8051_DATA_MEM_SIZE);
15911570 }
15921571
15931572 /* 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
7171 struct mm_struct *,
7272 unsigned long, unsigned long);
7373 static void mmu_notifier_mem_invalidate(struct mmu_notifier *,
74+ struct mm_struct *,
7475 unsigned long, unsigned long);
7576 static struct mmu_rb_node *__mmu_rb_search(struct mmu_rb_handler *,
7677 unsigned long, unsigned long);
@@ -137,7 +138,7 @@ void hfi1_mmu_rb_unregister(struct rb_root *root) · 60 unmodified lines
137138 rbnode = rb_entry(node, struct mmu_rb_node, node);
138139 rb_erase(node, root);
139140 if (handler->ops->remove)
140− handler->ops->remove(root, rbnode, false);
141+ handler->ops->remove(root, rbnode, NULL);
141142 }
142143 }
143144
@@ -176,7 +177,7 @@ unlock: · 32 unmodified lines
176177 return ret;
177178 }
178179
179−/* Caller must host handler lock */
180+/* Caller must hold handler lock */
180181 static struct mmu_rb_node *__mmu_rb_search(struct mmu_rb_handler *handler,
181182 unsigned long addr,
182183 unsigned long len)
@@ -200,15 +201,21 @@ static struct mmu_rb_node *__mmu_rb_search(struct mmu_rb_handler *handler, · 17 unmodified lines
200201 return node;
201202 }
202203
204+/* Caller must *not* hold handler lock. */
203205 static 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)
205207 {
208+ unsigned long flags;
209+
206210 /* Validity of handler and node pointers has been checked by caller. */
207211 hfi1_cdbg(MMU, "Removing node addr 0x%llx, len %u", node->addr,
208212 node->len);
213+ spin_lock_irqsave(&handler->lock, flags);
209214 __mmu_int_rb_remove(node, handler->root);
215+ spin_unlock_irqrestore(&handler->lock, flags);
216+
210217 if (handler->ops->remove)
211− handler->ops->remove(handler->root, node, arg);
218+ handler->ops->remove(handler->root, node, mm);
212219 }
213220
214221 struct 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
231238 void hfi1_mmu_rb_remove(struct rb_root *root, struct mmu_rb_node *node)
232239 {
233240 struct mmu_rb_handler *handler = find_mmu_handler(root);
234− unsigned long flags;
235241
236242 if (!handler || !node)
237243 return;
238244
239− spin_lock_irqsave(&handler->lock, flags);
240− __mmu_rb_remove(handler, node, false);
241− spin_unlock_irqrestore(&handler->lock, flags);
245+ __mmu_rb_remove(handler, node, NULL);
242246 }
243247
244248 static struct mmu_rb_handler *find_mmu_handler(struct rb_root *root)
@@ -260,7 +264,7 @@ unlock: · 15 unmodified lines
260264 static inline void mmu_notifier_page(struct mmu_notifier *mn,
261265 struct mm_struct *mm, unsigned long addr)
262266 {
263− mmu_notifier_mem_invalidate(mn, addr, addr + PAGE_SIZE);
267+ mmu_notifier_mem_invalidate(mn, mm, addr, addr + PAGE_SIZE);
264268 }
265269
266270 static 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
268272 unsigned long start,
269273 unsigned long end)
270274 {
271− mmu_notifier_mem_invalidate(mn, start, end);
275+ mmu_notifier_mem_invalidate(mn, mm, start, end);
272276 }
273277
274278 static void mmu_notifier_mem_invalidate(struct mmu_notifier *mn,
279+ struct mm_struct *mm,
275280 unsigned long start, unsigned long end)
276281 {
277282 struct mmu_rb_handler *handler =
278283 container_of(mn, struct mmu_rb_handler, mn);
279284 struct rb_root *root = handler->root;
280− struct mmu_rb_node *node;
285+ struct mmu_rb_node *node, *ptr = NULL;
281286 unsigned long flags;
282287
283288 spin_lock_irqsave(&handler->lock, flags);
284− for (node = __mmu_int_rb_iter_first(root, start, end - 1); node;
285− node = __mmu_int_rb_iter_next(node, start, end - 1)) {
289+ for (node = __mmu_int_rb_iter_first(root, start, end - 1);
290+ node; node = ptr) {
291+ /* Guard against node removal. */
292+ ptr = __mmu_int_rb_iter_next(node, start, end - 1);
286293 hfi1_cdbg(MMU, "Invalidating node addr 0x%llx, len %u",
287294 node->addr, node->len);
288− if (handler->ops->invalidate(root, node))
289− __mmu_rb_remove(handler, node, true);
295+ if (handler->ops->invalidate(root, node)) {
296+ spin_unlock_irqrestore(&handler->lock, flags);
297+ __mmu_rb_remove(handler, node, mm);
298+ spin_lock_irqsave(&handler->lock, flags);
299+ }
290300 }
291301 spin_unlock_irqrestore(&handler->lock, flags);
292302 }
drivers/staging/rdma/hfi1/mmu_rb.h+2−1
@@ -59,7 +59,8 @@ struct mmu_rb_node { · 58 unmodified lines
5959 struct mmu_rb_ops {
6060 bool (*filter)(struct mmu_rb_node *, unsigned long, unsigned long);
6161 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 *);
6364 int (*invalidate)(struct rb_root *, struct mmu_rb_node *);
6465 };
6566
drivers/staging/rdma/hfi1/qp.c+2−0
@@ -519,10 +519,12 @@ static void iowait_sdma_drained(struct iowait *wait) · 518 unmodified lines
519519 * do the flush work until that QP's
520520 * sdma work has finished.
521521 */
522+ spin_lock(&qp->s_lock);
522523 if (qp->s_flags & RVT_S_WAIT_DMA) {
523524 qp->s_flags &= ~RVT_S_WAIT_DMA;
524525 hfi1_schedule_send(qp);
525526 }
527+ spin_unlock(&qp->s_lock);
526528 }
527529
528530 /**
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
8787 static int set_rcvarray_entry(struct file *, unsigned long, u32,
8888 struct tid_group *, struct page **, unsigned);
8989 static int mmu_rb_insert(struct rb_root *, struct mmu_rb_node *);
90−static void mmu_rb_remove(struct rb_root *, struct mmu_rb_node *, bool);
90+static void mmu_rb_remove(struct rb_root *, struct mmu_rb_node *,
91+ struct mm_struct *);
9192 static int mmu_rb_invalidate(struct rb_root *, struct mmu_rb_node *);
9293 static int program_rcvarray(struct file *, unsigned long, struct tid_group *,
9394 struct tid_pageset *, unsigned, u16, struct page **,
@@ -254,6 +255,8 @@ int hfi1_user_exp_rcv_free(struct hfi1_filedata *fd) · 160 unmodified lines
254255 struct hfi1_ctxtdata *uctxt = fd->uctxt;
255256 struct tid_group *grp, *gptr;
256257
258+ if (!test_bit(HFI1_CTXT_SETUP_DONE, &uctxt->event_flags))
259+ return 0;
257260 /*
258261 * The notifier would have been removed when the process'es mm
259262 * was freed.
@@ -899,7 +902,7 @@ static int unprogram_rcvarray(struct file *fp, u32 tidinfo, · 639 unmodified lines
899902 if (!node || node->rcventry != (uctxt->expected_base + rcventry))
900903 return -EBADF;
901904 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);
903906 else
904907 hfi1_mmu_rb_remove(&fd->tid_rb_root, &node->mmu);
905908
@@ -965,7 +968,7 @@ static void unlock_exp_tids(struct hfi1_ctxtdata *uctxt, · 59 unmodified lines
965968 continue;
966969 if (HFI1_CAP_IS_USET(TID_UNMAP))
967970 mmu_rb_remove(&fd->tid_rb_root,
968− &node->mmu, false);
971+ &node->mmu, NULL);
969972 else
970973 hfi1_mmu_rb_remove(&fd->tid_rb_root,
971974 &node->mmu);
@@ -1032,7 +1035,7 @@ static int mmu_rb_insert(struct rb_root *root, struct mmu_rb_node *node) · 60 unmodified lines
10321035 }
10331036
10341037 static void mmu_rb_remove(struct rb_root *root, struct mmu_rb_node *node,
1035− bool notifier)
1038+ struct mm_struct *mm)
10361039 {
10371040 struct hfi1_filedata *fdata =
10381041 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
278278 static void user_sdma_free_request(struct user_sdma_request *, bool);
279279 static int pin_vector_pages(struct user_sdma_request *,
280280 struct user_sdma_iovec *);
281−static void unpin_vector_pages(struct mm_struct *, struct page **, unsigned);
281+static void unpin_vector_pages(struct mm_struct *, struct page **, unsigned,
282+ unsigned);
282283 static int check_header_template(struct user_sdma_request *,
283284 struct hfi1_pkt_header *, u32, u32);
284285 static int set_txreq_header(struct user_sdma_request *,
@@ -299,7 +300,8 @@ static int defer_packet_queue( · 14 unmodified lines
299300 static void activate_packet_queue(struct iowait *, int);
300301 static bool sdma_rb_filter(struct mmu_rb_node *, unsigned long, unsigned long);
301302 static int sdma_rb_insert(struct rb_root *, struct mmu_rb_node *);
302−static void sdma_rb_remove(struct rb_root *, struct mmu_rb_node *, bool);
303+static void sdma_rb_remove(struct rb_root *, struct mmu_rb_node *,
304+ struct mm_struct *);
303305 static int sdma_rb_invalidate(struct rb_root *, struct mmu_rb_node *);
304306
305307 static struct mmu_rb_ops sdma_rb_ops = {
@@ -1063,8 +1065,10 @@ static int pin_vector_pages(struct user_sdma_request *req, · 757 unmodified lines
10631065 rb_node = hfi1_mmu_rb_search(&pq->sdma_rb_root,
10641066 (unsigned long)iovec->iov.iov_base,
10651067 iovec->iov.iov_len);
1066− if (rb_node)
1068+ if (rb_node && !IS_ERR(rb_node))
10671069 node = container_of(rb_node, struct sdma_mmu_node, rb);
1070+ else
1071+ rb_node = NULL;
10681072
10691073 if (!node) {
10701074 node = kzalloc(sizeof(*node), GFP_KERNEL);
@@ -1107,7 +1111,8 @@ retry: · 36 unmodified lines
11071111 goto bail;
11081112 }
11091113 if (pinned != npages) {
1110− unpin_vector_pages(current->mm, pages, pinned);
1114+ unpin_vector_pages(current->mm, pages, node->npages,
1115+ pinned);
11111116 ret = -EFAULT;
11121117 goto bail;
11131118 }
@@ -1147,9 +1152,9 @@ bail: · 33 unmodified lines
11471152 }
11481153
11491154 static void unpin_vector_pages(struct mm_struct *mm, struct page **pages,
1150− unsigned npages)
1155+ unsigned start, unsigned npages)
11511156 {
1152− hfi1_release_user_pages(mm, pages, npages, 0);
1157+ hfi1_release_user_pages(mm, pages + start, npages, 0);
11531158 kfree(pages);
11541159 }
11551160
@@ -1502,7 +1507,7 @@ static void user_sdma_free_request(struct user_sdma_request *req, bool unpin) · 346 unmodified lines
15021507 &req->pq->sdma_rb_root,
15031508 (unsigned long)req->iovs[i].iov.iov_base,
15041509 req->iovs[i].iov.iov_len);
1505− if (!mnode)
1510+ if (!mnode || IS_ERR(mnode))
15061511 continue;
15071512
15081513 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
15471552 }
15481553
15491554 static void sdma_rb_remove(struct rb_root *root, struct mmu_rb_node *mnode,
1550− bool notifier)
1555+ struct mm_struct *mm)
15511556 {
15521557 struct sdma_mmu_node *node =
15531558 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
15571562 node->pq->n_locked -= node->npages;
15581563 spin_unlock(&node->pq->evict_lock);
15591564
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,
15611572 node->npages);
15621573 /*
15631574 * If called by the MMU notifier, we have to adjust the pinned
15641575 * page count ourselves.
15651576 */
1566− if (notifier)
1567− current->mm->pinned_vm -= node->npages;
1577+ if (mm)
1578+ mm->pinned_vm -= node->npages;
15681579 kfree(node);
15691580 }
15701581
drivers/thermal/hisi_thermal.c+2−2
@@ -68,12 +68,12 @@ static inline int _step_to_temp(int step) · 67 unmodified lines
6868 * Every step equals (1 * 200) / 255 celsius, and finally
6969 * need convert to millicelsius.
7070 */
71− return (HISI_TEMP_BASE + (step * 200 / 255)) * 1000;
71+ return (HISI_TEMP_BASE * 1000 + (step * 200000 / 255));
7272 }
7373
7474 static inline long _temp_to_step(long temp)
7575 {
76− return ((temp / 1000 - HISI_TEMP_BASE) * 255 / 200);
76+ return ((temp - HISI_TEMP_BASE * 1000) * 255) / 200000;
7777 }
7878
7979 static 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
959959 struct thermal_zone_device *tz = to_thermal_zone(dev); \
960960 \
961961 if (tz->tzp) \
962− return sprintf(buf, "%u\n", tz->tzp->name); \
962+ return sprintf(buf, "%d\n", tz->tzp->name); \
963963 else \
964964 return -EIO; \
965965 } \
drivers/tty/pty.c+8−10
@@ -626,7 +626,7 @@ static int pty_unix98_ioctl(struct tty_struct *tty, · 625 unmodified lines
626626 */
627627
628628 static struct tty_struct *ptm_unix98_lookup(struct tty_driver *driver,
629− struct inode *ptm_inode, int idx)
629+ struct file *file, int idx)
630630 {
631631 /* Master must be open via /dev/ptmx */
632632 return ERR_PTR(-EIO);
@@ -642,12 +642,12 @@ static struct tty_struct *ptm_unix98_lookup(struct tty_driver *driver, · 9 unmodified lines
642642 */
643643
644644 static struct tty_struct *pts_unix98_lookup(struct tty_driver *driver,
645− struct inode *pts_inode, int idx)
645+ struct file *file, int idx)
646646 {
647647 struct tty_struct *tty;
648648
649649 mutex_lock(&devpts_mutex);
650− tty = devpts_get_priv(pts_inode);
650+ tty = devpts_get_priv(file->f_path.dentry);
651651 mutex_unlock(&devpts_mutex);
652652 /* Master must be open before slave */
653653 if (!tty)
@@ -722,7 +722,7 @@ static int ptmx_open(struct inode *inode, struct file *filp) · 68 unmodified lines
722722 {
723723 struct pts_fs_info *fsi;
724724 struct tty_struct *tty;
725− struct inode *slave_inode;
725+ struct dentry *dentry;
726726 int retval;
727727 int index;
728728
@@ -769,14 +769,12 @@ static int ptmx_open(struct inode *inode, struct file *filp) · 40 unmodified lines
769769
770770 tty_add_file(tty, filp);
771771
772− slave_inode = devpts_pty_new(fsi,
773− MKDEV(UNIX98_PTY_SLAVE_MAJOR, index), index,
774− tty->link);
775− if (IS_ERR(slave_inode)) {
776− retval = PTR_ERR(slave_inode);
772+ dentry = devpts_pty_new(fsi, index, tty->link);
773+ if (IS_ERR(dentry)) {
774+ retval = PTR_ERR(dentry);
777775 goto err_release;
778776 }
779− tty->link->driver_data = slave_inode;
777+ tty->link->driver_data = dentry;
780778
781779 retval = ptm_driver->ops->open(tty, filp);
782780 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
13671367 * Locking: tty_mutex must be held. If the tty is found, bump the tty kref.
13681368 */
13691369 static struct tty_struct *tty_driver_lookup_tty(struct tty_driver *driver,
1370− struct inode *inode, int idx)
1370+ struct file *file, int idx)
13711371 {
13721372 struct tty_struct *tty;
13731373
13741374 if (driver->ops->lookup)
1375− tty = driver->ops->lookup(driver, inode, idx);
1375+ tty = driver->ops->lookup(driver, file, idx);
13761376 else
13771377 tty = driver->ttys[idx];
13781378
@@ -2040,7 +2040,7 @@ static struct tty_struct *tty_open_by_driver(dev_t device, struct inode *inode, · 661 unmodified lines
20402040 }
20412041
20422042 /* 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);
20442044 if (IS_ERR(tty)) {
20452045 mutex_unlock(&tty_mutex);
20462046 goto out;
drivers/usb/serial/option.c+148−7
@@ -375,18 +375,22 @@ static void option_instat_callback(struct urb *urb); · 374 unmodified lines
375375 #define HAIER_PRODUCT_CE81B 0x10f8
376376 #define HAIER_PRODUCT_CE100 0x2009
377377
378−/* Cinterion (formerly Siemens) products */
379−#define SIEMENS_VENDOR_ID 0x0681
380−#define CINTERION_VENDOR_ID 0x1e2d
378+/* Gemalto's Cinterion products (formerly Siemens) */
379+#define SIEMENS_VENDOR_ID 0x0681
380+#define CINTERION_VENDOR_ID 0x1e2d
381+#define CINTERION_PRODUCT_HC25_MDMNET 0x0040
381382 #define CINTERION_PRODUCT_HC25_MDM 0x0047
382−#define CINTERION_PRODUCT_HC25_MDMNET 0x0040
383+#define CINTERION_PRODUCT_HC28_MDMNET 0x004A /* same for HC28J */
383384 #define CINTERION_PRODUCT_HC28_MDM 0x004C
384−#define CINTERION_PRODUCT_HC28_MDMNET 0x004A /* same for HC28J */
385385 #define CINTERION_PRODUCT_EU3_E 0x0051
386386 #define CINTERION_PRODUCT_EU3_P 0x0052
387387 #define CINTERION_PRODUCT_PH8 0x0053
388388 #define CINTERION_PRODUCT_AHXX 0x0055
389389 #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
390394
391395 /* Olivetti products */
392396 #define OLIVETTI_VENDOR_ID 0x0b3c
@@ -633,6 +637,10 @@ static const struct option_blacklist_info telit_le922_blacklist_usbcfg3 = { · 240 unmodified lines
633637 .reserved = BIT(1) | BIT(2) | BIT(3),
634638 };
635639
640+static const struct option_blacklist_info cinterion_rmnet2_blacklist = {
641+ .reserved = BIT(4) | BIT(5),
642+};
643+
636644 static const struct usb_device_id option_ids[] = {
637645 { USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_COLT) },
638646 { USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_RICOLA) },
@@ -1602,7 +1610,79 @@ static const struct usb_device_id option_ids[] = { · 963 unmodified lines
16021610 .driver_info = (kernel_ulong_t)&net_intf3_blacklist },
16031611 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0178, 0xff, 0xff, 0xff),
16041612 .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) },
16061686 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0xff8b, 0xff, 0xff, 0xff) },
16071687 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0xff8c, 0xff, 0xff, 0xff) },
16081688 { 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
16131693 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0xff92, 0xff, 0xff, 0xff) },
16141694 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0xff93, 0xff, 0xff, 0xff) },
16151695 { 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) },
16161751 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0xffec, 0xff, 0xff, 0xff) },
16171752 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0xffee, 0xff, 0xff, 0xff) },
16181753 { 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
17121847 { USB_DEVICE_INTERFACE_CLASS(CINTERION_VENDOR_ID, CINTERION_PRODUCT_AHXX, 0xff) },
17131848 { USB_DEVICE(CINTERION_VENDOR_ID, CINTERION_PRODUCT_PLXX),
17141849 .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) },
17161857 { USB_DEVICE(CINTERION_VENDOR_ID, CINTERION_PRODUCT_HC28_MDMNET) },
17171858 { USB_DEVICE(SIEMENS_VENDOR_ID, CINTERION_PRODUCT_HC25_MDM) },
17181859 { 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
386386 atomic_read(&s->s_ref), atomic_read(&s->s_ref)-1);
387387 if (atomic_dec_and_test(&s->s_ref)) {
388388 if (s->s_auth.authorizer)
389− ceph_auth_destroy_authorizer(
390− s->s_mdsc->fsc->client->monc.auth,
391− s->s_auth.authorizer);
389+ ceph_auth_destroy_authorizer(s->s_auth.authorizer);
392390 kfree(s);
393391 }
394392 }
@@ -3900,7 +3898,7 @@ static struct ceph_auth_handshake *get_authorizer(struct ceph_connection *con, · 3505 unmodified lines
39003898 struct ceph_auth_handshake *auth = &s->s_auth;
39013899
39023900 if (force_new && auth->authorizer) {
3903− ceph_auth_destroy_authorizer(ac, auth->authorizer);
3901+ ceph_auth_destroy_authorizer(auth->authorizer);
39043902 auth->authorizer = NULL;
39053903 }
39063904 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
604604 *
605605 * The created inode is returned. Remove it from /dev/pts/ by devpts_pty_kill.
606606 */
607−struct inode *devpts_pty_new(struct pts_fs_info *fsi, dev_t device, int index,
608− void *priv)
607+struct dentry *devpts_pty_new(struct pts_fs_info *fsi, int index, void *priv)
609608 {
610609 struct dentry *dentry;
611610 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
629628 inode->i_uid = opts->setuid ? opts->uid : current_fsuid();
630629 inode->i_gid = opts->setgid ? opts->gid : current_fsgid();
631630 inode->i_mtime = inode->i_atime = inode->i_ctime = CURRENT_TIME;
632− init_special_inode(inode, S_IFCHR|opts->mode, device);
633− inode->i_private = priv;
631+ init_special_inode(inode, S_IFCHR|opts->mode, MKDEV(UNIX98_PTY_SLAVE_MAJOR, index));
634632
635633 sprintf(s, "%d", index);
636634
637− inode_lock(d_inode(root));
638−
639635 dentry = d_alloc_name(root, s);
640636 if (dentry) {
637+ dentry->d_fsdata = priv;
641638 d_add(dentry, inode);
642639 fsnotify_create(d_inode(root), dentry);
643640 } else {
644641 iput(inode);
645− inode = ERR_PTR(-ENOMEM);
642+ dentry = ERR_PTR(-ENOMEM);
646643 }
647644
648− inode_unlock(d_inode(root));
649−
650− return inode;
645+ return dentry;
651646 }
652647
653648 /**
@@ -656,24 +651,10 @@ struct inode *devpts_pty_new(struct pts_fs_info *fsi, dev_t device, int index, · 2 unmodified lines
656651 *
657652 * Returns whatever was passed as priv in devpts_pty_new for a given inode.
658653 */
659−void *devpts_get_priv(struct inode *pts_inode)
654+void *devpts_get_priv(struct dentry *dentry)
660655 {
661− struct dentry *dentry;
662− void *priv = NULL;
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;
656+ WARN_ON_ONCE(dentry->d_sb->s_magic != DEVPTS_SUPER_MAGIC);
657+ return dentry->d_fsdata;
677658 }
678659
679660 /**
@@ -682,24 +663,14 @@ void *devpts_get_priv(struct inode *pts_inode) · 2 unmodified lines
682663 *
683664 * This is an inverse operation of devpts_pty_new.
684665 */
685−void devpts_pty_kill(struct inode *inode)
666+void devpts_pty_kill(struct dentry *dentry)
686667 {
687− struct super_block *sb = pts_sb_from_inode(inode);
688− struct dentry *root = sb->s_root;
689− struct dentry *dentry;
668+ WARN_ON_ONCE(dentry->d_sb->s_magic != DEVPTS_SUPER_MAGIC);
690669
691− BUG_ON(inode->i_rdev == MKDEV(TTYAUX_MAJOR, PTMX_MINOR));
692−
693− inode_lock(d_inode(root));
694−
695− dentry = d_find_alias(inode);
696−
697− drop_nlink(inode);
670+ dentry->d_fsdata = NULL;
671+ drop_nlink(dentry->d_inode);
698672 d_delete(dentry);
699673 dput(dentry); /* d_alloc_name() in devpts_pty_new() */
700− dput(dentry); /* d_find_alias above */
701−
702− inode_unlock(d_inode(root));
703674 }
704675
705676 static 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
24552455
24562456 spin_unlock(&dlm->spinlock);
24572457
2458+ ret = 0;
2459+
24582460 done:
24592461 dlm_put(dlm);
24602462 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
15181518 return page;
15191519 }
15201520
1521+#ifdef CONFIG_TRANSPARENT_HUGEPAGE
1522+static 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+
15211547 static int gather_pte_stats(pmd_t *pmd, unsigned long addr,
15221548 unsigned long end, struct mm_walk *walk)
15231549 {
@@ -1527,14 +1553,14 @@ static int gather_pte_stats(pmd_t *pmd, unsigned long addr, · 3 unmodified lines
15271553 pte_t *orig_pte;
15281554 pte_t *pte;
15291555
1556+#ifdef CONFIG_TRANSPARENT_HUGEPAGE
15301557 ptl = pmd_trans_huge_lock(pmd, vma);
15311558 if (ptl) {
1532− pte_t huge_pte = *(pte_t *)pmd;
15331559 struct page *page;
15341560
1535− page = can_gather_numa_stats(huge_pte, vma, addr);
1561+ page = can_gather_numa_stats_pmd(*pmd, vma, addr);
15361562 if (page)
1537− gather_stats(page, md, pte_dirty(huge_pte),
1563+ gather_stats(page, md, pmd_dirty(*pmd),
15381564 HPAGE_PMD_SIZE/PAGE_SIZE);
15391565 spin_unlock(ptl);
15401566 return 0;
@@ -1542,6 +1568,7 @@ static int gather_pte_stats(pmd_t *pmd, unsigned long addr, · 1 unmodified line
15421568
15431569 if (pmd_trans_unstable(pmd))
15441570 return 0;
1571+#endif
15451572 orig_pte = pte = pte_offset_map_lock(walk->mm, pmd, addr, &ptl);
15461573 do {
15471574 struct page *page = can_gather_numa_stats(*pte, vma, addr);
include/linux/ceph/auth.h+5−5
@@ -12,9 +12,12 @@ · 11 unmodified lines
1212 */
1313
1414 struct ceph_auth_client;
15−struct ceph_authorizer;
1615 struct ceph_msg;
1716
17+struct ceph_authorizer {
18+ void (*destroy)(struct ceph_authorizer *);
19+};
20+
1821 struct ceph_auth_handshake {
1922 struct ceph_authorizer *authorizer;
2023 void *authorizer_buf;
@@ -62,8 +65,6 @@ struct ceph_auth_client_ops { · 41 unmodified lines
6265 struct ceph_auth_handshake *auth);
6366 int (*verify_authorizer_reply)(struct ceph_auth_client *ac,
6467 struct ceph_authorizer *a, size_t len);
65− void (*destroy_authorizer)(struct ceph_auth_client *ac,
66− struct ceph_authorizer *a);
6768 void (*invalidate_authorizer)(struct ceph_auth_client *ac,
6869 int peer_type);
6970
@@ -112,8 +113,7 @@ extern int ceph_auth_is_authenticated(struct ceph_auth_client *ac); · 42 unmodified lines
112113 extern int ceph_auth_create_authorizer(struct ceph_auth_client *ac,
113114 int peer_type,
114115 struct ceph_auth_handshake *auth);
115−extern void ceph_auth_destroy_authorizer(struct ceph_auth_client *ac,
116− struct ceph_authorizer *a);
116+void ceph_auth_destroy_authorizer(struct ceph_authorizer *a);
117117 extern int ceph_auth_update_authorizer(struct ceph_auth_client *ac,
118118 int peer_type,
119119 struct ceph_auth_handshake *a);
include/linux/ceph/osd_client.h+0−1
@@ -16,7 +16,6 @@ struct ceph_msg; · 15 unmodified lines
1616 struct ceph_snap_context;
1717 struct ceph_osd_request;
1818 struct ceph_osd_client;
19−struct ceph_authorizer;
2019
2120 /*
2221 * completion callback for async writepages
include/linux/cgroup-defs.h+1−0
@@ -444,6 +444,7 @@ struct cgroup_subsys { · 443 unmodified lines
444444 int (*can_attach)(struct cgroup_taskset *tset);
445445 void (*cancel_attach)(struct cgroup_taskset *tset);
446446 void (*attach)(struct cgroup_taskset *tset);
447+ void (*post_attach)(void);
447448 int (*can_fork)(struct task_struct *task);
448449 void (*cancel_fork)(struct task_struct *task);
449450 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
137137 task_unlock(current);
138138 }
139139
140−extern void cpuset_post_attach_flush(void);
141−
142140 #else /* !CONFIG_CPUSETS */
143141
144142 static inline bool cpusets_enabled(void) { return false; }
@@ -245,10 +243,6 @@ static inline bool read_mems_allowed_retry(unsigned int seq) · 100 unmodified lines
245243 return false;
246244 }
247245
248−static inline void cpuset_post_attach_flush(void)
249−{
250−}
251−
252246 #endif /* !CONFIG_CPUSETS */
253247
254248 #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
2727 void devpts_kill_index(struct pts_fs_info *, int);
2828
2929 /* mknod in devpts */
30−struct inode *devpts_pty_new(struct pts_fs_info *, dev_t, int, void *);
30+struct dentry *devpts_pty_new(struct pts_fs_info *, int, void *);
3131 /* get private structure */
32−void *devpts_get_priv(struct inode *pts_inode);
32+void *devpts_get_priv(struct dentry *);
3333 /* unlink */
34−void devpts_pty_kill(struct inode *inode);
34+void devpts_pty_kill(struct dentry *);
3535
3636 #endif
3737
include/linux/huge_mm.h+5−0
@@ -152,6 +152,7 @@ static inline bool is_huge_zero_pmd(pmd_t pmd) · 151 unmodified lines
152152 }
153153
154154 struct page *get_huge_zero_page(void);
155+void put_huge_zero_page(void);
155156
156157 #else /* CONFIG_TRANSPARENT_HUGEPAGE */
157158 #define HPAGE_PMD_SHIFT ({ BUILD_BUG(); 0; })
@@ -208,6 +209,10 @@ static inline bool is_huge_zero_page(struct page *page) · 50 unmodified lines
208209 return false;
209210 }
210211
212+static inline void put_huge_zero_page(void)
213+{
214+ BUILD_BUG();
215+}
211216
212217 static inline struct page *follow_devmap_pmd(struct vm_area_struct *vma,
213218 unsigned long addr, pmd_t *pmd, int flags)
include/linux/lockdep.h+5−3
@@ -196,9 +196,11 @@ struct lock_list { · 195 unmodified lines
196196 * We record lock dependency chains, so that we can cache them:
197197 */
198198 struct lock_chain {
199− u8 irq_context;
200− u8 depth;
201− u16 base;
199+ /* see BUILD_BUG_ON()s in lookup_chain_cache() */
200+ unsigned int irq_context : 2,
201+ depth : 6,
202+ base : 24;
203+ /* 4 byte hole */
202204 struct hlist_node entry;
203205 u64 chain_key;
204206 };
include/linux/mlx5/device.h+11−0
@@ -392,6 +392,17 @@ enum { · 391 unmodified lines
392392 MLX5_CAP_OFF_CMDIF_CSUM = 46,
393393 };
394394
395+enum {
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+
395406 struct mlx5_inbox_hdr {
396407 __be16 opcode;
397408 u8 rsvd[4];
include/linux/mlx5/driver.h+4−3
@@ -519,8 +519,9 @@ enum mlx5_device_state { · 518 unmodified lines
519519 };
520520
521521 enum mlx5_interface_state {
522− MLX5_INTERFACE_STATE_DOWN,
523− MLX5_INTERFACE_STATE_UP,
522+ MLX5_INTERFACE_STATE_DOWN = BIT(0),
523+ MLX5_INTERFACE_STATE_UP = BIT(1),
524+ MLX5_INTERFACE_STATE_SHUTDOWN = BIT(2),
524525 };
525526
526527 enum mlx5_pci_status {
@@ -544,7 +545,7 @@ struct mlx5_core_dev { · 17 unmodified lines
544545 enum mlx5_device_state state;
545546 /* sync interface state */
546547 struct mutex intf_state_mutex;
547− enum mlx5_interface_state interface_state;
548+ unsigned long intf_state;
548549 void (*event) (struct mlx5_core_dev *dev,
549550 enum mlx5_dev_event event,
550551 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
5454 int mlx5_query_port_admin_status(struct mlx5_core_dev *dev,
5555 enum mlx5_port_status *status);
5656
57−int mlx5_set_port_mtu(struct mlx5_core_dev *dev, int mtu, u8 port);
58−void mlx5_query_port_max_mtu(struct mlx5_core_dev *dev, int *max_mtu, u8 port);
59−void mlx5_query_port_oper_mtu(struct mlx5_core_dev *dev, int *oper_mtu,
57+int mlx5_set_port_mtu(struct mlx5_core_dev *dev, u16 mtu, u8 port);
58+void mlx5_query_port_max_mtu(struct mlx5_core_dev *dev, u16 *max_mtu, u8 port);
59+void mlx5_query_port_oper_mtu(struct mlx5_core_dev *dev, u16 *oper_mtu,
6060 u8 port);
6161
6262 int 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
4545 u16 vport, u8 *addr);
4646 int mlx5_modify_nic_vport_mac_address(struct mlx5_core_dev *dev,
4747 u16 vport, u8 *addr);
48+int mlx5_query_nic_vport_mtu(struct mlx5_core_dev *mdev, u16 *mtu);
49+int mlx5_modify_nic_vport_mtu(struct mlx5_core_dev *mdev, u16 mtu);
4850 int mlx5_query_nic_vport_system_image_guid(struct mlx5_core_dev *mdev,
4951 u64 *system_image_guid);
5052 int 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
10311031 page = compound_head(page);
10321032 if (atomic_read(compound_mapcount_ptr(page)) >= 0)
10331033 return true;
1034+ if (PageHuge(page))
1035+ return false;
10341036 for (i = 0; i < hpage_nr_pages(page); i++) {
10351037 if (atomic_read(&page[i]._mapcount) >= 0)
10361038 return true;
@@ -1138,6 +1140,8 @@ struct zap_details { · 101 unmodified lines
11381140
11391141 struct page *vm_normal_page(struct vm_area_struct *vma, unsigned long addr,
11401142 pte_t pte);
1143+struct page *vm_normal_page_pmd(struct vm_area_struct *vma, unsigned long addr,
1144+ pmd_t pmd);
11411145
11421146 int zap_vma_ptes(struct vm_area_struct *vma, unsigned long address,
11431147 unsigned long size);
include/linux/tty_driver.h+2−2
@@ -7,7 +7,7 @@ · 6 unmodified lines
77 * defined; unless noted otherwise, they are optional, and can be
88 * filled in with a null pointer.
99 *
10− * struct tty_struct * (*lookup)(struct tty_driver *self, int idx)
10+ * struct tty_struct * (*lookup)(struct tty_driver *self, struct file *, int idx)
1111 *
1212 * Return the tty device corresponding to idx, NULL if there is not
1313 * one currently in use and an ERR_PTR value on error. Called under
@@ -250,7 +250,7 @@ struct serial_icounter_struct; · 236 unmodified lines
250250
251251 struct tty_operations {
252252 struct tty_struct * (*lookup)(struct tty_driver *driver,
253− struct inode *inode, int idx);
253+ struct file *filp, int idx);
254254 int (*install)(struct tty_driver *driver, struct tty_struct *tty);
255255 void (*remove)(struct tty_driver *driver, struct tty_struct *tty);
256256 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
375375 /**
376376 * struct vb2_ops - driver-specific callbacks
377377 *
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.
378381 * @fill_user_buffer: given a vb2_buffer fill in the userspace structure.
379382 * For V4L2 this is a struct v4l2_buffer.
380383 * @fill_vb2_buffer: given a userspace structure, fill in the vb2_buffer.
@@ -384,6 +387,7 @@ struct vb2_ops { · 3 unmodified lines
384387 * the vb2_buffer struct.
385388 */
386389 struct vb2_buf_ops {
390+ int (*verify_planes_array)(struct vb2_buffer *vb, const void *pb);
387391 void (*fill_user_buffer)(struct vb2_buffer *vb, void *pb);
388392 int (*fill_vb2_buffer)(struct vb2_buffer *vb, const void *pb,
389393 struct vb2_plane *planes);
@@ -400,6 +404,9 @@ struct vb2_buf_ops { · 10 unmodified lines
400404 * @fileio_read_once: report EOF after reading the first buffer
401405 * @fileio_write_immediately: queue buffer after each write() call
402406 * @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.
403410 * @lock: pointer to a mutex that protects the vb2_queue struct. The
404411 * driver can set this to a mutex to let the v4l2 core serialize
405412 * the queuing ioctls. If the driver wants to handle locking
@@ -463,6 +470,7 @@ struct vb2_queue { · 57 unmodified lines
463470 unsigned fileio_read_once:1;
464471 unsigned fileio_write_immediately:1;
465472 unsigned allow_zero_bytesused:1;
473+ unsigned quirk_poll_must_check_waiting_for_buffers:1;
466474
467475 struct mutex *lock;
468476 void *owner;
include/net/switchdev.h+4−0
@@ -54,6 +54,8 @@ struct switchdev_attr { · 53 unmodified lines
5454 struct net_device *orig_dev;
5555 enum switchdev_attr_id id;
5656 u32 flags;
57+ void *complete_priv;
58+ void (*complete)(struct net_device *dev, int err, void *priv);
5759 union {
5860 struct netdev_phys_item_id ppid; /* PORT_PARENT_ID */
5961 u8 stp_state; /* PORT_STP_STATE */
@@ -75,6 +77,8 @@ struct switchdev_obj { · 15 unmodified lines
7577 struct net_device *orig_dev;
7678 enum switchdev_obj_id id;
7779 u32 flags;
80+ void *complete_priv;
81+ void (*complete)(struct net_device *dev, int err, void *priv);
7882 };
7983
8084 /* SWITCHDEV_OBJ_ID_PORT_VLAN */
include/rdma/ib.h+16−0
@@ -34,6 +34,7 @@ · 33 unmodified lines
3434 #define _RDMA_IB_H
3535
3636 #include <linux/types.h>
37+#include <linux/sched.h>
3738
3839 struct ib_addr {
3940 union {
@@ -86,4 +87,19 @@ struct sockaddr_ib { · 46 unmodified lines
8687 __u64 sib_scope_id;
8788 };
8889
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+ */
100+static 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+
89105 #endif /* _RDMA_IB_H */
include/sound/hda_i915.h+2−3
@@ -9,7 +9,7 @@ · 8 unmodified lines
99 #ifdef CONFIG_SND_HDA_I915
1010 int snd_hdac_set_codec_wakeup(struct hdac_bus *bus, bool enable);
1111 int snd_hdac_display_power(struct hdac_bus *bus, bool enable);
12−int snd_hdac_get_display_clk(struct hdac_bus *bus);
12+void snd_hdac_i915_set_bclk(struct hdac_bus *bus);
1313 int snd_hdac_sync_audio_rate(struct hdac_bus *bus, hda_nid_t nid, int rate);
1414 int snd_hdac_acomp_get_eld(struct hdac_bus *bus, hda_nid_t nid,
1515 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
2525 {
2626 return 0;
2727 }
28−static inline int snd_hdac_get_display_clk(struct hdac_bus *bus)
28+static inline void snd_hdac_i915_set_bclk(struct hdac_bus *bus)
2929 {
30− return 0;
3130 }
3231 static inline int snd_hdac_sync_audio_rate(struct hdac_bus *bus, hda_nid_t nid,
3332 int rate)
include/uapi/linux/if_macsec.h+2−2
@@ -19,8 +19,8 @@ · 18 unmodified lines
1919
2020 #define MACSEC_MAX_KEY_LEN 128
2121
22−#define DEFAULT_CIPHER_ID 0x0080020001000001ULL
23−#define DEFAULT_CIPHER_ALT 0x0080C20001000001ULL
22+#define MACSEC_DEFAULT_CIPHER_ID 0x0080020001000001ULL
23+#define MACSEC_DEFAULT_CIPHER_ALT 0x0080C20001000001ULL
2424
2525 #define MACSEC_MIN_ICV_LEN 8
2626 #define MACSEC_MAX_ICV_LEN 32
include/uapi/linux/v4l2-dv-timings.h+20−10
@@ -183,7 +183,8 @@ · 182 unmodified lines
183183
184184 #define V4L2_DV_BT_CEA_3840X2160P24 { \
185185 .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, \
187188 297000000, 1276, 88, 296, 8, 10, 72, 0, 0, 0, \
188189 V4L2_DV_BT_STD_CEA861, \
189190 V4L2_DV_FL_CAN_REDUCE_FPS | V4L2_DV_FL_IS_CE_VIDEO) \
@@ -191,14 +192,16 @@ · 1 unmodified line
191192
192193 #define V4L2_DV_BT_CEA_3840X2160P25 { \
193194 .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, \
195197 297000000, 1056, 88, 296, 8, 10, 72, 0, 0, 0, \
196198 V4L2_DV_BT_STD_CEA861, V4L2_DV_FL_IS_CE_VIDEO) \
197199 }
198200
199201 #define V4L2_DV_BT_CEA_3840X2160P30 { \
200202 .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, \
202205 297000000, 176, 88, 296, 8, 10, 72, 0, 0, 0, \
203206 V4L2_DV_BT_STD_CEA861, \
204207 V4L2_DV_FL_CAN_REDUCE_FPS | V4L2_DV_FL_IS_CE_VIDEO) \
@@ -206,14 +209,16 @@ · 1 unmodified line
206209
207210 #define V4L2_DV_BT_CEA_3840X2160P50 { \
208211 .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, \
210214 594000000, 1056, 88, 296, 8, 10, 72, 0, 0, 0, \
211215 V4L2_DV_BT_STD_CEA861, V4L2_DV_FL_IS_CE_VIDEO) \
212216 }
213217
214218 #define V4L2_DV_BT_CEA_3840X2160P60 { \
215219 .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, \
217222 594000000, 176, 88, 296, 8, 10, 72, 0, 0, 0, \
218223 V4L2_DV_BT_STD_CEA861, \
219224 V4L2_DV_FL_CAN_REDUCE_FPS | V4L2_DV_FL_IS_CE_VIDEO) \
@@ -221,7 +226,8 @@ · 1 unmodified line
221226
222227 #define V4L2_DV_BT_CEA_4096X2160P24 { \
223228 .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, \
225231 297000000, 1020, 88, 296, 8, 10, 72, 0, 0, 0, \
226232 V4L2_DV_BT_STD_CEA861, \
227233 V4L2_DV_FL_CAN_REDUCE_FPS | V4L2_DV_FL_IS_CE_VIDEO) \
@@ -229,14 +235,16 @@ · 1 unmodified line
229235
230236 #define V4L2_DV_BT_CEA_4096X2160P25 { \
231237 .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, \
233240 297000000, 968, 88, 128, 8, 10, 72, 0, 0, 0, \
234241 V4L2_DV_BT_STD_CEA861, V4L2_DV_FL_IS_CE_VIDEO) \
235242 }
236243
237244 #define V4L2_DV_BT_CEA_4096X2160P30 { \
238245 .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, \
240248 297000000, 88, 88, 128, 8, 10, 72, 0, 0, 0, \
241249 V4L2_DV_BT_STD_CEA861, \
242250 V4L2_DV_FL_CAN_REDUCE_FPS | V4L2_DV_FL_IS_CE_VIDEO) \
@@ -244,14 +252,16 @@ · 1 unmodified line
244252
245253 #define V4L2_DV_BT_CEA_4096X2160P50 { \
246254 .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, \
248257 594000000, 968, 88, 128, 8, 10, 72, 0, 0, 0, \
249258 V4L2_DV_BT_STD_CEA861, V4L2_DV_FL_IS_CE_VIDEO) \
250259 }
251260
252261 #define V4L2_DV_BT_CEA_4096X2160P60 { \
253262 .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, \
255265 594000000, 88, 88, 128, 8, 10, 72, 0, 0, 0, \
256266 V4L2_DV_BT_STD_CEA861, \
257267 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
20302030 if (IS_ERR(map)) {
20312031 verbose("fd %d is not pointing to valid bpf_map\n",
20322032 insn->imm);
2033− fdput(f);
20342033 return PTR_ERR(map);
20352034 }
20362035
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
28252825 size_t nbytes, loff_t off, bool threadgroup)
28262826 {
28272827 struct task_struct *tsk;
2828+ struct cgroup_subsys *ss;
28282829 struct cgroup *cgrp;
28292830 pid_t pid;
2830− int ret;
2831+ int ssid, ret;
28312832
28322833 if (kstrtoint(strstrip(buf), 0, &pid) || pid < 0)
28332834 return -EINVAL;
@@ -2875,8 +2876,10 @@ out_unlock_rcu: · 41 unmodified lines
28752876 rcu_read_unlock();
28762877 out_unlock_threadgroup:
28772878 percpu_up_write(&cgroup_threadgroup_rwsem);
2879+ for_each_subsys(ss, ssid)
2880+ if (ss->post_attach)
2881+ ss->post_attach();
28782882 cgroup_kn_unlock(of->kn);
2879− cpuset_post_attach_flush();
28802883 return ret ?: nbytes;
28812884 }
28822885
kernel/cpuset.c+2−2
@@ -58,7 +58,6 @@ · 57 unmodified lines
5858 #include <asm/uaccess.h>
5959 #include <linux/atomic.h>
6060 #include <linux/mutex.h>
61−#include <linux/workqueue.h>
6261 #include <linux/cgroup.h>
6362 #include <linux/wait.h>
6463
@@ -1016,7 +1015,7 @@ static void cpuset_migrate_mm(struct mm_struct *mm, const nodemask_t *from, · 951 unmodified lines
10161015 }
10171016 }
10181017
1019−void cpuset_post_attach_flush(void)
1018+static void cpuset_post_attach(void)
10201019 {
10211020 flush_workqueue(cpuset_migrate_mm_wq);
10221021 }
@@ -2087,6 +2086,7 @@ struct cgroup_subsys cpuset_cgrp_subsys = { · 1064 unmodified lines
20872086 .can_attach = cpuset_can_attach,
20882087 .cancel_attach = cpuset_cancel_attach,
20892088 .attach = cpuset_attach,
2089+ .post_attach = cpuset_post_attach,
20902090 .bind = cpuset_bind,
20912091 .legacy_cftypes = files,
20922092 .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
412412 if (ret || !write)
413413 return ret;
414414
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) {
416417 printk(KERN_WARNING
417418 "perf: Dynamic interrupt throttling disabled, can hang your system!\n");
418419 WRITE_ONCE(perf_sample_allowed_ns, 0);
@@ -1105,6 +1106,7 @@ static void put_ctx(struct perf_event_context *ctx) · 686 unmodified lines
11051106 * function.
11061107 *
11071108 * Lock order:
1109+ * cred_guard_mutex
11081110 * task_struct::perf_event_mutex
11091111 * perf_event_context::mutex
11101112 * perf_event::child_mutex;
@@ -3420,7 +3422,6 @@ static struct task_struct * · 2309 unmodified lines
34203422 find_lively_task_by_vpid(pid_t vpid)
34213423 {
34223424 struct task_struct *task;
3423− int err;
34243425
34253426 rcu_read_lock();
34263427 if (!vpid)
@@ -3434,16 +3435,7 @@ find_lively_task_by_vpid(pid_t vpid) · 7 unmodified lines
34343435 if (!task)
34353436 return ERR_PTR(-ESRCH);
34363437
3437− /* Reuse ptrace permission checks for now. */
3438− err = -EACCES;
3439− if (!ptrace_may_access(task, PTRACE_MODE_READ_REALCREDS))
3440− goto errout;
3441−
34423438 return task;
3443−errout:
3444− put_task_struct(task);
3445− return ERR_PTR(err);
3446−
34473439 }
34483440
34493441 /*
@@ -8413,6 +8405,24 @@ SYSCALL_DEFINE5(perf_event_open, · 4963 unmodified lines
84138405
84148406 get_online_cpus();
84158407
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+
84168426 if (flags & PERF_FLAG_PID_CGROUP)
84178427 cgroup_fd = pid;
84188428
@@ -8420,7 +8430,7 @@ SYSCALL_DEFINE5(perf_event_open, · 1 unmodified line
84208430 NULL, NULL, cgroup_fd);
84218431 if (IS_ERR(event)) {
84228432 err = PTR_ERR(event);
8423− goto err_cpus;
8433+ goto err_cred;
84248434 }
84258435
84268436 if (is_sampling_event(event)) {
@@ -8479,11 +8489,6 @@ SYSCALL_DEFINE5(perf_event_open, · 52 unmodified lines
84798489 goto err_context;
84808490 }
84818491
8482− if (task) {
8483− put_task_struct(task);
8484− task = NULL;
8485− }
8486−
84878492 /*
84888493 * Look up the group leader (we will attach this event to it):
84898494 */
@@ -8581,6 +8586,11 @@ SYSCALL_DEFINE5(perf_event_open, · 91 unmodified lines
85818586
85828587 WARN_ON_ONCE(ctx->parent_ctx);
85838588
8589+ /*
8590+ * This is the point on no return; we cannot fail hereafter. This is
8591+ * where we start modifying current state.
8592+ */
8593+
85848594 if (move_group) {
85858595 /*
85868596 * See perf_event_ctx_lock() for comments on the details
@@ -8652,6 +8662,11 @@ SYSCALL_DEFINE5(perf_event_open, · 65 unmodified lines
86528662 mutex_unlock(&gctx->mutex);
86538663 mutex_unlock(&ctx->mutex);
86548664
8665+ if (task) {
8666+ mutex_unlock(&task->signal->cred_guard_mutex);
8667+ put_task_struct(task);
8668+ }
8669+
86558670 put_online_cpus();
86568671
86578672 mutex_lock(&current->perf_event_mutex);
@@ -8684,6 +8699,9 @@ err_alloc: · 26 unmodified lines
86848699 */
86858700 if (!event_file)
86868701 free_event(event);
8702+err_cred:
8703+ if (task)
8704+ mutex_unlock(&task->signal->cred_guard_mutex);
86878705 err_cpus:
86888706 put_online_cpus();
86898707 err_task:
@@ -8968,6 +8986,9 @@ static void perf_event_exit_task_context(struct task_struct *child, int ctxn) · 278 unmodified lines
89688986
89698987 /*
89708988 * 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().
89718992 */
89728993 void perf_event_exit_task(struct task_struct *child)
89738994 {
kernel/kcov.c+2−1
@@ -1,5 +1,6 @@
11 #define pr_fmt(fmt) "kcov: " fmt
22
3+#define DISABLE_BRANCH_PROFILING
34 #include <linux/compiler.h>
45 #include <linux/types.h>
56 #include <linux/file.h>
@@ -43,7 +44,7 @@ struct kcov { · 37 unmodified lines
4344 * Entry point from instrumented code.
4445 * This is called once per basic-block/edge.
4546 */
46−void __sanitizer_cov_trace_pc(void)
47+void notrace __sanitizer_cov_trace_pc(void)
4748 {
4849 struct task_struct *t;
4950 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
14151415 VMCOREINFO_OFFSET(page, lru);
14161416 VMCOREINFO_OFFSET(page, _mapcount);
14171417 VMCOREINFO_OFFSET(page, private);
1418+ VMCOREINFO_OFFSET(page, compound_dtor);
1419+ VMCOREINFO_OFFSET(page, compound_order);
1420+ VMCOREINFO_OFFSET(page, compound_head);
14181421 VMCOREINFO_OFFSET(pglist_data, node_zones);
14191422 VMCOREINFO_OFFSET(pglist_data, nr_zones);
14201423 #ifdef CONFIG_FLAT_NODE_MEM_MAP
@@ -1447,8 +1450,8 @@ static int __init crash_save_vmcoreinfo_init(void) · 26 unmodified lines
14471450 #ifdef CONFIG_X86
14481451 VMCOREINFO_NUMBER(KERNEL_IMAGE_SIZE);
14491452 #endif
1450−#ifdef CONFIG_HUGETLBFS
1451− VMCOREINFO_SYMBOL(free_huge_page);
1453+#ifdef CONFIG_HUGETLB_PAGE
1454+ VMCOREINFO_NUMBER(HUGETLB_PAGE_DTOR);
14521455 #endif
14531456
14541457 arch_crash_save_vmcoreinfo();
kernel/locking/lockdep.c+34−3
@@ -2176,15 +2176,37 @@ cache_hit: · 2175 unmodified lines
21762176 chain->irq_context = hlock->irq_context;
21772177 i = get_first_held_lock(curr, hlock);
21782178 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+
21792184 if (likely(nr_chain_hlocks + chain->depth <= MAX_LOCKDEP_CHAIN_HLOCKS)) {
21802185 chain->base = nr_chain_hlocks;
2181− nr_chain_hlocks += chain->depth;
21822186 for (j = 0; j < chain->depth - 1; j++, i++) {
21832187 int lock_id = curr->held_locks[i].class_idx - 1;
21842188 chain_hlocks[chain->base + j] = lock_id;
21852189 }
21862190 chain_hlocks[chain->base + j] = class - lock_classes;
21872191 }
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+
21882210 hlist_add_head_rcu(&chain->entry, hash_head);
21892211 debug_atomic_inc(chain_lookup_misses);
21902212 inc_chains();
@@ -2932,6 +2954,11 @@ static int mark_irqflags(struct task_struct *curr, struct held_lock *hlock) · 741 unmodified lines
29322954 return 1;
29332955 }
29342956
2957+static inline unsigned int task_irq_context(struct task_struct *task)
2958+{
2959+ return 2 * !!task->hardirq_context + !!task->softirq_context;
2960+}
2961+
29352962 static int separate_irq_context(struct task_struct *curr,
29362963 struct held_lock *hlock)
29372964 {
@@ -2940,8 +2967,6 @@ static int separate_irq_context(struct task_struct *curr, · 2 unmodified lines
29402967 /*
29412968 * Keep track of points where we cross into an interrupt context:
29422969 */
2943− hlock->irq_context = 2*(curr->hardirq_context ? 1 : 0) +
2944− curr->softirq_context;
29452970 if (depth) {
29462971 struct held_lock *prev_hlock;
29472972
@@ -2973,6 +2998,11 @@ static inline int mark_irqflags(struct task_struct *curr, · 25 unmodified lines
29732998 return 1;
29742999 }
29753000
3001+static inline unsigned int task_irq_context(struct task_struct *task)
3002+{
3003+ return 0;
3004+}
3005+
29763006 static inline int separate_irq_context(struct task_struct *curr,
29773007 struct held_lock *hlock)
29783008 {
@@ -3241,6 +3271,7 @@ static int __lock_acquire(struct lockdep_map *lock, unsigned int subclass, · 262 unmodified lines
32413271 hlock->acquire_ip = ip;
32423272 hlock->instance = lock;
32433273 hlock->nest_lock = nest_lock;
3274+ hlock->irq_context = task_irq_context(curr);
32443275 hlock->trylock = trylock;
32453276 hlock->read = read;
32463277 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
141141 int i;
142142
143143 if (v == SEQ_START_TOKEN) {
144+ if (nr_chain_hlocks > MAX_LOCKDEP_CHAIN_HLOCKS)
145+ seq_printf(m, "(buggered) ");
144146 seq_printf(m, "all lock chains:\n");
145147 return 0;
146148 }
kernel/workqueue.c+29−0
@@ -666,6 +666,35 @@ static void set_work_pool_and_clear_pending(struct work_struct *work, · 665 unmodified lines
666666 */
667667 smp_wmb();
668668 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();
669698 }
670699
671700 static 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
210210 goto fast_exit;
211211
212212 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−
217213 bucket = &stack_table[hash & STACK_HASH_MASK];
218214
219215 /*
mm/huge_memory.c+5−7
@@ -232,7 +232,7 @@ retry: · 231 unmodified lines
232232 return READ_ONCE(huge_zero_page);
233233 }
234234
235−static void put_huge_zero_page(void)
235+void put_huge_zero_page(void)
236236 {
237237 /*
238238 * 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
16841684 if (vma_is_dax(vma)) {
16851685 spin_unlock(ptl);
16861686 if (is_huge_zero_pmd(orig_pmd))
1687− put_huge_zero_page();
1687+ tlb_remove_page(tlb, pmd_page(orig_pmd));
16881688 } else if (is_huge_zero_pmd(orig_pmd)) {
16891689 pte_free(tlb->mm, pgtable_trans_huge_withdraw(tlb->mm, pmd));
16901690 atomic_long_dec(&tlb->mm->nr_ptes);
16911691 spin_unlock(ptl);
1692− put_huge_zero_page();
1692+ tlb_remove_page(tlb, pmd_page(orig_pmd));
16931693 } else {
16941694 struct page *page = pmd_page(orig_pmd);
16951695 page_remove_rmap(page, true);
@@ -1960,10 +1960,9 @@ int khugepaged_enter_vma_merge(struct vm_area_struct *vma, · 264 unmodified lines
19601960 * page fault if needed.
19611961 */
19621962 return 0;
1963− if (vma->vm_ops)
1963+ if (vma->vm_ops || (vm_flags & VM_NO_THP))
19641964 /* khugepaged not yet working on file or special mappings */
19651965 return 0;
1966− VM_BUG_ON_VMA(vm_flags & VM_NO_THP, vma);
19671966 hstart = (vma->vm_start + ~HPAGE_PMD_MASK) & HPAGE_PMD_MASK;
19681967 hend = vma->vm_end & HPAGE_PMD_MASK;
19691968 if (hstart < hend)
@@ -2352,8 +2351,7 @@ static bool hugepage_vma_check(struct vm_area_struct *vma) · 382 unmodified lines
23522351 return false;
23532352 if (is_vma_temporary_stack(vma))
23542353 return false;
2355− VM_BUG_ON_VMA(vma->vm_flags & VM_NO_THP, vma);
2356− return true;
2354+ return !(vma->vm_flags & VM_NO_THP);
23572355 }
23582356
23592357 static 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
207207 /* "mc" and its members are protected by cgroup_mutex */
208208 static struct move_charge_struct {
209209 spinlock_t lock; /* for from, to */
210+ struct mm_struct *mm;
210211 struct mem_cgroup *from;
211212 struct mem_cgroup *to;
212213 unsigned long flags;
@@ -4667,6 +4668,8 @@ static void __mem_cgroup_clear_mc(void) · 4454 unmodified lines
46674668
46684669 static void mem_cgroup_clear_mc(void)
46694670 {
4671+ struct mm_struct *mm = mc.mm;
4672+
46704673 /*
46714674 * we must clear moving_task before waking up waiters at the end of
46724675 * task migration.
@@ -4676,7 +4679,10 @@ static void mem_cgroup_clear_mc(void) · 3 unmodified lines
46764679 spin_lock(&mc.lock);
46774680 mc.from = NULL;
46784681 mc.to = NULL;
4682+ mc.mm = NULL;
46794683 spin_unlock(&mc.lock);
4684+
4685+ mmput(mm);
46804686 }
46814687
46824688 static 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
47334739 VM_BUG_ON(mc.moved_swap);
47344740
47354741 spin_lock(&mc.lock);
4742+ mc.mm = mm;
47364743 mc.from = from;
47374744 mc.to = memcg;
47384745 mc.flags = move_flags;
@@ -4742,8 +4749,9 @@ static int mem_cgroup_can_attach(struct cgroup_taskset *tset) · 3 unmodified lines
47424749 ret = mem_cgroup_precharge_mc(mm);
47434750 if (ret)
47444751 mem_cgroup_clear_mc();
4752+ } else {
4753+ mmput(mm);
47454754 }
4746− mmput(mm);
47474755 return ret;
47484756 }
47494757
@@ -4852,11 +4860,11 @@ put: /* get_mctgt_type() gets the page */ · 102 unmodified lines
48524860 return ret;
48534861 }
48544862
4855−static void mem_cgroup_move_charge(struct mm_struct *mm)
4863+static void mem_cgroup_move_charge(void)
48564864 {
48574865 struct mm_walk mem_cgroup_move_charge_walk = {
48584866 .pmd_entry = mem_cgroup_move_charge_pte_range,
4859− .mm = mm,
4867+ .mm = mc.mm,
48604868 };
48614869
48624870 lru_add_drain_all();
@@ -4868,7 +4876,7 @@ static void mem_cgroup_move_charge(struct mm_struct *mm) · 5 unmodified lines
48684876 atomic_inc(&mc.from->moving_account);
48694877 synchronize_rcu();
48704878 retry:
4871− if (unlikely(!down_read_trylock(&mm->mmap_sem))) {
4879+ if (unlikely(!down_read_trylock(&mc.mm->mmap_sem))) {
48724880 /*
48734881 * Someone who are holding the mmap_sem might be waiting in
48744882 * waitq. So we cancel all extra charges, wake up all waiters,
@@ -4885,23 +4893,16 @@ retry: · 10 unmodified lines
48854893 * additional charge, the page walk just aborts.
48864894 */
48874895 walk_page_range(0, ~0UL, &mem_cgroup_move_charge_walk);
4888− up_read(&mm->mmap_sem);
4896+ up_read(&mc.mm->mmap_sem);
48894897 atomic_dec(&mc.from->moving_account);
48904898 }
48914899
4892−static void mem_cgroup_move_task(struct cgroup_taskset *tset)
4900+static void mem_cgroup_move_task(void)
48934901 {
4894− struct cgroup_subsys_state *css;
4895− struct task_struct *p = cgroup_taskset_first(tset, &css);
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)
4902+ if (mc.to) {
4903+ mem_cgroup_move_charge();
49044904 mem_cgroup_clear_mc();
4905+ }
49054906 }
49064907 #else /* !CONFIG_MMU */
49074908 static 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
49114912 static void mem_cgroup_cancel_attach(struct cgroup_taskset *tset)
49124913 {
49134914 }
4914−static void mem_cgroup_move_task(struct cgroup_taskset *tset)
4915+static void mem_cgroup_move_task(void)
49154916 {
49164917 }
49174918 #endif
@@ -5195,7 +5196,7 @@ struct cgroup_subsys memory_cgrp_subsys = { · 277 unmodified lines
51955196 .css_reset = mem_cgroup_css_reset,
51965197 .can_attach = mem_cgroup_can_attach,
51975198 .cancel_attach = mem_cgroup_cancel_attach,
5198− .attach = mem_cgroup_move_task,
5199+ .post_attach = mem_cgroup_move_task,
51995200 .bind = mem_cgroup_bind,
52005201 .dfl_cftypes = memory_files,
52015202 .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
888888 }
889889 }
890890
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;
892900 }
893901 EXPORT_SYMBOL_GPL(get_hwpoison_page);
894902
mm/memory.c+40−0
@@ -789,6 +789,46 @@ out: · 788 unmodified lines
789789 return pfn_to_page(pfn);
790790 }
791791
792+#ifdef CONFIG_TRANSPARENT_HUGEPAGE
793+struct 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+ */
827+out:
828+ return pfn_to_page(pfn);
829+}
830+#endif
831+
792832 /*
793833 * copy one vm_area from one task to the other. Assumes the page tables
794834 * 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
975975 dec_zone_page_state(page, NR_ISOLATED_ANON +
976976 page_is_file_cache(page));
977977 /* 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+ */
979985 put_page(page);
980986 if (!test_set_page_hwpoison(page))
981987 num_poisoned_pages_inc();
mm/page_io.c+5−1
@@ -353,7 +353,11 @@ int swap_readpage(struct page *page) · 352 unmodified lines
353353
354354 ret = bdev_read_page(sis->bdev, swap_page_sector(page), page);
355355 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+
357361 count_vm_event(PSWPIN);
358362 return 0;
359363 }
mm/swap.c+5−0
@@ -728,6 +728,11 @@ void release_pages(struct page **pages, int nr, bool cold) · 727 unmodified lines
728728 zone = NULL;
729729 }
730730
731+ if (is_huge_zero_page(page)) {
732+ put_huge_zero_page();
733+ continue;
734+ }
735+
731736 page = compound_head(page);
732737 if (!put_page_testzero(page))
733738 continue;
mm/vmscan.c+15−15
@@ -2553,7 +2553,7 @@ static bool shrink_zones(struct zonelist *zonelist, struct scan_control *sc) · 2552 unmodified lines
25532553 sc->gfp_mask |= __GFP_HIGHMEM;
25542554
25552555 for_each_zone_zonelist_nodemask(zone, z, zonelist,
2556− requested_highidx, sc->nodemask) {
2556+ gfp_zone(sc->gfp_mask), sc->nodemask) {
25572557 enum zone_type classzone_idx;
25582558
25592559 if (!populated_zone(zone))
@@ -3318,6 +3318,20 @@ static void kswapd_try_to_sleep(pg_data_t *pgdat, int order, · 758 unmodified lines
33183318 /* Try to sleep for a short interval */
33193319 if (prepare_kswapd_sleep(pgdat, order, remaining,
33203320 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+
33213335 remaining = schedule_timeout(HZ/10);
33223336 finish_wait(&pgdat->kswapd_wait, &wait);
33233337 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
33413355 */
33423356 set_pgdat_percpu_threshold(pgdat, calculate_normal_threshold);
33433357
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−
33583358 if (!kthread_should_stop())
33593359 schedule();
33603360
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
6161 e->flags |= MDB_FLAGS_OFFLOAD;
6262 }
6363
64+static 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+
6477 static int br_mdb_fill_info(struct sk_buff *skb, struct netlink_callback *cb,
6578 struct net_device *dev)
6679 {
@@ -243,9 +256,45 @@ static inline size_t rtnl_mdb_nlmsg_size(void) · 176 unmodified lines
243256 + nla_total_size(sizeof(struct br_mdb_entry));
244257 }
245258
246−static void __br_mdb_notify(struct net_device *dev, struct br_mdb_entry *entry,
247− int type, struct net_bridge_port_group *pg)
259+struct br_mdb_complete_info {
260+ struct net_bridge_port *port;
261+ struct br_ip ip;
262+};
263+
264+static void br_mdb_complete(struct net_device *dev, int err, void *priv)
248265 {
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+ }
288+out:
289+ spin_unlock_bh(&br->multicast_lock);
290+err:
291+ kfree(priv);
292+}
293+
294+static 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;
249298 struct switchdev_obj_port_mdb mdb = {
250299 .obj = {
251300 .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
268317
269318 mdb.obj.orig_dev = port_dev;
270319 if (port_dev && type == RTM_NEWMDB) {
271− err = switchdev_port_obj_add(port_dev, &mdb.obj);
272− if (!err && pg)
273− pg->flags |= MDB_PG_FLAGS_OFFLOAD;
320+ complete_info = kmalloc(sizeof(*complete_info), GFP_ATOMIC);
321+ if (complete_info) {
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+ }
274328 } else if (port_dev && type == RTM_DELMDB) {
275329 switchdev_port_obj_del(port_dev, &mdb.obj);
276330 }
@@ -291,21 +345,21 @@ errout: · 14 unmodified lines
291345 rtnl_set_sk_err(net, RTNLGRP_MDB, err);
292346 }
293347
294−void br_mdb_notify(struct net_device *dev, struct net_bridge_port_group *pg,
295− int type)
348+void br_mdb_notify(struct net_device *dev, struct net_bridge_port *port,
349+ struct br_ip *group, int type, u8 flags)
296350 {
297351 struct br_mdb_entry entry;
298352
299353 memset(&entry, 0, sizeof(entry));
300− entry.ifindex = pg->port->dev->ifindex;
301− entry.addr.proto = pg->addr.proto;
302− entry.addr.u.ip4 = pg->addr.u.ip4;
354+ entry.ifindex = port->dev->ifindex;
355+ entry.addr.proto = group->proto;
356+ entry.addr.u.ip4 = group->u.ip4;
303357 #if IS_ENABLED(CONFIG_IPV6)
304− entry.addr.u.ip6 = pg->addr.u.ip6;
358+ entry.addr.u.ip6 = group->u.ip6;
305359 #endif
306− entry.vid = pg->addr.vid;
307− __mdb_entry_fill_flags(&entry, pg->flags);
308− __br_mdb_notify(dev, &entry, type, pg);
360+ entry.vid = group->vid;
361+ __mdb_entry_fill_flags(&entry, flags);
362+ __br_mdb_notify(dev, port, &entry, type);
309363 }
310364
311365 static 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
450504 }
451505
452506 static int br_mdb_add_group(struct net_bridge *br, struct net_bridge_port *port,
453− struct br_ip *group, unsigned char state,
454− struct net_bridge_port_group **pg)
507+ struct br_ip *group, unsigned char state)
455508 {
456509 struct net_bridge_mdb_entry *mp;
457510 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
482535 if (unlikely(!p))
483536 return -ENOMEM;
484537 rcu_assign_pointer(*pp, p);
485− *pg = p;
486538 if (state == MDB_TEMPORARY)
487539 mod_timer(&p->timer, now + br->multicast_membership_interval);
488540
@@ -490,8 +542,7 @@ static int br_mdb_add_group(struct net_bridge *br, struct net_bridge_port *port, · 1 unmodified line
490542 }
491543
492544 static int __br_mdb_add(struct net *net, struct net_bridge *br,
493− struct br_mdb_entry *entry,
494− struct net_bridge_port_group **pg)
545+ struct br_mdb_entry *entry)
495546 {
496547 struct br_ip ip;
497548 struct net_device *dev;
@@ -509,18 +560,10 @@ static int __br_mdb_add(struct net *net, struct net_bridge *br, · 11 unmodified lines
509560 if (!p || p->br != br || p->state == BR_STATE_DISABLED)
510561 return -EINVAL;
511562
512− memset(&ip, 0, sizeof(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
563+ __mdb_entry_to_br_ip(entry, &ip);
521564
522565 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);
524567 spin_unlock_bh(&br->multicast_lock);
525568 return ret;
526569 }
@@ -528,7 +571,6 @@ static int __br_mdb_add(struct net *net, struct net_bridge *br, · 1 unmodified line
528571 static int br_mdb_add(struct sk_buff *skb, struct nlmsghdr *nlh)
529572 {
530573 struct net *net = sock_net(skb->sk);
531− struct net_bridge_port_group *pg;
532574 struct net_bridge_vlan_group *vg;
533575 struct net_device *dev, *pdev;
534576 struct br_mdb_entry *entry;
@@ -558,15 +600,15 @@ static int br_mdb_add(struct sk_buff *skb, struct nlmsghdr *nlh) · 23 unmodified lines
558600 if (br_vlan_enabled(br) && vg && entry->vid == 0) {
559601 list_for_each_entry(v, &vg->vlan_list, vlist) {
560602 entry->vid = v->vid;
561− err = __br_mdb_add(net, br, entry, &pg);
603+ err = __br_mdb_add(net, br, entry);
562604 if (err)
563605 break;
564− __br_mdb_notify(dev, entry, RTM_NEWMDB, pg);
606+ __br_mdb_notify(dev, p, entry, RTM_NEWMDB);
565607 }
566608 } else {
567− err = __br_mdb_add(net, br, entry, &pg);
609+ err = __br_mdb_add(net, br, entry);
568610 if (!err)
569− __br_mdb_notify(dev, entry, RTM_NEWMDB, pg);
611+ __br_mdb_notify(dev, p, entry, RTM_NEWMDB);
570612 }
571613
572614 return err;
@@ -584,15 +626,7 @@ static int __br_mdb_del(struct net_bridge *br, struct br_mdb_entry *entry) · 11 unmodified lines
584626 if (!netif_running(br->dev) || br->multicast_disabled)
585627 return -EINVAL;
586628
587− memset(&ip, 0, sizeof(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
629+ __mdb_entry_to_br_ip(entry, &ip);
596630
597631 spin_lock_bh(&br->multicast_lock);
598632 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
662696 entry->vid = v->vid;
663697 err = __br_mdb_del(br, entry);
664698 if (!err)
665− __br_mdb_notify(dev, entry, RTM_DELMDB, NULL);
699+ __br_mdb_notify(dev, p, entry, RTM_DELMDB);
666700 }
667701 } else {
668702 err = __br_mdb_del(br, entry);
669703 if (!err)
670− __br_mdb_notify(dev, entry, RTM_DELMDB, NULL);
704+ __br_mdb_notify(dev, p, entry, RTM_DELMDB);
671705 }
672706
673707 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
283283 rcu_assign_pointer(*pp, p->next);
284284 hlist_del_init(&p->mglist);
285285 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);
287288 call_rcu_bh(&p->rcu, br_multicast_free_pg);
288289
289290 if (!mp->ports && !mp->mglist &&
@@ -705,7 +706,7 @@ static int br_multicast_add_group(struct net_bridge *br, · 415 unmodified lines
705706 if (unlikely(!p))
706707 goto err;
707708 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);
709710
710711 found:
711712 mod_timer(&p->timer, now + br->multicast_membership_interval);
@@ -1461,7 +1462,8 @@ br_multicast_leave_group(struct net_bridge *br, · 749 unmodified lines
14611462 hlist_del_init(&p->mglist);
14621463 del_timer(&p->timer);
14631464 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);
14651467
14661468 if (!mp->ports && !mp->mglist &&
14671469 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
560560 unsigned char flags);
561561 void br_mdb_init(void);
562562 void br_mdb_uninit(void);
563−void br_mdb_notify(struct net_device *dev, struct net_bridge_port_group *pg,
564− int type);
563+void br_mdb_notify(struct net_device *dev, struct net_bridge_port *port,
564+ struct br_ip *group, int type, u8 flags);
565565 void br_rtr_notify(struct net_device *dev, struct net_bridge_port *port,
566566 int type);
567567
net/ceph/auth.c+2−6
@@ -293,13 +293,9 @@ int ceph_auth_create_authorizer(struct ceph_auth_client *ac, · 292 unmodified lines
293293 }
294294 EXPORT_SYMBOL(ceph_auth_create_authorizer);
295295
296−void ceph_auth_destroy_authorizer(struct ceph_auth_client *ac,
297− struct ceph_authorizer *a)
296+void ceph_auth_destroy_authorizer(struct ceph_authorizer *a)
298297 {
299− mutex_lock(&ac->mutex);
300− if (ac->ops && ac->ops->destroy_authorizer)
301− ac->ops->destroy_authorizer(ac, a);
302− mutex_unlock(&ac->mutex);
298+ a->destroy(a);
303299 }
304300 EXPORT_SYMBOL(ceph_auth_destroy_authorizer);
305301
net/ceph/auth_none.c+39−32
@@ -16,7 +16,6 @@ static void reset(struct ceph_auth_client *ac) · 15 unmodified lines
1616 struct ceph_auth_none_info *xi = ac->private;
1717
1818 xi->starting = true;
19− xi->built_authorizer = false;
2019 }
2120
2221 static void destroy(struct ceph_auth_client *ac)
@@ -39,6 +38,27 @@ static int should_authenticate(struct ceph_auth_client *ac) · 16 unmodified lines
3938 return xi->starting;
4039 }
4140
41+static 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+
58+e_range:
59+ return -ERANGE;
60+}
61+
4262 static int build_request(struct ceph_auth_client *ac, void *buf, void *end)
4363 {
4464 return 0;
@@ -57,32 +77,32 @@ static int handle_reply(struct ceph_auth_client *ac, int result, · 12 unmodified lines
5777 return result;
5878 }
5979
80+static void ceph_auth_none_destroy_authorizer(struct ceph_authorizer *a)
81+{
82+ kfree(a);
83+}
84+
6085 /*
61− * build an 'authorizer' with our entity_name and global_id. we can
62− * reuse a single static copy since it is identical for all services
63− * we connect to.
86+ * build an 'authorizer' with our entity_name and global_id. it is
87+ * identical for all services we connect to.
6488 */
6589 static int ceph_auth_none_create_authorizer(
6690 struct ceph_auth_client *ac, int peer_type,
6791 struct ceph_auth_handshake *auth)
6892 {
69− struct ceph_auth_none_info *ai = ac->private;
70− struct ceph_none_authorizer *au = &ai->au;
71− void *p, *end;
93+ struct ceph_none_authorizer *au;
7294 int ret;
7395
74− if (!ai->built_authorizer) {
75− p = au->buf;
76− end = p + sizeof(au->buf);
77− ceph_encode_8(&p, 1);
78− ret = ceph_entity_name_encode(ac->name, &p, end - 8);
79− if (ret < 0)
80− goto bad;
81− ceph_decode_need(&p, end, sizeof(u64), bad2);
82− ceph_encode_64(&p, ac->global_id);
83− au->buf_len = p - (void *)au->buf;
84− ai->built_authorizer = true;
85− dout("built authorizer len %d\n", au->buf_len);
96+ au = kmalloc(sizeof(*au), GFP_NOFS);
97+ if (!au)
98+ return -ENOMEM;
99+
100+ au->base.destroy = ceph_auth_none_destroy_authorizer;
101+
102+ ret = ceph_auth_none_build_authorizer(ac, au);
103+ if (ret) {
104+ kfree(au);
105+ return ret;
86106 }
87107
88108 auth->authorizer = (struct ceph_authorizer *) au;
@@ -92,17 +112,6 @@ static int ceph_auth_none_create_authorizer( · 3 unmodified lines
92112 auth->authorizer_reply_buf_len = sizeof (au->reply_buf);
93113
94114 return 0;
95−
96−bad2:
97− ret = -ERANGE;
98−bad:
99− return ret;
100−}
101−
102−static void ceph_auth_none_destroy_authorizer(struct ceph_auth_client *ac,
103− struct ceph_authorizer *a)
104−{
105− /* nothing to do */
106115 }
107116
108117 static 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
114123 .build_request = build_request,
115124 .handle_reply = handle_reply,
116125 .create_authorizer = ceph_auth_none_create_authorizer,
117− .destroy_authorizer = ceph_auth_none_destroy_authorizer,
118126 };
119127
120128 int 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
127135 return -ENOMEM;
128136
129137 xi->starting = true;
130− xi->built_authorizer = false;
131138
132139 ac->protocol = CEPH_AUTH_NONE;
133140 ac->private = xi;
net/ceph/auth_none.h+1−2
@@ -12,6 +12,7 @@ · 11 unmodified lines
1212 */
1313
1414 struct ceph_none_authorizer {
15+ struct ceph_authorizer base;
1516 char buf[128];
1617 int buf_len;
1718 char reply_buf[0];
@@ -19,8 +20,6 @@ struct ceph_none_authorizer { · 1 unmodified line
1920
2021 struct ceph_auth_none_info {
2122 bool starting;
22− bool built_authorizer;
23− struct ceph_none_authorizer au; /* we only need one; it's static */
2423 };
2524
2625 int 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
565565 return -EAGAIN;
566566 }
567567
568+static 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+
568576 static int ceph_x_create_authorizer(
569577 struct ceph_auth_client *ac, int peer_type,
570578 struct ceph_auth_handshake *auth)
@@ -581,6 +589,8 @@ static int ceph_x_create_authorizer( · 10 unmodified lines
581589 if (!au)
582590 return -ENOMEM;
583591
592+ au->base.destroy = ceph_x_destroy_authorizer;
593+
584594 ret = ceph_x_build_authorizer(ac, th, au);
585595 if (ret) {
586596 kfree(au);
@@ -643,16 +653,6 @@ static int ceph_x_verify_authorizer_reply(struct ceph_auth_client *ac, · 56 unmodified lines
643653 return ret;
644654 }
645655
646−static 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−
656656 static void ceph_x_reset(struct ceph_auth_client *ac)
657657 {
658658 struct ceph_x_info *xi = ac->private;
@@ -770,7 +770,6 @@ static const struct ceph_auth_client_ops ceph_x_ops = { · 111 unmodified lines
770770 .create_authorizer = ceph_x_create_authorizer,
771771 .update_authorizer = ceph_x_update_authorizer,
772772 .verify_authorizer_reply = ceph_x_verify_authorizer_reply,
773− .destroy_authorizer = ceph_x_destroy_authorizer,
774773 .invalidate_authorizer = ceph_x_invalidate_authorizer,
775774 .reset = ceph_x_reset,
776775 .destroy = ceph_x_destroy,
net/ceph/auth_x.h+1−0
@@ -26,6 +26,7 @@ struct ceph_x_ticket_handler { · 25 unmodified lines
2626
2727
2828 struct ceph_x_authorizer {
29+ struct ceph_authorizer base;
2930 struct ceph_crypto_key session_key;
3031 struct ceph_buffer *buf;
3132 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
10871087 dout("put_osd %p %d -> %d\n", osd, atomic_read(&osd->o_ref),
10881088 atomic_read(&osd->o_ref) - 1);
10891089 if (atomic_dec_and_test(&osd->o_ref)) {
1090− struct ceph_auth_client *ac = osd->o_osdc->client->monc.auth;
1091−
10921090 if (osd->o_auth.authorizer)
1093− ceph_auth_destroy_authorizer(ac, osd->o_auth.authorizer);
1091+ ceph_auth_destroy_authorizer(osd->o_auth.authorizer);
10941092 kfree(osd);
10951093 }
10961094 }
@@ -2984,7 +2982,7 @@ static struct ceph_auth_handshake *get_authorizer(struct ceph_connection *con, · 1887 unmodified lines
29842982 struct ceph_auth_handshake *auth = &o->o_auth;
29852983
29862984 if (force_new && auth->authorizer) {
2987− ceph_auth_destroy_authorizer(ac, auth->authorizer);
2985+ ceph_auth_destroy_authorizer(auth->authorizer);
29882986 auth->authorizer = NULL;
29892987 }
29902988 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
904904 if (ifa->ifa_flags & IFA_F_SECONDARY) {
905905 prim = inet_ifa_byprefix(in_dev, any, ifa->ifa_mask);
906906 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__);
908912 return;
909913 }
910914 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
31763176 }
31773177 #endif
31783178
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− */
3184−static 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
3197−static void l3mdev_check_host_rt(struct inet6_dev *idev,
3198− struct inet6_ifaddr *ifp)
3199−{
3200−}
3201−#endif
3202−
32033179 static int fixup_permanent_addr(struct inet6_dev *idev,
32043180 struct inet6_ifaddr *ifp)
32053181 {
3206− l3mdev_check_host_rt(idev, ifp);
3207−
32083182 if (!ifp->rt) {
32093183 struct rt6_info *rt;
32103184
@@ -3304,6 +3278,9 @@ static int addrconf_notify(struct notifier_block *this, unsigned long event, · 93 unmodified lines
33043278 break;
33053279
33063280 if (event == NETDEV_UP) {
3281+ /* restore routes for permanent addresses */
3282+ addrconf_permanent_addr(dev);
3283+
33073284 if (!addrconf_qdisc_ok(dev)) {
33083285 /* device is not ready yet. */
33093286 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
33373314 run_pending = 1;
33383315 }
33393316
3340− /* restore routes for permanent addresses */
3341− addrconf_permanent_addr(dev);
3342−
33433317 switch (dev->type) {
33443318 #if IS_ENABLED(CONFIG_IPV6_SIT)
33453319 case ARPHRD_SIT:
@@ -3556,6 +3530,8 @@ restart: · 210 unmodified lines
35563530
35573531 INIT_LIST_HEAD(&del_list);
35583532 list_for_each_entry_safe(ifa, tmp, &idev->addr_list, if_list) {
3533+ struct rt6_info *rt = NULL;
3534+
35593535 addrconf_del_dad_work(ifa);
35603536
35613537 write_unlock_bh(&idev->lock);
@@ -3568,6 +3544,9 @@ restart: · 6 unmodified lines
35683544 ifa->state = 0;
35693545 if (!(ifa->flags & IFA_F_NODAD))
35703546 ifa->flags |= IFA_F_TENTATIVE;
3547+
3548+ rt = ifa->rt;
3549+ ifa->rt = NULL;
35713550 } else {
35723551 state = ifa->state;
35733552 ifa->state = INET6_IFADDR_STATE_DEAD;
@@ -3578,6 +3557,9 @@ restart: · 4 unmodified lines
35783557
35793558 spin_unlock_bh(&ifa->lock);
35803559
3560+ if (rt)
3561+ ip6_del_rt(rt);
3562+
35813563 if (state != INET6_IFADDR_STATE_DEAD) {
35823564 __ipv6_ifa_notify(RTM_DELADDR, ifa);
35833565 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
53435325 if (rt)
53445326 ip6_del_rt(rt);
53455327 }
5346− dst_hold(&ifp->rt->dst);
5347−
5348− ip6_del_rt(ifp->rt);
5349−
5328+ if (ifp->rt) {
5329+ dst_hold(&ifp->rt->dst);
5330+ ip6_del_rt(ifp->rt);
5331+ }
53505332 rt_genid_bump_ipv6(net);
53515333 break;
53525334 }
net/switchdev/switchdev.c+6−0
@@ -305,6 +305,8 @@ static void switchdev_port_attr_set_deferred(struct net_device *dev, · 304 unmodified lines
305305 if (err && err != -EOPNOTSUPP)
306306 netdev_err(dev, "failed (err=%d) to set attribute (id=%d)\n",
307307 err, attr->id);
308+ if (attr->complete)
309+ attr->complete(dev, err, attr->complete_priv);
308310 }
309311
310312 static 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
434436 if (err && err != -EOPNOTSUPP)
435437 netdev_err(dev, "failed (err=%d) to add object (id=%d)\n",
436438 err, obj->id);
439+ if (obj->complete)
440+ obj->complete(dev, err, obj->complete_priv);
437441 }
438442
439443 static 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
502506 if (err && err != -EOPNOTSUPP)
503507 netdev_err(dev, "failed (err=%d) to del object (id=%d)\n",
504508 err, obj->id);
509+ if (obj->complete)
510+ obj->complete(dev, err, obj->complete_priv);
505511 }
506512
507513 static 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
104104 */
105105 void snd_hdac_stream_free_all(struct hdac_ext_bus *ebus)
106106 {
107− struct hdac_stream *s;
107+ struct hdac_stream *s, *_s;
108108 struct hdac_ext_stream *stream;
109109 struct hdac_bus *bus = ebus_to_hbus(ebus);
110110
111− while (!list_empty(&bus->stream_list)) {
112− s = list_first_entry(&bus->stream_list, struct hdac_stream, list);
111+ list_for_each_entry_safe(s, _s, &bus->stream_list, list) {
113112 stream = stream_to_hdac_ext_stream(s);
114113 snd_hdac_ext_stream_decouple(ebus, stream, false);
115114 list_del(&s->list);
sound/hda/hdac_i915.c+51−11
@@ -20,6 +20,7 @@ · 19 unmodified lines
2020 #include <sound/core.h>
2121 #include <sound/hdaudio.h>
2222 #include <sound/hda_i915.h>
23+#include <sound/hda_register.h>
2324
2425 static struct i915_audio_component *hdac_acomp;
2526
@@ -97,26 +98,65 @@ int snd_hdac_display_power(struct hdac_bus *bus, bool enable) · 71 unmodified lines
9798 }
9899 EXPORT_SYMBOL_GPL(snd_hdac_display_power);
99100
101+#define CONTROLLER_IN_GPU(pci) (((pci)->device == 0x0a0c) || \
102+ ((pci)->device == 0x0c0c) || \
103+ ((pci)->device == 0x0d0c) || \
104+ ((pci)->device == 0x160c))
105+
100106 /**
101− * snd_hdac_get_display_clk - Get CDCLK in kHz
107+ * snd_hdac_i915_set_bclk - Reprogram BCLK for HSW/BDW
102108 * @bus: HDA core bus
103109 *
104− * This function is supposed to be used only by a HD-audio controller
105− * driver that needs the interaction with i915 graphics.
110+ * Intel HSW/BDW display HDA controller is in GPU. Both its power and link BCLK
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.
106116 *
107− * This function queries CDCLK value in kHz from the graphics driver and
108− * returns the value. A negative code is returned in error.
117+ * Call this function at initializing and changing power well, as well as
118+ * at ELD notifier for the hotplug.
109119 */
110−int snd_hdac_get_display_clk(struct hdac_bus *bus)
120+void snd_hdac_i915_set_bclk(struct hdac_bus *bus)
111121 {
112122 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+ }
113155
114− if (!acomp || !acomp->ops)
115− return -ENODEV;
116−
117− return acomp->ops->get_cdclk_freq(acomp->dev);
156+ snd_hdac_chip_writew(bus, HSW_EM4, bclk_m);
157+ snd_hdac_chip_writew(bus, HSW_EM5, bclk_n);
118158 }
119−EXPORT_SYMBOL_GPL(snd_hdac_get_display_clk);
159+EXPORT_SYMBOL_GPL(snd_hdac_i915_set_bclk);
120160
121161 /* There is a fixed mapping between audio pin node and display port
122162 * 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
857857 #define azx_del_card_list(chip) /* NOP */
858858 #endif /* CONFIG_PM */
859859
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− */
867−static 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−
904860 #if defined(CONFIG_PM_SLEEP) || defined(SUPPORT_VGA_SWITCHEROO)
905861 /*
906862 * power management
@@ -958,7 +914,7 @@ static int azx_resume(struct device *dev) · 51 unmodified lines
958914 if (chip->driver_caps & AZX_DCAPS_I915_POWERWELL
959915 && hda->need_i915_power) {
960916 snd_hdac_display_power(azx_bus(chip), true);
961− haswell_set_bclk(hda);
917+ snd_hdac_i915_set_bclk(azx_bus(chip));
962918 }
963919 if (chip->msi)
964920 if (pci_enable_msi(pci) < 0)
@@ -1058,7 +1014,7 @@ static int azx_runtime_resume(struct device *dev) · 93 unmodified lines
10581014 bus = azx_bus(chip);
10591015 if (hda->need_i915_power) {
10601016 snd_hdac_display_power(bus, true);
1061− haswell_set_bclk(hda);
1017+ snd_hdac_i915_set_bclk(bus);
10621018 } else {
10631019 /* toggle codec wakeup bit for STATESTS read */
10641020 snd_hdac_set_codec_wakeup(bus, true);
@@ -1796,12 +1752,8 @@ static int azx_first_init(struct azx *chip) · 731 unmodified lines
17961752 /* initialize chip */
17971753 azx_init_pci(chip);
17981754
1799− if (chip->driver_caps & AZX_DCAPS_I915_POWERWELL) {
1800− struct hda_intel *hda;
1801−
1802− hda = container_of(chip, struct hda_intel, chip);
1803− haswell_set_bclk(hda);
1804− }
1755+ if (chip->driver_caps & AZX_DCAPS_I915_POWERWELL)
1756+ snd_hdac_i915_set_bclk(bus);
18051757
18061758 hda_intel_init_chip(chip, (probe_only[dev] & 2) == 0);
18071759
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
22322232 if (atomic_read(&(codec)->core.in_pm))
22332233 return;
22342234
2235+ snd_hdac_i915_set_bclk(&codec->bus->core);
22352236 check_presence_and_report(codec, pin_nid);
22362237 }
22372238
sound/pci/hda/patch_realtek.c+1−0
@@ -5584,6 +5584,7 @@ static const struct snd_pci_quirk alc269_fixup_tbl[] = { · 5583 unmodified lines
55845584 SND_PCI_QUIRK(0x17aa, 0x5034, "Thinkpad T450", ALC292_FIXUP_TPT440_DOCK),
55855585 SND_PCI_QUIRK(0x17aa, 0x5036, "Thinkpad T450s", ALC292_FIXUP_TPT440_DOCK),
55865586 SND_PCI_QUIRK(0x17aa, 0x503c, "Thinkpad L450", ALC292_FIXUP_TPT440_DOCK),
5587+ SND_PCI_QUIRK(0x17aa, 0x504a, "ThinkPad X260", ALC292_FIXUP_TPT440_DOCK),
55875588 SND_PCI_QUIRK(0x17aa, 0x504b, "Thinkpad", ALC293_FIXUP_LENOVO_SPK_NOISE),
55885589 SND_PCI_QUIRK(0x17aa, 0x5109, "Thinkpad", ALC269_FIXUP_LIMIT_INT_MIC_BOOST),
55895590 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
629629
630630 config SND_SOC_RT5616
631631 tristate "Realtek RT5616 CODEC"
632+ depends on I2C
632633
633634 config SND_SOC_RT5631
634635 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
249249 }
250250 EXPORT_SYMBOL_GPL(arizona_init_spk);
251251
252+int 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+}
262+EXPORT_SYMBOL_GPL(arizona_free_spk);
263+
252264 static const struct snd_soc_dapm_route arizona_mono_routes[] = {
253265 { "OUT1R", NULL, "OUT1L" },
254266 { "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
307307 extern int arizona_init_gpio(struct snd_soc_codec *codec);
308308 extern int arizona_init_mono(struct snd_soc_codec *codec);
309309
310+extern int arizona_free_spk(struct snd_soc_codec *codec);
311+
310312 extern int arizona_init_dai(struct arizona_priv *priv, int dai);
311313
312314 int 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
274274 if (of_property_read_u32(np, "cirrus,sdout-share", &val) >= 0)
275275 pdata->sdout_share = val;
276276
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+
278280 switch (val) {
279281 case CS35L32_BOOST_MGR_AUTO:
280282 case CS35L32_BOOST_MGR_AUTO_AUDIO:
@@ -282,13 +284,15 @@ static int cs35l32_handle_of_data(struct i2c_client *i2c_client, · 1 unmodified line
282284 case CS35L32_BOOST_MGR_FIXED:
283285 pdata->boost_mng = val;
284286 break;
287+ case -1u:
285288 default:
286289 dev_err(&i2c_client->dev,
287290 "Wrong cirrus,boost-manager DT value %d\n", val);
288291 pdata->boost_mng = CS35L32_BOOST_MGR_BYPASS;
289292 }
290293
291− of_property_read_u32(np, "cirrus,sdout-datacfg", &val);
294+ if (of_property_read_u32(np, "cirrus,sdout-datacfg", &val))
295+ val = -1u;
292296 switch (val) {
293297 case CS35L32_DATA_CFG_LR_VP:
294298 case CS35L32_DATA_CFG_LR_STAT:
@@ -296,13 +300,15 @@ static int cs35l32_handle_of_data(struct i2c_client *i2c_client, · 1 unmodified line
296300 case CS35L32_DATA_CFG_LR_VPSTAT:
297301 pdata->sdout_datacfg = val;
298302 break;
303+ case -1u:
299304 default:
300305 dev_err(&i2c_client->dev,
301306 "Wrong cirrus,sdout-datacfg DT value %d\n", val);
302307 pdata->sdout_datacfg = CS35L32_DATA_CFG_LR;
303308 }
304309
305− of_property_read_u32(np, "cirrus,battery-threshold", &val);
310+ if (of_property_read_u32(np, "cirrus,battery-threshold", &val))
311+ val = -1u;
306312 switch (val) {
307313 case CS35L32_BATT_THRESH_3_1V:
308314 case CS35L32_BATT_THRESH_3_2V:
@@ -310,13 +316,15 @@ static int cs35l32_handle_of_data(struct i2c_client *i2c_client, · 1 unmodified line
310316 case CS35L32_BATT_THRESH_3_4V:
311317 pdata->batt_thresh = val;
312318 break;
319+ case -1u:
313320 default:
314321 dev_err(&i2c_client->dev,
315322 "Wrong cirrus,battery-threshold DT value %d\n", val);
316323 pdata->batt_thresh = CS35L32_BATT_THRESH_3_3V;
317324 }
318325
319− of_property_read_u32(np, "cirrus,battery-recovery", &val);
326+ if (of_property_read_u32(np, "cirrus,battery-recovery", &val))
327+ val = -1u;
320328 switch (val) {
321329 case CS35L32_BATT_RECOV_3_1V:
322330 case CS35L32_BATT_RECOV_3_2V:
@@ -326,6 +334,7 @@ static int cs35l32_handle_of_data(struct i2c_client *i2c_client, · 3 unmodified lines
326334 case CS35L32_BATT_RECOV_3_6V:
327335 pdata->batt_recov = val;
328336 break;
337+ case -1u:
329338 default:
330339 dev_err(&i2c_client->dev,
331340 "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
11081108 priv->core.arizona->dapm = NULL;
11091109
11101110 arizona_free_irq(arizona, ARIZONA_IRQ_DSP_IRQ1, priv);
1111+
1112+ arizona_free_spk(codec);
1113+
11111114 return 0;
11121115 }
11131116
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
14201420 }
14211421
14221422 #ifdef CONFIG_PM
1423−static int hdmi_codec_resume(struct snd_soc_codec *codec)
1423+static int hdmi_codec_prepare(struct device *dev)
14241424 {
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+
1443+static void hdmi_codec_complete(struct device *dev)
1444+{
1445+ struct hdac_ext_device *edev = to_hda_ext_device(dev);
14261446 struct hdac_hdmi_priv *hdmi = edev->private_data;
14271447 struct hdac_hdmi_pin *pin;
14281448 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);
14351449
14361450 /* Power up afg */
1437− if (!snd_hdac_check_power_state(hdac, hdac->afg, AC_PWRST_D0)) {
1438−
1439− snd_hdac_codec_write(hdac, hdac->afg, 0,
1440− AC_VERB_SET_POWER_STATE, AC_PWRST_D0);
1451+ snd_hdac_codec_read(hdac, hdac->afg, 0, AC_VERB_SET_POWER_STATE,
1452+ AC_PWRST_D0);
14411453
1442− /* Wait till power state is set to D0 */
1443− timeout = jiffies + msecs_to_jiffies(1000);
1444− while (!snd_hdac_check_power_state(hdac, hdac->afg, AC_PWRST_D0)
1445− && time_before(jiffies, timeout)) {
1446− msleep(50);
1447− }
1448− }
1454+ hdac_hdmi_skl_enable_all_pins(&edev->hdac);
1455+ hdac_hdmi_skl_enable_dp12(&edev->hdac);
14491456
14501457 /*
14511458 * 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
14551462 list_for_each_entry(pin, &hdmi->pin_list, head)
14561463 hdac_hdmi_present_sense(pin, 1);
14571464
1458− /*
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;
1465+ pm_runtime_put_sync(&edev->hdac.dev);
14711466 }
14721467 #else
1473−#define hdmi_codec_resume NULL
1468+#define hdmi_codec_prepare NULL
1469+#define hdmi_codec_complete NULL
14741470 #endif
14751471
14761472 static struct snd_soc_codec_driver hdmi_hda_codec = {
14771473 .probe = hdmi_codec_probe,
14781474 .remove = hdmi_codec_remove,
1479− .resume = hdmi_codec_resume,
14801475 .idle_bias_off = true,
14811476 };
14821477
@@ -1561,7 +1556,6 @@ static int hdac_hdmi_runtime_suspend(struct device *dev) · 78 unmodified lines
15611556 struct hdac_ext_device *edev = to_hda_ext_device(dev);
15621557 struct hdac_device *hdac = &edev->hdac;
15631558 struct hdac_bus *bus = hdac->bus;
1564− unsigned long timeout;
15651559 int err;
15661560
15671561 dev_dbg(dev, "Enter: %s\n", __func__);
@@ -1570,20 +1564,15 @@ static int hdac_hdmi_runtime_suspend(struct device *dev) · 2 unmodified lines
15701564 if (!bus)
15711565 return 0;
15721566
1573− /* Power down afg */
1574− if (!snd_hdac_check_power_state(hdac, hdac->afg, AC_PWRST_D3)) {
1575− snd_hdac_codec_write(hdac, hdac->afg, 0,
1576− AC_VERB_SET_POWER_STATE, AC_PWRST_D3);
1577−
1578− /* Wait till power state is set to D3 */
1579− timeout = jiffies + msecs_to_jiffies(1000);
1580− while (!snd_hdac_check_power_state(hdac, hdac->afg, AC_PWRST_D3)
1581− && time_before(jiffies, timeout)) {
1582−
1583− msleep(50);
1584− }
1585− }
1586−
1567+ /*
1568+ * Power down afg.
1569+ * codec_read is preferred over codec_write to set the power state.
1570+ * This way verb is send to set the power state and response
1571+ * is received. So setting power state is ensured without using loop
1572+ * to read the state.
1573+ */
1574+ snd_hdac_codec_read(hdac, hdac->afg, 0, AC_VERB_SET_POWER_STATE,
1575+ AC_PWRST_D3);
15871576 err = snd_hdac_display_power(bus, false);
15881577 if (err < 0) {
15891578 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
16161605 hdac_hdmi_skl_enable_dp12(&edev->hdac);
16171606
16181607 /* Power up afg */
1619− if (!snd_hdac_check_power_state(hdac, hdac->afg, AC_PWRST_D0))
1620− snd_hdac_codec_write(hdac, hdac->afg, 0,
1621− AC_VERB_SET_POWER_STATE, AC_PWRST_D0);
1608+ snd_hdac_codec_read(hdac, hdac->afg, 0, AC_VERB_SET_POWER_STATE,
1609+ AC_PWRST_D0);
16221610
16231611 return 0;
16241612 }
@@ -1629,6 +1617,8 @@ static int hdac_hdmi_runtime_resume(struct device *dev) · 4 unmodified lines
16291617
16301618 static const struct dev_pm_ops hdac_hdmi_pm = {
16311619 SET_RUNTIME_PM_OPS(hdac_hdmi_runtime_suspend, hdac_hdmi_runtime_resume, NULL)
1620+ .prepare = hdmi_codec_prepare,
1621+ .complete = hdmi_codec_complete,
16321622 };
16331623
16341624 static 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
343343 SND_SOC_DAPM_SUPPLY("ADC Power", NAU8825_REG_ANALOG_ADC_2, 6, 0, NULL,
344344 0),
345345
346− /* ADC for button press detection */
347− SND_SOC_DAPM_ADC("SAR", NULL, NAU8825_REG_SAR_CTRL,
348− NAU8825_SAR_ADC_EN_SFT, 0),
346+ /* ADC for button press detection. A dapm supply widget is used to
347+ * prevent dapm_power_widgets keeping the codec at SND_SOC_BIAS_ON
348+ * during suspend.
349+ */
350+ SND_SOC_DAPM_SUPPLY("SAR", NAU8825_REG_SAR_CTRL,
351+ NAU8825_SAR_ADC_EN_SFT, 0, NULL, 0),
349352
350353 SND_SOC_DAPM_PGA_S("ADACL", 2, NAU8825_REG_RDAC, 12, 0, NULL, 0),
351354 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
607610
608611 static void nau8825_restart_jack_detection(struct regmap *regmap)
609612 {
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+
610623 /* this will restart the entire jack detection process including MIC/GND
611624 * switching and create interrupts. We have to go from 0 to 1 and back
612625 * to 0 to restart.
@@ -728,7 +741,10 @@ static irqreturn_t nau8825_interrupt(int irq, void *data) · 115 unmodified lines
728741 struct regmap *regmap = nau8825->regmap;
729742 int active_irq, clear_irq = 0, event = 0, event_mask = 0;
730743
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+ }
732748
733749 if ((active_irq & NAU8825_JACK_EJECTION_IRQ_MASK) ==
734750 NAU8825_JACK_EJECTION_DETECTED) {
@@ -1141,33 +1157,74 @@ static int nau8825_set_bias_level(struct snd_soc_codec *codec, · 406 unmodified lines
11411157 return ret;
11421158 }
11431159 }
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− }
11511160 }
1152−
11531161 break;
11541162
11551163 case SND_SOC_BIAS_OFF:
11561164 if (nau8825->mclk_freq)
11571165 clk_disable_unprepare(nau8825->mclk);
1158−
1159− regcache_mark_dirty(nau8825->regmap);
11601166 break;
11611167 }
11621168 return 0;
11631169 }
11641170
1171+#ifdef CONFIG_PM
1172+static 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+
1183+static 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+
11651220 static struct snd_soc_codec_driver nau8825_codec_driver = {
11661221 .probe = nau8825_codec_probe,
11671222 .set_sysclk = nau8825_set_sysclk,
11681223 .set_pll = nau8825_set_pll,
11691224 .set_bias_level = nau8825_set_bias_level,
11701225 .suspend_bias_off = true,
1226+ .suspend = nau8825_suspend,
1227+ .resume = nau8825_resume,
11711228
11721229 .controls = nau8825_controls,
11731230 .num_controls = ARRAY_SIZE(nau8825_controls),
@@ -1277,16 +1334,6 @@ static int nau8825_setup_irq(struct nau8825 *nau8825) · 103 unmodified lines
12771334 regmap_update_bits(regmap, NAU8825_REG_ENA_CTRL,
12781335 NAU8825_ENABLE_DACR, NAU8825_ENABLE_DACR);
12791336
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−
12901337 ret = devm_request_threaded_irq(nau8825->dev, nau8825->irq, NULL,
12911338 nau8825_interrupt, IRQF_TRIGGER_LOW | IRQF_ONESHOT,
12921339 "nau8825", nau8825);
@@ -1354,36 +1401,6 @@ static int nau8825_i2c_remove(struct i2c_client *client) · 61 unmodified lines
13541401 return 0;
13551402 }
13561403
1357−#ifdef CONFIG_PM_SLEEP
1358−static 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−
1370−static 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−
1383−static const struct dev_pm_ops nau8825_pm = {
1384− SET_SYSTEM_SLEEP_PM_OPS(nau8825_suspend, nau8825_resume)
1385−};
1386−
13871404 static const struct i2c_device_id nau8825_i2c_ids[] = {
13881405 { "nau8825", 0 },
13891406 { }
@@ -1410,7 +1427,6 @@ static struct i2c_driver nau8825_driver = { · 20 unmodified lines
14101427 .name = "nau8825",
14111428 .of_match_table = of_match_ptr(nau8825_of_ids),
14121429 .acpi_match_table = ACPI_PTR(nau8825_acpi_match),
1413− .pm = &nau8825_pm,
14141430 },
14151431 .probe = nau8825_i2c_probe,
14161432 .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
359359
360360 /* Interface data select */
361361 static 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"};
363363
364364 static SOC_ENUM_SINGLE_DECL(rt5640_if1_dac_enum, RT5640_DIG_INF_DATA,
365365 RT5640_IF1_DAC_SEL_SFT, rt5640_data_select);
sound/soc/codecs/rt5640.h+18−18
@@ -443,39 +443,39 @@ · 442 unmodified lines
443443 #define RT5640_IF1_DAC_SEL_MASK (0x3 << 14)
444444 #define RT5640_IF1_DAC_SEL_SFT 14
445445 #define RT5640_IF1_DAC_SEL_NOR (0x0 << 14)
446−#define RT5640_IF1_DAC_SEL_L2R (0x1 << 14)
447−#define RT5640_IF1_DAC_SEL_R2L (0x2 << 14)
448−#define RT5640_IF1_DAC_SEL_SWAP (0x3 << 14)
446+#define RT5640_IF1_DAC_SEL_SWAP (0x1 << 14)
447+#define RT5640_IF1_DAC_SEL_L2R (0x2 << 14)
448+#define RT5640_IF1_DAC_SEL_R2L (0x3 << 14)
449449 #define RT5640_IF1_ADC_SEL_MASK (0x3 << 12)
450450 #define RT5640_IF1_ADC_SEL_SFT 12
451451 #define RT5640_IF1_ADC_SEL_NOR (0x0 << 12)
452−#define RT5640_IF1_ADC_SEL_L2R (0x1 << 12)
453−#define RT5640_IF1_ADC_SEL_R2L (0x2 << 12)
454−#define RT5640_IF1_ADC_SEL_SWAP (0x3 << 12)
452+#define RT5640_IF1_ADC_SEL_SWAP (0x1 << 12)
453+#define RT5640_IF1_ADC_SEL_L2R (0x2 << 12)
454+#define RT5640_IF1_ADC_SEL_R2L (0x3 << 12)
455455 #define RT5640_IF2_DAC_SEL_MASK (0x3 << 10)
456456 #define RT5640_IF2_DAC_SEL_SFT 10
457457 #define RT5640_IF2_DAC_SEL_NOR (0x0 << 10)
458−#define RT5640_IF2_DAC_SEL_L2R (0x1 << 10)
459−#define RT5640_IF2_DAC_SEL_R2L (0x2 << 10)
460−#define RT5640_IF2_DAC_SEL_SWAP (0x3 << 10)
458+#define RT5640_IF2_DAC_SEL_SWAP (0x1 << 10)
459+#define RT5640_IF2_DAC_SEL_L2R (0x2 << 10)
460+#define RT5640_IF2_DAC_SEL_R2L (0x3 << 10)
461461 #define RT5640_IF2_ADC_SEL_MASK (0x3 << 8)
462462 #define RT5640_IF2_ADC_SEL_SFT 8
463463 #define RT5640_IF2_ADC_SEL_NOR (0x0 << 8)
464−#define RT5640_IF2_ADC_SEL_L2R (0x1 << 8)
465−#define RT5640_IF2_ADC_SEL_R2L (0x2 << 8)
466−#define RT5640_IF2_ADC_SEL_SWAP (0x3 << 8)
464+#define RT5640_IF2_ADC_SEL_SWAP (0x1 << 8)
465+#define RT5640_IF2_ADC_SEL_L2R (0x2 << 8)
466+#define RT5640_IF2_ADC_SEL_R2L (0x3 << 8)
467467 #define RT5640_IF3_DAC_SEL_MASK (0x3 << 6)
468468 #define RT5640_IF3_DAC_SEL_SFT 6
469469 #define RT5640_IF3_DAC_SEL_NOR (0x0 << 6)
470−#define RT5640_IF3_DAC_SEL_L2R (0x1 << 6)
471−#define RT5640_IF3_DAC_SEL_R2L (0x2 << 6)
472−#define RT5640_IF3_DAC_SEL_SWAP (0x3 << 6)
470+#define RT5640_IF3_DAC_SEL_SWAP (0x1 << 6)
471+#define RT5640_IF3_DAC_SEL_L2R (0x2 << 6)
472+#define RT5640_IF3_DAC_SEL_R2L (0x3 << 6)
473473 #define RT5640_IF3_ADC_SEL_MASK (0x3 << 4)
474474 #define RT5640_IF3_ADC_SEL_SFT 4
475475 #define RT5640_IF3_ADC_SEL_NOR (0x0 << 4)
476−#define RT5640_IF3_ADC_SEL_L2R (0x1 << 4)
477−#define RT5640_IF3_ADC_SEL_R2L (0x2 << 4)
478−#define RT5640_IF3_ADC_SEL_SWAP (0x3 << 4)
476+#define RT5640_IF3_ADC_SEL_SWAP (0x1 << 4)
477+#define RT5640_IF3_ADC_SEL_L2R (0x2 << 4)
478+#define RT5640_IF3_ADC_SEL_R2L (0x3 << 4)
479479
480480 /* REC Left Mixer Control 1 (0x3b) */
481481 #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
19551955 static int wm5102_codec_remove(struct snd_soc_codec *codec)
19561956 {
19571957 struct wm5102_priv *priv = snd_soc_codec_get_drvdata(codec);
1958+ struct arizona *arizona = priv->core.arizona;
19581959
19591960 wm_adsp2_codec_remove(&priv->core.adsp[0], codec);
19601961
19611962 priv->core.arizona->dapm = NULL;
19621963
1964+ arizona_free_irq(arizona, ARIZONA_IRQ_DSP_IRQ1, priv);
1965+
1966+ arizona_free_spk(codec);
1967+
19631968 return 0;
19641969 }
19651970
sound/soc/codecs/wm5110.c+2−0
@@ -2298,6 +2298,8 @@ static int wm5110_codec_remove(struct snd_soc_codec *codec) · 2297 unmodified lines
22982298
22992299 arizona_free_irq(arizona, ARIZONA_IRQ_DSP_IRQ1, priv);
23002300
2301+ arizona_free_spk(codec);
2302+
23012303 return 0;
23022304 }
23032305
sound/soc/codecs/wm8962.c+1−1
@@ -2471,7 +2471,7 @@ static void wm8962_configure_bclk(struct snd_soc_codec *codec) · 2470 unmodified lines
24712471 break;
24722472 default:
24732473 dev_warn(codec->dev, "Unknown DSPCLK divisor read back\n");
2474− dspclk = wm8962->sysclk;
2474+ dspclk = wm8962->sysclk_rate;
24752475 }
24762476
24772477 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
10721072
10731073 priv->core.arizona->dapm = NULL;
10741074
1075+ arizona_free_spk(codec);
1076+
10751077 return 0;
10761078 }
10771079
sound/soc/codecs/wm8998.c+2−0
@@ -1324,6 +1324,8 @@ static int wm8998_codec_remove(struct snd_soc_codec *codec) · 1323 unmodified lines
13241324
13251325 priv->core.arizona->dapm = NULL;
13261326
1327+ arizona_free_spk(codec);
1328+
13271329 return 0;
13281330 }
13291331
sound/soc/intel/Kconfig+0−1
@@ -163,7 +163,6 @@ config SND_SOC_INTEL_SKYLAKE · 162 unmodified lines
163163 tristate
164164 select SND_HDA_EXT_CORE
165165 select SND_SOC_TOPOLOGY
166− select SND_HDA_I915
167166 select SND_SOC_INTEL_SST
168167
169168 config 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
13451345 return 0;
13461346
13471347 /* wait for pause to complete before we reset the stream */
1348− while (stream->running && tries--)
1348+ while (stream->running && --tries)
13491349 msleep(1);
13501350 if (!tries) {
13511351 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
336336 skl_ipc_int_disable(dsp);
337337
338338 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+
339344 skl_dsp_disable_core(dsp);
340345 }
341346 EXPORT_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
239239 {
240240 int multiplier = 1;
241241 struct skl_module_fmt *in_fmt, *out_fmt;
242+ int in_rate, out_rate;
242243
243244
244245 /* 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
249250
250251 if (mcfg->m_type == SKL_MODULE_TYPE_SRCINT)
251252 multiplier = 5;
252− mcfg->ibs = (in_fmt->s_freq / 1000) *
253− (mcfg->in_fmt->channels) *
254− (mcfg->in_fmt->bit_depth >> 3) *
255− multiplier;
256−
257− mcfg->obs = (mcfg->out_fmt->s_freq / 1000) *
258− (mcfg->out_fmt->channels) *
259− (mcfg->out_fmt->bit_depth >> 3) *
260− multiplier;
253+
254+ if (in_fmt->s_freq % 1000)
255+ in_rate = (in_fmt->s_freq / 1000) + 1;
256+ else
257+ in_rate = (in_fmt->s_freq / 1000);
258+
259+ mcfg->ibs = in_rate * (mcfg->in_fmt->channels) *
260+ (mcfg->in_fmt->bit_depth >> 3) *
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;
261271 }
262272
263273 static 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
485495 if (!skl_is_pipe_mcps_avail(skl, mconfig))
486496 return -ENOMEM;
487497
498+ skl_tplg_alloc_pipe_mcps(skl, mconfig);
499+
488500 if (mconfig->is_loadable && ctx->dsp->fw_ops.load_mod) {
489501 ret = ctx->dsp->fw_ops.load_mod(ctx->dsp,
490502 mconfig->id.module_id, mconfig->guid);
491503 if (ret < 0)
492504 return ret;
505+
506+ mconfig->m_state = SKL_MODULE_LOADED;
493507 }
494508
495509 /* 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
509523 ret = skl_tplg_set_module_params(w, ctx);
510524 if (ret < 0)
511525 return ret;
512− skl_tplg_alloc_pipe_mcps(skl, mconfig);
513526 }
514527
515528 return 0;
@@ -524,7 +537,8 @@ static int skl_tplg_unload_pipe_modules(struct skl_sst *ctx, · 8 unmodified lines
524537 list_for_each_entry(w_module, &pipe->w_list, node) {
525538 mconfig = w_module->w->priv;
526539
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)
528542 return ctx->dsp->fw_ops.unload_mod(ctx->dsp,
529543 mconfig->id.module_id);
530544 }
@@ -558,6 +572,9 @@ static int skl_tplg_mixer_dapm_pre_pmu_event(struct snd_soc_dapm_widget *w, · 27 unmodified lines
558572 if (!skl_is_pipe_mem_avail(skl, mconfig))
559573 return -ENOMEM;
560574
575+ skl_tplg_alloc_pipe_mem(skl, mconfig);
576+ skl_tplg_alloc_pipe_mcps(skl, mconfig);
577+
561578 /*
562579 * Create a list of modules for pipe.
563580 * 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
601618 src_module = dst_module;
602619 }
603620
604− skl_tplg_alloc_pipe_mem(skl, mconfig);
605− skl_tplg_alloc_pipe_mcps(skl, mconfig);
606−
607621 return 0;
608622 }
609623
sound/soc/intel/skylake/skl-topology.h+4−4
@@ -274,10 +274,10 @@ struct skl_pipe { · 273 unmodified lines
274274
275275 enum skl_module_state {
276276 SKL_MODULE_UNINIT = 0,
277− SKL_MODULE_INIT_DONE = 1,
278− SKL_MODULE_LOADED = 2,
279− SKL_MODULE_UNLOADED = 3,
280− SKL_MODULE_BIND_DONE = 4
277+ SKL_MODULE_LOADED = 1,
278+ SKL_MODULE_INIT_DONE = 2,
279+ SKL_MODULE_BIND_DONE = 3,
280+ SKL_MODULE_UNLOADED = 4,
281281 };
282282
283283 struct 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
222222 struct hdac_ext_bus *ebus = pci_get_drvdata(pci);
223223 struct skl *skl = ebus_to_skl(ebus);
224224 struct hdac_bus *bus = ebus_to_hbus(ebus);
225+ int ret = 0;
225226
226227 /*
227228 * 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
232233 enable_irq_wake(bus->irq);
233234 pci_save_state(pci);
234235 pci_disable_device(pci);
235− return 0;
236236 } 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");
238247 }
248+
249+ return ret;
239250 }
240251
241252 static int skl_resume(struct device *dev)
@@ -316,17 +327,20 @@ static int skl_free(struct hdac_ext_bus *ebus) · 74 unmodified lines
316327
317328 if (bus->irq >= 0)
318329 free_irq(bus->irq, (void *)bus);
319− if (bus->remap_addr)
320− iounmap(bus->remap_addr);
321−
322330 snd_hdac_bus_free_stream_pages(bus);
323331 snd_hdac_stream_free_all(ebus);
324332 snd_hdac_link_free_all(ebus);
333+
334+ if (bus->remap_addr)
335+ iounmap(bus->remap_addr);
336+
325337 pci_release_regions(skl->pci);
326338 pci_disable_device(skl->pci);
327339
328340 snd_hdac_ext_bus_exit(ebus);
329341
342+ if (IS_ENABLED(CONFIG_SND_SOC_HDAC_HDMI))
343+ snd_hdac_i915_exit(&ebus->bus);
330344 return 0;
331345 }
332346
@@ -719,12 +733,12 @@ static void skl_remove(struct pci_dev *pci) · 386 unmodified lines
719733 if (skl->tplg)
720734 release_firmware(skl->tplg);
721735
722− if (IS_ENABLED(CONFIG_SND_SOC_HDAC_HDMI))
723− snd_hdac_i915_exit(&ebus->bus);
724−
725736 if (pci_dev_run_wake(pci))
726737 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+
728742 skl_platform_unregister(&pci->dev);
729743 skl_free_dsp(skl);
730744 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
21882188 int count = 0;
21892189 char *state = "not set";
21902190
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+
21912198 list_for_each_entry(w, &cmpnt->card->widgets, list) {
21922199 if (w->dapm != dapm)
21932200 continue;