]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
Fixes for 4.19
authorSasha Levin <sashal@kernel.org>
Mon, 22 Jun 2020 12:46:11 +0000 (08:46 -0400)
committerSasha Levin <sashal@kernel.org>
Mon, 22 Jun 2020 12:46:11 +0000 (08:46 -0400)
Signed-off-by: Sasha Levin <sashal@kernel.org>
176 files changed:
queue-4.19/afs-afs_write_end-should-change-i_size-under-the-rig.patch [new file with mode: 0644]
queue-4.19/afs-fix-memory-leak-in-afs_put_sysnames.patch [new file with mode: 0644]
queue-4.19/afs-fix-non-setting-of-mtime-when-writing-into-mmap.patch [new file with mode: 0644]
queue-4.19/alsa-hda-realtek-introduce-polarity-for-micmute-led-.patch [new file with mode: 0644]
queue-4.19/alsa-isa-wavefront-prevent-out-of-bounds-write-in-io.patch [new file with mode: 0644]
queue-4.19/alsa-usb-audio-fix-racy-list-management-in-output-qu.patch [new file with mode: 0644]
queue-4.19/alsa-usb-audio-improve-frames-size-computation.patch [new file with mode: 0644]
queue-4.19/apparmor-check-put-label-on-apparmor_sk_clone_securi.patch [new file with mode: 0644]
queue-4.19/apparmor-fix-introspection-of-of-task-mode-for-uncon.patch [new file with mode: 0644]
queue-4.19/apparmor-fix-nnp-subset-test-for-unconfined.patch [new file with mode: 0644]
queue-4.19/arm-dts-meson-switch-existing-boards-with-rgmii-phy-.patch [new file with mode: 0644]
queue-4.19/arm-dts-sun8i-h2-plus-bananapi-m2-zero-fix-led-polar.patch [new file with mode: 0644]
queue-4.19/arm-integrator-add-some-kconfig-selections.patch [new file with mode: 0644]
queue-4.19/arm64-dts-mt8173-fix-unit-name-warnings.patch [new file with mode: 0644]
queue-4.19/arm64-hw_breakpoint-don-t-invoke-overflow-handler-on.patch [new file with mode: 0644]
queue-4.19/arm64-tegra-fix-ethernet-phy-mode-for-jetson-xavier.patch [new file with mode: 0644]
queue-4.19/asoc-core-only-convert-non-dpcm-link-to-dpcm-link.patch [new file with mode: 0644]
queue-4.19/asoc-davinci-mcasp-fix-dma_chan-refcnt-leak-when-get.patch [new file with mode: 0644]
queue-4.19/asoc-fix-incomplete-error-handling-in-img_i2s_in_pro.patch [new file with mode: 0644]
queue-4.19/asoc-fsl_asrc_dma-fix-dma_chan-leak-when-config-dma-.patch [new file with mode: 0644]
queue-4.19/asoc-intel-bytcr_rt5640-add-quirk-for-toshiba-encore.patch [new file with mode: 0644]
queue-4.19/asoc-intel-bytcr_rt5640-add-quirk-for-toshiba-encore.patch-26105 [new file with mode: 0644]
queue-4.19/asoc-meson-add-missing-free_irq-in-error-path.patch [new file with mode: 0644]
queue-4.19/asoc-rt5645-add-platform-data-for-asus-t101ha.patch [new file with mode: 0644]
queue-4.19/asoc-tegra-tegra_wm8903-support-nvidia-headset-prope.patch [new file with mode: 0644]
queue-4.19/backlight-lp855x-ensure-regulators-are-disabled-on-p.patch [new file with mode: 0644]
queue-4.19/bcache-fix-potential-deadlock-problem-in-btree_gc_co.patch [new file with mode: 0644]
queue-4.19/blktrace-fix-endianness-for-blk_log_remap.patch [new file with mode: 0644]
queue-4.19/blktrace-fix-endianness-in-get_pdu_int.patch [new file with mode: 0644]
queue-4.19/blktrace-use-errno-instead-of-bi_status.patch [new file with mode: 0644]
queue-4.19/block-fix-use-after-free-in-blkdev_get.patch [new file with mode: 0644]
queue-4.19/clk-bcm2835-fix-return-type-of-bcm2835_register_gate.patch [new file with mode: 0644]
queue-4.19/clk-clk-flexgen-fix-clock-critical-handling.patch [new file with mode: 0644]
queue-4.19/clk-qcom-msm8916-fix-the-address-location-of-pll-con.patch [new file with mode: 0644]
queue-4.19/clk-samsung-exynos5433-add-ignore_unused-flag-to-scl.patch [new file with mode: 0644]
queue-4.19/clk-samsung-mark-top-isp-and-cam-clocks-on-exynos542.patch [new file with mode: 0644]
queue-4.19/clk-sprd-return-correct-type-of-value-for-_sprd_pll_.patch [new file with mode: 0644]
queue-4.19/clk-sunxi-fix-incorrect-usage-of-round_down.patch [new file with mode: 0644]
queue-4.19/clk-ti-composite-fix-memory-leak.patch [new file with mode: 0644]
queue-4.19/crypto-omap-sham-add-proper-load-balancing-support-f.patch [new file with mode: 0644]
queue-4.19/dlm-remove-bug-before-panic.patch [new file with mode: 0644]
queue-4.19/dm-mpath-switch-paths-in-dm_blk_ioctl-code-path.patch [new file with mode: 0644]
queue-4.19/dm-zoned-return-null-if-dmz_get_zone_for_reclaim-fai.patch [new file with mode: 0644]
queue-4.19/drivers-base-fix-null-pointer-exception-in-__platfor.patch [new file with mode: 0644]
queue-4.19/drivers-perf-hisi-fix-wrong-value-for-all-counters-e.patch [new file with mode: 0644]
queue-4.19/drm-encoder_slave-fix-refcouting-error-for-modules.patch [new file with mode: 0644]
queue-4.19/drm-msm-mdp5-fix-mdp5_init-error-path-for-failed-mdp.patch [new file with mode: 0644]
queue-4.19/drm-sun4i-hdmi-ddc-clk-fix-size-of-m-divider.patch [new file with mode: 0644]
queue-4.19/elfnote-mark-all-.note-sections-shf_alloc.patch [new file with mode: 0644]
queue-4.19/ext4-stop-overwrite-the-errcode-in-ext4_setup_super.patch [new file with mode: 0644]
queue-4.19/extcon-adc-jack-fix-an-error-handling-path-in-adc_ja.patch [new file with mode: 0644]
queue-4.19/f2fs-report-delalloc-reserve-as-non-free-in-statfs-f.patch [new file with mode: 0644]
queue-4.19/firmware-qcom_scm-fix-bogous-abuse-of-dma-direct-int.patch [new file with mode: 0644]
queue-4.19/fpga-dfl-afu-corrected-error-handling-levels.patch [new file with mode: 0644]
queue-4.19/geneve-change-from-tx_error-to-tx_dropped-on-missing.patch [new file with mode: 0644]
queue-4.19/gfs2-allow-lock_nolock-mount-to-specify-jid-x.patch [new file with mode: 0644]
queue-4.19/gfs2-fix-use-after-free-on-transaction-ail-lists.patch [new file with mode: 0644]
queue-4.19/gpio-dwapb-append-module_alias-for-platform-driver.patch [new file with mode: 0644]
queue-4.19/gpio-dwapb-call-acpi_gpiochip_free_interrupts-on-gpi.patch [new file with mode: 0644]
queue-4.19/hid-add-quirks-for-trust-panora-graphic-tablet.patch [new file with mode: 0644]
queue-4.19/i2c-piix4-detect-secondary-smbus-controller-on-amd-a.patch [new file with mode: 0644]
queue-4.19/i2c-pxa-clear-all-master-action-bits-in-i2c_pxa_stop.patch [new file with mode: 0644]
queue-4.19/i2c-pxa-fix-i2c_pxa_scream_blue_murder-debug-output.patch [new file with mode: 0644]
queue-4.19/ib-cma-fix-ports-memory-leak-in-cma_configfs.patch [new file with mode: 0644]
queue-4.19/iio-bmp280-fix-compensation-of-humidity.patch [new file with mode: 0644]
queue-4.19/iio-pressure-bmp280-tolerate-irq-before-registering.patch [new file with mode: 0644]
queue-4.19/include-linux-bitops.h-avoid-clang-shift-count-overf.patch [new file with mode: 0644]
queue-4.19/input-mms114-add-extra-compatible-for-mms345l.patch [new file with mode: 0644]
queue-4.19/ipmi-use-vzalloc-instead-of-kmalloc-for-user-creatio.patch [new file with mode: 0644]
queue-4.19/kvm-ppc-book3s-hv-ignore-kmemleak-false-positives.patch [new file with mode: 0644]
queue-4.19/lib-zlib-remove-outdated-and-incorrect-pre-increment.patch [new file with mode: 0644]
queue-4.19/libata-use-per-port-sync-for-detach.patch [new file with mode: 0644]
queue-4.19/m68k-pci-fix-a-memory-leak-in-an-error-handling-path.patch [new file with mode: 0644]
queue-4.19/mfd-wm8994-fix-driver-operation-if-loaded-as-modules.patch [new file with mode: 0644]
queue-4.19/mksysmap-fix-the-mismatch-of-.l-symbols-in-system.ma.patch [new file with mode: 0644]
queue-4.19/net-filter-permit-reading-net-in-load_bytes_relative.patch [new file with mode: 0644]
queue-4.19/net-sunrpc-fix-off-by-one-issues-in-rpc_ntop6.patch [new file with mode: 0644]
queue-4.19/nfsd-fix-svc_xprt-refcnt-leak-when-setup-callback-cl.patch [new file with mode: 0644]
queue-4.19/nfsv4.1-fix-rpc_call_done-assignment-for-bind_conn_t.patch [new file with mode: 0644]
queue-4.19/ntb-fix-the-default-port-and-peer-numbers-for-legacy.patch [new file with mode: 0644]
queue-4.19/ntb-ntb_pingpong-choose-doorbells-based-on-port-numb.patch [new file with mode: 0644]
queue-4.19/ntb-ntb_test-fix-bug-when-counting-remote-files.patch [new file with mode: 0644]
queue-4.19/ntb-ntb_tool-reading-the-link-file-should-not-end-in.patch [new file with mode: 0644]
queue-4.19/ntb-perf-don-t-require-one-more-memory-window-than-n.patch [new file with mode: 0644]
queue-4.19/ntb-perf-fix-race-condition-when-run-with-ntb_test.patch [new file with mode: 0644]
queue-4.19/ntb-perf-fix-support-for-hardware-that-doesn-t-have-.patch [new file with mode: 0644]
queue-4.19/ntb-revert-the-change-to-use-the-ntb-device-dev-for-.patch [new file with mode: 0644]
queue-4.19/ntb_perf-pass-correct-struct-device-to-dma_alloc_coh.patch [new file with mode: 0644]
queue-4.19/ntb_tool-pass-correct-struct-device-to-dma_alloc_coh.patch [new file with mode: 0644]
queue-4.19/of-fix-a-refcounting-bug-in-__of_attach_node_sysfs.patch [new file with mode: 0644]
queue-4.19/openrisc-fix-issue-with-argument-clobbering-for-clon.patch [new file with mode: 0644]
queue-4.19/ovl-verify-permissions-in-ovl_path_open.patch [new file with mode: 0644]
queue-4.19/pci-aardvark-don-t-blindly-enable-aspm-l0s-and-don-t.patch [new file with mode: 0644]
queue-4.19/pci-allow-pci_resize_resource-for-devices-on-root-bu.patch [new file with mode: 0644]
queue-4.19/pci-aspm-allow-aspm-on-links-to-pcie-to-pci-pci-x-br.patch [new file with mode: 0644]
queue-4.19/pci-dwc-fix-inner-msi-irq-domain-registration.patch [new file with mode: 0644]
queue-4.19/pci-fix-pci_register_host_bridge-device_register-err.patch [new file with mode: 0644]
queue-4.19/pci-ptm-inherit-switch-downstream-port-ptm-settings-.patch [new file with mode: 0644]
queue-4.19/pci-rcar-fix-incorrect-programming-of-ob-windows.patch [new file with mode: 0644]
queue-4.19/pci-v3-semi-fix-a-memory-leak-in-v3_pci_probe-error-.patch [new file with mode: 0644]
queue-4.19/pci-vmd-filter-resource-type-bits-from-shadow-regist.patch [new file with mode: 0644]
queue-4.19/perf-report-fix-null-pointer-dereference-in-hists__f.patch [new file with mode: 0644]
queue-4.19/pinctrl-freescale-imx-fix-an-error-handling-path-in-.patch [new file with mode: 0644]
queue-4.19/pinctrl-imxl-fix-an-error-handling-path-in-imx1_pinc.patch [new file with mode: 0644]
queue-4.19/pinctrl-rockchip-fix-memleak-in-rockchip_dt_node_to_.patch [new file with mode: 0644]
queue-4.19/pinctrl-rza1-fix-wrong-array-assignment-of-rza1l_swi.patch [new file with mode: 0644]
queue-4.19/power-supply-bq24257_charger-replace-depends-on-regm.patch [new file with mode: 0644]
queue-4.19/power-supply-lp8788-fix-an-error-handling-path-in-lp.patch [new file with mode: 0644]
queue-4.19/power-supply-smb347-charger-irqstat_d-is-volatile.patch [new file with mode: 0644]
queue-4.19/powerpc-4xx-don-t-unmap-null-mbase.patch [new file with mode: 0644]
queue-4.19/powerpc-64-don-t-initialise-init_task-thread.regs.patch [new file with mode: 0644]
queue-4.19/powerpc-64s-pgtable-fix-an-undefined-behaviour.patch [new file with mode: 0644]
queue-4.19/powerpc-crashkernel-take-mem-option-into-account.patch [new file with mode: 0644]
queue-4.19/powerpc-perf-hv-24x7-fix-inconsistent-output-values-.patch [new file with mode: 0644]
queue-4.19/powerpc-ps3-fix-kexec-shutdown-hang.patch [new file with mode: 0644]
queue-4.19/powerpc-pseries-ras-fix-fwnmi_valid-off-by-one.patch [new file with mode: 0644]
queue-4.19/ps3disk-use-the-default-segment-boundary.patch [new file with mode: 0644]
queue-4.19/pwm-img-call-pm_runtime_put-in-pm_runtime_get_sync-f.patch [new file with mode: 0644]
queue-4.19/rdma-iw_cxgb4-cleanup-device-debugfs-entries-on-uld-.patch [new file with mode: 0644]
queue-4.19/rdma-mlx5-add-init2init-as-a-modify-command.patch [new file with mode: 0644]
queue-4.19/remoteproc-fix-idr-initialisation-in-rproc_alloc.patch [new file with mode: 0644]
queue-4.19/rxrpc-adjust-proc-net-rxrpc-calls-to-display-call-de.patch [new file with mode: 0644]
queue-4.19/s390-qdio-put-thinint-indicator-after-early-error.patch [new file with mode: 0644]
queue-4.19/scsi-acornscsi-fix-an-error-handling-path-in-acornsc.patch [new file with mode: 0644]
queue-4.19/scsi-ibmvscsi-don-t-send-host-info-in-adapter-info-m.patch [new file with mode: 0644]
queue-4.19/scsi-iscsi-fix-reference-count-leak-in-iscsi_boot_cr.patch [new file with mode: 0644]
queue-4.19/scsi-lpfc-fix-lpfc_nodelist-leak-when-processing-uns.patch [new file with mode: 0644]
queue-4.19/scsi-mpt3sas-fix-double-free-warnings.patch [new file with mode: 0644]
queue-4.19/scsi-qedf-fix-crash-when-mfw-calls-for-protocol-stat.patch [new file with mode: 0644]
queue-4.19/scsi-qedi-check-for-buffer-overflow-in-qedi_set_path.patch [new file with mode: 0644]
queue-4.19/scsi-qedi-do-not-flush-offload-work-if-arp-not-resol.patch [new file with mode: 0644]
queue-4.19/scsi-qla2xxx-fix-issue-with-adapter-s-stopping-state.patch [new file with mode: 0644]
queue-4.19/scsi-qla2xxx-fix-warning-after-fc-target-reset.patch [new file with mode: 0644]
queue-4.19/scsi-sr-fix-sr_probe-missing-deallocate-of-device-mi.patch [new file with mode: 0644]
queue-4.19/scsi-target-tcmu-fix-a-use-after-free-in-tcmu_check_.patch [new file with mode: 0644]
queue-4.19/scsi-target-tcmu-userspace-must-not-complete-queued-.patch [new file with mode: 0644]
queue-4.19/scsi-ufs-don-t-update-urgent-bkops-level-when-toggli.patch [new file with mode: 0644]
queue-4.19/scsi-ufs-qcom-fix-scheduling-while-atomic-issue.patch [new file with mode: 0644]
queue-4.19/selftests-net-in-timestamping-strncpy-needs-to-prese.patch [new file with mode: 0644]
queue-4.19/selftests-vm-pkeys-fix-alloc_random_pkey-to-make-it-.patch [new file with mode: 0644]
queue-4.19/serial-8250-fix-max-baud-limit-in-generic-8250-port.patch [new file with mode: 0644]
queue-4.19/serial-amba-pl011-make-sure-we-initialize-the-port.l.patch [new file with mode: 0644]
queue-4.19/series [new file with mode: 0644]
queue-4.19/slimbus-ngd-get-drvdata-from-correct-device.patch [new file with mode: 0644]
queue-4.19/soundwire-slave-don-t-init-debugfs-on-device-registr.patch [new file with mode: 0644]
queue-4.19/staging-gasket-fix-mapping-refcnt-leak-when-put-attr.patch [new file with mode: 0644]
queue-4.19/staging-gasket-fix-mapping-refcnt-leak-when-register.patch [new file with mode: 0644]
queue-4.19/staging-greybus-fix-a-missing-check-bug-in-gb_lights.patch [new file with mode: 0644]
queue-4.19/staging-rtl8712-fix-multiline-derefernce-warnings.patch [new file with mode: 0644]
queue-4.19/staging-sm750fb-add-missing-case-while-setting-fb_vi.patch [new file with mode: 0644]
queue-4.19/thermal-drivers-ti-soc-thermal-avoid-dereferencing-e.patch [new file with mode: 0644]
queue-4.19/tty-hvc-fix-data-abort-due-to-race-in-hvc_open.patch [new file with mode: 0644]
queue-4.19/tty-n_gsm-fix-bogus-i-in-gsm_data_kick.patch [new file with mode: 0644]
queue-4.19/tty-n_gsm-fix-sof-skipping.patch [new file with mode: 0644]
queue-4.19/tty-n_gsm-fix-waking-up-upper-tty-layer-when-room-av.patch [new file with mode: 0644]
queue-4.19/usb-dwc2-gadget-move-gadget-resume-after-the-core-is.patch [new file with mode: 0644]
queue-4.19/usb-dwc3-gadget-properly-handle-failed-kick_transfer.patch [new file with mode: 0644]
queue-4.19/usb-ehci-platform-set-pm-runtime-as-active-on-resume.patch [new file with mode: 0644]
queue-4.19/usb-gadget-fix-issue-with-config_ep_by_speed-functio.patch [new file with mode: 0644]
queue-4.19/usb-gadget-fix-potential-double-free-in-m66592_probe.patch [new file with mode: 0644]
queue-4.19/usb-gadget-lpc32xx_udc-don-t-dereference-ep-pointer-.patch [new file with mode: 0644]
queue-4.19/usb-gadget-udc-s3c2410_udc-remove-pointless-null-che.patch [new file with mode: 0644]
queue-4.19/usb-host-ehci-mxc-add-error-handling-in-ehci_mxc_drv.patch [new file with mode: 0644]
queue-4.19/usb-host-ehci-platform-add-a-quirk-to-avoid-stuck.patch [new file with mode: 0644]
queue-4.19/usb-ohci-platform-fix-a-warning-when-hibernating.patch [new file with mode: 0644]
queue-4.19/usb-xhci-plat-set-pm-runtime-as-active-on-resume.patch [new file with mode: 0644]
queue-4.19/usblp-poison-urbs-upon-disconnect.patch [new file with mode: 0644]
queue-4.19/vfio-mdev-fix-reference-count-leak-in-add_mdev_suppo.patch [new file with mode: 0644]
queue-4.19/vfio-pci-fix-memory-leaks-in-alloc_perm_bits.patch [new file with mode: 0644]
queue-4.19/vfio-pci-mask-cap-zero.patch [new file with mode: 0644]
queue-4.19/watchdog-da9062-no-need-to-ping-manually-before-sett.patch [new file with mode: 0644]
queue-4.19/x86-apic-make-tsc-deadline-timer-detection-message-v.patch [new file with mode: 0644]
queue-4.19/x86-idt-keep-spurious-entries-unset-in-system_vector.patch [new file with mode: 0644]
queue-4.19/x86-purgatory-disable-various-profiling-and-sanitizi.patch [new file with mode: 0644]
queue-4.19/xdp-fix-xsk_generic_xmit-errno.patch [new file with mode: 0644]
queue-4.19/yam-fix-possible-memory-leak-in-yam_init_driver.patch [new file with mode: 0644]

diff --git a/queue-4.19/afs-afs_write_end-should-change-i_size-under-the-rig.patch b/queue-4.19/afs-afs_write_end-should-change-i_size-under-the-rig.patch
new file mode 100644 (file)
index 0000000..1908f6d
--- /dev/null
@@ -0,0 +1,44 @@
+From 20fcd0b1deb106ac5f4e117d295152d8dae8c573 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Fri, 12 Jun 2020 23:58:51 +0100
+Subject: afs: afs_write_end() should change i_size under the right lock
+
+From: David Howells <dhowells@redhat.com>
+
+[ Upstream commit 1f32ef79897052ef7d3d154610d8d6af95abde83 ]
+
+Fix afs_write_end() to change i_size under vnode->cb_lock rather than
+->wb_lock so that it doesn't race with afs_vnode_commit_status() and
+afs_getattr().
+
+The ->wb_lock is only meant to guard access to ->wb_keys which isn't
+accessed by that piece of code.
+
+Fixes: 4343d00872e1 ("afs: Get rid of the afs_writeback record")
+Signed-off-by: David Howells <dhowells@redhat.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ fs/afs/write.c | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/fs/afs/write.c b/fs/afs/write.c
+index 53f329f61cc37..ec8d27cf92a5c 100644
+--- a/fs/afs/write.c
++++ b/fs/afs/write.c
+@@ -188,11 +188,11 @@ int afs_write_end(struct file *file, struct address_space *mapping,
+       i_size = i_size_read(&vnode->vfs_inode);
+       if (maybe_i_size > i_size) {
+-              spin_lock(&vnode->wb_lock);
++              write_seqlock(&vnode->cb_lock);
+               i_size = i_size_read(&vnode->vfs_inode);
+               if (maybe_i_size > i_size)
+                       i_size_write(&vnode->vfs_inode, maybe_i_size);
+-              spin_unlock(&vnode->wb_lock);
++              write_sequnlock(&vnode->cb_lock);
+       }
+       if (!PageUptodate(page)) {
+-- 
+2.25.1
+
diff --git a/queue-4.19/afs-fix-memory-leak-in-afs_put_sysnames.patch b/queue-4.19/afs-fix-memory-leak-in-afs_put_sysnames.patch
new file mode 100644 (file)
index 0000000..15d690f
--- /dev/null
@@ -0,0 +1,36 @@
+From da6d5f64636e45f515d2dfa78da8d1ef2b24b9c0 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Tue, 2 Jun 2020 09:30:45 +0800
+Subject: afs: Fix memory leak in afs_put_sysnames()
+
+From: Zhihao Cheng <chengzhihao1@huawei.com>
+
+[ Upstream commit 2ca068be09bf8e285036603823696140026dcbe7 ]
+
+Fix afs_put_sysnames() to actually free the specified afs_sysnames
+object after its reference count has been decreased to zero and
+its contents have been released.
+
+Fixes: 6f8880d8e681557 ("afs: Implement @sys substitution handling")
+Signed-off-by: Zhihao Cheng <chengzhihao1@huawei.com>
+Signed-off-by: David Howells <dhowells@redhat.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ fs/afs/proc.c | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/fs/afs/proc.c b/fs/afs/proc.c
+index 9101f62707af2..e445c02dea3df 100644
+--- a/fs/afs/proc.c
++++ b/fs/afs/proc.c
+@@ -512,6 +512,7 @@ void afs_put_sysnames(struct afs_sysnames *sysnames)
+                       if (sysnames->subs[i] != afs_init_sysname &&
+                           sysnames->subs[i] != sysnames->blank)
+                               kfree(sysnames->subs[i]);
++              kfree(sysnames);
+       }
+ }
+-- 
+2.25.1
+
diff --git a/queue-4.19/afs-fix-non-setting-of-mtime-when-writing-into-mmap.patch b/queue-4.19/afs-fix-non-setting-of-mtime-when-writing-into-mmap.patch
new file mode 100644 (file)
index 0000000..ad6fc48
--- /dev/null
@@ -0,0 +1,39 @@
+From 80a24cd90252d3ebda58badeccdd5c1034de4a86 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Fri, 12 Jun 2020 00:15:13 +0100
+Subject: afs: Fix non-setting of mtime when writing into mmap
+
+From: David Howells <dhowells@redhat.com>
+
+[ Upstream commit bb413489288e4e457353bac513fddb6330d245ca ]
+
+The mtime on an inode needs to be updated when a write is made into an
+mmap'ed section.  There are three ways in which this could be done: update
+it when page_mkwrite is called, update it when a page is changed from dirty
+to writeback or leave it to the server and fix the mtime up from the reply
+to the StoreData RPC.
+
+Found with the generic/215 xfstest.
+
+Fixes: 1cf7a1518aef ("afs: Implement shared-writeable mmap")
+Signed-off-by: David Howells <dhowells@redhat.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ fs/afs/write.c | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/fs/afs/write.c b/fs/afs/write.c
+index e00461a6de9aa..53f329f61cc37 100644
+--- a/fs/afs/write.c
++++ b/fs/afs/write.c
+@@ -792,6 +792,7 @@ vm_fault_t afs_page_mkwrite(struct vm_fault *vmf)
+                            vmf->page->index, priv);
+       SetPagePrivate(vmf->page);
+       set_page_private(vmf->page, priv);
++      file_update_time(file);
+       sb_end_pagefault(inode->i_sb);
+       return VM_FAULT_LOCKED;
+-- 
+2.25.1
+
diff --git a/queue-4.19/alsa-hda-realtek-introduce-polarity-for-micmute-led-.patch b/queue-4.19/alsa-hda-realtek-introduce-polarity-for-micmute-led-.patch
new file mode 100644 (file)
index 0000000..964c893
--- /dev/null
@@ -0,0 +1,79 @@
+From dcb9618b896042180db12f6e02c7462110cb3ef3 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Thu, 30 Apr 2020 16:32:51 +0800
+Subject: ALSA: hda/realtek - Introduce polarity for micmute LED GPIO
+
+From: Kai-Heng Feng <kai.heng.feng@canonical.com>
+
+[ Upstream commit dbd13179780555ecd3c992dea1222ca31920e892 ]
+
+Currently mute LED and micmute LED share the same GPIO polarity.
+
+So split the polarity for mute and micmute, in case they have different
+polarities.
+
+Signed-off-by: Kai-Heng Feng <kai.heng.feng@canonical.com>
+Link: https://lore.kernel.org/r/20200430083255.5093-1-kai.heng.feng@canonical.com
+Signed-off-by: Takashi Iwai <tiwai@suse.de>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ sound/pci/hda/patch_realtek.c | 14 ++++++++------
+ 1 file changed, 8 insertions(+), 6 deletions(-)
+
+diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c
+index b4f802013f740..623ebe2e7db43 100644
+--- a/sound/pci/hda/patch_realtek.c
++++ b/sound/pci/hda/patch_realtek.c
+@@ -94,6 +94,7 @@ struct alc_spec {
+       /* mute LED for HP laptops, see alc269_fixup_mic_mute_hook() */
+       int mute_led_polarity;
++      int micmute_led_polarity;
+       hda_nid_t mute_led_nid;
+       hda_nid_t cap_mute_led_nid;
+@@ -3862,11 +3863,9 @@ static void alc269_fixup_hp_mute_led_mic3(struct hda_codec *codec,
+ /* update LED status via GPIO */
+ static void alc_update_gpio_led(struct hda_codec *codec, unsigned int mask,
+-                              bool enabled)
++                              int polarity, bool enabled)
+ {
+-      struct alc_spec *spec = codec->spec;
+-
+-      if (spec->mute_led_polarity)
++      if (polarity)
+               enabled = !enabled;
+       alc_update_gpio_data(codec, mask, !enabled); /* muted -> LED on */
+ }
+@@ -3877,7 +3876,8 @@ static void alc_fixup_gpio_mute_hook(void *private_data, int enabled)
+       struct hda_codec *codec = private_data;
+       struct alc_spec *spec = codec->spec;
+-      alc_update_gpio_led(codec, spec->gpio_mute_led_mask, enabled);
++      alc_update_gpio_led(codec, spec->gpio_mute_led_mask,
++                          spec->mute_led_polarity, enabled);
+ }
+ /* turn on/off mic-mute LED via GPIO per capture hook */
+@@ -3886,6 +3886,7 @@ static void alc_gpio_micmute_update(struct hda_codec *codec)
+       struct alc_spec *spec = codec->spec;
+       alc_update_gpio_led(codec, spec->gpio_mic_led_mask,
++                          spec->micmute_led_polarity,
+                           spec->gen.micmute_led.led_value);
+ }
+@@ -5476,7 +5477,8 @@ static void alc280_hp_gpio4_automute_hook(struct hda_codec *codec,
+       snd_hda_gen_hp_automute(codec, jack);
+       /* mute_led_polarity is set to 0, so we pass inverted value here */
+-      alc_update_gpio_led(codec, 0x10, !spec->gen.hp_jack_present);
++      alc_update_gpio_led(codec, 0x10, spec->mute_led_polarity,
++                          !spec->gen.hp_jack_present);
+ }
+ /* Manage GPIOs for HP EliteBook Folio 9480m.
+-- 
+2.25.1
+
diff --git a/queue-4.19/alsa-isa-wavefront-prevent-out-of-bounds-write-in-io.patch b/queue-4.19/alsa-isa-wavefront-prevent-out-of-bounds-write-in-io.patch
new file mode 100644 (file)
index 0000000..1d8a50b
--- /dev/null
@@ -0,0 +1,49 @@
+From 544beacb12a4a01e50412d1834f329102efe2033 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Fri, 1 May 2020 12:40:11 +0300
+Subject: ALSA: isa/wavefront: prevent out of bounds write in ioctl
+
+From: Dan Carpenter <dan.carpenter@oracle.com>
+
+[ Upstream commit 7f0d5053c5a9d23fe5c2d337495a9d79038d267b ]
+
+The "header->number" comes from the ioctl and it needs to be clamped to
+prevent out of bounds writes.
+
+Signed-off-by: Dan Carpenter <dan.carpenter@oracle.com>
+Link: https://lore.kernel.org/r/20200501094011.GA960082@mwanda
+Signed-off-by: Takashi Iwai <tiwai@suse.de>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ sound/isa/wavefront/wavefront_synth.c | 8 +++++++-
+ 1 file changed, 7 insertions(+), 1 deletion(-)
+
+diff --git a/sound/isa/wavefront/wavefront_synth.c b/sound/isa/wavefront/wavefront_synth.c
+index 0b1e4b34b2996..13c8e6542a2fc 100644
+--- a/sound/isa/wavefront/wavefront_synth.c
++++ b/sound/isa/wavefront/wavefront_synth.c
+@@ -1175,7 +1175,10 @@ wavefront_send_alias (snd_wavefront_t *dev, wavefront_patch_info *header)
+                                     "alias for %d\n",
+                                     header->number,
+                                     header->hdr.a.OriginalSample);
+-    
++
++      if (header->number >= WF_MAX_SAMPLE)
++              return -EINVAL;
++
+       munge_int32 (header->number, &alias_hdr[0], 2);
+       munge_int32 (header->hdr.a.OriginalSample, &alias_hdr[2], 2);
+       munge_int32 (*((unsigned int *)&header->hdr.a.sampleStartOffset),
+@@ -1206,6 +1209,9 @@ wavefront_send_multisample (snd_wavefront_t *dev, wavefront_patch_info *header)
+       int num_samples;
+       unsigned char *msample_hdr;
++      if (header->number >= WF_MAX_SAMPLE)
++              return -EINVAL;
++
+       msample_hdr = kmalloc(WF_MSAMPLE_BYTES, GFP_KERNEL);
+       if (! msample_hdr)
+               return -ENOMEM;
+-- 
+2.25.1
+
diff --git a/queue-4.19/alsa-usb-audio-fix-racy-list-management-in-output-qu.patch b/queue-4.19/alsa-usb-audio-fix-racy-list-management-in-output-qu.patch
new file mode 100644 (file)
index 0000000..dead6bc
--- /dev/null
@@ -0,0 +1,51 @@
+From 863b59c77f6fd88c0d7494eac5795771f4598fa2 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Fri, 24 Apr 2020 09:40:16 +0200
+Subject: ALSA: usb-audio: Fix racy list management in output queue
+
+From: Takashi Iwai <tiwai@suse.de>
+
+[ Upstream commit 5b6cc38f3f3f37109ce72b60bda215a5f6892c0b ]
+
+The linked list entry from FIFO is peeked at
+queue_pending_output_urbs() but the actual element pop-out is
+performed outside the spinlock, and it's potentially racy.
+
+Do delete the link at the right place inside the spinlock.
+
+Fixes: 8fdff6a319e7 ("ALSA: snd-usb: implement new endpoint streaming model")
+Link: https://lore.kernel.org/r/20200424074016.14301-1-tiwai@suse.de
+Signed-off-by: Takashi Iwai <tiwai@suse.de>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ sound/usb/endpoint.c | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+diff --git a/sound/usb/endpoint.c b/sound/usb/endpoint.c
+index 36e255d889372..48611849b79b6 100644
+--- a/sound/usb/endpoint.c
++++ b/sound/usb/endpoint.c
+@@ -359,17 +359,17 @@ static void queue_pending_output_urbs(struct snd_usb_endpoint *ep)
+                       ep->next_packet_read_pos %= MAX_URBS;
+                       /* take URB out of FIFO */
+-                      if (!list_empty(&ep->ready_playback_urbs))
++                      if (!list_empty(&ep->ready_playback_urbs)) {
+                               ctx = list_first_entry(&ep->ready_playback_urbs,
+                                              struct snd_urb_ctx, ready_list);
++                              list_del_init(&ctx->ready_list);
++                      }
+               }
+               spin_unlock_irqrestore(&ep->lock, flags);
+               if (ctx == NULL)
+                       return;
+-              list_del_init(&ctx->ready_list);
+-
+               /* copy over the length information */
+               for (i = 0; i < packet->packets; i++)
+                       ctx->packet_size[i] = packet->packet_size[i];
+-- 
+2.25.1
+
diff --git a/queue-4.19/alsa-usb-audio-improve-frames-size-computation.patch b/queue-4.19/alsa-usb-audio-improve-frames-size-computation.patch
new file mode 100644 (file)
index 0000000..c10af7c
--- /dev/null
@@ -0,0 +1,167 @@
+From 9d2b529aa21ac319fc5435d7f2315614fb4e85b9 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Fri, 24 Apr 2020 05:24:48 +0300
+Subject: ALSA: usb-audio: Improve frames size computation
+
+From: Alexander Tsoy <alexander@tsoy.me>
+
+[ Upstream commit f0bd62b64016508938df9babe47f65c2c727d25c ]
+
+For computation of the the next frame size current value of fs/fps and
+accumulated fractional parts of fs/fps are used, where values are stored
+in Q16.16 format. This is quite natural for computing frame size for
+asynchronous endpoints driven by explicit feedback, since in this case
+fs/fps is a value provided by the feedback endpoint and it's already in
+the Q format. If an error is accumulated over time, the device can
+adjust fs/fps value to prevent buffer overruns/underruns.
+
+But for synchronous endpoints the accuracy provided by these computations
+is not enough. Due to accumulated error the driver periodically produces
+frames with incorrect size (+/- 1 audio sample).
+
+This patch fixes this issue by implementing a different algorithm for
+frame size computation. It is based on accumulating of the remainders
+from division fs/fps and it doesn't accumulate errors over time. This
+new method is enabled for synchronous and adaptive playback endpoints.
+
+Signed-off-by: Alexander Tsoy <alexander@tsoy.me>
+Link: https://lore.kernel.org/r/20200424022449.14972-1-alexander@tsoy.me
+Signed-off-by: Takashi Iwai <tiwai@suse.de>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ sound/usb/card.h     |  4 ++++
+ sound/usb/endpoint.c | 43 ++++++++++++++++++++++++++++++++++++++-----
+ sound/usb/endpoint.h |  1 +
+ sound/usb/pcm.c      |  2 ++
+ 4 files changed, 45 insertions(+), 5 deletions(-)
+
+diff --git a/sound/usb/card.h b/sound/usb/card.h
+index 7f11655bde503..36198ddb47544 100644
+--- a/sound/usb/card.h
++++ b/sound/usb/card.h
+@@ -83,6 +83,10 @@ struct snd_usb_endpoint {
+       dma_addr_t sync_dma;            /* DMA address of syncbuf */
+       unsigned int pipe;              /* the data i/o pipe */
++      unsigned int framesize[2];      /* small/large frame sizes in samples */
++      unsigned int sample_rem;        /* remainder from division fs/fps */
++      unsigned int sample_accum;      /* sample accumulator */
++      unsigned int fps;               /* frames per second */
+       unsigned int freqn;             /* nominal sampling rate in fs/fps in Q16.16 format */
+       unsigned int freqm;             /* momentary sampling rate in fs/fps in Q16.16 format */
+       int        freqshift;           /* how much to shift the feedback value to get Q16.16 */
+diff --git a/sound/usb/endpoint.c b/sound/usb/endpoint.c
+index aeb74cc6ceff1..36e255d889372 100644
+--- a/sound/usb/endpoint.c
++++ b/sound/usb/endpoint.c
+@@ -137,12 +137,12 @@ int snd_usb_endpoint_implicit_feedback_sink(struct snd_usb_endpoint *ep)
+ /*
+  * For streaming based on information derived from sync endpoints,
+- * prepare_outbound_urb_sizes() will call next_packet_size() to
++ * prepare_outbound_urb_sizes() will call slave_next_packet_size() to
+  * determine the number of samples to be sent in the next packet.
+  *
+- * For implicit feedback, next_packet_size() is unused.
++ * For implicit feedback, slave_next_packet_size() is unused.
+  */
+-int snd_usb_endpoint_next_packet_size(struct snd_usb_endpoint *ep)
++int snd_usb_endpoint_slave_next_packet_size(struct snd_usb_endpoint *ep)
+ {
+       unsigned long flags;
+       int ret;
+@@ -159,6 +159,29 @@ int snd_usb_endpoint_next_packet_size(struct snd_usb_endpoint *ep)
+       return ret;
+ }
++/*
++ * For adaptive and synchronous endpoints, prepare_outbound_urb_sizes()
++ * will call next_packet_size() to determine the number of samples to be
++ * sent in the next packet.
++ */
++int snd_usb_endpoint_next_packet_size(struct snd_usb_endpoint *ep)
++{
++      int ret;
++
++      if (ep->fill_max)
++              return ep->maxframesize;
++
++      ep->sample_accum += ep->sample_rem;
++      if (ep->sample_accum >= ep->fps) {
++              ep->sample_accum -= ep->fps;
++              ret = ep->framesize[1];
++      } else {
++              ret = ep->framesize[0];
++      }
++
++      return ret;
++}
++
+ static void retire_outbound_urb(struct snd_usb_endpoint *ep,
+                               struct snd_urb_ctx *urb_ctx)
+ {
+@@ -203,6 +226,8 @@ static void prepare_silent_urb(struct snd_usb_endpoint *ep,
+               if (ctx->packet_size[i])
+                       counts = ctx->packet_size[i];
++              else if (ep->sync_master)
++                      counts = snd_usb_endpoint_slave_next_packet_size(ep);
+               else
+                       counts = snd_usb_endpoint_next_packet_size(ep);
+@@ -887,10 +912,17 @@ int snd_usb_endpoint_set_params(struct snd_usb_endpoint *ep,
+       ep->maxpacksize = fmt->maxpacksize;
+       ep->fill_max = !!(fmt->attributes & UAC_EP_CS_ATTR_FILL_MAX);
+-      if (snd_usb_get_speed(ep->chip->dev) == USB_SPEED_FULL)
++      if (snd_usb_get_speed(ep->chip->dev) == USB_SPEED_FULL) {
+               ep->freqn = get_usb_full_speed_rate(rate);
+-      else
++              ep->fps = 1000;
++      } else {
+               ep->freqn = get_usb_high_speed_rate(rate);
++              ep->fps = 8000;
++      }
++
++      ep->sample_rem = rate % ep->fps;
++      ep->framesize[0] = rate / ep->fps;
++      ep->framesize[1] = (rate + (ep->fps - 1)) / ep->fps;
+       /* calculate the frequency in 16.16 format */
+       ep->freqm = ep->freqn;
+@@ -949,6 +981,7 @@ int snd_usb_endpoint_start(struct snd_usb_endpoint *ep)
+       ep->active_mask = 0;
+       ep->unlink_mask = 0;
+       ep->phase = 0;
++      ep->sample_accum = 0;
+       snd_usb_endpoint_start_quirk(ep);
+diff --git a/sound/usb/endpoint.h b/sound/usb/endpoint.h
+index 63a39d4fa8d8e..d23fa0a8c11bf 100644
+--- a/sound/usb/endpoint.h
++++ b/sound/usb/endpoint.h
+@@ -28,6 +28,7 @@ void snd_usb_endpoint_release(struct snd_usb_endpoint *ep);
+ void snd_usb_endpoint_free(struct snd_usb_endpoint *ep);
+ int snd_usb_endpoint_implicit_feedback_sink(struct snd_usb_endpoint *ep);
++int snd_usb_endpoint_slave_next_packet_size(struct snd_usb_endpoint *ep);
+ int snd_usb_endpoint_next_packet_size(struct snd_usb_endpoint *ep);
+ void snd_usb_handle_sync_urb(struct snd_usb_endpoint *ep,
+diff --git a/sound/usb/pcm.c b/sound/usb/pcm.c
+index 8b91be394407a..42ae774f6db7a 100644
+--- a/sound/usb/pcm.c
++++ b/sound/usb/pcm.c
+@@ -1558,6 +1558,8 @@ static void prepare_playback_urb(struct snd_usb_substream *subs,
+       for (i = 0; i < ctx->packets; i++) {
+               if (ctx->packet_size[i])
+                       counts = ctx->packet_size[i];
++              else if (ep->sync_master)
++                      counts = snd_usb_endpoint_slave_next_packet_size(ep);
+               else
+                       counts = snd_usb_endpoint_next_packet_size(ep);
+-- 
+2.25.1
+
diff --git a/queue-4.19/apparmor-check-put-label-on-apparmor_sk_clone_securi.patch b/queue-4.19/apparmor-check-put-label-on-apparmor_sk_clone_securi.patch
new file mode 100644 (file)
index 0000000..051558b
--- /dev/null
@@ -0,0 +1,194 @@
+From 334f376c148534fee3f9f04dda8f4121283599cc Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Tue, 2 Jun 2020 18:15:16 -0300
+Subject: apparmor: check/put label on apparmor_sk_clone_security()
+
+From: Mauricio Faria de Oliveira <mfo@canonical.com>
+
+[ Upstream commit 3b646abc5bc6c0df649daea4c2c976bd4d47e4c8 ]
+
+Currently apparmor_sk_clone_security() does not check for existing
+label/peer in the 'new' struct sock; it just overwrites it, if any
+(with another reference to the label of the source sock.)
+
+    static void apparmor_sk_clone_security(const struct sock *sk,
+                                           struct sock *newsk)
+    {
+            struct aa_sk_ctx *ctx = SK_CTX(sk);
+            struct aa_sk_ctx *new = SK_CTX(newsk);
+
+            new->label = aa_get_label(ctx->label);
+            new->peer = aa_get_label(ctx->peer);
+    }
+
+This might leak label references, which might overflow under load.
+Thus, check for and put labels, to prevent such errors.
+
+Note this is similarly done on:
+
+    static int apparmor_socket_post_create(struct socket *sock, ...)
+    ...
+            if (sock->sk) {
+                    struct aa_sk_ctx *ctx = SK_CTX(sock->sk);
+
+                    aa_put_label(ctx->label);
+                    ctx->label = aa_get_label(label);
+            }
+    ...
+
+Context:
+-------
+
+The label reference count leak is observed if apparmor_sock_graft()
+is called previously: this sets the 'ctx->label' field by getting
+a reference to the current label (later overwritten, without put.)
+
+    static void apparmor_sock_graft(struct sock *sk, ...)
+    {
+            struct aa_sk_ctx *ctx = SK_CTX(sk);
+
+            if (!ctx->label)
+                    ctx->label = aa_get_current_label();
+    }
+
+And that is the case on crypto/af_alg.c:af_alg_accept():
+
+    int af_alg_accept(struct sock *sk, struct socket *newsock, ...)
+    ...
+            struct sock *sk2;
+            ...
+            sk2 = sk_alloc(...);
+            ...
+            security_sock_graft(sk2, newsock);
+            security_sk_clone(sk, sk2);
+    ...
+
+Apparently both calls are done on their own right, especially for
+other LSMs, being introduced in 2010/2014, before apparmor socket
+mediation in 2017 (see commits [1,2,3,4]).
+
+So, it looks OK there! Let's fix the reference leak in apparmor.
+
+Test-case:
+---------
+
+Exercise that code path enough to overflow label reference count.
+
+    $ cat aa-refcnt-af_alg.c
+    #include <stdio.h>
+    #include <string.h>
+    #include <unistd.h>
+    #include <sys/socket.h>
+    #include <linux/if_alg.h>
+
+    int main() {
+            int sockfd;
+            struct sockaddr_alg sa;
+
+            /* Setup the crypto API socket */
+            sockfd = socket(AF_ALG, SOCK_SEQPACKET, 0);
+            if (sockfd < 0) {
+                    perror("socket");
+                    return 1;
+            }
+
+            memset(&sa, 0, sizeof(sa));
+            sa.salg_family = AF_ALG;
+            strcpy((char *) sa.salg_type, "rng");
+            strcpy((char *) sa.salg_name, "stdrng");
+
+            if (bind(sockfd, (struct sockaddr *) &sa, sizeof(sa)) < 0) {
+                    perror("bind");
+                    return 1;
+            }
+
+            /* Accept a "connection" and close it; repeat. */
+            while (!close(accept(sockfd, NULL, 0)));
+
+            return 0;
+    }
+
+    $ gcc -o aa-refcnt-af_alg aa-refcnt-af_alg.c
+
+    $ ./aa-refcnt-af_alg
+    <a few hours later>
+
+    [ 9928.475953] refcount_t overflow at apparmor_sk_clone_security+0x37/0x70 in aa-refcnt-af_alg[1322], uid/euid: 1000/1000
+    ...
+    [ 9928.507443] RIP: 0010:apparmor_sk_clone_security+0x37/0x70
+    ...
+    [ 9928.514286]  security_sk_clone+0x33/0x50
+    [ 9928.514807]  af_alg_accept+0x81/0x1c0 [af_alg]
+    [ 9928.516091]  alg_accept+0x15/0x20 [af_alg]
+    [ 9928.516682]  SYSC_accept4+0xff/0x210
+    [ 9928.519609]  SyS_accept+0x10/0x20
+    [ 9928.520190]  do_syscall_64+0x73/0x130
+    [ 9928.520808]  entry_SYSCALL_64_after_hwframe+0x3d/0xa2
+
+Note that other messages may be seen, not just overflow, depending on
+the value being incremented by kref_get(); on another run:
+
+    [ 7273.182666] refcount_t: saturated; leaking memory.
+    ...
+    [ 7273.185789] refcount_t: underflow; use-after-free.
+
+Kprobes:
+-------
+
+Using kprobe events to monitor sk -> sk_security -> label -> count (kref):
+
+Original v5.7 (one reference leak every iteration)
+
+ ... (af_alg_accept+0x0/0x1c0) label=0xffff8a0f36c25eb0 label_refcnt=0x11fd2
+ ... (af_alg_release_parent+0x0/0xd0) label=0xffff8a0f36c25eb0 label_refcnt=0x11fd4
+ ... (af_alg_accept+0x0/0x1c0) label=0xffff8a0f36c25eb0 label_refcnt=0x11fd3
+ ... (af_alg_release_parent+0x0/0xd0) label=0xffff8a0f36c25eb0 label_refcnt=0x11fd5
+ ... (af_alg_accept+0x0/0x1c0) label=0xffff8a0f36c25eb0 label_refcnt=0x11fd4
+ ... (af_alg_release_parent+0x0/0xd0) label=0xffff8a0f36c25eb0 label_refcnt=0x11fd6
+
+Patched v5.7 (zero reference leak per iteration)
+
+ ... (af_alg_accept+0x0/0x1c0) label=0xffff9ff376c25eb0 label_refcnt=0x593
+ ... (af_alg_release_parent+0x0/0xd0) label=0xffff9ff376c25eb0 label_refcnt=0x594
+ ... (af_alg_accept+0x0/0x1c0) label=0xffff9ff376c25eb0 label_refcnt=0x593
+ ... (af_alg_release_parent+0x0/0xd0) label=0xffff9ff376c25eb0 label_refcnt=0x594
+ ... (af_alg_accept+0x0/0x1c0) label=0xffff9ff376c25eb0 label_refcnt=0x593
+ ... (af_alg_release_parent+0x0/0xd0) label=0xffff9ff376c25eb0 label_refcnt=0x594
+
+Commits:
+-------
+
+[1] commit 507cad355fc9 ("crypto: af_alg - Make sure sk_security is initialized on accept()ed sockets")
+[2] commit 4c63f83c2c2e ("crypto: af_alg - properly label AF_ALG socket")
+[3] commit 2acce6aa9f65 ("Networking") a.k.a ("crypto: af_alg - Avoid sock_graft call warning)
+[4] commit 56974a6fcfef ("apparmor: add base infastructure for socket mediation")
+
+Fixes: 56974a6fcfef ("apparmor: add base infastructure for socket mediation")
+Reported-by: Brian Moyles <bmoyles@netflix.com>
+Signed-off-by: Mauricio Faria de Oliveira <mfo@canonical.com>
+Signed-off-by: John Johansen <john.johansen@canonical.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ security/apparmor/lsm.c | 5 +++++
+ 1 file changed, 5 insertions(+)
+
+diff --git a/security/apparmor/lsm.c b/security/apparmor/lsm.c
+index 730de4638b4e2..5e32fe434140e 100644
+--- a/security/apparmor/lsm.c
++++ b/security/apparmor/lsm.c
+@@ -797,7 +797,12 @@ static void apparmor_sk_clone_security(const struct sock *sk,
+       struct aa_sk_ctx *ctx = SK_CTX(sk);
+       struct aa_sk_ctx *new = SK_CTX(newsk);
++      if (new->label)
++              aa_put_label(new->label);
+       new->label = aa_get_label(ctx->label);
++
++      if (new->peer)
++              aa_put_label(new->peer);
+       new->peer = aa_get_label(ctx->peer);
+ }
+-- 
+2.25.1
+
diff --git a/queue-4.19/apparmor-fix-introspection-of-of-task-mode-for-uncon.patch b/queue-4.19/apparmor-fix-introspection-of-of-task-mode-for-uncon.patch
new file mode 100644 (file)
index 0000000..5d1c9db
--- /dev/null
@@ -0,0 +1,63 @@
+From d650b6fbfd04e1750e12ada8cb59705807a7fea9 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Fri, 5 Jun 2020 18:12:21 -0700
+Subject: apparmor: fix introspection of of task mode for unconfined tasks
+
+From: John Johansen <john.johansen@canonical.com>
+
+[ Upstream commit dd2569fbb053719f7df7ef8fdbb45cf47156a701 ]
+
+Fix two issues with introspecting the task mode.
+
+1. If a task is attached to a unconfined profile that is not the
+   ns->unconfined profile then. Mode the mode is always reported
+   as -
+
+      $ ps -Z
+      LABEL                               PID TTY          TIME CMD
+      unconfined                         1287 pts/0    00:00:01 bash
+      test (-)                           1892 pts/0    00:00:00 ps
+
+   instead of the correct value of (unconfined) as shown below
+
+      $ ps -Z
+      LABEL                               PID TTY          TIME CMD
+      unconfined                         2483 pts/0    00:00:01 bash
+      test (unconfined)                  3591 pts/0    00:00:00 ps
+
+2. if a task is confined by a stack of profiles that are unconfined
+   the output of label mode is again the incorrect value of (-) like
+   above, instead of (unconfined). This is because the visibile
+   profile count increment is skipped by the special casing of
+   unconfined.
+
+Fixes: f1bd904175e8 ("apparmor: add the base fns() for domain labels")
+Signed-off-by: John Johansen <john.johansen@canonical.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ security/apparmor/label.c | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/security/apparmor/label.c b/security/apparmor/label.c
+index 2469549842d24..6e7aa2ef8ee0f 100644
+--- a/security/apparmor/label.c
++++ b/security/apparmor/label.c
+@@ -1535,13 +1535,13 @@ static const char *label_modename(struct aa_ns *ns, struct aa_label *label,
+       label_for_each(i, label, profile) {
+               if (aa_ns_visible(ns, profile->ns, flags & FLAG_VIEW_SUBNS)) {
+-                      if (profile->mode == APPARMOR_UNCONFINED)
++                      count++;
++                      if (profile == profile->ns->unconfined)
+                               /* special case unconfined so stacks with
+                                * unconfined don't report as mixed. ie.
+                                * profile_foo//&:ns1:unconfined (mixed)
+                                */
+                               continue;
+-                      count++;
+                       if (mode == -1)
+                               mode = profile->mode;
+                       else if (mode != profile->mode)
+-- 
+2.25.1
+
diff --git a/queue-4.19/apparmor-fix-nnp-subset-test-for-unconfined.patch b/queue-4.19/apparmor-fix-nnp-subset-test-for-unconfined.patch
new file mode 100644 (file)
index 0000000..4ddf8a1
--- /dev/null
@@ -0,0 +1,125 @@
+From c7d028b5577b738115806e392df45ab3fa1b744a Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Wed, 25 Sep 2019 08:02:48 -0700
+Subject: apparmor: fix nnp subset test for unconfined
+
+From: John Johansen <john.johansen@canonical.com>
+
+[ Upstream commit 3ed4aaa94fc07db3cd0c91be95e3e1b9782a2710 ]
+
+The subset test is not taking into account the unconfined exception
+which will cause profile transitions in the stacked confinement
+case to fail when no_new_privs is applied.
+
+This fixes a regression introduced in the fix for
+https://bugs.launchpad.net/bugs/1839037
+
+BugLink: https://bugs.launchpad.net/bugs/1844186
+Signed-off-by: John Johansen <john.johansen@canonical.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ security/apparmor/domain.c        |  9 +++++----
+ security/apparmor/include/label.h |  1 +
+ security/apparmor/label.c         | 33 +++++++++++++++++++++++++++++++
+ 3 files changed, 39 insertions(+), 4 deletions(-)
+
+diff --git a/security/apparmor/domain.c b/security/apparmor/domain.c
+index b9d5b3459705b..13b33490e0792 100644
+--- a/security/apparmor/domain.c
++++ b/security/apparmor/domain.c
+@@ -939,7 +939,8 @@ int apparmor_bprm_set_creds(struct linux_binprm *bprm)
+        * aways results in a further reduction of permissions.
+        */
+       if ((bprm->unsafe & LSM_UNSAFE_NO_NEW_PRIVS) &&
+-          !unconfined(label) && !aa_label_is_subset(new, ctx->nnp)) {
++          !unconfined(label) &&
++          !aa_label_is_unconfined_subset(new, ctx->nnp)) {
+               error = -EPERM;
+               info = "no new privs";
+               goto audit;
+@@ -1217,7 +1218,7 @@ int aa_change_hat(const char *hats[], int count, u64 token, int flags)
+                * reduce restrictions.
+                */
+               if (task_no_new_privs(current) && !unconfined(label) &&
+-                  !aa_label_is_subset(new, ctx->nnp)) {
++                  !aa_label_is_unconfined_subset(new, ctx->nnp)) {
+                       /* not an apparmor denial per se, so don't log it */
+                       AA_DEBUG("no_new_privs - change_hat denied");
+                       error = -EPERM;
+@@ -1238,7 +1239,7 @@ int aa_change_hat(const char *hats[], int count, u64 token, int flags)
+                * reduce restrictions.
+                */
+               if (task_no_new_privs(current) && !unconfined(label) &&
+-                  !aa_label_is_subset(previous, ctx->nnp)) {
++                  !aa_label_is_unconfined_subset(previous, ctx->nnp)) {
+                       /* not an apparmor denial per se, so don't log it */
+                       AA_DEBUG("no_new_privs - change_hat denied");
+                       error = -EPERM;
+@@ -1433,7 +1434,7 @@ check:
+                * reduce restrictions.
+                */
+               if (task_no_new_privs(current) && !unconfined(label) &&
+-                  !aa_label_is_subset(new, ctx->nnp)) {
++                  !aa_label_is_unconfined_subset(new, ctx->nnp)) {
+                       /* not an apparmor denial per se, so don't log it */
+                       AA_DEBUG("no_new_privs - change_hat denied");
+                       error = -EPERM;
+diff --git a/security/apparmor/include/label.h b/security/apparmor/include/label.h
+index 7ce5fe73ae7f5..cecbd3f5429c6 100644
+--- a/security/apparmor/include/label.h
++++ b/security/apparmor/include/label.h
+@@ -285,6 +285,7 @@ bool aa_label_init(struct aa_label *label, int size, gfp_t gfp);
+ struct aa_label *aa_label_alloc(int size, struct aa_proxy *proxy, gfp_t gfp);
+ bool aa_label_is_subset(struct aa_label *set, struct aa_label *sub);
++bool aa_label_is_unconfined_subset(struct aa_label *set, struct aa_label *sub);
+ struct aa_profile *__aa_label_next_not_in_set(struct label_it *I,
+                                            struct aa_label *set,
+                                            struct aa_label *sub);
+diff --git a/security/apparmor/label.c b/security/apparmor/label.c
+index 6e7aa2ef8ee0f..6727e6fb69df2 100644
+--- a/security/apparmor/label.c
++++ b/security/apparmor/label.c
+@@ -554,6 +554,39 @@ bool aa_label_is_subset(struct aa_label *set, struct aa_label *sub)
+       return __aa_label_next_not_in_set(&i, set, sub) == NULL;
+ }
++/**
++ * aa_label_is_unconfined_subset - test if @sub is a subset of @set
++ * @set: label to test against
++ * @sub: label to test if is subset of @set
++ *
++ * This checks for subset but taking into account unconfined. IF
++ * @sub contains an unconfined profile that does not have a matching
++ * unconfined in @set then this will not cause the test to fail.
++ * Conversely we don't care about an unconfined in @set that is not in
++ * @sub
++ *
++ * Returns: true if @sub is special_subset of @set
++ *     else false
++ */
++bool aa_label_is_unconfined_subset(struct aa_label *set, struct aa_label *sub)
++{
++      struct label_it i = { };
++      struct aa_profile *p;
++
++      AA_BUG(!set);
++      AA_BUG(!sub);
++
++      if (sub == set)
++              return true;
++
++      do {
++              p = __aa_label_next_not_in_set(&i, set, sub);
++              if (p && !profile_unconfined(p))
++                      break;
++      } while (p);
++
++      return p == NULL;
++}
+ /**
+-- 
+2.25.1
+
diff --git a/queue-4.19/arm-dts-meson-switch-existing-boards-with-rgmii-phy-.patch b/queue-4.19/arm-dts-meson-switch-existing-boards-with-rgmii-phy-.patch
new file mode 100644 (file)
index 0000000..2e573da
--- /dev/null
@@ -0,0 +1,72 @@
+From d8ab4d7f5e33de5a91ad6d2f97211b498b781f35 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Tue, 12 May 2020 23:51:48 +0200
+Subject: ARM: dts: meson: Switch existing boards with RGMII PHY to "rgmii-id"
+
+From: Martin Blumenstingl <martin.blumenstingl@googlemail.com>
+
+[ Upstream commit 005231128e9e97461e81fa32421957a7664317ca ]
+
+Let the PHY generate the RX and TX delay on the Odroid-C1 and MXIII
+Plus.
+
+Previously we did not know that these boards used an RX delay. We
+assumed that setting the TX delay on the MAC side It turns out that
+these boards also require an RX delay of 2ns (verified on Odroid-C1,
+but the u-boot code uses the same setup on both boards). Ethernet only
+worked because u-boot added this RX delay on the MAC side.
+
+The 4ns TX delay was also wrong and the result of using an unsupported
+RGMII TX clock divider setting. This has been fixed in the driver with
+commit bd6f48546b9cb7 ("net: stmmac: dwmac-meson8b: Fix the RGMII TX
+delay on Meson8b/8m2 SoCs").
+
+Switch to phy-mode "rgmii-id" to let the PHY side handle all the delays,
+(as recommended by the Ethernet maintainers anyways) to correctly
+describe the need for a 2ns RX as well as 2ns TX delay on these boards.
+This fixes the Ethernet performance on Odroid-C1 where there was a huge
+amount of packet loss when transmitting data due to the incorrect TX
+delay.
+
+Signed-off-by: Martin Blumenstingl <martin.blumenstingl@googlemail.com>
+Signed-off-by: Kevin Hilman <khilman@baylibre.com>
+Link: https://lore.kernel.org/r/20200512215148.540322-3-martin.blumenstingl@googlemail.com
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ arch/arm/boot/dts/meson8b-odroidc1.dts    | 3 +--
+ arch/arm/boot/dts/meson8m2-mxiii-plus.dts | 4 +---
+ 2 files changed, 2 insertions(+), 5 deletions(-)
+
+diff --git a/arch/arm/boot/dts/meson8b-odroidc1.dts b/arch/arm/boot/dts/meson8b-odroidc1.dts
+index 8fdeeffecbdbc..368b1dd57aec1 100644
+--- a/arch/arm/boot/dts/meson8b-odroidc1.dts
++++ b/arch/arm/boot/dts/meson8b-odroidc1.dts
+@@ -113,9 +113,8 @@
+       pinctrl-0 = <&eth_rgmii_pins>;
+       pinctrl-names = "default";
+-      phy-mode = "rgmii";
+       phy-handle = <&eth_phy>;
+-      amlogic,tx-delay-ns = <4>;
++      phy-mode = "rgmii-id";
+       mdio {
+               compatible = "snps,dwmac-mdio";
+diff --git a/arch/arm/boot/dts/meson8m2-mxiii-plus.dts b/arch/arm/boot/dts/meson8m2-mxiii-plus.dts
+index 6ac02beb5fa72..feac69264ba3b 100644
+--- a/arch/arm/boot/dts/meson8m2-mxiii-plus.dts
++++ b/arch/arm/boot/dts/meson8m2-mxiii-plus.dts
+@@ -63,9 +63,7 @@
+       pinctrl-names = "default";
+       phy-handle = <&eth_phy0>;
+-      phy-mode = "rgmii";
+-
+-      amlogic,tx-delay-ns = <4>;
++      phy-mode = "rgmii-id";
+       snps,reset-gpio = <&gpio GPIOH_4 0>;
+       snps,reset-delays-us = <0 10000 1000000>;
+-- 
+2.25.1
+
diff --git a/queue-4.19/arm-dts-sun8i-h2-plus-bananapi-m2-zero-fix-led-polar.patch b/queue-4.19/arm-dts-sun8i-h2-plus-bananapi-m2-zero-fix-led-polar.patch
new file mode 100644 (file)
index 0000000..9ce75bf
--- /dev/null
@@ -0,0 +1,43 @@
+From e246d72c0efa09363f247c29571e9857c767c438 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Sat, 11 Apr 2020 19:48:43 +0200
+Subject: ARM: dts: sun8i-h2-plus-bananapi-m2-zero: Fix led polarity
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+From: Vincent Stehlé <vincent.stehle@laposte.net>
+
+[ Upstream commit 34b6826df7462c541752cf8b1de2691b26d78ae0 ]
+
+The PWR-LED on the bananapi m2 zero board is on when gpio PL10 is low.
+This has been verified on a board and in the schematics [1].
+
+[1]: http://wiki.banana-pi.org/Banana_Pi_BPI-M2_ZERO#Documents
+
+Fixes: 8b8061fcbfae ("ARM: dts: sun8i: h2+: add support for Banana Pi M2 Zero board")
+Signed-off-by: Vincent Stehlé <vincent.stehle@laposte.net>
+Cc: Icenowy Zheng <icenowy@aosc.io>
+Cc: Maxime Ripard <mripard@kernel.org>
+Signed-off-by: Maxime Ripard <maxime@cerno.tech>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ arch/arm/boot/dts/sun8i-h2-plus-bananapi-m2-zero.dts | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/arch/arm/boot/dts/sun8i-h2-plus-bananapi-m2-zero.dts b/arch/arm/boot/dts/sun8i-h2-plus-bananapi-m2-zero.dts
+index 1db2541135a74..00e0d6940c304 100644
+--- a/arch/arm/boot/dts/sun8i-h2-plus-bananapi-m2-zero.dts
++++ b/arch/arm/boot/dts/sun8i-h2-plus-bananapi-m2-zero.dts
+@@ -32,7 +32,7 @@
+               pwr_led {
+                       label = "bananapi-m2-zero:red:pwr";
+-                      gpios = <&r_pio 0 10 GPIO_ACTIVE_HIGH>; /* PL10 */
++                      gpios = <&r_pio 0 10 GPIO_ACTIVE_LOW>; /* PL10 */
+                       default-state = "on";
+               };
+       };
+-- 
+2.25.1
+
diff --git a/queue-4.19/arm-integrator-add-some-kconfig-selections.patch b/queue-4.19/arm-integrator-add-some-kconfig-selections.patch
new file mode 100644 (file)
index 0000000..dc0931b
--- /dev/null
@@ -0,0 +1,61 @@
+From 608727b861fa1db5ab2eaa7a865e8d210dba4f95 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Thu, 13 Feb 2020 15:27:54 +0100
+Subject: ARM: integrator: Add some Kconfig selections
+
+From: Linus Walleij <linus.walleij@linaro.org>
+
+[ Upstream commit d2854bbe5f5c4b4bec8061caf4f2e603d8819446 ]
+
+The CMA and DMA_CMA Kconfig options need to be selected
+by the Integrator in order to produce boot console on some
+Integrator systems.
+
+The REGULATOR and REGULATOR_FIXED_VOLTAGE need to be
+selected in order to boot the system from an external
+MMC card when using MMCI/PL181 from the device tree
+probe path.
+
+Select these things directly from the Kconfig so we are
+sure to be able to bring the systems up with console
+from any device tree.
+
+Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ arch/arm/mach-integrator/Kconfig | 7 ++++---
+ 1 file changed, 4 insertions(+), 3 deletions(-)
+
+diff --git a/arch/arm/mach-integrator/Kconfig b/arch/arm/mach-integrator/Kconfig
+index cefe44f6889bd..ba124f8704fac 100644
+--- a/arch/arm/mach-integrator/Kconfig
++++ b/arch/arm/mach-integrator/Kconfig
+@@ -3,6 +3,8 @@ menuconfig ARCH_INTEGRATOR
+       depends on ARCH_MULTI_V4T || ARCH_MULTI_V5 || ARCH_MULTI_V6
+       select ARM_AMBA
+       select COMMON_CLK_VERSATILE
++      select CMA
++      select DMA_CMA
+       select HAVE_TCM
+       select ICST
+       select MFD_SYSCON
+@@ -34,14 +36,13 @@ config INTEGRATOR_IMPD1
+       select ARM_VIC
+       select GPIO_PL061
+       select GPIOLIB
++      select REGULATOR
++      select REGULATOR_FIXED_VOLTAGE
+       help
+         The IM-PD1 is an add-on logic module for the Integrator which
+         allows ARM(R) Ltd PrimeCells to be developed and evaluated.
+         The IM-PD1 can be found on the Integrator/PP2 platform.
+-        To compile this driver as a module, choose M here: the
+-        module will be called impd1.
+-
+ config INTEGRATOR_CM7TDMI
+       bool "Integrator/CM7TDMI core module"
+       depends on ARCH_INTEGRATOR_AP
+-- 
+2.25.1
+
diff --git a/queue-4.19/arm64-dts-mt8173-fix-unit-name-warnings.patch b/queue-4.19/arm64-dts-mt8173-fix-unit-name-warnings.patch
new file mode 100644 (file)
index 0000000..a398d36
--- /dev/null
@@ -0,0 +1,129 @@
+From 159c5431a72fba4e59464fb4e002d896f96a5407 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Mon, 10 Feb 2020 14:35:22 +0800
+Subject: arm64: dts: mt8173: fix unit name warnings
+
+From: Hsin-Yi Wang <hsinyi@chromium.org>
+
+[ Upstream commit 72b29215aced394d01ca25e432963b619daa0098 ]
+
+Fixing several unit name warnings:
+
+Warning (unit_address_vs_reg): /oscillator@0: node has a unit name, but no reg property
+Warning (unit_address_vs_reg): /oscillator@1: node has a unit name, but no reg property
+Warning (unit_address_vs_reg): /oscillator@2: node has a unit name, but no reg property
+Warning (unit_address_vs_reg): /thermal-zones/cpu_thermal/trips/trip-point@0: node has a unit name, but no reg property
+Warning (unit_address_vs_reg): /thermal-zones/cpu_thermal/trips/trip-point@1: node has a unit name, but no reg property
+Warning (unit_address_vs_reg): /thermal-zones/cpu_thermal/trips/cpu_crit@0: node has a unit name, but no reg property
+Warning (unit_address_vs_reg): /thermal-zones/cpu_thermal/cooling-maps/map@0: node has a unit name, but no reg property
+Warning (unit_address_vs_reg): /thermal-zones/cpu_thermal/cooling-maps/map@1: node has a unit name, but no reg property
+Warning (unit_address_vs_reg): /reserved-memory/vpu_dma_mem_region: node has a reg or ranges property, but no unit name
+Warning (simple_bus_reg): /soc/pinctrl@10005000: simple-bus unit address format error, expected "1000b000"
+Warning (simple_bus_reg): /soc/interrupt-controller@10220000: simple-bus unit address format error, expected "10221000"
+
+Signed-off-by: Hsin-Yi Wang <hsinyi@chromium.org>
+Link: https://lore.kernel.org/r/20200210063523.133333-4-hsinyi@chromium.org
+[mb: drop fixes for '_' in property name]
+Signed-off-by: Matthias Brugger <matthias.bgg@gmail.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ arch/arm64/boot/dts/mediatek/mt8173.dtsi | 22 +++++++++++-----------
+ 1 file changed, 11 insertions(+), 11 deletions(-)
+
+diff --git a/arch/arm64/boot/dts/mediatek/mt8173.dtsi b/arch/arm64/boot/dts/mediatek/mt8173.dtsi
+index abd2f15a544b2..bd9fc50ac1540 100644
+--- a/arch/arm64/boot/dts/mediatek/mt8173.dtsi
++++ b/arch/arm64/boot/dts/mediatek/mt8173.dtsi
+@@ -223,21 +223,21 @@
+               cpu_on        = <0x84000003>;
+       };
+-      clk26m: oscillator@0 {
++      clk26m: oscillator0 {
+               compatible = "fixed-clock";
+               #clock-cells = <0>;
+               clock-frequency = <26000000>;
+               clock-output-names = "clk26m";
+       };
+-      clk32k: oscillator@1 {
++      clk32k: oscillator1 {
+               compatible = "fixed-clock";
+               #clock-cells = <0>;
+               clock-frequency = <32000>;
+               clock-output-names = "clk32k";
+       };
+-      cpum_ck: oscillator@2 {
++      cpum_ck: oscillator2 {
+               compatible = "fixed-clock";
+               #clock-cells = <0>;
+               clock-frequency = <0>;
+@@ -253,19 +253,19 @@
+                       sustainable-power = <1500>; /* milliwatts */
+                       trips {
+-                              threshold: trip-point@0 {
++                              threshold: trip-point0 {
+                                       temperature = <68000>;
+                                       hysteresis = <2000>;
+                                       type = "passive";
+                               };
+-                              target: trip-point@1 {
++                              target: trip-point1 {
+                                       temperature = <85000>;
+                                       hysteresis = <2000>;
+                                       type = "passive";
+                               };
+-                              cpu_crit: cpu_crit@0 {
++                              cpu_crit: cpu_crit0 {
+                                       temperature = <115000>;
+                                       hysteresis = <2000>;
+                                       type = "critical";
+@@ -273,12 +273,12 @@
+                       };
+                       cooling-maps {
+-                              map@0 {
++                              map0 {
+                                       trip = <&target>;
+                                       cooling-device = <&cpu0 0 0>;
+                                       contribution = <3072>;
+                               };
+-                              map@1 {
++                              map1 {
+                                       trip = <&target>;
+                                       cooling-device = <&cpu2 0 0>;
+                                       contribution = <1024>;
+@@ -291,7 +291,7 @@
+               #address-cells = <2>;
+               #size-cells = <2>;
+               ranges;
+-              vpu_dma_reserved: vpu_dma_mem_region {
++              vpu_dma_reserved: vpu_dma_mem_region@b7000000 {
+                       compatible = "shared-dma-pool";
+                       reg = <0 0xb7000000 0 0x500000>;
+                       alignment = <0x1000>;
+@@ -343,7 +343,7 @@
+                       reg = <0 0x10005000 0 0x1000>;
+               };
+-              pio: pinctrl@10005000 {
++              pio: pinctrl@1000b000 {
+                       compatible = "mediatek,mt8173-pinctrl";
+                       reg = <0 0x1000b000 0 0x1000>;
+                       mediatek,pctl-regmap = <&syscfg_pctl_a>;
+@@ -541,7 +541,7 @@
+                       status = "disabled";
+               };
+-              gic: interrupt-controller@10220000 {
++              gic: interrupt-controller@10221000 {
+                       compatible = "arm,gic-400";
+                       #interrupt-cells = <3>;
+                       interrupt-parent = <&gic>;
+-- 
+2.25.1
+
diff --git a/queue-4.19/arm64-hw_breakpoint-don-t-invoke-overflow-handler-on.patch b/queue-4.19/arm64-hw_breakpoint-don-t-invoke-overflow-handler-on.patch
new file mode 100644 (file)
index 0000000..2f8e1da
--- /dev/null
@@ -0,0 +1,109 @@
+From 5c8ddaaa2fda76dd3ca6eb37ff0c0778244261e0 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Fri, 29 May 2020 14:12:18 +0100
+Subject: arm64: hw_breakpoint: Don't invoke overflow handler on uaccess
+ watchpoints
+
+From: Will Deacon <will@kernel.org>
+
+[ Upstream commit 24ebec25fb270100e252b19c288e21bd7d8cc7f7 ]
+
+Unprivileged memory accesses generated by the so-called "translated"
+instructions (e.g. STTR) at EL1 can cause EL0 watchpoints to fire
+unexpectedly if kernel debugging is enabled. In such cases, the
+hw_breakpoint logic will invoke the user overflow handler which will
+typically raise a SIGTRAP back to the current task. This is futile when
+returning back to the kernel because (a) the signal won't have been
+delivered and (b) userspace can't handle the thing anyway.
+
+Avoid invoking the user overflow handler for watchpoints triggered by
+kernel uaccess routines, and instead single-step over the faulting
+instruction as we would if no overflow handler had been installed.
+
+(Fixes tag identifies the introduction of unprivileged memory accesses,
+ which exposed this latent bug in the hw_breakpoint code)
+
+Cc: Catalin Marinas <catalin.marinas@arm.com>
+Cc: James Morse <james.morse@arm.com>
+Fixes: 57f4959bad0a ("arm64: kernel: Add support for User Access Override")
+Reported-by: Luis Machado <luis.machado@linaro.org>
+Signed-off-by: Will Deacon <will@kernel.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ arch/arm64/kernel/hw_breakpoint.c | 44 ++++++++++++++++++-------------
+ 1 file changed, 26 insertions(+), 18 deletions(-)
+
+diff --git a/arch/arm64/kernel/hw_breakpoint.c b/arch/arm64/kernel/hw_breakpoint.c
+index 7c0611f5d2ce7..9f105fe58595d 100644
+--- a/arch/arm64/kernel/hw_breakpoint.c
++++ b/arch/arm64/kernel/hw_breakpoint.c
+@@ -737,6 +737,27 @@ static u64 get_distance_from_watchpoint(unsigned long addr, u64 val,
+               return 0;
+ }
++static int watchpoint_report(struct perf_event *wp, unsigned long addr,
++                           struct pt_regs *regs)
++{
++      int step = is_default_overflow_handler(wp);
++      struct arch_hw_breakpoint *info = counter_arch_bp(wp);
++
++      info->trigger = addr;
++
++      /*
++       * If we triggered a user watchpoint from a uaccess routine, then
++       * handle the stepping ourselves since userspace really can't help
++       * us with this.
++       */
++      if (!user_mode(regs) && info->ctrl.privilege == AARCH64_BREAKPOINT_EL0)
++              step = 1;
++      else
++              perf_bp_event(wp, regs);
++
++      return step;
++}
++
+ static int watchpoint_handler(unsigned long addr, unsigned int esr,
+                             struct pt_regs *regs)
+ {
+@@ -746,7 +767,6 @@ static int watchpoint_handler(unsigned long addr, unsigned int esr,
+       u64 val;
+       struct perf_event *wp, **slots;
+       struct debug_info *debug_info;
+-      struct arch_hw_breakpoint *info;
+       struct arch_hw_breakpoint_ctrl ctrl;
+       slots = this_cpu_ptr(wp_on_reg);
+@@ -784,25 +804,13 @@ static int watchpoint_handler(unsigned long addr, unsigned int esr,
+               if (dist != 0)
+                       continue;
+-              info = counter_arch_bp(wp);
+-              info->trigger = addr;
+-              perf_bp_event(wp, regs);
+-
+-              /* Do we need to handle the stepping? */
+-              if (is_default_overflow_handler(wp))
+-                      step = 1;
++              step = watchpoint_report(wp, addr, regs);
+       }
+-      if (min_dist > 0 && min_dist != -1) {
+-              /* No exact match found. */
+-              wp = slots[closest_match];
+-              info = counter_arch_bp(wp);
+-              info->trigger = addr;
+-              perf_bp_event(wp, regs);
+-              /* Do we need to handle the stepping? */
+-              if (is_default_overflow_handler(wp))
+-                      step = 1;
+-      }
++      /* No exact match found? */
++      if (min_dist > 0 && min_dist != -1)
++              step = watchpoint_report(slots[closest_match], addr, regs);
++
+       rcu_read_unlock();
+       if (!step)
+-- 
+2.25.1
+
diff --git a/queue-4.19/arm64-tegra-fix-ethernet-phy-mode-for-jetson-xavier.patch b/queue-4.19/arm64-tegra-fix-ethernet-phy-mode-for-jetson-xavier.patch
new file mode 100644 (file)
index 0000000..b289538
--- /dev/null
@@ -0,0 +1,44 @@
+From 59e507aa8153ece7a46d7cb808f6ef76b010d52a Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Fri, 1 May 2020 08:27:56 +0100
+Subject: arm64: tegra: Fix ethernet phy-mode for Jetson Xavier
+
+From: Jon Hunter <jonathanh@nvidia.com>
+
+[ Upstream commit bba25915b172c72f6fa635f091624d799e3c9cae ]
+
+The 'phy-mode' property is currently defined as 'rgmii' for Jetson
+Xavier. This indicates that the RGMII RX and TX delays are set by the
+MAC and the internal delays set by the PHY are not used.
+
+If the Marvell PHY driver is enabled, such that it is used and not the
+generic PHY, ethernet failures are seen (DHCP is failing to obtain an
+IP address) and this is caused because the Marvell PHY driver is
+disabling the internal RX and TX delays. For Jetson Xavier the internal
+PHY RX and TX delay should be used and so fix this by setting the
+'phy-mode' to 'rgmii-id' and not 'rgmii'.
+
+Fixes: f89b58ce71a9 ("arm64: tegra: Add ethernet controller on Tegra194")
+Signed-off-by: Jon Hunter <jonathanh@nvidia.com>
+Signed-off-by: Thierry Reding <treding@nvidia.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ arch/arm64/boot/dts/nvidia/tegra194-p2888.dtsi | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/arch/arm64/boot/dts/nvidia/tegra194-p2888.dtsi b/arch/arm64/boot/dts/nvidia/tegra194-p2888.dtsi
+index 57d3f00464cea..7352954e12be2 100644
+--- a/arch/arm64/boot/dts/nvidia/tegra194-p2888.dtsi
++++ b/arch/arm64/boot/dts/nvidia/tegra194-p2888.dtsi
+@@ -32,7 +32,7 @@
+                       phy-reset-gpios = <&gpio TEGRA194_MAIN_GPIO(G, 5) GPIO_ACTIVE_LOW>;
+                       phy-handle = <&phy>;
+-                      phy-mode = "rgmii";
++                      phy-mode = "rgmii-id";
+                       mdio {
+                               #address-cells = <1>;
+-- 
+2.25.1
+
diff --git a/queue-4.19/asoc-core-only-convert-non-dpcm-link-to-dpcm-link.patch b/queue-4.19/asoc-core-only-convert-non-dpcm-link-to-dpcm-link.patch
new file mode 100644 (file)
index 0000000..85ce93b
--- /dev/null
@@ -0,0 +1,72 @@
+From 3d5a7df377664cbb76fd9cf3e4d4600c71f5fb42 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Mon, 8 Jun 2020 14:44:13 -0500
+Subject: ASoC: core: only convert non DPCM link to DPCM link
+
+From: Bard Liao <yung-chuan.liao@linux.intel.com>
+
+[ Upstream commit 607fa205a7e4dfad28b8a67ab1c985756ddbccb0 ]
+
+Additional checks for valid DAIs expose a corner case, where existing
+BE dailinks get modified, e.g. HDMI links are tagged with
+dpcm_capture=1 even if the DAIs are for playback.
+
+This patch makes those changes conditional and flags configuration
+issues when a BE dailink is has no_pcm=0 but dpcm_playback or
+dpcm_capture=1 (which makes no sense).
+
+As discussed on the alsa-devel mailing list, there are redundant flags
+for dpcm_playback, dpcm_capture, playback_only, capture_only. This
+will have to be cleaned-up in a future update. For now only correct
+and flag problematic configurations.
+
+Fixes: 218fe9b7ec7f3 ("ASoC: soc-core: Set dpcm_playback / dpcm_capture")
+Suggested-by: Daniel Baluta <daniel.baluta@nxp.com>
+Signed-off-by: Bard Liao <yung-chuan.liao@linux.intel.com>
+Signed-off-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
+Reviewed-by: Guennadi Liakhovetski <guennadi.liakhovetski@linux.intel.com>
+Reviewed-by: Daniel Baluta <daniel.baluta@gmail.com>
+Reviewed-by: Bard Liao <yung-chuan.liao@linux.intel.com>
+Link: https://lore.kernel.org/r/20200608194415.4663-3-pierre-louis.bossart@linux.intel.com
+Signed-off-by: Mark Brown <broonie@kernel.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ sound/soc/soc-core.c | 22 +++++++++++++++++++---
+ 1 file changed, 19 insertions(+), 3 deletions(-)
+
+diff --git a/sound/soc/soc-core.c b/sound/soc/soc-core.c
+index e45dfcb62b6af..595fe20bbc6d3 100644
+--- a/sound/soc/soc-core.c
++++ b/sound/soc/soc-core.c
+@@ -1920,9 +1920,25 @@ static void soc_check_tplg_fes(struct snd_soc_card *card)
+                       dai_link->platform_name = component->name;
+                       /* convert non BE into BE */
+-                      dai_link->no_pcm = 1;
+-                      dai_link->dpcm_playback = 1;
+-                      dai_link->dpcm_capture = 1;
++                      if (!dai_link->no_pcm) {
++                              dai_link->no_pcm = 1;
++
++                              if (dai_link->dpcm_playback)
++                                      dev_warn(card->dev,
++                                               "invalid configuration, dailink %s has flags no_pcm=0 and dpcm_playback=1\n",
++                                               dai_link->name);
++                              if (dai_link->dpcm_capture)
++                                      dev_warn(card->dev,
++                                               "invalid configuration, dailink %s has flags no_pcm=0 and dpcm_capture=1\n",
++                                               dai_link->name);
++
++                              /* convert normal link into DPCM one */
++                              if (!(dai_link->dpcm_playback ||
++                                    dai_link->dpcm_capture)) {
++                                      dai_link->dpcm_playback = !dai_link->capture_only;
++                                      dai_link->dpcm_capture = !dai_link->playback_only;
++                              }
++                      }
+                       /* override any BE fixups */
+                       dai_link->be_hw_params_fixup =
+-- 
+2.25.1
+
diff --git a/queue-4.19/asoc-davinci-mcasp-fix-dma_chan-refcnt-leak-when-get.patch b/queue-4.19/asoc-davinci-mcasp-fix-dma_chan-refcnt-leak-when-get.patch
new file mode 100644 (file)
index 0000000..38f7a71
--- /dev/null
@@ -0,0 +1,53 @@
+From fa29d98d039f9df004760930da2802e78f0401e6 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Sat, 25 Apr 2020 20:48:35 +0800
+Subject: ASoC: davinci-mcasp: Fix dma_chan refcnt leak when getting dma type
+
+From: Xiyu Yang <xiyuyang19@fudan.edu.cn>
+
+[ Upstream commit a697ae6ea56e23397341b027098c1b11d9ab13da ]
+
+davinci_mcasp_get_dma_type() invokes dma_request_chan(), which returns a
+reference of the specified dma_chan object to "chan" with increased
+refcnt.
+
+When davinci_mcasp_get_dma_type() returns, local variable "chan" becomes
+invalid, so the refcount should be decreased to keep refcount balanced.
+
+The reference counting issue happens in one exception handling path of
+davinci_mcasp_get_dma_type(). When chan device is NULL, the function
+forgets to decrease the refcnt increased by dma_request_chan(), causing
+a refcnt leak.
+
+Fix this issue by calling dma_release_channel() when chan device is
+NULL.
+
+Signed-off-by: Xiyu Yang <xiyuyang19@fudan.edu.cn>
+Signed-off-by: Xin Tan <tanxin.ctf@gmail.com>
+Acked-by: Peter Ujfalusi <peter.ujfalusi@ti.com>
+Link: https://lore.kernel.org/r/1587818916-38730-1-git-send-email-xiyuyang19@fudan.edu.cn
+Signed-off-by: Mark Brown <broonie@kernel.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ sound/soc/davinci/davinci-mcasp.c | 4 +++-
+ 1 file changed, 3 insertions(+), 1 deletion(-)
+
+diff --git a/sound/soc/davinci/davinci-mcasp.c b/sound/soc/davinci/davinci-mcasp.c
+index 14ab16e1369f8..1203de8aab990 100644
+--- a/sound/soc/davinci/davinci-mcasp.c
++++ b/sound/soc/davinci/davinci-mcasp.c
+@@ -1758,8 +1758,10 @@ static int davinci_mcasp_get_dma_type(struct davinci_mcasp *mcasp)
+                               PTR_ERR(chan));
+               return PTR_ERR(chan);
+       }
+-      if (WARN_ON(!chan->device || !chan->device->dev))
++      if (WARN_ON(!chan->device || !chan->device->dev)) {
++              dma_release_channel(chan);
+               return -EINVAL;
++      }
+       if (chan->device->dev->of_node)
+               ret = of_property_read_string(chan->device->dev->of_node,
+-- 
+2.25.1
+
diff --git a/queue-4.19/asoc-fix-incomplete-error-handling-in-img_i2s_in_pro.patch b/queue-4.19/asoc-fix-incomplete-error-handling-in-img_i2s_in_pro.patch
new file mode 100644 (file)
index 0000000..80729aa
--- /dev/null
@@ -0,0 +1,37 @@
+From bd79dca694d01c0b12cdac9bb2eb04a8efc59c90 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Mon, 25 May 2020 00:50:11 -0500
+Subject: ASoC: fix incomplete error-handling in img_i2s_in_probe.
+
+From: Qiushi Wu <wu000273@umn.edu>
+
+[ Upstream commit 25bf943e4e7b47282bd86ae7d39e039217ebb007 ]
+
+Function "pm_runtime_get_sync()" is not handled by "pm_runtime_put()"
+if "PTR_ERR(rst) == -EPROBE_DEFER". Fix this issue by adding
+"pm_runtime_put()" into this error path.
+
+Fixes: f65bb92ca12e ("ASoC: img-i2s-in: Add runtime PM")
+Signed-off-by: Qiushi Wu <wu000273@umn.edu>
+Link: https://lore.kernel.org/r/20200525055011.31925-1-wu000273@umn.edu
+Signed-off-by: Mark Brown <broonie@kernel.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ sound/soc/img/img-i2s-in.c | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/sound/soc/img/img-i2s-in.c b/sound/soc/img/img-i2s-in.c
+index 388cefd7340ab..c22880aea82a2 100644
+--- a/sound/soc/img/img-i2s-in.c
++++ b/sound/soc/img/img-i2s-in.c
+@@ -485,6 +485,7 @@ static int img_i2s_in_probe(struct platform_device *pdev)
+       if (IS_ERR(rst)) {
+               if (PTR_ERR(rst) == -EPROBE_DEFER) {
+                       ret = -EPROBE_DEFER;
++                      pm_runtime_put(&pdev->dev);
+                       goto err_suspend;
+               }
+-- 
+2.25.1
+
diff --git a/queue-4.19/asoc-fsl_asrc_dma-fix-dma_chan-leak-when-config-dma-.patch b/queue-4.19/asoc-fsl_asrc_dma-fix-dma_chan-leak-when-config-dma-.patch
new file mode 100644 (file)
index 0000000..93ea9e7
--- /dev/null
@@ -0,0 +1,46 @@
+From 62b06f5b99f151aec7f041c33609727d4285fad5 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Mon, 25 May 2020 22:12:46 +0800
+Subject: ASoC: fsl_asrc_dma: Fix dma_chan leak when config DMA channel failed
+
+From: Xiyu Yang <xiyuyang19@fudan.edu.cn>
+
+[ Upstream commit 36124fb19f1ae68a500cd76a76d40c6e81bee346 ]
+
+fsl_asrc_dma_hw_params() invokes dma_request_channel() or
+fsl_asrc_get_dma_channel(), which returns a reference of the specified
+dma_chan object to "pair->dma_chan[dir]" with increased refcnt.
+
+The reference counting issue happens in one exception handling path of
+fsl_asrc_dma_hw_params(). When config DMA channel failed for Back-End,
+the function forgets to decrease the refcnt increased by
+dma_request_channel() or fsl_asrc_get_dma_channel(), causing a refcnt
+leak.
+
+Fix this issue by calling dma_release_channel() when config DMA channel
+failed.
+
+Signed-off-by: Xiyu Yang <xiyuyang19@fudan.edu.cn>
+Signed-off-by: Xin Tan <tanxin.ctf@gmail.com>
+Link: https://lore.kernel.org/r/1590415966-52416-1-git-send-email-xiyuyang19@fudan.edu.cn
+Signed-off-by: Mark Brown <broonie@kernel.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ sound/soc/fsl/fsl_asrc_dma.c | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/sound/soc/fsl/fsl_asrc_dma.c b/sound/soc/fsl/fsl_asrc_dma.c
+index 1033ac6631b08..b9ac448989ed9 100644
+--- a/sound/soc/fsl/fsl_asrc_dma.c
++++ b/sound/soc/fsl/fsl_asrc_dma.c
+@@ -241,6 +241,7 @@ static int fsl_asrc_dma_hw_params(struct snd_pcm_substream *substream,
+       ret = dmaengine_slave_config(pair->dma_chan[dir], &config_be);
+       if (ret) {
+               dev_err(dev, "failed to config DMA channel for Back-End\n");
++              dma_release_channel(pair->dma_chan[dir]);
+               return ret;
+       }
+-- 
+2.25.1
+
diff --git a/queue-4.19/asoc-intel-bytcr_rt5640-add-quirk-for-toshiba-encore.patch b/queue-4.19/asoc-intel-bytcr_rt5640-add-quirk-for-toshiba-encore.patch
new file mode 100644 (file)
index 0000000..4412931
--- /dev/null
@@ -0,0 +1,52 @@
+From 9c95c599dd0aed13d6c2c12caad99e93c9e458c8 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Mon, 18 May 2020 09:24:16 +0200
+Subject: ASoC: Intel: bytcr_rt5640: Add quirk for Toshiba Encore WT8-A tablet
+
+From: Hans de Goede <hdegoede@redhat.com>
+
+[ Upstream commit 0e0e10fde0e9808d1991268f5dca69fb36c025f7 ]
+
+The Toshiba Encore WT8-A tablet almost fully works with the default
+settings for non-CR Bay Trail devices. The only problem is that its
+jack-detect switch is not inverted (it is active high instead of
+the normal active low).
+
+Add a quirk for this model using the default settings +
+BYT_RT5640_JD_NOT_INV.
+
+Signed-off-by: Hans de Goede <hdegoede@redhat.com>
+Acked-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
+Link: https://lore.kernel.org/r/20200518072416.5348-1-hdegoede@redhat.com
+Signed-off-by: Mark Brown <broonie@kernel.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ sound/soc/intel/boards/bytcr_rt5640.c | 12 ++++++++++++
+ 1 file changed, 12 insertions(+)
+
+diff --git a/sound/soc/intel/boards/bytcr_rt5640.c b/sound/soc/intel/boards/bytcr_rt5640.c
+index f29014a7d6723..5dfc17987b2b9 100644
+--- a/sound/soc/intel/boards/bytcr_rt5640.c
++++ b/sound/soc/intel/boards/bytcr_rt5640.c
+@@ -712,6 +712,18 @@ static const struct dmi_system_id byt_rt5640_quirk_table[] = {
+                                       BYT_RT5640_SSP0_AIF1 |
+                                       BYT_RT5640_MCLK_EN),
+       },
++      {       /* Toshiba Encore WT8-A */
++              .matches = {
++                      DMI_EXACT_MATCH(DMI_SYS_VENDOR, "TOSHIBA"),
++                      DMI_EXACT_MATCH(DMI_PRODUCT_NAME, "TOSHIBA WT8-A"),
++              },
++              .driver_data = (void *)(BYT_RT5640_DMIC1_MAP |
++                                      BYT_RT5640_JD_SRC_JD2_IN4N |
++                                      BYT_RT5640_OVCD_TH_2000UA |
++                                      BYT_RT5640_OVCD_SF_0P75 |
++                                      BYT_RT5640_JD_NOT_INV |
++                                      BYT_RT5640_MCLK_EN),
++      },
+       {       /* Catch-all for generic Insyde tablets, must be last */
+               .matches = {
+                       DMI_MATCH(DMI_SYS_VENDOR, "Insyde"),
+-- 
+2.25.1
+
diff --git a/queue-4.19/asoc-intel-bytcr_rt5640-add-quirk-for-toshiba-encore.patch-26105 b/queue-4.19/asoc-intel-bytcr_rt5640-add-quirk-for-toshiba-encore.patch-26105
new file mode 100644 (file)
index 0000000..723a12d
--- /dev/null
@@ -0,0 +1,51 @@
+From 85e4acba930c7bed72dcecd0bbb6fd18a68d4911 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Mon, 8 Jun 2020 22:46:33 +0200
+Subject: ASoC: Intel: bytcr_rt5640: Add quirk for Toshiba Encore WT10-A tablet
+
+From: Hans de Goede <hdegoede@redhat.com>
+
+[ Upstream commit 199a5e8fda54ab3c8c6f6bf980c004e97ebf5ccb ]
+
+The Toshiba Encore WT10-A tablet almost fully works with the default
+settings for Bay Trail CR devices. The only issue is that it uses a
+digital mic. connected the the DMIC1 input instead of an analog mic.
+
+Add a quirk for this model using the default settings with the input-map
+replaced with BYT_RT5640_DMIC1_MAP.
+
+Signed-off-by: Hans de Goede <hdegoede@redhat.com>
+Acked-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
+Link: https://lore.kernel.org/r/20200608204634.93407-1-hdegoede@redhat.com
+Signed-off-by: Mark Brown <broonie@kernel.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ sound/soc/intel/boards/bytcr_rt5640.c | 12 ++++++++++++
+ 1 file changed, 12 insertions(+)
+
+diff --git a/sound/soc/intel/boards/bytcr_rt5640.c b/sound/soc/intel/boards/bytcr_rt5640.c
+index 5dfc17987b2b9..0dcd249877c55 100644
+--- a/sound/soc/intel/boards/bytcr_rt5640.c
++++ b/sound/soc/intel/boards/bytcr_rt5640.c
+@@ -724,6 +724,18 @@ static const struct dmi_system_id byt_rt5640_quirk_table[] = {
+                                       BYT_RT5640_JD_NOT_INV |
+                                       BYT_RT5640_MCLK_EN),
+       },
++      {       /* Toshiba Encore WT10-A */
++              .matches = {
++                      DMI_EXACT_MATCH(DMI_SYS_VENDOR, "TOSHIBA"),
++                      DMI_EXACT_MATCH(DMI_PRODUCT_NAME, "TOSHIBA WT10-A-103"),
++              },
++              .driver_data = (void *)(BYT_RT5640_DMIC1_MAP |
++                                      BYT_RT5640_JD_SRC_JD1_IN4P |
++                                      BYT_RT5640_OVCD_TH_2000UA |
++                                      BYT_RT5640_OVCD_SF_0P75 |
++                                      BYT_RT5640_SSP0_AIF2 |
++                                      BYT_RT5640_MCLK_EN),
++      },
+       {       /* Catch-all for generic Insyde tablets, must be last */
+               .matches = {
+                       DMI_MATCH(DMI_SYS_VENDOR, "Insyde"),
+-- 
+2.25.1
+
diff --git a/queue-4.19/asoc-meson-add-missing-free_irq-in-error-path.patch b/queue-4.19/asoc-meson-add-missing-free_irq-in-error-path.patch
new file mode 100644 (file)
index 0000000..ea75487
--- /dev/null
@@ -0,0 +1,53 @@
+From 4f664a0589a22f075434a3625c26b46456cccc6f Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Sat, 6 Jun 2020 17:31:03 +0200
+Subject: ASoC: meson: add missing free_irq() in error path
+
+From: Pavel Machek (CIP) <pavel@denx.de>
+
+[ Upstream commit 3b8a299a58b2afce464ae11324b59dcf0f1d10a7 ]
+
+free_irq() is missing in case of error, fix that.
+
+Signed-off-by: Pavel Machek (CIP) <pavel@denx.de>
+Reviewed-by: Jerome Brunet <jbrunet@baylibre.com>
+
+Link: https://lore.kernel.org/r/20200606153103.GA17905@amd
+Signed-off-by: Mark Brown <broonie@kernel.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ sound/soc/meson/axg-fifo.c | 10 ++++++++--
+ 1 file changed, 8 insertions(+), 2 deletions(-)
+
+diff --git a/sound/soc/meson/axg-fifo.c b/sound/soc/meson/axg-fifo.c
+index 0e4f65e654c4b..b229c182b7c3d 100644
+--- a/sound/soc/meson/axg-fifo.c
++++ b/sound/soc/meson/axg-fifo.c
+@@ -209,7 +209,7 @@ static int axg_fifo_pcm_open(struct snd_pcm_substream *ss)
+       /* Enable pclk to access registers and clock the fifo ip */
+       ret = clk_prepare_enable(fifo->pclk);
+       if (ret)
+-              return ret;
++              goto free_irq;
+       /* Setup status2 so it reports the memory pointer */
+       regmap_update_bits(fifo->map, FIFO_CTRL1,
+@@ -229,8 +229,14 @@ static int axg_fifo_pcm_open(struct snd_pcm_substream *ss)
+       /* Take memory arbitror out of reset */
+       ret = reset_control_deassert(fifo->arb);
+       if (ret)
+-              clk_disable_unprepare(fifo->pclk);
++              goto free_clk;
++
++      return 0;
++free_clk:
++      clk_disable_unprepare(fifo->pclk);
++free_irq:
++      free_irq(fifo->irq, ss);
+       return ret;
+ }
+-- 
+2.25.1
+
diff --git a/queue-4.19/asoc-rt5645-add-platform-data-for-asus-t101ha.patch b/queue-4.19/asoc-rt5645-add-platform-data-for-asus-t101ha.patch
new file mode 100644 (file)
index 0000000..4a272a5
--- /dev/null
@@ -0,0 +1,60 @@
+From a2b0025bd787f117d4785fec17d4d9df9d817105 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Mon, 8 Jun 2020 22:46:34 +0200
+Subject: ASoC: rt5645: Add platform-data for Asus T101HA
+
+From: Hans de Goede <hdegoede@redhat.com>
+
+[ Upstream commit 79d4f823a06796656289f97b922493da5690e46c ]
+
+The Asus T101HA uses the default jack-detect mode 3, but instead of
+using an analog microphone it is using a DMIC on dmic-data-pin 1,
+like the Asus T100HA. Note unlike the T100HA its jack-detect is not
+inverted.
+
+Add a DMI quirk with the correct settings for this model.
+
+Signed-off-by: Hans de Goede <hdegoede@redhat.com>
+Acked-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
+Link: https://lore.kernel.org/r/20200608204634.93407-2-hdegoede@redhat.com
+Signed-off-by: Mark Brown <broonie@kernel.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ sound/soc/codecs/rt5645.c | 14 ++++++++++++++
+ 1 file changed, 14 insertions(+)
+
+diff --git a/sound/soc/codecs/rt5645.c b/sound/soc/codecs/rt5645.c
+index 7e3b47eeea044..9185bd7c5a6dc 100644
+--- a/sound/soc/codecs/rt5645.c
++++ b/sound/soc/codecs/rt5645.c
+@@ -3656,6 +3656,12 @@ static const struct rt5645_platform_data asus_t100ha_platform_data = {
+       .inv_jd1_1 = true,
+ };
++static const struct rt5645_platform_data asus_t101ha_platform_data = {
++      .dmic1_data_pin = RT5645_DMIC_DATA_IN2N,
++      .dmic2_data_pin = RT5645_DMIC2_DISABLE,
++      .jd_mode = 3,
++};
++
+ static const struct rt5645_platform_data lenovo_ideapad_miix_310_pdata = {
+       .jd_mode = 3,
+       .in2_diff = true,
+@@ -3733,6 +3739,14 @@ static const struct dmi_system_id dmi_platform_data[] = {
+               },
+               .driver_data = (void *)&asus_t100ha_platform_data,
+       },
++      {
++              .ident = "ASUS T101HA",
++              .matches = {
++                      DMI_MATCH(DMI_SYS_VENDOR, "ASUSTeK COMPUTER INC."),
++                      DMI_MATCH(DMI_PRODUCT_NAME, "T101HA"),
++              },
++              .driver_data = (void *)&asus_t101ha_platform_data,
++      },
+       {
+               .ident = "MINIX Z83-4",
+               .matches = {
+-- 
+2.25.1
+
diff --git a/queue-4.19/asoc-tegra-tegra_wm8903-support-nvidia-headset-prope.patch b/queue-4.19/asoc-tegra-tegra_wm8903-support-nvidia-headset-prope.patch
new file mode 100644 (file)
index 0000000..6eaba27
--- /dev/null
@@ -0,0 +1,54 @@
+From 46a9019f5a8fc04928fc9b6a257b919597dfc0e6 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Mon, 30 Mar 2020 23:40:11 +0300
+Subject: ASoC: tegra: tegra_wm8903: Support nvidia, headset property
+
+From: Dmitry Osipenko <digetx@gmail.com>
+
+[ Upstream commit 3ef9d5073b552d56bd6daf2af1e89b7e8d4df183 ]
+
+The microphone-jack state needs to be masked in a case of a 4-pin jack
+when microphone and ground pins are shorted. Presence of nvidia,headset
+tells that WM8903 CODEC driver should mask microphone's status if short
+circuit is detected, i.e headphones are inserted.
+
+Signed-off-by: Dmitry Osipenko <digetx@gmail.com>
+Link: https://lore.kernel.org/r/20200330204011.18465-3-digetx@gmail.com
+Signed-off-by: Mark Brown <broonie@kernel.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ sound/soc/tegra/tegra_wm8903.c | 6 +++++-
+ 1 file changed, 5 insertions(+), 1 deletion(-)
+
+diff --git a/sound/soc/tegra/tegra_wm8903.c b/sound/soc/tegra/tegra_wm8903.c
+index 69bc9461974b5..301850df368d6 100644
+--- a/sound/soc/tegra/tegra_wm8903.c
++++ b/sound/soc/tegra/tegra_wm8903.c
+@@ -173,6 +173,7 @@ static int tegra_wm8903_init(struct snd_soc_pcm_runtime *rtd)
+       struct snd_soc_component *component = codec_dai->component;
+       struct snd_soc_card *card = rtd->card;
+       struct tegra_wm8903 *machine = snd_soc_card_get_drvdata(card);
++      int shrt = 0;
+       if (gpio_is_valid(machine->gpio_hp_det)) {
+               tegra_wm8903_hp_jack_gpio.gpio = machine->gpio_hp_det;
+@@ -185,12 +186,15 @@ static int tegra_wm8903_init(struct snd_soc_pcm_runtime *rtd)
+                                       &tegra_wm8903_hp_jack_gpio);
+       }
++      if (of_property_read_bool(card->dev->of_node, "nvidia,headset"))
++              shrt = SND_JACK_MICROPHONE;
++
+       snd_soc_card_jack_new(rtd->card, "Mic Jack", SND_JACK_MICROPHONE,
+                             &tegra_wm8903_mic_jack,
+                             tegra_wm8903_mic_jack_pins,
+                             ARRAY_SIZE(tegra_wm8903_mic_jack_pins));
+       wm8903_mic_detect(component, &tegra_wm8903_mic_jack, SND_JACK_MICROPHONE,
+-                              0);
++                              shrt);
+       snd_soc_dapm_force_enable_pin(&card->dapm, "MICBIAS");
+-- 
+2.25.1
+
diff --git a/queue-4.19/backlight-lp855x-ensure-regulators-are-disabled-on-p.patch b/queue-4.19/backlight-lp855x-ensure-regulators-are-disabled-on-p.patch
new file mode 100644 (file)
index 0000000..1c56472
--- /dev/null
@@ -0,0 +1,123 @@
+From 1dffdb3254ae000963d97caa8933f4fa5b8c5fd9 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Mon, 24 Feb 2020 14:07:48 +0000
+Subject: backlight: lp855x: Ensure regulators are disabled on probe failure
+
+From: Jon Hunter <jonathanh@nvidia.com>
+
+[ Upstream commit d8207c155a7c6015eb7f43739baa7dfb1fa638af ]
+
+If probing the LP885x backlight fails after the regulators have been
+enabled, then the following warning is seen when releasing the
+regulators ...
+
+ WARNING: CPU: 1 PID: 289 at drivers/regulator/core.c:2051 _regulator_put.part.28+0x158/0x160
+ Modules linked in: tegra_xudc lp855x_bl(+) host1x pwm_tegra ip_tables x_tables ipv6 nf_defrag_ipv6
+ CPU: 1 PID: 289 Comm: systemd-udevd Not tainted 5.6.0-rc2-next-20200224 #1
+ Hardware name: NVIDIA Jetson TX1 Developer Kit (DT)
+
+ ...
+
+ Call trace:
+  _regulator_put.part.28+0x158/0x160
+  regulator_put+0x34/0x50
+  devm_regulator_release+0x10/0x18
+  release_nodes+0x12c/0x230
+  devres_release_all+0x34/0x50
+  really_probe+0x1c0/0x370
+  driver_probe_device+0x58/0x100
+  device_driver_attach+0x6c/0x78
+  __driver_attach+0xb0/0xf0
+  bus_for_each_dev+0x68/0xc8
+  driver_attach+0x20/0x28
+  bus_add_driver+0x160/0x1f0
+  driver_register+0x60/0x110
+  i2c_register_driver+0x40/0x80
+  lp855x_driver_init+0x20/0x1000 [lp855x_bl]
+  do_one_initcall+0x58/0x1a0
+  do_init_module+0x54/0x1d0
+  load_module+0x1d80/0x21c8
+  __do_sys_finit_module+0xe8/0x100
+  __arm64_sys_finit_module+0x18/0x20
+  el0_svc_common.constprop.3+0xb0/0x168
+  do_el0_svc+0x20/0x98
+  el0_sync_handler+0xf4/0x1b0
+  el0_sync+0x140/0x180
+
+Fix this by ensuring that the regulators are disabled, if enabled, on
+probe failure.
+
+Finally, ensure that the vddio regulator is disabled in the driver
+remove handler.
+
+Signed-off-by: Jon Hunter <jonathanh@nvidia.com>
+Reviewed-by: Daniel Thompson <daniel.thompson@linaro.org>
+Signed-off-by: Lee Jones <lee.jones@linaro.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/video/backlight/lp855x_bl.c | 20 ++++++++++++++++----
+ 1 file changed, 16 insertions(+), 4 deletions(-)
+
+diff --git a/drivers/video/backlight/lp855x_bl.c b/drivers/video/backlight/lp855x_bl.c
+index 73612485ed07e..bd43d8cff389c 100644
+--- a/drivers/video/backlight/lp855x_bl.c
++++ b/drivers/video/backlight/lp855x_bl.c
+@@ -460,7 +460,7 @@ static int lp855x_probe(struct i2c_client *cl, const struct i2c_device_id *id)
+               ret = regulator_enable(lp->enable);
+               if (ret < 0) {
+                       dev_err(lp->dev, "failed to enable vddio: %d\n", ret);
+-                      return ret;
++                      goto disable_supply;
+               }
+               /*
+@@ -475,24 +475,34 @@ static int lp855x_probe(struct i2c_client *cl, const struct i2c_device_id *id)
+       ret = lp855x_configure(lp);
+       if (ret) {
+               dev_err(lp->dev, "device config err: %d", ret);
+-              return ret;
++              goto disable_vddio;
+       }
+       ret = lp855x_backlight_register(lp);
+       if (ret) {
+               dev_err(lp->dev,
+                       "failed to register backlight. err: %d\n", ret);
+-              return ret;
++              goto disable_vddio;
+       }
+       ret = sysfs_create_group(&lp->dev->kobj, &lp855x_attr_group);
+       if (ret) {
+               dev_err(lp->dev, "failed to register sysfs. err: %d\n", ret);
+-              return ret;
++              goto disable_vddio;
+       }
+       backlight_update_status(lp->bl);
++
+       return 0;
++
++disable_vddio:
++      if (lp->enable)
++              regulator_disable(lp->enable);
++disable_supply:
++      if (lp->supply)
++              regulator_disable(lp->supply);
++
++      return ret;
+ }
+ static int lp855x_remove(struct i2c_client *cl)
+@@ -501,6 +511,8 @@ static int lp855x_remove(struct i2c_client *cl)
+       lp->bl->props.brightness = 0;
+       backlight_update_status(lp->bl);
++      if (lp->enable)
++              regulator_disable(lp->enable);
+       if (lp->supply)
+               regulator_disable(lp->supply);
+       sysfs_remove_group(&lp->dev->kobj, &lp855x_attr_group);
+-- 
+2.25.1
+
diff --git a/queue-4.19/bcache-fix-potential-deadlock-problem-in-btree_gc_co.patch b/queue-4.19/bcache-fix-potential-deadlock-problem-in-btree_gc_co.patch
new file mode 100644 (file)
index 0000000..37e4c0d
--- /dev/null
@@ -0,0 +1,96 @@
+From dfc1f7cfbd85794b361ac547bceea0cfa231b1b0 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Mon, 15 Jun 2020 00:53:30 +0800
+Subject: bcache: fix potential deadlock problem in btree_gc_coalesce
+
+From: Zhiqiang Liu <liuzhiqiang26@huawei.com>
+
+[ Upstream commit be23e837333a914df3f24bf0b32e87b0331ab8d1 ]
+
+coccicheck reports:
+  drivers/md//bcache/btree.c:1538:1-7: preceding lock on line 1417
+
+In btree_gc_coalesce func, if the coalescing process fails, we will goto
+to out_nocoalesce tag directly without releasing new_nodes[i]->write_lock.
+Then, it will cause a deadlock when trying to acquire new_nodes[i]->
+write_lock for freeing new_nodes[i] before return.
+
+btree_gc_coalesce func details as follows:
+       if alloc new_nodes[i] fails:
+               goto out_nocoalesce;
+       // obtain new_nodes[i]->write_lock
+       mutex_lock(&new_nodes[i]->write_lock)
+       // main coalescing process
+       for (i = nodes - 1; i > 0; --i)
+               [snipped]
+               if coalescing process fails:
+                       // Here, directly goto out_nocoalesce
+                        // tag will cause a deadlock
+                       goto out_nocoalesce;
+               [snipped]
+       // release new_nodes[i]->write_lock
+       mutex_unlock(&new_nodes[i]->write_lock)
+       // coalesing succ, return
+       return;
+out_nocoalesce:
+       btree_node_free(new_nodes[i])   // free new_nodes[i]
+       // obtain new_nodes[i]->write_lock
+       mutex_lock(&new_nodes[i]->write_lock);
+       // set flag for reuse
+       clear_bit(BTREE_NODE_dirty, &ew_nodes[i]->flags);
+       // release new_nodes[i]->write_lock
+       mutex_unlock(&new_nodes[i]->write_lock);
+
+To fix the problem, we add a new tag 'out_unlock_nocoalesce' for
+releasing new_nodes[i]->write_lock before out_nocoalesce tag. If
+coalescing process fails, we will go to out_unlock_nocoalesce tag
+for releasing new_nodes[i]->write_lock before free new_nodes[i] in
+out_nocoalesce tag.
+
+(Coly Li helps to clean up commit log format.)
+
+Fixes: 2a285686c109816 ("bcache: btree locking rework")
+Signed-off-by: Zhiqiang Liu <liuzhiqiang26@huawei.com>
+Signed-off-by: Coly Li <colyli@suse.de>
+Signed-off-by: Jens Axboe <axboe@kernel.dk>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/md/bcache/btree.c | 8 ++++++--
+ 1 file changed, 6 insertions(+), 2 deletions(-)
+
+diff --git a/drivers/md/bcache/btree.c b/drivers/md/bcache/btree.c
+index bb40bd66a10e4..38a8f8d2a908d 100644
+--- a/drivers/md/bcache/btree.c
++++ b/drivers/md/bcache/btree.c
+@@ -1432,7 +1432,7 @@ static int btree_gc_coalesce(struct btree *b, struct btree_op *op,
+                       if (__set_blocks(n1, n1->keys + n2->keys,
+                                        block_bytes(b->c)) >
+                           btree_blocks(new_nodes[i]))
+-                              goto out_nocoalesce;
++                              goto out_unlock_nocoalesce;
+                       keys = n2->keys;
+                       /* Take the key of the node we're getting rid of */
+@@ -1461,7 +1461,7 @@ static int btree_gc_coalesce(struct btree *b, struct btree_op *op,
+               if (__bch_keylist_realloc(&keylist,
+                                         bkey_u64s(&new_nodes[i]->key)))
+-                      goto out_nocoalesce;
++                      goto out_unlock_nocoalesce;
+               bch_btree_node_write(new_nodes[i], &cl);
+               bch_keylist_add(&keylist, &new_nodes[i]->key);
+@@ -1507,6 +1507,10 @@ static int btree_gc_coalesce(struct btree *b, struct btree_op *op,
+       /* Invalidated our iterator */
+       return -EINTR;
++out_unlock_nocoalesce:
++      for (i = 0; i < nodes; i++)
++              mutex_unlock(&new_nodes[i]->write_lock);
++
+ out_nocoalesce:
+       closure_sync(&cl);
+       bch_keylist_free(&keylist);
+-- 
+2.25.1
+
diff --git a/queue-4.19/blktrace-fix-endianness-for-blk_log_remap.patch b/queue-4.19/blktrace-fix-endianness-for-blk_log_remap.patch
new file mode 100644 (file)
index 0000000..6b37e51
--- /dev/null
@@ -0,0 +1,64 @@
+From 6d7c15264186562b388f515cc246bb3598c74763 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Thu, 4 Jun 2020 00:13:30 -0700
+Subject: blktrace: fix endianness for blk_log_remap()
+
+From: Chaitanya Kulkarni <chaitanya.kulkarni@wdc.com>
+
+[ Upstream commit 5aec598c456fe3c1b71a1202cbb42bdc2a643277 ]
+
+The function blk_log_remap() can be simplified by removing the
+call to get_pdu_remap() that copies the values into extra variable to
+print the data, which also fixes the endiannness warning reported by
+sparse.
+
+Signed-off-by: Chaitanya Kulkarni <chaitanya.kulkarni@wdc.com>
+Signed-off-by: Jens Axboe <axboe@kernel.dk>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ kernel/trace/blktrace.c | 19 ++++---------------
+ 1 file changed, 4 insertions(+), 15 deletions(-)
+
+diff --git a/kernel/trace/blktrace.c b/kernel/trace/blktrace.c
+index 42027cf4ea91e..b7e1e09a0bef5 100644
+--- a/kernel/trace/blktrace.c
++++ b/kernel/trace/blktrace.c
+@@ -1271,17 +1271,6 @@ static __u64 get_pdu_int(const struct trace_entry *ent, bool has_cg)
+       return be64_to_cpu(*val);
+ }
+-static void get_pdu_remap(const struct trace_entry *ent,
+-                        struct blk_io_trace_remap *r, bool has_cg)
+-{
+-      const struct blk_io_trace_remap *__r = pdu_start(ent, has_cg);
+-      __u64 sector_from = __r->sector_from;
+-
+-      r->device_from = be32_to_cpu(__r->device_from);
+-      r->device_to   = be32_to_cpu(__r->device_to);
+-      r->sector_from = be64_to_cpu(sector_from);
+-}
+-
+ typedef void (blk_log_action_t) (struct trace_iterator *iter, const char *act,
+       bool has_cg);
+@@ -1407,13 +1396,13 @@ static void blk_log_with_error(struct trace_seq *s,
+ static void blk_log_remap(struct trace_seq *s, const struct trace_entry *ent, bool has_cg)
+ {
+-      struct blk_io_trace_remap r = { .device_from = 0, };
++      const struct blk_io_trace_remap *__r = pdu_start(ent, has_cg);
+-      get_pdu_remap(ent, &r, has_cg);
+       trace_seq_printf(s, "%llu + %u <- (%d,%d) %llu\n",
+                        t_sector(ent), t_sec(ent),
+-                       MAJOR(r.device_from), MINOR(r.device_from),
+-                       (unsigned long long)r.sector_from);
++                       MAJOR(be32_to_cpu(__r->device_from)),
++                       MINOR(be32_to_cpu(__r->device_from)),
++                       be64_to_cpu(__r->sector_from));
+ }
+ static void blk_log_plug(struct trace_seq *s, const struct trace_entry *ent, bool has_cg)
+-- 
+2.25.1
+
diff --git a/queue-4.19/blktrace-fix-endianness-in-get_pdu_int.patch b/queue-4.19/blktrace-fix-endianness-in-get_pdu_int.patch
new file mode 100644 (file)
index 0000000..a3ce85e
--- /dev/null
@@ -0,0 +1,35 @@
+From 8e2deebaf944357983bbc72b34430e4b7dbe0afd Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Thu, 4 Jun 2020 00:13:29 -0700
+Subject: blktrace: fix endianness in get_pdu_int()
+
+From: Chaitanya Kulkarni <chaitanya.kulkarni@wdc.com>
+
+[ Upstream commit 71df3fd82e7cccec7b749a8607a4662d9f7febdd ]
+
+In function get_pdu_len() replace variable type from __u64 to
+__be64. This fixes sparse warning.
+
+Signed-off-by: Chaitanya Kulkarni <chaitanya.kulkarni@wdc.com>
+Signed-off-by: Jens Axboe <axboe@kernel.dk>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ kernel/trace/blktrace.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/kernel/trace/blktrace.c b/kernel/trace/blktrace.c
+index 5c84f7421871d..42027cf4ea91e 100644
+--- a/kernel/trace/blktrace.c
++++ b/kernel/trace/blktrace.c
+@@ -1267,7 +1267,7 @@ static inline __u16 t_error(const struct trace_entry *ent)
+ static __u64 get_pdu_int(const struct trace_entry *ent, bool has_cg)
+ {
+-      const __u64 *val = pdu_start(ent, has_cg);
++      const __be64 *val = pdu_start(ent, has_cg);
+       return be64_to_cpu(*val);
+ }
+-- 
+2.25.1
+
diff --git a/queue-4.19/blktrace-use-errno-instead-of-bi_status.patch b/queue-4.19/blktrace-use-errno-instead-of-bi_status.patch
new file mode 100644 (file)
index 0000000..209dd18
--- /dev/null
@@ -0,0 +1,50 @@
+From 779d97b23d26442bc5d2d5c806aa4122108d5e3c Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Thu, 4 Jun 2020 00:13:28 -0700
+Subject: blktrace: use errno instead of bi_status
+
+From: Chaitanya Kulkarni <chaitanya.kulkarni@wdc.com>
+
+[ Upstream commit 48bc3cd3e07a1486f45d9971c75d6090976c3b1b ]
+
+In blk_add_trace_spliti() blk_add_trace_bio_remap() use
+blk_status_to_errno() to pass the error instead of pasing the bi_status.
+This fixes the sparse warning.
+
+Signed-off-by: Chaitanya Kulkarni <chaitanya.kulkarni@wdc.com>
+Signed-off-by: Jens Axboe <axboe@kernel.dk>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ kernel/trace/blktrace.c | 9 ++++++---
+ 1 file changed, 6 insertions(+), 3 deletions(-)
+
+diff --git a/kernel/trace/blktrace.c b/kernel/trace/blktrace.c
+index 6cea8bbca03cb..5c84f7421871d 100644
+--- a/kernel/trace/blktrace.c
++++ b/kernel/trace/blktrace.c
+@@ -1004,8 +1004,10 @@ static void blk_add_trace_split(void *ignore,
+               __blk_add_trace(bt, bio->bi_iter.bi_sector,
+                               bio->bi_iter.bi_size, bio_op(bio), bio->bi_opf,
+-                              BLK_TA_SPLIT, bio->bi_status, sizeof(rpdu),
+-                              &rpdu, blk_trace_bio_get_cgid(q, bio));
++                              BLK_TA_SPLIT,
++                              blk_status_to_errno(bio->bi_status),
++                              sizeof(rpdu), &rpdu,
++                              blk_trace_bio_get_cgid(q, bio));
+       }
+       rcu_read_unlock();
+ }
+@@ -1042,7 +1044,8 @@ static void blk_add_trace_bio_remap(void *ignore,
+       r.sector_from = cpu_to_be64(from);
+       __blk_add_trace(bt, bio->bi_iter.bi_sector, bio->bi_iter.bi_size,
+-                      bio_op(bio), bio->bi_opf, BLK_TA_REMAP, bio->bi_status,
++                      bio_op(bio), bio->bi_opf, BLK_TA_REMAP,
++                      blk_status_to_errno(bio->bi_status),
+                       sizeof(r), &r, blk_trace_bio_get_cgid(q, bio));
+       rcu_read_unlock();
+ }
+-- 
+2.25.1
+
diff --git a/queue-4.19/block-fix-use-after-free-in-blkdev_get.patch b/queue-4.19/block-fix-use-after-free-in-blkdev_get.patch
new file mode 100644 (file)
index 0000000..6d9df68
--- /dev/null
@@ -0,0 +1,199 @@
+From 7076b2c1f9c83c82ca03c9edd23bea12da37c636 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Tue, 16 Jun 2020 20:16:55 +0800
+Subject: block: Fix use-after-free in blkdev_get()
+
+From: Jason Yan <yanaijie@huawei.com>
+
+[ Upstream commit 2d3a8e2deddea6c89961c422ec0c5b851e648c14 ]
+
+In blkdev_get() we call __blkdev_get() to do some internal jobs and if
+there is some errors in __blkdev_get(), the bdput() is called which
+means we have released the refcount of the bdev (actually the refcount of
+the bdev inode). This means we cannot access bdev after that point. But
+acctually bdev is still accessed in blkdev_get() after calling
+__blkdev_get(). This results in use-after-free if the refcount is the
+last one we released in __blkdev_get(). Let's take a look at the
+following scenerio:
+
+  CPU0            CPU1                    CPU2
+blkdev_open     blkdev_open           Remove disk
+                  bd_acquire
+                 blkdev_get
+                   __blkdev_get      del_gendisk
+                                       bdev_unhash_inode
+  bd_acquire          bdev_get_gendisk
+    bd_forget           failed because of unhashed
+         bdput
+                     bdput (the last one)
+                       bdev_evict_inode
+
+                   access bdev => use after free
+
+[  459.350216] BUG: KASAN: use-after-free in __lock_acquire+0x24c1/0x31b0
+[  459.351190] Read of size 8 at addr ffff88806c815a80 by task syz-executor.0/20132
+[  459.352347]
+[  459.352594] CPU: 0 PID: 20132 Comm: syz-executor.0 Not tainted 4.19.90 #2
+[  459.353628] Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 1.10.2-1ubuntu1 04/01/2014
+[  459.354947] Call Trace:
+[  459.355337]  dump_stack+0x111/0x19e
+[  459.355879]  ? __lock_acquire+0x24c1/0x31b0
+[  459.356523]  print_address_description+0x60/0x223
+[  459.357248]  ? __lock_acquire+0x24c1/0x31b0
+[  459.357887]  kasan_report.cold+0xae/0x2d8
+[  459.358503]  __lock_acquire+0x24c1/0x31b0
+[  459.359120]  ? _raw_spin_unlock_irq+0x24/0x40
+[  459.359784]  ? lockdep_hardirqs_on+0x37b/0x580
+[  459.360465]  ? _raw_spin_unlock_irq+0x24/0x40
+[  459.361123]  ? finish_task_switch+0x125/0x600
+[  459.361812]  ? finish_task_switch+0xee/0x600
+[  459.362471]  ? mark_held_locks+0xf0/0xf0
+[  459.363108]  ? __schedule+0x96f/0x21d0
+[  459.363716]  lock_acquire+0x111/0x320
+[  459.364285]  ? blkdev_get+0xce/0xbe0
+[  459.364846]  ? blkdev_get+0xce/0xbe0
+[  459.365390]  __mutex_lock+0xf9/0x12a0
+[  459.365948]  ? blkdev_get+0xce/0xbe0
+[  459.366493]  ? bdev_evict_inode+0x1f0/0x1f0
+[  459.367130]  ? blkdev_get+0xce/0xbe0
+[  459.367678]  ? destroy_inode+0xbc/0x110
+[  459.368261]  ? mutex_trylock+0x1a0/0x1a0
+[  459.368867]  ? __blkdev_get+0x3e6/0x1280
+[  459.369463]  ? bdev_disk_changed+0x1d0/0x1d0
+[  459.370114]  ? blkdev_get+0xce/0xbe0
+[  459.370656]  blkdev_get+0xce/0xbe0
+[  459.371178]  ? find_held_lock+0x2c/0x110
+[  459.371774]  ? __blkdev_get+0x1280/0x1280
+[  459.372383]  ? lock_downgrade+0x680/0x680
+[  459.373002]  ? lock_acquire+0x111/0x320
+[  459.373587]  ? bd_acquire+0x21/0x2c0
+[  459.374134]  ? do_raw_spin_unlock+0x4f/0x250
+[  459.374780]  blkdev_open+0x202/0x290
+[  459.375325]  do_dentry_open+0x49e/0x1050
+[  459.375924]  ? blkdev_get_by_dev+0x70/0x70
+[  459.376543]  ? __x64_sys_fchdir+0x1f0/0x1f0
+[  459.377192]  ? inode_permission+0xbe/0x3a0
+[  459.377818]  path_openat+0x148c/0x3f50
+[  459.378392]  ? kmem_cache_alloc+0xd5/0x280
+[  459.379016]  ? entry_SYSCALL_64_after_hwframe+0x49/0xbe
+[  459.379802]  ? path_lookupat.isra.0+0x900/0x900
+[  459.380489]  ? __lock_is_held+0xad/0x140
+[  459.381093]  do_filp_open+0x1a1/0x280
+[  459.381654]  ? may_open_dev+0xf0/0xf0
+[  459.382214]  ? find_held_lock+0x2c/0x110
+[  459.382816]  ? lock_downgrade+0x680/0x680
+[  459.383425]  ? __lock_is_held+0xad/0x140
+[  459.384024]  ? do_raw_spin_unlock+0x4f/0x250
+[  459.384668]  ? _raw_spin_unlock+0x1f/0x30
+[  459.385280]  ? __alloc_fd+0x448/0x560
+[  459.385841]  do_sys_open+0x3c3/0x500
+[  459.386386]  ? filp_open+0x70/0x70
+[  459.386911]  ? trace_hardirqs_on_thunk+0x1a/0x1c
+[  459.387610]  ? trace_hardirqs_off_caller+0x55/0x1c0
+[  459.388342]  ? do_syscall_64+0x1a/0x520
+[  459.388930]  do_syscall_64+0xc3/0x520
+[  459.389490]  entry_SYSCALL_64_after_hwframe+0x49/0xbe
+[  459.390248] RIP: 0033:0x416211
+[  459.390720] Code: 75 14 b8 02 00 00 00 0f 05 48 3d 01 f0 ff ff 0f 83
+04 19 00 00 c3 48 83 ec 08 e8 0a fa ff ff 48 89 04 24 b8 02 00 00 00 0f
+   05 <48> 8b 3c 24 48 89 c2 e8 53 fa ff ff 48 89 d0 48 83 c4 08 48 3d
+      01
+[  459.393483] RSP: 002b:00007fe45dfe9a60 EFLAGS: 00000293 ORIG_RAX: 0000000000000002
+[  459.394610] RAX: ffffffffffffffda RBX: 00007fe45dfea6d4 RCX: 0000000000416211
+[  459.395678] RDX: 00007fe45dfe9b0a RSI: 0000000000000002 RDI: 00007fe45dfe9b00
+[  459.396758] RBP: 000000000076bf20 R08: 0000000000000000 R09: 000000000000000a
+[  459.397930] R10: 0000000000000075 R11: 0000000000000293 R12: 00000000ffffffff
+[  459.399022] R13: 0000000000000bd9 R14: 00000000004cdb80 R15: 000000000076bf2c
+[  459.400168]
+[  459.400430] Allocated by task 20132:
+[  459.401038]  kasan_kmalloc+0xbf/0xe0
+[  459.401652]  kmem_cache_alloc+0xd5/0x280
+[  459.402330]  bdev_alloc_inode+0x18/0x40
+[  459.402970]  alloc_inode+0x5f/0x180
+[  459.403510]  iget5_locked+0x57/0xd0
+[  459.404095]  bdget+0x94/0x4e0
+[  459.404607]  bd_acquire+0xfa/0x2c0
+[  459.405113]  blkdev_open+0x110/0x290
+[  459.405702]  do_dentry_open+0x49e/0x1050
+[  459.406340]  path_openat+0x148c/0x3f50
+[  459.406926]  do_filp_open+0x1a1/0x280
+[  459.407471]  do_sys_open+0x3c3/0x500
+[  459.408010]  do_syscall_64+0xc3/0x520
+[  459.408572]  entry_SYSCALL_64_after_hwframe+0x49/0xbe
+[  459.409415]
+[  459.409679] Freed by task 1262:
+[  459.410212]  __kasan_slab_free+0x129/0x170
+[  459.410919]  kmem_cache_free+0xb2/0x2a0
+[  459.411564]  rcu_process_callbacks+0xbb2/0x2320
+[  459.412318]  __do_softirq+0x225/0x8ac
+
+Fix this by delaying bdput() to the end of blkdev_get() which means we
+have finished accessing bdev.
+
+Fixes: 77ea887e433a ("implement in-kernel gendisk events handling")
+Reported-by: Hulk Robot <hulkci@huawei.com>
+Signed-off-by: Jason Yan <yanaijie@huawei.com>
+Tested-by: Sedat Dilek <sedat.dilek@gmail.com>
+Reviewed-by: Jan Kara <jack@suse.cz>
+Reviewed-by: Christoph Hellwig <hch@lst.de>
+Reviewed-by: Dan Carpenter <dan.carpenter@oracle.com>
+Cc: Christoph Hellwig <hch@lst.de>
+Cc: Jens Axboe <axboe@kernel.dk>
+Cc: Ming Lei <ming.lei@redhat.com>
+Cc: Jan Kara <jack@suse.cz>
+Cc: Dan Carpenter <dan.carpenter@oracle.com>
+Signed-off-by: Jens Axboe <axboe@kernel.dk>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ fs/block_dev.c | 12 +++++++-----
+ 1 file changed, 7 insertions(+), 5 deletions(-)
+
+diff --git a/fs/block_dev.c b/fs/block_dev.c
+index c158bad9a0752..8ac8f7469354b 100644
+--- a/fs/block_dev.c
++++ b/fs/block_dev.c
+@@ -1463,10 +1463,8 @@ static int __blkdev_get(struct block_device *bdev, fmode_t mode, int for_part)
+        */
+       if (!for_part) {
+               ret = devcgroup_inode_permission(bdev->bd_inode, perm);
+-              if (ret != 0) {
+-                      bdput(bdev);
++              if (ret != 0)
+                       return ret;
+-              }
+       }
+  restart:
+@@ -1535,8 +1533,10 @@ static int __blkdev_get(struct block_device *bdev, fmode_t mode, int for_part)
+                               goto out_clear;
+                       BUG_ON(for_part);
+                       ret = __blkdev_get(whole, mode, 1);
+-                      if (ret)
++                      if (ret) {
++                              bdput(whole);
+                               goto out_clear;
++                      }
+                       bdev->bd_contains = whole;
+                       bdev->bd_part = disk_get_part(disk, partno);
+                       if (!(disk->flags & GENHD_FL_UP) ||
+@@ -1586,7 +1586,6 @@ static int __blkdev_get(struct block_device *bdev, fmode_t mode, int for_part)
+       disk_unblock_events(disk);
+       put_disk_and_module(disk);
+  out:
+-      bdput(bdev);
+       return ret;
+ }
+@@ -1672,6 +1671,9 @@ int blkdev_get(struct block_device *bdev, fmode_t mode, void *holder)
+               bdput(whole);
+       }
++      if (res)
++              bdput(bdev);
++
+       return res;
+ }
+ EXPORT_SYMBOL(blkdev_get);
+-- 
+2.25.1
+
diff --git a/queue-4.19/clk-bcm2835-fix-return-type-of-bcm2835_register_gate.patch b/queue-4.19/clk-bcm2835-fix-return-type-of-bcm2835_register_gate.patch
new file mode 100644 (file)
index 0000000..c647ffc
--- /dev/null
@@ -0,0 +1,59 @@
+From 6c158f343ef85f7b3ea5224219d6af71087c230f Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Sat, 16 May 2020 01:08:06 -0700
+Subject: clk: bcm2835: Fix return type of bcm2835_register_gate
+
+From: Nathan Chancellor <natechancellor@gmail.com>
+
+[ Upstream commit f376c43bec4f8ee8d1ba5c5c4cfbd6e84fb279cb ]
+
+bcm2835_register_gate is used as a callback for the clk_register member
+of bcm2835_clk_desc, which expects a struct clk_hw * return type but
+bcm2835_register_gate returns a struct clk *.
+
+This discrepancy is hidden by the fact that bcm2835_register_gate is
+cast to the typedef bcm2835_clk_register by the _REGISTER macro. This
+turns out to be a control flow integrity violation, which is how this
+was noticed.
+
+Change the return type of bcm2835_register_gate to be struct clk_hw *
+and use clk_hw_register_gate to do so. This should be a non-functional
+change as clk_register_gate calls clk_hw_register_gate anyways but this
+is needed to avoid issues with further changes.
+
+Fixes: b19f009d4510 ("clk: bcm2835: Migrate to clk_hw based registration and OF APIs")
+Link: https://github.com/ClangBuiltLinux/linux/issues/1028
+Signed-off-by: Nathan Chancellor <natechancellor@gmail.com>
+Link: https://lkml.kernel.org/r/20200516080806.1459784-1-natechancellor@gmail.com
+Signed-off-by: Stephen Boyd <sboyd@kernel.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/clk/bcm/clk-bcm2835.c | 10 +++++-----
+ 1 file changed, 5 insertions(+), 5 deletions(-)
+
+diff --git a/drivers/clk/bcm/clk-bcm2835.c b/drivers/clk/bcm/clk-bcm2835.c
+index 7bef0666ae7e7..1c093fb35ebee 100644
+--- a/drivers/clk/bcm/clk-bcm2835.c
++++ b/drivers/clk/bcm/clk-bcm2835.c
+@@ -1447,13 +1447,13 @@ static struct clk_hw *bcm2835_register_clock(struct bcm2835_cprman *cprman,
+       return &clock->hw;
+ }
+-static struct clk *bcm2835_register_gate(struct bcm2835_cprman *cprman,
++static struct clk_hw *bcm2835_register_gate(struct bcm2835_cprman *cprman,
+                                        const struct bcm2835_gate_data *data)
+ {
+-      return clk_register_gate(cprman->dev, data->name, data->parent,
+-                               CLK_IGNORE_UNUSED | CLK_SET_RATE_GATE,
+-                               cprman->regs + data->ctl_reg,
+-                               CM_GATE_BIT, 0, &cprman->regs_lock);
++      return clk_hw_register_gate(cprman->dev, data->name, data->parent,
++                                  CLK_IGNORE_UNUSED | CLK_SET_RATE_GATE,
++                                  cprman->regs + data->ctl_reg,
++                                  CM_GATE_BIT, 0, &cprman->regs_lock);
+ }
+ typedef struct clk_hw *(*bcm2835_clk_register)(struct bcm2835_cprman *cprman,
+-- 
+2.25.1
+
diff --git a/queue-4.19/clk-clk-flexgen-fix-clock-critical-handling.patch b/queue-4.19/clk-clk-flexgen-fix-clock-critical-handling.patch
new file mode 100644 (file)
index 0000000..af48ff1
--- /dev/null
@@ -0,0 +1,37 @@
+From 6fe2bfa5d761d7ae5e83e853ee2fde0aba0c457b Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Sun, 22 Mar 2020 15:07:40 +0100
+Subject: clk: clk-flexgen: fix clock-critical handling
+
+From: Alain Volmat <avolmat@me.com>
+
+[ Upstream commit a403bbab1a73d798728d76931cab3ff0399b9560 ]
+
+Fixes an issue leading to having all clocks following a critical
+clocks marked as well as criticals.
+
+Fixes: fa6415affe20 ("clk: st: clk-flexgen: Detect critical clocks")
+Signed-off-by: Alain Volmat <avolmat@me.com>
+Link: https://lkml.kernel.org/r/20200322140740.3970-1-avolmat@me.com
+Reviewed-by: Patrice Chotard <patrice.chotard@st.com>
+Signed-off-by: Stephen Boyd <sboyd@kernel.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/clk/st/clk-flexgen.c | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/drivers/clk/st/clk-flexgen.c b/drivers/clk/st/clk-flexgen.c
+index 918ba3164da94..cd856210db58c 100644
+--- a/drivers/clk/st/clk-flexgen.c
++++ b/drivers/clk/st/clk-flexgen.c
+@@ -373,6 +373,7 @@ static void __init st_of_flexgen_setup(struct device_node *np)
+                       break;
+               }
++              flex_flags &= ~CLK_IS_CRITICAL;
+               of_clk_detect_critical(np, i, &flex_flags);
+               /*
+-- 
+2.25.1
+
diff --git a/queue-4.19/clk-qcom-msm8916-fix-the-address-location-of-pll-con.patch b/queue-4.19/clk-qcom-msm8916-fix-the-address-location-of-pll-con.patch
new file mode 100644 (file)
index 0000000..9c6f8c1
--- /dev/null
@@ -0,0 +1,94 @@
+From a1893009b9b44598be96f544632d24c89534a245 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Sun, 29 Mar 2020 13:41:16 +0100
+Subject: clk: qcom: msm8916: Fix the address location of pll->config_reg
+
+From: Bryan O'Donoghue <bryan.odonoghue@linaro.org>
+
+[ Upstream commit f47ab3c2f5338828a67e89d5f688d2cef9605245 ]
+
+During the process of debugging a processor derived from the msm8916 which
+we found the new processor was not starting one of its PLLs.
+
+After tracing the addresses and writes that downstream was doing and
+comparing to upstream it became obvious that we were writing to a different
+register location than downstream when trying to configure the PLL.
+
+This error is also present in upstream msm8916.
+
+As an example clk-pll.c::clk_pll_recalc_rate wants to write to
+pll->config_reg updating the bit-field POST_DIV_RATIO. That bit-field is
+defined in PLL_USER_CTL not in PLL_CONFIG_CTL. Taking the BIMC PLL as an
+example
+
+lm80-p0436-13_c_qc_snapdragon_410_processor_hrd.pdf
+
+0x01823010 GCC_BIMC_PLL_USER_CTL
+0x01823014 GCC_BIMC_PLL_CONFIG_CTL
+
+This pattern is repeated for gpll0, gpll1, gpll2 and bimc_pll.
+
+This error is likely not apparent since the bootloader will already have
+initialized these PLLs.
+
+This patch corrects the location of config_reg from PLL_CONFIG_CTL to
+PLL_USER_CTL for all relevant PLLs on msm8916.
+
+Fixes commit 3966fab8b6ab ("clk: qcom: Add MSM8916 Global Clock Controller support")
+
+Cc: Georgi Djakov <georgi.djakov@linaro.org>
+Cc: Andy Gross <agross@kernel.org>
+Cc: Bjorn Andersson <bjorn.andersson@linaro.org>
+Cc: Michael Turquette <mturquette@baylibre.com>
+Cc: Stephen Boyd <sboyd@kernel.org>
+Signed-off-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org>
+Link: https://lkml.kernel.org/r/20200329124116.4185447-1-bryan.odonoghue@linaro.org
+Signed-off-by: Stephen Boyd <sboyd@kernel.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/clk/qcom/gcc-msm8916.c | 8 ++++----
+ 1 file changed, 4 insertions(+), 4 deletions(-)
+
+diff --git a/drivers/clk/qcom/gcc-msm8916.c b/drivers/clk/qcom/gcc-msm8916.c
+index ac2b0aa1e8b5d..03e0ade7a6f32 100644
+--- a/drivers/clk/qcom/gcc-msm8916.c
++++ b/drivers/clk/qcom/gcc-msm8916.c
+@@ -268,7 +268,7 @@ static struct clk_pll gpll0 = {
+       .l_reg = 0x21004,
+       .m_reg = 0x21008,
+       .n_reg = 0x2100c,
+-      .config_reg = 0x21014,
++      .config_reg = 0x21010,
+       .mode_reg = 0x21000,
+       .status_reg = 0x2101c,
+       .status_bit = 17,
+@@ -295,7 +295,7 @@ static struct clk_pll gpll1 = {
+       .l_reg = 0x20004,
+       .m_reg = 0x20008,
+       .n_reg = 0x2000c,
+-      .config_reg = 0x20014,
++      .config_reg = 0x20010,
+       .mode_reg = 0x20000,
+       .status_reg = 0x2001c,
+       .status_bit = 17,
+@@ -322,7 +322,7 @@ static struct clk_pll gpll2 = {
+       .l_reg = 0x4a004,
+       .m_reg = 0x4a008,
+       .n_reg = 0x4a00c,
+-      .config_reg = 0x4a014,
++      .config_reg = 0x4a010,
+       .mode_reg = 0x4a000,
+       .status_reg = 0x4a01c,
+       .status_bit = 17,
+@@ -349,7 +349,7 @@ static struct clk_pll bimc_pll = {
+       .l_reg = 0x23004,
+       .m_reg = 0x23008,
+       .n_reg = 0x2300c,
+-      .config_reg = 0x23014,
++      .config_reg = 0x23010,
+       .mode_reg = 0x23000,
+       .status_reg = 0x2301c,
+       .status_bit = 17,
+-- 
+2.25.1
+
diff --git a/queue-4.19/clk-samsung-exynos5433-add-ignore_unused-flag-to-scl.patch b/queue-4.19/clk-samsung-exynos5433-add-ignore_unused-flag-to-scl.patch
new file mode 100644 (file)
index 0000000..02724da
--- /dev/null
@@ -0,0 +1,68 @@
+From d5635f8fdd5ff4bdd61be96a1e8314c80ecac74b Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Tue, 19 May 2020 12:26:52 +0200
+Subject: clk: samsung: exynos5433: Add IGNORE_UNUSED flag to sclk_i2s1
+
+From: Marek Szyprowski <m.szyprowski@samsung.com>
+
+[ Upstream commit 25bdae0f1c6609ceaf55fe6700654f0be2253d8e ]
+
+Mark the SCLK clock for Exynos5433 I2S1 device with IGNORE_UNUSED flag to
+match its behaviour with SCLK clock for AUD_I2S (I2S0) device until
+a proper fix for Exynos I2S driver is ready.
+
+This fixes the following synchronous abort issue revealed by the probe
+order change caused by the commit 93d2e4322aa7 ("of: platform: Batch
+fwnode parsing when adding all top level devices")
+
+Internal error: synchronous external abort: 96000210 [#1] PREEMPT SMP
+Modules linked in:
+CPU: 0 PID: 50 Comm: kworker/0:1 Not tainted 5.7.0-rc5+ #701
+Hardware name: Samsung TM2E board (DT)
+Workqueue: events deferred_probe_work_func
+pstate: 60000005 (nZCv daif -PAN -UAO)
+pc : samsung_i2s_probe+0x768/0x8f0
+lr : samsung_i2s_probe+0x688/0x8f0
+...
+Call trace:
+ samsung_i2s_probe+0x768/0x8f0
+ platform_drv_probe+0x50/0xa8
+ really_probe+0x108/0x370
+ driver_probe_device+0x54/0xb8
+ __device_attach_driver+0x90/0xc0
+ bus_for_each_drv+0x70/0xc8
+ __device_attach+0xdc/0x140
+ device_initial_probe+0x10/0x18
+ bus_probe_device+0x94/0xa0
+ deferred_probe_work_func+0x70/0xa8
+ process_one_work+0x2a8/0x718
+ worker_thread+0x48/0x470
+ kthread+0x134/0x160
+ ret_from_fork+0x10/0x1c
+Code: 17ffffaf d503201f f94086c0 91003000 (88dffc00)
+---[ end trace ccf721c9400ddbd6 ]---
+
+Signed-off-by: Marek Szyprowski <m.szyprowski@samsung.com>
+Signed-off-by: Sylwester Nawrocki <s.nawrocki@samsung.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/clk/samsung/clk-exynos5433.c | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+diff --git a/drivers/clk/samsung/clk-exynos5433.c b/drivers/clk/samsung/clk-exynos5433.c
+index 302596dc79a2c..0f2a9d767eefe 100644
+--- a/drivers/clk/samsung/clk-exynos5433.c
++++ b/drivers/clk/samsung/clk-exynos5433.c
+@@ -1680,7 +1680,8 @@ static const struct samsung_gate_clock peric_gate_clks[] __initconst = {
+       GATE(CLK_SCLK_PCM1, "sclk_pcm1", "sclk_pcm1_peric",
+                       ENABLE_SCLK_PERIC, 7, CLK_SET_RATE_PARENT, 0),
+       GATE(CLK_SCLK_I2S1, "sclk_i2s1", "sclk_i2s1_peric",
+-                      ENABLE_SCLK_PERIC, 6, CLK_SET_RATE_PARENT, 0),
++                      ENABLE_SCLK_PERIC, 6,
++                      CLK_SET_RATE_PARENT | CLK_IGNORE_UNUSED, 0),
+       GATE(CLK_SCLK_SPI2, "sclk_spi2", "sclk_spi2_peric", ENABLE_SCLK_PERIC,
+                       5, CLK_SET_RATE_PARENT, 0),
+       GATE(CLK_SCLK_SPI1, "sclk_spi1", "sclk_spi1_peric", ENABLE_SCLK_PERIC,
+-- 
+2.25.1
+
diff --git a/queue-4.19/clk-samsung-mark-top-isp-and-cam-clocks-on-exynos542.patch b/queue-4.19/clk-samsung-mark-top-isp-and-cam-clocks-on-exynos542.patch
new file mode 100644 (file)
index 0000000..fbf77b3
--- /dev/null
@@ -0,0 +1,92 @@
+From 798423185691b0a0a95ef1b15750706d8f474154 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Wed, 6 May 2020 15:26:58 +0200
+Subject: clk: samsung: Mark top ISP and CAM clocks on Exynos542x as critical
+
+From: Marek Szyprowski <m.szyprowski@samsung.com>
+
+[ Upstream commit e47bd937e602bb4379546095d1bd0b9871fa60c2 ]
+
+The TOP 'aclk*_isp', 'aclk550_cam', 'gscl_wa' and 'gscl_wb' clocks must
+be kept enabled all the time to allow proper access to power management
+control for the ISP and CAM power domains. The last two clocks, although
+related to GScaler device and GSCL power domain, provides also the
+I_WRAP_CLK signal to MIPI CSIS0/1 devices, which are a part of CAM power
+domain and are needed for proper power on/off sequence.
+
+Currently there are no drivers for the devices, which are part of CAM and
+ISP power domains yet. This patch only fixes the race between disabling
+the unused power domains and disabling unused clocks, which randomly
+resulted in the following error during boot:
+
+Power domain CAM disable failed
+Power domain ISP disable failed
+
+Fixes: 318fa46cc60d ("clk/samsung: exynos542x: mark some clocks as critical")
+Signed-off-by: Marek Szyprowski <m.szyprowski@samsung.com>
+Acked-by: Chanwoo Choi <cw00.choi@samsung.com>
+Signed-off-by: Sylwester Nawrocki <s.nawrocki@samsung.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/clk/samsung/clk-exynos5420.c | 16 +++++++++-------
+ 1 file changed, 9 insertions(+), 7 deletions(-)
+
+diff --git a/drivers/clk/samsung/clk-exynos5420.c b/drivers/clk/samsung/clk-exynos5420.c
+index 6473af8903c58..662bb441f1392 100644
+--- a/drivers/clk/samsung/clk-exynos5420.c
++++ b/drivers/clk/samsung/clk-exynos5420.c
+@@ -597,7 +597,7 @@ static const struct samsung_div_clock exynos5800_div_clks[] __initconst = {
+ static const struct samsung_gate_clock exynos5800_gate_clks[] __initconst = {
+       GATE(CLK_ACLK550_CAM, "aclk550_cam", "mout_user_aclk550_cam",
+-                              GATE_BUS_TOP, 24, 0, 0),
++                              GATE_BUS_TOP, 24, CLK_IS_CRITICAL, 0),
+       GATE(CLK_ACLK432_SCALER, "aclk432_scaler", "mout_user_aclk432_scaler",
+                               GATE_BUS_TOP, 27, CLK_IS_CRITICAL, 0),
+       GATE(CLK_MAU_EPLL, "mau_epll", "mout_user_mau_epll",
+@@ -984,25 +984,25 @@ static const struct samsung_gate_clock exynos5x_gate_clks[] __initconst = {
+       GATE(0, "aclk300_jpeg", "mout_user_aclk300_jpeg",
+                       GATE_BUS_TOP, 4, CLK_IGNORE_UNUSED, 0),
+       GATE(0, "aclk333_432_isp0", "mout_user_aclk333_432_isp0",
+-                      GATE_BUS_TOP, 5, 0, 0),
++                      GATE_BUS_TOP, 5, CLK_IS_CRITICAL, 0),
+       GATE(0, "aclk300_gscl", "mout_user_aclk300_gscl",
+                       GATE_BUS_TOP, 6, CLK_IS_CRITICAL, 0),
+       GATE(0, "aclk333_432_gscl", "mout_user_aclk333_432_gscl",
+                       GATE_BUS_TOP, 7, CLK_IGNORE_UNUSED, 0),
+       GATE(0, "aclk333_432_isp", "mout_user_aclk333_432_isp",
+-                      GATE_BUS_TOP, 8, 0, 0),
++                      GATE_BUS_TOP, 8, CLK_IS_CRITICAL, 0),
+       GATE(CLK_PCLK66_GPIO, "pclk66_gpio", "mout_user_pclk66_gpio",
+                       GATE_BUS_TOP, 9, CLK_IGNORE_UNUSED, 0),
+       GATE(0, "aclk66_psgen", "mout_user_aclk66_psgen",
+                       GATE_BUS_TOP, 10, CLK_IGNORE_UNUSED, 0),
+       GATE(0, "aclk266_isp", "mout_user_aclk266_isp",
+-                      GATE_BUS_TOP, 13, 0, 0),
++                      GATE_BUS_TOP, 13, CLK_IS_CRITICAL, 0),
+       GATE(0, "aclk166", "mout_user_aclk166",
+                       GATE_BUS_TOP, 14, CLK_IGNORE_UNUSED, 0),
+       GATE(CLK_ACLK333, "aclk333", "mout_user_aclk333",
+                       GATE_BUS_TOP, 15, CLK_IS_CRITICAL, 0),
+       GATE(0, "aclk400_isp", "mout_user_aclk400_isp",
+-                      GATE_BUS_TOP, 16, 0, 0),
++                      GATE_BUS_TOP, 16, CLK_IS_CRITICAL, 0),
+       GATE(0, "aclk400_mscl", "mout_user_aclk400_mscl",
+                       GATE_BUS_TOP, 17, CLK_IS_CRITICAL, 0),
+       GATE(0, "aclk200_disp1", "mout_user_aclk200_disp1",
+@@ -1208,8 +1208,10 @@ static const struct samsung_gate_clock exynos5x_gate_clks[] __initconst = {
+                       GATE_IP_GSCL1, 3, 0, 0),
+       GATE(CLK_SMMU_FIMCL1, "smmu_fimcl1", "dout_gscl_blk_333",
+                       GATE_IP_GSCL1, 4, 0, 0),
+-      GATE(CLK_GSCL_WA, "gscl_wa", "sclk_gscl_wa", GATE_IP_GSCL1, 12, 0, 0),
+-      GATE(CLK_GSCL_WB, "gscl_wb", "sclk_gscl_wb", GATE_IP_GSCL1, 13, 0, 0),
++      GATE(CLK_GSCL_WA, "gscl_wa", "sclk_gscl_wa", GATE_IP_GSCL1, 12,
++                      CLK_IS_CRITICAL, 0),
++      GATE(CLK_GSCL_WB, "gscl_wb", "sclk_gscl_wb", GATE_IP_GSCL1, 13,
++                      CLK_IS_CRITICAL, 0),
+       GATE(CLK_SMMU_FIMCL3, "smmu_fimcl3,", "dout_gscl_blk_333",
+                       GATE_IP_GSCL1, 16, 0, 0),
+       GATE(CLK_FIMC_LITE3, "fimc_lite3", "aclk333_432_gscl",
+-- 
+2.25.1
+
diff --git a/queue-4.19/clk-sprd-return-correct-type-of-value-for-_sprd_pll_.patch b/queue-4.19/clk-sprd-return-correct-type-of-value-for-_sprd_pll_.patch
new file mode 100644 (file)
index 0000000..95ede0f
--- /dev/null
@@ -0,0 +1,41 @@
+From 0ebf6259aae585553baf38dc2127e296a49ea87f Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Tue, 19 May 2020 11:00:36 +0800
+Subject: clk: sprd: return correct type of value for _sprd_pll_recalc_rate
+
+From: Chunyan Zhang <chunyan.zhang@unisoc.com>
+
+[ Upstream commit c2f30986d418f26abefc2eec90ebf06716c970d2 ]
+
+The function _sprd_pll_recalc_rate() defines return value to unsigned
+long, but it would return a negative value when malloc fail, changing
+to return its parent_rate makes more sense, since if the callback
+.recalc_rate() is not set, the framework returns the parent_rate as
+well.
+
+Fixes: 3e37b005580b ("clk: sprd: add adjustable pll support")
+Signed-off-by: Chunyan Zhang <chunyan.zhang@unisoc.com>
+Link: https://lkml.kernel.org/r/20200519030036.1785-2-zhang.lyra@gmail.com
+Reviewed-by: Baolin Wang <baolin.wang7@gmail.com>
+Signed-off-by: Stephen Boyd <sboyd@kernel.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/clk/sprd/pll.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/drivers/clk/sprd/pll.c b/drivers/clk/sprd/pll.c
+index 640270f51aa56..eb8862752c2b2 100644
+--- a/drivers/clk/sprd/pll.c
++++ b/drivers/clk/sprd/pll.c
+@@ -105,7 +105,7 @@ static unsigned long _sprd_pll_recalc_rate(const struct sprd_pll *pll,
+       cfg = kcalloc(regs_num, sizeof(*cfg), GFP_KERNEL);
+       if (!cfg)
+-              return -ENOMEM;
++              return parent_rate;
+       for (i = 0; i < regs_num; i++)
+               cfg[i] = sprd_pll_read(pll, i);
+-- 
+2.25.1
+
diff --git a/queue-4.19/clk-sunxi-fix-incorrect-usage-of-round_down.patch b/queue-4.19/clk-sunxi-fix-incorrect-usage-of-round_down.patch
new file mode 100644 (file)
index 0000000..b55360a
--- /dev/null
@@ -0,0 +1,39 @@
+From c61285ee139d905b21af3585447912c1ee311418 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Tue, 17 Mar 2020 22:13:32 +0100
+Subject: clk: sunxi: Fix incorrect usage of round_down()
+
+From: Rikard Falkeborn <rikard.falkeborn@gmail.com>
+
+[ Upstream commit ee25d9742dabed3fd18158b518f846abeb70f319 ]
+
+round_down() can only round to powers of 2. If round_down() is asked
+to round to something that is not a power of 2, incorrect results are
+produced. The incorrect results can be both too large and too small.
+
+Instead, use rounddown() which can round to any number.
+
+Fixes: 6a721db180a2 ("clk: sunxi: Add A31 clocks support")
+Signed-off-by: Rikard Falkeborn <rikard.falkeborn@gmail.com>
+Signed-off-by: Maxime Ripard <maxime@cerno.tech>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/clk/sunxi/clk-sunxi.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/drivers/clk/sunxi/clk-sunxi.c b/drivers/clk/sunxi/clk-sunxi.c
+index 004b411b640b3..2bd035d488161 100644
+--- a/drivers/clk/sunxi/clk-sunxi.c
++++ b/drivers/clk/sunxi/clk-sunxi.c
+@@ -98,7 +98,7 @@ static void sun6i_a31_get_pll1_factors(struct factors_request *req)
+        * Round down the frequency to the closest multiple of either
+        * 6 or 16
+        */
+-      u32 round_freq_6 = round_down(freq_mhz, 6);
++      u32 round_freq_6 = rounddown(freq_mhz, 6);
+       u32 round_freq_16 = round_down(freq_mhz, 16);
+       if (round_freq_6 > round_freq_16)
+-- 
+2.25.1
+
diff --git a/queue-4.19/clk-ti-composite-fix-memory-leak.patch b/queue-4.19/clk-ti-composite-fix-memory-leak.patch
new file mode 100644 (file)
index 0000000..95afb32
--- /dev/null
@@ -0,0 +1,38 @@
+From 5abd9872cd9e6e1f4c844b2c2ec079d52540a861 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Wed, 29 Apr 2020 16:13:39 +0300
+Subject: clk: ti: composite: fix memory leak
+
+From: Tero Kristo <t-kristo@ti.com>
+
+[ Upstream commit c7c1cbbc9217ebb5601b88d138d4a5358548de9d ]
+
+The parent_names is never released for a component clock definition,
+causing some memory leak. Fix by releasing it once it is no longer
+needed.
+
+Reported-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
+Signed-off-by: Tero Kristo <t-kristo@ti.com>
+Link: https://lkml.kernel.org/r/20200429131341.4697-2-t-kristo@ti.com
+Acked-by: Tony Lindgren <tony@atomide.com>
+Signed-off-by: Stephen Boyd <sboyd@kernel.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/clk/ti/composite.c | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/drivers/clk/ti/composite.c b/drivers/clk/ti/composite.c
+index 030e8b2c10500..c6478d0b996b2 100644
+--- a/drivers/clk/ti/composite.c
++++ b/drivers/clk/ti/composite.c
+@@ -196,6 +196,7 @@ cleanup:
+               if (!cclk->comp_clks[i])
+                       continue;
+               list_del(&cclk->comp_clks[i]->link);
++              kfree(cclk->comp_clks[i]->parent_names);
+               kfree(cclk->comp_clks[i]);
+       }
+-- 
+2.25.1
+
diff --git a/queue-4.19/crypto-omap-sham-add-proper-load-balancing-support-f.patch b/queue-4.19/crypto-omap-sham-add-proper-load-balancing-support-f.patch
new file mode 100644 (file)
index 0000000..d84c3d7
--- /dev/null
@@ -0,0 +1,169 @@
+From 1a924331da52a27dd88a8aed6e85aa5af69478c2 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Wed, 27 May 2020 15:24:29 +0300
+Subject: crypto: omap-sham - add proper load balancing support for multicore
+
+From: Tero Kristo <t-kristo@ti.com>
+
+[ Upstream commit 281c377872ff5d15d80df25fc4df02d2676c7cde ]
+
+The current implementation of the multiple accelerator core support for
+OMAP SHA does not work properly. It always picks up the first probed
+accelerator core if this is available, and rest of the book keeping also
+gets confused if there are two cores available. Add proper load
+balancing support for SHA, and also fix any bugs related to the
+multicore support while doing it.
+
+Signed-off-by: Tero Kristo <t-kristo@ti.com>
+Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/crypto/omap-sham.c | 64 ++++++++++++++++++--------------------
+ 1 file changed, 31 insertions(+), 33 deletions(-)
+
+diff --git a/drivers/crypto/omap-sham.c b/drivers/crypto/omap-sham.c
+index 0641185bd82f9..2faaa4069cdd8 100644
+--- a/drivers/crypto/omap-sham.c
++++ b/drivers/crypto/omap-sham.c
+@@ -168,8 +168,6 @@ struct omap_sham_hmac_ctx {
+ };
+ struct omap_sham_ctx {
+-      struct omap_sham_dev    *dd;
+-
+       unsigned long           flags;
+       /* fallback stuff */
+@@ -921,27 +919,35 @@ static int omap_sham_update_dma_stop(struct omap_sham_dev *dd)
+       return 0;
+ }
++struct omap_sham_dev *omap_sham_find_dev(struct omap_sham_reqctx *ctx)
++{
++      struct omap_sham_dev *dd;
++
++      if (ctx->dd)
++              return ctx->dd;
++
++      spin_lock_bh(&sham.lock);
++      dd = list_first_entry(&sham.dev_list, struct omap_sham_dev, list);
++      list_move_tail(&dd->list, &sham.dev_list);
++      ctx->dd = dd;
++      spin_unlock_bh(&sham.lock);
++
++      return dd;
++}
++
+ static int omap_sham_init(struct ahash_request *req)
+ {
+       struct crypto_ahash *tfm = crypto_ahash_reqtfm(req);
+       struct omap_sham_ctx *tctx = crypto_ahash_ctx(tfm);
+       struct omap_sham_reqctx *ctx = ahash_request_ctx(req);
+-      struct omap_sham_dev *dd = NULL, *tmp;
++      struct omap_sham_dev *dd;
+       int bs = 0;
+-      spin_lock_bh(&sham.lock);
+-      if (!tctx->dd) {
+-              list_for_each_entry(tmp, &sham.dev_list, list) {
+-                      dd = tmp;
+-                      break;
+-              }
+-              tctx->dd = dd;
+-      } else {
+-              dd = tctx->dd;
+-      }
+-      spin_unlock_bh(&sham.lock);
++      ctx->dd = NULL;
+-      ctx->dd = dd;
++      dd = omap_sham_find_dev(ctx);
++      if (!dd)
++              return -ENODEV;
+       ctx->flags = 0;
+@@ -1191,8 +1197,7 @@ err1:
+ static int omap_sham_enqueue(struct ahash_request *req, unsigned int op)
+ {
+       struct omap_sham_reqctx *ctx = ahash_request_ctx(req);
+-      struct omap_sham_ctx *tctx = crypto_tfm_ctx(req->base.tfm);
+-      struct omap_sham_dev *dd = tctx->dd;
++      struct omap_sham_dev *dd = ctx->dd;
+       ctx->op = op;
+@@ -1202,7 +1207,7 @@ static int omap_sham_enqueue(struct ahash_request *req, unsigned int op)
+ static int omap_sham_update(struct ahash_request *req)
+ {
+       struct omap_sham_reqctx *ctx = ahash_request_ctx(req);
+-      struct omap_sham_dev *dd = ctx->dd;
++      struct omap_sham_dev *dd = omap_sham_find_dev(ctx);
+       if (!req->nbytes)
+               return 0;
+@@ -1307,21 +1312,8 @@ static int omap_sham_setkey(struct crypto_ahash *tfm, const u8 *key,
+       struct omap_sham_hmac_ctx *bctx = tctx->base;
+       int bs = crypto_shash_blocksize(bctx->shash);
+       int ds = crypto_shash_digestsize(bctx->shash);
+-      struct omap_sham_dev *dd = NULL, *tmp;
+       int err, i;
+-      spin_lock_bh(&sham.lock);
+-      if (!tctx->dd) {
+-              list_for_each_entry(tmp, &sham.dev_list, list) {
+-                      dd = tmp;
+-                      break;
+-              }
+-              tctx->dd = dd;
+-      } else {
+-              dd = tctx->dd;
+-      }
+-      spin_unlock_bh(&sham.lock);
+-
+       err = crypto_shash_setkey(tctx->fallback, key, keylen);
+       if (err)
+               return err;
+@@ -1339,7 +1331,7 @@ static int omap_sham_setkey(struct crypto_ahash *tfm, const u8 *key,
+       memset(bctx->ipad + keylen, 0, bs - keylen);
+-      if (!test_bit(FLAGS_AUTO_XOR, &dd->flags)) {
++      if (!test_bit(FLAGS_AUTO_XOR, &sham.flags)) {
+               memcpy(bctx->opad, bctx->ipad, bs);
+               for (i = 0; i < bs; i++) {
+@@ -2142,6 +2134,7 @@ static int omap_sham_probe(struct platform_device *pdev)
+       }
+       dd->flags |= dd->pdata->flags;
++      sham.flags |= dd->pdata->flags;
+       pm_runtime_use_autosuspend(dev);
+       pm_runtime_set_autosuspend_delay(dev, DEFAULT_AUTOSUSPEND_DELAY);
+@@ -2169,6 +2162,9 @@ static int omap_sham_probe(struct platform_device *pdev)
+       spin_unlock(&sham.lock);
+       for (i = 0; i < dd->pdata->algs_info_size; i++) {
++              if (dd->pdata->algs_info[i].registered)
++                      break;
++
+               for (j = 0; j < dd->pdata->algs_info[i].size; j++) {
+                       struct ahash_alg *alg;
+@@ -2220,9 +2216,11 @@ static int omap_sham_remove(struct platform_device *pdev)
+       list_del(&dd->list);
+       spin_unlock(&sham.lock);
+       for (i = dd->pdata->algs_info_size - 1; i >= 0; i--)
+-              for (j = dd->pdata->algs_info[i].registered - 1; j >= 0; j--)
++              for (j = dd->pdata->algs_info[i].registered - 1; j >= 0; j--) {
+                       crypto_unregister_ahash(
+                                       &dd->pdata->algs_info[i].algs_list[j]);
++                      dd->pdata->algs_info[i].registered--;
++              }
+       tasklet_kill(&dd->done_task);
+       pm_runtime_disable(&pdev->dev);
+-- 
+2.25.1
+
diff --git a/queue-4.19/dlm-remove-bug-before-panic.patch b/queue-4.19/dlm-remove-bug-before-panic.patch
new file mode 100644 (file)
index 0000000..586462d
--- /dev/null
@@ -0,0 +1,51 @@
+From 80e38ff6987a52cf1a4a13893e5c22001d04185a Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Thu, 7 May 2020 23:34:28 +0200
+Subject: dlm: remove BUG() before panic()
+
+From: Arnd Bergmann <arnd@arndb.de>
+
+[ Upstream commit fe204591cc9480347af7d2d6029b24a62e449486 ]
+
+Building a kernel with clang sometimes fails with an objtool error in dlm:
+
+fs/dlm/lock.o: warning: objtool: revert_lock_pc()+0xbd: can't find jump dest instruction at .text+0xd7fc
+
+The problem is that BUG() never returns and the compiler knows
+that anything after it is unreachable, however the panic still
+emits some code that does not get fully eliminated.
+
+Having both BUG() and panic() is really pointless as the BUG()
+kills the current process and the subsequent panic() never hits.
+In most cases, we probably don't really want either and should
+replace the DLM_ASSERT() statements with WARN_ON(), as has
+been done for some of them.
+
+Remove the BUG() here so the user at least sees the panic message
+and we can reliably build randconfig kernels.
+
+Fixes: e7fd41792fc0 ("[DLM] The core of the DLM for GFS2/CLVM")
+Cc: Josh Poimboeuf <jpoimboe@redhat.com>
+Cc: clang-built-linux@googlegroups.com
+Signed-off-by: Arnd Bergmann <arnd@arndb.de>
+Signed-off-by: David Teigland <teigland@redhat.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ fs/dlm/dlm_internal.h | 1 -
+ 1 file changed, 1 deletion(-)
+
+diff --git a/fs/dlm/dlm_internal.h b/fs/dlm/dlm_internal.h
+index 748e8d59e6111..cb287df13a7aa 100644
+--- a/fs/dlm/dlm_internal.h
++++ b/fs/dlm/dlm_internal.h
+@@ -99,7 +99,6 @@ do { \
+                __LINE__, __FILE__, #x, jiffies); \
+     {do} \
+     printk("\n"); \
+-    BUG(); \
+     panic("DLM:  Record message above and reboot.\n"); \
+   } \
+ }
+-- 
+2.25.1
+
diff --git a/queue-4.19/dm-mpath-switch-paths-in-dm_blk_ioctl-code-path.patch b/queue-4.19/dm-mpath-switch-paths-in-dm_blk_ioctl-code-path.patch
new file mode 100644 (file)
index 0000000..3e0d1a6
--- /dev/null
@@ -0,0 +1,49 @@
+From f2f8fe81eb263fc314f2250383e4efa757ff941f Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Mon, 20 Apr 2020 22:29:09 +0200
+Subject: dm mpath: switch paths in dm_blk_ioctl() code path
+
+From: Martin Wilck <mwilck@suse.com>
+
+[ Upstream commit 2361ae595352dec015d14292f1b539242d8446d6 ]
+
+SCSI LUN passthrough code such as qemu's "scsi-block" device model
+pass every IO to the host via SG_IO ioctls. Currently, dm-multipath
+calls choose_pgpath() only in the block IO code path, not in the ioctl
+code path (unless current_pgpath is NULL). This has the effect that no
+path switching and thus no load balancing is done for SCSI-passthrough
+IO, unless the active path fails.
+
+Fix this by using the same logic in multipath_prepare_ioctl() as in
+multipath_clone_and_map().
+
+Note: The allegedly best path selection algorithm, service-time,
+still wouldn't work perfectly, because the io size of the current
+request is always set to 0. Changing that for the IO passthrough
+case would require the ioctl cmd and arg to be passed to dm's
+prepare_ioctl() method.
+
+Signed-off-by: Martin Wilck <mwilck@suse.com>
+Reviewed-by: Hannes Reinecke <hare@suse.de>
+Signed-off-by: Mike Snitzer <snitzer@redhat.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/md/dm-mpath.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/drivers/md/dm-mpath.c b/drivers/md/dm-mpath.c
+index 207ca0ad0b59d..c1ad84f3414cd 100644
+--- a/drivers/md/dm-mpath.c
++++ b/drivers/md/dm-mpath.c
+@@ -1868,7 +1868,7 @@ static int multipath_prepare_ioctl(struct dm_target *ti,
+       int r;
+       current_pgpath = READ_ONCE(m->current_pgpath);
+-      if (!current_pgpath)
++      if (!current_pgpath || !test_bit(MPATHF_QUEUE_IO, &m->flags))
+               current_pgpath = choose_pgpath(m, 0);
+       if (current_pgpath) {
+-- 
+2.25.1
+
diff --git a/queue-4.19/dm-zoned-return-null-if-dmz_get_zone_for_reclaim-fai.patch b/queue-4.19/dm-zoned-return-null-if-dmz_get_zone_for_reclaim-fai.patch
new file mode 100644 (file)
index 0000000..5bcc04e
--- /dev/null
@@ -0,0 +1,64 @@
+From 616745997d689029245a0098a474c819192e6564 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Tue, 19 May 2020 10:14:19 +0200
+Subject: dm zoned: return NULL if dmz_get_zone_for_reclaim() fails to find a
+ zone
+
+From: Hannes Reinecke <hare@suse.de>
+
+[ Upstream commit 489dc0f06a5837f87482c0ce61d830d24e17082e ]
+
+The only case where dmz_get_zone_for_reclaim() cannot return a zone is
+if the respective lists are empty. So we should just return a simple
+NULL value here as we really don't have an error code which would make
+sense.
+
+Signed-off-by: Hannes Reinecke <hare@suse.de>
+Reviewed-by: Damien Le Moal <damien.lemoal@wdc.com>
+Signed-off-by: Mike Snitzer <snitzer@redhat.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/md/dm-zoned-metadata.c | 4 ++--
+ drivers/md/dm-zoned-reclaim.c  | 4 ++--
+ 2 files changed, 4 insertions(+), 4 deletions(-)
+
+diff --git a/drivers/md/dm-zoned-metadata.c b/drivers/md/dm-zoned-metadata.c
+index 53eb21343b11f..5c2bbdf67f25d 100644
+--- a/drivers/md/dm-zoned-metadata.c
++++ b/drivers/md/dm-zoned-metadata.c
+@@ -1580,7 +1580,7 @@ static struct dm_zone *dmz_get_rnd_zone_for_reclaim(struct dmz_metadata *zmd)
+                       return dzone;
+       }
+-      return ERR_PTR(-EBUSY);
++      return NULL;
+ }
+ /*
+@@ -1600,7 +1600,7 @@ static struct dm_zone *dmz_get_seq_zone_for_reclaim(struct dmz_metadata *zmd)
+                       return zone;
+       }
+-      return ERR_PTR(-EBUSY);
++      return NULL;
+ }
+ /*
+diff --git a/drivers/md/dm-zoned-reclaim.c b/drivers/md/dm-zoned-reclaim.c
+index 84ac671acd2e1..879848aad97a7 100644
+--- a/drivers/md/dm-zoned-reclaim.c
++++ b/drivers/md/dm-zoned-reclaim.c
+@@ -348,8 +348,8 @@ static int dmz_do_reclaim(struct dmz_reclaim *zrc)
+       /* Get a data zone */
+       dzone = dmz_get_zone_for_reclaim(zmd);
+-      if (IS_ERR(dzone))
+-              return PTR_ERR(dzone);
++      if (!dzone)
++              return -EBUSY;
+       start = jiffies;
+-- 
+2.25.1
+
diff --git a/queue-4.19/drivers-base-fix-null-pointer-exception-in-__platfor.patch b/queue-4.19/drivers-base-fix-null-pointer-exception-in-__platfor.patch
new file mode 100644 (file)
index 0000000..40160c5
--- /dev/null
@@ -0,0 +1,85 @@
+From f433be0312d281b12e7dae8d6901383ed7a99941 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Wed, 8 Apr 2020 14:40:03 -0700
+Subject: drivers: base: Fix NULL pointer exception in
+ __platform_driver_probe() if a driver developer is foolish
+
+From: Kuppuswamy Sathyanarayanan <sathyanarayanan.kuppuswamy@linux.intel.com>
+
+[ Upstream commit 388bcc6ecc609fca1b4920de7dc3806c98ec535e ]
+
+If platform bus driver registration is failed then, accessing
+platform bus spin lock (&drv->driver.bus->p->klist_drivers.k_lock)
+in __platform_driver_probe() without verifying the return value
+__platform_driver_register() can lead to NULL pointer exception.
+
+So check the return value before attempting the spin lock.
+
+One such example is below:
+
+For a custom usecase, I have intentionally failed the platform bus
+registration and I expected all the platform device/driver
+registrations to fail gracefully. But I came across this panic
+issue.
+
+[    1.331067] BUG: kernel NULL pointer dereference, address: 00000000000000c8
+[    1.331118] #PF: supervisor write access in kernel mode
+[    1.331163] #PF: error_code(0x0002) - not-present page
+[    1.331208] PGD 0 P4D 0
+[    1.331233] Oops: 0002 [#1] PREEMPT SMP
+[    1.331268] CPU: 3 PID: 1 Comm: swapper/0 Tainted: G        W         5.6.0-00049-g670d35fb0144 #165
+[    1.331341] Hardware name: QEMU Standard PC (Q35 + ICH9, 2009), BIOS 0.0.0 02/06/2015
+[    1.331406] RIP: 0010:_raw_spin_lock+0x15/0x30
+[    1.331588] RSP: 0000:ffffc9000001be70 EFLAGS: 00010246
+[    1.331632] RAX: 0000000000000000 RBX: 00000000000000c8 RCX: 0000000000000001
+[    1.331696] RDX: 0000000000000001 RSI: 0000000000000092 RDI: 0000000000000000
+[    1.331754] RBP: 00000000ffffffed R08: 0000000000000501 R09: 0000000000000001
+[    1.331817] R10: ffff88817abcc520 R11: 0000000000000670 R12: 00000000ffffffed
+[    1.331881] R13: ffffffff82dbc268 R14: ffffffff832f070a R15: 0000000000000000
+[    1.331945] FS:  0000000000000000(0000) GS:ffff88817bd80000(0000) knlGS:0000000000000000
+[    1.332008] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
+[    1.332062] CR2: 00000000000000c8 CR3: 000000000681e001 CR4: 00000000003606e0
+[    1.332126] DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
+[    1.332189] DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400
+[    1.332252] Call Trace:
+[    1.332281]  __platform_driver_probe+0x92/0xee
+[    1.332323]  ? rtc_dev_init+0x2b/0x2b
+[    1.332358]  cmos_init+0x37/0x67
+[    1.332396]  do_one_initcall+0x7d/0x168
+[    1.332428]  kernel_init_freeable+0x16c/0x1c9
+[    1.332473]  ? rest_init+0xc0/0xc0
+[    1.332508]  kernel_init+0x5/0x100
+[    1.332543]  ret_from_fork+0x1f/0x30
+[    1.332579] CR2: 00000000000000c8
+[    1.332616] ---[ end trace 3bd87f12e9010b87 ]---
+[    1.333549] note: swapper/0[1] exited with preempt_count 1
+[    1.333592] Kernel panic - not syncing: Attempted to kill init! exitcode=0x00000009
+[    1.333736] Kernel Offset: disabled
+
+Note, this can only be triggered if a driver errors out from this call,
+which should never happen.  If it does, the driver needs to be fixed.
+
+Signed-off-by: Kuppuswamy Sathyanarayanan <sathyanarayanan.kuppuswamy@linux.intel.com>
+Link: https://lore.kernel.org/r/20200408214003.3356-1-sathyanarayanan.kuppuswamy@linux.intel.com
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/base/platform.c | 2 ++
+ 1 file changed, 2 insertions(+)
+
+diff --git a/drivers/base/platform.c b/drivers/base/platform.c
+index d1f901b58f755..349c2754eed78 100644
+--- a/drivers/base/platform.c
++++ b/drivers/base/platform.c
+@@ -700,6 +700,8 @@ int __init_or_module __platform_driver_probe(struct platform_driver *drv,
+       /* temporary section violation during probe() */
+       drv->probe = probe;
+       retval = code = __platform_driver_register(drv, module);
++      if (retval)
++              return retval;
+       /*
+        * Fixup that section violation, being paranoid about code scanning
+-- 
+2.25.1
+
diff --git a/queue-4.19/drivers-perf-hisi-fix-wrong-value-for-all-counters-e.patch b/queue-4.19/drivers-perf-hisi-fix-wrong-value-for-all-counters-e.patch
new file mode 100644 (file)
index 0000000..4e4fe9c
--- /dev/null
@@ -0,0 +1,41 @@
+From adf0fd873253775082672e5630f012228fd67f43 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Fri, 5 Jun 2020 17:43:41 +0800
+Subject: drivers/perf: hisi: Fix wrong value for all counters enable
+
+From: Shaokun Zhang <zhangshaokun@hisilicon.com>
+
+[ Upstream commit 961abd78adcb4c72c343fcd9f9dc5e2ebbe9b448 ]
+
+In L3C uncore PMU drivers, bit16 is used to control all counters enable &
+disable. Wrong value is given in the driver and its default value is 1'b1,
+it can work because each PMU counter has its own control bits too.
+Let's fix the wrong value.
+
+Fixes: 2940bc433370 ("perf: hisi: Add support for HiSilicon SoC L3C PMU driver")
+Signed-off-by: Shaokun Zhang <zhangshaokun@hisilicon.com>
+Cc: Will Deacon <will@kernel.org>
+Cc: Mark Rutland <mark.rutland@arm.com>
+Link: https://lore.kernel.org/r/1591350221-32275-1-git-send-email-zhangshaokun@hisilicon.com
+Signed-off-by: Will Deacon <will@kernel.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/perf/hisilicon/hisi_uncore_l3c_pmu.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/drivers/perf/hisilicon/hisi_uncore_l3c_pmu.c b/drivers/perf/hisilicon/hisi_uncore_l3c_pmu.c
+index 0bde5d919b2eb..4aff69cbb9032 100644
+--- a/drivers/perf/hisilicon/hisi_uncore_l3c_pmu.c
++++ b/drivers/perf/hisilicon/hisi_uncore_l3c_pmu.c
+@@ -38,7 +38,7 @@
+ /* L3C has 8-counters */
+ #define L3C_NR_COUNTERS               0x8
+-#define L3C_PERF_CTRL_EN      0x20000
++#define L3C_PERF_CTRL_EN      0x10000
+ #define L3C_EVTYPE_NONE               0xff
+ /*
+-- 
+2.25.1
+
diff --git a/queue-4.19/drm-encoder_slave-fix-refcouting-error-for-modules.patch b/queue-4.19/drm-encoder_slave-fix-refcouting-error-for-modules.patch
new file mode 100644 (file)
index 0000000..8f29f7f
--- /dev/null
@@ -0,0 +1,50 @@
+From bed165384e3b2f908302a52d8704dd9515c7d9f6 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Mon, 15 Jun 2020 09:58:10 +0200
+Subject: drm: encoder_slave: fix refcouting error for modules
+
+From: Wolfram Sang <wsa+renesas@sang-engineering.com>
+
+[ Upstream commit f78d4032de60f50fd4afaa0fb68ea03b985f820a ]
+
+module_put() balances try_module_get(), not request_module(). Fix the
+error path to match that.
+
+Fixes: 2066facca4c7 ("drm/kms: slave encoder interface.")
+Signed-off-by: Wolfram Sang <wsa+renesas@sang-engineering.com>
+Reviewed-by: Emil Velikov <emil.l.velikov@gmail.com>
+Acked-by: Daniel Vetter <daniel.vetter@ffwll.ch>
+Signed-off-by: Wolfram Sang <wsa@kernel.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/gpu/drm/drm_encoder_slave.c | 5 +++--
+ 1 file changed, 3 insertions(+), 2 deletions(-)
+
+diff --git a/drivers/gpu/drm/drm_encoder_slave.c b/drivers/gpu/drm/drm_encoder_slave.c
+index cf804389f5eca..d50a7884e69e1 100644
+--- a/drivers/gpu/drm/drm_encoder_slave.c
++++ b/drivers/gpu/drm/drm_encoder_slave.c
+@@ -84,7 +84,7 @@ int drm_i2c_encoder_init(struct drm_device *dev,
+       err = encoder_drv->encoder_init(client, dev, encoder);
+       if (err)
+-              goto fail_unregister;
++              goto fail_module_put;
+       if (info->platform_data)
+               encoder->slave_funcs->set_config(&encoder->base,
+@@ -92,9 +92,10 @@ int drm_i2c_encoder_init(struct drm_device *dev,
+       return 0;
++fail_module_put:
++      module_put(module);
+ fail_unregister:
+       i2c_unregister_device(client);
+-      module_put(module);
+ fail:
+       return err;
+ }
+-- 
+2.25.1
+
diff --git a/queue-4.19/drm-msm-mdp5-fix-mdp5_init-error-path-for-failed-mdp.patch b/queue-4.19/drm-msm-mdp5-fix-mdp5_init-error-path-for-failed-mdp.patch
new file mode 100644 (file)
index 0000000..e2ade59
--- /dev/null
@@ -0,0 +1,37 @@
+From 8311cf2c56e42fd9d41f91183b4c4a699f4e6911 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Tue, 7 Apr 2020 18:07:37 +0100
+Subject: drm/msm/mdp5: Fix mdp5_init error path for failed mdp5_kms allocation
+
+From: Roy Spliet <nouveau@spliet.org>
+
+[ Upstream commit e4337877c5d578722c0716f131fb774522013cf5 ]
+
+When allocation for mdp5_kms fails, calling mdp5_destroy() leads to undefined
+behaviour, likely a nullptr exception or use-after-free troubles.
+
+Signed-off-by: Roy Spliet <nouveau@spliet.org>
+Reviewed-by: Abhinav Kumar <abhinavk@codeaurora.org>
+Signed-off-by: Rob Clark <robdclark@chromium.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/gpu/drm/msm/disp/mdp5/mdp5_kms.c | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+diff --git a/drivers/gpu/drm/msm/disp/mdp5/mdp5_kms.c b/drivers/gpu/drm/msm/disp/mdp5/mdp5_kms.c
+index bddd625ab91bd..25691b7cece15 100644
+--- a/drivers/gpu/drm/msm/disp/mdp5/mdp5_kms.c
++++ b/drivers/gpu/drm/msm/disp/mdp5/mdp5_kms.c
+@@ -1021,7 +1021,8 @@ static int mdp5_init(struct platform_device *pdev, struct drm_device *dev)
+       return 0;
+ fail:
+-      mdp5_destroy(pdev);
++      if (mdp5_kms)
++              mdp5_destroy(pdev);
+       return ret;
+ }
+-- 
+2.25.1
+
diff --git a/queue-4.19/drm-sun4i-hdmi-ddc-clk-fix-size-of-m-divider.patch b/queue-4.19/drm-sun4i-hdmi-ddc-clk-fix-size-of-m-divider.patch
new file mode 100644 (file)
index 0000000..d6a8e28
--- /dev/null
@@ -0,0 +1,51 @@
+From b033863674a650775d6bdf5d9138053c160a2be5 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Mon, 13 Apr 2020 11:54:57 +0200
+Subject: drm/sun4i: hdmi ddc clk: Fix size of m divider
+
+From: Jernej Skrabec <jernej.skrabec@siol.net>
+
+[ Upstream commit 54e1e06bcf1cf6e7ac3f86daa5f7454add24b494 ]
+
+m divider in DDC clock register is 4 bits wide. Fix that.
+
+Fixes: 9c5681011a0c ("drm/sun4i: Add HDMI support")
+Signed-off-by: Jernej Skrabec <jernej.skrabec@siol.net>
+Reviewed-by: Chen-Yu Tsai <wens@csie.org>
+Signed-off-by: Maxime Ripard <maxime@cerno.tech>
+Link: https://patchwork.freedesktop.org/patch/msgid/20200413095457.1176754-1-jernej.skrabec@siol.net
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/gpu/drm/sun4i/sun4i_hdmi.h         | 2 +-
+ drivers/gpu/drm/sun4i/sun4i_hdmi_ddc_clk.c | 2 +-
+ 2 files changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/drivers/gpu/drm/sun4i/sun4i_hdmi.h b/drivers/gpu/drm/sun4i/sun4i_hdmi.h
+index b685ee11623d1..a13e14dd7746a 100644
+--- a/drivers/gpu/drm/sun4i/sun4i_hdmi.h
++++ b/drivers/gpu/drm/sun4i/sun4i_hdmi.h
+@@ -152,7 +152,7 @@
+ #define SUN4I_HDMI_DDC_CMD_IMPLICIT_WRITE     3
+ #define SUN4I_HDMI_DDC_CLK_REG                0x528
+-#define SUN4I_HDMI_DDC_CLK_M(m)                       (((m) & 0x7) << 3)
++#define SUN4I_HDMI_DDC_CLK_M(m)                       (((m) & 0xf) << 3)
+ #define SUN4I_HDMI_DDC_CLK_N(n)                       ((n) & 0x7)
+ #define SUN4I_HDMI_DDC_LINE_CTRL_REG  0x540
+diff --git a/drivers/gpu/drm/sun4i/sun4i_hdmi_ddc_clk.c b/drivers/gpu/drm/sun4i/sun4i_hdmi_ddc_clk.c
+index e826da34e9191..14b6762567fbf 100644
+--- a/drivers/gpu/drm/sun4i/sun4i_hdmi_ddc_clk.c
++++ b/drivers/gpu/drm/sun4i/sun4i_hdmi_ddc_clk.c
+@@ -37,7 +37,7 @@ static unsigned long sun4i_ddc_calc_divider(unsigned long rate,
+       unsigned long best_rate = 0;
+       u8 best_m = 0, best_n = 0, _m, _n;
+-      for (_m = 0; _m < 8; _m++) {
++      for (_m = 0; _m < 16; _m++) {
+               for (_n = 0; _n < 8; _n++) {
+                       unsigned long tmp_rate;
+-- 
+2.25.1
+
diff --git a/queue-4.19/elfnote-mark-all-.note-sections-shf_alloc.patch b/queue-4.19/elfnote-mark-all-.note-sections-shf_alloc.patch
new file mode 100644 (file)
index 0000000..25c6eb7
--- /dev/null
@@ -0,0 +1,61 @@
+From 2d9aa15156dab1a1d2a4447c96db9824274e9ec7 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Thu, 4 Jun 2020 16:50:49 -0700
+Subject: elfnote: mark all .note sections SHF_ALLOC
+
+From: Nick Desaulniers <ndesaulniers@google.com>
+
+[ Upstream commit 51da9dfb7f20911ae4e79e9b412a9c2d4c373d4b ]
+
+ELFNOTE_START allows callers to specify flags for .pushsection assembler
+directives.  All callsites but ELF_NOTE use "a" for SHF_ALLOC.  For vdso's
+that explicitly use ELF_NOTE_START and BUILD_SALT, the same section is
+specified twice after preprocessing, once with "a" flag, once without.
+Example:
+
+.pushsection .note.Linux, "a", @note ;
+.pushsection .note.Linux, "", @note ;
+
+While GNU as allows this ordering, it warns for the opposite ordering,
+making these directives position dependent.  We'd prefer not to precisely
+match this behavior in Clang's integrated assembler.  Instead, the non
+__ASSEMBLY__ definition of ELF_NOTE uses
+__attribute__((section(".note.Linux"))) which is created with SHF_ALLOC,
+so let's make the __ASSEMBLY__ definition of ELF_NOTE consistent with C
+and just always use "a" flag.
+
+This allows Clang to assemble a working mainline (5.6) kernel via:
+$ make CC=clang AS=clang
+
+Signed-off-by: Nick Desaulniers <ndesaulniers@google.com>
+Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
+Reviewed-by: Nathan Chancellor <natechancellor@gmail.com>
+Reviewed-by: Fangrui Song <maskray@google.com>
+Cc: Jeremy Fitzhardinge <jeremy@goop.org>
+Cc: Thomas Gleixner <tglx@linutronix.de>
+Cc: Vincenzo Frascino <vincenzo.frascino@arm.com>
+Link: https://github.com/ClangBuiltLinux/linux/issues/913
+Link: http://lkml.kernel.org/r/20200325231250.99205-1-ndesaulniers@google.com
+Debugged-by: Ilie Halip <ilie.halip@gmail.com>
+Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ include/linux/elfnote.h | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/include/linux/elfnote.h b/include/linux/elfnote.h
+index f236f5b931b2a..7fdd7f355b529 100644
+--- a/include/linux/elfnote.h
++++ b/include/linux/elfnote.h
+@@ -54,7 +54,7 @@
+ .popsection                           ;
+ #define ELFNOTE(name, type, desc)             \
+-      ELFNOTE_START(name, type, "")           \
++      ELFNOTE_START(name, type, "a")          \
+               desc                    ;       \
+       ELFNOTE_END
+-- 
+2.25.1
+
diff --git a/queue-4.19/ext4-stop-overwrite-the-errcode-in-ext4_setup_super.patch b/queue-4.19/ext4-stop-overwrite-the-errcode-in-ext4_setup_super.patch
new file mode 100644 (file)
index 0000000..da2ca0d
--- /dev/null
@@ -0,0 +1,38 @@
+From 9d2bdd4fba19a3af1cf69d5c65309b11eb6f3e58 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Mon, 1 Jun 2020 15:34:04 +0800
+Subject: ext4: stop overwrite the errcode in ext4_setup_super
+
+From: yangerkun <yangerkun@huawei.com>
+
+[ Upstream commit 5adaccac46ea79008d7b75f47913f1a00f91d0ce ]
+
+Now the errcode from ext4_commit_super will overwrite EROFS exists in
+ext4_setup_super. Actually, no need to call ext4_commit_super since we
+will return EROFS. Fix it by goto done directly.
+
+Fixes: c89128a00838 ("ext4: handle errors on ext4_commit_super")
+Signed-off-by: yangerkun <yangerkun@huawei.com>
+Reviewed-by: Jan Kara <jack@suse.cz>
+Link: https://lore.kernel.org/r/20200601073404.3712492-1-yangerkun@huawei.com
+Signed-off-by: Theodore Ts'o <tytso@mit.edu>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ fs/ext4/super.c | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/fs/ext4/super.c b/fs/ext4/super.c
+index 93c14ecac831e..affccf55294e9 100644
+--- a/fs/ext4/super.c
++++ b/fs/ext4/super.c
+@@ -2249,6 +2249,7 @@ static int ext4_setup_super(struct super_block *sb, struct ext4_super_block *es,
+               ext4_msg(sb, KERN_ERR, "revision level too high, "
+                        "forcing read-only mode");
+               err = -EROFS;
++              goto done;
+       }
+       if (read_only)
+               goto done;
+-- 
+2.25.1
+
diff --git a/queue-4.19/extcon-adc-jack-fix-an-error-handling-path-in-adc_ja.patch b/queue-4.19/extcon-adc-jack-fix-an-error-handling-path-in-adc_ja.patch
new file mode 100644 (file)
index 0000000..8e0c5fd
--- /dev/null
@@ -0,0 +1,49 @@
+From be685955bfd4c2cc042ef5dc7e090c60c36d4bbb Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Sun, 10 May 2020 11:53:03 +0200
+Subject: extcon: adc-jack: Fix an error handling path in 'adc_jack_probe()'
+
+From: Christophe JAILLET <christophe.jaillet@wanadoo.fr>
+
+[ Upstream commit bc84cff2c92ae5ccb2c37da73756e7174b1b430f ]
+
+In some error handling paths, a call to 'iio_channel_get()' is not balanced
+by a corresponding call to 'iio_channel_release()'.
+
+This can be achieved easily by using the devm_ variant of
+'iio_channel_get()'.
+
+This has the extra benefit to simplify the remove function.
+
+Fixes: 19939860dcae ("extcon: adc_jack: adc-jack driver to support 3.5 pi or simliar devices")
+Signed-off-by: Christophe JAILLET <christophe.jaillet@wanadoo.fr>
+Signed-off-by: Chanwoo Choi <cw00.choi@samsung.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/extcon/extcon-adc-jack.c | 3 +--
+ 1 file changed, 1 insertion(+), 2 deletions(-)
+
+diff --git a/drivers/extcon/extcon-adc-jack.c b/drivers/extcon/extcon-adc-jack.c
+index 18026354c332c..b1fb38b7f270e 100644
+--- a/drivers/extcon/extcon-adc-jack.c
++++ b/drivers/extcon/extcon-adc-jack.c
+@@ -128,7 +128,7 @@ static int adc_jack_probe(struct platform_device *pdev)
+       for (i = 0; data->adc_conditions[i].id != EXTCON_NONE; i++);
+       data->num_conditions = i;
+-      data->chan = iio_channel_get(&pdev->dev, pdata->consumer_channel);
++      data->chan = devm_iio_channel_get(&pdev->dev, pdata->consumer_channel);
+       if (IS_ERR(data->chan))
+               return PTR_ERR(data->chan);
+@@ -170,7 +170,6 @@ static int adc_jack_remove(struct platform_device *pdev)
+       free_irq(data->irq, data);
+       cancel_work_sync(&data->handler.work);
+-      iio_channel_release(data->chan);
+       return 0;
+ }
+-- 
+2.25.1
+
diff --git a/queue-4.19/f2fs-report-delalloc-reserve-as-non-free-in-statfs-f.patch b/queue-4.19/f2fs-report-delalloc-reserve-as-non-free-in-statfs-f.patch
new file mode 100644 (file)
index 0000000..8eecff7
--- /dev/null
@@ -0,0 +1,41 @@
+From 277abd05ebbc902083f740cfcdd871acef2cc219 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Mon, 11 May 2020 09:15:18 +0300
+Subject: f2fs: report delalloc reserve as non-free in statfs for project quota
+
+From: Konstantin Khlebnikov <khlebnikov@yandex-team.ru>
+
+[ Upstream commit baaa7ebf25c78c5cb712fac16b7f549100beddd3 ]
+
+This reserved space isn't committed yet but cannot be used for
+allocations. For userspace it has no difference from used space.
+
+See the same fix in ext4 commit f06925c73942 ("ext4: report delalloc
+reserve as non-free in statfs for project quota").
+
+Fixes: ddc34e328d06 ("f2fs: introduce f2fs_statfs_project")
+Signed-off-by: Konstantin Khlebnikov <khlebnikov@yandex-team.ru>
+Reviewed-by: Chao Yu <yuchao0@huawei.com>
+Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ fs/f2fs/super.c | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+diff --git a/fs/f2fs/super.c b/fs/f2fs/super.c
+index 45f8f6ec22a55..9782250c98156 100644
+--- a/fs/f2fs/super.c
++++ b/fs/f2fs/super.c
+@@ -1154,7 +1154,8 @@ static int f2fs_statfs_project(struct super_block *sb,
+               limit >>= sb->s_blocksize_bits;
+       if (limit && buf->f_blocks > limit) {
+-              curblock = dquot->dq_dqb.dqb_curspace >> sb->s_blocksize_bits;
++              curblock = (dquot->dq_dqb.dqb_curspace +
++                          dquot->dq_dqb.dqb_rsvspace) >> sb->s_blocksize_bits;
+               buf->f_blocks = limit;
+               buf->f_bfree = buf->f_bavail =
+                       (buf->f_blocks > curblock) ?
+-- 
+2.25.1
+
diff --git a/queue-4.19/firmware-qcom_scm-fix-bogous-abuse-of-dma-direct-int.patch b/queue-4.19/firmware-qcom_scm-fix-bogous-abuse-of-dma-direct-int.patch
new file mode 100644 (file)
index 0000000..3486c54
--- /dev/null
@@ -0,0 +1,72 @@
+From 8e496205ea69022d123ab817658c03268a6dd1b3 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Tue, 14 Apr 2020 14:31:36 +0200
+Subject: firmware: qcom_scm: fix bogous abuse of dma-direct internals
+
+From: Christoph Hellwig <hch@lst.de>
+
+[ Upstream commit 459b1f86f1cba7de813fbc335df476c111feec22 ]
+
+As far as the device is concerned the dma address is the physical
+address.  There is no need to convert it to a physical address,
+especially not using dma-direct internals that are not available
+to drivers and which will interact badly with IOMMUs.  Last but not
+least the commit introducing it claimed to just fix a type issue,
+but actually changed behavior.
+
+Fixes: 6e37ccf78a532 ("firmware: qcom_scm: Use proper types for dma mappings")
+Reviewed-by: Bjorn Andersson <bjorn.andersson@linaro.org>
+Signed-off-by: Christoph Hellwig <hch@lst.de>
+Link: https://lore.kernel.org/r/20200414123136.441454-1-hch@lst.de
+Signed-off-by: Bjorn Andersson <bjorn.andersson@linaro.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/firmware/qcom_scm.c | 9 +++------
+ 1 file changed, 3 insertions(+), 6 deletions(-)
+
+diff --git a/drivers/firmware/qcom_scm.c b/drivers/firmware/qcom_scm.c
+index 98c987188835b..513908a0c2622 100644
+--- a/drivers/firmware/qcom_scm.c
++++ b/drivers/firmware/qcom_scm.c
+@@ -18,7 +18,6 @@
+ #include <linux/init.h>
+ #include <linux/cpumask.h>
+ #include <linux/export.h>
+-#include <linux/dma-direct.h>
+ #include <linux/dma-mapping.h>
+ #include <linux/module.h>
+ #include <linux/types.h>
+@@ -449,8 +448,7 @@ int qcom_scm_assign_mem(phys_addr_t mem_addr, size_t mem_sz,
+       struct qcom_scm_mem_map_info *mem_to_map;
+       phys_addr_t mem_to_map_phys;
+       phys_addr_t dest_phys;
+-      phys_addr_t ptr_phys;
+-      dma_addr_t ptr_dma;
++      dma_addr_t ptr_phys;
+       size_t mem_to_map_sz;
+       size_t dest_sz;
+       size_t src_sz;
+@@ -468,10 +466,9 @@ int qcom_scm_assign_mem(phys_addr_t mem_addr, size_t mem_sz,
+       ptr_sz = ALIGN(src_sz, SZ_64) + ALIGN(mem_to_map_sz, SZ_64) +
+                       ALIGN(dest_sz, SZ_64);
+-      ptr = dma_alloc_coherent(__scm->dev, ptr_sz, &ptr_dma, GFP_KERNEL);
++      ptr = dma_alloc_coherent(__scm->dev, ptr_sz, &ptr_phys, GFP_KERNEL);
+       if (!ptr)
+               return -ENOMEM;
+-      ptr_phys = dma_to_phys(__scm->dev, ptr_dma);
+       /* Fill source vmid detail */
+       src = ptr;
+@@ -501,7 +498,7 @@ int qcom_scm_assign_mem(phys_addr_t mem_addr, size_t mem_sz,
+       ret = __qcom_scm_assign_mem(__scm->dev, mem_to_map_phys, mem_to_map_sz,
+                                   ptr_phys, src_sz, dest_phys, dest_sz);
+-      dma_free_coherent(__scm->dev, ptr_sz, ptr, ptr_dma);
++      dma_free_coherent(__scm->dev, ptr_sz, ptr, ptr_phys);
+       if (ret) {
+               dev_err(__scm->dev,
+                       "Assign memory protection call failed %d.\n", ret);
+-- 
+2.25.1
+
diff --git a/queue-4.19/fpga-dfl-afu-corrected-error-handling-levels.patch b/queue-4.19/fpga-dfl-afu-corrected-error-handling-levels.patch
new file mode 100644 (file)
index 0000000..81e8acf
--- /dev/null
@@ -0,0 +1,44 @@
+From cde310b70a27a705579b99a9270eccf5c1762d30 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Mon, 18 May 2020 23:49:51 +0530
+Subject: fpga: dfl: afu: Corrected error handling levels
+
+From: Souptick Joarder <jrdr.linux@gmail.com>
+
+[ Upstream commit c9d7e3da1f3c4cf5dddfc5d7ce4d76d013aba1cc ]
+
+Corrected error handling goto sequnece. Level put_pages should
+be called when pinned pages >= 0 && pinned != npages. Level
+free_pages should be called when pinned pages < 0.
+
+Fixes: fa8dda1edef9 ("fpga: dfl: afu: add DFL_FPGA_PORT_DMA_MAP/UNMAP ioctls support")
+Signed-off-by: Souptick Joarder <jrdr.linux@gmail.com>
+Acked-by: Wu Hao <hao.wu@intel.com>
+Reviewed-by: Xu Yilun <yilun.xu@intel.com>
+Link: https://lore.kernel.org/r/1589825991-3545-1-git-send-email-jrdr.linux@gmail.com
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/fpga/dfl-afu-dma-region.c | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/drivers/fpga/dfl-afu-dma-region.c b/drivers/fpga/dfl-afu-dma-region.c
+index c9a613dc9eb7e..e056965ef97b3 100644
+--- a/drivers/fpga/dfl-afu-dma-region.c
++++ b/drivers/fpga/dfl-afu-dma-region.c
+@@ -106,10 +106,10 @@ static int afu_dma_pin_pages(struct dfl_feature_platform_data *pdata,
+                                    region->pages);
+       if (pinned < 0) {
+               ret = pinned;
+-              goto put_pages;
++              goto free_pages;
+       } else if (pinned != npages) {
+               ret = -EFAULT;
+-              goto free_pages;
++              goto put_pages;
+       }
+       dev_dbg(dev, "%d pages pinned\n", pinned);
+-- 
+2.25.1
+
diff --git a/queue-4.19/geneve-change-from-tx_error-to-tx_dropped-on-missing.patch b/queue-4.19/geneve-change-from-tx_error-to-tx_dropped-on-missing.patch
new file mode 100644 (file)
index 0000000..0f264ee
--- /dev/null
@@ -0,0 +1,64 @@
+From d0b1ae4ac1e6706873799313cc0e8425bef908de Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Wed, 3 Jun 2020 11:12:14 +0200
+Subject: geneve: change from tx_error to tx_dropped on missing metadata
+
+From: Jiri Benc <jbenc@redhat.com>
+
+[ Upstream commit 9d149045b3c0e44c049cdbce8a64e19415290017 ]
+
+If the geneve interface is in collect_md (external) mode, it can't send any
+packets submitted directly to its net interface, as such packets won't have
+metadata attached. This is expected.
+
+However, the kernel itself sends some packets to the interface, most
+notably, IPv6 DAD, IPv6 multicast listener reports, etc. This is not wrong,
+as tunnel metadata can be specified in routing table (although technically,
+that has never worked for IPv6, but hopefully will be fixed eventually) and
+then the interface must correctly participate in IPv6 housekeeping.
+
+The problem is that any such attempt increases the tx_error counter. Just
+bringing up a geneve interface with IPv6 enabled is enough to see a number
+of tx_errors. That causes confusion among users, prompting them to find
+a network error where there is none.
+
+Change the counter used to tx_dropped. That better conveys the meaning
+(there's nothing wrong going on, just some packets are getting dropped) and
+hopefully will make admins panic less.
+
+Signed-off-by: Jiri Benc <jbenc@redhat.com>
+Signed-off-by: David S. Miller <davem@davemloft.net>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/net/geneve.c | 7 ++++---
+ 1 file changed, 4 insertions(+), 3 deletions(-)
+
+diff --git a/drivers/net/geneve.c b/drivers/net/geneve.c
+index 36444de701cd9..817c290b78cd9 100644
+--- a/drivers/net/geneve.c
++++ b/drivers/net/geneve.c
+@@ -911,9 +911,10 @@ static netdev_tx_t geneve_xmit(struct sk_buff *skb, struct net_device *dev)
+       if (geneve->collect_md) {
+               info = skb_tunnel_info(skb);
+               if (unlikely(!info || !(info->mode & IP_TUNNEL_INFO_TX))) {
+-                      err = -EINVAL;
+                       netdev_dbg(dev, "no tunnel metadata\n");
+-                      goto tx_error;
++                      dev_kfree_skb(skb);
++                      dev->stats.tx_dropped++;
++                      return NETDEV_TX_OK;
+               }
+       } else {
+               info = &geneve->info;
+@@ -930,7 +931,7 @@ static netdev_tx_t geneve_xmit(struct sk_buff *skb, struct net_device *dev)
+       if (likely(!err))
+               return NETDEV_TX_OK;
+-tx_error:
++
+       dev_kfree_skb(skb);
+       if (err == -ELOOP)
+-- 
+2.25.1
+
diff --git a/queue-4.19/gfs2-allow-lock_nolock-mount-to-specify-jid-x.patch b/queue-4.19/gfs2-allow-lock_nolock-mount-to-specify-jid-x.patch
new file mode 100644 (file)
index 0000000..83e052b
--- /dev/null
@@ -0,0 +1,46 @@
+From 365b7d5156efa4e14b7e30061339930ebe3f726e Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Wed, 29 Apr 2020 08:45:54 -0500
+Subject: gfs2: Allow lock_nolock mount to specify jid=X
+
+From: Bob Peterson <rpeterso@redhat.com>
+
+[ Upstream commit ea22eee4e6027d8927099de344f7fff43c507ef9 ]
+
+Before this patch, a simple typo accidentally added \n to the jid=
+string for lock_nolock mounts. This made it impossible to mount a
+gfs2 file system with a journal other than journal0. Thus:
+
+mount -tgfs2 -o hostdata="jid=1" <device> <mount pt>
+
+Resulted in:
+mount: wrong fs type, bad option, bad superblock on <device>
+
+In most cases this is not a problem. However, for debugging and
+testing purposes we sometimes want to test the integrity of other
+journals. This patch removes the unnecessary \n and thus allows
+lock_nolock users to specify an alternate journal.
+
+Signed-off-by: Bob Peterson <rpeterso@redhat.com>
+Signed-off-by: Andreas Gruenbacher <agruenba@redhat.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ fs/gfs2/ops_fstype.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/fs/gfs2/ops_fstype.c b/fs/gfs2/ops_fstype.c
+index b041cb8ae383d..ed77b10bdfb53 100644
+--- a/fs/gfs2/ops_fstype.c
++++ b/fs/gfs2/ops_fstype.c
+@@ -903,7 +903,7 @@ fail:
+ }
+ static const match_table_t nolock_tokens = {
+-      { Opt_jid, "jid=%d\n", },
++      { Opt_jid, "jid=%d", },
+       { Opt_err, NULL },
+ };
+-- 
+2.25.1
+
diff --git a/queue-4.19/gfs2-fix-use-after-free-on-transaction-ail-lists.patch b/queue-4.19/gfs2-fix-use-after-free-on-transaction-ail-lists.patch
new file mode 100644 (file)
index 0000000..f34ce10
--- /dev/null
@@ -0,0 +1,79 @@
+From 536df0235e2050326a3425fe97411a678b30a9f1 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Thu, 4 Jun 2020 14:28:58 -0500
+Subject: gfs2: fix use-after-free on transaction ail lists
+
+From: Bob Peterson <rpeterso@redhat.com>
+
+[ Upstream commit 83d060ca8d90fa1e3feac227f995c013100862d3 ]
+
+Before this patch, transactions could be merged into the system
+transaction by function gfs2_merge_trans(), but the transaction ail
+lists were never merged. Because the ail flushing mechanism can run
+separately, bd elements can be attached to the transaction's buffer
+list during the transaction (trans_add_meta, etc) but quickly moved
+to its ail lists. Later, in function gfs2_trans_end, the transaction
+can be freed (by gfs2_trans_end) while it still has bd elements
+queued to its ail lists, which can cause it to either lose track of
+the bd elements altogether (memory leak) or worse, reference the bd
+elements after the parent transaction has been freed.
+
+Although I've not seen any serious consequences, the problem becomes
+apparent with the previous patch's addition of:
+
+       gfs2_assert_warn(sdp, list_empty(&tr->tr_ail1_list));
+
+to function gfs2_trans_free().
+
+This patch adds logic into gfs2_merge_trans() to move the merged
+transaction's ail lists to the sdp transaction. This prevents the
+use-after-free. To do this properly, we need to hold the ail lock,
+so we pass sdp into the function instead of the transaction itself.
+
+Signed-off-by: Bob Peterson <rpeterso@redhat.com>
+Signed-off-by: Andreas Gruenbacher <agruenba@redhat.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ fs/gfs2/log.c | 11 +++++++++--
+ 1 file changed, 9 insertions(+), 2 deletions(-)
+
+diff --git a/fs/gfs2/log.c b/fs/gfs2/log.c
+index d3f0612e33471..06752db213d21 100644
+--- a/fs/gfs2/log.c
++++ b/fs/gfs2/log.c
+@@ -877,8 +877,10 @@ void gfs2_log_flush(struct gfs2_sbd *sdp, struct gfs2_glock *gl, u32 flags)
+  * @new: New transaction to be merged
+  */
+-static void gfs2_merge_trans(struct gfs2_trans *old, struct gfs2_trans *new)
++static void gfs2_merge_trans(struct gfs2_sbd *sdp, struct gfs2_trans *new)
+ {
++      struct gfs2_trans *old = sdp->sd_log_tr;
++
+       WARN_ON_ONCE(!test_bit(TR_ATTACHED, &old->tr_flags));
+       old->tr_num_buf_new     += new->tr_num_buf_new;
+@@ -890,6 +892,11 @@ static void gfs2_merge_trans(struct gfs2_trans *old, struct gfs2_trans *new)
+       list_splice_tail_init(&new->tr_databuf, &old->tr_databuf);
+       list_splice_tail_init(&new->tr_buf, &old->tr_buf);
++
++      spin_lock(&sdp->sd_ail_lock);
++      list_splice_tail_init(&new->tr_ail1_list, &old->tr_ail1_list);
++      list_splice_tail_init(&new->tr_ail2_list, &old->tr_ail2_list);
++      spin_unlock(&sdp->sd_ail_lock);
+ }
+ static void log_refund(struct gfs2_sbd *sdp, struct gfs2_trans *tr)
+@@ -901,7 +908,7 @@ static void log_refund(struct gfs2_sbd *sdp, struct gfs2_trans *tr)
+       gfs2_log_lock(sdp);
+       if (sdp->sd_log_tr) {
+-              gfs2_merge_trans(sdp->sd_log_tr, tr);
++              gfs2_merge_trans(sdp, tr);
+       } else if (tr->tr_num_buf_new || tr->tr_num_databuf_new) {
+               gfs2_assert_withdraw(sdp, test_bit(TR_ALLOCED, &tr->tr_flags));
+               sdp->sd_log_tr = tr;
+-- 
+2.25.1
+
diff --git a/queue-4.19/gpio-dwapb-append-module_alias-for-platform-driver.patch b/queue-4.19/gpio-dwapb-append-module_alias-for-platform-driver.patch
new file mode 100644 (file)
index 0000000..2573a53
--- /dev/null
@@ -0,0 +1,77 @@
+From 29e3b2c60af05e4e712819ed3bf68866b51a1d19 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Wed, 15 Apr 2020 17:15:21 +0300
+Subject: gpio: dwapb: Append MODULE_ALIAS for platform driver
+
+From: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
+
+[ Upstream commit c58220cba2e03618659fa7d5dfae31f5ad4ae9d0 ]
+
+The commit 3d2613c4289f
+  ("GPIO: gpio-dwapb: Enable platform driver binding to MFD driver")
+introduced a use of the platform driver but missed to add the following line
+to it:
+  MODULE_ALIAS("platform:gpio-dwapb");
+
+Add this to get driver loaded automatically if platform device is registered.
+
+Fixes: 3d2613c4289f ("GPIO: gpio-dwapb: Enable platform driver binding to MFD driver")
+Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
+Tested-by: Serge Semin <fancer.lancer@gmail.com>
+Reviewed-by: Serge Semin <fancer.lancer@gmail.com>
+Link: https://lore.kernel.org/r/20200415141534.31240-2-andriy.shevchenko@linux.intel.com
+Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/gpio/gpio-dwapb.c | 9 ++++++---
+ 1 file changed, 6 insertions(+), 3 deletions(-)
+
+diff --git a/drivers/gpio/gpio-dwapb.c b/drivers/gpio/gpio-dwapb.c
+index 68db0033d1586..2a56efced7988 100644
+--- a/drivers/gpio/gpio-dwapb.c
++++ b/drivers/gpio/gpio-dwapb.c
+@@ -51,7 +51,9 @@
+ #define GPIO_EXT_PORTC                0x58
+ #define GPIO_EXT_PORTD                0x5c
++#define DWAPB_DRIVER_NAME     "gpio-dwapb"
+ #define DWAPB_MAX_PORTS               4
++
+ #define GPIO_EXT_PORT_STRIDE  0x04 /* register stride 32 bits */
+ #define GPIO_SWPORT_DR_STRIDE 0x0c /* register stride 3*32 bits */
+ #define GPIO_SWPORT_DDR_STRIDE        0x0c /* register stride 3*32 bits */
+@@ -400,7 +402,7 @@ static void dwapb_configure_irqs(struct dwapb_gpio *gpio,
+               return;
+       err = irq_alloc_domain_generic_chips(gpio->domain, ngpio, 2,
+-                                           "gpio-dwapb", handle_level_irq,
++                                           DWAPB_DRIVER_NAME, handle_level_irq,
+                                            IRQ_NOREQUEST, 0,
+                                            IRQ_GC_INIT_NESTED_LOCK);
+       if (err) {
+@@ -457,7 +459,7 @@ static void dwapb_configure_irqs(struct dwapb_gpio *gpio,
+                */
+               err = devm_request_irq(gpio->dev, pp->irq[0],
+                                      dwapb_irq_handler_mfd,
+-                                     IRQF_SHARED, "gpio-dwapb-mfd", gpio);
++                                     IRQF_SHARED, DWAPB_DRIVER_NAME, gpio);
+               if (err) {
+                       dev_err(gpio->dev, "error requesting IRQ\n");
+                       irq_domain_remove(gpio->domain);
+@@ -849,7 +851,7 @@ static SIMPLE_DEV_PM_OPS(dwapb_gpio_pm_ops, dwapb_gpio_suspend,
+ static struct platform_driver dwapb_gpio_driver = {
+       .driver         = {
+-              .name   = "gpio-dwapb",
++              .name   = DWAPB_DRIVER_NAME,
+               .pm     = &dwapb_gpio_pm_ops,
+               .of_match_table = of_match_ptr(dwapb_of_match),
+               .acpi_match_table = ACPI_PTR(dwapb_acpi_match),
+@@ -863,3 +865,4 @@ module_platform_driver(dwapb_gpio_driver);
+ MODULE_LICENSE("GPL");
+ MODULE_AUTHOR("Jamie Iles");
+ MODULE_DESCRIPTION("Synopsys DesignWare APB GPIO driver");
++MODULE_ALIAS("platform:" DWAPB_DRIVER_NAME);
+-- 
+2.25.1
+
diff --git a/queue-4.19/gpio-dwapb-call-acpi_gpiochip_free_interrupts-on-gpi.patch b/queue-4.19/gpio-dwapb-call-acpi_gpiochip_free_interrupts-on-gpi.patch
new file mode 100644 (file)
index 0000000..99bd7df
--- /dev/null
@@ -0,0 +1,78 @@
+From 81f31d8810bc2a47b7955b8abc425c0778427e89 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Tue, 19 May 2020 16:12:30 +0300
+Subject: gpio: dwapb: Call acpi_gpiochip_free_interrupts() on GPIO chip
+ de-registration
+
+From: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
+
+[ Upstream commit 494a94e38dcf62543a32a4424d646ff80b4b28bd ]
+
+Add missed acpi_gpiochip_free_interrupts() call when unregistering ports.
+
+While at it, drop extra check to call acpi_gpiochip_request_interrupts().
+There is no need to have an additional check to call
+acpi_gpiochip_request_interrupts(). Even without any interrupts available
+the registered ACPI Event handlers can be useful for debugging purposes.
+
+Fixes: e6cb3486f5a1 ("gpio: dwapb: add gpio-signaled acpi event support")
+Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
+Tested-by: Serge Semin <fancer.lancer@gmail.com>
+Acked-by: Serge Semin <fancer.lancer@gmail.com>
+Link: https://lore.kernel.org/r/20200519131233.59032-1-andriy.shevchenko@linux.intel.com
+Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/gpio/gpio-dwapb.c | 25 ++++++++++++++++---------
+ 1 file changed, 16 insertions(+), 9 deletions(-)
+
+diff --git a/drivers/gpio/gpio-dwapb.c b/drivers/gpio/gpio-dwapb.c
+index 044888fd96a1f..68db0033d1586 100644
+--- a/drivers/gpio/gpio-dwapb.c
++++ b/drivers/gpio/gpio-dwapb.c
+@@ -535,26 +535,33 @@ static int dwapb_gpio_add_port(struct dwapb_gpio *gpio,
+               dwapb_configure_irqs(gpio, port, pp);
+       err = gpiochip_add_data(&port->gc, port);
+-      if (err)
++      if (err) {
+               dev_err(gpio->dev, "failed to register gpiochip for port%d\n",
+                       port->idx);
+-      else
+-              port->is_registered = true;
++              return err;
++      }
+       /* Add GPIO-signaled ACPI event support */
+-      if (pp->has_irq)
+-              acpi_gpiochip_request_interrupts(&port->gc);
++      acpi_gpiochip_request_interrupts(&port->gc);
+-      return err;
++      port->is_registered = true;
++
++      return 0;
+ }
+ static void dwapb_gpio_unregister(struct dwapb_gpio *gpio)
+ {
+       unsigned int m;
+-      for (m = 0; m < gpio->nr_ports; ++m)
+-              if (gpio->ports[m].is_registered)
+-                      gpiochip_remove(&gpio->ports[m].gc);
++      for (m = 0; m < gpio->nr_ports; ++m) {
++              struct dwapb_gpio_port *port = &gpio->ports[m];
++
++              if (!port->is_registered)
++                      continue;
++
++              acpi_gpiochip_free_interrupts(&port->gc);
++              gpiochip_remove(&port->gc);
++      }
+ }
+ static struct dwapb_platform_data *
+-- 
+2.25.1
+
diff --git a/queue-4.19/hid-add-quirks-for-trust-panora-graphic-tablet.patch b/queue-4.19/hid-add-quirks-for-trust-panora-graphic-tablet.patch
new file mode 100644 (file)
index 0000000..386867d
--- /dev/null
@@ -0,0 +1,75 @@
+From 22d1b0458b70ec8ccfa91e35687f3371c8cd2cf8 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Fri, 8 May 2020 17:26:04 +0200
+Subject: HID: Add quirks for Trust Panora Graphic Tablet
+
+From: Cristian Klein <cristian.klein@elastisys.com>
+
+[ Upstream commit fb68ada81e65d593b51544fa43c284322107a742 ]
+
+The Trust Panora Graphic Tablet has two interfaces. Interface zero reports pen
+movement, pen pressure and pen buttons. Interface one reports tablet buttons
+and tablet scroll. Both use the mouse protocol.
+
+Without these quirks, libinput gets confused about what device it talks to.
+
+For completeness, here is the usbhid-dump:
+
+```
+$ sudo usbhid-dump -d 145f:0212
+003:013:001:DESCRIPTOR         1588949402.559961
+ 05 0D 09 01 A1 01 85 07 A1 02 09 00 75 08 95 07
+ 81 02 C0 C0 09 0E A1 01 85 05 09 23 A1 02 09 52
+ 09 53 25 0A 75 08 95 02 B1 02 C0 C0 05 0C 09 36
+ A1 00 85 06 05 09 19 01 29 20 15 00 25 01 95 20
+ 75 01 81 02 C0
+
+003:013:000:DESCRIPTOR         1588949402.563942
+ 05 01 09 02 A1 01 85 08 09 01 A1 00 05 09 19 01
+ 29 03 15 00 25 01 95 03 75 01 81 02 95 05 81 01
+ 05 01 09 30 09 31 09 38 09 00 15 81 25 7F 75 08
+ 95 04 81 06 C0 C0 05 01 09 02 A1 01 85 09 09 01
+ A1 00 05 09 19 01 29 03 15 00 25 01 95 03 75 01
+ 81 02 95 05 81 01 05 01 09 30 09 31 26 FF 7F 95
+ 02 75 10 81 02 05 0D 09 30 26 FF 03 95 01 75 10
+ 81 02 C0 C0 05 01 09 00 A1 01 85 04 A1 00 26 FF
+ 00 09 00 75 08 95 07 B1 02 C0 C0
+```
+
+Signed-off-by: Cristian Klein <cristian.klein@elastisys.com>
+Signed-off-by: Jiri Kosina <jkosina@suse.cz>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/hid/hid-ids.h    | 3 +++
+ drivers/hid/hid-quirks.c | 1 +
+ 2 files changed, 4 insertions(+)
+
+diff --git a/drivers/hid/hid-ids.h b/drivers/hid/hid-ids.h
+index c1fed1aaecdf8..f8026c71e2e41 100644
+--- a/drivers/hid/hid-ids.h
++++ b/drivers/hid/hid-ids.h
+@@ -1121,6 +1121,9 @@
+ #define USB_DEVICE_ID_TPV_OPTICAL_TOUCHSCREEN_8882    0x8882
+ #define USB_DEVICE_ID_TPV_OPTICAL_TOUCHSCREEN_8883    0x8883
++#define USB_VENDOR_ID_TRUST             0x145f
++#define USB_DEVICE_ID_TRUST_PANORA_TABLET   0x0212
++
+ #define USB_VENDOR_ID_TURBOX          0x062a
+ #define USB_DEVICE_ID_TURBOX_KEYBOARD 0x0201
+ #define USB_DEVICE_ID_ASUS_MD_5110    0x5110
+diff --git a/drivers/hid/hid-quirks.c b/drivers/hid/hid-quirks.c
+index e5beee3e8582a..f4bab7004aff7 100644
+--- a/drivers/hid/hid-quirks.c
++++ b/drivers/hid/hid-quirks.c
+@@ -168,6 +168,7 @@ static const struct hid_device_id hid_quirks[] = {
+       { HID_USB_DEVICE(USB_VENDOR_ID_TOUCHPACK, USB_DEVICE_ID_TOUCHPACK_RTS), HID_QUIRK_MULTI_INPUT },
+       { HID_USB_DEVICE(USB_VENDOR_ID_TPV, USB_DEVICE_ID_TPV_OPTICAL_TOUCHSCREEN_8882), HID_QUIRK_NOGET },
+       { HID_USB_DEVICE(USB_VENDOR_ID_TPV, USB_DEVICE_ID_TPV_OPTICAL_TOUCHSCREEN_8883), HID_QUIRK_NOGET },
++      { HID_USB_DEVICE(USB_VENDOR_ID_TRUST, USB_DEVICE_ID_TRUST_PANORA_TABLET), HID_QUIRK_MULTI_INPUT | HID_QUIRK_HIDINPUT_FORCE },
+       { HID_USB_DEVICE(USB_VENDOR_ID_TURBOX, USB_DEVICE_ID_TURBOX_KEYBOARD), HID_QUIRK_NOGET },
+       { HID_USB_DEVICE(USB_VENDOR_ID_UCLOGIC, USB_DEVICE_ID_UCLOGIC_TABLET_KNA5), HID_QUIRK_MULTI_INPUT },
+       { HID_USB_DEVICE(USB_VENDOR_ID_UCLOGIC, USB_DEVICE_ID_UCLOGIC_TABLET_TWA60), HID_QUIRK_MULTI_INPUT },
+-- 
+2.25.1
+
diff --git a/queue-4.19/i2c-piix4-detect-secondary-smbus-controller-on-amd-a.patch b/queue-4.19/i2c-piix4-detect-secondary-smbus-controller-on-amd-a.patch
new file mode 100644 (file)
index 0000000..25ece2f
--- /dev/null
@@ -0,0 +1,51 @@
+From d5eca3f91eb18b606ff86765b750fee821ac6767 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Fri, 10 Apr 2020 15:48:44 -0500
+Subject: i2c: piix4: Detect secondary SMBus controller on AMD AM4 chipsets
+
+From: Adam Honse <calcprogrammer1@gmail.com>
+
+[ Upstream commit f27237c174fd9653033330e4e532cd9d153ce824 ]
+
+The AMD X370 and other AM4 chipsets (A/B/X 3/4/5 parts) and Threadripper
+equivalents have a secondary SMBus controller at I/O port address
+0x0B20.  This bus is used by several manufacturers to control
+motherboard RGB lighting via embedded controllers.  I have been using
+this bus in my OpenRGB project to control the Aura RGB on many
+motherboards and ASRock also uses this bus for their Polychrome RGB
+controller.
+
+I am not aware of any CZ-compatible platforms which do not have the
+second SMBus channel.  All of AMD's AM4- and Threadripper- series
+chipsets that OpenRGB users have tested appear to have this secondary
+bus.  I also noticed this secondary bus is present on older AMD
+platforms including my FM1 home server.
+
+Bugzilla: https://bugzilla.kernel.org/show_bug.cgi?id=202587
+Signed-off-by: Adam Honse <calcprogrammer1@gmail.com>
+Reviewed-by: Jean Delvare <jdelvare@suse.de>
+Reviewed-by: Sebastian Reichel <sebastian.reichel@collabora.com>
+Tested-by: Sebastian Reichel <sebastian.reichel@collabora.com>
+Signed-off-by: Wolfram Sang <wsa@the-dreams.de>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/i2c/busses/i2c-piix4.c | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+diff --git a/drivers/i2c/busses/i2c-piix4.c b/drivers/i2c/busses/i2c-piix4.c
+index 9ff3371ec385d..f1c79f9b3919b 100644
+--- a/drivers/i2c/busses/i2c-piix4.c
++++ b/drivers/i2c/busses/i2c-piix4.c
+@@ -958,7 +958,8 @@ static int piix4_probe(struct pci_dev *dev, const struct pci_device_id *id)
+       }
+       if (dev->vendor == PCI_VENDOR_ID_AMD &&
+-          dev->device == PCI_DEVICE_ID_AMD_HUDSON2_SMBUS) {
++          (dev->device == PCI_DEVICE_ID_AMD_HUDSON2_SMBUS ||
++           dev->device == PCI_DEVICE_ID_AMD_KERNCZ_SMBUS)) {
+               retval = piix4_setup_sb800(dev, id, 1);
+       }
+-- 
+2.25.1
+
diff --git a/queue-4.19/i2c-pxa-clear-all-master-action-bits-in-i2c_pxa_stop.patch b/queue-4.19/i2c-pxa-clear-all-master-action-bits-in-i2c_pxa_stop.patch
new file mode 100644 (file)
index 0000000..fa6fd4f
--- /dev/null
@@ -0,0 +1,45 @@
+From c2d8e80c7062a09c28745ca0d0b979789de105a8 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Wed, 6 May 2020 10:36:38 +0100
+Subject: i2c: pxa: clear all master action bits in i2c_pxa_stop_message()
+
+From: Russell King <rmk+kernel@armlinux.org.uk>
+
+[ Upstream commit e81c979f4e071d516aa27cf5a0c3939da00dc1ca ]
+
+If we timeout during a message transfer, the control register may
+contain bits that cause an action to be set. Read-modify-writing the
+register leaving these bits set may trigger the hardware to attempt
+one of these actions unintentionally.
+
+Always clear these bits when cleaning up after a message or after
+a timeout.
+
+Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
+Signed-off-by: Wolfram Sang <wsa@kernel.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/i2c/busses/i2c-pxa.c | 6 ++----
+ 1 file changed, 2 insertions(+), 4 deletions(-)
+
+diff --git a/drivers/i2c/busses/i2c-pxa.c b/drivers/i2c/busses/i2c-pxa.c
+index fbf91d383b409..7248ba6763e45 100644
+--- a/drivers/i2c/busses/i2c-pxa.c
++++ b/drivers/i2c/busses/i2c-pxa.c
+@@ -709,11 +709,9 @@ static inline void i2c_pxa_stop_message(struct pxa_i2c *i2c)
+ {
+       u32 icr;
+-      /*
+-       * Clear the STOP and ACK flags
+-       */
++      /* Clear the START, STOP, ACK, TB and MA flags */
+       icr = readl(_ICR(i2c));
+-      icr &= ~(ICR_STOP | ICR_ACKNAK);
++      icr &= ~(ICR_START | ICR_STOP | ICR_ACKNAK | ICR_TB | ICR_MA);
+       writel(icr, _ICR(i2c));
+ }
+-- 
+2.25.1
+
diff --git a/queue-4.19/i2c-pxa-fix-i2c_pxa_scream_blue_murder-debug-output.patch b/queue-4.19/i2c-pxa-fix-i2c_pxa_scream_blue_murder-debug-output.patch
new file mode 100644 (file)
index 0000000..64f127c
--- /dev/null
@@ -0,0 +1,54 @@
+From e460b35dbdc3708361a91c77cdb1e38cb4496cec Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Mon, 27 Apr 2020 19:49:22 +0100
+Subject: i2c: pxa: fix i2c_pxa_scream_blue_murder() debug output
+
+From: Russell King <rmk+kernel@armlinux.org.uk>
+
+[ Upstream commit 88b73ee7ca4c90baf136ed5a8377fc5a9b73ac08 ]
+
+The IRQ log output is supposed to appear on a single line.  However,
+commit 3a2dc1677b60 ("i2c: pxa: Update debug function to dump more info
+on error") resulted in it being printed one-entry-per-line, which is
+excessively long.
+
+Fixing this is not a trivial matter; using pr_cont() doesn't work as
+the previous dev_dbg() may not have been compiled in, or may be
+dynamic.
+
+Since the rest of this function output is at error level, and is also
+debug output, promote this to error level as well to avoid this
+problem.
+
+Reduce the number of always zero prefix digits to save screen real-
+estate.
+
+Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
+Signed-off-by: Wolfram Sang <wsa@kernel.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/i2c/busses/i2c-pxa.c | 7 +++----
+ 1 file changed, 3 insertions(+), 4 deletions(-)
+
+diff --git a/drivers/i2c/busses/i2c-pxa.c b/drivers/i2c/busses/i2c-pxa.c
+index 7248ba6763e45..c10ae4778d350 100644
+--- a/drivers/i2c/busses/i2c-pxa.c
++++ b/drivers/i2c/busses/i2c-pxa.c
+@@ -315,11 +315,10 @@ static void i2c_pxa_scream_blue_murder(struct pxa_i2c *i2c, const char *why)
+       dev_err(dev, "IBMR: %08x IDBR: %08x ICR: %08x ISR: %08x\n",
+               readl(_IBMR(i2c)), readl(_IDBR(i2c)), readl(_ICR(i2c)),
+               readl(_ISR(i2c)));
+-      dev_dbg(dev, "log: ");
++      dev_err(dev, "log:");
+       for (i = 0; i < i2c->irqlogidx; i++)
+-              pr_debug("[%08x:%08x] ", i2c->isrlog[i], i2c->icrlog[i]);
+-
+-      pr_debug("\n");
++              pr_cont(" [%03x:%05x]", i2c->isrlog[i], i2c->icrlog[i]);
++      pr_cont("\n");
+ }
+ #else /* ifdef DEBUG */
+-- 
+2.25.1
+
diff --git a/queue-4.19/ib-cma-fix-ports-memory-leak-in-cma_configfs.patch b/queue-4.19/ib-cma-fix-ports-memory-leak-in-cma_configfs.patch
new file mode 100644 (file)
index 0000000..a5fdb72
--- /dev/null
@@ -0,0 +1,54 @@
+From c3ab8ca4829eb0aa13b135e5d387c1017dd96c22 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Thu, 21 May 2020 10:26:50 +0300
+Subject: IB/cma: Fix ports memory leak in cma_configfs
+
+From: Maor Gottlieb <maorg@mellanox.com>
+
+[ Upstream commit 63a3345c2d42a9b29e1ce2d3a4043689b3995cea ]
+
+The allocated ports structure in never freed. The free function should be
+called by release_cma_ports_group, but the group is never released since
+we don't remove its default group.
+
+Remove default groups when device group is deleted.
+
+Fixes: 045959db65c6 ("IB/cma: Add configfs for rdma_cm")
+Link: https://lore.kernel.org/r/20200521072650.567908-1-leon@kernel.org
+Signed-off-by: Maor Gottlieb <maorg@mellanox.com>
+Signed-off-by: Leon Romanovsky <leonro@mellanox.com>
+Signed-off-by: Jason Gunthorpe <jgg@mellanox.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/infiniband/core/cma_configfs.c | 13 +++++++++++++
+ 1 file changed, 13 insertions(+)
+
+diff --git a/drivers/infiniband/core/cma_configfs.c b/drivers/infiniband/core/cma_configfs.c
+index eee38b40be990..ce183d0547852 100644
+--- a/drivers/infiniband/core/cma_configfs.c
++++ b/drivers/infiniband/core/cma_configfs.c
+@@ -319,8 +319,21 @@ fail:
+       return ERR_PTR(err);
+ }
++static void drop_cma_dev(struct config_group *cgroup, struct config_item *item)
++{
++      struct config_group *group =
++              container_of(item, struct config_group, cg_item);
++      struct cma_dev_group *cma_dev_group =
++              container_of(group, struct cma_dev_group, device_group);
++
++      configfs_remove_default_groups(&cma_dev_group->ports_group);
++      configfs_remove_default_groups(&cma_dev_group->device_group);
++      config_item_put(item);
++}
++
+ static struct configfs_group_operations cma_subsys_group_ops = {
+       .make_group     = make_cma_dev,
++      .drop_item      = drop_cma_dev,
+ };
+ static const struct config_item_type cma_subsys_type = {
+-- 
+2.25.1
+
diff --git a/queue-4.19/iio-bmp280-fix-compensation-of-humidity.patch b/queue-4.19/iio-bmp280-fix-compensation-of-humidity.patch
new file mode 100644 (file)
index 0000000..efc79f8
--- /dev/null
@@ -0,0 +1,50 @@
+From 282d506f0187a8b226d543b4d2caf497f30be118 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Mon, 4 May 2020 20:10:34 +0200
+Subject: iio: bmp280: fix compensation of humidity
+
+From: Andreas Klinger <ak@it-klinger.de>
+
+[ Upstream commit dee2dabc0e4115b80945fe2c91603e634f4b4686 ]
+
+Limit the output of humidity compensation to the range between 0 and 100
+percent.
+
+Depending on the calibration parameters of the individual sensor it
+happens, that a humidity above 100 percent or below 0 percent is
+calculated, which don't make sense in terms of relative humidity.
+
+Add a clamp to the compensation formula as described in the datasheet of
+the sensor in chapter 4.2.3.
+
+Although this clamp is documented, it was never in the driver of the
+kernel.
+
+It depends on the circumstances (calibration parameters, temperature,
+humidity) if one can see a value above 100 percent without the clamp.
+The writer of this patch was working with this type of sensor without
+noting this error. So it seems to be a rare event when this bug occures.
+
+Signed-off-by: Andreas Klinger <ak@it-klinger.de>
+Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/iio/pressure/bmp280-core.c | 2 ++
+ 1 file changed, 2 insertions(+)
+
+diff --git a/drivers/iio/pressure/bmp280-core.c b/drivers/iio/pressure/bmp280-core.c
+index d47922a1d0f37..074f6f865008c 100644
+--- a/drivers/iio/pressure/bmp280-core.c
++++ b/drivers/iio/pressure/bmp280-core.c
+@@ -261,6 +261,8 @@ static u32 bmp280_compensate_humidity(struct bmp280_data *data,
+               + (s32)2097152) * calib->H2 + 8192) >> 14);
+       var -= ((((var >> 15) * (var >> 15)) >> 7) * (s32)calib->H1) >> 4;
++      var = clamp_val(var, 0, 419430400);
++
+       return var >> 12;
+ };
+-- 
+2.25.1
+
diff --git a/queue-4.19/iio-pressure-bmp280-tolerate-irq-before-registering.patch b/queue-4.19/iio-pressure-bmp280-tolerate-irq-before-registering.patch
new file mode 100644 (file)
index 0000000..0b7f640
--- /dev/null
@@ -0,0 +1,58 @@
+From 296c8ae87c25818bdc82c871a6735ae2b0ff49b8 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Mon, 23 Mar 2020 12:41:25 +0200
+Subject: iio: pressure: bmp280: Tolerate IRQ before registering
+
+From: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
+
+[ Upstream commit 97b31a6f5fb95b1ec6575b78a7240baddba34384 ]
+
+With DEBUG_SHIRQ enabled we have a kernel crash
+
+[  116.482696] BUG: kernel NULL pointer dereference, address: 0000000000000000
+
+...
+
+[  116.606571] Call Trace:
+[  116.609023]  <IRQ>
+[  116.611047]  complete+0x34/0x50
+[  116.614206]  bmp085_eoc_irq+0x9/0x10 [bmp280]
+
+because DEBUG_SHIRQ mechanism fires an IRQ before registration and drivers
+ought to be able to handle an interrupt happening before request_irq() returns.
+
+Fixes: aae953949651 ("iio: pressure: bmp280: add support for BMP085 EOC interrupt")
+Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
+Acked-by: Linus Walleij <linus.walleij@linaro.org>
+Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/iio/pressure/bmp280-core.c | 5 ++++-
+ 1 file changed, 4 insertions(+), 1 deletion(-)
+
+diff --git a/drivers/iio/pressure/bmp280-core.c b/drivers/iio/pressure/bmp280-core.c
+index fe87d27779d96..d47922a1d0f37 100644
+--- a/drivers/iio/pressure/bmp280-core.c
++++ b/drivers/iio/pressure/bmp280-core.c
+@@ -703,7 +703,7 @@ static int bmp180_measure(struct bmp280_data *data, u8 ctrl_meas)
+       unsigned int ctrl;
+       if (data->use_eoc)
+-              init_completion(&data->done);
++              reinit_completion(&data->done);
+       ret = regmap_write(data->regmap, BMP280_REG_CTRL_MEAS, ctrl_meas);
+       if (ret)
+@@ -959,6 +959,9 @@ static int bmp085_fetch_eoc_irq(struct device *dev,
+                       "trying to enforce it\n");
+               irq_trig = IRQF_TRIGGER_RISING;
+       }
++
++      init_completion(&data->done);
++
+       ret = devm_request_threaded_irq(dev,
+                       irq,
+                       bmp085_eoc_irq,
+-- 
+2.25.1
+
diff --git a/queue-4.19/include-linux-bitops.h-avoid-clang-shift-count-overf.patch b/queue-4.19/include-linux-bitops.h-avoid-clang-shift-count-overf.patch
new file mode 100644 (file)
index 0000000..381b980
--- /dev/null
@@ -0,0 +1,65 @@
+From a3453798b126bc4e97122def9480e0e8587235ba Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Thu, 4 Jun 2020 16:50:30 -0700
+Subject: include/linux/bitops.h: avoid clang shift-count-overflow warnings
+
+From: Arnd Bergmann <arnd@arndb.de>
+
+[ Upstream commit bd93f003b7462ae39a43c531abca37fe7073b866 ]
+
+Clang normally does not warn about certain issues in inline functions when
+it only happens in an eliminated code path. However if something else
+goes wrong, it does tend to complain about the definition of hweight_long()
+on 32-bit targets:
+
+  include/linux/bitops.h:75:41: error: shift count >= width of type [-Werror,-Wshift-count-overflow]
+          return sizeof(w) == 4 ? hweight32(w) : hweight64(w);
+                                                 ^~~~~~~~~~~~
+  include/asm-generic/bitops/const_hweight.h:29:49: note: expanded from macro 'hweight64'
+   define hweight64(w) (__builtin_constant_p(w) ? __const_hweight64(w) : __arch_hweight64(w))
+                                                  ^~~~~~~~~~~~~~~~~~~~
+  include/asm-generic/bitops/const_hweight.h:21:76: note: expanded from macro '__const_hweight64'
+   define __const_hweight64(w) (__const_hweight32(w) + __const_hweight32((w) >> 32))
+                                                                             ^  ~~
+  include/asm-generic/bitops/const_hweight.h:20:49: note: expanded from macro '__const_hweight32'
+   define __const_hweight32(w) (__const_hweight16(w) + __const_hweight16((w) >> 16))
+                                                  ^
+  include/asm-generic/bitops/const_hweight.h:19:72: note: expanded from macro '__const_hweight16'
+   define __const_hweight16(w) (__const_hweight8(w)  + __const_hweight8((w)  >> 8 ))
+                                                                         ^
+  include/asm-generic/bitops/const_hweight.h:12:9: note: expanded from macro '__const_hweight8'
+            (!!((w) & (1ULL << 2))) +     \
+
+Adding an explicit cast to __u64 avoids that warning and makes it easier
+to read other output.
+
+Signed-off-by: Arnd Bergmann <arnd@arndb.de>
+Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
+Acked-by: Christian Brauner <christian.brauner@ubuntu.com>
+Cc: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
+Cc: Rasmus Villemoes <linux@rasmusvillemoes.dk>
+Cc: Josh Poimboeuf <jpoimboe@redhat.com>
+Cc: Nick Desaulniers <ndesaulniers@google.com>
+Link: http://lkml.kernel.org/r/20200505135513.65265-1-arnd@arndb.de
+Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ include/linux/bitops.h | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/include/linux/bitops.h b/include/linux/bitops.h
+index e02cbca3cfaf0..5c1522ed2d7c7 100644
+--- a/include/linux/bitops.h
++++ b/include/linux/bitops.h
+@@ -50,7 +50,7 @@ static inline int get_bitmask_order(unsigned int count)
+ static __always_inline unsigned long hweight_long(unsigned long w)
+ {
+-      return sizeof(w) == 4 ? hweight32(w) : hweight64(w);
++      return sizeof(w) == 4 ? hweight32(w) : hweight64((__u64)w);
+ }
+ /**
+-- 
+2.25.1
+
diff --git a/queue-4.19/input-mms114-add-extra-compatible-for-mms345l.patch b/queue-4.19/input-mms114-add-extra-compatible-for-mms345l.patch
new file mode 100644 (file)
index 0000000..85feb86
--- /dev/null
@@ -0,0 +1,88 @@
+From 4148bbcad9ebd1c1c0edef2b46488203a3861e5a Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Sat, 25 Apr 2020 13:06:31 -0700
+Subject: Input: mms114 - add extra compatible for mms345l
+
+From: Stephan Gerhold <stephan@gerhold.net>
+
+[ Upstream commit 7842087b0196d674ed877d768de8f2a34d7fdc53 ]
+
+MMS345L is another first generation touch screen from Melfas,
+which uses mostly the same registers as MMS152.
+
+However, there is some garbage printed during initialization.
+Apparently MMS345L does not have the MMS152_COMPAT_GROUP register
+that is read+printed during initialization.
+
+  TSP FW Rev: bootloader 0x6 / core 0x26 / config 0x26, Compat group: \x06
+
+On earlier kernel versions the compat group was actually printed as
+an ASCII control character, seems like it gets escaped now.
+
+But we probably shouldn't print something from a random register.
+
+Add a separate "melfas,mms345l" compatible that avoids reading
+from the MMS152_COMPAT_GROUP register. This might also help in case
+there is some other device-specific quirk in the future.
+
+Signed-off-by: Stephan Gerhold <stephan@gerhold.net>
+Reviewed-by: Andi Shyti <andi@etezian.org>
+Link: https://lore.kernel.org/r/20200423102431.2715-1-stephan@gerhold.net
+Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/input/touchscreen/mms114.c | 17 +++++++++++++++--
+ 1 file changed, 15 insertions(+), 2 deletions(-)
+
+diff --git a/drivers/input/touchscreen/mms114.c b/drivers/input/touchscreen/mms114.c
+index fca908ba4841f..fb28fd2d6f1c5 100644
+--- a/drivers/input/touchscreen/mms114.c
++++ b/drivers/input/touchscreen/mms114.c
+@@ -54,6 +54,7 @@
+ enum mms_type {
+       TYPE_MMS114     = 114,
+       TYPE_MMS152     = 152,
++      TYPE_MMS345L    = 345,
+ };
+ struct mms114_data {
+@@ -250,6 +251,15 @@ static int mms114_get_version(struct mms114_data *data)
+       int error;
+       switch (data->type) {
++      case TYPE_MMS345L:
++              error = __mms114_read_reg(data, MMS152_FW_REV, 3, buf);
++              if (error)
++                      return error;
++
++              dev_info(dev, "TSP FW Rev: bootloader 0x%x / core 0x%x / config 0x%x\n",
++                       buf[0], buf[1], buf[2]);
++              break;
++
+       case TYPE_MMS152:
+               error = __mms114_read_reg(data, MMS152_FW_REV, 3, buf);
+               if (error)
+@@ -287,8 +297,8 @@ static int mms114_setup_regs(struct mms114_data *data)
+       if (error < 0)
+               return error;
+-      /* MMS152 has no configuration or power on registers */
+-      if (data->type == TYPE_MMS152)
++      /* Only MMS114 has configuration and power on registers */
++      if (data->type != TYPE_MMS114)
+               return 0;
+       error = mms114_set_active(data, true);
+@@ -598,6 +608,9 @@ static const struct of_device_id mms114_dt_match[] = {
+       }, {
+               .compatible = "melfas,mms152",
+               .data = (void *)TYPE_MMS152,
++      }, {
++              .compatible = "melfas,mms345l",
++              .data = (void *)TYPE_MMS345L,
+       },
+       { }
+ };
+-- 
+2.25.1
+
diff --git a/queue-4.19/ipmi-use-vzalloc-instead-of-kmalloc-for-user-creatio.patch b/queue-4.19/ipmi-use-vzalloc-instead-of-kmalloc-for-user-creatio.patch
new file mode 100644 (file)
index 0000000..5c7a690
--- /dev/null
@@ -0,0 +1,87 @@
+From 21c27151bd6e1ad6c499d749097e167c9520a9ca Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Fri, 17 Apr 2020 12:48:28 +0800
+Subject: ipmi: use vzalloc instead of kmalloc for user creation
+
+From: Feng Tang <feng.tang@intel.com>
+
+[ Upstream commit 7c47a219b95d0e06b5ef5fcc7bad807895015eac ]
+
+We met mulitple times of failure of staring bmc-watchdog,
+due to the runtime memory allocation failure of order 4.
+
+     bmc-watchdog: page allocation failure: order:4, mode:0x40cc0(GFP_KERNEL|__GFP_COMP), nodemask=(null),cpuset=/,mems_allowed=0-1
+     CPU: 1 PID: 2571 Comm: bmc-watchdog Not tainted 5.5.0-00045-g7d6bb61d6188c #1
+     Hardware name: Intel Corporation S2600WFT/S2600WFT, BIOS SE5C620.86B.00.01.0015.110720180833 11/07/2018
+     Call Trace:
+      dump_stack+0x66/0x8b
+      warn_alloc+0xfe/0x160
+      __alloc_pages_slowpath+0xd3e/0xd80
+      __alloc_pages_nodemask+0x2f0/0x340
+      kmalloc_order+0x18/0x70
+      kmalloc_order_trace+0x1d/0xb0
+      ipmi_create_user+0x55/0x2c0 [ipmi_msghandler]
+      ipmi_open+0x72/0x110 [ipmi_devintf]
+      chrdev_open+0xcb/0x1e0
+      do_dentry_open+0x1ce/0x380
+      path_openat+0x305/0x14f0
+      do_filp_open+0x9b/0x110
+      do_sys_open+0x1bd/0x250
+      do_syscall_64+0x5b/0x1f0
+      entry_SYSCALL_64_after_hwframe+0x44/0xa9
+
+Using vzalloc/vfree for creating ipmi_user heals the
+problem
+
+Thanks to Stephen Rothwell for finding the vmalloc.h
+inclusion issue.
+
+Signed-off-by: Feng Tang <feng.tang@intel.com>
+Signed-off-by: Corey Minyard <cminyard@mvista.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/char/ipmi/ipmi_msghandler.c | 7 ++++---
+ 1 file changed, 4 insertions(+), 3 deletions(-)
+
+diff --git a/drivers/char/ipmi/ipmi_msghandler.c b/drivers/char/ipmi/ipmi_msghandler.c
+index 69734b1df7927..cb85516e1eb3c 100644
+--- a/drivers/char/ipmi/ipmi_msghandler.c
++++ b/drivers/char/ipmi/ipmi_msghandler.c
+@@ -30,6 +30,7 @@
+ #include <linux/workqueue.h>
+ #include <linux/uuid.h>
+ #include <linux/nospec.h>
++#include <linux/vmalloc.h>
+ #define PFX "IPMI message handler: "
+@@ -1089,7 +1090,7 @@ static void free_user_work(struct work_struct *work)
+                                             remove_work);
+       cleanup_srcu_struct(&user->release_barrier);
+-      kfree(user);
++      vfree(user);
+ }
+ int ipmi_create_user(unsigned int          if_num,
+@@ -1121,7 +1122,7 @@ int ipmi_create_user(unsigned int          if_num,
+       if (rv)
+               return rv;
+-      new_user = kmalloc(sizeof(*new_user), GFP_KERNEL);
++      new_user = vzalloc(sizeof(*new_user));
+       if (!new_user)
+               return -ENOMEM;
+@@ -1170,7 +1171,7 @@ int ipmi_create_user(unsigned int          if_num,
+ out_kfree:
+       srcu_read_unlock(&ipmi_interfaces_srcu, index);
+-      kfree(new_user);
++      vfree(new_user);
+       return rv;
+ }
+ EXPORT_SYMBOL(ipmi_create_user);
+-- 
+2.25.1
+
diff --git a/queue-4.19/kvm-ppc-book3s-hv-ignore-kmemleak-false-positives.patch b/queue-4.19/kvm-ppc-book3s-hv-ignore-kmemleak-false-positives.patch
new file mode 100644 (file)
index 0000000..746cbeb
--- /dev/null
@@ -0,0 +1,101 @@
+From 48d975e3bbddb42597d576d049b9ab13376e6f01 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Wed, 13 May 2020 09:39:15 -0400
+Subject: KVM: PPC: Book3S HV: Ignore kmemleak false positives
+
+From: Qian Cai <cai@lca.pw>
+
+[ Upstream commit 0aca8a5575544bd21b3363058afb8f1e81505150 ]
+
+kvmppc_pmd_alloc() and kvmppc_pte_alloc() allocate some memory but then
+pud_populate() and pmd_populate() will use __pa() to reference the newly
+allocated memory.
+
+Since kmemleak is unable to track the physical memory resulting in false
+positives, silence those by using kmemleak_ignore().
+
+unreferenced object 0xc000201c382a1000 (size 4096):
+ comm "qemu-kvm", pid 124828, jiffies 4295733767 (age 341.250s)
+ hex dump (first 32 bytes):
+   c0 00 20 09 f4 60 03 87 c0 00 20 10 72 a0 03 87  .. ..`.... .r...
+   c0 00 20 0e 13 a0 03 87 c0 00 20 1b dc c0 03 87  .. ....... .....
+ backtrace:
+   [<000000004cc2790f>] kvmppc_create_pte+0x838/0xd20 [kvm_hv]
+   kvmppc_pmd_alloc at arch/powerpc/kvm/book3s_64_mmu_radix.c:366
+   (inlined by) kvmppc_create_pte at arch/powerpc/kvm/book3s_64_mmu_radix.c:590
+   [<00000000d123c49a>] kvmppc_book3s_instantiate_page+0x2e0/0x8c0 [kvm_hv]
+   [<00000000bb549087>] kvmppc_book3s_radix_page_fault+0x1b4/0x2b0 [kvm_hv]
+   [<0000000086dddc0e>] kvmppc_book3s_hv_page_fault+0x214/0x12a0 [kvm_hv]
+   [<000000005ae9ccc2>] kvmppc_vcpu_run_hv+0xc5c/0x15f0 [kvm_hv]
+   [<00000000d22162ff>] kvmppc_vcpu_run+0x34/0x48 [kvm]
+   [<00000000d6953bc4>] kvm_arch_vcpu_ioctl_run+0x314/0x420 [kvm]
+   [<000000002543dd54>] kvm_vcpu_ioctl+0x33c/0x950 [kvm]
+   [<0000000048155cd6>] ksys_ioctl+0xd8/0x130
+   [<0000000041ffeaa7>] sys_ioctl+0x28/0x40
+   [<000000004afc4310>] system_call_exception+0x114/0x1e0
+   [<00000000fb70a873>] system_call_common+0xf0/0x278
+unreferenced object 0xc0002001f0c03900 (size 256):
+ comm "qemu-kvm", pid 124830, jiffies 4295735235 (age 326.570s)
+ hex dump (first 32 bytes):
+   c0 00 20 10 fa a0 03 87 c0 00 20 10 fa a1 03 87  .. ....... .....
+   c0 00 20 10 fa a2 03 87 c0 00 20 10 fa a3 03 87  .. ....... .....
+ backtrace:
+   [<0000000023f675b8>] kvmppc_create_pte+0x854/0xd20 [kvm_hv]
+   kvmppc_pte_alloc at arch/powerpc/kvm/book3s_64_mmu_radix.c:356
+   (inlined by) kvmppc_create_pte at arch/powerpc/kvm/book3s_64_mmu_radix.c:593
+   [<00000000d123c49a>] kvmppc_book3s_instantiate_page+0x2e0/0x8c0 [kvm_hv]
+   [<00000000bb549087>] kvmppc_book3s_radix_page_fault+0x1b4/0x2b0 [kvm_hv]
+   [<0000000086dddc0e>] kvmppc_book3s_hv_page_fault+0x214/0x12a0 [kvm_hv]
+   [<000000005ae9ccc2>] kvmppc_vcpu_run_hv+0xc5c/0x15f0 [kvm_hv]
+   [<00000000d22162ff>] kvmppc_vcpu_run+0x34/0x48 [kvm]
+   [<00000000d6953bc4>] kvm_arch_vcpu_ioctl_run+0x314/0x420 [kvm]
+   [<000000002543dd54>] kvm_vcpu_ioctl+0x33c/0x950 [kvm]
+   [<0000000048155cd6>] ksys_ioctl+0xd8/0x130
+   [<0000000041ffeaa7>] sys_ioctl+0x28/0x40
+   [<000000004afc4310>] system_call_exception+0x114/0x1e0
+   [<00000000fb70a873>] system_call_common+0xf0/0x278
+
+Signed-off-by: Qian Cai <cai@lca.pw>
+Signed-off-by: Paul Mackerras <paulus@ozlabs.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ arch/powerpc/kvm/book3s_64_mmu_radix.c | 16 ++++++++++++++--
+ 1 file changed, 14 insertions(+), 2 deletions(-)
+
+diff --git a/arch/powerpc/kvm/book3s_64_mmu_radix.c b/arch/powerpc/kvm/book3s_64_mmu_radix.c
+index 998f8d089ac7e..df0f08cb821b5 100644
+--- a/arch/powerpc/kvm/book3s_64_mmu_radix.c
++++ b/arch/powerpc/kvm/book3s_64_mmu_radix.c
+@@ -171,7 +171,13 @@ static struct kmem_cache *kvm_pmd_cache;
+ static pte_t *kvmppc_pte_alloc(void)
+ {
+-      return kmem_cache_alloc(kvm_pte_cache, GFP_KERNEL);
++      pte_t *pte;
++
++      pte = kmem_cache_alloc(kvm_pte_cache, GFP_KERNEL);
++      /* pmd_populate() will only reference _pa(pte). */
++      kmemleak_ignore(pte);
++
++      return pte;
+ }
+ static void kvmppc_pte_free(pte_t *ptep)
+@@ -187,7 +193,13 @@ static inline int pmd_is_leaf(pmd_t pmd)
+ static pmd_t *kvmppc_pmd_alloc(void)
+ {
+-      return kmem_cache_alloc(kvm_pmd_cache, GFP_KERNEL);
++      pmd_t *pmd;
++
++      pmd = kmem_cache_alloc(kvm_pmd_cache, GFP_KERNEL);
++      /* pud_populate() will only reference _pa(pmd). */
++      kmemleak_ignore(pmd);
++
++      return pmd;
+ }
+ static void kvmppc_pmd_free(pmd_t *pmdp)
+-- 
+2.25.1
+
diff --git a/queue-4.19/lib-zlib-remove-outdated-and-incorrect-pre-increment.patch b/queue-4.19/lib-zlib-remove-outdated-and-incorrect-pre-increment.patch
new file mode 100644 (file)
index 0000000..7da2676
--- /dev/null
@@ -0,0 +1,279 @@
+From cb179bb9d63ff4815bcd87b4fa60cebba2893864 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Thu, 4 Jun 2020 16:50:17 -0700
+Subject: lib/zlib: remove outdated and incorrect pre-increment optimization
+
+From: Jann Horn <jannh@google.com>
+
+[ Upstream commit acaab7335bd6f0c0b54ce3a00bd7f18222ce0f5f ]
+
+The zlib inflate code has an old micro-optimization based on the
+assumption that for pre-increment memory accesses, the compiler will
+generate code that fits better into the processor's pipeline than what
+would be generated for post-increment memory accesses.
+
+This optimization was already removed in upstream zlib in 2016:
+https://github.com/madler/zlib/commit/9aaec95e8211
+
+This optimization causes UB according to C99, which says in section 6.5.6
+"Additive operators": "If both the pointer operand and the result point to
+elements of the same array object, or one past the last element of the
+array object, the evaluation shall not produce an overflow; otherwise, the
+behavior is undefined".
+
+This UB is not only a theoretical concern, but can also cause trouble for
+future work on compiler-based sanitizers.
+
+According to the zlib commit, this optimization also is not optimal
+anymore with modern compilers.
+
+Replace uses of OFF, PUP and UP_UNALIGNED with their definitions in the
+POSTINC case, and remove the macro definitions, just like in the upstream
+patch.
+
+Signed-off-by: Jann Horn <jannh@google.com>
+Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
+Cc: Mikhail Zaslonko <zaslonko@linux.ibm.com>
+Link: http://lkml.kernel.org/r/20200507123112.252723-1-jannh@google.com
+Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ lib/zlib_inflate/inffast.c | 91 +++++++++++++++-----------------------
+ 1 file changed, 35 insertions(+), 56 deletions(-)
+
+diff --git a/lib/zlib_inflate/inffast.c b/lib/zlib_inflate/inffast.c
+index 2c13ecc5bb2c7..ed1f3df272602 100644
+--- a/lib/zlib_inflate/inffast.c
++++ b/lib/zlib_inflate/inffast.c
+@@ -10,17 +10,6 @@
+ #ifndef ASMINF
+-/* Allow machine dependent optimization for post-increment or pre-increment.
+-   Based on testing to date,
+-   Pre-increment preferred for:
+-   - PowerPC G3 (Adler)
+-   - MIPS R5000 (Randers-Pehrson)
+-   Post-increment preferred for:
+-   - none
+-   No measurable difference:
+-   - Pentium III (Anderson)
+-   - M68060 (Nikl)
+- */
+ union uu {
+       unsigned short us;
+       unsigned char b[2];
+@@ -38,16 +27,6 @@ get_unaligned16(const unsigned short *p)
+       return mm.us;
+ }
+-#ifdef POSTINC
+-#  define OFF 0
+-#  define PUP(a) *(a)++
+-#  define UP_UNALIGNED(a) get_unaligned16((a)++)
+-#else
+-#  define OFF 1
+-#  define PUP(a) *++(a)
+-#  define UP_UNALIGNED(a) get_unaligned16(++(a))
+-#endif
+-
+ /*
+    Decode literal, length, and distance codes and write out the resulting
+    literal and match bytes until either not enough input or output is
+@@ -115,9 +94,9 @@ void inflate_fast(z_streamp strm, unsigned start)
+     /* copy state to local variables */
+     state = (struct inflate_state *)strm->state;
+-    in = strm->next_in - OFF;
++    in = strm->next_in;
+     last = in + (strm->avail_in - 5);
+-    out = strm->next_out - OFF;
++    out = strm->next_out;
+     beg = out - (start - strm->avail_out);
+     end = out + (strm->avail_out - 257);
+ #ifdef INFLATE_STRICT
+@@ -138,9 +117,9 @@ void inflate_fast(z_streamp strm, unsigned start)
+        input data or output space */
+     do {
+         if (bits < 15) {
+-            hold += (unsigned long)(PUP(in)) << bits;
++            hold += (unsigned long)(*in++) << bits;
+             bits += 8;
+-            hold += (unsigned long)(PUP(in)) << bits;
++            hold += (unsigned long)(*in++) << bits;
+             bits += 8;
+         }
+         this = lcode[hold & lmask];
+@@ -150,14 +129,14 @@ void inflate_fast(z_streamp strm, unsigned start)
+         bits -= op;
+         op = (unsigned)(this.op);
+         if (op == 0) {                          /* literal */
+-            PUP(out) = (unsigned char)(this.val);
++            *out++ = (unsigned char)(this.val);
+         }
+         else if (op & 16) {                     /* length base */
+             len = (unsigned)(this.val);
+             op &= 15;                           /* number of extra bits */
+             if (op) {
+                 if (bits < op) {
+-                    hold += (unsigned long)(PUP(in)) << bits;
++                    hold += (unsigned long)(*in++) << bits;
+                     bits += 8;
+                 }
+                 len += (unsigned)hold & ((1U << op) - 1);
+@@ -165,9 +144,9 @@ void inflate_fast(z_streamp strm, unsigned start)
+                 bits -= op;
+             }
+             if (bits < 15) {
+-                hold += (unsigned long)(PUP(in)) << bits;
++                hold += (unsigned long)(*in++) << bits;
+                 bits += 8;
+-                hold += (unsigned long)(PUP(in)) << bits;
++                hold += (unsigned long)(*in++) << bits;
+                 bits += 8;
+             }
+             this = dcode[hold & dmask];
+@@ -180,10 +159,10 @@ void inflate_fast(z_streamp strm, unsigned start)
+                 dist = (unsigned)(this.val);
+                 op &= 15;                       /* number of extra bits */
+                 if (bits < op) {
+-                    hold += (unsigned long)(PUP(in)) << bits;
++                    hold += (unsigned long)(*in++) << bits;
+                     bits += 8;
+                     if (bits < op) {
+-                        hold += (unsigned long)(PUP(in)) << bits;
++                        hold += (unsigned long)(*in++) << bits;
+                         bits += 8;
+                     }
+                 }
+@@ -205,13 +184,13 @@ void inflate_fast(z_streamp strm, unsigned start)
+                         state->mode = BAD;
+                         break;
+                     }
+-                    from = window - OFF;
++                    from = window;
+                     if (write == 0) {           /* very common case */
+                         from += wsize - op;
+                         if (op < len) {         /* some from window */
+                             len -= op;
+                             do {
+-                                PUP(out) = PUP(from);
++                                *out++ = *from++;
+                             } while (--op);
+                             from = out - dist;  /* rest from output */
+                         }
+@@ -222,14 +201,14 @@ void inflate_fast(z_streamp strm, unsigned start)
+                         if (op < len) {         /* some from end of window */
+                             len -= op;
+                             do {
+-                                PUP(out) = PUP(from);
++                                *out++ = *from++;
+                             } while (--op);
+-                            from = window - OFF;
++                            from = window;
+                             if (write < len) {  /* some from start of window */
+                                 op = write;
+                                 len -= op;
+                                 do {
+-                                    PUP(out) = PUP(from);
++                                    *out++ = *from++;
+                                 } while (--op);
+                                 from = out - dist;      /* rest from output */
+                             }
+@@ -240,21 +219,21 @@ void inflate_fast(z_streamp strm, unsigned start)
+                         if (op < len) {         /* some from window */
+                             len -= op;
+                             do {
+-                                PUP(out) = PUP(from);
++                                *out++ = *from++;
+                             } while (--op);
+                             from = out - dist;  /* rest from output */
+                         }
+                     }
+                     while (len > 2) {
+-                        PUP(out) = PUP(from);
+-                        PUP(out) = PUP(from);
+-                        PUP(out) = PUP(from);
++                        *out++ = *from++;
++                        *out++ = *from++;
++                        *out++ = *from++;
+                         len -= 3;
+                     }
+                     if (len) {
+-                        PUP(out) = PUP(from);
++                        *out++ = *from++;
+                         if (len > 1)
+-                            PUP(out) = PUP(from);
++                            *out++ = *from++;
+                     }
+                 }
+                 else {
+@@ -264,29 +243,29 @@ void inflate_fast(z_streamp strm, unsigned start)
+                     from = out - dist;          /* copy direct from output */
+                   /* minimum length is three */
+                   /* Align out addr */
+-                  if (!((long)(out - 1 + OFF) & 1)) {
+-                      PUP(out) = PUP(from);
++                  if (!((long)(out - 1) & 1)) {
++                      *out++ = *from++;
+                       len--;
+                   }
+-                  sout = (unsigned short *)(out - OFF);
++                  sout = (unsigned short *)(out);
+                   if (dist > 2) {
+                       unsigned short *sfrom;
+-                      sfrom = (unsigned short *)(from - OFF);
++                      sfrom = (unsigned short *)(from);
+                       loops = len >> 1;
+                       do
+ #ifdef CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS
+-                          PUP(sout) = PUP(sfrom);
++                          *sout++ = *sfrom++;
+ #else
+-                          PUP(sout) = UP_UNALIGNED(sfrom);
++                          *sout++ = get_unaligned16(sfrom++);
+ #endif
+                       while (--loops);
+-                      out = (unsigned char *)sout + OFF;
+-                      from = (unsigned char *)sfrom + OFF;
++                      out = (unsigned char *)sout;
++                      from = (unsigned char *)sfrom;
+                   } else { /* dist == 1 or dist == 2 */
+                       unsigned short pat16;
+-                      pat16 = *(sout-1+OFF);
++                      pat16 = *(sout-1);
+                       if (dist == 1) {
+                               union uu mm;
+                               /* copy one char pattern to both bytes */
+@@ -296,12 +275,12 @@ void inflate_fast(z_streamp strm, unsigned start)
+                       }
+                       loops = len >> 1;
+                       do
+-                          PUP(sout) = pat16;
++                          *sout++ = pat16;
+                       while (--loops);
+-                      out = (unsigned char *)sout + OFF;
++                      out = (unsigned char *)sout;
+                   }
+                   if (len & 1)
+-                      PUP(out) = PUP(from);
++                      *out++ = *from++;
+                 }
+             }
+             else if ((op & 64) == 0) {          /* 2nd level distance code */
+@@ -336,8 +315,8 @@ void inflate_fast(z_streamp strm, unsigned start)
+     hold &= (1U << bits) - 1;
+     /* update state and return */
+-    strm->next_in = in + OFF;
+-    strm->next_out = out + OFF;
++    strm->next_in = in;
++    strm->next_out = out;
+     strm->avail_in = (unsigned)(in < last ? 5 + (last - in) : 5 - (in - last));
+     strm->avail_out = (unsigned)(out < end ?
+                                  257 + (end - out) : 257 - (out - end));
+-- 
+2.25.1
+
diff --git a/queue-4.19/libata-use-per-port-sync-for-detach.patch b/queue-4.19/libata-use-per-port-sync-for-detach.patch
new file mode 100644 (file)
index 0000000..9fc44cc
--- /dev/null
@@ -0,0 +1,93 @@
+From b0d2ee778dd5682ed0c5d3c0f3048d3da639267f Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Wed, 3 Jun 2020 15:48:19 +0800
+Subject: libata: Use per port sync for detach
+
+From: Kai-Heng Feng <kai.heng.feng@canonical.com>
+
+[ Upstream commit b5292111de9bb70cba3489075970889765302136 ]
+
+Commit 130f4caf145c ("libata: Ensure ata_port probe has completed before
+detach") may cause system freeze during suspend.
+
+Using async_synchronize_full() in PM callbacks is wrong, since async
+callbacks that are already scheduled may wait for not-yet-scheduled
+callbacks, causes a circular dependency.
+
+Instead of using big hammer like async_synchronize_full(), use async
+cookie to make sure port probe are synced, without affecting other
+scheduled PM callbacks.
+
+Fixes: 130f4caf145c ("libata: Ensure ata_port probe has completed before detach")
+Suggested-by: John Garry <john.garry@huawei.com>
+Signed-off-by: Kai-Heng Feng <kai.heng.feng@canonical.com>
+Tested-by: John Garry <john.garry@huawei.com>
+BugLink: https://bugs.launchpad.net/bugs/1867983
+Signed-off-by: Jens Axboe <axboe@kernel.dk>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/ata/libata-core.c | 11 +++++------
+ include/linux/libata.h    |  3 +++
+ 2 files changed, 8 insertions(+), 6 deletions(-)
+
+diff --git a/drivers/ata/libata-core.c b/drivers/ata/libata-core.c
+index 75d582ca917ff..6b372fa583822 100644
+--- a/drivers/ata/libata-core.c
++++ b/drivers/ata/libata-core.c
+@@ -57,7 +57,6 @@
+ #include <linux/workqueue.h>
+ #include <linux/scatterlist.h>
+ #include <linux/io.h>
+-#include <linux/async.h>
+ #include <linux/log2.h>
+ #include <linux/slab.h>
+ #include <linux/glob.h>
+@@ -6610,7 +6609,7 @@ int ata_host_register(struct ata_host *host, struct scsi_host_template *sht)
+       /* perform each probe asynchronously */
+       for (i = 0; i < host->n_ports; i++) {
+               struct ata_port *ap = host->ports[i];
+-              async_schedule(async_port_probe, ap);
++              ap->cookie = async_schedule(async_port_probe, ap);
+       }
+       return 0;
+@@ -6750,11 +6749,11 @@ void ata_host_detach(struct ata_host *host)
+ {
+       int i;
+-      /* Ensure ata_port probe has completed */
+-      async_synchronize_full();
+-
+-      for (i = 0; i < host->n_ports; i++)
++      for (i = 0; i < host->n_ports; i++) {
++              /* Ensure ata_port probe has completed */
++              async_synchronize_cookie(host->ports[i]->cookie + 1);
+               ata_port_detach(host->ports[i]);
++      }
+       /* the host is dead now, dissociate ACPI */
+       ata_acpi_dissociate(host);
+diff --git a/include/linux/libata.h b/include/linux/libata.h
+index 75a916d7ab2a4..ed1453c15041d 100644
+--- a/include/linux/libata.h
++++ b/include/linux/libata.h
+@@ -38,6 +38,7 @@
+ #include <linux/acpi.h>
+ #include <linux/cdrom.h>
+ #include <linux/sched.h>
++#include <linux/async.h>
+ /*
+  * Define if arch has non-standard setup.  This is a _PCI_ standard
+@@ -887,6 +888,8 @@ struct ata_port {
+       struct timer_list       fastdrain_timer;
+       unsigned long           fastdrain_cnt;
++      async_cookie_t          cookie;
++
+       int                     em_message_type;
+       void                    *private_data;
+-- 
+2.25.1
+
diff --git a/queue-4.19/m68k-pci-fix-a-memory-leak-in-an-error-handling-path.patch b/queue-4.19/m68k-pci-fix-a-memory-leak-in-an-error-handling-path.patch
new file mode 100644 (file)
index 0000000..fc078c6
--- /dev/null
@@ -0,0 +1,40 @@
+From 115ad266ba2befca168aa5e193823361484cc616 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Sat, 18 Apr 2020 09:07:51 +0200
+Subject: m68k/PCI: Fix a memory leak in an error handling path
+
+From: Christophe JAILLET <christophe.jaillet@wanadoo.fr>
+
+[ Upstream commit c3f4ec050f56eeab7c1f290321f9b762c95bd332 ]
+
+If 'ioremap' fails, we must free 'bridge', as done in other error handling
+path bellow.
+
+Fixes: 19cc4c843f40 ("m68k/PCI: Replace pci_fixup_irqs() call with host bridge IRQ mapping hooks")
+Signed-off-by: Christophe JAILLET <christophe.jaillet@wanadoo.fr>
+Reviewed-by: Geert Uytterhoeven <geert@linux-m68k.org>
+Signed-off-by: Greg Ungerer <gerg@linux-m68k.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ arch/m68k/coldfire/pci.c | 4 +++-
+ 1 file changed, 3 insertions(+), 1 deletion(-)
+
+diff --git a/arch/m68k/coldfire/pci.c b/arch/m68k/coldfire/pci.c
+index 62b0eb6cf69a3..84eab0f5e00af 100644
+--- a/arch/m68k/coldfire/pci.c
++++ b/arch/m68k/coldfire/pci.c
+@@ -216,8 +216,10 @@ static int __init mcf_pci_init(void)
+       /* Keep a virtual mapping to IO/config space active */
+       iospace = (unsigned long) ioremap(PCI_IO_PA, PCI_IO_SIZE);
+-      if (iospace == 0)
++      if (iospace == 0) {
++              pci_free_host_bridge(bridge);
+               return -ENODEV;
++      }
+       pr_info("Coldfire: PCI IO/config window mapped to 0x%x\n",
+               (u32) iospace);
+-- 
+2.25.1
+
diff --git a/queue-4.19/mfd-wm8994-fix-driver-operation-if-loaded-as-modules.patch b/queue-4.19/mfd-wm8994-fix-driver-operation-if-loaded-as-modules.patch
new file mode 100644 (file)
index 0000000..36d60f6
--- /dev/null
@@ -0,0 +1,38 @@
+From 825b9ea6f0607d80005e32698e52f559ee68e78f Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Mon, 27 Apr 2020 09:48:29 +0200
+Subject: mfd: wm8994: Fix driver operation if loaded as modules
+
+From: Marek Szyprowski <m.szyprowski@samsung.com>
+
+[ Upstream commit d4f9b5428b53dd67f49ee8deed8d4366ed6b1933 ]
+
+WM8994 chip has built-in regulators, which might be used for chip
+operation. They are controlled by a separate wm8994-regulator driver,
+which should be loaded before this driver calls regulator_get(), because
+that driver also provides consumer-supply mapping for the them. If that
+driver is not yet loaded, regulator core substitute them with dummy
+regulator, what breaks chip operation, because the built-in regulators are
+never enabled. Fix this by annotating this driver with MODULE_SOFTDEP()
+"pre" dependency to "wm8994_regulator" module.
+
+Signed-off-by: Marek Szyprowski <m.szyprowski@samsung.com>
+Acked-by: Charles Keepax <ckeepax@opensource.cirrus.com>
+Signed-off-by: Lee Jones <lee.jones@linaro.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/mfd/wm8994-core.c | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/drivers/mfd/wm8994-core.c b/drivers/mfd/wm8994-core.c
+index 22bd6525e09cf..933a50049d729 100644
+--- a/drivers/mfd/wm8994-core.c
++++ b/drivers/mfd/wm8994-core.c
+@@ -704,3 +704,4 @@ module_i2c_driver(wm8994_i2c_driver);
+ MODULE_DESCRIPTION("Core support for the WM8994 audio CODEC");
+ MODULE_LICENSE("GPL");
+ MODULE_AUTHOR("Mark Brown <broonie@opensource.wolfsonmicro.com>");
++MODULE_SOFTDEP("pre: wm8994_regulator");
+-- 
+2.25.1
+
diff --git a/queue-4.19/mksysmap-fix-the-mismatch-of-.l-symbols-in-system.ma.patch b/queue-4.19/mksysmap-fix-the-mismatch-of-.l-symbols-in-system.ma.patch
new file mode 100644 (file)
index 0000000..e3c166d
--- /dev/null
@@ -0,0 +1,46 @@
+From 69c9f13a1ffc4c83514d4c8799c55fad326328cb Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Tue, 2 Jun 2020 15:45:17 +0800
+Subject: mksysmap: Fix the mismatch of '.L' symbols in System.map
+
+From: ashimida <ashimida@linux.alibaba.com>
+
+[ Upstream commit 72d24accf02add25e08733f0ecc93cf10fcbd88c ]
+
+When System.map was generated, the kernel used mksysmap to
+filter the kernel symbols, but all the symbols with the
+second letter 'L' in the kernel were filtered out, not just
+the symbols starting with 'dot + L'.
+
+For example:
+ashimida@ubuntu:~/linux$ cat System.map |grep ' .L'
+ashimida@ubuntu:~/linux$ nm -n vmlinux |grep ' .L'
+ffff0000088028e0 t bLength_show
+......
+ffff0000092e0408 b PLLP_OUTC_lock
+ffff0000092e0410 b PLLP_OUTA_lock
+
+The original intent should be to filter out all local symbols
+starting with '.L', so the dot should be escaped.
+
+Fixes: 00902e984732 ("mksysmap: Add h8300 local symbol pattern")
+Signed-off-by: ashimida <ashimida@linux.alibaba.com>
+Signed-off-by: Masahiro Yamada <masahiroy@kernel.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ scripts/mksysmap | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/scripts/mksysmap b/scripts/mksysmap
+index a35acc0d0b827..9aa23d15862a0 100755
+--- a/scripts/mksysmap
++++ b/scripts/mksysmap
+@@ -41,4 +41,4 @@
+ # so we just ignore them to let readprofile continue to work.
+ # (At least sparc64 has __crc_ in the middle).
+-$NM -n $1 | grep -v '\( [aNUw] \)\|\(__crc_\)\|\( \$[adt]\)\|\( .L\)' > $2
++$NM -n $1 | grep -v '\( [aNUw] \)\|\(__crc_\)\|\( \$[adt]\)\|\( \.L\)' > $2
+-- 
+2.25.1
+
diff --git a/queue-4.19/net-filter-permit-reading-net-in-load_bytes_relative.patch b/queue-4.19/net-filter-permit-reading-net-in-load_bytes_relative.patch
new file mode 100644 (file)
index 0000000..efb5905
--- /dev/null
@@ -0,0 +1,74 @@
+From bedb5bcfdfb7b2af3bf03c9d2ec9a34b1af95631 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Wed, 10 Jun 2020 13:41:39 -0500
+Subject: net/filter: Permit reading NET in load_bytes_relative when MAC not
+ set
+
+From: YiFei Zhu <zhuyifei1999@gmail.com>
+
+[ Upstream commit 0f5d82f187e1beda3fe7295dfc500af266a5bd80 ]
+
+Added a check in the switch case on start_header that checks for
+the existence of the header, and in the case that MAC is not set
+and the caller requests for MAC, -EFAULT. If the caller requests
+for NET then MAC's existence is completely ignored.
+
+There is no function to check NET header's existence and as far
+as cgroup_skb/egress is concerned it should always be set.
+
+Removed for ptr >= the start of header, considering offset is
+bounded unsigned and should always be true. len <= end - mac is
+redundant to ptr + len <= end.
+
+Fixes: 3eee1f75f2b9 ("bpf: fix bpf_skb_load_bytes_relative pkt length check")
+Signed-off-by: YiFei Zhu <zhuyifei@google.com>
+Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
+Reviewed-by: Stanislav Fomichev <sdf@google.com>
+Link: https://lore.kernel.org/bpf/76bb820ddb6a95f59a772ecbd8c8a336f646b362.1591812755.git.zhuyifei@google.com
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ net/core/filter.c | 16 +++++++++-------
+ 1 file changed, 9 insertions(+), 7 deletions(-)
+
+diff --git a/net/core/filter.c b/net/core/filter.c
+index 40b3af05c883c..b5521b60a2d4f 100644
+--- a/net/core/filter.c
++++ b/net/core/filter.c
+@@ -1730,25 +1730,27 @@ BPF_CALL_5(bpf_skb_load_bytes_relative, const struct sk_buff *, skb,
+          u32, offset, void *, to, u32, len, u32, start_header)
+ {
+       u8 *end = skb_tail_pointer(skb);
+-      u8 *net = skb_network_header(skb);
+-      u8 *mac = skb_mac_header(skb);
+-      u8 *ptr;
++      u8 *start, *ptr;
+-      if (unlikely(offset > 0xffff || len > (end - mac)))
++      if (unlikely(offset > 0xffff))
+               goto err_clear;
+       switch (start_header) {
+       case BPF_HDR_START_MAC:
+-              ptr = mac + offset;
++              if (unlikely(!skb_mac_header_was_set(skb)))
++                      goto err_clear;
++              start = skb_mac_header(skb);
+               break;
+       case BPF_HDR_START_NET:
+-              ptr = net + offset;
++              start = skb_network_header(skb);
+               break;
+       default:
+               goto err_clear;
+       }
+-      if (likely(ptr >= mac && ptr + len <= end)) {
++      ptr = start + offset;
++
++      if (likely(ptr + len <= end)) {
+               memcpy(to, ptr, len);
+               return 0;
+       }
+-- 
+2.25.1
+
diff --git a/queue-4.19/net-sunrpc-fix-off-by-one-issues-in-rpc_ntop6.patch b/queue-4.19/net-sunrpc-fix-off-by-one-issues-in-rpc_ntop6.patch
new file mode 100644 (file)
index 0000000..b260483
--- /dev/null
@@ -0,0 +1,45 @@
+From b0e9d6af81ee177f9f8db4d1dc10d55833ed909f Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Sat, 28 Mar 2020 14:56:55 +0300
+Subject: net: sunrpc: Fix off-by-one issues in 'rpc_ntop6'
+
+From: Fedor Tokarev <ftokarev@gmail.com>
+
+[ Upstream commit 118917d696dc59fd3e1741012c2f9db2294bed6f ]
+
+Fix off-by-one issues in 'rpc_ntop6':
+ - 'snprintf' returns the number of characters which would have been
+   written if enough space had been available, excluding the terminating
+   null byte. Thus, a return value of 'sizeof(scopebuf)' means that the
+   last character was dropped.
+ - 'strcat' adds a terminating null byte to the string, thus if len ==
+   buflen, the null byte is written past the end of the buffer.
+
+Signed-off-by: Fedor Tokarev <ftokarev@gmail.com>
+Signed-off-by: Anna Schumaker <Anna.Schumaker@Netapp.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ net/sunrpc/addr.c | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/net/sunrpc/addr.c b/net/sunrpc/addr.c
+index 2e0a6f92e563d..8391c27855501 100644
+--- a/net/sunrpc/addr.c
++++ b/net/sunrpc/addr.c
+@@ -81,11 +81,11 @@ static size_t rpc_ntop6(const struct sockaddr *sap,
+       rc = snprintf(scopebuf, sizeof(scopebuf), "%c%u",
+                       IPV6_SCOPE_DELIMITER, sin6->sin6_scope_id);
+-      if (unlikely((size_t)rc > sizeof(scopebuf)))
++      if (unlikely((size_t)rc >= sizeof(scopebuf)))
+               return 0;
+       len += rc;
+-      if (unlikely(len > buflen))
++      if (unlikely(len >= buflen))
+               return 0;
+       strcat(buf, scopebuf);
+-- 
+2.25.1
+
diff --git a/queue-4.19/nfsd-fix-svc_xprt-refcnt-leak-when-setup-callback-cl.patch b/queue-4.19/nfsd-fix-svc_xprt-refcnt-leak-when-setup-callback-cl.patch
new file mode 100644 (file)
index 0000000..7c34095
--- /dev/null
@@ -0,0 +1,44 @@
+From 16ceea163be4ca698ba5e7c0ddbda560d6023c3a Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Mon, 25 May 2020 22:15:41 +0800
+Subject: nfsd: Fix svc_xprt refcnt leak when setup callback client failed
+
+From: Xiyu Yang <xiyuyang19@fudan.edu.cn>
+
+[ Upstream commit a4abc6b12eb1f7a533c2e7484cfa555454ff0977 ]
+
+nfsd4_process_cb_update() invokes svc_xprt_get(), which increases the
+refcount of the "c->cn_xprt".
+
+The reference counting issue happens in one exception handling path of
+nfsd4_process_cb_update(). When setup callback client failed, the
+function forgets to decrease the refcnt increased by svc_xprt_get(),
+causing a refcnt leak.
+
+Fix this issue by calling svc_xprt_put() when setup callback client
+failed.
+
+Signed-off-by: Xiyu Yang <xiyuyang19@fudan.edu.cn>
+Signed-off-by: Xin Tan <tanxin.ctf@gmail.com>
+Signed-off-by: J. Bruce Fields <bfields@redhat.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ fs/nfsd/nfs4callback.c | 2 ++
+ 1 file changed, 2 insertions(+)
+
+diff --git a/fs/nfsd/nfs4callback.c b/fs/nfsd/nfs4callback.c
+index ebbb0285addb0..7ee417b685e98 100644
+--- a/fs/nfsd/nfs4callback.c
++++ b/fs/nfsd/nfs4callback.c
+@@ -1149,6 +1149,8 @@ static void nfsd4_process_cb_update(struct nfsd4_callback *cb)
+       err = setup_callback_client(clp, &conn, ses);
+       if (err) {
+               nfsd4_mark_cb_down(clp, err);
++              if (c)
++                      svc_xprt_put(c->cn_xprt);
+               return;
+       }
+ }
+-- 
+2.25.1
+
diff --git a/queue-4.19/nfsv4.1-fix-rpc_call_done-assignment-for-bind_conn_t.patch b/queue-4.19/nfsv4.1-fix-rpc_call_done-assignment-for-bind_conn_t.patch
new file mode 100644 (file)
index 0000000..9f903d1
--- /dev/null
@@ -0,0 +1,33 @@
+From 090329854d3beca6ae6b9492afc5d4012cc514b9 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Sun, 26 Apr 2020 11:30:00 -0400
+Subject: NFSv4.1 fix rpc_call_done assignment for BIND_CONN_TO_SESSION
+
+From: Olga Kornievskaia <olga.kornievskaia@gmail.com>
+
+[ Upstream commit 1c709b766e73e54d64b1dde1b7cfbcf25bcb15b9 ]
+
+Fixes: 02a95dee8cf0 ("NFS add callback_ops to nfs4_proc_bind_conn_to_session_callback")
+Signed-off-by: Olga Kornievskaia <kolga@netapp.com>
+Signed-off-by: Anna Schumaker <Anna.Schumaker@Netapp.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ fs/nfs/nfs4proc.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/fs/nfs/nfs4proc.c b/fs/nfs/nfs4proc.c
+index 668b648064b72..05cb68ca1ba1a 100644
+--- a/fs/nfs/nfs4proc.c
++++ b/fs/nfs/nfs4proc.c
+@@ -7624,7 +7624,7 @@ nfs4_bind_one_conn_to_session_done(struct rpc_task *task, void *calldata)
+ }
+ static const struct rpc_call_ops nfs4_bind_one_conn_to_session_ops = {
+-      .rpc_call_done =  &nfs4_bind_one_conn_to_session_done,
++      .rpc_call_done =  nfs4_bind_one_conn_to_session_done,
+ };
+ /*
+-- 
+2.25.1
+
diff --git a/queue-4.19/ntb-fix-the-default-port-and-peer-numbers-for-legacy.patch b/queue-4.19/ntb-fix-the-default-port-and-peer-numbers-for-legacy.patch
new file mode 100644 (file)
index 0000000..39ada3b
--- /dev/null
@@ -0,0 +1,69 @@
+From 9ccae404c966e007811bf18275c289ad94882471 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Wed, 9 Jan 2019 12:22:28 -0700
+Subject: NTB: Fix the default port and peer numbers for legacy drivers
+
+From: Logan Gunthorpe <logang@deltatee.com>
+
+[ Upstream commit fc8b086d9dbd57458d136c4fa70ee26f832c3a2e ]
+
+When the commit adding ntb_default_port_number() and
+ntb_default_peer_port_number()  entered the kernel there was no
+users of it so it was impossible to tell what the API needed.
+
+When a user finally landed a year later (ntb_pingpong) there were
+more NTB topologies were created and no consideration was considered
+to how other drivers had changed.
+
+Now that there is a user it can be fixed to provide a sensible default
+for the legacy drivers that do not implement ntb_{peer_}port_number().
+Seeing ntb_pingpong doesn't check error codes returning EINVAL was also
+not sensible.
+
+Patches for ntb_pingpong and ntb_perf follow (which are broken
+otherwise) to support hardware that doesn't have port numbers. This is
+important not only to not break support with existing drivers but for
+the cross link topology which, due to its perfect symmetry, cannot
+assign unique port numbers to each side.
+
+Fixes: 1e5301196a88 ("NTB: Add indexed ports NTB API")
+Signed-off-by: Logan Gunthorpe <logang@deltatee.com>
+Acked-by: Allen Hubbe <allenbh@gmail.com>
+Tested-by: Alexander Fomichev <fomichev.ru@gmail.com>
+Signed-off-by: Jon Mason <jdmason@kudzu.us>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/ntb/ntb.c | 8 ++------
+ 1 file changed, 2 insertions(+), 6 deletions(-)
+
+diff --git a/drivers/ntb/ntb.c b/drivers/ntb/ntb.c
+index 2581ab724c347..c9a0912b175fa 100644
+--- a/drivers/ntb/ntb.c
++++ b/drivers/ntb/ntb.c
+@@ -214,10 +214,8 @@ int ntb_default_port_number(struct ntb_dev *ntb)
+       case NTB_TOPO_B2B_DSD:
+               return NTB_PORT_SEC_DSD;
+       default:
+-              break;
++              return 0;
+       }
+-
+-      return -EINVAL;
+ }
+ EXPORT_SYMBOL(ntb_default_port_number);
+@@ -240,10 +238,8 @@ int ntb_default_peer_port_number(struct ntb_dev *ntb, int pidx)
+       case NTB_TOPO_B2B_DSD:
+               return NTB_PORT_PRI_USD;
+       default:
+-              break;
++              return 0;
+       }
+-
+-      return -EINVAL;
+ }
+ EXPORT_SYMBOL(ntb_default_peer_port_number);
+-- 
+2.25.1
+
diff --git a/queue-4.19/ntb-ntb_pingpong-choose-doorbells-based-on-port-numb.patch b/queue-4.19/ntb-ntb_pingpong-choose-doorbells-based-on-port-numb.patch
new file mode 100644 (file)
index 0000000..2d37ac3
--- /dev/null
@@ -0,0 +1,71 @@
+From 3f07afd4c75b4db98aa12cc22b273815585dfbc7 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Wed, 9 Jan 2019 12:22:29 -0700
+Subject: NTB: ntb_pingpong: Choose doorbells based on port number
+
+From: Logan Gunthorpe <logang@deltatee.com>
+
+[ Upstream commit ca93c45755da98302c93abdd788fc09113baf9e0 ]
+
+This commit fixes pingpong support for existing drivers that do not
+implement ntb_default_port_number() and ntb_default_peer_port_number().
+This is required for hardware (like the crosslink topology of
+switchtec) which cannot assign reasonable port numbers to each port due
+to its perfect symmetry.
+
+Instead of picking the doorbell to use based on the the index of the
+peer, we use the peer's port number. This is a bit clearer and easier
+to understand.
+
+Fixes: c7aeb0afdcc2 ("NTB: ntb_pp: Add full multi-port NTB API support")
+Signed-off-by: Logan Gunthorpe <logang@deltatee.com>
+Acked-by: Allen Hubbe <allenbh@gmail.com>
+Tested-by: Alexander Fomichev <fomichev.ru@gmail.com>
+Signed-off-by: Jon Mason <jdmason@kudzu.us>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/ntb/test/ntb_pingpong.c | 14 ++++++--------
+ 1 file changed, 6 insertions(+), 8 deletions(-)
+
+diff --git a/drivers/ntb/test/ntb_pingpong.c b/drivers/ntb/test/ntb_pingpong.c
+index 65865e460ab87..18d00eec7b025 100644
+--- a/drivers/ntb/test/ntb_pingpong.c
++++ b/drivers/ntb/test/ntb_pingpong.c
+@@ -121,15 +121,14 @@ static int pp_find_next_peer(struct pp_ctx *pp)
+       link = ntb_link_is_up(pp->ntb, NULL, NULL);
+       /* Find next available peer */
+-      if (link & pp->nmask) {
++      if (link & pp->nmask)
+               pidx = __ffs64(link & pp->nmask);
+-              out_db = BIT_ULL(pidx + 1);
+-      } else if (link & pp->pmask) {
++      else if (link & pp->pmask)
+               pidx = __ffs64(link & pp->pmask);
+-              out_db = BIT_ULL(pidx);
+-      } else {
++      else
+               return -ENODEV;
+-      }
++
++      out_db = BIT_ULL(ntb_peer_port_number(pp->ntb, pidx));
+       spin_lock(&pp->lock);
+       pp->out_pidx = pidx;
+@@ -303,7 +302,7 @@ static void pp_init_flds(struct pp_ctx *pp)
+                       break;
+       }
+-      pp->in_db = BIT_ULL(pidx);
++      pp->in_db = BIT_ULL(lport);
+       pp->pmask = GENMASK_ULL(pidx, 0) >> 1;
+       pp->nmask = GENMASK_ULL(pcnt - 1, pidx);
+@@ -435,4 +434,3 @@ static void __exit pp_exit(void)
+       debugfs_remove_recursive(pp_dbgfs_topdir);
+ }
+ module_exit(pp_exit);
+-
+-- 
+2.25.1
+
diff --git a/queue-4.19/ntb-ntb_test-fix-bug-when-counting-remote-files.patch b/queue-4.19/ntb-ntb_test-fix-bug-when-counting-remote-files.patch
new file mode 100644 (file)
index 0000000..5e9f33f
--- /dev/null
@@ -0,0 +1,39 @@
+From b274325c520436227725aec888366b52efcd008e Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Wed, 9 Jan 2019 12:22:33 -0700
+Subject: NTB: ntb_test: Fix bug when counting remote files
+
+From: Logan Gunthorpe <logang@deltatee.com>
+
+[ Upstream commit 2130c0ba69d69bb21f5c52787f2587db00d13d8a ]
+
+When remote files are counted in get_files_count, without using SSH,
+the code returns 0 because there is a colon prepended to $LOC. $VPATH
+should have been used instead of $LOC.
+
+Fixes: 06bd0407d06c ("NTB: ntb_test: Update ntb_tool Scratchpad tests")
+Signed-off-by: Logan Gunthorpe <logang@deltatee.com>
+Acked-by: Allen Hubbe <allenbh@gmail.com>
+Tested-by: Alexander Fomichev <fomichev.ru@gmail.com>
+Signed-off-by: Jon Mason <jdmason@kudzu.us>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ tools/testing/selftests/ntb/ntb_test.sh | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/tools/testing/selftests/ntb/ntb_test.sh b/tools/testing/selftests/ntb/ntb_test.sh
+index 08cbfbbc70291..17ca36403d04c 100755
+--- a/tools/testing/selftests/ntb/ntb_test.sh
++++ b/tools/testing/selftests/ntb/ntb_test.sh
+@@ -250,7 +250,7 @@ function get_files_count()
+       split_remote $LOC
+       if [[ "$REMOTE" == "" ]]; then
+-              echo $(ls -1 "$LOC"/${NAME}* 2>/dev/null | wc -l)
++              echo $(ls -1 "$VPATH"/${NAME}* 2>/dev/null | wc -l)
+       else
+               echo $(ssh "$REMOTE" "ls -1 \"$VPATH\"/${NAME}* | \
+                      wc -l" 2> /dev/null)
+-- 
+2.25.1
+
diff --git a/queue-4.19/ntb-ntb_tool-reading-the-link-file-should-not-end-in.patch b/queue-4.19/ntb-ntb_tool-reading-the-link-file-should-not-end-in.patch
new file mode 100644 (file)
index 0000000..f3686e3
--- /dev/null
@@ -0,0 +1,51 @@
+From 685390ee9eb2fb7eb315e7097e91aa70bed197a2 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Wed, 9 Jan 2019 12:22:26 -0700
+Subject: NTB: ntb_tool: reading the link file should not end in a NULL byte
+
+From: Logan Gunthorpe <logang@deltatee.com>
+
+[ Upstream commit 912e12813dd03c602e4922fc34709ec4d4380cf0 ]
+
+When running ntb_test this warning is issued:
+
+./ntb_test.sh: line 200: warning: command substitution: ignored null
+byte in input
+
+This is caused by the kernel returning one more byte than is necessary
+when reading the link file.
+
+Reduce the number of bytes read back to 2 as it was before the
+commit that regressed this.
+
+Fixes: 7f46c8b3a552 ("NTB: ntb_tool: Add full multi-port NTB API support")
+Signed-off-by: Logan Gunthorpe <logang@deltatee.com>
+Acked-by: Allen Hubbe <allenbh@gmail.com>
+Tested-by: Alexander Fomichev <fomichev.ru@gmail.com>
+Signed-off-by: Jon Mason <jdmason@kudzu.us>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/ntb/test/ntb_tool.c | 3 +--
+ 1 file changed, 1 insertion(+), 2 deletions(-)
+
+diff --git a/drivers/ntb/test/ntb_tool.c b/drivers/ntb/test/ntb_tool.c
+index 025747c1568ea..311d6ab8d0160 100644
+--- a/drivers/ntb/test/ntb_tool.c
++++ b/drivers/ntb/test/ntb_tool.c
+@@ -504,7 +504,7 @@ static ssize_t tool_peer_link_read(struct file *filep, char __user *ubuf,
+       buf[1] = '\n';
+       buf[2] = '\0';
+-      return simple_read_from_buffer(ubuf, size, offp, buf, 3);
++      return simple_read_from_buffer(ubuf, size, offp, buf, 2);
+ }
+ static TOOL_FOPS_RDWR(tool_peer_link_fops,
+@@ -1690,4 +1690,3 @@ static void __exit tool_exit(void)
+       debugfs_remove_recursive(tool_dbgfs_topdir);
+ }
+ module_exit(tool_exit);
+-
+-- 
+2.25.1
+
diff --git a/queue-4.19/ntb-perf-don-t-require-one-more-memory-window-than-n.patch b/queue-4.19/ntb-perf-don-t-require-one-more-memory-window-than-n.patch
new file mode 100644 (file)
index 0000000..25f2d42
--- /dev/null
@@ -0,0 +1,38 @@
+From 95c37abf396251ec694cc8825281e7c6c535d45d Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Wed, 9 Jan 2019 12:22:30 -0700
+Subject: NTB: perf: Don't require one more memory window than number of peers
+
+From: Logan Gunthorpe <logang@deltatee.com>
+
+[ Upstream commit a9c4211ac918ade1522aced6b5acfbe824722f7d ]
+
+ntb_perf should not require more than one memory window per peer. This
+was probably an off-by-one error.
+
+Fixes: 5648e56d03fa ("NTB: ntb_perf: Add full multi-port NTB API support")
+Signed-off-by: Logan Gunthorpe <logang@deltatee.com>
+Acked-by: Allen Hubbe <allenbh@gmail.com>
+Tested-by: Alexander Fomichev <fomichev.ru@gmail.com>
+Signed-off-by: Jon Mason <jdmason@kudzu.us>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/ntb/test/ntb_perf.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/drivers/ntb/test/ntb_perf.c b/drivers/ntb/test/ntb_perf.c
+index 2ee41b988c5dd..28d288ff3baef 100644
+--- a/drivers/ntb/test/ntb_perf.c
++++ b/drivers/ntb/test/ntb_perf.c
+@@ -656,7 +656,7 @@ static int perf_init_service(struct perf_ctx *perf)
+ {
+       u64 mask;
+-      if (ntb_peer_mw_count(perf->ntb) < perf->pcnt + 1) {
++      if (ntb_peer_mw_count(perf->ntb) < perf->pcnt) {
+               dev_err(&perf->ntb->dev, "Not enough memory windows\n");
+               return -EINVAL;
+       }
+-- 
+2.25.1
+
diff --git a/queue-4.19/ntb-perf-fix-race-condition-when-run-with-ntb_test.patch b/queue-4.19/ntb-perf-fix-race-condition-when-run-with-ntb_test.patch
new file mode 100644 (file)
index 0000000..b8b5e68
--- /dev/null
@@ -0,0 +1,81 @@
+From 8fd68fcaf8a20fb9fc357f14c5e81d0c08fcff1d Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Wed, 9 Jan 2019 12:22:32 -0700
+Subject: NTB: perf: Fix race condition when run with ntb_test
+
+From: Logan Gunthorpe <logang@deltatee.com>
+
+[ Upstream commit 34d8673a01b053b6231a995a4eec9341163d63be ]
+
+When running ntb_test, the script tries to run the ntb_perf test
+immediately after probing the modules. Since adding multi-port support,
+this fails seeing the new initialization procedure in ntb_perf
+can not complete instantly.
+
+To fix this we add a completion which is waited on when a test is
+started. In this way, run can be written any time after the module is
+loaded and it will wait for the initialization to complete instead of
+sending an error.
+
+Fixes: 5648e56d03fa ("NTB: ntb_perf: Add full multi-port NTB API support")
+Signed-off-by: Logan Gunthorpe <logang@deltatee.com>
+Acked-by: Allen Hubbe <allenbh@gmail.com>
+Tested-by: Alexander Fomichev <fomichev.ru@gmail.com>
+Signed-off-by: Jon Mason <jdmason@kudzu.us>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/ntb/test/ntb_perf.c | 10 ++++++++--
+ 1 file changed, 8 insertions(+), 2 deletions(-)
+
+diff --git a/drivers/ntb/test/ntb_perf.c b/drivers/ntb/test/ntb_perf.c
+index 62a9a1d44f9f6..ad5d3919435c9 100644
+--- a/drivers/ntb/test/ntb_perf.c
++++ b/drivers/ntb/test/ntb_perf.c
+@@ -158,6 +158,8 @@ struct perf_peer {
+       /* NTB connection setup service */
+       struct work_struct      service;
+       unsigned long           sts;
++
++      struct completion init_comp;
+ };
+ #define to_peer_service(__work) \
+       container_of(__work, struct perf_peer, service)
+@@ -549,6 +551,7 @@ static int perf_setup_outbuf(struct perf_peer *peer)
+       /* Initialization is finally done */
+       set_bit(PERF_STS_DONE, &peer->sts);
++      complete_all(&peer->init_comp);
+       return 0;
+ }
+@@ -640,6 +643,7 @@ static void perf_service_work(struct work_struct *work)
+               perf_setup_outbuf(peer);
+       if (test_and_clear_bit(PERF_CMD_CLEAR, &peer->sts)) {
++              init_completion(&peer->init_comp);
+               clear_bit(PERF_STS_DONE, &peer->sts);
+               if (test_bit(0, &peer->perf->busy_flag) &&
+                   peer == peer->perf->test_peer) {
+@@ -1047,8 +1051,9 @@ static int perf_submit_test(struct perf_peer *peer)
+       struct perf_thread *pthr;
+       int tidx, ret;
+-      if (!test_bit(PERF_STS_DONE, &peer->sts))
+-              return -ENOLINK;
++      ret = wait_for_completion_interruptible(&peer->init_comp);
++      if (ret < 0)
++              return ret;
+       if (test_and_set_bit_lock(0, &perf->busy_flag))
+               return -EBUSY;
+@@ -1414,6 +1419,7 @@ static int perf_init_peers(struct perf_ctx *perf)
+                       peer->gidx = pidx;
+               }
+               INIT_WORK(&peer->service, perf_service_work);
++              init_completion(&peer->init_comp);
+       }
+       if (perf->gidx == -1)
+               perf->gidx = pidx;
+-- 
+2.25.1
+
diff --git a/queue-4.19/ntb-perf-fix-support-for-hardware-that-doesn-t-have-.patch b/queue-4.19/ntb-perf-fix-support-for-hardware-that-doesn-t-have-.patch
new file mode 100644 (file)
index 0000000..390d0b0
--- /dev/null
@@ -0,0 +1,52 @@
+From 8c5847c52c16e91efa8ccf6c070e6b4d6390834d Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Wed, 9 Jan 2019 12:22:31 -0700
+Subject: NTB: perf: Fix support for hardware that doesn't have port numbers
+
+From: Logan Gunthorpe <logang@deltatee.com>
+
+[ Upstream commit b54369a248c2e033bfcf5d6917e08cf9d73d54a6 ]
+
+Legacy drivers do not have port numbers (but is reliably only two ports)
+and was broken by the recent commit that added mult-port support to
+ntb_perf. This is especially important to support the cross link
+topology which is perfectly symmetric and cannot assign unique port
+numbers easily.
+
+Hardware that returns zero for both the local port and the peer should
+just always use gidx=0 for the only peer.
+
+Fixes: 5648e56d03fa ("NTB: ntb_perf: Add full multi-port NTB API support")
+Signed-off-by: Logan Gunthorpe <logang@deltatee.com>
+Acked-by: Allen Hubbe <allenbh@gmail.com>
+Tested-by: Alexander Fomichev <fomichev.ru@gmail.com>
+Signed-off-by: Jon Mason <jdmason@kudzu.us>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/ntb/test/ntb_perf.c | 10 ++++++++++
+ 1 file changed, 10 insertions(+)
+
+diff --git a/drivers/ntb/test/ntb_perf.c b/drivers/ntb/test/ntb_perf.c
+index 28d288ff3baef..62a9a1d44f9f6 100644
+--- a/drivers/ntb/test/ntb_perf.c
++++ b/drivers/ntb/test/ntb_perf.c
+@@ -1418,6 +1418,16 @@ static int perf_init_peers(struct perf_ctx *perf)
+       if (perf->gidx == -1)
+               perf->gidx = pidx;
++      /*
++       * Hardware with only two ports may not have unique port
++       * numbers. In this case, the gidxs should all be zero.
++       */
++      if (perf->pcnt == 1 &&  ntb_port_number(perf->ntb) == 0 &&
++          ntb_peer_port_number(perf->ntb, 0) == 0) {
++              perf->gidx = 0;
++              perf->peers[0].gidx = 0;
++      }
++
+       for (pidx = 0; pidx < perf->pcnt; pidx++) {
+               ret = perf_setup_peer_mw(&perf->peers[pidx]);
+               if (ret)
+-- 
+2.25.1
+
diff --git a/queue-4.19/ntb-revert-the-change-to-use-the-ntb-device-dev-for-.patch b/queue-4.19/ntb-revert-the-change-to-use-the-ntb-device-dev-for-.patch
new file mode 100644 (file)
index 0000000..fac5ce1
--- /dev/null
@@ -0,0 +1,44 @@
+From 937e2a5f21e468a2d4101a91c4181d0658c5a422 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Wed, 9 Jan 2019 12:22:27 -0700
+Subject: NTB: Revert the change to use the NTB device dev for DMA allocations
+
+From: Logan Gunthorpe <logang@deltatee.com>
+
+[ Upstream commit 40da7d9a93c8941737ef4a1208d32c13ce017fe1 ]
+
+Commit 417cf39cfea9 ("NTB: Set dma mask and dma coherent mask to NTB
+devices") started using the NTB device for DMA allocations which was
+turns out was wrong. If the IOMMU is enabled, such alloctanions will
+always fail with messages such as:
+
+  DMAR: Allocating domain for 0000:02:00.1 failed
+
+This is because the IOMMU has not setup the device for such use.
+
+Change the tools back to using the PCI device for allocations seeing
+it doesn't make sense to add an IOMMU group for the non-physical NTB
+device. Also remove the code that sets the DMA mask as it no longer
+makes sense to do this.
+
+Fixes: 7f46c8b3a552 ("NTB: ntb_tool: Add full multi-port NTB API support")
+Signed-off-by: Logan Gunthorpe <logang@deltatee.com>
+Tested-by: Alexander Fomichev <fomichev.ru@gmail.com>
+Signed-off-by: Jon Mason <jdmason@kudzu.us>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/ntb/ntb.c | 1 -
+ 1 file changed, 1 deletion(-)
+
+diff --git a/drivers/ntb/ntb.c b/drivers/ntb/ntb.c
+index c9a0912b175fa..f8f75a504a581 100644
+--- a/drivers/ntb/ntb.c
++++ b/drivers/ntb/ntb.c
+@@ -311,4 +311,3 @@ static void __exit ntb_driver_exit(void)
+       bus_unregister(&ntb_bus);
+ }
+ module_exit(ntb_driver_exit);
+-
+-- 
+2.25.1
+
diff --git a/queue-4.19/ntb_perf-pass-correct-struct-device-to-dma_alloc_coh.patch b/queue-4.19/ntb_perf-pass-correct-struct-device-to-dma_alloc_coh.patch
new file mode 100644 (file)
index 0000000..b3a6df9
--- /dev/null
@@ -0,0 +1,61 @@
+From fbb798098236139f8e676b6328f92ce739d98348 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Tue, 5 May 2020 23:21:49 -0500
+Subject: ntb_perf: pass correct struct device to dma_alloc_coherent
+
+From: Sanjay R Mehta <sanju.mehta@amd.com>
+
+[ Upstream commit 98f4e140264eeb52f22ff05be6b6dd48237255ac ]
+
+Currently, ntb->dev is passed to dma_alloc_coherent
+and dma_free_coherent calls. The returned dma_addr_t
+is the CPU physical address. This works fine as long
+as IOMMU is disabled. But when IOMMU is enabled, we
+need to make sure that IOVA is returned for dma_addr_t.
+So the correct way to achieve this is by changing the
+first parameter of dma_alloc_coherent() as ntb->pdev->dev
+instead.
+
+Fixes: 5648e56d03fa ("NTB: ntb_perf: Add full multi-port NTB API support")
+Signed-off-by: Logan Gunthorpe <logang@deltatee.com>
+Signed-off-by: Sanjay R Mehta <sanju.mehta@amd.com>
+Signed-off-by: Arindam Nath <arindam.nath@amd.com>
+Signed-off-by: Jon Mason <jdmason@kudzu.us>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/ntb/test/ntb_perf.c | 8 ++++----
+ 1 file changed, 4 insertions(+), 4 deletions(-)
+
+diff --git a/drivers/ntb/test/ntb_perf.c b/drivers/ntb/test/ntb_perf.c
+index 80508da3c8b5c..2ee41b988c5dd 100644
+--- a/drivers/ntb/test/ntb_perf.c
++++ b/drivers/ntb/test/ntb_perf.c
+@@ -559,7 +559,7 @@ static void perf_free_inbuf(struct perf_peer *peer)
+               return;
+       (void)ntb_mw_clear_trans(peer->perf->ntb, peer->pidx, peer->gidx);
+-      dma_free_coherent(&peer->perf->ntb->dev, peer->inbuf_size,
++      dma_free_coherent(&peer->perf->ntb->pdev->dev, peer->inbuf_size,
+                         peer->inbuf, peer->inbuf_xlat);
+       peer->inbuf = NULL;
+ }
+@@ -588,8 +588,9 @@ static int perf_setup_inbuf(struct perf_peer *peer)
+       perf_free_inbuf(peer);
+-      peer->inbuf = dma_alloc_coherent(&perf->ntb->dev, peer->inbuf_size,
+-                                       &peer->inbuf_xlat, GFP_KERNEL);
++      peer->inbuf = dma_alloc_coherent(&perf->ntb->pdev->dev,
++                                       peer->inbuf_size, &peer->inbuf_xlat,
++                                       GFP_KERNEL);
+       if (!peer->inbuf) {
+               dev_err(&perf->ntb->dev, "Failed to alloc inbuf of %pa\n",
+                       &peer->inbuf_size);
+@@ -1512,4 +1513,3 @@ static void __exit perf_exit(void)
+       destroy_workqueue(perf_wq);
+ }
+ module_exit(perf_exit);
+-
+-- 
+2.25.1
+
diff --git a/queue-4.19/ntb_tool-pass-correct-struct-device-to-dma_alloc_coh.patch b/queue-4.19/ntb_tool-pass-correct-struct-device-to-dma_alloc_coh.patch
new file mode 100644 (file)
index 0000000..028fbe6
--- /dev/null
@@ -0,0 +1,61 @@
+From e2c3dd4a2fdf6d3d78ecab348af69fa094388760 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Tue, 5 May 2020 23:21:50 -0500
+Subject: ntb_tool: pass correct struct device to dma_alloc_coherent
+
+From: Sanjay R Mehta <sanju.mehta@amd.com>
+
+[ Upstream commit 433efe720674efd9fdbcef78be75793393cf05db ]
+
+Currently, ntb->dev is passed to dma_alloc_coherent
+and dma_free_coherent calls. The returned dma_addr_t
+is the CPU physical address. This works fine as long
+as IOMMU is disabled. But when IOMMU is enabled, we
+need to make sure that IOVA is returned for dma_addr_t.
+So the correct way to achieve this is by changing the
+first parameter of dma_alloc_coherent() as ntb->pdev->dev
+instead.
+
+Fixes: 5648e56d03fa ("NTB: ntb_perf: Add full multi-port NTB API support")
+Signed-off-by: Sanjay R Mehta <sanju.mehta@amd.com>
+Signed-off-by: Arindam Nath <arindam.nath@amd.com>
+Signed-off-by: Jon Mason <jdmason@kudzu.us>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/ntb/test/ntb_tool.c | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+diff --git a/drivers/ntb/test/ntb_tool.c b/drivers/ntb/test/ntb_tool.c
+index d592c0ffbd198..025747c1568ea 100644
+--- a/drivers/ntb/test/ntb_tool.c
++++ b/drivers/ntb/test/ntb_tool.c
+@@ -590,7 +590,7 @@ static int tool_setup_mw(struct tool_ctx *tc, int pidx, int widx,
+       inmw->size = min_t(resource_size_t, req_size, size);
+       inmw->size = round_up(inmw->size, addr_align);
+       inmw->size = round_up(inmw->size, size_align);
+-      inmw->mm_base = dma_alloc_coherent(&tc->ntb->dev, inmw->size,
++      inmw->mm_base = dma_alloc_coherent(&tc->ntb->pdev->dev, inmw->size,
+                                          &inmw->dma_base, GFP_KERNEL);
+       if (!inmw->mm_base)
+               return -ENOMEM;
+@@ -612,7 +612,7 @@ static int tool_setup_mw(struct tool_ctx *tc, int pidx, int widx,
+       return 0;
+ err_free_dma:
+-      dma_free_coherent(&tc->ntb->dev, inmw->size, inmw->mm_base,
++      dma_free_coherent(&tc->ntb->pdev->dev, inmw->size, inmw->mm_base,
+                         inmw->dma_base);
+       inmw->mm_base = NULL;
+       inmw->dma_base = 0;
+@@ -629,7 +629,7 @@ static void tool_free_mw(struct tool_ctx *tc, int pidx, int widx)
+       if (inmw->mm_base != NULL) {
+               ntb_mw_clear_trans(tc->ntb, pidx, widx);
+-              dma_free_coherent(&tc->ntb->dev, inmw->size,
++              dma_free_coherent(&tc->ntb->pdev->dev, inmw->size,
+                                 inmw->mm_base, inmw->dma_base);
+       }
+-- 
+2.25.1
+
diff --git a/queue-4.19/of-fix-a-refcounting-bug-in-__of_attach_node_sysfs.patch b/queue-4.19/of-fix-a-refcounting-bug-in-__of_attach_node_sysfs.patch
new file mode 100644 (file)
index 0000000..5d26b10
--- /dev/null
@@ -0,0 +1,46 @@
+From fadc1053627d764d13481d8bb320444f45a470b6 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Wed, 20 May 2020 15:04:14 +0300
+Subject: of: Fix a refcounting bug in __of_attach_node_sysfs()
+
+From: Dan Carpenter <dan.carpenter@oracle.com>
+
+[ Upstream commit 8a325dd06f2358ea0888e4ff1c9ca4bc23bd53f3 ]
+
+The problem in this code is that if kobject_add() fails, then it should
+call of_node_put(np) to drop the reference count.  I've actually moved
+the of_node_get(np) later in the function to avoid needing to do clean
+up.
+
+Fixes: 5b2c2f5a0ea3 ("of: overlay: add missing of_node_get() in __of_attach_node_sysfs")
+Signed-off-by: Dan Carpenter <dan.carpenter@oracle.com>
+Signed-off-by: Rob Herring <robh@kernel.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/of/kobj.c | 3 +--
+ 1 file changed, 1 insertion(+), 2 deletions(-)
+
+diff --git a/drivers/of/kobj.c b/drivers/of/kobj.c
+index c72eef9880417..a32e60b024b8d 100644
+--- a/drivers/of/kobj.c
++++ b/drivers/of/kobj.c
+@@ -134,8 +134,6 @@ int __of_attach_node_sysfs(struct device_node *np)
+       if (!name)
+               return -ENOMEM;
+-      of_node_get(np);
+-
+       rc = kobject_add(&np->kobj, parent, "%s", name);
+       kfree(name);
+       if (rc)
+@@ -144,6 +142,7 @@ int __of_attach_node_sysfs(struct device_node *np)
+       for_each_property_of_node(np, pp)
+               __of_add_property_sysfs(np, pp);
++      of_node_get(np);
+       return 0;
+ }
+-- 
+2.25.1
+
diff --git a/queue-4.19/openrisc-fix-issue-with-argument-clobbering-for-clon.patch b/queue-4.19/openrisc-fix-issue-with-argument-clobbering-for-clon.patch
new file mode 100644 (file)
index 0000000..7fd629e
--- /dev/null
@@ -0,0 +1,48 @@
+From 3654fd94a6d4da9161b07e35b57b0d0c6a56804a Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Wed, 22 Apr 2020 20:24:11 +0900
+Subject: openrisc: Fix issue with argument clobbering for clone/fork
+
+From: Stafford Horne <shorne@gmail.com>
+
+[ Upstream commit 6bd140e14d9aaa734ec37985b8b20a96c0ece948 ]
+
+Working on the OpenRISC glibc port I found that sometimes clone was
+working strange.  That the tls data argument sent in r7 was always
+wrong.  Further investigation revealed that the arguments were getting
+clobbered in the entry code.  This patch removes the code that writes to
+the argument registers.  This was likely due to some old code hanging
+around.
+
+This patch fixes this up for clone and fork.  This fork clobber is
+harmless but also useless so remove.
+
+Signed-off-by: Stafford Horne <shorne@gmail.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ arch/openrisc/kernel/entry.S | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/arch/openrisc/kernel/entry.S b/arch/openrisc/kernel/entry.S
+index ee6159d2ed22e..01b59d2ce1747 100644
+--- a/arch/openrisc/kernel/entry.S
++++ b/arch/openrisc/kernel/entry.S
+@@ -1170,13 +1170,13 @@ ENTRY(__sys_clone)
+       l.movhi r29,hi(sys_clone)
+       l.ori   r29,r29,lo(sys_clone)
+       l.j     _fork_save_extra_regs_and_call
+-       l.addi r7,r1,0
++       l.nop
+ ENTRY(__sys_fork)
+       l.movhi r29,hi(sys_fork)
+       l.ori   r29,r29,lo(sys_fork)
+       l.j     _fork_save_extra_regs_and_call
+-       l.addi r3,r1,0
++       l.nop
+ ENTRY(sys_rt_sigreturn)
+       l.jal   _sys_rt_sigreturn
+-- 
+2.25.1
+
diff --git a/queue-4.19/ovl-verify-permissions-in-ovl_path_open.patch b/queue-4.19/ovl-verify-permissions-in-ovl_path_open.patch
new file mode 100644 (file)
index 0000000..04b19db
--- /dev/null
@@ -0,0 +1,72 @@
+From b78fa94c3d7b15f905158e0e6284dec795af2b69 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Tue, 2 Jun 2020 22:20:26 +0200
+Subject: ovl: verify permissions in ovl_path_open()
+
+From: Miklos Szeredi <mszeredi@redhat.com>
+
+[ Upstream commit 56230d956739b9cb1cbde439d76227d77979a04d ]
+
+Check permission before opening a real file.
+
+ovl_path_open() is used by readdir and copy-up routines.
+
+ovl_permission() theoretically already checked copy up permissions, but it
+doesn't hurt to re-do these checks during the actual copy-up.
+
+For directory reading ovl_permission() only checks access to topmost
+underlying layer.  Readdir on a merged directory accesses layers below the
+topmost one as well.  Permission wasn't checked for these layers.
+
+Note: modifying ovl_permission() to perform this check would be far more
+complex and hence more bug prone.  The result is less precise permissions
+returned in access(2).  If this turns out to be an issue, we can revisit
+this bug.
+
+Signed-off-by: Miklos Szeredi <mszeredi@redhat.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ fs/overlayfs/util.c | 27 ++++++++++++++++++++++++++-
+ 1 file changed, 26 insertions(+), 1 deletion(-)
+
+diff --git a/fs/overlayfs/util.c b/fs/overlayfs/util.c
+index db8bdb29b3207..afbc6a97da2ac 100644
+--- a/fs/overlayfs/util.c
++++ b/fs/overlayfs/util.c
+@@ -479,7 +479,32 @@ bool ovl_is_whiteout(struct dentry *dentry)
+ struct file *ovl_path_open(struct path *path, int flags)
+ {
+-      return dentry_open(path, flags | O_NOATIME, current_cred());
++      struct inode *inode = d_inode(path->dentry);
++      int err, acc_mode;
++
++      if (flags & ~(O_ACCMODE | O_LARGEFILE))
++              BUG();
++
++      switch (flags & O_ACCMODE) {
++      case O_RDONLY:
++              acc_mode = MAY_READ;
++              break;
++      case O_WRONLY:
++              acc_mode = MAY_WRITE;
++              break;
++      default:
++              BUG();
++      }
++
++      err = inode_permission(inode, acc_mode | MAY_OPEN);
++      if (err)
++              return ERR_PTR(err);
++
++      /* O_NOATIME is an optimization, don't fail if not permitted */
++      if (inode_owner_or_capable(inode))
++              flags |= O_NOATIME;
++
++      return dentry_open(path, flags, current_cred());
+ }
+ /* Caller should hold ovl_inode->lock */
+-- 
+2.25.1
+
diff --git a/queue-4.19/pci-aardvark-don-t-blindly-enable-aspm-l0s-and-don-t.patch b/queue-4.19/pci-aardvark-don-t-blindly-enable-aspm-l0s-and-don-t.patch
new file mode 100644 (file)
index 0000000..5fae3d1
--- /dev/null
@@ -0,0 +1,69 @@
+From 5bf028ea75c34618d82a2c87ac5f8ad4e79e1457 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Thu, 30 Apr 2020 10:06:15 +0200
+Subject: PCI: aardvark: Don't blindly enable ASPM L0s and don't write to
+ read-only register
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+From: Pali Rohár <pali@kernel.org>
+
+[ Upstream commit 90c6cb4a355e7befcb557d217d1d8b8bd5875a05 ]
+
+Trying to change Link Status register does not have any effect as this
+is a read-only register. Trying to overwrite bits for Negotiated Link
+Width does not make sense.
+
+In future proper change of link width can be done via Lane Count Select
+bits in PCIe Control 0 register.
+
+Trying to unconditionally enable ASPM L0s via ASPM Control bits in Link
+Control register is wrong. There should be at least some detection if
+endpoint supports L0s as isn't mandatory.
+
+Moreover ASPM Control bits in Link Control register are controlled by
+pcie/aspm.c code which sets it according to system ASPM settings,
+immediately after aardvark driver probes. So setting these bits by
+aardvark driver has no long running effect.
+
+Remove code which touches ASPM L0s bits from this driver and let
+kernel's ASPM implementation to set ASPM state properly.
+
+Some users are reporting issues that this code is problematic for some
+Intel wifi cards and removing it fixes them, see e.g.:
+https://bugzilla.kernel.org/show_bug.cgi?id=196339
+
+If problems with Intel wifi cards occur even after this commit, then
+pcie/aspm.c code could be modified / hooked to not enable ASPM L0s state
+for affected problematic cards.
+
+Link: https://lore.kernel.org/r/20200430080625.26070-3-pali@kernel.org
+Tested-by: Tomasz Maciej Nowak <tmn505@gmail.com>
+Signed-off-by: Pali Rohár <pali@kernel.org>
+Signed-off-by: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>
+Acked-by: Rob Herring <robh@kernel.org>
+Acked-by: Thomas Petazzoni <thomas.petazzoni@bootlin.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/pci/controller/pci-aardvark.c | 4 ----
+ 1 file changed, 4 deletions(-)
+
+diff --git a/drivers/pci/controller/pci-aardvark.c b/drivers/pci/controller/pci-aardvark.c
+index 6b4555ff25486..0235b6e7dcd13 100644
+--- a/drivers/pci/controller/pci-aardvark.c
++++ b/drivers/pci/controller/pci-aardvark.c
+@@ -321,10 +321,6 @@ static void advk_pcie_setup_hw(struct advk_pcie *pcie)
+       advk_pcie_wait_for_link(pcie);
+-      reg = PCIE_CORE_LINK_L0S_ENTRY |
+-              (1 << PCIE_CORE_LINK_WIDTH_SHIFT);
+-      advk_writel(pcie, reg, PCIE_CORE_LINK_CTRL_STAT_REG);
+-
+       reg = advk_readl(pcie, PCIE_CORE_CMD_STATUS_REG);
+       reg |= PCIE_CORE_CMD_MEM_ACCESS_EN |
+               PCIE_CORE_CMD_IO_ACCESS_EN |
+-- 
+2.25.1
+
diff --git a/queue-4.19/pci-allow-pci_resize_resource-for-devices-on-root-bu.patch b/queue-4.19/pci-allow-pci_resize_resource-for-devices-on-root-bu.patch
new file mode 100644 (file)
index 0000000..d743921
--- /dev/null
@@ -0,0 +1,56 @@
+From d2bef0d0b563e54208f28ef446447fbdbfd3d3e9 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Tue, 21 Apr 2020 18:22:56 +0200
+Subject: PCI: Allow pci_resize_resource() for devices on root bus
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+From: Ard Biesheuvel <ardb@kernel.org>
+
+[ Upstream commit d09ddd8190fbdc07696bf34b548ae15aa1816714 ]
+
+When resizing a BAR, pci_reassign_bridge_resources() is invoked to bring
+the bridge windows of parent bridges in line with the new BAR assignment.
+
+This assumes the device whose BAR is being resized lives on a subordinate
+bus, but this is not necessarily the case. A device may live on the root
+bus, in which case dev->bus->self is NULL, and passing a NULL pci_dev
+pointer to pci_reassign_bridge_resources() will cause it to crash.
+
+So let's make the call to pci_reassign_bridge_resources() conditional on
+whether dev->bus->self is non-NULL in the first place.
+
+Fixes: 8bb705e3e79d84e7 ("PCI: Add pci_resize_resource() for resizing BARs")
+Link: https://lore.kernel.org/r/20200421162256.26887-1-ardb@kernel.org
+Signed-off-by: Ard Biesheuvel <ardb@kernel.org>
+Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
+Reviewed-by: Christian König <christian.koenig@amd.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/pci/setup-res.c | 9 +++++----
+ 1 file changed, 5 insertions(+), 4 deletions(-)
+
+diff --git a/drivers/pci/setup-res.c b/drivers/pci/setup-res.c
+index d8ca40a976934..d21fa04fa44d2 100644
+--- a/drivers/pci/setup-res.c
++++ b/drivers/pci/setup-res.c
+@@ -439,10 +439,11 @@ int pci_resize_resource(struct pci_dev *dev, int resno, int size)
+       res->end = res->start + pci_rebar_size_to_bytes(size) - 1;
+       /* Check if the new config works by trying to assign everything. */
+-      ret = pci_reassign_bridge_resources(dev->bus->self, res->flags);
+-      if (ret)
+-              goto error_resize;
+-
++      if (dev->bus->self) {
++              ret = pci_reassign_bridge_resources(dev->bus->self, res->flags);
++              if (ret)
++                      goto error_resize;
++      }
+       return 0;
+ error_resize:
+-- 
+2.25.1
+
diff --git a/queue-4.19/pci-aspm-allow-aspm-on-links-to-pcie-to-pci-pci-x-br.patch b/queue-4.19/pci-aspm-allow-aspm-on-links-to-pcie-to-pci-pci-x-br.patch
new file mode 100644 (file)
index 0000000..1c892b0
--- /dev/null
@@ -0,0 +1,55 @@
+From 32320d74e9fcaa7dfa62ab24eb21459ec6b94c0d Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Wed, 6 May 2020 01:34:21 +0800
+Subject: PCI/ASPM: Allow ASPM on links to PCIe-to-PCI/PCI-X Bridges
+
+From: Kai-Heng Feng <kai.heng.feng@canonical.com>
+
+[ Upstream commit 66ff14e59e8a30690755b08bc3042359703fb07a ]
+
+7d715a6c1ae5 ("PCI: add PCI Express ASPM support") added the ability for
+Linux to enable ASPM, but for some undocumented reason, it didn't enable
+ASPM on links where the downstream component is a PCIe-to-PCI/PCI-X Bridge.
+
+Remove this exclusion so we can enable ASPM on these links.
+
+The Dell OptiPlex 7080 mentioned in the bugzilla has a TI XIO2001
+PCIe-to-PCI Bridge.  Enabling ASPM on the link leading to it allows the
+Intel SoC to enter deeper Package C-states, which is a significant power
+savings.
+
+[bhelgaas: commit log]
+Bugzilla: https://bugzilla.kernel.org/show_bug.cgi?id=207571
+Link: https://lore.kernel.org/r/20200505173423.26968-1-kai.heng.feng@canonical.com
+Signed-off-by: Kai-Heng Feng <kai.heng.feng@canonical.com>
+Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
+Reviewed-by: Mika Westerberg <mika.westerberg@linux.intel.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/pci/pcie/aspm.c | 10 ----------
+ 1 file changed, 10 deletions(-)
+
+diff --git a/drivers/pci/pcie/aspm.c b/drivers/pci/pcie/aspm.c
+index db2efa219028c..6e50f84733b75 100644
+--- a/drivers/pci/pcie/aspm.c
++++ b/drivers/pci/pcie/aspm.c
+@@ -633,16 +633,6 @@ static void pcie_aspm_cap_init(struct pcie_link_state *link, int blacklist)
+       /* Setup initial capable state. Will be updated later */
+       link->aspm_capable = link->aspm_support;
+-      /*
+-       * If the downstream component has pci bridge function, don't
+-       * do ASPM for now.
+-       */
+-      list_for_each_entry(child, &linkbus->devices, bus_list) {
+-              if (pci_pcie_type(child) == PCI_EXP_TYPE_PCI_BRIDGE) {
+-                      link->aspm_disable = ASPM_STATE_ALL;
+-                      break;
+-              }
+-      }
+       /* Get and check endpoint acceptable latencies */
+       list_for_each_entry(child, &linkbus->devices, bus_list) {
+-- 
+2.25.1
+
diff --git a/queue-4.19/pci-dwc-fix-inner-msi-irq-domain-registration.patch b/queue-4.19/pci-dwc-fix-inner-msi-irq-domain-registration.patch
new file mode 100644 (file)
index 0000000..84d3a42
--- /dev/null
@@ -0,0 +1,48 @@
+From 22aea8f3246ed9eb72312e4de1bd57b77a997144 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Fri, 1 May 2020 12:39:21 +0100
+Subject: PCI: dwc: Fix inner MSI IRQ domain registration
+
+From: Marc Zyngier <maz@kernel.org>
+
+[ Upstream commit 0414b93e78d87ecc24ae1a7e61fe97deb29fa2f4 ]
+
+On a system that uses the internal DWC MSI widget, I get this
+warning from debugfs when CONFIG_GENERIC_IRQ_DEBUGFS is selected:
+
+  debugfs: File ':soc:pcie@fc000000' in directory 'domains' already present!
+
+This is due to the fact that the DWC MSI code tries to register two
+IRQ domains for the same firmware node, without telling the low
+level code how to distinguish them (by setting a bus token). This
+further confuses debugfs which tries to create corresponding
+files for each domain.
+
+Fix it by tagging the inner domain as DOMAIN_BUS_NEXUS, which is
+the closest thing we have as to "generic MSI".
+
+Link: https://lore.kernel.org/r/20200501113921.366597-1-maz@kernel.org
+Signed-off-by: Marc Zyngier <maz@kernel.org>
+Signed-off-by: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>
+Acked-by: Jingoo Han <jingoohan1@gmail.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/pci/controller/dwc/pcie-designware-host.c | 2 ++
+ 1 file changed, 2 insertions(+)
+
+diff --git a/drivers/pci/controller/dwc/pcie-designware-host.c b/drivers/pci/controller/dwc/pcie-designware-host.c
+index 6d4ef0101ef68..be62f654c8eb7 100644
+--- a/drivers/pci/controller/dwc/pcie-designware-host.c
++++ b/drivers/pci/controller/dwc/pcie-designware-host.c
+@@ -285,6 +285,8 @@ int dw_pcie_allocate_domains(struct pcie_port *pp)
+               return -ENOMEM;
+       }
++      irq_domain_update_bus_token(pp->irq_domain, DOMAIN_BUS_NEXUS);
++
+       pp->msi_domain = pci_msi_create_irq_domain(fwnode,
+                                                  &dw_pcie_msi_domain_info,
+                                                  pp->irq_domain);
+-- 
+2.25.1
+
diff --git a/queue-4.19/pci-fix-pci_register_host_bridge-device_register-err.patch b/queue-4.19/pci-fix-pci_register_host_bridge-device_register-err.patch
new file mode 100644 (file)
index 0000000..471acb3
--- /dev/null
@@ -0,0 +1,43 @@
+From aac27ee049fef3e37a9339fe037b40cb853597a8 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Wed, 13 May 2020 17:38:58 -0500
+Subject: PCI: Fix pci_register_host_bridge() device_register() error handling
+
+From: Rob Herring <robh@kernel.org>
+
+[ Upstream commit 1b54ae8327a4d630111c8d88ba7906483ec6010b ]
+
+If device_register() has an error, we should bail out of
+pci_register_host_bridge() rather than continuing on.
+
+Fixes: 37d6a0a6f470 ("PCI: Add pci_register_host_bridge() interface")
+Link: https://lore.kernel.org/r/20200513223859.11295-1-robh@kernel.org
+Signed-off-by: Rob Herring <robh@kernel.org>
+Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
+Reviewed-by: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>
+Reviewed-by: Arnd Bergmann <arnd@arndb.de>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/pci/probe.c | 5 +++--
+ 1 file changed, 3 insertions(+), 2 deletions(-)
+
+diff --git a/drivers/pci/probe.c b/drivers/pci/probe.c
+index 243b65f3c282c..cbc0d8da7483c 100644
+--- a/drivers/pci/probe.c
++++ b/drivers/pci/probe.c
+@@ -818,9 +818,10 @@ static int pci_register_host_bridge(struct pci_host_bridge *bridge)
+               goto free;
+       err = device_register(&bridge->dev);
+-      if (err)
++      if (err) {
+               put_device(&bridge->dev);
+-
++              goto free;
++      }
+       bus->bridge = get_device(&bridge->dev);
+       device_enable_async_suspend(bus->bridge);
+       pci_set_bus_of_node(bus);
+-- 
+2.25.1
+
diff --git a/queue-4.19/pci-ptm-inherit-switch-downstream-port-ptm-settings-.patch b/queue-4.19/pci-ptm-inherit-switch-downstream-port-ptm-settings-.patch
new file mode 100644 (file)
index 0000000..fb1d928
--- /dev/null
@@ -0,0 +1,78 @@
+From 0558ca39b408b2e3e97b4fc6221dcf493d689b5b Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Thu, 21 May 2020 15:40:07 -0500
+Subject: PCI/PTM: Inherit Switch Downstream Port PTM settings from Upstream
+ Port
+
+From: Bjorn Helgaas <bhelgaas@google.com>
+
+[ Upstream commit 7b38fd9760f51cc83d80eed2cfbde8b5ead9e93a ]
+
+Except for Endpoints, we enable PTM at enumeration-time.  Previously we did
+not account for the fact that Switch Downstream Ports are not permitted to
+have a PTM capability; their PTM behavior is controlled by the Upstream
+Port (PCIe r5.0, sec 7.9.16).  Since Downstream Ports don't have a PTM
+capability, we did not mark them as "ptm_enabled", which meant that
+pci_enable_ptm() on an Endpoint failed because there was no PTM path to it.
+
+Mark Downstream Ports as "ptm_enabled" if their Upstream Port has PTM
+enabled.
+
+Fixes: eec097d43100 ("PCI: Add pci_enable_ptm() for drivers to enable PTM on endpoints")
+Reported-by: Aditya Paluri <Venkata.AdityaPaluri@synopsys.com>
+Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/pci/pcie/ptm.c | 22 +++++++++++++++++-----
+ 1 file changed, 17 insertions(+), 5 deletions(-)
+
+diff --git a/drivers/pci/pcie/ptm.c b/drivers/pci/pcie/ptm.c
+index 9361f3aa26ab8..357a454cafa07 100644
+--- a/drivers/pci/pcie/ptm.c
++++ b/drivers/pci/pcie/ptm.c
+@@ -39,10 +39,6 @@ void pci_ptm_init(struct pci_dev *dev)
+       if (!pci_is_pcie(dev))
+               return;
+-      pos = pci_find_ext_capability(dev, PCI_EXT_CAP_ID_PTM);
+-      if (!pos)
+-              return;
+-
+       /*
+        * Enable PTM only on interior devices (root ports, switch ports,
+        * etc.) on the assumption that it causes no link traffic until an
+@@ -52,6 +48,23 @@ void pci_ptm_init(struct pci_dev *dev)
+            pci_pcie_type(dev) == PCI_EXP_TYPE_RC_END))
+               return;
++      /*
++       * Switch Downstream Ports are not permitted to have a PTM
++       * capability; their PTM behavior is controlled by the Upstream
++       * Port (PCIe r5.0, sec 7.9.16).
++       */
++      ups = pci_upstream_bridge(dev);
++      if (pci_pcie_type(dev) == PCI_EXP_TYPE_DOWNSTREAM &&
++          ups && ups->ptm_enabled) {
++              dev->ptm_granularity = ups->ptm_granularity;
++              dev->ptm_enabled = 1;
++              return;
++      }
++
++      pos = pci_find_ext_capability(dev, PCI_EXT_CAP_ID_PTM);
++      if (!pos)
++              return;
++
+       pci_read_config_dword(dev, pos + PCI_PTM_CAP, &cap);
+       local_clock = (cap & PCI_PTM_GRANULARITY_MASK) >> 8;
+@@ -61,7 +74,6 @@ void pci_ptm_init(struct pci_dev *dev)
+        * the spec recommendation (PCIe r3.1, sec 7.32.3), select the
+        * furthest upstream Time Source as the PTM Root.
+        */
+-      ups = pci_upstream_bridge(dev);
+       if (ups && ups->ptm_enabled) {
+               ctrl = PCI_PTM_CTRL_ENABLE;
+               if (ups->ptm_granularity == 0)
+-- 
+2.25.1
+
diff --git a/queue-4.19/pci-rcar-fix-incorrect-programming-of-ob-windows.patch b/queue-4.19/pci-rcar-fix-incorrect-programming-of-ob-windows.patch
new file mode 100644 (file)
index 0000000..8701eb6
--- /dev/null
@@ -0,0 +1,74 @@
+From 32e5da7879337dfe0a223512921a9bff0e235c00 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Fri, 4 Oct 2019 14:29:41 +0100
+Subject: PCI: rcar: Fix incorrect programming of OB windows
+
+From: Andrew Murray <andrew.murray@arm.com>
+
+[ Upstream commit 2b9f217433e31d125fb697ca7974d3de3ecc3e92 ]
+
+The outbound windows (PCIEPAUR(x), PCIEPALR(x)) describe a mapping between
+a CPU address (which is determined by the window number 'x') and a
+programmed PCI address - Thus allowing the controller to translate CPU
+accesses into PCI accesses.
+
+However the existing code incorrectly writes the CPU address - lets fix
+this by writing the PCI address instead.
+
+For memory transactions, existing DT users describe a 1:1 identity mapping
+and thus this change should have no effect. However the same isn't true for
+I/O.
+
+Link: https://lore.kernel.org/r/20191004132941.6660-1-andrew.murray@arm.com
+Fixes: c25da4778803 ("PCI: rcar: Add Renesas R-Car PCIe driver")
+Tested-by: Marek Vasut <marek.vasut+renesas@gmail.com>
+Signed-off-by: Andrew Murray <andrew.murray@arm.com>
+Signed-off-by: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>
+Reviewed-by: Marek Vasut <marek.vasut+renesas@gmail.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/pci/controller/pcie-rcar.c | 9 +++++----
+ 1 file changed, 5 insertions(+), 4 deletions(-)
+
+diff --git a/drivers/pci/controller/pcie-rcar.c b/drivers/pci/controller/pcie-rcar.c
+index 333ab6092f174..00296c5eacb9c 100644
+--- a/drivers/pci/controller/pcie-rcar.c
++++ b/drivers/pci/controller/pcie-rcar.c
+@@ -335,11 +335,12 @@ static struct pci_ops rcar_pcie_ops = {
+ };
+ static void rcar_pcie_setup_window(int win, struct rcar_pcie *pcie,
+-                                 struct resource *res)
++                                 struct resource_entry *window)
+ {
+       /* Setup PCIe address space mappings for each resource */
+       resource_size_t size;
+       resource_size_t res_start;
++      struct resource *res = window->res;
+       u32 mask;
+       rcar_pci_write_reg(pcie, 0x00000000, PCIEPTCTLR(win));
+@@ -353,9 +354,9 @@ static void rcar_pcie_setup_window(int win, struct rcar_pcie *pcie,
+       rcar_pci_write_reg(pcie, mask << 7, PCIEPAMR(win));
+       if (res->flags & IORESOURCE_IO)
+-              res_start = pci_pio_to_address(res->start);
++              res_start = pci_pio_to_address(res->start) - window->offset;
+       else
+-              res_start = res->start;
++              res_start = res->start - window->offset;
+       rcar_pci_write_reg(pcie, upper_32_bits(res_start), PCIEPAUR(win));
+       rcar_pci_write_reg(pcie, lower_32_bits(res_start) & ~0x7F,
+@@ -384,7 +385,7 @@ static int rcar_pcie_setup(struct list_head *resource, struct rcar_pcie *pci)
+               switch (resource_type(res)) {
+               case IORESOURCE_IO:
+               case IORESOURCE_MEM:
+-                      rcar_pcie_setup_window(i, pci, res);
++                      rcar_pcie_setup_window(i, pci, win);
+                       i++;
+                       break;
+               case IORESOURCE_BUS:
+-- 
+2.25.1
+
diff --git a/queue-4.19/pci-v3-semi-fix-a-memory-leak-in-v3_pci_probe-error-.patch b/queue-4.19/pci-v3-semi-fix-a-memory-leak-in-v3_pci_probe-error-.patch
new file mode 100644 (file)
index 0000000..c0fa6e6
--- /dev/null
@@ -0,0 +1,42 @@
+From b9e8444a9262ffa5edce386c19a2f6163db08189 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Sat, 18 Apr 2020 10:16:37 +0200
+Subject: PCI: v3-semi: Fix a memory leak in v3_pci_probe() error handling
+ paths
+
+From: Christophe JAILLET <christophe.jaillet@wanadoo.fr>
+
+[ Upstream commit bca718988b9008d0d5f504e2d318178fc84958c1 ]
+
+If we fails somewhere in 'v3_pci_probe()', we need to free 'host'.
+
+Use the managed version of 'pci_alloc_host_bridge()' to do that easily.
+The use of managed resources is already widely used in this driver.
+
+Link: https://lore.kernel.org/r/20200418081637.1585-1-christophe.jaillet@wanadoo.fr
+Fixes: 68a15eb7bd0c ("PCI: v3-semi: Add V3 Semiconductor PCI host driver")
+Signed-off-by: Christophe JAILLET <christophe.jaillet@wanadoo.fr>
+[lorenzo.pieralisi@arm.com: commit log]
+Signed-off-by: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>
+Acked-by: Linus Walleij <linus.walleij@linaro.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/pci/controller/pci-v3-semi.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/drivers/pci/controller/pci-v3-semi.c b/drivers/pci/controller/pci-v3-semi.c
+index d219404bad92b..9a86bb7448acf 100644
+--- a/drivers/pci/controller/pci-v3-semi.c
++++ b/drivers/pci/controller/pci-v3-semi.c
+@@ -743,7 +743,7 @@ static int v3_pci_probe(struct platform_device *pdev)
+       int ret;
+       LIST_HEAD(res);
+-      host = pci_alloc_host_bridge(sizeof(*v3));
++      host = devm_pci_alloc_host_bridge(dev, sizeof(*v3));
+       if (!host)
+               return -ENOMEM;
+-- 
+2.25.1
+
diff --git a/queue-4.19/pci-vmd-filter-resource-type-bits-from-shadow-regist.patch b/queue-4.19/pci-vmd-filter-resource-type-bits-from-shadow-regist.patch
new file mode 100644 (file)
index 0000000..7739989
--- /dev/null
@@ -0,0 +1,55 @@
+From 3564460af3861159ec1e845e18e08949005c0839 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Wed, 27 May 2020 23:02:39 -0400
+Subject: PCI: vmd: Filter resource type bits from shadow register
+
+From: Jon Derrick <jonathan.derrick@intel.com>
+
+[ Upstream commit 3e5095eebe015d5a4d566aa5e03c8621add5f0a7 ]
+
+Versions of VMD with the Host Physical Address shadow register use this
+register to calculate the bus address offset needed to do guest
+passthrough of the domain. This register shadows the Host Physical
+Address registers including the resource type bits. After calculating
+the offset, the extra resource type bits lead to the VMD resources being
+over-provisioned at the front and under-provisioned at the back.
+
+Example:
+pci 10000:80:02.0: reg 0x10: [mem 0xf801fffc-0xf803fffb 64bit]
+
+Expected:
+pci 10000:80:02.0: reg 0x10: [mem 0xf8020000-0xf803ffff 64bit]
+
+If other devices are mapped in the over-provisioned front, it could lead
+to resource conflict issues with VMD or those devices.
+
+Link: https://lore.kernel.org/r/20200528030240.16024-3-jonathan.derrick@intel.com
+Fixes: a1a30170138c9 ("PCI: vmd: Fix shadow offsets to reflect spec changes")
+Signed-off-by: Jon Derrick <jonathan.derrick@intel.com>
+Signed-off-by: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/pci/controller/vmd.c | 6 ++++--
+ 1 file changed, 4 insertions(+), 2 deletions(-)
+
+diff --git a/drivers/pci/controller/vmd.c b/drivers/pci/controller/vmd.c
+index b52885020c85c..c3ac7f094a394 100644
+--- a/drivers/pci/controller/vmd.c
++++ b/drivers/pci/controller/vmd.c
+@@ -617,9 +617,11 @@ static int vmd_enable_domain(struct vmd_dev *vmd, unsigned long features)
+                       if (!membar2)
+                               return -ENOMEM;
+                       offset[0] = vmd->dev->resource[VMD_MEMBAR1].start -
+-                                      readq(membar2 + MB2_SHADOW_OFFSET);
++                                      (readq(membar2 + MB2_SHADOW_OFFSET) &
++                                       PCI_BASE_ADDRESS_MEM_MASK);
+                       offset[1] = vmd->dev->resource[VMD_MEMBAR2].start -
+-                                      readq(membar2 + MB2_SHADOW_OFFSET + 8);
++                                      (readq(membar2 + MB2_SHADOW_OFFSET + 8) &
++                                       PCI_BASE_ADDRESS_MEM_MASK);
+                       pci_iounmap(vmd->dev, membar2);
+               }
+       }
+-- 
+2.25.1
+
diff --git a/queue-4.19/perf-report-fix-null-pointer-dereference-in-hists__f.patch b/queue-4.19/perf-report-fix-null-pointer-dereference-in-hists__f.patch
new file mode 100644 (file)
index 0000000..0361543
--- /dev/null
@@ -0,0 +1,46 @@
+From e548e261c8393b071f72cebf7596100505fe7522 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Mon, 8 Jun 2020 13:18:17 -0300
+Subject: perf report: Fix NULL pointer dereference in
+ hists__fprintf_nr_sample_events()
+
+From: Gaurav Singh <gaurav1086@gmail.com>
+
+[ Upstream commit 11b6e5482e178055ec1f2444b55f2518713809d1 ]
+
+The 'evname' variable can be NULL, as it is checked a few lines back,
+check it before using.
+
+Fixes: 9e207ddfa207 ("perf report: Show call graph from reference events")
+Cc: Adrian Hunter <adrian.hunter@intel.com>
+Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
+Cc: Ingo Molnar <mingo@redhat.com>
+Cc: Jiri Olsa <jolsa@kernel.org>
+Cc: Kan Liang <kan.liang@intel.com>
+Cc: Mark Rutland <mark.rutland@arm.com>
+Cc: Namhyung Kim <namhyung@kernel.org>
+Cc: Peter Zijlstra <peterz@infradead.org>
+Link: http://lore.kernel.org/lkml/
+Signed-off-by: Gaurav Singh <gaurav1086@gmail.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ tools/perf/builtin-report.c | 3 +--
+ 1 file changed, 1 insertion(+), 2 deletions(-)
+
+diff --git a/tools/perf/builtin-report.c b/tools/perf/builtin-report.c
+index 5312c761a5dba..05eae94d09cb8 100644
+--- a/tools/perf/builtin-report.c
++++ b/tools/perf/builtin-report.c
+@@ -447,8 +447,7 @@ static size_t hists__fprintf_nr_sample_events(struct hists *hists, struct report
+       if (rep->time_str)
+               ret += fprintf(fp, " (time slices: %s)", rep->time_str);
+-      if (symbol_conf.show_ref_callgraph &&
+-          strstr(evname, "call-graph=no")) {
++      if (symbol_conf.show_ref_callgraph && evname && strstr(evname, "call-graph=no")) {
+               ret += fprintf(fp, ", show reference callgraph");
+       }
+-- 
+2.25.1
+
diff --git a/queue-4.19/pinctrl-freescale-imx-fix-an-error-handling-path-in-.patch b/queue-4.19/pinctrl-freescale-imx-fix-an-error-handling-path-in-.patch
new file mode 100644 (file)
index 0000000..44d58e3
--- /dev/null
@@ -0,0 +1,74 @@
+From b89da6b61652396fea1aee96feced5dc6ff5ca95 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Sat, 30 May 2020 22:49:55 +0200
+Subject: pinctrl: freescale: imx: Fix an error handling path in
+ 'imx_pinctrl_probe()'
+
+From: Christophe JAILLET <christophe.jaillet@wanadoo.fr>
+
+[ Upstream commit 11d8da5cabf7c6c3263ba2cd9c00260395867048 ]
+
+'pinctrl_unregister()' should not be called to undo
+'devm_pinctrl_register_and_init()', it is already handled by the framework.
+
+This simplifies the error handling paths of the probe function.
+The 'imx_free_resources()' can be removed as well.
+
+Fixes: a51c158bf0f7 ("pinctrl: imx: use radix trees for groups and functions")
+Signed-off-by: Christophe JAILLET <christophe.jaillet@wanadoo.fr>
+Reviewed-by: Dong Aisheng <aisheng.dong@nxp.com>
+Link: https://lore.kernel.org/r/20200530204955.588962-1-christophe.jaillet@wanadoo.fr
+Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/pinctrl/freescale/pinctrl-imx.c | 19 ++-----------------
+ 1 file changed, 2 insertions(+), 17 deletions(-)
+
+diff --git a/drivers/pinctrl/freescale/pinctrl-imx.c b/drivers/pinctrl/freescale/pinctrl-imx.c
+index b04edc22dad76..90d414dd792cb 100644
+--- a/drivers/pinctrl/freescale/pinctrl-imx.c
++++ b/drivers/pinctrl/freescale/pinctrl-imx.c
+@@ -662,16 +662,6 @@ static int imx_pinctrl_probe_dt(struct platform_device *pdev,
+       return 0;
+ }
+-/*
+- * imx_free_resources() - free memory used by this driver
+- * @info: info driver instance
+- */
+-static void imx_free_resources(struct imx_pinctrl *ipctl)
+-{
+-      if (ipctl->pctl)
+-              pinctrl_unregister(ipctl->pctl);
+-}
+-
+ int imx_pinctrl_probe(struct platform_device *pdev,
+                     const struct imx_pinctrl_soc_info *info)
+ {
+@@ -762,21 +752,16 @@ int imx_pinctrl_probe(struct platform_device *pdev,
+                                            &ipctl->pctl);
+       if (ret) {
+               dev_err(&pdev->dev, "could not register IMX pinctrl driver\n");
+-              goto free;
++              return ret;
+       }
+       ret = imx_pinctrl_probe_dt(pdev, ipctl);
+       if (ret) {
+               dev_err(&pdev->dev, "fail to probe dt properties\n");
+-              goto free;
++              return ret;
+       }
+       dev_info(&pdev->dev, "initialized IMX pinctrl driver\n");
+       return pinctrl_enable(ipctl->pctl);
+-
+-free:
+-      imx_free_resources(ipctl);
+-
+-      return ret;
+ }
+-- 
+2.25.1
+
diff --git a/queue-4.19/pinctrl-imxl-fix-an-error-handling-path-in-imx1_pinc.patch b/queue-4.19/pinctrl-imxl-fix-an-error-handling-path-in-imx1_pinc.patch
new file mode 100644 (file)
index 0000000..a311de9
--- /dev/null
@@ -0,0 +1,39 @@
+From 6804a80800a4b8c3f39e3e8a40a88403e87ff7d7 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Sat, 30 May 2020 22:19:52 +0200
+Subject: pinctrl: imxl: Fix an error handling path in
+ 'imx1_pinctrl_core_probe()'
+
+From: Christophe JAILLET <christophe.jaillet@wanadoo.fr>
+
+[ Upstream commit 9eb728321286c4b31e964d2377fca2368526d408 ]
+
+When 'pinctrl_register()' has been turned into 'devm_pinctrl_register()',
+an error handling path has not been updated.
+
+Axe a now unneeded 'pinctrl_unregister()'.
+
+Fixes: e55e025d1687 ("pinctrl: imxl: Use devm_pinctrl_register() for pinctrl registration")
+Signed-off-by: Christophe JAILLET <christophe.jaillet@wanadoo.fr>
+Link: https://lore.kernel.org/r/20200530201952.585798-1-christophe.jaillet@wanadoo.fr
+Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/pinctrl/freescale/pinctrl-imx1-core.c | 1 -
+ 1 file changed, 1 deletion(-)
+
+diff --git a/drivers/pinctrl/freescale/pinctrl-imx1-core.c b/drivers/pinctrl/freescale/pinctrl-imx1-core.c
+index deb7870b3d1a6..961c24e0cc8fd 100644
+--- a/drivers/pinctrl/freescale/pinctrl-imx1-core.c
++++ b/drivers/pinctrl/freescale/pinctrl-imx1-core.c
+@@ -638,7 +638,6 @@ int imx1_pinctrl_core_probe(struct platform_device *pdev,
+       ret = of_platform_populate(pdev->dev.of_node, NULL, NULL, &pdev->dev);
+       if (ret) {
+-              pinctrl_unregister(ipctl->pctl);
+               dev_err(&pdev->dev, "Failed to populate subdevices\n");
+               return ret;
+       }
+-- 
+2.25.1
+
diff --git a/queue-4.19/pinctrl-rockchip-fix-memleak-in-rockchip_dt_node_to_.patch b/queue-4.19/pinctrl-rockchip-fix-memleak-in-rockchip_dt_node_to_.patch
new file mode 100644 (file)
index 0000000..8064d09
--- /dev/null
@@ -0,0 +1,64 @@
+From 55508bcc7a9f0d5d9967e80eb5ed42b4ac6e2e42 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Wed, 6 May 2020 12:09:03 +0200
+Subject: pinctrl: rockchip: fix memleak in rockchip_dt_node_to_map
+
+From: Dafna Hirschfeld <dafna.hirschfeld@collabora.com>
+
+[ Upstream commit d7faa8ffb6be57bf8233a4b5a636d76b83c51ce7 ]
+
+In function rockchip_dt_node_to_map, a new_map variable is
+allocated by:
+
+new_map = devm_kcalloc(pctldev->dev, map_num, sizeof(*new_map),
+                      GFP_KERNEL);
+
+This uses devres and attaches new_map to the pinctrl driver.
+This cause a leak since new_map is not released when the probed
+driver is removed. Fix it by using kcalloc to allocate new_map
+and free it in `rockchip_dt_free_map`
+
+Signed-off-by: Dafna Hirschfeld <dafna.hirschfeld@collabora.com>
+Reviewed-by: Heiko Stuebner <heiko@sntech.de>
+Link: https://lore.kernel.org/r/20200506100903.15420-1-dafna.hirschfeld@collabora.com
+Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/pinctrl/pinctrl-rockchip.c | 7 ++++---
+ 1 file changed, 4 insertions(+), 3 deletions(-)
+
+diff --git a/drivers/pinctrl/pinctrl-rockchip.c b/drivers/pinctrl/pinctrl-rockchip.c
+index 8d83817935dae..005df24f5b3f1 100644
+--- a/drivers/pinctrl/pinctrl-rockchip.c
++++ b/drivers/pinctrl/pinctrl-rockchip.c
+@@ -507,8 +507,8 @@ static int rockchip_dt_node_to_map(struct pinctrl_dev *pctldev,
+       }
+       map_num += grp->npins;
+-      new_map = devm_kcalloc(pctldev->dev, map_num, sizeof(*new_map),
+-                                                              GFP_KERNEL);
++
++      new_map = kcalloc(map_num, sizeof(*new_map), GFP_KERNEL);
+       if (!new_map)
+               return -ENOMEM;
+@@ -518,7 +518,7 @@ static int rockchip_dt_node_to_map(struct pinctrl_dev *pctldev,
+       /* create mux map */
+       parent = of_get_parent(np);
+       if (!parent) {
+-              devm_kfree(pctldev->dev, new_map);
++              kfree(new_map);
+               return -EINVAL;
+       }
+       new_map[0].type = PIN_MAP_TYPE_MUX_GROUP;
+@@ -545,6 +545,7 @@ static int rockchip_dt_node_to_map(struct pinctrl_dev *pctldev,
+ static void rockchip_dt_free_map(struct pinctrl_dev *pctldev,
+                                   struct pinctrl_map *map, unsigned num_maps)
+ {
++      kfree(map);
+ }
+ static const struct pinctrl_ops rockchip_pctrl_ops = {
+-- 
+2.25.1
+
diff --git a/queue-4.19/pinctrl-rza1-fix-wrong-array-assignment-of-rza1l_swi.patch b/queue-4.19/pinctrl-rza1-fix-wrong-array-assignment-of-rza1l_swi.patch
new file mode 100644 (file)
index 0000000..20e04fc
--- /dev/null
@@ -0,0 +1,48 @@
+From 462619f756417057ba2b4a96ebcdb64d707b08f4 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Fri, 17 Apr 2020 19:16:04 +0800
+Subject: pinctrl: rza1: Fix wrong array assignment of rza1l_swio_entries
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+From: Jason Yan <yanaijie@huawei.com>
+
+[ Upstream commit 4b4e8e93eccc2abc4209fe226ec89e7fbe9f3c61 ]
+
+The rza1l_swio_entries referred to the wrong array rza1h_swio_pins,
+which was intended to be rza1l_swio_pins. So let's fix it.
+
+This is detected by the following gcc warning:
+
+drivers/pinctrl/pinctrl-rza1.c:401:35: warning: ‘rza1l_swio_pins’
+defined but not used [-Wunused-const-variable=]
+ static const struct rza1_swio_pin rza1l_swio_pins[] = {
+                                   ^~~~~~~~~~~~~~~
+
+Fixes: 039bc58e73b77723 ("pinctrl: rza1: Add support for RZ/A1L")
+Reported-by: Hulk Robot <hulkci@huawei.com>
+Signed-off-by: Jason Yan <yanaijie@huawei.com>
+Link: https://lore.kernel.org/r/20200417111604.19143-1-yanaijie@huawei.com
+Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/pinctrl/pinctrl-rza1.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/drivers/pinctrl/pinctrl-rza1.c b/drivers/pinctrl/pinctrl-rza1.c
+index f76edf6645397..021c19eaf12d6 100644
+--- a/drivers/pinctrl/pinctrl-rza1.c
++++ b/drivers/pinctrl/pinctrl-rza1.c
+@@ -421,7 +421,7 @@ static const struct rza1_bidir_entry rza1l_bidir_entries[RZA1_NPORTS] = {
+ };
+ static const struct rza1_swio_entry rza1l_swio_entries[] = {
+-      [0] = { ARRAY_SIZE(rza1h_swio_pins), rza1h_swio_pins },
++      [0] = { ARRAY_SIZE(rza1l_swio_pins), rza1l_swio_pins },
+ };
+ /* RZ/A1L (r7s72102x) pinmux flags table */
+-- 
+2.25.1
+
diff --git a/queue-4.19/power-supply-bq24257_charger-replace-depends-on-regm.patch b/queue-4.19/power-supply-bq24257_charger-replace-depends-on-regm.patch
new file mode 100644 (file)
index 0000000..2ba53fe
--- /dev/null
@@ -0,0 +1,39 @@
+From 73498d9a9935785732411a2e224c1c32219cbb33 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Mon, 13 Apr 2020 16:10:51 +0200
+Subject: power: supply: bq24257_charger: Replace depends on REGMAP_I2C with
+ select
+
+From: Enric Balletbo i Serra <enric.balletbo@collabora.com>
+
+[ Upstream commit 87c3d579c8ed0eaea6b1567d529a8daa85a2bc6c ]
+
+regmap is a library function that gets selected by drivers that need
+it. No driver modules should depend on it. Depending on REGMAP_I2C makes
+this driver only build if another driver already selected REGMAP_I2C,
+as the symbol can't be selected through the menu kernel configuration.
+
+Fixes: 2219a935963e ("power_supply: Add TI BQ24257 charger driver")
+Signed-off-by: Enric Balletbo i Serra <enric.balletbo@collabora.com>
+Signed-off-by: Sebastian Reichel <sebastian.reichel@collabora.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/power/supply/Kconfig | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/drivers/power/supply/Kconfig b/drivers/power/supply/Kconfig
+index ff6dab0bf0ddc..76c699b5abdac 100644
+--- a/drivers/power/supply/Kconfig
++++ b/drivers/power/supply/Kconfig
+@@ -555,7 +555,7 @@ config CHARGER_BQ24257
+       tristate "TI BQ24250/24251/24257 battery charger driver"
+       depends on I2C
+       depends on GPIOLIB || COMPILE_TEST
+-      depends on REGMAP_I2C
++      select REGMAP_I2C
+       help
+         Say Y to enable support for the TI BQ24250, BQ24251, and BQ24257 battery
+         chargers.
+-- 
+2.25.1
+
diff --git a/queue-4.19/power-supply-lp8788-fix-an-error-handling-path-in-lp.patch b/queue-4.19/power-supply-lp8788-fix-an-error-handling-path-in-lp.patch
new file mode 100644 (file)
index 0000000..1eef89e
--- /dev/null
@@ -0,0 +1,71 @@
+From 9f96466bf574cbc4972474f8c85d7545b828fe7f Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Sat, 9 May 2020 10:23:23 +0200
+Subject: power: supply: lp8788: Fix an error handling path in
+ 'lp8788_charger_probe()'
+
+From: Christophe JAILLET <christophe.jaillet@wanadoo.fr>
+
+[ Upstream commit 934ed3847a4ebc75b655659c4d2349ba4337941c ]
+
+In the probe function, in case of error, resources allocated in
+'lp8788_setup_adc_channel()' must be released.
+
+This can be achieved easily by using the devm_ variant of
+'iio_channel_get()'.
+This has the extra benefit to simplify the remove function and to axe the
+'lp8788_release_adc_channel()' function which is now useless.
+
+Fixes: 98a276649358 ("power_supply: Add new lp8788 charger driver")
+Signed-off-by: Christophe JAILLET <christophe.jaillet@wanadoo.fr>
+Signed-off-by: Sebastian Reichel <sebastian.reichel@collabora.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/power/supply/lp8788-charger.c | 18 ++----------------
+ 1 file changed, 2 insertions(+), 16 deletions(-)
+
+diff --git a/drivers/power/supply/lp8788-charger.c b/drivers/power/supply/lp8788-charger.c
+index 0f3432795f3c2..b8f7dac7ac3fe 100644
+--- a/drivers/power/supply/lp8788-charger.c
++++ b/drivers/power/supply/lp8788-charger.c
+@@ -600,27 +600,14 @@ static void lp8788_setup_adc_channel(struct device *dev,
+               return;
+       /* ADC channel for battery voltage */
+-      chan = iio_channel_get(dev, pdata->adc_vbatt);
++      chan = devm_iio_channel_get(dev, pdata->adc_vbatt);
+       pchg->chan[LP8788_VBATT] = IS_ERR(chan) ? NULL : chan;
+       /* ADC channel for battery temperature */
+-      chan = iio_channel_get(dev, pdata->adc_batt_temp);
++      chan = devm_iio_channel_get(dev, pdata->adc_batt_temp);
+       pchg->chan[LP8788_BATT_TEMP] = IS_ERR(chan) ? NULL : chan;
+ }
+-static void lp8788_release_adc_channel(struct lp8788_charger *pchg)
+-{
+-      int i;
+-
+-      for (i = 0; i < LP8788_NUM_CHG_ADC; i++) {
+-              if (!pchg->chan[i])
+-                      continue;
+-
+-              iio_channel_release(pchg->chan[i]);
+-              pchg->chan[i] = NULL;
+-      }
+-}
+-
+ static ssize_t lp8788_show_charger_status(struct device *dev,
+                               struct device_attribute *attr, char *buf)
+ {
+@@ -747,7 +734,6 @@ static int lp8788_charger_remove(struct platform_device *pdev)
+       lp8788_irq_unregister(pdev, pchg);
+       sysfs_remove_group(&pdev->dev.kobj, &lp8788_attr_group);
+       lp8788_psy_unregister(pchg);
+-      lp8788_release_adc_channel(pchg);
+       return 0;
+ }
+-- 
+2.25.1
+
diff --git a/queue-4.19/power-supply-smb347-charger-irqstat_d-is-volatile.patch b/queue-4.19/power-supply-smb347-charger-irqstat_d-is-volatile.patch
new file mode 100644 (file)
index 0000000..b62bb6a
--- /dev/null
@@ -0,0 +1,38 @@
+From 8215c96ecf2e67e83012cb4450f58dabcf1f0362 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Sun, 29 Mar 2020 18:15:44 +0200
+Subject: power: supply: smb347-charger: IRQSTAT_D is volatile
+
+From: Dmitry Osipenko <digetx@gmail.com>
+
+[ Upstream commit c32ea07a30630ace950e07ffe7a18bdcc25898e1 ]
+
+Fix failure when USB cable is connected:
+smb347 2-006a: reading IRQSTAT_D failed
+
+Fixes: 1502cfe19bac ("smb347-charger: Fix battery status reporting logic for charger faults")
+
+Tested-by: David Heidelberg <david@ixit.cz>
+Signed-off-by: Dmitry Osipenko <digetx@gmail.com>
+Signed-off-by: David Heidelberg <david@ixit.cz>
+Signed-off-by: Sebastian Reichel <sebastian.reichel@collabora.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/power/supply/smb347-charger.c | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/drivers/power/supply/smb347-charger.c b/drivers/power/supply/smb347-charger.c
+index 072c5189bd6d1..0655dbdc7000d 100644
+--- a/drivers/power/supply/smb347-charger.c
++++ b/drivers/power/supply/smb347-charger.c
+@@ -1141,6 +1141,7 @@ static bool smb347_volatile_reg(struct device *dev, unsigned int reg)
+       switch (reg) {
+       case IRQSTAT_A:
+       case IRQSTAT_C:
++      case IRQSTAT_D:
+       case IRQSTAT_E:
+       case IRQSTAT_F:
+       case STAT_A:
+-- 
+2.25.1
+
diff --git a/queue-4.19/powerpc-4xx-don-t-unmap-null-mbase.patch b/queue-4.19/powerpc-4xx-don-t-unmap-null-mbase.patch
new file mode 100644 (file)
index 0000000..2b4339a
--- /dev/null
@@ -0,0 +1,43 @@
+From bf4aee82722065e2420c8316fbc8972fcb6f8712 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Thu, 21 May 2020 17:26:48 +1000
+Subject: powerpc/4xx: Don't unmap NULL mbase
+
+From: huhai <huhai@tj.kylinos.cn>
+
+[ Upstream commit bcec081ecc940fc38730b29c743bbee661164161 ]
+
+Signed-off-by: huhai <huhai@tj.kylinos.cn>
+Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
+Link: https://lore.kernel.org/r/20200521072648.1254699-1-mpe@ellerman.id.au
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ arch/powerpc/platforms/4xx/pci.c | 4 +---
+ 1 file changed, 1 insertion(+), 3 deletions(-)
+
+diff --git a/arch/powerpc/platforms/4xx/pci.c b/arch/powerpc/platforms/4xx/pci.c
+index 5aca523551aed..2f237027fdccf 100644
+--- a/arch/powerpc/platforms/4xx/pci.c
++++ b/arch/powerpc/platforms/4xx/pci.c
+@@ -1242,7 +1242,7 @@ static void __init ppc460sx_pciex_check_link(struct ppc4xx_pciex_port *port)
+       if (mbase == NULL) {
+               printk(KERN_ERR "%pOF: Can't map internal config space !",
+                       port->node);
+-              goto done;
++              return;
+       }
+       while (attempt && (0 == (in_le32(mbase + PECFG_460SX_DLLSTA)
+@@ -1252,9 +1252,7 @@ static void __init ppc460sx_pciex_check_link(struct ppc4xx_pciex_port *port)
+       }
+       if (attempt)
+               port->link = 1;
+-done:
+       iounmap(mbase);
+-
+ }
+ static struct ppc4xx_pciex_hwops ppc460sx_pcie_hwops __initdata = {
+-- 
+2.25.1
+
diff --git a/queue-4.19/powerpc-64-don-t-initialise-init_task-thread.regs.patch b/queue-4.19/powerpc-64-don-t-initialise-init_task-thread.regs.patch
new file mode 100644 (file)
index 0000000..2b15d9d
--- /dev/null
@@ -0,0 +1,182 @@
+From af68c8d305758b95937a8c23fb1a0ccec39a03a8 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Tue, 28 Apr 2020 22:31:30 +1000
+Subject: powerpc/64: Don't initialise init_task->thread.regs
+
+From: Michael Ellerman <mpe@ellerman.id.au>
+
+[ Upstream commit 7ffa8b7dc11752827329e4e84a574ea6aaf24716 ]
+
+Aneesh increased the size of struct pt_regs by 16 bytes and started
+seeing this WARN_ON:
+
+  smp: Bringing up secondary CPUs ...
+  ------------[ cut here ]------------
+  WARNING: CPU: 0 PID: 0 at arch/powerpc/kernel/process.c:455 giveup_all+0xb4/0x110
+  Modules linked in:
+  CPU: 0 PID: 0 Comm: swapper/0 Not tainted 5.7.0-rc2-gcc-8.2.0-1.g8f6a41f-default+ #318
+  NIP:  c00000000001a2b4 LR: c00000000001a29c CTR: c0000000031d0000
+  REGS: c0000000026d3980 TRAP: 0700   Not tainted  (5.7.0-rc2-gcc-8.2.0-1.g8f6a41f-default+)
+  MSR:  800000000282b033 <SF,VEC,VSX,EE,FP,ME,IR,DR,RI,LE>  CR: 48048224  XER: 00000000
+  CFAR: c000000000019cc8 IRQMASK: 1
+  GPR00: c00000000001a264 c0000000026d3c20 c0000000026d7200 800000000280b033
+  GPR04: 0000000000000001 0000000000000000 0000000000000077 30206d7372203164
+  GPR08: 0000000000002000 0000000002002000 800000000280b033 3230303030303030
+  GPR12: 0000000000008800 c0000000031d0000 0000000000800050 0000000002000066
+  GPR16: 000000000309a1a0 000000000309a4b0 000000000309a2d8 000000000309a890
+  GPR20: 00000000030d0098 c00000000264da40 00000000fd620000 c0000000ff798080
+  GPR24: c00000000264edf0 c0000001007469f0 00000000fd620000 c0000000020e5e90
+  GPR28: c00000000264edf0 c00000000264d200 000000001db60000 c00000000264d200
+  NIP [c00000000001a2b4] giveup_all+0xb4/0x110
+  LR [c00000000001a29c] giveup_all+0x9c/0x110
+  Call Trace:
+  [c0000000026d3c20] [c00000000001a264] giveup_all+0x64/0x110 (unreliable)
+  [c0000000026d3c90] [c00000000001ae34] __switch_to+0x104/0x480
+  [c0000000026d3cf0] [c000000000e0b8a0] __schedule+0x320/0x970
+  [c0000000026d3dd0] [c000000000e0c518] schedule_idle+0x38/0x70
+  [c0000000026d3df0] [c00000000019c7c8] do_idle+0x248/0x3f0
+  [c0000000026d3e70] [c00000000019cbb8] cpu_startup_entry+0x38/0x40
+  [c0000000026d3ea0] [c000000000011bb0] rest_init+0xe0/0xf8
+  [c0000000026d3ed0] [c000000002004820] start_kernel+0x990/0x9e0
+  [c0000000026d3f90] [c00000000000c49c] start_here_common+0x1c/0x400
+
+Which was unexpected. The warning is checking the thread.regs->msr
+value of the task we are switching from:
+
+  usermsr = tsk->thread.regs->msr;
+  ...
+  WARN_ON((usermsr & MSR_VSX) && !((usermsr & MSR_FP) && (usermsr & MSR_VEC)));
+
+ie. if MSR_VSX is set then both of MSR_FP and MSR_VEC are also set.
+
+Dumping tsk->thread.regs->msr we see that it's: 0x1db60000
+
+Which is not a normal looking MSR, in fact the only valid bit is
+MSR_VSX, all the other bits are reserved in the current definition of
+the MSR.
+
+We can see from the oops that it was swapper/0 that we were switching
+from when we hit the warning, ie. init_task. So its thread.regs points
+to the base (high addresses) in init_stack.
+
+Dumping the content of init_task->thread.regs, with the members of
+pt_regs annotated (the 16 bytes larger version), we see:
+
+  0000000000000000 c000000002780080    gpr[0]     gpr[1]
+  0000000000000000 c000000002666008    gpr[2]     gpr[3]
+  c0000000026d3ed0 0000000000000078    gpr[4]     gpr[5]
+  c000000000011b68 c000000002780080    gpr[6]     gpr[7]
+  0000000000000000 0000000000000000    gpr[8]     gpr[9]
+  c0000000026d3f90 0000800000002200    gpr[10]    gpr[11]
+  c000000002004820 c0000000026d7200    gpr[12]    gpr[13]
+  000000001db60000 c0000000010aabe8    gpr[14]    gpr[15]
+  c0000000010aabe8 c0000000010aabe8    gpr[16]    gpr[17]
+  c00000000294d598 0000000000000000    gpr[18]    gpr[19]
+  0000000000000000 0000000000001ff8    gpr[20]    gpr[21]
+  0000000000000000 c00000000206d608    gpr[22]    gpr[23]
+  c00000000278e0cc 0000000000000000    gpr[24]    gpr[25]
+  000000002fff0000 c000000000000000    gpr[26]    gpr[27]
+  0000000002000000 0000000000000028    gpr[28]    gpr[29]
+  000000001db60000 0000000004750000    gpr[30]    gpr[31]
+  0000000002000000 000000001db60000    nip        msr
+  0000000000000000 0000000000000000    orig_r3    ctr
+  c00000000000c49c 0000000000000000    link       xer
+  0000000000000000 0000000000000000    ccr        softe
+  0000000000000000 0000000000000000    trap       dar
+  0000000000000000 0000000000000000    dsisr      result
+  0000000000000000 0000000000000000    ppr        kuap
+  0000000000000000 0000000000000000    pad[2]     pad[3]
+
+This looks suspiciously like stack frames, not a pt_regs. If we look
+closely we can see return addresses from the stack trace above,
+c000000002004820 (start_kernel) and c00000000000c49c (start_here_common).
+
+init_task->thread.regs is setup at build time in processor.h:
+
+  #define INIT_THREAD  { \
+       .ksp = INIT_SP, \
+       .regs = (struct pt_regs *)INIT_SP - 1, /* XXX bogus, I think */ \
+
+The early boot code where we setup the initial stack is:
+
+  LOAD_REG_ADDR(r3,init_thread_union)
+
+  /* set up a stack pointer */
+  LOAD_REG_IMMEDIATE(r1,THREAD_SIZE)
+  add  r1,r3,r1
+  li   r0,0
+  stdu r0,-STACK_FRAME_OVERHEAD(r1)
+
+Which creates a stack frame of size 112 bytes (STACK_FRAME_OVERHEAD).
+Which is far too small to contain a pt_regs.
+
+So the result is init_task->thread.regs is pointing at some stack
+frames on the init stack, not at a pt_regs.
+
+We have gotten away with this for so long because with pt_regs at its
+current size the MSR happens to point into the first frame, at a
+location that is not written to by the early asm. With the 16 byte
+expansion the MSR falls into the second frame, which is used by the
+compiler, and collides with a saved register that tends to be
+non-zero.
+
+As far as I can see this has been wrong since the original merge of
+64-bit ppc support, back in 2002.
+
+Conceptually swapper should have no regs, it never entered from
+userspace, and in fact that's what we do on 32-bit. It's also
+presumably what the "bogus" comment is referring to.
+
+So I think the right fix is to just not-initialise regs at all. I'm
+slightly worried this will break some code that isn't prepared for a
+NULL regs, but we'll have to see.
+
+Remove the comment in head_64.S which refers to us setting up the
+regs (even though we never did), and is otherwise not really accurate
+any more.
+
+Reported-by: Aneesh Kumar K.V <aneesh.kumar@linux.ibm.com>
+Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
+Link: https://lore.kernel.org/r/20200428123130.73078-1-mpe@ellerman.id.au
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ arch/powerpc/include/asm/processor.h | 1 -
+ arch/powerpc/kernel/head_64.S        | 9 +--------
+ 2 files changed, 1 insertion(+), 9 deletions(-)
+
+diff --git a/arch/powerpc/include/asm/processor.h b/arch/powerpc/include/asm/processor.h
+index 52fadded5c1ef..45bbcffcb7b67 100644
+--- a/arch/powerpc/include/asm/processor.h
++++ b/arch/powerpc/include/asm/processor.h
+@@ -386,7 +386,6 @@ struct thread_struct {
+ #else
+ #define INIT_THREAD  { \
+       .ksp = INIT_SP, \
+-      .regs = (struct pt_regs *)INIT_SP - 1, /* XXX bogus, I think */ \
+       .addr_limit = KERNEL_DS, \
+       .fpexc_mode = 0, \
+       .ppr = INIT_PPR, \
+diff --git a/arch/powerpc/kernel/head_64.S b/arch/powerpc/kernel/head_64.S
+index 3fb564f3e8874..389da790c1296 100644
+--- a/arch/powerpc/kernel/head_64.S
++++ b/arch/powerpc/kernel/head_64.S
+@@ -950,15 +950,8 @@ start_here_multiplatform:
+       std     r0,0(r4)
+ #endif
+-      /* The following gets the stack set up with the regs */
+-      /* pointing to the real addr of the kernel stack.  This is   */
+-      /* all done to support the C function call below which sets  */
+-      /* up the htab.  This is done because we have relocated the  */
+-      /* kernel but are still running in real mode. */
+-
+-      LOAD_REG_ADDR(r3,init_thread_union)
+-
+       /* set up a stack pointer */
++      LOAD_REG_ADDR(r3,init_thread_union)
+       LOAD_REG_IMMEDIATE(r1,THREAD_SIZE)
+       add     r1,r3,r1
+       li      r0,0
+-- 
+2.25.1
+
diff --git a/queue-4.19/powerpc-64s-pgtable-fix-an-undefined-behaviour.patch b/queue-4.19/powerpc-64s-pgtable-fix-an-undefined-behaviour.patch
new file mode 100644 (file)
index 0000000..ffc2de9
--- /dev/null
@@ -0,0 +1,79 @@
+From d3569fb7aaa7fbac6a9a0e048b428c1c29471193 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Thu, 5 Mar 2020 23:48:52 -0500
+Subject: powerpc/64s/pgtable: fix an undefined behaviour
+
+From: Qian Cai <cai@lca.pw>
+
+[ Upstream commit c2e929b18cea6cbf71364f22d742d9aad7f4677a ]
+
+Booting a power9 server with hash MMU could trigger an undefined
+behaviour because pud_offset(p4d, 0) will do,
+
+0 >> (PAGE_SHIFT:16 + PTE_INDEX_SIZE:8 + H_PMD_INDEX_SIZE:10)
+
+Fix it by converting pud_index() and friends to static inline
+functions.
+
+UBSAN: shift-out-of-bounds in arch/powerpc/mm/ptdump/ptdump.c:282:15
+shift exponent 34 is too large for 32-bit type 'int'
+CPU: 6 PID: 1 Comm: swapper/0 Not tainted 5.6.0-rc4-next-20200303+ #13
+Call Trace:
+dump_stack+0xf4/0x164 (unreliable)
+ubsan_epilogue+0x18/0x78
+__ubsan_handle_shift_out_of_bounds+0x160/0x21c
+walk_pagetables+0x2cc/0x700
+walk_pud at arch/powerpc/mm/ptdump/ptdump.c:282
+(inlined by) walk_pagetables at arch/powerpc/mm/ptdump/ptdump.c:311
+ptdump_check_wx+0x8c/0xf0
+mark_rodata_ro+0x48/0x80
+kernel_init+0x74/0x194
+ret_from_kernel_thread+0x5c/0x74
+
+Suggested-by: Christophe Leroy <christophe.leroy@c-s.fr>
+Signed-off-by: Qian Cai <cai@lca.pw>
+Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
+Reviewed-by: Christophe Leroy <christophe.leroy@c-s.fr>
+Link: https://lore.kernel.org/r/20200306044852.3236-1-cai@lca.pw
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ arch/powerpc/include/asm/book3s/64/pgtable.h | 23 ++++++++++++++++----
+ 1 file changed, 19 insertions(+), 4 deletions(-)
+
+diff --git a/arch/powerpc/include/asm/book3s/64/pgtable.h b/arch/powerpc/include/asm/book3s/64/pgtable.h
+index 2aea6efc2e63d..008eb63fa851d 100644
+--- a/arch/powerpc/include/asm/book3s/64/pgtable.h
++++ b/arch/powerpc/include/asm/book3s/64/pgtable.h
+@@ -985,10 +985,25 @@ extern struct page *pgd_page(pgd_t pgd);
+ #define pud_page_vaddr(pud)   __va(pud_val(pud) & ~PUD_MASKED_BITS)
+ #define pgd_page_vaddr(pgd)   __va(pgd_val(pgd) & ~PGD_MASKED_BITS)
+-#define pgd_index(address) (((address) >> (PGDIR_SHIFT)) & (PTRS_PER_PGD - 1))
+-#define pud_index(address) (((address) >> (PUD_SHIFT)) & (PTRS_PER_PUD - 1))
+-#define pmd_index(address) (((address) >> (PMD_SHIFT)) & (PTRS_PER_PMD - 1))
+-#define pte_index(address) (((address) >> (PAGE_SHIFT)) & (PTRS_PER_PTE - 1))
++static inline unsigned long pgd_index(unsigned long address)
++{
++      return (address >> PGDIR_SHIFT) & (PTRS_PER_PGD - 1);
++}
++
++static inline unsigned long pud_index(unsigned long address)
++{
++      return (address >> PUD_SHIFT) & (PTRS_PER_PUD - 1);
++}
++
++static inline unsigned long pmd_index(unsigned long address)
++{
++      return (address >> PMD_SHIFT) & (PTRS_PER_PMD - 1);
++}
++
++static inline unsigned long pte_index(unsigned long address)
++{
++      return (address >> PAGE_SHIFT) & (PTRS_PER_PTE - 1);
++}
+ /*
+  * Find an entry in a page-table-directory.  We combine the address region
+-- 
+2.25.1
+
diff --git a/queue-4.19/powerpc-crashkernel-take-mem-option-into-account.patch b/queue-4.19/powerpc-crashkernel-take-mem-option-into-account.patch
new file mode 100644 (file)
index 0000000..37db422
--- /dev/null
@@ -0,0 +1,81 @@
+From 109b1daa04f09fdcb6af5f7e555b31ebc136a0a7 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Wed, 1 Apr 2020 22:00:44 +0800
+Subject: powerpc/crashkernel: Take "mem=" option into account
+
+From: Pingfan Liu <kernelfans@gmail.com>
+
+[ Upstream commit be5470e0c285a68dc3afdea965032f5ddc8269d7 ]
+
+'mem=" option is an easy way to put high pressure on memory during
+some test. Hence after applying the memory limit, instead of total
+mem, the actual usable memory should be considered when reserving mem
+for crashkernel. Otherwise the boot up may experience OOM issue.
+
+E.g. it would reserve 4G prior to the change and 512M afterward, if
+passing
+crashkernel="2G-4G:384M,4G-16G:512M,16G-64G:1G,64G-128G:2G,128G-:4G",
+and mem=5G on a 256G machine.
+
+This issue is powerpc specific because it puts higher priority on
+fadump and kdump reservation than on "mem=". Referring the following
+code:
+    if (fadump_reserve_mem() == 0)
+            reserve_crashkernel();
+    ...
+    /* Ensure that total memory size is page-aligned. */
+    limit = ALIGN(memory_limit ?: memblock_phys_mem_size(), PAGE_SIZE);
+    memblock_enforce_memory_limit(limit);
+
+While on other arches, the effect of "mem=" takes a higher priority
+and pass through memblock_phys_mem_size() before calling
+reserve_crashkernel().
+
+Signed-off-by: Pingfan Liu <kernelfans@gmail.com>
+Reviewed-by: Hari Bathini <hbathini@linux.ibm.com>
+Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
+Link: https://lore.kernel.org/r/1585749644-4148-1-git-send-email-kernelfans@gmail.com
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ arch/powerpc/kernel/machine_kexec.c | 8 +++++---
+ 1 file changed, 5 insertions(+), 3 deletions(-)
+
+diff --git a/arch/powerpc/kernel/machine_kexec.c b/arch/powerpc/kernel/machine_kexec.c
+index 63f5a9311a294..094c37fb07a96 100644
+--- a/arch/powerpc/kernel/machine_kexec.c
++++ b/arch/powerpc/kernel/machine_kexec.c
+@@ -116,11 +116,12 @@ void machine_kexec(struct kimage *image)
+ void __init reserve_crashkernel(void)
+ {
+-      unsigned long long crash_size, crash_base;
++      unsigned long long crash_size, crash_base, total_mem_sz;
+       int ret;
++      total_mem_sz = memory_limit ? memory_limit : memblock_phys_mem_size();
+       /* use common parsing */
+-      ret = parse_crashkernel(boot_command_line, memblock_phys_mem_size(),
++      ret = parse_crashkernel(boot_command_line, total_mem_sz,
+                       &crash_size, &crash_base);
+       if (ret == 0 && crash_size > 0) {
+               crashk_res.start = crash_base;
+@@ -179,6 +180,7 @@ void __init reserve_crashkernel(void)
+       /* Crash kernel trumps memory limit */
+       if (memory_limit && memory_limit <= crashk_res.end) {
+               memory_limit = crashk_res.end + 1;
++              total_mem_sz = memory_limit;
+               printk("Adjusted memory limit for crashkernel, now 0x%llx\n",
+                      memory_limit);
+       }
+@@ -187,7 +189,7 @@ void __init reserve_crashkernel(void)
+                       "for crashkernel (System RAM: %ldMB)\n",
+                       (unsigned long)(crash_size >> 20),
+                       (unsigned long)(crashk_res.start >> 20),
+-                      (unsigned long)(memblock_phys_mem_size() >> 20));
++                      (unsigned long)(total_mem_sz >> 20));
+       if (!memblock_is_region_memory(crashk_res.start, crash_size) ||
+           memblock_reserve(crashk_res.start, crash_size)) {
+-- 
+2.25.1
+
diff --git a/queue-4.19/powerpc-perf-hv-24x7-fix-inconsistent-output-values-.patch b/queue-4.19/powerpc-perf-hv-24x7-fix-inconsistent-output-values-.patch
new file mode 100644 (file)
index 0000000..7072425
--- /dev/null
@@ -0,0 +1,96 @@
+From ad0868de7711bd323def2d1face12b3a165cdfee Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Mon, 25 May 2020 16:13:03 +0530
+Subject: powerpc/perf/hv-24x7: Fix inconsistent output values incase multiple
+ hv-24x7 events run
+
+From: Kajol Jain <kjain@linux.ibm.com>
+
+[ Upstream commit b4ac18eead28611ff470d0f47a35c4e0ac080d9c ]
+
+Commit 2b206ee6b0df ("powerpc/perf/hv-24x7: Display change in counter
+values")' added to print _change_ in the counter value rather then raw
+value for 24x7 counters. Incase of transactions, the event count
+is set to 0 at the beginning of the transaction. It also sets
+the event's prev_count to the raw value at the time of initialization.
+Because of setting event count to 0, we are seeing some weird behaviour,
+whenever we run multiple 24x7 events at a time.
+
+For example:
+
+command#: ./perf stat -e "{hv_24x7/PM_MCS01_128B_RD_DISP_PORT01,chip=0/,
+                          hv_24x7/PM_MCS01_128B_RD_DISP_PORT01,chip=1/}"
+                          -C 0 -I 1000 sleep 100
+
+     1.000121704                120 hv_24x7/PM_MCS01_128B_RD_DISP_PORT01,chip=0/
+     1.000121704                  5 hv_24x7/PM_MCS01_128B_RD_DISP_PORT01,chip=1/
+     2.000357733                  8 hv_24x7/PM_MCS01_128B_RD_DISP_PORT01,chip=0/
+     2.000357733                 10 hv_24x7/PM_MCS01_128B_RD_DISP_PORT01,chip=1/
+     3.000495215 18,446,744,073,709,551,616 hv_24x7/PM_MCS01_128B_RD_DISP_PORT01,chip=0/
+     3.000495215 18,446,744,073,709,551,616 hv_24x7/PM_MCS01_128B_RD_DISP_PORT01,chip=1/
+     4.000641884                 56 hv_24x7/PM_MCS01_128B_RD_DISP_PORT01,chip=0/
+     4.000641884 18,446,744,073,709,551,616 hv_24x7/PM_MCS01_128B_RD_DISP_PORT01,chip=1/
+     5.000791887 18,446,744,073,709,551,616 hv_24x7/PM_MCS01_128B_RD_DISP_PORT01,chip=0/
+
+Getting these large values in case we do -I.
+
+As we are setting event_count to 0, for interval case, overall event_count is not
+coming in incremental order. As we may can get new delta lesser then previous count.
+Because of which when we print intervals, we are getting negative value which create
+these large values.
+
+This patch removes part where we set event_count to 0 in function
+'h_24x7_event_read'. There won't be much impact as we do set event->hw.prev_count
+to the raw value at the time of initialization to print change value.
+
+With this patch
+In power9 platform
+
+command#: ./perf stat -e "{hv_24x7/PM_MCS01_128B_RD_DISP_PORT01,chip=0/,
+                          hv_24x7/PM_MCS01_128B_RD_DISP_PORT01,chip=1/}"
+                          -C 0 -I 1000 sleep 100
+
+     1.000117685                 93 hv_24x7/PM_MCS01_128B_RD_DISP_PORT01,chip=0/
+     1.000117685                  1 hv_24x7/PM_MCS01_128B_RD_DISP_PORT01,chip=1/
+     2.000349331                 98 hv_24x7/PM_MCS01_128B_RD_DISP_PORT01,chip=0/
+     2.000349331                  2 hv_24x7/PM_MCS01_128B_RD_DISP_PORT01,chip=1/
+     3.000495900                131 hv_24x7/PM_MCS01_128B_RD_DISP_PORT01,chip=0/
+     3.000495900                  4 hv_24x7/PM_MCS01_128B_RD_DISP_PORT01,chip=1/
+     4.000645920                204 hv_24x7/PM_MCS01_128B_RD_DISP_PORT01,chip=0/
+     4.000645920                 61 hv_24x7/PM_MCS01_128B_RD_DISP_PORT01,chip=1/
+     4.284169997                 22 hv_24x7/PM_MCS01_128B_RD_DISP_PORT01,chip=0/
+
+Suggested-by: Sukadev Bhattiprolu <sukadev@linux.vnet.ibm.com>
+Signed-off-by: Kajol Jain <kjain@linux.ibm.com>
+Tested-by: Madhavan Srinivasan <maddy@linux.ibm.com>
+Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
+Link: https://lore.kernel.org/r/20200525104308.9814-2-kjain@linux.ibm.com
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ arch/powerpc/perf/hv-24x7.c | 10 ----------
+ 1 file changed, 10 deletions(-)
+
+diff --git a/arch/powerpc/perf/hv-24x7.c b/arch/powerpc/perf/hv-24x7.c
+index 72238eedc360f..2bb798918483d 100644
+--- a/arch/powerpc/perf/hv-24x7.c
++++ b/arch/powerpc/perf/hv-24x7.c
+@@ -1413,16 +1413,6 @@ static void h_24x7_event_read(struct perf_event *event)
+                       h24x7hw = &get_cpu_var(hv_24x7_hw);
+                       h24x7hw->events[i] = event;
+                       put_cpu_var(h24x7hw);
+-                      /*
+-                       * Clear the event count so we can compute the _change_
+-                       * in the 24x7 raw counter value at the end of the txn.
+-                       *
+-                       * Note that we could alternatively read the 24x7 value
+-                       * now and save its value in event->hw.prev_count. But
+-                       * that would require issuing a hcall, which would then
+-                       * defeat the purpose of using the txn interface.
+-                       */
+-                      local64_set(&event->count, 0);
+               }
+               put_cpu_var(hv_24x7_reqb);
+-- 
+2.25.1
+
diff --git a/queue-4.19/powerpc-ps3-fix-kexec-shutdown-hang.patch b/queue-4.19/powerpc-ps3-fix-kexec-shutdown-hang.patch
new file mode 100644 (file)
index 0000000..74a358f
--- /dev/null
@@ -0,0 +1,83 @@
+From 97817749332288cec1e9b9528c74ee3921a52e5d Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Sat, 9 May 2020 18:58:32 +0000
+Subject: powerpc/ps3: Fix kexec shutdown hang
+
+From: Geoff Levand <geoff@infradead.org>
+
+[ Upstream commit 126554465d93b10662742128918a5fc338cda4aa ]
+
+The ps3_mm_region_destroy() and ps3_mm_vas_destroy() routines
+are called very late in the shutdown via kexec's mmu_cleanup_all
+routine.  By the time mmu_cleanup_all runs it is too late to use
+udbg_printf, and calling it will cause PS3 systems to hang.
+
+Remove all debugging statements from ps3_mm_region_destroy() and
+ps3_mm_vas_destroy() and replace any error reporting with calls
+to lv1_panic.
+
+With this change builds with 'DEBUG' defined will not cause kexec
+reboots to hang, and builds with 'DEBUG' defined or not will end
+in lv1_panic if an error is encountered.
+
+Signed-off-by: Geoff Levand <geoff@infradead.org>
+Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
+Link: https://lore.kernel.org/r/7325c4af2b4c989c19d6a26b90b1fec9c0615ddf.1589049250.git.geoff@infradead.org
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ arch/powerpc/platforms/ps3/mm.c | 22 ++++++++++++----------
+ 1 file changed, 12 insertions(+), 10 deletions(-)
+
+diff --git a/arch/powerpc/platforms/ps3/mm.c b/arch/powerpc/platforms/ps3/mm.c
+index 8c7009d001d96..894f62d77a777 100644
+--- a/arch/powerpc/platforms/ps3/mm.c
++++ b/arch/powerpc/platforms/ps3/mm.c
+@@ -212,13 +212,14 @@ void ps3_mm_vas_destroy(void)
+ {
+       int result;
+-      DBG("%s:%d: map.vas_id    = %llu\n", __func__, __LINE__, map.vas_id);
+-
+       if (map.vas_id) {
+               result = lv1_select_virtual_address_space(0);
+-              BUG_ON(result);
+-              result = lv1_destruct_virtual_address_space(map.vas_id);
+-              BUG_ON(result);
++              result += lv1_destruct_virtual_address_space(map.vas_id);
++
++              if (result) {
++                      lv1_panic(0);
++              }
++
+               map.vas_id = 0;
+       }
+ }
+@@ -316,19 +317,20 @@ static void ps3_mm_region_destroy(struct mem_region *r)
+       int result;
+       if (!r->destroy) {
+-              pr_info("%s:%d: Not destroying high region: %llxh %llxh\n",
+-                      __func__, __LINE__, r->base, r->size);
+               return;
+       }
+-      DBG("%s:%d: r->base = %llxh\n", __func__, __LINE__, r->base);
+-
+       if (r->base) {
+               result = lv1_release_memory(r->base);
+-              BUG_ON(result);
++
++              if (result) {
++                      lv1_panic(0);
++              }
++
+               r->size = r->base = r->offset = 0;
+               map.total = map.rm.size;
+       }
++
+       ps3_mm_set_repository_highmem(NULL);
+ }
+-- 
+2.25.1
+
diff --git a/queue-4.19/powerpc-pseries-ras-fix-fwnmi_valid-off-by-one.patch b/queue-4.19/powerpc-pseries-ras-fix-fwnmi_valid-off-by-one.patch
new file mode 100644 (file)
index 0000000..fea62da
--- /dev/null
@@ -0,0 +1,46 @@
+From bd6ed0d9def0fce5f6b0cfb74831d0b595941005 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Fri, 8 May 2020 14:33:58 +1000
+Subject: powerpc/pseries/ras: Fix FWNMI_VALID off by one
+
+From: Nicholas Piggin <npiggin@gmail.com>
+
+[ Upstream commit deb70f7a35a22dffa55b2c3aac71bc6fb0f486ce ]
+
+This was discovered developing qemu fwnmi sreset support. This
+off-by-one bug means the last 16 bytes of the rtas area can not
+be used for a 16 byte save area.
+
+It's not a serious bug, and QEMU implementation has to retain a
+workaround for old kernels, but it's good to tighten it.
+
+Signed-off-by: Nicholas Piggin <npiggin@gmail.com>
+Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
+Acked-by: Mahesh Salgaonkar <mahesh@linux.ibm.com>
+Link: https://lore.kernel.org/r/20200508043408.886394-7-npiggin@gmail.com
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ arch/powerpc/platforms/pseries/ras.c | 5 +++--
+ 1 file changed, 3 insertions(+), 2 deletions(-)
+
+diff --git a/arch/powerpc/platforms/pseries/ras.c b/arch/powerpc/platforms/pseries/ras.c
+index 851ce326874a4..e81a285f3a6ce 100644
+--- a/arch/powerpc/platforms/pseries/ras.c
++++ b/arch/powerpc/platforms/pseries/ras.c
+@@ -328,10 +328,11 @@ static irqreturn_t ras_error_interrupt(int irq, void *dev_id)
+ /*
+  * Some versions of FWNMI place the buffer inside the 4kB page starting at
+  * 0x7000. Other versions place it inside the rtas buffer. We check both.
++ * Minimum size of the buffer is 16 bytes.
+  */
+ #define VALID_FWNMI_BUFFER(A) \
+-      ((((A) >= 0x7000) && ((A) < 0x7ff0)) || \
+-      (((A) >= rtas.base) && ((A) < (rtas.base + rtas.size - 16))))
++      ((((A) >= 0x7000) && ((A) <= 0x8000 - 16)) || \
++      (((A) >= rtas.base) && ((A) <= (rtas.base + rtas.size - 16))))
+ static inline struct rtas_error_log *fwnmi_get_errlog(void)
+ {
+-- 
+2.25.1
+
diff --git a/queue-4.19/ps3disk-use-the-default-segment-boundary.patch b/queue-4.19/ps3disk-use-the-default-segment-boundary.patch
new file mode 100644 (file)
index 0000000..b9fdbf9
--- /dev/null
@@ -0,0 +1,89 @@
+From 129b4cf571d1df5909c123db1153c323a4d0cb1d Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Sat, 9 May 2020 18:58:32 +0000
+Subject: ps3disk: use the default segment boundary
+
+From: Emmanuel Nicolet <emmanuel.nicolet@gmail.com>
+
+[ Upstream commit 720bc316690bd27dea9d71510b50f0cd698ffc32 ]
+
+Since commit dcebd755926b ("block: use bio_for_each_bvec() to compute
+multi-page bvec count"), the kernel will bug_on on the PS3 because
+bio_split() is called with sectors == 0:
+
+  kernel BUG at block/bio.c:1853!
+  Oops: Exception in kernel mode, sig: 5 [#1]
+  BE PAGE_SIZE=4K MMU=Hash PREEMPT SMP NR_CPUS=8 NUMA PS3
+  Modules linked in: firewire_sbp2 rtc_ps3(+) soundcore ps3_gelic(+) \
+  ps3rom(+) firewire_core ps3vram(+) usb_common crc_itu_t
+  CPU: 0 PID: 97 Comm: blkid Not tainted 5.3.0-rc4 #1
+  NIP:  c00000000027d0d0 LR: c00000000027d0b0 CTR: 0000000000000000
+  REGS: c00000000135ae90 TRAP: 0700   Not tainted  (5.3.0-rc4)
+  MSR:  8000000000028032 <SF,EE,IR,DR,RI>  CR: 44008240  XER: 20000000
+  IRQMASK: 0
+  GPR00: c000000000289368 c00000000135b120 c00000000084a500 c000000004ff8300
+  GPR04: 0000000000000c00 c000000004c905e0 c000000004c905e0 000000000000ffff
+  GPR08: 0000000000000000 0000000000000001 0000000000000000 000000000000ffff
+  GPR12: 0000000000000000 c0000000008ef000 000000000000003e 0000000000080001
+  GPR16: 0000000000000100 000000000000ffff 0000000000000000 0000000000000004
+  GPR20: c00000000062fd7e 0000000000000001 000000000000ffff 0000000000000080
+  GPR24: c000000000781788 c00000000135b350 0000000000000080 c000000004c905e0
+  GPR28: c00000000135b348 c000000004ff8300 0000000000000000 c000000004c90000
+  NIP [c00000000027d0d0] .bio_split+0x28/0xac
+  LR [c00000000027d0b0] .bio_split+0x8/0xac
+  Call Trace:
+  [c00000000135b120] [c00000000027d130] .bio_split+0x88/0xac (unreliable)
+  [c00000000135b1b0] [c000000000289368] .__blk_queue_split+0x11c/0x53c
+  [c00000000135b2d0] [c00000000028f614] .blk_mq_make_request+0x80/0x7d4
+  [c00000000135b3d0] [c000000000283a8c] .generic_make_request+0x118/0x294
+  [c00000000135b4b0] [c000000000283d34] .submit_bio+0x12c/0x174
+  [c00000000135b580] [c000000000205a44] .mpage_bio_submit+0x3c/0x4c
+  [c00000000135b600] [c000000000206184] .mpage_readpages+0xa4/0x184
+  [c00000000135b750] [c0000000001ff8fc] .blkdev_readpages+0x24/0x38
+  [c00000000135b7c0] [c0000000001589f0] .read_pages+0x6c/0x1a8
+  [c00000000135b8b0] [c000000000158c74] .__do_page_cache_readahead+0x118/0x184
+  [c00000000135b9b0] [c0000000001591a8] .force_page_cache_readahead+0xe4/0xe8
+  [c00000000135ba50] [c00000000014fc24] .generic_file_read_iter+0x1d8/0x830
+  [c00000000135bb50] [c0000000001ffadc] .blkdev_read_iter+0x40/0x5c
+  [c00000000135bbc0] [c0000000001b9e00] .new_sync_read+0x144/0x1a0
+  [c00000000135bcd0] [c0000000001bc454] .vfs_read+0xa0/0x124
+  [c00000000135bd70] [c0000000001bc7a4] .ksys_read+0x70/0xd8
+  [c00000000135be20] [c00000000000a524] system_call+0x5c/0x70
+  Instruction dump:
+  7fe3fb78 482e30dc 7c0802a6 482e3085 7c9e2378 f821ff71 7ca42b78 7d3e00d0
+  7c7d1b78 79290fe0 7cc53378 69290001 <0b090000> 81230028 7bca0020 7929ba62
+  [ end trace 313fec760f30aa1f ]---
+
+The problem originates from setting the segment boundary of the
+request queue to -1UL. This makes get_max_segment_size() return zero
+when offset is zero, whatever the max segment size. The test with
+BLK_SEG_BOUNDARY_MASK fails and 'mask - (mask & offset) + 1' overflows
+to zero in the return statement.
+
+Not setting the segment boundary and using the default
+value (BLK_SEG_BOUNDARY_MASK) fixes the problem.
+
+Signed-off-by: Emmanuel Nicolet <emmanuel.nicolet@gmail.com>
+Signed-off-by: Geoff Levand <geoff@infradead.org>
+Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
+Link: https://lore.kernel.org/r/060a416c43138f45105c0540eff1a45539f7e2fc.1589049250.git.geoff@infradead.org
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/block/ps3disk.c | 1 -
+ 1 file changed, 1 deletion(-)
+
+diff --git a/drivers/block/ps3disk.c b/drivers/block/ps3disk.c
+index afe1508d82c6d..bd1c66f5631a5 100644
+--- a/drivers/block/ps3disk.c
++++ b/drivers/block/ps3disk.c
+@@ -466,7 +466,6 @@ static int ps3disk_probe(struct ps3_system_bus_device *_dev)
+       queue->queuedata = dev;
+       blk_queue_max_hw_sectors(queue, dev->bounce_size >> 9);
+-      blk_queue_segment_boundary(queue, -1UL);
+       blk_queue_dma_alignment(queue, dev->blk_size-1);
+       blk_queue_logical_block_size(queue, dev->blk_size);
+-- 
+2.25.1
+
diff --git a/queue-4.19/pwm-img-call-pm_runtime_put-in-pm_runtime_get_sync-f.patch b/queue-4.19/pwm-img-call-pm_runtime_put-in-pm_runtime_get_sync-f.patch
new file mode 100644 (file)
index 0000000..9a843b0
--- /dev/null
@@ -0,0 +1,51 @@
+From 8a5c2334f49e529b2a962912efc2188d7766fa39 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Mon, 1 Jun 2020 02:11:16 -0500
+Subject: pwm: img: Call pm_runtime_put() in pm_runtime_get_sync() failed case
+
+From: Navid Emamdoost <navid.emamdoost@gmail.com>
+
+[ Upstream commit ca162ce98110b98e7d97b7157328d34dcfdd40a9 ]
+
+Even in failed case of pm_runtime_get_sync(), the usage_count is
+incremented. In order to keep the usage_count with correct value call
+appropriate pm_runtime_put().
+
+Signed-off-by: Navid Emamdoost <navid.emamdoost@gmail.com>
+Signed-off-by: Thierry Reding <thierry.reding@gmail.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/pwm/pwm-img.c | 8 ++++++--
+ 1 file changed, 6 insertions(+), 2 deletions(-)
+
+diff --git a/drivers/pwm/pwm-img.c b/drivers/pwm/pwm-img.c
+index 815f5333bb8f9..da72b2866e88e 100644
+--- a/drivers/pwm/pwm-img.c
++++ b/drivers/pwm/pwm-img.c
+@@ -132,8 +132,10 @@ static int img_pwm_config(struct pwm_chip *chip, struct pwm_device *pwm,
+       duty = DIV_ROUND_UP(timebase * duty_ns, period_ns);
+       ret = pm_runtime_get_sync(chip->dev);
+-      if (ret < 0)
++      if (ret < 0) {
++              pm_runtime_put_autosuspend(chip->dev);
+               return ret;
++      }
+       val = img_pwm_readl(pwm_chip, PWM_CTRL_CFG);
+       val &= ~(PWM_CTRL_CFG_DIV_MASK << PWM_CTRL_CFG_DIV_SHIFT(pwm->hwpwm));
+@@ -334,8 +336,10 @@ static int img_pwm_remove(struct platform_device *pdev)
+       int ret;
+       ret = pm_runtime_get_sync(&pdev->dev);
+-      if (ret < 0)
++      if (ret < 0) {
++              pm_runtime_put(&pdev->dev);
+               return ret;
++      }
+       for (i = 0; i < pwm_chip->chip.npwm; i++) {
+               val = img_pwm_readl(pwm_chip, PWM_CTRL_CFG);
+-- 
+2.25.1
+
diff --git a/queue-4.19/rdma-iw_cxgb4-cleanup-device-debugfs-entries-on-uld-.patch b/queue-4.19/rdma-iw_cxgb4-cleanup-device-debugfs-entries-on-uld-.patch
new file mode 100644 (file)
index 0000000..5fe6b1e
--- /dev/null
@@ -0,0 +1,35 @@
+From cf927e9ea7d3b3c1292c379604e4b49191ca505a Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Mon, 25 May 2020 00:38:14 +0530
+Subject: RDMA/iw_cxgb4: cleanup device debugfs entries on ULD remove
+
+From: Potnuri Bharat Teja <bharat@chelsio.com>
+
+[ Upstream commit 49ea0c036ede81f126f1a9389d377999fdf5c5a1 ]
+
+Remove device specific debugfs entries immediately if LLD detaches a
+particular ULD device in case of fatal PCI errors.
+
+Link: https://lore.kernel.org/r/20200524190814.17599-1-bharat@chelsio.com
+Signed-off-by: Potnuri Bharat Teja <bharat@chelsio.com>
+Signed-off-by: Jason Gunthorpe <jgg@mellanox.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/infiniband/hw/cxgb4/device.c | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/drivers/infiniband/hw/cxgb4/device.c b/drivers/infiniband/hw/cxgb4/device.c
+index c13c0ba30f63e..af974a2570862 100644
+--- a/drivers/infiniband/hw/cxgb4/device.c
++++ b/drivers/infiniband/hw/cxgb4/device.c
+@@ -945,6 +945,7 @@ void c4iw_dealloc(struct uld_ctx *ctx)
+ static void c4iw_remove(struct uld_ctx *ctx)
+ {
+       pr_debug("c4iw_dev %p\n", ctx->dev);
++      debugfs_remove_recursive(ctx->dev->debugfs_root);
+       c4iw_unregister_device(ctx->dev);
+       c4iw_dealloc(ctx);
+ }
+-- 
+2.25.1
+
diff --git a/queue-4.19/rdma-mlx5-add-init2init-as-a-modify-command.patch b/queue-4.19/rdma-mlx5-add-init2init-as-a-modify-command.patch
new file mode 100644 (file)
index 0000000..e663d8f
--- /dev/null
@@ -0,0 +1,39 @@
+From 2a038211790f0d23ed988531a56be21b044723c0 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Wed, 13 May 2020 12:55:50 +0300
+Subject: RDMA/mlx5: Add init2init as a modify command
+
+From: Aharon Landau <aharonl@mellanox.com>
+
+[ Upstream commit 819f7427bafd494ef7ca4942ec6322db20722d7b ]
+
+Missing INIT2INIT entry in the list of modify commands caused DEVX
+applications to be unable to modify_qp for this transition state. Add the
+MLX5_CMD_OP_INIT2INIT_QP opcode to the list of allowed DEVX opcodes.
+
+Fixes: e662e14d801b ("IB/mlx5: Add DEVX support for modify and query commands")
+Link: https://lore.kernel.org/r/20200513095550.211345-1-leon@kernel.org
+Signed-off-by: Aharon Landau <aharonl@mellanox.com>
+Reviewed-by: Maor Gottlieb <maorg@mellanox.com>
+Signed-off-by: Leon Romanovsky <leonro@mellanox.com>
+Signed-off-by: Jason Gunthorpe <jgg@mellanox.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/infiniband/hw/mlx5/devx.c | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/drivers/infiniband/hw/mlx5/devx.c b/drivers/infiniband/hw/mlx5/devx.c
+index 02f36ab72ad42..4c90a007e09db 100644
+--- a/drivers/infiniband/hw/mlx5/devx.c
++++ b/drivers/infiniband/hw/mlx5/devx.c
+@@ -328,6 +328,7 @@ static bool devx_is_obj_modify_cmd(const void *in)
+       case MLX5_CMD_OP_SET_L2_TABLE_ENTRY:
+       case MLX5_CMD_OP_RST2INIT_QP:
+       case MLX5_CMD_OP_INIT2RTR_QP:
++      case MLX5_CMD_OP_INIT2INIT_QP:
+       case MLX5_CMD_OP_RTR2RTS_QP:
+       case MLX5_CMD_OP_RTS2RTS_QP:
+       case MLX5_CMD_OP_SQERR2RTS_QP:
+-- 
+2.25.1
+
diff --git a/queue-4.19/remoteproc-fix-idr-initialisation-in-rproc_alloc.patch b/queue-4.19/remoteproc-fix-idr-initialisation-in-rproc_alloc.patch
new file mode 100644 (file)
index 0000000..09559ba
--- /dev/null
@@ -0,0 +1,60 @@
+From 640466c105ffe89317e7620b10a834569f33a930 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Wed, 15 Apr 2020 14:48:52 -0600
+Subject: remoteproc: Fix IDR initialisation in rproc_alloc()
+
+From: Alex Elder <elder@linaro.org>
+
+[ Upstream commit 6442df49400b466431979e7634849a464a5f1861 ]
+
+If ida_simple_get() returns an error when called in rproc_alloc(),
+put_device() is called to clean things up.  By this time the rproc
+device type has been assigned, with rproc_type_release() as the
+release function.
+
+The first thing rproc_type_release() does is call:
+    idr_destroy(&rproc->notifyids);
+
+But at the time the ida_simple_get() call is made, the notifyids
+field in the remoteproc structure has not been initialized.
+
+I'm not actually sure this case causes an observable problem, but
+it's incorrect.  Fix this by initializing the notifyids field before
+calling ida_simple_get() in rproc_alloc().
+
+Fixes: b5ab5e24e960 ("remoteproc: maintain a generic child device for each rproc")
+Signed-off-by: Alex Elder <elder@linaro.org>
+Reviewed-by: Mathieu Poirier <mathieu.poirier@linaro.org>
+Reviewed-by: Suman Anna <s-anna@ti.com>
+Reviewed-by: Bjorn Andersson <bjorn.andersson@linaro.org>
+Link: https://lore.kernel.org/r/20200415204858.2448-2-mathieu.poirier@linaro.org
+Signed-off-by: Bjorn Andersson <bjorn.andersson@linaro.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/remoteproc/remoteproc_core.c | 3 +--
+ 1 file changed, 1 insertion(+), 2 deletions(-)
+
+diff --git a/drivers/remoteproc/remoteproc_core.c b/drivers/remoteproc/remoteproc_core.c
+index d5ff272fde343..e48069db17033 100644
+--- a/drivers/remoteproc/remoteproc_core.c
++++ b/drivers/remoteproc/remoteproc_core.c
+@@ -1598,6 +1598,7 @@ struct rproc *rproc_alloc(struct device *dev, const char *name,
+       rproc->dev.type = &rproc_type;
+       rproc->dev.class = &rproc_class;
+       rproc->dev.driver_data = rproc;
++      idr_init(&rproc->notifyids);
+       /* Assign a unique device index and name */
+       rproc->index = ida_simple_get(&rproc_dev_index, 0, 0, GFP_KERNEL);
+@@ -1622,8 +1623,6 @@ struct rproc *rproc_alloc(struct device *dev, const char *name,
+       mutex_init(&rproc->lock);
+-      idr_init(&rproc->notifyids);
+-
+       INIT_LIST_HEAD(&rproc->carveouts);
+       INIT_LIST_HEAD(&rproc->mappings);
+       INIT_LIST_HEAD(&rproc->traces);
+-- 
+2.25.1
+
diff --git a/queue-4.19/rxrpc-adjust-proc-net-rxrpc-calls-to-display-call-de.patch b/queue-4.19/rxrpc-adjust-proc-net-rxrpc-calls-to-display-call-de.patch
new file mode 100644 (file)
index 0000000..33898cf
--- /dev/null
@@ -0,0 +1,54 @@
+From 79c90ae3cb43c0af162b5a6395f9199bd47ce862 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Sat, 2 May 2020 13:38:23 +0100
+Subject: rxrpc: Adjust /proc/net/rxrpc/calls to display call->debug_id not
+ user_ID
+
+From: David Howells <dhowells@redhat.com>
+
+[ Upstream commit 32f71aa497cfb23d37149c2ef16ad71fce2e45e2 ]
+
+The user ID value isn't actually much use - and leaks a kernel pointer or a
+userspace value - so replace it with the call debug ID, which appears in trace
+points.
+
+Signed-off-by: David Howells <dhowells@redhat.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ net/rxrpc/proc.c | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+diff --git a/net/rxrpc/proc.c b/net/rxrpc/proc.c
+index 9805e3b85c361..81a765dd8c9be 100644
+--- a/net/rxrpc/proc.c
++++ b/net/rxrpc/proc.c
+@@ -72,7 +72,7 @@ static int rxrpc_call_seq_show(struct seq_file *seq, void *v)
+                        "Proto Local                                          "
+                        " Remote                                         "
+                        " SvID ConnID   CallID   End Use State    Abort   "
+-                       " UserID           TxSeq    TW RxSeq    RW RxSerial RxTimo\n");
++                       " DebugId  TxSeq    TW RxSeq    RW RxSerial RxTimo\n");
+               return 0;
+       }
+@@ -104,7 +104,7 @@ static int rxrpc_call_seq_show(struct seq_file *seq, void *v)
+       rx_hard_ack = READ_ONCE(call->rx_hard_ack);
+       seq_printf(seq,
+                  "UDP   %-47.47s %-47.47s %4x %08x %08x %s %3u"
+-                 " %-8.8s %08x %lx %08x %02x %08x %02x %08x %06lx\n",
++                 " %-8.8s %08x %08x %08x %02x %08x %02x %08x %06lx\n",
+                  lbuff,
+                  rbuff,
+                  call->service_id,
+@@ -114,7 +114,7 @@ static int rxrpc_call_seq_show(struct seq_file *seq, void *v)
+                  atomic_read(&call->usage),
+                  rxrpc_call_states[call->state],
+                  call->abort_code,
+-                 call->user_call_ID,
++                 call->debug_id,
+                  tx_hard_ack, READ_ONCE(call->tx_top) - tx_hard_ack,
+                  rx_hard_ack, READ_ONCE(call->rx_top) - rx_hard_ack,
+                  call->rx_serial,
+-- 
+2.25.1
+
diff --git a/queue-4.19/s390-qdio-put-thinint-indicator-after-early-error.patch b/queue-4.19/s390-qdio-put-thinint-indicator-after-early-error.patch
new file mode 100644 (file)
index 0000000..1c5650d
--- /dev/null
@@ -0,0 +1,85 @@
+From 48374383339d19f25784e9e09a3df6cdc0886684 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Thu, 9 Apr 2020 09:59:39 +0200
+Subject: s390/qdio: put thinint indicator after early error
+
+From: Julian Wiedmann <jwi@linux.ibm.com>
+
+[ Upstream commit 75e82bec6b2622c6f455b7a543fb5476a5d0eed7 ]
+
+qdio_establish() calls qdio_setup_thinint() via qdio_setup_irq().
+If the subsequent qdio_establish_thinint() fails, we miss to put the
+DSCI again. Thus the DSCI isn't available for re-use. Given enough of
+such errors, we could end up with having only the shared DSCI available.
+
+Merge qdio_setup_thinint() into qdio_establish_thinint(), and deal with
+such an error internally.
+
+Fixes: 779e6e1c724d ("[S390] qdio: new qdio driver.")
+Signed-off-by: Julian Wiedmann <jwi@linux.ibm.com>
+Reviewed-by: Benjamin Block <bblock@linux.ibm.com>
+Signed-off-by: Vasily Gorbik <gor@linux.ibm.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/s390/cio/qdio.h         |  1 -
+ drivers/s390/cio/qdio_setup.c   |  1 -
+ drivers/s390/cio/qdio_thinint.c | 14 ++++++++------
+ 3 files changed, 8 insertions(+), 8 deletions(-)
+
+diff --git a/drivers/s390/cio/qdio.h b/drivers/s390/cio/qdio.h
+index a6f7c2986b94f..ed60b8d4efe68 100644
+--- a/drivers/s390/cio/qdio.h
++++ b/drivers/s390/cio/qdio.h
+@@ -377,7 +377,6 @@ static inline int multicast_outbound(struct qdio_q *q)
+ extern u64 last_ai_time;
+ /* prototypes for thin interrupt */
+-void qdio_setup_thinint(struct qdio_irq *irq_ptr);
+ int qdio_establish_thinint(struct qdio_irq *irq_ptr);
+ void qdio_shutdown_thinint(struct qdio_irq *irq_ptr);
+ void tiqdio_add_input_queues(struct qdio_irq *irq_ptr);
+diff --git a/drivers/s390/cio/qdio_setup.c b/drivers/s390/cio/qdio_setup.c
+index d040c4920ee78..b8955e20f2469 100644
+--- a/drivers/s390/cio/qdio_setup.c
++++ b/drivers/s390/cio/qdio_setup.c
+@@ -480,7 +480,6 @@ int qdio_setup_irq(struct qdio_initialize *init_data)
+       setup_queues(irq_ptr, init_data);
+       setup_qib(irq_ptr, init_data);
+-      qdio_setup_thinint(irq_ptr);
+       set_impl_params(irq_ptr, init_data->qib_param_field_format,
+                       init_data->qib_param_field,
+                       init_data->input_slib_elements,
+diff --git a/drivers/s390/cio/qdio_thinint.c b/drivers/s390/cio/qdio_thinint.c
+index 6628e0c9e70e3..e6b22a58150ae 100644
+--- a/drivers/s390/cio/qdio_thinint.c
++++ b/drivers/s390/cio/qdio_thinint.c
+@@ -267,17 +267,19 @@ int __init tiqdio_register_thinints(void)
+ int qdio_establish_thinint(struct qdio_irq *irq_ptr)
+ {
++      int rc;
++
+       if (!is_thinint_irq(irq_ptr))
+               return 0;
+-      return set_subchannel_ind(irq_ptr, 0);
+-}
+-void qdio_setup_thinint(struct qdio_irq *irq_ptr)
+-{
+-      if (!is_thinint_irq(irq_ptr))
+-              return;
+       irq_ptr->dsci = get_indicator();
+       DBF_HEX(&irq_ptr->dsci, sizeof(void *));
++
++      rc = set_subchannel_ind(irq_ptr, 0);
++      if (rc)
++              put_indicator(irq_ptr->dsci);
++
++      return rc;
+ }
+ void qdio_shutdown_thinint(struct qdio_irq *irq_ptr)
+-- 
+2.25.1
+
diff --git a/queue-4.19/scsi-acornscsi-fix-an-error-handling-path-in-acornsc.patch b/queue-4.19/scsi-acornscsi-fix-an-error-handling-path-in-acornsc.patch
new file mode 100644 (file)
index 0000000..d8b0fb6
--- /dev/null
@@ -0,0 +1,40 @@
+From 758533681ece9a286fc82a4dec9475b2fa30a629 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Sat, 30 May 2020 10:16:22 +0200
+Subject: scsi: acornscsi: Fix an error handling path in acornscsi_probe()
+
+From: Christophe JAILLET <christophe.jaillet@wanadoo.fr>
+
+[ Upstream commit 42c76c9848e13dbe0538d7ae0147a269dfa859cb ]
+
+'ret' is known to be 0 at this point.  Explicitly return -ENOMEM if one of
+the 'ecardm_iomap()' calls fail.
+
+Link: https://lore.kernel.org/r/20200530081622.577888-1-christophe.jaillet@wanadoo.fr
+Fixes: e95a1b656a98 ("[ARM] rpc: acornscsi: update to new style ecard driver")
+Signed-off-by: Christophe JAILLET <christophe.jaillet@wanadoo.fr>
+Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/scsi/arm/acornscsi.c | 4 +++-
+ 1 file changed, 3 insertions(+), 1 deletion(-)
+
+diff --git a/drivers/scsi/arm/acornscsi.c b/drivers/scsi/arm/acornscsi.c
+index 421fe869a11ef..ef9d907f2df5c 100644
+--- a/drivers/scsi/arm/acornscsi.c
++++ b/drivers/scsi/arm/acornscsi.c
+@@ -2914,8 +2914,10 @@ static int acornscsi_probe(struct expansion_card *ec, const struct ecard_id *id)
+       ashost->base = ecardm_iomap(ec, ECARD_RES_MEMC, 0, 0);
+       ashost->fast = ecardm_iomap(ec, ECARD_RES_IOCFAST, 0, 0);
+-      if (!ashost->base || !ashost->fast)
++      if (!ashost->base || !ashost->fast) {
++              ret = -ENOMEM;
+               goto out_put;
++      }
+       host->irq = ec->irq;
+       ashost->host = host;
+-- 
+2.25.1
+
diff --git a/queue-4.19/scsi-ibmvscsi-don-t-send-host-info-in-adapter-info-m.patch b/queue-4.19/scsi-ibmvscsi-don-t-send-host-info-in-adapter-info-m.patch
new file mode 100644 (file)
index 0000000..920a7ed
--- /dev/null
@@ -0,0 +1,46 @@
+From cf8aaab519dca2451bb0d72a10f28a088c2d49e3 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Wed, 3 Jun 2020 15:36:32 -0500
+Subject: scsi: ibmvscsi: Don't send host info in adapter info MAD after LPM
+
+From: Tyrel Datwyler <tyreld@linux.ibm.com>
+
+[ Upstream commit 4919b33b63c8b69d8dcf2b867431d0e3b6dc6d28 ]
+
+The adapter info MAD is used to send the client info and receive the host
+info as a response. A persistent buffer is used and as such the client info
+is overwritten after the response. During the course of a normal adapter
+reset the client info is refreshed in the buffer in preparation for sending
+the adapter info MAD.
+
+However, in the special case of LPM where we reenable the CRQ instead of a
+full CRQ teardown and reset we fail to refresh the client info in the
+adapter info buffer. As a result, after Live Partition Migration (LPM) we
+erroneously report the host's info as our own.
+
+[mkp: typos]
+
+Link: https://lore.kernel.org/r/20200603203632.18426-1-tyreld@linux.ibm.com
+Signed-off-by: Tyrel Datwyler <tyreld@linux.ibm.com>
+Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/scsi/ibmvscsi/ibmvscsi.c | 2 ++
+ 1 file changed, 2 insertions(+)
+
+diff --git a/drivers/scsi/ibmvscsi/ibmvscsi.c b/drivers/scsi/ibmvscsi/ibmvscsi.c
+index b99ded6b9e0bb..036508a4bd5a8 100644
+--- a/drivers/scsi/ibmvscsi/ibmvscsi.c
++++ b/drivers/scsi/ibmvscsi/ibmvscsi.c
+@@ -429,6 +429,8 @@ static int ibmvscsi_reenable_crq_queue(struct crq_queue *queue,
+       int rc = 0;
+       struct vio_dev *vdev = to_vio_dev(hostdata->dev);
++      set_adapter_info(hostdata);
++
+       /* Re-enable the CRQ */
+       do {
+               if (rc)
+-- 
+2.25.1
+
diff --git a/queue-4.19/scsi-iscsi-fix-reference-count-leak-in-iscsi_boot_cr.patch b/queue-4.19/scsi-iscsi-fix-reference-count-leak-in-iscsi_boot_cr.patch
new file mode 100644 (file)
index 0000000..1432216
--- /dev/null
@@ -0,0 +1,38 @@
+From acbe3371ff73085a957de95d34b0bd780b5db6c0 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Thu, 28 May 2020 15:13:53 -0500
+Subject: scsi: iscsi: Fix reference count leak in iscsi_boot_create_kobj
+
+From: Qiushi Wu <wu000273@umn.edu>
+
+[ Upstream commit 0267ffce562c8bbf9b57ebe0e38445ad04972890 ]
+
+kobject_init_and_add() takes reference even when it fails. If this
+function returns an error, kobject_put() must be called to properly
+clean up the memory associated with the object.
+
+Link: https://lore.kernel.org/r/20200528201353.14849-1-wu000273@umn.edu
+Reviewed-by: Lee Duncan <lduncan@suse.com>
+Signed-off-by: Qiushi Wu <wu000273@umn.edu>
+Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/scsi/iscsi_boot_sysfs.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/drivers/scsi/iscsi_boot_sysfs.c b/drivers/scsi/iscsi_boot_sysfs.c
+index d453667612f88..15d64f96e623c 100644
+--- a/drivers/scsi/iscsi_boot_sysfs.c
++++ b/drivers/scsi/iscsi_boot_sysfs.c
+@@ -360,7 +360,7 @@ iscsi_boot_create_kobj(struct iscsi_boot_kset *boot_kset,
+       boot_kobj->kobj.kset = boot_kset->kset;
+       if (kobject_init_and_add(&boot_kobj->kobj, &iscsi_boot_ktype,
+                                NULL, name, index)) {
+-              kfree(boot_kobj);
++              kobject_put(&boot_kobj->kobj);
+               return NULL;
+       }
+       boot_kobj->data = data;
+-- 
+2.25.1
+
diff --git a/queue-4.19/scsi-lpfc-fix-lpfc_nodelist-leak-when-processing-uns.patch b/queue-4.19/scsi-lpfc-fix-lpfc_nodelist-leak-when-processing-uns.patch
new file mode 100644 (file)
index 0000000..dc17bd5
--- /dev/null
@@ -0,0 +1,51 @@
+From 843a968efa83be29eb174136c17db5180bffacc1 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Mon, 25 May 2020 22:16:24 +0800
+Subject: scsi: lpfc: Fix lpfc_nodelist leak when processing unsolicited event
+
+From: Xiyu Yang <xiyuyang19@fudan.edu.cn>
+
+[ Upstream commit 7217e6e694da3aae6d17db8a7f7460c8d4817ebf ]
+
+In order to create or activate a new node, lpfc_els_unsol_buffer() invokes
+lpfc_nlp_init() or lpfc_enable_node() or lpfc_nlp_get(), all of them will
+return a reference of the specified lpfc_nodelist object to "ndlp" with
+increased refcnt.
+
+When lpfc_els_unsol_buffer() returns, local variable "ndlp" becomes
+invalid, so the refcount should be decreased to keep refcount balanced.
+
+The reference counting issue happens in one exception handling path of
+lpfc_els_unsol_buffer(). When "ndlp" in DEV_LOSS, the function forgets to
+decrease the refcnt increased by lpfc_nlp_init() or lpfc_enable_node() or
+lpfc_nlp_get(), causing a refcnt leak.
+
+Fix this issue by calling lpfc_nlp_put() when "ndlp" in DEV_LOSS.
+
+Link: https://lore.kernel.org/r/1590416184-52592-1-git-send-email-xiyuyang19@fudan.edu.cn
+Reviewed-by: Daniel Wagner <dwagner@suse.de>
+Reviewed-by: James Smart <james.smart@broadcom.com>
+Signed-off-by: Xiyu Yang <xiyuyang19@fudan.edu.cn>
+Signed-off-by: Xin Tan <tanxin.ctf@gmail.com>
+Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/scsi/lpfc/lpfc_els.c | 2 ++
+ 1 file changed, 2 insertions(+)
+
+diff --git a/drivers/scsi/lpfc/lpfc_els.c b/drivers/scsi/lpfc/lpfc_els.c
+index 7398350b08b41..9032793c405eb 100644
+--- a/drivers/scsi/lpfc/lpfc_els.c
++++ b/drivers/scsi/lpfc/lpfc_els.c
+@@ -7949,6 +7949,8 @@ lpfc_els_unsol_buffer(struct lpfc_hba *phba, struct lpfc_sli_ring *pring,
+       spin_lock_irq(shost->host_lock);
+       if (ndlp->nlp_flag & NLP_IN_DEV_LOSS) {
+               spin_unlock_irq(shost->host_lock);
++              if (newnode)
++                      lpfc_nlp_put(ndlp);
+               goto dropit;
+       }
+       spin_unlock_irq(shost->host_lock);
+-- 
+2.25.1
+
diff --git a/queue-4.19/scsi-mpt3sas-fix-double-free-warnings.patch b/queue-4.19/scsi-mpt3sas-fix-double-free-warnings.patch
new file mode 100644 (file)
index 0000000..924f38a
--- /dev/null
@@ -0,0 +1,43 @@
+From 3d3e2efa56810b2896e93d7c56b23d835719ab92 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Fri, 8 May 2020 07:07:38 -0400
+Subject: scsi: mpt3sas: Fix double free warnings
+
+From: Suganath Prabu S <suganath-prabu.subramani@broadcom.com>
+
+[ Upstream commit cbbfdb2a2416c9f0cde913cf09670097ac281282 ]
+
+Fix following warning from Smatch static analyser:
+
+drivers/scsi/mpt3sas/mpt3sas_base.c:5256 _base_allocate_memory_pools()
+warn: 'ioc->hpr_lookup' double freed
+
+drivers/scsi/mpt3sas/mpt3sas_base.c:5256 _base_allocate_memory_pools()
+warn: 'ioc->internal_lookup' double freed
+
+Link: https://lore.kernel.org/r/20200508110738.30732-1-suganath-prabu.subramani@broadcom.com
+Reported-by: Dan Carpenter <dan.carpenter@oracle.com>
+Signed-off-by: Suganath Prabu S <suganath-prabu.subramani@broadcom.com>
+Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/scsi/mpt3sas/mpt3sas_base.c | 2 ++
+ 1 file changed, 2 insertions(+)
+
+diff --git a/drivers/scsi/mpt3sas/mpt3sas_base.c b/drivers/scsi/mpt3sas/mpt3sas_base.c
+index 2c556c7fcf0dc..9fbe20e38ad07 100644
+--- a/drivers/scsi/mpt3sas/mpt3sas_base.c
++++ b/drivers/scsi/mpt3sas/mpt3sas_base.c
+@@ -4284,7 +4284,9 @@ _base_release_memory_pools(struct MPT3SAS_ADAPTER *ioc)
+       }
+       kfree(ioc->hpr_lookup);
++      ioc->hpr_lookup = NULL;
+       kfree(ioc->internal_lookup);
++      ioc->internal_lookup = NULL;
+       if (ioc->chain_lookup) {
+               for (i = 0; i < ioc->scsiio_depth; i++) {
+                       for (j = ioc->chains_per_prp_buffer;
+-- 
+2.25.1
+
diff --git a/queue-4.19/scsi-qedf-fix-crash-when-mfw-calls-for-protocol-stat.patch b/queue-4.19/scsi-qedf-fix-crash-when-mfw-calls-for-protocol-stat.patch
new file mode 100644 (file)
index 0000000..26ae32d
--- /dev/null
@@ -0,0 +1,131 @@
+From f0670edcd6ad72d88faec455adba5d97dc7f92a6 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Thu, 16 Apr 2020 01:43:13 -0700
+Subject: scsi: qedf: Fix crash when MFW calls for protocol stats while
+ function is still probing
+
+From: Chad Dupuis <cdupuis@marvell.com>
+
+[ Upstream commit ad40f5256095c68dc17c991eb976261d5ea2daaa ]
+
+The MFW may make a call to qed and then to qedf for protocol statistics
+while the function is still probing.  If this happens it's possible that
+some members of the struct qedf_ctx may not be fully initialized which can
+result in a NULL pointer dereference or general protection fault.
+
+To prevent this, add a new flag call QEDF_PROBING and set it when the
+__qedf_probe() function is active. Then in the qedf_get_protocol_tlv_data()
+function we can check if the function is still probing and return
+immediantely before any uninitialized structures can be touched.
+
+Link: https://lore.kernel.org/r/20200416084314.18851-9-skashyap@marvell.com
+Signed-off-by: Chad Dupuis <cdupuis@marvell.com>
+Signed-off-by: Saurav Kashyap <skashyap@marvell.com>
+Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/scsi/qedf/qedf.h      |  1 +
+ drivers/scsi/qedf/qedf_main.c | 35 +++++++++++++++++++++++++++++++----
+ 2 files changed, 32 insertions(+), 4 deletions(-)
+
+diff --git a/drivers/scsi/qedf/qedf.h b/drivers/scsi/qedf/qedf.h
+index 2c78d8fb9122b..fc06be4fd10cd 100644
+--- a/drivers/scsi/qedf/qedf.h
++++ b/drivers/scsi/qedf/qedf.h
+@@ -335,6 +335,7 @@ struct qedf_ctx {
+ #define QEDF_GRCDUMP_CAPTURE          4
+ #define QEDF_IN_RECOVERY              5
+ #define QEDF_DBG_STOP_IO              6
++#define QEDF_PROBING                  8
+       unsigned long flags; /* Miscellaneous state flags */
+       int fipvlan_retries;
+       u8 num_queues;
+diff --git a/drivers/scsi/qedf/qedf_main.c b/drivers/scsi/qedf/qedf_main.c
+index cd61905ca2f55..b253523217b8b 100644
+--- a/drivers/scsi/qedf/qedf_main.c
++++ b/drivers/scsi/qedf/qedf_main.c
+@@ -2961,7 +2961,7 @@ static int __qedf_probe(struct pci_dev *pdev, int mode)
+ {
+       int rc = -EINVAL;
+       struct fc_lport *lport;
+-      struct qedf_ctx *qedf;
++      struct qedf_ctx *qedf = NULL;
+       struct Scsi_Host *host;
+       bool is_vf = false;
+       struct qed_ll2_params params;
+@@ -2989,6 +2989,7 @@ static int __qedf_probe(struct pci_dev *pdev, int mode)
+               /* Initialize qedf_ctx */
+               qedf = lport_priv(lport);
++              set_bit(QEDF_PROBING, &qedf->flags);
+               qedf->lport = lport;
+               qedf->ctlr.lp = lport;
+               qedf->pdev = pdev;
+@@ -3011,9 +3012,12 @@ static int __qedf_probe(struct pci_dev *pdev, int mode)
+       } else {
+               /* Init pointers during recovery */
+               qedf = pci_get_drvdata(pdev);
++              set_bit(QEDF_PROBING, &qedf->flags);
+               lport = qedf->lport;
+       }
++      QEDF_INFO(&qedf->dbg_ctx, QEDF_LOG_DISC, "Probe started.\n");
++
+       host = lport->host;
+       /* Allocate mempool for qedf_io_work structs */
+@@ -3312,6 +3316,10 @@ static int __qedf_probe(struct pci_dev *pdev, int mode)
+       else
+               fc_fabric_login(lport);
++      QEDF_INFO(&qedf->dbg_ctx, QEDF_LOG_DISC, "Probe done.\n");
++
++      clear_bit(QEDF_PROBING, &qedf->flags);
++
+       /* All good */
+       return 0;
+@@ -3337,6 +3345,11 @@ err2:
+ err1:
+       scsi_host_put(lport->host);
+ err0:
++      if (qedf) {
++              QEDF_INFO(&qedf->dbg_ctx, QEDF_LOG_DISC, "Probe done.\n");
++
++              clear_bit(QEDF_PROBING, &qedf->flags);
++      }
+       return rc;
+ }
+@@ -3484,11 +3497,25 @@ void qedf_get_protocol_tlv_data(void *dev, void *data)
+ {
+       struct qedf_ctx *qedf = dev;
+       struct qed_mfw_tlv_fcoe *fcoe = data;
+-      struct fc_lport *lport = qedf->lport;
+-      struct Scsi_Host *host = lport->host;
+-      struct fc_host_attrs *fc_host = shost_to_fc_host(host);
++      struct fc_lport *lport;
++      struct Scsi_Host *host;
++      struct fc_host_attrs *fc_host;
+       struct fc_host_statistics *hst;
++      if (!qedf) {
++              QEDF_ERR(NULL, "qedf is null.\n");
++              return;
++      }
++
++      if (test_bit(QEDF_PROBING, &qedf->flags)) {
++              QEDF_ERR(&qedf->dbg_ctx, "Function is still probing.\n");
++              return;
++      }
++
++      lport = qedf->lport;
++      host = lport->host;
++      fc_host = shost_to_fc_host(host);
++
+       /* Force a refresh of the fc_host stats including offload stats */
+       hst = qedf_fc_get_host_stats(host);
+-- 
+2.25.1
+
diff --git a/queue-4.19/scsi-qedi-check-for-buffer-overflow-in-qedi_set_path.patch b/queue-4.19/scsi-qedi-check-for-buffer-overflow-in-qedi_set_path.patch
new file mode 100644 (file)
index 0000000..fed8aae
--- /dev/null
@@ -0,0 +1,45 @@
+From 8c3a6e275d84b95aac703f006a3fb79a49c1fafa Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Tue, 28 Apr 2020 16:19:39 +0300
+Subject: scsi: qedi: Check for buffer overflow in qedi_set_path()
+
+From: Dan Carpenter <dan.carpenter@oracle.com>
+
+[ Upstream commit 4a4c0cfb4be74e216dd4446b254594707455bfc6 ]
+
+Smatch complains that the "path_data->handle" variable is user controlled.
+It comes from iscsi_set_path() so that seems possible.  It's harmless to
+add a limit check.
+
+The qedi->ep_tbl[] array has qedi->max_active_conns elements (which is
+always ISCSI_MAX_SESS_PER_HBA (4096) elements).  The array is allocated in
+the qedi_cm_alloc_mem() function.
+
+Link: https://lore.kernel.org/r/20200428131939.GA696531@mwanda
+Fixes: ace7f46ba5fd ("scsi: qedi: Add QLogic FastLinQ offload iSCSI driver framework.")
+Acked-by: Manish Rangankar <mrangankar@marvell.com>
+Signed-off-by: Dan Carpenter <dan.carpenter@oracle.com>
+Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/scsi/qedi/qedi_iscsi.c | 4 ++++
+ 1 file changed, 4 insertions(+)
+
+diff --git a/drivers/scsi/qedi/qedi_iscsi.c b/drivers/scsi/qedi/qedi_iscsi.c
+index 1b7049dce1699..d59473d1679fb 100644
+--- a/drivers/scsi/qedi/qedi_iscsi.c
++++ b/drivers/scsi/qedi/qedi_iscsi.c
+@@ -1217,6 +1217,10 @@ static int qedi_set_path(struct Scsi_Host *shost, struct iscsi_path *path_data)
+       }
+       iscsi_cid = (u32)path_data->handle;
++      if (iscsi_cid >= qedi->max_active_conns) {
++              ret = -EINVAL;
++              goto set_path_exit;
++      }
+       qedi_ep = qedi->ep_tbl[iscsi_cid];
+       QEDI_INFO(&qedi->dbg_ctx, QEDI_LOG_INFO,
+                 "iscsi_cid=0x%x, qedi_ep=%p\n", iscsi_cid, qedi_ep);
+-- 
+2.25.1
+
diff --git a/queue-4.19/scsi-qedi-do-not-flush-offload-work-if-arp-not-resol.patch b/queue-4.19/scsi-qedi-do-not-flush-offload-work-if-arp-not-resol.patch
new file mode 100644 (file)
index 0000000..eeeacd3
--- /dev/null
@@ -0,0 +1,97 @@
+From fe028d4599c22008935867bc348dcccb31200b86 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Tue, 7 Apr 2020 23:43:30 -0700
+Subject: scsi: qedi: Do not flush offload work if ARP not resolved
+
+From: Nilesh Javali <njavali@marvell.com>
+
+[ Upstream commit 927527aea0e2a9c1d336c7d33f77f1911481d008 ]
+
+For an unreachable target, offload_work is not initialized and the endpoint
+state is set to OFLDCONN_NONE. This results in a WARN_ON due to the check
+of the work function field being set to zero.
+
+------------[ cut here ]------------
+WARNING: CPU: 24 PID: 18587 at ../kernel/workqueue.c:3037 __flush_work+0x1c1/0x1d0
+:
+Hardware name: HPE ProLiant DL380 Gen10/ProLiant DL380 Gen10, BIOS U30 02/01/2020
+RIP: 0010:__flush_work+0x1c1/0x1d0
+Code: ba 6d 00 03 80 c9 f0 eb b6 48 c7 c7 20 ee 6c a4 e8 52 d3 04 00 0f 0b 31 c0 e9 d1 fe ff
+ff 48 c7 c7 20 ee 6c a4 e8 3d d3 04 00 <0f> 0b 31 c0 e9 bc fe ff ff e8 11 f3 f
+ 00 31 f6
+RSP: 0018:ffffac5a8cd47a80 EFLAGS: 00010282
+RAX: 0000000000000024 RBX: ffff98d68c1fcaf0 RCX: 0000000000000000
+RDX: 0000000000000000 RSI: ffff98ce9fd99898 RDI: ffff98ce9fd99898
+RBP: ffff98d68c1fcbc0 R08: 00000000000006fa R09: 0000000000000001
+R10: ffffac5a8cd47b50 R11: 0000000000000001 R12: 0000000000000000
+R13: 000000000000489b R14: ffff98d68c1fc800 R15: ffff98d692132c00
+FS:  00007f65f7f62280(0000) GS:ffff98ce9fd80000(0000) knlGS:0000000000000000
+CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
+CR2: 00007ffd2435e880 CR3: 0000000809334003 CR4: 00000000007606e0
+DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
+DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400
+PKRU: 55555554
+Call Trace:
+ ? class_create_release+0x40/0x40
+ ? klist_put+0x2c/0x80
+ qedi_ep_disconnect+0xdd/0x400 [qedi]
+ iscsi_if_ep_disconnect.isra.20+0x59/0x70 [scsi_transport_iscsi]
+ iscsi_if_rx+0x129b/0x1670 [scsi_transport_iscsi]
+ ? __netlink_lookup+0xe7/0x160
+ netlink_unicast+0x21d/0x300
+ netlink_sendmsg+0x30f/0x430
+ sock_sendmsg+0x5b/0x60
+ ____sys_sendmsg+0x1e2/0x240
+ ? copy_msghdr_from_user+0xd9/0x160
+ ___sys_sendmsg+0x88/0xd0
+ ? ___sys_recvmsg+0xa2/0xe0
+ ? hrtimer_try_to_cancel+0x25/0x100
+ ? do_nanosleep+0x9c/0x170
+ ? __sys_sendmsg+0x5e/0xa0
+ __sys_sendmsg+0x5e/0xa0
+ do_syscall_64+0x60/0x1f0
+ entry_SYSCALL_64_after_hwframe+0x49/0xbe
+RIP: 0033:0x7f65f6f16107
+Code: 64 89 02 48 c7 c0 ff ff ff ff eb b9 0f 1f 80 00 00 00 00 8b 05 aa d2 2b 00 48 63 d2 48
+63 ff 85 c0 75 18 b8 2e 00 00 00 0f 05 <48> 3d 00 f0 ff ff 77 59 f3 c3 0f 1f 8
+    0 00 00 00 00 53 48 89 f3 48
+ RSP: 002b:00007ffd24367ca8 EFLAGS: 00000246 ORIG_RAX: 000000000000002e
+ RAX: ffffffffffffffda RBX: 000055a7aeaaf110 RCX: 00007f65f6f16107
+ RDX: 0000000000000000 RSI: 00007ffd24367cc0 RDI: 0000000000000003
+ RBP: 0000000000000070 R08: 0000000000000000 R09: 0000000000000000
+ R10: 000000000000075c R11: 0000000000000246 R12: 00007ffd24367cc0
+ R13: 000055a7ae560008 R14: 00007ffd24367db0 R15: 0000000000000000
+ ---[ end trace 54f499c05d41f8bb ]---
+
+Only flush if the connection endpoint state if different from
+OFLDCONN_NONE.
+
+[mkp: clarified commit desc]
+
+Link: https://lore.kernel.org/r/20200408064332.19377-5-mrangankar@marvell.com
+Reviewed-by: Lee Duncan <lduncan@suse.com>
+Signed-off-by: Nilesh Javali <njavali@marvell.com>
+Signed-off-by: Manish Rangankar <mrangankar@marvell.com>
+Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/scsi/qedi/qedi_iscsi.c | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+diff --git a/drivers/scsi/qedi/qedi_iscsi.c b/drivers/scsi/qedi/qedi_iscsi.c
+index d59473d1679fb..751941a3ed303 100644
+--- a/drivers/scsi/qedi/qedi_iscsi.c
++++ b/drivers/scsi/qedi/qedi_iscsi.c
+@@ -1000,7 +1000,8 @@ static void qedi_ep_disconnect(struct iscsi_endpoint *ep)
+       if (qedi_ep->state == EP_STATE_OFLDCONN_START)
+               goto ep_exit_recover;
+-      flush_work(&qedi_ep->offload_work);
++      if (qedi_ep->state != EP_STATE_OFLDCONN_NONE)
++              flush_work(&qedi_ep->offload_work);
+       if (qedi_ep->conn) {
+               qedi_conn = qedi_ep->conn;
+-- 
+2.25.1
+
diff --git a/queue-4.19/scsi-qla2xxx-fix-issue-with-adapter-s-stopping-state.patch b/queue-4.19/scsi-qla2xxx-fix-issue-with-adapter-s-stopping-state.patch
new file mode 100644 (file)
index 0000000..1482728
--- /dev/null
@@ -0,0 +1,91 @@
+From a79ddc7c3d6882d34d476594b77f765a82617ea7 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Wed, 22 Apr 2020 13:55:52 +0300
+Subject: scsi: qla2xxx: Fix issue with adapter's stopping state
+
+From: Viacheslav Dubeyko <v.dubeiko@yadro.com>
+
+[ Upstream commit 803e45550b11c8e43d89812356fe6f105adebdf9 ]
+
+The goal of the following command sequence is to restart the adapter.
+However, the tgt_stop flag remains set, indicating that the adapter is
+still in stopping state even after re-enabling it.
+
+echo 0x7fffffff > /sys/module/qla2xxx/parameters/logging
+modprobe target_core_mod
+modprobe tcm_qla2xxx
+mkdir /sys/kernel/config/target/qla2xxx
+mkdir /sys/kernel/config/target/qla2xxx/<port-name>
+mkdir /sys/kernel/config/target/qla2xxx/<port-name>/tpgt_1
+echo 1 > /sys/kernel/config/target/qla2xxx/<port-name>/tpgt_1/enable
+echo 0 > /sys/kernel/config/target/qla2xxx/<port-name>/tpgt_1/enable
+echo 1 > /sys/kernel/config/target/qla2xxx/<port-name>/tpgt_1/enable
+
+kernel: PID 1396:qla_target.c:1555 qlt_stop_phase1(): tgt_stop 0x0, tgt_stopped 0x0
+kernel: qla2xxx [0001:00:02.0]-e803:1: PID 1396:qla_target.c:1567: Stopping target for host 1(c0000000033557e8)
+kernel: PID 1396:qla_target.c:1579 qlt_stop_phase1(): tgt_stop 0x1, tgt_stopped 0x0
+kernel: PID 1396:qla_target.c:1266 qlt_schedule_sess_for_deletion(): tgt_stop 0x1, tgt_stopped 0x0
+kernel: qla2xxx [0001:00:02.0]-e801:1: PID 1396:qla_target.c:1316: Scheduling sess c00000002d5cd800 for deletion 21:00:00:24:ff:7f:35:c7
+<skipped>
+kernel: qla2xxx [0001:00:02.0]-290a:1: PID 340:qla_target.c:1187: qlt_unreg_sess sess c00000002d5cd800 for deletion 21:00:00:24:ff:7f:35:c7
+<skipped>
+kernel: qla2xxx [0001:00:02.0]-f801:1: PID 340:qla_target.c:1145: Unregistration of sess c00000002d5cd800 21:00:00:24:ff:7f:35:c7 finished fcp_cnt 0
+kernel: PID 340:qla_target.c:1155 qlt_free_session_done(): tgt_stop 0x1, tgt_stopped 0x0
+kernel: qla2xxx [0001:00:02.0]-4807:1: PID 346:qla_os.c:6329: ISP abort scheduled.
+<skipped>
+kernel: qla2xxx [0001:00:02.0]-28f1:1: PID 346:qla_os.c:3956: Mark all dev lost
+kernel: PID 346:qla_target.c:1266 qlt_schedule_sess_for_deletion(): tgt_stop 0x1, tgt_stopped 0x0
+kernel: qla2xxx [0001:00:02.0]-4808:1: PID 346:qla_os.c:6338: ISP abort end.
+<skipped>
+kernel: PID 1396:qla_target.c:6812 qlt_enable_vha(): tgt_stop 0x1, tgt_stopped 0x0
+<skipped>
+kernel: qla2xxx [0001:00:02.0]-4807:1: PID 346:qla_os.c:6329: ISP abort scheduled.
+<skipped>
+kernel: qla2xxx [0001:00:02.0]-4808:1: PID 346:qla_os.c:6338: ISP abort end.
+
+qlt_handle_cmd_for_atio() rejects the request to send commands because the
+adapter is in the stopping state:
+
+kernel: PID 0:qla_target.c:4442 qlt_handle_cmd_for_atio(): tgt_stop 0x1, tgt_stopped 0x0
+kernel: qla2xxx [0001:00:02.0]-3861:1: PID 0:qla_target.c:4447: New command while device c000000005314600 is shutting down
+kernel: qla2xxx [0001:00:02.0]-e85f:1: PID 0:qla_target.c:5728: qla_target: Unable to send command to target
+
+This patch calls qla_stop_phase2() in addition to qlt_stop_phase1() in
+tcm_qla2xxx_tpg_enable_store() and tcm_qla2xxx_npiv_tpg_enable_store(). The
+qlt_stop_phase1() marks adapter as stopping (tgt_stop == 0x1, tgt_stopped
+== 0x0) but qlt_stop_phase2() marks adapter as stopped (tgt_stop == 0x0,
+tgt_stopped == 0x1).
+
+Link: https://lore.kernel.org/r/52be1e8a3537f6c5407eae3edd4c8e08a9545ea5.camel@yadro.com
+Reviewed-by: Roman Bolshakov <r.bolshakov@yadro.com>
+Reviewed-by: Himanshu Madhani <himanshu.madhani@oracle.com>
+Signed-off-by: Viacheslav Dubeyko <v.dubeiko@yadro.com>
+Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/scsi/qla2xxx/tcm_qla2xxx.c | 2 ++
+ 1 file changed, 2 insertions(+)
+
+diff --git a/drivers/scsi/qla2xxx/tcm_qla2xxx.c b/drivers/scsi/qla2xxx/tcm_qla2xxx.c
+index 654e1af7f542c..b51dba35bcf75 100644
+--- a/drivers/scsi/qla2xxx/tcm_qla2xxx.c
++++ b/drivers/scsi/qla2xxx/tcm_qla2xxx.c
+@@ -960,6 +960,7 @@ static ssize_t tcm_qla2xxx_tpg_enable_store(struct config_item *item,
+               atomic_set(&tpg->lport_tpg_enabled, 0);
+               qlt_stop_phase1(vha->vha_tgt.qla_tgt);
++              qlt_stop_phase2(vha->vha_tgt.qla_tgt);
+       }
+       return count;
+@@ -1122,6 +1123,7 @@ static ssize_t tcm_qla2xxx_npiv_tpg_enable_store(struct config_item *item,
+               atomic_set(&tpg->lport_tpg_enabled, 0);
+               qlt_stop_phase1(vha->vha_tgt.qla_tgt);
++              qlt_stop_phase2(vha->vha_tgt.qla_tgt);
+       }
+       return count;
+-- 
+2.25.1
+
diff --git a/queue-4.19/scsi-qla2xxx-fix-warning-after-fc-target-reset.patch b/queue-4.19/scsi-qla2xxx-fix-warning-after-fc-target-reset.patch
new file mode 100644 (file)
index 0000000..7f5386d
--- /dev/null
@@ -0,0 +1,108 @@
+From 559d90b031c543687379210d25acef628cef60c8 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Fri, 10 Apr 2020 11:07:08 +0300
+Subject: scsi: qla2xxx: Fix warning after FC target reset
+
+From: Viacheslav Dubeyko <v.dubeiko@yadro.com>
+
+[ Upstream commit f839544ccff60cbe534282aac68858fc3fb278ca ]
+
+Currently, FC target reset finishes with the warning message:
+
+[84010.596893] ------------[ cut here ]------------
+[84010.596917] WARNING: CPU: 238 PID: 279973 at ../drivers/scsi/qla2xxx/qla_target.c:6644 qlt_enable_vha+0x1d0/0x260 [qla2xxx]
+[84010.596918] Modules linked in: vrf af_packet 8021q garp mrp stp llc netlink_diag target_tatlin_tblock(OEX) dm_ec(OEX) ttln_rdma(OEX) dm_frontend(OEX) nvme_rdma nvmet tcm_qla2xxx iscsi_target_mod target_core_mod at24 nvmem_core pnv_php ipmi_watchdog ipmi_ssif vmx_crypto gf128mul crct10dif_vpmsum qla2xxx rpcrdma nvme_fc powernv_flash(X) nvme_fabrics uio_pdrv_genirq mtd rtc_opal(X) ibmpowernv(X) opal_prd(X) uio scsi_transport_fc i2c_opal(X) ses enclosure ipmi_poweroff ast i2c_algo_bit ttm bmc_mcu(OEX) drm_kms_helper syscopyarea sysfillrect sysimgblt fb_sys_fops drm drm_panel_orientation_quirks agpgart nfsd auth_rpcgss nfs_acl ipmi_powernv(X) lockd ipmi_devintf ipmi_msghandler grace dummy ext4 crc16 jbd2 mbcache sd_mod rdma_ucm ib_iser rdma_cm ib_umad iw_cm ib_ipoib libiscsi scsi_transport_iscsi ib_cm
+[84010.596975]  configfs mlx5_ib ib_uverbs ib_core mlx5_core crc32c_vpmsum xhci_pci xhci_hcd mpt3sas(OEX) tg3 usbcore mlxfw tls raid_class libphy scsi_transport_sas devlink ptp pps_core nvme nvme_core sunrpc dm_mirror dm_region_hash dm_log sg dm_multipath dm_mod scsi_dh_rdac scsi_dh_emc scsi_dh_alua scsi_mod autofs4
+[84010.597001] Supported: Yes, External
+[84010.597004] CPU: 238 PID: 279973 Comm: bash Tainted: G           OE      4.12.14-197.29-default #1 SLE15-SP1
+[84010.597006] task: c000000a104c0000 task.stack: c000000b52188000
+[84010.597007] NIP: d00000001ffd7f78 LR: d00000001ffd7f6c CTR: c0000000001676c0
+[84010.597008] REGS: c000000b5218b910 TRAP: 0700   Tainted: G           OE       (4.12.14-197.29-default)
+[84010.597008] MSR: 900000010282b033 <SF,HV,VEC,VSX,EE,FP,ME,IR,DR,RI,LE,TM[E]>
+[84010.597015]   CR: 48242424  XER: 00000000
+[84010.597016] CFAR: d00000001ff45d08 SOFTE: 1
+               GPR00: d00000001ffd7f6c c000000b5218bb90 d00000002001b228 0000000000000102
+               GPR04: 0000000000000001 0000000000000001 00013d91ed0a5e2d 0000000000000000
+               GPR08: c000000007793300 0000000000000000 0000000000000000 c000000a086e7818
+               GPR12: 0000000000002200 c000000007793300 0000000000000000 000000012bc937c0
+               GPR16: 000000012bbf7ed0 0000000000000000 000000012bc3dd10 0000000000000000
+               GPR20: 000000012bc4db28 0000010036442810 000000012bc97828 000000012bc96c70
+               GPR24: 00000100365b1550 0000000000000000 00000100363f3d80 c000000be20d3080
+               GPR28: c000000bda7eae00 c000000be20db7e8 c000000be20d3778 c000000be20db7e8
+[84010.597042] NIP [d00000001ffd7f78] qlt_enable_vha+0x1d0/0x260 [qla2xxx]
+[84010.597051] LR [d00000001ffd7f6c] qlt_enable_vha+0x1c4/0x260 [qla2xxx]
+[84010.597051] Call Trace:
+[84010.597061] [c000000b5218bb90] [d00000001ffd7f6c] qlt_enable_vha+0x1c4/0x260 [qla2xxx] (unreliable)
+[84010.597064] [c000000b5218bc20] [d000000009820b6c] tcm_qla2xxx_tpg_enable_store+0xc4/0x130 [tcm_qla2xxx]
+[84010.597067] [c000000b5218bcb0] [d0000000185d0e68] configfs_write_file+0xd0/0x190 [configfs]
+[84010.597072] [c000000b5218bd00] [c0000000003d0edc] __vfs_write+0x3c/0x1e0
+[84010.597074] [c000000b5218bd90] [c0000000003d2ea8] vfs_write+0xd8/0x220
+[84010.597076] [c000000b5218bde0] [c0000000003d4ddc] SyS_write+0x6c/0x110
+[84010.597079] [c000000b5218be30] [c00000000000b188] system_call+0x3c/0x130
+[84010.597080] Instruction dump:
+[84010.597082] 7d0050a8 7d084b78 7d0051ad 40c2fff4 7fa3eb78 4bf73965 60000000 7fa3eb78
+[84010.597086] 4bf6dcd9 60000000 2fa30000 419eff40 <0fe00000> 4bffff38 e95f0058 a12a0180
+[84010.597090] ---[ end trace e32abaf6e6fee826 ]---
+
+To reproduce:
+
+echo 0x7fffffff > /sys/module/qla2xxx/parameters/logging
+modprobe target_core_mod
+modprobe tcm_qla2xxx
+mkdir /sys/kernel/config/target/qla2xxx
+mkdir /sys/kernel/config/target/qla2xxx/<port-name>
+mkdir /sys/kernel/config/target/qla2xxx/<port-name>/tpgt_1
+echo 1 > /sys/kernel/config/target/qla2xxx/<port-name>/tpgt_1/enable
+echo 0 > /sys/kernel/config/target/qla2xxx/<port-name>/tpgt_1/enable
+echo 1 > /sys/kernel/config/target/qla2xxx/<port-name>/tpgt_1/enable
+
+SYSTEM START
+kernel: pid 327:drivers/scsi/qla2xxx/qla_init.c:2174 qla2x00_initialize_adapter(): vha->flags.online 0x0
+<...>
+kernel: pid 327:drivers/scsi/qla2xxx/qla_os.c:3444 qla2x00_probe_one(): vha->flags.online 0x1
+
+echo 1 > /sys/kernel/config/target/qla2xxx/21:00:00:24:ff:86:a6:2a/tpgt_1/enable
+kernel: pid 348:drivers/scsi/qla2xxx/qla_init.c:6641 qla2x00_abort_isp_cleanup(): vha->flags.online 0x0, ISP_ABORT_NEEDED 0x0
+<...>
+kernel: pid 348:drivers/scsi/qla2xxx/qla_init.c:6998 qla2x00_restart_isp(): vha->flags.online 0x0
+
+echo 0 > /sys/kernel/config/target/qla2xxx/21:00:00:24:ff:86:a6:2a/tpgt_1/enable
+kernel: pid 348:drivers/scsi/qla2xxx/qla_init.c:6641 qla2x00_abort_isp_cleanup(): vha->flags.online 0x0, ISP_ABORT_NEEDED 0x0
+<...>
+kernel: pid 1404:drivers/scsi/qla2xxx/qla_os.c:1107 qla2x00_wait_for_hba_online(): base_vha->flags.online 0x0
+
+echo 1 > /sys/kernel/config/target/qla2xxx/21:00:00:24:ff:86:a6:2a/tpgt_1/enable
+kernel: pid 1404:drivers/scsi/qla2xxx/qla_os.c:1107 qla2x00_wait_for_hba_online(): base_vha->flags.online 0x0
+kernel: -----------[ cut here ]-----------
+kernel: WARNING: CPU: 1 PID: 1404 at drivers/scsi/qla2xxx/qla_target.c:6654 qlt_enable_vha+0x1e0/0x280 [qla2xxx]
+
+The issue happens because no real ISP reset is executed.  The
+qla2x00_abort_isp(scsi_qla_host_t *vha) function expects that
+vha->flags.online will be not zero for ISP reset procedure.  This patch
+sets vha->flags.online to 1 before calling ->abort_isp() for starting the
+ISP reset.
+
+Link: https://lore.kernel.org/r/1d7b21bf9f7676643239eb3d60eaca7cfa505cf0.camel@yadro.com
+Reviewed-by: Roman Bolshakov <r.bolshakov@yadro.com>
+Signed-off-by: Viacheslav Dubeyko <v.dubeiko@yadro.com>
+Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/scsi/qla2xxx/qla_os.c | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/drivers/scsi/qla2xxx/qla_os.c b/drivers/scsi/qla2xxx/qla_os.c
+index 59b8681842be3..b56cf790587e5 100644
+--- a/drivers/scsi/qla2xxx/qla_os.c
++++ b/drivers/scsi/qla2xxx/qla_os.c
+@@ -6085,6 +6085,7 @@ qla2x00_do_dpc(void *data)
+                       if (do_reset && !(test_and_set_bit(ABORT_ISP_ACTIVE,
+                           &base_vha->dpc_flags))) {
++                              base_vha->flags.online = 1;
+                               ql_dbg(ql_dbg_dpc, base_vha, 0x4007,
+                                   "ISP abort scheduled.\n");
+                               if (ha->isp_ops->abort_isp(base_vha)) {
+-- 
+2.25.1
+
diff --git a/queue-4.19/scsi-sr-fix-sr_probe-missing-deallocate-of-device-mi.patch b/queue-4.19/scsi-sr-fix-sr_probe-missing-deallocate-of-device-mi.patch
new file mode 100644 (file)
index 0000000..4adff41
--- /dev/null
@@ -0,0 +1,47 @@
+From 728f39a8388c13e6708c7f18feca19731052d353 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Sat, 30 May 2020 18:59:44 +0100
+Subject: scsi: sr: Fix sr_probe() missing deallocate of device minor
+
+From: Simon Arlott <simon@octiron.net>
+
+[ Upstream commit 6555781b3fdec5e94e6914511496144241df7dee ]
+
+If the cdrom fails to be registered then the device minor should be
+deallocated.
+
+Link: https://lore.kernel.org/r/072dac4b-8402-4de8-36bd-47e7588969cd@0882a8b5-c6c3-11e9-b005-00805fc181fe
+Signed-off-by: Simon Arlott <simon@octiron.net>
+Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/scsi/sr.c | 6 +++++-
+ 1 file changed, 5 insertions(+), 1 deletion(-)
+
+diff --git a/drivers/scsi/sr.c b/drivers/scsi/sr.c
+index d0389b20574d0..5be3d6b7991b4 100644
+--- a/drivers/scsi/sr.c
++++ b/drivers/scsi/sr.c
+@@ -748,7 +748,7 @@ static int sr_probe(struct device *dev)
+       cd->cdi.disk = disk;
+       if (register_cdrom(&cd->cdi))
+-              goto fail_put;
++              goto fail_minor;
+       /*
+        * Initialize block layer runtime PM stuffs before the
+@@ -766,6 +766,10 @@ static int sr_probe(struct device *dev)
+       return 0;
++fail_minor:
++      spin_lock(&sr_index_lock);
++      clear_bit(minor, sr_index_bits);
++      spin_unlock(&sr_index_lock);
+ fail_put:
+       put_disk(disk);
+ fail_free:
+-- 
+2.25.1
+
diff --git a/queue-4.19/scsi-target-tcmu-fix-a-use-after-free-in-tcmu_check_.patch b/queue-4.19/scsi-target-tcmu-fix-a-use-after-free-in-tcmu_check_.patch
new file mode 100644 (file)
index 0000000..094f91f
--- /dev/null
@@ -0,0 +1,48 @@
+From dcdb36276b138b888f16585e2fb14f77df13b6b4 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Sat, 23 May 2020 13:11:29 +0300
+Subject: scsi: target: tcmu: Fix a use after free in
+ tcmu_check_expired_queue_cmd()
+
+From: Dan Carpenter <dan.carpenter@oracle.com>
+
+[ Upstream commit 9d7464b18892332e35ff37f0b024429a1a9835e6 ]
+
+The pr_debug() dereferences "cmd" after we already freed it by calling
+tcmu_free_cmd(cmd).  The debug printk needs to be done earlier.
+
+Link: https://lore.kernel.org/r/20200523101129.GB98132@mwanda
+Fixes: 61fb24822166 ("scsi: target: tcmu: Userspace must not complete queued commands")
+Reviewed-by: Mike Christie <mchristi@redhat.com>
+Reviewed-by: David Disseldorp <ddiss@suse.de>
+Signed-off-by: Dan Carpenter <dan.carpenter@oracle.com>
+Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/target/target_core_user.c | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+diff --git a/drivers/target/target_core_user.c b/drivers/target/target_core_user.c
+index ac523f247a9ca..8da89925a874d 100644
+--- a/drivers/target/target_core_user.c
++++ b/drivers/target/target_core_user.c
+@@ -1303,13 +1303,13 @@ static void tcmu_check_expired_queue_cmd(struct tcmu_cmd *cmd)
+       if (!time_after(jiffies, cmd->deadline))
+               return;
++      pr_debug("Timing out queued cmd %p on dev %s.\n",
++                cmd, cmd->tcmu_dev->name);
++
+       list_del_init(&cmd->queue_entry);
+       se_cmd = cmd->se_cmd;
+       tcmu_free_cmd(cmd);
+-      pr_debug("Timing out queued cmd %p on dev %s.\n",
+-                cmd, cmd->tcmu_dev->name);
+-
+       target_complete_cmd(se_cmd, SAM_STAT_TASK_SET_FULL);
+ }
+-- 
+2.25.1
+
diff --git a/queue-4.19/scsi-target-tcmu-userspace-must-not-complete-queued-.patch b/queue-4.19/scsi-target-tcmu-userspace-must-not-complete-queued-.patch
new file mode 100644 (file)
index 0000000..48afd46
--- /dev/null
@@ -0,0 +1,337 @@
+From 8806c3df30fa814d04cf19d0d936032c7af89d8a Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Mon, 18 May 2020 18:48:33 +0200
+Subject: scsi: target: tcmu: Userspace must not complete queued commands
+
+From: Bodo Stroesser <bstroesser@ts.fujitsu.com>
+
+[ Upstream commit 61fb2482216679b9e1e797440c148bb143a5040a ]
+
+When tcmu queues a new command - no matter whether in command ring or in
+qfull_queue - a cmd_id from IDR udev->commands is assigned to the command.
+
+If userspace sends a wrong command completion containing the cmd_id of a
+command on the qfull_queue, tcmu_handle_completions() finds the command in
+the IDR and calls tcmu_handle_completion() for it. This might do some nasty
+things because commands in qfull_queue do not have a valid dbi list.
+
+To fix this bug, we no longer add queued commands to the idr.  Instead the
+cmd_id is assign when a command is written to the command ring.
+
+Due to this change I had to adapt the source code at several places where
+up to now an idr_for_each had been done.
+
+[mkp: fix checkpatch warnings]
+
+Link: https://lore.kernel.org/r/20200518164833.12775-1-bstroesser@ts.fujitsu.com
+Acked-by: Mike Christie <mchristi@redhat.com>
+Signed-off-by: Bodo Stroesser <bstroesser@ts.fujitsu.com>
+Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/target/target_core_user.c | 154 ++++++++++++++----------------
+ 1 file changed, 71 insertions(+), 83 deletions(-)
+
+diff --git a/drivers/target/target_core_user.c b/drivers/target/target_core_user.c
+index eff1e36ca03c2..ac523f247a9ca 100644
+--- a/drivers/target/target_core_user.c
++++ b/drivers/target/target_core_user.c
+@@ -893,41 +893,24 @@ static inline size_t tcmu_cmd_get_cmd_size(struct tcmu_cmd *tcmu_cmd,
+       return command_size;
+ }
+-static int tcmu_setup_cmd_timer(struct tcmu_cmd *tcmu_cmd, unsigned int tmo,
+-                              struct timer_list *timer)
++static void tcmu_setup_cmd_timer(struct tcmu_cmd *tcmu_cmd, unsigned int tmo,
++                               struct timer_list *timer)
+ {
+-      struct tcmu_dev *udev = tcmu_cmd->tcmu_dev;
+-      int cmd_id;
+-
+-      if (tcmu_cmd->cmd_id)
+-              goto setup_timer;
+-
+-      cmd_id = idr_alloc(&udev->commands, tcmu_cmd, 1, USHRT_MAX, GFP_NOWAIT);
+-      if (cmd_id < 0) {
+-              pr_err("tcmu: Could not allocate cmd id.\n");
+-              return cmd_id;
+-      }
+-      tcmu_cmd->cmd_id = cmd_id;
+-
+-      pr_debug("allocated cmd %u for dev %s tmo %lu\n", tcmu_cmd->cmd_id,
+-               udev->name, tmo / MSEC_PER_SEC);
+-
+-setup_timer:
+       if (!tmo)
+-              return 0;
++              return;
+       tcmu_cmd->deadline = round_jiffies_up(jiffies + msecs_to_jiffies(tmo));
+       if (!timer_pending(timer))
+               mod_timer(timer, tcmu_cmd->deadline);
+-      return 0;
++      pr_debug("Timeout set up for cmd %p, dev = %s, tmo = %lu\n", tcmu_cmd,
++               tcmu_cmd->tcmu_dev->name, tmo / MSEC_PER_SEC);
+ }
+ static int add_to_qfull_queue(struct tcmu_cmd *tcmu_cmd)
+ {
+       struct tcmu_dev *udev = tcmu_cmd->tcmu_dev;
+       unsigned int tmo;
+-      int ret;
+       /*
+        * For backwards compat if qfull_time_out is not set use
+@@ -942,13 +925,11 @@ static int add_to_qfull_queue(struct tcmu_cmd *tcmu_cmd)
+       else
+               tmo = TCMU_TIME_OUT;
+-      ret = tcmu_setup_cmd_timer(tcmu_cmd, tmo, &udev->qfull_timer);
+-      if (ret)
+-              return ret;
++      tcmu_setup_cmd_timer(tcmu_cmd, tmo, &udev->qfull_timer);
+       list_add_tail(&tcmu_cmd->queue_entry, &udev->qfull_queue);
+-      pr_debug("adding cmd %u on dev %s to ring space wait queue\n",
+-               tcmu_cmd->cmd_id, udev->name);
++      pr_debug("adding cmd %p on dev %s to ring space wait queue\n",
++               tcmu_cmd, udev->name);
+       return 0;
+ }
+@@ -970,7 +951,7 @@ static int queue_cmd_ring(struct tcmu_cmd *tcmu_cmd, sense_reason_t *scsi_err)
+       struct tcmu_mailbox *mb;
+       struct tcmu_cmd_entry *entry;
+       struct iovec *iov;
+-      int iov_cnt, ret;
++      int iov_cnt, cmd_id;
+       uint32_t cmd_head;
+       uint64_t cdb_off;
+       bool copy_to_data_area;
+@@ -1071,14 +1052,21 @@ static int queue_cmd_ring(struct tcmu_cmd *tcmu_cmd, sense_reason_t *scsi_err)
+       }
+       entry->req.iov_bidi_cnt = iov_cnt;
+-      ret = tcmu_setup_cmd_timer(tcmu_cmd, udev->cmd_time_out,
+-                                 &udev->cmd_timer);
+-      if (ret) {
+-              tcmu_cmd_free_data(tcmu_cmd, tcmu_cmd->dbi_cnt);
++      cmd_id = idr_alloc(&udev->commands, tcmu_cmd, 1, USHRT_MAX, GFP_NOWAIT);
++      if (cmd_id < 0) {
++              pr_err("tcmu: Could not allocate cmd id.\n");
++              tcmu_cmd_free_data(tcmu_cmd, tcmu_cmd->dbi_cnt);
+               *scsi_err = TCM_OUT_OF_RESOURCES;
+               return -1;
+       }
++      tcmu_cmd->cmd_id = cmd_id;
++
++      pr_debug("allocated cmd id %u for cmd %p dev %s\n", tcmu_cmd->cmd_id,
++               tcmu_cmd, udev->name);
++
++      tcmu_setup_cmd_timer(tcmu_cmd, udev->cmd_time_out, &udev->cmd_timer);
++
+       entry->hdr.cmd_id = tcmu_cmd->cmd_id;
+       /*
+@@ -1290,50 +1278,39 @@ static unsigned int tcmu_handle_completions(struct tcmu_dev *udev)
+       return handled;
+ }
+-static int tcmu_check_expired_cmd(int id, void *p, void *data)
++static void tcmu_check_expired_ring_cmd(struct tcmu_cmd *cmd)
+ {
+-      struct tcmu_cmd *cmd = p;
+-      struct tcmu_dev *udev = cmd->tcmu_dev;
+-      u8 scsi_status;
+       struct se_cmd *se_cmd;
+-      bool is_running;
+-
+-      if (test_bit(TCMU_CMD_BIT_EXPIRED, &cmd->flags))
+-              return 0;
+       if (!time_after(jiffies, cmd->deadline))
+-              return 0;
++              return;
+-      is_running = test_bit(TCMU_CMD_BIT_INFLIGHT, &cmd->flags);
++      set_bit(TCMU_CMD_BIT_EXPIRED, &cmd->flags);
++      list_del_init(&cmd->queue_entry);
+       se_cmd = cmd->se_cmd;
++      cmd->se_cmd = NULL;
+-      if (is_running) {
+-              /*
+-               * If cmd_time_out is disabled but qfull is set deadline
+-               * will only reflect the qfull timeout. Ignore it.
+-               */
+-              if (!udev->cmd_time_out)
+-                      return 0;
++      pr_debug("Timing out inflight cmd %u on dev %s.\n",
++               cmd->cmd_id, cmd->tcmu_dev->name);
+-              set_bit(TCMU_CMD_BIT_EXPIRED, &cmd->flags);
+-              /*
+-               * target_complete_cmd will translate this to LUN COMM FAILURE
+-               */
+-              scsi_status = SAM_STAT_CHECK_CONDITION;
+-              list_del_init(&cmd->queue_entry);
+-              cmd->se_cmd = NULL;
+-      } else {
+-              list_del_init(&cmd->queue_entry);
+-              idr_remove(&udev->commands, id);
+-              tcmu_free_cmd(cmd);
+-              scsi_status = SAM_STAT_TASK_SET_FULL;
+-      }
++      target_complete_cmd(se_cmd, SAM_STAT_CHECK_CONDITION);
++}
+-      pr_debug("Timing out cmd %u on dev %s that is %s.\n",
+-               id, udev->name, is_running ? "inflight" : "queued");
++static void tcmu_check_expired_queue_cmd(struct tcmu_cmd *cmd)
++{
++      struct se_cmd *se_cmd;
+-      target_complete_cmd(se_cmd, scsi_status);
+-      return 0;
++      if (!time_after(jiffies, cmd->deadline))
++              return;
++
++      list_del_init(&cmd->queue_entry);
++      se_cmd = cmd->se_cmd;
++      tcmu_free_cmd(cmd);
++
++      pr_debug("Timing out queued cmd %p on dev %s.\n",
++                cmd, cmd->tcmu_dev->name);
++
++      target_complete_cmd(se_cmd, SAM_STAT_TASK_SET_FULL);
+ }
+ static void tcmu_device_timedout(struct tcmu_dev *udev)
+@@ -1418,16 +1395,15 @@ static struct se_device *tcmu_alloc_device(struct se_hba *hba, const char *name)
+       return &udev->se_dev;
+ }
+-static bool run_qfull_queue(struct tcmu_dev *udev, bool fail)
++static void run_qfull_queue(struct tcmu_dev *udev, bool fail)
+ {
+       struct tcmu_cmd *tcmu_cmd, *tmp_cmd;
+       LIST_HEAD(cmds);
+-      bool drained = true;
+       sense_reason_t scsi_ret;
+       int ret;
+       if (list_empty(&udev->qfull_queue))
+-              return true;
++              return;
+       pr_debug("running %s's cmdr queue forcefail %d\n", udev->name, fail);
+@@ -1436,11 +1412,10 @@ static bool run_qfull_queue(struct tcmu_dev *udev, bool fail)
+       list_for_each_entry_safe(tcmu_cmd, tmp_cmd, &cmds, queue_entry) {
+               list_del_init(&tcmu_cmd->queue_entry);
+-              pr_debug("removing cmd %u on dev %s from queue\n",
+-                       tcmu_cmd->cmd_id, udev->name);
++              pr_debug("removing cmd %p on dev %s from queue\n",
++                       tcmu_cmd, udev->name);
+               if (fail) {
+-                      idr_remove(&udev->commands, tcmu_cmd->cmd_id);
+                       /*
+                        * We were not able to even start the command, so
+                        * fail with busy to allow a retry in case runner
+@@ -1455,10 +1430,8 @@ static bool run_qfull_queue(struct tcmu_dev *udev, bool fail)
+               ret = queue_cmd_ring(tcmu_cmd, &scsi_ret);
+               if (ret < 0) {
+-                      pr_debug("cmd %u on dev %s failed with %u\n",
+-                               tcmu_cmd->cmd_id, udev->name, scsi_ret);
+-
+-                      idr_remove(&udev->commands, tcmu_cmd->cmd_id);
++                      pr_debug("cmd %p on dev %s failed with %u\n",
++                               tcmu_cmd, udev->name, scsi_ret);
+                       /*
+                        * Ignore scsi_ret for now. target_complete_cmd
+                        * drops it.
+@@ -1473,13 +1446,11 @@ static bool run_qfull_queue(struct tcmu_dev *udev, bool fail)
+                        * the queue
+                        */
+                       list_splice_tail(&cmds, &udev->qfull_queue);
+-                      drained = false;
+                       break;
+               }
+       }
+       tcmu_set_next_deadline(&udev->qfull_queue, &udev->qfull_timer);
+-      return drained;
+ }
+ static int tcmu_irqcontrol(struct uio_info *info, s32 irq_on)
+@@ -1663,6 +1634,8 @@ static void tcmu_dev_kref_release(struct kref *kref)
+               if (tcmu_check_and_free_pending_cmd(cmd) != 0)
+                       all_expired = false;
+       }
++      if (!list_empty(&udev->qfull_queue))
++              all_expired = false;
+       idr_destroy(&udev->commands);
+       WARN_ON(!all_expired);
+@@ -2031,9 +2004,6 @@ static void tcmu_reset_ring(struct tcmu_dev *udev, u8 err_level)
+       mutex_lock(&udev->cmdr_lock);
+       idr_for_each_entry(&udev->commands, cmd, i) {
+-              if (!test_bit(TCMU_CMD_BIT_INFLIGHT, &cmd->flags))
+-                      continue;
+-
+               pr_debug("removing cmd %u on dev %s from ring (is expired %d)\n",
+                         cmd->cmd_id, udev->name,
+                         test_bit(TCMU_CMD_BIT_EXPIRED, &cmd->flags));
+@@ -2071,6 +2041,8 @@ static void tcmu_reset_ring(struct tcmu_dev *udev, u8 err_level)
+       del_timer(&udev->cmd_timer);
++      run_qfull_queue(udev, false);
++
+       mutex_unlock(&udev->cmdr_lock);
+ }
+@@ -2692,6 +2664,7 @@ static void find_free_blocks(void)
+ static void check_timedout_devices(void)
+ {
+       struct tcmu_dev *udev, *tmp_dev;
++      struct tcmu_cmd *cmd, *tmp_cmd;
+       LIST_HEAD(devs);
+       spin_lock_bh(&timed_out_udevs_lock);
+@@ -2702,9 +2675,24 @@ static void check_timedout_devices(void)
+               spin_unlock_bh(&timed_out_udevs_lock);
+               mutex_lock(&udev->cmdr_lock);
+-              idr_for_each(&udev->commands, tcmu_check_expired_cmd, NULL);
+-              tcmu_set_next_deadline(&udev->inflight_queue, &udev->cmd_timer);
++              /*
++               * If cmd_time_out is disabled but qfull is set deadline
++               * will only reflect the qfull timeout. Ignore it.
++               */
++              if (udev->cmd_time_out) {
++                      list_for_each_entry_safe(cmd, tmp_cmd,
++                                               &udev->inflight_queue,
++                                               queue_entry) {
++                              tcmu_check_expired_ring_cmd(cmd);
++                      }
++                      tcmu_set_next_deadline(&udev->inflight_queue,
++                                             &udev->cmd_timer);
++              }
++              list_for_each_entry_safe(cmd, tmp_cmd, &udev->qfull_queue,
++                                       queue_entry) {
++                      tcmu_check_expired_queue_cmd(cmd);
++              }
+               tcmu_set_next_deadline(&udev->qfull_queue, &udev->qfull_timer);
+               mutex_unlock(&udev->cmdr_lock);
+-- 
+2.25.1
+
diff --git a/queue-4.19/scsi-ufs-don-t-update-urgent-bkops-level-when-toggli.patch b/queue-4.19/scsi-ufs-don-t-update-urgent-bkops-level-when-toggli.patch
new file mode 100644 (file)
index 0000000..bab4498
--- /dev/null
@@ -0,0 +1,41 @@
+From cce4b5e02573f3f3234a7d4d8657e6071a14673c Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Wed, 27 May 2020 19:24:42 -0700
+Subject: scsi: ufs: Don't update urgent bkops level when toggling auto bkops
+
+From: Can Guo <cang@codeaurora.org>
+
+[ Upstream commit be32acff43800c87dc5c707f5d47cc607b76b653 ]
+
+Urgent bkops level is used to compare against actual bkops status read from
+UFS device. Urgent bkops level is set during initialization and might be
+updated in exception event handler during runtime. But it should not be
+updated to the actual bkops status every time when auto bkops is toggled.
+Otherwise, if urgent bkops level is updated to 0, auto bkops shall always
+be kept enabled.
+
+Link: https://lore.kernel.org/r/1590632686-17866-1-git-send-email-cang@codeaurora.org
+Fixes: 24366c2afbb0 ("scsi: ufs: Recheck bkops level if bkops is disabled")
+Reviewed-by: Stanley Chu <stanley.chu@mediatek.com>
+Signed-off-by: Can Guo <cang@codeaurora.org>
+Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/scsi/ufs/ufshcd.c | 1 -
+ 1 file changed, 1 deletion(-)
+
+diff --git a/drivers/scsi/ufs/ufshcd.c b/drivers/scsi/ufs/ufshcd.c
+index 803d67b3a1666..bd21c9cdf8183 100644
+--- a/drivers/scsi/ufs/ufshcd.c
++++ b/drivers/scsi/ufs/ufshcd.c
+@@ -5122,7 +5122,6 @@ static int ufshcd_bkops_ctrl(struct ufs_hba *hba,
+               err = ufshcd_enable_auto_bkops(hba);
+       else
+               err = ufshcd_disable_auto_bkops(hba);
+-      hba->urgent_bkops_lvl = curr_status;
+ out:
+       return err;
+ }
+-- 
+2.25.1
+
diff --git a/queue-4.19/scsi-ufs-qcom-fix-scheduling-while-atomic-issue.patch b/queue-4.19/scsi-ufs-qcom-fix-scheduling-while-atomic-issue.patch
new file mode 100644 (file)
index 0000000..7abf76c
--- /dev/null
@@ -0,0 +1,54 @@
+From c5fa690e27bfb63e7e5e3653f2f3f7879805a3ff Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Mon, 25 May 2020 13:41:25 -0700
+Subject: scsi: ufs-qcom: Fix scheduling while atomic issue
+
+From: Jeffrey Hugo <jeffrey.l.hugo@gmail.com>
+
+[ Upstream commit 3be60b564de49875e47974c37fabced893cd0931 ]
+
+ufs_qcom_dump_dbg_regs() uses usleep_range, a sleeping function, but can be
+called from atomic context in the following flow:
+
+ufshcd_intr -> ufshcd_sl_intr -> ufshcd_check_errors ->
+ufshcd_print_host_regs -> ufshcd_vops_dbg_register_dump ->
+ufs_qcom_dump_dbg_regs
+
+This causes a boot crash on the Lenovo Miix 630 when the interrupt is
+handled on the idle thread.
+
+Fix the issue by switching to udelay().
+
+Link: https://lore.kernel.org/r/20200525204125.46171-1-jeffrey.l.hugo@gmail.com
+Fixes: 9c46b8676271 ("scsi: ufs-qcom: dump additional testbus registers")
+Reviewed-by: Bean Huo <beanhuo@micron.com>
+Reviewed-by: Avri Altman <avri.altman@wdc.com>
+Signed-off-by: Jeffrey Hugo <jeffrey.l.hugo@gmail.com>
+Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/scsi/ufs/ufs-qcom.c | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+diff --git a/drivers/scsi/ufs/ufs-qcom.c b/drivers/scsi/ufs/ufs-qcom.c
+index 75ee5906b9663..21e3ff590ec91 100644
+--- a/drivers/scsi/ufs/ufs-qcom.c
++++ b/drivers/scsi/ufs/ufs-qcom.c
+@@ -1635,11 +1635,11 @@ static void ufs_qcom_dump_dbg_regs(struct ufs_hba *hba)
+       /* sleep a bit intermittently as we are dumping too much data */
+       ufs_qcom_print_hw_debug_reg_all(hba, NULL, ufs_qcom_dump_regs_wrapper);
+-      usleep_range(1000, 1100);
++      udelay(1000);
+       ufs_qcom_testbus_read(hba);
+-      usleep_range(1000, 1100);
++      udelay(1000);
+       ufs_qcom_print_unipro_testbus(hba);
+-      usleep_range(1000, 1100);
++      udelay(1000);
+ }
+ /**
+-- 
+2.25.1
+
diff --git a/queue-4.19/selftests-net-in-timestamping-strncpy-needs-to-prese.patch b/queue-4.19/selftests-net-in-timestamping-strncpy-needs-to-prese.patch
new file mode 100644 (file)
index 0000000..ed2f962
--- /dev/null
@@ -0,0 +1,68 @@
+From f8ff0b751904497e28e3a60883ea3dc582d35bbd Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Mon, 8 Jun 2020 15:37:15 -0400
+Subject: selftests/net: in timestamping, strncpy needs to preserve null byte
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+From: tannerlove <tannerlove@google.com>
+
+[ Upstream commit 8027bc0307ce59759b90679fa5d8b22949586d20 ]
+
+If user passed an interface option longer than 15 characters, then
+device.ifr_name and hwtstamp.ifr_name became non-null-terminated
+strings. The compiler warned about this:
+
+timestamping.c:353:2: warning: ‘strncpy’ specified bound 16 equals \
+destination size [-Wstringop-truncation]
+  353 |  strncpy(device.ifr_name, interface, sizeof(device.ifr_name));
+
+Fixes: cb9eff097831 ("net: new user space API for time stamping of incoming and outgoing packets")
+Signed-off-by: Tanner Love <tannerlove@google.com>
+Acked-by: Willem de Bruijn <willemb@google.com>
+Signed-off-by: David S. Miller <davem@davemloft.net>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ .../selftests/networking/timestamping/timestamping.c   | 10 ++++++++--
+ 1 file changed, 8 insertions(+), 2 deletions(-)
+
+diff --git a/tools/testing/selftests/networking/timestamping/timestamping.c b/tools/testing/selftests/networking/timestamping/timestamping.c
+index 5cdfd743447b7..900ed4b478996 100644
+--- a/tools/testing/selftests/networking/timestamping/timestamping.c
++++ b/tools/testing/selftests/networking/timestamping/timestamping.c
+@@ -332,10 +332,16 @@ int main(int argc, char **argv)
+       int val;
+       socklen_t len;
+       struct timeval next;
++      size_t if_len;
+       if (argc < 2)
+               usage(0);
+       interface = argv[1];
++      if_len = strlen(interface);
++      if (if_len >= IFNAMSIZ) {
++              printf("interface name exceeds IFNAMSIZ\n");
++              exit(1);
++      }
+       for (i = 2; i < argc; i++) {
+               if (!strcasecmp(argv[i], "SO_TIMESTAMP"))
+@@ -369,12 +375,12 @@ int main(int argc, char **argv)
+               bail("socket");
+       memset(&device, 0, sizeof(device));
+-      strncpy(device.ifr_name, interface, sizeof(device.ifr_name));
++      memcpy(device.ifr_name, interface, if_len + 1);
+       if (ioctl(sock, SIOCGIFADDR, &device) < 0)
+               bail("getting interface IP address");
+       memset(&hwtstamp, 0, sizeof(hwtstamp));
+-      strncpy(hwtstamp.ifr_name, interface, sizeof(hwtstamp.ifr_name));
++      memcpy(hwtstamp.ifr_name, interface, if_len + 1);
+       hwtstamp.ifr_data = (void *)&hwconfig;
+       memset(&hwconfig, 0, sizeof(hwconfig));
+       hwconfig.tx_type =
+-- 
+2.25.1
+
diff --git a/queue-4.19/selftests-vm-pkeys-fix-alloc_random_pkey-to-make-it-.patch b/queue-4.19/selftests-vm-pkeys-fix-alloc_random_pkey-to-make-it-.patch
new file mode 100644 (file)
index 0000000..d53934e
--- /dev/null
@@ -0,0 +1,60 @@
+From d6df765f664194b07d4305b8f1beee2b926579a7 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Thu, 4 Jun 2020 16:52:05 -0700
+Subject: selftests/vm/pkeys: fix alloc_random_pkey() to make it really random
+
+From: Ram Pai <linuxram@us.ibm.com>
+
+[ Upstream commit 6e373263ce07eeaa6410843179535fbdf561fc31 ]
+
+alloc_random_pkey() was allocating the same pkey every time.  Not all
+pkeys were geting tested.  This fixes it.
+
+Signed-off-by: Ram Pai <linuxram@us.ibm.com>
+Signed-off-by: Sandipan Das <sandipan@linux.ibm.com>
+Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
+Acked-by: Dave Hansen <dave.hansen@intel.com>
+Cc: Dave Hansen <dave.hansen@intel.com>
+Cc: Florian Weimer <fweimer@redhat.com>
+Cc: "Desnes A. Nunes do Rosario" <desnesn@linux.vnet.ibm.com>
+Cc: Ingo Molnar <mingo@kernel.org>
+Cc: Thiago Jung Bauermann <bauerman@linux.ibm.com>
+Cc: "Aneesh Kumar K.V" <aneesh.kumar@linux.ibm.com>
+Cc: Michael Ellerman <mpe@ellerman.id.au>
+Cc: Michal Hocko <mhocko@kernel.org>
+Cc: Michal Suchanek <msuchanek@suse.de>
+Cc: Shuah Khan <shuah@kernel.org>
+Link: http://lkml.kernel.org/r/0162f55816d4e783a0d6e49e554d0ab9a3c9a23b.1585646528.git.sandipan@linux.ibm.com
+Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ tools/testing/selftests/x86/protection_keys.c | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+diff --git a/tools/testing/selftests/x86/protection_keys.c b/tools/testing/selftests/x86/protection_keys.c
+index 5d546dcdbc805..b8778960da106 100644
+--- a/tools/testing/selftests/x86/protection_keys.c
++++ b/tools/testing/selftests/x86/protection_keys.c
+@@ -24,6 +24,7 @@
+ #define _GNU_SOURCE
+ #include <errno.h>
+ #include <linux/futex.h>
++#include <time.h>
+ #include <sys/time.h>
+ #include <sys/syscall.h>
+ #include <string.h>
+@@ -612,10 +613,10 @@ int alloc_random_pkey(void)
+       int nr_alloced = 0;
+       int random_index;
+       memset(alloced_pkeys, 0, sizeof(alloced_pkeys));
++      srand((unsigned int)time(NULL));
+       /* allocate every possible key and make a note of which ones we got */
+       max_nr_pkey_allocs = NR_PKEYS;
+-      max_nr_pkey_allocs = 1;
+       for (i = 0; i < max_nr_pkey_allocs; i++) {
+               int new_pkey = alloc_pkey();
+               if (new_pkey < 0)
+-- 
+2.25.1
+
diff --git a/queue-4.19/serial-8250-fix-max-baud-limit-in-generic-8250-port.patch b/queue-4.19/serial-8250-fix-max-baud-limit-in-generic-8250-port.patch
new file mode 100644 (file)
index 0000000..a327d6a
--- /dev/null
@@ -0,0 +1,81 @@
+From 75b940597616cc8a3b5f5430bc39a0622b9958aa Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Thu, 7 May 2020 02:31:32 +0300
+Subject: serial: 8250: Fix max baud limit in generic 8250 port
+
+From: Serge Semin <Sergey.Semin@baikalelectronics.ru>
+
+[ Upstream commit 7b668c064ec33f3d687c3a413d05e355172e6c92 ]
+
+Standard 8250 UART ports are designed in a way so they can communicate
+with baud rates up to 1/16 of a reference frequency. It's expected from
+most of the currently supported UART controllers. That's why the former
+version of serial8250_get_baud_rate() method called uart_get_baud_rate()
+with min and max baud rates passed as (port->uartclk / 16 / UART_DIV_MAX)
+and ((port->uartclk + tolerance) / 16) respectively. Doing otherwise, like
+it was suggested in commit ("serial: 8250_mtk: support big baud rate."),
+caused acceptance of bauds, which was higher than the normal UART
+controllers actually supported. As a result if some user-space program
+requested to set a baud greater than (uartclk / 16) it would have been
+permitted without truncation, but then serial8250_get_divisor(baud)
+(which calls uart_get_divisor() to get the reference clock divisor) would
+have returned a zero divisor. Setting zero divisor will cause an
+unpredictable effect varying from chip to chip. In case of DW APB UART the
+communications just stop.
+
+Lets fix this problem by getting back the limitation of (uartclk +
+tolerance) / 16 maximum baud supported by the generic 8250 port. Mediatek
+8250 UART ports driver developer shouldn't have touched it in the first
+place  notably seeing he already provided a custom version of set_termios()
+callback in that glue-driver which took into account the extended baud
+rate values and accordingly updated the standard and vendor-specific
+divisor latch registers anyway.
+
+Fixes: 81bb549fdf14 ("serial: 8250_mtk: support big baud rate.")
+Signed-off-by: Serge Semin <Sergey.Semin@baikalelectronics.ru>
+Cc: Alexey Malahov <Alexey.Malahov@baikalelectronics.ru>
+Cc: Thomas Bogendoerfer <tsbogend@alpha.franken.de>
+Cc: Paul Burton <paulburton@kernel.org>
+Cc: Ralf Baechle <ralf@linux-mips.org>
+Cc: Arnd Bergmann <arnd@arndb.de>
+Cc: Long Cheng <long.cheng@mediatek.com>
+Cc: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
+Cc: Maxime Ripard <mripard@kernel.org>
+Cc: Catalin Marinas <catalin.marinas@arm.com>
+Cc: Will Deacon <will@kernel.org>
+Cc: Russell King <linux@armlinux.org.uk>
+Cc: linux-mips@vger.kernel.org
+Cc: linux-arm-kernel@lists.infradead.org
+Cc: linux-mediatek@lists.infradead.org
+Link: https://lore.kernel.org/r/20200506233136.11842-2-Sergey.Semin@baikalelectronics.ru
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/tty/serial/8250/8250_port.c | 4 +++-
+ 1 file changed, 3 insertions(+), 1 deletion(-)
+
+diff --git a/drivers/tty/serial/8250/8250_port.c b/drivers/tty/serial/8250/8250_port.c
+index 5a04d4ddca736..20b799219826e 100644
+--- a/drivers/tty/serial/8250/8250_port.c
++++ b/drivers/tty/serial/8250/8250_port.c
+@@ -2628,6 +2628,8 @@ static unsigned int serial8250_get_baud_rate(struct uart_port *port,
+                                            struct ktermios *termios,
+                                            struct ktermios *old)
+ {
++      unsigned int tolerance = port->uartclk / 100;
++
+       /*
+        * Ask the core to calculate the divisor for us.
+        * Allow 1% tolerance at the upper limit so uart clks marginally
+@@ -2636,7 +2638,7 @@ static unsigned int serial8250_get_baud_rate(struct uart_port *port,
+        */
+       return uart_get_baud_rate(port, termios, old,
+                                 port->uartclk / 16 / UART_DIV_MAX,
+-                                port->uartclk);
++                                (port->uartclk + tolerance) / 16);
+ }
+ void
+-- 
+2.25.1
+
diff --git a/queue-4.19/serial-amba-pl011-make-sure-we-initialize-the-port.l.patch b/queue-4.19/serial-amba-pl011-make-sure-we-initialize-the-port.l.patch
new file mode 100644 (file)
index 0000000..a1034d2
--- /dev/null
@@ -0,0 +1,87 @@
+From ef7514b3ac0523ce4044c0202678535382199276 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Tue, 28 Apr 2020 18:40:50 +0000
+Subject: serial: amba-pl011: Make sure we initialize the port.lock spinlock
+
+From: John Stultz <john.stultz@linaro.org>
+
+[ Upstream commit 8508f4cba308f785b2fd4b8c38849c117b407297 ]
+
+Valentine reported seeing:
+
+[    3.626638] INFO: trying to register non-static key.
+[    3.626639] the code is fine but needs lockdep annotation.
+[    3.626640] turning off the locking correctness validator.
+[    3.626644] CPU: 7 PID: 51 Comm: kworker/7:1 Not tainted 5.7.0-rc2-00115-g8c2e9790f196 #116
+[    3.626646] Hardware name: HiKey960 (DT)
+[    3.626656] Workqueue: events deferred_probe_work_func
+[    3.632476] sd 0:0:0:0: [sda] Optimal transfer size 8192 bytes not a multiple of physical block size (16384 bytes)
+[    3.640220] Call trace:
+[    3.640225]  dump_backtrace+0x0/0x1b8
+[    3.640227]  show_stack+0x20/0x30
+[    3.640230]  dump_stack+0xec/0x158
+[    3.640234]  register_lock_class+0x598/0x5c0
+[    3.640235]  __lock_acquire+0x80/0x16c0
+[    3.640236]  lock_acquire+0xf4/0x4a0
+[    3.640241]  _raw_spin_lock_irqsave+0x70/0xa8
+[    3.640245]  uart_add_one_port+0x388/0x4b8
+[    3.640248]  pl011_register_port+0x70/0xf0
+[    3.640250]  pl011_probe+0x184/0x1b8
+[    3.640254]  amba_probe+0xdc/0x180
+[    3.640256]  really_probe+0xe0/0x338
+[    3.640257]  driver_probe_device+0x60/0xf8
+[    3.640259]  __device_attach_driver+0x8c/0xd0
+[    3.640260]  bus_for_each_drv+0x84/0xd8
+[    3.640261]  __device_attach+0xe4/0x140
+[    3.640263]  device_initial_probe+0x1c/0x28
+[    3.640265]  bus_probe_device+0xa4/0xb0
+[    3.640266]  deferred_probe_work_func+0x7c/0xb8
+[    3.640269]  process_one_work+0x2c0/0x768
+[    3.640271]  worker_thread+0x4c/0x498
+[    3.640272]  kthread+0x14c/0x158
+[    3.640275]  ret_from_fork+0x10/0x1c
+
+Which seems to be due to the fact that after allocating the uap
+structure, nothing initializes the spinlock.
+
+Its a little confusing, as uart_port_spin_lock_init() is one
+place where the lock is supposed to be initialized, but it has
+an exception for the case where the port is a console.
+
+This makes it seem like a deeper fix is needed to properly
+register the console, but I'm not sure what that entails, and
+Andy suggested that this approach is less invasive.
+
+Thus, this patch resolves the issue by initializing the spinlock
+in the driver, and resolves the resulting warning.
+
+Cc: Andy Shevchenko <andy.shevchenko@gmail.com>
+Cc: Russell King <linux@armlinux.org.uk>
+Cc: Jiri Slaby <jslaby@suse.com>
+Cc: linux-serial@vger.kernel.org
+Reported-by: Valentin Schneider <valentin.schneider@arm.com>
+Reviewed-by: Andy Shevchenko <andy.shevchenko@gmail.com>
+Signed-off-by: John Stultz <john.stultz@linaro.org>
+Reviewed-and-tested-by: Valentin Schneider <valentin.schneider@arm.com>
+Link: https://lore.kernel.org/r/20200428184050.6501-1-john.stultz@linaro.org
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/tty/serial/amba-pl011.c | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/drivers/tty/serial/amba-pl011.c b/drivers/tty/serial/amba-pl011.c
+index af21122dfadec..1d501154e9f78 100644
+--- a/drivers/tty/serial/amba-pl011.c
++++ b/drivers/tty/serial/amba-pl011.c
+@@ -2585,6 +2585,7 @@ static int pl011_setup_port(struct device *dev, struct uart_amba_port *uap,
+       uap->port.fifosize = uap->fifosize;
+       uap->port.flags = UPF_BOOT_AUTOCONF;
+       uap->port.line = index;
++      spin_lock_init(&uap->port.lock);
+       amba_ports[index] = uap;
+-- 
+2.25.1
+
diff --git a/queue-4.19/series b/queue-4.19/series
new file mode 100644 (file)
index 0000000..a2242f2
--- /dev/null
@@ -0,0 +1,175 @@
+power-supply-bq24257_charger-replace-depends-on-regm.patch
+clk-sunxi-fix-incorrect-usage-of-round_down.patch
+asoc-tegra-tegra_wm8903-support-nvidia-headset-prope.patch
+i2c-piix4-detect-secondary-smbus-controller-on-amd-a.patch
+iio-pressure-bmp280-tolerate-irq-before-registering.patch
+remoteproc-fix-idr-initialisation-in-rproc_alloc.patch
+clk-qcom-msm8916-fix-the-address-location-of-pll-con.patch
+backlight-lp855x-ensure-regulators-are-disabled-on-p.patch
+asoc-davinci-mcasp-fix-dma_chan-refcnt-leak-when-get.patch
+arm-integrator-add-some-kconfig-selections.patch
+scsi-qedi-check-for-buffer-overflow-in-qedi_set_path.patch
+alsa-hda-realtek-introduce-polarity-for-micmute-led-.patch
+alsa-isa-wavefront-prevent-out-of-bounds-write-in-io.patch
+pci-allow-pci_resize_resource-for-devices-on-root-bu.patch
+scsi-qla2xxx-fix-issue-with-adapter-s-stopping-state.patch
+iio-bmp280-fix-compensation-of-humidity.patch
+f2fs-report-delalloc-reserve-as-non-free-in-statfs-f.patch
+i2c-pxa-clear-all-master-action-bits-in-i2c_pxa_stop.patch
+clk-samsung-mark-top-isp-and-cam-clocks-on-exynos542.patch
+usblp-poison-urbs-upon-disconnect.patch
+serial-8250-fix-max-baud-limit-in-generic-8250-port.patch
+dm-mpath-switch-paths-in-dm_blk_ioctl-code-path.patch
+pci-aardvark-don-t-blindly-enable-aspm-l0s-and-don-t.patch
+ps3disk-use-the-default-segment-boundary.patch
+vfio-pci-fix-memory-leaks-in-alloc_perm_bits.patch
+rdma-mlx5-add-init2init-as-a-modify-command.patch
+m68k-pci-fix-a-memory-leak-in-an-error-handling-path.patch
+gpio-dwapb-call-acpi_gpiochip_free_interrupts-on-gpi.patch
+mfd-wm8994-fix-driver-operation-if-loaded-as-modules.patch
+scsi-lpfc-fix-lpfc_nodelist-leak-when-processing-uns.patch
+clk-clk-flexgen-fix-clock-critical-handling.patch
+powerpc-perf-hv-24x7-fix-inconsistent-output-values-.patch
+nfsd-fix-svc_xprt-refcnt-leak-when-setup-callback-cl.patch
+pci-vmd-filter-resource-type-bits-from-shadow-regist.patch
+powerpc-crashkernel-take-mem-option-into-account.patch
+pwm-img-call-pm_runtime_put-in-pm_runtime_get_sync-f.patch
+yam-fix-possible-memory-leak-in-yam_init_driver.patch
+ntb-ntb_pingpong-choose-doorbells-based-on-port-numb.patch
+ntb-fix-the-default-port-and-peer-numbers-for-legacy.patch
+mksysmap-fix-the-mismatch-of-.l-symbols-in-system.ma.patch
+apparmor-fix-introspection-of-of-task-mode-for-uncon.patch
+apparmor-check-put-label-on-apparmor_sk_clone_securi.patch
+asoc-meson-add-missing-free_irq-in-error-path.patch
+scsi-sr-fix-sr_probe-missing-deallocate-of-device-mi.patch
+scsi-ibmvscsi-don-t-send-host-info-in-adapter-info-m.patch
+apparmor-fix-nnp-subset-test-for-unconfined.patch
+x86-purgatory-disable-various-profiling-and-sanitizi.patch
+staging-greybus-fix-a-missing-check-bug-in-gb_lights.patch
+staging-rtl8712-fix-multiline-derefernce-warnings.patch
+arm64-dts-mt8173-fix-unit-name-warnings.patch
+scsi-qedi-do-not-flush-offload-work-if-arp-not-resol.patch
+arm-dts-sun8i-h2-plus-bananapi-m2-zero-fix-led-polar.patch
+gpio-dwapb-append-module_alias-for-platform-driver.patch
+scsi-qedf-fix-crash-when-mfw-calls-for-protocol-stat.patch
+pinctrl-rza1-fix-wrong-array-assignment-of-rza1l_swi.patch
+firmware-qcom_scm-fix-bogous-abuse-of-dma-direct-int.patch
+staging-gasket-fix-mapping-refcnt-leak-when-put-attr.patch
+staging-gasket-fix-mapping-refcnt-leak-when-register.patch
+alsa-usb-audio-improve-frames-size-computation.patch
+alsa-usb-audio-fix-racy-list-management-in-output-qu.patch
+input-mms114-add-extra-compatible-for-mms345l.patch
+s390-qdio-put-thinint-indicator-after-early-error.patch
+tty-hvc-fix-data-abort-due-to-race-in-hvc_open.patch
+slimbus-ngd-get-drvdata-from-correct-device.patch
+thermal-drivers-ti-soc-thermal-avoid-dereferencing-e.patch
+soundwire-slave-don-t-init-debugfs-on-device-registr.patch
+usb-dwc3-gadget-properly-handle-failed-kick_transfer.patch
+staging-sm750fb-add-missing-case-while-setting-fb_vi.patch
+pci-v3-semi-fix-a-memory-leak-in-v3_pci_probe-error-.patch
+i2c-pxa-fix-i2c_pxa_scream_blue_murder-debug-output.patch
+serial-amba-pl011-make-sure-we-initialize-the-port.l.patch
+drivers-base-fix-null-pointer-exception-in-__platfor.patch
+pci-rcar-fix-incorrect-programming-of-ob-windows.patch
+pci-aspm-allow-aspm-on-links-to-pcie-to-pci-pci-x-br.patch
+scsi-qla2xxx-fix-warning-after-fc-target-reset.patch
+power-supply-lp8788-fix-an-error-handling-path-in-lp.patch
+power-supply-smb347-charger-irqstat_d-is-volatile.patch
+scsi-mpt3sas-fix-double-free-warnings.patch
+pinctrl-rockchip-fix-memleak-in-rockchip_dt_node_to_.patch
+dlm-remove-bug-before-panic.patch
+clk-ti-composite-fix-memory-leak.patch
+pci-fix-pci_register_host_bridge-device_register-err.patch
+powerpc-64-don-t-initialise-init_task-thread.regs.patch
+tty-n_gsm-fix-sof-skipping.patch
+tty-n_gsm-fix-waking-up-upper-tty-layer-when-room-av.patch
+hid-add-quirks-for-trust-panora-graphic-tablet.patch
+ipmi-use-vzalloc-instead-of-kmalloc-for-user-creatio.patch
+powerpc-pseries-ras-fix-fwnmi_valid-off-by-one.patch
+powerpc-ps3-fix-kexec-shutdown-hang.patch
+vfio-pci-mask-cap-zero.patch
+usb-ohci-platform-fix-a-warning-when-hibernating.patch
+drm-msm-mdp5-fix-mdp5_init-error-path-for-failed-mdp.patch
+asoc-intel-bytcr_rt5640-add-quirk-for-toshiba-encore.patch
+usb-host-ehci-mxc-add-error-handling-in-ehci_mxc_drv.patch
+tty-n_gsm-fix-bogus-i-in-gsm_data_kick.patch
+fpga-dfl-afu-corrected-error-handling-levels.patch
+clk-samsung-exynos5433-add-ignore_unused-flag-to-scl.patch
+arm-dts-meson-switch-existing-boards-with-rgmii-phy-.patch
+scsi-target-tcmu-userspace-must-not-complete-queued-.patch
+arm64-tegra-fix-ethernet-phy-mode-for-jetson-xavier.patch
+powerpc-64s-pgtable-fix-an-undefined-behaviour.patch
+dm-zoned-return-null-if-dmz_get_zone_for_reclaim-fai.patch
+pci-ptm-inherit-switch-downstream-port-ptm-settings-.patch
+pci-dwc-fix-inner-msi-irq-domain-registration.patch
+ib-cma-fix-ports-memory-leak-in-cma_configfs.patch
+watchdog-da9062-no-need-to-ping-manually-before-sett.patch
+usb-dwc2-gadget-move-gadget-resume-after-the-core-is.patch
+usb-gadget-udc-s3c2410_udc-remove-pointless-null-che.patch
+usb-gadget-lpc32xx_udc-don-t-dereference-ep-pointer-.patch
+usb-gadget-fix-potential-double-free-in-m66592_probe.patch
+usb-gadget-fix-issue-with-config_ep_by_speed-functio.patch
+rdma-iw_cxgb4-cleanup-device-debugfs-entries-on-uld-.patch
+x86-apic-make-tsc-deadline-timer-detection-message-v.patch
+asoc-fix-incomplete-error-handling-in-img_i2s_in_pro.patch
+scsi-target-tcmu-fix-a-use-after-free-in-tcmu_check_.patch
+clk-bcm2835-fix-return-type-of-bcm2835_register_gate.patch
+scsi-ufs-qcom-fix-scheduling-while-atomic-issue.patch
+kvm-ppc-book3s-hv-ignore-kmemleak-false-positives.patch
+clk-sprd-return-correct-type-of-value-for-_sprd_pll_.patch
+net-sunrpc-fix-off-by-one-issues-in-rpc_ntop6.patch
+nfsv4.1-fix-rpc_call_done-assignment-for-bind_conn_t.patch
+of-fix-a-refcounting-bug-in-__of_attach_node_sysfs.patch
+powerpc-4xx-don-t-unmap-null-mbase.patch
+extcon-adc-jack-fix-an-error-handling-path-in-adc_ja.patch
+asoc-fsl_asrc_dma-fix-dma_chan-leak-when-config-dma-.patch
+vfio-mdev-fix-reference-count-leak-in-add_mdev_suppo.patch
+rxrpc-adjust-proc-net-rxrpc-calls-to-display-call-de.patch
+openrisc-fix-issue-with-argument-clobbering-for-clon.patch
+gfs2-allow-lock_nolock-mount-to-specify-jid-x.patch
+ovl-verify-permissions-in-ovl_path_open.patch
+scsi-iscsi-fix-reference-count-leak-in-iscsi_boot_cr.patch
+scsi-ufs-don-t-update-urgent-bkops-level-when-toggli.patch
+pinctrl-imxl-fix-an-error-handling-path-in-imx1_pinc.patch
+pinctrl-freescale-imx-fix-an-error-handling-path-in-.patch
+crypto-omap-sham-add-proper-load-balancing-support-f.patch
+geneve-change-from-tx_error-to-tx_dropped-on-missing.patch
+lib-zlib-remove-outdated-and-incorrect-pre-increment.patch
+include-linux-bitops.h-avoid-clang-shift-count-overf.patch
+elfnote-mark-all-.note-sections-shf_alloc.patch
+selftests-vm-pkeys-fix-alloc_random_pkey-to-make-it-.patch
+blktrace-use-errno-instead-of-bi_status.patch
+blktrace-fix-endianness-in-get_pdu_int.patch
+blktrace-fix-endianness-for-blk_log_remap.patch
+gfs2-fix-use-after-free-on-transaction-ail-lists.patch
+ntb_perf-pass-correct-struct-device-to-dma_alloc_coh.patch
+ntb_tool-pass-correct-struct-device-to-dma_alloc_coh.patch
+ntb-ntb_tool-reading-the-link-file-should-not-end-in.patch
+ntb-revert-the-change-to-use-the-ntb-device-dev-for-.patch
+ntb-perf-don-t-require-one-more-memory-window-than-n.patch
+ntb-perf-fix-support-for-hardware-that-doesn-t-have-.patch
+ntb-perf-fix-race-condition-when-run-with-ntb_test.patch
+ntb-ntb_test-fix-bug-when-counting-remote-files.patch
+drivers-perf-hisi-fix-wrong-value-for-all-counters-e.patch
+selftests-net-in-timestamping-strncpy-needs-to-prese.patch
+afs-fix-memory-leak-in-afs_put_sysnames.patch
+asoc-core-only-convert-non-dpcm-link-to-dpcm-link.patch
+asoc-intel-bytcr_rt5640-add-quirk-for-toshiba-encore.patch-26105
+asoc-rt5645-add-platform-data-for-asus-t101ha.patch
+drm-sun4i-hdmi-ddc-clk-fix-size-of-m-divider.patch
+scsi-acornscsi-fix-an-error-handling-path-in-acornsc.patch
+x86-idt-keep-spurious-entries-unset-in-system_vector.patch
+net-filter-permit-reading-net-in-load_bytes_relative.patch
+xdp-fix-xsk_generic_xmit-errno.patch
+usb-xhci-plat-set-pm-runtime-as-active-on-resume.patch
+usb-host-ehci-platform-add-a-quirk-to-avoid-stuck.patch
+usb-ehci-platform-set-pm-runtime-as-active-on-resume.patch
+perf-report-fix-null-pointer-dereference-in-hists__f.patch
+ext4-stop-overwrite-the-errcode-in-ext4_setup_super.patch
+bcache-fix-potential-deadlock-problem-in-btree_gc_co.patch
+afs-fix-non-setting-of-mtime-when-writing-into-mmap.patch
+afs-afs_write_end-should-change-i_size-under-the-rig.patch
+block-fix-use-after-free-in-blkdev_get.patch
+arm64-hw_breakpoint-don-t-invoke-overflow-handler-on.patch
+libata-use-per-port-sync-for-detach.patch
+drm-encoder_slave-fix-refcouting-error-for-modules.patch
diff --git a/queue-4.19/slimbus-ngd-get-drvdata-from-correct-device.patch b/queue-4.19/slimbus-ngd-get-drvdata-from-correct-device.patch
new file mode 100644 (file)
index 0000000..0f072d5
--- /dev/null
@@ -0,0 +1,50 @@
+From dec0681fe36c740875dee1c644f50183de9f1a32 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Fri, 17 Apr 2020 10:36:18 +0100
+Subject: slimbus: ngd: get drvdata from correct device
+
+From: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
+
+[ Upstream commit b58c663059b484f7ff547d076a34cf6d7a302e56 ]
+
+Get drvdata directly from parent instead of ngd dev, as ngd
+dev can probe defer and previously set drvdata will become null.
+
+Signed-off-by: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
+Link: https://lore.kernel.org/r/20200417093618.7929-1-srinivas.kandagatla@linaro.org
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/slimbus/qcom-ngd-ctrl.c | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/drivers/slimbus/qcom-ngd-ctrl.c b/drivers/slimbus/qcom-ngd-ctrl.c
+index 9221ba7b78637..f40ac8dcb0817 100644
+--- a/drivers/slimbus/qcom-ngd-ctrl.c
++++ b/drivers/slimbus/qcom-ngd-ctrl.c
+@@ -1350,7 +1350,6 @@ static int of_qcom_slim_ngd_register(struct device *parent,
+               ngd->pdev->driver_override = QCOM_SLIM_NGD_DRV_NAME;
+               ngd->pdev->dev.of_node = node;
+               ctrl->ngd = ngd;
+-              platform_set_drvdata(ngd->pdev, ctrl);
+               platform_device_add(ngd->pdev);
+               ngd->base = ctrl->base + ngd->id * data->offset +
+@@ -1365,12 +1364,13 @@ static int of_qcom_slim_ngd_register(struct device *parent,
+ static int qcom_slim_ngd_probe(struct platform_device *pdev)
+ {
+-      struct qcom_slim_ngd_ctrl *ctrl = platform_get_drvdata(pdev);
+       struct device *dev = &pdev->dev;
++      struct qcom_slim_ngd_ctrl *ctrl = dev_get_drvdata(dev->parent);
+       int ret;
+       ctrl->ctrl.dev = dev;
++      platform_set_drvdata(pdev, ctrl);
+       pm_runtime_use_autosuspend(dev);
+       pm_runtime_set_autosuspend_delay(dev, QCOM_SLIM_NGD_AUTOSUSPEND);
+       pm_runtime_set_suspended(dev);
+-- 
+2.25.1
+
diff --git a/queue-4.19/soundwire-slave-don-t-init-debugfs-on-device-registr.patch b/queue-4.19/soundwire-slave-don-t-init-debugfs-on-device-registr.patch
new file mode 100644 (file)
index 0000000..a05497c
--- /dev/null
@@ -0,0 +1,40 @@
+From c0e88dd8621ce8c25b505eb4053e86a09a4adc9d Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Mon, 20 Apr 2020 02:51:15 +0800
+Subject: soundwire: slave: don't init debugfs on device registration error
+
+From: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
+
+[ Upstream commit 8893ab5e8ee5d7c12e0fc1dca4a309475064473d ]
+
+The error handling flow seems incorrect, there is no reason to try and
+add debugfs support if the device registration did not
+succeed. Return on error.
+
+Signed-off-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
+Signed-off-by: Bard Liao <yung-chuan.liao@linux.intel.com>
+Reviewed-by: Ranjani Sridharan <ranjani.sridharan@linux.intel.com>
+Reviewed-by: Guennadi Liakhovetski <guennadi.liakhovetski@linux.intel.com>
+Link: https://lore.kernel.org/r/20200419185117.4233-2-yung-chuan.liao@linux.intel.com
+Signed-off-by: Vinod Koul <vkoul@kernel.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/soundwire/slave.c | 2 ++
+ 1 file changed, 2 insertions(+)
+
+diff --git a/drivers/soundwire/slave.c b/drivers/soundwire/slave.c
+index ac103bd0c1760..b6330b6672d59 100644
+--- a/drivers/soundwire/slave.c
++++ b/drivers/soundwire/slave.c
+@@ -55,6 +55,8 @@ static int sdw_slave_add(struct sdw_bus *bus,
+               list_del(&slave->node);
+               mutex_unlock(&bus->bus_lock);
+               put_device(&slave->dev);
++
++              return ret;
+       }
+       return ret;
+-- 
+2.25.1
+
diff --git a/queue-4.19/staging-gasket-fix-mapping-refcnt-leak-when-put-attr.patch b/queue-4.19/staging-gasket-fix-mapping-refcnt-leak-when-put-attr.patch
new file mode 100644 (file)
index 0000000..1c798c6
--- /dev/null
@@ -0,0 +1,48 @@
+From a47a5ec95cf9ac004d6f39123946ca8a667eb913 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Thu, 23 Apr 2020 13:14:55 +0800
+Subject: staging: gasket: Fix mapping refcnt leak when put attribute fails
+
+From: Xiyu Yang <xiyuyang19@fudan.edu.cn>
+
+[ Upstream commit 57a66838e1494cd881b7f4e110ec685736e8e3ca ]
+
+gasket_sysfs_put_attr() invokes get_mapping(), which returns a reference
+of the specified gasket_sysfs_mapping object to "mapping" with increased
+refcnt.
+
+When gasket_sysfs_put_attr() returns, local variable "mapping" becomes
+invalid, so the refcount should be decreased to keep refcount balanced.
+
+The reference counting issue happens in one path of
+gasket_sysfs_put_attr(). When mapping attribute is unknown, the function
+forgets to decrease the refcnt increased by get_mapping(), causing a
+refcnt leak.
+
+Fix this issue by calling put_mapping() when put attribute fails due to
+unknown attribute.
+
+Signed-off-by: Xiyu Yang <xiyuyang19@fudan.edu.cn>
+Signed-off-by: Xin Tan <tanxin.ctf@gmail.com>
+Link: https://lore.kernel.org/r/1587618895-13660-1-git-send-email-xiyuyang19@fudan.edu.cn
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/staging/gasket/gasket_sysfs.c | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/drivers/staging/gasket/gasket_sysfs.c b/drivers/staging/gasket/gasket_sysfs.c
+index fc45f0d13e87d..9c982f1c0881d 100644
+--- a/drivers/staging/gasket/gasket_sysfs.c
++++ b/drivers/staging/gasket/gasket_sysfs.c
+@@ -343,6 +343,7 @@ void gasket_sysfs_put_attr(struct device *device,
+       dev_err(device, "Unable to put unknown attribute: %s\n",
+               attr->attr.attr.name);
++      put_mapping(mapping);
+ }
+ EXPORT_SYMBOL(gasket_sysfs_put_attr);
+-- 
+2.25.1
+
diff --git a/queue-4.19/staging-gasket-fix-mapping-refcnt-leak-when-register.patch b/queue-4.19/staging-gasket-fix-mapping-refcnt-leak-when-register.patch
new file mode 100644 (file)
index 0000000..f0a255f
--- /dev/null
@@ -0,0 +1,48 @@
+From 1925f66e77ac5a17159473b8aeb0011e955edbad Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Thu, 23 Apr 2020 13:15:40 +0800
+Subject: staging: gasket: Fix mapping refcnt leak when register/store fails
+
+From: Xiyu Yang <xiyuyang19@fudan.edu.cn>
+
+[ Upstream commit e3436ce60cf5f5eaedda2b8c622f69feb97595e2 ]
+
+gasket_sysfs_register_store() invokes get_mapping(), which returns a
+reference of the specified gasket_sysfs_mapping object to "mapping" with
+increased refcnt.
+
+When gasket_sysfs_register_store() returns, local variable "mapping"
+becomes invalid, so the refcount should be decreased to keep refcount
+balanced.
+
+The reference counting issue happens in one exception handling path of
+gasket_sysfs_register_store(). When gasket_dev is NULL, the function
+forgets to decrease the refcnt increased by get_mapping(), causing a
+refcnt leak.
+
+Fix this issue by calling put_mapping() when gasket_dev is NULL.
+
+Signed-off-by: Xiyu Yang <xiyuyang19@fudan.edu.cn>
+Signed-off-by: Xin Tan <tanxin.ctf@gmail.com>
+Link: https://lore.kernel.org/r/1587618941-13718-1-git-send-email-xiyuyang19@fudan.edu.cn
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/staging/gasket/gasket_sysfs.c | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/drivers/staging/gasket/gasket_sysfs.c b/drivers/staging/gasket/gasket_sysfs.c
+index 9c982f1c0881d..5986c67bc7ec3 100644
+--- a/drivers/staging/gasket/gasket_sysfs.c
++++ b/drivers/staging/gasket/gasket_sysfs.c
+@@ -377,6 +377,7 @@ ssize_t gasket_sysfs_register_store(struct device *device,
+       gasket_dev = mapping->gasket_dev;
+       if (!gasket_dev) {
+               dev_err(device, "Device driver may have been removed\n");
++              put_mapping(mapping);
+               return 0;
+       }
+-- 
+2.25.1
+
diff --git a/queue-4.19/staging-greybus-fix-a-missing-check-bug-in-gb_lights.patch b/queue-4.19/staging-greybus-fix-a-missing-check-bug-in-gb_lights.patch
new file mode 100644 (file)
index 0000000..81badbe
--- /dev/null
@@ -0,0 +1,38 @@
+From 7a83225127d86b681322d3e477e062a05be81e21 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Wed, 1 Apr 2020 11:00:17 +0800
+Subject: staging: greybus: fix a missing-check bug in gb_lights_light_config()
+
+From: Chen Zhou <chenzhou10@huawei.com>
+
+[ Upstream commit 9bb086e5ba9495ac150fbbcc5c8c2bccc06261dd ]
+
+In gb_lights_light_config(), 'light->name' is allocated by kstrndup().
+It returns NULL when fails, add check for it.
+
+Signed-off-by: Chen Zhou <chenzhou10@huawei.com>
+Acked-by: Rui Miguel Silva <rmfrfs@gmail.com>
+Link: https://lore.kernel.org/r/20200401030017.100274-1-chenzhou10@huawei.com
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/staging/greybus/light.c | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+diff --git a/drivers/staging/greybus/light.c b/drivers/staging/greybus/light.c
+index 40680eaf3974f..db06cd544af58 100644
+--- a/drivers/staging/greybus/light.c
++++ b/drivers/staging/greybus/light.c
+@@ -1028,7 +1028,8 @@ static int gb_lights_light_config(struct gb_lights *glights, u8 id)
+       light->channels_count = conf.channel_count;
+       light->name = kstrndup(conf.name, NAMES_MAX, GFP_KERNEL);
+-
++      if (!light->name)
++              return -ENOMEM;
+       light->channels = kcalloc(light->channels_count,
+                                 sizeof(struct gb_channel), GFP_KERNEL);
+       if (!light->channels)
+-- 
+2.25.1
+
diff --git a/queue-4.19/staging-rtl8712-fix-multiline-derefernce-warnings.patch b/queue-4.19/staging-rtl8712-fix-multiline-derefernce-warnings.patch
new file mode 100644 (file)
index 0000000..d19e376
--- /dev/null
@@ -0,0 +1,80 @@
+From d5ffdca252ccc5b6f8fddeac106d5f70ac06a56f Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Sun, 29 Mar 2020 14:57:47 -0400
+Subject: staging: rtl8712: fix multiline derefernce warnings
+
+From: Aiman Najjar <aiman.najjar@hurranet.com>
+
+[ Upstream commit 269da10b1477c31c660288633c8d613e421b131f ]
+
+This patch fixes remaining checkpatch warnings
+in rtl871x_xmit.c:
+
+WARNING: Avoid multiple line dereference - prefer 'psecuritypriv->PrivacyKeyIndex'
+636: FILE: drivers/staging//rtl8712/rtl871x_xmit.c:636:
++                                            (u8)psecuritypriv->
++                                            PrivacyKeyIndex);
+
+WARNING: Avoid multiple line dereference - prefer 'psecuritypriv->XGrpKeyid'
+643: FILE: drivers/staging//rtl8712/rtl871x_xmit.c:643:
++                                                 (u8)psecuritypriv->
++                                                 XGrpKeyid);
+
+WARNING: Avoid multiple line dereference - prefer 'psecuritypriv->XGrpKeyid'
+652: FILE: drivers/staging//rtl8712/rtl871x_xmit.c:652:
++                                                 (u8)psecuritypriv->
++                                                 XGrpKeyid);
+
+Signed-off-by: Aiman Najjar <aiman.najjar@hurranet.com>
+Reviewed-by: Dan Carpenter <dan.carpenter@oracle.com>
+Link: https://lore.kernel.org/r/98805a72b92e9bbf933e05b827d27944663b7bc1.1585508171.git.aiman.najjar@hurranet.com
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/staging/rtl8712/rtl871x_xmit.c | 11 ++++-------
+ 1 file changed, 4 insertions(+), 7 deletions(-)
+
+diff --git a/drivers/staging/rtl8712/rtl871x_xmit.c b/drivers/staging/rtl8712/rtl871x_xmit.c
+index a8ae14ce66139..95d5c050a8947 100644
+--- a/drivers/staging/rtl8712/rtl871x_xmit.c
++++ b/drivers/staging/rtl8712/rtl871x_xmit.c
+@@ -601,7 +601,7 @@ sint r8712_xmitframe_coalesce(struct _adapter *padapter, _pkt *pkt,
+       addr_t addr;
+       u8 *pframe, *mem_start, *ptxdesc;
+       struct sta_info         *psta;
+-      struct security_priv    *psecuritypriv = &padapter->securitypriv;
++      struct security_priv    *psecpriv = &padapter->securitypriv;
+       struct mlme_priv        *pmlmepriv = &padapter->mlmepriv;
+       struct xmit_priv        *pxmitpriv = &padapter->xmitpriv;
+       struct pkt_attrib       *pattrib = &pxmitframe->attrib;
+@@ -644,15 +644,13 @@ sint r8712_xmitframe_coalesce(struct _adapter *padapter, _pkt *pkt,
+                               case _WEP40_:
+                               case _WEP104_:
+                                       WEP_IV(pattrib->iv, psta->txpn,
+-                                             (u8)psecuritypriv->
+-                                             PrivacyKeyIndex);
++                                             (u8)psecpriv->PrivacyKeyIndex);
+                                       break;
+                               case _TKIP_:
+                                       if (bmcst)
+                                               TKIP_IV(pattrib->iv,
+                                                   psta->txpn,
+-                                                  (u8)psecuritypriv->
+-                                                  XGrpKeyid);
++                                                  (u8)psecpriv->XGrpKeyid);
+                                       else
+                                               TKIP_IV(pattrib->iv, psta->txpn,
+                                                       0);
+@@ -660,8 +658,7 @@ sint r8712_xmitframe_coalesce(struct _adapter *padapter, _pkt *pkt,
+                               case _AES_:
+                                       if (bmcst)
+                                               AES_IV(pattrib->iv, psta->txpn,
+-                                                  (u8)psecuritypriv->
+-                                                  XGrpKeyid);
++                                                  (u8)psecpriv->XGrpKeyid);
+                                       else
+                                               AES_IV(pattrib->iv, psta->txpn,
+                                                      0);
+-- 
+2.25.1
+
diff --git a/queue-4.19/staging-sm750fb-add-missing-case-while-setting-fb_vi.patch b/queue-4.19/staging-sm750fb-add-missing-case-while-setting-fb_vi.patch
new file mode 100644 (file)
index 0000000..7b21c23
--- /dev/null
@@ -0,0 +1,36 @@
+From bf66b9013ef0a659228ec1b32323e3fe4096d4ef Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Thu, 30 Apr 2020 22:09:24 +0200
+Subject: staging: sm750fb: add missing case while setting FB_VISUAL
+
+From: Matej Dujava <mdujava@kocurkovo.cz>
+
+[ Upstream commit fa90133377f4a7f15a937df6ad55133bb57c5665 ]
+
+Switch statement does not contain all cases: 8, 16, 24, 32.
+This patch will add missing one (24)
+
+Fixes: 81dee67e215b ("staging: sm750fb: add sm750 to staging")
+Signed-off-by: Matej Dujava <mdujava@kocurkovo.cz>
+Link: https://lore.kernel.org/r/1588277366-19354-2-git-send-email-mdujava@kocurkovo.cz
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/staging/sm750fb/sm750.c | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/drivers/staging/sm750fb/sm750.c b/drivers/staging/sm750fb/sm750.c
+index 846d7d243994c..3972e215128e6 100644
+--- a/drivers/staging/sm750fb/sm750.c
++++ b/drivers/staging/sm750fb/sm750.c
+@@ -897,6 +897,7 @@ static int lynxfb_set_fbinfo(struct fb_info *info, int index)
+               fix->visual = FB_VISUAL_PSEUDOCOLOR;
+               break;
+       case 16:
++      case 24:
+       case 32:
+               fix->visual = FB_VISUAL_TRUECOLOR;
+               break;
+-- 
+2.25.1
+
diff --git a/queue-4.19/thermal-drivers-ti-soc-thermal-avoid-dereferencing-e.patch b/queue-4.19/thermal-drivers-ti-soc-thermal-avoid-dereferencing-e.patch
new file mode 100644 (file)
index 0000000..a818d25
--- /dev/null
@@ -0,0 +1,57 @@
+From 02fe42edfa544d8cf3b72a5022519fad3e91459c Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Fri, 24 Apr 2020 17:19:44 +0100
+Subject: thermal/drivers/ti-soc-thermal: Avoid dereferencing ERR_PTR
+
+From: Sudip Mukherjee <sudipm.mukherjee@gmail.com>
+
+[ Upstream commit 7440f518dad9d861d76c64956641eeddd3586f75 ]
+
+On error the function ti_bandgap_get_sensor_data() returns the error
+code in ERR_PTR() but we only checked if the return value is NULL or
+not. And, so we can dereference an error code inside ERR_PTR.
+While at it, convert a check to IS_ERR_OR_NULL.
+
+Signed-off-by: Sudip Mukherjee <sudipm.mukherjee@gmail.com>
+Reviewed-by: Amit Kucheria <amit.kucheria@linaro.org>
+Signed-off-by: Daniel Lezcano <daniel.lezcano@linaro.org>
+Link: https://lore.kernel.org/r/20200424161944.6044-1-sudipm.mukherjee@gmail.com
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/thermal/ti-soc-thermal/ti-thermal-common.c | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+diff --git a/drivers/thermal/ti-soc-thermal/ti-thermal-common.c b/drivers/thermal/ti-soc-thermal/ti-thermal-common.c
+index b4f981daeaf2a..452e034aedc13 100644
+--- a/drivers/thermal/ti-soc-thermal/ti-thermal-common.c
++++ b/drivers/thermal/ti-soc-thermal/ti-thermal-common.c
+@@ -183,7 +183,7 @@ int ti_thermal_expose_sensor(struct ti_bandgap *bgp, int id,
+       data = ti_bandgap_get_sensor_data(bgp, id);
+-      if (!data || IS_ERR(data))
++      if (!IS_ERR_OR_NULL(data))
+               data = ti_thermal_build_data(bgp, id);
+       if (!data)
+@@ -210,7 +210,7 @@ int ti_thermal_remove_sensor(struct ti_bandgap *bgp, int id)
+       data = ti_bandgap_get_sensor_data(bgp, id);
+-      if (data && data->ti_thermal) {
++      if (!IS_ERR_OR_NULL(data) && data->ti_thermal) {
+               if (data->our_zone)
+                       thermal_zone_device_unregister(data->ti_thermal);
+       }
+@@ -276,7 +276,7 @@ int ti_thermal_unregister_cpu_cooling(struct ti_bandgap *bgp, int id)
+       data = ti_bandgap_get_sensor_data(bgp, id);
+-      if (data) {
++      if (!IS_ERR_OR_NULL(data)) {
+               cpufreq_cooling_unregister(data->cool_dev);
+               if (data->policy)
+                       cpufreq_cpu_put(data->policy);
+-- 
+2.25.1
+
diff --git a/queue-4.19/tty-hvc-fix-data-abort-due-to-race-in-hvc_open.patch b/queue-4.19/tty-hvc-fix-data-abort-due-to-race-in-hvc_open.patch
new file mode 100644 (file)
index 0000000..9c2ad70
--- /dev/null
@@ -0,0 +1,81 @@
+From a270dcbab48449a058b86f5563a645a64e69d4f8 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Mon, 27 Apr 2020 20:26:01 -0700
+Subject: tty: hvc: Fix data abort due to race in hvc_open
+
+From: Raghavendra Rao Ananta <rananta@codeaurora.org>
+
+[ Upstream commit e2bd1dcbe1aa34ff5570b3427c530e4332ecf0fe ]
+
+Potentially, hvc_open() can be called in parallel when two tasks calls
+open() on /dev/hvcX. In such a scenario, if the hp->ops->notifier_add()
+callback in the function fails, where it sets the tty->driver_data to
+NULL, the parallel hvc_open() can see this NULL and cause a memory abort.
+Hence, serialize hvc_open and check if tty->private_data is NULL before
+proceeding ahead.
+
+The issue can be easily reproduced by launching two tasks simultaneously
+that does nothing but open() and close() on /dev/hvcX.
+For example:
+$ ./simple_open_close /dev/hvc0 & ./simple_open_close /dev/hvc0 &
+
+Signed-off-by: Raghavendra Rao Ananta <rananta@codeaurora.org>
+Link: https://lore.kernel.org/r/20200428032601.22127-1-rananta@codeaurora.org
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/tty/hvc/hvc_console.c | 16 ++++++++++++++--
+ 1 file changed, 14 insertions(+), 2 deletions(-)
+
+diff --git a/drivers/tty/hvc/hvc_console.c b/drivers/tty/hvc/hvc_console.c
+index cdcc64ea2554f..f8e43a6faea9b 100644
+--- a/drivers/tty/hvc/hvc_console.c
++++ b/drivers/tty/hvc/hvc_console.c
+@@ -75,6 +75,8 @@ static LIST_HEAD(hvc_structs);
+  */
+ static DEFINE_MUTEX(hvc_structs_mutex);
++/* Mutex to serialize hvc_open */
++static DEFINE_MUTEX(hvc_open_mutex);
+ /*
+  * This value is used to assign a tty->index value to a hvc_struct based
+  * upon order of exposure via hvc_probe(), when we can not match it to
+@@ -346,16 +348,24 @@ static int hvc_install(struct tty_driver *driver, struct tty_struct *tty)
+  */
+ static int hvc_open(struct tty_struct *tty, struct file * filp)
+ {
+-      struct hvc_struct *hp = tty->driver_data;
++      struct hvc_struct *hp;
+       unsigned long flags;
+       int rc = 0;
++      mutex_lock(&hvc_open_mutex);
++
++      hp = tty->driver_data;
++      if (!hp) {
++              rc = -EIO;
++              goto out;
++      }
++
+       spin_lock_irqsave(&hp->port.lock, flags);
+       /* Check and then increment for fast path open. */
+       if (hp->port.count++ > 0) {
+               spin_unlock_irqrestore(&hp->port.lock, flags);
+               hvc_kick();
+-              return 0;
++              goto out;
+       } /* else count == 0 */
+       spin_unlock_irqrestore(&hp->port.lock, flags);
+@@ -383,6 +393,8 @@ static int hvc_open(struct tty_struct *tty, struct file * filp)
+       /* Force wakeup of the polling thread */
+       hvc_kick();
++out:
++      mutex_unlock(&hvc_open_mutex);
+       return rc;
+ }
+-- 
+2.25.1
+
diff --git a/queue-4.19/tty-n_gsm-fix-bogus-i-in-gsm_data_kick.patch b/queue-4.19/tty-n_gsm-fix-bogus-i-in-gsm_data_kick.patch
new file mode 100644 (file)
index 0000000..03bdecc
--- /dev/null
@@ -0,0 +1,53 @@
+From acf5d49e958f2254a4243963521bd9099528af98 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Mon, 18 May 2020 10:45:13 +0200
+Subject: tty: n_gsm: Fix bogus i++ in gsm_data_kick
+
+From: Gregory CLEMENT <gregory.clement@bootlin.com>
+
+[ Upstream commit 4dd31f1ffec6c370c3c2e0c605628bf5e16d5c46 ]
+
+When submitting the previous fix "tty: n_gsm: Fix waking up upper tty
+layer when room available". It was suggested to switch from a while to
+a for loop, but when doing it, there was a remaining bogus i++.
+
+This patch removes this i++ and also reorganizes the code making it more
+compact.
+
+Fixes: e1eaea46bb40 ("tty: n_gsm line discipline")
+Signed-off-by: Gregory CLEMENT <gregory.clement@bootlin.com>
+Link: https://lore.kernel.org/r/20200518084517.2173242-3-gregory.clement@bootlin.com
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/tty/n_gsm.c | 14 +++-----------
+ 1 file changed, 3 insertions(+), 11 deletions(-)
+
+diff --git a/drivers/tty/n_gsm.c b/drivers/tty/n_gsm.c
+index 166052002b79d..5e9457d199279 100644
+--- a/drivers/tty/n_gsm.c
++++ b/drivers/tty/n_gsm.c
+@@ -703,17 +703,9 @@ static void gsm_data_kick(struct gsm_mux *gsm, struct gsm_dlci *dlci)
+               } else {
+                       int i = 0;
+-                      for (i = 0; i < NUM_DLCI; i++) {
+-                              struct gsm_dlci *dlci;
+-
+-                              dlci = gsm->dlci[i];
+-                              if (dlci == NULL) {
+-                                      i++;
+-                                      continue;
+-                              }
+-
+-                              tty_port_tty_wakeup(&dlci->port);
+-                      }
++                      for (i = 0; i < NUM_DLCI; i++)
++                              if (gsm->dlci[i])
++                                      tty_port_tty_wakeup(&gsm->dlci[i]->port);
+               }
+       }
+ }
+-- 
+2.25.1
+
diff --git a/queue-4.19/tty-n_gsm-fix-sof-skipping.patch b/queue-4.19/tty-n_gsm-fix-sof-skipping.patch
new file mode 100644 (file)
index 0000000..06e37b8
--- /dev/null
@@ -0,0 +1,58 @@
+From 13a00ff72756b17e22f1c5904c08262aceab1eca Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Tue, 12 May 2020 13:53:22 +0200
+Subject: tty: n_gsm: Fix SOF skipping
+
+From: Gregory CLEMENT <gregory.clement@bootlin.com>
+
+[ Upstream commit 84d6f81c1fb58b56eba81ff0a36cf31946064b40 ]
+
+For at least some modems like the TELIT LE910, skipping SOF makes
+transfers blocking indefinitely after a short amount of data
+transferred.
+
+Given the small improvement provided by skipping the SOF (just one
+byte on about 100 bytes), it seems better to completely remove this
+"feature" than make it optional.
+
+Fixes: e1eaea46bb40 ("tty: n_gsm line discipline")
+Signed-off-by: Gregory CLEMENT <gregory.clement@bootlin.com>
+Link: https://lore.kernel.org/r/20200512115323.1447922-3-gregory.clement@bootlin.com
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/tty/n_gsm.c | 8 +-------
+ 1 file changed, 1 insertion(+), 7 deletions(-)
+
+diff --git a/drivers/tty/n_gsm.c b/drivers/tty/n_gsm.c
+index 86b7e20ffd7f1..8d8229dd27961 100644
+--- a/drivers/tty/n_gsm.c
++++ b/drivers/tty/n_gsm.c
+@@ -669,7 +669,6 @@ static void gsm_data_kick(struct gsm_mux *gsm)
+ {
+       struct gsm_msg *msg, *nmsg;
+       int len;
+-      int skip_sof = 0;
+       list_for_each_entry_safe(msg, nmsg, &gsm->tx_list, list) {
+               if (gsm->constipated && msg->addr)
+@@ -691,15 +690,10 @@ static void gsm_data_kick(struct gsm_mux *gsm)
+                       print_hex_dump_bytes("gsm_data_kick: ",
+                                            DUMP_PREFIX_OFFSET,
+                                            gsm->txframe, len);
+-
+-              if (gsm->output(gsm, gsm->txframe + skip_sof,
+-                                              len - skip_sof) < 0)
++              if (gsm->output(gsm, gsm->txframe, len) < 0)
+                       break;
+               /* FIXME: Can eliminate one SOF in many more cases */
+               gsm->tx_bytes -= msg->len;
+-              /* For a burst of frames skip the extra SOF within the
+-                 burst */
+-              skip_sof = 1;
+               list_del(&msg->list);
+               kfree(msg);
+-- 
+2.25.1
+
diff --git a/queue-4.19/tty-n_gsm-fix-waking-up-upper-tty-layer-when-room-av.patch b/queue-4.19/tty-n_gsm-fix-waking-up-upper-tty-layer-when-room-av.patch
new file mode 100644 (file)
index 0000000..6210af1
--- /dev/null
@@ -0,0 +1,90 @@
+From d5265b220352a9eb21a682501c56c6b12b965ba1 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Tue, 12 May 2020 13:53:23 +0200
+Subject: tty: n_gsm: Fix waking up upper tty layer when room available
+
+From: Gregory CLEMENT <gregory.clement@bootlin.com>
+
+[ Upstream commit 01dbb362f0a114fbce19c8abe4cd6f4710e934d5 ]
+
+Warn the upper layer when n_gms is ready to receive data
+again. Without this the associated virtual tty remains blocked
+indefinitely.
+
+Fixes: e1eaea46bb40 ("tty: n_gsm line discipline")
+Signed-off-by: Gregory CLEMENT <gregory.clement@bootlin.com>
+Link: https://lore.kernel.org/r/20200512115323.1447922-4-gregory.clement@bootlin.com
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/tty/n_gsm.c | 26 ++++++++++++++++++++++----
+ 1 file changed, 22 insertions(+), 4 deletions(-)
+
+diff --git a/drivers/tty/n_gsm.c b/drivers/tty/n_gsm.c
+index 8d8229dd27961..166052002b79d 100644
+--- a/drivers/tty/n_gsm.c
++++ b/drivers/tty/n_gsm.c
+@@ -665,7 +665,7 @@ static struct gsm_msg *gsm_data_alloc(struct gsm_mux *gsm, u8 addr, int len,
+  *    FIXME: lock against link layer control transmissions
+  */
+-static void gsm_data_kick(struct gsm_mux *gsm)
++static void gsm_data_kick(struct gsm_mux *gsm, struct gsm_dlci *dlci)
+ {
+       struct gsm_msg *msg, *nmsg;
+       int len;
+@@ -697,6 +697,24 @@ static void gsm_data_kick(struct gsm_mux *gsm)
+               list_del(&msg->list);
+               kfree(msg);
++
++              if (dlci) {
++                      tty_port_tty_wakeup(&dlci->port);
++              } else {
++                      int i = 0;
++
++                      for (i = 0; i < NUM_DLCI; i++) {
++                              struct gsm_dlci *dlci;
++
++                              dlci = gsm->dlci[i];
++                              if (dlci == NULL) {
++                                      i++;
++                                      continue;
++                              }
++
++                              tty_port_tty_wakeup(&dlci->port);
++                      }
++              }
+       }
+ }
+@@ -748,7 +766,7 @@ static void __gsm_data_queue(struct gsm_dlci *dlci, struct gsm_msg *msg)
+       /* Add to the actual output queue */
+       list_add_tail(&msg->list, &gsm->tx_list);
+       gsm->tx_bytes += msg->len;
+-      gsm_data_kick(gsm);
++      gsm_data_kick(gsm, dlci);
+ }
+ /**
+@@ -1209,7 +1227,7 @@ static void gsm_control_message(struct gsm_mux *gsm, unsigned int command,
+               gsm_control_reply(gsm, CMD_FCON, NULL, 0);
+               /* Kick the link in case it is idling */
+               spin_lock_irqsave(&gsm->tx_lock, flags);
+-              gsm_data_kick(gsm);
++              gsm_data_kick(gsm, NULL);
+               spin_unlock_irqrestore(&gsm->tx_lock, flags);
+               break;
+       case CMD_FCOFF:
+@@ -2406,7 +2424,7 @@ static void gsmld_write_wakeup(struct tty_struct *tty)
+       /* Queue poll */
+       clear_bit(TTY_DO_WRITE_WAKEUP, &tty->flags);
+       spin_lock_irqsave(&gsm->tx_lock, flags);
+-      gsm_data_kick(gsm);
++      gsm_data_kick(gsm, NULL);
+       if (gsm->tx_bytes < TX_THRESH_LO) {
+               gsm_dlci_data_sweep(gsm);
+       }
+-- 
+2.25.1
+
diff --git a/queue-4.19/usb-dwc2-gadget-move-gadget-resume-after-the-core-is.patch b/queue-4.19/usb-dwc2-gadget-move-gadget-resume-after-the-core-is.patch
new file mode 100644 (file)
index 0000000..3254eb0
--- /dev/null
@@ -0,0 +1,51 @@
+From 4fb7b89af8a9eb75352139990fc9f950ac6b1413 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Thu, 23 Apr 2020 13:55:53 +0200
+Subject: usb: dwc2: gadget: move gadget resume after the core is in L0 state
+
+From: Fabrice Gasnier <fabrice.gasnier@st.com>
+
+[ Upstream commit 8c935deacebb8fac8f41378701eb79d12f3c2e2d ]
+
+When the remote wakeup interrupt is triggered, lx_state is resumed from L2
+to L0 state. But when the gadget resume is called, lx_state is still L2.
+This prevents the resume callback to queue any request. Any attempt
+to queue a request from resume callback will result in:
+- "submit request only in active state" debug message to be issued
+- dwc2_hsotg_ep_queue() returns -EAGAIN
+
+Call the gadget resume routine after the core is in L0 state.
+
+Fixes: f81f46e1f530 ("usb: dwc2: implement hibernation during bus suspend/resume")
+
+Acked-by: Minas Harutyunyan <hminas@synopsys.com>
+Signed-off-by: Fabrice Gasnier <fabrice.gasnier@st.com>
+Signed-off-by: Felipe Balbi <balbi@kernel.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/usb/dwc2/core_intr.c | 7 +++++--
+ 1 file changed, 5 insertions(+), 2 deletions(-)
+
+diff --git a/drivers/usb/dwc2/core_intr.c b/drivers/usb/dwc2/core_intr.c
+index 19ae2595f1c3e..b23ce535c12e1 100644
+--- a/drivers/usb/dwc2/core_intr.c
++++ b/drivers/usb/dwc2/core_intr.c
+@@ -421,10 +421,13 @@ static void dwc2_handle_wakeup_detected_intr(struct dwc2_hsotg *hsotg)
+                       if (ret && (ret != -ENOTSUPP))
+                               dev_err(hsotg->dev, "exit power_down failed\n");
++                      /* Change to L0 state */
++                      hsotg->lx_state = DWC2_L0;
+                       call_gadget(hsotg, resume);
++              } else {
++                      /* Change to L0 state */
++                      hsotg->lx_state = DWC2_L0;
+               }
+-              /* Change to L0 state */
+-              hsotg->lx_state = DWC2_L0;
+       } else {
+               if (hsotg->params.power_down)
+                       return;
+-- 
+2.25.1
+
diff --git a/queue-4.19/usb-dwc3-gadget-properly-handle-failed-kick_transfer.patch b/queue-4.19/usb-dwc3-gadget-properly-handle-failed-kick_transfer.patch
new file mode 100644 (file)
index 0000000..a867b0f
--- /dev/null
@@ -0,0 +1,68 @@
+From 9f81f6568a98fec0bb7dc5bb466b8b8fc4e56393 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Sun, 29 Mar 2020 16:12:57 -0700
+Subject: usb: dwc3: gadget: Properly handle failed kick_transfer
+
+From: Thinh Nguyen <Thinh.Nguyen@synopsys.com>
+
+[ Upstream commit 8d99087c2db863c5fa3a4a1f3cb82b3a493705ca ]
+
+If dwc3 fails to issue START_TRANSFER/UPDATE_TRANSFER command, then we
+should properly end an active transfer and give back all the started
+requests. However if it's for an isoc endpoint, the failure maybe due to
+bus-expiry status. In this case, don't give back the requests and wait
+for the next retry.
+
+Fixes: 72246da40f37 ("usb: Introduce DesignWare USB3 DRD Driver")
+Signed-off-by: Thinh Nguyen <thinhn@synopsys.com>
+Signed-off-by: Felipe Balbi <balbi@kernel.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/usb/dwc3/gadget.c | 24 ++++++++++++++++--------
+ 1 file changed, 16 insertions(+), 8 deletions(-)
+
+diff --git a/drivers/usb/dwc3/gadget.c b/drivers/usb/dwc3/gadget.c
+index 8e66954dfcd4e..2f5f4ca5c0d04 100644
+--- a/drivers/usb/dwc3/gadget.c
++++ b/drivers/usb/dwc3/gadget.c
+@@ -1217,6 +1217,8 @@ static void dwc3_prepare_trbs(struct dwc3_ep *dep)
+       }
+ }
++static void dwc3_gadget_ep_cleanup_cancelled_requests(struct dwc3_ep *dep);
++
+ static int __dwc3_gadget_kick_transfer(struct dwc3_ep *dep)
+ {
+       struct dwc3_gadget_ep_cmd_params params;
+@@ -1253,14 +1255,20 @@ static int __dwc3_gadget_kick_transfer(struct dwc3_ep *dep)
+       ret = dwc3_send_gadget_ep_cmd(dep, cmd, &params);
+       if (ret < 0) {
+-              /*
+-               * FIXME we need to iterate over the list of requests
+-               * here and stop, unmap, free and del each of the linked
+-               * requests instead of what we do now.
+-               */
+-              if (req->trb)
+-                      memset(req->trb, 0, sizeof(struct dwc3_trb));
+-              dwc3_gadget_del_and_unmap_request(dep, req, ret);
++              struct dwc3_request *tmp;
++
++              if (ret == -EAGAIN)
++                      return ret;
++
++              dwc3_stop_active_transfer(dep, true, true);
++
++              list_for_each_entry_safe(req, tmp, &dep->started_list, list)
++                      dwc3_gadget_move_cancelled_request(req);
++
++              /* If ep isn't started, then there's no end transfer pending */
++              if (!(dep->flags & DWC3_EP_END_TRANSFER_PENDING))
++                      dwc3_gadget_ep_cleanup_cancelled_requests(dep);
++
+               return ret;
+       }
+-- 
+2.25.1
+
diff --git a/queue-4.19/usb-ehci-platform-set-pm-runtime-as-active-on-resume.patch b/queue-4.19/usb-ehci-platform-set-pm-runtime-as-active-on-resume.patch
new file mode 100644 (file)
index 0000000..fa5ae52
--- /dev/null
@@ -0,0 +1,51 @@
+From 6f8b7632dc5819f89db34668d8c086f9f14b1ed7 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Mon, 18 May 2020 16:49:31 +0100
+Subject: usb/ehci-platform: Set PM runtime as active on resume
+
+From: Qais Yousef <qais.yousef@arm.com>
+
+[ Upstream commit 16bdc04cc98ab0c74392ceef2475ecc5e73fcf49 ]
+
+Follow suit of ohci-platform.c and perform pm_runtime_set_active() on
+resume.
+
+ohci-platform.c had a warning reported due to the missing
+pm_runtime_set_active() [1].
+
+[1] https://lore.kernel.org/lkml/20200323143857.db5zphxhq4hz3hmd@e107158-lin.cambridge.arm.com/
+
+Acked-by: Alan Stern <stern@rowland.harvard.edu>
+Signed-off-by: Qais Yousef <qais.yousef@arm.com>
+CC: Tony Prisk <linux@prisktech.co.nz>
+CC: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+CC: Mathias Nyman <mathias.nyman@intel.com>
+CC: Oliver Neukum <oneukum@suse.de>
+CC: linux-arm-kernel@lists.infradead.org
+CC: linux-usb@vger.kernel.org
+CC: linux-kernel@vger.kernel.org
+Link: https://lore.kernel.org/r/20200518154931.6144-3-qais.yousef@arm.com
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/usb/host/ehci-platform.c | 4 ++++
+ 1 file changed, 4 insertions(+)
+
+diff --git a/drivers/usb/host/ehci-platform.c b/drivers/usb/host/ehci-platform.c
+index 8a45362155c5a..cbc45941a699d 100644
+--- a/drivers/usb/host/ehci-platform.c
++++ b/drivers/usb/host/ehci-platform.c
+@@ -457,6 +457,10 @@ static int ehci_platform_resume(struct device *dev)
+       ehci_resume(hcd, priv->reset_on_resume);
++      pm_runtime_disable(dev);
++      pm_runtime_set_active(dev);
++      pm_runtime_enable(dev);
++
+       if (priv->quirk_poll)
+               quirk_poll_init(priv);
+-- 
+2.25.1
+
diff --git a/queue-4.19/usb-gadget-fix-issue-with-config_ep_by_speed-functio.patch b/queue-4.19/usb-gadget-fix-issue-with-config_ep_by_speed-functio.patch
new file mode 100644 (file)
index 0000000..b6fb607
--- /dev/null
@@ -0,0 +1,226 @@
+From 950b0f6c02a0ede13337f430f71b0013ab2d28a8 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Mon, 18 May 2020 12:08:45 +0200
+Subject: usb: gadget: Fix issue with config_ep_by_speed function
+
+From: Pawel Laszczak <pawell@cadence.com>
+
+[ Upstream commit 5d363120aa548ba52d58907a295eee25f8207ed2 ]
+
+This patch adds new config_ep_by_speed_and_alt function which
+extends the config_ep_by_speed about alt parameter.
+This additional parameter allows to find proper usb_ss_ep_comp_descriptor.
+
+Problem has appeared during testing f_tcm (BOT/UAS) driver function.
+
+f_tcm function for SS use array of headers for both  BOT/UAS alternate
+setting:
+
+static struct usb_descriptor_header *uasp_ss_function_desc[] = {
+        (struct usb_descriptor_header *) &bot_intf_desc,
+        (struct usb_descriptor_header *) &uasp_ss_bi_desc,
+        (struct usb_descriptor_header *) &bot_bi_ep_comp_desc,
+        (struct usb_descriptor_header *) &uasp_ss_bo_desc,
+        (struct usb_descriptor_header *) &bot_bo_ep_comp_desc,
+
+        (struct usb_descriptor_header *) &uasp_intf_desc,
+        (struct usb_descriptor_header *) &uasp_ss_bi_desc,
+        (struct usb_descriptor_header *) &uasp_bi_ep_comp_desc,
+        (struct usb_descriptor_header *) &uasp_bi_pipe_desc,
+        (struct usb_descriptor_header *) &uasp_ss_bo_desc,
+        (struct usb_descriptor_header *) &uasp_bo_ep_comp_desc,
+        (struct usb_descriptor_header *) &uasp_bo_pipe_desc,
+        (struct usb_descriptor_header *) &uasp_ss_status_desc,
+        (struct usb_descriptor_header *) &uasp_status_in_ep_comp_desc,
+        (struct usb_descriptor_header *) &uasp_status_pipe_desc,
+        (struct usb_descriptor_header *) &uasp_ss_cmd_desc,
+        (struct usb_descriptor_header *) &uasp_cmd_comp_desc,
+        (struct usb_descriptor_header *) &uasp_cmd_pipe_desc,
+        NULL,
+};
+
+The first 5 descriptors are associated with BOT alternate setting,
+and others are associated with UAS.
+
+During handling UAS alternate setting f_tcm driver invokes
+config_ep_by_speed and this function sets incorrect companion endpoint
+descriptor in usb_ep object.
+
+Instead setting ep->comp_desc to uasp_bi_ep_comp_desc function in this
+case set ep->comp_desc to uasp_ss_bi_desc.
+
+This is due to the fact that it searches endpoint based on endpoint
+address:
+
+        for_each_ep_desc(speed_desc, d_spd) {
+                chosen_desc = (struct usb_endpoint_descriptor *)*d_spd;
+                if (chosen_desc->bEndpoitAddress == _ep->address)
+                        goto ep_found;
+        }
+
+And in result it uses the descriptor from BOT alternate setting
+instead UAS.
+
+Finally, it causes that controller driver during enabling endpoints
+detect that just enabled endpoint for bot.
+
+Signed-off-by: Jayshri Pawar <jpawar@cadence.com>
+Signed-off-by: Pawel Laszczak <pawell@cadence.com>
+Signed-off-by: Felipe Balbi <balbi@kernel.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/usb/gadget/composite.c | 78 ++++++++++++++++++++++++++--------
+ include/linux/usb/composite.h  |  3 ++
+ 2 files changed, 64 insertions(+), 17 deletions(-)
+
+diff --git a/drivers/usb/gadget/composite.c b/drivers/usb/gadget/composite.c
+index f3436913fd3f4..40b3ed93596ad 100644
+--- a/drivers/usb/gadget/composite.c
++++ b/drivers/usb/gadget/composite.c
+@@ -96,40 +96,43 @@ function_descriptors(struct usb_function *f,
+ }
+ /**
+- * next_ep_desc() - advance to the next EP descriptor
++ * next_desc() - advance to the next desc_type descriptor
+  * @t: currect pointer within descriptor array
++ * @desc_type: descriptor type
+  *
+- * Return: next EP descriptor or NULL
++ * Return: next desc_type descriptor or NULL
+  *
+- * Iterate over @t until either EP descriptor found or
++ * Iterate over @t until either desc_type descriptor found or
+  * NULL (that indicates end of list) encountered
+  */
+ static struct usb_descriptor_header**
+-next_ep_desc(struct usb_descriptor_header **t)
++next_desc(struct usb_descriptor_header **t, u8 desc_type)
+ {
+       for (; *t; t++) {
+-              if ((*t)->bDescriptorType == USB_DT_ENDPOINT)
++              if ((*t)->bDescriptorType == desc_type)
+                       return t;
+       }
+       return NULL;
+ }
+ /*
+- * for_each_ep_desc()- iterate over endpoint descriptors in the
+- *            descriptors list
+- * @start:    pointer within descriptor array.
+- * @ep_desc:  endpoint descriptor to use as the loop cursor
++ * for_each_desc() - iterate over desc_type descriptors in the
++ * descriptors list
++ * @start: pointer within descriptor array.
++ * @iter_desc: desc_type descriptor to use as the loop cursor
++ * @desc_type: wanted descriptr type
+  */
+-#define for_each_ep_desc(start, ep_desc) \
+-      for (ep_desc = next_ep_desc(start); \
+-            ep_desc; ep_desc = next_ep_desc(ep_desc+1))
++#define for_each_desc(start, iter_desc, desc_type) \
++      for (iter_desc = next_desc(start, desc_type); \
++           iter_desc; iter_desc = next_desc(iter_desc + 1, desc_type))
+ /**
+- * config_ep_by_speed() - configures the given endpoint
++ * config_ep_by_speed_and_alt() - configures the given endpoint
+  * according to gadget speed.
+  * @g: pointer to the gadget
+  * @f: usb function
+  * @_ep: the endpoint to configure
++ * @alt: alternate setting number
+  *
+  * Return: error code, 0 on success
+  *
+@@ -142,11 +145,13 @@ next_ep_desc(struct usb_descriptor_header **t)
+  * Note: the supplied function should hold all the descriptors
+  * for supported speeds
+  */
+-int config_ep_by_speed(struct usb_gadget *g,
+-                      struct usb_function *f,
+-                      struct usb_ep *_ep)
++int config_ep_by_speed_and_alt(struct usb_gadget *g,
++                              struct usb_function *f,
++                              struct usb_ep *_ep,
++                              u8 alt)
+ {
+       struct usb_endpoint_descriptor *chosen_desc = NULL;
++      struct usb_interface_descriptor *int_desc = NULL;
+       struct usb_descriptor_header **speed_desc = NULL;
+       struct usb_ss_ep_comp_descriptor *comp_desc = NULL;
+@@ -182,8 +187,21 @@ int config_ep_by_speed(struct usb_gadget *g,
+       default:
+               speed_desc = f->fs_descriptors;
+       }
++
++      /* find correct alternate setting descriptor */
++      for_each_desc(speed_desc, d_spd, USB_DT_INTERFACE) {
++              int_desc = (struct usb_interface_descriptor *)*d_spd;
++
++              if (int_desc->bAlternateSetting == alt) {
++                      speed_desc = d_spd;
++                      goto intf_found;
++              }
++      }
++      return -EIO;
++
++intf_found:
+       /* find descriptors */
+-      for_each_ep_desc(speed_desc, d_spd) {
++      for_each_desc(speed_desc, d_spd, USB_DT_ENDPOINT) {
+               chosen_desc = (struct usb_endpoint_descriptor *)*d_spd;
+               if (chosen_desc->bEndpointAddress == _ep->address)
+                       goto ep_found;
+@@ -237,6 +255,32 @@ ep_found:
+       }
+       return 0;
+ }
++EXPORT_SYMBOL_GPL(config_ep_by_speed_and_alt);
++
++/**
++ * config_ep_by_speed() - configures the given endpoint
++ * according to gadget speed.
++ * @g: pointer to the gadget
++ * @f: usb function
++ * @_ep: the endpoint to configure
++ *
++ * Return: error code, 0 on success
++ *
++ * This function chooses the right descriptors for a given
++ * endpoint according to gadget speed and saves it in the
++ * endpoint desc field. If the endpoint already has a descriptor
++ * assigned to it - overwrites it with currently corresponding
++ * descriptor. The endpoint maxpacket field is updated according
++ * to the chosen descriptor.
++ * Note: the supplied function should hold all the descriptors
++ * for supported speeds
++ */
++int config_ep_by_speed(struct usb_gadget *g,
++                      struct usb_function *f,
++                      struct usb_ep *_ep)
++{
++      return config_ep_by_speed_and_alt(g, f, _ep, 0);
++}
+ EXPORT_SYMBOL_GPL(config_ep_by_speed);
+ /**
+diff --git a/include/linux/usb/composite.h b/include/linux/usb/composite.h
+index 8675e145ea8b3..2040696d75b6e 100644
+--- a/include/linux/usb/composite.h
++++ b/include/linux/usb/composite.h
+@@ -249,6 +249,9 @@ int usb_function_activate(struct usb_function *);
+ int usb_interface_id(struct usb_configuration *, struct usb_function *);
++int config_ep_by_speed_and_alt(struct usb_gadget *g, struct usb_function *f,
++                              struct usb_ep *_ep, u8 alt);
++
+ int config_ep_by_speed(struct usb_gadget *g, struct usb_function *f,
+                       struct usb_ep *_ep);
+-- 
+2.25.1
+
diff --git a/queue-4.19/usb-gadget-fix-potential-double-free-in-m66592_probe.patch b/queue-4.19/usb-gadget-fix-potential-double-free-in-m66592_probe.patch
new file mode 100644 (file)
index 0000000..077c039
--- /dev/null
@@ -0,0 +1,38 @@
+From 46589acdc54bc9022cda57772b688e69a9b18671 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Fri, 22 May 2020 23:06:25 -0500
+Subject: usb: gadget: fix potential double-free in m66592_probe.
+
+From: Qiushi Wu <wu000273@umn.edu>
+
+[ Upstream commit 44734a594196bf1d474212f38fe3a0d37a73278b ]
+
+m66592_free_request() is called under label "err_add_udc"
+and "clean_up", and m66592->ep0_req is not set to NULL after
+first free, leading to a double-free. Fix this issue by
+setting m66592->ep0_req to NULL after the first free.
+
+Fixes: 0f91349b89f3 ("usb: gadget: convert all users to the new udc infrastructure")
+Signed-off-by: Qiushi Wu <wu000273@umn.edu>
+Signed-off-by: Felipe Balbi <balbi@kernel.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/usb/gadget/udc/m66592-udc.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/drivers/usb/gadget/udc/m66592-udc.c b/drivers/usb/gadget/udc/m66592-udc.c
+index a8288df6aadf0..ea59b56e54023 100644
+--- a/drivers/usb/gadget/udc/m66592-udc.c
++++ b/drivers/usb/gadget/udc/m66592-udc.c
+@@ -1667,7 +1667,7 @@ static int m66592_probe(struct platform_device *pdev)
+ err_add_udc:
+       m66592_free_request(&m66592->ep[0].ep, m66592->ep0_req);
+-
++      m66592->ep0_req = NULL;
+ clean_up3:
+       if (m66592->pdata->on_chip) {
+               clk_disable(m66592->clk);
+-- 
+2.25.1
+
diff --git a/queue-4.19/usb-gadget-lpc32xx_udc-don-t-dereference-ep-pointer-.patch b/queue-4.19/usb-gadget-lpc32xx_udc-don-t-dereference-ep-pointer-.patch
new file mode 100644 (file)
index 0000000..584a0ab
--- /dev/null
@@ -0,0 +1,71 @@
+From 351ab89984a303a3897f335229bd4cdaf4b4cb20 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Thu, 21 May 2020 16:13:00 +0100
+Subject: usb: gadget: lpc32xx_udc: don't dereference ep pointer before null
+ check
+
+From: Colin Ian King <colin.king@canonical.com>
+
+[ Upstream commit eafa80041645cd7604c4357b1a0cd4a3c81f2227 ]
+
+Currently pointer ep is being dereferenced before it is null checked
+leading to a null pointer dereference issue.  Fix this by only assigning
+pointer udc once ep is known to be not null.  Also remove a debug
+message that requires a valid udc which may not be possible at that
+point.
+
+Addresses-Coverity: ("Dereference before null check")
+Fixes: 24a28e428351 ("USB: gadget driver for LPC32xx")
+Signed-off-by: Colin Ian King <colin.king@canonical.com>
+Signed-off-by: Felipe Balbi <balbi@kernel.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/usb/gadget/udc/lpc32xx_udc.c | 11 ++++++-----
+ 1 file changed, 6 insertions(+), 5 deletions(-)
+
+diff --git a/drivers/usb/gadget/udc/lpc32xx_udc.c b/drivers/usb/gadget/udc/lpc32xx_udc.c
+index 21921db068f6d..cf56819f16e4c 100644
+--- a/drivers/usb/gadget/udc/lpc32xx_udc.c
++++ b/drivers/usb/gadget/udc/lpc32xx_udc.c
+@@ -1602,17 +1602,17 @@ static int lpc32xx_ep_enable(struct usb_ep *_ep,
+                            const struct usb_endpoint_descriptor *desc)
+ {
+       struct lpc32xx_ep *ep = container_of(_ep, struct lpc32xx_ep, ep);
+-      struct lpc32xx_udc *udc = ep->udc;
++      struct lpc32xx_udc *udc;
+       u16 maxpacket;
+       u32 tmp;
+       unsigned long flags;
+       /* Verify EP data */
+       if ((!_ep) || (!ep) || (!desc) ||
+-          (desc->bDescriptorType != USB_DT_ENDPOINT)) {
+-              dev_dbg(udc->dev, "bad ep or descriptor\n");
++          (desc->bDescriptorType != USB_DT_ENDPOINT))
+               return -EINVAL;
+-      }
++
++      udc = ep->udc;
+       maxpacket = usb_endpoint_maxp(desc);
+       if ((maxpacket == 0) || (maxpacket > ep->maxpacket)) {
+               dev_dbg(udc->dev, "bad ep descriptor's packet size\n");
+@@ -1860,7 +1860,7 @@ static int lpc32xx_ep_dequeue(struct usb_ep *_ep, struct usb_request *_req)
+ static int lpc32xx_ep_set_halt(struct usb_ep *_ep, int value)
+ {
+       struct lpc32xx_ep *ep = container_of(_ep, struct lpc32xx_ep, ep);
+-      struct lpc32xx_udc *udc = ep->udc;
++      struct lpc32xx_udc *udc;
+       unsigned long flags;
+       if ((!ep) || (ep->hwep_num <= 1))
+@@ -1870,6 +1870,7 @@ static int lpc32xx_ep_set_halt(struct usb_ep *_ep, int value)
+       if (ep->is_in)
+               return -EAGAIN;
++      udc = ep->udc;
+       spin_lock_irqsave(&udc->lock, flags);
+       if (value == 1) {
+-- 
+2.25.1
+
diff --git a/queue-4.19/usb-gadget-udc-s3c2410_udc-remove-pointless-null-che.patch b/queue-4.19/usb-gadget-udc-s3c2410_udc-remove-pointless-null-che.patch
new file mode 100644 (file)
index 0000000..c285019
--- /dev/null
@@ -0,0 +1,57 @@
+From 863f62201bd7546451a9962dc0fb28a688cb877a Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Thu, 23 Apr 2020 09:29:24 -0700
+Subject: USB: gadget: udc: s3c2410_udc: Remove pointless NULL check in
+ s3c2410_udc_nuke
+
+From: Nathan Chancellor <natechancellor@gmail.com>
+
+[ Upstream commit 7a0fbcf7c308920bc6116b3a5fb21c8cc5fec128 ]
+
+Clang warns:
+
+drivers/usb/gadget/udc/s3c2410_udc.c:255:11: warning: comparison of
+address of 'ep->queue' equal to a null pointer is always false
+[-Wtautological-pointer-compare]
+        if (&ep->queue == NULL)
+             ~~~~^~~~~    ~~~~
+1 warning generated.
+
+It is not wrong, queue is not a pointer so if ep is not NULL, the
+address of queue cannot be NULL. No other driver does a check like this
+and this check has been around since the driver was first introduced,
+presumably with no issues so it does not seem like this check should be
+something else. Just remove it.
+
+Commit afe956c577b2d ("kbuild: Enable -Wtautological-compare") exposed
+this but it is not the root cause of the warning.
+
+Fixes: 3fc154b6b8134 ("USB Gadget driver for Samsung s3c2410 ARM SoC")
+Link: https://github.com/ClangBuiltLinux/linux/issues/1004
+Reviewed-by: Nick Desaulniers <ndesaulniers@google.com>
+Reported-by: kbuild test robot <lkp@intel.com>
+Signed-off-by: Nathan Chancellor <natechancellor@gmail.com>
+Signed-off-by: Felipe Balbi <balbi@kernel.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/usb/gadget/udc/s3c2410_udc.c | 4 ----
+ 1 file changed, 4 deletions(-)
+
+diff --git a/drivers/usb/gadget/udc/s3c2410_udc.c b/drivers/usb/gadget/udc/s3c2410_udc.c
+index 8bf5ad7a59add..6cc63e317aba5 100644
+--- a/drivers/usb/gadget/udc/s3c2410_udc.c
++++ b/drivers/usb/gadget/udc/s3c2410_udc.c
+@@ -264,10 +264,6 @@ static void s3c2410_udc_done(struct s3c2410_ep *ep,
+ static void s3c2410_udc_nuke(struct s3c2410_udc *udc,
+               struct s3c2410_ep *ep, int status)
+ {
+-      /* Sanity check */
+-      if (&ep->queue == NULL)
+-              return;
+-
+       while (!list_empty(&ep->queue)) {
+               struct s3c2410_request *req;
+               req = list_entry(ep->queue.next, struct s3c2410_request,
+-- 
+2.25.1
+
diff --git a/queue-4.19/usb-host-ehci-mxc-add-error-handling-in-ehci_mxc_drv.patch b/queue-4.19/usb-host-ehci-mxc-add-error-handling-in-ehci_mxc_drv.patch
new file mode 100644 (file)
index 0000000..c34a4a3
--- /dev/null
@@ -0,0 +1,39 @@
+From d462013c5960dfb5e62059a5ba85c4180b4233d1 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Wed, 13 May 2020 21:26:47 +0800
+Subject: USB: host: ehci-mxc: Add error handling in ehci_mxc_drv_probe()
+
+From: Tang Bin <tangbin@cmss.chinamobile.com>
+
+[ Upstream commit d49292025f79693d3348f8e2029a8b4703be0f0a ]
+
+The function ehci_mxc_drv_probe() does not perform sufficient error
+checking after executing platform_get_irq(), thus fix it.
+
+Fixes: 7e8d5cd93fac ("USB: Add EHCI support for MX27 and MX31 based boards")
+Signed-off-by: Zhang Shengju <zhangshengju@cmss.chinamobile.com>
+Signed-off-by: Tang Bin <tangbin@cmss.chinamobile.com>
+Reviewed-by: Peter Chen <peter.chen@nxp.com>
+Link: https://lore.kernel.org/r/20200513132647.5456-1-tangbin@cmss.chinamobile.com
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/usb/host/ehci-mxc.c | 2 ++
+ 1 file changed, 2 insertions(+)
+
+diff --git a/drivers/usb/host/ehci-mxc.c b/drivers/usb/host/ehci-mxc.c
+index c9f91e6c72b6a..7f65c86047ddd 100644
+--- a/drivers/usb/host/ehci-mxc.c
++++ b/drivers/usb/host/ehci-mxc.c
+@@ -50,6 +50,8 @@ static int ehci_mxc_drv_probe(struct platform_device *pdev)
+       }
+       irq = platform_get_irq(pdev, 0);
++      if (irq < 0)
++              return irq;
+       hcd = usb_create_hcd(&ehci_mxc_hc_driver, dev, dev_name(dev));
+       if (!hcd)
+-- 
+2.25.1
+
diff --git a/queue-4.19/usb-host-ehci-platform-add-a-quirk-to-avoid-stuck.patch b/queue-4.19/usb-host-ehci-platform-add-a-quirk-to-avoid-stuck.patch
new file mode 100644 (file)
index 0000000..870be1d
--- /dev/null
@@ -0,0 +1,237 @@
+From 7f06261b9079f302cf64b6ea0197ff073fbafb94 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Mon, 27 Jan 2020 17:37:42 +0900
+Subject: usb: host: ehci-platform: add a quirk to avoid stuck
+
+From: Yoshihiro Shimoda <yoshihiro.shimoda.uh@renesas.com>
+
+[ Upstream commit cc7eac1e4afdd151085be4d0341a155760388653 ]
+
+Since EHCI/OHCI controllers on R-Car Gen3 SoCs are possible to
+be getting stuck very rarely after a full/low usb device was
+disconnected. To detect/recover from such a situation, the controllers
+require a special way which poll the EHCI PORTSC register and changes
+the OHCI functional state.
+
+So, this patch adds a polling timer into the ehci-platform driver,
+and if the ehci driver detects the issue by the EHCI PORTSC register,
+the ehci driver removes a companion device (= the OHCI controller)
+to change the OHCI functional state to USB Reset once. And then,
+the ehci driver adds the companion device again.
+
+Signed-off-by: Yoshihiro Shimoda <yoshihiro.shimoda.uh@renesas.com>
+Acked-by: Alan Stern <stern@rowland.harvard.edu>
+Link: https://lore.kernel.org/r/1580114262-25029-1-git-send-email-yoshihiro.shimoda.uh@renesas.com
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/usb/host/ehci-platform.c | 127 +++++++++++++++++++++++++++++++
+ include/linux/usb/ehci_def.h     |   2 +-
+ 2 files changed, 128 insertions(+), 1 deletion(-)
+
+diff --git a/drivers/usb/host/ehci-platform.c b/drivers/usb/host/ehci-platform.c
+index 4c306fb6b0699..8a45362155c5a 100644
+--- a/drivers/usb/host/ehci-platform.c
++++ b/drivers/usb/host/ehci-platform.c
+@@ -29,6 +29,8 @@
+ #include <linux/of.h>
+ #include <linux/platform_device.h>
+ #include <linux/reset.h>
++#include <linux/sys_soc.h>
++#include <linux/timer.h>
+ #include <linux/usb.h>
+ #include <linux/usb/hcd.h>
+ #include <linux/usb/ehci_pdriver.h>
+@@ -44,6 +46,9 @@ struct ehci_platform_priv {
+       struct clk *clks[EHCI_MAX_CLKS];
+       struct reset_control *rsts;
+       bool reset_on_resume;
++      bool quirk_poll;
++      struct timer_list poll_timer;
++      struct delayed_work poll_work;
+ };
+ static const char hcd_name[] = "ehci-platform";
+@@ -118,6 +123,111 @@ static struct usb_ehci_pdata ehci_platform_defaults = {
+       .power_off =            ehci_platform_power_off,
+ };
++/**
++ * quirk_poll_check_port_status - Poll port_status if the device sticks
++ * @ehci: the ehci hcd pointer
++ *
++ * Since EHCI/OHCI controllers on R-Car Gen3 SoCs are possible to be getting
++ * stuck very rarely after a full/low usb device was disconnected. To
++ * detect such a situation, the controllers require a special way which poll
++ * the EHCI PORTSC register.
++ *
++ * Return: true if the controller's port_status indicated getting stuck
++ */
++static bool quirk_poll_check_port_status(struct ehci_hcd *ehci)
++{
++      u32 port_status = ehci_readl(ehci, &ehci->regs->port_status[0]);
++
++      if (!(port_status & PORT_OWNER) &&
++           (port_status & PORT_POWER) &&
++          !(port_status & PORT_CONNECT) &&
++           (port_status & PORT_LS_MASK))
++              return true;
++
++      return false;
++}
++
++/**
++ * quirk_poll_rebind_companion - rebind comanion device to recover
++ * @ehci: the ehci hcd pointer
++ *
++ * Since EHCI/OHCI controllers on R-Car Gen3 SoCs are possible to be getting
++ * stuck very rarely after a full/low usb device was disconnected. To
++ * recover from such a situation, the controllers require changing the OHCI
++ * functional state.
++ */
++static void quirk_poll_rebind_companion(struct ehci_hcd *ehci)
++{
++      struct device *companion_dev;
++      struct usb_hcd *hcd = ehci_to_hcd(ehci);
++
++      companion_dev = usb_of_get_companion_dev(hcd->self.controller);
++      if (!companion_dev)
++              return;
++
++      device_release_driver(companion_dev);
++      if (device_attach(companion_dev) < 0)
++              ehci_err(ehci, "%s: failed\n", __func__);
++
++      put_device(companion_dev);
++}
++
++static void quirk_poll_work(struct work_struct *work)
++{
++      struct ehci_platform_priv *priv =
++              container_of(to_delayed_work(work), struct ehci_platform_priv,
++                           poll_work);
++      struct ehci_hcd *ehci = container_of((void *)priv, struct ehci_hcd,
++                                           priv);
++
++      /* check the status twice to reduce misdetection rate */
++      if (!quirk_poll_check_port_status(ehci))
++              return;
++      udelay(10);
++      if (!quirk_poll_check_port_status(ehci))
++              return;
++
++      ehci_dbg(ehci, "%s: detected getting stuck. rebind now!\n", __func__);
++      quirk_poll_rebind_companion(ehci);
++}
++
++static void quirk_poll_timer(struct timer_list *t)
++{
++      struct ehci_platform_priv *priv = from_timer(priv, t, poll_timer);
++      struct ehci_hcd *ehci = container_of((void *)priv, struct ehci_hcd,
++                                           priv);
++
++      if (quirk_poll_check_port_status(ehci)) {
++              /*
++               * Now scheduling the work for testing the port more. Note that
++               * updating the status is possible to be delayed when
++               * reconnection. So, this uses delayed work with 5 ms delay
++               * to avoid misdetection.
++               */
++              schedule_delayed_work(&priv->poll_work, msecs_to_jiffies(5));
++      }
++
++      mod_timer(&priv->poll_timer, jiffies + HZ);
++}
++
++static void quirk_poll_init(struct ehci_platform_priv *priv)
++{
++      INIT_DELAYED_WORK(&priv->poll_work, quirk_poll_work);
++      timer_setup(&priv->poll_timer, quirk_poll_timer, 0);
++      mod_timer(&priv->poll_timer, jiffies + HZ);
++}
++
++static void quirk_poll_end(struct ehci_platform_priv *priv)
++{
++      del_timer_sync(&priv->poll_timer);
++      cancel_delayed_work(&priv->poll_work);
++}
++
++static const struct soc_device_attribute quirk_poll_match[] = {
++      { .family = "R-Car Gen3" },
++      { /* sentinel*/ }
++};
++
+ static int ehci_platform_probe(struct platform_device *dev)
+ {
+       struct usb_hcd *hcd;
+@@ -178,6 +288,9 @@ static int ehci_platform_probe(struct platform_device *dev)
+                                         "has-transaction-translator"))
+                       hcd->has_tt = 1;
++              if (soc_device_match(quirk_poll_match))
++                      priv->quirk_poll = true;
++
+               for (clk = 0; clk < EHCI_MAX_CLKS; clk++) {
+                       priv->clks[clk] = of_clk_get(dev->dev.of_node, clk);
+                       if (IS_ERR(priv->clks[clk])) {
+@@ -249,6 +362,9 @@ static int ehci_platform_probe(struct platform_device *dev)
+       device_enable_async_suspend(hcd->self.controller);
+       platform_set_drvdata(dev, hcd);
++      if (priv->quirk_poll)
++              quirk_poll_init(priv);
++
+       return err;
+ err_power:
+@@ -275,6 +391,9 @@ static int ehci_platform_remove(struct platform_device *dev)
+       struct ehci_platform_priv *priv = hcd_to_ehci_priv(hcd);
+       int clk;
++      if (priv->quirk_poll)
++              quirk_poll_end(priv);
++
+       usb_remove_hcd(hcd);
+       if (pdata->power_off)
+@@ -299,9 +418,13 @@ static int ehci_platform_suspend(struct device *dev)
+       struct usb_hcd *hcd = dev_get_drvdata(dev);
+       struct usb_ehci_pdata *pdata = dev_get_platdata(dev);
+       struct platform_device *pdev = to_platform_device(dev);
++      struct ehci_platform_priv *priv = hcd_to_ehci_priv(hcd);
+       bool do_wakeup = device_may_wakeup(dev);
+       int ret;
++      if (priv->quirk_poll)
++              quirk_poll_end(priv);
++
+       ret = ehci_suspend(hcd, do_wakeup);
+       if (ret)
+               return ret;
+@@ -333,6 +456,10 @@ static int ehci_platform_resume(struct device *dev)
+       }
+       ehci_resume(hcd, priv->reset_on_resume);
++
++      if (priv->quirk_poll)
++              quirk_poll_init(priv);
++
+       return 0;
+ }
+ #endif /* CONFIG_PM_SLEEP */
+diff --git a/include/linux/usb/ehci_def.h b/include/linux/usb/ehci_def.h
+index a15ce99dfc2d6..78e0063555575 100644
+--- a/include/linux/usb/ehci_def.h
++++ b/include/linux/usb/ehci_def.h
+@@ -151,7 +151,7 @@ struct ehci_regs {
+ #define PORT_OWNER    (1<<13)         /* true: companion hc owns this port */
+ #define PORT_POWER    (1<<12)         /* true: has power (see PPC) */
+ #define PORT_USB11(x) (((x)&(3<<10)) == (1<<10))      /* USB 1.1 device */
+-/* 11:10 for detecting lowspeed devices (reset vs release ownership) */
++#define PORT_LS_MASK  (3<<10)         /* Link status (SE0, K or J */
+ /* 9 reserved */
+ #define PORT_LPM      (1<<9)          /* LPM transaction */
+ #define PORT_RESET    (1<<8)          /* reset port */
+-- 
+2.25.1
+
diff --git a/queue-4.19/usb-ohci-platform-fix-a-warning-when-hibernating.patch b/queue-4.19/usb-ohci-platform-fix-a-warning-when-hibernating.patch
new file mode 100644 (file)
index 0000000..58e7d2a
--- /dev/null
@@ -0,0 +1,102 @@
+From 72b7c7b9bfca57a06e5ab944a3e9c5244a13aa95 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Mon, 18 May 2020 16:49:29 +0100
+Subject: usb/ohci-platform: Fix a warning when hibernating
+
+From: Qais Yousef <qais.yousef@arm.com>
+
+[ Upstream commit 1cb3b0095c3d0bb96912bfbbce4fc006d41f367c ]
+
+The following warning was observed when attempting to suspend to disk
+using a USB flash as a swap device.
+
+[  111.779649] ------------[ cut here ]------------
+[  111.788382] URB (____ptrval____) submitted while active
+[  111.796646] WARNING: CPU: 3 PID: 365 at drivers/usb/core/urb.c:363 usb_submit_urb+0x3d8/0x590
+[  111.805417] Modules linked in:
+[  111.808584] CPU: 3 PID: 365 Comm: kworker/3:2 Not tainted 5.6.0-rc6-00002-gdfd1731f9a3e-dirty #545
+[  111.817796] Hardware name: ARM Juno development board (r2) (DT)
+[  111.823896] Workqueue: usb_hub_wq hub_event
+[  111.828217] pstate: 60000005 (nZCv daif -PAN -UAO)
+[  111.833156] pc : usb_submit_urb+0x3d8/0x590
+[  111.837471] lr : usb_submit_urb+0x3d8/0x590
+[  111.841783] sp : ffff800018de38b0
+[  111.845205] x29: ffff800018de38b0 x28: 0000000000000003
+[  111.850682] x27: ffff000970530b20 x26: ffff8000133fd000
+[  111.856159] x25: ffff8000133fd000 x24: ffff800018de3b38
+[  111.861635] x23: 0000000000000004 x22: 0000000000000c00
+[  111.867112] x21: 0000000000000000 x20: 00000000fffffff0
+[  111.872589] x19: ffff0009704e7a00 x18: ffffffffffffffff
+[  111.878065] x17: 00000000a7c8f4bc x16: 000000002af33de8
+[  111.883542] x15: ffff8000133fda88 x14: 0720072007200720
+[  111.889019] x13: 0720072007200720 x12: 0720072007200720
+[  111.894496] x11: 0000000000000000 x10: 00000000a5286134
+[  111.899973] x9 : 0000000000000002 x8 : ffff000970c837a0
+[  111.905449] x7 : 0000000000000000 x6 : ffff800018de3570
+[  111.910926] x5 : 0000000000000001 x4 : 0000000000000003
+[  111.916401] x3 : 0000000000000000 x2 : ffff800013427118
+[  111.921879] x1 : 9d4e965b4b7d7c00 x0 : 0000000000000000
+[  111.927356] Call trace:
+[  111.929892]  usb_submit_urb+0x3d8/0x590
+[  111.933852]  hub_activate+0x108/0x7f0
+[  111.937633]  hub_resume+0xac/0x148
+[  111.941149]  usb_resume_interface.isra.10+0x60/0x138
+[  111.946265]  usb_resume_both+0xe4/0x140
+[  111.950225]  usb_runtime_resume+0x24/0x30
+[  111.954365]  __rpm_callback+0xdc/0x138
+[  111.958236]  rpm_callback+0x34/0x98
+[  111.961841]  rpm_resume+0x4a8/0x720
+[  111.965445]  rpm_resume+0x50c/0x720
+[  111.969049]  __pm_runtime_resume+0x4c/0xb8
+[  111.973276]  usb_autopm_get_interface+0x28/0x60
+[  111.977948]  hub_event+0x80/0x16d8
+[  111.981466]  process_one_work+0x2a4/0x748
+[  111.985604]  worker_thread+0x48/0x498
+[  111.989387]  kthread+0x13c/0x140
+[  111.992725]  ret_from_fork+0x10/0x18
+[  111.996415] irq event stamp: 354
+[  111.999756] hardirqs last  enabled at (353): [<ffff80001019ea1c>] console_unlock+0x504/0x5b8
+[  112.008441] hardirqs last disabled at (354): [<ffff8000100a95d0>] do_debug_exception+0x1a8/0x258
+[  112.017479] softirqs last  enabled at (350): [<ffff8000100818a4>] __do_softirq+0x4bc/0x568
+[  112.025984] softirqs last disabled at (343): [<ffff8000101145a4>] irq_exit+0x144/0x150
+[  112.034129] ---[ end trace dc96030b9cf6c8a3 ]---
+
+The problem was tracked down to a missing call to
+pm_runtime_set_active() on resume in ohci-platform.
+
+Link: https://lore.kernel.org/lkml/20200323143857.db5zphxhq4hz3hmd@e107158-lin.cambridge.arm.com/
+Acked-by: Alan Stern <stern@rowland.harvard.edu>
+Signed-off-by: Qais Yousef <qais.yousef@arm.com>
+CC: Tony Prisk <linux@prisktech.co.nz>
+CC: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+CC: Mathias Nyman <mathias.nyman@intel.com>
+CC: Oliver Neukum <oneukum@suse.de>
+CC: linux-arm-kernel@lists.infradead.org
+CC: linux-usb@vger.kernel.org
+CC: linux-kernel@vger.kernel.org
+Link: https://lore.kernel.org/r/20200518154931.6144-1-qais.yousef@arm.com
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/usb/host/ohci-platform.c | 5 +++++
+ 1 file changed, 5 insertions(+)
+
+diff --git a/drivers/usb/host/ohci-platform.c b/drivers/usb/host/ohci-platform.c
+index 65a1c3fdc88c6..f40112c5920d1 100644
+--- a/drivers/usb/host/ohci-platform.c
++++ b/drivers/usb/host/ohci-platform.c
+@@ -301,6 +301,11 @@ static int ohci_platform_resume(struct device *dev)
+       }
+       ohci_resume(hcd, false);
++
++      pm_runtime_disable(dev);
++      pm_runtime_set_active(dev);
++      pm_runtime_enable(dev);
++
+       return 0;
+ }
+ #endif /* CONFIG_PM_SLEEP */
+-- 
+2.25.1
+
diff --git a/queue-4.19/usb-xhci-plat-set-pm-runtime-as-active-on-resume.patch b/queue-4.19/usb-xhci-plat-set-pm-runtime-as-active-on-resume.patch
new file mode 100644 (file)
index 0000000..7838b06
--- /dev/null
@@ -0,0 +1,56 @@
+From 93467e4f01792e97a4a1a8eb852487448d4c052f Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Mon, 18 May 2020 16:49:30 +0100
+Subject: usb/xhci-plat: Set PM runtime as active on resume
+
+From: Qais Yousef <qais.yousef@arm.com>
+
+[ Upstream commit 79112cc3c29f4a8c73a21428fbcbcb0afb005e3e ]
+
+Follow suit of ohci-platform.c and perform pm_runtime_set_active() on
+resume.
+
+ohci-platform.c had a warning reported due to the missing
+pm_runtime_set_active() [1].
+
+[1] https://lore.kernel.org/lkml/20200323143857.db5zphxhq4hz3hmd@e107158-lin.cambridge.arm.com/
+
+Signed-off-by: Qais Yousef <qais.yousef@arm.com>
+CC: Tony Prisk <linux@prisktech.co.nz>
+CC: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+CC: Mathias Nyman <mathias.nyman@intel.com>
+CC: Oliver Neukum <oneukum@suse.de>
+CC: linux-arm-kernel@lists.infradead.org
+CC: linux-usb@vger.kernel.org
+CC: linux-kernel@vger.kernel.org
+Link: https://lore.kernel.org/r/20200518154931.6144-2-qais.yousef@arm.com
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/usb/host/xhci-plat.c | 10 +++++++++-
+ 1 file changed, 9 insertions(+), 1 deletion(-)
+
+diff --git a/drivers/usb/host/xhci-plat.c b/drivers/usb/host/xhci-plat.c
+index adc437ca83b88..65972c186c641 100644
+--- a/drivers/usb/host/xhci-plat.c
++++ b/drivers/usb/host/xhci-plat.c
+@@ -408,7 +408,15 @@ static int __maybe_unused xhci_plat_resume(struct device *dev)
+       if (ret)
+               return ret;
+-      return xhci_resume(xhci, 0);
++      ret = xhci_resume(xhci, 0);
++      if (ret)
++              return ret;
++
++      pm_runtime_disable(dev);
++      pm_runtime_set_active(dev);
++      pm_runtime_enable(dev);
++
++      return 0;
+ }
+ static int __maybe_unused xhci_plat_runtime_suspend(struct device *dev)
+-- 
+2.25.1
+
diff --git a/queue-4.19/usblp-poison-urbs-upon-disconnect.patch b/queue-4.19/usblp-poison-urbs-upon-disconnect.patch
new file mode 100644 (file)
index 0000000..378ad8a
--- /dev/null
@@ -0,0 +1,50 @@
+From 8ba93396aa5e16d75f56c36fe93b89cd692c08bd Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Thu, 7 May 2020 10:58:06 +0200
+Subject: usblp: poison URBs upon disconnect
+
+From: Oliver Neukum <oneukum@suse.com>
+
+[ Upstream commit 296a193b06120aa6ae7cf5c0d7b5e5b55968026e ]
+
+syzkaller reported an URB that should have been killed to be active.
+We do not understand it, but this should fix the issue if it is real.
+
+Signed-off-by: Oliver Neukum <oneukum@suse.com>
+Reported-by: syzbot+be5b5f86a162a6c281e6@syzkaller.appspotmail.com
+Link: https://lore.kernel.org/r/20200507085806.5793-1-oneukum@suse.com
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/usb/class/usblp.c | 5 ++++-
+ 1 file changed, 4 insertions(+), 1 deletion(-)
+
+diff --git a/drivers/usb/class/usblp.c b/drivers/usb/class/usblp.c
+index 4a80103675d59..419804c9c974b 100644
+--- a/drivers/usb/class/usblp.c
++++ b/drivers/usb/class/usblp.c
+@@ -468,7 +468,8 @@ static int usblp_release(struct inode *inode, struct file *file)
+       usb_autopm_put_interface(usblp->intf);
+       if (!usblp->present)            /* finish cleanup from disconnect */
+-              usblp_cleanup(usblp);
++              usblp_cleanup(usblp);   /* any URBs must be dead */
++
+       mutex_unlock(&usblp_mutex);
+       return 0;
+ }
+@@ -1375,9 +1376,11 @@ static void usblp_disconnect(struct usb_interface *intf)
+       usblp_unlink_urbs(usblp);
+       mutex_unlock(&usblp->mut);
++      usb_poison_anchored_urbs(&usblp->urbs);
+       if (!usblp->used)
+               usblp_cleanup(usblp);
++
+       mutex_unlock(&usblp_mutex);
+ }
+-- 
+2.25.1
+
diff --git a/queue-4.19/vfio-mdev-fix-reference-count-leak-in-add_mdev_suppo.patch b/queue-4.19/vfio-mdev-fix-reference-count-leak-in-add_mdev_suppo.patch
new file mode 100644 (file)
index 0000000..2d7eaf6
--- /dev/null
@@ -0,0 +1,41 @@
+From 0e3c6f6cc1d16e3a40fa3b7e2794317c8a3fa89c Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Wed, 27 May 2020 21:01:09 -0500
+Subject: vfio/mdev: Fix reference count leak in add_mdev_supported_type
+
+From: Qiushi Wu <wu000273@umn.edu>
+
+[ Upstream commit aa8ba13cae3134b8ef1c1b6879f66372531da738 ]
+
+kobject_init_and_add() takes reference even when it fails.
+If this function returns an error, kobject_put() must be called to
+properly clean up the memory associated with the object. Thus,
+replace kfree() by kobject_put() to fix this issue. Previous
+commit "b8eb718348b8" fixed a similar problem.
+
+Fixes: 7b96953bc640 ("vfio: Mediated device Core driver")
+Signed-off-by: Qiushi Wu <wu000273@umn.edu>
+Reviewed-by: Cornelia Huck <cohuck@redhat.com>
+Reviewed-by: Kirti Wankhede <kwankhede@nvidia.com>
+Signed-off-by: Alex Williamson <alex.williamson@redhat.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/vfio/mdev/mdev_sysfs.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/drivers/vfio/mdev/mdev_sysfs.c b/drivers/vfio/mdev/mdev_sysfs.c
+index e7770b511d033..1692a0cc30360 100644
+--- a/drivers/vfio/mdev/mdev_sysfs.c
++++ b/drivers/vfio/mdev/mdev_sysfs.c
+@@ -113,7 +113,7 @@ struct mdev_type *add_mdev_supported_type(struct mdev_parent *parent,
+                                  "%s-%s", dev_driver_string(parent->dev),
+                                  group->name);
+       if (ret) {
+-              kfree(type);
++              kobject_put(&type->kobj);
+               return ERR_PTR(ret);
+       }
+-- 
+2.25.1
+
diff --git a/queue-4.19/vfio-pci-fix-memory-leaks-in-alloc_perm_bits.patch b/queue-4.19/vfio-pci-fix-memory-leaks-in-alloc_perm_bits.patch
new file mode 100644 (file)
index 0000000..88d7f1a
--- /dev/null
@@ -0,0 +1,74 @@
+From 7c921ffca290b5bffbd9f6b8569a380b293ad0d2 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Sun, 10 May 2020 12:16:56 -0400
+Subject: vfio/pci: fix memory leaks in alloc_perm_bits()
+
+From: Qian Cai <cai@lca.pw>
+
+[ Upstream commit 3e63b94b6274324ff2e7d8615df31586de827c4e ]
+
+vfio_pci_disable() calls vfio_config_free() but forgets to call
+free_perm_bits() resulting in memory leaks,
+
+unreferenced object 0xc000000c4db2dee0 (size 16):
+  comm "qemu-kvm", pid 4305, jiffies 4295020272 (age 3463.780s)
+  hex dump (first 16 bytes):
+    00 00 ff 00 ff ff ff ff ff ff ff ff ff ff 00 00  ................
+  backtrace:
+    [<00000000a6a4552d>] alloc_perm_bits+0x58/0xe0 [vfio_pci]
+    [<00000000ac990549>] vfio_config_init+0xdf0/0x11b0 [vfio_pci]
+    init_pci_cap_msi_perm at drivers/vfio/pci/vfio_pci_config.c:1125
+    (inlined by) vfio_msi_cap_len at drivers/vfio/pci/vfio_pci_config.c:1180
+    (inlined by) vfio_cap_len at drivers/vfio/pci/vfio_pci_config.c:1241
+    (inlined by) vfio_cap_init at drivers/vfio/pci/vfio_pci_config.c:1468
+    (inlined by) vfio_config_init at drivers/vfio/pci/vfio_pci_config.c:1707
+    [<000000006db873a1>] vfio_pci_open+0x234/0x700 [vfio_pci]
+    [<00000000630e1906>] vfio_group_fops_unl_ioctl+0x8e0/0xb84 [vfio]
+    [<000000009e34c54f>] ksys_ioctl+0xd8/0x130
+    [<000000006577923d>] sys_ioctl+0x28/0x40
+    [<000000006d7b1cf2>] system_call_exception+0x114/0x1e0
+    [<0000000008ea7dd5>] system_call_common+0xf0/0x278
+unreferenced object 0xc000000c4db2e330 (size 16):
+  comm "qemu-kvm", pid 4305, jiffies 4295020272 (age 3463.780s)
+  hex dump (first 16 bytes):
+    00 ff ff 00 ff ff ff ff ff ff ff ff ff ff 00 00  ................
+  backtrace:
+    [<000000004c71914f>] alloc_perm_bits+0x44/0xe0 [vfio_pci]
+    [<00000000ac990549>] vfio_config_init+0xdf0/0x11b0 [vfio_pci]
+    [<000000006db873a1>] vfio_pci_open+0x234/0x700 [vfio_pci]
+    [<00000000630e1906>] vfio_group_fops_unl_ioctl+0x8e0/0xb84 [vfio]
+    [<000000009e34c54f>] ksys_ioctl+0xd8/0x130
+    [<000000006577923d>] sys_ioctl+0x28/0x40
+    [<000000006d7b1cf2>] system_call_exception+0x114/0x1e0
+    [<0000000008ea7dd5>] system_call_common+0xf0/0x278
+
+Fixes: 89e1f7d4c66d ("vfio: Add PCI device driver")
+Signed-off-by: Qian Cai <cai@lca.pw>
+[aw: rolled in follow-up patch]
+Signed-off-by: Alex Williamson <alex.williamson@redhat.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/vfio/pci/vfio_pci_config.c | 7 +++++--
+ 1 file changed, 5 insertions(+), 2 deletions(-)
+
+diff --git a/drivers/vfio/pci/vfio_pci_config.c b/drivers/vfio/pci/vfio_pci_config.c
+index 423ea1f98441a..c2d300bc37f64 100644
+--- a/drivers/vfio/pci/vfio_pci_config.c
++++ b/drivers/vfio/pci/vfio_pci_config.c
+@@ -1732,8 +1732,11 @@ void vfio_config_free(struct vfio_pci_device *vdev)
+       vdev->vconfig = NULL;
+       kfree(vdev->pci_config_map);
+       vdev->pci_config_map = NULL;
+-      kfree(vdev->msi_perm);
+-      vdev->msi_perm = NULL;
++      if (vdev->msi_perm) {
++              free_perm_bits(vdev->msi_perm);
++              kfree(vdev->msi_perm);
++              vdev->msi_perm = NULL;
++      }
+ }
+ /*
+-- 
+2.25.1
+
diff --git a/queue-4.19/vfio-pci-mask-cap-zero.patch b/queue-4.19/vfio-pci-mask-cap-zero.patch
new file mode 100644 (file)
index 0000000..5fa7f16
--- /dev/null
@@ -0,0 +1,50 @@
+From 29300b4e66c43b48272016908d845b1343665fe2 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Wed, 8 Apr 2020 11:45:28 -0600
+Subject: vfio-pci: Mask cap zero
+
+From: Alex Williamson <alex.williamson@redhat.com>
+
+[ Upstream commit bc138db1b96264b9c1779cf18d5a3b186aa90066 ]
+
+The PCI Code and ID Assignment Specification changed capability ID 0
+from reserved to a NULL capability in the v1.1 revision.  The NULL
+capability is defined to include only the 16-bit capability header,
+ie. only the ID and next pointer.  Unfortunately vfio-pci creates a
+map of config space, where ID 0 is used to reserve the standard type
+0 header.  Finding an actual capability with this ID therefore results
+in a bogus range marked in that map and conflicts with subsequent
+capabilities.  As this seems to be a dummy capability anyway and we
+already support dropping capabilities, let's hide this one rather than
+delving into the potentially subtle dependencies within our map.
+
+Seen on an NVIDIA Tesla T4.
+
+Reviewed-by: Cornelia Huck <cohuck@redhat.com>
+Signed-off-by: Alex Williamson <alex.williamson@redhat.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/vfio/pci/vfio_pci_config.c | 7 ++++++-
+ 1 file changed, 6 insertions(+), 1 deletion(-)
+
+diff --git a/drivers/vfio/pci/vfio_pci_config.c b/drivers/vfio/pci/vfio_pci_config.c
+index c2d300bc37f64..36bc8f104e42e 100644
+--- a/drivers/vfio/pci/vfio_pci_config.c
++++ b/drivers/vfio/pci/vfio_pci_config.c
+@@ -1464,7 +1464,12 @@ static int vfio_cap_init(struct vfio_pci_device *vdev)
+               if (ret)
+                       return ret;
+-              if (cap <= PCI_CAP_ID_MAX) {
++              /*
++               * ID 0 is a NULL capability, conflicting with our fake
++               * PCI_CAP_ID_BASIC.  As it has no content, consider it
++               * hidden for now.
++               */
++              if (cap && cap <= PCI_CAP_ID_MAX) {
+                       len = pci_cap_length[cap];
+                       if (len == 0xFF) { /* Variable length */
+                               len = vfio_cap_len(vdev, cap, pos);
+-- 
+2.25.1
+
diff --git a/queue-4.19/watchdog-da9062-no-need-to-ping-manually-before-sett.patch b/queue-4.19/watchdog-da9062-no-need-to-ping-manually-before-sett.patch
new file mode 100644 (file)
index 0000000..0a03be5
--- /dev/null
@@ -0,0 +1,49 @@
+From 0ff5a8951e9d52119b853173a718d2ba0238dba2 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Fri, 3 Apr 2020 15:07:28 +0200
+Subject: watchdog: da9062: No need to ping manually before setting timeout
+
+From: Stefan Riedmueller <s.riedmueller@phytec.de>
+
+[ Upstream commit a0948ddba65f4f6d3cfb5e2b84685485d0452966 ]
+
+There is actually no need to ping the watchdog before disabling it
+during timeout change. Disabling the watchdog already takes care of
+resetting the counter.
+
+This fixes an issue during boot when the userspace watchdog handler takes
+over and the watchdog is already running. Opening the watchdog in this case
+leads to the first ping and directly after that without the required
+heartbeat delay a second ping issued by the set_timeout call. Due to the
+missing delay this resulted in a reset.
+
+Signed-off-by: Stefan Riedmueller <s.riedmueller@phytec.de>
+Reviewed-by: Guenter Roeck <linux@roeck-us.net>
+Reviewed-by: Adam Thomson <Adam.Thomson.Opensource@diasemi.com>
+Link: https://lore.kernel.org/r/20200403130728.39260-3-s.riedmueller@phytec.de
+Signed-off-by: Guenter Roeck <linux@roeck-us.net>
+Signed-off-by: Wim Van Sebroeck <wim@linux-watchdog.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/watchdog/da9062_wdt.c | 5 -----
+ 1 file changed, 5 deletions(-)
+
+diff --git a/drivers/watchdog/da9062_wdt.c b/drivers/watchdog/da9062_wdt.c
+index 7f0a8e6352860..132d45d003ce4 100644
+--- a/drivers/watchdog/da9062_wdt.c
++++ b/drivers/watchdog/da9062_wdt.c
+@@ -60,11 +60,6 @@ static int da9062_wdt_update_timeout_register(struct da9062_watchdog *wdt,
+                                             unsigned int regval)
+ {
+       struct da9062 *chip = wdt->hw;
+-      int ret;
+-
+-      ret = da9062_reset_watchdog_timer(wdt);
+-      if (ret)
+-              return ret;
+       regmap_update_bits(chip->regmap,
+                                 DA9062AA_CONTROL_D,
+-- 
+2.25.1
+
diff --git a/queue-4.19/x86-apic-make-tsc-deadline-timer-detection-message-v.patch b/queue-4.19/x86-apic-make-tsc-deadline-timer-detection-message-v.patch
new file mode 100644 (file)
index 0000000..1dd430e
--- /dev/null
@@ -0,0 +1,47 @@
+From e1958a198c0c0c4029c7b8d5c603fd78a60bbc52 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Mon, 25 May 2020 12:38:39 +0200
+Subject: x86/apic: Make TSC deadline timer detection message visible
+
+From: Borislav Petkov <bp@suse.de>
+
+[ Upstream commit de308d1815c9e8fe602a958c5c76142ff6501d75 ]
+
+The commit
+
+  c84cb3735fd5 ("x86/apic: Move TSC deadline timer debug printk")
+
+removed the message which said that the deadline timer was enabled.
+It added a pr_debug() message which is issued when deadline timer
+validation succeeds.
+
+Well, issued only when CONFIG_DYNAMIC_DEBUG is enabled - otherwise
+pr_debug() calls get optimized away if DEBUG is not defined in the
+compilation unit.
+
+Therefore, make the above message pr_info() so that it is visible in
+dmesg.
+
+Signed-off-by: Borislav Petkov <bp@suse.de>
+Link: https://lkml.kernel.org/r/20200525104218.27018-1-bp@alien8.de
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ arch/x86/kernel/apic/apic.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/arch/x86/kernel/apic/apic.c b/arch/x86/kernel/apic/apic.c
+index 53dc8492f02ff..e9456a2eef585 100644
+--- a/arch/x86/kernel/apic/apic.c
++++ b/arch/x86/kernel/apic/apic.c
+@@ -2024,7 +2024,7 @@ void __init init_apic_mappings(void)
+       unsigned int new_apicid;
+       if (apic_validate_deadline_timer())
+-              pr_debug("TSC deadline timer available\n");
++              pr_info("TSC deadline timer available\n");
+       if (x2apic_mode) {
+               boot_cpu_physical_apicid = read_apic_id();
+-- 
+2.25.1
+
diff --git a/queue-4.19/x86-idt-keep-spurious-entries-unset-in-system_vector.patch b/queue-4.19/x86-idt-keep-spurious-entries-unset-in-system_vector.patch
new file mode 100644 (file)
index 0000000..38e61b1
--- /dev/null
@@ -0,0 +1,52 @@
+From f806d8158ad89099f3cf969d50314419452fdc17 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Tue, 28 Apr 2020 11:38:24 +0200
+Subject: x86/idt: Keep spurious entries unset in system_vectors
+
+From: Vitaly Kuznetsov <vkuznets@redhat.com>
+
+[ Upstream commit 1f1fbc70c10e81f70e9fbe2102d439c883269811 ]
+
+With commit dc20b2d52653 ("x86/idt: Move interrupt gate initialization to
+IDT code") non assigned system vectors are also marked as used in
+'used_vectors' (now 'system_vectors') bitmap. This makes checks in
+arch_show_interrupts() whether a particular system vector is allocated to
+always pass and e.g. 'Hyper-V reenlightenment interrupts' entry always
+shows up in /proc/interrupts.
+
+Another side effect of having all unassigned system vectors marked as used
+is that irq_matrix_debug_show() will wrongly count them among 'System'
+vectors.
+
+As it is now ensured that alloc_intr_gate() is not called after init, it is
+possible to leave unused entries in 'system_vectors' unset to fix these
+issues.
+
+Signed-off-by: Vitaly Kuznetsov <vkuznets@redhat.com>
+Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
+Link: https://lkml.kernel.org/r/20200428093824.1451532-4-vkuznets@redhat.com
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ arch/x86/kernel/idt.c | 6 +++++-
+ 1 file changed, 5 insertions(+), 1 deletion(-)
+
+diff --git a/arch/x86/kernel/idt.c b/arch/x86/kernel/idt.c
+index a7e0e975043fd..e1f9355307b81 100644
+--- a/arch/x86/kernel/idt.c
++++ b/arch/x86/kernel/idt.c
+@@ -320,7 +320,11 @@ void __init idt_setup_apic_and_irq_gates(void)
+ #ifdef CONFIG_X86_LOCAL_APIC
+       for_each_clear_bit_from(i, system_vectors, NR_VECTORS) {
+-              set_bit(i, system_vectors);
++              /*
++               * Don't set the non assigned system vectors in the
++               * system_vectors bitmap. Otherwise they show up in
++               * /proc/interrupts.
++               */
+               entry = spurious_entries_start + 8 * (i - FIRST_SYSTEM_VECTOR);
+               set_intr_gate(i, entry);
+       }
+-- 
+2.25.1
+
diff --git a/queue-4.19/x86-purgatory-disable-various-profiling-and-sanitizi.patch b/queue-4.19/x86-purgatory-disable-various-profiling-and-sanitizi.patch
new file mode 100644 (file)
index 0000000..851feb0
--- /dev/null
@@ -0,0 +1,62 @@
+From c6ac26a493bb0c7a0d48dfc5d05ac40fdd10a79f Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Tue, 17 Mar 2020 14:08:40 +0100
+Subject: x86/purgatory: Disable various profiling and sanitizing options
+
+From: Hans de Goede <hdegoede@redhat.com>
+
+[ Upstream commit e2ac07c06058ae2d58b45bbf2a2a352771d76fcb ]
+
+Since the purgatory is a special stand-alone binary, various profiling
+and sanitizing options must be disabled. Having these options enabled
+typically will cause dependencies on various special symbols exported by
+special libs / stubs used by these frameworks. Since the purgatory is
+special, it is not linked against these stubs causing missing symbols in
+the purgatory if these options are not disabled.
+
+Sync the set of disabled profiling and sanitizing options with that from
+drivers/firmware/efi/libstub/Makefile, adding
+-DDISABLE_BRANCH_PROFILING to the CFLAGS and setting:
+
+  GCOV_PROFILE                    := n
+  UBSAN_SANITIZE                  := n
+
+This fixes broken references to ftrace_likely_update() when
+CONFIG_TRACE_BRANCH_PROFILING is enabled and to __gcov_init() and
+__gcov_exit() when CONFIG_GCOV_KERNEL is enabled.
+
+Signed-off-by: Hans de Goede <hdegoede@redhat.com>
+Signed-off-by: Borislav Petkov <bp@suse.de>
+Link: https://lkml.kernel.org/r/20200317130841.290418-1-hdegoede@redhat.com
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ arch/x86/purgatory/Makefile | 5 ++++-
+ 1 file changed, 4 insertions(+), 1 deletion(-)
+
+diff --git a/arch/x86/purgatory/Makefile b/arch/x86/purgatory/Makefile
+index b81b5172cf994..2cfa0caef1336 100644
+--- a/arch/x86/purgatory/Makefile
++++ b/arch/x86/purgatory/Makefile
+@@ -15,7 +15,10 @@ $(obj)/sha256.o: $(srctree)/lib/sha256.c FORCE
+ LDFLAGS_purgatory.ro := -e purgatory_start -r --no-undefined -nostdlib -z nodefaultlib
+ targets += purgatory.ro
++# Sanitizer, etc. runtimes are unavailable and cannot be linked here.
++GCOV_PROFILE  := n
+ KASAN_SANITIZE        := n
++UBSAN_SANITIZE        := n
+ KCOV_INSTRUMENT := n
+ # These are adjustments to the compiler flags used for objects that
+@@ -23,7 +26,7 @@ KCOV_INSTRUMENT := n
+ PURGATORY_CFLAGS_REMOVE := -mcmodel=kernel
+ PURGATORY_CFLAGS := -mcmodel=large -ffreestanding -fno-zero-initialized-in-bss
+-PURGATORY_CFLAGS += $(DISABLE_STACKLEAK_PLUGIN)
++PURGATORY_CFLAGS += $(DISABLE_STACKLEAK_PLUGIN) -DDISABLE_BRANCH_PROFILING
+ # Default KBUILD_CFLAGS can have -pg option set when FTRACE is enabled. That
+ # in turn leaves some undefined symbols like __fentry__ in purgatory and not
+-- 
+2.25.1
+
diff --git a/queue-4.19/xdp-fix-xsk_generic_xmit-errno.patch b/queue-4.19/xdp-fix-xsk_generic_xmit-errno.patch
new file mode 100644 (file)
index 0000000..5344ce7
--- /dev/null
@@ -0,0 +1,45 @@
+From 47e476c7ca4e37bae18267e7d8562b482f5c3cfe Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Thu, 11 Jun 2020 13:11:06 +0800
+Subject: xdp: Fix xsk_generic_xmit errno
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+From: Li RongQing <lirongqing@baidu.com>
+
+[ Upstream commit aa2cad0600ed2ca6a0ab39948d4db1666b6c962b ]
+
+Propagate sock_alloc_send_skb error code, not set it to
+EAGAIN unconditionally, when fail to allocate skb, which
+might cause that user space unnecessary loops.
+
+Fixes: 35fcde7f8deb ("xsk: support for Tx")
+Signed-off-by: Li RongQing <lirongqing@baidu.com>
+Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
+Acked-by: Björn Töpel <bjorn.topel@intel.com>
+Link: https://lore.kernel.org/bpf/1591852266-24017-1-git-send-email-lirongqing@baidu.com
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ net/xdp/xsk.c | 4 +---
+ 1 file changed, 1 insertion(+), 3 deletions(-)
+
+diff --git a/net/xdp/xsk.c b/net/xdp/xsk.c
+index 72caa4fb13f47..9ff2ab63e6392 100644
+--- a/net/xdp/xsk.c
++++ b/net/xdp/xsk.c
+@@ -233,10 +233,8 @@ static int xsk_generic_xmit(struct sock *sk, struct msghdr *m,
+               len = desc.len;
+               skb = sock_alloc_send_skb(sk, len, 1, &err);
+-              if (unlikely(!skb)) {
+-                      err = -EAGAIN;
++              if (unlikely(!skb))
+                       goto out;
+-              }
+               skb_put(skb, len);
+               addr = desc.addr;
+-- 
+2.25.1
+
diff --git a/queue-4.19/yam-fix-possible-memory-leak-in-yam_init_driver.patch b/queue-4.19/yam-fix-possible-memory-leak-in-yam_init_driver.patch
new file mode 100644 (file)
index 0000000..32d54f9
--- /dev/null
@@ -0,0 +1,36 @@
+From 875e0bcf4bb080c6e2a05421b1c2d7f706211eca Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Thu, 4 Jun 2020 20:18:51 +0800
+Subject: yam: fix possible memory leak in yam_init_driver
+
+From: Wang Hai <wanghai38@huawei.com>
+
+[ Upstream commit 98749b7188affbf2900c2aab704a8853901d1139 ]
+
+If register_netdev(dev) fails, free_netdev(dev) needs
+to be called, otherwise a memory leak will occur.
+
+Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
+Reported-by: Hulk Robot <hulkci@huawei.com>
+Signed-off-by: Wang Hai <wanghai38@huawei.com>
+Signed-off-by: David S. Miller <davem@davemloft.net>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/net/hamradio/yam.c | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/drivers/net/hamradio/yam.c b/drivers/net/hamradio/yam.c
+index ba9df430fca6e..fdab498725878 100644
+--- a/drivers/net/hamradio/yam.c
++++ b/drivers/net/hamradio/yam.c
+@@ -1148,6 +1148,7 @@ static int __init yam_init_driver(void)
+               err = register_netdev(dev);
+               if (err) {
+                       printk(KERN_WARNING "yam: cannot register net device %s\n", dev->name);
++                      free_netdev(dev);
+                       goto error;
+               }
+               yam_devs[i] = dev;
+-- 
+2.25.1
+