History

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

No conflicts.

Jakub Kicinski committed 4 years ago

Commit 5b91c5c2 parents 4f5e483 f1baf68328 files · +4072 −1720Browse files

Unified · Split

328 files
  1. Documentation/arm64/silicon-errata.rst +2 −0
  2. Documentation/dev-tools/kunit/usage.rst +1 −1
  3. Documentation/filesystems/netfs_library.rst +16 −0
  4. Documentation/gpu/todo.rst +0 −24
  5. Documentation/userspace-api/ioctl/ioctl-number.rst +3 −0
  6. MAINTAINERS +18 −4
  7. Makefile +1 −1
  8. arch/arm/crypto/blake2s-shash.c +2 −2
  9. arch/arm64/Kconfig +16 −0
  10. arch/arm64/kernel/cpu_errata.c +8 −0
  11. arch/arm64/kvm/arm.c +33 −18
  12. arch/arm64/kvm/handle_exit.c +8 −0
  13. arch/arm64/kvm/hyp/include/hyp/switch.h +21 −2
  14. arch/arm64/tools/cpucaps +3 −2
  15. arch/mips/boot/dts/ingenic/ci20.dts +2 −13
  16. arch/mips/kvm/mips.c +46 −4
  17. arch/riscv/kvm/vcpu.c +31 −17
  18. arch/riscv/kvm/vcpu_sbi_base.c +2 −1
  19. arch/s390/kvm/kvm-s390.c +2 −0
  20. arch/x86/crypto/blake2s-shash.c +2 −2
  21. arch/x86/events/intel/core.c +13 −0
  22. arch/x86/events/intel/pt.c +3 −2
  23. arch/x86/include/asm/kvm-x86-ops.h +1 −1
  24. arch/x86/include/asm/kvm_host.h +2 −1
  25. arch/x86/include/asm/xen/hypervisor.h +0 −14
  26. arch/x86/kvm/cpuid.c +7 −6
  27. arch/x86/kvm/lapic.c +2 −8
  28. arch/x86/kvm/svm/svm.c +18 −3
  29. arch/x86/kvm/vmx/vmx.c +18 −3
  30. arch/x86/kvm/x86.c +6 −4
  31. arch/x86/kvm/x86.h +0 −45
  32. arch/x86/xen/enlighten_hvm.c +4 −9
  33. arch/x86/xen/enlighten_pv.c +0 −4
  34. arch/x86/xen/smp_pv.c +6 −20
  35. block/bio-integrity.c +1 −1
  36. block/fops.c +19 −14
  37. crypto/algapi.c +1 −0
  38. crypto/api.c +0 −1
  39. crypto/blake2s_generic.c +2 −2
  40. drivers/acpi/Kconfig +1 −0
  41. drivers/ata/libata-core.c +16 −8
  42. drivers/char/random.c +22 −17
  43. drivers/crypto/marvell/octeontx2/otx2_cptpf_ucode.c +2 −1
  44. drivers/dma-buf/dma-heap.c +2 −0
  45. drivers/edac/altera_edac.c +1 −1
  46. drivers/edac/xgene_edac.c +1 −1
  47. drivers/gpu/drm/amd/amdgpu/amdgpu.h +8 −2
  48. drivers/gpu/drm/amd/amdgpu/amdgpu_acpi.c +32 −5
  49. drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c +9 −2
  50. drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c +1 −1
  51. drivers/gpu/drm/amd/amdgpu/gmc_v10_0.c +3 −0
  52. drivers/gpu/drm/amd/display/dc/clk_mgr/dcn301/vg_clk_mgr.c +8 −8
  53. drivers/gpu/drm/amd/display/dc/clk_mgr/dcn31/dcn31_clk_mgr.c +10 −10
  54. drivers/gpu/drm/amd/display/dc/core/dc_link_dp.c +20 −0
  55. drivers/gpu/drm/amd/display/dc/dce110/dce110_hw_sequencer.c +0 −5
  56. drivers/gpu/drm/amd/display/dc/dcn10/dcn10_stream_encoder.c +0 −15
  57. drivers/gpu/drm/amd/display/dc/dcn10/dcn10_stream_encoder.h +0 −3
  58. drivers/gpu/drm/amd/display/dc/dcn20/dcn20_stream_encoder.c +0 −2
  59. drivers/gpu/drm/amd/display/dc/dcn30/dcn30_dio_stream_encoder.c +0 −2
  60. drivers/gpu/drm/amd/display/dc/inc/hw/stream_encoder.h +0 −4
  61. drivers/gpu/drm/amd/pm/swsmu/smu11/sienna_cichlid_ppt.c +3 −3
  62. drivers/gpu/drm/i915/display/intel_overlay.c +3 −0
  63. drivers/gpu/drm/i915/display/intel_tc.c +2 −1
  64. drivers/gpu/drm/i915/gem/i915_gem_execbuffer.c +7 −2
  65. drivers/gpu/drm/i915/gt/uc/intel_guc.h +5 −0
  66. drivers/gpu/drm/i915/gt/uc/intel_guc_submission.c +97 −17
  67. drivers/gpu/drm/i915/i915_gpu_error.c +1 −1
  68. drivers/gpu/drm/i915/i915_reg.h +2 −1
  69. drivers/gpu/drm/kmb/kmb_plane.c +0 −6
  70. drivers/gpu/drm/mxsfb/mxsfb_kms.c +5 −1
  71. drivers/gpu/drm/nouveau/nvkm/subdev/bios/base.c +1 −1
  72. drivers/infiniband/core/cm.c +1 −1
  73. drivers/infiniband/core/cma.c +12 −10
  74. drivers/infiniband/core/ucma.c +23 −11
  75. drivers/infiniband/hw/hfi1/ipoib.h +1 −1
  76. drivers/infiniband/hw/hfi1/ipoib_main.c +15 −12
  77. drivers/infiniband/hw/hfi1/ipoib_tx.c +26 −12
  78. drivers/infiniband/hw/mlx4/main.c +1 −1
  79. drivers/infiniband/sw/rdmavt/qp.c +2 −0
  80. drivers/infiniband/sw/siw/siw.h +1 −6
  81. drivers/infiniband/sw/siw/siw_qp_rx.c +11 −9
  82. drivers/infiniband/sw/siw/siw_verbs.c +2 −1
  83. drivers/input/touchscreen/wm97xx-core.c +3 −9
  84. drivers/iommu/amd/init.c +2 −0
  85. drivers/iommu/intel/irq_remapping.c +10 −3
  86. drivers/iommu/ioasid.c +1 −0
  87. drivers/iommu/iommu.c +19 −14
  88. drivers/iommu/omap-iommu.c +1 −1
  89. drivers/md/md.c +4 −4
  90. drivers/mmc/core/sd.c +7 −1
  91. drivers/mmc/host/moxart-mmc.c +1 −1
  92. drivers/mmc/host/sdhci-of-esdhc.c +6 −2
  93. drivers/mmc/host/sh_mmcif.c +3 −0
  94. drivers/net/bonding/bond_3ad.c +2 −1
  95. drivers/net/dsa/bcm_sf2.c +5 −2
  96. drivers/net/dsa/lantiq_gswip.c +11 −3
  97. drivers/net/dsa/mt7530.c +1 −1
  98. drivers/net/dsa/mv88e6xxx/chip.c +10 −5
  99. drivers/net/dsa/ocelot/felix_vsc9959.c +3 −1
  100. drivers/net/dsa/ocelot/seville_vsc9953.c +3 −2
  101. drivers/net/dsa/qca/ar9331.c +1 −2
  102. drivers/net/ethernet/amd/xgbe/xgbe-pci.c +3 −0
  103. drivers/net/ethernet/cadence/macb_main.c +1 −1
  104. drivers/net/ethernet/freescale/dpaa2/dpaa2-eth.c +2 −2
  105. drivers/net/ethernet/google/gve/gve_rx.c +1 −0
  106. drivers/net/ethernet/ibm/ibmvnic.c +9 −4
  107. drivers/net/ethernet/intel/ice/ice.h +2 −1
  108. drivers/net/ethernet/intel/ice/ice_common.c +2 −1
  109. drivers/net/ethernet/intel/ice/ice_lag.c +28 −6
  110. drivers/net/ethernet/intel/ice/ice_lan_tx_rx.h +1 −0
  111. drivers/net/ethernet/intel/ice/ice_main.c +20 −8
  112. drivers/net/ethernet/intel/ixgbevf/ixgbevf_main.c +7 −6
  113. drivers/net/ethernet/litex/Kconfig +1 −1
  114. drivers/net/ethernet/microchip/sparx5/sparx5_ethtool.c +1 −1
  115. drivers/net/ethernet/mscc/ocelot.c +15 −4
  116. drivers/net/ethernet/netronome/nfp/flower/tunnel_conf.c +8 −4
  117. drivers/net/mdio/mdio-aspeed.c +1 −0
  118. drivers/net/phy/marvell.c +9 −8
  119. drivers/net/usb/qmi_wwan.c +2 −0
  120. drivers/net/veth.c +8 −5
  121. drivers/nvme/host/core.c +8 −1
  122. drivers/nvme/host/fabrics.h +1 −0
  123. drivers/nvme/host/rdma.c +1 −0
  124. drivers/nvme/host/tcp.c +1 −0
  125. drivers/pci/controller/cadence/pci-j721e.c +42 −43
  126. drivers/pci/controller/dwc/pcie-kirin.c +18 −13
  127. drivers/pci/msi/msi.c +2 −1
  128. drivers/scsi/bnx2fc/bnx2fc_fcoe.c +13 −8
  129. drivers/scsi/hisi_sas/hisi_sas_main.c +6 −8
  130. drivers/scsi/pm8001/pm8001_hwi.c +0 −18
  131. drivers/scsi/pm8001/pm8001_sas.c +5 −0
  132. drivers/scsi/pm8001/pm80xx_hwi.c +3 −28
  133. drivers/scsi/scsi_scan.c +50 −5
  134. drivers/video/console/Kconfig +20 −0
  135. drivers/video/fbdev/core/bitblit.c +16 −0
  136. drivers/video/fbdev/core/fbcon.c +536 −21
  137. drivers/video/fbdev/core/fbcon.h +72 −0
  138. drivers/video/fbdev/core/fbcon_ccw.c +24 −4
  139. drivers/video/fbdev/core/fbcon_cw.c +24 −4
  140. drivers/video/fbdev/core/fbcon_rotate.h +9 −0
  141. drivers/video/fbdev/core/fbcon_ud.c +29 −8
  142. drivers/video/fbdev/core/tileblit.c +16 −0
  143. drivers/video/fbdev/skeletonfb.c +6 −6
  144. fs/9p/fid.c +4 −5
  145. fs/Kconfig +2 −2
  146. fs/binfmt_misc.c +1 −5
  147. fs/btrfs/block-group.c +37 −2
  148. fs/btrfs/ctree.h +6 −0
  149. fs/btrfs/ioctl.c +2 −5
  150. fs/btrfs/qgroup.c +19 −2
  151. fs/btrfs/transaction.c +24 −0
  152. fs/btrfs/transaction.h +2 −0
  153. fs/btrfs/tree-checker.c +15 −0
  154. fs/btrfs/tree-log.c +23 −0
  155. fs/cachefiles/io.c +59 −0
  156. fs/cifs/connect.c +16 −7
  157. fs/cifs/file.c +82 −139
  158. fs/cifs/fscache.c +108 −18
  159. fs/cifs/fscache.h +49 −30
  160. fs/cifs/inode.c +4 −4
  161. fs/cifs/sess.c +5 −1
  162. fs/erofs/data.c +4 −4
  163. fs/erofs/zdata.c +56 −57
  164. fs/erofs/zmap.c +7 −0
  165. fs/ext4/acl.c +4 −4
  166. fs/ext4/ext4.h +9 −8
  167. fs/ext4/ext4_jbd2.h +1 −1
  168. fs/ext4/extents.c +10 −6
  169. fs/ext4/fast_commit.c +78 −55
  170. fs/ext4/indirect.c +1 −1
  171. fs/ext4/inline.c +13 −10
  172. fs/ext4/inode.c +6 −6
  173. fs/ext4/ioctl.c +2 −2
  174. fs/ext4/mballoc.c +17 −9
  175. fs/ext4/migrate.c +1 −1
  176. fs/ext4/namei.c +2 −2
  177. fs/ext4/orphan.c +2 −2
  178. fs/ext4/super.c +2 −2
  179. fs/ext4/xattr.c +3 −3
  180. fs/file_table.c +2 −0
  181. fs/iomap/buffered-io.c +48 −4
  182. fs/jbd2/commit.c +4 −17
  183. fs/jbd2/journal.c +5 −1
  184. fs/jbd2/transaction.c +32 −21
  185. fs/ksmbd/auth.c +27 −0
  186. fs/ksmbd/smb2pdu.c +35 −10
  187. fs/ksmbd/smb_common.c +4 −1
  188. fs/ksmbd/transport_rdma.c +1 −1
  189. fs/ksmbd/vfs.h +1 −0
  190. fs/nfs/client.c +1 −1
  191. fs/nfs/dir.c +18 −6
  192. fs/nfs/nfs4proc.c +2 −1
  193. fs/nfsd/nfs3proc.c +11 −8
  194. fs/nfsd/nfs3xdr.c +2 −2
  195. fs/nfsd/nfs4proc.c +9 −4
  196. fs/nfsd/nfs4xdr.c +3 −7
  197. fs/nfsd/trace.h +7 −7
  198. fs/nfsd/vfs.c +40 −17
  199. fs/nfsd/vfs.h +2 −2
  200. fs/quota/dquot.c +8 −3
  201. fs/super.c +12 −7
  202. fs/sync.c +12 −6
  203. fs/xfs/xfs_aops.c +15 −1
  204. fs/xfs/xfs_bmap_util.c +3 −6
  205. fs/xfs/xfs_file.c +26 −60
  206. fs/xfs/xfs_inode.h +0 −9
  207. fs/xfs/xfs_ioctl.c +1 −1
  208. fs/xfs/xfs_pnfs.c +39 −3
  209. fs/xfs/xfs_super.c +5 −1
  210. include/crypto/internal/blake2s.h +25 −15
  211. include/linux/ata.h +1 −1
  212. include/linux/ceph/libceph.h +1 −0
  213. include/linux/ceph/messenger.h +5 −0
  214. include/linux/fb.h +1 −1
  215. include/linux/iomap.h +2 −0
  216. include/linux/jbd2.h +4 −9
  217. include/linux/kvm_host.h +109 −3
  218. include/linux/libata.h +1 −0
  219. include/linux/netfs.h +7 −0
  220. include/linux/nfs.h +0 −8
  221. include/linux/nfs_fs.h +1 −0
  222. include/linux/page_table_check.h +19 −0
  223. include/linux/pgtable.h +1 −0
  224. include/net/dst_metadata.h +13 −1
  225. include/sound/pcm.h +15 −0
  226. include/uapi/linux/kvm.h +3 −3
  227. include/uapi/linux/netfilter/nf_conntrack_common.h +1 −1
  228. include/uapi/linux/perf_event.h +2 −0
  229. include/uapi/sound/asound.h +3 −1
  230. include/uapi/xen/gntdev.h +7 −1
  231. include/xen/xenbus_dev.h +0 −2
  232. ipc/sem.c +2 −2
  233. kernel/auditsc.c +1 −1
  234. kernel/events/core.c +16 −0
  235. lib/crypto/blake2s.c +2 −2
  236. mm/debug_vm_pgtable.c +2 −0
  237. mm/khugepaged.c +21 −16
  238. mm/kmemleak.c +7 −6
  239. mm/page_isolation.c +1 −1
  240. mm/page_table_check.c +27 −28
  241. net/8021q/vlan.h +1 −1
  242. net/8021q/vlan_dev.c +11 −4
  243. net/8021q/vlan_netlink.c +4 −3
  244. net/ax25/af_ax25.c +5 −2
  245. net/can/isotp.c +22 −7
  246. net/ceph/ceph_common.c +7 −0
  247. net/ceph/messenger.c +4 −0
  248. net/ceph/messenger_v1.c +48 −6
  249. net/ceph/messenger_v2.c +186 −64
  250. net/core/skbuff.c +1 −1
  251. net/dsa/dsa2.c +6 −19
  252. net/ipv4/ipmr.c +2 −0
  253. net/ipv4/tcp.c +19 −14
  254. net/ipv6/ip6mr.c +2 −0
  255. net/mpls/af_mpls.c +1 −1
  256. net/mptcp/pm_netlink.c +6 −2
  257. net/netfilter/nf_conntrack_netlink.c +2 −1
  258. net/netfilter/nf_conntrack_proto_sctp.c +9 −0
  259. net/netfilter/nf_conntrack_proto_tcp.c +41 −18
  260. net/netfilter/nft_exthdr.c +1 −1
  261. net/netfilter/nft_payload.c +5 −4
  262. net/smc/smc_pnet.c +5 −3
  263. net/sunrpc/sysfs.c +4 −1
  264. net/sunrpc/xprtrdma/verbs.c +3 −0
  265. net/sunrpc/xprtsock.c +6 −1
  266. net/tipc/link.c +7 −2
  267. net/tipc/monitor.c +2 −0
  268. net/tipc/name_distr.c +1 −1
  269. security/integrity/digsig_asymmetric.c +9 −6
  270. security/integrity/ima/ima_fs.c +1 −1
  271. security/integrity/ima/ima_policy.c +8 −0
  272. security/integrity/ima/ima_template.c +7 −3
  273. security/integrity/integrity_audit.c +2 −0
  274. sound/core/pcm_native.c +13 −0
  275. sound/hda/intel-sdw-acpi.c +3 −4
  276. sound/pci/hda/hda_auto_parser.c +1 −1
  277. sound/pci/hda/hda_codec.c +4 −0
  278. sound/pci/hda/hda_generic.c +15 −2
  279. sound/pci/hda/hda_generic.h +3 −0
  280. sound/pci/hda/patch_realtek.c +55 −12
  281. sound/soc/amd/acp/acp-mach-common.c +2 −2
  282. sound/soc/codecs/cpcap.c +2 −0
  283. sound/soc/codecs/hdmi-codec.c +1 −1
  284. sound/soc/codecs/lpass-rx-macro.c +4 −4
  285. sound/soc/codecs/max9759.c +2 −1
  286. sound/soc/codecs/rt5682-i2c.c +4 −11
  287. sound/soc/codecs/rt5682.c +8 −16
  288. sound/soc/codecs/rt5682.h +0 −2
  289. sound/soc/codecs/wcd938x.c +17 −14
  290. sound/soc/fsl/pcm030-audio-fabric.c +8 −3
  291. sound/soc/generic/simple-card.c +25 −1
  292. sound/soc/mediatek/Kconfig +1 −1
  293. sound/soc/qcom/qdsp6/q6apm-dai.c +5 −2
  294. sound/soc/soc-acpi.c +2 −5
  295. sound/soc/soc-ops.c +26 −3
  296. sound/soc/soc-pcm.c +12 −6
  297. sound/soc/xilinx/xlnx_formatter_pcm.c +24 −3
  298. sound/usb/mixer.c +4 −0
  299. sound/usb/quirks-table.h +1 −1
  300. tools/arch/x86/include/asm/cpufeatures.h +2 −0
  301. tools/include/uapi/linux/kvm.h +3 −3
  302. tools/include/uapi/linux/perf_event.h +3 −3
  303. tools/include/uapi/linux/prctl.h +3 −0
  304. tools/include/uapi/sound/asound.h +9 −2
  305. tools/lib/perf/mmap.c +98 −0
  306. tools/lib/perf/tests/test-evsel.c +4 −1
  307. tools/objtool/check.c +1 −1
  308. tools/perf/builtin-ftrace.c +24 −21
  309. tools/perf/trace/beauty/prctl_option.sh +1 −1
  310. tools/perf/util/annotate.c +1 −0
  311. tools/perf/util/bpf_counter_cgroup.c +1 −1
  312. tools/perf/util/machine.c +2 −0
  313. tools/perf/util/map_symbol.h +1 −0
  314. tools/perf/util/perf_event_attr_fprintf.c +1 −1
  315. tools/perf/util/session.c +2 −1
  316. tools/perf/util/sort.c +2 −2
  317. tools/perf/util/stat-display.c +10 −9
  318. tools/perf/util/synthetic-events.c +19 −0
  319. tools/testing/kunit/run_checks.py +1 −1
  320. tools/testing/selftests/clone3/clone3.c +0 −2
  321. tools/testing/selftests/ir/ir_loopback.c +10 −0
  322. tools/testing/selftests/net/mptcp/mptcp_join.sh +1 −0
  323. tools/testing/selftests/perf_events/sigtrap_threads.c +9 −8
  324. tools/testing/selftests/pidfd/pidfd.h +10 −3
  325. tools/testing/selftests/pidfd/pidfd_fdinfo_test.c +18 −4
  326. tools/testing/selftests/pidfd/pidfd_test.c +3 −3
  327. tools/testing/selftests/pidfd/pidfd_wait.c +2 −3
  328. tools/testing/selftests/vm/userfaultfd.c +7 −2
Documentation/arm64/silicon-errata.rst+2−0
@@ -100,6 +100,8 @@ stable kernels. · 99 unmodified lines
100100 +----------------+-----------------+-----------------+-----------------------------+
101101 | ARM | Cortex-A510 | #2051678 | ARM64_ERRATUM_2051678 |
102102 +----------------+-----------------+-----------------+-----------------------------+
103+| ARM | Cortex-A510 | #2077057 | ARM64_ERRATUM_2077057 |
104++----------------+-----------------+-----------------+-----------------------------+
103105 | ARM | Cortex-A710 | #2119858 | ARM64_ERRATUM_2119858 |
104106 +----------------+-----------------+-----------------+-----------------------------+
105107 | ARM | Cortex-A710 | #2054223 | ARM64_ERRATUM_2054223 |
Documentation/dev-tools/kunit/usage.rst+1−1
@@ -242,7 +242,7 @@ example: · 241 unmodified lines
242242
243243 int rectangle_area(struct shape *this)
244244 {
245− struct rectangle *self = container_of(this, struct shape, parent);
245+ struct rectangle *self = container_of(this, struct rectangle, parent);
246246
247247 return self->length * self->width;
248248 };
Documentation/filesystems/netfs_library.rst+16−0
@@ -462,6 +462,10 @@ operation table looks like the following:: · 461 unmodified lines
462462 struct iov_iter *iter,
463463 netfs_io_terminated_t term_func,
464464 void *term_func_priv);
465+
466+ int (*query_occupancy)(struct netfs_cache_resources *cres,
467+ loff_t start, size_t len, size_t granularity,
468+ loff_t *_data_start, size_t *_data_len);
465469 };
466470
467471 With a termination handler function pointer::
@@ -536,6 +540,18 @@ The methods defined in the table are: · 68 unmodified lines
536540 indicating whether the termination is definitely happening in the caller's
537541 context.
538542
543+ * ``query_occupancy()``
544+
545+ [Required] Called to find out where the next piece of data is within a
546+ particular region of the cache. The start and length of the region to be
547+ queried are passed in, along with the granularity to which the answer needs
548+ to be aligned. The function passes back the start and length of the data,
549+ if any, available within that region. Note that there may be a hole at the
550+ front.
551+
552+ It returns 0 if some data was found, -ENODATA if there was no usable data
553+ within the region or -ENOBUFS if there is no caching on this file.
554+
539555 Note that these methods are passed a pointer to the cache resource structure,
540556 not the read request structure as they could be used in other situations where
541557 there isn't a read request structure as well, such as writing dirty data to the
Documentation/gpu/todo.rst+0−24
@@ -300,30 +300,6 @@ Contact: Daniel Vetter, Noralf Tronnes · 299 unmodified lines
300300
301301 Level: Advanced
302302
303−Garbage collect fbdev scrolling acceleration
304−--------------------------------------------
305−
306−Scroll acceleration has been disabled in fbcon. Now it works as the old
307−SCROLL_REDRAW mode. A ton of code was removed in fbcon.c and the hook bmove was
308−removed from fbcon_ops.
309−Remaining tasks:
310−
311−- a bunch of the hooks in fbcon_ops could be removed or simplified by calling
312− directly instead of the function table (with a switch on p->rotate)
313−
314−- fb_copyarea is unused after this, and can be deleted from all drivers
315−
316−- after that, fb_copyarea can be deleted from fb_ops in include/linux/fb.h as
317− well as cfb_copyarea
318−
319−Note that not all acceleration code can be deleted, since clearing and cursor
320−support is still accelerated, which might be good candidates for further
321−deletion projects.
322−
323−Contact: Daniel Vetter
324−
325−Level: Intermediate
326−
327303 idr_init_base()
328304 ---------------
329305
Documentation/userspace-api/ioctl/ioctl-number.rst+3−0
@@ -115,6 +115,7 @@ Code Seq# Include File Comments · 114 unmodified lines
115115 'B' 00-1F linux/cciss_ioctl.h conflict!
116116 'B' 00-0F include/linux/pmu.h conflict!
117117 'B' C0-FF advanced bbus <mailto:maassen@uni-freiburg.de>
118+'B' 00-0F xen/xenbus_dev.h conflict!
118119 'C' all linux/soundcard.h conflict!
119120 'C' 01-2F linux/capi.h conflict!
120121 'C' F0-FF drivers/net/wan/cosa.h conflict!
@@ -134,6 +135,7 @@ Code Seq# Include File Comments · 13 unmodified lines
134135 'F' 80-8F linux/arcfb.h conflict!
135136 'F' DD video/sstfb.h conflict!
136137 'G' 00-3F drivers/misc/sgi-gru/grulib.h conflict!
138+'G' 00-0F xen/gntalloc.h, xen/gntdev.h conflict!
137139 'H' 00-7F linux/hiddev.h conflict!
138140 'H' 00-0F linux/hidraw.h conflict!
139141 'H' 01 linux/mei.h conflict!
@@ -176,6 +178,7 @@ Code Seq# Include File Comments · 36 unmodified lines
176178 'P' 60-6F sound/sscape_ioctl.h conflict!
177179 'P' 00-0F drivers/usb/class/usblp.c conflict!
178180 'P' 01-09 drivers/misc/pci_endpoint_test.c conflict!
181+'P' 00-0F xen/privcmd.h conflict!
179182 'Q' all linux/soundcard.h
180183 'R' 00-1F linux/random.h conflict!
181184 'R' 01 linux/rfkill.h conflict!
MAINTAINERS+18−4
@@ -10881,6 +10881,12 @@ T: git git://git.kernel.org/pub/scm/linux/kernel/git/axboe/linux-block.git · 10880 unmodified lines
1088110881 F: drivers/ata/pata_arasan_cf.c
1088210882 F: include/linux/pata_arasan_cf_data.h
1088310883
10884+LIBATA PATA DRIVERS
10885+R: Sergey Shtylyov <s.shtylyov@omp.ru>
10886+L: linux-ide@vger.kernel.org
10887+F: drivers/ata/ata_*.c
10888+F: drivers/ata/pata_*.c
10889+
1088410890 LIBATA PATA FARADAY FTIDE010 AND GEMINI SATA BRIDGE DRIVERS
1088510891 M: Linus Walleij <linus.walleij@linaro.org>
1088610892 L: linux-ide@vger.kernel.org
@@ -12401,7 +12407,7 @@ F: include/uapi/linux/membarrier.h · 1514 unmodified lines
1240112407 F: kernel/sched/membarrier.c
1240212408
1240312409 MEMBLOCK
12404−M: Mike Rapoport <rppt@linux.ibm.com>
12410+M: Mike Rapoport <rppt@kernel.org>
1240512411 L: linux-mm@kvack.org
1240612412 S: Maintained
1240712413 F: Documentation/core-api/boot-time-mm.rst
@@ -13299,8 +13305,8 @@ W: http://www.iptables.org/ · 891 unmodified lines
1329913305 W: http://www.nftables.org/
1330013306 Q: http://patchwork.ozlabs.org/project/netfilter-devel/list/
1330113307 C: irc://irc.libera.chat/netfilter
13302−T: git git://git.kernel.org/pub/scm/linux/kernel/git/pablo/nf.git
13303−T: git git://git.kernel.org/pub/scm/linux/kernel/git/pablo/nf-next.git
13308+T: git git://git.kernel.org/pub/scm/linux/kernel/git/netfilter/nf.git
13309+T: git git://git.kernel.org/pub/scm/linux/kernel/git/netfilter/nf-next.git
1330413310 F: include/linux/netfilter*
1330513311 F: include/linux/netfilter/
1330613312 F: include/net/netfilter/
@@ -13567,7 +13573,7 @@ F: tools/testing/selftests/nci/ · 260 unmodified lines
1356713573
1356813574 NFS, SUNRPC, AND LOCKD CLIENTS
1356913575 M: Trond Myklebust <trond.myklebust@hammerspace.com>
13570−M: Anna Schumaker <anna.schumaker@netapp.com>
13576+M: Anna Schumaker <anna@kernel.org>
1357113577 L: linux-nfs@vger.kernel.org
1357213578 S: Maintained
1357313579 W: http://client.linux-nfs.org
@@ -16469,6 +16475,14 @@ F: Documentation/devicetree/bindings/i2c/renesas,rmobile-iic.yaml · 2895 unmodified lines
1646916475 F: drivers/i2c/busses/i2c-rcar.c
1647016476 F: drivers/i2c/busses/i2c-sh_mobile.c
1647116477
16478+RENESAS R-CAR SATA DRIVER
16479+R: Sergey Shtylyov <s.shtylyov@omp.ru>
16480+S: Supported
16481+L: linux-ide@vger.kernel.org
16482+L: linux-renesas-soc@vger.kernel.org
16483+F: Documentation/devicetree/bindings/ata/renesas,rcar-sata.yaml
16484+F: drivers/ata/sata_rcar.c
16485+
1647216486 RENESAS R-CAR THERMAL DRIVERS
1647316487 M: Niklas Söderlund <niklas.soderlund@ragnatech.se>
1647416488 L: linux-renesas-soc@vger.kernel.org
Makefile+1−1
@@ -2,7 +2,7 @@ · 1 unmodified line
22 VERSION = 5
33 PATCHLEVEL = 17
44 SUBLEVEL = 0
5−EXTRAVERSION = -rc2
5+EXTRAVERSION = -rc3
66 NAME = Gobble Gobble
77
88 # *DOCUMENTATION*
arch/arm/crypto/blake2s-shash.c+2−2
@@ -13,12 +13,12 @@ · 12 unmodified lines
1313 static int crypto_blake2s_update_arm(struct shash_desc *desc,
1414 const u8 *in, unsigned int inlen)
1515 {
16− return crypto_blake2s_update(desc, in, inlen, blake2s_compress);
16+ return crypto_blake2s_update(desc, in, inlen, false);
1717 }
1818
1919 static int crypto_blake2s_final_arm(struct shash_desc *desc, u8 *out)
2020 {
21− return crypto_blake2s_final(desc, out, blake2s_compress);
21+ return crypto_blake2s_final(desc, out, false);
2222 }
2323
2424 #define BLAKE2S_ALG(name, driver_name, digest_size) \
arch/arm64/Kconfig+16−0
@@ -680,6 +680,22 @@ config ARM64_ERRATUM_2051678 · 679 unmodified lines
680680
681681 If unsure, say Y.
682682
683+config ARM64_ERRATUM_2077057
684+ bool "Cortex-A510: 2077057: workaround software-step corrupting SPSR_EL2"
685+ help
686+ This option adds the workaround for ARM Cortex-A510 erratum 2077057.
687+ Affected Cortex-A510 may corrupt SPSR_EL2 when the a step exception is
688+ expected, but a Pointer Authentication trap is taken instead. The
689+ erratum causes SPSR_EL1 to be copied to SPSR_EL2, which could allow
690+ EL1 to cause a return to EL2 with a guest controlled ELR_EL2.
691+
692+ This can only happen when EL2 is stepping EL1.
693+
694+ When these conditions occur, the SPSR_EL2 value is unchanged from the
695+ previous guest entry, and can be restored from the in-memory copy.
696+
697+ If unsure, say Y.
698+
683699 config ARM64_ERRATUM_2119858
684700 bool "Cortex-A710/X2: 2119858: workaround TRBE overwriting trace data in FILL mode"
685701 default y
arch/arm64/kernel/cpu_errata.c+8−0
@@ -600,6 +600,14 @@ const struct arm64_cpu_capabilities arm64_errata[] = { · 599 unmodified lines
600600 CAP_MIDR_RANGE_LIST(trbe_write_out_of_range_cpus),
601601 },
602602 #endif
603+#ifdef CONFIG_ARM64_ERRATUM_2077057
604+ {
605+ .desc = "ARM erratum 2077057",
606+ .capability = ARM64_WORKAROUND_2077057,
607+ .type = ARM64_CPUCAP_LOCAL_CPU_ERRATUM,
608+ ERRATA_MIDR_REV_RANGE(MIDR_CORTEX_A510, 0, 0, 2),
609+ },
610+#endif
603611 #ifdef CONFIG_ARM64_ERRATUM_2064142
604612 {
605613 .desc = "ARM erratum 2064142",
arch/arm64/kvm/arm.c+33−18
@@ -797,6 +797,24 @@ static bool kvm_vcpu_exit_request(struct kvm_vcpu *vcpu, int *ret) · 796 unmodified lines
797797 xfer_to_guest_mode_work_pending();
798798 }
799799
800+/*
801+ * Actually run the vCPU, entering an RCU extended quiescent state (EQS) while
802+ * the vCPU is running.
803+ *
804+ * This must be noinstr as instrumentation may make use of RCU, and this is not
805+ * safe during the EQS.
806+ */
807+static int noinstr kvm_arm_vcpu_enter_exit(struct kvm_vcpu *vcpu)
808+{
809+ int ret;
810+
811+ guest_state_enter_irqoff();
812+ ret = kvm_call_hyp_ret(__kvm_vcpu_run, vcpu);
813+ guest_state_exit_irqoff();
814+
815+ return ret;
816+}
817+
800818 /**
801819 * kvm_arch_vcpu_ioctl_run - the main VCPU run function to execute guest code
802820 * @vcpu: The VCPU pointer
@@ -881,9 +899,9 @@ int kvm_arch_vcpu_ioctl_run(struct kvm_vcpu *vcpu) · 78 unmodified lines
881899 * Enter the guest
882900 */
883901 trace_kvm_entry(*vcpu_pc(vcpu));
884− guest_enter_irqoff();
902+ guest_timing_enter_irqoff();
885903
886− ret = kvm_call_hyp_ret(__kvm_vcpu_run, vcpu);
904+ ret = kvm_arm_vcpu_enter_exit(vcpu);
887905
888906 vcpu->mode = OUTSIDE_GUEST_MODE;
889907 vcpu->stat.exits++;
@@ -918,26 +936,23 @@ int kvm_arch_vcpu_ioctl_run(struct kvm_vcpu *vcpu) · 28 unmodified lines
918936 kvm_arch_vcpu_ctxsync_fp(vcpu);
919937
920938 /*
921− * We may have taken a host interrupt in HYP mode (ie
922− * while executing the guest). This interrupt is still
923− * pending, as we haven't serviced it yet!
939+ * We must ensure that any pending interrupts are taken before
940+ * we exit guest timing so that timer ticks are accounted as
941+ * guest time. Transiently unmask interrupts so that any
942+ * pending interrupts are taken.
924943 *
925− * We're now back in SVC mode, with interrupts
926− * disabled. Enabling the interrupts now will have
927− * the effect of taking the interrupt again, in SVC
928− * mode this time.
944+ * Per ARM DDI 0487G.b section D1.13.4, an ISB (or other
945+ * context synchronization event) is necessary to ensure that
946+ * pending interrupts are taken.
929947 */
930948 local_irq_enable();
949+ isb();
950+ local_irq_disable();
951+
952+ guest_timing_exit_irqoff();
953+
954+ local_irq_enable();
931955
932− /*
933− * We do local_irq_enable() before calling guest_exit() so
934− * that if a timer interrupt hits while running the guest we
935− * account that tick as being spent in the guest. We enable
936− * preemption after calling guest_exit() so that if we get
937− * preempted we make sure ticks after that is not counted as
938− * guest time.
939− */
940− guest_exit();
941956 trace_kvm_exit(ret, kvm_vcpu_trap_get_class(vcpu), *vcpu_pc(vcpu));
942957
943958 /* Exit types that need handling before we can be preempted */
arch/arm64/kvm/handle_exit.c+8−0
@@ -228,6 +228,14 @@ int handle_exit(struct kvm_vcpu *vcpu, int exception_index) · 227 unmodified lines
228228 {
229229 struct kvm_run *run = vcpu->run;
230230
231+ if (ARM_SERROR_PENDING(exception_index)) {
232+ /*
233+ * The SError is handled by handle_exit_early(). If the guest
234+ * survives it will re-execute the original instruction.
235+ */
236+ return 1;
237+ }
238+
231239 exception_index = ARM_EXCEPTION_CODE(exception_index);
232240
233241 switch (exception_index) {
arch/arm64/kvm/hyp/include/hyp/switch.h+21−2
@@ -402,6 +402,24 @@ static inline bool kvm_hyp_handle_exit(struct kvm_vcpu *vcpu, u64 *exit_code) · 401 unmodified lines
402402 return false;
403403 }
404404
405+static inline void synchronize_vcpu_pstate(struct kvm_vcpu *vcpu, u64 *exit_code)
406+{
407+ /*
408+ * Check for the conditions of Cortex-A510's #2077057. When these occur
409+ * SPSR_EL2 can't be trusted, but isn't needed either as it is
410+ * unchanged from the value in vcpu_gp_regs(vcpu)->pstate.
411+ * Are we single-stepping the guest, and took a PAC exception from the
412+ * active-not-pending state?
413+ */
414+ if (cpus_have_final_cap(ARM64_WORKAROUND_2077057) &&
415+ vcpu->guest_debug & KVM_GUESTDBG_SINGLESTEP &&
416+ *vcpu_cpsr(vcpu) & DBG_SPSR_SS &&
417+ ESR_ELx_EC(read_sysreg_el2(SYS_ESR)) == ESR_ELx_EC_PAC)
418+ write_sysreg_el2(*vcpu_cpsr(vcpu), SYS_SPSR);
419+
420+ vcpu->arch.ctxt.regs.pstate = read_sysreg_el2(SYS_SPSR);
421+}
422+
405423 /*
406424 * Return true when we were able to fixup the guest exit and should return to
407425 * the guest, false when we should restore the host state and return to the
@@ -413,7 +431,7 @@ static inline bool fixup_guest_exit(struct kvm_vcpu *vcpu, u64 *exit_code) · 5 unmodified lines
413431 * Save PSTATE early so that we can evaluate the vcpu mode
414432 * early on.
415433 */
416− vcpu->arch.ctxt.regs.pstate = read_sysreg_el2(SYS_SPSR);
434+ synchronize_vcpu_pstate(vcpu, exit_code);
417435
418436 /*
419437 * Check whether we want to repaint the state one way or
@@ -424,7 +442,8 @@ static inline bool fixup_guest_exit(struct kvm_vcpu *vcpu, u64 *exit_code) · 4 unmodified lines
424442 if (ARM_EXCEPTION_CODE(*exit_code) != ARM_EXCEPTION_IRQ)
425443 vcpu->arch.fault.esr_el2 = read_sysreg_el2(SYS_ESR);
426444
427− if (ARM_SERROR_PENDING(*exit_code)) {
445+ if (ARM_SERROR_PENDING(*exit_code) &&
446+ ARM_EXCEPTION_CODE(*exit_code) != ARM_EXCEPTION_IRQ) {
428447 u8 esr_ec = kvm_vcpu_trap_get_class(vcpu);
429448
430449 /*
arch/arm64/tools/cpucaps+3−2
@@ -55,9 +55,10 @@ WORKAROUND_1418040 · 54 unmodified lines
5555 WORKAROUND_1463225
5656 WORKAROUND_1508412
5757 WORKAROUND_1542419
58−WORKAROUND_2064142
59−WORKAROUND_2038923
6058 WORKAROUND_1902691
59+WORKAROUND_2038923
60+WORKAROUND_2064142
61+WORKAROUND_2077057
6162 WORKAROUND_TRBE_OVERWRITE_FILL_MODE
6263 WORKAROUND_TSB_FLUSH_FAILURE
6364 WORKAROUND_TRBE_WRITE_OUT_OF_RANGE
arch/mips/boot/dts/ingenic/ci20.dts+2−13
@@ -83,6 +83,8 @@ · 82 unmodified lines
8383 label = "HDMI OUT";
8484 type = "a";
8585
86+ ddc-en-gpios = <&gpa 25 GPIO_ACTIVE_HIGH>;
87+
8688 port {
8789 hdmi_con: endpoint {
8890 remote-endpoint = <&dw_hdmi_out>;
@@ -114,17 +116,6 @@ · 25 unmodified lines
114116 gpio = <&gpf 14 GPIO_ACTIVE_LOW>;
115117 enable-active-high;
116118 };
117−
118− hdmi_power: fixedregulator@3 {
119− compatible = "regulator-fixed";
120−
121− regulator-name = "hdmi_power";
122− regulator-min-microvolt = <5000000>;
123− regulator-max-microvolt = <5000000>;
124−
125− gpio = <&gpa 25 0>;
126− enable-active-high;
127− };
128119 };
129120
130121 &ext {
@@ -576,8 +567,6 @@ · 445 unmodified lines
576567 pinctrl-names = "default";
577568 pinctrl-0 = <&pins_hdmi_ddc>;
578569
579− hdmi-5v-supply = <&hdmi_power>;
580−
581570 ports {
582571 #address-cells = <1>;
583572 #size-cells = <0>;
arch/mips/kvm/mips.c+46−4
@@ -414,6 +414,24 @@ int kvm_arch_vcpu_ioctl_set_guest_debug(struct kvm_vcpu *vcpu, · 413 unmodified lines
414414 return -ENOIOCTLCMD;
415415 }
416416
417+/*
418+ * Actually run the vCPU, entering an RCU extended quiescent state (EQS) while
419+ * the vCPU is running.
420+ *
421+ * This must be noinstr as instrumentation may make use of RCU, and this is not
422+ * safe during the EQS.
423+ */
424+static int noinstr kvm_mips_vcpu_enter_exit(struct kvm_vcpu *vcpu)
425+{
426+ int ret;
427+
428+ guest_state_enter_irqoff();
429+ ret = kvm_mips_callbacks->vcpu_run(vcpu);
430+ guest_state_exit_irqoff();
431+
432+ return ret;
433+}
434+
417435 int kvm_arch_vcpu_ioctl_run(struct kvm_vcpu *vcpu)
418436 {
419437 int r = -EINTR;
@@ -434,7 +452,7 @@ int kvm_arch_vcpu_ioctl_run(struct kvm_vcpu *vcpu) · 14 unmodified lines
434452 lose_fpu(1);
435453
436454 local_irq_disable();
437− guest_enter_irqoff();
455+ guest_timing_enter_irqoff();
438456 trace_kvm_enter(vcpu);
439457
440458 /*
@@ -445,10 +463,23 @@ int kvm_arch_vcpu_ioctl_run(struct kvm_vcpu *vcpu) · 4 unmodified lines
445463 */
446464 smp_store_mb(vcpu->mode, IN_GUEST_MODE);
447465
448− r = kvm_mips_callbacks->vcpu_run(vcpu);
466+ r = kvm_mips_vcpu_enter_exit(vcpu);
467+
468+ /*
469+ * We must ensure that any pending interrupts are taken before
470+ * we exit guest timing so that timer ticks are accounted as
471+ * guest time. Transiently unmask interrupts so that any
472+ * pending interrupts are taken.
473+ *
474+ * TODO: is there a barrier which ensures that pending interrupts are
475+ * recognised? Currently this just hopes that the CPU takes any pending
476+ * interrupts between the enable and disable.
477+ */
478+ local_irq_enable();
479+ local_irq_disable();
449480
450481 trace_kvm_out(vcpu);
451− guest_exit_irqoff();
482+ guest_timing_exit_irqoff();
452483 local_irq_enable();
453484
454485 out:
@@ -1168,7 +1199,7 @@ static void kvm_mips_set_c0_status(void) · 713 unmodified lines
11681199 /*
11691200 * Return value is in the form (errcode<<2 | RESUME_FLAG_HOST | RESUME_FLAG_NV)
11701201 */
1171−int kvm_mips_handle_exit(struct kvm_vcpu *vcpu)
1202+static int __kvm_mips_handle_exit(struct kvm_vcpu *vcpu)
11721203 {
11731204 struct kvm_run *run = vcpu->run;
11741205 u32 cause = vcpu->arch.host_cp0_cause;
@@ -1357,6 +1388,17 @@ int kvm_mips_handle_exit(struct kvm_vcpu *vcpu) · 182 unmodified lines
13571388 return ret;
13581389 }
13591390
1391+int noinstr kvm_mips_handle_exit(struct kvm_vcpu *vcpu)
1392+{
1393+ int ret;
1394+
1395+ guest_state_exit_irqoff();
1396+ ret = __kvm_mips_handle_exit(vcpu);
1397+ guest_state_enter_irqoff();
1398+
1399+ return ret;
1400+}
1401+
13601402 /* Enable FPU for guest and restore context */
13611403 void kvm_own_fpu(struct kvm_vcpu *vcpu)
13621404 {
arch/riscv/kvm/vcpu.c+31−17
@@ -90,6 +90,7 @@ int kvm_arch_vcpu_precreate(struct kvm *kvm, unsigned int id) · 89 unmodified lines
9090 int kvm_arch_vcpu_create(struct kvm_vcpu *vcpu)
9191 {
9292 struct kvm_cpu_context *cntx;
93+ struct kvm_vcpu_csr *reset_csr = &vcpu->arch.guest_reset_csr;
9394
9495 /* Mark this VCPU never ran */
9596 vcpu->arch.ran_atleast_once = false;
@@ -106,6 +107,9 @@ int kvm_arch_vcpu_create(struct kvm_vcpu *vcpu) · 10 unmodified lines
106107 cntx->hstatus |= HSTATUS_SPVP;
107108 cntx->hstatus |= HSTATUS_SPV;
108109
110+ /* By default, make CY, TM, and IR counters accessible in VU mode */
111+ reset_csr->scounteren = 0x7;
112+
109113 /* Setup VCPU timer */
110114 kvm_riscv_vcpu_timer_init(vcpu);
111115
@@ -699,6 +703,20 @@ static void kvm_riscv_update_hvip(struct kvm_vcpu *vcpu) · 587 unmodified lines
699703 csr_write(CSR_HVIP, csr->hvip);
700704 }
701705
706+/*
707+ * Actually run the vCPU, entering an RCU extended quiescent state (EQS) while
708+ * the vCPU is running.
709+ *
710+ * This must be noinstr as instrumentation may make use of RCU, and this is not
711+ * safe during the EQS.
712+ */
713+static void noinstr kvm_riscv_vcpu_enter_exit(struct kvm_vcpu *vcpu)
714+{
715+ guest_state_enter_irqoff();
716+ __kvm_riscv_switch_to(&vcpu->arch);
717+ guest_state_exit_irqoff();
718+}
719+
702720 int kvm_arch_vcpu_ioctl_run(struct kvm_vcpu *vcpu)
703721 {
704722 int ret;
@@ -790,9 +808,9 @@ int kvm_arch_vcpu_ioctl_run(struct kvm_vcpu *vcpu) · 85 unmodified lines
790808 continue;
791809 }
792810
793− guest_enter_irqoff();
811+ guest_timing_enter_irqoff();
794812
795− __kvm_riscv_switch_to(&vcpu->arch);
813+ kvm_riscv_vcpu_enter_exit(vcpu);
796814
797815 vcpu->mode = OUTSIDE_GUEST_MODE;
798816 vcpu->stat.exits++;
@@ -812,25 +830,21 @@ int kvm_arch_vcpu_ioctl_run(struct kvm_vcpu *vcpu) · 13 unmodified lines
812830 kvm_riscv_vcpu_sync_interrupts(vcpu);
813831
814832 /*
815− * We may have taken a host interrupt in VS/VU-mode (i.e.
816− * while executing the guest). This interrupt is still
817− * pending, as we haven't serviced it yet!
833+ * We must ensure that any pending interrupts are taken before
834+ * we exit guest timing so that timer ticks are accounted as
835+ * guest time. Transiently unmask interrupts so that any
836+ * pending interrupts are taken.
818837 *
819− * We're now back in HS-mode with interrupts disabled
820− * so enabling the interrupts now will have the effect
821− * of taking the interrupt again, in HS-mode this time.
838+ * There's no barrier which ensures that pending interrupts are
839+ * recognised, so we just hope that the CPU takes any pending
840+ * interrupts between the enable and disable.
822841 */
823842 local_irq_enable();
843+ local_irq_disable();
824844
825− /*
826− * We do local_irq_enable() before calling guest_exit() so
827− * that if a timer interrupt hits while running the guest
828− * we account that tick as being spent in the guest. We
829− * enable preemption after calling guest_exit() so that if
830− * we get preempted we make sure ticks after that is not
831− * counted as guest time.
832− */
833− guest_exit();
845+ guest_timing_exit_irqoff();
846+
847+ local_irq_enable();
834848
835849 preempt_enable();
836850
arch/riscv/kvm/vcpu_sbi_base.c+2−1
@@ -9,6 +9,7 @@ · 8 unmodified lines
99 #include <linux/errno.h>
1010 #include <linux/err.h>
1111 #include <linux/kvm_host.h>
12+#include <linux/version.h>
1213 #include <asm/csr.h>
1314 #include <asm/sbi.h>
1415 #include <asm/kvm_vcpu_timer.h>
@@ -32,7 +33,7 @@ static int kvm_sbi_ext_base_handler(struct kvm_vcpu *vcpu, struct kvm_run *run, · 17 unmodified lines
3233 *out_val = KVM_SBI_IMPID;
3334 break;
3435 case SBI_EXT_BASE_GET_IMP_VERSION:
35− *out_val = 0;
36+ *out_val = LINUX_VERSION_CODE;
3637 break;
3738 case SBI_EXT_BASE_PROBE_EXT:
3839 if ((cp->a0 >= SBI_EXT_EXPERIMENTAL_START &&
arch/s390/kvm/kvm-s390.c+2−0
@@ -4667,6 +4667,8 @@ static long kvm_s390_guest_sida_op(struct kvm_vcpu *vcpu, · 4666 unmodified lines
46674667 return -EINVAL;
46684668 if (mop->size + mop->sida_offset > sida_size(vcpu->arch.sie_block))
46694669 return -E2BIG;
4670+ if (!kvm_s390_pv_cpu_is_protected(vcpu))
4671+ return -EINVAL;
46704672
46714673 switch (mop->op) {
46724674 case KVM_S390_MEMOP_SIDA_READ:
arch/x86/crypto/blake2s-shash.c+2−2
@@ -18,12 +18,12 @@ · 17 unmodified lines
1818 static int crypto_blake2s_update_x86(struct shash_desc *desc,
1919 const u8 *in, unsigned int inlen)
2020 {
21− return crypto_blake2s_update(desc, in, inlen, blake2s_compress);
21+ return crypto_blake2s_update(desc, in, inlen, false);
2222 }
2323
2424 static int crypto_blake2s_final_x86(struct shash_desc *desc, u8 *out)
2525 {
26− return crypto_blake2s_final(desc, out, blake2s_compress);
26+ return crypto_blake2s_final(desc, out, false);
2727 }
2828
2929 #define BLAKE2S_ALG(name, driver_name, digest_size) \
arch/x86/events/intel/core.c+13−0
@@ -4703,6 +4703,19 @@ static __initconst const struct x86_pmu intel_pmu = { · 4702 unmodified lines
47034703 .lbr_read = intel_pmu_lbr_read_64,
47044704 .lbr_save = intel_pmu_lbr_save,
47054705 .lbr_restore = intel_pmu_lbr_restore,
4706+
4707+ /*
4708+ * SMM has access to all 4 rings and while traditionally SMM code only
4709+ * ran in CPL0, 2021-era firmware is starting to make use of CPL3 in SMM.
4710+ *
4711+ * Since the EVENTSEL.{USR,OS} CPL filtering makes no distinction
4712+ * between SMM or not, this results in what should be pure userspace
4713+ * counters including SMM data.
4714+ *
4715+ * This is a clear privilege issue, therefore globally disable
4716+ * counting SMM by default.
4717+ */
4718+ .attr_freeze_on_smi = 1,
47064719 };
47074720
47084721 static __init void intel_clovertown_quirk(void)
arch/x86/events/intel/pt.c+3−2
@@ -897,8 +897,9 @@ static void pt_handle_status(struct pt *pt) · 896 unmodified lines
897897 * means we are already losing data; need to let the decoder
898898 * know.
899899 */
900− if (!intel_pt_validate_hw_cap(PT_CAP_topa_multiple_entries) ||
901− buf->output_off == pt_buffer_region_size(buf)) {
900+ if (!buf->single &&
901+ (!intel_pt_validate_hw_cap(PT_CAP_topa_multiple_entries) ||
902+ buf->output_off == pt_buffer_region_size(buf))) {
902903 perf_aux_output_flag(&pt->handle,
903904 PERF_AUX_FLAG_TRUNCATED);
904905 advance++;
arch/x86/include/asm/kvm-x86-ops.h+1−1
@@ -82,7 +82,7 @@ KVM_X86_OP_NULL(guest_apic_has_interrupt) · 81 unmodified lines
8282 KVM_X86_OP(load_eoi_exitmap)
8383 KVM_X86_OP(set_virtual_apic_mode)
8484 KVM_X86_OP_NULL(set_apic_access_page_addr)
85−KVM_X86_OP(deliver_posted_interrupt)
85+KVM_X86_OP(deliver_interrupt)
8686 KVM_X86_OP_NULL(sync_pir_to_irr)
8787 KVM_X86_OP(set_tss_addr)
8888 KVM_X86_OP(set_identity_map_addr)
arch/x86/include/asm/kvm_host.h+2−1
@@ -1410,7 +1410,8 @@ struct kvm_x86_ops { · 1409 unmodified lines
14101410 void (*load_eoi_exitmap)(struct kvm_vcpu *vcpu, u64 *eoi_exit_bitmap);
14111411 void (*set_virtual_apic_mode)(struct kvm_vcpu *vcpu);
14121412 void (*set_apic_access_page_addr)(struct kvm_vcpu *vcpu);
1413− int (*deliver_posted_interrupt)(struct kvm_vcpu *vcpu, int vector);
1413+ void (*deliver_interrupt)(struct kvm_lapic *apic, int delivery_mode,
1414+ int trig_mode, int vector);
14141415 int (*sync_pir_to_irr)(struct kvm_vcpu *vcpu);
14151416 int (*set_tss_addr)(struct kvm *kvm, unsigned int addr);
14161417 int (*set_identity_map_addr)(struct kvm *kvm, u64 ident_addr);
arch/x86/include/asm/xen/hypervisor.h+0−14
@@ -43,20 +43,6 @@ static inline uint32_t xen_cpuid_base(void) · 42 unmodified lines
4343 return hypervisor_cpuid_base("XenVMMXenVMM", 2);
4444 }
4545
46−#ifdef CONFIG_XEN
47−extern bool __init xen_hvm_need_lapic(void);
48−
49−static inline bool __init xen_x2apic_para_available(void)
50−{
51− return xen_hvm_need_lapic();
52−}
53−#else
54−static inline bool __init xen_x2apic_para_available(void)
55−{
56− return (xen_cpuid_base() != 0);
57−}
58−#endif
59−
6046 struct pci_dev;
6147
6248 #ifdef CONFIG_XEN_PV_DOM0
arch/x86/kvm/cpuid.c+7−6
@@ -554,12 +554,13 @@ void kvm_set_cpu_caps(void) · 553 unmodified lines
554554 );
555555
556556 kvm_cpu_cap_mask(CPUID_7_0_EBX,
557− F(FSGSBASE) | F(SGX) | F(BMI1) | F(HLE) | F(AVX2) | F(SMEP) |
558− F(BMI2) | F(ERMS) | F(INVPCID) | F(RTM) | 0 /*MPX*/ | F(RDSEED) |
559− F(ADX) | F(SMAP) | F(AVX512IFMA) | F(AVX512F) | F(AVX512PF) |
560− F(AVX512ER) | F(AVX512CD) | F(CLFLUSHOPT) | F(CLWB) | F(AVX512DQ) |
561− F(SHA_NI) | F(AVX512BW) | F(AVX512VL) | 0 /*INTEL_PT*/
562− );
557+ F(FSGSBASE) | F(SGX) | F(BMI1) | F(HLE) | F(AVX2) |
558+ F(FDP_EXCPTN_ONLY) | F(SMEP) | F(BMI2) | F(ERMS) | F(INVPCID) |
559+ F(RTM) | F(ZERO_FCS_FDS) | 0 /*MPX*/ | F(AVX512F) |
560+ F(AVX512DQ) | F(RDSEED) | F(ADX) | F(SMAP) | F(AVX512IFMA) |
561+ F(CLFLUSHOPT) | F(CLWB) | 0 /*INTEL_PT*/ | F(AVX512PF) |
562+ F(AVX512ER) | F(AVX512CD) | F(SHA_NI) | F(AVX512BW) |
563+ F(AVX512VL));
563564
564565 kvm_cpu_cap_mask(CPUID_7_ECX,
565566 F(AVX512VBMI) | F(LA57) | F(PKU) | 0 /*OSPKE*/ | F(RDPID) |
arch/x86/kvm/lapic.c+2−8
@@ -1096,14 +1096,8 @@ static int __apic_accept_irq(struct kvm_lapic *apic, int delivery_mode, · 1095 unmodified lines
10961096 apic->regs + APIC_TMR);
10971097 }
10981098
1099− if (static_call(kvm_x86_deliver_posted_interrupt)(vcpu, vector)) {
1100− kvm_lapic_set_irr(vector, apic);
1101− kvm_make_request(KVM_REQ_EVENT, vcpu);
1102− kvm_vcpu_kick(vcpu);
1103− } else {
1104− trace_kvm_apicv_accept_irq(vcpu->vcpu_id, delivery_mode,
1105− trig_mode, vector);
1106− }
1099+ static_call(kvm_x86_deliver_interrupt)(apic, delivery_mode,
1100+ trig_mode, vector);
11071101 break;
11081102
11091103 case APIC_DM_REMRD:
arch/x86/kvm/svm/svm.c+18−3
@@ -3291,6 +3291,21 @@ static void svm_set_irq(struct kvm_vcpu *vcpu) · 3290 unmodified lines
32913291 SVM_EVTINJ_VALID | SVM_EVTINJ_TYPE_INTR;
32923292 }
32933293
3294+static void svm_deliver_interrupt(struct kvm_lapic *apic, int delivery_mode,
3295+ int trig_mode, int vector)
3296+{
3297+ struct kvm_vcpu *vcpu = apic->vcpu;
3298+
3299+ if (svm_deliver_avic_intr(vcpu, vector)) {
3300+ kvm_lapic_set_irr(vector, apic);
3301+ kvm_make_request(KVM_REQ_EVENT, vcpu);
3302+ kvm_vcpu_kick(vcpu);
3303+ } else {
3304+ trace_kvm_apicv_accept_irq(vcpu->vcpu_id, delivery_mode,
3305+ trig_mode, vector);
3306+ }
3307+}
3308+
32943309 static void svm_update_cr8_intercept(struct kvm_vcpu *vcpu, int tpr, int irr)
32953310 {
32963311 struct vcpu_svm *svm = to_svm(vcpu);
@@ -3615,7 +3630,7 @@ static noinstr void svm_vcpu_enter_exit(struct kvm_vcpu *vcpu) · 318 unmodified lines
36153630 struct vcpu_svm *svm = to_svm(vcpu);
36163631 unsigned long vmcb_pa = svm->current_vmcb->pa;
36173632
3618− kvm_guest_enter_irqoff();
3633+ guest_state_enter_irqoff();
36193634
36203635 if (sev_es_guest(vcpu->kvm)) {
36213636 __svm_sev_es_vcpu_run(vmcb_pa);
@@ -3635,7 +3650,7 @@ static noinstr void svm_vcpu_enter_exit(struct kvm_vcpu *vcpu) · 13 unmodified lines
36353650 vmload(__sme_page_pa(sd->save_area));
36363651 }
36373652
3638− kvm_guest_exit_irqoff();
3653+ guest_state_exit_irqoff();
36393654 }
36403655
36413656 static __no_kcsan fastpath_t svm_vcpu_run(struct kvm_vcpu *vcpu)
@@ -4545,7 +4560,7 @@ static struct kvm_x86_ops svm_x86_ops __initdata = { · 903 unmodified lines
45454560 .pmu_ops = &amd_pmu_ops,
45464561 .nested_ops = &svm_nested_ops,
45474562
4548− .deliver_posted_interrupt = svm_deliver_avic_intr,
4563+ .deliver_interrupt = svm_deliver_interrupt,
45494564 .dy_apicv_has_pending_interrupt = svm_dy_apicv_has_pending_interrupt,
45504565 .update_pi_irte = svm_update_pi_irte,
45514566 .setup_mce = svm_setup_mce,
arch/x86/kvm/vmx/vmx.c+18−3
@@ -4041,6 +4041,21 @@ static int vmx_deliver_posted_interrupt(struct kvm_vcpu *vcpu, int vector) · 4040 unmodified lines
40414041 return 0;
40424042 }
40434043
4044+static void vmx_deliver_interrupt(struct kvm_lapic *apic, int delivery_mode,
4045+ int trig_mode, int vector)
4046+{
4047+ struct kvm_vcpu *vcpu = apic->vcpu;
4048+
4049+ if (vmx_deliver_posted_interrupt(vcpu, vector)) {
4050+ kvm_lapic_set_irr(vector, apic);
4051+ kvm_make_request(KVM_REQ_EVENT, vcpu);
4052+ kvm_vcpu_kick(vcpu);
4053+ } else {
4054+ trace_kvm_apicv_accept_irq(vcpu->vcpu_id, delivery_mode,
4055+ trig_mode, vector);
4056+ }
4057+}
4058+
40444059 /*
40454060 * Set up the vmcs's constant host-state fields, i.e., host-state fields that
40464061 * will not change in the lifetime of the guest.
@@ -6754,7 +6769,7 @@ static fastpath_t vmx_exit_handlers_fastpath(struct kvm_vcpu *vcpu) · 2707 unmodified lines
67546769 static noinstr void vmx_vcpu_enter_exit(struct kvm_vcpu *vcpu,
67556770 struct vcpu_vmx *vmx)
67566771 {
6757− kvm_guest_enter_irqoff();
6772+ guest_state_enter_irqoff();
67586773
67596774 /* L1D Flush includes CPU buffer clear to mitigate MDS */
67606775 if (static_branch_unlikely(&vmx_l1d_should_flush))
@@ -6770,7 +6785,7 @@ static noinstr void vmx_vcpu_enter_exit(struct kvm_vcpu *vcpu, · 9 unmodified lines
67706785
67716786 vcpu->arch.cr2 = native_read_cr2();
67726787
6773− kvm_guest_exit_irqoff();
6788+ guest_state_exit_irqoff();
67746789 }
67756790
67766791 static fastpath_t vmx_vcpu_run(struct kvm_vcpu *vcpu)
@@ -7768,7 +7783,7 @@ static struct kvm_x86_ops vmx_x86_ops __initdata = { · 991 unmodified lines
77687783 .hwapic_isr_update = vmx_hwapic_isr_update,
77697784 .guest_apic_has_interrupt = vmx_guest_apic_has_interrupt,
77707785 .sync_pir_to_irr = vmx_sync_pir_to_irr,
7771− .deliver_posted_interrupt = vmx_deliver_posted_interrupt,
7786+ .deliver_interrupt = vmx_deliver_interrupt,
77727787 .dy_apicv_has_pending_interrupt = pi_has_pending_interrupt,
77737788
77747789 .set_tss_addr = vmx_set_tss_addr,
arch/x86/kvm/x86.c+6−4
@@ -90,6 +90,8 @@ · 89 unmodified lines
9090 u64 __read_mostly kvm_mce_cap_supported = MCG_CTL_P | MCG_SER_P;
9191 EXPORT_SYMBOL_GPL(kvm_mce_cap_supported);
9292
93+#define ERR_PTR_USR(e) ((void __user *)ERR_PTR(e))
94+
9395 #define emul_to_vcpu(ctxt) \
9496 ((struct kvm_vcpu *)(ctxt)->vcpu)
9597
@@ -4340,7 +4342,7 @@ static inline void __user *kvm_get_attr_addr(struct kvm_device_attr *attr) · 4244 unmodified lines
43404342 void __user *uaddr = (void __user*)(unsigned long)attr->addr;
43414343
43424344 if ((u64)(unsigned long)uaddr != attr->addr)
4343− return ERR_PTR(-EFAULT);
4345+ return ERR_PTR_USR(-EFAULT);
43444346 return uaddr;
43454347 }
43464348
@@ -10041,6 +10043,8 @@ static int vcpu_enter_guest(struct kvm_vcpu *vcpu) · 5694 unmodified lines
1004110043 set_debugreg(0, 7);
1004210044 }
1004310045
10046+ guest_timing_enter_irqoff();
10047+
1004410048 for (;;) {
1004510049 /*
1004610050 * Assert that vCPU vs. VM APICv state is consistent. An APICv
@@ -10125,7 +10129,7 @@ static int vcpu_enter_guest(struct kvm_vcpu *vcpu) · 78 unmodified lines
1012510129 * of accounting via context tracking, but the loss of accuracy is
1012610130 * acceptable for all known use cases.
1012710131 */
10128− vtime_account_guest_exit();
10132+ guest_timing_exit_irqoff();
1012910133
1013010134 if (lapic_in_kernel(vcpu)) {
1013110135 s64 delta = vcpu->arch.apic->lapic_timer.advance_expire_delta;
@@ -11639,8 +11643,6 @@ void kvm_arch_sync_events(struct kvm *kvm) · 1507 unmodified lines
1163911643 kvm_free_pit(kvm);
1164011644 }
1164111645
11642−#define ERR_PTR_USR(e) ((void __user *)ERR_PTR(e))
11643−
1164411646 /**
1164511647 * __x86_set_memory_region: Setup KVM internal memory slot
1164611648 *
arch/x86/kvm/x86.h+0−45
@@ -10,51 +10,6 @@ · 9 unmodified lines
1010
1111 void kvm_spurious_fault(void);
1212
13−static __always_inline void kvm_guest_enter_irqoff(void)
14−{
15− /*
16− * VMENTER enables interrupts (host state), but the kernel state is
17− * interrupts disabled when this is invoked. Also tell RCU about
18− * it. This is the same logic as for exit_to_user_mode().
19− *
20− * This ensures that e.g. latency analysis on the host observes
21− * guest mode as interrupt enabled.
22− *
23− * guest_enter_irqoff() informs context tracking about the
24− * transition to guest mode and if enabled adjusts RCU state
25− * accordingly.
26− */
27− instrumentation_begin();
28− trace_hardirqs_on_prepare();
29− lockdep_hardirqs_on_prepare(CALLER_ADDR0);
30− instrumentation_end();
31−
32− guest_enter_irqoff();
33− lockdep_hardirqs_on(CALLER_ADDR0);
34−}
35−
36−static __always_inline void kvm_guest_exit_irqoff(void)
37−{
38− /*
39− * VMEXIT disables interrupts (host state), but tracing and lockdep
40− * have them in state 'on' as recorded before entering guest mode.
41− * Same as enter_from_user_mode().
42− *
43− * context_tracking_guest_exit() restores host context and reinstates
44− * RCU if enabled and required.
45− *
46− * This needs to be done immediately after VM-Exit, before any code
47− * that might contain tracepoints or call out to the greater world,
48− * e.g. before x86_spec_ctrl_restore_host().
49− */
50− lockdep_hardirqs_off(CALLER_ADDR0);
51− context_tracking_guest_exit();
52−
53− instrumentation_begin();
54− trace_hardirqs_off_finish();
55− instrumentation_end();
56−}
57−
5813 #define KVM_NESTED_VMENTER_CONSISTENCY_CHECK(consistency_check) \
5914 ({ \
6015 bool failed = (consistency_check); \
arch/x86/xen/enlighten_hvm.c+4−9
@@ -9,6 +9,7 @@ · 8 unmodified lines
99 #include <xen/events.h>
1010 #include <xen/interface/memory.h>
1111
12+#include <asm/apic.h>
1213 #include <asm/cpu.h>
1314 #include <asm/smp.h>
1415 #include <asm/io_apic.h>
@@ -242,15 +243,9 @@ static __init int xen_parse_no_vector_callback(char *arg) · 227 unmodified lines
242243 }
243244 early_param("xen_no_vector_callback", xen_parse_no_vector_callback);
244245
245−bool __init xen_hvm_need_lapic(void)
246+static __init bool xen_x2apic_available(void)
246247 {
247− if (xen_pv_domain())
248− return false;
249− if (!xen_hvm_domain())
250− return false;
251− if (xen_feature(XENFEAT_hvm_pirqs) && xen_have_vector_callback)
252− return false;
253− return true;
248+ return x2apic_supported();
254249 }
255250
256251 static __init void xen_hvm_guest_late_init(void)
@@ -312,7 +307,7 @@ struct hypervisor_x86 x86_hyper_xen_hvm __initdata = { · 55 unmodified lines
312307 .detect = xen_platform_hvm,
313308 .type = X86_HYPER_XEN_HVM,
314309 .init.init_platform = xen_hvm_guest_init,
315− .init.x2apic_available = xen_x2apic_para_available,
310+ .init.x2apic_available = xen_x2apic_available,
316311 .init.init_mem_mapping = xen_hvm_init_mem_mapping,
317312 .init.guest_late_init = xen_hvm_guest_late_init,
318313 .runtime.pin_vcpu = xen_pin_vcpu,
arch/x86/xen/enlighten_pv.c+0−4
@@ -1341,10 +1341,6 @@ asmlinkage __visible void __init xen_start_kernel(void) · 1340 unmodified lines
13411341
13421342 xen_acpi_sleep_register();
13431343
1344− /* Avoid searching for BIOS MP tables */
1345− x86_init.mpparse.find_smp_config = x86_init_noop;
1346− x86_init.mpparse.get_smp_config = x86_init_uint_noop;
1347−
13481344 xen_boot_params_init_edd();
13491345
13501346 #ifdef CONFIG_ACPI
arch/x86/xen/smp_pv.c+6−20
@@ -148,28 +148,12 @@ int xen_smp_intr_init_pv(unsigned int cpu) · 147 unmodified lines
148148 return rc;
149149 }
150150
151−static void __init xen_fill_possible_map(void)
152−{
153− int i, rc;
154−
155− if (xen_initial_domain())
156− return;
157−
158− for (i = 0; i < nr_cpu_ids; i++) {
159− rc = HYPERVISOR_vcpu_op(VCPUOP_is_up, i, NULL);
160− if (rc >= 0) {
161− num_processors++;
162− set_cpu_possible(i, true);
163− }
164− }
165−}
166−
167−static void __init xen_filter_cpu_maps(void)
151+static void __init _get_smp_config(unsigned int early)
168152 {
169153 int i, rc;
170154 unsigned int subtract = 0;
171155
172− if (!xen_initial_domain())
156+ if (early)
173157 return;
174158
175159 num_processors = 0;
@@ -210,7 +194,6 @@ static void __init xen_pv_smp_prepare_boot_cpu(void) · 34 unmodified lines
210194 * sure the old memory can be recycled. */
211195 make_lowmem_page_readwrite(xen_initial_gdt);
212196
213− xen_filter_cpu_maps();
214197 xen_setup_vcpu_info_placement();
215198
216199 /*
@@ -476,5 +459,8 @@ static const struct smp_ops xen_smp_ops __initconst = { · 259 unmodified lines
476459 void __init xen_smp_init(void)
477460 {
478461 smp_ops = xen_smp_ops;
479− xen_fill_possible_map();
462+
463+ /* Avoid searching for BIOS MP tables */
464+ x86_init.mpparse.find_smp_config = x86_init_noop;
465+ x86_init.mpparse.get_smp_config = _get_smp_config;
480466 }
block/bio-integrity.c+1−1
@@ -373,7 +373,7 @@ void bio_integrity_advance(struct bio *bio, unsigned int bytes_done) · 372 unmodified lines
373373 struct blk_integrity *bi = blk_get_integrity(bio->bi_bdev->bd_disk);
374374 unsigned bytes = bio_integrity_bytes(bi, bytes_done >> 9);
375375
376− bip->bip_iter.bi_sector += bytes_done >> 9;
376+ bip->bip_iter.bi_sector += bio_integrity_intervals(bi, bytes_done >> 9);
377377 bvec_iter_advance(bip->bip_vec, &bip->bip_iter, bytes);
378378 }
379379
block/fops.c+19−14
@@ -566,34 +566,37 @@ static ssize_t blkdev_read_iter(struct kiocb *iocb, struct iov_iter *to) · 565 unmodified lines
566566 {
567567 struct block_device *bdev = iocb->ki_filp->private_data;
568568 loff_t size = bdev_nr_bytes(bdev);
569− size_t count = iov_iter_count(to);
570569 loff_t pos = iocb->ki_pos;
571570 size_t shorted = 0;
572571 ssize_t ret = 0;
572+ size_t count;
573573
574− if (unlikely(pos + count > size)) {
574+ if (unlikely(pos + iov_iter_count(to) > size)) {
575575 if (pos >= size)
576576 return 0;
577577 size -= pos;
578− if (count > size) {
579− shorted = count - size;
580− iov_iter_truncate(to, size);
581− }
578+ shorted = iov_iter_count(to) - size;
579+ iov_iter_truncate(to, size);
582580 }
583581
582+ count = iov_iter_count(to);
583+ if (!count)
584+ goto reexpand; /* skip atime */
585+
584586 if (iocb->ki_flags & IOCB_DIRECT) {
585587 struct address_space *mapping = iocb->ki_filp->f_mapping;
586588
587589 if (iocb->ki_flags & IOCB_NOWAIT) {
588− if (filemap_range_needs_writeback(mapping, iocb->ki_pos,
589− iocb->ki_pos + count - 1))
590− return -EAGAIN;
590+ if (filemap_range_needs_writeback(mapping, pos,
591+ pos + count - 1)) {
592+ ret = -EAGAIN;
593+ goto reexpand;
594+ }
591595 } else {
592− ret = filemap_write_and_wait_range(mapping,
593− iocb->ki_pos,
594− iocb->ki_pos + count - 1);
596+ ret = filemap_write_and_wait_range(mapping, pos,
597+ pos + count - 1);
595598 if (ret < 0)
596− return ret;
599+ goto reexpand;
597600 }
598601
599602 file_accessed(iocb->ki_filp);
@@ -603,12 +606,14 @@ static ssize_t blkdev_read_iter(struct kiocb *iocb, struct iov_iter *to) · 3 unmodified lines
603606 iocb->ki_pos += ret;
604607 count -= ret;
605608 }
609+ iov_iter_revert(to, count - iov_iter_count(to));
606610 if (ret < 0 || !count)
607− return ret;
611+ goto reexpand;
608612 }
609613
610614 ret = filemap_read(iocb, to, ret);
611615
616+reexpand:
612617 if (unlikely(shorted))
613618 iov_iter_reexpand(to, iov_iter_count(to) + shorted);
614619 return ret;
crypto/algapi.c+1−0
@@ -1324,3 +1324,4 @@ module_exit(crypto_algapi_exit); · 1323 unmodified lines
13241324
13251325 MODULE_LICENSE("GPL");
13261326 MODULE_DESCRIPTION("Cryptographic algorithms API");
1327+MODULE_SOFTDEP("pre: cryptomgr");
crypto/api.c+0−1
@@ -643,4 +643,3 @@ EXPORT_SYMBOL_GPL(crypto_req_done); · 642 unmodified lines
643643
644644 MODULE_DESCRIPTION("Cryptographic core API");
645645 MODULE_LICENSE("GPL");
646−MODULE_SOFTDEP("pre: cryptomgr");
crypto/blake2s_generic.c+2−2
@@ -15,12 +15,12 @@ · 14 unmodified lines
1515 static int crypto_blake2s_update_generic(struct shash_desc *desc,
1616 const u8 *in, unsigned int inlen)
1717 {
18− return crypto_blake2s_update(desc, in, inlen, blake2s_compress_generic);
18+ return crypto_blake2s_update(desc, in, inlen, true);
1919 }
2020
2121 static int crypto_blake2s_final_generic(struct shash_desc *desc, u8 *out)
2222 {
23− return crypto_blake2s_final(desc, out, blake2s_compress_generic);
23+ return crypto_blake2s_final(desc, out, true);
2424 }
2525
2626 #define BLAKE2S_ALG(name, driver_name, digest_size) \
drivers/acpi/Kconfig+1−0
@@ -11,6 +11,7 @@ menuconfig ACPI · 10 unmodified lines
1111 depends on ARCH_SUPPORTS_ACPI
1212 select PNP
1313 select NLS
14+ select CRC32
1415 default y if X86
1516 help
1617 Advanced Configuration and Power Interface (ACPI) support for
drivers/ata/libata-core.c+16−8
@@ -2007,6 +2007,9 @@ static bool ata_log_supported(struct ata_device *dev, u8 log) · 2006 unmodified lines
20072007 {
20082008 struct ata_port *ap = dev->link->ap;
20092009
2010+ if (dev->horkage & ATA_HORKAGE_NO_LOG_DIR)
2011+ return false;
2012+
20102013 if (ata_read_log_page(dev, ATA_LOG_DIRECTORY, 0, ap->sector_buf, 1))
20112014 return false;
20122015 return get_unaligned_le16(&ap->sector_buf[log * 2]) ? true : false;
@@ -2445,23 +2448,21 @@ static void ata_dev_config_cpr(struct ata_device *dev) · 432 unmodified lines
24452448 struct ata_cpr_log *cpr_log = NULL;
24462449 u8 *desc, *buf = NULL;
24472450
2448− if (!ata_identify_page_supported(dev,
2449− ATA_LOG_CONCURRENT_POSITIONING_RANGES))
2451+ if (ata_id_major_version(dev->id) < 11 ||
2452+ !ata_log_supported(dev, ATA_LOG_CONCURRENT_POSITIONING_RANGES))
24502453 goto out;
24512454
24522455 /*
2453− * Read IDENTIFY DEVICE data log, page 0x47
2454− * (concurrent positioning ranges). We can have at most 255 32B range
2455− * descriptors plus a 64B header.
2456+ * Read the concurrent positioning ranges log (0x47). We can have at
2457+ * most 255 32B range descriptors plus a 64B header.
24562458 */
24572459 buf_len = (64 + 255 * 32 + 511) & ~511;
24582460 buf = kzalloc(buf_len, GFP_KERNEL);
24592461 if (!buf)
24602462 goto out;
24612463
2462− err_mask = ata_read_log_page(dev, ATA_LOG_IDENTIFY_DEVICE,
2463− ATA_LOG_CONCURRENT_POSITIONING_RANGES,
2464− buf, buf_len >> 9);
2464+ err_mask = ata_read_log_page(dev, ATA_LOG_CONCURRENT_POSITIONING_RANGES,
2465+ 0, buf, buf_len >> 9);
24652466 if (err_mask)
24662467 goto out;
24672468
@@ -4073,6 +4074,13 @@ static const struct ata_blacklist_entry ata_device_blacklist [] = { · 1605 unmodified lines
40734074 { "WDC WD3000JD-*", NULL, ATA_HORKAGE_WD_BROKEN_LPM },
40744075 { "WDC WD3200JD-*", NULL, ATA_HORKAGE_WD_BROKEN_LPM },
40754076
4077+ /*
4078+ * This sata dom device goes on a walkabout when the ATA_LOG_DIRECTORY
4079+ * log page is accessed. Ensure we never ask for this log page with
4080+ * these devices.
4081+ */
4082+ { "SATADOM-ML 3ME", NULL, ATA_HORKAGE_NO_LOG_DIR },
4083+
40764084 /* End Marker */
40774085 { }
40784086 };
drivers/char/random.c+22−17
@@ -762,7 +762,7 @@ static bool crng_init_try_arch(struct crng_state *crng) · 761 unmodified lines
762762 return arch_init;
763763 }
764764
765−static bool __init crng_init_try_arch_early(struct crng_state *crng)
765+static bool __init crng_init_try_arch_early(void)
766766 {
767767 int i;
768768 bool arch_init = true;
@@ -774,7 +774,7 @@ static bool __init crng_init_try_arch_early(struct crng_state *crng) · 5 unmodified lines
774774 rv = random_get_entropy();
775775 arch_init = false;
776776 }
777− crng->state[i] ^= rv;
777+ primary_crng.state[i] ^= rv;
778778 }
779779
780780 return arch_init;
@@ -788,22 +788,20 @@ static void crng_initialize_secondary(struct crng_state *crng) · 7 unmodified lines
788788 crng->init_time = jiffies - CRNG_RESEED_INTERVAL - 1;
789789 }
790790
791−static void __init crng_initialize_primary(struct crng_state *crng)
791+static void __init crng_initialize_primary(void)
792792 {
793− _extract_entropy(&crng->state[4], sizeof(u32) * 12);
794− if (crng_init_try_arch_early(crng) && trust_cpu && crng_init < 2) {
793+ _extract_entropy(&primary_crng.state[4], sizeof(u32) * 12);
794+ if (crng_init_try_arch_early() && trust_cpu && crng_init < 2) {
795795 invalidate_batched_entropy();
796796 numa_crng_init();
797797 crng_init = 2;
798798 pr_notice("crng init done (trusting CPU's manufacturer)\n");
799799 }
800− crng->init_time = jiffies - CRNG_RESEED_INTERVAL - 1;
800+ primary_crng.init_time = jiffies - CRNG_RESEED_INTERVAL - 1;
801801 }
802802
803−static void crng_finalize_init(struct crng_state *crng)
803+static void crng_finalize_init(void)
804804 {
805− if (crng != &primary_crng || crng_init >= 2)
806− return;
807805 if (!system_wq) {
808806 /* We can't call numa_crng_init until we have workqueues,
809807 * so mark this for processing later. */
@@ -814,6 +812,7 @@ static void crng_finalize_init(struct crng_state *crng) · 4 unmodified lines
814812 invalidate_batched_entropy();
815813 numa_crng_init();
816814 crng_init = 2;
815+ crng_need_final_init = false;
817816 process_random_ready_list();
818817 wake_up_interruptible(&crng_init_wait);
819818 kill_fasync(&fasync, SIGIO, POLL_IN);
@@ -980,7 +979,8 @@ static void crng_reseed(struct crng_state *crng, bool use_input_pool) · 160 unmodified lines
980979 memzero_explicit(&buf, sizeof(buf));
981980 WRITE_ONCE(crng->init_time, jiffies);
982981 spin_unlock_irqrestore(&crng->lock, flags);
983− crng_finalize_init(crng);
982+ if (crng == &primary_crng && crng_init < 2)
983+ crng_finalize_init();
984984 }
985985
986986 static void _extract_crng(struct crng_state *crng, u8 out[CHACHA_BLOCK_SIZE])
@@ -1697,8 +1697,8 @@ int __init rand_initialize(void) · 710 unmodified lines
16971697 {
16981698 init_std_data();
16991699 if (crng_need_final_init)
1700− crng_finalize_init(&primary_crng);
1701− crng_initialize_primary(&primary_crng);
1700+ crng_finalize_init();
1701+ crng_initialize_primary();
17021702 crng_global_init_time = jiffies;
17031703 if (ratelimit_disable) {
17041704 urandom_warning.interval = 0;
@@ -1856,7 +1856,10 @@ static long random_ioctl(struct file *f, unsigned int cmd, unsigned long arg) · 151 unmodified lines
18561856 */
18571857 if (!capable(CAP_SYS_ADMIN))
18581858 return -EPERM;
1859− input_pool.entropy_count = 0;
1859+ if (xchg(&input_pool.entropy_count, 0) && random_write_wakeup_bits) {
1860+ wake_up_interruptible(&random_write_wait);
1861+ kill_fasync(&fasync, SIGIO, POLL_OUT);
1862+ }
18601863 return 0;
18611864 case RNDRESEEDCRNG:
18621865 if (!capable(CAP_SYS_ADMIN))
@@ -2205,13 +2208,15 @@ void add_hwgenerator_randomness(const char *buffer, size_t count, · 342 unmodified lines
22052208 return;
22062209 }
22072210
2208− /* Suspend writing if we're above the trickle threshold.
2211+ /* Throttle writing if we're above the trickle threshold.
22092212 * We'll be woken up again once below random_write_wakeup_thresh,
2210− * or when the calling thread is about to terminate.
2213+ * when the calling thread is about to terminate, or once
2214+ * CRNG_RESEED_INTERVAL has lapsed.
22112215 */
2212− wait_event_interruptible(random_write_wait,
2216+ wait_event_interruptible_timeout(random_write_wait,
22132217 !system_wq || kthread_should_stop() ||
2214− POOL_ENTROPY_BITS() <= random_write_wakeup_bits);
2218+ POOL_ENTROPY_BITS() <= random_write_wakeup_bits,
2219+ CRNG_RESEED_INTERVAL);
22152220 mix_pool_bytes(buffer, count);
22162221 credit_entropy_bits(entropy);
22172222 }
drivers/crypto/marvell/octeontx2/otx2_cptpf_ucode.c+2−1
@@ -1753,7 +1753,6 @@ void otx2_cpt_print_uc_dbg_info(struct otx2_cptpf_dev *cptpf) · 1752 unmodified lines
17531753 char engs_info[2 * OTX2_CPT_NAME_LENGTH];
17541754 struct otx2_cpt_eng_grp_info *grp;
17551755 struct otx2_cpt_engs_rsvd *engs;
1756− u32 mask[4];
17571756 int i, j;
17581757
17591758 pr_debug("Engine groups global info");
@@ -1785,6 +1784,8 @@ void otx2_cpt_print_uc_dbg_info(struct otx2_cptpf_dev *cptpf) · 25 unmodified lines
17851784 for (j = 0; j < OTX2_CPT_MAX_ETYPES_PER_GRP; j++) {
17861785 engs = &grp->engs[j];
17871786 if (engs->type) {
1787+ u32 mask[5] = { };
1788+
17881789 get_engs_info(grp, engs_info,
17891790 2 * OTX2_CPT_NAME_LENGTH, j);
17901791 pr_debug("Slot%d: %s", j, engs_info);
drivers/dma-buf/dma-heap.c+2−0
@@ -14,6 +14,7 @@ · 13 unmodified lines
1414 #include <linux/xarray.h>
1515 #include <linux/list.h>
1616 #include <linux/slab.h>
17+#include <linux/nospec.h>
1718 #include <linux/uaccess.h>
1819 #include <linux/syscalls.h>
1920 #include <linux/dma-heap.h>
@@ -135,6 +136,7 @@ static long dma_heap_ioctl(struct file *file, unsigned int ucmd, · 115 unmodified lines
135136 if (nr >= ARRAY_SIZE(dma_heap_ioctl_cmds))
136137 return -EINVAL;
137138
139+ nr = array_index_nospec(nr, ARRAY_SIZE(dma_heap_ioctl_cmds));
138140 /* Get the kernel ioctl cmd that matches */
139141 kcmd = dma_heap_ioctl_cmds[nr];
140142
drivers/edac/altera_edac.c+1−1
@@ -350,7 +350,7 @@ static int altr_sdram_probe(struct platform_device *pdev) · 349 unmodified lines
350350 if (irq < 0) {
351351 edac_printk(KERN_ERR, EDAC_MC,
352352 "No irq %d in DT\n", irq);
353− return -ENODEV;
353+ return irq;
354354 }
355355
356356 /* Arria10 has a 2nd IRQ */
drivers/edac/xgene_edac.c+1−1
@@ -1919,7 +1919,7 @@ static int xgene_edac_probe(struct platform_device *pdev) · 1918 unmodified lines
19191919 irq = platform_get_irq_optional(pdev, i);
19201920 if (irq < 0) {
19211921 dev_err(&pdev->dev, "No IRQ resource\n");
1922− rc = -EINVAL;
1922+ rc = irq;
19231923 goto out_err;
19241924 }
19251925 rc = devm_request_irq(&pdev->dev, irq,
drivers/gpu/drm/amd/amdgpu/amdgpu.h+8−2
@@ -1408,12 +1408,10 @@ int amdgpu_acpi_smart_shift_update(struct drm_device *dev, enum amdgpu_ss ss_sta · 1407 unmodified lines
14081408 int amdgpu_acpi_pcie_notify_device_ready(struct amdgpu_device *adev);
14091409
14101410 void amdgpu_acpi_get_backlight_caps(struct amdgpu_dm_backlight_caps *caps);
1411−bool amdgpu_acpi_is_s0ix_active(struct amdgpu_device *adev);
14121411 void amdgpu_acpi_detect(void);
14131412 #else
14141413 static inline int amdgpu_acpi_init(struct amdgpu_device *adev) { return 0; }
14151414 static inline void amdgpu_acpi_fini(struct amdgpu_device *adev) { }
1416−static inline bool amdgpu_acpi_is_s0ix_active(struct amdgpu_device *adev) { return false; }
14171415 static inline void amdgpu_acpi_detect(void) { }
14181416 static inline bool amdgpu_acpi_is_power_shift_control_supported(void) { return false; }
14191417 static inline int amdgpu_acpi_power_shift_control(struct amdgpu_device *adev,
@@ -1422,6 +1420,14 @@ static inline int amdgpu_acpi_smart_shift_update(struct drm_device *dev, · 2 unmodified lines
14221420 enum amdgpu_ss ss_state) { return 0; }
14231421 #endif
14241422
1423+#if defined(CONFIG_ACPI) && defined(CONFIG_SUSPEND)
1424+bool amdgpu_acpi_is_s3_active(struct amdgpu_device *adev);
1425+bool amdgpu_acpi_is_s0ix_active(struct amdgpu_device *adev);
1426+#else
1427+static inline bool amdgpu_acpi_is_s0ix_active(struct amdgpu_device *adev) { return false; }
1428+static inline bool amdgpu_acpi_is_s3_active(struct amdgpu_device *adev) { return false; }
1429+#endif
1430+
14251431 int amdgpu_cs_find_mapping(struct amdgpu_cs_parser *parser,
14261432 uint64_t addr, struct amdgpu_bo **bo,
14271433 struct amdgpu_bo_va_mapping **mapping);
drivers/gpu/drm/amd/amdgpu/amdgpu_acpi.c+32−5
@@ -1031,6 +1031,20 @@ void amdgpu_acpi_detect(void) · 1030 unmodified lines
10311031 }
10321032 }
10331033
1034+#if IS_ENABLED(CONFIG_SUSPEND)
1035+/**
1036+ * amdgpu_acpi_is_s3_active
1037+ *
1038+ * @adev: amdgpu_device_pointer
1039+ *
1040+ * returns true if supported, false if not.
1041+ */
1042+bool amdgpu_acpi_is_s3_active(struct amdgpu_device *adev)
1043+{
1044+ return !(adev->flags & AMD_IS_APU) ||
1045+ (pm_suspend_target_state == PM_SUSPEND_MEM);
1046+}
1047+
10341048 /**
10351049 * amdgpu_acpi_is_s0ix_active
10361050 *
@@ -1040,11 +1054,24 @@ void amdgpu_acpi_detect(void) · 3 unmodified lines
10401054 */
10411055 bool amdgpu_acpi_is_s0ix_active(struct amdgpu_device *adev)
10421056 {
1043−#if IS_ENABLED(CONFIG_AMD_PMC) && IS_ENABLED(CONFIG_SUSPEND)
1044− if (acpi_gbl_FADT.flags & ACPI_FADT_LOW_POWER_S0) {
1045− if (adev->flags & AMD_IS_APU)
1046− return pm_suspend_target_state == PM_SUSPEND_TO_IDLE;
1057+ if (!(adev->flags & AMD_IS_APU) ||
1058+ (pm_suspend_target_state != PM_SUSPEND_TO_IDLE))
1059+ return false;
1060+
1061+ if (!(acpi_gbl_FADT.flags & ACPI_FADT_LOW_POWER_S0)) {
1062+ dev_warn_once(adev->dev,
1063+ "Power consumption will be higher as BIOS has not been configured for suspend-to-idle.\n"
1064+ "To use suspend-to-idle change the sleep mode in BIOS setup.\n");
1065+ return false;
10471066 }
1048−#endif
1067+
1068+#if !IS_ENABLED(CONFIG_AMD_PMC)
1069+ dev_warn_once(adev->dev,
1070+ "Power consumption will be higher as the kernel has not been compiled with CONFIG_AMD_PMC.\n");
10491071 return false;
1072+#else
1073+ return true;
1074+#endif /* CONFIG_AMD_PMC */
10501075 }
1076+
1077+#endif /* CONFIG_SUSPEND */
drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c+9−2
@@ -2246,13 +2246,20 @@ static void amdgpu_drv_delayed_reset_work_handler(struct work_struct *work) · 2245 unmodified lines
22462246 static int amdgpu_pmops_prepare(struct device *dev)
22472247 {
22482248 struct drm_device *drm_dev = dev_get_drvdata(dev);
2249+ struct amdgpu_device *adev = drm_to_adev(drm_dev);
22492250
22502251 /* Return a positive number here so
22512252 * DPM_FLAG_SMART_SUSPEND works properly
22522253 */
22532254 if (amdgpu_device_supports_boco(drm_dev))
2254− return pm_runtime_suspended(dev) &&
2255− pm_suspend_via_firmware();
2255+ return pm_runtime_suspended(dev);
2256+
2257+ /* if we will not support s3 or s2i for the device
2258+ * then skip suspend
2259+ */
2260+ if (!amdgpu_acpi_is_s0ix_active(adev) &&
2261+ !amdgpu_acpi_is_s3_active(adev))
2262+ return 1;
22562263
22572264 return 0;
22582265 }
drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c+1−1
@@ -1904,7 +1904,7 @@ int amdgpu_copy_buffer(struct amdgpu_ring *ring, uint64_t src_offset, · 1903 unmodified lines
19041904 unsigned i;
19051905 int r;
19061906
1907− if (direct_submit && !ring->sched.ready) {
1907+ if (!direct_submit && !ring->sched.ready) {
19081908 DRM_ERROR("Trying to move memory with ring turned off.\n");
19091909 return -EINVAL;
19101910 }
drivers/gpu/drm/amd/amdgpu/gmc_v10_0.c+3−0
@@ -1140,6 +1140,9 @@ static void gmc_v10_0_get_clockgating_state(void *handle, u32 *flags) · 1139 unmodified lines
11401140 {
11411141 struct amdgpu_device *adev = (struct amdgpu_device *)handle;
11421142
1143+ if (adev->ip_versions[GC_HWIP][0] == IP_VERSION(10, 1, 3))
1144+ return;
1145+
11431146 adev->mmhub.funcs->get_clockgating(adev, flags);
11441147
11451148 if (adev->ip_versions[ATHUB_HWIP][0] >= IP_VERSION(2, 1, 0))
drivers/gpu/drm/amd/display/dc/clk_mgr/dcn301/vg_clk_mgr.c+8−8
@@ -570,32 +570,32 @@ static struct wm_table lpddr5_wm_table = { · 569 unmodified lines
570570 .wm_inst = WM_A,
571571 .wm_type = WM_TYPE_PSTATE_CHG,
572572 .pstate_latency_us = 11.65333,
573− .sr_exit_time_us = 7.95,
574− .sr_enter_plus_exit_time_us = 9,
573+ .sr_exit_time_us = 13.5,
574+ .sr_enter_plus_exit_time_us = 16.5,
575575 .valid = true,
576576 },
577577 {
578578 .wm_inst = WM_B,
579579 .wm_type = WM_TYPE_PSTATE_CHG,
580580 .pstate_latency_us = 11.65333,
581− .sr_exit_time_us = 9.82,
582− .sr_enter_plus_exit_time_us = 11.196,
581+ .sr_exit_time_us = 13.5,
582+ .sr_enter_plus_exit_time_us = 16.5,
583583 .valid = true,
584584 },
585585 {
586586 .wm_inst = WM_C,
587587 .wm_type = WM_TYPE_PSTATE_CHG,
588588 .pstate_latency_us = 11.65333,
589− .sr_exit_time_us = 9.89,
590− .sr_enter_plus_exit_time_us = 11.24,
589+ .sr_exit_time_us = 13.5,
590+ .sr_enter_plus_exit_time_us = 16.5,
591591 .valid = true,
592592 },
593593 {
594594 .wm_inst = WM_D,
595595 .wm_type = WM_TYPE_PSTATE_CHG,
596596 .pstate_latency_us = 11.65333,
597− .sr_exit_time_us = 9.748,
598− .sr_enter_plus_exit_time_us = 11.102,
597+ .sr_exit_time_us = 13.5,
598+ .sr_enter_plus_exit_time_us = 16.5,
599599 .valid = true,
600600 },
601601 }
drivers/gpu/drm/amd/display/dc/clk_mgr/dcn31/dcn31_clk_mgr.c+10−10
@@ -329,38 +329,38 @@ static struct clk_bw_params dcn31_bw_params = { · 328 unmodified lines
329329
330330 };
331331
332−static struct wm_table ddr4_wm_table = {
332+static struct wm_table ddr5_wm_table = {
333333 .entries = {
334334 {
335335 .wm_inst = WM_A,
336336 .wm_type = WM_TYPE_PSTATE_CHG,
337337 .pstate_latency_us = 11.72,
338− .sr_exit_time_us = 6.09,
339− .sr_enter_plus_exit_time_us = 7.14,
338+ .sr_exit_time_us = 9,
339+ .sr_enter_plus_exit_time_us = 11,
340340 .valid = true,
341341 },
342342 {
343343 .wm_inst = WM_B,
344344 .wm_type = WM_TYPE_PSTATE_CHG,
345345 .pstate_latency_us = 11.72,
346− .sr_exit_time_us = 10.12,
347− .sr_enter_plus_exit_time_us = 11.48,
346+ .sr_exit_time_us = 9,
347+ .sr_enter_plus_exit_time_us = 11,
348348 .valid = true,
349349 },
350350 {
351351 .wm_inst = WM_C,
352352 .wm_type = WM_TYPE_PSTATE_CHG,
353353 .pstate_latency_us = 11.72,
354− .sr_exit_time_us = 10.12,
355− .sr_enter_plus_exit_time_us = 11.48,
354+ .sr_exit_time_us = 9,
355+ .sr_enter_plus_exit_time_us = 11,
356356 .valid = true,
357357 },
358358 {
359359 .wm_inst = WM_D,
360360 .wm_type = WM_TYPE_PSTATE_CHG,
361361 .pstate_latency_us = 11.72,
362− .sr_exit_time_us = 10.12,
363− .sr_enter_plus_exit_time_us = 11.48,
362+ .sr_exit_time_us = 9,
363+ .sr_enter_plus_exit_time_us = 11,
364364 .valid = true,
365365 },
366366 }
@@ -687,7 +687,7 @@ void dcn31_clk_mgr_construct( · 320 unmodified lines
687687 if (ctx->dc_bios->integrated_info->memory_type == LpDdr5MemType) {
688688 dcn31_bw_params.wm_table = lpddr5_wm_table;
689689 } else {
690− dcn31_bw_params.wm_table = ddr4_wm_table;
690+ dcn31_bw_params.wm_table = ddr5_wm_table;
691691 }
692692 /* Saved clocks configured at boot for debug purposes */
693693 dcn31_dump_clk_registers(&clk_mgr->base.base.boot_snapshot, &clk_mgr->base.base, &log_info);
drivers/gpu/drm/amd/display/dc/core/dc_link_dp.c+20−0
@@ -5597,6 +5597,26 @@ static bool retrieve_link_cap(struct dc_link *link) · 5596 unmodified lines
55975597 dp_hw_fw_revision.ieee_fw_rev,
55985598 sizeof(dp_hw_fw_revision.ieee_fw_rev));
55995599
5600+ /* Quirk for Apple MBP 2018 15" Retina panels: wrong DP_MAX_LINK_RATE */
5601+ {
5602+ uint8_t str_mbp_2018[] = { 101, 68, 21, 103, 98, 97 };
5603+ uint8_t fwrev_mbp_2018[] = { 7, 4 };
5604+ uint8_t fwrev_mbp_2018_vega[] = { 8, 4 };
5605+
5606+ /* We also check for the firmware revision as 16,1 models have an
5607+ * identical device id and are incorrectly quirked otherwise.
5608+ */
5609+ if ((link->dpcd_caps.sink_dev_id == 0x0010fa) &&
5610+ !memcmp(link->dpcd_caps.sink_dev_id_str, str_mbp_2018,
5611+ sizeof(str_mbp_2018)) &&
5612+ (!memcmp(link->dpcd_caps.sink_fw_revision, fwrev_mbp_2018,
5613+ sizeof(fwrev_mbp_2018)) ||
5614+ !memcmp(link->dpcd_caps.sink_fw_revision, fwrev_mbp_2018_vega,
5615+ sizeof(fwrev_mbp_2018_vega)))) {
5616+ link->reported_link_cap.link_rate = LINK_RATE_RBR2;
5617+ }
5618+ }
5619+
56005620 memset(&link->dpcd_caps.dsc_caps, '\0',
56015621 sizeof(link->dpcd_caps.dsc_caps));
56025622 memset(&link->dpcd_caps.fec_cap, '\0', sizeof(link->dpcd_caps.fec_cap));
drivers/gpu/drm/amd/display/dc/dce110/dce110_hw_sequencer.c+0−5
@@ -1608,11 +1608,6 @@ static enum dc_status apply_single_controller_ctx_to_hw( · 1607 unmodified lines
16081608 pipe_ctx->stream_res.stream_enc,
16091609 pipe_ctx->stream_res.tg->inst);
16101610
1611− if (dc_is_embedded_signal(pipe_ctx->stream->signal) &&
1612− pipe_ctx->stream_res.stream_enc->funcs->reset_fifo)
1613− pipe_ctx->stream_res.stream_enc->funcs->reset_fifo(
1614− pipe_ctx->stream_res.stream_enc);
1615−
16161611 if (dc_is_dp_signal(pipe_ctx->stream->signal))
16171612 dp_source_sequence_trace(link, DPCD_SOURCE_SEQ_AFTER_CONNECT_DIG_FE_OTG);
16181613
drivers/gpu/drm/amd/display/dc/dcn10/dcn10_stream_encoder.c+0−15
@@ -902,19 +902,6 @@ void enc1_stream_encoder_stop_dp_info_packets( · 901 unmodified lines
902902
903903 }
904904
905−void enc1_stream_encoder_reset_fifo(
906− struct stream_encoder *enc)
907−{
908− struct dcn10_stream_encoder *enc1 = DCN10STRENC_FROM_STRENC(enc);
909−
910− /* set DIG_START to 0x1 to reset FIFO */
911− REG_UPDATE(DIG_FE_CNTL, DIG_START, 1);
912− udelay(100);
913−
914− /* write 0 to take the FIFO out of reset */
915− REG_UPDATE(DIG_FE_CNTL, DIG_START, 0);
916−}
917−
918905 void enc1_stream_encoder_dp_blank(
919906 struct dc_link *link,
920907 struct stream_encoder *enc)
@@ -1600,8 +1587,6 @@ static const struct stream_encoder_funcs dcn10_str_enc_funcs = { · 679 unmodified lines
16001587 enc1_stream_encoder_send_immediate_sdp_message,
16011588 .stop_dp_info_packets =
16021589 enc1_stream_encoder_stop_dp_info_packets,
1603− .reset_fifo =
1604− enc1_stream_encoder_reset_fifo,
16051590 .dp_blank =
16061591 enc1_stream_encoder_dp_blank,
16071592 .dp_unblank =
drivers/gpu/drm/amd/display/dc/dcn10/dcn10_stream_encoder.h+0−3
@@ -626,9 +626,6 @@ void enc1_stream_encoder_send_immediate_sdp_message( · 625 unmodified lines
626626 void enc1_stream_encoder_stop_dp_info_packets(
627627 struct stream_encoder *enc);
628628
629−void enc1_stream_encoder_reset_fifo(
630− struct stream_encoder *enc);
631−
632629 void enc1_stream_encoder_dp_blank(
633630 struct dc_link *link,
634631 struct stream_encoder *enc);
drivers/gpu/drm/amd/display/dc/dcn20/dcn20_stream_encoder.c+0−2
@@ -593,8 +593,6 @@ static const struct stream_encoder_funcs dcn20_str_enc_funcs = { · 592 unmodified lines
593593 enc1_stream_encoder_send_immediate_sdp_message,
594594 .stop_dp_info_packets =
595595 enc1_stream_encoder_stop_dp_info_packets,
596− .reset_fifo =
597− enc1_stream_encoder_reset_fifo,
598596 .dp_blank =
599597 enc1_stream_encoder_dp_blank,
600598 .dp_unblank =
drivers/gpu/drm/amd/display/dc/dcn30/dcn30_dio_stream_encoder.c+0−2
@@ -789,8 +789,6 @@ static const struct stream_encoder_funcs dcn30_str_enc_funcs = { · 788 unmodified lines
789789 enc3_stream_encoder_update_dp_info_packets,
790790 .stop_dp_info_packets =
791791 enc1_stream_encoder_stop_dp_info_packets,
792− .reset_fifo =
793− enc1_stream_encoder_reset_fifo,
794792 .dp_blank =
795793 enc1_stream_encoder_dp_blank,
796794 .dp_unblank =
drivers/gpu/drm/amd/display/dc/inc/hw/stream_encoder.h+0−4
@@ -164,10 +164,6 @@ struct stream_encoder_funcs { · 163 unmodified lines
164164 void (*stop_dp_info_packets)(
165165 struct stream_encoder *enc);
166166
167− void (*reset_fifo)(
168− struct stream_encoder *enc
169− );
170−
171167 void (*dp_blank)(
172168 struct dc_link *link,
173169 struct stream_encoder *enc);
drivers/gpu/drm/amd/pm/swsmu/smu11/sienna_cichlid_ppt.c+3−3
@@ -3696,14 +3696,14 @@ static ssize_t sienna_cichlid_get_gpu_metrics(struct smu_context *smu, · 3695 unmodified lines
36963696
36973697 static int sienna_cichlid_enable_mgpu_fan_boost(struct smu_context *smu)
36983698 {
3699− struct smu_table_context *table_context = &smu->smu_table;
3700− PPTable_t *smc_pptable = table_context->driver_pptable;
3699+ uint16_t *mgpu_fan_boost_limit_rpm;
37013700
3701+ GET_PPTABLE_MEMBER(MGpuFanBoostLimitRpm, &mgpu_fan_boost_limit_rpm);
37023702 /*
37033703 * Skip the MGpuFanBoost setting for those ASICs
37043704 * which do not support it
37053705 */
3706− if (!smc_pptable->MGpuFanBoostLimitRpm)
3706+ if (*mgpu_fan_boost_limit_rpm == 0)
37073707 return 0;
37083708
37093709 return smu_cmn_send_smc_msg_with_param(smu,
drivers/gpu/drm/i915/display/intel_overlay.c+3−0
@@ -959,6 +959,9 @@ static int check_overlay_dst(struct intel_overlay *overlay, · 958 unmodified lines
959959 const struct intel_crtc_state *pipe_config =
960960 overlay->crtc->config;
961961
962+ if (rec->dst_height == 0 || rec->dst_width == 0)
963+ return -EINVAL;
964+
962965 if (rec->dst_x < pipe_config->pipe_src_w &&
963966 rec->dst_x + rec->dst_width <= pipe_config->pipe_src_w &&
964967 rec->dst_y < pipe_config->pipe_src_h &&
drivers/gpu/drm/i915/display/intel_tc.c+2−1
@@ -345,10 +345,11 @@ static bool icl_tc_phy_status_complete(struct intel_digital_port *dig_port) · 344 unmodified lines
345345 static bool adl_tc_phy_status_complete(struct intel_digital_port *dig_port)
346346 {
347347 struct drm_i915_private *i915 = to_i915(dig_port->base.base.dev);
348+ enum tc_port tc_port = intel_port_to_tc(i915, dig_port->base.port);
348349 struct intel_uncore *uncore = &i915->uncore;
349350 u32 val;
350351
351− val = intel_uncore_read(uncore, TCSS_DDI_STATUS(dig_port->tc_phy_fia_idx));
352+ val = intel_uncore_read(uncore, TCSS_DDI_STATUS(tc_port));
352353 if (val == 0xffffffff) {
353354 drm_dbg_kms(&i915->drm,
354355 "Port %s: PHY in TCCOLD, assuming not complete\n",
drivers/gpu/drm/i915/gem/i915_gem_execbuffer.c+7−2
@@ -2505,9 +2505,14 @@ static int eb_pin_timeline(struct i915_execbuffer *eb, struct intel_context *ce, · 2504 unmodified lines
25052505 timeout) < 0) {
25062506 i915_request_put(rq);
25072507
2508− tl = intel_context_timeline_lock(ce);
2508+ /*
2509+ * Error path, cannot use intel_context_timeline_lock as
2510+ * that is user interruptable and this clean up step
2511+ * must be done.
2512+ */
2513+ mutex_lock(&ce->timeline->mutex);
25092514 intel_context_exit(ce);
2510− intel_context_timeline_unlock(tl);
2515+ mutex_unlock(&ce->timeline->mutex);
25112516
25122517 if (nonblock)
25132518 return -EWOULDBLOCK;
drivers/gpu/drm/i915/gt/uc/intel_guc.h+5−0
@@ -206,6 +206,11 @@ struct intel_guc { · 205 unmodified lines
206206 * context usage for overflows.
207207 */
208208 struct delayed_work work;
209+
210+ /**
211+ * @shift: Right shift value for the gpm timestamp
212+ */
213+ u32 shift;
209214 } timestamp;
210215
211216 #ifdef CONFIG_DRM_I915_SELFTEST
drivers/gpu/drm/i915/gt/uc/intel_guc_submission.c+97−17
@@ -1113,6 +1113,19 @@ __extend_last_switch(struct intel_guc *guc, u64 *prev_start, u32 new_start) · 1112 unmodified lines
11131113 if (new_start == lower_32_bits(*prev_start))
11141114 return;
11151115
1116+ /*
1117+ * When gt is unparked, we update the gt timestamp and start the ping
1118+ * worker that updates the gt_stamp every POLL_TIME_CLKS. As long as gt
1119+ * is unparked, all switched in contexts will have a start time that is
1120+ * within +/- POLL_TIME_CLKS of the most recent gt_stamp.
1121+ *
1122+ * If neither gt_stamp nor new_start has rolled over, then the
1123+ * gt_stamp_hi does not need to be adjusted, however if one of them has
1124+ * rolled over, we need to adjust gt_stamp_hi accordingly.
1125+ *
1126+ * The below conditions address the cases of new_start rollover and
1127+ * gt_stamp_last rollover respectively.
1128+ */
11161129 if (new_start < gt_stamp_last &&
11171130 (new_start - gt_stamp_last) <= POLL_TIME_CLKS)
11181131 gt_stamp_hi++;
@@ -1124,17 +1137,45 @@ __extend_last_switch(struct intel_guc *guc, u64 *prev_start, u32 new_start) · 5 unmodified lines
11241137 *prev_start = ((u64)gt_stamp_hi << 32) | new_start;
11251138 }
11261139
1127−static void guc_update_engine_gt_clks(struct intel_engine_cs *engine)
1140+/*
1141+ * GuC updates shared memory and KMD reads it. Since this is not synchronized,
1142+ * we run into a race where the value read is inconsistent. Sometimes the
1143+ * inconsistency is in reading the upper MSB bytes of the last_in value when
1144+ * this race occurs. 2 types of cases are seen - upper 8 bits are zero and upper
1145+ * 24 bits are zero. Since these are non-zero values, it is non-trivial to
1146+ * determine validity of these values. Instead we read the values multiple times
1147+ * until they are consistent. In test runs, 3 attempts results in consistent
1148+ * values. The upper bound is set to 6 attempts and may need to be tuned as per
1149+ * any new occurences.
1150+ */
1151+static void __get_engine_usage_record(struct intel_engine_cs *engine,
1152+ u32 *last_in, u32 *id, u32 *total)
11281153 {
11291154 struct guc_engine_usage_record *rec = intel_guc_engine_usage(engine);
1155+ int i = 0;
1156+
1157+ do {
1158+ *last_in = READ_ONCE(rec->last_switch_in_stamp);
1159+ *id = READ_ONCE(rec->current_context_index);
1160+ *total = READ_ONCE(rec->total_runtime);
1161+
1162+ if (READ_ONCE(rec->last_switch_in_stamp) == *last_in &&
1163+ READ_ONCE(rec->current_context_index) == *id &&
1164+ READ_ONCE(rec->total_runtime) == *total)
1165+ break;
1166+ } while (++i < 6);
1167+}
1168+
1169+static void guc_update_engine_gt_clks(struct intel_engine_cs *engine)
1170+{
11301171 struct intel_engine_guc_stats *stats = &engine->stats.guc;
11311172 struct intel_guc *guc = &engine->gt->uc.guc;
1132− u32 last_switch = rec->last_switch_in_stamp;
1133− u32 ctx_id = rec->current_context_index;
1134− u32 total = rec->total_runtime;
1173+ u32 last_switch, ctx_id, total;
11351174
11361175 lockdep_assert_held(&guc->timestamp.lock);
11371176
1177+ __get_engine_usage_record(engine, &last_switch, &ctx_id, &total);
1178+
11381179 stats->running = ctx_id != ~0U && last_switch;
11391180 if (stats->running)
11401181 __extend_last_switch(guc, &stats->start_gt_clk, last_switch);
@@ -1149,23 +1190,51 @@ static void guc_update_engine_gt_clks(struct intel_engine_cs *engine) · 8 unmodified lines
11491190 }
11501191 }
11511192
1152−static void guc_update_pm_timestamp(struct intel_guc *guc,
1153− struct intel_engine_cs *engine,
1154− ktime_t *now)
1193+static u32 gpm_timestamp_shift(struct intel_gt *gt)
1194+{
1195+ intel_wakeref_t wakeref;
1196+ u32 reg, shift;
1197+
1198+ with_intel_runtime_pm(gt->uncore->rpm, wakeref)
1199+ reg = intel_uncore_read(gt->uncore, RPM_CONFIG0);
1200+
1201+ shift = (reg & GEN10_RPM_CONFIG0_CTC_SHIFT_PARAMETER_MASK) >>
1202+ GEN10_RPM_CONFIG0_CTC_SHIFT_PARAMETER_SHIFT;
1203+
1204+ return 3 - shift;
1205+}
1206+
1207+static u64 gpm_timestamp(struct intel_gt *gt)
1208+{
1209+ u32 lo, hi, old_hi, loop = 0;
1210+
1211+ hi = intel_uncore_read(gt->uncore, MISC_STATUS1);
1212+ do {
1213+ lo = intel_uncore_read(gt->uncore, MISC_STATUS0);
1214+ old_hi = hi;
1215+ hi = intel_uncore_read(gt->uncore, MISC_STATUS1);
1216+ } while (old_hi != hi && loop++ < 2);
1217+
1218+ return ((u64)hi << 32) | lo;
1219+}
1220+
1221+static void guc_update_pm_timestamp(struct intel_guc *guc, ktime_t *now)
11551222 {
1156− u32 gt_stamp_now, gt_stamp_hi;
1223+ struct intel_gt *gt = guc_to_gt(guc);
1224+ u32 gt_stamp_lo, gt_stamp_hi;
1225+ u64 gpm_ts;
11571226
11581227 lockdep_assert_held(&guc->timestamp.lock);
11591228
11601229 gt_stamp_hi = upper_32_bits(guc->timestamp.gt_stamp);
1161− gt_stamp_now = intel_uncore_read(engine->uncore,
1162− RING_TIMESTAMP(engine->mmio_base));
1230+ gpm_ts = gpm_timestamp(gt) >> guc->timestamp.shift;
1231+ gt_stamp_lo = lower_32_bits(gpm_ts);
11631232 *now = ktime_get();
11641233
1165− if (gt_stamp_now < lower_32_bits(guc->timestamp.gt_stamp))
1234+ if (gt_stamp_lo < lower_32_bits(guc->timestamp.gt_stamp))
11661235 gt_stamp_hi++;
11671236
1168− guc->timestamp.gt_stamp = ((u64)gt_stamp_hi << 32) | gt_stamp_now;
1237+ guc->timestamp.gt_stamp = ((u64)gt_stamp_hi << 32) | gt_stamp_lo;
11691238 }
11701239
11711240 /*
@@ -1208,8 +1277,12 @@ static ktime_t guc_engine_busyness(struct intel_engine_cs *engine, ktime_t *now) · 36 unmodified lines
12081277 if (!in_reset && intel_gt_pm_get_if_awake(gt)) {
12091278 stats_saved = *stats;
12101279 gt_stamp_saved = guc->timestamp.gt_stamp;
1280+ /*
1281+ * Update gt_clks, then gt timestamp to simplify the 'gt_stamp -
1282+ * start_gt_clk' calculation below for active engines.
1283+ */
12111284 guc_update_engine_gt_clks(engine);
1212− guc_update_pm_timestamp(guc, engine, now);
1285+ guc_update_pm_timestamp(guc, now);
12131286 intel_gt_pm_put_async(gt);
12141287 if (i915_reset_count(gpu_error) != reset_count) {
12151288 *stats = stats_saved;
@@ -1241,8 +1314,8 @@ static void __reset_guc_busyness_stats(struct intel_guc *guc) · 25 unmodified lines
12411314
12421315 spin_lock_irqsave(&guc->timestamp.lock, flags);
12431316
1317+ guc_update_pm_timestamp(guc, &unused);
12441318 for_each_engine(engine, gt, id) {
1245− guc_update_pm_timestamp(guc, engine, &unused);
12461319 guc_update_engine_gt_clks(engine);
12471320 engine->stats.guc.prev_total = 0;
12481321 }
@@ -1259,10 +1332,11 @@ static void __update_guc_busyness_stats(struct intel_guc *guc) · 10 unmodified lines
12591332 ktime_t unused;
12601333
12611334 spin_lock_irqsave(&guc->timestamp.lock, flags);
1262− for_each_engine(engine, gt, id) {
1263− guc_update_pm_timestamp(guc, engine, &unused);
1335+
1336+ guc_update_pm_timestamp(guc, &unused);
1337+ for_each_engine(engine, gt, id)
12641338 guc_update_engine_gt_clks(engine);
1265− }
1339+
12661340 spin_unlock_irqrestore(&guc->timestamp.lock, flags);
12671341 }
12681342
@@ -1335,10 +1409,15 @@ void intel_guc_busyness_park(struct intel_gt *gt) · 66 unmodified lines
13351409 void intel_guc_busyness_unpark(struct intel_gt *gt)
13361410 {
13371411 struct intel_guc *guc = &gt->uc.guc;
1412+ unsigned long flags;
1413+ ktime_t unused;
13381414
13391415 if (!guc_submission_initialized(guc))
13401416 return;
13411417
1418+ spin_lock_irqsave(&guc->timestamp.lock, flags);
1419+ guc_update_pm_timestamp(guc, &unused);
1420+ spin_unlock_irqrestore(&guc->timestamp.lock, flags);
13421421 mod_delayed_work(system_highpri_wq, &guc->timestamp.work,
13431422 guc->timestamp.ping_delay);
13441423 }
@@ -1783,6 +1862,7 @@ int intel_guc_submission_init(struct intel_guc *guc) · 438 unmodified lines
17831862 spin_lock_init(&guc->timestamp.lock);
17841863 INIT_DELAYED_WORK(&guc->timestamp.work, guc_timestamp_ping);
17851864 guc->timestamp.ping_delay = (POLL_TIME_CLKS / gt->clock_frequency + 1) * HZ;
1865+ guc->timestamp.shift = gpm_timestamp_shift(gt);
17861866
17871867 return 0;
17881868 }
drivers/gpu/drm/i915/i915_gpu_error.c+1−1
@@ -1522,7 +1522,7 @@ capture_engine(struct intel_engine_cs *engine, · 1521 unmodified lines
15221522 struct i915_request *rq = NULL;
15231523 unsigned long flags;
15241524
1525− ee = intel_engine_coredump_alloc(engine, GFP_KERNEL);
1525+ ee = intel_engine_coredump_alloc(engine, ALLOW_FAIL);
15261526 if (!ee)
15271527 return NULL;
15281528
drivers/gpu/drm/i915/i915_reg.h+2−1
@@ -2684,7 +2684,8 @@ static inline bool i915_mmio_reg_valid(i915_reg_t reg) · 2683 unmodified lines
26842684 #define RING_WAIT (1 << 11) /* gen3+, PRBx_CTL */
26852685 #define RING_WAIT_SEMAPHORE (1 << 10) /* gen6+ */
26862686
2687−#define GUCPMTIMESTAMP _MMIO(0xC3E8)
2687+#define MISC_STATUS0 _MMIO(0xA500)
2688+#define MISC_STATUS1 _MMIO(0xA504)
26882689
26892690 /* There are 16 64-bit CS General Purpose Registers per-engine on Gen8+ */
26902691 #define GEN8_RING_CS_GPR(base, n) _MMIO((base) + 0x600 + (n) * 8)
drivers/gpu/drm/kmb/kmb_plane.c+0−6
@@ -158,12 +158,6 @@ static void kmb_plane_atomic_disable(struct drm_plane *plane, · 157 unmodified lines
158158 case LAYER_1:
159159 kmb->plane_status[plane_id].ctrl = LCD_CTRL_VL2_ENABLE;
160160 break;
161− case LAYER_2:
162− kmb->plane_status[plane_id].ctrl = LCD_CTRL_GL1_ENABLE;
163− break;
164− case LAYER_3:
165− kmb->plane_status[plane_id].ctrl = LCD_CTRL_GL2_ENABLE;
166− break;
167161 }
168162
169163 kmb->plane_status[plane_id].disable = true;
drivers/gpu/drm/mxsfb/mxsfb_kms.c+5−1
@@ -361,7 +361,11 @@ static void mxsfb_crtc_atomic_enable(struct drm_crtc *crtc, · 360 unmodified lines
361361 bridge_state =
362362 drm_atomic_get_new_bridge_state(state,
363363 mxsfb->bridge);
364− bus_format = bridge_state->input_bus_cfg.format;
364+ if (!bridge_state)
365+ bus_format = MEDIA_BUS_FMT_FIXED;
366+ else
367+ bus_format = bridge_state->input_bus_cfg.format;
368+
365369 if (bus_format == MEDIA_BUS_FMT_FIXED) {
366370 dev_warn_once(drm->dev,
367371 "Bridge does not provide bus format, assuming MEDIA_BUS_FMT_RGB888_1X24.\n"
drivers/gpu/drm/nouveau/nvkm/subdev/bios/base.c+1−1
@@ -38,7 +38,7 @@ nvbios_addr(struct nvkm_bios *bios, u32 *addr, u8 size) · 37 unmodified lines
3838 *addr += bios->imaged_addr;
3939 }
4040
41− if (unlikely(*addr + size >= bios->size)) {
41+ if (unlikely(*addr + size > bios->size)) {
4242 nvkm_error(&bios->subdev, "OOB %d %08x %08x\n", size, p, *addr);
4343 return false;
4444 }
drivers/infiniband/core/cm.c+1−1
@@ -3322,7 +3322,7 @@ static int cm_lap_handler(struct cm_work *work) · 3321 unmodified lines
33223322 ret = cm_init_av_by_path(param->alternate_path, NULL, &alt_av);
33233323 if (ret) {
33243324 rdma_destroy_ah_attr(&ah_attr);
3325− return -EINVAL;
3325+ goto deref;
33263326 }
33273327
33283328 spin_lock_irq(&cm_id_priv->lock);
drivers/infiniband/core/cma.c+12−10
@@ -67,8 +67,8 @@ static const char * const cma_events[] = { · 66 unmodified lines
6767 [RDMA_CM_EVENT_TIMEWAIT_EXIT] = "timewait exit",
6868 };
6969
70−static void cma_set_mgid(struct rdma_id_private *id_priv, struct sockaddr *addr,
71− union ib_gid *mgid);
70+static void cma_iboe_set_mgid(struct sockaddr *addr, union ib_gid *mgid,
71+ enum ib_gid_type gid_type);
7272
7373 const char *__attribute_const__ rdma_event_msg(enum rdma_cm_event_type event)
7474 {
@@ -1846,17 +1846,19 @@ static void destroy_mc(struct rdma_id_private *id_priv, · 1771 unmodified lines
18461846 if (dev_addr->bound_dev_if)
18471847 ndev = dev_get_by_index(dev_addr->net,
18481848 dev_addr->bound_dev_if);
1849− if (ndev) {
1849+ if (ndev && !send_only) {
1850+ enum ib_gid_type gid_type;
18501851 union ib_gid mgid;
18511852
1852− cma_set_mgid(id_priv, (struct sockaddr *)&mc->addr,
1853− &mgid);
1854−
1855− if (!send_only)
1856− cma_igmp_send(ndev, &mgid, false);
1857−
1858− dev_put(ndev);
1853+ gid_type = id_priv->cma_dev->default_gid_type
1854+ [id_priv->id.port_num -
1855+ rdma_start_port(
1856+ id_priv->cma_dev->device)];
1857+ cma_iboe_set_mgid((struct sockaddr *)&mc->addr, &mgid,
1858+ gid_type);
1859+ cma_igmp_send(ndev, &mgid, false);
18591860 }
1861+ dev_put(ndev);
18601862
18611863 cancel_work_sync(&mc->iboe_join.work);
18621864 }
drivers/infiniband/core/ucma.c+23−11
@@ -95,6 +95,7 @@ struct ucma_context { · 94 unmodified lines
9595 u64 uid;
9696
9797 struct list_head list;
98+ struct list_head mc_list;
9899 struct work_struct close_work;
99100 };
100101
@@ -105,6 +106,7 @@ struct ucma_multicast { · 4 unmodified lines
105106
106107 u64 uid;
107108 u8 join_state;
109+ struct list_head list;
108110 struct sockaddr_storage addr;
109111 };
110112
@@ -198,6 +200,7 @@ static struct ucma_context *ucma_alloc_ctx(struct ucma_file *file) · 87 unmodified lines
198200
199201 INIT_WORK(&ctx->close_work, ucma_close_id);
200202 init_completion(&ctx->comp);
203+ INIT_LIST_HEAD(&ctx->mc_list);
201204 /* So list_del() will work if we don't do ucma_finish_ctx() */
202205 INIT_LIST_HEAD(&ctx->list);
203206 ctx->file = file;
@@ -484,19 +487,19 @@ err1: · 280 unmodified lines
484487
485488 static void ucma_cleanup_multicast(struct ucma_context *ctx)
486489 {
487− struct ucma_multicast *mc;
488− unsigned long index;
490+ struct ucma_multicast *mc, *tmp;
489491
490− xa_for_each(&multicast_table, index, mc) {
491− if (mc->ctx != ctx)
492− continue;
492+ xa_lock(&multicast_table);
493+ list_for_each_entry_safe(mc, tmp, &ctx->mc_list, list) {
494+ list_del(&mc->list);
493495 /*
494496 * At this point mc->ctx->ref is 0 so the mc cannot leave the
495497 * lock on the reader and this is enough serialization
496498 */
497− xa_erase(&multicast_table, index);
499+ __xa_erase(&multicast_table, mc->id);
498500 kfree(mc);
499501 }
502+ xa_unlock(&multicast_table);
500503 }
501504
502505 static void ucma_cleanup_mc_events(struct ucma_multicast *mc)
@@ -1469,12 +1472,16 @@ static ssize_t ucma_process_join(struct ucma_file *file, · 966 unmodified lines
14691472 mc->uid = cmd->uid;
14701473 memcpy(&mc->addr, addr, cmd->addr_size);
14711474
1472− if (xa_alloc(&multicast_table, &mc->id, NULL, xa_limit_32b,
1475+ xa_lock(&multicast_table);
1476+ if (__xa_alloc(&multicast_table, &mc->id, NULL, xa_limit_32b,
14731477 GFP_KERNEL)) {
14741478 ret = -ENOMEM;
14751479 goto err_free_mc;
14761480 }
14771481
1482+ list_add_tail(&mc->list, &ctx->mc_list);
1483+ xa_unlock(&multicast_table);
1484+
14781485 mutex_lock(&ctx->mutex);
14791486 ret = rdma_join_multicast(ctx->cm_id, (struct sockaddr *)&mc->addr,
14801487 join_state, mc);
@@ -1500,8 +1507,11 @@ err_leave_multicast: · 19 unmodified lines
15001507 mutex_unlock(&ctx->mutex);
15011508 ucma_cleanup_mc_events(mc);
15021509 err_xa_erase:
1503− xa_erase(&multicast_table, mc->id);
1510+ xa_lock(&multicast_table);
1511+ list_del(&mc->list);
1512+ __xa_erase(&multicast_table, mc->id);
15041513 err_free_mc:
1514+ xa_unlock(&multicast_table);
15051515 kfree(mc);
15061516 err_put_ctx:
15071517 ucma_put_ctx(ctx);
@@ -1569,15 +1579,17 @@ static ssize_t ucma_leave_multicast(struct ucma_file *file, · 61 unmodified lines
15691579 mc = ERR_PTR(-EINVAL);
15701580 else if (!refcount_inc_not_zero(&mc->ctx->ref))
15711581 mc = ERR_PTR(-ENXIO);
1572− else
1573− __xa_erase(&multicast_table, mc->id);
1574− xa_unlock(&multicast_table);
15751582
15761583 if (IS_ERR(mc)) {
1584+ xa_unlock(&multicast_table);
15771585 ret = PTR_ERR(mc);
15781586 goto out;
15791587 }
15801588
1589+ list_del(&mc->list);
1590+ __xa_erase(&multicast_table, mc->id);
1591+ xa_unlock(&multicast_table);
1592+
15811593 mutex_lock(&mc->ctx->mutex);
15821594 rdma_leave_multicast(mc->ctx->cm_id, (struct sockaddr *) &mc->addr);
15831595 mutex_unlock(&mc->ctx->mutex);
drivers/infiniband/hw/hfi1/ipoib.h+1−1
@@ -55,7 +55,7 @@ union hfi1_ipoib_flow { · 54 unmodified lines
5555 */
5656 struct ipoib_txreq {
5757 struct sdma_txreq txreq;
58− struct hfi1_sdma_header sdma_hdr;
58+ struct hfi1_sdma_header *sdma_hdr;
5959 int sdma_status;
6060 int complete;
6161 struct hfi1_ipoib_dev_priv *priv;
drivers/infiniband/hw/hfi1/ipoib_main.c+15−12
@@ -22,26 +22,35 @@ static int hfi1_ipoib_dev_init(struct net_device *dev) · 21 unmodified lines
2222 int ret;
2323
2424 dev->tstats = netdev_alloc_pcpu_stats(struct pcpu_sw_netstats);
25+ if (!dev->tstats)
26+ return -ENOMEM;
2527
2628 ret = priv->netdev_ops->ndo_init(dev);
2729 if (ret)
28− return ret;
30+ goto out_ret;
2931
3032 ret = hfi1_netdev_add_data(priv->dd,
3133 qpn_from_mac(priv->netdev->dev_addr),
3234 dev);
3335 if (ret < 0) {
3436 priv->netdev_ops->ndo_uninit(dev);
35− return ret;
37+ goto out_ret;
3638 }
3739
3840 return 0;
41+out_ret:
42+ free_percpu(dev->tstats);
43+ dev->tstats = NULL;
44+ return ret;
3945 }
4046
4147 static void hfi1_ipoib_dev_uninit(struct net_device *dev)
4248 {
4349 struct hfi1_ipoib_dev_priv *priv = hfi1_ipoib_priv(dev);
4450
51+ free_percpu(dev->tstats);
52+ dev->tstats = NULL;
53+
4554 hfi1_netdev_remove_data(priv->dd, qpn_from_mac(priv->netdev->dev_addr));
4655
4756 priv->netdev_ops->ndo_uninit(dev);
@@ -166,12 +175,7 @@ static void hfi1_ipoib_netdev_dtor(struct net_device *dev) · 118 unmodified lines
166175 hfi1_ipoib_rxq_deinit(priv->netdev);
167176
168177 free_percpu(dev->tstats);
169−}
170−
171−static void hfi1_ipoib_free_rdma_netdev(struct net_device *dev)
172−{
173− hfi1_ipoib_netdev_dtor(dev);
174− free_netdev(dev);
178+ dev->tstats = NULL;
175179 }
176180
177181 static void hfi1_ipoib_set_id(struct net_device *dev, int id)
@@ -211,24 +215,23 @@ static int hfi1_ipoib_setup_rn(struct ib_device *device, · 33 unmodified lines
211215 priv->port_num = port_num;
212216 priv->netdev_ops = netdev->netdev_ops;
213217
214− netdev->netdev_ops = &hfi1_ipoib_netdev_ops;
215−
216218 ib_query_pkey(device, port_num, priv->pkey_index, &priv->pkey);
217219
218220 rc = hfi1_ipoib_txreq_init(priv);
219221 if (rc) {
220222 dd_dev_err(dd, "IPoIB netdev TX init - failed(%d)\n", rc);
221− hfi1_ipoib_free_rdma_netdev(netdev);
222223 return rc;
223224 }
224225
225226 rc = hfi1_ipoib_rxq_init(netdev);
226227 if (rc) {
227228 dd_dev_err(dd, "IPoIB netdev RX init - failed(%d)\n", rc);
228− hfi1_ipoib_free_rdma_netdev(netdev);
229+ hfi1_ipoib_txreq_deinit(priv);
229230 return rc;
230231 }
231232
233+ netdev->netdev_ops = &hfi1_ipoib_netdev_ops;
234+
232235 netdev->priv_destructor = hfi1_ipoib_netdev_dtor;
233236 netdev->needs_free_netdev = true;
234237
drivers/infiniband/hw/hfi1/ipoib_tx.c+26−12
@@ -122,7 +122,7 @@ static void hfi1_ipoib_free_tx(struct ipoib_txreq *tx, int budget) · 121 unmodified lines
122122 dd_dev_warn(priv->dd,
123123 "%s: Status = 0x%x pbc 0x%llx txq = %d sde = %d\n",
124124 __func__, tx->sdma_status,
125− le64_to_cpu(tx->sdma_hdr.pbc), tx->txq->q_idx,
125+ le64_to_cpu(tx->sdma_hdr->pbc), tx->txq->q_idx,
126126 tx->txq->sde->this_idx);
127127 }
128128
@@ -231,7 +231,7 @@ static int hfi1_ipoib_build_tx_desc(struct ipoib_txreq *tx, · 102 unmodified lines
231231 {
232232 struct hfi1_devdata *dd = txp->dd;
233233 struct sdma_txreq *txreq = &tx->txreq;
234− struct hfi1_sdma_header *sdma_hdr = &tx->sdma_hdr;
234+ struct hfi1_sdma_header *sdma_hdr = tx->sdma_hdr;
235235 u16 pkt_bytes =
236236 sizeof(sdma_hdr->pbc) + (txp->hdr_dwords << 2) + tx->skb->len;
237237 int ret;
@@ -256,7 +256,7 @@ static void hfi1_ipoib_build_ib_tx_headers(struct ipoib_txreq *tx, · 18 unmodified lines
256256 struct ipoib_txparms *txp)
257257 {
258258 struct hfi1_ipoib_dev_priv *priv = tx->txq->priv;
259− struct hfi1_sdma_header *sdma_hdr = &tx->sdma_hdr;
259+ struct hfi1_sdma_header *sdma_hdr = tx->sdma_hdr;
260260 struct sk_buff *skb = tx->skb;
261261 struct hfi1_pportdata *ppd = ppd_from_ibp(txp->ibp);
262262 struct rdma_ah_attr *ah_attr = txp->ah_attr;
@@ -483,7 +483,7 @@ static int hfi1_ipoib_send_dma_single(struct net_device *dev, · 220 unmodified lines
483483 if (likely(!ret)) {
484484 tx_ok:
485485 trace_sdma_output_ibhdr(txq->priv->dd,
486− &tx->sdma_hdr.hdr,
486+ &tx->sdma_hdr->hdr,
487487 ib_is_sc5(txp->flow.sc5));
488488 hfi1_ipoib_check_queue_depth(txq);
489489 return NETDEV_TX_OK;
@@ -547,7 +547,7 @@ static int hfi1_ipoib_send_dma_list(struct net_device *dev, · 57 unmodified lines
547547 hfi1_ipoib_check_queue_depth(txq);
548548
549549 trace_sdma_output_ibhdr(txq->priv->dd,
550− &tx->sdma_hdr.hdr,
550+ &tx->sdma_hdr->hdr,
551551 ib_is_sc5(txp->flow.sc5));
552552
553553 if (!netdev_xmit_more())
@@ -683,7 +683,8 @@ int hfi1_ipoib_txreq_init(struct hfi1_ipoib_dev_priv *priv) · 129 unmodified lines
683683 {
684684 struct net_device *dev = priv->netdev;
685685 u32 tx_ring_size, tx_item_size;
686− int i;
686+ struct hfi1_ipoib_circ_buf *tx_ring;
687+ int i, j;
687688
688689 /*
689690 * Ring holds 1 less than tx_ring_size
@@ -701,7 +702,9 @@ int hfi1_ipoib_txreq_init(struct hfi1_ipoib_dev_priv *priv) · 11 unmodified lines
701702
702703 for (i = 0; i < dev->num_tx_queues; i++) {
703704 struct hfi1_ipoib_txq *txq = &priv->txqs[i];
705+ struct ipoib_txreq *tx;
704706
707+ tx_ring = &txq->tx_ring;
705708 iowait_init(&txq->wait,
706709 0,
707710 hfi1_ipoib_flush_txq,
@@ -725,14 +728,19 @@ int hfi1_ipoib_txreq_init(struct hfi1_ipoib_dev_priv *priv) · 17 unmodified lines
725728 priv->dd->node);
726729
727730 txq->tx_ring.items =
728− kcalloc_node(tx_ring_size, tx_item_size,
729− GFP_KERNEL, priv->dd->node);
731+ kvzalloc_node(array_size(tx_ring_size, tx_item_size),
732+ GFP_KERNEL, priv->dd->node);
730733 if (!txq->tx_ring.items)
731734 goto free_txqs;
732735
733736 txq->tx_ring.max_items = tx_ring_size;
734− txq->tx_ring.shift = ilog2(tx_ring_size);
737+ txq->tx_ring.shift = ilog2(tx_item_size);
735738 txq->tx_ring.avail = hfi1_ipoib_ring_hwat(txq);
739+ tx_ring = &txq->tx_ring;
740+ for (j = 0; j < tx_ring_size; j++)
741+ hfi1_txreq_from_idx(tx_ring, j)->sdma_hdr =
742+ kzalloc_node(sizeof(*tx->sdma_hdr),
743+ GFP_KERNEL, priv->dd->node);
736744
737745 netif_tx_napi_add(dev, &txq->napi,
738746 hfi1_ipoib_poll_tx_ring,
@@ -746,7 +754,10 @@ free_txqs: · 7 unmodified lines
746754 struct hfi1_ipoib_txq *txq = &priv->txqs[i];
747755
748756 netif_napi_del(&txq->napi);
749− kfree(txq->tx_ring.items);
757+ tx_ring = &txq->tx_ring;
758+ for (j = 0; j < tx_ring_size; j++)
759+ kfree(hfi1_txreq_from_idx(tx_ring, j)->sdma_hdr);
760+ kvfree(tx_ring->items);
750761 }
751762
752763 kfree(priv->txqs);
@@ -780,17 +791,20 @@ static void hfi1_ipoib_drain_tx_list(struct hfi1_ipoib_txq *txq) · 27 unmodified lines
780791
781792 void hfi1_ipoib_txreq_deinit(struct hfi1_ipoib_dev_priv *priv)
782793 {
783− int i;
794+ int i, j;
784795
785796 for (i = 0; i < priv->netdev->num_tx_queues; i++) {
786797 struct hfi1_ipoib_txq *txq = &priv->txqs[i];
798+ struct hfi1_ipoib_circ_buf *tx_ring = &txq->tx_ring;
787799
788800 iowait_cancel_work(&txq->wait);
789801 iowait_sdma_drain(&txq->wait);
790802 hfi1_ipoib_drain_tx_list(txq);
791803 netif_napi_del(&txq->napi);
792804 hfi1_ipoib_drain_tx_ring(txq);
793− kfree(txq->tx_ring.items);
805+ for (j = 0; j < tx_ring->max_items; j++)
806+ kfree(hfi1_txreq_from_idx(tx_ring, j)->sdma_hdr);
807+ kvfree(tx_ring->items);
794808 }
795809
796810 kfree(priv->txqs);
drivers/infiniband/hw/mlx4/main.c+1−1
@@ -3237,7 +3237,7 @@ static void mlx4_ib_event(struct mlx4_dev *dev, void *ibdev_ptr, · 3236 unmodified lines
32373237 case MLX4_DEV_EVENT_PORT_MGMT_CHANGE:
32383238 ew = kmalloc(sizeof *ew, GFP_ATOMIC);
32393239 if (!ew)
3240− break;
3240+ return;
32413241
32423242 INIT_WORK(&ew->work, handle_port_mgmt_change_event);
32433243 memcpy(&ew->ib_eqe, eqe, sizeof *eqe);
drivers/infiniband/sw/rdmavt/qp.c+2−0
@@ -3073,6 +3073,8 @@ do_write: · 3072 unmodified lines
30733073 case IB_WR_ATOMIC_FETCH_AND_ADD:
30743074 if (unlikely(!(qp->qp_access_flags & IB_ACCESS_REMOTE_ATOMIC)))
30753075 goto inv_err;
3076+ if (unlikely(wqe->atomic_wr.remote_addr & (sizeof(u64) - 1)))
3077+ goto inv_err;
30763078 if (unlikely(!rvt_rkey_ok(qp, &qp->r_sge.sge, sizeof(u64),
30773079 wqe->atomic_wr.remote_addr,
30783080 wqe->atomic_wr.rkey,
drivers/infiniband/sw/siw/siw.h+1−6
@@ -644,14 +644,9 @@ static inline struct siw_sqe *orq_get_current(struct siw_qp *qp) · 643 unmodified lines
644644 return &qp->orq[qp->orq_get % qp->attrs.orq_size];
645645 }
646646
647−static inline struct siw_sqe *orq_get_tail(struct siw_qp *qp)
648−{
649− return &qp->orq[qp->orq_put % qp->attrs.orq_size];
650−}
651−
652647 static inline struct siw_sqe *orq_get_free(struct siw_qp *qp)
653648 {
654− struct siw_sqe *orq_e = orq_get_tail(qp);
649+ struct siw_sqe *orq_e = &qp->orq[qp->orq_put % qp->attrs.orq_size];
655650
656651 if (READ_ONCE(orq_e->flags) == 0)
657652 return orq_e;
drivers/infiniband/sw/siw/siw_qp_rx.c+11−9
@@ -1153,11 +1153,12 @@ static int siw_check_tx_fence(struct siw_qp *qp) · 1152 unmodified lines
11531153
11541154 spin_lock_irqsave(&qp->orq_lock, flags);
11551155
1156− rreq = orq_get_current(qp);
1157−
11581156 /* free current orq entry */
1157+ rreq = orq_get_current(qp);
11591158 WRITE_ONCE(rreq->flags, 0);
11601159
1160+ qp->orq_get++;
1161+
11611162 if (qp->tx_ctx.orq_fence) {
11621163 if (unlikely(tx_waiting->wr_status != SIW_WR_QUEUED)) {
11631164 pr_warn("siw: [QP %u]: fence resume: bad status %d\n",
@@ -1165,10 +1166,12 @@ static int siw_check_tx_fence(struct siw_qp *qp) · 1 unmodified line
11651166 rv = -EPROTO;
11661167 goto out;
11671168 }
1168− /* resume SQ processing */
1169+ /* resume SQ processing, if possible */
11691170 if (tx_waiting->sqe.opcode == SIW_OP_READ ||
11701171 tx_waiting->sqe.opcode == SIW_OP_READ_LOCAL_INV) {
1171− rreq = orq_get_tail(qp);
1172+
1173+ /* SQ processing was stopped because of a full ORQ */
1174+ rreq = orq_get_free(qp);
11721175 if (unlikely(!rreq)) {
11731176 pr_warn("siw: [QP %u]: no ORQE\n", qp_id(qp));
11741177 rv = -EPROTO;
@@ -1181,15 +1184,14 @@ static int siw_check_tx_fence(struct siw_qp *qp) · 6 unmodified lines
11811184 resume_tx = 1;
11821185
11831186 } else if (siw_orq_empty(qp)) {
1187+ /*
1188+ * SQ processing was stopped by fenced work request.
1189+ * Resume since all previous Read's are now completed.
1190+ */
11841191 qp->tx_ctx.orq_fence = 0;
11851192 resume_tx = 1;
1186− } else {
1187− pr_warn("siw: [QP %u]: fence resume: orq idx: %d:%d\n",
1188− qp_id(qp), qp->orq_get, qp->orq_put);
1189− rv = -EPROTO;
11901193 }
11911194 }
1192− qp->orq_get++;
11931195 out:
11941196 spin_unlock_irqrestore(&qp->orq_lock, flags);
11951197
drivers/infiniband/sw/siw/siw_verbs.c+2−1
@@ -313,7 +313,8 @@ int siw_create_qp(struct ib_qp *ibqp, struct ib_qp_init_attr *attrs, · 312 unmodified lines
313313
314314 if (atomic_inc_return(&sdev->num_qp) > SIW_MAX_QP) {
315315 siw_dbg(base_dev, "too many QP's\n");
316− return -ENOMEM;
316+ rv = -ENOMEM;
317+ goto err_atomic;
317318 }
318319 if (attrs->qp_type != IB_QPT_RC) {
319320 siw_dbg(base_dev, "only RC QP's supported\n");
drivers/input/touchscreen/wm97xx-core.c+3−9
@@ -615,10 +615,9 @@ static int wm97xx_register_touch(struct wm97xx *wm) · 614 unmodified lines
615615 * extensions)
616616 */
617617 wm->touch_dev = platform_device_alloc("wm97xx-touch", -1);
618− if (!wm->touch_dev) {
619− ret = -ENOMEM;
620− goto touch_err;
621− }
618+ if (!wm->touch_dev)
619+ return -ENOMEM;
620+
622621 platform_set_drvdata(wm->touch_dev, wm);
623622 wm->touch_dev->dev.parent = wm->dev;
624623 wm->touch_dev->dev.platform_data = pdata;
@@ -629,9 +628,6 @@ static int wm97xx_register_touch(struct wm97xx *wm) · 4 unmodified lines
629628 return 0;
630629 touch_reg_err:
631630 platform_device_put(wm->touch_dev);
632−touch_err:
633− input_unregister_device(wm->input_dev);
634− wm->input_dev = NULL;
635631
636632 return ret;
637633 }
@@ -639,8 +635,6 @@ touch_err: · 1 unmodified line
639635 static void wm97xx_unregister_touch(struct wm97xx *wm)
640636 {
641637 platform_device_unregister(wm->touch_dev);
642− input_unregister_device(wm->input_dev);
643− wm->input_dev = NULL;
644638 }
645639
646640 static int _wm97xx_probe(struct wm97xx *wm)
drivers/iommu/amd/init.c+2−0
@@ -21,6 +21,7 @@ · 20 unmodified lines
2121 #include <linux/export.h>
2222 #include <linux/kmemleak.h>
2323 #include <linux/cc_platform.h>
24+#include <linux/iopoll.h>
2425 #include <asm/pci-direct.h>
2526 #include <asm/iommu.h>
2627 #include <asm/apic.h>
@@ -834,6 +835,7 @@ static int iommu_ga_log_enable(struct amd_iommu *iommu) · 807 unmodified lines
834835 status = readl(iommu->mmio_base + MMIO_STATUS_OFFSET);
835836 if (status & (MMIO_STATUS_GALOG_RUN_MASK))
836837 break;
838+ udelay(10);
837839 }
838840
839841 if (WARN_ON(i >= LOOP_TIMEOUT))
drivers/iommu/intel/irq_remapping.c+10−3
@@ -569,9 +569,8 @@ static int intel_setup_irq_remapping(struct intel_iommu *iommu) · 568 unmodified lines
569569 fn, &intel_ir_domain_ops,
570570 iommu);
571571 if (!iommu->ir_domain) {
572− irq_domain_free_fwnode(fn);
573572 pr_err("IR%d: failed to allocate irqdomain\n", iommu->seq_id);
574− goto out_free_bitmap;
573+ goto out_free_fwnode;
575574 }
576575 iommu->ir_msi_domain =
577576 arch_create_remap_msi_irq_domain(iommu->ir_domain,
@@ -595,7 +594,7 @@ static int intel_setup_irq_remapping(struct intel_iommu *iommu) · 17 unmodified lines
595594
596595 if (dmar_enable_qi(iommu)) {
597596 pr_err("Failed to enable queued invalidation\n");
598− goto out_free_bitmap;
597+ goto out_free_ir_domain;
599598 }
600599 }
601600
@@ -619,6 +618,14 @@ static int intel_setup_irq_remapping(struct intel_iommu *iommu) · 17 unmodified lines
619618
620619 return 0;
621620
621+out_free_ir_domain:
622+ if (iommu->ir_msi_domain)
623+ irq_domain_remove(iommu->ir_msi_domain);
624+ iommu->ir_msi_domain = NULL;
625+ irq_domain_remove(iommu->ir_domain);
626+ iommu->ir_domain = NULL;
627+out_free_fwnode:
628+ irq_domain_free_fwnode(fn);
622629 out_free_bitmap:
623630 bitmap_free(bitmap);
624631 out_free_pages:
drivers/iommu/ioasid.c+1−0
@@ -349,6 +349,7 @@ EXPORT_SYMBOL_GPL(ioasid_alloc); · 348 unmodified lines
349349
350350 /**
351351 * ioasid_get - obtain a reference to the IOASID
352+ * @ioasid: the ID to get
352353 */
353354 void ioasid_get(ioasid_t ioasid)
354355 {
drivers/iommu/iommu.c+19−14
@@ -207,9 +207,14 @@ static struct dev_iommu *dev_iommu_get(struct device *dev) · 206 unmodified lines
207207
208208 static void dev_iommu_free(struct device *dev)
209209 {
210− iommu_fwspec_free(dev);
211− kfree(dev->iommu);
210+ struct dev_iommu *param = dev->iommu;
211+
212212 dev->iommu = NULL;
213+ if (param->fwspec) {
214+ fwnode_handle_put(param->fwspec->iommu_fwnode);
215+ kfree(param->fwspec);
216+ }
217+ kfree(param);
213218 }
214219
215220 static int __iommu_probe_device(struct device *dev, struct list_head *group_list)
@@ -980,17 +985,6 @@ static int iommu_group_device_count(struct iommu_group *group) · 764 unmodified lines
980985 return ret;
981986 }
982987
983−/**
984− * iommu_group_for_each_dev - iterate over each device in the group
985− * @group: the group
986− * @data: caller opaque data to be passed to callback function
987− * @fn: caller supplied callback function
988− *
989− * This function is called by group users to iterate over group devices.
990− * Callers should hold a reference count to the group during callback.
991− * The group->mutex is held across callbacks, which will block calls to
992− * iommu_group_add/remove_device.
993− */
994988 static int __iommu_group_for_each_dev(struct iommu_group *group, void *data,
995989 int (*fn)(struct device *, void *))
996990 {
@@ -1005,7 +999,17 @@ static int __iommu_group_for_each_dev(struct iommu_group *group, void *data, · 8 unmodified lines
1005999 return ret;
10061000 }
10071001
1008−
1002+/**
1003+ * iommu_group_for_each_dev - iterate over each device in the group
1004+ * @group: the group
1005+ * @data: caller opaque data to be passed to callback function
1006+ * @fn: caller supplied callback function
1007+ *
1008+ * This function is called by group users to iterate over group devices.
1009+ * Callers should hold a reference count to the group during callback.
1010+ * The group->mutex is held across callbacks, which will block calls to
1011+ * iommu_group_add/remove_device.
1012+ */
10091013 int iommu_group_for_each_dev(struct iommu_group *group, void *data,
10101014 int (*fn)(struct device *, void *))
10111015 {
@@ -3032,6 +3036,7 @@ EXPORT_SYMBOL_GPL(iommu_aux_get_pasid); · 2020 unmodified lines
30323036 * iommu_sva_bind_device() - Bind a process address space to a device
30333037 * @dev: the device
30343038 * @mm: the mm to bind, caller must hold a reference to it
3039+ * @drvdata: opaque data pointer to pass to bind callback
30353040 *
30363041 * Create a bond between device and address space, allowing the device to access
30373042 * the mm using the returned PASID. If a bond already exists between @device and
drivers/iommu/omap-iommu.c+1−1
@@ -1085,7 +1085,7 @@ static __maybe_unused int omap_iommu_runtime_resume(struct device *dev) · 1084 unmodified lines
10851085 }
10861086
10871087 /**
1088− * omap_iommu_suspend_prepare - prepare() dev_pm_ops implementation
1088+ * omap_iommu_prepare - prepare() dev_pm_ops implementation
10891089 * @dev: iommu device
10901090 *
10911091 * This function performs the necessary checks to determine if the IOMMU
drivers/md/md.c+4−4
@@ -5869,10 +5869,6 @@ int md_run(struct mddev *mddev) · 5868 unmodified lines
58695869 nowait = nowait && blk_queue_nowait(bdev_get_queue(rdev->bdev));
58705870 }
58715871
5872− /* Set the NOWAIT flags if all underlying devices support it */
5873− if (nowait)
5874− blk_queue_flag_set(QUEUE_FLAG_NOWAIT, mddev->queue);
5875−
58765872 if (!bioset_initialized(&mddev->bio_set)) {
58775873 err = bioset_init(&mddev->bio_set, BIO_POOL_SIZE, 0, BIOSET_NEED_BVECS);
58785874 if (err)
@@ -6010,6 +6006,10 @@ int md_run(struct mddev *mddev) · 131 unmodified lines
60106006 else
60116007 blk_queue_flag_clear(QUEUE_FLAG_NONROT, mddev->queue);
60126008 blk_queue_flag_set(QUEUE_FLAG_IO_STAT, mddev->queue);
6009+
6010+ /* Set the NOWAIT flags if all underlying devices support it */
6011+ if (nowait)
6012+ blk_queue_flag_set(QUEUE_FLAG_NOWAIT, mddev->queue);
60136013 }
60146014 if (pers->sync_request) {
60156015 if (mddev->kobj.sd &&
drivers/mmc/core/sd.c+7−1
@@ -67,7 +67,7 @@ static const unsigned int sd_au_size[] = { · 66 unmodified lines
6767 __res & __mask; \
6868 })
6969
70−#define SD_POWEROFF_NOTIFY_TIMEOUT_MS 2000
70+#define SD_POWEROFF_NOTIFY_TIMEOUT_MS 1000
7171 #define SD_WRITE_EXTR_SINGLE_TIMEOUT_MS 1000
7272
7373 struct sd_busy_data {
@@ -1664,6 +1664,12 @@ static int sd_poweroff_notify(struct mmc_card *card) · 1590 unmodified lines
16641664 goto out;
16651665 }
16661666
1667+ /* Find out when the command is completed. */
1668+ err = mmc_poll_for_busy(card, SD_WRITE_EXTR_SINGLE_TIMEOUT_MS, false,
1669+ MMC_BUSY_EXTR_SINGLE);
1670+ if (err)
1671+ goto out;
1672+
16671673 cb_data.card = card;
16681674 cb_data.reg_buf = reg_buf;
16691675 err = __mmc_poll_for_busy(card->host, SD_POWEROFF_NOTIFY_TIMEOUT_MS,
drivers/mmc/host/moxart-mmc.c+1−1
@@ -705,12 +705,12 @@ static int moxart_remove(struct platform_device *pdev) · 704 unmodified lines
705705 if (!IS_ERR_OR_NULL(host->dma_chan_rx))
706706 dma_release_channel(host->dma_chan_rx);
707707 mmc_remove_host(mmc);
708− mmc_free_host(mmc);
709708
710709 writel(0, host->base + REG_INTERRUPT_MASK);
711710 writel(0, host->base + REG_POWER_CONTROL);
712711 writel(readl(host->base + REG_CLOCK_CONTROL) | CLK_OFF,
713712 host->base + REG_CLOCK_CONTROL);
713+ mmc_free_host(mmc);
714714
715715 return 0;
716716 }
drivers/mmc/host/sdhci-of-esdhc.c+6−2
@@ -524,12 +524,16 @@ static void esdhc_of_adma_workaround(struct sdhci_host *host, u32 intmask) · 523 unmodified lines
524524
525525 static int esdhc_of_enable_dma(struct sdhci_host *host)
526526 {
527+ int ret;
527528 u32 value;
528529 struct device *dev = mmc_dev(host->mmc);
529530
530531 if (of_device_is_compatible(dev->of_node, "fsl,ls1043a-esdhc") ||
531− of_device_is_compatible(dev->of_node, "fsl,ls1046a-esdhc"))
532− dma_set_mask_and_coherent(dev, DMA_BIT_MASK(40));
532+ of_device_is_compatible(dev->of_node, "fsl,ls1046a-esdhc")) {
533+ ret = dma_set_mask_and_coherent(dev, DMA_BIT_MASK(40));
534+ if (ret)
535+ return ret;
536+ }
533537
534538 value = sdhci_readl(host, ESDHC_DMA_SYSCTL);
535539
drivers/mmc/host/sh_mmcif.c+3−0
@@ -405,6 +405,9 @@ static int sh_mmcif_dma_slave_config(struct sh_mmcif_host *host, · 404 unmodified lines
405405 struct dma_slave_config cfg = { 0, };
406406
407407 res = platform_get_resource(host->pd, IORESOURCE_MEM, 0);
408+ if (!res)
409+ return -EINVAL;
410+
408411 cfg.direction = direction;
409412
410413 if (direction == DMA_DEV_TO_MEM) {
drivers/net/bonding/bond_3ad.c+2−1
@@ -1021,8 +1021,8 @@ static void ad_mux_machine(struct port *port, bool *update_slave_arr) · 1020 unmodified lines
10211021 if (port->aggregator &&
10221022 port->aggregator->is_active &&
10231023 !__port_is_enabled(port)) {
1024−
10251024 __enable_port(port);
1025+ *update_slave_arr = true;
10261026 }
10271027 }
10281028 break;
@@ -1779,6 +1779,7 @@ static void ad_agg_selection_logic(struct aggregator *agg, · 750 unmodified lines
17791779 port = port->next_port_in_aggregator) {
17801780 __enable_port(port);
17811781 }
1782+ *update_slave_arr = true;
17821783 }
17831784 }
17841785
drivers/net/dsa/bcm_sf2.c+5−2
@@ -621,7 +621,7 @@ static int bcm_sf2_mdio_register(struct dsa_switch *ds) · 620 unmodified lines
621621 get_device(&priv->master_mii_bus->dev);
622622 priv->master_mii_dn = dn;
623623
624− priv->slave_mii_bus = devm_mdiobus_alloc(ds->dev);
624+ priv->slave_mii_bus = mdiobus_alloc();
625625 if (!priv->slave_mii_bus) {
626626 of_node_put(dn);
627627 return -ENOMEM;
@@ -681,8 +681,10 @@ static int bcm_sf2_mdio_register(struct dsa_switch *ds) · 53 unmodified lines
681681 }
682682
683683 err = mdiobus_register(priv->slave_mii_bus);
684− if (err && dn)
684+ if (err && dn) {
685+ mdiobus_free(priv->slave_mii_bus);
685686 of_node_put(dn);
687+ }
686688
687689 return err;
688690 }
@@ -690,6 +692,7 @@ static int bcm_sf2_mdio_register(struct dsa_switch *ds) · 1 unmodified line
690692 static void bcm_sf2_mdio_unregister(struct bcm_sf2_priv *priv)
691693 {
692694 mdiobus_unregister(priv->slave_mii_bus);
695+ mdiobus_free(priv->slave_mii_bus);
693696 of_node_put(priv->master_mii_dn);
694697 }
695698
drivers/net/dsa/lantiq_gswip.c+11−3
@@ -498,8 +498,9 @@ static int gswip_mdio_rd(struct mii_bus *bus, int addr, int reg) · 497 unmodified lines
498498 static int gswip_mdio(struct gswip_priv *priv, struct device_node *mdio_np)
499499 {
500500 struct dsa_switch *ds = priv->ds;
501+ int err;
501502
502− ds->slave_mii_bus = devm_mdiobus_alloc(priv->dev);
503+ ds->slave_mii_bus = mdiobus_alloc();
503504 if (!ds->slave_mii_bus)
504505 return -ENOMEM;
505506
@@ -512,7 +513,11 @@ static int gswip_mdio(struct gswip_priv *priv, struct device_node *mdio_np) · 6 unmodified lines
512513 ds->slave_mii_bus->parent = priv->dev;
513514 ds->slave_mii_bus->phy_mask = ~ds->phys_mii_mask;
514515
515− return of_mdiobus_register(ds->slave_mii_bus, mdio_np);
516+ err = of_mdiobus_register(ds->slave_mii_bus, mdio_np);
517+ if (err)
518+ mdiobus_free(ds->slave_mii_bus);
519+
520+ return err;
516521 }
517522
518523 static int gswip_pce_table_entry_read(struct gswip_priv *priv,
@@ -2145,8 +2150,10 @@ disable_switch: · 1626 unmodified lines
21452150 gswip_mdio_mask(priv, GSWIP_MDIO_GLOB_ENABLE, 0, GSWIP_MDIO_GLOB);
21462151 dsa_unregister_switch(priv->ds);
21472152 mdio_bus:
2148− if (mdio_np)
2153+ if (mdio_np) {
21492154 mdiobus_unregister(priv->ds->slave_mii_bus);
2155+ mdiobus_free(priv->ds->slave_mii_bus);
2156+ }
21502157 put_mdio_node:
21512158 of_node_put(mdio_np);
21522159 for (i = 0; i < priv->num_gphy_fw; i++)
@@ -2169,6 +2176,7 @@ static int gswip_remove(struct platform_device *pdev) · 16 unmodified lines
21692176
21702177 if (priv->ds->slave_mii_bus) {
21712178 mdiobus_unregister(priv->ds->slave_mii_bus);
2179+ mdiobus_free(priv->ds->slave_mii_bus);
21722180 of_node_put(priv->ds->slave_mii_bus->dev.of_node);
21732181 }
21742182
drivers/net/dsa/mt7530.c+1−1
@@ -2074,7 +2074,7 @@ mt7530_setup_mdio(struct mt7530_priv *priv) · 2073 unmodified lines
20742074 if (priv->irq)
20752075 mt7530_setup_mdio_irq(priv);
20762076
2077− ret = mdiobus_register(bus);
2077+ ret = devm_mdiobus_register(dev, bus);
20782078 if (ret) {
20792079 dev_err(dev, "failed to register MDIO bus: %d\n", ret);
20802080 if (priv->irq)
drivers/net/dsa/mv88e6xxx/chip.c+10−5
@@ -3566,7 +3566,7 @@ static int mv88e6xxx_mdio_register(struct mv88e6xxx_chip *chip, · 3565 unmodified lines
35663566 return err;
35673567 }
35683568
3569− bus = devm_mdiobus_alloc_size(chip->dev, sizeof(*mdio_bus));
3569+ bus = mdiobus_alloc_size(sizeof(*mdio_bus));
35703570 if (!bus)
35713571 return -ENOMEM;
35723572
@@ -3591,14 +3591,14 @@ static int mv88e6xxx_mdio_register(struct mv88e6xxx_chip *chip, · 18 unmodified lines
35913591 if (!external) {
35923592 err = mv88e6xxx_g2_irq_mdio_setup(chip, bus);
35933593 if (err)
3594− return err;
3594+ goto out;
35953595 }
35963596
35973597 err = of_mdiobus_register(bus, np);
35983598 if (err) {
35993599 dev_err(chip->dev, "Cannot register MDIO bus (%d)\n", err);
36003600 mv88e6xxx_g2_irq_mdio_free(chip, bus);
3601− return err;
3601+ goto out;
36023602 }
36033603
36043604 if (external)
@@ -3607,21 +3607,26 @@ static int mv88e6xxx_mdio_register(struct mv88e6xxx_chip *chip, · 2 unmodified lines
36073607 list_add(&mdio_bus->list, &chip->mdios);
36083608
36093609 return 0;
3610+
3611+out:
3612+ mdiobus_free(bus);
3613+ return err;
36103614 }
36113615
36123616 static void mv88e6xxx_mdios_unregister(struct mv88e6xxx_chip *chip)
36133617
36143618 {
3615− struct mv88e6xxx_mdio_bus *mdio_bus;
3619+ struct mv88e6xxx_mdio_bus *mdio_bus, *p;
36163620 struct mii_bus *bus;
36173621
3618− list_for_each_entry(mdio_bus, &chip->mdios, list) {
3622+ list_for_each_entry_safe(mdio_bus, p, &chip->mdios, list) {
36193623 bus = mdio_bus->bus;
36203624
36213625 if (!mdio_bus->external)
36223626 mv88e6xxx_g2_irq_mdio_free(chip, bus);
36233627
36243628 mdiobus_unregister(bus);
3629+ mdiobus_free(bus);
36253630 }
36263631 }
36273632
drivers/net/dsa/ocelot/felix_vsc9959.c+3−1
@@ -1061,7 +1061,7 @@ static int vsc9959_mdio_bus_alloc(struct ocelot *ocelot) · 1060 unmodified lines
10611061 return PTR_ERR(hw);
10621062 }
10631063
1064− bus = devm_mdiobus_alloc_size(dev, sizeof(*mdio_priv));
1064+ bus = mdiobus_alloc_size(sizeof(*mdio_priv));
10651065 if (!bus)
10661066 return -ENOMEM;
10671067
@@ -1081,6 +1081,7 @@ static int vsc9959_mdio_bus_alloc(struct ocelot *ocelot) · 13 unmodified lines
10811081 rc = mdiobus_register(bus);
10821082 if (rc < 0) {
10831083 dev_err(dev, "failed to register MDIO bus\n");
1084+ mdiobus_free(bus);
10841085 return rc;
10851086 }
10861087
@@ -1132,6 +1133,7 @@ static void vsc9959_mdio_bus_free(struct ocelot *ocelot) · 45 unmodified lines
11321133 lynx_pcs_destroy(phylink_pcs);
11331134 }
11341135 mdiobus_unregister(felix->imdio);
1136+ mdiobus_free(felix->imdio);
11351137 }
11361138
11371139 static void vsc9959_sched_speed_set(struct ocelot *ocelot, int port,
drivers/net/dsa/ocelot/seville_vsc9953.c+3−2
@@ -1029,7 +1029,7 @@ static int vsc9953_mdio_bus_alloc(struct ocelot *ocelot) · 1028 unmodified lines
10291029 }
10301030
10311031 /* Needed in order to initialize the bus mutex lock */
1032− rc = of_mdiobus_register(bus, NULL);
1032+ rc = devm_of_mdiobus_register(dev, bus, NULL);
10331033 if (rc < 0) {
10341034 dev_err(dev, "failed to register MDIO bus\n");
10351035 return rc;
@@ -1083,7 +1083,8 @@ static void vsc9953_mdio_bus_free(struct ocelot *ocelot) · 47 unmodified lines
10831083 mdio_device_free(mdio_device);
10841084 lynx_pcs_destroy(phylink_pcs);
10851085 }
1086− mdiobus_unregister(felix->imdio);
1086+
1087+ /* mdiobus_unregister and mdiobus_free handled by devres */
10871088 }
10881089
10891090 static const struct felix_info seville_info_vsc9953 = {
drivers/net/dsa/qca/ar9331.c+1−2
@@ -378,7 +378,7 @@ static int ar9331_sw_mbus_init(struct ar9331_sw_priv *priv) · 377 unmodified lines
378378 if (!mnp)
379379 return -ENODEV;
380380
381− ret = of_mdiobus_register(mbus, mnp);
381+ ret = devm_of_mdiobus_register(dev, mbus, mnp);
382382 of_node_put(mnp);
383383 if (ret)
384384 return ret;
@@ -1066,7 +1066,6 @@ static void ar9331_sw_remove(struct mdio_device *mdiodev) · 681 unmodified lines
10661066 }
10671067
10681068 irq_domain_remove(priv->irqdomain);
1069− mdiobus_unregister(priv->mbus);
10701069 dsa_unregister_switch(&priv->ds);
10711070
10721071 reset_control_assert(priv->sw_reset);
drivers/net/ethernet/amd/xgbe/xgbe-pci.c+3−0
@@ -425,6 +425,9 @@ static void xgbe_pci_remove(struct pci_dev *pdev) · 424 unmodified lines
425425
426426 pci_free_irq_vectors(pdata->pcidev);
427427
428+ /* Disable all interrupts in the hardware */
429+ XP_IOWRITE(pdata, XP_INT_EN, 0x0);
430+
428431 xgbe_free_pdata(pdata);
429432 }
430433
drivers/net/ethernet/cadence/macb_main.c+1−1
@@ -4765,7 +4765,7 @@ static int macb_probe(struct platform_device *pdev) · 4764 unmodified lines
47654765
47664766 #ifdef CONFIG_ARCH_DMA_ADDR_T_64BIT
47674767 if (GEM_BFEXT(DAW64, gem_readl(bp, DCFG6))) {
4768− dma_set_mask(&pdev->dev, DMA_BIT_MASK(44));
4768+ dma_set_mask_and_coherent(&pdev->dev, DMA_BIT_MASK(44));
47694769 bp->hw_dma_cap |= HW_DMA_CAP_64B;
47704770 }
47714771 #endif
drivers/net/ethernet/freescale/dpaa2/dpaa2-eth.c+2−2
@@ -4733,12 +4733,12 @@ static int dpaa2_eth_remove(struct fsl_mc_device *ls_dev) · 4732 unmodified lines
47334733 #ifdef CONFIG_DEBUG_FS
47344734 dpaa2_dbg_remove(priv);
47354735 #endif
4736+
4737+ unregister_netdev(net_dev);
47364738 rtnl_lock();
47374739 dpaa2_eth_disconnect_mac(priv);
47384740 rtnl_unlock();
47394741
4740− unregister_netdev(net_dev);
4741−
47424742 dpaa2_eth_dl_port_del(priv);
47434743 dpaa2_eth_dl_traps_unregister(priv);
47444744 dpaa2_eth_dl_free(priv);
drivers/net/ethernet/google/gve/gve_rx.c+1−0
@@ -609,6 +609,7 @@ static bool gve_rx(struct gve_rx_ring *rx, netdev_features_t feat, · 608 unmodified lines
609609
610610 *packet_size_bytes = skb->len + (skb->protocol ? ETH_HLEN : 0);
611611 *work_done = work_cnt;
612+ skb_record_rx_queue(skb, rx->q_num);
612613 if (skb_is_nonlinear(skb))
613614 napi_gro_frags(napi);
614615 else
drivers/net/ethernet/ibm/ibmvnic.c+9−4
@@ -110,6 +110,7 @@ static void ibmvnic_tx_scrq_clean_buffer(struct ibmvnic_adapter *adapter, · 109 unmodified lines
110110 struct ibmvnic_sub_crq_queue *tx_scrq);
111111 static void free_long_term_buff(struct ibmvnic_adapter *adapter,
112112 struct ibmvnic_long_term_buff *ltb);
113+static void ibmvnic_disable_irqs(struct ibmvnic_adapter *adapter);
113114
114115 struct ibmvnic_stat {
115116 char name[ETH_GSTRING_LEN];
@@ -1424,7 +1425,7 @@ static int __ibmvnic_open(struct net_device *netdev) · 1308 unmodified lines
14241425 rc = set_link_state(adapter, IBMVNIC_LOGICAL_LNK_UP);
14251426 if (rc) {
14261427 ibmvnic_napi_disable(adapter);
1427− release_resources(adapter);
1428+ ibmvnic_disable_irqs(adapter);
14281429 return rc;
14291430 }
14301431
@@ -1474,9 +1475,6 @@ static int ibmvnic_open(struct net_device *netdev) · 43 unmodified lines
14741475 rc = init_resources(adapter);
14751476 if (rc) {
14761477 netdev_err(netdev, "failed to initialize resources\n");
1477− release_resources(adapter);
1478− release_rx_pools(adapter);
1479− release_tx_pools(adapter);
14801478 goto out;
14811479 }
14821480 }
@@ -1493,6 +1491,13 @@ out: · 10 unmodified lines
14931491 adapter->state = VNIC_OPEN;
14941492 rc = 0;
14951493 }
1494+
1495+ if (rc) {
1496+ release_resources(adapter);
1497+ release_rx_pools(adapter);
1498+ release_tx_pools(adapter);
1499+ }
1500+
14961501 return rc;
14971502 }
14981503
drivers/net/ethernet/intel/ice/ice.h+2−1
@@ -487,6 +487,7 @@ enum ice_pf_flags { · 486 unmodified lines
487487 ICE_FLAG_MDD_AUTO_RESET_VF,
488488 ICE_FLAG_VF_VLAN_PRUNING,
489489 ICE_FLAG_LINK_LENIENT_MODE_ENA,
490+ ICE_FLAG_PLUG_AUX_DEV,
490491 ICE_PF_FLAGS_NBITS /* must be last */
491492 };
492493
@@ -891,7 +892,7 @@ static inline void ice_set_rdma_cap(struct ice_pf *pf) · 398 unmodified lines
891892 if (pf->hw.func_caps.common_cap.rdma && pf->num_rdma_msix) {
892893 set_bit(ICE_FLAG_RDMA_ENA, pf->flags);
893894 set_bit(ICE_FLAG_AUX_ENA, pf->flags);
894− ice_plug_aux_dev(pf);
895+ set_bit(ICE_FLAG_PLUG_AUX_DEV, pf->flags);
895896 }
896897 }
897898
drivers/net/ethernet/intel/ice/ice_common.c+2−1
@@ -3381,7 +3381,8 @@ ice_cfg_phy_fec(struct ice_port_info *pi, struct ice_aqc_set_phy_cfg_data *cfg, · 3380 unmodified lines
33813381 !ice_fw_supports_report_dflt_cfg(hw)) {
33823382 struct ice_link_default_override_tlv tlv;
33833383
3384− if (ice_get_link_default_override(&tlv, pi))
3384+ status = ice_get_link_default_override(&tlv, pi);
3385+ if (status)
33853386 goto out;
33863387
33873388 if (!(tlv.options & ICE_LINK_OVERRIDE_STRICT_MODE) &&
drivers/net/ethernet/intel/ice/ice_lag.c+28−6
@@ -204,17 +204,39 @@ ice_lag_unlink(struct ice_lag *lag, · 203 unmodified lines
204204 lag->upper_netdev = NULL;
205205 }
206206
207− if (lag->peer_netdev) {
208− dev_put(lag->peer_netdev);
209− lag->peer_netdev = NULL;
210− }
211−
207+ lag->peer_netdev = NULL;
212208 ice_set_sriov_cap(pf);
213209 ice_set_rdma_cap(pf);
214210 lag->bonded = false;
215211 lag->role = ICE_LAG_NONE;
216212 }
217213
214+/**
215+ * ice_lag_unregister - handle netdev unregister events
216+ * @lag: LAG info struct
217+ * @netdev: netdev reporting the event
218+ */
219+static void ice_lag_unregister(struct ice_lag *lag, struct net_device *netdev)
220+{
221+ struct ice_pf *pf = lag->pf;
222+
223+ /* check to see if this event is for this netdev
224+ * check that we are in an aggregate
225+ */
226+ if (netdev != lag->netdev || !lag->bonded)
227+ return;
228+
229+ if (lag->upper_netdev) {
230+ dev_put(lag->upper_netdev);
231+ lag->upper_netdev = NULL;
232+ ice_set_sriov_cap(pf);
233+ ice_set_rdma_cap(pf);
234+ }
235+ /* perform some cleanup in case we come back */
236+ lag->bonded = false;
237+ lag->role = ICE_LAG_NONE;
238+}
239+
218240 /**
219241 * ice_lag_changeupper_event - handle LAG changeupper event
220242 * @lag: LAG info struct
@@ -307,7 +329,7 @@ ice_lag_event_handler(struct notifier_block *notif_blk, unsigned long event, · 86 unmodified lines
307329 ice_lag_info_event(lag, ptr);
308330 break;
309331 case NETDEV_UNREGISTER:
310− ice_lag_unlink(lag, ptr);
332+ ice_lag_unregister(lag, netdev);
311333 break;
312334 default:
313335 break;
drivers/net/ethernet/intel/ice/ice_lan_tx_rx.h+1−0
@@ -570,6 +570,7 @@ struct ice_tx_ctx_desc { · 569 unmodified lines
570570 (0x3FFFFULL << ICE_TXD_CTX_QW1_TSO_LEN_S)
571571
572572 #define ICE_TXD_CTX_QW1_MSS_S 50
573+#define ICE_TXD_CTX_MIN_MSS 64
573574
574575 #define ICE_TXD_CTX_QW1_VSI_S 50
575576 #define ICE_TXD_CTX_QW1_VSI_M (0x3FFULL << ICE_TXD_CTX_QW1_VSI_S)
drivers/net/ethernet/intel/ice/ice_main.c+20−8
@@ -2256,6 +2256,9 @@ static void ice_service_task(struct work_struct *work) · 2255 unmodified lines
22562256 return;
22572257 }
22582258
2259+ if (test_and_clear_bit(ICE_FLAG_PLUG_AUX_DEV, pf->flags))
2260+ ice_plug_aux_dev(pf);
2261+
22592262 ice_clean_adminq_subtask(pf);
22602263 ice_check_media_subtask(pf);
22612264 ice_check_for_hang_subtask(pf);
@@ -8724,6 +8727,7 @@ ice_features_check(struct sk_buff *skb, · 6462 unmodified lines
87248727 struct net_device __always_unused *netdev,
87258728 netdev_features_t features)
87268729 {
8730+ bool gso = skb_is_gso(skb);
87278731 size_t len;
87288732
87298733 /* No point in doing any of this if neither checksum nor GSO are
@@ -8736,24 +8740,32 @@ ice_features_check(struct sk_buff *skb, · 6 unmodified lines
87368740 /* We cannot support GSO if the MSS is going to be less than
87378741 * 64 bytes. If it is then we need to drop support for GSO.
87388742 */
8739− if (skb_is_gso(skb) && (skb_shinfo(skb)->gso_size < 64))
8743+ if (gso && (skb_shinfo(skb)->gso_size < ICE_TXD_CTX_MIN_MSS))
87408744 features &= ~NETIF_F_GSO_MASK;
87418745
8742− len = skb_network_header(skb) - skb->data;
8746+ len = skb_network_offset(skb);
87438747 if (len > ICE_TXD_MACLEN_MAX || len & 0x1)
87448748 goto out_rm_features;
87458749
8746− len = skb_transport_header(skb) - skb_network_header(skb);
8750+ len = skb_network_header_len(skb);
87478751 if (len > ICE_TXD_IPLEN_MAX || len & 0x1)
87488752 goto out_rm_features;
87498753
87508754 if (skb->encapsulation) {
8751− len = skb_inner_network_header(skb) - skb_transport_header(skb);
8752− if (len > ICE_TXD_L4LEN_MAX || len & 0x1)
8753− goto out_rm_features;
8755+ /* this must work for VXLAN frames AND IPIP/SIT frames, and in
8756+ * the case of IPIP frames, the transport header pointer is
8757+ * after the inner header! So check to make sure that this
8758+ * is a GRE or UDP_TUNNEL frame before doing that math.
8759+ */
8760+ if (gso && (skb_shinfo(skb)->gso_type &
8761+ (SKB_GSO_GRE | SKB_GSO_UDP_TUNNEL))) {
8762+ len = skb_inner_network_header(skb) -
8763+ skb_transport_header(skb);
8764+ if (len > ICE_TXD_L4LEN_MAX || len & 0x1)
8765+ goto out_rm_features;
8766+ }
87548767
8755− len = skb_inner_transport_header(skb) -
8756− skb_inner_network_header(skb);
8768+ len = skb_inner_network_header_len(skb);
87578769 if (len > ICE_TXD_IPLEN_MAX || len & 0x1)
87588770 goto out_rm_features;
87598771 }
drivers/net/ethernet/intel/ixgbevf/ixgbevf_main.c+7−6
@@ -1984,14 +1984,15 @@ static void ixgbevf_set_rx_buffer_len(struct ixgbevf_adapter *adapter, · 1983 unmodified lines
19841984 if (adapter->flags & IXGBEVF_FLAGS_LEGACY_RX)
19851985 return;
19861986
1987− set_ring_build_skb_enabled(rx_ring);
1987+ if (PAGE_SIZE < 8192)
1988+ if (max_frame > IXGBEVF_MAX_FRAME_BUILD_SKB)
1989+ set_ring_uses_large_buffer(rx_ring);
19881990
1989− if (PAGE_SIZE < 8192) {
1990− if (max_frame <= IXGBEVF_MAX_FRAME_BUILD_SKB)
1991− return;
1991+ /* 82599 can't rely on RXDCTL.RLPML to restrict the size of the frame */
1992+ if (adapter->hw.mac.type == ixgbe_mac_82599_vf && !ring_uses_large_buffer(rx_ring))
1993+ return;
19921994
1993− set_ring_uses_large_buffer(rx_ring);
1994− }
1995+ set_ring_build_skb_enabled(rx_ring);
19951996 }
19961997
19971998 /**
drivers/net/ethernet/litex/Kconfig+1−1
@@ -17,7 +17,7 @@ if NET_VENDOR_LITEX · 16 unmodified lines
1717
1818 config LITEX_LITEETH
1919 tristate "LiteX Ethernet support"
20− depends on OF
20+ depends on OF && HAS_IOMEM
2121 help
2222 If you wish to compile a kernel for hardware with a LiteX LiteEth
2323 device then you should answer Y to this.
drivers/net/ethernet/microchip/sparx5/sparx5_ethtool.c+1−1
@@ -1103,7 +1103,7 @@ void sparx5_get_stats64(struct net_device *ndev, · 1102 unmodified lines
11031103 stats->tx_carrier_errors = portstats[spx5_stats_tx_csense_cnt];
11041104 stats->tx_window_errors = portstats[spx5_stats_tx_late_coll_cnt];
11051105 stats->rx_dropped = portstats[spx5_stats_ana_ac_port_stat_lsb_cnt];
1106− for (idx = 0; idx < 2 * SPX5_PRIOS; ++idx, ++stats)
1106+ for (idx = 0; idx < 2 * SPX5_PRIOS; ++idx)
11071107 stats->rx_dropped += portstats[spx5_stats_green_p0_rx_port_drop
11081108 + idx];
11091109 stats->tx_dropped = portstats[spx5_stats_tx_local_drop];
drivers/net/ethernet/mscc/ocelot.c+15−4
@@ -1432,6 +1432,8 @@ static void · 1431 unmodified lines
14321432 ocelot_populate_ipv4_ptp_event_trap_key(struct ocelot_vcap_filter *trap)
14331433 {
14341434 trap->key_type = OCELOT_VCAP_KEY_IPV4;
1435+ trap->key.ipv4.proto.value[0] = IPPROTO_UDP;
1436+ trap->key.ipv4.proto.mask[0] = 0xff;
14351437 trap->key.ipv4.dport.value = PTP_EV_PORT;
14361438 trap->key.ipv4.dport.mask = 0xffff;
14371439 }
@@ -1440,6 +1442,8 @@ static void · 2 unmodified lines
14401442 ocelot_populate_ipv6_ptp_event_trap_key(struct ocelot_vcap_filter *trap)
14411443 {
14421444 trap->key_type = OCELOT_VCAP_KEY_IPV6;
1445+ trap->key.ipv4.proto.value[0] = IPPROTO_UDP;
1446+ trap->key.ipv4.proto.mask[0] = 0xff;
14431447 trap->key.ipv6.dport.value = PTP_EV_PORT;
14441448 trap->key.ipv6.dport.mask = 0xffff;
14451449 }
@@ -1448,6 +1452,8 @@ static void · 2 unmodified lines
14481452 ocelot_populate_ipv4_ptp_general_trap_key(struct ocelot_vcap_filter *trap)
14491453 {
14501454 trap->key_type = OCELOT_VCAP_KEY_IPV4;
1455+ trap->key.ipv4.proto.value[0] = IPPROTO_UDP;
1456+ trap->key.ipv4.proto.mask[0] = 0xff;
14511457 trap->key.ipv4.dport.value = PTP_GEN_PORT;
14521458 trap->key.ipv4.dport.mask = 0xffff;
14531459 }
@@ -1456,6 +1462,8 @@ static void · 2 unmodified lines
14561462 ocelot_populate_ipv6_ptp_general_trap_key(struct ocelot_vcap_filter *trap)
14571463 {
14581464 trap->key_type = OCELOT_VCAP_KEY_IPV6;
1465+ trap->key.ipv4.proto.value[0] = IPPROTO_UDP;
1466+ trap->key.ipv4.proto.mask[0] = 0xff;
14591467 trap->key.ipv6.dport.value = PTP_GEN_PORT;
14601468 trap->key.ipv6.dport.mask = 0xffff;
14611469 }
@@ -1737,12 +1745,11 @@ void ocelot_get_strings(struct ocelot *ocelot, int port, u32 sset, u8 *data) · 275 unmodified lines
17371745 }
17381746 EXPORT_SYMBOL(ocelot_get_strings);
17391747
1748+/* Caller must hold &ocelot->stats_lock */
17401749 static void ocelot_update_stats(struct ocelot *ocelot)
17411750 {
17421751 int i, j;
17431752
1744− mutex_lock(&ocelot->stats_lock);
1745−
17461753 for (i = 0; i < ocelot->num_phys_ports; i++) {
17471754 /* Configure the port to read the stats from */
17481755 ocelot_write(ocelot, SYS_STAT_CFG_STAT_VIEW(i), SYS_STAT_CFG);
@@ -1761,8 +1768,6 @@ static void ocelot_update_stats(struct ocelot *ocelot) · 12 unmodified lines
17611768 ~(u64)U32_MAX) + val;
17621769 }
17631770 }
1764−
1765− mutex_unlock(&ocelot->stats_lock);
17661771 }
17671772
17681773 static void ocelot_check_stats_work(struct work_struct *work)
@@ -1771,7 +1776,9 @@ static void ocelot_check_stats_work(struct work_struct *work) · 2 unmodified lines
17711776 struct ocelot *ocelot = container_of(del_work, struct ocelot,
17721777 stats_work);
17731778
1779+ mutex_lock(&ocelot->stats_lock);
17741780 ocelot_update_stats(ocelot);
1781+ mutex_unlock(&ocelot->stats_lock);
17751782
17761783 queue_delayed_work(ocelot->stats_queue, &ocelot->stats_work,
17771784 OCELOT_STATS_CHECK_DELAY);
@@ -1781,12 +1788,16 @@ void ocelot_get_ethtool_stats(struct ocelot *ocelot, int port, u64 *data) · 3 unmodified lines
17811788 {
17821789 int i;
17831790
1791+ mutex_lock(&ocelot->stats_lock);
1792+
17841793 /* check and update now */
17851794 ocelot_update_stats(ocelot);
17861795
17871796 /* Copy all counters */
17881797 for (i = 0; i < ocelot->num_stats; i++)
17891798 *data++ = ocelot->stats[port * ocelot->num_stats + i];
1799+
1800+ mutex_unlock(&ocelot->stats_lock);
17901801 }
17911802 EXPORT_SYMBOL(ocelot_get_ethtool_stats);
17921803
drivers/net/ethernet/netronome/nfp/flower/tunnel_conf.c+8−4
@@ -1011,6 +1011,7 @@ nfp_tunnel_del_shared_mac(struct nfp_app *app, struct net_device *netdev, · 1010 unmodified lines
10111011 struct nfp_flower_repr_priv *repr_priv;
10121012 struct nfp_tun_offloaded_mac *entry;
10131013 struct nfp_repr *repr;
1014+ u16 nfp_mac_idx;
10141015 int ida_idx;
10151016
10161017 entry = nfp_tunnel_lookup_offloaded_macs(app, mac);
@@ -1029,8 +1030,6 @@ nfp_tunnel_del_shared_mac(struct nfp_app *app, struct net_device *netdev, · 12 unmodified lines
10291030 entry->bridge_count--;
10301031
10311032 if (!entry->bridge_count && entry->ref_count) {
1032− u16 nfp_mac_idx;
1033−
10341033 nfp_mac_idx = entry->index & ~NFP_TUN_PRE_TUN_IDX_BIT;
10351034 if (__nfp_tunnel_offload_mac(app, mac, nfp_mac_idx,
10361035 false)) {
@@ -1046,7 +1045,6 @@ nfp_tunnel_del_shared_mac(struct nfp_app *app, struct net_device *netdev, · 9 unmodified lines
10461045
10471046 /* If MAC is now used by 1 repr set the offloaded MAC index to port. */
10481047 if (entry->ref_count == 1 && list_is_singular(&entry->repr_list)) {
1049− u16 nfp_mac_idx;
10501048 int port, err;
10511049
10521050 repr_priv = list_first_entry(&entry->repr_list,
@@ -1074,8 +1072,14 @@ nfp_tunnel_del_shared_mac(struct nfp_app *app, struct net_device *netdev, · 21 unmodified lines
10741072 WARN_ON_ONCE(rhashtable_remove_fast(&priv->tun.offloaded_macs,
10751073 &entry->ht_node,
10761074 offloaded_macs_params));
1075+
1076+ if (nfp_flower_is_supported_bridge(netdev))
1077+ nfp_mac_idx = entry->index & ~NFP_TUN_PRE_TUN_IDX_BIT;
1078+ else
1079+ nfp_mac_idx = entry->index;
1080+
10771081 /* If MAC has global ID then extract and free the ida entry. */
1078− if (nfp_tunnel_is_mac_idx_global(entry->index)) {
1082+ if (nfp_tunnel_is_mac_idx_global(nfp_mac_idx)) {
10791083 ida_idx = nfp_tunnel_get_ida_from_global_mac_idx(entry->index);
10801084 ida_simple_remove(&priv->tun.mac_off_ids, ida_idx);
10811085 }
drivers/net/mdio/mdio-aspeed.c+1−0
@@ -148,6 +148,7 @@ static const struct of_device_id aspeed_mdio_of_match[] = { · 147 unmodified lines
148148 { .compatible = "aspeed,ast2600-mdio", },
149149 { },
150150 };
151+MODULE_DEVICE_TABLE(of, aspeed_mdio_of_match);
151152
152153 static struct platform_driver aspeed_mdio_driver = {
153154 .driver = {
drivers/net/phy/marvell.c+9−8
@@ -553,9 +553,9 @@ static int m88e1121_config_aneg_rgmii_delays(struct phy_device *phydev) · 552 unmodified lines
553553 else
554554 mscr = 0;
555555
556− return phy_modify_paged(phydev, MII_MARVELL_MSCR_PAGE,
557− MII_88E1121_PHY_MSCR_REG,
558− MII_88E1121_PHY_MSCR_DELAY_MASK, mscr);
556+ return phy_modify_paged_changed(phydev, MII_MARVELL_MSCR_PAGE,
557+ MII_88E1121_PHY_MSCR_REG,
558+ MII_88E1121_PHY_MSCR_DELAY_MASK, mscr);
559559 }
560560
561561 static int m88e1121_config_aneg(struct phy_device *phydev)
@@ -569,11 +569,13 @@ static int m88e1121_config_aneg(struct phy_device *phydev) · 7 unmodified lines
569569 return err;
570570 }
571571
572+ changed = err;
573+
572574 err = marvell_set_polarity(phydev, phydev->mdix_ctrl);
573575 if (err < 0)
574576 return err;
575577
576− changed = err;
578+ changed |= err;
577579
578580 err = genphy_config_aneg(phydev);
579581 if (err < 0)
@@ -1213,16 +1215,15 @@ static int m88e1118_config_aneg(struct phy_device *phydev) · 633 unmodified lines
12131215 {
12141216 int err;
12151217
1216− err = genphy_soft_reset(phydev);
1218+ err = marvell_set_polarity(phydev, phydev->mdix_ctrl);
12171219 if (err < 0)
12181220 return err;
12191221
1220− err = marvell_set_polarity(phydev, phydev->mdix_ctrl);
1222+ err = genphy_config_aneg(phydev);
12211223 if (err < 0)
12221224 return err;
12231225
1224− err = genphy_config_aneg(phydev);
1225− return 0;
1226+ return genphy_soft_reset(phydev);
12261227 }
12271228
12281229 static int m88e1118_config_init(struct phy_device *phydev)
drivers/net/usb/qmi_wwan.c+2−0
@@ -1400,6 +1400,8 @@ static const struct usb_device_id products[] = { · 1399 unmodified lines
14001400 {QMI_FIXED_INTF(0x413c, 0x81d7, 0)}, /* Dell Wireless 5821e */
14011401 {QMI_FIXED_INTF(0x413c, 0x81d7, 1)}, /* Dell Wireless 5821e preproduction config */
14021402 {QMI_FIXED_INTF(0x413c, 0x81e0, 0)}, /* Dell Wireless 5821e with eSIM support*/
1403+ {QMI_FIXED_INTF(0x413c, 0x81e4, 0)}, /* Dell Wireless 5829e with eSIM support*/
1404+ {QMI_FIXED_INTF(0x413c, 0x81e6, 0)}, /* Dell Wireless 5829e */
14031405 {QMI_FIXED_INTF(0x03f0, 0x4e1d, 8)}, /* HP lt4111 LTE/EV-DO/HSPA+ Gobi 4G Module */
14041406 {QMI_FIXED_INTF(0x03f0, 0x9d1d, 1)}, /* HP lt4120 Snapdragon X5 LTE */
14051407 {QMI_QUIRK_SET_DTR(0x22de, 0x9051, 2)}, /* Hucom Wireless HM-211S/K */
drivers/net/veth.c+8−5
@@ -265,9 +265,10 @@ static void __veth_xdp_flush(struct veth_rq *rq) · 264 unmodified lines
265265 {
266266 /* Write ptr_ring before reading rx_notify_masked */
267267 smp_mb();
268− if (!rq->rx_notify_masked) {
269− rq->rx_notify_masked = true;
270− napi_schedule(&rq->xdp_napi);
268+ if (!READ_ONCE(rq->rx_notify_masked) &&
269+ napi_schedule_prep(&rq->xdp_napi)) {
270+ WRITE_ONCE(rq->rx_notify_masked, true);
271+ __napi_schedule(&rq->xdp_napi);
271272 }
272273 }
273274
@@ -912,8 +913,10 @@ static int veth_poll(struct napi_struct *napi, int budget) · 638 unmodified lines
912913 /* Write rx_notify_masked before reading ptr_ring */
913914 smp_store_mb(rq->rx_notify_masked, false);
914915 if (unlikely(!__ptr_ring_empty(&rq->xdp_ring))) {
915− rq->rx_notify_masked = true;
916− napi_schedule(&rq->xdp_napi);
916+ if (napi_schedule_prep(&rq->xdp_napi)) {
917+ WRITE_ONCE(rq->rx_notify_masked, true);
918+ __napi_schedule(&rq->xdp_napi);
919+ }
917920 }
918921 }
919922
drivers/nvme/host/core.c+8−1
@@ -4253,7 +4253,14 @@ static void nvme_async_event_work(struct work_struct *work) · 4252 unmodified lines
42534253 container_of(work, struct nvme_ctrl, async_event_work);
42544254
42554255 nvme_aen_uevent(ctrl);
4256− ctrl->ops->submit_async_event(ctrl);
4256+
4257+ /*
4258+ * The transport drivers must guarantee AER submission here is safe by
4259+ * flushing ctrl async_event_work after changing the controller state
4260+ * from LIVE and before freeing the admin queue.
4261+ */
4262+ if (ctrl->state == NVME_CTRL_LIVE)
4263+ ctrl->ops->submit_async_event(ctrl);
42574264 }
42584265
42594266 static bool nvme_ctrl_pp_status(struct nvme_ctrl *ctrl)
drivers/nvme/host/fabrics.h+1−0
@@ -170,6 +170,7 @@ nvmf_ctlr_matches_baseopts(struct nvme_ctrl *ctrl, · 169 unmodified lines
170170 struct nvmf_ctrl_options *opts)
171171 {
172172 if (ctrl->state == NVME_CTRL_DELETING ||
173+ ctrl->state == NVME_CTRL_DELETING_NOIO ||
173174 ctrl->state == NVME_CTRL_DEAD ||
174175 strcmp(opts->subsysnqn, ctrl->opts->subsysnqn) ||
175176 strcmp(opts->host->nqn, ctrl->opts->host->nqn) ||
drivers/nvme/host/rdma.c+1−0
@@ -1200,6 +1200,7 @@ static void nvme_rdma_error_recovery_work(struct work_struct *work) · 1199 unmodified lines
12001200 struct nvme_rdma_ctrl, err_work);
12011201
12021202 nvme_stop_keep_alive(&ctrl->ctrl);
1203+ flush_work(&ctrl->ctrl.async_event_work);
12031204 nvme_rdma_teardown_io_queues(ctrl, false);
12041205 nvme_start_queues(&ctrl->ctrl);
12051206 nvme_rdma_teardown_admin_queue(ctrl, false);
drivers/nvme/host/tcp.c+1−0
@@ -2096,6 +2096,7 @@ static void nvme_tcp_error_recovery_work(struct work_struct *work) · 2095 unmodified lines
20962096 struct nvme_ctrl *ctrl = &tcp_ctrl->ctrl;
20972097
20982098 nvme_stop_keep_alive(ctrl);
2099+ flush_work(&ctrl->async_event_work);
20992100 nvme_tcp_teardown_io_queues(ctrl, false);
21002101 /* unquiesce to fail fast pending requests */
21012102 nvme_start_queues(ctrl);
drivers/pci/controller/cadence/pci-j721e.c+42−43
@@ -356,8 +356,8 @@ static int j721e_pcie_probe(struct platform_device *pdev) · 355 unmodified lines
356356 const struct j721e_pcie_data *data;
357357 struct cdns_pcie *cdns_pcie;
358358 struct j721e_pcie *pcie;
359− struct cdns_pcie_rc *rc;
360− struct cdns_pcie_ep *ep;
359+ struct cdns_pcie_rc *rc = NULL;
360+ struct cdns_pcie_ep *ep = NULL;
361361 struct gpio_desc *gpiod;
362362 void __iomem *base;
363363 struct clk *clk;
@@ -376,6 +376,46 @@ static int j721e_pcie_probe(struct platform_device *pdev) · 12 unmodified lines
376376 if (!pcie)
377377 return -ENOMEM;
378378
379+ switch (mode) {
380+ case PCI_MODE_RC:
381+ if (!IS_ENABLED(CONFIG_PCIE_CADENCE_HOST))
382+ return -ENODEV;
383+
384+ bridge = devm_pci_alloc_host_bridge(dev, sizeof(*rc));
385+ if (!bridge)
386+ return -ENOMEM;
387+
388+ if (!data->byte_access_allowed)
389+ bridge->ops = &cdns_ti_pcie_host_ops;
390+ rc = pci_host_bridge_priv(bridge);
391+ rc->quirk_retrain_flag = data->quirk_retrain_flag;
392+ rc->quirk_detect_quiet_flag = data->quirk_detect_quiet_flag;
393+
394+ cdns_pcie = &rc->pcie;
395+ cdns_pcie->dev = dev;
396+ cdns_pcie->ops = &j721e_pcie_ops;
397+ pcie->cdns_pcie = cdns_pcie;
398+ break;
399+ case PCI_MODE_EP:
400+ if (!IS_ENABLED(CONFIG_PCIE_CADENCE_EP))
401+ return -ENODEV;
402+
403+ ep = devm_kzalloc(dev, sizeof(*ep), GFP_KERNEL);
404+ if (!ep)
405+ return -ENOMEM;
406+
407+ ep->quirk_detect_quiet_flag = data->quirk_detect_quiet_flag;
408+
409+ cdns_pcie = &ep->pcie;
410+ cdns_pcie->dev = dev;
411+ cdns_pcie->ops = &j721e_pcie_ops;
412+ pcie->cdns_pcie = cdns_pcie;
413+ break;
414+ default:
415+ dev_err(dev, "INVALID device type %d\n", mode);
416+ return 0;
417+ }
418+
379419 pcie->mode = mode;
380420 pcie->linkdown_irq_regfield = data->linkdown_irq_regfield;
381421
@@ -426,28 +466,6 @@ static int j721e_pcie_probe(struct platform_device *pdev) · 44 unmodified lines
426466
427467 switch (mode) {
428468 case PCI_MODE_RC:
429− if (!IS_ENABLED(CONFIG_PCIE_CADENCE_HOST)) {
430− ret = -ENODEV;
431− goto err_get_sync;
432− }
433−
434− bridge = devm_pci_alloc_host_bridge(dev, sizeof(*rc));
435− if (!bridge) {
436− ret = -ENOMEM;
437− goto err_get_sync;
438− }
439−
440− if (!data->byte_access_allowed)
441− bridge->ops = &cdns_ti_pcie_host_ops;
442− rc = pci_host_bridge_priv(bridge);
443− rc->quirk_retrain_flag = data->quirk_retrain_flag;
444− rc->quirk_detect_quiet_flag = data->quirk_detect_quiet_flag;
445−
446− cdns_pcie = &rc->pcie;
447− cdns_pcie->dev = dev;
448− cdns_pcie->ops = &j721e_pcie_ops;
449− pcie->cdns_pcie = cdns_pcie;
450−
451469 gpiod = devm_gpiod_get_optional(dev, "reset", GPIOD_OUT_LOW);
452470 if (IS_ERR(gpiod)) {
453471 ret = PTR_ERR(gpiod);
@@ -497,23 +515,6 @@ static int j721e_pcie_probe(struct platform_device *pdev) · 43 unmodified lines
497515
498516 break;
499517 case PCI_MODE_EP:
500− if (!IS_ENABLED(CONFIG_PCIE_CADENCE_EP)) {
501− ret = -ENODEV;
502− goto err_get_sync;
503− }
504−
505− ep = devm_kzalloc(dev, sizeof(*ep), GFP_KERNEL);
506− if (!ep) {
507− ret = -ENOMEM;
508− goto err_get_sync;
509− }
510− ep->quirk_detect_quiet_flag = data->quirk_detect_quiet_flag;
511−
512− cdns_pcie = &ep->pcie;
513− cdns_pcie->dev = dev;
514− cdns_pcie->ops = &j721e_pcie_ops;
515− pcie->cdns_pcie = cdns_pcie;
516−
517518 ret = cdns_pcie_init_phy(dev, cdns_pcie);
518519 if (ret) {
519520 dev_err(dev, "Failed to init phy\n");
@@ -525,8 +526,6 @@ static int j721e_pcie_probe(struct platform_device *pdev) · 5 unmodified lines
525526 goto err_pcie_setup;
526527
527528 break;
528− default:
529− dev_err(dev, "INVALID device type %d\n", mode);
530529 }
531530
532531 return 0;
drivers/pci/controller/dwc/pcie-kirin.c+18−13
@@ -756,22 +756,28 @@ static int __exit kirin_pcie_remove(struct platform_device *pdev) · 755 unmodified lines
756756 return 0;
757757 }
758758
759+struct kirin_pcie_data {
760+ enum pcie_kirin_phy_type phy_type;
761+};
762+
763+static const struct kirin_pcie_data kirin_960_data = {
764+ .phy_type = PCIE_KIRIN_INTERNAL_PHY,
765+};
766+
767+static const struct kirin_pcie_data kirin_970_data = {
768+ .phy_type = PCIE_KIRIN_EXTERNAL_PHY,
769+};
770+
759771 static const struct of_device_id kirin_pcie_match[] = {
760− {
761− .compatible = "hisilicon,kirin960-pcie",
762− .data = (void *)PCIE_KIRIN_INTERNAL_PHY
763− },
764− {
765− .compatible = "hisilicon,kirin970-pcie",
766− .data = (void *)PCIE_KIRIN_EXTERNAL_PHY
767− },
772+ { .compatible = "hisilicon,kirin960-pcie", .data = &kirin_960_data },
773+ { .compatible = "hisilicon,kirin970-pcie", .data = &kirin_970_data },
768774 {},
769775 };
770776
771777 static int kirin_pcie_probe(struct platform_device *pdev)
772778 {
773− enum pcie_kirin_phy_type phy_type;
774779 struct device *dev = &pdev->dev;
780+ const struct kirin_pcie_data *data;
775781 struct kirin_pcie *kirin_pcie;
776782 struct dw_pcie *pci;
777783 int ret;
@@ -781,13 +787,12 @@ static int kirin_pcie_probe(struct platform_device *pdev) · 3 unmodified lines
781787 return -EINVAL;
782788 }
783789
784− phy_type = (long)of_device_get_match_data(dev);
785− if (!phy_type) {
790+ data = of_device_get_match_data(dev);
791+ if (!data) {
786792 dev_err(dev, "OF data missing\n");
787793 return -EINVAL;
788794 }
789795
790−
791796 kirin_pcie = devm_kzalloc(dev, sizeof(struct kirin_pcie), GFP_KERNEL);
792797 if (!kirin_pcie)
793798 return -ENOMEM;
@@ -800,7 +805,7 @@ static int kirin_pcie_probe(struct platform_device *pdev) · 6 unmodified lines
800805 pci->ops = &kirin_dw_pcie_ops;
801806 pci->pp.ops = &kirin_pcie_host_ops;
802807 kirin_pcie->pci = pci;
803− kirin_pcie->type = phy_type;
808+ kirin_pcie->type = data->phy_type;
804809
805810 ret = kirin_pcie_get_resource(kirin_pcie, pdev);
806811 if (ret)
drivers/pci/msi/msi.c+2−1
@@ -1111,7 +1111,8 @@ const struct cpumask *pci_irq_get_affinity(struct pci_dev *dev, int nr) · 1110 unmodified lines
11111111 if (!desc)
11121112 return cpu_possible_mask;
11131113
1114− if (WARN_ON_ONCE(!desc->affinity))
1114+ /* MSI[X] interrupts can be allocated without affinity descriptor */
1115+ if (!desc->affinity)
11151116 return NULL;
11161117
11171118 /*
drivers/scsi/bnx2fc/bnx2fc_fcoe.c+13−8
@@ -508,7 +508,8 @@ static int bnx2fc_l2_rcv_thread(void *arg) · 507 unmodified lines
508508
509509 static void bnx2fc_recv_frame(struct sk_buff *skb)
510510 {
511− u32 fr_len;
511+ u64 crc_err;
512+ u32 fr_len, fr_crc;
512513 struct fc_lport *lport;
513514 struct fcoe_rcv_info *fr;
514515 struct fc_stats *stats;
@@ -542,6 +543,11 @@ static void bnx2fc_recv_frame(struct sk_buff *skb) · 27 unmodified lines
542543 skb_pull(skb, sizeof(struct fcoe_hdr));
543544 fr_len = skb->len - sizeof(struct fcoe_crc_eof);
544545
546+ stats = per_cpu_ptr(lport->stats, get_cpu());
547+ stats->RxFrames++;
548+ stats->RxWords += fr_len / FCOE_WORD_TO_BYTE;
549+ put_cpu();
550+
545551 fp = (struct fc_frame *)skb;
546552 fc_frame_init(fp);
547553 fr_dev(fp) = lport;
@@ -624,16 +630,15 @@ static void bnx2fc_recv_frame(struct sk_buff *skb) · 76 unmodified lines
624630 return;
625631 }
626632
627− stats = per_cpu_ptr(lport->stats, smp_processor_id());
628− stats->RxFrames++;
629− stats->RxWords += fr_len / FCOE_WORD_TO_BYTE;
633+ fr_crc = le32_to_cpu(fr_crc(fp));
630634
631− if (le32_to_cpu(fr_crc(fp)) !=
632− ~crc32(~0, skb->data, fr_len)) {
633− if (stats->InvalidCRCCount < 5)
635+ if (unlikely(fr_crc != ~crc32(~0, skb->data, fr_len))) {
636+ stats = per_cpu_ptr(lport->stats, get_cpu());
637+ crc_err = (stats->InvalidCRCCount++);
638+ put_cpu();
639+ if (crc_err < 5)
634640 printk(KERN_WARNING PFX "dropping frame with "
635641 "CRC error\n");
636− stats->InvalidCRCCount++;
637642 kfree_skb(skb);
638643 return;
639644 }
drivers/scsi/hisi_sas/hisi_sas_main.c+6−8
@@ -400,8 +400,7 @@ void hisi_sas_task_deliver(struct hisi_hba *hisi_hba, · 399 unmodified lines
400400 struct hisi_sas_slot *slot,
401401 struct hisi_sas_dq *dq,
402402 struct hisi_sas_device *sas_dev,
403− struct hisi_sas_internal_abort *abort,
404− struct hisi_sas_tmf_task *tmf)
403+ struct hisi_sas_internal_abort *abort)
405404 {
406405 struct hisi_sas_cmd_hdr *cmd_hdr_base;
407406 int dlvry_queue_slot, dlvry_queue;
@@ -427,8 +426,6 @@ void hisi_sas_task_deliver(struct hisi_hba *hisi_hba, · 19 unmodified lines
427426 cmd_hdr_base = hisi_hba->cmd_hdr[dlvry_queue];
428427 slot->cmd_hdr = &cmd_hdr_base[dlvry_queue_slot];
429428
430− slot->tmf = tmf;
431− slot->is_internal = tmf;
432429 task->lldd_task = slot;
433430
434431 memset(slot->cmd_hdr, 0, sizeof(struct hisi_sas_cmd_hdr));
@@ -587,7 +584,7 @@ static int hisi_sas_task_exec(struct sas_task *task, gfp_t gfp_flags, · 152 unmodified lines
587584 slot->is_internal = tmf;
588585
589586 /* protect task_prep and start_delivery sequence */
590− hisi_sas_task_deliver(hisi_hba, slot, dq, sas_dev, NULL, tmf);
587+ hisi_sas_task_deliver(hisi_hba, slot, dq, sas_dev, NULL);
591588
592589 return 0;
593590
@@ -1380,12 +1377,13 @@ static int hisi_sas_softreset_ata_disk(struct domain_device *device) · 786 unmodified lines
13801377 struct hisi_hba *hisi_hba = dev_to_hisi_hba(device);
13811378 struct device *dev = hisi_hba->dev;
13821379 int s = sizeof(struct host_to_dev_fis);
1380+ struct hisi_sas_tmf_task tmf = {};
13831381
13841382 ata_for_each_link(link, ap, EDGE) {
13851383 int pmp = sata_srst_pmp(link);
13861384
13871385 hisi_sas_fill_ata_reset_cmd(link->device, 1, pmp, fis);
1388− rc = hisi_sas_exec_internal_tmf_task(device, fis, s, NULL);
1386+ rc = hisi_sas_exec_internal_tmf_task(device, fis, s, &tmf);
13891387 if (rc != TMF_RESP_FUNC_COMPLETE)
13901388 break;
13911389 }
@@ -1396,7 +1394,7 @@ static int hisi_sas_softreset_ata_disk(struct domain_device *device) · 4 unmodified lines
13961394
13971395 hisi_sas_fill_ata_reset_cmd(link->device, 0, pmp, fis);
13981396 rc = hisi_sas_exec_internal_tmf_task(device, fis,
1399− s, NULL);
1397+ s, &tmf);
14001398 if (rc != TMF_RESP_FUNC_COMPLETE)
14011399 dev_err(dev, "ata disk %016llx de-reset failed\n",
14021400 SAS_ADDR(device->sas_addr));
@@ -2067,7 +2065,7 @@ hisi_sas_internal_abort_task_exec(struct hisi_hba *hisi_hba, int device_id, · 664 unmodified lines
20672065 slot->port = port;
20682066 slot->is_internal = true;
20692067
2070− hisi_sas_task_deliver(hisi_hba, slot, dq, sas_dev, abort, NULL);
2068+ hisi_sas_task_deliver(hisi_hba, slot, dq, sas_dev, abort);
20712069
20722070 return 0;
20732071
drivers/scsi/pm8001/pm8001_hwi.c+0−18
@@ -2692,7 +2692,6 @@ static void mpi_sata_event(struct pm8001_hba_info *pm8001_ha, void *piomb) · 2691 unmodified lines
26922692 u32 tag = le32_to_cpu(psataPayload->tag);
26932693 u32 port_id = le32_to_cpu(psataPayload->port_id);
26942694 u32 dev_id = le32_to_cpu(psataPayload->device_id);
2695− unsigned long flags;
26962695
26972696 if (event)
26982697 pm8001_dbg(pm8001_ha, FAIL, "SATA EVENT 0x%x\n", event);
@@ -2724,8 +2723,6 @@ static void mpi_sata_event(struct pm8001_hba_info *pm8001_ha, void *piomb) · 25 unmodified lines
27242723 ts->resp = SAS_TASK_COMPLETE;
27252724 ts->stat = SAS_DATA_OVERRUN;
27262725 ts->residual = 0;
2727− if (pm8001_dev)
2728− atomic_dec(&pm8001_dev->running_req);
27292726 break;
27302727 case IO_XFER_ERROR_BREAK:
27312728 pm8001_dbg(pm8001_ha, IO, "IO_XFER_ERROR_BREAK\n");
@@ -2767,7 +2764,6 @@ static void mpi_sata_event(struct pm8001_hba_info *pm8001_ha, void *piomb) · 35 unmodified lines
27672764 IO_OPEN_CNX_ERROR_IT_NEXUS_LOSS);
27682765 ts->resp = SAS_TASK_COMPLETE;
27692766 ts->stat = SAS_QUEUE_FULL;
2770− pm8001_ccb_task_free_done(pm8001_ha, t, ccb, tag);
27712767 return;
27722768 }
27732769 break;
@@ -2853,20 +2849,6 @@ static void mpi_sata_event(struct pm8001_hba_info *pm8001_ha, void *piomb) · 79 unmodified lines
28532849 ts->stat = SAS_OPEN_TO;
28542850 break;
28552851 }
2856− spin_lock_irqsave(&t->task_state_lock, flags);
2857− t->task_state_flags &= ~SAS_TASK_STATE_PENDING;
2858− t->task_state_flags &= ~SAS_TASK_AT_INITIATOR;
2859− t->task_state_flags |= SAS_TASK_STATE_DONE;
2860− if (unlikely((t->task_state_flags & SAS_TASK_STATE_ABORTED))) {
2861− spin_unlock_irqrestore(&t->task_state_lock, flags);
2862− pm8001_dbg(pm8001_ha, FAIL,
2863− "task 0x%p done with io_status 0x%x resp 0x%x stat 0x%x but aborted by upper layer!\n",
2864− t, event, ts->resp, ts->stat);
2865− pm8001_ccb_task_free(pm8001_ha, t, ccb, tag);
2866− } else {
2867− spin_unlock_irqrestore(&t->task_state_lock, flags);
2868− pm8001_ccb_task_free_done(pm8001_ha, t, ccb, tag);
2869− }
28702852 }
28712853
28722854 /*See the comments for mpi_ssp_completion */
drivers/scsi/pm8001/pm8001_sas.c+5−0
@@ -769,8 +769,13 @@ static int pm8001_exec_internal_tmf_task(struct domain_device *dev, · 768 unmodified lines
769769 res = -TMF_RESP_FUNC_FAILED;
770770 /* Even TMF timed out, return direct. */
771771 if (task->task_state_flags & SAS_TASK_STATE_ABORTED) {
772+ struct pm8001_ccb_info *ccb = task->lldd_task;
773+
772774 pm8001_dbg(pm8001_ha, FAIL, "TMF task[%x]timeout.\n",
773775 tmf->tmf);
776+
777+ if (ccb)
778+ ccb->task = NULL;
774779 goto ex_err;
775780 }
776781
drivers/scsi/pm8001/pm80xx_hwi.c+3−28
@@ -2185,9 +2185,9 @@ mpi_ssp_completion(struct pm8001_hba_info *pm8001_ha, void *piomb) · 2184 unmodified lines
21852185 pm8001_dbg(pm8001_ha, FAIL,
21862186 "task 0x%p done with io_status 0x%x resp 0x%x stat 0x%x but aborted by upper layer!\n",
21872187 t, status, ts->resp, ts->stat);
2188+ pm8001_ccb_task_free(pm8001_ha, t, ccb, tag);
21882189 if (t->slow_task)
21892190 complete(&t->slow_task->completion);
2190− pm8001_ccb_task_free(pm8001_ha, t, ccb, tag);
21912191 } else {
21922192 spin_unlock_irqrestore(&t->task_state_lock, flags);
21932193 pm8001_ccb_task_free(pm8001_ha, t, ccb, tag);
@@ -2794,9 +2794,9 @@ mpi_sata_completion(struct pm8001_hba_info *pm8001_ha, · 600 unmodified lines
27942794 pm8001_dbg(pm8001_ha, FAIL,
27952795 "task 0x%p done with io_status 0x%x resp 0x%x stat 0x%x but aborted by upper layer!\n",
27962796 t, status, ts->resp, ts->stat);
2797+ pm8001_ccb_task_free(pm8001_ha, t, ccb, tag);
27972798 if (t->slow_task)
27982799 complete(&t->slow_task->completion);
2799− pm8001_ccb_task_free(pm8001_ha, t, ccb, tag);
28002800 } else {
28012801 spin_unlock_irqrestore(&t->task_state_lock, flags);
28022802 spin_unlock_irqrestore(&circularQ->oq_lock,
@@ -2821,7 +2821,6 @@ static void mpi_sata_event(struct pm8001_hba_info *pm8001_ha, · 18 unmodified lines
28212821 u32 tag = le32_to_cpu(psataPayload->tag);
28222822 u32 port_id = le32_to_cpu(psataPayload->port_id);
28232823 u32 dev_id = le32_to_cpu(psataPayload->device_id);
2824− unsigned long flags;
28252824
28262825 if (event)
28272826 pm8001_dbg(pm8001_ha, FAIL, "SATA EVENT 0x%x\n", event);
@@ -2854,8 +2853,6 @@ static void mpi_sata_event(struct pm8001_hba_info *pm8001_ha, · 26 unmodified lines
28542853 ts->resp = SAS_TASK_COMPLETE;
28552854 ts->stat = SAS_DATA_OVERRUN;
28562855 ts->residual = 0;
2857− if (pm8001_dev)
2858− atomic_dec(&pm8001_dev->running_req);
28592856 break;
28602857 case IO_XFER_ERROR_BREAK:
28612858 pm8001_dbg(pm8001_ha, IO, "IO_XFER_ERROR_BREAK\n");
@@ -2904,11 +2901,6 @@ static void mpi_sata_event(struct pm8001_hba_info *pm8001_ha, · 42 unmodified lines
29042901 IO_OPEN_CNX_ERROR_IT_NEXUS_LOSS);
29052902 ts->resp = SAS_TASK_COMPLETE;
29062903 ts->stat = SAS_QUEUE_FULL;
2907− spin_unlock_irqrestore(&circularQ->oq_lock,
2908− circularQ->lock_flags);
2909− pm8001_ccb_task_free_done(pm8001_ha, t, ccb, tag);
2910− spin_lock_irqsave(&circularQ->oq_lock,
2911− circularQ->lock_flags);
29122904 return;
29132905 }
29142906 break;
@@ -3008,24 +3000,6 @@ static void mpi_sata_event(struct pm8001_hba_info *pm8001_ha, · 93 unmodified lines
30083000 ts->stat = SAS_OPEN_TO;
30093001 break;
30103002 }
3011− spin_lock_irqsave(&t->task_state_lock, flags);
3012− t->task_state_flags &= ~SAS_TASK_STATE_PENDING;
3013− t->task_state_flags &= ~SAS_TASK_AT_INITIATOR;
3014− t->task_state_flags |= SAS_TASK_STATE_DONE;
3015− if (unlikely((t->task_state_flags & SAS_TASK_STATE_ABORTED))) {
3016− spin_unlock_irqrestore(&t->task_state_lock, flags);
3017− pm8001_dbg(pm8001_ha, FAIL,
3018− "task 0x%p done with io_status 0x%x resp 0x%x stat 0x%x but aborted by upper layer!\n",
3019− t, event, ts->resp, ts->stat);
3020− pm8001_ccb_task_free(pm8001_ha, t, ccb, tag);
3021− } else {
3022− spin_unlock_irqrestore(&t->task_state_lock, flags);
3023− spin_unlock_irqrestore(&circularQ->oq_lock,
3024− circularQ->lock_flags);
3025− pm8001_ccb_task_free_done(pm8001_ha, t, ccb, tag);
3026− spin_lock_irqsave(&circularQ->oq_lock,
3027− circularQ->lock_flags);
3028− }
30293003 }
30303004
30313005 /*See the comments for mpi_ssp_completion */
@@ -3931,6 +3905,7 @@ static int ssp_coalesced_comp_resp(struct pm8001_hba_info *pm8001_ha, · 899 unmodified lines
39313905 /**
39323906 * process_one_iomb - process one outbound Queue memory block
39333907 * @pm8001_ha: our hba card information
3908+ * @circularQ: outbound circular queue
39343909 * @piomb: IO message buffer
39353910 */
39363911 static void process_one_iomb(struct pm8001_hba_info *pm8001_ha,
drivers/scsi/scsi_scan.c+50−5
@@ -214,6 +214,48 @@ static void scsi_unlock_floptical(struct scsi_device *sdev, · 213 unmodified lines
214214 SCSI_TIMEOUT, 3, NULL);
215215 }
216216
217+static int scsi_realloc_sdev_budget_map(struct scsi_device *sdev,
218+ unsigned int depth)
219+{
220+ int new_shift = sbitmap_calculate_shift(depth);
221+ bool need_alloc = !sdev->budget_map.map;
222+ bool need_free = false;
223+ int ret;
224+ struct sbitmap sb_backup;
225+
226+ /*
227+ * realloc if new shift is calculated, which is caused by setting
228+ * up one new default queue depth after calling ->slave_configure
229+ */
230+ if (!need_alloc && new_shift != sdev->budget_map.shift)
231+ need_alloc = need_free = true;
232+
233+ if (!need_alloc)
234+ return 0;
235+
236+ /*
237+ * Request queue has to be frozen for reallocating budget map,
238+ * and here disk isn't added yet, so freezing is pretty fast
239+ */
240+ if (need_free) {
241+ blk_mq_freeze_queue(sdev->request_queue);
242+ sb_backup = sdev->budget_map;
243+ }
244+ ret = sbitmap_init_node(&sdev->budget_map,
245+ scsi_device_max_queue_depth(sdev),
246+ new_shift, GFP_KERNEL,
247+ sdev->request_queue->node, false, true);
248+ if (need_free) {
249+ if (ret)
250+ sdev->budget_map = sb_backup;
251+ else
252+ sbitmap_free(&sb_backup);
253+ ret = 0;
254+ blk_mq_unfreeze_queue(sdev->request_queue);
255+ }
256+ return ret;
257+}
258+
217259 /**
218260 * scsi_alloc_sdev - allocate and setup a scsi_Device
219261 * @starget: which target to allocate a &scsi_device for
@@ -306,11 +348,7 @@ static struct scsi_device *scsi_alloc_sdev(struct scsi_target *starget, · 86 unmodified lines
306348 * default device queue depth to figure out sbitmap shift
307349 * since we use this queue depth most of times.
308350 */
309− if (sbitmap_init_node(&sdev->budget_map,
310− scsi_device_max_queue_depth(sdev),
311− sbitmap_calculate_shift(depth),
312− GFP_KERNEL, sdev->request_queue->node,
313− false, true)) {
351+ if (scsi_realloc_sdev_budget_map(sdev, depth)) {
314352 put_device(&starget->dev);
315353 kfree(sdev);
316354 goto out;
@@ -1017,6 +1055,13 @@ static int scsi_add_lun(struct scsi_device *sdev, unsigned char *inq_result, · 700 unmodified lines
10171055 }
10181056 return SCSI_SCAN_NO_RESPONSE;
10191057 }
1058+
1059+ /*
1060+ * The queue_depth is often changed in ->slave_configure.
1061+ * Set up budget map again since memory consumption of
1062+ * the map depends on actual queue depth.
1063+ */
1064+ scsi_realloc_sdev_budget_map(sdev, sdev->queue_depth);
10201065 }
10211066
10221067 if (sdev->scsi_level >= SCSI_3)
drivers/video/console/Kconfig+20−0
@@ -78,6 +78,26 @@ config FRAMEBUFFER_CONSOLE · 77 unmodified lines
7878 help
7979 Low-level framebuffer-based console driver.
8080
81+config FRAMEBUFFER_CONSOLE_LEGACY_ACCELERATION
82+ bool "Enable legacy fbcon hardware acceleration code"
83+ depends on FRAMEBUFFER_CONSOLE
84+ default y if PARISC
85+ default n
86+ help
87+ This option enables the fbcon (framebuffer text-based) hardware
88+ acceleration for graphics drivers which were written for the fbdev
89+ graphics interface.
90+
91+ On modern machines, on mainstream machines (like x86-64) or when
92+ using a modern Linux distribution those fbdev drivers usually aren't used.
93+ So enabling this option wouldn't have any effect, which is why you want
94+ to disable this option on such newer machines.
95+
96+ If you compile this kernel for older machines which still require the
97+ fbdev drivers, you may want to say Y.
98+
99+ If unsure, select n.
100+
81101 config FRAMEBUFFER_CONSOLE_DETECT_PRIMARY
82102 bool "Map the console to the primary display device"
83103 depends on FRAMEBUFFER_CONSOLE
drivers/video/fbdev/core/bitblit.c+16−0
@@ -43,6 +43,21 @@ static void update_attr(u8 *dst, u8 *src, int attribute, · 42 unmodified lines
4343 }
4444 }
4545
46+static void bit_bmove(struct vc_data *vc, struct fb_info *info, int sy,
47+ int sx, int dy, int dx, int height, int width)
48+{
49+ struct fb_copyarea area;
50+
51+ area.sx = sx * vc->vc_font.width;
52+ area.sy = sy * vc->vc_font.height;
53+ area.dx = dx * vc->vc_font.width;
54+ area.dy = dy * vc->vc_font.height;
55+ area.height = height * vc->vc_font.height;
56+ area.width = width * vc->vc_font.width;
57+
58+ info->fbops->fb_copyarea(info, &area);
59+}
60+
4661 static void bit_clear(struct vc_data *vc, struct fb_info *info, int sy,
4762 int sx, int height, int width)
4863 {
@@ -378,6 +393,7 @@ static int bit_update_start(struct fb_info *info) · 329 unmodified lines
378393
379394 void fbcon_set_bitops(struct fbcon_ops *ops)
380395 {
396+ ops->bmove = bit_bmove;
381397 ops->clear = bit_clear;
382398 ops->putcs = bit_putcs;
383399 ops->clear_margins = bit_clear_margins;
drivers/video/fbdev/core/fbcon.c+536−21
@@ -173,6 +173,8 @@ static void fbcon_putcs(struct vc_data *vc, const unsigned short *s, · 172 unmodified lines
173173 int count, int ypos, int xpos);
174174 static void fbcon_clear_margins(struct vc_data *vc, int bottom_only);
175175 static void fbcon_cursor(struct vc_data *vc, int mode);
176+static void fbcon_bmove(struct vc_data *vc, int sy, int sx, int dy, int dx,
177+ int height, int width);
176178 static int fbcon_switch(struct vc_data *vc);
177179 static int fbcon_blank(struct vc_data *vc, int blank, int mode_switch);
178180 static void fbcon_set_palette(struct vc_data *vc, const unsigned char *table);
@@ -180,8 +182,16 @@ static void fbcon_set_palette(struct vc_data *vc, const unsigned char *table); · 1 unmodified line
180182 /*
181183 * Internal routines
182184 */
185+static __inline__ void ywrap_up(struct vc_data *vc, int count);
186+static __inline__ void ywrap_down(struct vc_data *vc, int count);
187+static __inline__ void ypan_up(struct vc_data *vc, int count);
188+static __inline__ void ypan_down(struct vc_data *vc, int count);
189+static void fbcon_bmove_rec(struct vc_data *vc, struct fbcon_display *p, int sy, int sx,
190+ int dy, int dx, int height, int width, u_int y_break);
183191 static void fbcon_set_disp(struct fb_info *info, struct fb_var_screeninfo *var,
184192 int unit);
193+static void fbcon_redraw_move(struct vc_data *vc, struct fbcon_display *p,
194+ int line, int count, int dy);
185195 static void fbcon_modechanged(struct fb_info *info);
186196 static void fbcon_set_all_vcs(struct fb_info *info);
187197 static void fbcon_start(void);
@@ -1015,7 +1025,7 @@ static void fbcon_init(struct vc_data *vc, int init) · 827 unmodified lines
10151025 struct vc_data *svc = *default_mode;
10161026 struct fbcon_display *t, *p = &fb_display[vc->vc_num];
10171027 int logo = 1, new_rows, new_cols, rows, cols;
1018− int ret;
1028+ int cap, ret;
10191029
10201030 if (WARN_ON(info_idx == -1))
10211031 return;
@@ -1024,6 +1034,7 @@ static void fbcon_init(struct vc_data *vc, int init) · 2 unmodified lines
10241034 con2fb_map[vc->vc_num] = info_idx;
10251035
10261036 info = registered_fb[con2fb_map[vc->vc_num]];
1037+ cap = info->flags;
10271038
10281039 if (logo_shown < 0 && console_loglevel <= CONSOLE_LOGLEVEL_QUIET)
10291040 logo_shown = FBCON_LOGO_DONTSHOW;
@@ -1125,6 +1136,14 @@ static void fbcon_init(struct vc_data *vc, int init) · 95 unmodified lines
11251136
11261137 ops->graphics = 0;
11271138
1139+#ifdef CONFIG_FRAMEBUFFER_CONSOLE_LEGACY_ACCELERATION
1140+ if ((cap & FBINFO_HWACCEL_COPYAREA) &&
1141+ !(cap & FBINFO_HWACCEL_DISABLED))
1142+ p->scrollmode = SCROLL_MOVE;
1143+ else /* default to something safe */
1144+ p->scrollmode = SCROLL_REDRAW;
1145+#endif
1146+
11281147 /*
11291148 * ++guenther: console.c:vc_allocate() relies on initializing
11301149 * vc_{cols,rows}, but we must not set those if we are only
@@ -1211,13 +1230,14 @@ finished: · 80 unmodified lines
12111230 * This system is now divided into two levels because of complications
12121231 * caused by hardware scrolling. Top level functions:
12131232 *
1214− * fbcon_clear(), fbcon_putc(), fbcon_clear_margins()
1233+ * fbcon_bmove(), fbcon_clear(), fbcon_putc(), fbcon_clear_margins()
12151234 *
12161235 * handles y values in range [0, scr_height-1] that correspond to real
12171236 * screen positions. y_wrap shift means that first line of bitmap may be
12181237 * anywhere on this display. These functions convert lineoffsets to
12191238 * bitmap offsets and deal with the wrap-around case by splitting blits.
12201239 *
1240+ * fbcon_bmove_physical_8() -- These functions fast implementations
12211241 * fbcon_clear_physical_8() -- of original fbcon_XXX fns.
12221242 * fbcon_putc_physical_8() -- (font width != 8) may be added later
12231243 *
@@ -1390,6 +1410,224 @@ static void fbcon_set_disp(struct fb_info *info, struct fb_var_screeninfo *var, · 166 unmodified lines
13901410 }
13911411 }
13921412
1413+static __inline__ void ywrap_up(struct vc_data *vc, int count)
1414+{
1415+ struct fb_info *info = registered_fb[con2fb_map[vc->vc_num]];
1416+ struct fbcon_ops *ops = info->fbcon_par;
1417+ struct fbcon_display *p = &fb_display[vc->vc_num];
1418+
1419+ p->yscroll += count;
1420+ if (p->yscroll >= p->vrows) /* Deal with wrap */
1421+ p->yscroll -= p->vrows;
1422+ ops->var.xoffset = 0;
1423+ ops->var.yoffset = p->yscroll * vc->vc_font.height;
1424+ ops->var.vmode |= FB_VMODE_YWRAP;
1425+ ops->update_start(info);
1426+ scrollback_max += count;
1427+ if (scrollback_max > scrollback_phys_max)
1428+ scrollback_max = scrollback_phys_max;
1429+ scrollback_current = 0;
1430+}
1431+
1432+static __inline__ void ywrap_down(struct vc_data *vc, int count)
1433+{
1434+ struct fb_info *info = registered_fb[con2fb_map[vc->vc_num]];
1435+ struct fbcon_ops *ops = info->fbcon_par;
1436+ struct fbcon_display *p = &fb_display[vc->vc_num];
1437+
1438+ p->yscroll -= count;
1439+ if (p->yscroll < 0) /* Deal with wrap */
1440+ p->yscroll += p->vrows;
1441+ ops->var.xoffset = 0;
1442+ ops->var.yoffset = p->yscroll * vc->vc_font.height;
1443+ ops->var.vmode |= FB_VMODE_YWRAP;
1444+ ops->update_start(info);
1445+ scrollback_max -= count;
1446+ if (scrollback_max < 0)
1447+ scrollback_max = 0;
1448+ scrollback_current = 0;
1449+}
1450+
1451+static __inline__ void ypan_up(struct vc_data *vc, int count)
1452+{
1453+ struct fb_info *info = registered_fb[con2fb_map[vc->vc_num]];
1454+ struct fbcon_display *p = &fb_display[vc->vc_num];
1455+ struct fbcon_ops *ops = info->fbcon_par;
1456+
1457+ p->yscroll += count;
1458+ if (p->yscroll > p->vrows - vc->vc_rows) {
1459+ ops->bmove(vc, info, p->vrows - vc->vc_rows,
1460+ 0, 0, 0, vc->vc_rows, vc->vc_cols);
1461+ p->yscroll -= p->vrows - vc->vc_rows;
1462+ }
1463+
1464+ ops->var.xoffset = 0;
1465+ ops->var.yoffset = p->yscroll * vc->vc_font.height;
1466+ ops->var.vmode &= ~FB_VMODE_YWRAP;
1467+ ops->update_start(info);
1468+ fbcon_clear_margins(vc, 1);
1469+ scrollback_max += count;
1470+ if (scrollback_max > scrollback_phys_max)
1471+ scrollback_max = scrollback_phys_max;
1472+ scrollback_current = 0;
1473+}
1474+
1475+static __inline__ void ypan_up_redraw(struct vc_data *vc, int t, int count)
1476+{
1477+ struct fb_info *info = registered_fb[con2fb_map[vc->vc_num]];
1478+ struct fbcon_ops *ops = info->fbcon_par;
1479+ struct fbcon_display *p = &fb_display[vc->vc_num];
1480+
1481+ p->yscroll += count;
1482+
1483+ if (p->yscroll > p->vrows - vc->vc_rows) {
1484+ p->yscroll -= p->vrows - vc->vc_rows;
1485+ fbcon_redraw_move(vc, p, t + count, vc->vc_rows - count, t);
1486+ }
1487+
1488+ ops->var.xoffset = 0;
1489+ ops->var.yoffset = p->yscroll * vc->vc_font.height;
1490+ ops->var.vmode &= ~FB_VMODE_YWRAP;
1491+ ops->update_start(info);
1492+ fbcon_clear_margins(vc, 1);
1493+ scrollback_max += count;
1494+ if (scrollback_max > scrollback_phys_max)
1495+ scrollback_max = scrollback_phys_max;
1496+ scrollback_current = 0;
1497+}
1498+
1499+static __inline__ void ypan_down(struct vc_data *vc, int count)
1500+{
1501+ struct fb_info *info = registered_fb[con2fb_map[vc->vc_num]];
1502+ struct fbcon_display *p = &fb_display[vc->vc_num];
1503+ struct fbcon_ops *ops = info->fbcon_par;
1504+
1505+ p->yscroll -= count;
1506+ if (p->yscroll < 0) {
1507+ ops->bmove(vc, info, 0, 0, p->vrows - vc->vc_rows,
1508+ 0, vc->vc_rows, vc->vc_cols);
1509+ p->yscroll += p->vrows - vc->vc_rows;
1510+ }
1511+
1512+ ops->var.xoffset = 0;
1513+ ops->var.yoffset = p->yscroll * vc->vc_font.height;
1514+ ops->var.vmode &= ~FB_VMODE_YWRAP;
1515+ ops->update_start(info);
1516+ fbcon_clear_margins(vc, 1);
1517+ scrollback_max -= count;
1518+ if (scrollback_max < 0)
1519+ scrollback_max = 0;
1520+ scrollback_current = 0;
1521+}
1522+
1523+static __inline__ void ypan_down_redraw(struct vc_data *vc, int t, int count)
1524+{
1525+ struct fb_info *info = registered_fb[con2fb_map[vc->vc_num]];
1526+ struct fbcon_ops *ops = info->fbcon_par;
1527+ struct fbcon_display *p = &fb_display[vc->vc_num];
1528+
1529+ p->yscroll -= count;
1530+
1531+ if (p->yscroll < 0) {
1532+ p->yscroll += p->vrows - vc->vc_rows;
1533+ fbcon_redraw_move(vc, p, t, vc->vc_rows - count, t + count);
1534+ }
1535+
1536+ ops->var.xoffset = 0;
1537+ ops->var.yoffset = p->yscroll * vc->vc_font.height;
1538+ ops->var.vmode &= ~FB_VMODE_YWRAP;
1539+ ops->update_start(info);
1540+ fbcon_clear_margins(vc, 1);
1541+ scrollback_max -= count;
1542+ if (scrollback_max < 0)
1543+ scrollback_max = 0;
1544+ scrollback_current = 0;
1545+}
1546+
1547+static void fbcon_redraw_move(struct vc_data *vc, struct fbcon_display *p,
1548+ int line, int count, int dy)
1549+{
1550+ unsigned short *s = (unsigned short *)
1551+ (vc->vc_origin + vc->vc_size_row * line);
1552+
1553+ while (count--) {
1554+ unsigned short *start = s;
1555+ unsigned short *le = advance_row(s, 1);
1556+ unsigned short c;
1557+ int x = 0;
1558+ unsigned short attr = 1;
1559+
1560+ do {
1561+ c = scr_readw(s);
1562+ if (attr != (c & 0xff00)) {
1563+ attr = c & 0xff00;
1564+ if (s > start) {
1565+ fbcon_putcs(vc, start, s - start,
1566+ dy, x);
1567+ x += s - start;
1568+ start = s;
1569+ }
1570+ }
1571+ console_conditional_schedule();
1572+ s++;
1573+ } while (s < le);
1574+ if (s > start)
1575+ fbcon_putcs(vc, start, s - start, dy, x);
1576+ console_conditional_schedule();
1577+ dy++;
1578+ }
1579+}
1580+
1581+static void fbcon_redraw_blit(struct vc_data *vc, struct fb_info *info,
1582+ struct fbcon_display *p, int line, int count, int ycount)
1583+{
1584+ int offset = ycount * vc->vc_cols;
1585+ unsigned short *d = (unsigned short *)
1586+ (vc->vc_origin + vc->vc_size_row * line);
1587+ unsigned short *s = d + offset;
1588+ struct fbcon_ops *ops = info->fbcon_par;
1589+
1590+ while (count--) {
1591+ unsigned short *start = s;
1592+ unsigned short *le = advance_row(s, 1);
1593+ unsigned short c;
1594+ int x = 0;
1595+
1596+ do {
1597+ c = scr_readw(s);
1598+
1599+ if (c == scr_readw(d)) {
1600+ if (s > start) {
1601+ ops->bmove(vc, info, line + ycount, x,
1602+ line, x, 1, s-start);
1603+ x += s - start + 1;
1604+ start = s + 1;
1605+ } else {
1606+ x++;
1607+ start++;
1608+ }
1609+ }
1610+
1611+ scr_writew(c, d);
1612+ console_conditional_schedule();
1613+ s++;
1614+ d++;
1615+ } while (s < le);
1616+ if (s > start)
1617+ ops->bmove(vc, info, line + ycount, x, line, x, 1,
1618+ s-start);
1619+ console_conditional_schedule();
1620+ if (ycount > 0)
1621+ line++;
1622+ else {
1623+ line--;
1624+ /* NOTE: We subtract two lines from these pointers */
1625+ s -= vc->vc_size_row;
1626+ d -= vc->vc_size_row;
1627+ }
1628+ }
1629+}
1630+
13931631 static void fbcon_redraw(struct vc_data *vc, struct fbcon_display *p,
13941632 int line, int count, int offset)
13951633 {
@@ -1450,6 +1688,7 @@ static bool fbcon_scroll(struct vc_data *vc, unsigned int t, unsigned int b, · 54 unmodified lines
14501688 {
14511689 struct fb_info *info = registered_fb[con2fb_map[vc->vc_num]];
14521690 struct fbcon_display *p = &fb_display[vc->vc_num];
1691+ int scroll_partial = info->flags & FBINFO_PARTIAL_PAN_OK;
14531692
14541693 if (fbcon_is_inactive(vc, info))
14551694 return true;
@@ -1466,32 +1705,291 @@ static bool fbcon_scroll(struct vc_data *vc, unsigned int t, unsigned int b, · 10 unmodified lines
14661705 case SM_UP:
14671706 if (count > vc->vc_rows) /* Maximum realistic size */
14681707 count = vc->vc_rows;
1469− fbcon_redraw(vc, p, t, b - t - count,
1470− count * vc->vc_cols);
1471− fbcon_clear(vc, b - count, 0, count, vc->vc_cols);
1472− scr_memsetw((unsigned short *) (vc->vc_origin +
1473− vc->vc_size_row *
1474− (b - count)),
1475− vc->vc_video_erase_char,
1476− vc->vc_size_row * count);
1477− return true;
1708+ if (logo_shown >= 0)
1709+ goto redraw_up;
1710+ switch (fb_scrollmode(p)) {
1711+ case SCROLL_MOVE:
1712+ fbcon_redraw_blit(vc, info, p, t, b - t - count,
1713+ count);
1714+ fbcon_clear(vc, b - count, 0, count, vc->vc_cols);
1715+ scr_memsetw((unsigned short *) (vc->vc_origin +
1716+ vc->vc_size_row *
1717+ (b - count)),
1718+ vc->vc_video_erase_char,
1719+ vc->vc_size_row * count);
1720+ return true;
1721+
1722+ case SCROLL_WRAP_MOVE:
1723+ if (b - t - count > 3 * vc->vc_rows >> 2) {
1724+ if (t > 0)
1725+ fbcon_bmove(vc, 0, 0, count, 0, t,
1726+ vc->vc_cols);
1727+ ywrap_up(vc, count);
1728+ if (vc->vc_rows - b > 0)
1729+ fbcon_bmove(vc, b - count, 0, b, 0,
1730+ vc->vc_rows - b,
1731+ vc->vc_cols);
1732+ } else if (info->flags & FBINFO_READS_FAST)
1733+ fbcon_bmove(vc, t + count, 0, t, 0,
1734+ b - t - count, vc->vc_cols);
1735+ else
1736+ goto redraw_up;
1737+ fbcon_clear(vc, b - count, 0, count, vc->vc_cols);
1738+ break;
1739+
1740+ case SCROLL_PAN_REDRAW:
1741+ if ((p->yscroll + count <=
1742+ 2 * (p->vrows - vc->vc_rows))
1743+ && ((!scroll_partial && (b - t == vc->vc_rows))
1744+ || (scroll_partial
1745+ && (b - t - count >
1746+ 3 * vc->vc_rows >> 2)))) {
1747+ if (t > 0)
1748+ fbcon_redraw_move(vc, p, 0, t, count);
1749+ ypan_up_redraw(vc, t, count);
1750+ if (vc->vc_rows - b > 0)
1751+ fbcon_redraw_move(vc, p, b,
1752+ vc->vc_rows - b, b);
1753+ } else
1754+ fbcon_redraw_move(vc, p, t + count, b - t - count, t);
1755+ fbcon_clear(vc, b - count, 0, count, vc->vc_cols);
1756+ break;
1757+
1758+ case SCROLL_PAN_MOVE:
1759+ if ((p->yscroll + count <=
1760+ 2 * (p->vrows - vc->vc_rows))
1761+ && ((!scroll_partial && (b - t == vc->vc_rows))
1762+ || (scroll_partial
1763+ && (b - t - count >
1764+ 3 * vc->vc_rows >> 2)))) {
1765+ if (t > 0)
1766+ fbcon_bmove(vc, 0, 0, count, 0, t,
1767+ vc->vc_cols);
1768+ ypan_up(vc, count);
1769+ if (vc->vc_rows - b > 0)
1770+ fbcon_bmove(vc, b - count, 0, b, 0,
1771+ vc->vc_rows - b,
1772+ vc->vc_cols);
1773+ } else if (info->flags & FBINFO_READS_FAST)
1774+ fbcon_bmove(vc, t + count, 0, t, 0,
1775+ b - t - count, vc->vc_cols);
1776+ else
1777+ goto redraw_up;
1778+ fbcon_clear(vc, b - count, 0, count, vc->vc_cols);
1779+ break;
1780+
1781+ case SCROLL_REDRAW:
1782+ redraw_up:
1783+ fbcon_redraw(vc, p, t, b - t - count,
1784+ count * vc->vc_cols);
1785+ fbcon_clear(vc, b - count, 0, count, vc->vc_cols);
1786+ scr_memsetw((unsigned short *) (vc->vc_origin +
1787+ vc->vc_size_row *
1788+ (b - count)),
1789+ vc->vc_video_erase_char,
1790+ vc->vc_size_row * count);
1791+ return true;
1792+ }
1793+ break;
14781794
14791795 case SM_DOWN:
14801796 if (count > vc->vc_rows) /* Maximum realistic size */
14811797 count = vc->vc_rows;
1482− fbcon_redraw(vc, p, b - 1, b - t - count,
1483− -count * vc->vc_cols);
1484− fbcon_clear(vc, t, 0, count, vc->vc_cols);
1485− scr_memsetw((unsigned short *) (vc->vc_origin +
1486− vc->vc_size_row *
1487− t),
1488− vc->vc_video_erase_char,
1489− vc->vc_size_row * count);
1490− return true;
1798+ if (logo_shown >= 0)
1799+ goto redraw_down;
1800+ switch (fb_scrollmode(p)) {
1801+ case SCROLL_MOVE:
1802+ fbcon_redraw_blit(vc, info, p, b - 1, b - t - count,
1803+ -count);
1804+ fbcon_clear(vc, t, 0, count, vc->vc_cols);
1805+ scr_memsetw((unsigned short *) (vc->vc_origin +
1806+ vc->vc_size_row *
1807+ t),
1808+ vc->vc_video_erase_char,
1809+ vc->vc_size_row * count);
1810+ return true;
1811+
1812+ case SCROLL_WRAP_MOVE:
1813+ if (b - t - count > 3 * vc->vc_rows >> 2) {
1814+ if (vc->vc_rows - b > 0)
1815+ fbcon_bmove(vc, b, 0, b - count, 0,
1816+ vc->vc_rows - b,
1817+ vc->vc_cols);
1818+ ywrap_down(vc, count);
1819+ if (t > 0)
1820+ fbcon_bmove(vc, count, 0, 0, 0, t,
1821+ vc->vc_cols);
1822+ } else if (info->flags & FBINFO_READS_FAST)
1823+ fbcon_bmove(vc, t, 0, t + count, 0,
1824+ b - t - count, vc->vc_cols);
1825+ else
1826+ goto redraw_down;
1827+ fbcon_clear(vc, t, 0, count, vc->vc_cols);
1828+ break;
1829+
1830+ case SCROLL_PAN_MOVE:
1831+ if ((count - p->yscroll <= p->vrows - vc->vc_rows)
1832+ && ((!scroll_partial && (b - t == vc->vc_rows))
1833+ || (scroll_partial
1834+ && (b - t - count >
1835+ 3 * vc->vc_rows >> 2)))) {
1836+ if (vc->vc_rows - b > 0)
1837+ fbcon_bmove(vc, b, 0, b - count, 0,
1838+ vc->vc_rows - b,
1839+ vc->vc_cols);
1840+ ypan_down(vc, count);
1841+ if (t > 0)
1842+ fbcon_bmove(vc, count, 0, 0, 0, t,
1843+ vc->vc_cols);
1844+ } else if (info->flags & FBINFO_READS_FAST)
1845+ fbcon_bmove(vc, t, 0, t + count, 0,
1846+ b - t - count, vc->vc_cols);
1847+ else
1848+ goto redraw_down;
1849+ fbcon_clear(vc, t, 0, count, vc->vc_cols);
1850+ break;
1851+
1852+ case SCROLL_PAN_REDRAW:
1853+ if ((count - p->yscroll <= p->vrows - vc->vc_rows)
1854+ && ((!scroll_partial && (b - t == vc->vc_rows))
1855+ || (scroll_partial
1856+ && (b - t - count >
1857+ 3 * vc->vc_rows >> 2)))) {
1858+ if (vc->vc_rows - b > 0)
1859+ fbcon_redraw_move(vc, p, b, vc->vc_rows - b,
1860+ b - count);
1861+ ypan_down_redraw(vc, t, count);
1862+ if (t > 0)
1863+ fbcon_redraw_move(vc, p, count, t, 0);
1864+ } else
1865+ fbcon_redraw_move(vc, p, t, b - t - count, t + count);
1866+ fbcon_clear(vc, t, 0, count, vc->vc_cols);
1867+ break;
1868+
1869+ case SCROLL_REDRAW:
1870+ redraw_down:
1871+ fbcon_redraw(vc, p, b - 1, b - t - count,
1872+ -count * vc->vc_cols);
1873+ fbcon_clear(vc, t, 0, count, vc->vc_cols);
1874+ scr_memsetw((unsigned short *) (vc->vc_origin +
1875+ vc->vc_size_row *
1876+ t),
1877+ vc->vc_video_erase_char,
1878+ vc->vc_size_row * count);
1879+ return true;
1880+ }
14911881 }
14921882 return false;
14931883 }
14941884
1885+
1886+static void fbcon_bmove(struct vc_data *vc, int sy, int sx, int dy, int dx,
1887+ int height, int width)
1888+{
1889+ struct fb_info *info = registered_fb[con2fb_map[vc->vc_num]];
1890+ struct fbcon_display *p = &fb_display[vc->vc_num];
1891+
1892+ if (fbcon_is_inactive(vc, info))
1893+ return;
1894+
1895+ if (!width || !height)
1896+ return;
1897+
1898+ /* Split blits that cross physical y_wrap case.
1899+ * Pathological case involves 4 blits, better to use recursive
1900+ * code rather than unrolled case
1901+ *
1902+ * Recursive invocations don't need to erase the cursor over and
1903+ * over again, so we use fbcon_bmove_rec()
1904+ */
1905+ fbcon_bmove_rec(vc, p, sy, sx, dy, dx, height, width,
1906+ p->vrows - p->yscroll);
1907+}
1908+
1909+static void fbcon_bmove_rec(struct vc_data *vc, struct fbcon_display *p, int sy, int sx,
1910+ int dy, int dx, int height, int width, u_int y_break)
1911+{
1912+ struct fb_info *info = registered_fb[con2fb_map[vc->vc_num]];
1913+ struct fbcon_ops *ops = info->fbcon_par;
1914+ u_int b;
1915+
1916+ if (sy < y_break && sy + height > y_break) {
1917+ b = y_break - sy;
1918+ if (dy < sy) { /* Avoid trashing self */
1919+ fbcon_bmove_rec(vc, p, sy, sx, dy, dx, b, width,
1920+ y_break);
1921+ fbcon_bmove_rec(vc, p, sy + b, sx, dy + b, dx,
1922+ height - b, width, y_break);
1923+ } else {
1924+ fbcon_bmove_rec(vc, p, sy + b, sx, dy + b, dx,
1925+ height - b, width, y_break);
1926+ fbcon_bmove_rec(vc, p, sy, sx, dy, dx, b, width,
1927+ y_break);
1928+ }
1929+ return;
1930+ }
1931+
1932+ if (dy < y_break && dy + height > y_break) {
1933+ b = y_break - dy;
1934+ if (dy < sy) { /* Avoid trashing self */
1935+ fbcon_bmove_rec(vc, p, sy, sx, dy, dx, b, width,
1936+ y_break);
1937+ fbcon_bmove_rec(vc, p, sy + b, sx, dy + b, dx,
1938+ height - b, width, y_break);
1939+ } else {
1940+ fbcon_bmove_rec(vc, p, sy + b, sx, dy + b, dx,
1941+ height - b, width, y_break);
1942+ fbcon_bmove_rec(vc, p, sy, sx, dy, dx, b, width,
1943+ y_break);
1944+ }
1945+ return;
1946+ }
1947+ ops->bmove(vc, info, real_y(p, sy), sx, real_y(p, dy), dx,
1948+ height, width);
1949+}
1950+
1951+static void updatescrollmode_accel(struct fbcon_display *p,
1952+ struct fb_info *info,
1953+ struct vc_data *vc)
1954+{
1955+#ifdef CONFIG_FRAMEBUFFER_CONSOLE_LEGACY_ACCELERATION
1956+ struct fbcon_ops *ops = info->fbcon_par;
1957+ int cap = info->flags;
1958+ u16 t = 0;
1959+ int ypan = FBCON_SWAP(ops->rotate, info->fix.ypanstep,
1960+ info->fix.xpanstep);
1961+ int ywrap = FBCON_SWAP(ops->rotate, info->fix.ywrapstep, t);
1962+ int yres = FBCON_SWAP(ops->rotate, info->var.yres, info->var.xres);
1963+ int vyres = FBCON_SWAP(ops->rotate, info->var.yres_virtual,
1964+ info->var.xres_virtual);
1965+ int good_pan = (cap & FBINFO_HWACCEL_YPAN) &&
1966+ divides(ypan, vc->vc_font.height) && vyres > yres;
1967+ int good_wrap = (cap & FBINFO_HWACCEL_YWRAP) &&
1968+ divides(ywrap, vc->vc_font.height) &&
1969+ divides(vc->vc_font.height, vyres) &&
1970+ divides(vc->vc_font.height, yres);
1971+ int reading_fast = cap & FBINFO_READS_FAST;
1972+ int fast_copyarea = (cap & FBINFO_HWACCEL_COPYAREA) &&
1973+ !(cap & FBINFO_HWACCEL_DISABLED);
1974+ int fast_imageblit = (cap & FBINFO_HWACCEL_IMAGEBLIT) &&
1975+ !(cap & FBINFO_HWACCEL_DISABLED);
1976+
1977+ if (good_wrap || good_pan) {
1978+ if (reading_fast || fast_copyarea)
1979+ p->scrollmode = good_wrap ?
1980+ SCROLL_WRAP_MOVE : SCROLL_PAN_MOVE;
1981+ else
1982+ p->scrollmode = good_wrap ? SCROLL_REDRAW :
1983+ SCROLL_PAN_REDRAW;
1984+ } else {
1985+ if (reading_fast || (fast_copyarea && !fast_imageblit))
1986+ p->scrollmode = SCROLL_MOVE;
1987+ else
1988+ p->scrollmode = SCROLL_REDRAW;
1989+ }
1990+#endif
1991+}
1992+
14951993 static void updatescrollmode(struct fbcon_display *p,
14961994 struct fb_info *info,
14971995 struct vc_data *vc)
@@ -1507,6 +2005,9 @@ static void updatescrollmode(struct fbcon_display *p, · 9 unmodified lines
15072005 p->vrows -= (yres - (fh * vc->vc_rows)) / fh;
15082006 if ((yres % fh) && (vyres % fh < yres % fh))
15092007 p->vrows--;
2008+
2009+ /* update scrollmode in case hardware acceleration is used */
2010+ updatescrollmode_accel(p, info, vc);
15102011 }
15112012
15122013 #define PITCH(w) (((w) + 7) >> 3)
@@ -1664,7 +2165,21 @@ static int fbcon_switch(struct vc_data *vc) · 151 unmodified lines
16642165
16652166 updatescrollmode(p, info, vc);
16662167
1667− scrollback_phys_max = 0;
2168+ switch (fb_scrollmode(p)) {
2169+ case SCROLL_WRAP_MOVE:
2170+ scrollback_phys_max = p->vrows - vc->vc_rows;
2171+ break;
2172+ case SCROLL_PAN_MOVE:
2173+ case SCROLL_PAN_REDRAW:
2174+ scrollback_phys_max = p->vrows - 2 * vc->vc_rows;
2175+ if (scrollback_phys_max < 0)
2176+ scrollback_phys_max = 0;
2177+ break;
2178+ default:
2179+ scrollback_phys_max = 0;
2180+ break;
2181+ }
2182+
16682183 scrollback_max = 0;
16692184 scrollback_current = 0;
16702185
drivers/video/fbdev/core/fbcon.h+72−0
@@ -29,6 +29,9 @@ struct fbcon_display { · 28 unmodified lines
2929 /* Filled in by the low-level console driver */
3030 const u_char *fontdata;
3131 int userfont; /* != 0 if fontdata kmalloc()ed */
32+#ifdef CONFIG_FRAMEBUFFER_CONSOLE_LEGACY_ACCELERATION
33+ u_short scrollmode; /* Scroll Method, use fb_scrollmode() */
34+#endif
3235 u_short inverse; /* != 0 text black on white as default */
3336 short yscroll; /* Hardware scrolling */
3437 int vrows; /* number of virtual rows */
@@ -51,6 +54,8 @@ struct fbcon_display { · 16 unmodified lines
5154 };
5255
5356 struct fbcon_ops {
57+ void (*bmove)(struct vc_data *vc, struct fb_info *info, int sy,
58+ int sx, int dy, int dx, int height, int width);
5459 void (*clear)(struct vc_data *vc, struct fb_info *info, int sy,
5560 int sx, int height, int width);
5661 void (*putcs)(struct vc_data *vc, struct fb_info *info,
@@ -149,6 +154,73 @@ static inline int attr_col_ec(int shift, struct vc_data *vc, · 92 unmodified lines
149154 #define attr_bgcol_ec(bgshift, vc, info) attr_col_ec(bgshift, vc, info, 0)
150155 #define attr_fgcol_ec(fgshift, vc, info) attr_col_ec(fgshift, vc, info, 1)
151156
157+ /*
158+ * Scroll Method
159+ */
160+
161+/* There are several methods fbcon can use to move text around the screen:
162+ *
163+ * Operation Pan Wrap
164+ *---------------------------------------------
165+ * SCROLL_MOVE copyarea No No
166+ * SCROLL_PAN_MOVE copyarea Yes No
167+ * SCROLL_WRAP_MOVE copyarea No Yes
168+ * SCROLL_REDRAW imageblit No No
169+ * SCROLL_PAN_REDRAW imageblit Yes No
170+ * SCROLL_WRAP_REDRAW imageblit No Yes
171+ *
172+ * (SCROLL_WRAP_REDRAW is not implemented yet)
173+ *
174+ * In general, fbcon will choose the best scrolling
175+ * method based on the rule below:
176+ *
177+ * Pan/Wrap > accel imageblit > accel copyarea >
178+ * soft imageblit > (soft copyarea)
179+ *
180+ * Exception to the rule: Pan + accel copyarea is
181+ * preferred over Pan + accel imageblit.
182+ *
183+ * The above is typical for PCI/AGP cards. Unless
184+ * overridden, fbcon will never use soft copyarea.
185+ *
186+ * If you need to override the above rule, set the
187+ * appropriate flags in fb_info->flags. For example,
188+ * to prefer copyarea over imageblit, set
189+ * FBINFO_READS_FAST.
190+ *
191+ * Other notes:
192+ * + use the hardware engine to move the text
193+ * (hw-accelerated copyarea() and fillrect())
194+ * + use hardware-supported panning on a large virtual screen
195+ * + amifb can not only pan, but also wrap the display by N lines
196+ * (i.e. visible line i = physical line (i+N) % yres).
197+ * + read what's already rendered on the screen and
198+ * write it in a different place (this is cfb_copyarea())
199+ * + re-render the text to the screen
200+ *
201+ * Whether to use wrapping or panning can only be figured out at
202+ * runtime (when we know whether our font height is a multiple
203+ * of the pan/wrap step)
204+ *
205+ */
206+
207+#define SCROLL_MOVE 0x001
208+#define SCROLL_PAN_MOVE 0x002
209+#define SCROLL_WRAP_MOVE 0x003
210+#define SCROLL_REDRAW 0x004
211+#define SCROLL_PAN_REDRAW 0x005
212+
213+static inline u_short fb_scrollmode(struct fbcon_display *fb)
214+{
215+#ifdef CONFIG_FRAMEBUFFER_CONSOLE_LEGACY_ACCELERATION
216+ return fb->scrollmode;
217+#else
218+ /* hardcoded to SCROLL_REDRAW if acceleration was disabled. */
219+ return SCROLL_REDRAW;
220+#endif
221+}
222+
223+
152224 #ifdef CONFIG_FB_TILEBLITTING
153225 extern void fbcon_set_tileops(struct vc_data *vc, struct fb_info *info);
154226 #endif
drivers/video/fbdev/core/fbcon_ccw.c+24−4
@@ -59,12 +59,31 @@ static void ccw_update_attr(u8 *dst, u8 *src, int attribute, · 58 unmodified lines
5959 }
6060 }
6161
62+
63+static void ccw_bmove(struct vc_data *vc, struct fb_info *info, int sy,
64+ int sx, int dy, int dx, int height, int width)
65+{
66+ struct fbcon_ops *ops = info->fbcon_par;
67+ struct fb_copyarea area;
68+ u32 vyres = GETVYRES(ops->p, info);
69+
70+ area.sx = sy * vc->vc_font.height;
71+ area.sy = vyres - ((sx + width) * vc->vc_font.width);
72+ area.dx = dy * vc->vc_font.height;
73+ area.dy = vyres - ((dx + width) * vc->vc_font.width);
74+ area.width = height * vc->vc_font.height;
75+ area.height = width * vc->vc_font.width;
76+
77+ info->fbops->fb_copyarea(info, &area);
78+}
79+
6280 static void ccw_clear(struct vc_data *vc, struct fb_info *info, int sy,
6381 int sx, int height, int width)
6482 {
83+ struct fbcon_ops *ops = info->fbcon_par;
6584 struct fb_fillrect region;
6685 int bgshift = (vc->vc_hi_font_mask) ? 13 : 12;
67− u32 vyres = info->var.yres;
86+ u32 vyres = GETVYRES(ops->p, info);
6887
6988 region.color = attr_bgcol_ec(bgshift,vc,info);
7089 region.dx = sy * vc->vc_font.height;
@@ -121,7 +140,7 @@ static void ccw_putcs(struct vc_data *vc, struct fb_info *info, · 50 unmodified lines
121140 u32 cnt, pitch, size;
122141 u32 attribute = get_attribute(info, scr_readw(s));
123142 u8 *dst, *buf = NULL;
124− u32 vyres = info->var.yres;
143+ u32 vyres = GETVYRES(ops->p, info);
125144
126145 if (!ops->fontbuffer)
127146 return;
@@ -210,7 +229,7 @@ static void ccw_cursor(struct vc_data *vc, struct fb_info *info, int mode, · 82 unmodified lines
210229 int attribute, use_sw = vc->vc_cursor_type & CUR_SW;
211230 int err = 1, dx, dy;
212231 char *src;
213− u32 vyres = info->var.yres;
232+ u32 vyres = GETVYRES(ops->p, info);
214233
215234 if (!ops->fontbuffer)
216235 return;
@@ -368,7 +387,7 @@ static int ccw_update_start(struct fb_info *info) · 151 unmodified lines
368387 {
369388 struct fbcon_ops *ops = info->fbcon_par;
370389 u32 yoffset;
371− u32 vyres = info->var.yres;
390+ u32 vyres = GETVYRES(ops->p, info);
372391 int err;
373392
374393 yoffset = (vyres - info->var.yres) - ops->var.xoffset;
@@ -383,6 +402,7 @@ static int ccw_update_start(struct fb_info *info) · 8 unmodified lines
383402
384403 void fbcon_rotate_ccw(struct fbcon_ops *ops)
385404 {
405+ ops->bmove = ccw_bmove;
386406 ops->clear = ccw_clear;
387407 ops->putcs = ccw_putcs;
388408 ops->clear_margins = ccw_clear_margins;
drivers/video/fbdev/core/fbcon_cw.c+24−4
@@ -44,12 +44,31 @@ static void cw_update_attr(u8 *dst, u8 *src, int attribute, · 43 unmodified lines
4444 }
4545 }
4646
47+
48+static void cw_bmove(struct vc_data *vc, struct fb_info *info, int sy,
49+ int sx, int dy, int dx, int height, int width)
50+{
51+ struct fbcon_ops *ops = info->fbcon_par;
52+ struct fb_copyarea area;
53+ u32 vxres = GETVXRES(ops->p, info);
54+
55+ area.sx = vxres - ((sy + height) * vc->vc_font.height);
56+ area.sy = sx * vc->vc_font.width;
57+ area.dx = vxres - ((dy + height) * vc->vc_font.height);
58+ area.dy = dx * vc->vc_font.width;
59+ area.width = height * vc->vc_font.height;
60+ area.height = width * vc->vc_font.width;
61+
62+ info->fbops->fb_copyarea(info, &area);
63+}
64+
4765 static void cw_clear(struct vc_data *vc, struct fb_info *info, int sy,
4866 int sx, int height, int width)
4967 {
68+ struct fbcon_ops *ops = info->fbcon_par;
5069 struct fb_fillrect region;
5170 int bgshift = (vc->vc_hi_font_mask) ? 13 : 12;
52− u32 vxres = info->var.xres;
71+ u32 vxres = GETVXRES(ops->p, info);
5372
5473 region.color = attr_bgcol_ec(bgshift,vc,info);
5574 region.dx = vxres - ((sy + height) * vc->vc_font.height);
@@ -106,7 +125,7 @@ static void cw_putcs(struct vc_data *vc, struct fb_info *info, · 50 unmodified lines
106125 u32 cnt, pitch, size;
107126 u32 attribute = get_attribute(info, scr_readw(s));
108127 u8 *dst, *buf = NULL;
109− u32 vxres = info->var.xres;
128+ u32 vxres = GETVXRES(ops->p, info);
110129
111130 if (!ops->fontbuffer)
112131 return;
@@ -193,7 +212,7 @@ static void cw_cursor(struct vc_data *vc, struct fb_info *info, int mode, · 80 unmodified lines
193212 int attribute, use_sw = vc->vc_cursor_type & CUR_SW;
194213 int err = 1, dx, dy;
195214 char *src;
196− u32 vxres = info->var.xres;
215+ u32 vxres = GETVXRES(ops->p, info);
197216
198217 if (!ops->fontbuffer)
199218 return;
@@ -350,7 +369,7 @@ static void cw_cursor(struct vc_data *vc, struct fb_info *info, int mode, · 150 unmodified lines
350369 static int cw_update_start(struct fb_info *info)
351370 {
352371 struct fbcon_ops *ops = info->fbcon_par;
353− u32 vxres = info->var.xres;
372+ u32 vxres = GETVXRES(ops->p, info);
354373 u32 xoffset;
355374 int err;
356375
@@ -366,6 +385,7 @@ static int cw_update_start(struct fb_info *info) · 9 unmodified lines
366385
367386 void fbcon_rotate_cw(struct fbcon_ops *ops)
368387 {
388+ ops->bmove = cw_bmove;
369389 ops->clear = cw_clear;
370390 ops->putcs = cw_putcs;
371391 ops->clear_margins = cw_clear_margins;
drivers/video/fbdev/core/fbcon_rotate.h+9−0
@@ -11,6 +11,15 @@ · 10 unmodified lines
1111 #ifndef _FBCON_ROTATE_H
1212 #define _FBCON_ROTATE_H
1313
14+#define GETVYRES(s,i) ({ \
15+ (fb_scrollmode(s) == SCROLL_REDRAW || fb_scrollmode(s) == SCROLL_MOVE) ? \
16+ (i)->var.yres : (i)->var.yres_virtual; })
17+
18+#define GETVXRES(s,i) ({ \
19+ (fb_scrollmode(s) == SCROLL_REDRAW || fb_scrollmode(s) == SCROLL_MOVE || !(i)->fix.xpanstep) ? \
20+ (i)->var.xres : (i)->var.xres_virtual; })
21+
22+
1423 static inline int pattern_test_bit(u32 x, u32 y, u32 pitch, const char *pat)
1524 {
1625 u32 tmp = (y * pitch) + x, index = tmp / 8, bit = tmp % 8;
drivers/video/fbdev/core/fbcon_ud.c+29−8
@@ -44,13 +44,33 @@ static void ud_update_attr(u8 *dst, u8 *src, int attribute, · 43 unmodified lines
4444 }
4545 }
4646
47+
48+static void ud_bmove(struct vc_data *vc, struct fb_info *info, int sy,
49+ int sx, int dy, int dx, int height, int width)
50+{
51+ struct fbcon_ops *ops = info->fbcon_par;
52+ struct fb_copyarea area;
53+ u32 vyres = GETVYRES(ops->p, info);
54+ u32 vxres = GETVXRES(ops->p, info);
55+
56+ area.sy = vyres - ((sy + height) * vc->vc_font.height);
57+ area.sx = vxres - ((sx + width) * vc->vc_font.width);
58+ area.dy = vyres - ((dy + height) * vc->vc_font.height);
59+ area.dx = vxres - ((dx + width) * vc->vc_font.width);
60+ area.height = height * vc->vc_font.height;
61+ area.width = width * vc->vc_font.width;
62+
63+ info->fbops->fb_copyarea(info, &area);
64+}
65+
4766 static void ud_clear(struct vc_data *vc, struct fb_info *info, int sy,
4867 int sx, int height, int width)
4968 {
69+ struct fbcon_ops *ops = info->fbcon_par;
5070 struct fb_fillrect region;
5171 int bgshift = (vc->vc_hi_font_mask) ? 13 : 12;
52− u32 vyres = info->var.yres;
53− u32 vxres = info->var.xres;
72+ u32 vyres = GETVYRES(ops->p, info);
73+ u32 vxres = GETVXRES(ops->p, info);
5474
5575 region.color = attr_bgcol_ec(bgshift,vc,info);
5676 region.dy = vyres - ((sy + height) * vc->vc_font.height);
@@ -142,8 +162,8 @@ static void ud_putcs(struct vc_data *vc, struct fb_info *info, · 85 unmodified lines
142162 u32 mod = vc->vc_font.width % 8, cnt, pitch, size;
143163 u32 attribute = get_attribute(info, scr_readw(s));
144164 u8 *dst, *buf = NULL;
145− u32 vyres = info->var.yres;
146− u32 vxres = info->var.xres;
165+ u32 vyres = GETVYRES(ops->p, info);
166+ u32 vxres = GETVXRES(ops->p, info);
147167
148168 if (!ops->fontbuffer)
149169 return;
@@ -239,8 +259,8 @@ static void ud_cursor(struct vc_data *vc, struct fb_info *info, int mode, · 89 unmodified lines
239259 int attribute, use_sw = vc->vc_cursor_type & CUR_SW;
240260 int err = 1, dx, dy;
241261 char *src;
242− u32 vyres = info->var.yres;
243− u32 vxres = info->var.xres;
262+ u32 vyres = GETVYRES(ops->p, info);
263+ u32 vxres = GETVXRES(ops->p, info);
244264
245265 if (!ops->fontbuffer)
246266 return;
@@ -390,8 +410,8 @@ static int ud_update_start(struct fb_info *info) · 143 unmodified lines
390410 {
391411 struct fbcon_ops *ops = info->fbcon_par;
392412 int xoffset, yoffset;
393− u32 vyres = info->var.yres;
394− u32 vxres = info->var.xres;
413+ u32 vyres = GETVYRES(ops->p, info);
414+ u32 vxres = GETVXRES(ops->p, info);
395415 int err;
396416
397417 xoffset = vxres - info->var.xres - ops->var.xoffset;
@@ -409,6 +429,7 @@ static int ud_update_start(struct fb_info *info) · 11 unmodified lines
409429
410430 void fbcon_rotate_ud(struct fbcon_ops *ops)
411431 {
432+ ops->bmove = ud_bmove;
412433 ops->clear = ud_clear;
413434 ops->putcs = ud_putcs;
414435 ops->clear_margins = ud_clear_margins;
drivers/video/fbdev/core/tileblit.c+16−0
@@ -16,6 +16,21 @@ · 15 unmodified lines
1616 #include <asm/types.h>
1717 #include "fbcon.h"
1818
19+static void tile_bmove(struct vc_data *vc, struct fb_info *info, int sy,
20+ int sx, int dy, int dx, int height, int width)
21+{
22+ struct fb_tilearea area;
23+
24+ area.sx = sx;
25+ area.sy = sy;
26+ area.dx = dx;
27+ area.dy = dy;
28+ area.height = height;
29+ area.width = width;
30+
31+ info->tileops->fb_tilecopy(info, &area);
32+}
33+
1934 static void tile_clear(struct vc_data *vc, struct fb_info *info, int sy,
2035 int sx, int height, int width)
2136 {
@@ -118,6 +133,7 @@ void fbcon_set_tileops(struct vc_data *vc, struct fb_info *info) · 96 unmodified lines
118133 struct fb_tilemap map;
119134 struct fbcon_ops *ops = info->fbcon_par;
120135
136+ ops->bmove = tile_bmove;
121137 ops->clear = tile_clear;
122138 ops->putcs = tile_putcs;
123139 ops->clear_margins = tile_clear_margins;
drivers/video/fbdev/skeletonfb.c+6−6
@@ -505,15 +505,15 @@ void xxxfb_fillrect(struct fb_info *p, const struct fb_fillrect *region) · 504 unmodified lines
505505 }
506506
507507 /**
508− * xxxfb_copyarea - OBSOLETE function.
508+ * xxxfb_copyarea - REQUIRED function. Can use generic routines if
509+ * non acclerated hardware and packed pixel based.
509510 * Copies one area of the screen to another area.
510− * Will be deleted in a future version
511511 *
512512 * @info: frame buffer structure that represents a single frame buffer
513513 * @area: Structure providing the data to copy the framebuffer contents
514514 * from one region to another.
515515 *
516− * This drawing operation copied a rectangular area from one area of the
516+ * This drawing operation copies a rectangular area from one area of the
517517 * screen to another area.
518518 */
519519 void xxxfb_copyarea(struct fb_info *p, const struct fb_copyarea *area)
@@ -645,9 +645,9 @@ static const struct fb_ops xxxfb_ops = { · 125 unmodified lines
645645 .fb_setcolreg = xxxfb_setcolreg,
646646 .fb_blank = xxxfb_blank,
647647 .fb_pan_display = xxxfb_pan_display,
648− .fb_fillrect = xxxfb_fillrect, /* Needed !!! */
649− .fb_copyarea = xxxfb_copyarea, /* Obsolete */
650− .fb_imageblit = xxxfb_imageblit, /* Needed !!! */
648+ .fb_fillrect = xxxfb_fillrect, /* Needed !!! */
649+ .fb_copyarea = xxxfb_copyarea, /* Needed !!! */
650+ .fb_imageblit = xxxfb_imageblit, /* Needed !!! */
651651 .fb_cursor = xxxfb_cursor, /* Optional !!! */
652652 .fb_sync = xxxfb_sync,
653653 .fb_ioctl = xxxfb_ioctl,
fs/9p/fid.c+4−5
@@ -96,12 +96,8 @@ static struct p9_fid *v9fs_fid_find(struct dentry *dentry, kuid_t uid, int any) · 95 unmodified lines
9696 dentry, dentry, from_kuid(&init_user_ns, uid),
9797 any);
9898 ret = NULL;
99−
100− if (d_inode(dentry))
101− ret = v9fs_fid_find_inode(d_inode(dentry), uid);
102−
10399 /* we'll recheck under lock if there's anything to look in */
104− if (!ret && dentry->d_fsdata) {
100+ if (dentry->d_fsdata) {
105101 struct hlist_head *h = (struct hlist_head *)&dentry->d_fsdata;
106102
107103 spin_lock(&dentry->d_lock);
@@ -113,6 +109,9 @@ static struct p9_fid *v9fs_fid_find(struct dentry *dentry, kuid_t uid, int any) · 5 unmodified lines
113109 }
114110 }
115111 spin_unlock(&dentry->d_lock);
112+ } else {
113+ if (dentry->d_inode)
114+ ret = v9fs_fid_find_inode(dentry->d_inode, uid);
116115 }
117116
118117 return ret;
fs/Kconfig+2−2
@@ -369,8 +369,8 @@ source "fs/ksmbd/Kconfig" · 368 unmodified lines
369369
370370 config SMBFS_COMMON
371371 tristate
372− default y if CIFS=y
373− default m if CIFS=m
372+ default y if CIFS=y || SMB_SERVER=y
373+ default m if CIFS=m || SMB_SERVER=m
374374
375375 source "fs/coda/Kconfig"
376376 source "fs/afs/Kconfig"
fs/binfmt_misc.c+1−5
@@ -817,20 +817,16 @@ static struct file_system_type bm_fs_type = { · 816 unmodified lines
817817 };
818818 MODULE_ALIAS_FS("binfmt_misc");
819819
820−static struct ctl_table_header *binfmt_misc_header;
821−
822820 static int __init init_misc_binfmt(void)
823821 {
824822 int err = register_filesystem(&bm_fs_type);
825823 if (!err)
826824 insert_binfmt(&misc_format);
827− binfmt_misc_header = register_sysctl_mount_point("fs/binfmt_misc");
828− return 0;
825+ return err;
829826 }
830827
831828 static void __exit exit_misc_binfmt(void)
832829 {
833− unregister_sysctl_table(binfmt_misc_header);
834830 unregister_binfmt(&misc_format);
835831 unregister_filesystem(&bm_fs_type);
836832 }
fs/btrfs/block-group.c+37−2
@@ -124,7 +124,16 @@ void btrfs_put_block_group(struct btrfs_block_group *cache) · 123 unmodified lines
124124 {
125125 if (refcount_dec_and_test(&cache->refs)) {
126126 WARN_ON(cache->pinned > 0);
127− WARN_ON(cache->reserved > 0);
127+ /*
128+ * If there was a failure to cleanup a log tree, very likely due
129+ * to an IO failure on a writeback attempt of one or more of its
130+ * extent buffers, we could not do proper (and cheap) unaccounting
131+ * of their reserved space, so don't warn on reserved > 0 in that
132+ * case.
133+ */
134+ if (!(cache->flags & BTRFS_BLOCK_GROUP_METADATA) ||
135+ !BTRFS_FS_LOG_CLEANUP_ERROR(cache->fs_info))
136+ WARN_ON(cache->reserved > 0);
128137
129138 /*
130139 * A block_group shouldn't be on the discard_list anymore.
@@ -2544,6 +2553,19 @@ int btrfs_inc_block_group_ro(struct btrfs_block_group *cache, · 2413 unmodified lines
25442553 int ret;
25452554 bool dirty_bg_running;
25462555
2556+ /*
2557+ * This can only happen when we are doing read-only scrub on read-only
2558+ * mount.
2559+ * In that case we should not start a new transaction on read-only fs.
2560+ * Thus here we skip all chunk allocations.
2561+ */
2562+ if (sb_rdonly(fs_info->sb)) {
2563+ mutex_lock(&fs_info->ro_block_group_mutex);
2564+ ret = inc_block_group_ro(cache, 0);
2565+ mutex_unlock(&fs_info->ro_block_group_mutex);
2566+ return ret;
2567+ }
2568+
25472569 do {
25482570 trans = btrfs_join_transaction(root);
25492571 if (IS_ERR(trans))
@@ -3974,9 +3996,22 @@ int btrfs_free_block_groups(struct btrfs_fs_info *info) · 1424 unmodified lines
39743996 * important and indicates a real bug if this happens.
39753997 */
39763998 if (WARN_ON(space_info->bytes_pinned > 0 ||
3977− space_info->bytes_reserved > 0 ||
39783999 space_info->bytes_may_use > 0))
39794000 btrfs_dump_space_info(info, space_info, 0, 0);
4001+
4002+ /*
4003+ * If there was a failure to cleanup a log tree, very likely due
4004+ * to an IO failure on a writeback attempt of one or more of its
4005+ * extent buffers, we could not do proper (and cheap) unaccounting
4006+ * of their reserved space, so don't warn on bytes_reserved > 0 in
4007+ * that case.
4008+ */
4009+ if (!(space_info->flags & BTRFS_BLOCK_GROUP_METADATA) ||
4010+ !BTRFS_FS_LOG_CLEANUP_ERROR(info)) {
4011+ if (WARN_ON(space_info->bytes_reserved > 0))
4012+ btrfs_dump_space_info(info, space_info, 0, 0);
4013+ }
4014+
39804015 WARN_ON(space_info->reclaim_size > 0);
39814016 list_del(&space_info->list);
39824017 btrfs_sysfs_remove_space_info(space_info);
fs/btrfs/ctree.h+6−0
@@ -145,6 +145,9 @@ enum { · 144 unmodified lines
145145 BTRFS_FS_STATE_DUMMY_FS_INFO,
146146
147147 BTRFS_FS_STATE_NO_CSUMS,
148+
149+ /* Indicates there was an error cleaning up a log tree. */
150+ BTRFS_FS_STATE_LOG_CLEANUP_ERROR,
148151 };
149152
150153 #define BTRFS_BACKREF_REV_MAX 256
@@ -3593,6 +3596,9 @@ do { \ · 3442 unmodified lines
35933596
35943597 #define BTRFS_FS_ERROR(fs_info) (unlikely(test_bit(BTRFS_FS_STATE_ERROR, \
35953598 &(fs_info)->fs_state)))
3599+#define BTRFS_FS_LOG_CLEANUP_ERROR(fs_info) \
3600+ (unlikely(test_bit(BTRFS_FS_STATE_LOG_CLEANUP_ERROR, \
3601+ &(fs_info)->fs_state)))
35963602
35973603 __printf(5, 6)
35983604 __cold
fs/btrfs/ioctl.c+2−5
@@ -805,10 +805,7 @@ static int create_snapshot(struct btrfs_root *root, struct inode *dir, · 804 unmodified lines
805805 goto fail;
806806 }
807807
808− spin_lock(&fs_info->trans_lock);
809− list_add(&pending_snapshot->list,
810− &trans->transaction->pending_snapshots);
811− spin_unlock(&fs_info->trans_lock);
808+ trans->pending_snapshot = pending_snapshot;
812809
813810 ret = btrfs_commit_transaction(trans);
814811 if (ret)
@@ -3354,7 +3351,7 @@ static long btrfs_ioctl_rm_dev(struct file *file, void __user *arg) · 2539 unmodified lines
33543351 struct block_device *bdev = NULL;
33553352 fmode_t mode;
33563353 int ret;
3357− bool cancel;
3354+ bool cancel = false;
33583355
33593356 if (!capable(CAP_SYS_ADMIN))
33603357 return -EPERM;
fs/btrfs/qgroup.c+19−2
@@ -1185,9 +1185,24 @@ int btrfs_quota_disable(struct btrfs_fs_info *fs_info) · 1184 unmodified lines
11851185 struct btrfs_trans_handle *trans = NULL;
11861186 int ret = 0;
11871187
1188+ /*
1189+ * We need to have subvol_sem write locked, to prevent races between
1190+ * concurrent tasks trying to disable quotas, because we will unlock
1191+ * and relock qgroup_ioctl_lock across BTRFS_FS_QUOTA_ENABLED changes.
1192+ */
1193+ lockdep_assert_held_write(&fs_info->subvol_sem);
1194+
11881195 mutex_lock(&fs_info->qgroup_ioctl_lock);
11891196 if (!fs_info->quota_root)
11901197 goto out;
1198+
1199+ /*
1200+ * Request qgroup rescan worker to complete and wait for it. This wait
1201+ * must be done before transaction start for quota disable since it may
1202+ * deadlock with transaction by the qgroup rescan worker.
1203+ */
1204+ clear_bit(BTRFS_FS_QUOTA_ENABLED, &fs_info->flags);
1205+ btrfs_qgroup_wait_for_completion(fs_info, false);
11911206 mutex_unlock(&fs_info->qgroup_ioctl_lock);
11921207
11931208 /*
@@ -1205,14 +1220,13 @@ int btrfs_quota_disable(struct btrfs_fs_info *fs_info) · 11 unmodified lines
12051220 if (IS_ERR(trans)) {
12061221 ret = PTR_ERR(trans);
12071222 trans = NULL;
1223+ set_bit(BTRFS_FS_QUOTA_ENABLED, &fs_info->flags);
12081224 goto out;
12091225 }
12101226
12111227 if (!fs_info->quota_root)
12121228 goto out;
12131229
1214− clear_bit(BTRFS_FS_QUOTA_ENABLED, &fs_info->flags);
1215− btrfs_qgroup_wait_for_completion(fs_info, false);
12161230 spin_lock(&fs_info->qgroup_lock);
12171231 quota_root = fs_info->quota_root;
12181232 fs_info->quota_root = NULL;
@@ -3383,6 +3397,9 @@ qgroup_rescan_init(struct btrfs_fs_info *fs_info, u64 progress_objectid, · 2164 unmodified lines
33833397 btrfs_warn(fs_info,
33843398 "qgroup rescan init failed, qgroup is not enabled");
33853399 ret = -EINVAL;
3400+ } else if (!test_bit(BTRFS_FS_QUOTA_ENABLED, &fs_info->flags)) {
3401+ /* Quota disable is in progress */
3402+ ret = -EBUSY;
33863403 }
33873404
33883405 if (ret) {
fs/btrfs/transaction.c+24−0
@@ -2000,6 +2000,27 @@ static inline void btrfs_wait_delalloc_flush(struct btrfs_fs_info *fs_info) · 1999 unmodified lines
20002000 btrfs_wait_ordered_roots(fs_info, U64_MAX, 0, (u64)-1);
20012001 }
20022002
2003+/*
2004+ * Add a pending snapshot associated with the given transaction handle to the
2005+ * respective handle. This must be called after the transaction commit started
2006+ * and while holding fs_info->trans_lock.
2007+ * This serves to guarantee a caller of btrfs_commit_transaction() that it can
2008+ * safely free the pending snapshot pointer in case btrfs_commit_transaction()
2009+ * returns an error.
2010+ */
2011+static void add_pending_snapshot(struct btrfs_trans_handle *trans)
2012+{
2013+ struct btrfs_transaction *cur_trans = trans->transaction;
2014+
2015+ if (!trans->pending_snapshot)
2016+ return;
2017+
2018+ lockdep_assert_held(&trans->fs_info->trans_lock);
2019+ ASSERT(cur_trans->state >= TRANS_STATE_COMMIT_START);
2020+
2021+ list_add(&trans->pending_snapshot->list, &cur_trans->pending_snapshots);
2022+}
2023+
20032024 int btrfs_commit_transaction(struct btrfs_trans_handle *trans)
20042025 {
20052026 struct btrfs_fs_info *fs_info = trans->fs_info;
@@ -2073,6 +2094,8 @@ int btrfs_commit_transaction(struct btrfs_trans_handle *trans) · 67 unmodified lines
20732094 if (cur_trans->state >= TRANS_STATE_COMMIT_START) {
20742095 enum btrfs_trans_state want_state = TRANS_STATE_COMPLETED;
20752096
2097+ add_pending_snapshot(trans);
2098+
20762099 spin_unlock(&fs_info->trans_lock);
20772100 refcount_inc(&cur_trans->use_count);
20782101
@@ -2163,6 +2186,7 @@ int btrfs_commit_transaction(struct btrfs_trans_handle *trans) · 84 unmodified lines
21632186 * COMMIT_DOING so make sure to wait for num_writers to == 1 again.
21642187 */
21652188 spin_lock(&fs_info->trans_lock);
2189+ add_pending_snapshot(trans);
21662190 cur_trans->state = TRANS_STATE_COMMIT_DOING;
21672191 spin_unlock(&fs_info->trans_lock);
21682192 wait_event(cur_trans->writer_wait,
fs/btrfs/transaction.h+2−0
@@ -123,6 +123,8 @@ struct btrfs_trans_handle { · 122 unmodified lines
123123 struct btrfs_transaction *transaction;
124124 struct btrfs_block_rsv *block_rsv;
125125 struct btrfs_block_rsv *orig_rsv;
126+ /* Set by a task that wants to create a snapshot. */
127+ struct btrfs_pending_snapshot *pending_snapshot;
126128 refcount_t use_count;
127129 unsigned int type;
128130 /*
fs/btrfs/tree-checker.c+15−0
@@ -965,6 +965,7 @@ static int check_dev_item(struct extent_buffer *leaf, · 964 unmodified lines
965965 struct btrfs_key *key, int slot)
966966 {
967967 struct btrfs_dev_item *ditem;
968+ const u32 item_size = btrfs_item_size(leaf, slot);
968969
969970 if (unlikely(key->objectid != BTRFS_DEV_ITEMS_OBJECTID)) {
970971 dev_item_err(leaf, slot,
@@ -972,6 +973,13 @@ static int check_dev_item(struct extent_buffer *leaf, · 1 unmodified line
972973 key->objectid, BTRFS_DEV_ITEMS_OBJECTID);
973974 return -EUCLEAN;
974975 }
976+
977+ if (unlikely(item_size != sizeof(*ditem))) {
978+ dev_item_err(leaf, slot, "invalid item size: has %u expect %zu",
979+ item_size, sizeof(*ditem));
980+ return -EUCLEAN;
981+ }
982+
975983 ditem = btrfs_item_ptr(leaf, slot, struct btrfs_dev_item);
976984 if (unlikely(btrfs_device_id(leaf, ditem) != key->offset)) {
977985 dev_item_err(leaf, slot,
@@ -1007,6 +1015,7 @@ static int check_inode_item(struct extent_buffer *leaf, · 29 unmodified lines
10071015 struct btrfs_inode_item *iitem;
10081016 u64 super_gen = btrfs_super_generation(fs_info->super_copy);
10091017 u32 valid_mask = (S_IFMT | S_ISUID | S_ISGID | S_ISVTX | 0777);
1018+ const u32 item_size = btrfs_item_size(leaf, slot);
10101019 u32 mode;
10111020 int ret;
10121021 u32 flags;
@@ -1016,6 +1025,12 @@ static int check_inode_item(struct extent_buffer *leaf, · 3 unmodified lines
10161025 if (unlikely(ret < 0))
10171026 return ret;
10181027
1028+ if (unlikely(item_size != sizeof(*iitem))) {
1029+ generic_err(leaf, slot, "invalid item size: has %u expect %zu",
1030+ item_size, sizeof(*iitem));
1031+ return -EUCLEAN;
1032+ }
1033+
10191034 iitem = btrfs_item_ptr(leaf, slot, struct btrfs_inode_item);
10201035
10211036 /* Here we use super block generation + 1 to handle log tree */
fs/btrfs/tree-log.c+23−0
@@ -3414,6 +3414,29 @@ static void free_log_tree(struct btrfs_trans_handle *trans, · 3413 unmodified lines
34143414 if (log->node) {
34153415 ret = walk_log_tree(trans, log, &wc);
34163416 if (ret) {
3417+ /*
3418+ * We weren't able to traverse the entire log tree, the
3419+ * typical scenario is getting an -EIO when reading an
3420+ * extent buffer of the tree, due to a previous writeback
3421+ * failure of it.
3422+ */
3423+ set_bit(BTRFS_FS_STATE_LOG_CLEANUP_ERROR,
3424+ &log->fs_info->fs_state);
3425+
3426+ /*
3427+ * Some extent buffers of the log tree may still be dirty
3428+ * and not yet written back to storage, because we may
3429+ * have updates to a log tree without syncing a log tree,
3430+ * such as during rename and link operations. So flush
3431+ * them out and wait for their writeback to complete, so
3432+ * that we properly cleanup their state and pages.
3433+ */
3434+ btrfs_write_marked_extents(log->fs_info,
3435+ &log->dirty_log_pages,
3436+ EXTENT_DIRTY | EXTENT_NEW);
3437+ btrfs_wait_tree_log_extents(log,
3438+ EXTENT_DIRTY | EXTENT_NEW);
3439+
34173440 if (trans)
34183441 btrfs_abort_transaction(trans, ret);
34193442 else
fs/cachefiles/io.c+59−0
@@ -191,6 +191,64 @@ presubmission_error: · 190 unmodified lines
191191 return ret;
192192 }
193193
194+/*
195+ * Query the occupancy of the cache in a region, returning where the next chunk
196+ * of data starts and how long it is.
197+ */
198+static int cachefiles_query_occupancy(struct netfs_cache_resources *cres,
199+ loff_t start, size_t len, size_t granularity,
200+ loff_t *_data_start, size_t *_data_len)
201+{
202+ struct cachefiles_object *object;
203+ struct file *file;
204+ loff_t off, off2;
205+
206+ *_data_start = -1;
207+ *_data_len = 0;
208+
209+ if (!fscache_wait_for_operation(cres, FSCACHE_WANT_READ))
210+ return -ENOBUFS;
211+
212+ object = cachefiles_cres_object(cres);
213+ file = cachefiles_cres_file(cres);
214+ granularity = max_t(size_t, object->volume->cache->bsize, granularity);
215+
216+ _enter("%pD,%li,%llx,%zx/%llx",
217+ file, file_inode(file)->i_ino, start, len,
218+ i_size_read(file_inode(file)));
219+
220+ off = cachefiles_inject_read_error();
221+ if (off == 0)
222+ off = vfs_llseek(file, start, SEEK_DATA);
223+ if (off == -ENXIO)
224+ return -ENODATA; /* Beyond EOF */
225+ if (off < 0 && off >= (loff_t)-MAX_ERRNO)
226+ return -ENOBUFS; /* Error. */
227+ if (round_up(off, granularity) >= start + len)
228+ return -ENODATA; /* No data in range */
229+
230+ off2 = cachefiles_inject_read_error();
231+ if (off2 == 0)
232+ off2 = vfs_llseek(file, off, SEEK_HOLE);
233+ if (off2 == -ENXIO)
234+ return -ENODATA; /* Beyond EOF */
235+ if (off2 < 0 && off2 >= (loff_t)-MAX_ERRNO)
236+ return -ENOBUFS; /* Error. */
237+
238+ /* Round away partial blocks */
239+ off = round_up(off, granularity);
240+ off2 = round_down(off2, granularity);
241+ if (off2 <= off)
242+ return -ENODATA;
243+
244+ *_data_start = off;
245+ if (off2 > start + len)
246+ *_data_len = len;
247+ else
248+ *_data_len = off2 - off;
249+ return 0;
250+}
251+
194252 /*
195253 * Handle completion of a write to the cache.
196254 */
@@ -545,6 +603,7 @@ static const struct netfs_cache_ops cachefiles_netfs_cache_ops = { · 348 unmodified lines
545603 .write = cachefiles_write,
546604 .prepare_read = cachefiles_prepare_read,
547605 .prepare_write = cachefiles_prepare_write,
606+ .query_occupancy = cachefiles_query_occupancy,
548607 };
549608
550609 /*
fs/cifs/connect.c+16−7
@@ -162,7 +162,7 @@ static void cifs_resolve_server(struct work_struct *work) · 161 unmodified lines
162162 mutex_unlock(&server->srv_mutex);
163163 }
164164
165−/**
165+/*
166166 * Mark all sessions and tcons for reconnect.
167167 *
168168 * @server needs to be previously set to CifsNeedReconnect.
@@ -1831,13 +1831,9 @@ void cifs_put_smb_ses(struct cifs_ses *ses) · 1662 unmodified lines
18311831 int i;
18321832
18331833 for (i = 1; i < chan_count; i++) {
1834− /*
1835− * note: for now, we're okay accessing ses->chans
1836− * without chan_lock. But when chans can go away, we'll
1837− * need to introduce ref counting to make sure that chan
1838− * is not freed from under us.
1839− */
1834+ spin_unlock(&ses->chan_lock);
18401835 cifs_put_tcp_session(ses->chans[i].server, 0);
1836+ spin_lock(&ses->chan_lock);
18411837 ses->chans[i].server = NULL;
18421838 }
18431839 }
@@ -1981,6 +1977,19 @@ cifs_set_cifscreds(struct smb3_fs_context *ctx, struct cifs_ses *ses) · 137 unmodified lines
19811977 }
19821978 }
19831979
1980+ ctx->workstation_name = kstrdup(ses->workstation_name, GFP_KERNEL);
1981+ if (!ctx->workstation_name) {
1982+ cifs_dbg(FYI, "Unable to allocate memory for workstation_name\n");
1983+ rc = -ENOMEM;
1984+ kfree(ctx->username);
1985+ ctx->username = NULL;
1986+ kfree_sensitive(ctx->password);
1987+ ctx->password = NULL;
1988+ kfree(ctx->domainname);
1989+ ctx->domainname = NULL;
1990+ goto out_key_put;
1991+ }
1992+
19841993 out_key_put:
19851994 up_read(&key->sem);
19861995 key_put(key);
fs/cifs/file.c+82−139
@@ -4269,8 +4269,6 @@ cifs_readv_complete(struct work_struct *work) · 4268 unmodified lines
42694269 for (i = 0; i < rdata->nr_pages; i++) {
42704270 struct page *page = rdata->pages[i];
42714271
4272− lru_cache_add(page);
4273−
42744272 if (rdata->result == 0 ||
42754273 (rdata->result == -EAGAIN && got_bytes)) {
42764274 flush_dcache_page(page);
@@ -4278,12 +4276,12 @@ cifs_readv_complete(struct work_struct *work) · 1 unmodified line
42784276 } else
42794277 SetPageError(page);
42804278
4281− unlock_page(page);
4282−
42834279 if (rdata->result == 0 ||
42844280 (rdata->result == -EAGAIN && got_bytes))
42854281 cifs_readpage_to_fscache(rdata->mapping->host, page);
42864282
4283+ unlock_page(page);
4284+
42874285 got_bytes -= min_t(unsigned int, PAGE_SIZE, got_bytes);
42884286
42894287 put_page(page);
@@ -4340,7 +4338,6 @@ readpages_fill_pages(struct TCP_Server_Info *server, · 50 unmodified lines
43404338 * fill them until the writes are flushed.
43414339 */
43424340 zero_user(page, 0, PAGE_SIZE);
4343− lru_cache_add(page);
43444341 flush_dcache_page(page);
43454342 SetPageUptodate(page);
43464343 unlock_page(page);
@@ -4350,7 +4347,6 @@ readpages_fill_pages(struct TCP_Server_Info *server, · 3 unmodified lines
43504347 continue;
43514348 } else {
43524349 /* no need to hold page hostage */
4353− lru_cache_add(page);
43544350 unlock_page(page);
43554351 put_page(page);
43564352 rdata->pages[i] = NULL;
@@ -4393,92 +4389,20 @@ cifs_readpages_copy_into_pages(struct TCP_Server_Info *server, · 36 unmodified lines
43934389 return readpages_fill_pages(server, rdata, iter, iter->count);
43944390 }
43954391
4396−static int
4397−readpages_get_pages(struct address_space *mapping, struct list_head *page_list,
4398− unsigned int rsize, struct list_head *tmplist,
4399− unsigned int *nr_pages, loff_t *offset, unsigned int *bytes)
4400−{
4401− struct page *page, *tpage;
4402− unsigned int expected_index;
4403− int rc;
4404− gfp_t gfp = readahead_gfp_mask(mapping);
4405−
4406− INIT_LIST_HEAD(tmplist);
4407−
4408− page = lru_to_page(page_list);
4409−
4410− /*
4411− * Lock the page and put it in the cache. Since no one else
4412− * should have access to this page, we're safe to simply set
4413− * PG_locked without checking it first.
4414− */
4415− __SetPageLocked(page);
4416− rc = add_to_page_cache_locked(page, mapping,
4417− page->index, gfp);
4418−
4419− /* give up if we can't stick it in the cache */
4420− if (rc) {
4421− __ClearPageLocked(page);
4422− return rc;
4423− }
4424−
4425− /* move first page to the tmplist */
4426− *offset = (loff_t)page->index << PAGE_SHIFT;
4427− *bytes = PAGE_SIZE;
4428− *nr_pages = 1;
4429− list_move_tail(&page->lru, tmplist);
4430−
4431− /* now try and add more pages onto the request */
4432− expected_index = page->index + 1;
4433− list_for_each_entry_safe_reverse(page, tpage, page_list, lru) {
4434− /* discontinuity ? */
4435− if (page->index != expected_index)
4436− break;
4437−
4438− /* would this page push the read over the rsize? */
4439− if (*bytes + PAGE_SIZE > rsize)
4440− break;
4441−
4442− __SetPageLocked(page);
4443− rc = add_to_page_cache_locked(page, mapping, page->index, gfp);
4444− if (rc) {
4445− __ClearPageLocked(page);
4446− break;
4447− }
4448− list_move_tail(&page->lru, tmplist);
4449− (*bytes) += PAGE_SIZE;
4450− expected_index++;
4451− (*nr_pages)++;
4452− }
4453− return rc;
4454−}
4455−
4456−static int cifs_readpages(struct file *file, struct address_space *mapping,
4457− struct list_head *page_list, unsigned num_pages)
4392+static void cifs_readahead(struct readahead_control *ractl)
44584393 {
44594394 int rc;
4460− int err = 0;
4461− struct list_head tmplist;
4462− struct cifsFileInfo *open_file = file->private_data;
4463− struct cifs_sb_info *cifs_sb = CIFS_FILE_SB(file);
4395+ struct cifsFileInfo *open_file = ractl->file->private_data;
4396+ struct cifs_sb_info *cifs_sb = CIFS_FILE_SB(ractl->file);
44644397 struct TCP_Server_Info *server;
44654398 pid_t pid;
4466− unsigned int xid;
4399+ unsigned int xid, nr_pages, last_batch_size = 0, cache_nr_pages = 0;
4400+ pgoff_t next_cached = ULONG_MAX;
4401+ bool caching = fscache_cookie_enabled(cifs_inode_cookie(ractl->mapping->host)) &&
4402+ cifs_inode_cookie(ractl->mapping->host)->cache_priv;
4403+ bool check_cache = caching;
44674404
44684405 xid = get_xid();
4469− /*
4470− * Reads as many pages as possible from fscache. Returns -ENOBUFS
4471− * immediately if the cookie is negative
4472− *
4473− * After this point, every page in the list might have PG_fscache set,
4474− * so we will need to clean that up off of every page we don't use.
4475− */
4476− rc = cifs_readpages_from_fscache(mapping->host, mapping, page_list,
4477− &num_pages);
4478− if (rc == 0) {
4479− free_xid(xid);
4480− return rc;
4481− }
44824406
44834407 if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_RWPIDFORWARD)
44844408 pid = open_file->pid;
@@ -4489,39 +4413,73 @@ static int cifs_readpages(struct file *file, struct address_space *mapping, · 4 unmodified lines
44894413 server = cifs_pick_channel(tlink_tcon(open_file->tlink)->ses);
44904414
44914415 cifs_dbg(FYI, "%s: file=%p mapping=%p num_pages=%u\n",
4492− __func__, file, mapping, num_pages);
4416+ __func__, ractl->file, ractl->mapping, readahead_count(ractl));
44934417
44944418 /*
4495− * Start with the page at end of list and move it to private
4496− * list. Do the same with any following pages until we hit
4497− * the rsize limit, hit an index discontinuity, or run out of
4498− * pages. Issue the async read and then start the loop again
4499− * until the list is empty.
4500− *
4501− * Note that list order is important. The page_list is in
4502− * the order of declining indexes. When we put the pages in
4503− * the rdata->pages, then we want them in increasing order.
4419+ * Chop the readahead request up into rsize-sized read requests.
45044420 */
4505− while (!list_empty(page_list) && !err) {
4506− unsigned int i, nr_pages, bytes, rsize;
4507− loff_t offset;
4508− struct page *page, *tpage;
4421+ while ((nr_pages = readahead_count(ractl) - last_batch_size)) {
4422+ unsigned int i, got, rsize;
4423+ struct page *page;
45094424 struct cifs_readdata *rdata;
45104425 struct cifs_credits credits_on_stack;
45114426 struct cifs_credits *credits = &credits_on_stack;
4427+ pgoff_t index = readahead_index(ractl) + last_batch_size;
4428+
4429+ /*
4430+ * Find out if we have anything cached in the range of
4431+ * interest, and if so, where the next chunk of cached data is.
4432+ */
4433+ if (caching) {
4434+ if (check_cache) {
4435+ rc = cifs_fscache_query_occupancy(
4436+ ractl->mapping->host, index, nr_pages,
4437+ &next_cached, &cache_nr_pages);
4438+ if (rc < 0)
4439+ caching = false;
4440+ check_cache = false;
4441+ }
4442+
4443+ if (index == next_cached) {
4444+ /*
4445+ * TODO: Send a whole batch of pages to be read
4446+ * by the cache.
4447+ */
4448+ page = readahead_page(ractl);
4449+ last_batch_size = 1 << thp_order(page);
4450+ if (cifs_readpage_from_fscache(ractl->mapping->host,
4451+ page) < 0) {
4452+ /*
4453+ * TODO: Deal with cache read failure
4454+ * here, but for the moment, delegate
4455+ * that to readpage.
4456+ */
4457+ caching = false;
4458+ }
4459+ unlock_page(page);
4460+ next_cached++;
4461+ cache_nr_pages--;
4462+ if (cache_nr_pages == 0)
4463+ check_cache = true;
4464+ continue;
4465+ }
4466+ }
45124467
45134468 if (open_file->invalidHandle) {
45144469 rc = cifs_reopen_file(open_file, true);
4515− if (rc == -EAGAIN)
4516− continue;
4517− else if (rc)
4470+ if (rc) {
4471+ if (rc == -EAGAIN)
4472+ continue;
45184473 break;
4474+ }
45194475 }
45204476
45214477 rc = server->ops->wait_mtu_credits(server, cifs_sb->ctx->rsize,
45224478 &rsize, credits);
45234479 if (rc)
45244480 break;
4481+ nr_pages = min_t(size_t, rsize / PAGE_SIZE, readahead_count(ractl));
4482+ nr_pages = min_t(size_t, nr_pages, next_cached - index);
45254483
45264484 /*
45274485 * Give up immediately if rsize is too small to read an entire
@@ -4529,16 +4487,7 @@ static int cifs_readpages(struct file *file, struct address_space *mapping, · 1 unmodified line
45294487 * reach this point however since we set ra_pages to 0 when the
45304488 * rsize is smaller than a cache page.
45314489 */
4532− if (unlikely(rsize < PAGE_SIZE)) {
4533− add_credits_and_wake_if(server, credits, 0);
4534− free_xid(xid);
4535− return 0;
4536− }
4537−
4538− nr_pages = 0;
4539− err = readpages_get_pages(mapping, page_list, rsize, &tmplist,
4540− &nr_pages, &offset, &bytes);
4541− if (!nr_pages) {
4490+ if (unlikely(!nr_pages)) {
45424491 add_credits_and_wake_if(server, credits, 0);
45434492 break;
45444493 }
@@ -4546,36 +4495,31 @@ static int cifs_readpages(struct file *file, struct address_space *mapping, · 1 unmodified line
45464495 rdata = cifs_readdata_alloc(nr_pages, cifs_readv_complete);
45474496 if (!rdata) {
45484497 /* best to give up if we're out of mem */
4549− list_for_each_entry_safe(page, tpage, &tmplist, lru) {
4550− list_del(&page->lru);
4551− lru_cache_add(page);
4552− unlock_page(page);
4553− put_page(page);
4554− }
4555− rc = -ENOMEM;
45564498 add_credits_and_wake_if(server, credits, 0);
45574499 break;
45584500 }
45594501
4560− rdata->cfile = cifsFileInfo_get(open_file);
4561− rdata->server = server;
4562− rdata->mapping = mapping;
4563− rdata->offset = offset;
4564− rdata->bytes = bytes;
4565− rdata->pid = pid;
4566− rdata->pagesz = PAGE_SIZE;
4567− rdata->tailsz = PAGE_SIZE;
4502+ got = __readahead_batch(ractl, rdata->pages, nr_pages);
4503+ if (got != nr_pages) {
4504+ pr_warn("__readahead_batch() returned %u/%u\n",
4505+ got, nr_pages);
4506+ nr_pages = got;
4507+ }
4508+
4509+ rdata->nr_pages = nr_pages;
4510+ rdata->bytes = readahead_batch_length(ractl);
4511+ rdata->cfile = cifsFileInfo_get(open_file);
4512+ rdata->server = server;
4513+ rdata->mapping = ractl->mapping;
4514+ rdata->offset = readahead_pos(ractl);
4515+ rdata->pid = pid;
4516+ rdata->pagesz = PAGE_SIZE;
4517+ rdata->tailsz = PAGE_SIZE;
45684518 rdata->read_into_pages = cifs_readpages_read_into_pages;
45694519 rdata->copy_into_pages = cifs_readpages_copy_into_pages;
4570− rdata->credits = credits_on_stack;
4571−
4572− list_for_each_entry_safe(page, tpage, &tmplist, lru) {
4573− list_del(&page->lru);
4574− rdata->pages[rdata->nr_pages++] = page;
4575− }
4520+ rdata->credits = credits_on_stack;
45764521
45774522 rc = adjust_credits(server, &rdata->credits, rdata->bytes);
4578−
45794523 if (!rc) {
45804524 if (rdata->cfile->invalidHandle)
45814525 rc = -EAGAIN;
@@ -4587,7 +4531,6 @@ static int cifs_readpages(struct file *file, struct address_space *mapping, · 5 unmodified lines
45874531 add_credits_and_wake_if(server, &rdata->credits, 0);
45884532 for (i = 0; i < rdata->nr_pages; i++) {
45894533 page = rdata->pages[i];
4590− lru_cache_add(page);
45914534 unlock_page(page);
45924535 put_page(page);
45934536 }
@@ -4597,10 +4540,10 @@ static int cifs_readpages(struct file *file, struct address_space *mapping, · 3 unmodified lines
45974540 }
45984541
45994542 kref_put(&rdata->refcount, cifs_readdata_release);
4543+ last_batch_size = nr_pages;
46004544 }
46014545
46024546 free_xid(xid);
4603− return rc;
46044547 }
46054548
46064549 /*
@@ -4924,7 +4867,7 @@ oplock_break_done: · 317 unmodified lines
49244867 * In the non-cached mode (mount with cache=none), we shunt off direct read and write requests
49254868 * so this method should never be called.
49264869 *
4927− * Direct IO is not yet supported in the cached mode.
4870+ * Direct IO is not yet supported in the cached mode.
49284871 */
49294872 static ssize_t
49304873 cifs_direct_io(struct kiocb *iocb, struct iov_iter *iter)
@@ -5006,7 +4949,7 @@ static int cifs_set_page_dirty(struct page *page) · 75 unmodified lines
50064949
50074950 const struct address_space_operations cifs_addr_ops = {
50084951 .readpage = cifs_readpage,
5009− .readpages = cifs_readpages,
4952+ .readahead = cifs_readahead,
50104953 .writepage = cifs_writepage,
50114954 .writepages = cifs_writepages,
50124955 .write_begin = cifs_write_begin,
fs/cifs/fscache.c+108−18
@@ -134,37 +134,127 @@ void cifs_fscache_release_inode_cookie(struct inode *inode) · 133 unmodified lines
134134 }
135135 }
136136
137+static inline void fscache_end_operation(struct netfs_cache_resources *cres)
138+{
139+ const struct netfs_cache_ops *ops = fscache_operation_valid(cres);
140+
141+ if (ops)
142+ ops->end_operation(cres);
143+}
144+
137145 /*
138− * Retrieve a page from FS-Cache
146+ * Fallback page reading interface.
139147 */
140−int __cifs_readpage_from_fscache(struct inode *inode, struct page *page)
148+static int fscache_fallback_read_page(struct inode *inode, struct page *page)
141149 {
142− cifs_dbg(FYI, "%s: (fsc:%p, p:%p, i:0x%p\n",
143− __func__, CIFS_I(inode)->fscache, page, inode);
144− return -ENOBUFS; // Needs conversion to using netfslib
150+ struct netfs_cache_resources cres;
151+ struct fscache_cookie *cookie = cifs_inode_cookie(inode);
152+ struct iov_iter iter;
153+ struct bio_vec bvec[1];
154+ int ret;
155+
156+ memset(&cres, 0, sizeof(cres));
157+ bvec[0].bv_page = page;
158+ bvec[0].bv_offset = 0;
159+ bvec[0].bv_len = PAGE_SIZE;
160+ iov_iter_bvec(&iter, READ, bvec, ARRAY_SIZE(bvec), PAGE_SIZE);
161+
162+ ret = fscache_begin_read_operation(&cres, cookie);
163+ if (ret < 0)
164+ return ret;
165+
166+ ret = fscache_read(&cres, page_offset(page), &iter, NETFS_READ_HOLE_FAIL,
167+ NULL, NULL);
168+ fscache_end_operation(&cres);
169+ return ret;
145170 }
146171
147172 /*
148− * Retrieve a set of pages from FS-Cache
173+ * Fallback page writing interface.
149174 */
150−int __cifs_readpages_from_fscache(struct inode *inode,
151− struct address_space *mapping,
152− struct list_head *pages,
153− unsigned *nr_pages)
175+static int fscache_fallback_write_page(struct inode *inode, struct page *page,
176+ bool no_space_allocated_yet)
154177 {
155− cifs_dbg(FYI, "%s: (0x%p/%u/0x%p)\n",
156− __func__, CIFS_I(inode)->fscache, *nr_pages, inode);
157− return -ENOBUFS; // Needs conversion to using netfslib
178+ struct netfs_cache_resources cres;
179+ struct fscache_cookie *cookie = cifs_inode_cookie(inode);
180+ struct iov_iter iter;
181+ struct bio_vec bvec[1];
182+ loff_t start = page_offset(page);
183+ size_t len = PAGE_SIZE;
184+ int ret;
185+
186+ memset(&cres, 0, sizeof(cres));
187+ bvec[0].bv_page = page;
188+ bvec[0].bv_offset = 0;
189+ bvec[0].bv_len = PAGE_SIZE;
190+ iov_iter_bvec(&iter, WRITE, bvec, ARRAY_SIZE(bvec), PAGE_SIZE);
191+
192+ ret = fscache_begin_write_operation(&cres, cookie);
193+ if (ret < 0)
194+ return ret;
195+
196+ ret = cres.ops->prepare_write(&cres, &start, &len, i_size_read(inode),
197+ no_space_allocated_yet);
198+ if (ret == 0)
199+ ret = fscache_write(&cres, page_offset(page), &iter, NULL, NULL);
200+ fscache_end_operation(&cres);
201+ return ret;
158202 }
159203
160−void __cifs_readpage_to_fscache(struct inode *inode, struct page *page)
204+/*
205+ * Retrieve a page from FS-Cache
206+ */
207+int __cifs_readpage_from_fscache(struct inode *inode, struct page *page)
161208 {
162− struct cifsInodeInfo *cifsi = CIFS_I(inode);
209+ int ret;
163210
164− WARN_ON(!cifsi->fscache);
211+ cifs_dbg(FYI, "%s: (fsc:%p, p:%p, i:0x%p\n",
212+ __func__, cifs_inode_cookie(inode), page, inode);
165213
214+ ret = fscache_fallback_read_page(inode, page);
215+ if (ret < 0)
216+ return ret;
217+
218+ /* Read completed synchronously */
219+ SetPageUptodate(page);
220+ return 0;
221+}
222+
223+void __cifs_readpage_to_fscache(struct inode *inode, struct page *page)
224+{
166225 cifs_dbg(FYI, "%s: (fsc: %p, p: %p, i: %p)\n",
167− __func__, cifsi->fscache, page, inode);
226+ __func__, cifs_inode_cookie(inode), page, inode);
227+
228+ fscache_fallback_write_page(inode, page, true);
229+}
230+
231+/*
232+ * Query the cache occupancy.
233+ */
234+int __cifs_fscache_query_occupancy(struct inode *inode,
235+ pgoff_t first, unsigned int nr_pages,
236+ pgoff_t *_data_first,
237+ unsigned int *_data_nr_pages)
238+{
239+ struct netfs_cache_resources cres;
240+ struct fscache_cookie *cookie = cifs_inode_cookie(inode);
241+ loff_t start, data_start;
242+ size_t len, data_len;
243+ int ret;
168244
169− // Needs conversion to using netfslib
245+ ret = fscache_begin_read_operation(&cres, cookie);
246+ if (ret < 0)
247+ return ret;
248+
249+ start = first * PAGE_SIZE;
250+ len = nr_pages * PAGE_SIZE;
251+ ret = cres.ops->query_occupancy(&cres, start, len, PAGE_SIZE,
252+ &data_start, &data_len);
253+ if (ret == 0) {
254+ *_data_first = data_start / PAGE_SIZE;
255+ *_data_nr_pages = len / PAGE_SIZE;
256+ }
257+
258+ fscache_end_operation(&cres);
259+ return ret;
170260 }
fs/cifs/fscache.h+49−30
@@ -9,6 +9,7 @@ · 8 unmodified lines
99 #ifndef _CIFS_FSCACHE_H
1010 #define _CIFS_FSCACHE_H
1111
12+#include <linux/swap.h>
1213 #include <linux/fscache.h>
1314
1415 #include "cifsglob.h"
@@ -58,14 +59,6 @@ void cifs_fscache_fill_coherency(struct inode *inode, · 43 unmodified lines
5859 }
5960
6061
61−extern int cifs_fscache_release_page(struct page *page, gfp_t gfp);
62−extern int __cifs_readpage_from_fscache(struct inode *, struct page *);
63−extern int __cifs_readpages_from_fscache(struct inode *,
64− struct address_space *,
65− struct list_head *,
66− unsigned *);
67−extern void __cifs_readpage_to_fscache(struct inode *, struct page *);
68−
6962 static inline struct fscache_cookie *cifs_inode_cookie(struct inode *inode)
7063 {
7164 return CIFS_I(inode)->fscache;
@@ -80,33 +73,52 @@ static inline void cifs_invalidate_cache(struct inode *inode, unsigned int flags · 8 unmodified lines
8073 i_size_read(inode), flags);
8174 }
8275
83−static inline int cifs_readpage_from_fscache(struct inode *inode,
84− struct page *page)
85−{
86− if (CIFS_I(inode)->fscache)
87− return __cifs_readpage_from_fscache(inode, page);
76+extern int __cifs_fscache_query_occupancy(struct inode *inode,
77+ pgoff_t first, unsigned int nr_pages,
78+ pgoff_t *_data_first,
79+ unsigned int *_data_nr_pages);
8880
89− return -ENOBUFS;
81+static inline int cifs_fscache_query_occupancy(struct inode *inode,
82+ pgoff_t first, unsigned int nr_pages,
83+ pgoff_t *_data_first,
84+ unsigned int *_data_nr_pages)
85+{
86+ if (!cifs_inode_cookie(inode))
87+ return -ENOBUFS;
88+ return __cifs_fscache_query_occupancy(inode, first, nr_pages,
89+ _data_first, _data_nr_pages);
9090 }
9191
92−static inline int cifs_readpages_from_fscache(struct inode *inode,
93− struct address_space *mapping,
94− struct list_head *pages,
95− unsigned *nr_pages)
92+extern int __cifs_readpage_from_fscache(struct inode *pinode, struct page *ppage);
93+extern void __cifs_readpage_to_fscache(struct inode *pinode, struct page *ppage);
94+
95+
96+static inline int cifs_readpage_from_fscache(struct inode *inode,
97+ struct page *page)
9698 {
97− if (CIFS_I(inode)->fscache)
98− return __cifs_readpages_from_fscache(inode, mapping, pages,
99− nr_pages);
99+ if (cifs_inode_cookie(inode))
100+ return __cifs_readpage_from_fscache(inode, page);
100101 return -ENOBUFS;
101102 }
102103
103104 static inline void cifs_readpage_to_fscache(struct inode *inode,
104105 struct page *page)
105106 {
106− if (PageFsCache(page))
107+ if (cifs_inode_cookie(inode))
107108 __cifs_readpage_to_fscache(inode, page);
108109 }
109110
111+static inline int cifs_fscache_release_page(struct page *page, gfp_t gfp)
112+{
113+ if (PageFsCache(page)) {
114+ if (current_is_kswapd() || !(gfp & __GFP_FS))
115+ return false;
116+ wait_on_page_fscache(page);
117+ fscache_note_page_release(cifs_inode_cookie(page->mapping->host));
118+ }
119+ return true;
120+}
121+
110122 #else /* CONFIG_CIFS_FSCACHE */
111123 static inline
112124 void cifs_fscache_fill_coherency(struct inode *inode,
@@ -123,22 +135,29 @@ static inline void cifs_fscache_unuse_inode_cookie(struct inode *inode, bool upd · 10 unmodified lines
123135 static inline struct fscache_cookie *cifs_inode_cookie(struct inode *inode) { return NULL; }
124136 static inline void cifs_invalidate_cache(struct inode *inode, unsigned int flags) {}
125137
126−static inline int
127−cifs_readpage_from_fscache(struct inode *inode, struct page *page)
138+static inline int cifs_fscache_query_occupancy(struct inode *inode,
139+ pgoff_t first, unsigned int nr_pages,
140+ pgoff_t *_data_first,
141+ unsigned int *_data_nr_pages)
128142 {
143+ *_data_first = ULONG_MAX;
144+ *_data_nr_pages = 0;
129145 return -ENOBUFS;
130146 }
131147
132−static inline int cifs_readpages_from_fscache(struct inode *inode,
133− struct address_space *mapping,
134− struct list_head *pages,
135− unsigned *nr_pages)
148+static inline int
149+cifs_readpage_from_fscache(struct inode *inode, struct page *page)
136150 {
137151 return -ENOBUFS;
138152 }
139153
140−static inline void cifs_readpage_to_fscache(struct inode *inode,
141− struct page *page) {}
154+static inline
155+void cifs_readpage_to_fscache(struct inode *inode, struct page *page) {}
156+
157+static inline int nfs_fscache_release_page(struct page *page, gfp_t gfp)
158+{
159+ return true; /* May release page */
160+}
142161
143162 #endif /* CONFIG_CIFS_FSCACHE */
144163
fs/cifs/inode.c+4−4
@@ -83,6 +83,7 @@ static void cifs_set_ops(struct inode *inode) · 82 unmodified lines
8383 static void
8484 cifs_revalidate_cache(struct inode *inode, struct cifs_fattr *fattr)
8585 {
86+ struct cifs_fscache_inode_coherency_data cd;
8687 struct cifsInodeInfo *cifs_i = CIFS_I(inode);
8788
8889 cifs_dbg(FYI, "%s: revalidating inode %llu\n",
@@ -113,6 +114,9 @@ cifs_revalidate_cache(struct inode *inode, struct cifs_fattr *fattr) · 24 unmodified lines
113114 cifs_dbg(FYI, "%s: invalidating inode %llu mapping\n",
114115 __func__, cifs_i->uniqueid);
115116 set_bit(CIFS_INO_INVALID_MAPPING, &cifs_i->flags);
117+ /* Invalidate fscache cookie */
118+ cifs_fscache_fill_coherency(&cifs_i->vfs_inode, &cd);
119+ fscache_invalidate(cifs_inode_cookie(inode), &cd, i_size_read(inode), 0);
116120 }
117121
118122 /*
@@ -2261,8 +2265,6 @@ cifs_dentry_needs_reval(struct dentry *dentry) · 2142 unmodified lines
22612265 int
22622266 cifs_invalidate_mapping(struct inode *inode)
22632267 {
2264− struct cifs_fscache_inode_coherency_data cd;
2265− struct cifsInodeInfo *cifsi = CIFS_I(inode);
22662268 int rc = 0;
22672269
22682270 if (inode->i_mapping && inode->i_mapping->nrpages != 0) {
@@ -2272,8 +2274,6 @@ cifs_invalidate_mapping(struct inode *inode) · 3 unmodified lines
22722274 __func__, inode);
22732275 }
22742276
2275− cifs_fscache_fill_coherency(&cifsi->vfs_inode, &cd);
2276− fscache_invalidate(cifs_inode_cookie(inode), &cd, i_size_read(inode), 0);
22772277 return rc;
22782278 }
22792279
fs/cifs/sess.c+5−1
@@ -713,7 +713,11 @@ static int size_of_ntlmssp_blob(struct cifs_ses *ses, int base_size) · 712 unmodified lines
713713 else
714714 sz += sizeof(__le16);
715715
716− sz += sizeof(__le16) * strnlen(ses->workstation_name, CIFS_MAX_WORKSTATION_LEN);
716+ if (ses->workstation_name)
717+ sz += sizeof(__le16) * strnlen(ses->workstation_name,
718+ CIFS_MAX_WORKSTATION_LEN);
719+ else
720+ sz += sizeof(__le16);
717721
718722 return sz;
719723 }
fs/erofs/data.c+4−4
@@ -252,12 +252,10 @@ static int erofs_iomap_begin(struct inode *inode, loff_t offset, loff_t length, · 251 unmodified lines
252252 return ret;
253253
254254 iomap->offset = map.m_la;
255− if (flags & IOMAP_DAX) {
255+ if (flags & IOMAP_DAX)
256256 iomap->dax_dev = mdev.m_daxdev;
257− iomap->offset += mdev.m_dax_part_off;
258− } else {
257+ else
259258 iomap->bdev = mdev.m_bdev;
260− }
261259 iomap->length = map.m_llen;
262260 iomap->flags = 0;
263261 iomap->private = NULL;
@@ -284,6 +282,8 @@ static int erofs_iomap_begin(struct inode *inode, loff_t offset, loff_t length, · 20 unmodified lines
284282 } else {
285283 iomap->type = IOMAP_MAPPED;
286284 iomap->addr = mdev.m_pa;
285+ if (flags & IOMAP_DAX)
286+ iomap->addr += mdev.m_dax_part_off;
287287 }
288288 return 0;
289289 }
fs/erofs/zdata.c+56−57
@@ -810,68 +810,11 @@ static bool z_erofs_get_sync_decompress_policy(struct erofs_sb_info *sbi, · 809 unmodified lines
810810 return false;
811811 }
812812
813−static void z_erofs_decompressqueue_work(struct work_struct *work);
814−static void z_erofs_decompress_kickoff(struct z_erofs_decompressqueue *io,
815− bool sync, int bios)
816−{
817− struct erofs_sb_info *const sbi = EROFS_SB(io->sb);
818−
819− /* wake up the caller thread for sync decompression */
820− if (sync) {
821− unsigned long flags;
822−
823− spin_lock_irqsave(&io->u.wait.lock, flags);
824− if (!atomic_add_return(bios, &io->pending_bios))
825− wake_up_locked(&io->u.wait);
826− spin_unlock_irqrestore(&io->u.wait.lock, flags);
827− return;
828− }
829−
830− if (atomic_add_return(bios, &io->pending_bios))
831− return;
832− /* Use workqueue and sync decompression for atomic contexts only */
833− if (in_atomic() || irqs_disabled()) {
834− queue_work(z_erofs_workqueue, &io->u.work);
835− /* enable sync decompression for readahead */
836− if (sbi->opt.sync_decompress == EROFS_SYNC_DECOMPRESS_AUTO)
837− sbi->opt.sync_decompress = EROFS_SYNC_DECOMPRESS_FORCE_ON;
838− return;
839− }
840− z_erofs_decompressqueue_work(&io->u.work);
841−}
842−
843813 static bool z_erofs_page_is_invalidated(struct page *page)
844814 {
845815 return !page->mapping && !z_erofs_is_shortlived_page(page);
846816 }
847817
848−static void z_erofs_decompressqueue_endio(struct bio *bio)
849−{
850− tagptr1_t t = tagptr_init(tagptr1_t, bio->bi_private);
851− struct z_erofs_decompressqueue *q = tagptr_unfold_ptr(t);
852− blk_status_t err = bio->bi_status;
853− struct bio_vec *bvec;
854− struct bvec_iter_all iter_all;
855−
856− bio_for_each_segment_all(bvec, bio, iter_all) {
857− struct page *page = bvec->bv_page;
858−
859− DBG_BUGON(PageUptodate(page));
860− DBG_BUGON(z_erofs_page_is_invalidated(page));
861−
862− if (err)
863− SetPageError(page);
864−
865− if (erofs_page_is_managed(EROFS_SB(q->sb), page)) {
866− if (!err)
867− SetPageUptodate(page);
868− unlock_page(page);
869− }
870− }
871− z_erofs_decompress_kickoff(q, tagptr_unfold_tags(t), -1);
872− bio_put(bio);
873−}
874−
875818 static int z_erofs_decompress_pcluster(struct super_block *sb,
876819 struct z_erofs_pcluster *pcl,
877820 struct page **pagepool)
@@ -1123,6 +1066,35 @@ static void z_erofs_decompressqueue_work(struct work_struct *work) · 245 unmodified lines
11231066 kvfree(bgq);
11241067 }
11251068
1069+static void z_erofs_decompress_kickoff(struct z_erofs_decompressqueue *io,
1070+ bool sync, int bios)
1071+{
1072+ struct erofs_sb_info *const sbi = EROFS_SB(io->sb);
1073+
1074+ /* wake up the caller thread for sync decompression */
1075+ if (sync) {
1076+ unsigned long flags;
1077+
1078+ spin_lock_irqsave(&io->u.wait.lock, flags);
1079+ if (!atomic_add_return(bios, &io->pending_bios))
1080+ wake_up_locked(&io->u.wait);
1081+ spin_unlock_irqrestore(&io->u.wait.lock, flags);
1082+ return;
1083+ }
1084+
1085+ if (atomic_add_return(bios, &io->pending_bios))
1086+ return;
1087+ /* Use workqueue and sync decompression for atomic contexts only */
1088+ if (in_atomic() || irqs_disabled()) {
1089+ queue_work(z_erofs_workqueue, &io->u.work);
1090+ /* enable sync decompression for readahead */
1091+ if (sbi->opt.sync_decompress == EROFS_SYNC_DECOMPRESS_AUTO)
1092+ sbi->opt.sync_decompress = EROFS_SYNC_DECOMPRESS_FORCE_ON;
1093+ return;
1094+ }
1095+ z_erofs_decompressqueue_work(&io->u.work);
1096+}
1097+
11261098 static struct page *pickup_page_for_submission(struct z_erofs_pcluster *pcl,
11271099 unsigned int nr,
11281100 struct page **pagepool,
@@ -1300,6 +1272,33 @@ static void move_to_bypass_jobqueue(struct z_erofs_pcluster *pcl, · 171 unmodified lines
13001272 qtail[JQ_BYPASS] = &pcl->next;
13011273 }
13021274
1275+static void z_erofs_decompressqueue_endio(struct bio *bio)
1276+{
1277+ tagptr1_t t = tagptr_init(tagptr1_t, bio->bi_private);
1278+ struct z_erofs_decompressqueue *q = tagptr_unfold_ptr(t);
1279+ blk_status_t err = bio->bi_status;
1280+ struct bio_vec *bvec;
1281+ struct bvec_iter_all iter_all;
1282+
1283+ bio_for_each_segment_all(bvec, bio, iter_all) {
1284+ struct page *page = bvec->bv_page;
1285+
1286+ DBG_BUGON(PageUptodate(page));
1287+ DBG_BUGON(z_erofs_page_is_invalidated(page));
1288+
1289+ if (err)
1290+ SetPageError(page);
1291+
1292+ if (erofs_page_is_managed(EROFS_SB(q->sb), page)) {
1293+ if (!err)
1294+ SetPageUptodate(page);
1295+ unlock_page(page);
1296+ }
1297+ }
1298+ z_erofs_decompress_kickoff(q, tagptr_unfold_tags(t), -1);
1299+ bio_put(bio);
1300+}
1301+
13031302 static void z_erofs_submit_queue(struct super_block *sb,
13041303 struct z_erofs_decompress_frontend *f,
13051304 struct page **pagepool,
fs/erofs/zmap.c+7−0
@@ -630,6 +630,13 @@ static int z_erofs_do_map_blocks(struct inode *inode, · 629 unmodified lines
630630 if (endoff >= m.clusterofs) {
631631 m.headtype = m.type;
632632 map->m_la = (m.lcn << lclusterbits) | m.clusterofs;
633+ /*
634+ * For ztailpacking files, in order to inline data more
635+ * effectively, special EOF lclusters are now supported
636+ * which can have three parts at most.
637+ */
638+ if (ztailpacking && end > inode->i_size)
639+ end = inode->i_size;
633640 break;
634641 }
635642 /* m.lcn should be >= 1 if endoff < m.clusterofs */
fs/ext4/acl.c+4−4
@@ -139,7 +139,7 @@ fail: · 138 unmodified lines
139139 /*
140140 * Inode operation get_posix_acl().
141141 *
142− * inode->i_mutex: don't care
142+ * inode->i_rwsem: don't care
143143 */
144144 struct posix_acl *
145145 ext4_get_acl(struct inode *inode, int type, bool rcu)
@@ -183,7 +183,7 @@ ext4_get_acl(struct inode *inode, int type, bool rcu) · 37 unmodified lines
183183 /*
184184 * Set the access or default ACL of an inode.
185185 *
186− * inode->i_mutex: down unless called from ext4_new_inode
186+ * inode->i_rwsem: down unless called from ext4_new_inode
187187 */
188188 static int
189189 __ext4_set_acl(handle_t *handle, struct inode *inode, int type,
@@ -271,8 +271,8 @@ out_stop: · 81 unmodified lines
271271 /*
272272 * Initialize the ACLs of a new inode. Called from ext4_new_inode.
273273 *
274− * dir->i_mutex: down
275− * inode->i_mutex: up (access to inode is still exclusive)
274+ * dir->i_rwsem: down
275+ * inode->i_rwsem: up (access to inode is still exclusive)
276276 */
277277 int
278278 ext4_init_acl(handle_t *handle, struct inode *inode, struct inode *dir)
fs/ext4/ext4.h+9−8
@@ -1028,7 +1028,7 @@ struct ext4_inode_info { · 1027 unmodified lines
10281028
10291029 /*
10301030 * Extended attributes can be read independently of the main file
1031− * data. Taking i_mutex even when reading would cause contention
1031+ * data. Taking i_rwsem even when reading would cause contention
10321032 * between readers of EAs and writers of regular file data, so
10331033 * instead we synchronize on xattr_sem when reading or changing
10341034 * EAs.
@@ -1750,6 +1750,7 @@ struct ext4_sb_info { · 715 unmodified lines
17501750 spinlock_t s_fc_lock;
17511751 struct buffer_head *s_fc_bh;
17521752 struct ext4_fc_stats s_fc_stats;
1753+ tid_t s_fc_ineligible_tid;
17531754 #ifdef CONFIG_EXT4_DEBUG
17541755 int s_fc_debug_max_replay;
17551756 #endif
@@ -1795,10 +1796,7 @@ static inline int ext4_valid_inum(struct super_block *sb, unsigned long ino) · 39 unmodified lines
17951796 enum {
17961797 EXT4_MF_MNTDIR_SAMPLED,
17971798 EXT4_MF_FS_ABORTED, /* Fatal error detected */
1798− EXT4_MF_FC_INELIGIBLE, /* Fast commit ineligible */
1799− EXT4_MF_FC_COMMITTING /* File system underoing a fast
1800− * commit.
1801− */
1799+ EXT4_MF_FC_INELIGIBLE /* Fast commit ineligible */
18021800 };
18031801
18041802 static inline void ext4_set_mount_flag(struct super_block *sb, int bit)
@@ -2926,7 +2924,7 @@ void __ext4_fc_track_create(handle_t *handle, struct inode *inode, · 1121 unmodified lines
29262924 struct dentry *dentry);
29272925 void ext4_fc_track_create(handle_t *handle, struct dentry *dentry);
29282926 void ext4_fc_track_inode(handle_t *handle, struct inode *inode);
2929−void ext4_fc_mark_ineligible(struct super_block *sb, int reason);
2927+void ext4_fc_mark_ineligible(struct super_block *sb, int reason, handle_t *handle);
29302928 void ext4_fc_start_update(struct inode *inode);
29312929 void ext4_fc_stop_update(struct inode *inode);
29322930 void ext4_fc_del(struct inode *inode);
@@ -2935,6 +2933,9 @@ void ext4_fc_replay_cleanup(struct super_block *sb); · 2 unmodified lines
29352933 int ext4_fc_commit(journal_t *journal, tid_t commit_tid);
29362934 int __init ext4_fc_init_dentry_cache(void);
29372935 void ext4_fc_destroy_dentry_cache(void);
2936+int ext4_fc_record_regions(struct super_block *sb, int ino,
2937+ ext4_lblk_t lblk, ext4_fsblk_t pblk,
2938+ int len, int replay);
29382939
29392940 /* mballoc.c */
29402941 extern const struct seq_operations ext4_mb_seq_groups_ops;
@@ -3407,7 +3408,7 @@ do { \ · 466 unmodified lines
34073408 #define EXT4_FREECLUSTERS_WATERMARK 0
34083409 #endif
34093410
3410−/* Update i_disksize. Requires i_mutex to avoid races with truncate */
3411+/* Update i_disksize. Requires i_rwsem to avoid races with truncate */
34113412 static inline void ext4_update_i_disksize(struct inode *inode, loff_t newsize)
34123413 {
34133414 WARN_ON_ONCE(S_ISREG(inode->i_mode) &&
@@ -3418,7 +3419,7 @@ static inline void ext4_update_i_disksize(struct inode *inode, loff_t newsize) · 4 unmodified lines
34183419 up_write(&EXT4_I(inode)->i_data_sem);
34193420 }
34203421
3421−/* Update i_size, i_disksize. Requires i_mutex to avoid races with truncate */
3422+/* Update i_size, i_disksize. Requires i_rwsem to avoid races with truncate */
34223423 static inline int ext4_update_inode_size(struct inode *inode, loff_t newsize)
34233424 {
34243425 int changed = 0;
fs/ext4/ext4_jbd2.h+1−1
@@ -491,7 +491,7 @@ static inline int ext4_free_data_revoke_credits(struct inode *inode, int blocks) · 490 unmodified lines
491491 /*
492492 * This function controls whether or not we should try to go down the
493493 * dioread_nolock code paths, which makes it safe to avoid taking
494− * i_mutex for direct I/O reads. This only works for extent-based
494+ * i_rwsem for direct I/O reads. This only works for extent-based
495495 * files, and it doesn't work if data journaling is enabled, since the
496496 * dioread_nolock code uses b_private to pass information back to the
497497 * I/O completion handler, and this conflicts with the jbd's use of
fs/ext4/extents.c+10−6
@@ -97,7 +97,7 @@ static int ext4_ext_trunc_restart_fn(struct inode *inode, int *dropped) · 96 unmodified lines
9797 * Drop i_data_sem to avoid deadlock with ext4_map_blocks. At this
9898 * moment, get_block can be called only for blocks inside i_size since
9999 * page cache has been already dropped and writes are blocked by
100− * i_mutex. So we can safely drop the i_data_sem here.
100+ * i_rwsem. So we can safely drop the i_data_sem here.
101101 */
102102 BUG_ON(EXT4_JOURNAL(inode) == NULL);
103103 ext4_discard_preallocations(inode, 0);
@@ -4572,7 +4572,7 @@ static long ext4_zero_range(struct file *file, loff_t offset, · 4468 unmodified lines
45724572
45734573 flags = EXT4_GET_BLOCKS_CREATE_UNWRIT_EXT;
45744574
4575− /* Wait all existing dio workers, newcomers will block on i_mutex */
4575+ /* Wait all existing dio workers, newcomers will block on i_rwsem */
45764576 inode_dio_wait(inode);
45774577
45784578 /* Preallocate the range including the unaligned edges */
@@ -4738,7 +4738,7 @@ long ext4_fallocate(struct file *file, int mode, loff_t offset, loff_t len) · 159 unmodified lines
47384738 goto out;
47394739 }
47404740
4741− /* Wait all existing dio workers, newcomers will block on i_mutex */
4741+ /* Wait all existing dio workers, newcomers will block on i_rwsem */
47424742 inode_dio_wait(inode);
47434743
47444744 ret = ext4_alloc_file_blocks(file, lblk, max_blocks, new_size, flags);
@@ -5334,7 +5334,7 @@ static int ext4_collapse_range(struct inode *inode, loff_t offset, loff_t len) · 589 unmodified lines
53345334 ret = PTR_ERR(handle);
53355335 goto out_mmap;
53365336 }
5337− ext4_fc_mark_ineligible(sb, EXT4_FC_REASON_FALLOC_RANGE);
5337+ ext4_fc_mark_ineligible(sb, EXT4_FC_REASON_FALLOC_RANGE, handle);
53385338
53395339 down_write(&EXT4_I(inode)->i_data_sem);
53405340 ext4_discard_preallocations(inode, 0);
@@ -5474,7 +5474,7 @@ static int ext4_insert_range(struct inode *inode, loff_t offset, loff_t len) · 133 unmodified lines
54745474 ret = PTR_ERR(handle);
54755475 goto out_mmap;
54765476 }
5477− ext4_fc_mark_ineligible(sb, EXT4_FC_REASON_FALLOC_RANGE);
5477+ ext4_fc_mark_ineligible(sb, EXT4_FC_REASON_FALLOC_RANGE, handle);
54785478
54795479 /* Expand file to avoid data loss if there is error while shifting */
54805480 inode->i_size += len;
@@ -5571,7 +5571,7 @@ out_mutex: · 90 unmodified lines
55715571 * stuff such as page-cache locking consistency, bh mapping consistency or
55725572 * extent's data copying must be performed by caller.
55735573 * Locking:
5574− * i_mutex is held for both inodes
5574+ * i_rwsem is held for both inodes
55755575 * i_data_sem is locked for write for both inodes
55765576 * Assumptions:
55775577 * All pages from requested range are locked for both inodes
@@ -6091,11 +6091,15 @@ int ext4_ext_clear_bb(struct inode *inode) · 513 unmodified lines
60916091
60926092 ext4_mb_mark_bb(inode->i_sb,
60936093 path[j].p_block, 1, 0);
6094+ ext4_fc_record_regions(inode->i_sb, inode->i_ino,
6095+ 0, path[j].p_block, 1, 1);
60946096 }
60956097 ext4_ext_drop_refs(path);
60966098 kfree(path);
60976099 }
60986100 ext4_mb_mark_bb(inode->i_sb, map.m_pblk, map.m_len, 0);
6101+ ext4_fc_record_regions(inode->i_sb, inode->i_ino,
6102+ map.m_lblk, map.m_pblk, map.m_len, 1);
60996103 }
61006104 cur = cur + map.m_len;
61016105 }
fs/ext4/fast_commit.c+78−55
@@ -300,18 +300,32 @@ restart: · 299 unmodified lines
300300 }
301301
302302 /*
303− * Mark file system as fast commit ineligible. This means that next commit
304− * operation would result in a full jbd2 commit.
303+ * Mark file system as fast commit ineligible, and record latest
304+ * ineligible transaction tid. This means until the recorded
305+ * transaction, commit operation would result in a full jbd2 commit.
305306 */
306−void ext4_fc_mark_ineligible(struct super_block *sb, int reason)
307+void ext4_fc_mark_ineligible(struct super_block *sb, int reason, handle_t *handle)
307308 {
308309 struct ext4_sb_info *sbi = EXT4_SB(sb);
310+ tid_t tid;
309311
310312 if (!test_opt2(sb, JOURNAL_FAST_COMMIT) ||
311313 (EXT4_SB(sb)->s_mount_state & EXT4_FC_REPLAY))
312314 return;
313315
314316 ext4_set_mount_flag(sb, EXT4_MF_FC_INELIGIBLE);
317+ if (handle && !IS_ERR(handle))
318+ tid = handle->h_transaction->t_tid;
319+ else {
320+ read_lock(&sbi->s_journal->j_state_lock);
321+ tid = sbi->s_journal->j_running_transaction ?
322+ sbi->s_journal->j_running_transaction->t_tid : 0;
323+ read_unlock(&sbi->s_journal->j_state_lock);
324+ }
325+ spin_lock(&sbi->s_fc_lock);
326+ if (sbi->s_fc_ineligible_tid < tid)
327+ sbi->s_fc_ineligible_tid = tid;
328+ spin_unlock(&sbi->s_fc_lock);
315329 WARN_ON(reason >= EXT4_FC_REASON_MAX);
316330 sbi->s_fc_stats.fc_ineligible_reason_count[reason]++;
317331 }
@@ -361,7 +375,8 @@ static int ext4_fc_track_template( · 43 unmodified lines
361375 spin_lock(&sbi->s_fc_lock);
362376 if (list_empty(&EXT4_I(inode)->i_fc_list))
363377 list_add_tail(&EXT4_I(inode)->i_fc_list,
364− (ext4_test_mount_flag(inode->i_sb, EXT4_MF_FC_COMMITTING)) ?
378+ (sbi->s_journal->j_flags & JBD2_FULL_COMMIT_ONGOING ||
379+ sbi->s_journal->j_flags & JBD2_FAST_COMMIT_ONGOING) ?
365380 &sbi->s_fc_q[FC_Q_STAGING] :
366381 &sbi->s_fc_q[FC_Q_MAIN]);
367382 spin_unlock(&sbi->s_fc_lock);
@@ -387,7 +402,7 @@ static int __track_dentry_update(struct inode *inode, void *arg, bool update) · 19 unmodified lines
387402 mutex_unlock(&ei->i_fc_lock);
388403 node = kmem_cache_alloc(ext4_fc_dentry_cachep, GFP_NOFS);
389404 if (!node) {
390− ext4_fc_mark_ineligible(inode->i_sb, EXT4_FC_REASON_NOMEM);
405+ ext4_fc_mark_ineligible(inode->i_sb, EXT4_FC_REASON_NOMEM, NULL);
391406 mutex_lock(&ei->i_fc_lock);
392407 return -ENOMEM;
393408 }
@@ -400,7 +415,7 @@ static int __track_dentry_update(struct inode *inode, void *arg, bool update) · 6 unmodified lines
400415 if (!node->fcd_name.name) {
401416 kmem_cache_free(ext4_fc_dentry_cachep, node);
402417 ext4_fc_mark_ineligible(inode->i_sb,
403− EXT4_FC_REASON_NOMEM);
418+ EXT4_FC_REASON_NOMEM, NULL);
404419 mutex_lock(&ei->i_fc_lock);
405420 return -ENOMEM;
406421 }
@@ -414,7 +429,8 @@ static int __track_dentry_update(struct inode *inode, void *arg, bool update) · 7 unmodified lines
414429 node->fcd_name.len = dentry->d_name.len;
415430
416431 spin_lock(&sbi->s_fc_lock);
417− if (ext4_test_mount_flag(inode->i_sb, EXT4_MF_FC_COMMITTING))
432+ if (sbi->s_journal->j_flags & JBD2_FULL_COMMIT_ONGOING ||
433+ sbi->s_journal->j_flags & JBD2_FAST_COMMIT_ONGOING)
418434 list_add_tail(&node->fcd_list,
419435 &sbi->s_fc_dentry_q[FC_Q_STAGING]);
420436 else
@@ -502,7 +518,7 @@ void ext4_fc_track_inode(handle_t *handle, struct inode *inode) · 81 unmodified lines
502518
503519 if (ext4_should_journal_data(inode)) {
504520 ext4_fc_mark_ineligible(inode->i_sb,
505− EXT4_FC_REASON_INODE_JOURNAL_DATA);
521+ EXT4_FC_REASON_INODE_JOURNAL_DATA, handle);
506522 return;
507523 }
508524
@@ -879,7 +895,6 @@ static int ext4_fc_submit_inode_data_all(journal_t *journal) · 370 unmodified lines
879895 int ret = 0;
880896
881897 spin_lock(&sbi->s_fc_lock);
882− ext4_set_mount_flag(sb, EXT4_MF_FC_COMMITTING);
883898 list_for_each_entry(ei, &sbi->s_fc_q[FC_Q_MAIN], i_fc_list) {
884899 ext4_set_inode_state(&ei->vfs_inode, EXT4_STATE_FC_COMMITTING);
885900 while (atomic_read(&ei->i_fc_updates)) {
@@ -1179,7 +1194,7 @@ fallback: · 293 unmodified lines
11791194 * Fast commit cleanup routine. This is called after every fast commit and
11801195 * full commit. full is true if we are called after a full commit.
11811196 */
1182−static void ext4_fc_cleanup(journal_t *journal, int full)
1197+static void ext4_fc_cleanup(journal_t *journal, int full, tid_t tid)
11831198 {
11841199 struct super_block *sb = journal->j_private;
11851200 struct ext4_sb_info *sbi = EXT4_SB(sb);
@@ -1197,7 +1212,8 @@ static void ext4_fc_cleanup(journal_t *journal, int full) · 11 unmodified lines
11971212 list_del_init(&iter->i_fc_list);
11981213 ext4_clear_inode_state(&iter->vfs_inode,
11991214 EXT4_STATE_FC_COMMITTING);
1200− ext4_fc_reset_inode(&iter->vfs_inode);
1215+ if (iter->i_sync_tid <= tid)
1216+ ext4_fc_reset_inode(&iter->vfs_inode);
12011217 /* Make sure EXT4_STATE_FC_COMMITTING bit is clear */
12021218 smp_mb();
12031219 #if (BITS_PER_LONG < 64)
@@ -1226,8 +1242,10 @@ static void ext4_fc_cleanup(journal_t *journal, int full) · 22 unmodified lines
12261242 list_splice_init(&sbi->s_fc_q[FC_Q_STAGING],
12271243 &sbi->s_fc_q[FC_Q_MAIN]);
12281244
1229− ext4_clear_mount_flag(sb, EXT4_MF_FC_COMMITTING);
1230− ext4_clear_mount_flag(sb, EXT4_MF_FC_INELIGIBLE);
1245+ if (tid >= sbi->s_fc_ineligible_tid) {
1246+ sbi->s_fc_ineligible_tid = 0;
1247+ ext4_clear_mount_flag(sb, EXT4_MF_FC_INELIGIBLE);
1248+ }
12311249
12321250 if (full)
12331251 sbi->s_fc_bytes = 0;
@@ -1392,14 +1410,15 @@ static int ext4_fc_record_modified_inode(struct super_block *sb, int ino) · 158 unmodified lines
13921410 if (state->fc_modified_inodes[i] == ino)
13931411 return 0;
13941412 if (state->fc_modified_inodes_used == state->fc_modified_inodes_size) {
1395− state->fc_modified_inodes_size +=
1396− EXT4_FC_REPLAY_REALLOC_INCREMENT;
13971413 state->fc_modified_inodes = krealloc(
1398− state->fc_modified_inodes, sizeof(int) *
1399− state->fc_modified_inodes_size,
1400− GFP_KERNEL);
1414+ state->fc_modified_inodes,
1415+ sizeof(int) * (state->fc_modified_inodes_size +
1416+ EXT4_FC_REPLAY_REALLOC_INCREMENT),
1417+ GFP_KERNEL);
14011418 if (!state->fc_modified_inodes)
14021419 return -ENOMEM;
1420+ state->fc_modified_inodes_size +=
1421+ EXT4_FC_REPLAY_REALLOC_INCREMENT;
14031422 }
14041423 state->fc_modified_inodes[state->fc_modified_inodes_used++] = ino;
14051424 return 0;
@@ -1431,7 +1450,9 @@ static int ext4_fc_replay_inode(struct super_block *sb, struct ext4_fc_tl *tl, · 25 unmodified lines
14311450 }
14321451 inode = NULL;
14331452
1434− ext4_fc_record_modified_inode(sb, ino);
1453+ ret = ext4_fc_record_modified_inode(sb, ino);
1454+ if (ret)
1455+ goto out;
14351456
14361457 raw_fc_inode = (struct ext4_inode *)
14371458 (val + offsetof(struct ext4_fc_inode, fc_raw_inode));
@@ -1563,16 +1584,23 @@ out: · 125 unmodified lines
15631584 }
15641585
15651586 /*
1566− * Record physical disk regions which are in use as per fast commit area. Our
1567− * simple replay phase allocator excludes these regions from allocation.
1587+ * Record physical disk regions which are in use as per fast commit area,
1588+ * and used by inodes during replay phase. Our simple replay phase
1589+ * allocator excludes these regions from allocation.
15681590 */
1569−static int ext4_fc_record_regions(struct super_block *sb, int ino,
1570− ext4_lblk_t lblk, ext4_fsblk_t pblk, int len)
1591+int ext4_fc_record_regions(struct super_block *sb, int ino,
1592+ ext4_lblk_t lblk, ext4_fsblk_t pblk, int len, int replay)
15711593 {
15721594 struct ext4_fc_replay_state *state;
15731595 struct ext4_fc_alloc_region *region;
15741596
15751597 state = &EXT4_SB(sb)->s_fc_replay_state;
1598+ /*
1599+ * during replay phase, the fc_regions_valid may not same as
1600+ * fc_regions_used, update it when do new additions.
1601+ */
1602+ if (replay && state->fc_regions_used != state->fc_regions_valid)
1603+ state->fc_regions_used = state->fc_regions_valid;
15761604 if (state->fc_regions_used == state->fc_regions_size) {
15771605 state->fc_regions_size +=
15781606 EXT4_FC_REPLAY_REALLOC_INCREMENT;
@@ -1590,6 +1618,9 @@ static int ext4_fc_record_regions(struct super_block *sb, int ino, · 11 unmodified lines
15901618 region->pblk = pblk;
15911619 region->len = len;
15921620
1621+ if (replay)
1622+ state->fc_regions_valid++;
1623+
15931624 return 0;
15941625 }
15951626
@@ -1621,6 +1652,8 @@ static int ext4_fc_replay_add_range(struct super_block *sb, · 25 unmodified lines
16211652 }
16221653
16231654 ret = ext4_fc_record_modified_inode(sb, inode->i_ino);
1655+ if (ret)
1656+ goto out;
16241657
16251658 start = le32_to_cpu(ex->ee_block);
16261659 start_pblk = ext4_ext_pblock(ex);
@@ -1638,18 +1671,14 @@ static int ext4_fc_replay_add_range(struct super_block *sb, · 11 unmodified lines
16381671 map.m_pblk = 0;
16391672 ret = ext4_map_blocks(NULL, inode, &map, 0);
16401673
1641− if (ret < 0) {
1642− iput(inode);
1643− return 0;
1644− }
1674+ if (ret < 0)
1675+ goto out;
16451676
16461677 if (ret == 0) {
16471678 /* Range is not mapped */
16481679 path = ext4_find_extent(inode, cur, NULL, 0);
1649− if (IS_ERR(path)) {
1650− iput(inode);
1651− return 0;
1652− }
1680+ if (IS_ERR(path))
1681+ goto out;
16531682 memset(&newex, 0, sizeof(newex));
16541683 newex.ee_block = cpu_to_le32(cur);
16551684 ext4_ext_store_pblock(
@@ -1663,10 +1692,8 @@ static int ext4_fc_replay_add_range(struct super_block *sb, · 7 unmodified lines
16631692 up_write((&EXT4_I(inode)->i_data_sem));
16641693 ext4_ext_drop_refs(path);
16651694 kfree(path);
1666− if (ret) {
1667− iput(inode);
1668− return 0;
1669− }
1695+ if (ret)
1696+ goto out;
16701697 goto next;
16711698 }
16721699
@@ -1679,10 +1706,8 @@ static int ext4_fc_replay_add_range(struct super_block *sb, · 6 unmodified lines
16791706 ret = ext4_ext_replay_update_ex(inode, cur, map.m_len,
16801707 ext4_ext_is_unwritten(ex),
16811708 start_pblk + cur - start);
1682− if (ret) {
1683− iput(inode);
1684− return 0;
1685− }
1709+ if (ret)
1710+ goto out;
16861711 /*
16871712 * Mark the old blocks as free since they aren't used
16881713 * anymore. We maintain an array of all the modified
@@ -1702,10 +1727,8 @@ static int ext4_fc_replay_add_range(struct super_block *sb, · 13 unmodified lines
17021727 ext4_ext_is_unwritten(ex), map.m_pblk);
17031728 ret = ext4_ext_replay_update_ex(inode, cur, map.m_len,
17041729 ext4_ext_is_unwritten(ex), map.m_pblk);
1705− if (ret) {
1706− iput(inode);
1707− return 0;
1708− }
1730+ if (ret)
1731+ goto out;
17091732 /*
17101733 * We may have split the extent tree while toggling the state.
17111734 * Try to shrink the extent tree now.
@@ -1717,6 +1740,7 @@ next: · 5 unmodified lines
17171740 }
17181741 ext4_ext_replay_shrink_inode(inode, i_size_read(inode) >>
17191742 sb->s_blocksize_bits);
1743+out:
17201744 iput(inode);
17211745 return 0;
17221746 }
@@ -1746,6 +1770,8 @@ ext4_fc_replay_del_range(struct super_block *sb, struct ext4_fc_tl *tl, · 23 unmodified lines
17461770 }
17471771
17481772 ret = ext4_fc_record_modified_inode(sb, inode->i_ino);
1773+ if (ret)
1774+ goto out;
17491775
17501776 jbd_debug(1, "DEL_RANGE, inode %ld, lblk %d, len %d\n",
17511777 inode->i_ino, le32_to_cpu(lrange.fc_lblk),
@@ -1755,10 +1781,8 @@ ext4_fc_replay_del_range(struct super_block *sb, struct ext4_fc_tl *tl, · 3 unmodified lines
17551781 map.m_len = remaining;
17561782
17571783 ret = ext4_map_blocks(NULL, inode, &map, 0);
1758− if (ret < 0) {
1759− iput(inode);
1760− return 0;
1761− }
1784+ if (ret < 0)
1785+ goto out;
17621786 if (ret > 0) {
17631787 remaining -= ret;
17641788 cur += ret;
@@ -1770,18 +1794,17 @@ ext4_fc_replay_del_range(struct super_block *sb, struct ext4_fc_tl *tl, · 5 unmodified lines
17701794 }
17711795
17721796 down_write(&EXT4_I(inode)->i_data_sem);
1773− ret = ext4_ext_remove_space(inode, lrange.fc_lblk,
1774− lrange.fc_lblk + lrange.fc_len - 1);
1797+ ret = ext4_ext_remove_space(inode, le32_to_cpu(lrange.fc_lblk),
1798+ le32_to_cpu(lrange.fc_lblk) +
1799+ le32_to_cpu(lrange.fc_len) - 1);
17751800 up_write(&EXT4_I(inode)->i_data_sem);
1776− if (ret) {
1777− iput(inode);
1778− return 0;
1779− }
1801+ if (ret)
1802+ goto out;
17801803 ext4_ext_replay_shrink_inode(inode,
17811804 i_size_read(inode) >> sb->s_blocksize_bits);
17821805 ext4_mark_inode_dirty(NULL, inode);
1806+out:
17831807 iput(inode);
1784−
17851808 return 0;
17861809 }
17871810
@@ -1937,7 +1960,7 @@ static int ext4_fc_replay_scan(journal_t *journal, · 149 unmodified lines
19371960 ret = ext4_fc_record_regions(sb,
19381961 le32_to_cpu(ext.fc_ino),
19391962 le32_to_cpu(ex->ee_block), ext4_ext_pblock(ex),
1940− ext4_ext_get_actual_len(ex));
1963+ ext4_ext_get_actual_len(ex), 0);
19411964 if (ret < 0)
19421965 break;
19431966 ret = JBD2_FC_REPLAY_CONTINUE;
fs/ext4/indirect.c+1−1
@@ -696,7 +696,7 @@ static int ext4_ind_trunc_restart_fn(handle_t *handle, struct inode *inode, · 695 unmodified lines
696696 * Drop i_data_sem to avoid deadlock with ext4_map_blocks. At this
697697 * moment, get_block can be called only for blocks inside i_size since
698698 * page cache has been already dropped and writes are blocked by
699− * i_mutex. So we can safely drop the i_data_sem here.
699+ * i_rwsem. So we can safely drop the i_data_sem here.
700700 */
701701 BUG_ON(EXT4_JOURNAL(inode) == NULL);
702702 ext4_discard_preallocations(inode, 0);
fs/ext4/inline.c+13−10
@@ -911,7 +911,7 @@ int ext4_da_write_inline_data_begin(struct address_space *mapping, · 910 unmodified lines
911911 struct page **pagep,
912912 void **fsdata)
913913 {
914− int ret, inline_size;
914+ int ret;
915915 handle_t *handle;
916916 struct page *page;
917917 struct ext4_iloc iloc;
@@ -928,14 +928,9 @@ retry_journal: · 10 unmodified lines
928928 goto out;
929929 }
930930
931− inline_size = ext4_get_max_inline_size(inode);
932−
933− ret = -ENOSPC;
934− if (inline_size >= pos + len) {
935− ret = ext4_prepare_inline_data(handle, inode, pos + len);
936− if (ret && ret != -ENOSPC)
937− goto out_journal;
938− }
931+ ret = ext4_prepare_inline_data(handle, inode, pos + len);
932+ if (ret && ret != -ENOSPC)
933+ goto out_journal;
939934
940935 /*
941936 * We cannot recurse into the filesystem as the transaction
@@ -1133,7 +1128,15 @@ static void ext4_restore_inline_data(handle_t *handle, struct inode *inode, · 191 unmodified lines
11331128 struct ext4_iloc *iloc,
11341129 void *buf, int inline_size)
11351130 {
1136− ext4_create_inline_data(handle, inode, inline_size);
1131+ int ret;
1132+
1133+ ret = ext4_create_inline_data(handle, inode, inline_size);
1134+ if (ret) {
1135+ ext4_msg(inode->i_sb, KERN_EMERG,
1136+ "error restoring inline_data for inode -- potential data loss! (inode %lu, error %d)",
1137+ inode->i_ino, ret);
1138+ return;
1139+ }
11371140 ext4_write_inline_data(inode, iloc, buf, 0, inline_size);
11381141 ext4_set_inode_state(inode, EXT4_STATE_MAY_INLINE_DATA);
11391142 }
fs/ext4/inode.c+6−6
@@ -338,7 +338,7 @@ stop_handle: · 337 unmodified lines
338338 return;
339339 no_delete:
340340 if (!list_empty(&EXT4_I(inode)->i_fc_list))
341− ext4_fc_mark_ineligible(inode->i_sb, EXT4_FC_REASON_NOMEM);
341+ ext4_fc_mark_ineligible(inode->i_sb, EXT4_FC_REASON_NOMEM, NULL);
342342 ext4_clear_inode(inode); /* We must guarantee clearing of inode... */
343343 }
344344
@@ -1224,7 +1224,7 @@ retry_journal: · 879 unmodified lines
12241224 /*
12251225 * __block_write_begin may have instantiated a few blocks
12261226 * outside i_size. Trim these off again. Don't need
1227− * i_size_read because we hold i_mutex.
1227+ * i_size_read because we hold i_rwsem.
12281228 *
12291229 * Add inode to orphan list in case we crash before
12301230 * truncate finishes
@@ -3979,7 +3979,7 @@ int ext4_punch_hole(struct inode *inode, loff_t offset, loff_t length) · 2748 unmodified lines
39793979
39803980 }
39813981
3982− /* Wait all existing dio workers, newcomers will block on i_mutex */
3982+ /* Wait all existing dio workers, newcomers will block on i_rwsem */
39833983 inode_dio_wait(inode);
39843984
39853985 /*
@@ -4129,7 +4129,7 @@ int ext4_truncate(struct inode *inode) · 143 unmodified lines
41294129 /*
41304130 * There is a possibility that we're either freeing the inode
41314131 * or it's a completely new inode. In those cases we might not
4132− * have i_mutex locked because it's not necessary.
4132+ * have i_rwsem locked because it's not necessary.
41334133 */
41344134 if (!(inode->i_state & (I_NEW|I_FREEING)))
41354135 WARN_ON(!inode_is_locked(inode));
@@ -5271,7 +5271,7 @@ static void ext4_wait_for_tail_page_commit(struct inode *inode) · 1135 unmodified lines
52715271 * transaction are already on disk (truncate waits for pages under
52725272 * writeback).
52735273 *
5274− * Called with inode->i_mutex down.
5274+ * Called with inode->i_rwsem down.
52755275 */
52765276 int ext4_setattr(struct user_namespace *mnt_userns, struct dentry *dentry,
52775277 struct iattr *attr)
@@ -5983,7 +5983,7 @@ int ext4_change_inode_journal_flag(struct inode *inode, int val) · 705 unmodified lines
59835983 return PTR_ERR(handle);
59845984
59855985 ext4_fc_mark_ineligible(inode->i_sb,
5986− EXT4_FC_REASON_JOURNAL_FLAG_CHANGE);
5986+ EXT4_FC_REASON_JOURNAL_FLAG_CHANGE, handle);
59875987 err = ext4_mark_inode_dirty(handle, inode);
59885988 ext4_handle_sync(handle);
59895989 ext4_journal_stop(handle);
fs/ext4/ioctl.c+2−2
@@ -411,7 +411,7 @@ static long swap_inode_boot_loader(struct super_block *sb, · 410 unmodified lines
411411 err = -EINVAL;
412412 goto err_out;
413413 }
414− ext4_fc_mark_ineligible(sb, EXT4_FC_REASON_SWAP_BOOT);
414+ ext4_fc_mark_ineligible(sb, EXT4_FC_REASON_SWAP_BOOT, handle);
415415
416416 /* Protect extent tree against block allocations via delalloc */
417417 ext4_double_down_write_data_sem(inode, inode_bl);
@@ -1373,7 +1373,7 @@ mext_out: · 955 unmodified lines
13731373
13741374 err = ext4_resize_fs(sb, n_blocks_count);
13751375 if (EXT4_SB(sb)->s_journal) {
1376− ext4_fc_mark_ineligible(sb, EXT4_FC_REASON_RESIZE);
1376+ ext4_fc_mark_ineligible(sb, EXT4_FC_REASON_RESIZE, NULL);
13771377 jbd2_journal_lock_updates(EXT4_SB(sb)->s_journal);
13781378 err2 = jbd2_journal_flush(EXT4_SB(sb)->s_journal, 0);
13791379 jbd2_journal_unlock_updates(EXT4_SB(sb)->s_journal);
fs/ext4/mballoc.c+17−9
@@ -5753,7 +5753,8 @@ static ext4_fsblk_t ext4_mb_new_blocks_simple(handle_t *handle, · 5752 unmodified lines
57535753 struct super_block *sb = ar->inode->i_sb;
57545754 ext4_group_t group;
57555755 ext4_grpblk_t blkoff;
5756− int i = sb->s_blocksize;
5756+ ext4_grpblk_t max = EXT4_CLUSTERS_PER_GROUP(sb);
5757+ ext4_grpblk_t i = 0;
57575758 ext4_fsblk_t goal, block;
57585759 struct ext4_super_block *es = EXT4_SB(sb)->s_es;
57595760
@@ -5775,19 +5776,26 @@ static ext4_fsblk_t ext4_mb_new_blocks_simple(handle_t *handle, · 15 unmodified lines
57755776 ext4_get_group_no_and_offset(sb,
57765777 max(ext4_group_first_block_no(sb, group), goal),
57775778 NULL, &blkoff);
5778− i = mb_find_next_zero_bit(bitmap_bh->b_data, sb->s_blocksize,
5779+ while (1) {
5780+ i = mb_find_next_zero_bit(bitmap_bh->b_data, max,
57795781 blkoff);
5782+ if (i >= max)
5783+ break;
5784+ if (ext4_fc_replay_check_excluded(sb,
5785+ ext4_group_first_block_no(sb, group) + i)) {
5786+ blkoff = i + 1;
5787+ } else
5788+ break;
5789+ }
57805790 brelse(bitmap_bh);
5781− if (i >= sb->s_blocksize)
5782− continue;
5783− if (ext4_fc_replay_check_excluded(sb,
5784− ext4_group_first_block_no(sb, group) + i))
5785− continue;
5786− break;
5791+ if (i < max)
5792+ break;
57875793 }
57885794
5789− if (group >= ext4_get_groups_count(sb) && i >= sb->s_blocksize)
5795+ if (group >= ext4_get_groups_count(sb) || i >= max) {
5796+ *errp = -ENOSPC;
57905797 return 0;
5798+ }
57915799
57925800 block = ext4_group_first_block_no(sb, group) + i;
57935801 ext4_mb_mark_bb(sb, block, 1, 1);
fs/ext4/migrate.c+1−1
@@ -485,7 +485,7 @@ int ext4_ext_migrate(struct inode *inode) · 484 unmodified lines
485485 * when we add extents we extent the journal
486486 */
487487 /*
488− * Even though we take i_mutex we can still cause block
488+ * Even though we take i_rwsem we can still cause block
489489 * allocation via mmap write to holes. If we have allocated
490490 * new blocks we fail migrate. New block allocation will
491491 * clear EXT4_STATE_EXT_MIGRATE flag. The flag is updated
fs/ext4/namei.c+2−2
@@ -3889,7 +3889,7 @@ static int ext4_rename(struct user_namespace *mnt_userns, struct inode *old_dir, · 3888 unmodified lines
38893889 * dirents in directories.
38903890 */
38913891 ext4_fc_mark_ineligible(old.inode->i_sb,
3892− EXT4_FC_REASON_RENAME_DIR);
3892+ EXT4_FC_REASON_RENAME_DIR, handle);
38933893 } else {
38943894 if (new.inode)
38953895 ext4_fc_track_unlink(handle, new.dentry);
@@ -4049,7 +4049,7 @@ static int ext4_cross_rename(struct inode *old_dir, struct dentry *old_dentry, · 153 unmodified lines
40494049 if (unlikely(retval))
40504050 goto end_rename;
40514051 ext4_fc_mark_ineligible(new.inode->i_sb,
4052− EXT4_FC_REASON_CROSS_RENAME);
4052+ EXT4_FC_REASON_CROSS_RENAME, handle);
40534053 if (old.dir_bh) {
40544054 retval = ext4_rename_dir_finish(handle, &old, new.dir->i_ino);
40554055 if (retval)
fs/ext4/orphan.c+2−2
@@ -93,7 +93,7 @@ static int ext4_orphan_file_add(handle_t *handle, struct inode *inode) · 92 unmodified lines
9393 * At filesystem recovery time, we walk this list deleting unlinked
9494 * inodes and truncating linked inodes in ext4_orphan_cleanup().
9595 *
96− * Orphan list manipulation functions must be called under i_mutex unless
96+ * Orphan list manipulation functions must be called under i_rwsem unless
9797 * we are just creating the inode or deleting it.
9898 */
9999 int ext4_orphan_add(handle_t *handle, struct inode *inode)
@@ -119,7 +119,7 @@ int ext4_orphan_add(handle_t *handle, struct inode *inode) · 19 unmodified lines
119119 /*
120120 * Orphan handling is only valid for files with data blocks
121121 * being truncated, or files being unlinked. Note that we either
122− * hold i_mutex, or the inode can not be referenced from outside,
122+ * hold i_rwsem, or the inode can not be referenced from outside,
123123 * so i_nlink should not be bumped due to race
124124 */
125125 ASSERT((S_ISREG(inode->i_mode) || S_ISDIR(inode->i_mode) ||
fs/ext4/super.c+2−2
@@ -5082,7 +5082,7 @@ static int __ext4_fill_super(struct fs_context *fc, struct super_block *sb) · 5081 unmodified lines
50825082 INIT_LIST_HEAD(&sbi->s_fc_dentry_q[FC_Q_STAGING]);
50835083 sbi->s_fc_bytes = 0;
50845084 ext4_clear_mount_flag(sb, EXT4_MF_FC_INELIGIBLE);
5085− ext4_clear_mount_flag(sb, EXT4_MF_FC_COMMITTING);
5085+ sbi->s_fc_ineligible_tid = 0;
50865086 spin_lock_init(&sbi->s_fc_lock);
50875087 memset(&sbi->s_fc_stats, 0, sizeof(sbi->s_fc_stats));
50885088 sbi->s_fc_replay_state.fc_regions = NULL;
@@ -5540,7 +5540,7 @@ static int ext4_fill_super(struct super_block *sb, struct fs_context *fc) · 451 unmodified lines
55405540
55415541 sbi = ext4_alloc_sbi(sb);
55425542 if (!sbi)
5543− ret = -ENOMEM;
5543+ return -ENOMEM;
55445544
55455545 fc->s_fs_info = sbi;
55465546
fs/ext4/xattr.c+3−3
@@ -2408,7 +2408,7 @@ retry_inode: · 2407 unmodified lines
24082408 if (IS_SYNC(inode))
24092409 ext4_handle_sync(handle);
24102410 }
2411− ext4_fc_mark_ineligible(inode->i_sb, EXT4_FC_REASON_XATTR);
2411+ ext4_fc_mark_ineligible(inode->i_sb, EXT4_FC_REASON_XATTR, handle);
24122412
24132413 cleanup:
24142414 brelse(is.iloc.bh);
@@ -2486,7 +2486,7 @@ retry: · 71 unmodified lines
24862486 if (error == 0)
24872487 error = error2;
24882488 }
2489− ext4_fc_mark_ineligible(inode->i_sb, EXT4_FC_REASON_XATTR);
2489+ ext4_fc_mark_ineligible(inode->i_sb, EXT4_FC_REASON_XATTR, NULL);
24902490
24912491 return error;
24922492 }
@@ -2920,7 +2920,7 @@ int ext4_xattr_delete_inode(handle_t *handle, struct inode *inode, · 427 unmodified lines
29202920 error);
29212921 goto cleanup;
29222922 }
2923− ext4_fc_mark_ineligible(inode->i_sb, EXT4_FC_REASON_XATTR);
2923+ ext4_fc_mark_ineligible(inode->i_sb, EXT4_FC_REASON_XATTR, handle);
29242924 }
29252925 error = 0;
29262926 cleanup:
fs/file_table.c+2−0
@@ -119,6 +119,8 @@ static struct ctl_table fs_stat_sysctls[] = { · 118 unmodified lines
119119 static int __init init_fs_stat_sysctls(void)
120120 {
121121 register_sysctl_init("fs", fs_stat_sysctls);
122+ if (IS_ENABLED(CONFIG_BINFMT_MISC))
123+ register_sysctl_mount_point("fs/binfmt_misc");
122124 return 0;
123125 }
124126 fs_initcall(init_fs_stat_sysctls);
fs/iomap/buffered-io.c+48−4
@@ -21,6 +21,8 @@ · 20 unmodified lines
2121
2222 #include "../internal.h"
2323
24+#define IOEND_BATCH_SIZE 4096
25+
2426 /*
2527 * Structure allocated for each folio when block size < folio size
2628 * to track sub-folio uptodate status and I/O completions.
@@ -1039,7 +1041,7 @@ static void iomap_finish_folio_write(struct inode *inode, struct folio *folio, · 1012 unmodified lines
10391041 * state, release holds on bios, and finally free up memory. Do not use the
10401042 * ioend after this.
10411043 */
1042−static void
1044+static u32
10431045 iomap_finish_ioend(struct iomap_ioend *ioend, int error)
10441046 {
10451047 struct inode *inode = ioend->io_inode;
@@ -1048,6 +1050,7 @@ iomap_finish_ioend(struct iomap_ioend *ioend, int error) · 2 unmodified lines
10481050 u64 start = bio->bi_iter.bi_sector;
10491051 loff_t offset = ioend->io_offset;
10501052 bool quiet = bio_flagged(bio, BIO_QUIET);
1053+ u32 folio_count = 0;
10511054
10521055 for (bio = &ioend->io_inline_bio; bio; bio = next) {
10531056 struct folio_iter fi;
@@ -1062,9 +1065,11 @@ iomap_finish_ioend(struct iomap_ioend *ioend, int error) · 8 unmodified lines
10621065 next = bio->bi_private;
10631066
10641067 /* walk all folios in bio, ending page IO on them */
1065− bio_for_each_folio_all(fi, bio)
1068+ bio_for_each_folio_all(fi, bio) {
10661069 iomap_finish_folio_write(inode, fi.folio, fi.length,
10671070 error);
1071+ folio_count++;
1072+ }
10681073 bio_put(bio);
10691074 }
10701075 /* The ioend has been freed by bio_put() */
@@ -1074,20 +1079,36 @@ iomap_finish_ioend(struct iomap_ioend *ioend, int error) · 3 unmodified lines
10741079 "%s: writeback error on inode %lu, offset %lld, sector %llu",
10751080 inode->i_sb->s_id, inode->i_ino, offset, start);
10761081 }
1082+ return folio_count;
10771083 }
10781084
1085+/*
1086+ * Ioend completion routine for merged bios. This can only be called from task
1087+ * contexts as merged ioends can be of unbound length. Hence we have to break up
1088+ * the writeback completions into manageable chunks to avoid long scheduler
1089+ * holdoffs. We aim to keep scheduler holdoffs down below 10ms so that we get
1090+ * good batch processing throughput without creating adverse scheduler latency
1091+ * conditions.
1092+ */
10791093 void
10801094 iomap_finish_ioends(struct iomap_ioend *ioend, int error)
10811095 {
10821096 struct list_head tmp;
1097+ u32 completions;
1098+
1099+ might_sleep();
10831100
10841101 list_replace_init(&ioend->io_list, &tmp);
1085− iomap_finish_ioend(ioend, error);
1102+ completions = iomap_finish_ioend(ioend, error);
10861103
10871104 while (!list_empty(&tmp)) {
1105+ if (completions > IOEND_BATCH_SIZE * 8) {
1106+ cond_resched();
1107+ completions = 0;
1108+ }
10881109 ioend = list_first_entry(&tmp, struct iomap_ioend, io_list);
10891110 list_del_init(&ioend->io_list);
1090− iomap_finish_ioend(ioend, error);
1111+ completions += iomap_finish_ioend(ioend, error);
10911112 }
10921113 }
10931114 EXPORT_SYMBOL_GPL(iomap_finish_ioends);
@@ -1108,6 +1129,18 @@ iomap_ioend_can_merge(struct iomap_ioend *ioend, struct iomap_ioend *next) · 14 unmodified lines
11081129 return false;
11091130 if (ioend->io_offset + ioend->io_size != next->io_offset)
11101131 return false;
1132+ /*
1133+ * Do not merge physically discontiguous ioends. The filesystem
1134+ * completion functions will have to iterate the physical
1135+ * discontiguities even if we merge the ioends at a logical level, so
1136+ * we don't gain anything by merging physical discontiguities here.
1137+ *
1138+ * We cannot use bio->bi_iter.bi_sector here as it is modified during
1139+ * submission so does not point to the start sector of the bio at
1140+ * completion.
1141+ */
1142+ if (ioend->io_sector + (ioend->io_size >> 9) != next->io_sector)
1143+ return false;
11111144 return true;
11121145 }
11131146
@@ -1209,8 +1242,10 @@ iomap_alloc_ioend(struct inode *inode, struct iomap_writepage_ctx *wpc, · 95 unmodified lines
12091242 ioend->io_flags = wpc->iomap.flags;
12101243 ioend->io_inode = inode;
12111244 ioend->io_size = 0;
1245+ ioend->io_folios = 0;
12121246 ioend->io_offset = offset;
12131247 ioend->io_bio = bio;
1248+ ioend->io_sector = sector;
12141249 return ioend;
12151250 }
12161251
@@ -1251,6 +1286,13 @@ iomap_can_add_to_ioend(struct iomap_writepage_ctx *wpc, loff_t offset, · 34 unmodified lines
12511286 return false;
12521287 if (sector != bio_end_sector(wpc->ioend->io_bio))
12531288 return false;
1289+ /*
1290+ * Limit ioend bio chain lengths to minimise IO completion latency. This
1291+ * also prevents long tight loops ending page writeback on all the
1292+ * folios in the ioend.
1293+ */
1294+ if (wpc->ioend->io_folios >= IOEND_BATCH_SIZE)
1295+ return false;
12541296 return true;
12551297 }
12561298
@@ -1335,6 +1377,8 @@ iomap_writepage_map(struct iomap_writepage_ctx *wpc, · 78 unmodified lines
13351377 &submit_list);
13361378 count++;
13371379 }
1380+ if (count)
1381+ wpc->ioend->io_folios++;
13381382
13391383 WARN_ON_ONCE(!wpc->ioend && !list_empty(&submit_list));
13401384 WARN_ON_ONCE(!folio_test_locked(folio));
fs/jbd2/commit.c+4−17
@@ -484,22 +484,9 @@ void jbd2_journal_commit_transaction(journal_t *journal) · 483 unmodified lines
484484 stats.run.rs_running = jbd2_time_diff(commit_transaction->t_start,
485485 stats.run.rs_locked);
486486
487− spin_lock(&commit_transaction->t_handle_lock);
488− while (atomic_read(&commit_transaction->t_updates)) {
489− DEFINE_WAIT(wait);
487+ // waits for any t_updates to finish
488+ jbd2_journal_wait_updates(journal);
490489
491− prepare_to_wait(&journal->j_wait_updates, &wait,
492− TASK_UNINTERRUPTIBLE);
493− if (atomic_read(&commit_transaction->t_updates)) {
494− spin_unlock(&commit_transaction->t_handle_lock);
495− write_unlock(&journal->j_state_lock);
496− schedule();
497− write_lock(&journal->j_state_lock);
498− spin_lock(&commit_transaction->t_handle_lock);
499− }
500− finish_wait(&journal->j_wait_updates, &wait);
501− }
502− spin_unlock(&commit_transaction->t_handle_lock);
503490 commit_transaction->t_state = T_SWITCH;
504491 write_unlock(&journal->j_state_lock);
505492
@@ -817,7 +804,7 @@ start_journal_io: · 311 unmodified lines
817804 commit_transaction->t_state = T_COMMIT_DFLUSH;
818805 write_unlock(&journal->j_state_lock);
819806
820− /*
807+ /*
821808 * If the journal is not located on the file system device,
822809 * then we must flush the file system device before we issue
823810 * the commit record
@@ -1170,7 +1157,7 @@ restart_loop: · 346 unmodified lines
11701157 if (journal->j_commit_callback)
11711158 journal->j_commit_callback(journal, commit_transaction);
11721159 if (journal->j_fc_cleanup_callback)
1173− journal->j_fc_cleanup_callback(journal, 1);
1160+ journal->j_fc_cleanup_callback(journal, 1, commit_transaction->t_tid);
11741161
11751162 trace_jbd2_end_commit(journal, commit_transaction);
11761163 jbd_debug(1, "JBD2: commit %d complete, head %d\n",
fs/jbd2/journal.c+5−1
@@ -771,7 +771,7 @@ static int __jbd2_fc_end_commit(journal_t *journal, tid_t tid, bool fallback) · 770 unmodified lines
771771 {
772772 jbd2_journal_unlock_updates(journal);
773773 if (journal->j_fc_cleanup_callback)
774− journal->j_fc_cleanup_callback(journal, 0);
774+ journal->j_fc_cleanup_callback(journal, 0, tid);
775775 write_lock(&journal->j_state_lock);
776776 journal->j_flags &= ~JBD2_FAST_COMMIT_ONGOING;
777777 if (fallback)
@@ -1287,6 +1287,8 @@ static int jbd2_min_tag_size(void) · 509 unmodified lines
12871287
12881288 /**
12891289 * jbd2_journal_shrink_scan()
1290+ * @shrink: shrinker to work on
1291+ * @sc: reclaim request to process
12901292 *
12911293 * Scan the checkpointed buffer on the checkpoint list and release the
12921294 * journal_head.
@@ -1312,6 +1314,8 @@ static unsigned long jbd2_journal_shrink_scan(struct shrinker *shrink, · 19 unmodified lines
13121314
13131315 /**
13141316 * jbd2_journal_shrink_count()
1317+ * @shrink: shrinker to work on
1318+ * @sc: reclaim request to process
13151319 *
13161320 * Count the number of checkpoint buffers on the checkpoint list.
13171321 */
fs/jbd2/transaction.c+32−21
@@ -449,7 +449,7 @@ repeat: · 448 unmodified lines
449449 }
450450
451451 /* OK, account for the buffers that this operation expects to
452− * use and add the handle to the running transaction.
452+ * use and add the handle to the running transaction.
453453 */
454454 update_t_max_wait(transaction, ts);
455455 handle->h_transaction = transaction;
@@ -836,6 +836,35 @@ int jbd2_journal_restart(handle_t *handle, int nblocks) · 380 unmodified lines
836836 }
837837 EXPORT_SYMBOL(jbd2_journal_restart);
838838
839+/*
840+ * Waits for any outstanding t_updates to finish.
841+ * This is called with write j_state_lock held.
842+ */
843+void jbd2_journal_wait_updates(journal_t *journal)
844+{
845+ transaction_t *commit_transaction = journal->j_running_transaction;
846+
847+ if (!commit_transaction)
848+ return;
849+
850+ spin_lock(&commit_transaction->t_handle_lock);
851+ while (atomic_read(&commit_transaction->t_updates)) {
852+ DEFINE_WAIT(wait);
853+
854+ prepare_to_wait(&journal->j_wait_updates, &wait,
855+ TASK_UNINTERRUPTIBLE);
856+ if (atomic_read(&commit_transaction->t_updates)) {
857+ spin_unlock(&commit_transaction->t_handle_lock);
858+ write_unlock(&journal->j_state_lock);
859+ schedule();
860+ write_lock(&journal->j_state_lock);
861+ spin_lock(&commit_transaction->t_handle_lock);
862+ }
863+ finish_wait(&journal->j_wait_updates, &wait);
864+ }
865+ spin_unlock(&commit_transaction->t_handle_lock);
866+}
867+
839868 /**
840869 * jbd2_journal_lock_updates () - establish a transaction barrier.
841870 * @journal: Journal to establish a barrier on.
@@ -863,27 +892,9 @@ void jbd2_journal_lock_updates(journal_t *journal) · 21 unmodified lines
863892 write_lock(&journal->j_state_lock);
864893 }
865894
866− /* Wait until there are no running updates */
867− while (1) {
868− transaction_t *transaction = journal->j_running_transaction;
869−
870− if (!transaction)
871− break;
895+ /* Wait until there are no running t_updates */
896+ jbd2_journal_wait_updates(journal);
872897
873− spin_lock(&transaction->t_handle_lock);
874− prepare_to_wait(&journal->j_wait_updates, &wait,
875− TASK_UNINTERRUPTIBLE);
876− if (!atomic_read(&transaction->t_updates)) {
877− spin_unlock(&transaction->t_handle_lock);
878− finish_wait(&journal->j_wait_updates, &wait);
879− break;
880− }
881− spin_unlock(&transaction->t_handle_lock);
882− write_unlock(&journal->j_state_lock);
883− schedule();
884− finish_wait(&journal->j_wait_updates, &wait);
885− write_lock(&journal->j_state_lock);
886− }
887898 write_unlock(&journal->j_state_lock);
888899
889900 /*
fs/ksmbd/auth.c+27−0
@@ -29,6 +29,7 @@ · 28 unmodified lines
2929 #include "mgmt/user_config.h"
3030 #include "crypto_ctx.h"
3131 #include "transport_ipc.h"
32+#include "../smbfs_common/arc4.h"
3233
3334 /*
3435 * Fixed format data defining GSS header and fixed string
@@ -336,6 +337,29 @@ int ksmbd_decode_ntlmssp_auth_blob(struct authenticate_message *authblob, · 301 unmodified lines
336337 nt_len - CIFS_ENCPWD_SIZE,
337338 domain_name, conn->ntlmssp.cryptkey);
338339 kfree(domain_name);
340+
341+ /* The recovered secondary session key */
342+ if (conn->ntlmssp.client_flags & NTLMSSP_NEGOTIATE_KEY_XCH) {
343+ struct arc4_ctx *ctx_arc4;
344+ unsigned int sess_key_off, sess_key_len;
345+
346+ sess_key_off = le32_to_cpu(authblob->SessionKey.BufferOffset);
347+ sess_key_len = le16_to_cpu(authblob->SessionKey.Length);
348+
349+ if (blob_len < (u64)sess_key_off + sess_key_len)
350+ return -EINVAL;
351+
352+ ctx_arc4 = kmalloc(sizeof(*ctx_arc4), GFP_KERNEL);
353+ if (!ctx_arc4)
354+ return -ENOMEM;
355+
356+ cifs_arc4_setkey(ctx_arc4, sess->sess_key,
357+ SMB2_NTLMV2_SESSKEY_SIZE);
358+ cifs_arc4_crypt(ctx_arc4, sess->sess_key,
359+ (char *)authblob + sess_key_off, sess_key_len);
360+ kfree_sensitive(ctx_arc4);
361+ }
362+
339363 return ret;
340364 }
341365
@@ -408,6 +432,9 @@ ksmbd_build_ntlmssp_challenge_blob(struct challenge_message *chgblob, · 66 unmodified lines
408432 (cflags & NTLMSSP_NEGOTIATE_EXTENDED_SEC))
409433 flags |= NTLMSSP_NEGOTIATE_EXTENDED_SEC;
410434
435+ if (cflags & NTLMSSP_NEGOTIATE_KEY_XCH)
436+ flags |= NTLMSSP_NEGOTIATE_KEY_XCH;
437+
411438 chgblob->NegotiateFlags = cpu_to_le32(flags);
412439 len = strlen(ksmbd_netbios_name());
413440 name = kmalloc(2 + UNICODE_LEN(len), GFP_KERNEL);
fs/ksmbd/smb2pdu.c+35−10
@@ -2688,7 +2688,7 @@ int smb2_open(struct ksmbd_work *work) · 2687 unmodified lines
26882688 (struct create_posix *)context;
26892689 if (le16_to_cpu(context->DataOffset) +
26902690 le32_to_cpu(context->DataLength) <
2691− sizeof(struct create_posix)) {
2691+ sizeof(struct create_posix) - 4) {
26922692 rc = -EINVAL;
26932693 goto err_out1;
26942694 }
@@ -3422,9 +3422,9 @@ static int smb2_populate_readdir_entry(struct ksmbd_conn *conn, int info_level, · 727 unmodified lines
34223422 goto free_conv_name;
34233423 }
34243424
3425− struct_sz = readdir_info_level_struct_sz(info_level);
3426− next_entry_offset = ALIGN(struct_sz - 1 + conv_len,
3427− KSMBD_DIR_INFO_ALIGNMENT);
3425+ struct_sz = readdir_info_level_struct_sz(info_level) - 1 + conv_len;
3426+ next_entry_offset = ALIGN(struct_sz, KSMBD_DIR_INFO_ALIGNMENT);
3427+ d_info->last_entry_off_align = next_entry_offset - struct_sz;
34283428
34293429 if (next_entry_offset > d_info->out_buf_len) {
34303430 d_info->out_buf_len = 0;
@@ -3976,6 +3976,7 @@ int smb2_query_dir(struct ksmbd_work *work) · 545 unmodified lines
39763976 ((struct file_directory_info *)
39773977 ((char *)rsp->Buffer + d_info.last_entry_offset))
39783978 ->NextEntryOffset = 0;
3979+ d_info.data_count -= d_info.last_entry_off_align;
39793980
39803981 rsp->StructureSize = cpu_to_le16(9);
39813982 rsp->OutputBufferOffset = cpu_to_le16(72);
@@ -6126,13 +6127,26 @@ static int smb2_set_remote_key_for_rdma(struct ksmbd_work *work, · 2144 unmodified lines
61266127 __le16 ChannelInfoOffset,
61276128 __le16 ChannelInfoLength)
61286129 {
6130+ unsigned int i, ch_count;
6131+
61296132 if (work->conn->dialect == SMB30_PROT_ID &&
61306133 Channel != SMB2_CHANNEL_RDMA_V1)
61316134 return -EINVAL;
61326135
6133− if (ChannelInfoOffset == 0 ||
6134− le16_to_cpu(ChannelInfoLength) < sizeof(*desc))
6136+ ch_count = le16_to_cpu(ChannelInfoLength) / sizeof(*desc);
6137+ if (ksmbd_debug_types & KSMBD_DEBUG_RDMA) {
6138+ for (i = 0; i < ch_count; i++) {
6139+ pr_info("RDMA r/w request %#x: token %#x, length %#x\n",
6140+ i,
6141+ le32_to_cpu(desc[i].token),
6142+ le32_to_cpu(desc[i].length));
6143+ }
6144+ }
6145+ if (ch_count != 1) {
6146+ ksmbd_debug(RDMA, "RDMA multiple buffer descriptors %d are not supported yet\n",
6147+ ch_count);
61356148 return -EINVAL;
6149+ }
61366150
61376151 work->need_invalidate_rkey =
61386152 (Channel == SMB2_CHANNEL_RDMA_V1_INVALIDATE);
@@ -6185,9 +6199,15 @@ int smb2_read(struct ksmbd_work *work) · 46 unmodified lines
61856199
61866200 if (req->Channel == SMB2_CHANNEL_RDMA_V1_INVALIDATE ||
61876201 req->Channel == SMB2_CHANNEL_RDMA_V1) {
6202+ unsigned int ch_offset = le16_to_cpu(req->ReadChannelInfoOffset);
6203+
6204+ if (ch_offset < offsetof(struct smb2_read_req, Buffer)) {
6205+ err = -EINVAL;
6206+ goto out;
6207+ }
61886208 err = smb2_set_remote_key_for_rdma(work,
61896209 (struct smb2_buffer_desc_v1 *)
6190− &req->Buffer[0],
6210+ ((char *)req + ch_offset),
61916211 req->Channel,
61926212 req->ReadChannelInfoOffset,
61936213 req->ReadChannelInfoLength);
@@ -6428,11 +6448,16 @@ int smb2_write(struct ksmbd_work *work) · 234 unmodified lines
64286448
64296449 if (req->Channel == SMB2_CHANNEL_RDMA_V1 ||
64306450 req->Channel == SMB2_CHANNEL_RDMA_V1_INVALIDATE) {
6431− if (req->Length != 0 || req->DataOffset != 0)
6432− return -EINVAL;
6451+ unsigned int ch_offset = le16_to_cpu(req->WriteChannelInfoOffset);
6452+
6453+ if (req->Length != 0 || req->DataOffset != 0 ||
6454+ ch_offset < offsetof(struct smb2_write_req, Buffer)) {
6455+ err = -EINVAL;
6456+ goto out;
6457+ }
64336458 err = smb2_set_remote_key_for_rdma(work,
64346459 (struct smb2_buffer_desc_v1 *)
6435− &req->Buffer[0],
6460+ ((char *)req + ch_offset),
64366461 req->Channel,
64376462 req->WriteChannelInfoOffset,
64386463 req->WriteChannelInfoLength);
fs/ksmbd/smb_common.c+4−1
@@ -308,14 +308,17 @@ int ksmbd_populate_dot_dotdot_entries(struct ksmbd_work *work, int info_level, · 307 unmodified lines
308308 for (i = 0; i < 2; i++) {
309309 struct kstat kstat;
310310 struct ksmbd_kstat ksmbd_kstat;
311+ struct dentry *dentry;
311312
312313 if (!dir->dot_dotdot[i]) { /* fill dot entry info */
313314 if (i == 0) {
314315 d_info->name = ".";
315316 d_info->name_len = 1;
317+ dentry = dir->filp->f_path.dentry;
316318 } else {
317319 d_info->name = "..";
318320 d_info->name_len = 2;
321+ dentry = dir->filp->f_path.dentry->d_parent;
319322 }
320323
321324 if (!match_pattern(d_info->name, d_info->name_len,
@@ -327,7 +330,7 @@ int ksmbd_populate_dot_dotdot_entries(struct ksmbd_work *work, int info_level, · 5 unmodified lines
327330 ksmbd_kstat.kstat = &kstat;
328331 ksmbd_vfs_fill_dentry_attrs(work,
329332 user_ns,
330− dir->filp->f_path.dentry->d_parent,
333+ dentry,
331334 &ksmbd_kstat);
332335 rc = fn(conn, info_level, d_info, &ksmbd_kstat);
333336 if (rc)
fs/ksmbd/transport_rdma.c+1−1
@@ -80,7 +80,7 @@ static int smb_direct_max_fragmented_recv_size = 1024 * 1024; · 79 unmodified lines
8080 /* The maximum single-message size which can be received */
8181 static int smb_direct_max_receive_size = 8192;
8282
83−static int smb_direct_max_read_write_size = 1048512;
83+static int smb_direct_max_read_write_size = 524224;
8484
8585 static int smb_direct_max_outstanding_rw_ops = 8;
8686
fs/ksmbd/vfs.h+1−0
@@ -47,6 +47,7 @@ struct ksmbd_dir_info { · 46 unmodified lines
4747 int last_entry_offset;
4848 bool hide_dot_file;
4949 int flags;
50+ int last_entry_off_align;
5051 };
5152
5253 struct ksmbd_readdir_data {
fs/nfs/client.c+1−1
@@ -177,6 +177,7 @@ struct nfs_client *nfs_alloc_client(const struct nfs_client_initdata *cl_init) · 176 unmodified lines
177177 INIT_LIST_HEAD(&clp->cl_superblocks);
178178 clp->cl_rpcclient = ERR_PTR(-EINVAL);
179179
180+ clp->cl_flags = cl_init->init_flags;
180181 clp->cl_proto = cl_init->proto;
181182 clp->cl_nconnect = cl_init->nconnect;
182183 clp->cl_max_connect = cl_init->max_connect ? cl_init->max_connect : 1;
@@ -423,7 +424,6 @@ struct nfs_client *nfs_get_client(const struct nfs_client_initdata *cl_init) · 240 unmodified lines
423424 list_add_tail(&new->cl_share_link,
424425 &nn->nfs_client_list);
425426 spin_unlock(&nn->nfs_client_lock);
426− new->cl_flags = cl_init->init_flags;
427427 return rpc_ops->init_client(new, cl_init);
428428 }
429429
fs/nfs/dir.c+18−6
@@ -80,6 +80,7 @@ static struct nfs_open_dir_context *alloc_nfs_open_dir_context(struct inode *dir · 79 unmodified lines
8080 ctx->dir_cookie = 0;
8181 ctx->dup_cookie = 0;
8282 ctx->page_index = 0;
83+ ctx->eof = false;
8384 spin_lock(&dir->i_lock);
8485 if (list_empty(&nfsi->open_files) &&
8586 (nfsi->cache_validity & NFS_INO_DATA_INVAL_DEFER))
@@ -168,6 +169,7 @@ struct nfs_readdir_descriptor { · 82 unmodified lines
168169 unsigned int cache_entry_index;
169170 signed char duped;
170171 bool plus;
172+ bool eob;
171173 bool eof;
172174 };
173175
@@ -867,7 +869,8 @@ static int nfs_readdir_xdr_to_array(struct nfs_readdir_descriptor *desc, · 693 unmodified lines
867869
868870 status = nfs_readdir_page_filler(desc, entry, pages, pglen,
869871 arrays, narrays);
870− } while (!status && nfs_readdir_page_needs_filling(page));
872+ } while (!status && nfs_readdir_page_needs_filling(page) &&
873+ page_mapping(page));
871874
872875 nfs_readdir_free_pages(pages, array_size);
873876 out:
@@ -988,7 +991,7 @@ static void nfs_do_filldir(struct nfs_readdir_descriptor *desc, · 114 unmodified lines
988991 ent = &array->array[i];
989992 if (!dir_emit(desc->ctx, ent->name, ent->name_len,
990993 nfs_compat_user_ino64(ent->ino), ent->d_type)) {
991− desc->eof = true;
994+ desc->eob = true;
992995 break;
993996 }
994997 memcpy(desc->verf, verf, sizeof(desc->verf));
@@ -1004,7 +1007,7 @@ static void nfs_do_filldir(struct nfs_readdir_descriptor *desc, · 9 unmodified lines
10041007 desc->duped = 1;
10051008 }
10061009 if (array->page_is_eof)
1007− desc->eof = true;
1010+ desc->eof = !desc->eob;
10081011
10091012 kunmap(desc->page);
10101013 dfprintk(DIRCACHE, "NFS: nfs_do_filldir() filling ended @ cookie %llu\n",
@@ -1041,12 +1044,13 @@ static int uncached_readdir(struct nfs_readdir_descriptor *desc) · 30 unmodified lines
10411044 goto out;
10421045
10431046 desc->page_index = 0;
1047+ desc->cache_entry_index = 0;
10441048 desc->last_cookie = desc->dir_cookie;
10451049 desc->duped = 0;
10461050
10471051 status = nfs_readdir_xdr_to_array(desc, desc->verf, verf, arrays, sz);
10481052
1049− for (i = 0; !desc->eof && i < sz && arrays[i]; i++) {
1053+ for (i = 0; !desc->eob && i < sz && arrays[i]; i++) {
10501054 desc->page = arrays[i];
10511055 nfs_do_filldir(desc, verf);
10521056 }
@@ -1105,9 +1109,15 @@ static int nfs_readdir(struct file *file, struct dir_context *ctx) · 52 unmodified lines
11051109 desc->duped = dir_ctx->duped;
11061110 page_index = dir_ctx->page_index;
11071111 desc->attr_gencount = dir_ctx->attr_gencount;
1112+ desc->eof = dir_ctx->eof;
11081113 memcpy(desc->verf, dir_ctx->verf, sizeof(desc->verf));
11091114 spin_unlock(&file->f_lock);
11101115
1116+ if (desc->eof) {
1117+ res = 0;
1118+ goto out_free;
1119+ }
1120+
11111121 if (test_and_clear_bit(NFS_INO_FORCE_READDIR, &nfsi->flags) &&
11121122 list_is_singular(&nfsi->open_files))
11131123 invalidate_mapping_pages(inode->i_mapping, page_index + 1, -1);
@@ -1141,7 +1151,7 @@ static int nfs_readdir(struct file *file, struct dir_context *ctx) · 27 unmodified lines
11411151
11421152 nfs_do_filldir(desc, nfsi->cookieverf);
11431153 nfs_readdir_page_unlock_and_put_cached(desc);
1144− } while (!desc->eof);
1154+ } while (!desc->eob && !desc->eof);
11451155
11461156 spin_lock(&file->f_lock);
11471157 dir_ctx->dir_cookie = desc->dir_cookie;
@@ -1149,9 +1159,10 @@ static int nfs_readdir(struct file *file, struct dir_context *ctx) · 1 unmodified line
11491159 dir_ctx->duped = desc->duped;
11501160 dir_ctx->attr_gencount = desc->attr_gencount;
11511161 dir_ctx->page_index = desc->page_index;
1162+ dir_ctx->eof = desc->eof;
11521163 memcpy(dir_ctx->verf, desc->verf, sizeof(dir_ctx->verf));
11531164 spin_unlock(&file->f_lock);
1154−
1165+out_free:
11551166 kfree(desc);
11561167
11571168 out:
@@ -1193,6 +1204,7 @@ static loff_t nfs_llseek_dir(struct file *filp, loff_t offset, int whence) · 35 unmodified lines
11931204 if (offset == 0)
11941205 memset(dir_ctx->verf, 0, sizeof(dir_ctx->verf));
11951206 dir_ctx->duped = 0;
1207+ dir_ctx->eof = false;
11961208 }
11971209 spin_unlock(&filp->f_lock);
11981210 return offset;
fs/nfs/nfs4proc.c+2−1
@@ -8032,7 +8032,8 @@ static int _nfs41_proc_get_locations(struct nfs_server *server, · 8031 unmodified lines
80328032
80338033 /**
80348034 * nfs4_proc_get_locations - discover locations for a migrated FSID
8035− * @inode: inode on FSID that is migrating
8035+ * @server: pointer to nfs_server to process
8036+ * @fhandle: pointer to the kernel NFS client file handle
80368037 * @locations: result of query
80378038 * @page: buffer
80388039 * @cred: credential to use for this operation
fs/nfsd/nfs3proc.c+11−8
@@ -150,13 +150,17 @@ nfsd3_proc_read(struct svc_rqst *rqstp) · 149 unmodified lines
150150 unsigned int len;
151151 int v;
152152
153− argp->count = min_t(u32, argp->count, max_blocksize);
154−
155153 dprintk("nfsd: READ(3) %s %lu bytes at %Lu\n",
156154 SVCFH_fmt(&argp->fh),
157155 (unsigned long) argp->count,
158156 (unsigned long long) argp->offset);
159157
158+ argp->count = min_t(u32, argp->count, max_blocksize);
159+ if (argp->offset > (u64)OFFSET_MAX)
160+ argp->offset = (u64)OFFSET_MAX;
161+ if (argp->offset + argp->count > (u64)OFFSET_MAX)
162+ argp->count = (u64)OFFSET_MAX - argp->offset;
163+
160164 v = 0;
161165 len = argp->count;
162166 resp->pages = rqstp->rq_next_page;
@@ -199,6 +203,11 @@ nfsd3_proc_write(struct svc_rqst *rqstp) · 36 unmodified lines
199203 (unsigned long long) argp->offset,
200204 argp->stable? " stable" : "");
201205
206+ resp->status = nfserr_fbig;
207+ if (argp->offset > (u64)OFFSET_MAX ||
208+ argp->offset + argp->len > (u64)OFFSET_MAX)
209+ return rpc_success;
210+
202211 fh_copy(&resp->fh, &argp->fh);
203212 resp->committed = argp->stable;
204213 nvecs = svc_fill_write_vector(rqstp, &argp->payload);
@@ -651,15 +660,9 @@ nfsd3_proc_commit(struct svc_rqst *rqstp) · 446 unmodified lines
651660 argp->count,
652661 (unsigned long long) argp->offset);
653662
654− if (argp->offset > NFS_OFFSET_MAX) {
655− resp->status = nfserr_inval;
656− goto out;
657− }
658−
659663 fh_copy(&resp->fh, &argp->fh);
660664 resp->status = nfsd_commit(rqstp, &resp->fh, argp->offset,
661665 argp->count, resp->verf);
662−out:
663666 return rpc_success;
664667 }
665668
fs/nfsd/nfs3xdr.c+2−2
@@ -254,7 +254,7 @@ svcxdr_decode_sattr3(struct svc_rqst *rqstp, struct xdr_stream *xdr, · 253 unmodified lines
254254 if (xdr_stream_decode_u64(xdr, &newsize) < 0)
255255 return false;
256256 iap->ia_valid |= ATTR_SIZE;
257− iap->ia_size = min_t(u64, newsize, NFS_OFFSET_MAX);
257+ iap->ia_size = newsize;
258258 }
259259 if (xdr_stream_decode_u32(xdr, &set_it) < 0)
260260 return false;
@@ -1060,7 +1060,7 @@ svcxdr_encode_entry3_common(struct nfsd3_readdirres *resp, const char *name, · 799 unmodified lines
10601060 return false;
10611061 /* cookie */
10621062 resp->cookie_offset = dirlist->len;
1063− if (xdr_stream_encode_u64(xdr, NFS_OFFSET_MAX) < 0)
1063+ if (xdr_stream_encode_u64(xdr, OFFSET_MAX) < 0)
10641064 return false;
10651065
10661066 return true;
fs/nfsd/nfs4proc.c+9−4
@@ -782,12 +782,16 @@ nfsd4_read(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate, · 781 unmodified lines
782782 __be32 status;
783783
784784 read->rd_nf = NULL;
785− if (read->rd_offset >= OFFSET_MAX)
786− return nfserr_inval;
787785
788786 trace_nfsd_read_start(rqstp, &cstate->current_fh,
789787 read->rd_offset, read->rd_length);
790788
789+ read->rd_length = min_t(u32, read->rd_length, svc_max_payload(rqstp));
790+ if (read->rd_offset > (u64)OFFSET_MAX)
791+ read->rd_offset = (u64)OFFSET_MAX;
792+ if (read->rd_offset + read->rd_length > (u64)OFFSET_MAX)
793+ read->rd_length = (u64)OFFSET_MAX - read->rd_offset;
794+
791795 /*
792796 * If we do a zero copy read, then a client will see read data
793797 * that reflects the state of the file *after* performing the
@@ -1018,8 +1022,9 @@ nfsd4_write(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate, · 224 unmodified lines
10181022 unsigned long cnt;
10191023 int nvecs;
10201024
1021− if (write->wr_offset >= OFFSET_MAX)
1022− return nfserr_inval;
1025+ if (write->wr_offset > (u64)OFFSET_MAX ||
1026+ write->wr_offset + write->wr_buflen > (u64)OFFSET_MAX)
1027+ return nfserr_fbig;
10231028
10241029 cnt = write->wr_buflen;
10251030 trace_nfsd_write_start(rqstp, &cstate->current_fh,
fs/nfsd/nfs4xdr.c+3−7
@@ -3495,7 +3495,7 @@ nfsd4_encode_dirent(void *ccdv, const char *name, int namlen, · 3494 unmodified lines
34953495 p = xdr_reserve_space(xdr, 3*4 + namlen);
34963496 if (!p)
34973497 goto fail;
3498− p = xdr_encode_hyper(p, NFS_OFFSET_MAX); /* offset of next entry */
3498+ p = xdr_encode_hyper(p, OFFSET_MAX); /* offset of next entry */
34993499 p = xdr_encode_array(p, name, namlen); /* name length & name */
35003500
35013501 nfserr = nfsd4_encode_dirent_fattr(xdr, cd, name, namlen);
@@ -3986,10 +3986,8 @@ nfsd4_encode_read(struct nfsd4_compoundres *resp, __be32 nfserr, · 484 unmodified lines
39863986 }
39873987 xdr_commit_encode(xdr);
39883988
3989− maxcount = svc_max_payload(resp->rqstp);
3990− maxcount = min_t(unsigned long, maxcount,
3989+ maxcount = min_t(unsigned long, read->rd_length,
39913990 (xdr->buf->buflen - xdr->buf->len));
3992− maxcount = min_t(unsigned long, maxcount, read->rd_length);
39933991
39943992 if (file->f_op->splice_read &&
39953993 test_bit(RQ_SPLICE_OK, &resp->rqstp->rq_flags))
@@ -4826,10 +4824,8 @@ nfsd4_encode_read_plus(struct nfsd4_compoundres *resp, __be32 nfserr, · 830 unmodified lines
48264824 return nfserr_resource;
48274825 xdr_commit_encode(xdr);
48284826
4829− maxcount = svc_max_payload(resp->rqstp);
4830− maxcount = min_t(unsigned long, maxcount,
4827+ maxcount = min_t(unsigned long, read->rd_length,
48314828 (xdr->buf->buflen - xdr->buf->len));
4832− maxcount = min_t(unsigned long, maxcount, read->rd_length);
48334829 count = maxcount;
48344830
48354831 eof = read->rd_offset >= i_size_read(file_inode(file));
fs/nfsd/trace.h+7−7
@@ -306,14 +306,14 @@ TRACE_EVENT(nfsd_export_update, · 305 unmodified lines
306306 DECLARE_EVENT_CLASS(nfsd_io_class,
307307 TP_PROTO(struct svc_rqst *rqstp,
308308 struct svc_fh *fhp,
309− loff_t offset,
310− unsigned long len),
309+ u64 offset,
310+ u32 len),
311311 TP_ARGS(rqstp, fhp, offset, len),
312312 TP_STRUCT__entry(
313313 __field(u32, xid)
314314 __field(u32, fh_hash)
315− __field(loff_t, offset)
316− __field(unsigned long, len)
315+ __field(u64, offset)
316+ __field(u32, len)
317317 ),
318318 TP_fast_assign(
319319 __entry->xid = be32_to_cpu(rqstp->rq_xid);
@@ -321,7 +321,7 @@ DECLARE_EVENT_CLASS(nfsd_io_class, · 1 unmodified line
321321 __entry->offset = offset;
322322 __entry->len = len;
323323 ),
324− TP_printk("xid=0x%08x fh_hash=0x%08x offset=%lld len=%lu",
324+ TP_printk("xid=0x%08x fh_hash=0x%08x offset=%llu len=%u",
325325 __entry->xid, __entry->fh_hash,
326326 __entry->offset, __entry->len)
327327 )
@@ -330,8 +330,8 @@ DECLARE_EVENT_CLASS(nfsd_io_class, · 2 unmodified lines
330330 DEFINE_EVENT(nfsd_io_class, nfsd_##name, \
331331 TP_PROTO(struct svc_rqst *rqstp, \
332332 struct svc_fh *fhp, \
333− loff_t offset, \
334− unsigned long len), \
333+ u64 offset, \
334+ u32 len), \
335335 TP_ARGS(rqstp, fhp, offset, len))
336336
337337 DEFINE_NFSD_IO_EVENT(read_start);
fs/nfsd/vfs.c+40−17
@@ -435,6 +435,10 @@ nfsd_setattr(struct svc_rqst *rqstp, struct svc_fh *fhp, struct iattr *iap, · 434 unmodified lines
435435 .ia_size = iap->ia_size,
436436 };
437437
438+ host_err = -EFBIG;
439+ if (iap->ia_size < 0)
440+ goto out_unlock;
441+
438442 host_err = notify_change(&init_user_ns, dentry, &size_attr, NULL);
439443 if (host_err)
440444 goto out_unlock;
@@ -1110,42 +1114,61 @@ out: · 669 unmodified lines
11101114 }
11111115
11121116 #ifdef CONFIG_NFSD_V3
1113−/*
1114− * Commit all pending writes to stable storage.
1117+/**
1118+ * nfsd_commit - Commit pending writes to stable storage
1119+ * @rqstp: RPC request being processed
1120+ * @fhp: NFS filehandle
1121+ * @offset: raw offset from beginning of file
1122+ * @count: raw count of bytes to sync
1123+ * @verf: filled in with the server's current write verifier
11151124 *
1116− * Note: we only guarantee that data that lies within the range specified
1117− * by the 'offset' and 'count' parameters will be synced.
1125+ * Note: we guarantee that data that lies within the range specified
1126+ * by the 'offset' and 'count' parameters will be synced. The server
1127+ * is permitted to sync data that lies outside this range at the
1128+ * same time.
11181129 *
11191130 * Unfortunately we cannot lock the file to make sure we return full WCC
11201131 * data to the client, as locking happens lower down in the filesystem.
1132+ *
1133+ * Return values:
1134+ * An nfsstat value in network byte order.
11211135 */
11221136 __be32
1123−nfsd_commit(struct svc_rqst *rqstp, struct svc_fh *fhp,
1124− loff_t offset, unsigned long count, __be32 *verf)
1137+nfsd_commit(struct svc_rqst *rqstp, struct svc_fh *fhp, u64 offset,
1138+ u32 count, __be32 *verf)
11251139 {
1140+ u64 maxbytes;
1141+ loff_t start, end;
11261142 struct nfsd_net *nn;
11271143 struct nfsd_file *nf;
1128− loff_t end = LLONG_MAX;
1129− __be32 err = nfserr_inval;
1130−
1131− if (offset < 0)
1132− goto out;
1133− if (count != 0) {
1134− end = offset + (loff_t)count - 1;
1135− if (end < offset)
1136− goto out;
1137− }
1144+ __be32 err;
11381145
11391146 err = nfsd_file_acquire(rqstp, fhp,
11401147 NFSD_MAY_WRITE|NFSD_MAY_NOT_BREAK_LEASE, &nf);
11411148 if (err)
11421149 goto out;
1150+
1151+ /*
1152+ * Convert the client-provided (offset, count) range to a
1153+ * (start, end) range. If the client-provided range falls
1154+ * outside the maximum file size of the underlying FS,
1155+ * clamp the sync range appropriately.
1156+ */
1157+ start = 0;
1158+ end = LLONG_MAX;
1159+ maxbytes = (u64)fhp->fh_dentry->d_sb->s_maxbytes;
1160+ if (offset < maxbytes) {
1161+ start = offset;
1162+ if (count && (offset + count - 1 < maxbytes))
1163+ end = offset + count - 1;
1164+ }
1165+
11431166 nn = net_generic(nf->nf_net, nfsd_net_id);
11441167 if (EX_ISSYNC(fhp->fh_export)) {
11451168 errseq_t since = READ_ONCE(nf->nf_file->f_wb_err);
11461169 int err2;
11471170
1148− err2 = vfs_fsync_range(nf->nf_file, offset, end, 0);
1171+ err2 = vfs_fsync_range(nf->nf_file, start, end, 0);
11491172 switch (err2) {
11501173 case 0:
11511174 nfsd_copy_write_verifier(verf, nn);
fs/nfsd/vfs.h+2−2
@@ -74,8 +74,8 @@ __be32 do_nfsd_create(struct svc_rqst *, struct svc_fh *, · 73 unmodified lines
7474 char *name, int len, struct iattr *attrs,
7575 struct svc_fh *res, int createmode,
7676 u32 *verifier, bool *truncp, bool *created);
77−__be32 nfsd_commit(struct svc_rqst *, struct svc_fh *,
78− loff_t, unsigned long, __be32 *verf);
77+__be32 nfsd_commit(struct svc_rqst *rqst, struct svc_fh *fhp,
78+ u64 offset, u32 count, __be32 *verf);
7979 #endif /* CONFIG_NFSD_V3 */
8080 #ifdef CONFIG_NFSD_V4
8181 __be32 nfsd_getxattr(struct svc_rqst *rqstp, struct svc_fh *fhp,
fs/quota/dquot.c+8−3
@@ -690,9 +690,14 @@ int dquot_quota_sync(struct super_block *sb, int type) · 689 unmodified lines
690690 /* This is not very clever (and fast) but currently I don't know about
691691 * any other simple way of getting quota data to disk and we must get
692692 * them there for userspace to be visible... */
693− if (sb->s_op->sync_fs)
694− sb->s_op->sync_fs(sb, 1);
695− sync_blockdev(sb->s_bdev);
693+ if (sb->s_op->sync_fs) {
694+ ret = sb->s_op->sync_fs(sb, 1);
695+ if (ret)
696+ return ret;
697+ }
698+ ret = sync_blockdev(sb->s_bdev);
699+ if (ret)
700+ return ret;
696701
697702 /*
698703 * Now when everything is written we can discard the pagecache so
fs/super.c+12−7
@@ -1616,11 +1616,9 @@ static void lockdep_sb_freeze_acquire(struct super_block *sb) · 1615 unmodified lines
16161616 percpu_rwsem_acquire(sb->s_writers.rw_sem + level, 0, _THIS_IP_);
16171617 }
16181618
1619−static void sb_freeze_unlock(struct super_block *sb)
1619+static void sb_freeze_unlock(struct super_block *sb, int level)
16201620 {
1621− int level;
1622−
1623− for (level = SB_FREEZE_LEVELS - 1; level >= 0; level--)
1621+ for (level--; level >= 0; level--)
16241622 percpu_up_write(sb->s_writers.rw_sem + level);
16251623 }
16261624
@@ -1691,7 +1689,14 @@ int freeze_super(struct super_block *sb) · 64 unmodified lines
16911689 sb_wait_write(sb, SB_FREEZE_PAGEFAULT);
16921690
16931691 /* All writers are done so after syncing there won't be dirty data */
1694− sync_filesystem(sb);
1692+ ret = sync_filesystem(sb);
1693+ if (ret) {
1694+ sb->s_writers.frozen = SB_UNFROZEN;
1695+ sb_freeze_unlock(sb, SB_FREEZE_PAGEFAULT);
1696+ wake_up(&sb->s_writers.wait_unfrozen);
1697+ deactivate_locked_super(sb);
1698+ return ret;
1699+ }
16951700
16961701 /* Now wait for internal filesystem counter */
16971702 sb->s_writers.frozen = SB_FREEZE_FS;
@@ -1703,7 +1708,7 @@ int freeze_super(struct super_block *sb) · 5 unmodified lines
17031708 printk(KERN_ERR
17041709 "VFS:Filesystem freeze failed\n");
17051710 sb->s_writers.frozen = SB_UNFROZEN;
1706− sb_freeze_unlock(sb);
1711+ sb_freeze_unlock(sb, SB_FREEZE_FS);
17071712 wake_up(&sb->s_writers.wait_unfrozen);
17081713 deactivate_locked_super(sb);
17091714 return ret;
@@ -1748,7 +1753,7 @@ static int thaw_super_locked(struct super_block *sb) · 38 unmodified lines
17481753 }
17491754
17501755 sb->s_writers.frozen = SB_UNFROZEN;
1751− sb_freeze_unlock(sb);
1756+ sb_freeze_unlock(sb, SB_FREEZE_FS);
17521757 out:
17531758 wake_up(&sb->s_writers.wait_unfrozen);
17541759 deactivate_locked_super(sb);
fs/sync.c+12−6
@@ -29,7 +29,7 @@ · 28 unmodified lines
2929 */
3030 int sync_filesystem(struct super_block *sb)
3131 {
32− int ret;
32+ int ret = 0;
3333
3434 /*
3535 * We need to be protected against the filesystem going from
@@ -52,15 +52,21 @@ int sync_filesystem(struct super_block *sb) · 16 unmodified lines
5252 * at a time.
5353 */
5454 writeback_inodes_sb(sb, WB_REASON_SYNC);
55− if (sb->s_op->sync_fs)
56− sb->s_op->sync_fs(sb, 0);
55+ if (sb->s_op->sync_fs) {
56+ ret = sb->s_op->sync_fs(sb, 0);
57+ if (ret)
58+ return ret;
59+ }
5760 ret = sync_blockdev_nowait(sb->s_bdev);
58− if (ret < 0)
61+ if (ret)
5962 return ret;
6063
6164 sync_inodes_sb(sb);
62− if (sb->s_op->sync_fs)
63− sb->s_op->sync_fs(sb, 1);
65+ if (sb->s_op->sync_fs) {
66+ ret = sb->s_op->sync_fs(sb, 1);
67+ if (ret)
68+ return ret;
69+ }
6470 return sync_blockdev(sb->s_bdev);
6571 }
6672 EXPORT_SYMBOL(sync_filesystem);
fs/xfs/xfs_aops.c+15−1
@@ -136,7 +136,20 @@ done: · 135 unmodified lines
136136 memalloc_nofs_restore(nofs_flag);
137137 }
138138
139−/* Finish all pending io completions. */
139+/*
140+ * Finish all pending IO completions that require transactional modifications.
141+ *
142+ * We try to merge physical and logically contiguous ioends before completion to
143+ * minimise the number of transactions we need to perform during IO completion.
144+ * Both unwritten extent conversion and COW remapping need to iterate and modify
145+ * one physical extent at a time, so we gain nothing by merging physically
146+ * discontiguous extents here.
147+ *
148+ * The ioend chain length that we can be processing here is largely unbound in
149+ * length and we may have to perform significant amounts of work on each ioend
150+ * to complete it. Hence we have to be careful about holding the CPU for too
151+ * long in this loop.
152+ */
140153 void
141154 xfs_end_io(
142155 struct work_struct *work)
@@ -157,6 +170,7 @@ xfs_end_io( · 14 unmodified lines
157170 list_del_init(&ioend->io_list);
158171 iomap_ioend_try_merge(ioend, &tmp);
159172 xfs_end_ioend(ioend);
173+ cond_resched();
160174 }
161175 }
162176
fs/xfs/xfs_bmap_util.c+3−6
@@ -850,9 +850,6 @@ xfs_alloc_file_space( · 849 unmodified lines
850850 rblocks = 0;
851851 }
852852
853− /*
854− * Allocate and setup the transaction.
855− */
856853 error = xfs_trans_alloc_inode(ip, &M_RES(mp)->tr_write,
857854 dblocks, rblocks, false, &tp);
858855 if (error)
@@ -869,9 +866,9 @@ xfs_alloc_file_space( · 10 unmodified lines
869866 if (error)
870867 goto error;
871868
872− /*
873− * Complete the transaction
874− */
869+ ip->i_diflags |= XFS_DIFLAG_PREALLOC;
870+ xfs_trans_log_inode(tp, ip, XFS_ILOG_CORE);
871+
875872 error = xfs_trans_commit(tp);
876873 xfs_iunlock(ip, XFS_ILOCK_EXCL);
877874 if (error)
fs/xfs/xfs_file.c+26−60
@@ -66,40 +66,6 @@ xfs_is_falloc_aligned( · 65 unmodified lines
6666 return !((pos | len) & mask);
6767 }
6868
69−int
70−xfs_update_prealloc_flags(
71− struct xfs_inode *ip,
72− enum xfs_prealloc_flags flags)
73−{
74− struct xfs_trans *tp;
75− int error;
76−
77− error = xfs_trans_alloc(ip->i_mount, &M_RES(ip->i_mount)->tr_writeid,
78− 0, 0, 0, &tp);
79− if (error)
80− return error;
81−
82− xfs_ilock(ip, XFS_ILOCK_EXCL);
83− xfs_trans_ijoin(tp, ip, XFS_ILOCK_EXCL);
84−
85− if (!(flags & XFS_PREALLOC_INVISIBLE)) {
86− VFS_I(ip)->i_mode &= ~S_ISUID;
87− if (VFS_I(ip)->i_mode & S_IXGRP)
88− VFS_I(ip)->i_mode &= ~S_ISGID;
89− xfs_trans_ichgtime(tp, ip, XFS_ICHGTIME_MOD | XFS_ICHGTIME_CHG);
90− }
91−
92− if (flags & XFS_PREALLOC_SET)
93− ip->i_diflags |= XFS_DIFLAG_PREALLOC;
94− if (flags & XFS_PREALLOC_CLEAR)
95− ip->i_diflags &= ~XFS_DIFLAG_PREALLOC;
96−
97− xfs_trans_log_inode(tp, ip, XFS_ILOG_CORE);
98− if (flags & XFS_PREALLOC_SYNC)
99− xfs_trans_set_sync(tp);
100− return xfs_trans_commit(tp);
101−}
102−
10369 /*
10470 * Fsync operations on directories are much simpler than on regular files,
10571 * as there is no file data to flush, and thus also no need for explicit
@@ -895,6 +861,21 @@ xfs_break_layouts( · 789 unmodified lines
895861 return error;
896862 }
897863
864+/* Does this file, inode, or mount want synchronous writes? */
865+static inline bool xfs_file_sync_writes(struct file *filp)
866+{
867+ struct xfs_inode *ip = XFS_I(file_inode(filp));
868+
869+ if (xfs_has_wsync(ip->i_mount))
870+ return true;
871+ if (filp->f_flags & (__O_SYNC | O_DSYNC))
872+ return true;
873+ if (IS_SYNC(file_inode(filp)))
874+ return true;
875+
876+ return false;
877+}
878+
898879 #define XFS_FALLOC_FL_SUPPORTED \
899880 (FALLOC_FL_KEEP_SIZE | FALLOC_FL_PUNCH_HOLE | \
900881 FALLOC_FL_COLLAPSE_RANGE | FALLOC_FL_ZERO_RANGE | \
@@ -910,7 +891,6 @@ xfs_file_fallocate( · 9 unmodified lines
910891 struct inode *inode = file_inode(file);
911892 struct xfs_inode *ip = XFS_I(inode);
912893 long error;
913− enum xfs_prealloc_flags flags = 0;
914894 uint iolock = XFS_IOLOCK_EXCL | XFS_MMAPLOCK_EXCL;
915895 loff_t new_size = 0;
916896 bool do_file_insert = false;
@@ -955,6 +935,10 @@ xfs_file_fallocate( · 38 unmodified lines
955935 goto out_unlock;
956936 }
957937
938+ error = file_modified(file);
939+ if (error)
940+ goto out_unlock;
941+
958942 if (mode & FALLOC_FL_PUNCH_HOLE) {
959943 error = xfs_free_file_space(ip, offset, len);
960944 if (error)
@@ -1004,8 +988,6 @@ xfs_file_fallocate( · 43 unmodified lines
1004988 }
1005989 do_file_insert = true;
1006990 } else {
1007− flags |= XFS_PREALLOC_SET;
1008−
1009991 if (!(mode & FALLOC_FL_KEEP_SIZE) &&
1010992 offset + len > i_size_read(inode)) {
1011993 new_size = offset + len;
@@ -1057,13 +1039,6 @@ xfs_file_fallocate( · 45 unmodified lines
10571039 }
10581040 }
10591041
1060− if (file->f_flags & O_DSYNC)
1061− flags |= XFS_PREALLOC_SYNC;
1062−
1063− error = xfs_update_prealloc_flags(ip, flags);
1064− if (error)
1065− goto out_unlock;
1066−
10671042 /* Change file size if needed */
10681043 if (new_size) {
10691044 struct iattr iattr;
@@ -1082,8 +1057,14 @@ xfs_file_fallocate( · 12 unmodified lines
10821057 * leave shifted extents past EOF and hence losing access to
10831058 * the data that is contained within them.
10841059 */
1085− if (do_file_insert)
1060+ if (do_file_insert) {
10861061 error = xfs_insert_file_space(ip, offset, len);
1062+ if (error)
1063+ goto out_unlock;
1064+ }
1065+
1066+ if (xfs_file_sync_writes(file))
1067+ error = xfs_log_force_inode(ip);
10871068
10881069 out_unlock:
10891070 xfs_iunlock(ip, iolock);
@@ -1115,21 +1096,6 @@ xfs_file_fadvise( · 25 unmodified lines
11151096 return ret;
11161097 }
11171098
1118−/* Does this file, inode, or mount want synchronous writes? */
1119−static inline bool xfs_file_sync_writes(struct file *filp)
1120−{
1121− struct xfs_inode *ip = XFS_I(file_inode(filp));
1122−
1123− if (xfs_has_wsync(ip->i_mount))
1124− return true;
1125− if (filp->f_flags & (__O_SYNC | O_DSYNC))
1126− return true;
1127− if (IS_SYNC(file_inode(filp)))
1128− return true;
1129−
1130− return false;
1131−}
1132−
11331099 STATIC loff_t
11341100 xfs_file_remap_range(
11351101 struct file *file_in,
fs/xfs/xfs_inode.h+0−9
@@ -462,15 +462,6 @@ xfs_itruncate_extents( · 461 unmodified lines
462462 }
463463
464464 /* from xfs_file.c */
465−enum xfs_prealloc_flags {
466− XFS_PREALLOC_SET = (1 << 1),
467− XFS_PREALLOC_CLEAR = (1 << 2),
468− XFS_PREALLOC_SYNC = (1 << 3),
469− XFS_PREALLOC_INVISIBLE = (1 << 4),
470−};
471−
472−int xfs_update_prealloc_flags(struct xfs_inode *ip,
473− enum xfs_prealloc_flags flags);
474465 int xfs_break_layouts(struct inode *inode, uint *iolock,
475466 enum layout_break_reason reason);
476467
fs/xfs/xfs_ioctl.c+1−1
@@ -1464,7 +1464,7 @@ xfs_ioc_getbmap( · 1463 unmodified lines
14641464
14651465 if (bmx.bmv_count < 2)
14661466 return -EINVAL;
1467− if (bmx.bmv_count > ULONG_MAX / recsize)
1467+ if (bmx.bmv_count >= INT_MAX / recsize)
14681468 return -ENOMEM;
14691469
14701470 buf = kvcalloc(bmx.bmv_count, sizeof(*buf), GFP_KERNEL);
fs/xfs/xfs_pnfs.c+39−3
@@ -70,6 +70,40 @@ xfs_fs_get_uuid( · 69 unmodified lines
7070 return 0;
7171 }
7272
73+/*
74+ * We cannot use file based VFS helpers such as file_modified() to update
75+ * inode state as we modify the data/metadata in the inode here. Hence we have
76+ * to open code the timestamp updates and SUID/SGID stripping. We also need
77+ * to set the inode prealloc flag to ensure that the extents we allocate are not
78+ * removed if the inode is reclaimed from memory before xfs_fs_block_commit()
79+ * is from the client to indicate that data has been written and the file size
80+ * can be extended.
81+ */
82+static int
83+xfs_fs_map_update_inode(
84+ struct xfs_inode *ip)
85+{
86+ struct xfs_trans *tp;
87+ int error;
88+
89+ error = xfs_trans_alloc(ip->i_mount, &M_RES(ip->i_mount)->tr_writeid,
90+ 0, 0, 0, &tp);
91+ if (error)
92+ return error;
93+
94+ xfs_ilock(ip, XFS_ILOCK_EXCL);
95+ xfs_trans_ijoin(tp, ip, XFS_ILOCK_EXCL);
96+
97+ VFS_I(ip)->i_mode &= ~S_ISUID;
98+ if (VFS_I(ip)->i_mode & S_IXGRP)
99+ VFS_I(ip)->i_mode &= ~S_ISGID;
100+ xfs_trans_ichgtime(tp, ip, XFS_ICHGTIME_MOD | XFS_ICHGTIME_CHG);
101+ ip->i_diflags |= XFS_DIFLAG_PREALLOC;
102+
103+ xfs_trans_log_inode(tp, ip, XFS_ILOG_CORE);
104+ return xfs_trans_commit(tp);
105+}
106+
73107 /*
74108 * Get a layout for the pNFS client.
75109 */
@@ -164,10 +198,12 @@ xfs_fs_map_blocks( · 88 unmodified lines
164198 * that the blocks allocated and handed out to the client are
165199 * guaranteed to be present even after a server crash.
166200 */
167− error = xfs_update_prealloc_flags(ip,
168− XFS_PREALLOC_SET | XFS_PREALLOC_SYNC);
201+ error = xfs_fs_map_update_inode(ip);
202+ if (!error)
203+ error = xfs_log_force_inode(ip);
169204 if (error)
170205 goto out_unlock;
206+
171207 } else {
172208 xfs_iunlock(ip, lock_flags);
173209 }
@@ -255,7 +291,7 @@ xfs_fs_commit_blocks( · 81 unmodified lines
255291 length = end - start;
256292 if (!length)
257293 continue;
258−
294+
259295 /*
260296 * Make sure reads through the pagecache see the new data.
261297 */
fs/xfs/xfs_super.c+5−1
@@ -735,6 +735,7 @@ xfs_fs_sync_fs( · 734 unmodified lines
735735 int wait)
736736 {
737737 struct xfs_mount *mp = XFS_M(sb);
738+ int error;
738739
739740 trace_xfs_fs_sync_fs(mp, __return_address);
740741
@@ -744,7 +745,10 @@ xfs_fs_sync_fs( · 3 unmodified lines
744745 if (!wait)
745746 return 0;
746747
747− xfs_log_force(mp, XFS_LOG_SYNC);
748+ error = xfs_log_force(mp, XFS_LOG_SYNC);
749+ if (error)
750+ return error;
751+
748752 if (laptop_mode) {
749753 /*
750754 * The disk must be active because we're syncing.
include/crypto/internal/blake2s.h+25−15
@@ -24,14 +24,11 @@ static inline void blake2s_set_lastblock(struct blake2s_state *state) · 23 unmodified lines
2424 state->f[0] = -1;
2525 }
2626
27−typedef void (*blake2s_compress_t)(struct blake2s_state *state,
28− const u8 *block, size_t nblocks, u32 inc);
29−
3027 /* Helper functions for BLAKE2s shared by the library and shash APIs */
3128
32−static inline void __blake2s_update(struct blake2s_state *state,
33− const u8 *in, size_t inlen,
34− blake2s_compress_t compress)
29+static __always_inline void
30+__blake2s_update(struct blake2s_state *state, const u8 *in, size_t inlen,
31+ bool force_generic)
3532 {
3633 const size_t fill = BLAKE2S_BLOCK_SIZE - state->buflen;
3734
@@ -39,7 +36,12 @@ static inline void __blake2s_update(struct blake2s_state *state, · 1 unmodified line
3936 return;
4037 if (inlen > fill) {
4138 memcpy(state->buf + state->buflen, in, fill);
42− (*compress)(state, state->buf, 1, BLAKE2S_BLOCK_SIZE);
39+ if (force_generic)
40+ blake2s_compress_generic(state, state->buf, 1,
41+ BLAKE2S_BLOCK_SIZE);
42+ else
43+ blake2s_compress(state, state->buf, 1,
44+ BLAKE2S_BLOCK_SIZE);
4345 state->buflen = 0;
4446 in += fill;
4547 inlen -= fill;
@@ -47,7 +49,12 @@ static inline void __blake2s_update(struct blake2s_state *state, · 1 unmodified line
4749 if (inlen > BLAKE2S_BLOCK_SIZE) {
4850 const size_t nblocks = DIV_ROUND_UP(inlen, BLAKE2S_BLOCK_SIZE);
4951 /* Hash one less (full) block than strictly possible */
50− (*compress)(state, in, nblocks - 1, BLAKE2S_BLOCK_SIZE);
52+ if (force_generic)
53+ blake2s_compress_generic(state, in, nblocks - 1,
54+ BLAKE2S_BLOCK_SIZE);
55+ else
56+ blake2s_compress(state, in, nblocks - 1,
57+ BLAKE2S_BLOCK_SIZE);
5158 in += BLAKE2S_BLOCK_SIZE * (nblocks - 1);
5259 inlen -= BLAKE2S_BLOCK_SIZE * (nblocks - 1);
5360 }
@@ -55,13 +62,16 @@ static inline void __blake2s_update(struct blake2s_state *state, · 1 unmodified line
5562 state->buflen += inlen;
5663 }
5764
58−static inline void __blake2s_final(struct blake2s_state *state, u8 *out,
59− blake2s_compress_t compress)
65+static __always_inline void
66+__blake2s_final(struct blake2s_state *state, u8 *out, bool force_generic)
6067 {
6168 blake2s_set_lastblock(state);
6269 memset(state->buf + state->buflen, 0,
6370 BLAKE2S_BLOCK_SIZE - state->buflen); /* Padding */
64− (*compress)(state, state->buf, 1, state->buflen);
71+ if (force_generic)
72+ blake2s_compress_generic(state, state->buf, 1, state->buflen);
73+ else
74+ blake2s_compress(state, state->buf, 1, state->buflen);
6575 cpu_to_le32_array(state->h, ARRAY_SIZE(state->h));
6676 memcpy(out, state->h, state->outlen);
6777 }
@@ -99,20 +109,20 @@ static inline int crypto_blake2s_init(struct shash_desc *desc) · 31 unmodified lines
99109
100110 static inline int crypto_blake2s_update(struct shash_desc *desc,
101111 const u8 *in, unsigned int inlen,
102− blake2s_compress_t compress)
112+ bool force_generic)
103113 {
104114 struct blake2s_state *state = shash_desc_ctx(desc);
105115
106− __blake2s_update(state, in, inlen, compress);
116+ __blake2s_update(state, in, inlen, force_generic);
107117 return 0;
108118 }
109119
110120 static inline int crypto_blake2s_final(struct shash_desc *desc, u8 *out,
111− blake2s_compress_t compress)
121+ bool force_generic)
112122 {
113123 struct blake2s_state *state = shash_desc_ctx(desc);
114124
115− __blake2s_final(state, out, compress);
125+ __blake2s_final(state, out, force_generic);
116126 return 0;
117127 }
118128
include/linux/ata.h+1−1
@@ -324,12 +324,12 @@ enum { · 323 unmodified lines
324324 ATA_LOG_NCQ_NON_DATA = 0x12,
325325 ATA_LOG_NCQ_SEND_RECV = 0x13,
326326 ATA_LOG_IDENTIFY_DEVICE = 0x30,
327+ ATA_LOG_CONCURRENT_POSITIONING_RANGES = 0x47,
327328
328329 /* Identify device log pages: */
329330 ATA_LOG_SECURITY = 0x06,
330331 ATA_LOG_SATA_SETTINGS = 0x08,
331332 ATA_LOG_ZONED_INFORMATION = 0x09,
332− ATA_LOG_CONCURRENT_POSITIONING_RANGES = 0x47,
333333
334334 /* Identify device SATA settings log:*/
335335 ATA_LOG_DEVSLP_OFFSET = 0x30,
include/linux/ceph/libceph.h+1−0
@@ -35,6 +35,7 @@ · 34 unmodified lines
3535 #define CEPH_OPT_TCP_NODELAY (1<<4) /* TCP_NODELAY on TCP sockets */
3636 #define CEPH_OPT_NOMSGSIGN (1<<5) /* don't sign msgs (msgr1) */
3737 #define CEPH_OPT_ABORT_ON_FULL (1<<6) /* abort w/ ENOSPC when full */
38+#define CEPH_OPT_RXBOUNCE (1<<7) /* double-buffer read data */
3839
3940 #define CEPH_OPT_DEFAULT (CEPH_OPT_TCP_NODELAY)
4041
include/linux/ceph/messenger.h+5−0
@@ -383,6 +383,10 @@ struct ceph_connection_v2_info { · 382 unmodified lines
383383 struct ceph_gcm_nonce in_gcm_nonce;
384384 struct ceph_gcm_nonce out_gcm_nonce;
385385
386+ struct page **in_enc_pages;
387+ int in_enc_page_cnt;
388+ int in_enc_resid;
389+ int in_enc_i;
386390 struct page **out_enc_pages;
387391 int out_enc_page_cnt;
388392 int out_enc_resid;
@@ -457,6 +461,7 @@ struct ceph_connection { · 68 unmodified lines
457461 struct ceph_msg *out_msg; /* sending message (== tail of
458462 out_sent) */
459463
464+ struct page *bounce_page;
460465 u32 in_front_crc, in_middle_crc, in_data_crc; /* calculated crc */
461466
462467 struct timespec64 last_keepalive_ack; /* keepalive2 ack stamp */
include/linux/fb.h+1−1
@@ -262,7 +262,7 @@ struct fb_ops { · 261 unmodified lines
262262
263263 /* Draws a rectangle */
264264 void (*fb_fillrect) (struct fb_info *info, const struct fb_fillrect *rect);
265− /* Copy data from area to another. Obsolete. */
265+ /* Copy data from area to another */
266266 void (*fb_copyarea) (struct fb_info *info, const struct fb_copyarea *region);
267267 /* Draws a image to the display */
268268 void (*fb_imageblit) (struct fb_info *info, const struct fb_image *image);
include/linux/iomap.h+2−0
@@ -263,9 +263,11 @@ struct iomap_ioend { · 262 unmodified lines
263263 struct list_head io_list; /* next ioend in chain */
264264 u16 io_type;
265265 u16 io_flags; /* IOMAP_F_* */
266+ u32 io_folios; /* folios added to ioend */
266267 struct inode *io_inode; /* file being written to */
267268 size_t io_size; /* size of the extent */
268269 loff_t io_offset; /* offset in the file */
270+ sector_t io_sector; /* start sector of ioend */
269271 struct bio *io_bio; /* bio being built */
270272 struct bio io_inline_bio; /* MUST BE LAST! */
271273 };
include/linux/jbd2.h+4−9
@@ -594,7 +594,7 @@ struct transaction_s · 593 unmodified lines
594594 */
595595 unsigned long t_log_start;
596596
597− /*
597+ /*
598598 * Number of buffers on the t_buffers list [j_list_lock, no locks
599599 * needed for jbd2 thread]
600600 */
@@ -1295,7 +1295,7 @@ struct journal_s · 694 unmodified lines
12951295 * Clean-up after fast commit or full commit. JBD2 calls this function
12961296 * after every commit operation.
12971297 */
1298− void (*j_fc_cleanup_callback)(struct journal_s *journal, int);
1298+ void (*j_fc_cleanup_callback)(struct journal_s *journal, int full, tid_t tid);
12991299
13001300 /**
13011301 * @j_fc_replay_callback:
@@ -1419,9 +1419,7 @@ extern void jbd2_journal_unfile_buffer(journal_t *, struct journal_head *); · 117 unmodified lines
14191419 extern bool __jbd2_journal_refile_buffer(struct journal_head *);
14201420 extern void jbd2_journal_refile_buffer(journal_t *, struct journal_head *);
14211421 extern void __jbd2_journal_file_buffer(struct journal_head *, transaction_t *, int);
1422−extern void __journal_free_buffer(struct journal_head *bh);
14231422 extern void jbd2_journal_file_buffer(struct journal_head *, transaction_t *, int);
1424−extern void __journal_clean_data_list(transaction_t *transaction);
14251423 static inline void jbd2_file_log_bh(struct list_head *head, struct buffer_head *bh)
14261424 {
14271425 list_add_tail(&bh->b_assoc_buffers, head);
@@ -1486,9 +1484,6 @@ extern int jbd2_journal_write_metadata_buffer(transaction_t *transaction, · 58 unmodified lines
14861484 struct buffer_head **bh_out,
14871485 sector_t blocknr);
14881486
1489−/* Transaction locking */
1490−extern void __wait_on_journal (journal_t *);
1491−
14921487 /* Transaction cache support */
14931488 extern void jbd2_journal_destroy_transaction_cache(void);
14941489 extern int __init jbd2_journal_init_transaction_cache(void);
@@ -1543,6 +1538,8 @@ extern int jbd2_journal_flush(journal_t *journal, unsigned int flags); · 48 unmodified lines
15431538 extern void jbd2_journal_lock_updates (journal_t *);
15441539 extern void jbd2_journal_unlock_updates (journal_t *);
15451540
1541+void jbd2_journal_wait_updates(journal_t *);
1542+
15461543 extern journal_t * jbd2_journal_init_dev(struct block_device *bdev,
15471544 struct block_device *fs_dev,
15481545 unsigned long long start, int len, int bsize);
@@ -1774,8 +1771,6 @@ static inline unsigned long jbd2_log_space_left(journal_t *journal) · 225 unmodified lines
17741771 #define BJ_Reserved 4 /* Buffer is reserved for access by journal */
17751772 #define BJ_Types 5
17761773
1777−extern int jbd_blocks_per_page(struct inode *inode);
1778−
17791774 /* JBD uses a CRC32 checksum */
17801775 #define JBD_MAX_CHECKSUM_SIZE 4
17811776
include/linux/kvm_host.h+109−3
@@ -29,7 +29,9 @@ · 28 unmodified lines
2929 #include <linux/refcount.h>
3030 #include <linux/nospec.h>
3131 #include <linux/notifier.h>
32+#include <linux/ftrace.h>
3233 #include <linux/hashtable.h>
34+#include <linux/instrumentation.h>
3335 #include <linux/interval_tree.h>
3436 #include <linux/rbtree.h>
3537 #include <linux/xarray.h>
@@ -368,8 +370,11 @@ struct kvm_vcpu { · 332 unmodified lines
368370 u64 last_used_slot_gen;
369371 };
370372
371−/* must be called with irqs disabled */
372−static __always_inline void guest_enter_irqoff(void)
373+/*
374+ * Start accounting time towards a guest.
375+ * Must be called before entering guest context.
376+ */
377+static __always_inline void guest_timing_enter_irqoff(void)
373378 {
374379 /*
375380 * This is running in ioctl context so its safe to assume that it's the
@@ -378,7 +383,18 @@ static __always_inline void guest_enter_irqoff(void) · 2 unmodified lines
378383 instrumentation_begin();
379384 vtime_account_guest_enter();
380385 instrumentation_end();
386+}
381387
388+/*
389+ * Enter guest context and enter an RCU extended quiescent state.
390+ *
391+ * Between guest_context_enter_irqoff() and guest_context_exit_irqoff() it is
392+ * unsafe to use any code which may directly or indirectly use RCU, tracing
393+ * (including IRQ flag tracing), or lockdep. All code in this period must be
394+ * non-instrumentable.
395+ */
396+static __always_inline void guest_context_enter_irqoff(void)
397+{
382398 /*
383399 * KVM does not hold any references to rcu protected data when it
384400 * switches CPU into a guest mode. In fact switching to a guest mode
@@ -394,16 +410,79 @@ static __always_inline void guest_enter_irqoff(void) · 9 unmodified lines
394410 }
395411 }
396412
397−static __always_inline void guest_exit_irqoff(void)
413+/*
414+ * Deprecated. Architectures should move to guest_timing_enter_irqoff() and
415+ * guest_state_enter_irqoff().
416+ */
417+static __always_inline void guest_enter_irqoff(void)
418+{
419+ guest_timing_enter_irqoff();
420+ guest_context_enter_irqoff();
421+}
422+
423+/**
424+ * guest_state_enter_irqoff - Fixup state when entering a guest
425+ *
426+ * Entry to a guest will enable interrupts, but the kernel state is interrupts
427+ * disabled when this is invoked. Also tell RCU about it.
428+ *
429+ * 1) Trace interrupts on state
430+ * 2) Invoke context tracking if enabled to adjust RCU state
431+ * 3) Tell lockdep that interrupts are enabled
432+ *
433+ * Invoked from architecture specific code before entering a guest.
434+ * Must be called with interrupts disabled and the caller must be
435+ * non-instrumentable.
436+ * The caller has to invoke guest_timing_enter_irqoff() before this.
437+ *
438+ * Note: this is analogous to exit_to_user_mode().
439+ */
440+static __always_inline void guest_state_enter_irqoff(void)
441+{
442+ instrumentation_begin();
443+ trace_hardirqs_on_prepare();
444+ lockdep_hardirqs_on_prepare(CALLER_ADDR0);
445+ instrumentation_end();
446+
447+ guest_context_enter_irqoff();
448+ lockdep_hardirqs_on(CALLER_ADDR0);
449+}
450+
451+/*
452+ * Exit guest context and exit an RCU extended quiescent state.
453+ *
454+ * Between guest_context_enter_irqoff() and guest_context_exit_irqoff() it is
455+ * unsafe to use any code which may directly or indirectly use RCU, tracing
456+ * (including IRQ flag tracing), or lockdep. All code in this period must be
457+ * non-instrumentable.
458+ */
459+static __always_inline void guest_context_exit_irqoff(void)
398460 {
399461 context_tracking_guest_exit();
462+}
400463
464+/*
465+ * Stop accounting time towards a guest.
466+ * Must be called after exiting guest context.
467+ */
468+static __always_inline void guest_timing_exit_irqoff(void)
469+{
401470 instrumentation_begin();
402471 /* Flush the guest cputime we spent on the guest */
403472 vtime_account_guest_exit();
404473 instrumentation_end();
405474 }
406475
476+/*
477+ * Deprecated. Architectures should move to guest_state_exit_irqoff() and
478+ * guest_timing_exit_irqoff().
479+ */
480+static __always_inline void guest_exit_irqoff(void)
481+{
482+ guest_context_exit_irqoff();
483+ guest_timing_exit_irqoff();
484+}
485+
407486 static inline void guest_exit(void)
408487 {
409488 unsigned long flags;
@@ -413,6 +492,33 @@ static inline void guest_exit(void) · 3 unmodified lines
413492 local_irq_restore(flags);
414493 }
415494
495+/**
496+ * guest_state_exit_irqoff - Establish state when returning from guest mode
497+ *
498+ * Entry from a guest disables interrupts, but guest mode is traced as
499+ * interrupts enabled. Also with NO_HZ_FULL RCU might be idle.
500+ *
501+ * 1) Tell lockdep that interrupts are disabled
502+ * 2) Invoke context tracking if enabled to reactivate RCU
503+ * 3) Trace interrupts off state
504+ *
505+ * Invoked from architecture specific code after exiting a guest.
506+ * Must be invoked with interrupts disabled and the caller must be
507+ * non-instrumentable.
508+ * The caller has to invoke guest_timing_exit_irqoff() after this.
509+ *
510+ * Note: this is analogous to enter_from_user_mode().
511+ */
512+static __always_inline void guest_state_exit_irqoff(void)
513+{
514+ lockdep_hardirqs_off(CALLER_ADDR0);
515+ guest_context_exit_irqoff();
516+
517+ instrumentation_begin();
518+ trace_hardirqs_off_finish();
519+ instrumentation_end();
520+}
521+
416522 static inline int kvm_vcpu_exiting_guest_mode(struct kvm_vcpu *vcpu)
417523 {
418524 /*
include/linux/libata.h+1−0
@@ -380,6 +380,7 @@ enum { · 379 unmodified lines
380380 ATA_HORKAGE_MAX_TRIM_128M = (1 << 26), /* Limit max trim size to 128M */
381381 ATA_HORKAGE_NO_NCQ_ON_ATI = (1 << 27), /* Disable NCQ on ATI chipset */
382382 ATA_HORKAGE_NO_ID_DEV_LOG = (1 << 28), /* Identify device log missing */
383+ ATA_HORKAGE_NO_LOG_DIR = (1 << 29), /* Do not read log directory */
383384
384385 /* DMA mask for user DMA control: User visible values; DO NOT
385386 renumber */
include/linux/netfs.h+7−0
@@ -244,6 +244,13 @@ struct netfs_cache_ops { · 243 unmodified lines
244244 int (*prepare_write)(struct netfs_cache_resources *cres,
245245 loff_t *_start, size_t *_len, loff_t i_size,
246246 bool no_space_allocated_yet);
247+
248+ /* Query the occupancy of the cache in a region, returning where the
249+ * next chunk of data starts and how long it is.
250+ */
251+ int (*query_occupancy)(struct netfs_cache_resources *cres,
252+ loff_t start, size_t len, size_t granularity,
253+ loff_t *_data_start, size_t *_data_len);
247254 };
248255
249256 struct readahead_control;
include/linux/nfs.h+0−8
@@ -36,14 +36,6 @@ static inline void nfs_copy_fh(struct nfs_fh *target, const struct nfs_fh *sourc · 35 unmodified lines
3636 memcpy(target->data, source->data, source->size);
3737 }
3838
39−
40−/*
41− * This is really a general kernel constant, but since nothing like
42− * this is defined in the kernel headers, I have to do it here.
43− */
44−#define NFS_OFFSET_MAX ((__s64)((~(__u64)0) >> 1))
45−
46−
4739 enum nfs3_stable_how {
4840 NFS_UNSTABLE = 0,
4941 NFS_DATA_SYNC = 1,
include/linux/nfs_fs.h+1−0
@@ -107,6 +107,7 @@ struct nfs_open_dir_context { · 106 unmodified lines
107107 __u64 dup_cookie;
108108 pgoff_t page_index;
109109 signed char duped;
110+ bool eof;
110111 };
111112
112113 /*
include/linux/page_table_check.h+19−0
@@ -26,6 +26,9 @@ void __page_table_check_pmd_set(struct mm_struct *mm, unsigned long addr, · 25 unmodified lines
2626 pmd_t *pmdp, pmd_t pmd);
2727 void __page_table_check_pud_set(struct mm_struct *mm, unsigned long addr,
2828 pud_t *pudp, pud_t pud);
29+void __page_table_check_pte_clear_range(struct mm_struct *mm,
30+ unsigned long addr,
31+ pmd_t pmd);
2932
3033 static inline void page_table_check_alloc(struct page *page, unsigned int order)
3134 {
@@ -100,6 +103,16 @@ static inline void page_table_check_pud_set(struct mm_struct *mm, · 68 unmodified lines
100103 __page_table_check_pud_set(mm, addr, pudp, pud);
101104 }
102105
106+static inline void page_table_check_pte_clear_range(struct mm_struct *mm,
107+ unsigned long addr,
108+ pmd_t pmd)
109+{
110+ if (static_branch_likely(&page_table_check_disabled))
111+ return;
112+
113+ __page_table_check_pte_clear_range(mm, addr, pmd);
114+}
115+
103116 #else
104117
105118 static inline void page_table_check_alloc(struct page *page, unsigned int order)
@@ -143,5 +156,11 @@ static inline void page_table_check_pud_set(struct mm_struct *mm, · 37 unmodified lines
143156 {
144157 }
145158
159+static inline void page_table_check_pte_clear_range(struct mm_struct *mm,
160+ unsigned long addr,
161+ pmd_t pmd)
162+{
163+}
164+
146165 #endif /* CONFIG_PAGE_TABLE_CHECK */
147166 #endif /* __LINUX_PAGE_TABLE_CHECK_H */
include/linux/pgtable.h+1−0
@@ -62,6 +62,7 @@ static inline unsigned long pte_index(unsigned long address) · 61 unmodified lines
6262 {
6363 return (address >> PAGE_SHIFT) & (PTRS_PER_PTE - 1);
6464 }
65+#define pte_index pte_index
6566
6667 #ifndef pmd_index
6768 static inline unsigned long pmd_index(unsigned long address)
include/net/dst_metadata.h+13−1
@@ -123,8 +123,20 @@ static inline struct metadata_dst *tun_dst_unclone(struct sk_buff *skb) · 122 unmodified lines
123123
124124 memcpy(&new_md->u.tun_info, &md_dst->u.tun_info,
125125 sizeof(struct ip_tunnel_info) + md_size);
126+#ifdef CONFIG_DST_CACHE
127+ /* Unclone the dst cache if there is one */
128+ if (new_md->u.tun_info.dst_cache.cache) {
129+ int ret;
130+
131+ ret = dst_cache_init(&new_md->u.tun_info.dst_cache, GFP_ATOMIC);
132+ if (ret) {
133+ metadata_dst_free(new_md);
134+ return ERR_PTR(ret);
135+ }
136+ }
137+#endif
138+
126139 skb_dst_drop(skb);
127− dst_hold(&new_md->dst);
128140 skb_dst_set(skb, &new_md->dst);
129141 return new_md;
130142 }
include/sound/pcm.h+15−0
@@ -617,6 +617,7 @@ void snd_pcm_stream_unlock(struct snd_pcm_substream *substream); · 616 unmodified lines
617617 void snd_pcm_stream_lock_irq(struct snd_pcm_substream *substream);
618618 void snd_pcm_stream_unlock_irq(struct snd_pcm_substream *substream);
619619 unsigned long _snd_pcm_stream_lock_irqsave(struct snd_pcm_substream *substream);
620+unsigned long _snd_pcm_stream_lock_irqsave_nested(struct snd_pcm_substream *substream);
620621
621622 /**
622623 * snd_pcm_stream_lock_irqsave - Lock the PCM stream
@@ -635,6 +636,20 @@ unsigned long _snd_pcm_stream_lock_irqsave(struct snd_pcm_substream *substream); · 12 unmodified lines
635636 void snd_pcm_stream_unlock_irqrestore(struct snd_pcm_substream *substream,
636637 unsigned long flags);
637638
639+/**
640+ * snd_pcm_stream_lock_irqsave_nested - Single-nested PCM stream locking
641+ * @substream: PCM substream
642+ * @flags: irq flags
643+ *
644+ * This locks the PCM stream like snd_pcm_stream_lock_irqsave() but with
645+ * the single-depth lockdep subclass.
646+ */
647+#define snd_pcm_stream_lock_irqsave_nested(substream, flags) \
648+ do { \
649+ typecheck(unsigned long, flags); \
650+ flags = _snd_pcm_stream_lock_irqsave_nested(substream); \
651+ } while (0)
652+
638653 /**
639654 * snd_pcm_group_for_each_entry - iterate over the linked substreams
640655 * @s: the iterator
include/uapi/linux/kvm.h+3−3
@@ -1624,9 +1624,6 @@ struct kvm_enc_region { · 1623 unmodified lines
16241624 #define KVM_S390_NORMAL_RESET _IO(KVMIO, 0xc3)
16251625 #define KVM_S390_CLEAR_RESET _IO(KVMIO, 0xc4)
16261626
1627−/* Available with KVM_CAP_XSAVE2 */
1628−#define KVM_GET_XSAVE2 _IOR(KVMIO, 0xcf, struct kvm_xsave)
1629−
16301627 struct kvm_s390_pv_sec_parm {
16311628 __u64 origin;
16321629 __u64 length;
@@ -2048,4 +2045,7 @@ struct kvm_stats_desc { · 415 unmodified lines
20482045
20492046 #define KVM_GET_STATS_FD _IO(KVMIO, 0xce)
20502047
2048+/* Available with KVM_CAP_XSAVE2 */
2049+#define KVM_GET_XSAVE2 _IOR(KVMIO, 0xcf, struct kvm_xsave)
2050+
20512051 #endif /* __LINUX_KVM_H */
include/uapi/linux/netfilter/nf_conntrack_common.h+1−1
@@ -106,7 +106,7 @@ enum ip_conntrack_status { · 105 unmodified lines
106106 IPS_NAT_CLASH = IPS_UNTRACKED,
107107 #endif
108108
109− /* Conntrack got a helper explicitly attached via CT target. */
109+ /* Conntrack got a helper explicitly attached (ruleset, ctnetlink). */
110110 IPS_HELPER_BIT = 13,
111111 IPS_HELPER = (1 << IPS_HELPER_BIT),
112112
include/uapi/linux/perf_event.h+2−0
@@ -465,6 +465,8 @@ struct perf_event_attr { · 464 unmodified lines
465465 /*
466466 * User provided data if sigtrap=1, passed back to user via
467467 * siginfo_t::si_perf_data, e.g. to permit user to identify the event.
468+ * Note, siginfo_t::si_perf_data is long-sized, and sig_data will be
469+ * truncated accordingly on 32 bit architectures.
468470 */
469471 __u64 sig_data;
470472 };
include/uapi/sound/asound.h+3−1
@@ -56,8 +56,10 @@ · 55 unmodified lines
5656 * *
5757 ****************************************************************************/
5858
59+#define AES_IEC958_STATUS_SIZE 24
60+
5961 struct snd_aes_iec958 {
60− unsigned char status[24]; /* AES/IEC958 channel status bits */
62+ unsigned char status[AES_IEC958_STATUS_SIZE]; /* AES/IEC958 channel status bits */
6163 unsigned char subcode[147]; /* AES/IEC958 subcode bits */
6264 unsigned char pad; /* nothing */
6365 unsigned char dig_subframe[4]; /* AES/IEC958 subframe bits */
include/uapi/xen/gntdev.h+7−1
@@ -47,7 +47,13 @@ struct ioctl_gntdev_grant_ref { · 46 unmodified lines
4747 /*
4848 * Inserts the grant references into the mapping table of an instance
4949 * of gntdev. N.B. This does not perform the mapping, which is deferred
50− * until mmap() is called with @index as the offset.
50+ * until mmap() is called with @index as the offset. @index should be
51+ * considered opaque to userspace, with one exception: if no grant
52+ * references have ever been inserted into the mapping table of this
53+ * instance, @index will be set to 0. This is necessary to use gntdev
54+ * with userspace APIs that expect a file descriptor that can be
55+ * mmap()'d at offset 0, such as Wayland. If @count is set to 0, this
56+ * ioctl will fail.
5157 */
5258 #define IOCTL_GNTDEV_MAP_GRANT_REF \
5359 _IOC(_IOC_NONE, 'G', 0, sizeof(struct ioctl_gntdev_map_grant_ref))
include/xen/xenbus_dev.h+0−2
@@ -1,6 +1,4 @@
11 /******************************************************************************
2− * evtchn.h
3− *
42 * Interface to /dev/xen/xenbus_backend.
53 *
64 * Copyright (c) 2011 Bastian Blank <waldi@debian.org>
ipc/sem.c+2−2
@@ -1964,6 +1964,7 @@ static struct sem_undo *find_alloc_undo(struct ipc_namespace *ns, int semid) · 1963 unmodified lines
19641964 */
19651965 un = lookup_undo(ulp, semid);
19661966 if (un) {
1967+ spin_unlock(&ulp->lock);
19671968 kvfree(new);
19681969 goto success;
19691970 }
@@ -1976,9 +1977,8 @@ static struct sem_undo *find_alloc_undo(struct ipc_namespace *ns, int semid) · 6 unmodified lines
19761977 ipc_assert_locked_object(&sma->sem_perm);
19771978 list_add(&new->list_id, &sma->list_id);
19781979 un = new;
1979−
1980−success:
19811980 spin_unlock(&ulp->lock);
1981+success:
19821982 sem_unlock(sma, -1);
19831983 out:
19841984 return un;
kernel/auditsc.c+1−1
@@ -185,7 +185,7 @@ static int audit_match_perm(struct audit_context *ctx, int mask) · 184 unmodified lines
185185 case AUDITSC_EXECVE:
186186 return mask & AUDIT_PERM_EXEC;
187187 case AUDITSC_OPENAT2:
188− return mask & ACC_MODE((u32)((struct open_how *)ctx->argv[2])->flags);
188+ return mask & ACC_MODE((u32)ctx->openat2.flags);
189189 default:
190190 return 0;
191191 }
kernel/events/core.c+16−0
@@ -3238,6 +3238,15 @@ static int perf_event_modify_breakpoint(struct perf_event *bp, · 3237 unmodified lines
32383238 return err;
32393239 }
32403240
3241+/*
3242+ * Copy event-type-independent attributes that may be modified.
3243+ */
3244+static void perf_event_modify_copy_attr(struct perf_event_attr *to,
3245+ const struct perf_event_attr *from)
3246+{
3247+ to->sig_data = from->sig_data;
3248+}
3249+
32413250 static int perf_event_modify_attr(struct perf_event *event,
32423251 struct perf_event_attr *attr)
32433252 {
@@ -3260,10 +3269,17 @@ static int perf_event_modify_attr(struct perf_event *event, · 16 unmodified lines
32603269 WARN_ON_ONCE(event->ctx->parent_ctx);
32613270
32623271 mutex_lock(&event->child_mutex);
3272+ /*
3273+ * Event-type-independent attributes must be copied before event-type
3274+ * modification, which will validate that final attributes match the
3275+ * source attributes after all relevant attributes have been copied.
3276+ */
3277+ perf_event_modify_copy_attr(&event->attr, attr);
32633278 err = func(event, attr);
32643279 if (err)
32653280 goto out;
32663281 list_for_each_entry(child, &event->child_list, child_list) {
3282+ perf_event_modify_copy_attr(&child->attr, attr);
32673283 err = func(child, attr);
32683284 if (err)
32693285 goto out;
lib/crypto/blake2s.c+2−2
@@ -18,14 +18,14 @@ · 17 unmodified lines
1818
1919 void blake2s_update(struct blake2s_state *state, const u8 *in, size_t inlen)
2020 {
21− __blake2s_update(state, in, inlen, blake2s_compress);
21+ __blake2s_update(state, in, inlen, false);
2222 }
2323 EXPORT_SYMBOL(blake2s_update);
2424
2525 void blake2s_final(struct blake2s_state *state, u8 *out)
2626 {
2727 WARN_ON(IS_ENABLED(DEBUG) && !out);
28− __blake2s_final(state, out, blake2s_compress);
28+ __blake2s_final(state, out, false);
2929 memzero_explicit(state, sizeof(*state));
3030 }
3131 EXPORT_SYMBOL(blake2s_final);
mm/debug_vm_pgtable.c+2−0
@@ -171,6 +171,8 @@ static void __init pte_advanced_tests(struct pgtable_debug_args *args) · 170 unmodified lines
171171 ptep_test_and_clear_young(args->vma, args->vaddr, args->ptep);
172172 pte = ptep_get(args->ptep);
173173 WARN_ON(pte_young(pte));
174+
175+ ptep_get_and_clear_full(args->mm, args->vaddr, args->ptep, 1);
174176 }
175177
176178 static void __init pte_savedwrite_tests(struct pgtable_debug_args *args)
mm/khugepaged.c+21−16
@@ -16,6 +16,7 @@ · 15 unmodified lines
1616 #include <linux/hashtable.h>
1717 #include <linux/userfaultfd_k.h>
1818 #include <linux/page_idle.h>
19+#include <linux/page_table_check.h>
1920 #include <linux/swapops.h>
2021 #include <linux/shmem_fs.h>
2122
@@ -1416,6 +1417,21 @@ static int khugepaged_add_pte_mapped_thp(struct mm_struct *mm, · 1394 unmodified lines
14161417 return 0;
14171418 }
14181419
1420+static void collapse_and_free_pmd(struct mm_struct *mm, struct vm_area_struct *vma,
1421+ unsigned long addr, pmd_t *pmdp)
1422+{
1423+ spinlock_t *ptl;
1424+ pmd_t pmd;
1425+
1426+ mmap_assert_write_locked(mm);
1427+ ptl = pmd_lock(vma->vm_mm, pmdp);
1428+ pmd = pmdp_collapse_flush(vma, addr, pmdp);
1429+ spin_unlock(ptl);
1430+ mm_dec_nr_ptes(mm);
1431+ page_table_check_pte_clear_range(mm, addr, pmd);
1432+ pte_free(mm, pmd_pgtable(pmd));
1433+}
1434+
14191435 /**
14201436 * collapse_pte_mapped_thp - Try to collapse a pte-mapped THP for mm at
14211437 * address haddr.
@@ -1433,7 +1449,7 @@ void collapse_pte_mapped_thp(struct mm_struct *mm, unsigned long addr) · 11 unmodified lines
14331449 struct vm_area_struct *vma = find_vma(mm, haddr);
14341450 struct page *hpage;
14351451 pte_t *start_pte, *pte;
1436− pmd_t *pmd, _pmd;
1452+ pmd_t *pmd;
14371453 spinlock_t *ptl;
14381454 int count = 0;
14391455 int i;
@@ -1509,12 +1525,7 @@ void collapse_pte_mapped_thp(struct mm_struct *mm, unsigned long addr) · 69 unmodified lines
15091525 }
15101526
15111527 /* step 4: collapse pmd */
1512− ptl = pmd_lock(vma->vm_mm, pmd);
1513− _pmd = pmdp_collapse_flush(vma, haddr, pmd);
1514− spin_unlock(ptl);
1515− mm_dec_nr_ptes(mm);
1516− pte_free(mm, pmd_pgtable(_pmd));
1517−
1528+ collapse_and_free_pmd(mm, vma, haddr, pmd);
15181529 drop_hpage:
15191530 unlock_page(hpage);
15201531 put_page(hpage);
@@ -1552,7 +1563,7 @@ static void retract_page_tables(struct address_space *mapping, pgoff_t pgoff) · 31 unmodified lines
15521563 struct vm_area_struct *vma;
15531564 struct mm_struct *mm;
15541565 unsigned long addr;
1555− pmd_t *pmd, _pmd;
1566+ pmd_t *pmd;
15561567
15571568 i_mmap_lock_write(mapping);
15581569 vma_interval_tree_foreach(vma, &mapping->i_mmap, pgoff, pgoff) {
@@ -1591,14 +1602,8 @@ static void retract_page_tables(struct address_space *mapping, pgoff_t pgoff) · 32 unmodified lines
15911602 * reverse order. Trylock is a way to avoid deadlock.
15921603 */
15931604 if (mmap_write_trylock(mm)) {
1594− if (!khugepaged_test_exit(mm)) {
1595− spinlock_t *ptl = pmd_lock(mm, pmd);
1596− /* assume page table is clear */
1597− _pmd = pmdp_collapse_flush(vma, addr, pmd);
1598− spin_unlock(ptl);
1599− mm_dec_nr_ptes(mm);
1600− pte_free(mm, pmd_pgtable(_pmd));
1601− }
1605+ if (!khugepaged_test_exit(mm))
1606+ collapse_and_free_pmd(mm, vma, addr, pmd);
16021607 mmap_write_unlock(mm);
16031608 } else {
16041609 /* Try again later */
mm/kmemleak.c+7−6
@@ -1410,7 +1410,8 @@ static void kmemleak_scan(void) · 1409 unmodified lines
14101410 {
14111411 unsigned long flags;
14121412 struct kmemleak_object *object;
1413− int i;
1413+ struct zone *zone;
1414+ int __maybe_unused i;
14141415 int new_leaks = 0;
14151416
14161417 jiffies_last_scan = jiffies;
@@ -1450,9 +1451,9 @@ static void kmemleak_scan(void) · 33 unmodified lines
14501451 * Struct page scanning for each node.
14511452 */
14521453 get_online_mems();
1453− for_each_online_node(i) {
1454− unsigned long start_pfn = node_start_pfn(i);
1455− unsigned long end_pfn = node_end_pfn(i);
1454+ for_each_populated_zone(zone) {
1455+ unsigned long start_pfn = zone->zone_start_pfn;
1456+ unsigned long end_pfn = zone_end_pfn(zone);
14561457 unsigned long pfn;
14571458
14581459 for (pfn = start_pfn; pfn < end_pfn; pfn++) {
@@ -1461,8 +1462,8 @@ static void kmemleak_scan(void) · 2 unmodified lines
14611462 if (!page)
14621463 continue;
14631464
1464− /* only scan pages belonging to this node */
1465− if (page_to_nid(page) != i)
1465+ /* only scan pages belonging to this zone */
1466+ if (page_zone(page) != zone)
14661467 continue;
14671468 /* only scan if page is in use */
14681469 if (page_count(page) == 0)
mm/page_isolation.c+1−1
@@ -115,7 +115,7 @@ static void unset_migratetype_isolate(struct page *page, unsigned migratetype) · 114 unmodified lines
115115 * onlining - just onlined memory won't immediately be considered for
116116 * allocation.
117117 */
118− if (!isolated_page && PageBuddy(page)) {
118+ if (!isolated_page) {
119119 nr_pages = move_freepages_block(zone, page, migratetype, NULL);
120120 __mod_zone_freepage_state(zone, nr_pages, migratetype);
121121 }
mm/page_table_check.c+27−28
@@ -86,8 +86,8 @@ static void page_table_check_clear(struct mm_struct *mm, unsigned long addr, · 85 unmodified lines
8686 {
8787 struct page_ext *page_ext;
8888 struct page *page;
89+ unsigned long i;
8990 bool anon;
90− int i;
9191
9292 if (!pfn_valid(pfn))
9393 return;
@@ -121,8 +121,8 @@ static void page_table_check_set(struct mm_struct *mm, unsigned long addr, · 27 unmodified lines
121121 {
122122 struct page_ext *page_ext;
123123 struct page *page;
124+ unsigned long i;
124125 bool anon;
125− int i;
126126
127127 if (!pfn_valid(pfn))
128128 return;
@@ -152,10 +152,10 @@ static void page_table_check_set(struct mm_struct *mm, unsigned long addr, · 23 unmodified lines
152152 void __page_table_check_zero(struct page *page, unsigned int order)
153153 {
154154 struct page_ext *page_ext = lookup_page_ext(page);
155− int i;
155+ unsigned long i;
156156
157157 BUG_ON(!page_ext);
158− for (i = 0; i < (1 << order); i++) {
158+ for (i = 0; i < (1ul << order); i++) {
159159 struct page_table_check *ptc = get_page_table_check(page_ext);
160160
161161 BUG_ON(atomic_read(&ptc->anon_map_count));
@@ -206,17 +206,10 @@ EXPORT_SYMBOL(__page_table_check_pud_clear); · 44 unmodified lines
206206 void __page_table_check_pte_set(struct mm_struct *mm, unsigned long addr,
207207 pte_t *ptep, pte_t pte)
208208 {
209− pte_t old_pte;
210−
211209 if (&init_mm == mm)
212210 return;
213211
214− old_pte = *ptep;
215− if (pte_user_accessible_page(old_pte)) {
216− page_table_check_clear(mm, addr, pte_pfn(old_pte),
217− PAGE_SIZE >> PAGE_SHIFT);
218− }
219−
212+ __page_table_check_pte_clear(mm, addr, *ptep);
220213 if (pte_user_accessible_page(pte)) {
221214 page_table_check_set(mm, addr, pte_pfn(pte),
222215 PAGE_SIZE >> PAGE_SHIFT,
@@ -228,17 +221,10 @@ EXPORT_SYMBOL(__page_table_check_pte_set); · 5 unmodified lines
228221 void __page_table_check_pmd_set(struct mm_struct *mm, unsigned long addr,
229222 pmd_t *pmdp, pmd_t pmd)
230223 {
231− pmd_t old_pmd;
232−
233224 if (&init_mm == mm)
234225 return;
235226
236− old_pmd = *pmdp;
237− if (pmd_user_accessible_page(old_pmd)) {
238− page_table_check_clear(mm, addr, pmd_pfn(old_pmd),
239− PMD_PAGE_SIZE >> PAGE_SHIFT);
240− }
241−
227+ __page_table_check_pmd_clear(mm, addr, *pmdp);
242228 if (pmd_user_accessible_page(pmd)) {
243229 page_table_check_set(mm, addr, pmd_pfn(pmd),
244230 PMD_PAGE_SIZE >> PAGE_SHIFT,
@@ -250,17 +236,10 @@ EXPORT_SYMBOL(__page_table_check_pmd_set); · 5 unmodified lines
250236 void __page_table_check_pud_set(struct mm_struct *mm, unsigned long addr,
251237 pud_t *pudp, pud_t pud)
252238 {
253− pud_t old_pud;
254−
255239 if (&init_mm == mm)
256240 return;
257241
258− old_pud = *pudp;
259− if (pud_user_accessible_page(old_pud)) {
260− page_table_check_clear(mm, addr, pud_pfn(old_pud),
261− PUD_PAGE_SIZE >> PAGE_SHIFT);
262− }
263−
242+ __page_table_check_pud_clear(mm, addr, *pudp);
264243 if (pud_user_accessible_page(pud)) {
265244 page_table_check_set(mm, addr, pud_pfn(pud),
266245 PUD_PAGE_SIZE >> PAGE_SHIFT,
@@ -268,3 +247,23 @@ void __page_table_check_pud_set(struct mm_struct *mm, unsigned long addr, · 1 unmodified line
268247 }
269248 }
270249 EXPORT_SYMBOL(__page_table_check_pud_set);
250+
251+void __page_table_check_pte_clear_range(struct mm_struct *mm,
252+ unsigned long addr,
253+ pmd_t pmd)
254+{
255+ if (&init_mm == mm)
256+ return;
257+
258+ if (!pmd_bad(pmd) && !pmd_leaf(pmd)) {
259+ pte_t *ptep = pte_offset_map(&pmd, addr);
260+ unsigned long i;
261+
262+ pte_unmap(ptep);
263+ for (i = 0; i < PTRS_PER_PTE; i++) {
264+ __page_table_check_pte_clear(mm, addr, *ptep);
265+ addr += PAGE_SIZE;
266+ ptep++;
267+ }
268+ }
269+}
net/8021q/vlan.h+1−1
@@ -129,6 +129,7 @@ void vlan_dev_set_ingress_priority(const struct net_device *dev, · 128 unmodified lines
129129 u32 skb_prio, u16 vlan_prio);
130130 int vlan_dev_set_egress_priority(const struct net_device *dev,
131131 u32 skb_prio, u16 vlan_prio);
132+void vlan_dev_free_egress_priority(const struct net_device *dev);
132133 int vlan_dev_change_flags(const struct net_device *dev, u32 flag, u32 mask);
133134 void vlan_dev_get_realdev_name(const struct net_device *dev, char *result,
134135 size_t size);
@@ -139,7 +140,6 @@ int vlan_check_real_dev(struct net_device *real_dev, · 4 unmodified lines
139140 void vlan_setup(struct net_device *dev);
140141 int register_vlan_dev(struct net_device *dev, struct netlink_ext_ack *extack);
141142 void unregister_vlan_dev(struct net_device *dev, struct list_head *head);
142−void vlan_dev_uninit(struct net_device *dev);
143143 bool vlan_dev_inherit_address(struct net_device *dev,
144144 struct net_device *real_dev);
145145
net/8021q/vlan_dev.c+11−4
@@ -622,7 +622,7 @@ static int vlan_dev_init(struct net_device *dev) · 621 unmodified lines
622622 }
623623
624624 /* Note: this function might be called multiple times for the same device. */
625−void vlan_dev_uninit(struct net_device *dev)
625+void vlan_dev_free_egress_priority(const struct net_device *dev)
626626 {
627627 struct vlan_priority_tci_mapping *pm;
628628 struct vlan_dev_priv *vlan = vlan_dev_priv(dev);
@@ -636,6 +636,16 @@ void vlan_dev_uninit(struct net_device *dev) · 7 unmodified lines
636636 }
637637 }
638638
639+static void vlan_dev_uninit(struct net_device *dev)
640+{
641+ struct vlan_dev_priv *vlan = vlan_dev_priv(dev);
642+
643+ vlan_dev_free_egress_priority(dev);
644+
645+ /* Get rid of the vlan's reference to real_dev */
646+ dev_put_track(vlan->real_dev, &vlan->dev_tracker);
647+}
648+
639649 static netdev_features_t vlan_dev_fix_features(struct net_device *dev,
640650 netdev_features_t features)
641651 {
@@ -846,9 +856,6 @@ static void vlan_dev_free(struct net_device *dev) · 204 unmodified lines
846856
847857 free_percpu(vlan->vlan_pcpu_stats);
848858 vlan->vlan_pcpu_stats = NULL;
849−
850− /* Get rid of the vlan's reference to real_dev */
851− dev_put_track(vlan->real_dev, &vlan->dev_tracker);
852859 }
853860
854861 void vlan_setup(struct net_device *dev)
net/8021q/vlan_netlink.c+4−3
@@ -183,10 +183,11 @@ static int vlan_newlink(struct net *src_net, struct net_device *dev, · 182 unmodified lines
183183 return -EINVAL;
184184
185185 err = vlan_changelink(dev, tb, data, extack);
186− if (!err)
187− err = register_vlan_dev(dev, extack);
188186 if (err)
189− vlan_dev_uninit(dev);
187+ return err;
188+ err = register_vlan_dev(dev, extack);
189+ if (err)
190+ vlan_dev_free_egress_priority(dev);
190191 return err;
191192 }
192193
net/ax25/af_ax25.c+5−2
@@ -91,9 +91,10 @@ again: · 90 unmodified lines
9191 spin_unlock_bh(&ax25_list_lock);
9292 lock_sock(sk);
9393 s->ax25_dev = NULL;
94+ dev_put_track(ax25_dev->dev, &ax25_dev->dev_tracker);
9495 ax25_dev_put(ax25_dev);
95− release_sock(sk);
9696 ax25_disconnect(s, ENETUNREACH);
97+ release_sock(sk);
9798 spin_lock_bh(&ax25_list_lock);
9899 sock_put(sk);
99100 /* The entry could have been deleted from the
@@ -1116,8 +1117,10 @@ static int ax25_bind(struct socket *sock, struct sockaddr *uaddr, int addr_len) · 1016 unmodified lines
11161117 }
11171118 }
11181119
1119− if (ax25_dev != NULL)
1120+ if (ax25_dev) {
11201121 ax25_fillin_cb(ax25, ax25_dev);
1122+ dev_hold_track(ax25_dev->dev, &ax25_dev->dev_tracker, GFP_ATOMIC);
1123+ }
11211124
11221125 done:
11231126 ax25_cb_add(ax25);
net/can/isotp.c+22−7
@@ -56,6 +56,7 @@ · 55 unmodified lines
5656 #include <linux/module.h>
5757 #include <linux/init.h>
5858 #include <linux/interrupt.h>
59+#include <linux/spinlock.h>
5960 #include <linux/hrtimer.h>
6061 #include <linux/wait.h>
6162 #include <linux/uio.h>
@@ -145,6 +146,7 @@ struct isotp_sock { · 83 unmodified lines
145146 struct tpcon rx, tx;
146147 struct list_head notifier;
147148 wait_queue_head_t wait;
149+ spinlock_t rx_lock; /* protect single thread state machine */
148150 };
149151
150152 static LIST_HEAD(isotp_notifier_list);
@@ -615,11 +617,17 @@ static void isotp_rcv(struct sk_buff *skb, void *data) · 464 unmodified lines
615617
616618 n_pci_type = cf->data[ae] & 0xF0;
617619
620+ /* Make sure the state changes and data structures stay consistent at
621+ * CAN frame reception time. This locking is not needed in real world
622+ * use cases but the inconsistency can be triggered with syzkaller.
623+ */
624+ spin_lock(&so->rx_lock);
625+
618626 if (so->opt.flags & CAN_ISOTP_HALF_DUPLEX) {
619627 /* check rx/tx path half duplex expectations */
620628 if ((so->tx.state != ISOTP_IDLE && n_pci_type != N_PCI_FC) ||
621629 (so->rx.state != ISOTP_IDLE && n_pci_type == N_PCI_FC))
622− return;
630+ goto out_unlock;
623631 }
624632
625633 switch (n_pci_type) {
@@ -668,6 +676,9 @@ static void isotp_rcv(struct sk_buff *skb, void *data) · 42 unmodified lines
668676 isotp_rcv_cf(sk, cf, ae, skb);
669677 break;
670678 }
679+
680+out_unlock:
681+ spin_unlock(&so->rx_lock);
671682 }
672683
673684 static void isotp_fill_dataframe(struct canfd_frame *cf, struct isotp_sock *so,
@@ -876,7 +887,7 @@ static int isotp_sendmsg(struct socket *sock, struct msghdr *msg, size_t size) · 202 unmodified lines
876887
877888 if (!size || size > MAX_MSG_LENGTH) {
878889 err = -EINVAL;
879− goto err_out;
890+ goto err_out_drop;
880891 }
881892
882893 /* take care of a potential SF_DL ESC offset for TX_DL > 8 */
@@ -886,24 +897,24 @@ static int isotp_sendmsg(struct socket *sock, struct msghdr *msg, size_t size) · 3 unmodified lines
886897 if ((so->opt.flags & CAN_ISOTP_SF_BROADCAST) &&
887898 (size > so->tx.ll_dl - SF_PCI_SZ4 - ae - off)) {
888899 err = -EINVAL;
889− goto err_out;
900+ goto err_out_drop;
890901 }
891902
892903 err = memcpy_from_msg(so->tx.buf, msg, size);
893904 if (err < 0)
894− goto err_out;
905+ goto err_out_drop;
895906
896907 dev = dev_get_by_index(sock_net(sk), so->ifindex);
897908 if (!dev) {
898909 err = -ENXIO;
899− goto err_out;
910+ goto err_out_drop;
900911 }
901912
902913 skb = sock_alloc_send_skb(sk, so->ll.mtu + sizeof(struct can_skb_priv),
903914 msg->msg_flags & MSG_DONTWAIT, &err);
904915 if (!skb) {
905916 dev_put(dev);
906− goto err_out;
917+ goto err_out_drop;
907918 }
908919
909920 can_skb_reserve(skb);
@@ -965,7 +976,7 @@ static int isotp_sendmsg(struct socket *sock, struct msghdr *msg, size_t size) · 55 unmodified lines
965976 if (err) {
966977 pr_notice_once("can-isotp: %s: can_send_ret %pe\n",
967978 __func__, ERR_PTR(err));
968− goto err_out;
979+ goto err_out_drop;
969980 }
970981
971982 if (wait_tx_done) {
@@ -978,6 +989,9 @@ static int isotp_sendmsg(struct socket *sock, struct msghdr *msg, size_t size) · 6 unmodified lines
978989
979990 return size;
980991
992+err_out_drop:
993+ /* drop this PDU and unlock a potential wait queue */
994+ old_state = ISOTP_IDLE;
981995 err_out:
982996 so->tx.state = old_state;
983997 if (so->tx.state == ISOTP_IDLE)
@@ -1444,6 +1458,7 @@ static int isotp_init(struct sock *sk) · 460 unmodified lines
14441458 so->txtimer.function = isotp_tx_timer_handler;
14451459
14461460 init_waitqueue_head(&so->wait);
1461+ spin_lock_init(&so->rx_lock);
14471462
14481463 spin_lock(&isotp_notifier_lock);
14491464 list_add_tail(&so->notifier, &isotp_notifier_list);
net/ceph/ceph_common.c+7−0
@@ -246,6 +246,7 @@ enum { · 245 unmodified lines
246246 Opt_cephx_sign_messages,
247247 Opt_tcp_nodelay,
248248 Opt_abort_on_full,
249+ Opt_rxbounce,
249250 };
250251
251252 enum {
@@ -295,6 +296,7 @@ static const struct fs_parameter_spec ceph_parameters[] = { · 43 unmodified lines
295296 fsparam_u32 ("osdkeepalive", Opt_osdkeepalivetimeout),
296297 fsparam_enum ("read_from_replica", Opt_read_from_replica,
297298 ceph_param_read_from_replica),
299+ fsparam_flag ("rxbounce", Opt_rxbounce),
298300 fsparam_enum ("ms_mode", Opt_ms_mode,
299301 ceph_param_ms_mode),
300302 fsparam_string ("secret", Opt_secret),
@@ -584,6 +586,9 @@ int ceph_parse_param(struct fs_parameter *param, struct ceph_options *opt, · 283 unmodified lines
584586 case Opt_abort_on_full:
585587 opt->flags |= CEPH_OPT_ABORT_ON_FULL;
586588 break;
589+ case Opt_rxbounce:
590+ opt->flags |= CEPH_OPT_RXBOUNCE;
591+ break;
587592
588593 default:
589594 BUG();
@@ -660,6 +665,8 @@ int ceph_print_client_options(struct seq_file *m, struct ceph_client *client, · 70 unmodified lines
660665 seq_puts(m, "notcp_nodelay,");
661666 if (show_all && (opt->flags & CEPH_OPT_ABORT_ON_FULL))
662667 seq_puts(m, "abort_on_full,");
668+ if (opt->flags & CEPH_OPT_RXBOUNCE)
669+ seq_puts(m, "rxbounce,");
663670
664671 if (opt->mount_timeout != CEPH_MOUNT_TIMEOUT_DEFAULT)
665672 seq_printf(m, "mount_timeout=%d,",
net/ceph/messenger.c+4−0
@@ -515,6 +515,10 @@ static void ceph_con_reset_protocol(struct ceph_connection *con) · 514 unmodified lines
515515 ceph_msg_put(con->out_msg);
516516 con->out_msg = NULL;
517517 }
518+ if (con->bounce_page) {
519+ __free_page(con->bounce_page);
520+ con->bounce_page = NULL;
521+ }
518522
519523 if (ceph_msgr2(from_msgr(con->msgr)))
520524 ceph_con_v2_reset_protocol(con);
net/ceph/messenger_v1.c+48−6
@@ -992,8 +992,7 @@ static int read_partial_message_section(struct ceph_connection *con, · 991 unmodified lines
992992
993993 static int read_partial_msg_data(struct ceph_connection *con)
994994 {
995− struct ceph_msg *msg = con->in_msg;
996− struct ceph_msg_data_cursor *cursor = &msg->cursor;
995+ struct ceph_msg_data_cursor *cursor = &con->in_msg->cursor;
997996 bool do_datacrc = !ceph_test_opt(from_msgr(con->msgr), NOCRC);
998997 struct page *page;
999998 size_t page_offset;
@@ -1001,9 +1000,6 @@ static int read_partial_msg_data(struct ceph_connection *con) · 1 unmodified line
10011000 u32 crc = 0;
10021001 int ret;
10031002
1004− if (!msg->num_data_items)
1005− return -EIO;
1006−
10071003 if (do_datacrc)
10081004 crc = con->in_data_crc;
10091005 while (cursor->total_resid) {
@@ -1031,6 +1027,46 @@ static int read_partial_msg_data(struct ceph_connection *con) · 21 unmodified lines
10311027 return 1; /* must return > 0 to indicate success */
10321028 }
10331029
1030+static int read_partial_msg_data_bounce(struct ceph_connection *con)
1031+{
1032+ struct ceph_msg_data_cursor *cursor = &con->in_msg->cursor;
1033+ struct page *page;
1034+ size_t off, len;
1035+ u32 crc;
1036+ int ret;
1037+
1038+ if (unlikely(!con->bounce_page)) {
1039+ con->bounce_page = alloc_page(GFP_NOIO);
1040+ if (!con->bounce_page) {
1041+ pr_err("failed to allocate bounce page\n");
1042+ return -ENOMEM;
1043+ }
1044+ }
1045+
1046+ crc = con->in_data_crc;
1047+ while (cursor->total_resid) {
1048+ if (!cursor->resid) {
1049+ ceph_msg_data_advance(cursor, 0);
1050+ continue;
1051+ }
1052+
1053+ page = ceph_msg_data_next(cursor, &off, &len, NULL);
1054+ ret = ceph_tcp_recvpage(con->sock, con->bounce_page, 0, len);
1055+ if (ret <= 0) {
1056+ con->in_data_crc = crc;
1057+ return ret;
1058+ }
1059+
1060+ crc = crc32c(crc, page_address(con->bounce_page), ret);
1061+ memcpy_to_page(page, off, page_address(con->bounce_page), ret);
1062+
1063+ ceph_msg_data_advance(cursor, ret);
1064+ }
1065+ con->in_data_crc = crc;
1066+
1067+ return 1; /* must return > 0 to indicate success */
1068+}
1069+
10341070 /*
10351071 * read (part of) a message.
10361072 */
@@ -1141,7 +1177,13 @@ static int read_partial_message(struct ceph_connection *con) · 104 unmodified lines
11411177
11421178 /* (page) data */
11431179 if (data_len) {
1144− ret = read_partial_msg_data(con);
1180+ if (!m->num_data_items)
1181+ return -EIO;
1182+
1183+ if (ceph_test_opt(from_msgr(con->msgr), RXBOUNCE))
1184+ ret = read_partial_msg_data_bounce(con);
1185+ else
1186+ ret = read_partial_msg_data(con);
11451187 if (ret <= 0)
11461188 return ret;
11471189 }
net/ceph/messenger_v2.c+186−64
@@ -57,8 +57,9 @@ · 56 unmodified lines
5757 #define IN_S_HANDLE_CONTROL_REMAINDER 3
5858 #define IN_S_PREPARE_READ_DATA 4
5959 #define IN_S_PREPARE_READ_DATA_CONT 5
60−#define IN_S_HANDLE_EPILOGUE 6
61−#define IN_S_FINISH_SKIP 7
60+#define IN_S_PREPARE_READ_ENC_PAGE 6
61+#define IN_S_HANDLE_EPILOGUE 7
62+#define IN_S_FINISH_SKIP 8
6263
6364 #define OUT_S_QUEUE_DATA 1
6465 #define OUT_S_QUEUE_DATA_CONT 2
@@ -1032,22 +1033,41 @@ static int decrypt_control_remainder(struct ceph_connection *con) · 967 unmodified lines
10321033 padded_len(rem_len) + CEPH_GCM_TAG_LEN);
10331034 }
10341035
1035−static int decrypt_message(struct ceph_connection *con)
1036+static int decrypt_tail(struct ceph_connection *con)
10361037 {
1038+ struct sg_table enc_sgt = {};
10371039 struct sg_table sgt = {};
1040+ int tail_len;
10381041 int ret;
10391042
1043+ tail_len = tail_onwire_len(con->in_msg, true);
1044+ ret = sg_alloc_table_from_pages(&enc_sgt, con->v2.in_enc_pages,
1045+ con->v2.in_enc_page_cnt, 0, tail_len,
1046+ GFP_NOIO);
1047+ if (ret)
1048+ goto out;
1049+
10401050 ret = setup_message_sgs(&sgt, con->in_msg, FRONT_PAD(con->v2.in_buf),
10411051 MIDDLE_PAD(con->v2.in_buf), DATA_PAD(con->v2.in_buf),
10421052 con->v2.in_buf, true);
10431053 if (ret)
10441054 goto out;
10451055
1046− ret = gcm_crypt(con, false, sgt.sgl, sgt.sgl,
1047− tail_onwire_len(con->in_msg, true));
1056+ dout("%s con %p msg %p enc_page_cnt %d sg_cnt %d\n", __func__, con,
1057+ con->in_msg, con->v2.in_enc_page_cnt, sgt.orig_nents);
1058+ ret = gcm_crypt(con, false, enc_sgt.sgl, sgt.sgl, tail_len);
1059+ if (ret)
1060+ goto out;
1061+
1062+ WARN_ON(!con->v2.in_enc_page_cnt);
1063+ ceph_release_page_vector(con->v2.in_enc_pages,
1064+ con->v2.in_enc_page_cnt);
1065+ con->v2.in_enc_pages = NULL;
1066+ con->v2.in_enc_page_cnt = 0;
10481067
10491068 out:
10501069 sg_free_table(&sgt);
1070+ sg_free_table(&enc_sgt);
10511071 return ret;
10521072 }
10531073
@@ -1733,54 +1753,157 @@ static int prepare_read_control_remainder(struct ceph_connection *con) · 679 unmodified lines
17331753 return 0;
17341754 }
17351755
1736−static void prepare_read_data(struct ceph_connection *con)
1756+static int prepare_read_data(struct ceph_connection *con)
17371757 {
17381758 struct bio_vec bv;
17391759
1740− if (!con_secure(con))
1741− con->in_data_crc = -1;
1760+ con->in_data_crc = -1;
17421761 ceph_msg_data_cursor_init(&con->v2.in_cursor, con->in_msg,
17431762 data_len(con->in_msg));
17441763
17451764 get_bvec_at(&con->v2.in_cursor, &bv);
1746− set_in_bvec(con, &bv);
1765+ if (ceph_test_opt(from_msgr(con->msgr), RXBOUNCE)) {
1766+ if (unlikely(!con->bounce_page)) {
1767+ con->bounce_page = alloc_page(GFP_NOIO);
1768+ if (!con->bounce_page) {
1769+ pr_err("failed to allocate bounce page\n");
1770+ return -ENOMEM;
1771+ }
1772+ }
1773+
1774+ bv.bv_page = con->bounce_page;
1775+ bv.bv_offset = 0;
1776+ set_in_bvec(con, &bv);
1777+ } else {
1778+ set_in_bvec(con, &bv);
1779+ }
17471780 con->v2.in_state = IN_S_PREPARE_READ_DATA_CONT;
1781+ return 0;
17481782 }
17491783
17501784 static void prepare_read_data_cont(struct ceph_connection *con)
17511785 {
17521786 struct bio_vec bv;
17531787
1754− if (!con_secure(con))
1788+ if (ceph_test_opt(from_msgr(con->msgr), RXBOUNCE)) {
1789+ con->in_data_crc = crc32c(con->in_data_crc,
1790+ page_address(con->bounce_page),
1791+ con->v2.in_bvec.bv_len);
1792+
1793+ get_bvec_at(&con->v2.in_cursor, &bv);
1794+ memcpy_to_page(bv.bv_page, bv.bv_offset,
1795+ page_address(con->bounce_page),
1796+ con->v2.in_bvec.bv_len);
1797+ } else {
17551798 con->in_data_crc = ceph_crc32c_page(con->in_data_crc,
17561799 con->v2.in_bvec.bv_page,
17571800 con->v2.in_bvec.bv_offset,
17581801 con->v2.in_bvec.bv_len);
1802+ }
17591803
17601804 ceph_msg_data_advance(&con->v2.in_cursor, con->v2.in_bvec.bv_len);
17611805 if (con->v2.in_cursor.total_resid) {
17621806 get_bvec_at(&con->v2.in_cursor, &bv);
1763− set_in_bvec(con, &bv);
1807+ if (ceph_test_opt(from_msgr(con->msgr), RXBOUNCE)) {
1808+ bv.bv_page = con->bounce_page;
1809+ bv.bv_offset = 0;
1810+ set_in_bvec(con, &bv);
1811+ } else {
1812+ set_in_bvec(con, &bv);
1813+ }
17641814 WARN_ON(con->v2.in_state != IN_S_PREPARE_READ_DATA_CONT);
17651815 return;
17661816 }
17671817
17681818 /*
1769− * We've read all data. Prepare to read data padding (if any)
1770− * and epilogue.
1819+ * We've read all data. Prepare to read epilogue.
17711820 */
17721821 reset_in_kvecs(con);
1773− if (con_secure(con)) {
1774− if (need_padding(data_len(con->in_msg)))
1775− add_in_kvec(con, DATA_PAD(con->v2.in_buf),
1776− padding_len(data_len(con->in_msg)));
1777− add_in_kvec(con, con->v2.in_buf, CEPH_EPILOGUE_SECURE_LEN);
1822+ add_in_kvec(con, con->v2.in_buf, CEPH_EPILOGUE_PLAIN_LEN);
1823+ con->v2.in_state = IN_S_HANDLE_EPILOGUE;
1824+}
1825+
1826+static int prepare_read_tail_plain(struct ceph_connection *con)
1827+{
1828+ struct ceph_msg *msg = con->in_msg;
1829+
1830+ if (!front_len(msg) && !middle_len(msg)) {
1831+ WARN_ON(!data_len(msg));
1832+ return prepare_read_data(con);
1833+ }
1834+
1835+ reset_in_kvecs(con);
1836+ if (front_len(msg)) {
1837+ add_in_kvec(con, msg->front.iov_base, front_len(msg));
1838+ WARN_ON(msg->front.iov_len != front_len(msg));
1839+ }
1840+ if (middle_len(msg)) {
1841+ add_in_kvec(con, msg->middle->vec.iov_base, middle_len(msg));
1842+ WARN_ON(msg->middle->vec.iov_len != middle_len(msg));
1843+ }
1844+
1845+ if (data_len(msg)) {
1846+ con->v2.in_state = IN_S_PREPARE_READ_DATA;
17781847 } else {
17791848 add_in_kvec(con, con->v2.in_buf, CEPH_EPILOGUE_PLAIN_LEN);
1849+ con->v2.in_state = IN_S_HANDLE_EPILOGUE;
17801850 }
1851+ return 0;
1852+}
1853+
1854+static void prepare_read_enc_page(struct ceph_connection *con)
1855+{
1856+ struct bio_vec bv;
1857+
1858+ dout("%s con %p i %d resid %d\n", __func__, con, con->v2.in_enc_i,
1859+ con->v2.in_enc_resid);
1860+ WARN_ON(!con->v2.in_enc_resid);
1861+
1862+ bv.bv_page = con->v2.in_enc_pages[con->v2.in_enc_i];
1863+ bv.bv_offset = 0;
1864+ bv.bv_len = min(con->v2.in_enc_resid, (int)PAGE_SIZE);
1865+
1866+ set_in_bvec(con, &bv);
1867+ con->v2.in_enc_i++;
1868+ con->v2.in_enc_resid -= bv.bv_len;
1869+
1870+ if (con->v2.in_enc_resid) {
1871+ con->v2.in_state = IN_S_PREPARE_READ_ENC_PAGE;
1872+ return;
1873+ }
1874+
1875+ /*
1876+ * We are set to read the last piece of ciphertext (ending
1877+ * with epilogue) + auth tag.
1878+ */
1879+ WARN_ON(con->v2.in_enc_i != con->v2.in_enc_page_cnt);
17811880 con->v2.in_state = IN_S_HANDLE_EPILOGUE;
17821881 }
17831882
1883+static int prepare_read_tail_secure(struct ceph_connection *con)
1884+{
1885+ struct page **enc_pages;
1886+ int enc_page_cnt;
1887+ int tail_len;
1888+
1889+ tail_len = tail_onwire_len(con->in_msg, true);
1890+ WARN_ON(!tail_len);
1891+
1892+ enc_page_cnt = calc_pages_for(0, tail_len);
1893+ enc_pages = ceph_alloc_page_vector(enc_page_cnt, GFP_NOIO);
1894+ if (IS_ERR(enc_pages))
1895+ return PTR_ERR(enc_pages);
1896+
1897+ WARN_ON(con->v2.in_enc_pages || con->v2.in_enc_page_cnt);
1898+ con->v2.in_enc_pages = enc_pages;
1899+ con->v2.in_enc_page_cnt = enc_page_cnt;
1900+ con->v2.in_enc_resid = tail_len;
1901+ con->v2.in_enc_i = 0;
1902+
1903+ prepare_read_enc_page(con);
1904+ return 0;
1905+}
1906+
17841907 static void __finish_skip(struct ceph_connection *con)
17851908 {
17861909 con->in_seq++;
@@ -2589,47 +2712,26 @@ static int __handle_control(struct ceph_connection *con, void *p) · 802 unmodified lines
25892712 }
25902713
25912714 msg = con->in_msg; /* set in process_message_header() */
2592− if (!front_len(msg) && !middle_len(msg)) {
2593− if (!data_len(msg))
2594− return process_message(con);
2595−
2596− prepare_read_data(con);
2597− return 0;
2598− }
2599−
2600− reset_in_kvecs(con);
26012715 if (front_len(msg)) {
26022716 WARN_ON(front_len(msg) > msg->front_alloc_len);
2603− add_in_kvec(con, msg->front.iov_base, front_len(msg));
26042717 msg->front.iov_len = front_len(msg);
2605−
2606− if (con_secure(con) && need_padding(front_len(msg)))
2607− add_in_kvec(con, FRONT_PAD(con->v2.in_buf),
2608− padding_len(front_len(msg)));
26092718 } else {
26102719 msg->front.iov_len = 0;
26112720 }
26122721 if (middle_len(msg)) {
26132722 WARN_ON(middle_len(msg) > msg->middle->alloc_len);
2614− add_in_kvec(con, msg->middle->vec.iov_base, middle_len(msg));
26152723 msg->middle->vec.iov_len = middle_len(msg);
2616−
2617− if (con_secure(con) && need_padding(middle_len(msg)))
2618− add_in_kvec(con, MIDDLE_PAD(con->v2.in_buf),
2619− padding_len(middle_len(msg)));
26202724 } else if (msg->middle) {
26212725 msg->middle->vec.iov_len = 0;
26222726 }
26232727
2624− if (data_len(msg)) {
2625− con->v2.in_state = IN_S_PREPARE_READ_DATA;
2626− } else {
2627− add_in_kvec(con, con->v2.in_buf,
2628− con_secure(con) ? CEPH_EPILOGUE_SECURE_LEN :
2629− CEPH_EPILOGUE_PLAIN_LEN);
2630− con->v2.in_state = IN_S_HANDLE_EPILOGUE;
2631− }
2632− return 0;
2728+ if (!front_len(msg) && !middle_len(msg) && !data_len(msg))
2729+ return process_message(con);
2730+
2731+ if (con_secure(con))
2732+ return prepare_read_tail_secure(con);
2733+
2734+ return prepare_read_tail_plain(con);
26332735 }
26342736
26352737 static int handle_preamble(struct ceph_connection *con)
@@ -2717,7 +2819,7 @@ static int handle_epilogue(struct ceph_connection *con) · 81 unmodified lines
27172819 int ret;
27182820
27192821 if (con_secure(con)) {
2720− ret = decrypt_message(con);
2822+ ret = decrypt_tail(con);
27212823 if (ret) {
27222824 if (ret == -EBADMSG)
27232825 con->error_msg = "integrity error, bad epilogue auth tag";
@@ -2785,13 +2887,16 @@ static int populate_in_iter(struct ceph_connection *con) · 61 unmodified lines
27852887 ret = handle_control_remainder(con);
27862888 break;
27872889 case IN_S_PREPARE_READ_DATA:
2788− prepare_read_data(con);
2789− ret = 0;
2890+ ret = prepare_read_data(con);
27902891 break;
27912892 case IN_S_PREPARE_READ_DATA_CONT:
27922893 prepare_read_data_cont(con);
27932894 ret = 0;
27942895 break;
2896+ case IN_S_PREPARE_READ_ENC_PAGE:
2897+ prepare_read_enc_page(con);
2898+ ret = 0;
2899+ break;
27952900 case IN_S_HANDLE_EPILOGUE:
27962901 ret = handle_epilogue(con);
27972902 break;
@@ -3326,20 +3431,16 @@ void ceph_con_v2_revoke(struct ceph_connection *con) · 528 unmodified lines
33263431
33273432 static void revoke_at_prepare_read_data(struct ceph_connection *con)
33283433 {
3329− int remaining; /* data + [data padding] + epilogue */
3434+ int remaining;
33303435 int resid;
33313436
3437+ WARN_ON(con_secure(con));
33323438 WARN_ON(!data_len(con->in_msg));
33333439 WARN_ON(!iov_iter_is_kvec(&con->v2.in_iter));
33343440 resid = iov_iter_count(&con->v2.in_iter);
33353441 WARN_ON(!resid);
33363442
3337− if (con_secure(con))
3338− remaining = padded_len(data_len(con->in_msg)) +
3339− CEPH_EPILOGUE_SECURE_LEN;
3340− else
3341− remaining = data_len(con->in_msg) + CEPH_EPILOGUE_PLAIN_LEN;
3342−
3443+ remaining = data_len(con->in_msg) + CEPH_EPILOGUE_PLAIN_LEN;
33433444 dout("%s con %p resid %d remaining %d\n", __func__, con, resid,
33443445 remaining);
33453446 con->v2.in_iter.count -= resid;
@@ -3350,8 +3451,9 @@ static void revoke_at_prepare_read_data(struct ceph_connection *con) · 4 unmodified lines
33503451 static void revoke_at_prepare_read_data_cont(struct ceph_connection *con)
33513452 {
33523453 int recved, resid; /* current piece of data */
3353− int remaining; /* [data padding] + epilogue */
3454+ int remaining;
33543455
3456+ WARN_ON(con_secure(con));
33553457 WARN_ON(!data_len(con->in_msg));
33563458 WARN_ON(!iov_iter_is_bvec(&con->v2.in_iter));
33573459 resid = iov_iter_count(&con->v2.in_iter);
@@ -3363,12 +3465,7 @@ static void revoke_at_prepare_read_data_cont(struct ceph_connection *con) · 5 unmodified lines
33633465 ceph_msg_data_advance(&con->v2.in_cursor, recved);
33643466 WARN_ON(resid > con->v2.in_cursor.total_resid);
33653467
3366− if (con_secure(con))
3367− remaining = padding_len(data_len(con->in_msg)) +
3368− CEPH_EPILOGUE_SECURE_LEN;
3369− else
3370− remaining = CEPH_EPILOGUE_PLAIN_LEN;
3371−
3468+ remaining = CEPH_EPILOGUE_PLAIN_LEN;
33723469 dout("%s con %p total_resid %zu remaining %d\n", __func__, con,
33733470 con->v2.in_cursor.total_resid, remaining);
33743471 con->v2.in_iter.count -= resid;
@@ -3376,11 +3473,26 @@ static void revoke_at_prepare_read_data_cont(struct ceph_connection *con) · 1 unmodified line
33763473 con->v2.in_state = IN_S_FINISH_SKIP;
33773474 }
33783475
3476+static void revoke_at_prepare_read_enc_page(struct ceph_connection *con)
3477+{
3478+ int resid; /* current enc page (not necessarily data) */
3479+
3480+ WARN_ON(!con_secure(con));
3481+ WARN_ON(!iov_iter_is_bvec(&con->v2.in_iter));
3482+ resid = iov_iter_count(&con->v2.in_iter);
3483+ WARN_ON(!resid || resid > con->v2.in_bvec.bv_len);
3484+
3485+ dout("%s con %p resid %d enc_resid %d\n", __func__, con, resid,
3486+ con->v2.in_enc_resid);
3487+ con->v2.in_iter.count -= resid;
3488+ set_in_skip(con, resid + con->v2.in_enc_resid);
3489+ con->v2.in_state = IN_S_FINISH_SKIP;
3490+}
3491+
33793492 static void revoke_at_handle_epilogue(struct ceph_connection *con)
33803493 {
33813494 int resid;
33823495
3383− WARN_ON(!iov_iter_is_kvec(&con->v2.in_iter));
33843496 resid = iov_iter_count(&con->v2.in_iter);
33853497 WARN_ON(!resid);
33863498
@@ -3399,6 +3511,9 @@ void ceph_con_v2_revoke_incoming(struct ceph_connection *con) · 12 unmodified lines
33993511 case IN_S_PREPARE_READ_DATA_CONT:
34003512 revoke_at_prepare_read_data_cont(con);
34013513 break;
3514+ case IN_S_PREPARE_READ_ENC_PAGE:
3515+ revoke_at_prepare_read_enc_page(con);
3516+ break;
34023517 case IN_S_HANDLE_EPILOGUE:
34033518 revoke_at_handle_epilogue(con);
34043519 break;
@@ -3432,6 +3547,13 @@ void ceph_con_v2_reset_protocol(struct ceph_connection *con) · 27 unmodified lines
34323547 clear_out_sign_kvecs(con);
34333548 free_conn_bufs(con);
34343549
3550+ if (con->v2.in_enc_pages) {
3551+ WARN_ON(!con->v2.in_enc_page_cnt);
3552+ ceph_release_page_vector(con->v2.in_enc_pages,
3553+ con->v2.in_enc_page_cnt);
3554+ con->v2.in_enc_pages = NULL;
3555+ con->v2.in_enc_page_cnt = 0;
3556+ }
34353557 if (con->v2.out_enc_pages) {
34363558 WARN_ON(!con->v2.out_enc_page_cnt);
34373559 ceph_release_page_vector(con->v2.out_enc_pages,
net/core/skbuff.c+1−1
@@ -681,7 +681,7 @@ exit: · 680 unmodified lines
681681 * while trying to recycle fragments on __skb_frag_unref() we need
682682 * to make one SKB responsible for triggering the recycle path.
683683 * So disable the recycling bit if an SKB is cloned and we have
684− * additional references to to the fragmented part of the SKB.
684+ * additional references to the fragmented part of the SKB.
685685 * Eventually the last SKB will have the recycling bit set and it's
686686 * dataref set to 0, which will trigger the recycling
687687 */
net/dsa/dsa2.c+6−19
@@ -1784,7 +1784,6 @@ EXPORT_SYMBOL_GPL(dsa_unregister_switch); · 1783 unmodified lines
17841784 void dsa_switch_shutdown(struct dsa_switch *ds)
17851785 {
17861786 struct net_device *master, *slave_dev;
1787− LIST_HEAD(unregister_list);
17881787 struct dsa_port *dp;
17891788
17901789 mutex_lock(&dsa2_mutex);
@@ -1795,25 +1794,13 @@ void dsa_switch_shutdown(struct dsa_switch *ds) · 4 unmodified lines
17951794 slave_dev = dp->slave;
17961795
17971796 netdev_upper_dev_unlink(master, slave_dev);
1798− /* Just unlinking ourselves as uppers of the master is not
1799− * sufficient. When the master net device unregisters, that will
1800− * also call dev_close, which we will catch as NETDEV_GOING_DOWN
1801− * and trigger a dev_close on our own devices (dsa_slave_close).
1802− * In turn, that will call dev_mc_unsync on the master's net
1803− * device. If the master is also a DSA switch port, this will
1804− * trigger dsa_slave_set_rx_mode which will call dev_mc_sync on
1805− * its own master. Lockdep will complain about the fact that
1806− * all cascaded masters have the same dsa_master_addr_list_lock_key,
1807− * which it normally would not do if the cascaded masters would
1808− * be in a proper upper/lower relationship, which we've just
1809− * destroyed.
1810− * To suppress the lockdep warnings, let's actually unregister
1811− * the DSA slave interfaces too, to avoid the nonsensical
1812− * multicast address list synchronization on shutdown.
1813− */
1814− unregister_netdevice_queue(slave_dev, &unregister_list);
18151797 }
1816− unregister_netdevice_many(&unregister_list);
1798+
1799+ /* Disconnect from further netdevice notifiers on the master,
1800+ * since netdev_uses_dsa() will now return false.
1801+ */
1802+ dsa_switch_for_each_cpu_port(dp, ds)
1803+ dp->master->dsa_ptr = NULL;
18171804
18181805 rtnl_unlock();
18191806 mutex_unlock(&dsa2_mutex);
net/ipv4/ipmr.c+2−0
@@ -256,7 +256,9 @@ static int __net_init ipmr_rules_init(struct net *net) · 255 unmodified lines
256256 return 0;
257257
258258 err2:
259+ rtnl_lock();
259260 ipmr_free_table(mrt);
261+ rtnl_unlock();
260262 err1:
261263 fib_rules_unregister(ops);
262264 return err;
net/ipv4/tcp.c+19−14
@@ -936,6 +936,22 @@ void tcp_remove_empty_skb(struct sock *sk) · 935 unmodified lines
936936 }
937937 }
938938
939+/* skb changing from pure zc to mixed, must charge zc */
940+static int tcp_downgrade_zcopy_pure(struct sock *sk, struct sk_buff *skb)
941+{
942+ if (unlikely(skb_zcopy_pure(skb))) {
943+ u32 extra = skb->truesize -
944+ SKB_TRUESIZE(skb_end_offset(skb));
945+
946+ if (!sk_wmem_schedule(sk, extra))
947+ return -ENOMEM;
948+
949+ sk_mem_charge(sk, extra);
950+ skb_shinfo(skb)->flags &= ~SKBFL_PURE_ZEROCOPY;
951+ }
952+ return 0;
953+}
954+
939955 static struct sk_buff *tcp_build_frag(struct sock *sk, int size_goal, int flags,
940956 struct page *page, int offset, size_t *size)
941957 {
@@ -971,7 +987,7 @@ new_segment: · 29 unmodified lines
971987 tcp_mark_push(tp, skb);
972988 goto new_segment;
973989 }
974− if (!sk_wmem_schedule(sk, copy))
990+ if (tcp_downgrade_zcopy_pure(sk, skb) || !sk_wmem_schedule(sk, copy))
975991 return NULL;
976992
977993 if (can_coalesce) {
@@ -1319,19 +1335,8 @@ new_segment: · 341 unmodified lines
13191335
13201336 copy = min_t(int, copy, pfrag->size - pfrag->offset);
13211337
1322− /* skb changing from pure zc to mixed, must charge zc */
1323− if (unlikely(skb_zcopy_pure(skb))) {
1324− u32 extra = skb->truesize -
1325− SKB_TRUESIZE(skb_end_offset(skb));
1326−
1327− if (!sk_wmem_schedule(sk, extra))
1328− goto wait_for_space;
1329−
1330− sk_mem_charge(sk, extra);
1331− skb_shinfo(skb)->flags &= ~SKBFL_PURE_ZEROCOPY;
1332− }
1333−
1334− if (!sk_wmem_schedule(sk, copy))
1338+ if (tcp_downgrade_zcopy_pure(sk, skb) ||
1339+ !sk_wmem_schedule(sk, copy))
13351340 goto wait_for_space;
13361341
13371342 err = skb_copy_to_page_nocache(sk, &msg->msg_iter, skb,
net/ipv6/ip6mr.c+2−0
@@ -243,7 +243,9 @@ static int __net_init ip6mr_rules_init(struct net *net) · 242 unmodified lines
243243 return 0;
244244
245245 err2:
246+ rtnl_lock();
246247 ip6mr_free_table(mrt);
248+ rtnl_unlock();
247249 err1:
248250 fib_rules_unregister(ops);
249251 return err;
net/mpls/af_mpls.c+1−1
@@ -1607,6 +1607,7 @@ static int mpls_dev_notify(struct notifier_block *this, unsigned long event, · 1606 unmodified lines
16071607 struct net_device *dev = netdev_notifier_info_to_dev(ptr);
16081608 struct mpls_dev *mdev;
16091609 unsigned int flags;
1610+ int err;
16101611
16111612 if (event == NETDEV_REGISTER) {
16121613 mdev = mpls_add_dev(dev);
@@ -1621,7 +1622,6 @@ static int mpls_dev_notify(struct notifier_block *this, unsigned long event, · 8 unmodified lines
16211622 return NOTIFY_OK;
16221623
16231624 switch (event) {
1624− int err;
16251625
16261626 case NETDEV_DOWN:
16271627 err = mpls_ifdown(dev, event);
net/mptcp/pm_netlink.c+6−2
@@ -925,6 +925,7 @@ out: · 924 unmodified lines
925925 static int mptcp_pm_nl_create_listen_socket(struct sock *sk,
926926 struct mptcp_pm_addr_entry *entry)
927927 {
928+ int addrlen = sizeof(struct sockaddr_in);
928929 struct sockaddr_storage addr;
929930 struct mptcp_sock *msk;
930931 struct socket *ssock;
@@ -949,8 +950,11 @@ static int mptcp_pm_nl_create_listen_socket(struct sock *sk, · 18 unmodified lines
949950 }
950951
951952 mptcp_info2sockaddr(&entry->addr, &addr, entry->addr.family);
952− err = kernel_bind(ssock, (struct sockaddr *)&addr,
953− sizeof(struct sockaddr_in));
953+#if IS_ENABLED(CONFIG_MPTCP_IPV6)
954+ if (entry->addr.family == AF_INET6)
955+ addrlen = sizeof(struct sockaddr_in6);
956+#endif
957+ err = kernel_bind(ssock, (struct sockaddr *)&addr, addrlen);
954958 if (err) {
955959 pr_warn("kernel_bind error, err=%d", err);
956960 goto out;
net/netfilter/nf_conntrack_netlink.c+2−1
@@ -2321,7 +2321,8 @@ ctnetlink_create_conntrack(struct net *net, · 2320 unmodified lines
23212321 if (helper->from_nlattr)
23222322 helper->from_nlattr(helpinfo, ct);
23232323
2324− /* not in hash table yet so not strictly necessary */
2324+ /* disable helper auto-assignment for this entry */
2325+ ct->status |= IPS_HELPER;
23252326 RCU_INIT_POINTER(help->helper, helper);
23262327 }
23272328 } else {
net/netfilter/nf_conntrack_proto_sctp.c+9−0
@@ -489,6 +489,15 @@ int nf_conntrack_sctp_packet(struct nf_conn *ct, · 488 unmodified lines
489489 pr_debug("Setting vtag %x for dir %d\n",
490490 ih->init_tag, !dir);
491491 ct->proto.sctp.vtag[!dir] = ih->init_tag;
492+
493+ /* don't renew timeout on init retransmit so
494+ * port reuse by client or NAT middlebox cannot
495+ * keep entry alive indefinitely (incl. nat info).
496+ */
497+ if (new_state == SCTP_CONNTRACK_CLOSED &&
498+ old_state == SCTP_CONNTRACK_CLOSED &&
499+ nf_ct_is_confirmed(ct))
500+ ignore = true;
492501 }
493502
494503 ct->proto.sctp.state = new_state;
net/netfilter/nf_conntrack_proto_tcp.c+41−18
@@ -446,6 +446,32 @@ static void tcp_sack(const struct sk_buff *skb, unsigned int dataoff, · 445 unmodified lines
446446 }
447447 }
448448
449+static void tcp_init_sender(struct ip_ct_tcp_state *sender,
450+ struct ip_ct_tcp_state *receiver,
451+ const struct sk_buff *skb,
452+ unsigned int dataoff,
453+ const struct tcphdr *tcph,
454+ u32 end, u32 win)
455+{
456+ /* SYN-ACK in reply to a SYN
457+ * or SYN from reply direction in simultaneous open.
458+ */
459+ sender->td_end =
460+ sender->td_maxend = end;
461+ sender->td_maxwin = (win == 0 ? 1 : win);
462+
463+ tcp_options(skb, dataoff, tcph, sender);
464+ /* RFC 1323:
465+ * Both sides must send the Window Scale option
466+ * to enable window scaling in either direction.
467+ */
468+ if (!(sender->flags & IP_CT_TCP_FLAG_WINDOW_SCALE &&
469+ receiver->flags & IP_CT_TCP_FLAG_WINDOW_SCALE)) {
470+ sender->td_scale = 0;
471+ receiver->td_scale = 0;
472+ }
473+}
474+
449475 static bool tcp_in_window(struct nf_conn *ct,
450476 enum ip_conntrack_dir dir,
451477 unsigned int index,
@@ -499,24 +525,9 @@ static bool tcp_in_window(struct nf_conn *ct, · 47 unmodified lines
499525 * Initialize sender data.
500526 */
501527 if (tcph->syn) {
502− /*
503− * SYN-ACK in reply to a SYN
504− * or SYN from reply direction in simultaneous open.
505− */
506− sender->td_end =
507− sender->td_maxend = end;
508− sender->td_maxwin = (win == 0 ? 1 : win);
509−
510− tcp_options(skb, dataoff, tcph, sender);
511− /*
512− * RFC 1323:
513− * Both sides must send the Window Scale option
514− * to enable window scaling in either direction.
515− */
516− if (!(sender->flags & IP_CT_TCP_FLAG_WINDOW_SCALE
517− && receiver->flags & IP_CT_TCP_FLAG_WINDOW_SCALE))
518− sender->td_scale =
519− receiver->td_scale = 0;
528+ tcp_init_sender(sender, receiver,
529+ skb, dataoff, tcph,
530+ end, win);
520531 if (!tcph->ack)
521532 /* Simultaneous open */
522533 return true;
@@ -560,6 +571,18 @@ static bool tcp_in_window(struct nf_conn *ct, · 37 unmodified lines
560571 sender->td_maxwin = (win == 0 ? 1 : win);
561572
562573 tcp_options(skb, dataoff, tcph, sender);
574+ } else if (tcph->syn && dir == IP_CT_DIR_REPLY &&
575+ state->state == TCP_CONNTRACK_SYN_SENT) {
576+ /* Retransmitted syn-ack, or syn (simultaneous open).
577+ *
578+ * Re-init state for this direction, just like for the first
579+ * syn(-ack) reply, it might differ in seq, ack or tcp options.
580+ */
581+ tcp_init_sender(sender, receiver,
582+ skb, dataoff, tcph,
583+ end, win);
584+ if (!tcph->ack)
585+ return true;
563586 }
564587
565588 if (!(tcph->ack)) {
net/netfilter/nft_exthdr.c+1−1
@@ -167,7 +167,7 @@ nft_tcp_header_pointer(const struct nft_pktinfo *pkt, · 166 unmodified lines
167167 {
168168 struct tcphdr *tcph;
169169
170− if (pkt->tprot != IPPROTO_TCP)
170+ if (pkt->tprot != IPPROTO_TCP || pkt->fragoff)
171171 return NULL;
172172
173173 tcph = skb_header_pointer(pkt->skb, nft_thoff(pkt), sizeof(*tcph), buffer);
net/netfilter/nft_payload.c+5−4
@@ -83,7 +83,7 @@ static int __nft_payload_inner_offset(struct nft_pktinfo *pkt) · 82 unmodified lines
8383 {
8484 unsigned int thoff = nft_thoff(pkt);
8585
86− if (!(pkt->flags & NFT_PKTINFO_L4PROTO))
86+ if (!(pkt->flags & NFT_PKTINFO_L4PROTO) || pkt->fragoff)
8787 return -1;
8888
8989 switch (pkt->tprot) {
@@ -147,7 +147,7 @@ void nft_payload_eval(const struct nft_expr *expr, · 57 unmodified lines
147147 offset = skb_network_offset(skb);
148148 break;
149149 case NFT_PAYLOAD_TRANSPORT_HEADER:
150− if (!(pkt->flags & NFT_PKTINFO_L4PROTO))
150+ if (!(pkt->flags & NFT_PKTINFO_L4PROTO) || pkt->fragoff)
151151 goto err;
152152 offset = nft_thoff(pkt);
153153 break;
@@ -688,7 +688,7 @@ static void nft_payload_set_eval(const struct nft_expr *expr, · 534 unmodified lines
688688 offset = skb_network_offset(skb);
689689 break;
690690 case NFT_PAYLOAD_TRANSPORT_HEADER:
691− if (!(pkt->flags & NFT_PKTINFO_L4PROTO))
691+ if (!(pkt->flags & NFT_PKTINFO_L4PROTO) || pkt->fragoff)
692692 goto err;
693693 offset = nft_thoff(pkt);
694694 break;
@@ -728,7 +728,8 @@ static void nft_payload_set_eval(const struct nft_expr *expr, · 33 unmodified lines
728728 if (priv->csum_type == NFT_PAYLOAD_CSUM_SCTP &&
729729 pkt->tprot == IPPROTO_SCTP &&
730730 skb->ip_summed != CHECKSUM_PARTIAL) {
731− if (nft_payload_csum_sctp(skb, nft_thoff(pkt)))
731+ if (pkt->fragoff == 0 &&
732+ nft_payload_csum_sctp(skb, nft_thoff(pkt)))
732733 goto err;
733734 }
734735
net/smc/smc_pnet.c+5−3
@@ -368,9 +368,6 @@ static int smc_pnet_add_eth(struct smc_pnettable *pnettable, struct net *net, · 367 unmodified lines
368368 new_pe->type = SMC_PNET_ETH;
369369 memcpy(new_pe->pnet_name, pnet_name, SMC_MAX_PNETID_LEN);
370370 strncpy(new_pe->eth_name, eth_name, IFNAMSIZ);
371− new_pe->ndev = ndev;
372− if (ndev)
373− netdev_tracker_alloc(ndev, &new_pe->dev_tracker, GFP_KERNEL);
374371 rc = -EEXIST;
375372 new_netdev = true;
376373 write_lock(&pnettable->lock);
@@ -382,6 +379,11 @@ static int smc_pnet_add_eth(struct smc_pnettable *pnettable, struct net *net, · 5 unmodified lines
382379 }
383380 }
384381 if (new_netdev) {
382+ if (ndev) {
383+ new_pe->ndev = ndev;
384+ netdev_tracker_alloc(ndev, &new_pe->dev_tracker,
385+ GFP_ATOMIC);
386+ }
385387 list_add_tail(&new_pe->list, &pnettable->pnetlist);
386388 write_unlock(&pnettable->lock);
387389 } else {
net/sunrpc/sysfs.c+4−1
@@ -115,11 +115,14 @@ static ssize_t rpc_sysfs_xprt_srcaddr_show(struct kobject *kobj, · 114 unmodified lines
115115 }
116116
117117 sock = container_of(xprt, struct sock_xprt, xprt);
118− if (kernel_getsockname(sock->sock, (struct sockaddr *)&saddr) < 0)
118+ mutex_lock(&sock->recv_mutex);
119+ if (sock->sock == NULL ||
120+ kernel_getsockname(sock->sock, (struct sockaddr *)&saddr) < 0)
119121 goto out;
120122
121123 ret = sprintf(buf, "%pISc\n", &saddr);
122124 out:
125+ mutex_unlock(&sock->recv_mutex);
123126 xprt_put(xprt);
124127 return ret + 1;
125128 }
net/sunrpc/xprtrdma/verbs.c+3−0
@@ -413,6 +413,7 @@ static int rpcrdma_ep_create(struct rpcrdma_xprt *r_xprt) · 412 unmodified lines
413413 IB_POLL_WORKQUEUE);
414414 if (IS_ERR(ep->re_attr.send_cq)) {
415415 rc = PTR_ERR(ep->re_attr.send_cq);
416+ ep->re_attr.send_cq = NULL;
416417 goto out_destroy;
417418 }
418419
@@ -421,6 +422,7 @@ static int rpcrdma_ep_create(struct rpcrdma_xprt *r_xprt) · 2 unmodified lines
421422 IB_POLL_WORKQUEUE);
422423 if (IS_ERR(ep->re_attr.recv_cq)) {
423424 rc = PTR_ERR(ep->re_attr.recv_cq);
425+ ep->re_attr.recv_cq = NULL;
424426 goto out_destroy;
425427 }
426428 ep->re_receive_count = 0;
@@ -459,6 +461,7 @@ static int rpcrdma_ep_create(struct rpcrdma_xprt *r_xprt) · 32 unmodified lines
459461 ep->re_pd = ib_alloc_pd(device, 0);
460462 if (IS_ERR(ep->re_pd)) {
461463 rc = PTR_ERR(ep->re_pd);
464+ ep->re_pd = NULL;
462465 goto out_destroy;
463466 }
464467
net/sunrpc/xprtsock.c+6−1
@@ -1641,7 +1641,12 @@ static int xs_get_srcport(struct sock_xprt *transport) · 1640 unmodified lines
16411641 unsigned short get_srcport(struct rpc_xprt *xprt)
16421642 {
16431643 struct sock_xprt *sock = container_of(xprt, struct sock_xprt, xprt);
1644− return xs_sock_getport(sock->sock);
1644+ unsigned short ret = 0;
1645+ mutex_lock(&sock->recv_mutex);
1646+ if (sock->sock)
1647+ ret = xs_sock_getport(sock->sock);
1648+ mutex_unlock(&sock->recv_mutex);
1649+ return ret;
16451650 }
16461651 EXPORT_SYMBOL(get_srcport);
16471652
net/tipc/link.c+7−2
@@ -2200,7 +2200,7 @@ static int tipc_link_proto_rcv(struct tipc_link *l, struct sk_buff *skb, · 2199 unmodified lines
22002200 struct tipc_msg *hdr = buf_msg(skb);
22012201 struct tipc_gap_ack_blks *ga = NULL;
22022202 bool reply = msg_probe(hdr), retransmitted = false;
2203− u16 dlen = msg_data_sz(hdr), glen = 0;
2203+ u32 dlen = msg_data_sz(hdr), glen = 0;
22042204 u16 peers_snd_nxt = msg_next_sent(hdr);
22052205 u16 peers_tol = msg_link_tolerance(hdr);
22062206 u16 peers_prio = msg_linkprio(hdr);
@@ -2214,6 +2214,10 @@ static int tipc_link_proto_rcv(struct tipc_link *l, struct sk_buff *skb, · 7 unmodified lines
22142214 void *data;
22152215
22162216 trace_tipc_proto_rcv(skb, false, l->name);
2217+
2218+ if (dlen > U16_MAX)
2219+ goto exit;
2220+
22172221 if (tipc_link_is_blocked(l) || !xmitq)
22182222 goto exit;
22192223
@@ -2309,7 +2313,8 @@ static int tipc_link_proto_rcv(struct tipc_link *l, struct sk_buff *skb, · 89 unmodified lines
23092313
23102314 /* Receive Gap ACK blocks from peer if any */
23112315 glen = tipc_get_gap_ack_blks(&ga, l, hdr, true);
2312−
2316+ if(glen > dlen)
2317+ break;
23132318 tipc_mon_rcv(l->net, data + glen, dlen - glen, l->addr,
23142319 &l->mon_state, l->bearer_id);
23152320
net/tipc/monitor.c+2−0
@@ -496,6 +496,8 @@ void tipc_mon_rcv(struct net *net, void *data, u16 dlen, u32 addr, · 495 unmodified lines
496496 state->probing = false;
497497
498498 /* Sanity check received domain record */
499+ if (new_member_cnt > MAX_MON_DOMAIN)
500+ return;
499501 if (dlen < dom_rec_len(arrv_dom, 0))
500502 return;
501503 if (dlen != dom_rec_len(arrv_dom, new_member_cnt))
net/tipc/name_distr.c+1−1
@@ -313,7 +313,7 @@ static bool tipc_update_nametbl(struct net *net, struct distr_item *i, · 312 unmodified lines
313313 pr_warn_ratelimited("Failed to remove binding %u,%u from %u\n",
314314 ua.sr.type, ua.sr.lower, node);
315315 } else {
316− pr_warn("Unrecognized name table message received\n");
316+ pr_warn_ratelimited("Unknown name table message received\n");
317317 }
318318 return false;
319319 }
security/integrity/digsig_asymmetric.c+9−6
@@ -109,22 +109,25 @@ int asymmetric_verify(struct key *keyring, const char *sig, · 108 unmodified lines
109109
110110 pk = asymmetric_key_public_key(key);
111111 pks.pkey_algo = pk->pkey_algo;
112− if (!strcmp(pk->pkey_algo, "rsa"))
112+ if (!strcmp(pk->pkey_algo, "rsa")) {
113113 pks.encoding = "pkcs1";
114− else if (!strncmp(pk->pkey_algo, "ecdsa-", 6))
114+ } else if (!strncmp(pk->pkey_algo, "ecdsa-", 6)) {
115115 /* edcsa-nist-p192 etc. */
116116 pks.encoding = "x962";
117− else if (!strcmp(pk->pkey_algo, "ecrdsa") ||
118− !strcmp(pk->pkey_algo, "sm2"))
117+ } else if (!strcmp(pk->pkey_algo, "ecrdsa") ||
118+ !strcmp(pk->pkey_algo, "sm2")) {
119119 pks.encoding = "raw";
120− else
121− return -ENOPKG;
120+ } else {
121+ ret = -ENOPKG;
122+ goto out;
123+ }
122124
123125 pks.digest = (u8 *)data;
124126 pks.digest_size = datalen;
125127 pks.s = hdr->sig;
126128 pks.s_size = siglen;
127129 ret = verify_signature(key, &pks);
130+out:
128131 key_put(key);
129132 pr_debug("%s() = %d\n", __func__, ret);
130133 return ret;
security/integrity/ima/ima_fs.c+1−1
@@ -496,12 +496,12 @@ int __init ima_fs_init(void) · 495 unmodified lines
496496
497497 return 0;
498498 out:
499+ securityfs_remove(ima_policy);
499500 securityfs_remove(violations);
500501 securityfs_remove(runtime_measurements_count);
501502 securityfs_remove(ascii_runtime_measurements);
502503 securityfs_remove(binary_runtime_measurements);
503504 securityfs_remove(ima_symlink);
504505 securityfs_remove(ima_dir);
505− securityfs_remove(ima_policy);
506506 return -1;
507507 }
security/integrity/ima/ima_policy.c+8−0
@@ -1967,6 +1967,14 @@ int ima_policy_show(struct seq_file *m, void *v) · 1966 unmodified lines
19671967
19681968 rcu_read_lock();
19691969
1970+ /* Do not print rules with inactive LSM labels */
1971+ for (i = 0; i < MAX_LSM_RULES; i++) {
1972+ if (entry->lsm[i].args_p && !entry->lsm[i].rule) {
1973+ rcu_read_unlock();
1974+ return 0;
1975+ }
1976+ }
1977+
19701978 if (entry->action & MEASURE)
19711979 seq_puts(m, pt(Opt_measure));
19721980 if (entry->action & DONT_MEASURE)
security/integrity/ima/ima_template.c+7−3
@@ -29,6 +29,7 @@ static struct ima_template_desc builtin_templates[] = { · 28 unmodified lines
2929
3030 static LIST_HEAD(defined_templates);
3131 static DEFINE_SPINLOCK(template_list);
32+static int template_setup_done;
3233
3334 static const struct ima_template_field supported_fields[] = {
3435 {.field_id = "d", .field_init = ima_eventdigest_init,
@@ -101,10 +102,11 @@ static int __init ima_template_setup(char *str) · 66 unmodified lines
101102 struct ima_template_desc *template_desc;
102103 int template_len = strlen(str);
103104
104− if (ima_template)
105+ if (template_setup_done)
105106 return 1;
106107
107− ima_init_template_list();
108+ if (!ima_template)
109+ ima_init_template_list();
108110
109111 /*
110112 * Verify that a template with the supplied name exists.
@@ -128,6 +130,7 @@ static int __init ima_template_setup(char *str) · 17 unmodified lines
128130 }
129131
130132 ima_template = template_desc;
133+ template_setup_done = 1;
131134 return 1;
132135 }
133136 __setup("ima_template=", ima_template_setup);
@@ -136,7 +139,7 @@ static int __init ima_template_fmt_setup(char *str) · 2 unmodified lines
136139 {
137140 int num_templates = ARRAY_SIZE(builtin_templates);
138141
139− if (ima_template)
142+ if (template_setup_done)
140143 return 1;
141144
142145 if (template_desc_init_fields(str, NULL, NULL) < 0) {
@@ -147,6 +150,7 @@ static int __init ima_template_fmt_setup(char *str) · 4 unmodified lines
147150
148151 builtin_templates[num_templates - 1].fmt = str;
149152 ima_template = builtin_templates + num_templates - 1;
153+ template_setup_done = 1;
150154
151155 return 1;
152156 }
security/integrity/integrity_audit.c+2−0
@@ -45,6 +45,8 @@ void integrity_audit_message(int audit_msgno, struct inode *inode, · 44 unmodified lines
4545 return;
4646
4747 ab = audit_log_start(audit_context(), GFP_KERNEL, audit_msgno);
48+ if (!ab)
49+ return;
4850 audit_log_format(ab, "pid=%d uid=%u auid=%u ses=%u",
4951 task_pid_nr(current),
5052 from_kuid(&init_user_ns, current_uid()),
sound/core/pcm_native.c+13−0
@@ -172,6 +172,19 @@ unsigned long _snd_pcm_stream_lock_irqsave(struct snd_pcm_substream *substream) · 171 unmodified lines
172172 }
173173 EXPORT_SYMBOL_GPL(_snd_pcm_stream_lock_irqsave);
174174
175+unsigned long _snd_pcm_stream_lock_irqsave_nested(struct snd_pcm_substream *substream)
176+{
177+ unsigned long flags = 0;
178+ if (substream->pcm->nonatomic)
179+ mutex_lock_nested(&substream->self_group.mutex,
180+ SINGLE_DEPTH_NESTING);
181+ else
182+ spin_lock_irqsave_nested(&substream->self_group.lock, flags,
183+ SINGLE_DEPTH_NESTING);
184+ return flags;
185+}
186+EXPORT_SYMBOL_GPL(_snd_pcm_stream_lock_irqsave_nested);
187+
175188 /**
176189 * snd_pcm_stream_unlock_irqrestore - Unlock the PCM stream
177190 * @substream: PCM substream
sound/hda/intel-sdw-acpi.c+3−4
@@ -50,11 +50,11 @@ static bool is_link_enabled(struct fwnode_handle *fw_node, int i) · 49 unmodified lines
5050 static int
5151 sdw_intel_scan_controller(struct sdw_intel_acpi_info *info)
5252 {
53− struct acpi_device *adev;
53+ struct acpi_device *adev = acpi_fetch_acpi_dev(info->handle);
5454 int ret, i;
5555 u8 count;
5656
57− if (acpi_bus_get_device(info->handle, &adev))
57+ if (!adev)
5858 return -EINVAL;
5959
6060 /* Found controller, find links supported */
@@ -119,7 +119,6 @@ static acpi_status sdw_intel_acpi_cb(acpi_handle handle, u32 level, · 58 unmodified lines
119119 void *cdata, void **return_value)
120120 {
121121 struct sdw_intel_acpi_info *info = cdata;
122− struct acpi_device *adev;
123122 acpi_status status;
124123 u64 adr;
125124
@@ -127,7 +126,7 @@ static acpi_status sdw_intel_acpi_cb(acpi_handle handle, u32 level, · 1 unmodified line
127126 if (ACPI_FAILURE(status))
128127 return AE_OK; /* keep going */
129128
130− if (acpi_bus_get_device(handle, &adev)) {
129+ if (!acpi_fetch_acpi_dev(handle)) {
131130 pr_err("%s: Couldn't find ACPI handle\n", __func__);
132131 return AE_NOT_FOUND;
133132 }
sound/pci/hda/hda_auto_parser.c+1−1
@@ -981,7 +981,7 @@ void snd_hda_pick_fixup(struct hda_codec *codec, · 980 unmodified lines
981981 int id = HDA_FIXUP_ID_NOT_SET;
982982 const char *name = NULL;
983983 const char *type = NULL;
984− int vendor, device;
984+ unsigned int vendor, device;
985985
986986 if (codec->fixup_id != HDA_FIXUP_ID_NOT_SET)
987987 return;
sound/pci/hda/hda_codec.c+4−0
@@ -3000,6 +3000,10 @@ void snd_hda_codec_shutdown(struct hda_codec *codec) · 2999 unmodified lines
30003000 {
30013001 struct hda_pcm *cpcm;
30023002
3003+ /* Skip the shutdown if codec is not registered */
3004+ if (!codec->registered)
3005+ return;
3006+
30033007 list_for_each_entry(cpcm, &codec->pcm_list_head, list)
30043008 snd_pcm_suspend_all(cpcm->pcm);
30053009
sound/pci/hda/hda_generic.c+15−2
@@ -91,6 +91,12 @@ static void snd_hda_gen_spec_free(struct hda_gen_spec *spec) · 90 unmodified lines
9191 free_kctls(spec);
9292 snd_array_free(&spec->paths);
9393 snd_array_free(&spec->loopback_list);
94+#ifdef CONFIG_SND_HDA_GENERIC_LEDS
95+ if (spec->led_cdevs[LED_AUDIO_MUTE])
96+ led_classdev_unregister(spec->led_cdevs[LED_AUDIO_MUTE]);
97+ if (spec->led_cdevs[LED_AUDIO_MICMUTE])
98+ led_classdev_unregister(spec->led_cdevs[LED_AUDIO_MICMUTE]);
99+#endif
94100 }
95101
96102 /*
@@ -3922,7 +3928,10 @@ static int create_mute_led_cdev(struct hda_codec *codec, · 3825 unmodified lines
39223928 enum led_brightness),
39233929 bool micmute)
39243930 {
3931+ struct hda_gen_spec *spec = codec->spec;
39253932 struct led_classdev *cdev;
3933+ int idx = micmute ? LED_AUDIO_MICMUTE : LED_AUDIO_MUTE;
3934+ int err;
39263935
39273936 cdev = devm_kzalloc(&codec->core.dev, sizeof(*cdev), GFP_KERNEL);
39283937 if (!cdev)
@@ -3932,10 +3941,14 @@ static int create_mute_led_cdev(struct hda_codec *codec, · 3 unmodified lines
39323941 cdev->max_brightness = 1;
39333942 cdev->default_trigger = micmute ? "audio-micmute" : "audio-mute";
39343943 cdev->brightness_set_blocking = callback;
3935− cdev->brightness = ledtrig_audio_get(micmute ? LED_AUDIO_MICMUTE : LED_AUDIO_MUTE);
3944+ cdev->brightness = ledtrig_audio_get(idx);
39363945 cdev->flags = LED_CORE_SUSPENDRESUME;
39373946
3938− return devm_led_classdev_register(&codec->core.dev, cdev);
3947+ err = led_classdev_register(&codec->core.dev, cdev);
3948+ if (err < 0)
3949+ return err;
3950+ spec->led_cdevs[idx] = cdev;
3951+ return 0;
39393952 }
39403953
39413954 /**
sound/pci/hda/hda_generic.h+3−0
@@ -294,6 +294,9 @@ struct hda_gen_spec { · 293 unmodified lines
294294 struct hda_jack_callback *cb);
295295 void (*mic_autoswitch_hook)(struct hda_codec *codec,
296296 struct hda_jack_callback *cb);
297+
298+ /* leds */
299+ struct led_classdev *led_cdevs[NUM_AUDIO_LEDS];
297300 };
298301
299302 /* values for add_stereo_mix_input flag */
sound/pci/hda/patch_realtek.c+55−12
@@ -98,6 +98,7 @@ struct alc_spec { · 97 unmodified lines
9898 unsigned int gpio_mic_led_mask;
9999 struct alc_coef_led mute_led_coef;
100100 struct alc_coef_led mic_led_coef;
101+ struct mutex coef_mutex;
101102
102103 hda_nid_t headset_mic_pin;
103104 hda_nid_t headphone_mic_pin;
@@ -137,8 +138,8 @@ struct alc_spec { · 33 unmodified lines
137138 * COEF access helper functions
138139 */
139140
140−static int alc_read_coefex_idx(struct hda_codec *codec, hda_nid_t nid,
141− unsigned int coef_idx)
141+static int __alc_read_coefex_idx(struct hda_codec *codec, hda_nid_t nid,
142+ unsigned int coef_idx)
142143 {
143144 unsigned int val;
144145
@@ -147,28 +148,61 @@ static int alc_read_coefex_idx(struct hda_codec *codec, hda_nid_t nid, · 2 unmodified lines
147148 return val;
148149 }
149150
151+static int alc_read_coefex_idx(struct hda_codec *codec, hda_nid_t nid,
152+ unsigned int coef_idx)
153+{
154+ struct alc_spec *spec = codec->spec;
155+ unsigned int val;
156+
157+ mutex_lock(&spec->coef_mutex);
158+ val = __alc_read_coefex_idx(codec, nid, coef_idx);
159+ mutex_unlock(&spec->coef_mutex);
160+ return val;
161+}
162+
150163 #define alc_read_coef_idx(codec, coef_idx) \
151164 alc_read_coefex_idx(codec, 0x20, coef_idx)
152165
153−static void alc_write_coefex_idx(struct hda_codec *codec, hda_nid_t nid,
154− unsigned int coef_idx, unsigned int coef_val)
166+static void __alc_write_coefex_idx(struct hda_codec *codec, hda_nid_t nid,
167+ unsigned int coef_idx, unsigned int coef_val)
155168 {
156169 snd_hda_codec_write(codec, nid, 0, AC_VERB_SET_COEF_INDEX, coef_idx);
157170 snd_hda_codec_write(codec, nid, 0, AC_VERB_SET_PROC_COEF, coef_val);
158171 }
159172
173+static void alc_write_coefex_idx(struct hda_codec *codec, hda_nid_t nid,
174+ unsigned int coef_idx, unsigned int coef_val)
175+{
176+ struct alc_spec *spec = codec->spec;
177+
178+ mutex_lock(&spec->coef_mutex);
179+ __alc_write_coefex_idx(codec, nid, coef_idx, coef_val);
180+ mutex_unlock(&spec->coef_mutex);
181+}
182+
160183 #define alc_write_coef_idx(codec, coef_idx, coef_val) \
161184 alc_write_coefex_idx(codec, 0x20, coef_idx, coef_val)
162185
186+static void __alc_update_coefex_idx(struct hda_codec *codec, hda_nid_t nid,
187+ unsigned int coef_idx, unsigned int mask,
188+ unsigned int bits_set)
189+{
190+ unsigned int val = __alc_read_coefex_idx(codec, nid, coef_idx);
191+
192+ if (val != -1)
193+ __alc_write_coefex_idx(codec, nid, coef_idx,
194+ (val & ~mask) | bits_set);
195+}
196+
163197 static void alc_update_coefex_idx(struct hda_codec *codec, hda_nid_t nid,
164198 unsigned int coef_idx, unsigned int mask,
165199 unsigned int bits_set)
166200 {
167− unsigned int val = alc_read_coefex_idx(codec, nid, coef_idx);
201+ struct alc_spec *spec = codec->spec;
168202
169− if (val != -1)
170− alc_write_coefex_idx(codec, nid, coef_idx,
171− (val & ~mask) | bits_set);
203+ mutex_lock(&spec->coef_mutex);
204+ __alc_update_coefex_idx(codec, nid, coef_idx, mask, bits_set);
205+ mutex_unlock(&spec->coef_mutex);
172206 }
173207
174208 #define alc_update_coef_idx(codec, coef_idx, mask, bits_set) \
@@ -201,13 +235,17 @@ struct coef_fw { · 26 unmodified lines
201235 static void alc_process_coef_fw(struct hda_codec *codec,
202236 const struct coef_fw *fw)
203237 {
238+ struct alc_spec *spec = codec->spec;
239+
240+ mutex_lock(&spec->coef_mutex);
204241 for (; fw->nid; fw++) {
205242 if (fw->mask == (unsigned short)-1)
206− alc_write_coefex_idx(codec, fw->nid, fw->idx, fw->val);
243+ __alc_write_coefex_idx(codec, fw->nid, fw->idx, fw->val);
207244 else
208− alc_update_coefex_idx(codec, fw->nid, fw->idx,
209− fw->mask, fw->val);
245+ __alc_update_coefex_idx(codec, fw->nid, fw->idx,
246+ fw->mask, fw->val);
210247 }
248+ mutex_unlock(&spec->coef_mutex);
211249 }
212250
213251 /*
@@ -1153,6 +1191,7 @@ static int alc_alloc_spec(struct hda_codec *codec, hda_nid_t mixer_nid) · 939 unmodified lines
11531191 codec->spdif_status_reset = 1;
11541192 codec->forced_resume = 1;
11551193 codec->patch_ops = alc_patch_ops;
1194+ mutex_init(&spec->coef_mutex);
11561195
11571196 err = alc_codec_rename_from_preset(codec);
11581197 if (err < 0) {
@@ -2125,6 +2164,7 @@ static void alc1220_fixup_gb_x570(struct hda_codec *codec, · 966 unmodified lines
21252164 {
21262165 static const hda_nid_t conn1[] = { 0x0c };
21272166 static const struct coef_fw gb_x570_coefs[] = {
2167+ WRITE_COEF(0x07, 0x03c0),
21282168 WRITE_COEF(0x1a, 0x01c1),
21292169 WRITE_COEF(0x1b, 0x0202),
21302170 WRITE_COEF(0x43, 0x3005),
@@ -2551,7 +2591,8 @@ static const struct snd_pci_quirk alc882_fixup_tbl[] = { · 420 unmodified lines
25512591 SND_PCI_QUIRK(0x1458, 0xa002, "Gigabyte EP45-DS3/Z87X-UD3H", ALC889_FIXUP_FRONT_HP_NO_PRESENCE),
25522592 SND_PCI_QUIRK(0x1458, 0xa0b8, "Gigabyte AZ370-Gaming", ALC1220_FIXUP_GB_DUAL_CODECS),
25532593 SND_PCI_QUIRK(0x1458, 0xa0cd, "Gigabyte X570 Aorus Master", ALC1220_FIXUP_GB_X570),
2554− SND_PCI_QUIRK(0x1458, 0xa0ce, "Gigabyte X570 Aorus Xtreme", ALC1220_FIXUP_CLEVO_P950),
2594+ SND_PCI_QUIRK(0x1458, 0xa0ce, "Gigabyte X570 Aorus Xtreme", ALC1220_FIXUP_GB_X570),
2595+ SND_PCI_QUIRK(0x1458, 0xa0d5, "Gigabyte X570S Aorus Master", ALC1220_FIXUP_GB_X570),
25552596 SND_PCI_QUIRK(0x1462, 0x11f7, "MSI-GE63", ALC1220_FIXUP_CLEVO_P950),
25562597 SND_PCI_QUIRK(0x1462, 0x1228, "MSI-GP63", ALC1220_FIXUP_CLEVO_P950),
25572598 SND_PCI_QUIRK(0x1462, 0x1229, "MSI-GP73", ALC1220_FIXUP_CLEVO_P950),
@@ -2626,6 +2667,7 @@ static const struct hda_model_fixup alc882_fixup_models[] = { · 68 unmodified lines
26262667 {.id = ALC882_FIXUP_NO_PRIMARY_HP, .name = "no-primary-hp"},
26272668 {.id = ALC887_FIXUP_ASUS_BASS, .name = "asus-bass"},
26282669 {.id = ALC1220_FIXUP_GB_DUAL_CODECS, .name = "dual-codecs"},
2670+ {.id = ALC1220_FIXUP_GB_X570, .name = "gb-x570"},
26292671 {.id = ALC1220_FIXUP_CLEVO_P950, .name = "clevo-p950"},
26302672 {}
26312673 };
@@ -8969,6 +9011,7 @@ static const struct snd_pci_quirk alc269_fixup_tbl[] = { · 6337 unmodified lines
89699011 SND_PCI_QUIRK(0x1043, 0x1e51, "ASUS Zephyrus M15", ALC294_FIXUP_ASUS_GU502_PINS),
89709012 SND_PCI_QUIRK(0x1043, 0x1e8e, "ASUS Zephyrus G15", ALC289_FIXUP_ASUS_GA401),
89719013 SND_PCI_QUIRK(0x1043, 0x1f11, "ASUS Zephyrus G14", ALC289_FIXUP_ASUS_GA401),
9014+ SND_PCI_QUIRK(0x1043, 0x16b2, "ASUS GU603", ALC289_FIXUP_ASUS_GA401),
89729015 SND_PCI_QUIRK(0x1043, 0x3030, "ASUS ZN270IE", ALC256_FIXUP_ASUS_AIO_GPIO2),
89739016 SND_PCI_QUIRK(0x1043, 0x831a, "ASUS P901", ALC269_FIXUP_STEREO_DMIC),
89749017 SND_PCI_QUIRK(0x1043, 0x834a, "ASUS S101", ALC269_FIXUP_STEREO_DMIC),
sound/soc/amd/acp/acp-mach-common.c+2−2
@@ -303,11 +303,11 @@ static const struct snd_soc_dapm_route rt1019_map_lr[] = { · 302 unmodified lines
303303
304304 static struct snd_soc_codec_conf rt1019_conf[] = {
305305 {
306− .dlc = COMP_CODEC_CONF("i2c-10EC1019:00"),
306+ .dlc = COMP_CODEC_CONF("i2c-10EC1019:01"),
307307 .name_prefix = "Left",
308308 },
309309 {
310− .dlc = COMP_CODEC_CONF("i2c-10EC1019:01"),
310+ .dlc = COMP_CODEC_CONF("i2c-10EC1019:00"),
311311 .name_prefix = "Right",
312312 },
313313 };
sound/soc/codecs/cpcap.c+2−0
@@ -1667,6 +1667,8 @@ static int cpcap_codec_probe(struct platform_device *pdev) · 1666 unmodified lines
16671667 {
16681668 struct device_node *codec_node =
16691669 of_get_child_by_name(pdev->dev.parent->of_node, "audio-codec");
1670+ if (!codec_node)
1671+ return -ENODEV;
16701672
16711673 pdev->dev.of_node = codec_node;
16721674
sound/soc/codecs/hdmi-codec.c+1−1
@@ -277,7 +277,7 @@ struct hdmi_codec_priv { · 276 unmodified lines
277277 bool busy;
278278 struct snd_soc_jack *jack;
279279 unsigned int jack_status;
280− u8 iec_status[5];
280+ u8 iec_status[AES_IEC958_STATUS_SIZE];
281281 };
282282
283283 static const struct snd_soc_dapm_widget hdmi_widgets[] = {
sound/soc/codecs/lpass-rx-macro.c+4−4
@@ -2688,8 +2688,8 @@ static uint32_t get_iir_band_coeff(struct snd_soc_component *component, · 2687 unmodified lines
26882688 int reg, b2_reg;
26892689
26902690 /* Address does not automatically update if reading */
2691− reg = CDC_RX_SIDETONE_IIR0_IIR_COEF_B1_CTL + 16 * iir_idx;
2692− b2_reg = CDC_RX_SIDETONE_IIR0_IIR_COEF_B2_CTL + 16 * iir_idx;
2691+ reg = CDC_RX_SIDETONE_IIR0_IIR_COEF_B1_CTL + 0x80 * iir_idx;
2692+ b2_reg = CDC_RX_SIDETONE_IIR0_IIR_COEF_B2_CTL + 0x80 * iir_idx;
26932693
26942694 snd_soc_component_write(component, reg,
26952695 ((band_idx * BAND_MAX + coeff_idx) *
@@ -2718,7 +2718,7 @@ static uint32_t get_iir_band_coeff(struct snd_soc_component *component, · 22 unmodified lines
27182718 static void set_iir_band_coeff(struct snd_soc_component *component,
27192719 int iir_idx, int band_idx, uint32_t value)
27202720 {
2721− int reg = CDC_RX_SIDETONE_IIR0_IIR_COEF_B2_CTL + 16 * iir_idx;
2721+ int reg = CDC_RX_SIDETONE_IIR0_IIR_COEF_B2_CTL + 0x80 * iir_idx;
27222722
27232723 snd_soc_component_write(component, reg, (value & 0xFF));
27242724 snd_soc_component_write(component, reg, (value >> 8) & 0xFF);
@@ -2739,7 +2739,7 @@ static int rx_macro_put_iir_band_audio_mixer( · 14 unmodified lines
27392739 int iir_idx = ctl->iir_idx;
27402740 int band_idx = ctl->band_idx;
27412741 u32 coeff[BAND_MAX];
2742− int reg = CDC_RX_SIDETONE_IIR0_IIR_COEF_B1_CTL + 16 * iir_idx;
2742+ int reg = CDC_RX_SIDETONE_IIR0_IIR_COEF_B1_CTL + 0x80 * iir_idx;
27432743
27442744 memcpy(&coeff[0], ucontrol->value.bytes.data, params->max);
27452745
sound/soc/codecs/max9759.c+2−1
@@ -64,7 +64,8 @@ static int speaker_gain_control_put(struct snd_kcontrol *kcontrol, · 63 unmodified lines
6464 struct snd_soc_component *c = snd_soc_kcontrol_component(kcontrol);
6565 struct max9759 *priv = snd_soc_component_get_drvdata(c);
6666
67− if (ucontrol->value.integer.value[0] > 3)
67+ if (ucontrol->value.integer.value[0] < 0 ||
68+ ucontrol->value.integer.value[0] > 3)
6869 return -EINVAL;
6970
7071 priv->gain = ucontrol->value.integer.value[0];
sound/soc/codecs/rt5682-i2c.c+4−11
@@ -59,18 +59,12 @@ static void rt5682_jd_check_handler(struct work_struct *work) · 58 unmodified lines
5959 struct rt5682_priv *rt5682 = container_of(work, struct rt5682_priv,
6060 jd_check_work.work);
6161
62− if (snd_soc_component_read(rt5682->component, RT5682_AJD1_CTRL)
63− & RT5682_JDH_RS_MASK) {
62+ if (snd_soc_component_read(rt5682->component, RT5682_AJD1_CTRL) & RT5682_JDH_RS_MASK)
6463 /* jack out */
65− rt5682->jack_type = rt5682_headset_detect(rt5682->component, 0);
66−
67− snd_soc_jack_report(rt5682->hs_jack, rt5682->jack_type,
68− SND_JACK_HEADSET |
69− SND_JACK_BTN_0 | SND_JACK_BTN_1 |
70− SND_JACK_BTN_2 | SND_JACK_BTN_3);
71− } else {
64+ mod_delayed_work(system_power_efficient_wq,
65+ &rt5682->jack_detect_work, 0);
66+ else
7267 schedule_delayed_work(&rt5682->jd_check_work, 500);
73− }
7468 }
7569
7670 static irqreturn_t rt5682_irq(int irq, void *data)
@@ -198,7 +192,6 @@ static int rt5682_i2c_probe(struct i2c_client *i2c, · 121 unmodified lines
198192 }
199193
200194 mutex_init(&rt5682->calibrate_mutex);
201− mutex_init(&rt5682->jdet_mutex);
202195 rt5682_calibrate(rt5682);
203196
204197 rt5682_apply_patch_list(rt5682, &i2c->dev);
sound/soc/codecs/rt5682.c+8−16
@@ -922,15 +922,13 @@ static void rt5682_enable_push_button_irq(struct snd_soc_component *component, · 921 unmodified lines
922922 *
923923 * Returns detect status.
924924 */
925−int rt5682_headset_detect(struct snd_soc_component *component, int jack_insert)
925+static int rt5682_headset_detect(struct snd_soc_component *component, int jack_insert)
926926 {
927927 struct rt5682_priv *rt5682 = snd_soc_component_get_drvdata(component);
928928 struct snd_soc_dapm_context *dapm = &component->dapm;
929929 unsigned int val, count;
930930
931931 if (jack_insert) {
932− snd_soc_dapm_mutex_lock(dapm);
933−
934932 snd_soc_component_update_bits(component, RT5682_PWR_ANLG_1,
935933 RT5682_PWR_VREF2 | RT5682_PWR_MB,
936934 RT5682_PWR_VREF2 | RT5682_PWR_MB);
@@ -981,8 +979,6 @@ int rt5682_headset_detect(struct snd_soc_component *component, int jack_insert) · 44 unmodified lines
981979 snd_soc_component_update_bits(component, RT5682_MICBIAS_2,
982980 RT5682_PWR_CLK25M_MASK | RT5682_PWR_CLK1M_MASK,
983981 RT5682_PWR_CLK25M_PU | RT5682_PWR_CLK1M_PU);
984−
985− snd_soc_dapm_mutex_unlock(dapm);
986982 } else {
987983 rt5682_enable_push_button_irq(component, false);
988984 snd_soc_component_update_bits(component, RT5682_CBJ_CTRL_1,
@@ -1011,7 +1007,6 @@ int rt5682_headset_detect(struct snd_soc_component *component, int jack_insert) · 22 unmodified lines
10111007 dev_dbg(component->dev, "jack_type = %d\n", rt5682->jack_type);
10121008 return rt5682->jack_type;
10131009 }
1014−EXPORT_SYMBOL_GPL(rt5682_headset_detect);
10151010
10161011 static int rt5682_set_jack_detect(struct snd_soc_component *component,
10171012 struct snd_soc_jack *hs_jack, void *data)
@@ -1094,6 +1089,7 @@ void rt5682_jack_detect_handler(struct work_struct *work) · 76 unmodified lines
10941089 {
10951090 struct rt5682_priv *rt5682 =
10961091 container_of(work, struct rt5682_priv, jack_detect_work.work);
1092+ struct snd_soc_dapm_context *dapm;
10971093 int val, btn_type;
10981094
10991095 while (!rt5682->component)
@@ -1102,7 +1098,9 @@ void rt5682_jack_detect_handler(struct work_struct *work) · 2 unmodified lines
11021098 while (!rt5682->component->card->instantiated)
11031099 usleep_range(10000, 15000);
11041100
1105− mutex_lock(&rt5682->jdet_mutex);
1101+ dapm = snd_soc_component_get_dapm(rt5682->component);
1102+
1103+ snd_soc_dapm_mutex_lock(dapm);
11061104 mutex_lock(&rt5682->calibrate_mutex);
11071105
11081106 val = snd_soc_component_read(rt5682->component, RT5682_AJD1_CTRL)
@@ -1162,6 +1160,9 @@ void rt5682_jack_detect_handler(struct work_struct *work) · 53 unmodified lines
11621160 rt5682->irq_work_delay_time = 50;
11631161 }
11641162
1163+ mutex_unlock(&rt5682->calibrate_mutex);
1164+ snd_soc_dapm_mutex_unlock(dapm);
1165+
11651166 snd_soc_jack_report(rt5682->hs_jack, rt5682->jack_type,
11661167 SND_JACK_HEADSET |
11671168 SND_JACK_BTN_0 | SND_JACK_BTN_1 |
@@ -1174,9 +1175,6 @@ void rt5682_jack_detect_handler(struct work_struct *work) · 6 unmodified lines
11741175 else
11751176 cancel_delayed_work_sync(&rt5682->jd_check_work);
11761177 }
1177−
1178− mutex_unlock(&rt5682->calibrate_mutex);
1179− mutex_unlock(&rt5682->jdet_mutex);
11801178 }
11811179 EXPORT_SYMBOL_GPL(rt5682_jack_detect_handler);
11821180
@@ -1526,7 +1524,6 @@ static int rt5682_hp_event(struct snd_soc_dapm_widget *w, · 343 unmodified lines
15261524 {
15271525 struct snd_soc_component *component =
15281526 snd_soc_dapm_to_component(w->dapm);
1529− struct rt5682_priv *rt5682 = snd_soc_component_get_drvdata(component);
15301527
15311528 switch (event) {
15321529 case SND_SOC_DAPM_PRE_PMU:
@@ -1538,17 +1535,12 @@ static int rt5682_hp_event(struct snd_soc_dapm_widget *w, · 5 unmodified lines
15381535 RT5682_DEPOP_1, 0x60, 0x60);
15391536 snd_soc_component_update_bits(component,
15401537 RT5682_DAC_ADC_DIG_VOL1, 0x00c0, 0x0080);
1541−
1542− mutex_lock(&rt5682->jdet_mutex);
1543−
15441538 snd_soc_component_update_bits(component, RT5682_HP_CTRL_2,
15451539 RT5682_HP_C2_DAC_L_EN | RT5682_HP_C2_DAC_R_EN,
15461540 RT5682_HP_C2_DAC_L_EN | RT5682_HP_C2_DAC_R_EN);
15471541 usleep_range(5000, 10000);
15481542 snd_soc_component_update_bits(component, RT5682_CHARGE_PUMP_1,
15491543 RT5682_CP_SW_SIZE_MASK, RT5682_CP_SW_SIZE_L);
1550−
1551− mutex_unlock(&rt5682->jdet_mutex);
15521544 break;
15531545
15541546 case SND_SOC_DAPM_POST_PMD:
sound/soc/codecs/rt5682.h+0−2
@@ -1463,7 +1463,6 @@ struct rt5682_priv { · 1462 unmodified lines
14631463
14641464 int jack_type;
14651465 int irq_work_delay_time;
1466− struct mutex jdet_mutex;
14671466 };
14681467
14691468 extern const char *rt5682_supply_names[RT5682_NUM_SUPPLIES];
@@ -1473,7 +1472,6 @@ int rt5682_sel_asrc_clk_src(struct snd_soc_component *component, · 3 unmodified lines
14731472
14741473 void rt5682_apply_patch_list(struct rt5682_priv *rt5682, struct device *dev);
14751474
1476−int rt5682_headset_detect(struct snd_soc_component *component, int jack_insert);
14771475 void rt5682_jack_detect_handler(struct work_struct *work);
14781476
14791477 bool rt5682_volatile_register(struct device *dev, unsigned int reg);
sound/soc/codecs/wcd938x.c+17−14
@@ -1432,14 +1432,10 @@ static int wcd938x_sdw_connect_port(struct wcd938x_sdw_ch_info *ch_info, · 1431 unmodified lines
14321432 return 0;
14331433 }
14341434
1435−static int wcd938x_connect_port(struct wcd938x_sdw_priv *wcd, u8 ch_id, u8 enable)
1435+static int wcd938x_connect_port(struct wcd938x_sdw_priv *wcd, u8 port_num, u8 ch_id, u8 enable)
14361436 {
1437− u8 port_num;
1438−
1439− port_num = wcd->ch_info[ch_id].port_num;
1440−
14411437 return wcd938x_sdw_connect_port(&wcd->ch_info[ch_id],
1442− &wcd->port_config[port_num],
1438+ &wcd->port_config[port_num - 1],
14431439 enable);
14441440 }
14451441
@@ -2563,7 +2559,7 @@ static int wcd938x_ear_pa_put_gain(struct snd_kcontrol *kcontrol, · 1117 unmodified lines
25632559 WCD938X_EAR_GAIN_MASK,
25642560 ucontrol->value.integer.value[0]);
25652561
2566− return 0;
2562+ return 1;
25672563 }
25682564
25692565 static int wcd938x_get_compander(struct snd_kcontrol *kcontrol,
@@ -2593,6 +2589,7 @@ static int wcd938x_set_compander(struct snd_kcontrol *kcontrol, · 23 unmodified lines
25932589 struct wcd938x_priv *wcd938x = snd_soc_component_get_drvdata(component);
25942590 struct wcd938x_sdw_priv *wcd;
25952591 int value = ucontrol->value.integer.value[0];
2592+ int portidx;
25962593 struct soc_mixer_control *mc;
25972594 bool hphr;
25982595
@@ -2606,12 +2603,14 @@ static int wcd938x_set_compander(struct snd_kcontrol *kcontrol, · 7 unmodified lines
26062603 else
26072604 wcd938x->comp1_enable = value;
26082605
2606+ portidx = wcd->ch_info[mc->reg].port_num;
2607+
26092608 if (value)
2610− wcd938x_connect_port(wcd, mc->reg, true);
2609+ wcd938x_connect_port(wcd, portidx, mc->reg, true);
26112610 else
2612− wcd938x_connect_port(wcd, mc->reg, false);
2611+ wcd938x_connect_port(wcd, portidx, mc->reg, false);
26132612
2614− return 0;
2613+ return 1;
26152614 }
26162615
26172616 static int wcd938x_ldoh_get(struct snd_kcontrol *kcontrol,
@@ -2882,9 +2881,11 @@ static int wcd938x_get_swr_port(struct snd_kcontrol *kcontrol, · 264 unmodified lines
28822881 struct wcd938x_sdw_priv *wcd;
28832882 struct soc_mixer_control *mixer = (struct soc_mixer_control *)kcontrol->private_value;
28842883 int dai_id = mixer->shift;
2885− int portidx = mixer->reg;
2884+ int portidx, ch_idx = mixer->reg;
2885+
28862886
28872887 wcd = wcd938x->sdw_priv[dai_id];
2888+ portidx = wcd->ch_info[ch_idx].port_num;
28882889
28892890 ucontrol->value.integer.value[0] = wcd->port_enable[portidx];
28902891
@@ -2899,12 +2900,14 @@ static int wcd938x_set_swr_port(struct snd_kcontrol *kcontrol, · 8 unmodified lines
28992900 struct wcd938x_sdw_priv *wcd;
29002901 struct soc_mixer_control *mixer =
29012902 (struct soc_mixer_control *)kcontrol->private_value;
2902− int portidx = mixer->reg;
2903+ int ch_idx = mixer->reg;
2904+ int portidx;
29032905 int dai_id = mixer->shift;
29042906 bool enable;
29052907
29062908 wcd = wcd938x->sdw_priv[dai_id];
29072909
2910+ portidx = wcd->ch_info[ch_idx].port_num;
29082911 if (ucontrol->value.integer.value[0])
29092912 enable = true;
29102913 else
@@ -2912,9 +2915,9 @@ static int wcd938x_set_swr_port(struct snd_kcontrol *kcontrol, · 1 unmodified line
29122915
29132916 wcd->port_enable[portidx] = enable;
29142917
2915− wcd938x_connect_port(wcd, portidx, enable);
2918+ wcd938x_connect_port(wcd, portidx, ch_idx, enable);
29162919
2917− return 0;
2920+ return 1;
29182921
29192922 }
29202923
sound/soc/fsl/pcm030-audio-fabric.c+8−3
@@ -93,16 +93,21 @@ static int pcm030_fabric_probe(struct platform_device *op) · 92 unmodified lines
9393 dev_err(&op->dev, "platform_device_alloc() failed\n");
9494
9595 ret = platform_device_add(pdata->codec_device);
96− if (ret)
96+ if (ret) {
9797 dev_err(&op->dev, "platform_device_add() failed: %d\n", ret);
98+ platform_device_put(pdata->codec_device);
99+ }
98100
99101 ret = snd_soc_register_card(card);
100− if (ret)
102+ if (ret) {
101103 dev_err(&op->dev, "snd_soc_register_card() failed: %d\n", ret);
104+ platform_device_del(pdata->codec_device);
105+ platform_device_put(pdata->codec_device);
106+ }
102107
103108 platform_set_drvdata(op, pdata);
104−
105109 return ret;
110+
106111 }
107112
108113 static int pcm030_fabric_remove(struct platform_device *op)
sound/soc/generic/simple-card.c+25−1
@@ -28,6 +28,30 @@ static const struct snd_soc_ops simple_ops = { · 27 unmodified lines
2828 .hw_params = asoc_simple_hw_params,
2929 };
3030
31+static int asoc_simple_parse_platform(struct device_node *node,
32+ struct snd_soc_dai_link_component *dlc)
33+{
34+ struct of_phandle_args args;
35+ int ret;
36+
37+ if (!node)
38+ return 0;
39+
40+ /*
41+ * Get node via "sound-dai = <&phandle port>"
42+ * it will be used as xxx_of_node on soc_bind_dai_link()
43+ */
44+ ret = of_parse_phandle_with_args(node, DAI, CELL, 0, &args);
45+ if (ret)
46+ return ret;
47+
48+ /* dai_name is not required and may not exist for plat component */
49+
50+ dlc->of_node = args.np;
51+
52+ return 0;
53+}
54+
3155 static int asoc_simple_parse_dai(struct device_node *node,
3256 struct snd_soc_dai_link_component *dlc,
3357 int *is_single_link)
@@ -289,7 +313,7 @@ static int simple_dai_link_of(struct asoc_simple_priv *priv, · 255 unmodified lines
289313 if (ret < 0)
290314 goto dai_link_of_err;
291315
292− ret = asoc_simple_parse_dai(plat, platforms, NULL);
316+ ret = asoc_simple_parse_platform(plat, platforms);
293317 if (ret < 0)
294318 goto dai_link_of_err;
295319
sound/soc/mediatek/Kconfig+1−1
@@ -216,7 +216,7 @@ config SND_SOC_MT8195_MT6359_RT1019_RT5682 · 215 unmodified lines
216216
217217 config SND_SOC_MT8195_MT6359_RT1011_RT5682
218218 tristate "ASoC Audio driver for MT8195 with MT6359 RT1011 RT5682 codec"
219− depends on I2C
219+ depends on I2C && GPIOLIB
220220 depends on SND_SOC_MT8195 && MTK_PMIC_WRAP
221221 select SND_SOC_MT6359
222222 select SND_SOC_RT1011
sound/soc/qcom/qdsp6/q6apm-dai.c+5−2
@@ -308,8 +308,11 @@ static int q6apm_dai_close(struct snd_soc_component *component, · 307 unmodified lines
308308 struct snd_pcm_runtime *runtime = substream->runtime;
309309 struct q6apm_dai_rtd *prtd = runtime->private_data;
310310
311− q6apm_graph_stop(prtd->graph);
312− q6apm_unmap_memory_regions(prtd->graph, substream->stream);
311+ if (prtd->state) { /* only stop graph that is started */
312+ q6apm_graph_stop(prtd->graph);
313+ q6apm_unmap_memory_regions(prtd->graph, substream->stream);
314+ }
315+
313316 q6apm_graph_close(prtd->graph);
314317 prtd->graph = NULL;
315318 kfree(prtd);
sound/soc/soc-acpi.c+2−5
@@ -55,16 +55,13 @@ EXPORT_SYMBOL_GPL(snd_soc_acpi_find_machine); · 54 unmodified lines
5555 static acpi_status snd_soc_acpi_find_package(acpi_handle handle, u32 level,
5656 void *context, void **ret)
5757 {
58− struct acpi_device *adev;
58+ struct acpi_device *adev = acpi_fetch_acpi_dev(handle);
5959 acpi_status status;
6060 struct snd_soc_acpi_package_context *pkg_ctx = context;
6161
6262 pkg_ctx->data_valid = false;
6363
64− if (acpi_bus_get_device(handle, &adev))
65− return AE_OK;
66−
67− if (adev->status.present && adev->status.functional) {
64+ if (adev && adev->status.present && adev->status.functional) {
6865 struct acpi_buffer buffer = {ACPI_ALLOCATE_BUFFER, NULL};
6966 union acpi_object *myobj = NULL;
7067
sound/soc/soc-ops.c+26−3
@@ -316,13 +316,27 @@ int snd_soc_put_volsw(struct snd_kcontrol *kcontrol, · 315 unmodified lines
316316 if (sign_bit)
317317 mask = BIT(sign_bit + 1) - 1;
318318
319− val = ((ucontrol->value.integer.value[0] + min) & mask);
319+ if (ucontrol->value.integer.value[0] < 0)
320+ return -EINVAL;
321+ val = ucontrol->value.integer.value[0];
322+ if (mc->platform_max && val > mc->platform_max)
323+ return -EINVAL;
324+ if (val > max - min)
325+ return -EINVAL;
326+ val = (val + min) & mask;
320327 if (invert)
321328 val = max - val;
322329 val_mask = mask << shift;
323330 val = val << shift;
324331 if (snd_soc_volsw_is_stereo(mc)) {
325− val2 = ((ucontrol->value.integer.value[1] + min) & mask);
332+ if (ucontrol->value.integer.value[1] < 0)
333+ return -EINVAL;
334+ val2 = ucontrol->value.integer.value[1];
335+ if (mc->platform_max && val2 > mc->platform_max)
336+ return -EINVAL;
337+ if (val2 > max - min)
338+ return -EINVAL;
339+ val2 = (val2 + min) & mask;
326340 if (invert)
327341 val2 = max - val2;
328342 if (reg == reg2) {
@@ -409,8 +423,15 @@ int snd_soc_put_volsw_sx(struct snd_kcontrol *kcontrol, · 80 unmodified lines
409423 int err = 0;
410424 unsigned int val, val_mask;
411425
426+ if (ucontrol->value.integer.value[0] < 0)
427+ return -EINVAL;
428+ val = ucontrol->value.integer.value[0];
429+ if (mc->platform_max && val > mc->platform_max)
430+ return -EINVAL;
431+ if (val > max - min)
432+ return -EINVAL;
412433 val_mask = mask << shift;
413− val = (ucontrol->value.integer.value[0] + min) & mask;
434+ val = (val + min) & mask;
414435 val = val << shift;
415436
416437 err = snd_soc_component_update_bits(component, reg, val_mask, val);
@@ -858,6 +879,8 @@ int snd_soc_put_xr_sx(struct snd_kcontrol *kcontrol, · 441 unmodified lines
858879 long val = ucontrol->value.integer.value[0];
859880 unsigned int i;
860881
882+ if (val < mc->min || val > mc->max)
883+ return -EINVAL;
861884 if (invert)
862885 val = max - val;
863886 val &= mask;
sound/soc/soc-pcm.c+12−6
@@ -46,8 +46,8 @@ static inline void snd_soc_dpcm_stream_lock_irq(struct snd_soc_pcm_runtime *rtd, · 45 unmodified lines
4646 snd_pcm_stream_lock_irq(snd_soc_dpcm_get_substream(rtd, stream));
4747 }
4848
49−#define snd_soc_dpcm_stream_lock_irqsave(rtd, stream, flags) \
50− snd_pcm_stream_lock_irqsave(snd_soc_dpcm_get_substream(rtd, stream), flags)
49+#define snd_soc_dpcm_stream_lock_irqsave_nested(rtd, stream, flags) \
50+ snd_pcm_stream_lock_irqsave_nested(snd_soc_dpcm_get_substream(rtd, stream), flags)
5151
5252 static inline void snd_soc_dpcm_stream_unlock_irq(struct snd_soc_pcm_runtime *rtd,
5353 int stream)
@@ -1268,6 +1268,7 @@ static void dpcm_be_reparent(struct snd_soc_pcm_runtime *fe, · 1214 unmodified lines
12681268 void dpcm_be_disconnect(struct snd_soc_pcm_runtime *fe, int stream)
12691269 {
12701270 struct snd_soc_dpcm *dpcm, *d;
1271+ LIST_HEAD(deleted_dpcms);
12711272
12721273 snd_soc_dpcm_mutex_assert_held(fe);
12731274
@@ -1287,13 +1288,18 @@ void dpcm_be_disconnect(struct snd_soc_pcm_runtime *fe, int stream) · 13 unmodified lines
12871288 /* BEs still alive need new FE */
12881289 dpcm_be_reparent(fe, dpcm->be, stream);
12891290
1290− dpcm_remove_debugfs_state(dpcm);
1291−
12921291 list_del(&dpcm->list_be);
1292+ list_move(&dpcm->list_fe, &deleted_dpcms);
1293+ }
1294+ snd_soc_dpcm_stream_unlock_irq(fe, stream);
1295+
1296+ while (!list_empty(&deleted_dpcms)) {
1297+ dpcm = list_first_entry(&deleted_dpcms, struct snd_soc_dpcm,
1298+ list_fe);
12931299 list_del(&dpcm->list_fe);
1300+ dpcm_remove_debugfs_state(dpcm);
12941301 kfree(dpcm);
12951302 }
1296− snd_soc_dpcm_stream_unlock_irq(fe, stream);
12971303 }
12981304
12991305 /* get BE for DAI widget and stream */
@@ -2094,7 +2100,7 @@ int dpcm_be_dai_trigger(struct snd_soc_pcm_runtime *fe, int stream, · 794 unmodified lines
20942100 be = dpcm->be;
20952101 be_substream = snd_soc_dpcm_get_substream(be, stream);
20962102
2097− snd_soc_dpcm_stream_lock_irqsave(be, stream, flags);
2103+ snd_soc_dpcm_stream_lock_irqsave_nested(be, stream, flags);
20982104
20992105 /* is this op for this BE ? */
21002106 if (!snd_soc_dpcm_be_can_update(fe, be, stream))
sound/soc/xilinx/xlnx_formatter_pcm.c+24−3
@@ -37,6 +37,7 @@ · 36 unmodified lines
3737 #define XLNX_AUD_XFER_COUNT 0x28
3838 #define XLNX_AUD_CH_STS_START 0x2C
3939 #define XLNX_BYTES_PER_CH 0x44
40+#define XLNX_AUD_ALIGN_BYTES 64
4041
4142 #define AUD_STS_IOC_IRQ_MASK BIT(31)
4243 #define AUD_STS_CH_STS_MASK BIT(29)
@@ -368,12 +369,32 @@ static int xlnx_formatter_pcm_open(struct snd_soc_component *component, · 325 unmodified lines
368369 snd_soc_set_runtime_hwparams(substream, &xlnx_pcm_hardware);
369370 runtime->private_data = stream_data;
370371
371− /* Resize the period size divisible by 64 */
372+ /* Resize the period bytes as divisible by 64 */
372373 err = snd_pcm_hw_constraint_step(runtime, 0,
373− SNDRV_PCM_HW_PARAM_PERIOD_BYTES, 64);
374+ SNDRV_PCM_HW_PARAM_PERIOD_BYTES,
375+ XLNX_AUD_ALIGN_BYTES);
374376 if (err) {
375377 dev_err(component->dev,
376− "unable to set constraint on period bytes\n");
378+ "Unable to set constraint on period bytes\n");
379+ return err;
380+ }
381+
382+ /* Resize the buffer bytes as divisible by 64 */
383+ err = snd_pcm_hw_constraint_step(runtime, 0,
384+ SNDRV_PCM_HW_PARAM_BUFFER_BYTES,
385+ XLNX_AUD_ALIGN_BYTES);
386+ if (err) {
387+ dev_err(component->dev,
388+ "Unable to set constraint on buffer bytes\n");
389+ return err;
390+ }
391+
392+ /* Set periods as integer multiple */
393+ err = snd_pcm_hw_constraint_integer(runtime,
394+ SNDRV_PCM_HW_PARAM_PERIODS);
395+ if (err < 0) {
396+ dev_err(component->dev,
397+ "Unable to set constraint on periods to be integer\n");
377398 return err;
378399 }
379400
sound/usb/mixer.c+4−0
@@ -1527,6 +1527,10 @@ error: · 1526 unmodified lines
15271527 usb_audio_err(chip,
15281528 "cannot get connectors status: req = %#x, wValue = %#x, wIndex = %#x, type = %d\n",
15291529 UAC_GET_CUR, validx, idx, cval->val_type);
1530+
1531+ if (val)
1532+ *val = 0;
1533+
15301534 return filter_error(cval, ret);
15311535 }
15321536
sound/usb/quirks-table.h+1−1
@@ -84,7 +84,7 @@ · 83 unmodified lines
8484 * combination.
8585 */
8686 {
87− USB_DEVICE(0x041e, 0x4095),
87+ USB_AUDIO_DEVICE(0x041e, 0x4095),
8888 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
8989 .ifnum = QUIRK_ANY_INTERFACE,
9090 .type = QUIRK_COMPOSITE,
tools/arch/x86/include/asm/cpufeatures.h+2−0
@@ -299,7 +299,9 @@ · 298 unmodified lines
299299 /* Intel-defined CPU features, CPUID level 0x00000007:1 (EAX), word 12 */
300300 #define X86_FEATURE_AVX_VNNI (12*32+ 4) /* AVX VNNI instructions */
301301 #define X86_FEATURE_AVX512_BF16 (12*32+ 5) /* AVX512 BFLOAT16 instructions */
302+#define X86_FEATURE_AMX_BF16 (18*32+22) /* AMX bf16 Support */
302303 #define X86_FEATURE_AMX_TILE (18*32+24) /* AMX tile Support */
304+#define X86_FEATURE_AMX_INT8 (18*32+25) /* AMX int8 Support */
303305
304306 /* AMD-defined CPU features, CPUID level 0x80000008 (EBX), word 13 */
305307 #define X86_FEATURE_CLZERO (13*32+ 0) /* CLZERO instruction */
tools/include/uapi/linux/kvm.h+3−3
@@ -1624,9 +1624,6 @@ struct kvm_enc_region { · 1623 unmodified lines
16241624 #define KVM_S390_NORMAL_RESET _IO(KVMIO, 0xc3)
16251625 #define KVM_S390_CLEAR_RESET _IO(KVMIO, 0xc4)
16261626
1627−/* Available with KVM_CAP_XSAVE2 */
1628−#define KVM_GET_XSAVE2 _IOR(KVMIO, 0xcf, struct kvm_xsave)
1629−
16301627 struct kvm_s390_pv_sec_parm {
16311628 __u64 origin;
16321629 __u64 length;
@@ -2048,4 +2045,7 @@ struct kvm_stats_desc { · 415 unmodified lines
20482045
20492046 #define KVM_GET_STATS_FD _IO(KVMIO, 0xce)
20502047
2048+/* Available with KVM_CAP_XSAVE2 */
2049+#define KVM_GET_XSAVE2 _IOR(KVMIO, 0xcf, struct kvm_xsave)
2050+
20512051 #endif /* __LINUX_KVM_H */
tools/include/uapi/linux/perf_event.h+3−3
@@ -1332,9 +1332,9 @@ union perf_mem_data_src { · 1331 unmodified lines
13321332
13331333 /* hop level */
13341334 #define PERF_MEM_HOPS_0 0x01 /* remote core, same node */
1335−#define PERF_MEM_HOPS_1 0x02 /* remote node, same socket */
1336−#define PERF_MEM_HOPS_2 0x03 /* remote socket, same board */
1337−#define PERF_MEM_HOPS_3 0x04 /* remote board */
1335+#define PERF_MEM_HOPS_1 0x02 /* remote node, same socket */
1336+#define PERF_MEM_HOPS_2 0x03 /* remote socket, same board */
1337+#define PERF_MEM_HOPS_3 0x04 /* remote board */
13381338 /* 5-7 available */
13391339 #define PERF_MEM_HOPS_SHIFT 43
13401340
tools/include/uapi/linux/prctl.h+3−0
@@ -272,4 +272,7 @@ struct prctl_mm_map { · 271 unmodified lines
272272 # define PR_SCHED_CORE_SCOPE_THREAD_GROUP 1
273273 # define PR_SCHED_CORE_SCOPE_PROCESS_GROUP 2
274274
275+#define PR_SET_VMA 0x53564d41
276+# define PR_SET_VMA_ANON_NAME 0
277+
275278 #endif /* _LINUX_PRCTL_H */
tools/include/uapi/sound/asound.h+9−2
@@ -56,8 +56,10 @@ · 55 unmodified lines
5656 * *
5757 ****************************************************************************/
5858
59+#define AES_IEC958_STATUS_SIZE 24
60+
5961 struct snd_aes_iec958 {
60− unsigned char status[24]; /* AES/IEC958 channel status bits */
62+ unsigned char status[AES_IEC958_STATUS_SIZE]; /* AES/IEC958 channel status bits */
6163 unsigned char subcode[147]; /* AES/IEC958 subcode bits */
6264 unsigned char pad; /* nothing */
6365 unsigned char dig_subframe[4]; /* AES/IEC958 subframe bits */
@@ -202,6 +204,11 @@ typedef int __bitwise snd_pcm_format_t; · 138 unmodified lines
202204 #define SNDRV_PCM_FORMAT_S24_BE ((__force snd_pcm_format_t) 7) /* low three bytes */
203205 #define SNDRV_PCM_FORMAT_U24_LE ((__force snd_pcm_format_t) 8) /* low three bytes */
204206 #define SNDRV_PCM_FORMAT_U24_BE ((__force snd_pcm_format_t) 9) /* low three bytes */
207+/*
208+ * For S32/U32 formats, 'msbits' hardware parameter is often used to deliver information about the
209+ * available bit count in most significant bit. It's for the case of so-called 'left-justified' or
210+ * `right-padding` sample which has less width than 32 bit.
211+ */
205212 #define SNDRV_PCM_FORMAT_S32_LE ((__force snd_pcm_format_t) 10)
206213 #define SNDRV_PCM_FORMAT_S32_BE ((__force snd_pcm_format_t) 11)
207214 #define SNDRV_PCM_FORMAT_U32_LE ((__force snd_pcm_format_t) 12)
@@ -300,7 +307,7 @@ typedef int __bitwise snd_pcm_subformat_t; · 92 unmodified lines
300307 #define SNDRV_PCM_INFO_HAS_LINK_ESTIMATED_ATIME 0x04000000 /* report estimated link audio time */
301308 #define SNDRV_PCM_INFO_HAS_LINK_SYNCHRONIZED_ATIME 0x08000000 /* report synchronized audio/system time */
302309 #define SNDRV_PCM_INFO_EXPLICIT_SYNC 0x10000000 /* needs explicit sync of pointers and data */
303−
310+#define SNDRV_PCM_INFO_NO_REWINDS 0x20000000 /* hardware can only support monotonic changes of appl_ptr */
304311 #define SNDRV_PCM_INFO_DRAIN_TRIGGER 0x40000000 /* internal kernel flag - trigger in drain */
305312 #define SNDRV_PCM_INFO_FIFO_IN_FRAMES 0x80000000 /* internal kernel flag - FIFO size is in frames */
306313
tools/lib/perf/mmap.c+98−0
@@ -13,6 +13,7 @@ · 12 unmodified lines
1313 #include <internal/lib.h>
1414 #include <linux/kernel.h>
1515 #include <linux/math64.h>
16+#include <linux/stringify.h>
1617 #include "internal.h"
1718
1819 void perf_mmap__init(struct perf_mmap *map, struct perf_mmap *prev,
@@ -294,6 +295,103 @@ static u64 read_timestamp(void) · 275 unmodified lines
294295
295296 return low | ((u64)high) << 32;
296297 }
298+#elif defined(__aarch64__)
299+#define read_sysreg(r) ({ \
300+ u64 __val; \
301+ asm volatile("mrs %0, " __stringify(r) : "=r" (__val)); \
302+ __val; \
303+})
304+
305+static u64 read_pmccntr(void)
306+{
307+ return read_sysreg(pmccntr_el0);
308+}
309+
310+#define PMEVCNTR_READ(idx) \
311+ static u64 read_pmevcntr_##idx(void) { \
312+ return read_sysreg(pmevcntr##idx##_el0); \
313+ }
314+
315+PMEVCNTR_READ(0);
316+PMEVCNTR_READ(1);
317+PMEVCNTR_READ(2);
318+PMEVCNTR_READ(3);
319+PMEVCNTR_READ(4);
320+PMEVCNTR_READ(5);
321+PMEVCNTR_READ(6);
322+PMEVCNTR_READ(7);
323+PMEVCNTR_READ(8);
324+PMEVCNTR_READ(9);
325+PMEVCNTR_READ(10);
326+PMEVCNTR_READ(11);
327+PMEVCNTR_READ(12);
328+PMEVCNTR_READ(13);
329+PMEVCNTR_READ(14);
330+PMEVCNTR_READ(15);
331+PMEVCNTR_READ(16);
332+PMEVCNTR_READ(17);
333+PMEVCNTR_READ(18);
334+PMEVCNTR_READ(19);
335+PMEVCNTR_READ(20);
336+PMEVCNTR_READ(21);
337+PMEVCNTR_READ(22);
338+PMEVCNTR_READ(23);
339+PMEVCNTR_READ(24);
340+PMEVCNTR_READ(25);
341+PMEVCNTR_READ(26);
342+PMEVCNTR_READ(27);
343+PMEVCNTR_READ(28);
344+PMEVCNTR_READ(29);
345+PMEVCNTR_READ(30);
346+
347+/*
348+ * Read a value direct from PMEVCNTR<idx>
349+ */
350+static u64 read_perf_counter(unsigned int counter)
351+{
352+ static u64 (* const read_f[])(void) = {
353+ read_pmevcntr_0,
354+ read_pmevcntr_1,
355+ read_pmevcntr_2,
356+ read_pmevcntr_3,
357+ read_pmevcntr_4,
358+ read_pmevcntr_5,
359+ read_pmevcntr_6,
360+ read_pmevcntr_7,
361+ read_pmevcntr_8,
362+ read_pmevcntr_9,
363+ read_pmevcntr_10,
364+ read_pmevcntr_11,
365+ read_pmevcntr_13,
366+ read_pmevcntr_12,
367+ read_pmevcntr_14,
368+ read_pmevcntr_15,
369+ read_pmevcntr_16,
370+ read_pmevcntr_17,
371+ read_pmevcntr_18,
372+ read_pmevcntr_19,
373+ read_pmevcntr_20,
374+ read_pmevcntr_21,
375+ read_pmevcntr_22,
376+ read_pmevcntr_23,
377+ read_pmevcntr_24,
378+ read_pmevcntr_25,
379+ read_pmevcntr_26,
380+ read_pmevcntr_27,
381+ read_pmevcntr_28,
382+ read_pmevcntr_29,
383+ read_pmevcntr_30,
384+ read_pmccntr
385+ };
386+
387+ if (counter < ARRAY_SIZE(read_f))
388+ return (read_f[counter])();
389+
390+ return 0;
391+}
392+
393+static u64 read_timestamp(void) { return read_sysreg(cntvct_el0); }
394+
297395 #else
298396 static u64 read_perf_counter(unsigned int counter __maybe_unused) { return 0; }
299397 static u64 read_timestamp(void) { return 0; }
tools/lib/perf/tests/test-evsel.c+4−1
@@ -130,6 +130,9 @@ static int test_stat_user_read(int event) · 129 unmodified lines
130130 struct perf_event_attr attr = {
131131 .type = PERF_TYPE_HARDWARE,
132132 .config = event,
133+#ifdef __aarch64__
134+ .config1 = 0x2, /* Request user access */
135+#endif
133136 };
134137 int err, i;
135138
@@ -150,7 +153,7 @@ static int test_stat_user_read(int event) · 14 unmodified lines
150153 pc = perf_evsel__mmap_base(evsel, 0, 0);
151154 __T("failed to get mmapped address", pc);
152155
153−#if defined(__i386__) || defined(__x86_64__)
156+#if defined(__i386__) || defined(__x86_64__) || defined(__aarch64__)
154157 __T("userspace counter access not supported", pc->cap_user_rdpmc);
155158 __T("userspace counter access not enabled", pc->index);
156159 __T("userspace counter width not set", pc->pmc_width >= 32);
tools/objtool/check.c+1−1
@@ -2854,7 +2854,7 @@ static inline bool func_uaccess_safe(struct symbol *func) · 2853 unmodified lines
28542854
28552855 static inline const char *call_dest_name(struct instruction *insn)
28562856 {
2857− static char pvname[16];
2857+ static char pvname[19];
28582858 struct reloc *rel;
28592859 int idx;
28602860
tools/perf/builtin-ftrace.c+24−21
@@ -1115,6 +1115,7 @@ enum perf_ftrace_subcommand { · 1114 unmodified lines
11151115 int cmd_ftrace(int argc, const char **argv)
11161116 {
11171117 int ret;
1118+ int (*cmd_func)(struct perf_ftrace *) = NULL;
11181119 struct perf_ftrace ftrace = {
11191120 .tracer = DEFAULT_TRACER,
11201121 .target = { .uid = UINT_MAX, },
@@ -1221,6 +1222,28 @@ int cmd_ftrace(int argc, const char **argv) · 100 unmodified lines
12211222 goto out_delete_filters;
12221223 }
12231224
1225+ switch (subcmd) {
1226+ case PERF_FTRACE_TRACE:
1227+ if (!argc && target__none(&ftrace.target))
1228+ ftrace.target.system_wide = true;
1229+ cmd_func = __cmd_ftrace;
1230+ break;
1231+ case PERF_FTRACE_LATENCY:
1232+ if (list_empty(&ftrace.filters)) {
1233+ pr_err("Should provide a function to measure\n");
1234+ parse_options_usage(ftrace_usage, options, "T", 1);
1235+ ret = -EINVAL;
1236+ goto out_delete_filters;
1237+ }
1238+ cmd_func = __cmd_latency;
1239+ break;
1240+ case PERF_FTRACE_NONE:
1241+ default:
1242+ pr_err("Invalid subcommand\n");
1243+ ret = -EINVAL;
1244+ goto out_delete_filters;
1245+ }
1246+
12241247 ret = target__validate(&ftrace.target);
12251248 if (ret) {
12261249 char errbuf[512];
@@ -1248,27 +1271,7 @@ int cmd_ftrace(int argc, const char **argv) · 21 unmodified lines
12481271 goto out_delete_evlist;
12491272 }
12501273
1251− switch (subcmd) {
1252− case PERF_FTRACE_TRACE:
1253− if (!argc && target__none(&ftrace.target))
1254− ftrace.target.system_wide = true;
1255− ret = __cmd_ftrace(&ftrace);
1256− break;
1257− case PERF_FTRACE_LATENCY:
1258− if (list_empty(&ftrace.filters)) {
1259− pr_err("Should provide a function to measure\n");
1260− parse_options_usage(ftrace_usage, options, "T", 1);
1261− ret = -EINVAL;
1262− goto out_delete_evlist;
1263− }
1264− ret = __cmd_latency(&ftrace);
1265− break;
1266− case PERF_FTRACE_NONE:
1267− default:
1268− pr_err("Invalid subcommand\n");
1269− ret = -EINVAL;
1270− break;
1271− }
1274+ ret = cmd_func(&ftrace);
12721275
12731276 out_delete_evlist:
12741277 evlist__delete(ftrace.evlist);
tools/perf/trace/beauty/prctl_option.sh+1−1
@@ -4,7 +4,7 @@ · 3 unmodified lines
44 [ $# -eq 1 ] && header_dir=$1 || header_dir=tools/include/uapi/linux/
55
66 printf "static const char *prctl_options[] = {\n"
7−regex='^#define[[:space:]]+PR_(\w+)[[:space:]]*([[:xdigit:]]+).*'
7+regex='^#define[[:space:]]{1}PR_(\w+)[[:space:]]*([[:xdigit:]]+)([[:space:]]*\/.*)?$'
88 egrep $regex ${header_dir}/prctl.h | grep -v PR_SET_PTRACER | \
99 sed -r "s/$regex/\2 \1/g" | \
1010 sort -n | xargs printf "\t[%s] = \"%s\",\n"
tools/perf/util/annotate.c+1−0
@@ -2036,6 +2036,7 @@ static int symbol__disassemble(struct symbol *sym, struct annotate_args *args) · 2035 unmodified lines
20362036 memset(&objdump_process, 0, sizeof(objdump_process));
20372037 objdump_process.argv = objdump_argv;
20382038 objdump_process.out = -1;
2039+ objdump_process.err = -1;
20392040 if (start_command(&objdump_process)) {
20402041 pr_err("Failure starting to run %s\n", command);
20412042 err = -1;
tools/perf/util/bpf_counter_cgroup.c+1−1
@@ -266,7 +266,7 @@ static int bperf_cgrp__read(struct evsel *evsel) · 265 unmodified lines
266266 idx = evsel->core.idx;
267267 err = bpf_map_lookup_elem(reading_map_fd, &idx, values);
268268 if (err) {
269− pr_err("bpf map lookup falied: idx=%u, event=%s, cgrp=%s\n",
269+ pr_err("bpf map lookup failed: idx=%u, event=%s, cgrp=%s\n",
270270 idx, evsel__name(evsel), evsel->cgrp->name);
271271 goto out;
272272 }
tools/perf/util/machine.c+2−0
@@ -2073,6 +2073,7 @@ static void ip__resolve_ams(struct thread *thread, · 2072 unmodified lines
20732073
20742074 ams->addr = ip;
20752075 ams->al_addr = al.addr;
2076+ ams->al_level = al.level;
20762077 ams->ms.maps = al.maps;
20772078 ams->ms.sym = al.sym;
20782079 ams->ms.map = al.map;
@@ -2092,6 +2093,7 @@ static void ip__resolve_data(struct thread *thread, · 13 unmodified lines
20922093
20932094 ams->addr = addr;
20942095 ams->al_addr = al.addr;
2096+ ams->al_level = al.level;
20952097 ams->ms.maps = al.maps;
20962098 ams->ms.sym = al.sym;
20972099 ams->ms.map = al.map;
tools/perf/util/map_symbol.h+1−0
@@ -18,6 +18,7 @@ struct addr_map_symbol { · 17 unmodified lines
1818 struct map_symbol ms;
1919 u64 addr;
2020 u64 al_addr;
21+ char al_level;
2122 u64 phys_addr;
2223 u64 data_page_size;
2324 };
tools/perf/util/perf_event_attr_fprintf.c+1−1
@@ -52,7 +52,7 @@ static void __p_branch_sample_type(char *buf, size_t size, u64 value) · 51 unmodified lines
5252 bit_name(ABORT_TX), bit_name(IN_TX), bit_name(NO_TX),
5353 bit_name(COND), bit_name(CALL_STACK), bit_name(IND_JUMP),
5454 bit_name(CALL), bit_name(NO_FLAGS), bit_name(NO_CYCLES),
55− bit_name(HW_INDEX),
55+ bit_name(TYPE_SAVE), bit_name(HW_INDEX),
5656 { .name = NULL, }
5757 };
5858 #undef bit_name
tools/perf/util/session.c+2−1
@@ -1503,11 +1503,12 @@ static int machines__deliver_event(struct machines *machines, · 1502 unmodified lines
15031503 ++evlist->stats.nr_unknown_id;
15041504 return 0;
15051505 }
1506− dump_sample(evsel, event, sample, perf_env__arch(machine->env));
15071506 if (machine == NULL) {
15081507 ++evlist->stats.nr_unprocessable_samples;
1508+ dump_sample(evsel, event, sample, perf_env__arch(NULL));
15091509 return 0;
15101510 }
1511+ dump_sample(evsel, event, sample, perf_env__arch(machine->env));
15111512 return evlist__deliver_sample(evlist, tool, event, sample, evsel, machine);
15121513 case PERF_RECORD_MMAP:
15131514 return tool->mmap(tool, event, sample, machine);
tools/perf/util/sort.c+2−2
@@ -915,7 +915,7 @@ static int hist_entry__sym_from_snprintf(struct hist_entry *he, char *bf, · 914 unmodified lines
915915 struct addr_map_symbol *from = &he->branch_info->from;
916916
917917 return _hist_entry__sym_snprintf(&from->ms, from->al_addr,
918− he->level, bf, size, width);
918+ from->al_level, bf, size, width);
919919 }
920920
921921 return repsep_snprintf(bf, size, "%-*.*s", width, width, "N/A");
@@ -928,7 +928,7 @@ static int hist_entry__sym_to_snprintf(struct hist_entry *he, char *bf, · 6 unmodified lines
928928 struct addr_map_symbol *to = &he->branch_info->to;
929929
930930 return _hist_entry__sym_snprintf(&to->ms, to->al_addr,
931− he->level, bf, size, width);
931+ to->al_level, bf, size, width);
932932 }
933933
934934 return repsep_snprintf(bf, size, "%-*.*s", width, width, "N/A");
tools/perf/util/stat-display.c+10−9
@@ -585,15 +585,16 @@ static void collect_all_aliases(struct perf_stat_config *config, struct evsel *c · 584 unmodified lines
585585
586586 alias = list_prepare_entry(counter, &(evlist->core.entries), core.node);
587587 list_for_each_entry_continue (alias, &evlist->core.entries, core.node) {
588− if (strcmp(evsel__name(alias), evsel__name(counter)) ||
589− alias->scale != counter->scale ||
590− alias->cgrp != counter->cgrp ||
591− strcmp(alias->unit, counter->unit) ||
592− evsel__is_clock(alias) != evsel__is_clock(counter) ||
593− !strcmp(alias->pmu_name, counter->pmu_name))
594− break;
595− alias->merged_stat = true;
596− cb(config, alias, data, false);
588+ /* Merge events with the same name, etc. but on different PMUs. */
589+ if (!strcmp(evsel__name(alias), evsel__name(counter)) &&
590+ alias->scale == counter->scale &&
591+ alias->cgrp == counter->cgrp &&
592+ !strcmp(alias->unit, counter->unit) &&
593+ evsel__is_clock(alias) == evsel__is_clock(counter) &&
594+ strcmp(alias->pmu_name, counter->pmu_name)) {
595+ alias->merged_stat = true;
596+ cb(config, alias, data, false);
597+ }
597598 }
598599 }
599600
tools/perf/util/synthetic-events.c+19−0
@@ -1784,6 +1784,25 @@ int __machine__synthesize_threads(struct machine *machine, struct perf_tool *too · 1783 unmodified lines
17841784 perf_event__handler_t process, bool needs_mmap,
17851785 bool data_mmap, unsigned int nr_threads_synthesize)
17861786 {
1787+ /*
1788+ * When perf runs in non-root PID namespace, and the namespace's proc FS
1789+ * is not mounted, nsinfo__is_in_root_namespace() returns false.
1790+ * In this case, the proc FS is coming for the parent namespace, thus
1791+ * perf tool will wrongly gather process info from its parent PID
1792+ * namespace.
1793+ *
1794+ * To avoid the confusion that the perf tool runs in a child PID
1795+ * namespace but it synthesizes thread info from its parent PID
1796+ * namespace, returns failure with warning.
1797+ */
1798+ if (!nsinfo__is_in_root_namespace()) {
1799+ pr_err("Perf runs in non-root PID namespace but it tries to ");
1800+ pr_err("gather process info from its parent PID namespace.\n");
1801+ pr_err("Please mount the proc file system properly, e.g. ");
1802+ pr_err("add the option '--mount-proc' for unshare command.\n");
1803+ return -EPERM;
1804+ }
1805+
17871806 if (target__has_task(target))
17881807 return perf_event__synthesize_thread_map(tool, threads, process, machine,
17891808 needs_mmap, data_mmap);
tools/testing/kunit/run_checks.py+1−1
@@ -61,7 +61,7 @@ def main(argv: Sequence[str]) -> None: · 60 unmodified lines
6161 elif isinstance(ex, subprocess.CalledProcessError):
6262 print(f'{name}: FAILED')
6363 else:
64− print('{name}: unexpected exception: {ex}')
64+ print(f'{name}: unexpected exception: {ex}')
6565 continue
6666
6767 output = ex.output
tools/testing/selftests/clone3/clone3.c+0−2
@@ -126,8 +126,6 @@ static void test_clone3(uint64_t flags, size_t size, int expected, · 125 unmodified lines
126126
127127 int main(int argc, char *argv[])
128128 {
129− pid_t pid;
130−
131129 uid_t uid = getuid();
132130
133131 ksft_print_header();
tools/testing/selftests/ir/ir_loopback.c+10−0
@@ -29,6 +29,16 @@ · 28 unmodified lines
2929 #define SYSFS_PATH_MAX 256
3030 #define DNAME_PATH_MAX 256
3131
32+/*
33+ * Support ancient lirc.h which does not have these values. Can be removed
34+ * once RHEL 8 is no longer a relevant testing platform.
35+ */
36+#if RC_PROTO_MAX < 26
37+#define RC_PROTO_RCMM12 24
38+#define RC_PROTO_RCMM24 25
39+#define RC_PROTO_RCMM32 26
40+#endif
41+
3242 static const struct {
3343 enum rc_proto proto;
3444 const char *name;
tools/testing/selftests/net/mptcp/mptcp_join.sh+1−0
@@ -1299,6 +1299,7 @@ signal_address_tests() · 1298 unmodified lines
12991299 pm_nl_add_endpoint $ns2 10.0.3.2 flags signal
13001300 pm_nl_add_endpoint $ns2 10.0.4.2 flags signal
13011301 run_tests $ns1 $ns2 10.0.1.1
1302+ chk_join_nr "signal addresses race test" 3 3 3
13021303
13031304 # the server will not signal the address terminating
13041305 # the MPC subflow
tools/testing/selftests/perf_events/sigtrap_threads.c+9−8
@@ -44,9 +44,10 @@ static struct { · 43 unmodified lines
4444 } ctx;
4545
4646 /* Unique value to check si_perf_data is correctly set from perf_event_attr::sig_data. */
47−#define TEST_SIG_DATA(addr) (~(unsigned long)(addr))
47+#define TEST_SIG_DATA(addr, id) (~(unsigned long)(addr) + id)
4848
49−static struct perf_event_attr make_event_attr(bool enabled, volatile void *addr)
49+static struct perf_event_attr make_event_attr(bool enabled, volatile void *addr,
50+ unsigned long id)
5051 {
5152 struct perf_event_attr attr = {
5253 .type = PERF_TYPE_BREAKPOINT,
@@ -60,7 +61,7 @@ static struct perf_event_attr make_event_attr(bool enabled, volatile void *addr) · 7 unmodified lines
6061 .inherit_thread = 1, /* ... but only cloned with CLONE_THREAD. */
6162 .remove_on_exec = 1, /* Required by sigtrap. */
6263 .sigtrap = 1, /* Request synchronous SIGTRAP on event. */
63− .sig_data = TEST_SIG_DATA(addr),
64+ .sig_data = TEST_SIG_DATA(addr, id),
6465 };
6566 return attr;
6667 }
@@ -110,7 +111,7 @@ FIXTURE(sigtrap_threads) · 43 unmodified lines
110111
111112 FIXTURE_SETUP(sigtrap_threads)
112113 {
113− struct perf_event_attr attr = make_event_attr(false, &ctx.iterate_on);
114+ struct perf_event_attr attr = make_event_attr(false, &ctx.iterate_on, 0);
114115 struct sigaction action = {};
115116 int i;
116117
@@ -165,7 +166,7 @@ TEST_F(sigtrap_threads, enable_event) · 48 unmodified lines
165166 EXPECT_EQ(ctx.tids_want_signal, 0);
166167 EXPECT_EQ(ctx.first_siginfo.si_addr, &ctx.iterate_on);
167168 EXPECT_EQ(ctx.first_siginfo.si_perf_type, PERF_TYPE_BREAKPOINT);
168− EXPECT_EQ(ctx.first_siginfo.si_perf_data, TEST_SIG_DATA(&ctx.iterate_on));
169+ EXPECT_EQ(ctx.first_siginfo.si_perf_data, TEST_SIG_DATA(&ctx.iterate_on, 0));
169170
170171 /* Check enabled for parent. */
171172 ctx.iterate_on = 0;
@@ -175,7 +176,7 @@ TEST_F(sigtrap_threads, enable_event) · 3 unmodified lines
175176 /* Test that modification propagates to all inherited events. */
176177 TEST_F(sigtrap_threads, modify_and_enable_event)
177178 {
178− struct perf_event_attr new_attr = make_event_attr(true, &ctx.iterate_on);
179+ struct perf_event_attr new_attr = make_event_attr(true, &ctx.iterate_on, 42);
179180
180181 EXPECT_EQ(ioctl(self->fd, PERF_EVENT_IOC_MODIFY_ATTRIBUTES, &new_attr), 0);
181182 run_test_threads(_metadata, self);
@@ -184,7 +185,7 @@ TEST_F(sigtrap_threads, modify_and_enable_event) · 2 unmodified lines
184185 EXPECT_EQ(ctx.tids_want_signal, 0);
185186 EXPECT_EQ(ctx.first_siginfo.si_addr, &ctx.iterate_on);
186187 EXPECT_EQ(ctx.first_siginfo.si_perf_type, PERF_TYPE_BREAKPOINT);
187− EXPECT_EQ(ctx.first_siginfo.si_perf_data, TEST_SIG_DATA(&ctx.iterate_on));
188+ EXPECT_EQ(ctx.first_siginfo.si_perf_data, TEST_SIG_DATA(&ctx.iterate_on, 42));
188189
189190 /* Check enabled for parent. */
190191 ctx.iterate_on = 0;
@@ -204,7 +205,7 @@ TEST_F(sigtrap_threads, signal_stress) · 13 unmodified lines
204205 EXPECT_EQ(ctx.tids_want_signal, 0);
205206 EXPECT_EQ(ctx.first_siginfo.si_addr, &ctx.iterate_on);
206207 EXPECT_EQ(ctx.first_siginfo.si_perf_type, PERF_TYPE_BREAKPOINT);
207− EXPECT_EQ(ctx.first_siginfo.si_perf_data, TEST_SIG_DATA(&ctx.iterate_on));
208+ EXPECT_EQ(ctx.first_siginfo.si_perf_data, TEST_SIG_DATA(&ctx.iterate_on, 0));
208209 }
209210
210211 TEST_HARNESS_MAIN
tools/testing/selftests/pidfd/pidfd.h+10−3
@@ -68,7 +68,7 @@ · 67 unmodified lines
6868 #define PIDFD_SKIP 3
6969 #define PIDFD_XFAIL 4
7070
71−int wait_for_pid(pid_t pid)
71+static inline int wait_for_pid(pid_t pid)
7272 {
7373 int status, ret;
7474
@@ -78,13 +78,20 @@ again: · 3 unmodified lines
7878 if (errno == EINTR)
7979 goto again;
8080
81+ ksft_print_msg("waitpid returned -1, errno=%d\n", errno);
8182 return -1;
8283 }
8384
84− if (!WIFEXITED(status))
85+ if (!WIFEXITED(status)) {
86+ ksft_print_msg(
87+ "waitpid !WIFEXITED, WIFSIGNALED=%d, WTERMSIG=%d\n",
88+ WIFSIGNALED(status), WTERMSIG(status));
8589 return -1;
90+ }
8691
87− return WEXITSTATUS(status);
92+ ret = WEXITSTATUS(status);
93+ ksft_print_msg("waitpid WEXITSTATUS=%d\n", ret);
94+ return ret;
8895 }
8996
9097 static inline int sys_pidfd_open(pid_t pid, unsigned int flags)
tools/testing/selftests/pidfd/pidfd_fdinfo_test.c+18−4
@@ -12,6 +12,7 @@ · 11 unmodified lines
1212 #include <string.h>
1313 #include <syscall.h>
1414 #include <sys/wait.h>
15+#include <sys/mman.h>
1516
1617 #include "pidfd.h"
1718 #include "../kselftest.h"
@@ -80,7 +81,10 @@ static inline int error_check(struct error *err, const char *test_name) · 62 unmodified lines
8081 return err->code;
8182 }
8283
84+#define CHILD_STACK_SIZE 8192
85+
8386 struct child {
87+ char *stack;
8488 pid_t pid;
8589 int fd;
8690 };
@@ -89,17 +93,22 @@ static struct child clone_newns(int (*fn)(void *), void *args, · 2 unmodified lines
8993 struct error *err)
9094 {
9195 static int flags = CLONE_PIDFD | CLONE_NEWPID | CLONE_NEWNS | SIGCHLD;
92− size_t stack_size = 1024;
93− char *stack[1024] = { 0 };
9496 struct child ret;
9597
9698 if (!(flags & CLONE_NEWUSER) && geteuid() != 0)
9799 flags |= CLONE_NEWUSER;
98100
101+ ret.stack = mmap(NULL, CHILD_STACK_SIZE, PROT_READ | PROT_WRITE,
102+ MAP_PRIVATE | MAP_ANONYMOUS | MAP_STACK, -1, 0);
103+ if (ret.stack == MAP_FAILED) {
104+ error_set(err, -1, "mmap of stack failed (errno %d)", errno);
105+ return ret;
106+ }
107+
99108 #ifdef __ia64__
100− ret.pid = __clone2(fn, stack, stack_size, flags, args, &ret.fd);
109+ ret.pid = __clone2(fn, ret.stack, CHILD_STACK_SIZE, flags, args, &ret.fd);
101110 #else
102− ret.pid = clone(fn, stack + stack_size, flags, args, &ret.fd);
111+ ret.pid = clone(fn, ret.stack + CHILD_STACK_SIZE, flags, args, &ret.fd);
103112 #endif
104113
105114 if (ret.pid < 0) {
@@ -129,6 +138,11 @@ static inline int child_join(struct child *child, struct error *err) · 23 unmodified lines
129138 else if (r > 0)
130139 error_set(err, r, "child %d reported: %d", child->pid, r);
131140
141+ if (munmap(child->stack, CHILD_STACK_SIZE)) {
142+ error_set(err, -1, "munmap of child stack failed (errno %d)", errno);
143+ r = -1;
144+ }
145+
132146 return r;
133147 }
134148
tools/testing/selftests/pidfd/pidfd_test.c+3−3
@@ -441,7 +441,6 @@ static void test_pidfd_poll_exec(int use_waitpid) · 440 unmodified lines
441441 {
442442 int pid, pidfd = 0;
443443 int status, ret;
444− pthread_t t1;
445444 time_t prog_start = time(NULL);
446445 const char *test_name = "pidfd_poll check for premature notification on child thread exec";
447446
@@ -500,13 +499,14 @@ static int child_poll_leader_exit_test(void *args) · 52 unmodified lines
500499 */
501500 *child_exit_secs = time(NULL);
502501 syscall(SYS_exit, 0);
502+ /* Never reached, but appeases compiler thinking we should return. */
503+ exit(0);
503504 }
504505
505506 static void test_pidfd_poll_leader_exit(int use_waitpid)
506507 {
507508 int pid, pidfd = 0;
508− int status, ret;
509− time_t prog_start = time(NULL);
509+ int status, ret = 0;
510510 const char *test_name = "pidfd_poll check for premature notification on non-empty"
511511 "group leader exit";
512512
tools/testing/selftests/pidfd/pidfd_wait.c+2−3
@@ -39,7 +39,7 @@ static int sys_waitid(int which, pid_t pid, siginfo_t *info, int options, · 38 unmodified lines
3939
4040 TEST(wait_simple)
4141 {
42− int pidfd = -1, status = 0;
42+ int pidfd = -1;
4343 pid_t parent_tid = -1;
4444 struct clone_args args = {
4545 .parent_tid = ptr_to_u64(&parent_tid),
@@ -47,7 +47,6 @@ TEST(wait_simple) · 1 unmodified line
4747 .flags = CLONE_PIDFD | CLONE_PARENT_SETTID,
4848 .exit_signal = SIGCHLD,
4949 };
50− int ret;
5150 pid_t pid;
5251 siginfo_t info = {
5352 .si_signo = 0,
@@ -88,7 +87,7 @@ TEST(wait_simple) · 34 unmodified lines
8887
8988 TEST(wait_states)
9089 {
91− int pidfd = -1, status = 0;
90+ int pidfd = -1;
9291 pid_t parent_tid = -1;
9392 struct clone_args args = {
9493 .parent_tid = ptr_to_u64(&parent_tid),
tools/testing/selftests/vm/userfaultfd.c+7−2
@@ -1417,6 +1417,7 @@ static void userfaultfd_pagemap_test(unsigned int test_pgsize) · 1416 unmodified lines
14171417 static int userfaultfd_stress(void)
14181418 {
14191419 void *area;
1420+ char *tmp_area;
14201421 unsigned long nr;
14211422 struct uffdio_register uffdio_register;
14221423 struct uffd_stats uffd_stats[nr_cpus];
@@ -1527,9 +1528,13 @@ static int userfaultfd_stress(void) · 104 unmodified lines
15271528 count_verify[nr], nr);
15281529
15291530 /* prepare next bounce */
1530− swap(area_src, area_dst);
1531+ tmp_area = area_src;
1532+ area_src = area_dst;
1533+ area_dst = tmp_area;
15311534
1532− swap(area_src_alias, area_dst_alias);
1535+ tmp_area = area_src_alias;
1536+ area_src_alias = area_dst_alias;
1537+ area_dst_alias = tmp_area;
15331538
15341539 uffd_stats_report(uffd_stats, nr_cpus);
15351540 }