]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
Fixes for 5.4
authorSasha Levin <sashal@kernel.org>
Mon, 6 Jun 2022 10:34:09 +0000 (06:34 -0400)
committerSasha Levin <sashal@kernel.org>
Mon, 6 Jun 2022 10:34:09 +0000 (06:34 -0400)
Signed-off-by: Sasha Levin <sashal@kernel.org>
199 files changed:
queue-5.4/acpi-pm-block-asus-b1400ceae-from-suspend-to-idle-by.patch [new file with mode: 0644]
queue-5.4/acpica-avoid-cache-flush-inside-virtual-machines.patch [new file with mode: 0644]
queue-5.4/alsa-jack-access-input_dev-under-mutex.patch [new file with mode: 0644]
queue-5.4/arm-dts-bcm2835-rpi-b-fix-gpio-line-names.patch [new file with mode: 0644]
queue-5.4/arm-dts-bcm2835-rpi-zero-w-fix-gpio-line-name-for-wi.patch [new file with mode: 0644]
queue-5.4/arm-dts-bcm2837-rpi-3-b-plus-fix-gpio-line-name-of-p.patch [new file with mode: 0644]
queue-5.4/arm-dts-bcm2837-rpi-cm3-io3-fix-gpio-line-names-for-.patch [new file with mode: 0644]
queue-5.4/arm-dts-exynos-add-atmel-24c128-fallback-to-samsung-.patch [new file with mode: 0644]
queue-5.4/arm-dts-ox820-align-interrupt-controller-node-name-w.patch [new file with mode: 0644]
queue-5.4/arm-dts-suniv-f1c100-fix-watchdog-compatible.patch [new file with mode: 0644]
queue-5.4/arm-hisi-add-missing-of_node_put-after-of_find_compa.patch [new file with mode: 0644]
queue-5.4/arm-mediatek-select-arch-timer-for-mt7629.patch [new file with mode: 0644]
queue-5.4/arm-omap1-clock-fix-uart-rate-reporting-algorithm.patch [new file with mode: 0644]
queue-5.4/arm-versatile-add-missing-of_node_put-in-dcscb_init.patch [new file with mode: 0644]
queue-5.4/arm64-compat-do-not-treat-syscall-number-as-esr_elx-.patch [new file with mode: 0644]
queue-5.4/arm64-dts-rockchip-move-drive-impedance-ohm-to-emmc-.patch [new file with mode: 0644]
queue-5.4/asoc-dapm-don-t-fold-register-value-changes-into-not.patch [new file with mode: 0644]
queue-5.4/asoc-fsl-fix-refcount-leak-in-imx_sgtl5000_probe.patch [new file with mode: 0644]
queue-5.4/asoc-max98357a-remove-dependency-on-gpiolib.patch [new file with mode: 0644]
queue-5.4/asoc-mediatek-fix-error-handling-in-mt8173_max98090_.patch [new file with mode: 0644]
queue-5.4/asoc-mediatek-fix-missing-of_node_put-in-mt2701_wm89.patch [new file with mode: 0644]
queue-5.4/asoc-mxs-saif-fix-refcount-leak-in-mxs_saif_probe.patch [new file with mode: 0644]
queue-5.4/asoc-rk3328-fix-disabling-mclk-on-pclk-probe-failure.patch [new file with mode: 0644]
queue-5.4/asoc-rt5645-fix-errorenous-cleanup-order.patch [new file with mode: 0644]
queue-5.4/asoc-tscs454-add-endianness-flag-in-snd_soc_componen.patch [new file with mode: 0644]
queue-5.4/asoc-wm2000-fix-missing-clk_disable_unprepare-on-err.patch [new file with mode: 0644]
queue-5.4/ath9k-fix-ar9003_get_eepmisc.patch [new file with mode: 0644]
queue-5.4/ath9k-fix-qca9561-pa-bias-level.patch [new file with mode: 0644]
queue-5.4/ath9k_htc-fix-potential-out-of-bounds-access-with-in.patch [new file with mode: 0644]
queue-5.4/b43-fix-assigning-negative-value-to-unsigned-variabl.patch [new file with mode: 0644]
queue-5.4/b43legacy-fix-assigning-negative-value-to-unsigned-v.patch [new file with mode: 0644]
queue-5.4/bluetooth-fix-dangling-sco_conn-and-use-after-free-i.patch [new file with mode: 0644]
queue-5.4/bpf-fix-excessive-memory-allocation-in-stack_map_all.patch [new file with mode: 0644]
queue-5.4/can-xilinx_can-mark-bit-timing-constants-as-const.patch [new file with mode: 0644]
queue-5.4/cpufreq-fix-possible-race-in-cpufreq-online-error-pa.patch [new file with mode: 0644]
queue-5.4/crypto-cryptd-protect-per-cpu-resource-by-disabling-.patch [new file with mode: 0644]
queue-5.4/crypto-marvell-cesa-ecb-does-not-iv.patch [new file with mode: 0644]
queue-5.4/dax-fix-cache-flush-on-pmd-mapped-pages.patch [new file with mode: 0644]
queue-5.4/dma-debug-change-allocation-mode-from-gfp_nowait-to-.patch [new file with mode: 0644]
queue-5.4/dmaengine-stm32-mdma-remove-gisr1-register.patch [new file with mode: 0644]
queue-5.4/drbd-fix-duplicate-array-initializer.patch [new file with mode: 0644]
queue-5.4/drivers-base-node.c-fix-compaction-sysfs-file-leak.patch [new file with mode: 0644]
queue-5.4/drm-amd-pm-fix-double-free-in-si_parse_power_table.patch [new file with mode: 0644]
queue-5.4/drm-amd-pm-fix-the-compile-warning.patch [new file with mode: 0644]
queue-5.4/drm-amdgpu-ucode-remove-firmware-load-type-check-in-.patch [new file with mode: 0644]
queue-5.4/drm-bridge-adv7511-clean-up-cec-adapter-when-probe-f.patch [new file with mode: 0644]
queue-5.4/drm-bridge-fix-error-handling-in-analogix_dp_probe.patch [new file with mode: 0644]
queue-5.4/drm-edid-fix-invalid-edid-extension-block-filtering.patch [new file with mode: 0644]
queue-5.4/drm-fix-edid-struct-for-old-arm-oabi-format.patch [new file with mode: 0644]
queue-5.4/drm-komeda-fix-an-undefined-behavior-bug-in-komeda_p.patch [new file with mode: 0644]
queue-5.4/drm-komeda-return-early-if-drm_universal_plane_init-.patch [new file with mode: 0644]
queue-5.4/drm-mali-dp-potential-dereference-of-null-pointer.patch [new file with mode: 0644]
queue-5.4/drm-mediatek-fix-mtk_cec_mask.patch [new file with mode: 0644]
queue-5.4/drm-msm-a6xx-fix-refcount-leak-in-a6xx_gpu_init.patch [new file with mode: 0644]
queue-5.4/drm-msm-disp-dpu1-set-vbif-hw-config-to-null-to-avoi.patch [new file with mode: 0644]
queue-5.4/drm-msm-dsi-fix-error-checks-and-return-values-for-d.patch [new file with mode: 0644]
queue-5.4/drm-msm-fix-error-check-return-value-of-irq_of_parse.patch [new file with mode: 0644]
queue-5.4/drm-msm-fix-possible-memory-leak-in-mdp5_crtc_cursor.patch [new file with mode: 0644]
queue-5.4/drm-msm-hdmi-check-return-value-after-calling-platfo.patch [new file with mode: 0644]
queue-5.4/drm-msm-hdmi-fix-error-check-return-value-of-irq_of_.patch [new file with mode: 0644]
queue-5.4/drm-msm-mdp5-return-error-code-in-mdp5_mixer_release.patch [new file with mode: 0644]
queue-5.4/drm-msm-mdp5-return-error-code-in-mdp5_pipe_release-.patch [new file with mode: 0644]
queue-5.4/drm-msm-return-an-error-pointer-in-msm_gem_prime_get.patch [new file with mode: 0644]
queue-5.4/drm-plane-move-range-check-for-format_count-earlier.patch [new file with mode: 0644]
queue-5.4/drm-rockchip-vop-fix-possible-null-ptr-deref-in-vop_.patch [new file with mode: 0644]
queue-5.4/drm-vc4-txp-don-t-set-txp_vstart_at_eof.patch [new file with mode: 0644]
queue-5.4/drm-vc4-txp-force-alpha-to-be-0xff-if-it-s-disabled.patch [new file with mode: 0644]
queue-5.4/drm-virtio-fix-null-pointer-dereference-in-virtio_gp.patch [new file with mode: 0644]
queue-5.4/efi-add-missing-prototype-for-efi_capsule_setup_info.patch [new file with mode: 0644]
queue-5.4/eth-tg3-silence-the-gcc-12-array-bounds-warning.patch [new file with mode: 0644]
queue-5.4/ext4-reject-the-commit-option-on-ext2-filesystems.patch [new file with mode: 0644]
queue-5.4/f2fs-fix-dereference-of-stale-list-iterator-after-lo.patch [new file with mode: 0644]
queue-5.4/fat-add-ratelimit-to-fat-_ent_bread.patch [new file with mode: 0644]
queue-5.4/fbcon-consistently-protect-deferred_takeover-with-co.patch [new file with mode: 0644]
queue-5.4/firmware-arm_scmi-fix-list-protocols-enumeration-in-.patch [new file with mode: 0644]
queue-5.4/fs-jfs-fix-possible-null-pointer-dereference-in-dbfr.patch [new file with mode: 0644]
queue-5.4/fsnotify-fix-wrong-lockdep-annotations.patch [new file with mode: 0644]
queue-5.4/hid-bigben-fix-slab-out-of-bounds-write-in-bigben_pr.patch [new file with mode: 0644]
queue-5.4/hid-elan-fix-potential-double-free-in-elan_input_con.patch [new file with mode: 0644]
queue-5.4/hid-hid-led-fix-maximum-brightness-for-dream-cheeky.patch [new file with mode: 0644]
queue-5.4/hwmon-make-chip-parameter-for-with_info-api-mandator.patch [new file with mode: 0644]
queue-5.4/i2c-at91-initialize-dma_buf-in-at91_twi_xfer.patch [new file with mode: 0644]
queue-5.4/i2c-at91-use-dma-safe-buffers.patch [new file with mode: 0644]
queue-5.4/ib-rdmavt-add-missing-locks-in-rvt_ruc_loopback.patch [new file with mode: 0644]
queue-5.4/inotify-show-inotify-mask-flags-in-proc-fdinfo.patch [new file with mode: 0644]
queue-5.4/input-sparcspkr-fix-refcount-leak-in-bbc_beep_probe.patch [new file with mode: 0644]
queue-5.4/input-stmfts-do-not-leave-device-disabled-in-stmfts_.patch [new file with mode: 0644]
queue-5.4/iomap-iomap_write_failed-fix.patch [new file with mode: 0644]
queue-5.4/iommu-amd-increase-timeout-waiting-for-ga-log-enable.patch [new file with mode: 0644]
queue-5.4/iommu-mediatek-add-list_del-in-mtk_iommu_remove.patch [new file with mode: 0644]
queue-5.4/ipc-mqueue-use-get_tree_nodev-in-mqueue_get_tree.patch [new file with mode: 0644]
queue-5.4/ipmi-fix-pr_fmt-to-avoid-compilation-issues.patch [new file with mode: 0644]
queue-5.4/ipmi-ssif-check-for-null-msg-when-handling-events-an.patch [new file with mode: 0644]
queue-5.4/ipv6-don-t-send-rs-packets-to-the-interface-of-arphr.patch [new file with mode: 0644]
queue-5.4/ipv6-fix-locking-issues-with-loops-over-idev-addr_li.patch [new file with mode: 0644]
queue-5.4/ipw2x00-fix-potential-null-dereference-in-libipw_xmi.patch [new file with mode: 0644]
queue-5.4/irqchip-aspeed-i2c-ic-fix-irq_of_parse_and_map-retur.patch [new file with mode: 0644]
queue-5.4/irqchip-exiu-fix-acknowledgment-of-edge-triggered-in.patch [new file with mode: 0644]
queue-5.4/kvm-nvmx-leave-most-vm-exit-info-fields-unmodified-o.patch [new file with mode: 0644]
queue-5.4/m68k-math-emu-fix-dependencies-of-math-emulation-sup.patch [new file with mode: 0644]
queue-5.4/macintosh-via-pmu-and-via-cuda-need-rtc_lib.patch [new file with mode: 0644]
queue-5.4/macintosh-via-pmu-fix-build-failure-when-config_inpu.patch [new file with mode: 0644]
queue-5.4/mailbox-forward-the-hrtimer-if-not-queued-and-under-.patch [new file with mode: 0644]
queue-5.4/md-bitmap-don-t-set-sb-values-if-can-t-pass-sanity-c.patch [new file with mode: 0644]
queue-5.4/media-aspeed-fix-an-error-handling-path-in-aspeed_vi.patch [new file with mode: 0644]
queue-5.4/media-cec-adap.c-fix-is_configuring-state.patch [new file with mode: 0644]
queue-5.4/media-coda-limit-frame-interval-enumeration-to-suppo.patch [new file with mode: 0644]
queue-5.4/media-cx25821-fix-the-warning-when-removing-the-modu.patch [new file with mode: 0644]
queue-5.4/media-exynos4-is-change-clk_disable-to-clk_disable_u.patch [new file with mode: 0644]
queue-5.4/media-exynos4-is-fix-compile-warning.patch [new file with mode: 0644]
queue-5.4/media-ov7670-remove-ov7670_power_off-from-ov7670_rem.patch [new file with mode: 0644]
queue-5.4/media-pci-cx23885-fix-the-error-handling-in-cx23885_.patch [new file with mode: 0644]
queue-5.4/media-pvrusb2-fix-array-index-out-of-bounds-in-pvr2_.patch [new file with mode: 0644]
queue-5.4/media-st-delta-fix-pm-disable-depth-imbalance-in-del.patch [new file with mode: 0644]
queue-5.4/media-uvcvideo-fix-missing-check-to-determine-if-ele.patch [new file with mode: 0644]
queue-5.4/media-venus-hfi-avoid-null-dereference-in-deinit.patch [new file with mode: 0644]
queue-5.4/media-vsp1-fix-offset-calculation-for-plane-cropping.patch [new file with mode: 0644]
queue-5.4/mfd-davinci_voicecodec-fix-possible-null-ptr-deref-d.patch [new file with mode: 0644]
queue-5.4/mfd-ipaq-micro-fix-error-check-return-value-of-platf.patch [new file with mode: 0644]
queue-5.4/misc-ocxl-fix-possible-double-free-in-ocxl_file_regi.patch [new file with mode: 0644]
queue-5.4/mlxsw-spectrum_dcb-do-not-warn-about-priority-change.patch [new file with mode: 0644]
queue-5.4/mmc-jz4740-apply-dma-engine-limits-to-maximum-segmen.patch [new file with mode: 0644]
queue-5.4/mwifiex-add-mutex-lock-for-call-in-mwifiex_dfs_chan_.patch [new file with mode: 0644]
queue-5.4/nbd-fix-hung-on-disconnect-request-if-socket-is-clos.patch [new file with mode: 0644]
queue-5.4/net-mlx5-fs-delete-the-fte-when-there-are-no-rules-a.patch [new file with mode: 0644]
queue-5.4/net-phy-micrel-allow-probing-without-.driver_data.patch [new file with mode: 0644]
queue-5.4/net-remove-two-bug-from-skb_checksum_help.patch [new file with mode: 0644]
queue-5.4/net-smc-postpone-sk_refcnt-increment-in-connect.patch [new file with mode: 0644]
queue-5.4/nfc-hci-fix-sleep-in-atomic-context-bugs-in-nfc_hci_.patch [new file with mode: 0644]
queue-5.4/nfc-null-out-the-dev-rfkill-to-prevent-uaf.patch [new file with mode: 0644]
queue-5.4/nfs-do-not-report-eintr-erestartsys-as-mapping-error.patch [new file with mode: 0644]
queue-5.4/nfs-do-not-report-flush-errors-in-nfs_write_end.patch [new file with mode: 0644]
queue-5.4/nfs-don-t-report-errors-from-nfs_pageio_complete-mor.patch [new file with mode: 0644]
queue-5.4/nfsv4-pnfs-do-not-fail-i-o-when-we-fail-to-allocate-.patch [new file with mode: 0644]
queue-5.4/nl80211-show-ssid-for-p2p_go-interfaces.patch [new file with mode: 0644]
queue-5.4/nvdimm-allow-overwrite-in-the-presence-of-disabled-d.patch [new file with mode: 0644]
queue-5.4/nvme-pci-fix-a-null-pointer-dereference-in-nvme_allo.patch [new file with mode: 0644]
queue-5.4/of-overlay-do-not-break-notify-on-notify_-ok-stop.patch [new file with mode: 0644]
queue-5.4/openrisc-start-cpu-timer-early-in-boot.patch [new file with mode: 0644]
queue-5.4/pci-avoid-pci_dev_lock-ab-ba-deadlock-with-sriov_num.patch [new file with mode: 0644]
queue-5.4/pci-cadence-fix-find_first_zero_bit-limit.patch [new file with mode: 0644]
queue-5.4/pci-imx6-fix-perst-start-up-sequence.patch [new file with mode: 0644]
queue-5.4/pci-rockchip-fix-find_first_zero_bit-limit.patch [new file with mode: 0644]
queue-5.4/perf-amd-ibs-use-interrupt-regs-ip-for-stack-unwindi.patch [new file with mode: 0644]
queue-5.4/perf-c2c-use-stdio-interface-if-slang-is-not-support.patch [new file with mode: 0644]
queue-5.4/perf-jevents-fix-event-syntax-error-caused-by-extsel.patch [new file with mode: 0644]
queue-5.4/perf-tools-add-missing-headers-needed-by-util-data.h.patch [new file with mode: 0644]
queue-5.4/pinctrl-mvebu-fix-irq_of_parse_and_map-return-value.patch [new file with mode: 0644]
queue-5.4/pm-devfreq-rk3399_dmc-disable-edev-on-remove.patch [new file with mode: 0644]
queue-5.4/powerpc-4xx-cpm-fix-return-value-of-__setup-handler.patch [new file with mode: 0644]
queue-5.4/powerpc-64-only-warn-if-__pa-__va-called-with-bad-ad.patch [new file with mode: 0644]
queue-5.4/powerpc-8xx-export-cpm_setbrg-for-modules.patch [new file with mode: 0644]
queue-5.4/powerpc-fadump-fix-fadump-to-work-with-a-different-e.patch [new file with mode: 0644]
queue-5.4/powerpc-fadump-fix-pt_load-segment-for-boot-memory-a.patch [new file with mode: 0644]
queue-5.4/powerpc-fsl_rio-fix-refcount-leak-in-fsl_rio_setup.patch [new file with mode: 0644]
queue-5.4/powerpc-idle-fix-return-value-of-__setup-handler.patch [new file with mode: 0644]
queue-5.4/powerpc-iommu-add-missing-of_node_put-in-iommu_init_.patch [new file with mode: 0644]
queue-5.4/powerpc-perf-fix-the-threshold-compare-group-constra.patch [new file with mode: 0644]
queue-5.4/powerpc-powernv-fix-missing-of_node_put-in-uv_init.patch [new file with mode: 0644]
queue-5.4/powerpc-xics-fix-refcount-leak-in-icp_opal_init.patch [new file with mode: 0644]
queue-5.4/proc-fix-dentry-inode-overinstantiating-under-proc-p.patch [new file with mode: 0644]
queue-5.4/rdma-hfi1-prevent-panic-when-sdma-is-disabled.patch [new file with mode: 0644]
queue-5.4/rdma-hfi1-prevent-use-of-lock-before-it-is-initializ.patch [new file with mode: 0644]
queue-5.4/regulator-core-fix-enable_count-imbalance-with-exclu.patch [new file with mode: 0644]
queue-5.4/regulator-pfuze100-fix-refcount-leak-in-pfuze_parse_.patch [new file with mode: 0644]
queue-5.4/revert-cpufreq-fix-possible-race-in-cpufreq-online-e.patch [new file with mode: 0644]
queue-5.4/rtlwifi-use-pr_warn-instead-of-warn_once.patch [new file with mode: 0644]
queue-5.4/rxrpc-don-t-let-ack.previouspacket-regress.patch [new file with mode: 0644]
queue-5.4/rxrpc-don-t-try-to-resend-the-request-if-we-re-recei.patch [new file with mode: 0644]
queue-5.4/rxrpc-fix-decision-on-when-to-generate-an-idle-ack.patch [new file with mode: 0644]
queue-5.4/rxrpc-fix-listen-setting-the-bar-too-high-for-the-pr.patch [new file with mode: 0644]
queue-5.4/rxrpc-fix-overlapping-ack-accounting.patch [new file with mode: 0644]
queue-5.4/rxrpc-return-an-error-to-sendmsg-if-call-failed.patch [new file with mode: 0644]
queue-5.4/s390-preempt-disable-__preempt_count_add-optimizatio.patch [new file with mode: 0644]
queue-5.4/sched-fair-fix-cfs_rq_clock_pelt-for-throttled-cfs_r.patch [new file with mode: 0644]
queue-5.4/scripts-faddr2line-fix-overlapping-text-section-fail.patch [new file with mode: 0644]
queue-5.4/scsi-fcoe-fix-wstringop-overflow-warnings-in-fcoe_ww.patch [new file with mode: 0644]
queue-5.4/scsi-megaraid-fix-error-check-return-value-of-regist.patch [new file with mode: 0644]
queue-5.4/scsi-ufs-core-exclude-uecxx-from-sfr-dump-list.patch [new file with mode: 0644]
queue-5.4/sctp-read-sk-sk_bound_dev_if-once-in-sctp_rcv.patch [new file with mode: 0644]
queue-5.4/selftests-bpf-fix-btf_dump-btf_dump-due-to-recent-cl.patch [new file with mode: 0644]
queue-5.4/series
queue-5.4/soc-qcom-smp2p-fix-missing-of_node_put-in-smp2p_pars.patch [new file with mode: 0644]
queue-5.4/soc-qcom-smsm-fix-missing-of_node_put-in-smsm_parse_.patch [new file with mode: 0644]
queue-5.4/spi-img-spfi-fix-pm_runtime_get_sync-error-checking.patch [new file with mode: 0644]
queue-5.4/spi-spi-rspi-remove-setting-src-dst-_-addr-addr_widt.patch [new file with mode: 0644]
queue-5.4/spi-spi-ti-qspi-fix-return-value-handling-of-wait_fo.patch [new file with mode: 0644]
queue-5.4/spi-stm32-qspi-fix-wait_cmd-timeout-in-apm-mode.patch [new file with mode: 0644]
queue-5.4/thermal-drivers-broadcom-fix-potential-null-derefere.patch [new file with mode: 0644]
queue-5.4/tools-power-turbostat-fix-icx-dram-power-numbers.patch [new file with mode: 0644]
queue-5.4/tracing-incorrect-isolate_mote_t-cast-in-mm_vmscan_l.patch [new file with mode: 0644]
queue-5.4/tty-fix-deadlock-caused-by-calling-printk-under-tty_.patch [new file with mode: 0644]
queue-5.4/video-fbdev-clcdfb-fix-refcount-leak-in-clcdfb_of_vr.patch [new file with mode: 0644]
queue-5.4/virtio_blk-fix-the-discard_granularity-and-discard_a.patch [new file with mode: 0644]
queue-5.4/x86-delay-fix-the-wrong-asm-constraint-in-delay_loop.patch [new file with mode: 0644]
queue-5.4/x86-fix-return-value-of-__setup-handlers.patch [new file with mode: 0644]
queue-5.4/x86-mm-cleanup-the-control_va_addr_alignment-__setup.patch [new file with mode: 0644]
queue-5.4/x86-pm-fix-false-positive-kmemleak-report-in-msr_bui.patch [new file with mode: 0644]
queue-5.4/x86-speculation-add-missing-prototype-for-unpriv_ebp.patch [new file with mode: 0644]

diff --git a/queue-5.4/acpi-pm-block-asus-b1400ceae-from-suspend-to-idle-by.patch b/queue-5.4/acpi-pm-block-asus-b1400ceae-from-suspend-to-idle-by.patch
new file mode 100644 (file)
index 0000000..4aadf60
--- /dev/null
@@ -0,0 +1,57 @@
+From 630e9f96986495a538c50684a7c89f35c7ac9629 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Tue, 10 May 2022 08:11:36 -0500
+Subject: ACPI: PM: Block ASUS B1400CEAE from suspend to idle by default
+
+From: Mario Limonciello <mario.limonciello@amd.com>
+
+[ Upstream commit d52848620de00cde4a3a5df908e231b8c8868250 ]
+
+ASUS B1400CEAE fails to resume from suspend to idle by default.  This was
+bisected back to commit df4f9bc4fb9c ("nvme-pci: add support for ACPI
+StorageD3Enable property") but this is a red herring to the problem.
+
+Before this commit the system wasn't getting into deepest sleep state.
+Presumably this commit is allowing entry into deepest sleep state as
+advertised by firmware, but there are some other problems related to
+the wakeup.
+
+As it is confirmed the system works properly with S3, set the default for
+this system to S3.
+
+Reported-by: Jian-Hong Pan <jhp@endlessos.org>
+Link: https://bugzilla.kernel.org/show_bug.cgi?id=215742
+Signed-off-by: Mario Limonciello <mario.limonciello@amd.com>
+Tested-by: Jian-Hong Pan <jhp@endlessos.org>
+Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/acpi/sleep.c | 12 ++++++++++++
+ 1 file changed, 12 insertions(+)
+
+diff --git a/drivers/acpi/sleep.c b/drivers/acpi/sleep.c
+index b0e23e3fe0d5..34966128293b 100644
+--- a/drivers/acpi/sleep.c
++++ b/drivers/acpi/sleep.c
+@@ -374,6 +374,18 @@ static const struct dmi_system_id acpisleep_dmi_table[] __initconst = {
+               DMI_MATCH(DMI_PRODUCT_NAME, "20GGA00L00"),
+               },
+       },
++      /*
++       * ASUS B1400CEAE hangs on resume from suspend (see
++       * https://bugzilla.kernel.org/show_bug.cgi?id=215742).
++       */
++      {
++      .callback = init_default_s3,
++      .ident = "ASUS B1400CEAE",
++      .matches = {
++              DMI_MATCH(DMI_SYS_VENDOR, "ASUSTeK COMPUTER INC."),
++              DMI_MATCH(DMI_PRODUCT_NAME, "ASUS EXPERTBOOK B1400CEAE"),
++              },
++      },
+       {},
+ };
+-- 
+2.35.1
+
diff --git a/queue-5.4/acpica-avoid-cache-flush-inside-virtual-machines.patch b/queue-5.4/acpica-avoid-cache-flush-inside-virtual-machines.patch
new file mode 100644 (file)
index 0000000..712878a
--- /dev/null
@@ -0,0 +1,71 @@
+From 218d7efdcba4724e46f2a98ec22655bc78a5b90a Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Wed, 6 Apr 2022 02:29:38 +0300
+Subject: ACPICA: Avoid cache flush inside virtual machines
+
+From: Kirill A. Shutemov <kirill.shutemov@linux.intel.com>
+
+[ Upstream commit e2efb6359e620521d1e13f69b2257de8ceaa9475 ]
+
+While running inside virtual machine, the kernel can bypass cache
+flushing. Changing sleep state in a virtual machine doesn't affect the
+host system sleep state and cannot lead to data loss.
+
+Before entering sleep states, the ACPI code flushes caches to prevent
+data loss using the WBINVD instruction.  This mechanism is required on
+bare metal.
+
+But, any use WBINVD inside of a guest is worthless.  Changing sleep
+state in a virtual machine doesn't affect the host system sleep state
+and cannot lead to data loss, so most hypervisors simply ignore it.
+Despite this, the ACPI code calls WBINVD unconditionally anyway.
+It's useless, but also normally harmless.
+
+In TDX guests, though, WBINVD stops being harmless; it triggers a
+virtualization exception (#VE).  If the ACPI cache-flushing WBINVD
+were left in place, TDX guests would need handling to recover from
+the exception.
+
+Avoid using WBINVD whenever running under a hypervisor.  This both
+removes the useless WBINVDs and saves TDX from implementing WBINVD
+handling.
+
+Signed-off-by: Kirill A. Shutemov <kirill.shutemov@linux.intel.com>
+Signed-off-by: Dave Hansen <dave.hansen@linux.intel.com>
+Reviewed-by: Dave Hansen <dave.hansen@linux.intel.com>
+Reviewed-by: Dan Williams <dan.j.williams@intel.com>
+Reviewed-by: Thomas Gleixner <tglx@linutronix.de>
+Link: https://lkml.kernel.org/r/20220405232939.73860-30-kirill.shutemov@linux.intel.com
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ arch/x86/include/asm/acenv.h | 14 +++++++++++++-
+ 1 file changed, 13 insertions(+), 1 deletion(-)
+
+diff --git a/arch/x86/include/asm/acenv.h b/arch/x86/include/asm/acenv.h
+index 9aff97f0de7f..d937c55e717e 100644
+--- a/arch/x86/include/asm/acenv.h
++++ b/arch/x86/include/asm/acenv.h
+@@ -13,7 +13,19 @@
+ /* Asm macros */
+-#define ACPI_FLUSH_CPU_CACHE()        wbinvd()
++/*
++ * ACPI_FLUSH_CPU_CACHE() flushes caches on entering sleep states.
++ * It is required to prevent data loss.
++ *
++ * While running inside virtual machine, the kernel can bypass cache flushing.
++ * Changing sleep state in a virtual machine doesn't affect the host system
++ * sleep state and cannot lead to data loss.
++ */
++#define ACPI_FLUSH_CPU_CACHE()                                        \
++do {                                                          \
++      if (!cpu_feature_enabled(X86_FEATURE_HYPERVISOR))       \
++              wbinvd();                                       \
++} while (0)
+ int __acpi_acquire_global_lock(unsigned int *lock);
+ int __acpi_release_global_lock(unsigned int *lock);
+-- 
+2.35.1
+
diff --git a/queue-5.4/alsa-jack-access-input_dev-under-mutex.patch b/queue-5.4/alsa-jack-access-input_dev-under-mutex.patch
new file mode 100644 (file)
index 0000000..4742ac9
--- /dev/null
@@ -0,0 +1,157 @@
+From 0ce19e4c95276bbf6813424d4d8dfc678383e38c Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Tue, 12 Apr 2022 11:16:28 +0200
+Subject: ALSA: jack: Access input_dev under mutex
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+From: Amadeusz Sławiński <amadeuszx.slawinski@linux.intel.com>
+
+[ Upstream commit 1b6a6fc5280e97559287b61eade2d4b363e836f2 ]
+
+It is possible when using ASoC that input_dev is unregistered while
+calling snd_jack_report, which causes NULL pointer dereference.
+In order to prevent this serialize access to input_dev using mutex lock.
+
+Signed-off-by: Amadeusz Sławiński <amadeuszx.slawinski@linux.intel.com>
+Reviewed-by: Cezary Rojewski <cezary.rojewski@intel.com>
+Link: https://lore.kernel.org/r/20220412091628.3056922-1-amadeuszx.slawinski@linux.intel.com
+Signed-off-by: Takashi Iwai <tiwai@suse.de>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ include/sound/jack.h |  1 +
+ sound/core/jack.c    | 34 +++++++++++++++++++++++++++-------
+ 2 files changed, 28 insertions(+), 7 deletions(-)
+
+diff --git a/include/sound/jack.h b/include/sound/jack.h
+index 9eb2b5ec1ec4..78f3619f3de9 100644
+--- a/include/sound/jack.h
++++ b/include/sound/jack.h
+@@ -62,6 +62,7 @@ struct snd_jack {
+       const char *id;
+ #ifdef CONFIG_SND_JACK_INPUT_DEV
+       struct input_dev *input_dev;
++      struct mutex input_dev_lock;
+       int registered;
+       int type;
+       char name[100];
+diff --git a/sound/core/jack.c b/sound/core/jack.c
+index b00ae6f39f05..e7ac82d46821 100644
+--- a/sound/core/jack.c
++++ b/sound/core/jack.c
+@@ -34,8 +34,11 @@ static int snd_jack_dev_disconnect(struct snd_device *device)
+ #ifdef CONFIG_SND_JACK_INPUT_DEV
+       struct snd_jack *jack = device->device_data;
+-      if (!jack->input_dev)
++      mutex_lock(&jack->input_dev_lock);
++      if (!jack->input_dev) {
++              mutex_unlock(&jack->input_dev_lock);
+               return 0;
++      }
+       /* If the input device is registered with the input subsystem
+        * then we need to use a different deallocator. */
+@@ -44,6 +47,7 @@ static int snd_jack_dev_disconnect(struct snd_device *device)
+       else
+               input_free_device(jack->input_dev);
+       jack->input_dev = NULL;
++      mutex_unlock(&jack->input_dev_lock);
+ #endif /* CONFIG_SND_JACK_INPUT_DEV */
+       return 0;
+ }
+@@ -82,8 +86,11 @@ static int snd_jack_dev_register(struct snd_device *device)
+       snprintf(jack->name, sizeof(jack->name), "%s %s",
+                card->shortname, jack->id);
+-      if (!jack->input_dev)
++      mutex_lock(&jack->input_dev_lock);
++      if (!jack->input_dev) {
++              mutex_unlock(&jack->input_dev_lock);
+               return 0;
++      }
+       jack->input_dev->name = jack->name;
+@@ -108,6 +115,7 @@ static int snd_jack_dev_register(struct snd_device *device)
+       if (err == 0)
+               jack->registered = 1;
++      mutex_unlock(&jack->input_dev_lock);
+       return err;
+ }
+ #endif /* CONFIG_SND_JACK_INPUT_DEV */
+@@ -228,9 +236,11 @@ int snd_jack_new(struct snd_card *card, const char *id, int type,
+               return -ENOMEM;
+       }
+-      /* don't creat input device for phantom jack */
+-      if (!phantom_jack) {
+ #ifdef CONFIG_SND_JACK_INPUT_DEV
++      mutex_init(&jack->input_dev_lock);
++
++      /* don't create input device for phantom jack */
++      if (!phantom_jack) {
+               int i;
+               jack->input_dev = input_allocate_device();
+@@ -248,8 +258,8 @@ int snd_jack_new(struct snd_card *card, const char *id, int type,
+                               input_set_capability(jack->input_dev, EV_SW,
+                                                    jack_switch_types[i]);
+-#endif /* CONFIG_SND_JACK_INPUT_DEV */
+       }
++#endif /* CONFIG_SND_JACK_INPUT_DEV */
+       err = snd_device_new(card, SNDRV_DEV_JACK, jack, &ops);
+       if (err < 0)
+@@ -289,10 +299,14 @@ EXPORT_SYMBOL(snd_jack_new);
+ void snd_jack_set_parent(struct snd_jack *jack, struct device *parent)
+ {
+       WARN_ON(jack->registered);
+-      if (!jack->input_dev)
++      mutex_lock(&jack->input_dev_lock);
++      if (!jack->input_dev) {
++              mutex_unlock(&jack->input_dev_lock);
+               return;
++      }
+       jack->input_dev->dev.parent = parent;
++      mutex_unlock(&jack->input_dev_lock);
+ }
+ EXPORT_SYMBOL(snd_jack_set_parent);
+@@ -340,6 +354,8 @@ EXPORT_SYMBOL(snd_jack_set_key);
+ /**
+  * snd_jack_report - Report the current status of a jack
++ * Note: This function uses mutexes and should be called from a
++ * context which can sleep (such as a workqueue).
+  *
+  * @jack:   The jack to report status for
+  * @status: The current status of the jack
+@@ -359,8 +375,11 @@ void snd_jack_report(struct snd_jack *jack, int status)
+                                           status & jack_kctl->mask_bits);
+ #ifdef CONFIG_SND_JACK_INPUT_DEV
+-      if (!jack->input_dev)
++      mutex_lock(&jack->input_dev_lock);
++      if (!jack->input_dev) {
++              mutex_unlock(&jack->input_dev_lock);
+               return;
++      }
+       for (i = 0; i < ARRAY_SIZE(jack->key); i++) {
+               int testbit = SND_JACK_BTN_0 >> i;
+@@ -379,6 +398,7 @@ void snd_jack_report(struct snd_jack *jack, int status)
+       }
+       input_sync(jack->input_dev);
++      mutex_unlock(&jack->input_dev_lock);
+ #endif /* CONFIG_SND_JACK_INPUT_DEV */
+ }
+ EXPORT_SYMBOL(snd_jack_report);
+-- 
+2.35.1
+
diff --git a/queue-5.4/arm-dts-bcm2835-rpi-b-fix-gpio-line-names.patch b/queue-5.4/arm-dts-bcm2835-rpi-b-fix-gpio-line-names.patch
new file mode 100644 (file)
index 0000000..5d0b536
--- /dev/null
@@ -0,0 +1,52 @@
+From 25258c82a8e6f11bc13a1d3b32b43d7c8946f0b3 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Mon, 11 Apr 2022 22:01:41 +0200
+Subject: ARM: dts: bcm2835-rpi-b: Fix GPIO line names
+
+From: Stefan Wahren <stefan.wahren@i2se.com>
+
+[ Upstream commit 97bd8659c1c46c23e4daea7e040befca30939950 ]
+
+Recently this has been fixed in the vendor tree, so upstream this.
+
+Fixes: 731b26a6ac17 ("ARM: bcm2835: Add names for the Raspberry Pi GPIO lines")
+Signed-off-by: Phil Elwell <phil@raspberrypi.com>
+Signed-off-by: Stefan Wahren <stefan.wahren@i2se.com>
+Signed-off-by: Florian Fainelli <f.fainelli@gmail.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ arch/arm/boot/dts/bcm2835-rpi-b.dts | 13 ++++++-------
+ 1 file changed, 6 insertions(+), 7 deletions(-)
+
+diff --git a/arch/arm/boot/dts/bcm2835-rpi-b.dts b/arch/arm/boot/dts/bcm2835-rpi-b.dts
+index 2b69957e0113..1838e0fa0ff5 100644
+--- a/arch/arm/boot/dts/bcm2835-rpi-b.dts
++++ b/arch/arm/boot/dts/bcm2835-rpi-b.dts
+@@ -53,18 +53,17 @@
+                         "GPIO18",
+                         "NC", /* GPIO19 */
+                         "NC", /* GPIO20 */
+-                        "GPIO21",
++                        "CAM_GPIO0",
+                         "GPIO22",
+                         "GPIO23",
+                         "GPIO24",
+                         "GPIO25",
+                         "NC", /* GPIO26 */
+-                        "CAM_GPIO0",
+-                        /* Binary number representing build/revision */
+-                        "CONFIG0",
+-                        "CONFIG1",
+-                        "CONFIG2",
+-                        "CONFIG3",
++                        "GPIO27",
++                        "GPIO28",
++                        "GPIO29",
++                        "GPIO30",
++                        "GPIO31",
+                         "NC", /* GPIO32 */
+                         "NC", /* GPIO33 */
+                         "NC", /* GPIO34 */
+-- 
+2.35.1
+
diff --git a/queue-5.4/arm-dts-bcm2835-rpi-zero-w-fix-gpio-line-name-for-wi.patch b/queue-5.4/arm-dts-bcm2835-rpi-zero-w-fix-gpio-line-name-for-wi.patch
new file mode 100644 (file)
index 0000000..5732015
--- /dev/null
@@ -0,0 +1,57 @@
+From 7fffc6515ef36ba0d32c1fe167e8e101d3c28f7c Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Mon, 11 Apr 2022 22:01:38 +0200
+Subject: ARM: dts: bcm2835-rpi-zero-w: Fix GPIO line name for Wifi/BT
+
+From: Phil Elwell <phil@raspberrypi.com>
+
+[ Upstream commit 2c663e5e5bbf2a5b85e0f76ccb69663f583c3e33 ]
+
+The GPIOs 30 to 39 are connected to the Cypress CYW43438 (Wifi/BT).
+So fix the GPIO line names accordingly.
+
+Fixes: 2c7c040c73e9 ("ARM: dts: bcm2835: Add Raspberry Pi Zero W")
+Signed-off-by: Phil Elwell <phil@raspberrypi.com>
+Signed-off-by: Stefan Wahren <stefan.wahren@i2se.com>
+Signed-off-by: Florian Fainelli <f.fainelli@gmail.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ arch/arm/boot/dts/bcm2835-rpi-zero-w.dts | 22 ++++++++++++----------
+ 1 file changed, 12 insertions(+), 10 deletions(-)
+
+diff --git a/arch/arm/boot/dts/bcm2835-rpi-zero-w.dts b/arch/arm/boot/dts/bcm2835-rpi-zero-w.dts
+index f65448c01e31..34a85ad9f03c 100644
+--- a/arch/arm/boot/dts/bcm2835-rpi-zero-w.dts
++++ b/arch/arm/boot/dts/bcm2835-rpi-zero-w.dts
+@@ -74,16 +74,18 @@
+                         "GPIO27",
+                         "SDA0",
+                         "SCL0",
+-                        "NC", /* GPIO30 */
+-                        "NC", /* GPIO31 */
+-                        "NC", /* GPIO32 */
+-                        "NC", /* GPIO33 */
+-                        "NC", /* GPIO34 */
+-                        "NC", /* GPIO35 */
+-                        "NC", /* GPIO36 */
+-                        "NC", /* GPIO37 */
+-                        "NC", /* GPIO38 */
+-                        "NC", /* GPIO39 */
++                        /* Used by BT module */
++                        "CTS0",
++                        "RTS0",
++                        "TXD0",
++                        "RXD0",
++                        /* Used by Wifi */
++                        "SD1_CLK",
++                        "SD1_CMD",
++                        "SD1_DATA0",
++                        "SD1_DATA1",
++                        "SD1_DATA2",
++                        "SD1_DATA3",
+                         "CAM_GPIO1", /* GPIO40 */
+                         "WL_ON", /* GPIO41 */
+                         "NC", /* GPIO42 */
+-- 
+2.35.1
+
diff --git a/queue-5.4/arm-dts-bcm2837-rpi-3-b-plus-fix-gpio-line-name-of-p.patch b/queue-5.4/arm-dts-bcm2837-rpi-3-b-plus-fix-gpio-line-name-of-p.patch
new file mode 100644 (file)
index 0000000..35bac07
--- /dev/null
@@ -0,0 +1,37 @@
+From 75724ef1ae5cd103c2ab2ec77c7ca3dcbe9acd84 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Mon, 11 Apr 2022 22:01:40 +0200
+Subject: ARM: dts: bcm2837-rpi-3-b-plus: Fix GPIO line name of power LED
+
+From: Phil Elwell <phil@raspberrypi.com>
+
+[ Upstream commit 57f718aa4b93392fb1a8c0a874ab882b9e18136a ]
+
+The red LED on the Raspberry Pi 3 B Plus is the power LED.
+So fix the GPIO line name accordingly.
+
+Fixes: 71c0cd2283f2 ("ARM: dts: bcm2837: Add Raspberry Pi 3 B+")
+Signed-off-by: Phil Elwell <phil@raspberrypi.com>
+Signed-off-by: Stefan Wahren <stefan.wahren@i2se.com>
+Signed-off-by: Florian Fainelli <f.fainelli@gmail.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ arch/arm/boot/dts/bcm2837-rpi-3-b-plus.dts | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/arch/arm/boot/dts/bcm2837-rpi-3-b-plus.dts b/arch/arm/boot/dts/bcm2837-rpi-3-b-plus.dts
+index 74ed6d047807..d9f63fc59f16 100644
+--- a/arch/arm/boot/dts/bcm2837-rpi-3-b-plus.dts
++++ b/arch/arm/boot/dts/bcm2837-rpi-3-b-plus.dts
+@@ -43,7 +43,7 @@
+               #gpio-cells = <2>;
+               gpio-line-names = "BT_ON",
+                                 "WL_ON",
+-                                "STATUS_LED_R",
++                                "PWR_LED_R",
+                                 "LAN_RUN",
+                                 "",
+                                 "CAM_GPIO0",
+-- 
+2.35.1
+
diff --git a/queue-5.4/arm-dts-bcm2837-rpi-cm3-io3-fix-gpio-line-names-for-.patch b/queue-5.4/arm-dts-bcm2837-rpi-cm3-io3-fix-gpio-line-names-for-.patch
new file mode 100644 (file)
index 0000000..7272373
--- /dev/null
@@ -0,0 +1,39 @@
+From 7d33954c49b1de77f6ef928ca8ef8413a7d614c8 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Mon, 11 Apr 2022 22:01:39 +0200
+Subject: ARM: dts: bcm2837-rpi-cm3-io3: Fix GPIO line names for SMPS I2C
+
+From: Phil Elwell <phil@raspberrypi.com>
+
+[ Upstream commit 9fd26fd02749ec964eb0d588a3bab9e09bf77927 ]
+
+The GPIOs 46 & 47 are already used for a I2C interface to a SMPS.
+So fix the GPIO line names accordingly.
+
+Fixes: a54fe8a6cf66 ("ARM: dts: add Raspberry Pi Compute Module 3 and IO board")
+Signed-off-by: Phil Elwell <phil@raspberrypi.com>
+Signed-off-by: Stefan Wahren <stefan.wahren@i2se.com>
+Signed-off-by: Florian Fainelli <f.fainelli@gmail.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ arch/arm/boot/dts/bcm2837-rpi-cm3-io3.dts | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/arch/arm/boot/dts/bcm2837-rpi-cm3-io3.dts b/arch/arm/boot/dts/bcm2837-rpi-cm3-io3.dts
+index 588d9411ceb6..3dfce4312dfc 100644
+--- a/arch/arm/boot/dts/bcm2837-rpi-cm3-io3.dts
++++ b/arch/arm/boot/dts/bcm2837-rpi-cm3-io3.dts
+@@ -63,8 +63,8 @@
+                         "GPIO43",
+                         "GPIO44",
+                         "GPIO45",
+-                        "GPIO46",
+-                        "GPIO47",
++                        "SMPS_SCL",
++                        "SMPS_SDA",
+                         /* Used by eMMC */
+                         "SD_CLK_R",
+                         "SD_CMD_R",
+-- 
+2.35.1
+
diff --git a/queue-5.4/arm-dts-exynos-add-atmel-24c128-fallback-to-samsung-.patch b/queue-5.4/arm-dts-exynos-add-atmel-24c128-fallback-to-samsung-.patch
new file mode 100644 (file)
index 0000000..afcaf04
--- /dev/null
@@ -0,0 +1,45 @@
+From 78c9a16418e6143185a738350bd1235c990b8cbc Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Tue, 26 Apr 2022 20:34:43 +0200
+Subject: ARM: dts: exynos: add atmel,24c128 fallback to Samsung EEPROM
+
+From: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
+
+[ Upstream commit f038e8186fbc5723d7d38c6fa1d342945107347e ]
+
+The Samsung s524ad0xd1 EEPROM should use atmel,24c128 fallback,
+according to the AT24 EEPROM bindings.
+
+Reported-by: Rob Herring <robh@kernel.org>
+Signed-off-by: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
+Link: https://lore.kernel.org/r/20220426183443.243113-1-krzysztof.kozlowski@linaro.org
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ arch/arm/boot/dts/exynos5250-smdk5250.dts | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/arch/arm/boot/dts/exynos5250-smdk5250.dts b/arch/arm/boot/dts/exynos5250-smdk5250.dts
+index fa5dd992e327..c7e350ea03fe 100644
+--- a/arch/arm/boot/dts/exynos5250-smdk5250.dts
++++ b/arch/arm/boot/dts/exynos5250-smdk5250.dts
+@@ -128,7 +128,7 @@
+       samsung,i2c-max-bus-freq = <20000>;
+       eeprom@50 {
+-              compatible = "samsung,s524ad0xd1";
++              compatible = "samsung,s524ad0xd1", "atmel,24c128";
+               reg = <0x50>;
+       };
+@@ -287,7 +287,7 @@
+       samsung,i2c-max-bus-freq = <20000>;
+       eeprom@51 {
+-              compatible = "samsung,s524ad0xd1";
++              compatible = "samsung,s524ad0xd1", "atmel,24c128";
+               reg = <0x51>;
+       };
+-- 
+2.35.1
+
diff --git a/queue-5.4/arm-dts-ox820-align-interrupt-controller-node-name-w.patch b/queue-5.4/arm-dts-ox820-align-interrupt-controller-node-name-w.patch
new file mode 100644 (file)
index 0000000..054cf8d
--- /dev/null
@@ -0,0 +1,37 @@
+From 8901c3433cde2c036c083d28a5ef7108286680d3 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Thu, 7 Apr 2022 21:29:59 +0200
+Subject: ARM: dts: ox820: align interrupt controller node name with dtschema
+
+From: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
+
+[ Upstream commit fbcd5ad7a419ad40644a0bb8b4152bc660172d8a ]
+
+Fixes dtbs_check warnings like:
+
+  gic@1000: $nodename:0: 'gic@1000' does not match '^interrupt-controller(@[0-9a-f,]+)*$'
+
+Signed-off-by: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
+Acked-by: Neil Armstrong <narmstrong@baylibre.com>
+Link: https://lore.kernel.org/r/20220317115705.450427-1-krzysztof.kozlowski@canonical.com
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ arch/arm/boot/dts/ox820.dtsi | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/arch/arm/boot/dts/ox820.dtsi b/arch/arm/boot/dts/ox820.dtsi
+index 90846a7655b4..dde4364892bf 100644
+--- a/arch/arm/boot/dts/ox820.dtsi
++++ b/arch/arm/boot/dts/ox820.dtsi
+@@ -287,7 +287,7 @@
+                               clocks = <&armclk>;
+                       };
+-                      gic: gic@1000 {
++                      gic: interrupt-controller@1000 {
+                               compatible = "arm,arm11mp-gic";
+                               interrupt-controller;
+                               #interrupt-cells = <3>;
+-- 
+2.35.1
+
diff --git a/queue-5.4/arm-dts-suniv-f1c100-fix-watchdog-compatible.patch b/queue-5.4/arm-dts-suniv-f1c100-fix-watchdog-compatible.patch
new file mode 100644 (file)
index 0000000..0304b0a
--- /dev/null
@@ -0,0 +1,52 @@
+From c3185fbb9e118bed504bb16724d78ec248957349 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Thu, 17 Mar 2022 16:23:40 +0000
+Subject: ARM: dts: suniv: F1C100: fix watchdog compatible
+
+From: Andre Przywara <andre.przywara@arm.com>
+
+[ Upstream commit 01a850ee61cbf0ab77dcbf26bb133fec2dd640d6 ]
+
+The F1C100 series of SoCs actually have their watchdog IP being
+compatible with the newer Allwinner generation, not the older one.
+
+The currently described sun4i-a10-wdt actually does not work, neither
+the watchdog functionality (just never fires), nor the reset part
+(reboot hangs).
+
+Replace the compatible string with the one used by the newer generation.
+Verified to work with both the watchdog and reboot functionality on a
+LicheePi Nano.
+
+Also add the missing interrupt line and clock source, to make it binding
+compliant.
+
+Fixes: 4ba16d17efdd ("ARM: dts: suniv: add initial DTSI file for F1C100s")
+Signed-off-by: Andre Przywara <andre.przywara@arm.com>
+Acked-by: Guenter Roeck <linux@roeck-us.net>
+Signed-off-by: Jernej Skrabec <jernej.skrabec@gmail.com>
+Link: https://lore.kernel.org/r/20220317162349.739636-4-andre.przywara@arm.com
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ arch/arm/boot/dts/suniv-f1c100s.dtsi | 4 +++-
+ 1 file changed, 3 insertions(+), 1 deletion(-)
+
+diff --git a/arch/arm/boot/dts/suniv-f1c100s.dtsi b/arch/arm/boot/dts/suniv-f1c100s.dtsi
+index 6100d3b75f61..def830101448 100644
+--- a/arch/arm/boot/dts/suniv-f1c100s.dtsi
++++ b/arch/arm/boot/dts/suniv-f1c100s.dtsi
+@@ -104,8 +104,10 @@
+               wdt: watchdog@1c20ca0 {
+                       compatible = "allwinner,suniv-f1c100s-wdt",
+-                                   "allwinner,sun4i-a10-wdt";
++                                   "allwinner,sun6i-a31-wdt";
+                       reg = <0x01c20ca0 0x20>;
++                      interrupts = <16>;
++                      clocks = <&osc32k>;
+               };
+               uart0: serial@1c25000 {
+-- 
+2.35.1
+
diff --git a/queue-5.4/arm-hisi-add-missing-of_node_put-after-of_find_compa.patch b/queue-5.4/arm-hisi-add-missing-of_node_put-after-of_find_compa.patch
new file mode 100644 (file)
index 0000000..2f2ba4e
--- /dev/null
@@ -0,0 +1,52 @@
+From 2cc0a17f6db66d22cf6b89e49bcdba52d25b37c8 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Thu, 28 Apr 2022 10:43:06 +0000
+Subject: ARM: hisi: Add missing of_node_put after of_find_compatible_node
+
+From: Peng Wu <wupeng58@huawei.com>
+
+[ Upstream commit 9bc72e47d4630d58a840a66a869c56b29554cfe4 ]
+
+of_find_compatible_node  will increment the refcount of the returned
+device_node. Calling of_node_put() to avoid the refcount leak
+
+Signed-off-by: Peng Wu <wupeng58@huawei.com>
+Signed-off-by: Wei Xu <xuwei5@hisilicon.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ arch/arm/mach-hisi/platsmp.c | 4 ++++
+ 1 file changed, 4 insertions(+)
+
+diff --git a/arch/arm/mach-hisi/platsmp.c b/arch/arm/mach-hisi/platsmp.c
+index da7a09c1dae5..1cd1d9b0aabf 100644
+--- a/arch/arm/mach-hisi/platsmp.c
++++ b/arch/arm/mach-hisi/platsmp.c
+@@ -67,14 +67,17 @@ static void __init hi3xxx_smp_prepare_cpus(unsigned int max_cpus)
+               }
+               ctrl_base = of_iomap(np, 0);
+               if (!ctrl_base) {
++                      of_node_put(np);
+                       pr_err("failed to map address\n");
+                       return;
+               }
+               if (of_property_read_u32(np, "smp-offset", &offset) < 0) {
++                      of_node_put(np);
+                       pr_err("failed to find smp-offset property\n");
+                       return;
+               }
+               ctrl_base += offset;
++              of_node_put(np);
+       }
+ }
+@@ -160,6 +163,7 @@ static int hip01_boot_secondary(unsigned int cpu, struct task_struct *idle)
+       if (WARN_ON(!node))
+               return -1;
+       ctrl_base = of_iomap(node, 0);
++      of_node_put(node);
+       /* set the secondary core boot from DDR */
+       remap_reg_value = readl_relaxed(ctrl_base + REG_SC_CTRL);
+-- 
+2.35.1
+
diff --git a/queue-5.4/arm-mediatek-select-arch-timer-for-mt7629.patch b/queue-5.4/arm-mediatek-select-arch-timer-for-mt7629.patch
new file mode 100644 (file)
index 0000000..f94fd03
--- /dev/null
@@ -0,0 +1,38 @@
+From aa32736cd1ae874b2373fa49b253f19b1c80e366 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Sat, 9 Apr 2022 17:13:47 +0800
+Subject: arm: mediatek: select arch timer for mt7629
+
+From: Chuanhong Guo <gch981213@gmail.com>
+
+[ Upstream commit d66aea197d534e23d4989eb72fca9c0c114b97c9 ]
+
+This chip has an armv7 arch timer according to the dts. Select it in
+Kconfig to enforce the support for it.
+Otherwise the system time is just completely wrong if user forget to
+enable ARM_ARCH_TIMER in kernel config.
+
+Fixes: a43379dddf1b ("arm: mediatek: add MT7629 smp bring up code")
+Signed-off-by: Chuanhong Guo <gch981213@gmail.com>
+Link: https://lore.kernel.org/r/20220409091347.2473449-1-gch981213@gmail.com
+Signed-off-by: Matthias Brugger <matthias.bgg@gmail.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ arch/arm/mach-mediatek/Kconfig | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/arch/arm/mach-mediatek/Kconfig b/arch/arm/mach-mediatek/Kconfig
+index 9e0f592d87d8..35a3430c7942 100644
+--- a/arch/arm/mach-mediatek/Kconfig
++++ b/arch/arm/mach-mediatek/Kconfig
+@@ -30,6 +30,7 @@ config MACH_MT7623
+ config MACH_MT7629
+       bool "MediaTek MT7629 SoCs support"
+       default ARCH_MEDIATEK
++      select HAVE_ARM_ARCH_TIMER
+ config MACH_MT8127
+       bool "MediaTek MT8127 SoCs support"
+-- 
+2.35.1
+
diff --git a/queue-5.4/arm-omap1-clock-fix-uart-rate-reporting-algorithm.patch b/queue-5.4/arm-omap1-clock-fix-uart-rate-reporting-algorithm.patch
new file mode 100644 (file)
index 0000000..318e2e8
--- /dev/null
@@ -0,0 +1,37 @@
+From 734d526fe262ca32173a009ac515de714ac89391 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Sun, 10 Apr 2022 15:07:54 +0200
+Subject: ARM: OMAP1: clock: Fix UART rate reporting algorithm
+
+From: Janusz Krzysztofik <jmkrzyszt@gmail.com>
+
+[ Upstream commit 338d5d476cde853dfd97378d20496baabc2ce3c0 ]
+
+Since its introduction to the mainline kernel, omap1_uart_recalc() helper
+makes incorrect use of clk->enable_bit as a ready to use bitmap mask while
+it only provides the bit number.  Fix it.
+
+Signed-off-by: Janusz Krzysztofik <jmkrzyszt@gmail.com>
+Acked-by: Tony Lindgren <tony@atomide.com>
+Signed-off-by: Arnd Bergmann <arnd@arndb.de>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ arch/arm/mach-omap1/clock.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/arch/arm/mach-omap1/clock.c b/arch/arm/mach-omap1/clock.c
+index bd5be82101f3..d89bda12bf3c 100644
+--- a/arch/arm/mach-omap1/clock.c
++++ b/arch/arm/mach-omap1/clock.c
+@@ -41,7 +41,7 @@ static DEFINE_SPINLOCK(clockfw_lock);
+ unsigned long omap1_uart_recalc(struct clk *clk)
+ {
+       unsigned int val = __raw_readl(clk->enable_reg);
+-      return val & clk->enable_bit ? 48000000 : 12000000;
++      return val & 1 << clk->enable_bit ? 48000000 : 12000000;
+ }
+ unsigned long omap1_sossi_recalc(struct clk *clk)
+-- 
+2.35.1
+
diff --git a/queue-5.4/arm-versatile-add-missing-of_node_put-in-dcscb_init.patch b/queue-5.4/arm-versatile-add-missing-of_node_put-in-dcscb_init.patch
new file mode 100644 (file)
index 0000000..1b8829c
--- /dev/null
@@ -0,0 +1,37 @@
+From 5efb11a49915f385904f9b9c447674c14a966450 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Fri, 29 Apr 2022 01:03:56 +0200
+Subject: ARM: versatile: Add missing of_node_put in dcscb_init
+
+From: Peng Wu <wupeng58@huawei.com>
+
+[ Upstream commit 23b44f9c649bbef10b45fa33080cd8b4166800ae ]
+
+The device_node pointer is returned by of_find_compatible_node
+with refcount incremented. We should use of_node_put() to avoid
+the refcount leak.
+
+Signed-off-by: Peng Wu <wupeng58@huawei.com>
+Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
+Link: https://lore.kernel.org/r/20220428230356.69418-1-linus.walleij@linaro.org'
+Signed-off-by: Arnd Bergmann <arnd@arndb.de>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ arch/arm/mach-vexpress/dcscb.c | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/arch/arm/mach-vexpress/dcscb.c b/arch/arm/mach-vexpress/dcscb.c
+index 46a903c88c6a..f553cde614f9 100644
+--- a/arch/arm/mach-vexpress/dcscb.c
++++ b/arch/arm/mach-vexpress/dcscb.c
+@@ -143,6 +143,7 @@ static int __init dcscb_init(void)
+       if (!node)
+               return -ENODEV;
+       dcscb_base = of_iomap(node, 0);
++      of_node_put(node);
+       if (!dcscb_base)
+               return -EADDRNOTAVAIL;
+       cfg = readl_relaxed(dcscb_base + DCS_CFG_R);
+-- 
+2.35.1
+
diff --git a/queue-5.4/arm64-compat-do-not-treat-syscall-number-as-esr_elx-.patch b/queue-5.4/arm64-compat-do-not-treat-syscall-number-as-esr_elx-.patch
new file mode 100644 (file)
index 0000000..c0182b9
--- /dev/null
@@ -0,0 +1,77 @@
+From 1b0ad63718fc509612be460f574799c6e3b0885f Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Mon, 25 Apr 2022 12:44:41 +0100
+Subject: arm64: compat: Do not treat syscall number as ESR_ELx for a bad
+ syscall
+
+From: Alexandru Elisei <alexandru.elisei@arm.com>
+
+[ Upstream commit 3fed9e551417b84038b15117732ea4505eee386b ]
+
+If a compat process tries to execute an unknown system call above the
+__ARM_NR_COMPAT_END number, the kernel sends a SIGILL signal to the
+offending process. Information about the error is printed to dmesg in
+compat_arm_syscall() -> arm64_notify_die() -> arm64_force_sig_fault() ->
+arm64_show_signal().
+
+arm64_show_signal() interprets a non-zero value for
+current->thread.fault_code as an exception syndrome and displays the
+message associated with the ESR_ELx.EC field (bits 31:26).
+current->thread.fault_code is set in compat_arm_syscall() ->
+arm64_notify_die() with the bad syscall number instead of a valid ESR_ELx
+value. This means that the ESR_ELx.EC field has the value that the user set
+for the syscall number and the kernel can end up printing bogus exception
+messages*. For example, for the syscall number 0x68000000, which evaluates
+to ESR_ELx.EC value of 0x1A (ESR_ELx_EC_FPAC) the kernel prints this error:
+
+[   18.349161] syscall[300]: unhandled exception: ERET/ERETAA/ERETAB, ESR 0x68000000, Oops - bad compat syscall(2) in syscall[10000+50000]
+[   18.350639] CPU: 2 PID: 300 Comm: syscall Not tainted 5.18.0-rc1 #79
+[   18.351249] Hardware name: Pine64 RockPro64 v2.0 (DT)
+[..]
+
+which is misleading, as the bad compat syscall has nothing to do with
+pointer authentication.
+
+Stop arm64_show_signal() from printing exception syndrome information by
+having compat_arm_syscall() set the ESR_ELx value to 0, as it has no
+meaning for an invalid system call number. The example above now becomes:
+
+[   19.935275] syscall[301]: unhandled exception: Oops - bad compat syscall(2) in syscall[10000+50000]
+[   19.936124] CPU: 1 PID: 301 Comm: syscall Not tainted 5.18.0-rc1-00005-g7e08006d4102 #80
+[   19.936894] Hardware name: Pine64 RockPro64 v2.0 (DT)
+[..]
+
+which although shows less information because the syscall number,
+wrongfully advertised as the ESR value, is missing, it is better than
+showing plainly wrong information. The syscall number can be easily
+obtained with strace.
+
+*A 32-bit value above or equal to 0x8000_0000 is interpreted as a negative
+integer in compat_arm_syscal() and the condition scno < __ARM_NR_COMPAT_END
+evaluates to true; the syscall will exit to userspace in this case with the
+ENOSYS error code instead of arm64_notify_die() being called.
+
+Signed-off-by: Alexandru Elisei <alexandru.elisei@arm.com>
+Reviewed-by: Marc Zyngier <maz@kernel.org>
+Link: https://lore.kernel.org/r/20220425114444.368693-3-alexandru.elisei@arm.com
+Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ arch/arm64/kernel/sys_compat.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/arch/arm64/kernel/sys_compat.c b/arch/arm64/kernel/sys_compat.c
+index 3c18c2454089..51274bab2565 100644
+--- a/arch/arm64/kernel/sys_compat.c
++++ b/arch/arm64/kernel/sys_compat.c
+@@ -115,6 +115,6 @@ long compat_arm_syscall(struct pt_regs *regs, int scno)
+               (compat_thumb_mode(regs) ? 2 : 4);
+       arm64_notify_die("Oops - bad compat syscall(2)", regs,
+-                       SIGILL, ILL_ILLTRP, addr, scno);
++                       SIGILL, ILL_ILLTRP, addr, 0);
+       return 0;
+ }
+-- 
+2.35.1
+
diff --git a/queue-5.4/arm64-dts-rockchip-move-drive-impedance-ohm-to-emmc-.patch b/queue-5.4/arm64-dts-rockchip-move-drive-impedance-ohm-to-emmc-.patch
new file mode 100644 (file)
index 0000000..aa95673
--- /dev/null
@@ -0,0 +1,43 @@
+From bf372b5049ec0d19d0d4d5a672231dd03fe6fc2b Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Tue, 15 Mar 2022 17:27:06 +0800
+Subject: arm64: dts: rockchip: Move drive-impedance-ohm to emmc phy on rk3399
+
+From: Shawn Lin <shawn.lin@rock-chips.com>
+
+[ Upstream commit 4246d0bab2a8685e3d4aec2cb0ef8c526689ce96 ]
+
+drive-impedance-ohm is introduced for emmc phy instead of pcie phy.
+
+Fixes: fb8b7460c995 ("arm64: dts: rockchip: Define drive-impedance-ohm for RK3399's emmc-phy.")
+Signed-off-by: Shawn Lin <shawn.lin@rock-chips.com>
+Link: https://lore.kernel.org/r/1647336426-154797-1-git-send-email-shawn.lin@rock-chips.com
+Signed-off-by: Heiko Stuebner <heiko@sntech.de>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ arch/arm64/boot/dts/rockchip/rk3399.dtsi | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/arch/arm64/boot/dts/rockchip/rk3399.dtsi b/arch/arm64/boot/dts/rockchip/rk3399.dtsi
+index 95942d917de5..4496f7e1c68f 100644
+--- a/arch/arm64/boot/dts/rockchip/rk3399.dtsi
++++ b/arch/arm64/boot/dts/rockchip/rk3399.dtsi
+@@ -1447,6 +1447,7 @@
+                       reg = <0xf780 0x24>;
+                       clocks = <&sdhci>;
+                       clock-names = "emmcclk";
++                      drive-impedance-ohm = <50>;
+                       #phy-cells = <0>;
+                       status = "disabled";
+               };
+@@ -1457,7 +1458,6 @@
+                       clock-names = "refclk";
+                       #phy-cells = <1>;
+                       resets = <&cru SRST_PCIEPHY>;
+-                      drive-impedance-ohm = <50>;
+                       reset-names = "phy";
+                       status = "disabled";
+               };
+-- 
+2.35.1
+
diff --git a/queue-5.4/asoc-dapm-don-t-fold-register-value-changes-into-not.patch b/queue-5.4/asoc-dapm-don-t-fold-register-value-changes-into-not.patch
new file mode 100644 (file)
index 0000000..d962f1a
--- /dev/null
@@ -0,0 +1,51 @@
+From 23448427fc15524fbef210ed8095f2a44869ce88 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Thu, 28 Apr 2022 17:18:32 +0100
+Subject: ASoC: dapm: Don't fold register value changes into notifications
+
+From: Mark Brown <broonie@kernel.org>
+
+[ Upstream commit ad685980469b9f9b99d4d6ea05f4cb8f57cb2234 ]
+
+DAPM tracks and reports the value presented to the user from DAPM controls
+separately to the register value, these may diverge during initialisation
+or when an autodisable control is in use.
+
+When writing DAPM controls we currently report that a change has occurred
+if either the DAPM value or the value stored in the register has changed,
+meaning that if the two are out of sync we may appear to report a spurious
+event to userspace. Since we use this folded in value for nothing other
+than the value reported to userspace simply drop the folding in of the
+register change.
+
+Signed-off-by: Mark Brown <broonie@kernel.org>
+Link: https://lore.kernel.org/r/20220428161833.3690050-1-broonie@kernel.org
+Signed-off-by: Mark Brown <broonie@kernel.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ sound/soc/soc-dapm.c | 2 --
+ 1 file changed, 2 deletions(-)
+
+diff --git a/sound/soc/soc-dapm.c b/sound/soc/soc-dapm.c
+index 1c09dfb0c0f0..56c9c4189f26 100644
+--- a/sound/soc/soc-dapm.c
++++ b/sound/soc/soc-dapm.c
+@@ -3421,7 +3421,6 @@ int snd_soc_dapm_put_volsw(struct snd_kcontrol *kcontrol,
+                       update.val = val;
+                       card->update = &update;
+               }
+-              change |= reg_change;
+               ret = soc_dapm_mixer_update_power(card, kcontrol, connect,
+                                                 rconnect);
+@@ -3527,7 +3526,6 @@ int snd_soc_dapm_put_enum_double(struct snd_kcontrol *kcontrol,
+                       update.val = val;
+                       card->update = &update;
+               }
+-              change |= reg_change;
+               ret = soc_dapm_mux_update_power(card, kcontrol, item[0], e);
+-- 
+2.35.1
+
diff --git a/queue-5.4/asoc-fsl-fix-refcount-leak-in-imx_sgtl5000_probe.patch b/queue-5.4/asoc-fsl-fix-refcount-leak-in-imx_sgtl5000_probe.patch
new file mode 100644 (file)
index 0000000..2102e85
--- /dev/null
@@ -0,0 +1,84 @@
+From 1660345e2ae0d4043ab39faa9a48abdd7f4408d7 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Wed, 11 May 2022 10:58:03 +0400
+Subject: ASoC: fsl: Fix refcount leak in imx_sgtl5000_probe
+
+From: Miaoqian Lin <linmq006@gmail.com>
+
+[ Upstream commit 41cd312dfe980af869c3503b4d38e62ed20dd3b7 ]
+
+of_find_i2c_device_by_node() takes a reference,
+In error paths, we should call put_device() to drop
+the reference to aviod refount leak.
+
+Fixes: 81e8e4926167 ("ASoC: fsl: add sgtl5000 clock support for imx-sgtl5000")
+Signed-off-by: Miaoqian Lin <linmq006@gmail.com>
+Reviewed-by: Fabio Estevam <festevam@gmail.com>
+Link: https://lore.kernel.org/r/20220511065803.3957-1-linmq006@gmail.com
+Signed-off-by: Mark Brown <broonie@kernel.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ sound/soc/fsl/imx-sgtl5000.c | 14 ++++++++------
+ 1 file changed, 8 insertions(+), 6 deletions(-)
+
+diff --git a/sound/soc/fsl/imx-sgtl5000.c b/sound/soc/fsl/imx-sgtl5000.c
+index 15e8b9343c35..7106d56a3346 100644
+--- a/sound/soc/fsl/imx-sgtl5000.c
++++ b/sound/soc/fsl/imx-sgtl5000.c
+@@ -120,19 +120,19 @@ static int imx_sgtl5000_probe(struct platform_device *pdev)
+       data = devm_kzalloc(&pdev->dev, sizeof(*data), GFP_KERNEL);
+       if (!data) {
+               ret = -ENOMEM;
+-              goto fail;
++              goto put_device;
+       }
+       comp = devm_kzalloc(&pdev->dev, 3 * sizeof(*comp), GFP_KERNEL);
+       if (!comp) {
+               ret = -ENOMEM;
+-              goto fail;
++              goto put_device;
+       }
+       data->codec_clk = clk_get(&codec_dev->dev, NULL);
+       if (IS_ERR(data->codec_clk)) {
+               ret = PTR_ERR(data->codec_clk);
+-              goto fail;
++              goto put_device;
+       }
+       data->clk_frequency = clk_get_rate(data->codec_clk);
+@@ -158,10 +158,10 @@ static int imx_sgtl5000_probe(struct platform_device *pdev)
+       data->card.dev = &pdev->dev;
+       ret = snd_soc_of_parse_card_name(&data->card, "model");
+       if (ret)
+-              goto fail;
++              goto put_device;
+       ret = snd_soc_of_parse_audio_routing(&data->card, "audio-routing");
+       if (ret)
+-              goto fail;
++              goto put_device;
+       data->card.num_links = 1;
+       data->card.owner = THIS_MODULE;
+       data->card.dai_link = &data->dai;
+@@ -176,7 +176,7 @@ static int imx_sgtl5000_probe(struct platform_device *pdev)
+               if (ret != -EPROBE_DEFER)
+                       dev_err(&pdev->dev, "snd_soc_register_card failed (%d)\n",
+                               ret);
+-              goto fail;
++              goto put_device;
+       }
+       of_node_put(ssi_np);
+@@ -184,6 +184,8 @@ static int imx_sgtl5000_probe(struct platform_device *pdev)
+       return 0;
++put_device:
++      put_device(&codec_dev->dev);
+ fail:
+       if (data && !IS_ERR(data->codec_clk))
+               clk_put(data->codec_clk);
+-- 
+2.35.1
+
diff --git a/queue-5.4/asoc-max98357a-remove-dependency-on-gpiolib.patch b/queue-5.4/asoc-max98357a-remove-dependency-on-gpiolib.patch
new file mode 100644 (file)
index 0000000..c921deb
--- /dev/null
@@ -0,0 +1,54 @@
+From 71dbe1ae4681c49cd30e4bbbedbb56130ffa3f3b Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Tue, 17 May 2022 12:26:46 -0500
+Subject: ASoC: max98357a: remove dependency on GPIOLIB
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+From: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
+
+[ Upstream commit 21ca3274333f5c1cbbf9d91e5b33f4f2463859b2 ]
+
+commit dcc2c012c7691 ("ASoC: Fix gpiolib dependencies") removed a
+series of unnecessary dependencies on GPIOLIB when the gpio was
+optional.
+
+A similar simplification seems valid for max98357a, so remove the
+dependency as well. This will avoid the following warning
+
+   WARNING: unmet direct dependencies detected for SND_SOC_MAX98357A
+     Depends on [n]: SOUND [=y] && !UML && SND [=y] && SND_SOC [=y] && GPIOLIB [=n]
+     Selected by [y]:
+     - SND_SOC_INTEL_SOF_CS42L42_MACH [=y] && SOUND [=y] && !UML &&
+       SND [=y] && SND_SOC [=y] && SND_SOC_INTEL_MACH [=y] &&
+       (SND_SOC_SOF_HDA_LINK [=y] || SND_SOC_SOF_BAYTRAIL [=n]) && I2C
+       [=y] && ACPI [=y] && SND_HDA_CODEC_HDMI [=y] &&
+       SND_SOC_SOF_HDA_AUDIO_CODEC [=y] && (MFD_INTEL_LPSS [=y] ||
+       COMPILE_TEST [=n])
+
+Reported-by: kernel test robot <yujie.liu@intel.com>
+Signed-off-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
+Reviewed-by: Péter Ujfalusi <peter.ujfalusi@linux.intel.com>
+Link: https://lore.kernel.org/r/20220517172647.468244-2-pierre-louis.bossart@linux.intel.com
+Signed-off-by: Mark Brown <broonie@kernel.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ sound/soc/codecs/Kconfig | 1 -
+ 1 file changed, 1 deletion(-)
+
+diff --git a/sound/soc/codecs/Kconfig b/sound/soc/codecs/Kconfig
+index 466dc67799f4..dfc536cd9d2f 100644
+--- a/sound/soc/codecs/Kconfig
++++ b/sound/soc/codecs/Kconfig
+@@ -759,7 +759,6 @@ config SND_SOC_MAX98095
+ config SND_SOC_MAX98357A
+       tristate "Maxim MAX98357A CODEC"
+-      depends on GPIOLIB
+ config SND_SOC_MAX98371
+        tristate
+-- 
+2.35.1
+
diff --git a/queue-5.4/asoc-mediatek-fix-error-handling-in-mt8173_max98090_.patch b/queue-5.4/asoc-mediatek-fix-error-handling-in-mt8173_max98090_.patch
new file mode 100644 (file)
index 0000000..fece46e
--- /dev/null
@@ -0,0 +1,49 @@
+From 14fab62a76f17afc4da8525ed7f7b0412d35e6ce Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Mon, 4 Apr 2022 09:29:01 +0000
+Subject: ASoC: mediatek: Fix error handling in mt8173_max98090_dev_probe
+
+From: Miaoqian Lin <linmq006@gmail.com>
+
+[ Upstream commit 4f4e0454e226de3bf4efd7e7924d1edc571c52d5 ]
+
+Call of_node_put(platform_node) to avoid refcount leak in
+the error path.
+
+Fixes: 94319ba10eca ("ASoC: mediatek: Use platform_of_node for machine drivers")
+Fixes: 493433785df0 ("ASoC: mediatek: mt8173: fix device_node leak")
+Signed-off-by: Miaoqian Lin <linmq006@gmail.com>
+Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>
+Link: https://lore.kernel.org/r/20220404092903.26725-1-linmq006@gmail.com
+Signed-off-by: Mark Brown <broonie@kernel.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ sound/soc/mediatek/mt8173/mt8173-max98090.c | 5 ++++-
+ 1 file changed, 4 insertions(+), 1 deletion(-)
+
+diff --git a/sound/soc/mediatek/mt8173/mt8173-max98090.c b/sound/soc/mediatek/mt8173/mt8173-max98090.c
+index de1410c2c446..32df18180114 100644
+--- a/sound/soc/mediatek/mt8173/mt8173-max98090.c
++++ b/sound/soc/mediatek/mt8173/mt8173-max98090.c
+@@ -167,7 +167,8 @@ static int mt8173_max98090_dev_probe(struct platform_device *pdev)
+       if (!codec_node) {
+               dev_err(&pdev->dev,
+                       "Property 'audio-codec' missing or invalid\n");
+-              return -EINVAL;
++              ret = -EINVAL;
++              goto put_platform_node;
+       }
+       for_each_card_prelinks(card, i, dai_link) {
+               if (dai_link->codecs->name)
+@@ -182,6 +183,8 @@ static int mt8173_max98090_dev_probe(struct platform_device *pdev)
+                       __func__, ret);
+       of_node_put(codec_node);
++
++put_platform_node:
+       of_node_put(platform_node);
+       return ret;
+ }
+-- 
+2.35.1
+
diff --git a/queue-5.4/asoc-mediatek-fix-missing-of_node_put-in-mt2701_wm89.patch b/queue-5.4/asoc-mediatek-fix-missing-of_node_put-in-mt2701_wm89.patch
new file mode 100644 (file)
index 0000000..ae6bcea
--- /dev/null
@@ -0,0 +1,60 @@
+From 84308e673636117a20fbf368041a7abe3e07bfb1 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Mon, 4 Apr 2022 09:35:25 +0000
+Subject: ASoC: mediatek: Fix missing of_node_put in
+ mt2701_wm8960_machine_probe
+
+From: Miaoqian Lin <linmq006@gmail.com>
+
+[ Upstream commit 05654431a18fe24e5e46a375d98904134628a102 ]
+
+This node pointer is returned by of_parse_phandle() with
+refcount incremented in this function.
+Calling of_node_put() to avoid the refcount leak.
+
+Fixes: 8625c1dbd876 ("ASoC: mediatek: Add mt2701-wm8960 machine driver")
+Signed-off-by: Miaoqian Lin <linmq006@gmail.com>
+Link: https://lore.kernel.org/r/20220404093526.30004-1-linmq006@gmail.com
+Signed-off-by: Mark Brown <broonie@kernel.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ sound/soc/mediatek/mt2701/mt2701-wm8960.c | 9 +++++++--
+ 1 file changed, 7 insertions(+), 2 deletions(-)
+
+diff --git a/sound/soc/mediatek/mt2701/mt2701-wm8960.c b/sound/soc/mediatek/mt2701/mt2701-wm8960.c
+index 8c4c89e4c616..b9ad42112ea1 100644
+--- a/sound/soc/mediatek/mt2701/mt2701-wm8960.c
++++ b/sound/soc/mediatek/mt2701/mt2701-wm8960.c
+@@ -129,7 +129,8 @@ static int mt2701_wm8960_machine_probe(struct platform_device *pdev)
+       if (!codec_node) {
+               dev_err(&pdev->dev,
+                       "Property 'audio-codec' missing or invalid\n");
+-              return -EINVAL;
++              ret = -EINVAL;
++              goto put_platform_node;
+       }
+       for_each_card_prelinks(card, i, dai_link) {
+               if (dai_link->codecs->name)
+@@ -140,7 +141,7 @@ static int mt2701_wm8960_machine_probe(struct platform_device *pdev)
+       ret = snd_soc_of_parse_audio_routing(card, "audio-routing");
+       if (ret) {
+               dev_err(&pdev->dev, "failed to parse audio-routing: %d\n", ret);
+-              return ret;
++              goto put_codec_node;
+       }
+       ret = devm_snd_soc_register_card(&pdev->dev, card);
+@@ -148,6 +149,10 @@ static int mt2701_wm8960_machine_probe(struct platform_device *pdev)
+               dev_err(&pdev->dev, "%s snd_soc_register_card fail %d\n",
+                       __func__, ret);
++put_codec_node:
++      of_node_put(codec_node);
++put_platform_node:
++      of_node_put(platform_node);
+       return ret;
+ }
+-- 
+2.35.1
+
diff --git a/queue-5.4/asoc-mxs-saif-fix-refcount-leak-in-mxs_saif_probe.patch b/queue-5.4/asoc-mxs-saif-fix-refcount-leak-in-mxs_saif_probe.patch
new file mode 100644 (file)
index 0000000..ca4c640
--- /dev/null
@@ -0,0 +1,36 @@
+From 134d7579d725d18e30266b36d9641254273d8660 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Wed, 11 May 2022 17:37:22 +0400
+Subject: ASoC: mxs-saif: Fix refcount leak in mxs_saif_probe
+
+From: Miaoqian Lin <linmq006@gmail.com>
+
+[ Upstream commit 2be84f73785fa9ed6443e3c5b158730266f1c2ee ]
+
+of_parse_phandle() returns a node pointer with refcount
+incremented, we should use of_node_put() on it when done.
+
+Fixes: 08641c7c74dd ("ASoC: mxs: add device tree support for mxs-saif")
+Signed-off-by: Miaoqian Lin <linmq006@gmail.com>
+Link: https://lore.kernel.org/r/20220511133725.39039-1-linmq006@gmail.com
+Signed-off-by: Mark Brown <broonie@kernel.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ sound/soc/mxs/mxs-saif.c | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/sound/soc/mxs/mxs-saif.c b/sound/soc/mxs/mxs-saif.c
+index cb1b525cbe9d..c899a05e896f 100644
+--- a/sound/soc/mxs/mxs-saif.c
++++ b/sound/soc/mxs/mxs-saif.c
+@@ -767,6 +767,7 @@ static int mxs_saif_probe(struct platform_device *pdev)
+               saif->master_id = saif->id;
+       } else {
+               ret = of_alias_get_id(master, "saif");
++              of_node_put(master);
+               if (ret < 0)
+                       return ret;
+               else
+-- 
+2.35.1
+
diff --git a/queue-5.4/asoc-rk3328-fix-disabling-mclk-on-pclk-probe-failure.patch b/queue-5.4/asoc-rk3328-fix-disabling-mclk-on-pclk-probe-failure.patch
new file mode 100644 (file)
index 0000000..24a978f
--- /dev/null
@@ -0,0 +1,39 @@
+From ff9869b8d42e36f67599f75538ff3b9565f16b4e Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Wed, 27 Apr 2022 19:23:11 +0200
+Subject: ASoC: rk3328: fix disabling mclk on pclk probe failure
+
+From: Nicolas Frattaroli <frattaroli.nicolas@gmail.com>
+
+[ Upstream commit dd508e324cdde1c06ace08a8143fa50333a90703 ]
+
+If preparing/enabling the pclk fails, the probe function should
+unprepare and disable the previously prepared and enabled mclk,
+which it doesn't do. This commit rectifies this.
+
+Fixes: c32759035ad2 ("ASoC: rockchip: support ACODEC for rk3328")
+Signed-off-by: Nicolas Frattaroli <frattaroli.nicolas@gmail.com>
+Reviewed-by: Katsuhiro Suzuki <katsuhiro@katsuster.net>
+Link: https://lore.kernel.org/r/20220427172310.138638-1-frattaroli.nicolas@gmail.com
+Signed-off-by: Mark Brown <broonie@kernel.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ sound/soc/codecs/rk3328_codec.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/sound/soc/codecs/rk3328_codec.c b/sound/soc/codecs/rk3328_codec.c
+index 514ebe16bbfa..4e71ecf54af7 100644
+--- a/sound/soc/codecs/rk3328_codec.c
++++ b/sound/soc/codecs/rk3328_codec.c
+@@ -479,7 +479,7 @@ static int rk3328_platform_probe(struct platform_device *pdev)
+       ret = clk_prepare_enable(rk3328->pclk);
+       if (ret < 0) {
+               dev_err(&pdev->dev, "failed to enable acodec pclk\n");
+-              return ret;
++              goto err_unprepare_mclk;
+       }
+       base = devm_platform_ioremap_resource(pdev, 0);
+-- 
+2.35.1
+
diff --git a/queue-5.4/asoc-rt5645-fix-errorenous-cleanup-order.patch b/queue-5.4/asoc-rt5645-fix-errorenous-cleanup-order.patch
new file mode 100644 (file)
index 0000000..fd0ebec
--- /dev/null
@@ -0,0 +1,53 @@
+From a009072de97d5f50f0d04a1d302834ffbd7c4594 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Mon, 16 May 2022 17:20:35 +0800
+Subject: ASoC: rt5645: Fix errorenous cleanup order
+
+From: Lin Ma <linma@zju.edu.cn>
+
+[ Upstream commit 2def44d3aec59e38d2701c568d65540783f90f2f ]
+
+There is a logic error when removing rt5645 device as the function
+rt5645_i2c_remove() first cancel the &rt5645->jack_detect_work and
+delete the &rt5645->btn_check_timer latter. However, since the timer
+handler rt5645_btn_check_callback() will re-queue the jack_detect_work,
+this cleanup order is buggy.
+
+That is, once the del_timer_sync in rt5645_i2c_remove is concurrently
+run with the rt5645_btn_check_callback, the canceled jack_detect_work
+will be rescheduled again, leading to possible use-after-free.
+
+This patch fix the issue by placing the del_timer_sync function before
+the cancel_delayed_work_sync.
+
+Signed-off-by: Lin Ma <linma@zju.edu.cn>
+Link: https://lore.kernel.org/r/20220516092035.28283-1-linma@zju.edu.cn
+Signed-off-by: Mark Brown <broonie@kernel.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ sound/soc/codecs/rt5645.c | 7 ++++++-
+ 1 file changed, 6 insertions(+), 1 deletion(-)
+
+diff --git a/sound/soc/codecs/rt5645.c b/sound/soc/codecs/rt5645.c
+index c83f7f5da96b..a66e93a3af74 100644
+--- a/sound/soc/codecs/rt5645.c
++++ b/sound/soc/codecs/rt5645.c
+@@ -4074,9 +4074,14 @@ static int rt5645_i2c_remove(struct i2c_client *i2c)
+       if (i2c->irq)
+               free_irq(i2c->irq, rt5645);
++      /*
++       * Since the rt5645_btn_check_callback() can queue jack_detect_work,
++       * the timer need to be delted first
++       */
++      del_timer_sync(&rt5645->btn_check_timer);
++
+       cancel_delayed_work_sync(&rt5645->jack_detect_work);
+       cancel_delayed_work_sync(&rt5645->rcclock_work);
+-      del_timer_sync(&rt5645->btn_check_timer);
+       regulator_bulk_disable(ARRAY_SIZE(rt5645->supplies), rt5645->supplies);
+-- 
+2.35.1
+
diff --git a/queue-5.4/asoc-tscs454-add-endianness-flag-in-snd_soc_componen.patch b/queue-5.4/asoc-tscs454-add-endianness-flag-in-snd_soc_componen.patch
new file mode 100644 (file)
index 0000000..a1775ba
--- /dev/null
@@ -0,0 +1,68 @@
+From 2eb6c1a46ce38d6f2aa18c7f177f54063936ae30 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Wed, 4 May 2022 18:08:52 +0100
+Subject: ASoC: tscs454: Add endianness flag in snd_soc_component_driver
+
+From: Charles Keepax <ckeepax@opensource.cirrus.com>
+
+[ Upstream commit ff69ec96b87dccb3a29edef8cec5d4fefbbc2055 ]
+
+The endianness flag is used on the CODEC side to specify an
+ambivalence to endian, typically because it is lost over the hardware
+link. This device receives audio over an I2S DAI and as such should
+have endianness applied.
+
+A fixup is also required to use the width directly rather than relying
+on the format in hw_params, now both little and big endian would be
+supported. It is worth noting this changes the behaviour of S24_LE to
+use a word length of 24 rather than 32. This would appear to be a
+correction since the fact S24_LE is stored as 32 bits should not be
+presented over the bus.
+
+Signed-off-by: Charles Keepax <ckeepax@opensource.cirrus.com>
+Link: https://lore.kernel.org/r/20220504170905.332415-26-ckeepax@opensource.cirrus.com
+Signed-off-by: Mark Brown <broonie@kernel.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ sound/soc/codecs/tscs454.c | 12 ++++++------
+ 1 file changed, 6 insertions(+), 6 deletions(-)
+
+diff --git a/sound/soc/codecs/tscs454.c b/sound/soc/codecs/tscs454.c
+index c3587af9985c..3d981441b8d1 100644
+--- a/sound/soc/codecs/tscs454.c
++++ b/sound/soc/codecs/tscs454.c
+@@ -3128,18 +3128,17 @@ static int set_aif_sample_format(struct snd_soc_component *component,
+       unsigned int width;
+       int ret;
+-      switch (format) {
+-      case SNDRV_PCM_FORMAT_S16_LE:
++      switch (snd_pcm_format_width(format)) {
++      case 16:
+               width = FV_WL_16;
+               break;
+-      case SNDRV_PCM_FORMAT_S20_3LE:
++      case 20:
+               width = FV_WL_20;
+               break;
+-      case SNDRV_PCM_FORMAT_S24_3LE:
++      case 24:
+               width = FV_WL_24;
+               break;
+-      case SNDRV_PCM_FORMAT_S24_LE:
+-      case SNDRV_PCM_FORMAT_S32_LE:
++      case 32:
+               width = FV_WL_32;
+               break;
+       default:
+@@ -3337,6 +3336,7 @@ static const struct snd_soc_component_driver soc_component_dev_tscs454 = {
+       .num_dapm_routes = ARRAY_SIZE(tscs454_intercon),
+       .controls =     tscs454_snd_controls,
+       .num_controls = ARRAY_SIZE(tscs454_snd_controls),
++      .endianness = 1,
+ };
+ #define TSCS454_RATES SNDRV_PCM_RATE_8000_96000
+-- 
+2.35.1
+
diff --git a/queue-5.4/asoc-wm2000-fix-missing-clk_disable_unprepare-on-err.patch b/queue-5.4/asoc-wm2000-fix-missing-clk_disable_unprepare-on-err.patch
new file mode 100644 (file)
index 0000000..38fbe20
--- /dev/null
@@ -0,0 +1,55 @@
+From b63ced983f2de7da510104459f68a6e160b8face Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Sat, 14 May 2022 17:10:53 +0800
+Subject: ASoC: wm2000: fix missing clk_disable_unprepare() on error in
+ wm2000_anc_transition()
+
+From: Yang Yingliang <yangyingliang@huawei.com>
+
+[ Upstream commit be2af740e2a9c7134f2d8ab4f104006e110b13de ]
+
+Fix the missing clk_disable_unprepare() before return
+from wm2000_anc_transition() in the error handling case.
+
+Fixes: 514cfd6dd725 ("ASoC: wm2000: Integrate with clock API")
+Signed-off-by: Yang Yingliang <yangyingliang@huawei.com>
+Acked-by: Charles Keepax <ckeepax@opensource.cirrus.com>
+Link: https://lore.kernel.org/r/20220514091053.686416-1-yangyingliang@huawei.com
+Signed-off-by: Mark Brown <broonie@kernel.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ sound/soc/codecs/wm2000.c | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+diff --git a/sound/soc/codecs/wm2000.c b/sound/soc/codecs/wm2000.c
+index 72e165cc6443..97ece3114b3d 100644
+--- a/sound/soc/codecs/wm2000.c
++++ b/sound/soc/codecs/wm2000.c
+@@ -536,7 +536,7 @@ static int wm2000_anc_transition(struct wm2000_priv *wm2000,
+ {
+       struct i2c_client *i2c = wm2000->i2c;
+       int i, j;
+-      int ret;
++      int ret = 0;
+       if (wm2000->anc_mode == mode)
+               return 0;
+@@ -566,13 +566,13 @@ static int wm2000_anc_transition(struct wm2000_priv *wm2000,
+               ret = anc_transitions[i].step[j](i2c,
+                                                anc_transitions[i].analogue);
+               if (ret != 0)
+-                      return ret;
++                      break;
+       }
+       if (anc_transitions[i].dest == ANC_OFF)
+               clk_disable_unprepare(wm2000->mclk);
+-      return 0;
++      return ret;
+ }
+ static int wm2000_anc_set_mode(struct wm2000_priv *wm2000)
+-- 
+2.35.1
+
diff --git a/queue-5.4/ath9k-fix-ar9003_get_eepmisc.patch b/queue-5.4/ath9k-fix-ar9003_get_eepmisc.patch
new file mode 100644 (file)
index 0000000..eb0e731
--- /dev/null
@@ -0,0 +1,40 @@
+From 473bce731c83ade93dfa720cd4de88b43b3bb403 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Sun, 20 Mar 2022 17:30:08 -0600
+Subject: ath9k: fix ar9003_get_eepmisc
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+From: Wenli Looi <wlooi@ucalgary.ca>
+
+[ Upstream commit 9aaff3864b603408c02c629957ae8d8ff5d5a4f2 ]
+
+The current implementation is reading the wrong eeprom type.
+
+Fixes: d8ec2e2a63e8 ("ath9k: Add an eeprom_ops callback for retrieving the eepmisc value")
+Signed-off-by: Wenli Looi <wlooi@ucalgary.ca>
+Acked-by: Toke Høiland-Jørgensen <toke@toke.dk>
+Signed-off-by: Kalle Valo <quic_kvalo@quicinc.com>
+Link: https://lore.kernel.org/r/20220320233010.123106-5-wlooi@ucalgary.ca
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/net/wireless/ath/ath9k/ar9003_eeprom.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/drivers/net/wireless/ath/ath9k/ar9003_eeprom.c b/drivers/net/wireless/ath/ath9k/ar9003_eeprom.c
+index b0a4ca3559fd..abed1effd95c 100644
+--- a/drivers/net/wireless/ath/ath9k/ar9003_eeprom.c
++++ b/drivers/net/wireless/ath/ath9k/ar9003_eeprom.c
+@@ -5615,7 +5615,7 @@ unsigned int ar9003_get_paprd_scale_factor(struct ath_hw *ah,
+ static u8 ar9003_get_eepmisc(struct ath_hw *ah)
+ {
+-      return ah->eeprom.map4k.baseEepHeader.eepMisc;
++      return ah->eeprom.ar9300_eep.baseEepHeader.opCapFlags.eepMisc;
+ }
+ const struct eeprom_ops eep_ar9300_ops = {
+-- 
+2.35.1
+
diff --git a/queue-5.4/ath9k-fix-qca9561-pa-bias-level.patch b/queue-5.4/ath9k-fix-qca9561-pa-bias-level.patch
new file mode 100644 (file)
index 0000000..22c4dd4
--- /dev/null
@@ -0,0 +1,54 @@
+From 5b492bb565d1b71868514e264efd817b5272d5ab Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Sun, 17 Apr 2022 16:51:45 +0200
+Subject: ath9k: fix QCA9561 PA bias level
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+From: Thibaut VARÈNE <hacks+kernel@slashdirt.org>
+
+[ Upstream commit e999a5da28a0e0f7de242d841ef7d5e48f4646ae ]
+
+This patch fixes an invalid TX PA DC bias level on QCA9561, which
+results in a very low output power and very low throughput as devices
+are further away from the AP (compared to other 2.4GHz APs).
+
+This patch was suggested by Felix Fietkau, who noted[1]:
+"The value written to that register is wrong, because while the mask
+definition AR_CH0_TOP2_XPABIASLVL uses a different value for 9561, the
+shift definition AR_CH0_TOP2_XPABIASLVL_S is hardcoded to 12, which is
+wrong for 9561."
+
+In real life testing, without this patch the 2.4GHz throughput on
+Yuncore XD3200 is around 10Mbps sitting next to the AP, and closer to
+practical maximum with the patch applied.
+
+[1] https://lore.kernel.org/all/91c58969-c60e-2f41-00ac-737786d435ae@nbd.name
+
+Signed-off-by: Thibaut VARÈNE <hacks+kernel@slashdirt.org>
+Acked-by: Felix Fietkau <nbd@nbd.name>
+Acked-by: Toke Høiland-Jørgensen <toke@toke.dk>
+Signed-off-by: Kalle Valo <quic_kvalo@quicinc.com>
+Link: https://lore.kernel.org/r/20220417145145.1847-1-hacks+kernel@slashdirt.org
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/net/wireless/ath/ath9k/ar9003_phy.h | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/drivers/net/wireless/ath/ath9k/ar9003_phy.h b/drivers/net/wireless/ath/ath9k/ar9003_phy.h
+index a171dbb29fbb..ad949eb02f3d 100644
+--- a/drivers/net/wireless/ath/ath9k/ar9003_phy.h
++++ b/drivers/net/wireless/ath/ath9k/ar9003_phy.h
+@@ -720,7 +720,7 @@
+ #define AR_CH0_TOP2           (AR_SREV_9300(ah) ? 0x1628c : \
+                                       (AR_SREV_9462(ah) ? 0x16290 : 0x16284))
+ #define AR_CH0_TOP2_XPABIASLVL                (AR_SREV_9561(ah) ? 0x1e00 : 0xf000)
+-#define AR_CH0_TOP2_XPABIASLVL_S      12
++#define AR_CH0_TOP2_XPABIASLVL_S      (AR_SREV_9561(ah) ? 9 : 12)
+ #define AR_CH0_XTAL           (AR_SREV_9300(ah) ? 0x16294 : \
+                                ((AR_SREV_9462(ah) || AR_SREV_9565(ah)) ? 0x16298 : \
+-- 
+2.35.1
+
diff --git a/queue-5.4/ath9k_htc-fix-potential-out-of-bounds-access-with-in.patch b/queue-5.4/ath9k_htc-fix-potential-out-of-bounds-access-with-in.patch
new file mode 100644 (file)
index 0000000..c1467f4
--- /dev/null
@@ -0,0 +1,51 @@
+From 1153a811a2bb2a45017efe934db85199d2be824f Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Sat, 9 Apr 2022 09:12:25 +0300
+Subject: ath9k_htc: fix potential out of bounds access with invalid
+ rxstatus->rs_keyix
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+From: Dan Carpenter <dan.carpenter@oracle.com>
+
+[ Upstream commit 2dc509305cf956381532792cb8dceef2b1504765 ]
+
+The "rxstatus->rs_keyix" eventually gets passed to test_bit() so we need to
+ensure that it is within the bitmap.
+
+drivers/net/wireless/ath/ath9k/common.c:46 ath9k_cmn_rx_accept()
+error: passing untrusted data 'rx_stats->rs_keyix' to 'test_bit()'
+
+Fixes: 4ed1a8d4a257 ("ath9k_htc: use ath9k_cmn_rx_accept")
+Signed-off-by: Dan Carpenter <dan.carpenter@oracle.com>
+Acked-by: Toke Høiland-Jørgensen <toke@toke.dk>
+Signed-off-by: Kalle Valo <quic_kvalo@quicinc.com>
+Link: https://lore.kernel.org/r/20220409061225.GA5447@kili
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/net/wireless/ath/ath9k/htc_drv_txrx.c | 8 ++++++++
+ 1 file changed, 8 insertions(+)
+
+diff --git a/drivers/net/wireless/ath/ath9k/htc_drv_txrx.c b/drivers/net/wireless/ath/ath9k/htc_drv_txrx.c
+index 628f45c8c06f..eeaf63de71bf 100644
+--- a/drivers/net/wireless/ath/ath9k/htc_drv_txrx.c
++++ b/drivers/net/wireless/ath/ath9k/htc_drv_txrx.c
+@@ -1005,6 +1005,14 @@ static bool ath9k_rx_prepare(struct ath9k_htc_priv *priv,
+               goto rx_next;
+       }
++      if (rxstatus->rs_keyix >= ATH_KEYMAX &&
++          rxstatus->rs_keyix != ATH9K_RXKEYIX_INVALID) {
++              ath_dbg(common, ANY,
++                      "Invalid keyix, dropping (keyix: %d)\n",
++                      rxstatus->rs_keyix);
++              goto rx_next;
++      }
++
+       /* Get the RX status information */
+       memset(rx_status, 0, sizeof(struct ieee80211_rx_status));
+-- 
+2.35.1
+
diff --git a/queue-5.4/b43-fix-assigning-negative-value-to-unsigned-variabl.patch b/queue-5.4/b43-fix-assigning-negative-value-to-unsigned-variabl.patch
new file mode 100644 (file)
index 0000000..5388b2f
--- /dev/null
@@ -0,0 +1,37 @@
+From 17a2b1e9dfb84e5fff012bba872d8ced138d5e3e Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Fri, 25 Mar 2022 18:15:15 +0800
+Subject: b43: Fix assigning negative value to unsigned variable
+
+From: Haowen Bai <baihaowen@meizu.com>
+
+[ Upstream commit 11800d893b38e0e12d636c170c1abc19c43c730c ]
+
+fix warning reported by smatch:
+drivers/net/wireless/broadcom/b43/phy_n.c:585 b43_nphy_adjust_lna_gain_table()
+warn: assigning (-2) to unsigned variable '*(lna_gain[0])'
+
+Signed-off-by: Haowen Bai <baihaowen@meizu.com>
+Signed-off-by: Kalle Valo <kvalo@kernel.org>
+Link: https://lore.kernel.org/r/1648203315-28093-1-git-send-email-baihaowen@meizu.com
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/net/wireless/broadcom/b43/phy_n.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/drivers/net/wireless/broadcom/b43/phy_n.c b/drivers/net/wireless/broadcom/b43/phy_n.c
+index 32ce1b42ce08..0ef62ef77af6 100644
+--- a/drivers/net/wireless/broadcom/b43/phy_n.c
++++ b/drivers/net/wireless/broadcom/b43/phy_n.c
+@@ -582,7 +582,7 @@ static void b43_nphy_adjust_lna_gain_table(struct b43_wldev *dev)
+       u16 data[4];
+       s16 gain[2];
+       u16 minmax[2];
+-      static const u16 lna_gain[4] = { -2, 10, 19, 25 };
++      static const s16 lna_gain[4] = { -2, 10, 19, 25 };
+       if (nphy->hang_avoid)
+               b43_nphy_stay_in_carrier_search(dev, 1);
+-- 
+2.35.1
+
diff --git a/queue-5.4/b43legacy-fix-assigning-negative-value-to-unsigned-v.patch b/queue-5.4/b43legacy-fix-assigning-negative-value-to-unsigned-v.patch
new file mode 100644 (file)
index 0000000..9a8bfde
--- /dev/null
@@ -0,0 +1,37 @@
+From 8a309b2f702ae6729a09d866713987e4627e873d Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Fri, 25 Mar 2022 18:17:13 +0800
+Subject: b43legacy: Fix assigning negative value to unsigned variable
+
+From: Haowen Bai <baihaowen@meizu.com>
+
+[ Upstream commit 3f6b867559b3d43a7ce1b4799b755e812fc0d503 ]
+
+fix warning reported by smatch:
+drivers/net/wireless/broadcom/b43legacy/phy.c:1181 b43legacy_phy_lo_b_measure()
+warn: assigning (-772) to unsigned variable 'fval'
+
+Signed-off-by: Haowen Bai <baihaowen@meizu.com>
+Signed-off-by: Kalle Valo <kvalo@kernel.org>
+Link: https://lore.kernel.org/r/1648203433-8736-1-git-send-email-baihaowen@meizu.com
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/net/wireless/broadcom/b43legacy/phy.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/drivers/net/wireless/broadcom/b43legacy/phy.c b/drivers/net/wireless/broadcom/b43legacy/phy.c
+index a659259bc51a..6e76055e136d 100644
+--- a/drivers/net/wireless/broadcom/b43legacy/phy.c
++++ b/drivers/net/wireless/broadcom/b43legacy/phy.c
+@@ -1123,7 +1123,7 @@ void b43legacy_phy_lo_b_measure(struct b43legacy_wldev *dev)
+       struct b43legacy_phy *phy = &dev->phy;
+       u16 regstack[12] = { 0 };
+       u16 mls;
+-      u16 fval;
++      s16 fval;
+       int i;
+       int j;
+-- 
+2.35.1
+
diff --git a/queue-5.4/bluetooth-fix-dangling-sco_conn-and-use-after-free-i.patch b/queue-5.4/bluetooth-fix-dangling-sco_conn-and-use-after-free-i.patch
new file mode 100644 (file)
index 0000000..bd7643a
--- /dev/null
@@ -0,0 +1,88 @@
+From 88d5e5288aa1bc1be64109f755fbb1e100c6e94d Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Sat, 26 Mar 2022 07:09:28 +0000
+Subject: Bluetooth: fix dangling sco_conn and use-after-free in
+ sco_sock_timeout
+
+From: Ying Hsu <yinghsu@chromium.org>
+
+[ Upstream commit 7aa1e7d15f8a5b65f67bacb100d8fc033b21efa2 ]
+
+Connecting the same socket twice consecutively in sco_sock_connect()
+could lead to a race condition where two sco_conn objects are created
+but only one is associated with the socket. If the socket is closed
+before the SCO connection is established, the timer associated with the
+dangling sco_conn object won't be canceled. As the sock object is being
+freed, the use-after-free problem happens when the timer callback
+function sco_sock_timeout() accesses the socket. Here's the call trace:
+
+dump_stack+0x107/0x163
+? refcount_inc+0x1c/
+print_address_description.constprop.0+0x1c/0x47e
+? refcount_inc+0x1c/0x7b
+kasan_report+0x13a/0x173
+? refcount_inc+0x1c/0x7b
+check_memory_region+0x132/0x139
+refcount_inc+0x1c/0x7b
+sco_sock_timeout+0xb2/0x1ba
+process_one_work+0x739/0xbd1
+? cancel_delayed_work+0x13f/0x13f
+? __raw_spin_lock_init+0xf0/0xf0
+? to_kthread+0x59/0x85
+worker_thread+0x593/0x70e
+kthread+0x346/0x35a
+? drain_workqueue+0x31a/0x31a
+? kthread_bind+0x4b/0x4b
+ret_from_fork+0x1f/0x30
+
+Link: https://syzkaller.appspot.com/bug?extid=2bef95d3ab4daa10155b
+Reported-by: syzbot+2bef95d3ab4daa10155b@syzkaller.appspotmail.com
+Fixes: e1dee2c1de2b ("Bluetooth: fix repeated calls to sco_sock_kill")
+Signed-off-by: Ying Hsu <yinghsu@chromium.org>
+Reviewed-by: Joseph Hwang <josephsih@chromium.org>
+Signed-off-by: Marcel Holtmann <marcel@holtmann.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ net/bluetooth/sco.c | 21 +++++++++++++--------
+ 1 file changed, 13 insertions(+), 8 deletions(-)
+
+diff --git a/net/bluetooth/sco.c b/net/bluetooth/sco.c
+index 2c616c1c6295..fbfb12e43010 100644
+--- a/net/bluetooth/sco.c
++++ b/net/bluetooth/sco.c
+@@ -563,19 +563,24 @@ static int sco_sock_connect(struct socket *sock, struct sockaddr *addr, int alen
+           addr->sa_family != AF_BLUETOOTH)
+               return -EINVAL;
+-      if (sk->sk_state != BT_OPEN && sk->sk_state != BT_BOUND)
+-              return -EBADFD;
++      lock_sock(sk);
++      if (sk->sk_state != BT_OPEN && sk->sk_state != BT_BOUND) {
++              err = -EBADFD;
++              goto done;
++      }
+-      if (sk->sk_type != SOCK_SEQPACKET)
+-              return -EINVAL;
++      if (sk->sk_type != SOCK_SEQPACKET) {
++              err = -EINVAL;
++              goto done;
++      }
+       hdev = hci_get_route(&sa->sco_bdaddr, &sco_pi(sk)->src, BDADDR_BREDR);
+-      if (!hdev)
+-              return -EHOSTUNREACH;
++      if (!hdev) {
++              err = -EHOSTUNREACH;
++              goto done;
++      }
+       hci_dev_lock(hdev);
+-      lock_sock(sk);
+-
+       /* Set destination address and psm */
+       bacpy(&sco_pi(sk)->dst, &sa->sco_bdaddr);
+-- 
+2.35.1
+
diff --git a/queue-5.4/bpf-fix-excessive-memory-allocation-in-stack_map_all.patch b/queue-5.4/bpf-fix-excessive-memory-allocation-in-stack_map_all.patch
new file mode 100644 (file)
index 0000000..b2668b7
--- /dev/null
@@ -0,0 +1,48 @@
+From f61da2dc325e31dbfbe26ba76f54a7bae37c0b28 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Thu, 7 Apr 2022 21:04:23 +0800
+Subject: bpf: Fix excessive memory allocation in stack_map_alloc()
+
+From: Yuntao Wang <ytcoode@gmail.com>
+
+[ Upstream commit b45043192b3e481304062938a6561da2ceea46a6 ]
+
+The 'n_buckets * (value_size + sizeof(struct stack_map_bucket))' part of the
+allocated memory for 'smap' is never used after the memlock accounting was
+removed, thus get rid of it.
+
+[ Note, Daniel:
+
+Commit b936ca643ade ("bpf: rework memlock-based memory accounting for maps")
+moved `cost += n_buckets * (value_size + sizeof(struct stack_map_bucket))`
+up and therefore before the bpf_map_area_alloc() allocation, sigh. In a later
+step commit c85d69135a91 ("bpf: move memory size checks to bpf_map_charge_init()"),
+and the overflow checks of `cost >= U32_MAX - PAGE_SIZE` moved into
+bpf_map_charge_init(). And then 370868107bf6 ("bpf: Eliminate rlimit-based
+memory accounting for stackmap maps") finally removed the bpf_map_charge_init().
+Anyway, the original code did the allocation same way as /after/ this fix. ]
+
+Fixes: b936ca643ade ("bpf: rework memlock-based memory accounting for maps")
+Signed-off-by: Yuntao Wang <ytcoode@gmail.com>
+Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
+Link: https://lore.kernel.org/bpf/20220407130423.798386-1-ytcoode@gmail.com
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ kernel/bpf/stackmap.c | 1 -
+ 1 file changed, 1 deletion(-)
+
+diff --git a/kernel/bpf/stackmap.c b/kernel/bpf/stackmap.c
+index 49c7a09d688d..768ffd603787 100644
+--- a/kernel/bpf/stackmap.c
++++ b/kernel/bpf/stackmap.c
+@@ -117,7 +117,6 @@ static struct bpf_map *stack_map_alloc(union bpf_attr *attr)
+               return ERR_PTR(-E2BIG);
+       cost = n_buckets * sizeof(struct stack_map_bucket *) + sizeof(*smap);
+-      cost += n_buckets * (value_size + sizeof(struct stack_map_bucket));
+       err = bpf_map_charge_init(&mem, cost);
+       if (err)
+               return ERR_PTR(err);
+-- 
+2.35.1
+
diff --git a/queue-5.4/can-xilinx_can-mark-bit-timing-constants-as-const.patch b/queue-5.4/can-xilinx_can-mark-bit-timing-constants-as-const.patch
new file mode 100644 (file)
index 0000000..2a30c24
--- /dev/null
@@ -0,0 +1,46 @@
+From fee0625f275c484326b82d26cc36a3541d3a260b Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Thu, 17 Mar 2022 21:29:07 +0100
+Subject: can: xilinx_can: mark bit timing constants as const
+
+From: Marc Kleine-Budde <mkl@pengutronix.de>
+
+[ Upstream commit ae38fda02996d43d9fb09f16e81e0008704dd524 ]
+
+This patch marks the bit timing constants as const.
+
+Fixes: c223da689324 ("can: xilinx_can: Add support for CANFD FD frames")
+Link: https://lore.kernel.org/all/20220317203119.792552-1-mkl@pengutronix.de
+Cc: Appana Durga Kedareswara rao <appana.durga.rao@xilinx.com>
+Cc: Naga Sureshkumar Relli <naga.sureshkumar.relli@xilinx.com>
+Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/net/can/xilinx_can.c | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/drivers/net/can/xilinx_can.c b/drivers/net/can/xilinx_can.c
+index 008d3d492bd1..be3811311db2 100644
+--- a/drivers/net/can/xilinx_can.c
++++ b/drivers/net/can/xilinx_can.c
+@@ -239,7 +239,7 @@ static const struct can_bittiming_const xcan_bittiming_const_canfd = {
+ };
+ /* AXI CANFD Data Bittiming constants as per AXI CANFD 1.0 specs */
+-static struct can_bittiming_const xcan_data_bittiming_const_canfd = {
++static const struct can_bittiming_const xcan_data_bittiming_const_canfd = {
+       .name = DRIVER_NAME,
+       .tseg1_min = 1,
+       .tseg1_max = 16,
+@@ -265,7 +265,7 @@ static const struct can_bittiming_const xcan_bittiming_const_canfd2 = {
+ };
+ /* AXI CANFD 2.0 Data Bittiming constants as per AXI CANFD 2.0 spec */
+-static struct can_bittiming_const xcan_data_bittiming_const_canfd2 = {
++static const struct can_bittiming_const xcan_data_bittiming_const_canfd2 = {
+       .name = DRIVER_NAME,
+       .tseg1_min = 1,
+       .tseg1_max = 32,
+-- 
+2.35.1
+
diff --git a/queue-5.4/cpufreq-fix-possible-race-in-cpufreq-online-error-pa.patch b/queue-5.4/cpufreq-fix-possible-race-in-cpufreq-online-error-pa.patch
new file mode 100644 (file)
index 0000000..7ef17ad
--- /dev/null
@@ -0,0 +1,91 @@
+From b5de83cc8ac26ddf7b32c20b474fb70b932fdab3 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Thu, 21 Apr 2022 03:15:41 +0800
+Subject: cpufreq: Fix possible race in cpufreq online error path
+
+From: Schspa Shi <schspa@gmail.com>
+
+[ Upstream commit f346e96267cd76175d6c201b40f770c0116a8a04 ]
+
+When cpufreq online fails, the policy->cpus mask is not cleared and
+policy->rwsem is released too early, so the driver can be invoked
+via the cpuinfo_cur_freq sysfs attribute while its ->offline() or
+->exit() callbacks are being run.
+
+Take policy->clk as an example:
+
+static int cpufreq_online(unsigned int cpu)
+{
+  ...
+  // policy->cpus != 0 at this time
+  down_write(&policy->rwsem);
+  ret = cpufreq_add_dev_interface(policy);
+  up_write(&policy->rwsem);
+
+  return 0;
+
+out_destroy_policy:
+       for_each_cpu(j, policy->real_cpus)
+               remove_cpu_dev_symlink(policy, get_cpu_device(j));
+    up_write(&policy->rwsem);
+...
+out_exit_policy:
+  if (cpufreq_driver->exit)
+    cpufreq_driver->exit(policy);
+      clk_put(policy->clk);
+      // policy->clk is a wild pointer
+...
+                                    ^
+                                    |
+                            Another process access
+                            __cpufreq_get
+                              cpufreq_verify_current_freq
+                                cpufreq_generic_get
+                                  // acces wild pointer of policy->clk;
+                                    |
+                                    |
+out_offline_policy:                 |
+  cpufreq_policy_free(policy);      |
+    // deleted here, and will wait for no body reference
+    cpufreq_policy_put_kobj(policy);
+}
+
+Address this by modifying cpufreq_online() to release policy->rwsem
+in the error path after the driver callbacks have run and to clear
+policy->cpus before releasing the semaphore.
+
+Fixes: 7106e02baed4 ("cpufreq: release policy->rwsem on error")
+Signed-off-by: Schspa Shi <schspa@gmail.com>
+[ rjw: Subject and changelog edits ]
+Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/cpufreq/cpufreq.c | 5 +++--
+ 1 file changed, 3 insertions(+), 2 deletions(-)
+
+diff --git a/drivers/cpufreq/cpufreq.c b/drivers/cpufreq/cpufreq.c
+index af9f34804862..7ea07764988e 100644
+--- a/drivers/cpufreq/cpufreq.c
++++ b/drivers/cpufreq/cpufreq.c
+@@ -1509,8 +1509,6 @@ static int cpufreq_online(unsigned int cpu)
+       for_each_cpu(j, policy->real_cpus)
+               remove_cpu_dev_symlink(policy, get_cpu_device(j));
+-      up_write(&policy->rwsem);
+-
+ out_offline_policy:
+       if (cpufreq_driver->offline)
+               cpufreq_driver->offline(policy);
+@@ -1519,6 +1517,9 @@ static int cpufreq_online(unsigned int cpu)
+       if (cpufreq_driver->exit)
+               cpufreq_driver->exit(policy);
++      cpumask_clear(policy->cpus);
++      up_write(&policy->rwsem);
++
+ out_free_policy:
+       cpufreq_policy_free(policy);
+       return ret;
+-- 
+2.35.1
+
diff --git a/queue-5.4/crypto-cryptd-protect-per-cpu-resource-by-disabling-.patch b/queue-5.4/crypto-cryptd-protect-per-cpu-resource-by-disabling-.patch
new file mode 100644 (file)
index 0000000..e246005
--- /dev/null
@@ -0,0 +1,101 @@
+From 393278ed6fd8b863b75ee22d04ac5e0436e6bb50 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Wed, 4 May 2022 17:07:36 +0200
+Subject: crypto: cryptd - Protect per-CPU resource by disabling BH.
+
+From: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
+
+[ Upstream commit 91e8bcd7b4da182e09ea19a2c73167345fe14c98 ]
+
+The access to cryptd_queue::cpu_queue is synchronized by disabling
+preemption in cryptd_enqueue_request() and disabling BH in
+cryptd_queue_worker(). This implies that access is allowed from BH.
+
+If cryptd_enqueue_request() is invoked from preemptible context _and_
+soft interrupt then this can lead to list corruption since
+cryptd_enqueue_request() is not protected against access from
+soft interrupt.
+
+Replace get_cpu() in cryptd_enqueue_request() with local_bh_disable()
+to ensure BH is always disabled.
+Remove preempt_disable() from cryptd_queue_worker() since it is not
+needed because local_bh_disable() ensures synchronisation.
+
+Fixes: 254eff771441 ("crypto: cryptd - Per-CPU thread implementation...")
+Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
+Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ crypto/cryptd.c | 23 +++++++++++------------
+ 1 file changed, 11 insertions(+), 12 deletions(-)
+
+diff --git a/crypto/cryptd.c b/crypto/cryptd.c
+index 927760b316a4..43a1a855886b 100644
+--- a/crypto/cryptd.c
++++ b/crypto/cryptd.c
+@@ -39,6 +39,10 @@ struct cryptd_cpu_queue {
+ };
+ struct cryptd_queue {
++      /*
++       * Protected by disabling BH to allow enqueueing from softinterrupt and
++       * dequeuing from kworker (cryptd_queue_worker()).
++       */
+       struct cryptd_cpu_queue __percpu *cpu_queue;
+ };
+@@ -125,28 +129,28 @@ static void cryptd_fini_queue(struct cryptd_queue *queue)
+ static int cryptd_enqueue_request(struct cryptd_queue *queue,
+                                 struct crypto_async_request *request)
+ {
+-      int cpu, err;
++      int err;
+       struct cryptd_cpu_queue *cpu_queue;
+       refcount_t *refcnt;
+-      cpu = get_cpu();
++      local_bh_disable();
+       cpu_queue = this_cpu_ptr(queue->cpu_queue);
+       err = crypto_enqueue_request(&cpu_queue->queue, request);
+       refcnt = crypto_tfm_ctx(request->tfm);
+       if (err == -ENOSPC)
+-              goto out_put_cpu;
++              goto out;
+-      queue_work_on(cpu, cryptd_wq, &cpu_queue->work);
++      queue_work_on(smp_processor_id(), cryptd_wq, &cpu_queue->work);
+       if (!refcount_read(refcnt))
+-              goto out_put_cpu;
++              goto out;
+       refcount_inc(refcnt);
+-out_put_cpu:
+-      put_cpu();
++out:
++      local_bh_enable();
+       return err;
+ }
+@@ -162,15 +166,10 @@ static void cryptd_queue_worker(struct work_struct *work)
+       cpu_queue = container_of(work, struct cryptd_cpu_queue, work);
+       /*
+        * Only handle one request at a time to avoid hogging crypto workqueue.
+-       * preempt_disable/enable is used to prevent being preempted by
+-       * cryptd_enqueue_request(). local_bh_disable/enable is used to prevent
+-       * cryptd_enqueue_request() being accessed from software interrupts.
+        */
+       local_bh_disable();
+-      preempt_disable();
+       backlog = crypto_get_backlog(&cpu_queue->queue);
+       req = crypto_dequeue_request(&cpu_queue->queue);
+-      preempt_enable();
+       local_bh_enable();
+       if (!req)
+-- 
+2.35.1
+
diff --git a/queue-5.4/crypto-marvell-cesa-ecb-does-not-iv.patch b/queue-5.4/crypto-marvell-cesa-ecb-does-not-iv.patch
new file mode 100644 (file)
index 0000000..a48939d
--- /dev/null
@@ -0,0 +1,34 @@
+From ffffd6f4e68199f7d085c00563e1e36661ababe0 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Wed, 13 Apr 2022 19:11:54 +0000
+Subject: crypto: marvell/cesa - ECB does not IV
+
+From: Corentin Labbe <clabbe@baylibre.com>
+
+[ Upstream commit 4ffa1763622ae5752961499588f3f8874315f974 ]
+
+The DES3 ECB has an IV size set but ECB does not need one.
+
+Fixes: 4ada483978237 ("crypto: marvell/cesa - add Triple-DES support")
+Signed-off-by: Corentin Labbe <clabbe@baylibre.com>
+Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/crypto/marvell/cipher.c | 1 -
+ 1 file changed, 1 deletion(-)
+
+diff --git a/drivers/crypto/marvell/cipher.c b/drivers/crypto/marvell/cipher.c
+index 84ceddfee76b..708dc63b2f09 100644
+--- a/drivers/crypto/marvell/cipher.c
++++ b/drivers/crypto/marvell/cipher.c
+@@ -610,7 +610,6 @@ struct skcipher_alg mv_cesa_ecb_des3_ede_alg = {
+       .decrypt = mv_cesa_ecb_des3_ede_decrypt,
+       .min_keysize = DES3_EDE_KEY_SIZE,
+       .max_keysize = DES3_EDE_KEY_SIZE,
+-      .ivsize = DES3_EDE_BLOCK_SIZE,
+       .base = {
+               .cra_name = "ecb(des3_ede)",
+               .cra_driver_name = "mv-ecb-des3-ede",
+-- 
+2.35.1
+
diff --git a/queue-5.4/dax-fix-cache-flush-on-pmd-mapped-pages.patch b/queue-5.4/dax-fix-cache-flush-on-pmd-mapped-pages.patch
new file mode 100644 (file)
index 0000000..e12a10e
--- /dev/null
@@ -0,0 +1,58 @@
+From d2e40a2f45d7ed6195d1f73eca25491748e125a9 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Thu, 28 Apr 2022 23:16:09 -0700
+Subject: dax: fix cache flush on PMD-mapped pages
+
+From: Muchun Song <songmuchun@bytedance.com>
+
+[ Upstream commit e583b5c472bd23d450e06f148dc1f37be74f7666 ]
+
+The flush_cache_page() only remove a PAGE_SIZE sized range from the cache.
+However, it does not cover the full pages in a THP except a head page.
+Replace it with flush_cache_range() to fix this issue.  This is just a
+documentation issue with the respect to properly documenting the expected
+usage of cache flushing before modifying the pmd.  However, in practice
+this is not a problem due to the fact that DAX is not available on
+architectures with virtually indexed caches per:
+
+  commit d92576f1167c ("dax: does not work correctly with virtual aliasing caches")
+
+Link: https://lkml.kernel.org/r/20220403053957.10770-3-songmuchun@bytedance.com
+Fixes: f729c8c9b24f ("dax: wrprotect pmd_t in dax_mapping_entry_mkclean")
+Signed-off-by: Muchun Song <songmuchun@bytedance.com>
+Reviewed-by: Dan Williams <dan.j.williams@intel.com>
+Reviewed-by: Christoph Hellwig <hch@lst.de>
+Cc: Alistair Popple <apopple@nvidia.com>
+Cc: Al Viro <viro@zeniv.linux.org.uk>
+Cc: Hugh Dickins <hughd@google.com>
+Cc: Jan Kara <jack@suse.cz>
+Cc: "Kirill A. Shutemov" <kirill.shutemov@linux.intel.com>
+Cc: Matthew Wilcox <willy@infradead.org>
+Cc: Ralph Campbell <rcampbell@nvidia.com>
+Cc: Ross Zwisler <zwisler@kernel.org>
+Cc: Xiongchun Duan <duanxiongchun@bytedance.com>
+Cc: Xiyu Yang <xiyuyang19@fudan.edu.cn>
+Cc: Yang Shi <shy828301@gmail.com>
+Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ fs/dax.c | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+diff --git a/fs/dax.c b/fs/dax.c
+index 12953e892bb2..bcb7c6b43fb2 100644
+--- a/fs/dax.c
++++ b/fs/dax.c
+@@ -819,7 +819,8 @@ static void dax_entry_mkclean(struct address_space *mapping, pgoff_t index,
+                       if (!pmd_dirty(*pmdp) && !pmd_write(*pmdp))
+                               goto unlock_pmd;
+-                      flush_cache_page(vma, address, pfn);
++                      flush_cache_range(vma, address,
++                                        address + HPAGE_PMD_SIZE);
+                       pmd = pmdp_invalidate(vma, address, pmdp);
+                       pmd = pmd_wrprotect(pmd);
+                       pmd = pmd_mkclean(pmd);
+-- 
+2.35.1
+
diff --git a/queue-5.4/dma-debug-change-allocation-mode-from-gfp_nowait-to-.patch b/queue-5.4/dma-debug-change-allocation-mode-from-gfp_nowait-to-.patch
new file mode 100644 (file)
index 0000000..16acfb4
--- /dev/null
@@ -0,0 +1,41 @@
+From 298dfff5e95c229cf8c5c19e145612dd34a05a94 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Tue, 10 May 2022 13:17:32 -0400
+Subject: dma-debug: change allocation mode from GFP_NOWAIT to GFP_ATIOMIC
+
+From: Mikulas Patocka <mpatocka@redhat.com>
+
+[ Upstream commit 84bc4f1dbbbb5f8aa68706a96711dccb28b518e5 ]
+
+We observed the error "cacheline tracking ENOMEM, dma-debug disabled"
+during a light system load (copying some files). The reason for this error
+is that the dma_active_cacheline radix tree uses GFP_NOWAIT allocation -
+so it can't access the emergency memory reserves and it fails as soon as
+anybody reaches the watermark.
+
+This patch changes GFP_NOWAIT to GFP_ATOMIC, so that it can access the
+emergency memory reserves.
+
+Signed-off-by: Mikulas Patocka <mpatocka@redhat.com>
+Signed-off-by: Christoph Hellwig <hch@lst.de>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ kernel/dma/debug.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/kernel/dma/debug.c b/kernel/dma/debug.c
+index 4dc3bbfd3e3f..1c133f610f59 100644
+--- a/kernel/dma/debug.c
++++ b/kernel/dma/debug.c
+@@ -450,7 +450,7 @@ void debug_dma_dump_mappings(struct device *dev)
+  * At any time debug_dma_assert_idle() can be called to trigger a
+  * warning if any cachelines in the given page are in the active set.
+  */
+-static RADIX_TREE(dma_active_cacheline, GFP_NOWAIT);
++static RADIX_TREE(dma_active_cacheline, GFP_ATOMIC);
+ static DEFINE_SPINLOCK(radix_lock);
+ #define ACTIVE_CACHELINE_MAX_OVERLAP ((1 << RADIX_TREE_MAX_TAGS) - 1)
+ #define CACHELINE_PER_PAGE_SHIFT (PAGE_SHIFT - L1_CACHE_SHIFT)
+-- 
+2.35.1
+
diff --git a/queue-5.4/dmaengine-stm32-mdma-remove-gisr1-register.patch b/queue-5.4/dmaengine-stm32-mdma-remove-gisr1-register.patch
new file mode 100644 (file)
index 0000000..9eeeb9b
--- /dev/null
@@ -0,0 +1,73 @@
+From a0865d780f8ed3ca948d2d72639dddbc54c5f155 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Wed, 4 May 2022 17:53:20 +0200
+Subject: dmaengine: stm32-mdma: remove GISR1 register
+
+From: Amelie Delaunay <amelie.delaunay@foss.st.com>
+
+[ Upstream commit 9d6a2d92e450926c483e45eaf426080a19219f4e ]
+
+GISR1 was described in a not up-to-date documentation when the stm32-mdma
+driver has been developed. This register has not been added in reference
+manual of STM32 SoC with MDMA, which have only 32 MDMA channels.
+So remove it from stm32-mdma driver.
+
+Fixes: a4ffb13c8946 ("dmaengine: Add STM32 MDMA driver")
+Signed-off-by: Amelie Delaunay <amelie.delaunay@foss.st.com>
+Link: https://lore.kernel.org/r/20220504155322.121431-2-amelie.delaunay@foss.st.com
+Signed-off-by: Vinod Koul <vkoul@kernel.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/dma/stm32-mdma.c | 21 +++++----------------
+ 1 file changed, 5 insertions(+), 16 deletions(-)
+
+diff --git a/drivers/dma/stm32-mdma.c b/drivers/dma/stm32-mdma.c
+index a05355d1292e..c902c2480640 100644
+--- a/drivers/dma/stm32-mdma.c
++++ b/drivers/dma/stm32-mdma.c
+@@ -40,7 +40,6 @@
+                                        STM32_MDMA_SHIFT(mask))
+ #define STM32_MDMA_GISR0              0x0000 /* MDMA Int Status Reg 1 */
+-#define STM32_MDMA_GISR1              0x0004 /* MDMA Int Status Reg 2 */
+ /* MDMA Channel x interrupt/status register */
+ #define STM32_MDMA_CISR(x)            (0x40 + 0x40 * (x)) /* x = 0..62 */
+@@ -196,7 +195,7 @@
+ #define STM32_MDMA_MAX_BUF_LEN                128
+ #define STM32_MDMA_MAX_BLOCK_LEN      65536
+-#define STM32_MDMA_MAX_CHANNELS               63
++#define STM32_MDMA_MAX_CHANNELS               32
+ #define STM32_MDMA_MAX_REQUESTS               256
+ #define STM32_MDMA_MAX_BURST          128
+ #define STM32_MDMA_VERY_HIGH_PRIORITY 0x11
+@@ -1351,21 +1350,11 @@ static irqreturn_t stm32_mdma_irq_handler(int irq, void *devid)
+       /* Find out which channel generates the interrupt */
+       status = readl_relaxed(dmadev->base + STM32_MDMA_GISR0);
+-      if (status) {
+-              id = __ffs(status);
+-      } else {
+-              status = readl_relaxed(dmadev->base + STM32_MDMA_GISR1);
+-              if (!status) {
+-                      dev_dbg(mdma2dev(dmadev), "spurious it\n");
+-                      return IRQ_NONE;
+-              }
+-              id = __ffs(status);
+-              /*
+-               * As GISR0 provides status for channel id from 0 to 31,
+-               * so GISR1 provides status for channel id from 32 to 62
+-               */
+-              id += 32;
++      if (!status) {
++              dev_dbg(mdma2dev(dmadev), "spurious it\n");
++              return IRQ_NONE;
+       }
++      id = __ffs(status);
+       chan = &dmadev->chan[id];
+       if (!chan) {
+-- 
+2.35.1
+
diff --git a/queue-5.4/drbd-fix-duplicate-array-initializer.patch b/queue-5.4/drbd-fix-duplicate-array-initializer.patch
new file mode 100644 (file)
index 0000000..e028c8e
--- /dev/null
@@ -0,0 +1,94 @@
+From 5bb188833799111d6f636a174078a39ffb121652 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Wed, 6 Apr 2022 21:07:09 +0200
+Subject: drbd: fix duplicate array initializer
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+From: Arnd Bergmann <arnd@arndb.de>
+
+[ Upstream commit 33cb0917bbe241dd17a2b87ead63514c1b7e5615 ]
+
+There are two initializers for P_RETRY_WRITE:
+
+drivers/block/drbd/drbd_main.c:3676:22: warning: initialized field overwritten [-Woverride-init]
+
+Remove the first one since it was already ignored by the compiler
+and reorder the list to match the enum definition. As P_ZEROES had
+no entry, add that one instead.
+
+Fixes: 036b17eaab93 ("drbd: Receiving part for the PROTOCOL_UPDATE packet")
+Fixes: f31e583aa2c2 ("drbd: introduce P_ZEROES (REQ_OP_WRITE_ZEROES on the "wire")")
+Signed-off-by: Arnd Bergmann <arnd@arndb.de>
+Reviewed-by: Christoph Böhmwalder <christoph.boehmwalder@linbit.com>
+Link: https://lore.kernel.org/r/20220406190715.1938174-2-christoph.boehmwalder@linbit.com
+Signed-off-by: Jens Axboe <axboe@kernel.dk>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/block/drbd/drbd_main.c | 11 ++++++-----
+ 1 file changed, 6 insertions(+), 5 deletions(-)
+
+diff --git a/drivers/block/drbd/drbd_main.c b/drivers/block/drbd/drbd_main.c
+index ba10fa24fa1f..5ece2fd70d9c 100644
+--- a/drivers/block/drbd/drbd_main.c
++++ b/drivers/block/drbd/drbd_main.c
+@@ -3709,9 +3709,8 @@ const char *cmdname(enum drbd_packet cmd)
+        * when we want to support more than
+        * one PRO_VERSION */
+       static const char *cmdnames[] = {
++
+               [P_DATA]                = "Data",
+-              [P_WSAME]               = "WriteSame",
+-              [P_TRIM]                = "Trim",
+               [P_DATA_REPLY]          = "DataReply",
+               [P_RS_DATA_REPLY]       = "RSDataReply",
+               [P_BARRIER]             = "Barrier",
+@@ -3722,7 +3721,6 @@ const char *cmdname(enum drbd_packet cmd)
+               [P_DATA_REQUEST]        = "DataRequest",
+               [P_RS_DATA_REQUEST]     = "RSDataRequest",
+               [P_SYNC_PARAM]          = "SyncParam",
+-              [P_SYNC_PARAM89]        = "SyncParam89",
+               [P_PROTOCOL]            = "ReportProtocol",
+               [P_UUIDS]               = "ReportUUIDs",
+               [P_SIZES]               = "ReportSizes",
+@@ -3730,6 +3728,7 @@ const char *cmdname(enum drbd_packet cmd)
+               [P_SYNC_UUID]           = "ReportSyncUUID",
+               [P_AUTH_CHALLENGE]      = "AuthChallenge",
+               [P_AUTH_RESPONSE]       = "AuthResponse",
++              [P_STATE_CHG_REQ]       = "StateChgRequest",
+               [P_PING]                = "Ping",
+               [P_PING_ACK]            = "PingAck",
+               [P_RECV_ACK]            = "RecvAck",
+@@ -3740,24 +3739,26 @@ const char *cmdname(enum drbd_packet cmd)
+               [P_NEG_DREPLY]          = "NegDReply",
+               [P_NEG_RS_DREPLY]       = "NegRSDReply",
+               [P_BARRIER_ACK]         = "BarrierAck",
+-              [P_STATE_CHG_REQ]       = "StateChgRequest",
+               [P_STATE_CHG_REPLY]     = "StateChgReply",
+               [P_OV_REQUEST]          = "OVRequest",
+               [P_OV_REPLY]            = "OVReply",
+               [P_OV_RESULT]           = "OVResult",
+               [P_CSUM_RS_REQUEST]     = "CsumRSRequest",
+               [P_RS_IS_IN_SYNC]       = "CsumRSIsInSync",
++              [P_SYNC_PARAM89]        = "SyncParam89",
+               [P_COMPRESSED_BITMAP]   = "CBitmap",
+               [P_DELAY_PROBE]         = "DelayProbe",
+               [P_OUT_OF_SYNC]         = "OutOfSync",
+-              [P_RETRY_WRITE]         = "RetryWrite",
+               [P_RS_CANCEL]           = "RSCancel",
+               [P_CONN_ST_CHG_REQ]     = "conn_st_chg_req",
+               [P_CONN_ST_CHG_REPLY]   = "conn_st_chg_reply",
+               [P_RETRY_WRITE]         = "retry_write",
+               [P_PROTOCOL_UPDATE]     = "protocol_update",
++              [P_TRIM]                = "Trim",
+               [P_RS_THIN_REQ]         = "rs_thin_req",
+               [P_RS_DEALLOCATED]      = "rs_deallocated",
++              [P_WSAME]               = "WriteSame",
++              [P_ZEROES]              = "Zeroes",
+               /* enum drbd_packet, but not commands - obsoleted flags:
+                *      P_MAY_IGNORE
+-- 
+2.35.1
+
diff --git a/queue-5.4/drivers-base-node.c-fix-compaction-sysfs-file-leak.patch b/queue-5.4/drivers-base-node.c-fix-compaction-sysfs-file-leak.patch
new file mode 100644 (file)
index 0000000..faf66d0
--- /dev/null
@@ -0,0 +1,44 @@
+From 8f6826616e377d66082c358e2b8959cca75e559d Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Thu, 28 Apr 2022 23:16:06 -0700
+Subject: drivers/base/node.c: fix compaction sysfs file leak
+
+From: Miaohe Lin <linmiaohe@huawei.com>
+
+[ Upstream commit da63dc84befaa9e6079a0bc363ff0eaa975f9073 ]
+
+Compaction sysfs file is created via compaction_register_node in
+register_node.  But we forgot to remove it in unregister_node.  Thus
+compaction sysfs file is leaked.  Using compaction_unregister_node to fix
+this issue.
+
+Link: https://lkml.kernel.org/r/20220401070905.43679-1-linmiaohe@huawei.com
+Fixes: ed4a6d7f0676 ("mm: compaction: add /sys trigger for per-node memory compaction")
+Signed-off-by: Miaohe Lin <linmiaohe@huawei.com>
+Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+Cc: Rafael J. Wysocki <rafael@kernel.org>
+Cc: Mel Gorman <mel@csn.ul.ie>
+Cc: Minchan Kim <minchan.kim@gmail.com>
+Cc: KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com>
+Cc: KOSAKI Motohiro <kosaki.motohiro@jp.fujitsu.com>
+Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/base/node.c | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/drivers/base/node.c b/drivers/base/node.c
+index 62a052990bb9..666eb55c0774 100644
+--- a/drivers/base/node.c
++++ b/drivers/base/node.c
+@@ -641,6 +641,7 @@ static int register_node(struct node *node, int num)
+  */
+ void unregister_node(struct node *node)
+ {
++      compaction_unregister_node(node);
+       hugetlb_unregister_node(node);          /* no-op, if memoryless node */
+       node_remove_accesses(node);
+       node_remove_caches(node);
+-- 
+2.35.1
+
diff --git a/queue-5.4/drm-amd-pm-fix-double-free-in-si_parse_power_table.patch b/queue-5.4/drm-amd-pm-fix-double-free-in-si_parse_power_table.patch
new file mode 100644 (file)
index 0000000..5b2a985
--- /dev/null
@@ -0,0 +1,70 @@
+From 9af3a329e22d9ca32f1b1a881b33133044cc7224 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Tue, 19 Apr 2022 10:37:19 +0000
+Subject: drm/amd/pm: fix double free in si_parse_power_table()
+
+From: Keita Suzuki <keitasuzuki.park@sslab.ics.keio.ac.jp>
+
+[ Upstream commit f3fa2becf2fc25b6ac7cf8d8b1a2e4a86b3b72bd ]
+
+In function si_parse_power_table(), array adev->pm.dpm.ps and its member
+is allocated. If the allocation of each member fails, the array itself
+is freed and returned with an error code. However, the array is later
+freed again in si_dpm_fini() function which is called when the function
+returns an error.
+
+This leads to potential double free of the array adev->pm.dpm.ps, as
+well as leak of its array members, since the members are not freed in
+the allocation function and the array is not nulled when freed.
+In addition adev->pm.dpm.num_ps, which keeps track of the allocated
+array member, is not updated until the member allocation is
+successfully finished, this could also lead to either use after free,
+or uninitialized variable access in si_dpm_fini().
+
+Fix this by postponing the free of the array until si_dpm_fini() and
+increment adev->pm.dpm.num_ps everytime the array member is allocated.
+
+Signed-off-by: Keita Suzuki <keitasuzuki.park@sslab.ics.keio.ac.jp>
+Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/gpu/drm/amd/amdgpu/si_dpm.c | 8 +++-----
+ 1 file changed, 3 insertions(+), 5 deletions(-)
+
+diff --git a/drivers/gpu/drm/amd/amdgpu/si_dpm.c b/drivers/gpu/drm/amd/amdgpu/si_dpm.c
+index 4cb4c891120b..9931d5c17cfb 100644
+--- a/drivers/gpu/drm/amd/amdgpu/si_dpm.c
++++ b/drivers/gpu/drm/amd/amdgpu/si_dpm.c
+@@ -7250,17 +7250,15 @@ static int si_parse_power_table(struct amdgpu_device *adev)
+       if (!adev->pm.dpm.ps)
+               return -ENOMEM;
+       power_state_offset = (u8 *)state_array->states;
+-      for (i = 0; i < state_array->ucNumEntries; i++) {
++      for (adev->pm.dpm.num_ps = 0, i = 0; i < state_array->ucNumEntries; i++) {
+               u8 *idx;
+               power_state = (union pplib_power_state *)power_state_offset;
+               non_clock_array_index = power_state->v2.nonClockInfoIndex;
+               non_clock_info = (struct _ATOM_PPLIB_NONCLOCK_INFO *)
+                       &non_clock_info_array->nonClockInfo[non_clock_array_index];
+               ps = kzalloc(sizeof(struct  si_ps), GFP_KERNEL);
+-              if (ps == NULL) {
+-                      kfree(adev->pm.dpm.ps);
++              if (ps == NULL)
+                       return -ENOMEM;
+-              }
+               adev->pm.dpm.ps[i].ps_priv = ps;
+               si_parse_pplib_non_clock_info(adev, &adev->pm.dpm.ps[i],
+                                             non_clock_info,
+@@ -7282,8 +7280,8 @@ static int si_parse_power_table(struct amdgpu_device *adev)
+                       k++;
+               }
+               power_state_offset += 2 + power_state->v2.ucNumDPMLevels;
++              adev->pm.dpm.num_ps++;
+       }
+-      adev->pm.dpm.num_ps = state_array->ucNumEntries;
+       /* fill in the vce power states */
+       for (i = 0; i < adev->pm.dpm.num_of_vce_states; i++) {
+-- 
+2.35.1
+
diff --git a/queue-5.4/drm-amd-pm-fix-the-compile-warning.patch b/queue-5.4/drm-amd-pm-fix-the-compile-warning.patch
new file mode 100644 (file)
index 0000000..d2bda85
--- /dev/null
@@ -0,0 +1,51 @@
+From b83fbbb6d62e91113a44f3a841ecd7a56648cab8 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Mon, 25 Apr 2022 10:16:46 +0800
+Subject: drm/amd/pm: fix the compile warning
+
+From: Evan Quan <evan.quan@amd.com>
+
+[ Upstream commit 555238d92ac32dbad2d77ad2bafc48d17391990c ]
+
+Fix the compile warning below:
+drivers/gpu/drm/amd/amdgpu/../pm/legacy-dpm/kv_dpm.c:1641
+kv_get_acp_boot_level() warn: always true condition '(table->entries[i]->clk >= 0) => (0-u32max >= 0)'
+
+Reported-by: kernel test robot <lkp@intel.com>
+CC: Alex Deucher <alexander.deucher@amd.com>
+Signed-off-by: Evan Quan <evan.quan@amd.com>
+Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
+Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/gpu/drm/amd/amdgpu/kv_dpm.c | 14 +-------------
+ 1 file changed, 1 insertion(+), 13 deletions(-)
+
+diff --git a/drivers/gpu/drm/amd/amdgpu/kv_dpm.c b/drivers/gpu/drm/amd/amdgpu/kv_dpm.c
+index 4b3faaccecb9..c8a5a5698edd 100644
+--- a/drivers/gpu/drm/amd/amdgpu/kv_dpm.c
++++ b/drivers/gpu/drm/amd/amdgpu/kv_dpm.c
+@@ -1609,19 +1609,7 @@ static int kv_update_samu_dpm(struct amdgpu_device *adev, bool gate)
+ static u8 kv_get_acp_boot_level(struct amdgpu_device *adev)
+ {
+-      u8 i;
+-      struct amdgpu_clock_voltage_dependency_table *table =
+-              &adev->pm.dpm.dyn_state.acp_clock_voltage_dependency_table;
+-
+-      for (i = 0; i < table->count; i++) {
+-              if (table->entries[i].clk >= 0) /* XXX */
+-                      break;
+-      }
+-
+-      if (i >= table->count)
+-              i = table->count - 1;
+-
+-      return i;
++      return 0;
+ }
+ static void kv_update_acp_boot_level(struct amdgpu_device *adev)
+-- 
+2.35.1
+
diff --git a/queue-5.4/drm-amdgpu-ucode-remove-firmware-load-type-check-in-.patch b/queue-5.4/drm-amdgpu-ucode-remove-firmware-load-type-check-in-.patch
new file mode 100644 (file)
index 0000000..9be8ca9
--- /dev/null
@@ -0,0 +1,40 @@
+From 24b60f2134a5850f3313680b964554fd30be14e3 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Mon, 2 May 2022 11:40:18 -0400
+Subject: drm/amdgpu/ucode: Remove firmware load type check in
+ amdgpu_ucode_free_bo
+
+From: Alice Wong <shiwei.wong@amd.com>
+
+[ Upstream commit ab0cd4a9ae5b4679b714d8dbfedc0901fecdce9f ]
+
+When psp_hw_init failed, it will set the load_type to AMDGPU_FW_LOAD_DIRECT.
+During amdgpu_device_ip_fini, amdgpu_ucode_free_bo checks that load_type is
+AMDGPU_FW_LOAD_DIRECT and skips deallocating fw_buf causing memory leak.
+Remove load_type check in amdgpu_ucode_free_bo.
+
+Signed-off-by: Alice Wong <shiwei.wong@amd.com>
+Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
+Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/gpu/drm/amd/amdgpu/amdgpu_ucode.c | 3 +--
+ 1 file changed, 1 insertion(+), 2 deletions(-)
+
+diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ucode.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_ucode.c
+index 3a6115ad0196..f3250db7f9c2 100644
+--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ucode.c
++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ucode.c
+@@ -568,8 +568,7 @@ int amdgpu_ucode_create_bo(struct amdgpu_device *adev)
+ void amdgpu_ucode_free_bo(struct amdgpu_device *adev)
+ {
+-      if (adev->firmware.load_type != AMDGPU_FW_LOAD_DIRECT)
+-              amdgpu_bo_free_kernel(&adev->firmware.fw_buf,
++      amdgpu_bo_free_kernel(&adev->firmware.fw_buf,
+               &adev->firmware.fw_buf_mc,
+               &adev->firmware.fw_buf_ptr);
+ }
+-- 
+2.35.1
+
diff --git a/queue-5.4/drm-bridge-adv7511-clean-up-cec-adapter-when-probe-f.patch b/queue-5.4/drm-bridge-adv7511-clean-up-cec-adapter-when-probe-f.patch
new file mode 100644 (file)
index 0000000..436b479
--- /dev/null
@@ -0,0 +1,37 @@
+From 1a8fc94837cae3573190dd8b4e4287d79d0cf2a6 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Mon, 21 Mar 2022 11:47:05 +0100
+Subject: drm/bridge: adv7511: clean up CEC adapter when probe fails
+
+From: Lucas Stach <l.stach@pengutronix.de>
+
+[ Upstream commit 7ed2b0dabf7a22874cb30f8878df239ef638eb53 ]
+
+When the probe routine fails we also need to clean up the
+CEC adapter registered in adv7511_cec_init().
+
+Fixes: 3b1b975003e4 ("drm: adv7511/33: add HDMI CEC support")
+Signed-off-by: Lucas Stach <l.stach@pengutronix.de>
+Reviewed-by: Robert Foss <robert.foss@linaro.org>
+Signed-off-by: Robert Foss <robert.foss@linaro.org>
+Link: https://patchwork.freedesktop.org/patch/msgid/20220321104705.2804423-1-l.stach@pengutronix.de
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/gpu/drm/bridge/adv7511/adv7511_drv.c | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/drivers/gpu/drm/bridge/adv7511/adv7511_drv.c b/drivers/gpu/drm/bridge/adv7511/adv7511_drv.c
+index 9e13e466e72c..e7bf32f234d7 100644
+--- a/drivers/gpu/drm/bridge/adv7511/adv7511_drv.c
++++ b/drivers/gpu/drm/bridge/adv7511/adv7511_drv.c
+@@ -1225,6 +1225,7 @@ static int adv7511_probe(struct i2c_client *i2c, const struct i2c_device_id *id)
+       return 0;
+ err_unregister_cec:
++      cec_unregister_adapter(adv7511->cec_adap);
+       i2c_unregister_device(adv7511->i2c_cec);
+       if (adv7511->cec_clk)
+               clk_disable_unprepare(adv7511->cec_clk);
+-- 
+2.35.1
+
diff --git a/queue-5.4/drm-bridge-fix-error-handling-in-analogix_dp_probe.patch b/queue-5.4/drm-bridge-fix-error-handling-in-analogix_dp_probe.patch
new file mode 100644 (file)
index 0000000..8f3441a
--- /dev/null
@@ -0,0 +1,80 @@
+From 1af6919b6384bde198535006c0e4dad4e28c46b9 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Wed, 20 Apr 2022 01:16:40 +0000
+Subject: drm/bridge: Fix error handling in analogix_dp_probe
+
+From: Miaoqian Lin <linmq006@gmail.com>
+
+[ Upstream commit 9f15930bb2ef9f031d62ffc49629cbae89137733 ]
+
+In the error handling path, the clk_prepare_enable() function
+call should be balanced by a corresponding 'clk_disable_unprepare()'
+call, as already done in the remove function.
+
+Fixes: 3424e3a4f844 ("drm: bridge: analogix/dp: split exynos dp driver to bridge directory")
+Signed-off-by: Miaoqian Lin <linmq006@gmail.com>
+Reviewed-by: Robert Foss <robert.foss@linaro.org>
+Signed-off-by: Robert Foss <robert.foss@linaro.org>
+Link: https://patchwork.freedesktop.org/patch/msgid/20220420011644.25730-1-linmq006@gmail.com
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ .../gpu/drm/bridge/analogix/analogix_dp_core.c | 18 +++++++++++++-----
+ 1 file changed, 13 insertions(+), 5 deletions(-)
+
+diff --git a/drivers/gpu/drm/bridge/analogix/analogix_dp_core.c b/drivers/gpu/drm/bridge/analogix/analogix_dp_core.c
+index 1f26890a8da6..3db0a631a6be 100644
+--- a/drivers/gpu/drm/bridge/analogix/analogix_dp_core.c
++++ b/drivers/gpu/drm/bridge/analogix/analogix_dp_core.c
+@@ -1696,8 +1696,10 @@ analogix_dp_probe(struct device *dev, struct analogix_dp_plat_data *plat_data)
+       res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
+       dp->reg_base = devm_ioremap_resource(&pdev->dev, res);
+-      if (IS_ERR(dp->reg_base))
+-              return ERR_CAST(dp->reg_base);
++      if (IS_ERR(dp->reg_base)) {
++              ret = PTR_ERR(dp->reg_base);
++              goto err_disable_clk;
++      }
+       dp->force_hpd = of_property_read_bool(dev->of_node, "force-hpd");
+@@ -1709,7 +1711,8 @@ analogix_dp_probe(struct device *dev, struct analogix_dp_plat_data *plat_data)
+       if (IS_ERR(dp->hpd_gpiod)) {
+               dev_err(dev, "error getting HDP GPIO: %ld\n",
+                       PTR_ERR(dp->hpd_gpiod));
+-              return ERR_CAST(dp->hpd_gpiod);
++              ret = PTR_ERR(dp->hpd_gpiod);
++              goto err_disable_clk;
+       }
+       if (dp->hpd_gpiod) {
+@@ -1729,7 +1732,8 @@ analogix_dp_probe(struct device *dev, struct analogix_dp_plat_data *plat_data)
+       if (dp->irq == -ENXIO) {
+               dev_err(&pdev->dev, "failed to get irq\n");
+-              return ERR_PTR(-ENODEV);
++              ret = -ENODEV;
++              goto err_disable_clk;
+       }
+       ret = devm_request_threaded_irq(&pdev->dev, dp->irq,
+@@ -1738,11 +1742,15 @@ analogix_dp_probe(struct device *dev, struct analogix_dp_plat_data *plat_data)
+                                       irq_flags, "analogix-dp", dp);
+       if (ret) {
+               dev_err(&pdev->dev, "failed to request irq\n");
+-              return ERR_PTR(ret);
++              goto err_disable_clk;
+       }
+       disable_irq(dp->irq);
+       return dp;
++
++err_disable_clk:
++      clk_disable_unprepare(dp->clock);
++      return ERR_PTR(ret);
+ }
+ EXPORT_SYMBOL_GPL(analogix_dp_probe);
+-- 
+2.35.1
+
diff --git a/queue-5.4/drm-edid-fix-invalid-edid-extension-block-filtering.patch b/queue-5.4/drm-edid-fix-invalid-edid-extension-block-filtering.patch
new file mode 100644 (file)
index 0000000..5c89e9d
--- /dev/null
@@ -0,0 +1,58 @@
+From d0936a1db57481c6840190e0b97f56a9e00c6e11 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Wed, 30 Mar 2022 20:04:26 +0300
+Subject: drm/edid: fix invalid EDID extension block filtering
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+From: Jani Nikula <jani.nikula@intel.com>
+
+[ Upstream commit 3aefc722ff52076407203b6af9713de567993adf ]
+
+The invalid EDID block filtering uses the number of valid EDID
+extensions instead of all EDID extensions for looping the extensions in
+the copy. This is fine, by coincidence, if all the invalid blocks are at
+the end of the EDID. However, it's completely broken if there are
+invalid extensions in the middle; the invalid blocks are included and
+valid blocks are excluded.
+
+Fix it by modifying the base block after, not before, the copy.
+
+Fixes: 14544d0937bf ("drm/edid: Only print the bad edid when aborting")
+Reported-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
+Signed-off-by: Jani Nikula <jani.nikula@intel.com>
+Reviewed-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
+Link: https://patchwork.freedesktop.org/patch/msgid/20220330170426.349248-1-jani.nikula@intel.com
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/gpu/drm/drm_edid.c | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+diff --git a/drivers/gpu/drm/drm_edid.c b/drivers/gpu/drm/drm_edid.c
+index aeeab1b57aad..2dc6dd6230d7 100644
+--- a/drivers/gpu/drm/drm_edid.c
++++ b/drivers/gpu/drm/drm_edid.c
+@@ -1702,9 +1702,6 @@ struct edid *drm_do_get_edid(struct drm_connector *connector,
+               connector_bad_edid(connector, edid, edid[0x7e] + 1);
+-              edid[EDID_LENGTH-1] += edid[0x7e] - valid_extensions;
+-              edid[0x7e] = valid_extensions;
+-
+               new = kmalloc_array(valid_extensions + 1, EDID_LENGTH,
+                                   GFP_KERNEL);
+               if (!new)
+@@ -1721,6 +1718,9 @@ struct edid *drm_do_get_edid(struct drm_connector *connector,
+                       base += EDID_LENGTH;
+               }
++              new[EDID_LENGTH - 1] += new[0x7e] - valid_extensions;
++              new[0x7e] = valid_extensions;
++
+               kfree(edid);
+               edid = new;
+       }
+-- 
+2.35.1
+
diff --git a/queue-5.4/drm-fix-edid-struct-for-old-arm-oabi-format.patch b/queue-5.4/drm-fix-edid-struct-for-old-arm-oabi-format.patch
new file mode 100644 (file)
index 0000000..575eedc
--- /dev/null
@@ -0,0 +1,114 @@
+From 79e35cb77fff0960de1743be9652b0bc5624c1aa Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Sat, 28 May 2022 11:08:48 -0700
+Subject: drm: fix EDID struct for old ARM OABI format
+
+From: Linus Torvalds <torvalds@linux-foundation.org>
+
+[ Upstream commit 47f15561b69e226bfc034e94ff6dbec51a4662af ]
+
+When building the kernel for arm with the "-mabi=apcs-gnu" option, gcc
+will force alignment of all structures and unions to a word boundary
+(see also STRUCTURE_SIZE_BOUNDARY and the "-mstructure-size-boundary=XX"
+option if you're a gcc person), even when the members of said structures
+do not want or need said alignment.
+
+This completely messes up the structure alignment of 'struct edid' on
+those targets, because even though all the embedded structures are
+marked with "__attribute__((packed))", the unions that contain them are
+not.
+
+This was exposed by commit f1e4c916f97f ("drm/edid: add EDID block count
+and size helpers"), but the bug is pre-existing.  That commit just made
+the structure layout problem cause a build failure due to the addition
+of the
+
+        BUILD_BUG_ON(sizeof(*edid) != EDID_LENGTH);
+
+sanity check in drivers/gpu/drm/drm_edid.c:edid_block_data().
+
+This legacy union alignment should probably not be used in the first
+place, but we can fix the layout by adding the packed attribute to the
+union entries even when each member is already packed and it shouldn't
+matter in a sane build environment.
+
+You can see this issue with a trivial test program:
+
+  union {
+       struct {
+               char c[5];
+       };
+       struct {
+               char d;
+               unsigned e;
+       } __attribute__((packed));
+  } a = { "1234" };
+
+where building this with a normal "gcc -S" will result in the expected
+5-byte size of said union:
+
+       .type   a, @object
+       .size   a, 5
+
+but with an ARM compiler and the old ABI:
+
+    arm-linux-gnu-gcc -mabi=apcs-gnu -mfloat-abi=soft -S t.c
+
+you get
+
+       .type   a, %object
+       .size   a, 8
+
+instead, because even though each member of the union is packed, the
+union itself still gets aligned.
+
+This was reported by Sudip for the spear3xx_defconfig target.
+
+Link: https://lore.kernel.org/lkml/YpCUzStDnSgQLNFN@debian/
+Reported-by: Sudip Mukherjee <sudipm.mukherjee@gmail.com>
+Acked-by: Arnd Bergmann <arnd@arndb.de>
+Cc: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
+Cc: Maxime Ripard <mripard@kernel.org>
+Cc: Thomas Zimmermann <tzimmermann@suse.de>
+Cc: David Airlie <airlied@linux.ie>
+Cc: Daniel Vetter <daniel@ffwll.ch>
+Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ include/drm/drm_edid.h | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+diff --git a/include/drm/drm_edid.h b/include/drm/drm_edid.h
+index b9719418c3d2..f40a97417b68 100644
+--- a/include/drm/drm_edid.h
++++ b/include/drm/drm_edid.h
+@@ -116,7 +116,7 @@ struct detailed_data_monitor_range {
+                       u8 supported_scalings;
+                       u8 preferred_refresh;
+               } __attribute__((packed)) cvt;
+-      } formula;
++      } __attribute__((packed)) formula;
+ } __attribute__((packed));
+ struct detailed_data_wpindex {
+@@ -149,7 +149,7 @@ struct detailed_non_pixel {
+               struct detailed_data_wpindex color;
+               struct std_timing timings[6];
+               struct cvt_timing cvt[4];
+-      } data;
++      } __attribute__((packed)) data;
+ } __attribute__((packed));
+ #define EDID_DETAIL_EST_TIMINGS 0xf7
+@@ -167,7 +167,7 @@ struct detailed_timing {
+       union {
+               struct detailed_pixel_timing pixel_data;
+               struct detailed_non_pixel other_data;
+-      } data;
++      } __attribute__((packed)) data;
+ } __attribute__((packed));
+ #define DRM_EDID_INPUT_SERRATION_VSYNC (1 << 0)
+-- 
+2.35.1
+
diff --git a/queue-5.4/drm-komeda-fix-an-undefined-behavior-bug-in-komeda_p.patch b/queue-5.4/drm-komeda-fix-an-undefined-behavior-bug-in-komeda_p.patch
new file mode 100644 (file)
index 0000000..671163e
--- /dev/null
@@ -0,0 +1,58 @@
+From 5f2949d3f0ebe2e4b85d4302cac04d6a81b87e2c Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Wed, 1 Dec 2021 11:37:03 +0800
+Subject: drm/komeda: Fix an undefined behavior bug in komeda_plane_add()
+
+From: Zhou Qingyang <zhou1615@umn.edu>
+
+[ Upstream commit f5e284bb74ab296f98122673c7ecd22028b2c200 ]
+
+In komeda_plane_add(), komeda_get_layer_fourcc_list() is assigned to
+formats and used in drm_universal_plane_init().
+drm_universal_plane_init() passes formats to
+__drm_universal_plane_init(). __drm_universal_plane_init() further
+passes formats to memcpy() as src parameter, which could lead to an
+undefined behavior bug on failure of komeda_get_layer_fourcc_list().
+
+Fix this bug by adding a check of formats.
+
+This bug was found by a static analyzer. The analysis employs
+differential checking to identify inconsistent security operations
+(e.g., checks or kfrees) between two code paths and confirms that the
+inconsistent operations are not recovered in the current function or
+the callers, so they constitute bugs.
+
+Note that, as a bug found by static analysis, it can be a false
+positive or hard to trigger. Multiple researchers have cross-reviewed
+the bug.
+
+Builds with CONFIG_DRM_KOMEDA=m show no new warnings,
+and our static analyzer no longer warns about this code.
+
+Fixes: 61f1c4a8ab75 ("drm/komeda: Attach komeda_dev to DRM-KMS")
+Signed-off-by: Zhou Qingyang <zhou1615@umn.edu>
+Signed-off-by: Liviu Dudau <liviu.dudau@arm.com>
+Link: https://lore.kernel.org/dri-devel/20211201033704.32054-1-zhou1615@umn.edu
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/gpu/drm/arm/display/komeda/komeda_plane.c | 4 ++++
+ 1 file changed, 4 insertions(+)
+
+diff --git a/drivers/gpu/drm/arm/display/komeda/komeda_plane.c b/drivers/gpu/drm/arm/display/komeda/komeda_plane.c
+index a5f57b38d193..bc3f42e915e9 100644
+--- a/drivers/gpu/drm/arm/display/komeda/komeda_plane.c
++++ b/drivers/gpu/drm/arm/display/komeda/komeda_plane.c
+@@ -264,6 +264,10 @@ static int komeda_plane_add(struct komeda_kms_dev *kms,
+       formats = komeda_get_layer_fourcc_list(&mdev->fmt_tbl,
+                                              layer->layer_type, &n_formats);
++      if (!formats) {
++              kfree(kplane);
++              return -ENOMEM;
++      }
+       err = drm_universal_plane_init(&kms->base, plane,
+                       get_possible_crtcs(kms, c->pipeline),
+-- 
+2.35.1
+
diff --git a/queue-5.4/drm-komeda-return-early-if-drm_universal_plane_init-.patch b/queue-5.4/drm-komeda-return-early-if-drm_universal_plane_init-.patch
new file mode 100644 (file)
index 0000000..39bd239
--- /dev/null
@@ -0,0 +1,43 @@
+From 09ca9eafcdc8e80ea9355083684c1415638db3f1 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Thu, 2 Dec 2021 17:00:33 +0000
+Subject: drm/komeda: return early if drm_universal_plane_init() fails.
+
+From: Liviu Dudau <liviu.dudau@arm.com>
+
+[ Upstream commit c8f76c37cc3668ee45e081e76a15f24a352ebbdd ]
+
+If drm_universal_plane_init() fails early we jump to the common cleanup code
+that calls komeda_plane_destroy() which in turn could access the uninitalised
+drm_plane and crash. Return early if an error is detected without going through
+the common code.
+
+Reported-by: Steven Price <steven.price@arm.com>
+Reviewed-by: Steven Price <steven.price@arm.com>
+Signed-off-by: Liviu Dudau <liviu.dudau@arm.com>
+Link: https://lore.kernel.org/dri-devel/20211203100946.2706922-1-liviu.dudau@arm.com
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/gpu/drm/arm/display/komeda/komeda_plane.c | 6 ++++--
+ 1 file changed, 4 insertions(+), 2 deletions(-)
+
+diff --git a/drivers/gpu/drm/arm/display/komeda/komeda_plane.c b/drivers/gpu/drm/arm/display/komeda/komeda_plane.c
+index 98e915e325dd..a5f57b38d193 100644
+--- a/drivers/gpu/drm/arm/display/komeda/komeda_plane.c
++++ b/drivers/gpu/drm/arm/display/komeda/komeda_plane.c
+@@ -274,8 +274,10 @@ static int komeda_plane_add(struct komeda_kms_dev *kms,
+       komeda_put_fourcc_list(formats);
+-      if (err)
+-              goto cleanup;
++      if (err) {
++              kfree(kplane);
++              return err;
++      }
+       drm_plane_helper_add(plane, &komeda_plane_helper_funcs);
+-- 
+2.35.1
+
diff --git a/queue-5.4/drm-mali-dp-potential-dereference-of-null-pointer.patch b/queue-5.4/drm-mali-dp-potential-dereference-of-null-pointer.patch
new file mode 100644 (file)
index 0000000..5dc0d8f
--- /dev/null
@@ -0,0 +1,42 @@
+From ccd028f4ee2e78a6a1543cf1ac5e0f7eeb9d4a0c Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Tue, 14 Dec 2021 18:08:37 +0800
+Subject: drm: mali-dp: potential dereference of null pointer
+
+From: Jiasheng Jiang <jiasheng@iscas.ac.cn>
+
+[ Upstream commit 73c3ed7495c67b8fbdc31cf58e6ca8757df31a33 ]
+
+The return value of kzalloc() needs to be checked.
+To avoid use of null pointer '&state->base' in case of the
+failure of alloc.
+
+Fixes: 99665d072183 ("drm: mali-dp: add malidp_crtc_state struct")
+Signed-off-by: Jiasheng Jiang <jiasheng@iscas.ac.cn>
+Reviewed-by: Brian Starkey <brian.starkey@arm.com>
+Signed-off-by: Liviu Dudau <liviu.dudau@arm.com>
+Link: https://patchwork.freedesktop.org/patch/msgid/20211214100837.46912-1-jiasheng@iscas.ac.cn
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/gpu/drm/arm/malidp_crtc.c | 5 ++++-
+ 1 file changed, 4 insertions(+), 1 deletion(-)
+
+diff --git a/drivers/gpu/drm/arm/malidp_crtc.c b/drivers/gpu/drm/arm/malidp_crtc.c
+index 587d94798f5c..af729094260c 100644
+--- a/drivers/gpu/drm/arm/malidp_crtc.c
++++ b/drivers/gpu/drm/arm/malidp_crtc.c
+@@ -483,7 +483,10 @@ static void malidp_crtc_reset(struct drm_crtc *crtc)
+       if (crtc->state)
+               malidp_crtc_destroy_state(crtc, crtc->state);
+-      __drm_atomic_helper_crtc_reset(crtc, &state->base);
++      if (state)
++              __drm_atomic_helper_crtc_reset(crtc, &state->base);
++      else
++              __drm_atomic_helper_crtc_reset(crtc, NULL);
+ }
+ static int malidp_crtc_enable_vblank(struct drm_crtc *crtc)
+-- 
+2.35.1
+
diff --git a/queue-5.4/drm-mediatek-fix-mtk_cec_mask.patch b/queue-5.4/drm-mediatek-fix-mtk_cec_mask.patch
new file mode 100644 (file)
index 0000000..7eb84d6
--- /dev/null
@@ -0,0 +1,45 @@
+From d10ec1813315265414ef37c26b97ccc77064b100 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Wed, 16 Mar 2022 07:23:00 +0800
+Subject: drm/mediatek: Fix mtk_cec_mask()
+
+From: Miles Chen <miles.chen@mediatek.com>
+
+[ Upstream commit 2c5d69b0a141e1e98febe3111e6f4fd8420493a5 ]
+
+In current implementation, mtk_cec_mask() writes val into target register
+and ignores the mask. After talking to our hdmi experts, mtk_cec_mask()
+should read a register, clean only mask bits, and update (val | mask) bits
+to the register.
+
+Link: https://patchwork.kernel.org/project/linux-mediatek/patch/20220315232301.2434-1-miles.chen@mediatek.com/
+Fixes: 8f83f26891e1 ("drm/mediatek: Add HDMI support")
+Signed-off-by: Miles Chen <miles.chen@mediatek.com>
+Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>
+Reviewed-by: Matthias Brugger <matthias.bgg@gmail.com>
+Cc: Zhiqiang Lin <zhiqiang.lin@mediatek.com>
+Cc: CK Hu <ck.hu@mediatek.com>
+Cc: Matthias Brugger <matthias.bgg@gmail.com>
+Cc: AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>
+Signed-off-by: Chun-Kuang Hu <chunkuang.hu@kernel.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/gpu/drm/mediatek/mtk_cec.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/drivers/gpu/drm/mediatek/mtk_cec.c b/drivers/gpu/drm/mediatek/mtk_cec.c
+index cb29b649fcdb..12bf93769497 100644
+--- a/drivers/gpu/drm/mediatek/mtk_cec.c
++++ b/drivers/gpu/drm/mediatek/mtk_cec.c
+@@ -84,7 +84,7 @@ static void mtk_cec_mask(struct mtk_cec *cec, unsigned int offset,
+       u32 tmp = readl(cec->regs + offset) & ~mask;
+       tmp |= val & mask;
+-      writel(val, cec->regs + offset);
++      writel(tmp, cec->regs + offset);
+ }
+ void mtk_cec_set_hpd_event(struct device *dev,
+-- 
+2.35.1
+
diff --git a/queue-5.4/drm-msm-a6xx-fix-refcount-leak-in-a6xx_gpu_init.patch b/queue-5.4/drm-msm-a6xx-fix-refcount-leak-in-a6xx_gpu_init.patch
new file mode 100644 (file)
index 0000000..bdecb44
--- /dev/null
@@ -0,0 +1,43 @@
+From d4beead0e800cab746531f06a83632894d1ee2d3 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Thu, 12 May 2022 16:19:50 +0400
+Subject: drm/msm/a6xx: Fix refcount leak in a6xx_gpu_init
+
+From: Miaoqian Lin <linmq006@gmail.com>
+
+[ Upstream commit c56de483093d7ad0782327f95dda7da97bc4c315 ]
+
+of_parse_phandle() returns a node pointer with refcount
+incremented, we should use of_node_put() on it when not need anymore.
+
+a6xx_gmu_init() passes the node to of_find_device_by_node()
+and of_dma_configure(), of_find_device_by_node() will takes its
+reference, of_dma_configure() doesn't need the node after usage.
+
+Add missing of_node_put() to avoid refcount leak.
+
+Fixes: 4b565ca5a2cb ("drm/msm: Add A6XX device support")
+Signed-off-by: Miaoqian Lin <linmq006@gmail.com>
+Reviewed-by: Akhil P Oommen <quic_akhilpo@quicinc.com>
+Link: https://lore.kernel.org/r/20220512121955.56937-1-linmq006@gmail.com
+Signed-off-by: Rob Clark <robdclark@chromium.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/gpu/drm/msm/adreno/a6xx_gpu.c | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/drivers/gpu/drm/msm/adreno/a6xx_gpu.c b/drivers/gpu/drm/msm/adreno/a6xx_gpu.c
+index df2656e57991..a3ae6c1d341b 100644
+--- a/drivers/gpu/drm/msm/adreno/a6xx_gpu.c
++++ b/drivers/gpu/drm/msm/adreno/a6xx_gpu.c
+@@ -891,6 +891,7 @@ struct msm_gpu *a6xx_gpu_init(struct drm_device *dev)
+       BUG_ON(!node);
+       ret = a6xx_gmu_init(a6xx_gpu, node);
++      of_node_put(node);
+       if (ret) {
+               a6xx_destroy(&(a6xx_gpu->base.base));
+               return ERR_PTR(ret);
+-- 
+2.35.1
+
diff --git a/queue-5.4/drm-msm-disp-dpu1-set-vbif-hw-config-to-null-to-avoi.patch b/queue-5.4/drm-msm-disp-dpu1-set-vbif-hw-config-to-null-to-avoi.patch
new file mode 100644 (file)
index 0000000..d955351
--- /dev/null
@@ -0,0 +1,57 @@
+From 233e32107ee9fd702ccaa5965c6f2fb173f2f247 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Mon, 25 Apr 2022 08:56:53 +0530
+Subject: drm/msm/disp/dpu1: set vbif hw config to NULL to avoid use after
+ memory free during pm runtime resume
+
+From: Vinod Polimera <quic_vpolimer@quicinc.com>
+
+[ Upstream commit fa5186b279ecf44b14fb435540d2065be91cb1ed ]
+
+BUG: Unable to handle kernel paging request at virtual address 006b6b6b6b6b6be3
+
+Call trace:
+  dpu_vbif_init_memtypes+0x40/0xb8
+  dpu_runtime_resume+0xcc/0x1c0
+  pm_generic_runtime_resume+0x30/0x44
+  __genpd_runtime_resume+0x68/0x7c
+  genpd_runtime_resume+0x134/0x258
+  __rpm_callback+0x98/0x138
+  rpm_callback+0x30/0x88
+  rpm_resume+0x36c/0x49c
+  __pm_runtime_resume+0x80/0xb0
+  dpu_core_irq_uninstall+0x30/0xb0
+  dpu_irq_uninstall+0x18/0x24
+  msm_drm_uninit+0xd8/0x16c
+
+Fixes: 25fdd5933e4c ("drm/msm: Add SDM845 DPU support")
+Signed-off-by: Vinod Polimera <quic_vpolimer@quicinc.com>
+Reviewed-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
+Patchwork: https://patchwork.freedesktop.org/patch/483255/
+Link: https://lore.kernel.org/r/1650857213-30075-1-git-send-email-quic_vpolimer@quicinc.com
+[DB: fixed Fixes tag]
+Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c | 4 +++-
+ 1 file changed, 3 insertions(+), 1 deletion(-)
+
+diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c b/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c
+index 72f487692adb..c08c67338d73 100644
+--- a/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c
++++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c
+@@ -599,8 +599,10 @@ static void _dpu_kms_hw_destroy(struct dpu_kms *dpu_kms)
+               for (i = 0; i < dpu_kms->catalog->vbif_count; i++) {
+                       u32 vbif_idx = dpu_kms->catalog->vbif[i].id;
+-                      if ((vbif_idx < VBIF_MAX) && dpu_kms->hw_vbif[vbif_idx])
++                      if ((vbif_idx < VBIF_MAX) && dpu_kms->hw_vbif[vbif_idx]) {
+                               dpu_hw_vbif_destroy(dpu_kms->hw_vbif[vbif_idx]);
++                              dpu_kms->hw_vbif[vbif_idx] = NULL;
++                      }
+               }
+       }
+-- 
+2.35.1
+
diff --git a/queue-5.4/drm-msm-dsi-fix-error-checks-and-return-values-for-d.patch b/queue-5.4/drm-msm-dsi-fix-error-checks-and-return-values-for-d.patch
new file mode 100644 (file)
index 0000000..04b4c4a
--- /dev/null
@@ -0,0 +1,85 @@
+From f0e91f09b29115e5f66fc59305706b339df9f41f Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Sat, 2 Apr 2022 02:11:04 +0300
+Subject: drm/msm/dsi: fix error checks and return values for DSI xmit
+ functions
+
+From: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
+
+[ Upstream commit f0e7e9ed379c012c4d6b09a09b868accc426223c ]
+
+As noticed by Dan ([1] an the followup thread) there are multiple issues
+with the return values for MSM DSI command transmission callback. In
+the error case it can easily return a positive value when it should
+have returned a proper error code.
+
+This commits attempts to fix these issues both in TX and in RX paths.
+
+[1]: https://lore.kernel.org/linux-arm-msm/20211001123617.GH2283@kili/
+
+Fixes: a689554ba6ed ("drm/msm: Initial add DSI connector support")
+Reported-by: Dan Carpenter <dan.carpenter@oracle.com>
+Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
+Reviewed-by: Abhinav Kumar <quic_abhinavk@quicinc.com>
+Tested-by: Marijn Suijten <marijn.suijten@somainline.org>
+Patchwork: https://patchwork.freedesktop.org/patch/480501/
+Link: https://lore.kernel.org/r/20220401231104.967193-1-dmitry.baryshkov@linaro.org
+Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/gpu/drm/msm/dsi/dsi_host.c | 21 ++++++++++++++-------
+ 1 file changed, 14 insertions(+), 7 deletions(-)
+
+diff --git a/drivers/gpu/drm/msm/dsi/dsi_host.c b/drivers/gpu/drm/msm/dsi/dsi_host.c
+index 423c4ae2be10..743142e15b4c 100644
+--- a/drivers/gpu/drm/msm/dsi/dsi_host.c
++++ b/drivers/gpu/drm/msm/dsi/dsi_host.c
+@@ -1348,10 +1348,10 @@ static int dsi_cmds2buf_tx(struct msm_dsi_host *msm_host,
+                       dsi_get_bpp(msm_host->format) / 8;
+       len = dsi_cmd_dma_add(msm_host, msg);
+-      if (!len) {
++      if (len < 0) {
+               pr_err("%s: failed to add cmd type = 0x%x\n",
+                       __func__,  msg->type);
+-              return -EINVAL;
++              return len;
+       }
+       /* for video mode, do not send cmds more than
+@@ -1370,10 +1370,14 @@ static int dsi_cmds2buf_tx(struct msm_dsi_host *msm_host,
+       }
+       ret = dsi_cmd_dma_tx(msm_host, len);
+-      if (ret < len) {
+-              pr_err("%s: cmd dma tx failed, type=0x%x, data0=0x%x, len=%d\n",
+-                      __func__, msg->type, (*(u8 *)(msg->tx_buf)), len);
+-              return -ECOMM;
++      if (ret < 0) {
++              pr_err("%s: cmd dma tx failed, type=0x%x, data0=0x%x, len=%d, ret=%d\n",
++                      __func__, msg->type, (*(u8 *)(msg->tx_buf)), len, ret);
++              return ret;
++      } else if (ret < len) {
++              pr_err("%s: cmd dma tx failed, type=0x%x, data0=0x%x, ret=%d len=%d\n",
++                      __func__, msg->type, (*(u8 *)(msg->tx_buf)), ret, len);
++              return -EIO;
+       }
+       return len;
+@@ -2099,9 +2103,12 @@ int msm_dsi_host_cmd_rx(struct mipi_dsi_host *host,
+               }
+               ret = dsi_cmds2buf_tx(msm_host, msg);
+-              if (ret < msg->tx_len) {
++              if (ret < 0) {
+                       pr_err("%s: Read cmd Tx failed, %d\n", __func__, ret);
+                       return ret;
++              } else if (ret < msg->tx_len) {
++                      pr_err("%s: Read cmd Tx failed, too short: %d\n", __func__, ret);
++                      return -ECOMM;
+               }
+               /*
+-- 
+2.35.1
+
diff --git a/queue-5.4/drm-msm-fix-error-check-return-value-of-irq_of_parse.patch b/queue-5.4/drm-msm-fix-error-check-return-value-of-irq_of_parse.patch
new file mode 100644 (file)
index 0000000..1af7196
--- /dev/null
@@ -0,0 +1,43 @@
+From 39b2e4a1871966eac4516a1ba039400af3d0d738 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Sun, 24 Apr 2022 03:19:59 +0000
+Subject: drm: msm: fix error check return value of irq_of_parse_and_map()
+
+From: Lv Ruyi <lv.ruyi@zte.com.cn>
+
+[ Upstream commit b9e4f1d2b505df8e2439b63e67afaa287c1c43e2 ]
+
+The irq_of_parse_and_map() function returns 0 on failure, and does not
+return an negative value.
+
+Reported-by: Zeal Robot <zealci@zte.com.cn>
+Signed-off-by: Lv Ruyi <lv.ruyi@zte.com.cn>
+Reviewed-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
+Patchwork: https://patchwork.freedesktop.org/patch/483175/
+Link: https://lore.kernel.org/r/20220424031959.3172406-1-lv.ruyi@zte.com.cn
+Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/gpu/drm/msm/disp/mdp5/mdp5_kms.c | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+diff --git a/drivers/gpu/drm/msm/disp/mdp5/mdp5_kms.c b/drivers/gpu/drm/msm/disp/mdp5/mdp5_kms.c
+index 77823ccdd0f8..39d0082eedcc 100644
+--- a/drivers/gpu/drm/msm/disp/mdp5/mdp5_kms.c
++++ b/drivers/gpu/drm/msm/disp/mdp5/mdp5_kms.c
+@@ -698,9 +698,9 @@ struct msm_kms *mdp5_kms_init(struct drm_device *dev)
+       pdev = mdp5_kms->pdev;
+       irq = irq_of_parse_and_map(pdev->dev.of_node, 0);
+-      if (irq < 0) {
+-              ret = irq;
+-              DRM_DEV_ERROR(&pdev->dev, "failed to get irq: %d\n", ret);
++      if (!irq) {
++              ret = -EINVAL;
++              DRM_DEV_ERROR(&pdev->dev, "failed to get irq\n");
+               goto fail;
+       }
+-- 
+2.35.1
+
diff --git a/queue-5.4/drm-msm-fix-possible-memory-leak-in-mdp5_crtc_cursor.patch b/queue-5.4/drm-msm-fix-possible-memory-leak-in-mdp5_crtc_cursor.patch
new file mode 100644 (file)
index 0000000..cd10500
--- /dev/null
@@ -0,0 +1,40 @@
+From 5eff7972afcfebf8de7b7922471a310bd81369c6 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Mon, 9 May 2022 14:11:25 +0800
+Subject: drm: msm: fix possible memory leak in mdp5_crtc_cursor_set()
+
+From: Hangyu Hua <hbh25y@gmail.com>
+
+[ Upstream commit 947a844bb3ebff0f4736d244d792ce129f6700d7 ]
+
+drm_gem_object_lookup will call drm_gem_object_get inside. So cursor_bo
+needs to be put when msm_gem_get_and_pin_iova fails.
+
+Fixes: e172d10a9c4a ("drm/msm/mdp5: Add hardware cursor support")
+Signed-off-by: Hangyu Hua <hbh25y@gmail.com>
+Link: https://lore.kernel.org/r/20220509061125.18585-1-hbh25y@gmail.com
+Signed-off-by: Rob Clark <robdclark@chromium.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/gpu/drm/msm/disp/mdp5/mdp5_crtc.c | 4 +++-
+ 1 file changed, 3 insertions(+), 1 deletion(-)
+
+diff --git a/drivers/gpu/drm/msm/disp/mdp5/mdp5_crtc.c b/drivers/gpu/drm/msm/disp/mdp5/mdp5_crtc.c
+index 9afbce3cb87b..03d60eb09257 100644
+--- a/drivers/gpu/drm/msm/disp/mdp5/mdp5_crtc.c
++++ b/drivers/gpu/drm/msm/disp/mdp5/mdp5_crtc.c
+@@ -909,8 +909,10 @@ static int mdp5_crtc_cursor_set(struct drm_crtc *crtc,
+       ret = msm_gem_get_and_pin_iova(cursor_bo, kms->aspace,
+                       &mdp5_crtc->cursor.iova);
+-      if (ret)
++      if (ret) {
++              drm_gem_object_put(cursor_bo);
+               return -EINVAL;
++      }
+       pm_runtime_get_sync(&pdev->dev);
+-- 
+2.35.1
+
diff --git a/queue-5.4/drm-msm-hdmi-check-return-value-after-calling-platfo.patch b/queue-5.4/drm-msm-hdmi-check-return-value-after-calling-platfo.patch
new file mode 100644 (file)
index 0000000..e367daf
--- /dev/null
@@ -0,0 +1,42 @@
+From 672b39645c5a64489ed0389f7322c51ac205ea57 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Fri, 22 Apr 2022 11:22:27 +0800
+Subject: drm/msm/hdmi: check return value after calling
+ platform_get_resource_byname()
+
+From: Yang Yingliang <yangyingliang@huawei.com>
+
+[ Upstream commit a36e506711548df923ceb7ec9f6001375be799a5 ]
+
+It will cause null-ptr-deref if platform_get_resource_byname() returns NULL,
+we need check the return value.
+
+Fixes: c6a57a50ad56 ("drm/msm/hdmi: add hdmi hdcp support (V3)")
+Signed-off-by: Yang Yingliang <yangyingliang@huawei.com>
+Reviewed-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
+Patchwork: https://patchwork.freedesktop.org/patch/482992/
+Link: https://lore.kernel.org/r/20220422032227.2991553-1-yangyingliang@huawei.com
+Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/gpu/drm/msm/hdmi/hdmi.c | 4 ++++
+ 1 file changed, 4 insertions(+)
+
+diff --git a/drivers/gpu/drm/msm/hdmi/hdmi.c b/drivers/gpu/drm/msm/hdmi/hdmi.c
+index 1a7e77373407..a0fd62b6ec99 100644
+--- a/drivers/gpu/drm/msm/hdmi/hdmi.c
++++ b/drivers/gpu/drm/msm/hdmi/hdmi.c
+@@ -142,6 +142,10 @@ static struct hdmi *msm_hdmi_init(struct platform_device *pdev)
+       /* HDCP needs physical address of hdmi register */
+       res = platform_get_resource_byname(pdev, IORESOURCE_MEM,
+               config->mmio_name);
++      if (!res) {
++              ret = -EINVAL;
++              goto fail;
++      }
+       hdmi->mmio_phy_addr = res->start;
+       hdmi->qfprom_mmio = msm_ioremap(pdev,
+-- 
+2.35.1
+
diff --git a/queue-5.4/drm-msm-hdmi-fix-error-check-return-value-of-irq_of_.patch b/queue-5.4/drm-msm-hdmi-fix-error-check-return-value-of-irq_of_.patch
new file mode 100644 (file)
index 0000000..aab53e0
--- /dev/null
@@ -0,0 +1,44 @@
+From b3f5badbbc26ab5dfcab37e9d971ce7096bc44e6 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Mon, 25 Apr 2022 09:18:31 +0000
+Subject: drm/msm/hdmi: fix error check return value of irq_of_parse_and_map()
+
+From: Lv Ruyi <lv.ruyi@zte.com.cn>
+
+[ Upstream commit 03371e4fbdeb7f596cbceacb59e474248b6d95ac ]
+
+The irq_of_parse_and_map() function returns 0 on failure, and does not
+return a negative value anyhow, so never enter this conditional branch.
+
+Fixes: f6a8eaca0ea1 ("drm/msm/mdp5: use irqdomains")
+Reported-by: Zeal Robot <zealci@zte.com.cn>
+Signed-off-by: Lv Ruyi <lv.ruyi@zte.com.cn>
+Reviewed-by: Stephen Boyd <swboyd@chromium.org>
+Patchwork: https://patchwork.freedesktop.org/patch/483294/
+Link: https://lore.kernel.org/r/20220425091831.3500487-1-lv.ruyi@zte.com.cn
+Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/gpu/drm/msm/hdmi/hdmi.c | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+diff --git a/drivers/gpu/drm/msm/hdmi/hdmi.c b/drivers/gpu/drm/msm/hdmi/hdmi.c
+index a0fd62b6ec99..e4c9ff934e5b 100644
+--- a/drivers/gpu/drm/msm/hdmi/hdmi.c
++++ b/drivers/gpu/drm/msm/hdmi/hdmi.c
+@@ -315,9 +315,9 @@ int msm_hdmi_modeset_init(struct hdmi *hdmi,
+       }
+       hdmi->irq = irq_of_parse_and_map(pdev->dev.of_node, 0);
+-      if (hdmi->irq < 0) {
+-              ret = hdmi->irq;
+-              DRM_DEV_ERROR(dev->dev, "failed to get irq: %d\n", ret);
++      if (!hdmi->irq) {
++              ret = -EINVAL;
++              DRM_DEV_ERROR(dev->dev, "failed to get irq\n");
+               goto fail;
+       }
+-- 
+2.35.1
+
diff --git a/queue-5.4/drm-msm-mdp5-return-error-code-in-mdp5_mixer_release.patch b/queue-5.4/drm-msm-mdp5-return-error-code-in-mdp5_mixer_release.patch
new file mode 100644 (file)
index 0000000..3c5c269
--- /dev/null
@@ -0,0 +1,108 @@
+From 7b92bf46b2266717d559e907be1182d82f5c5607 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Thu, 5 May 2022 14:40:51 -0700
+Subject: drm/msm/mdp5: Return error code in mdp5_mixer_release when deadlock
+ is detected
+
+From: Jessica Zhang <quic_jesszhan@quicinc.com>
+
+[ Upstream commit ca75f6f7c6f89365e40f10f641b15981b1f07c31 ]
+
+There is a possibility for mdp5_get_global_state to return
+-EDEADLK when acquiring the modeset lock, but currently global_state in
+mdp5_mixer_release doesn't check for if an error is returned.
+
+To avoid a NULL dereference error, let's have mdp5_mixer_release
+check if an error is returned and propagate that error.
+
+Reported-by: Tomeu Vizoso <tomeu.vizoso@collabora.com>
+Signed-off-by: Jessica Zhang <quic_jesszhan@quicinc.com>
+Fixes: 7907a0d77cb4 ("drm/msm/mdp5: Use the new private_obj state")
+Reviewed-by: Rob Clark <robdclark@gmail.com>
+Reviewed-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
+Patchwork: https://patchwork.freedesktop.org/patch/485181/
+Link: https://lore.kernel.org/r/20220505214051.155-2-quic_jesszhan@quicinc.com
+Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/gpu/drm/msm/disp/mdp5/mdp5_crtc.c  | 10 ++++++++--
+ drivers/gpu/drm/msm/disp/mdp5/mdp5_mixer.c | 15 +++++++++++----
+ drivers/gpu/drm/msm/disp/mdp5/mdp5_mixer.h |  4 ++--
+ 3 files changed, 21 insertions(+), 8 deletions(-)
+
+diff --git a/drivers/gpu/drm/msm/disp/mdp5/mdp5_crtc.c b/drivers/gpu/drm/msm/disp/mdp5/mdp5_crtc.c
+index 395146884a22..9afbce3cb87b 100644
+--- a/drivers/gpu/drm/msm/disp/mdp5/mdp5_crtc.c
++++ b/drivers/gpu/drm/msm/disp/mdp5/mdp5_crtc.c
+@@ -534,9 +534,15 @@ int mdp5_crtc_setup_pipeline(struct drm_crtc *crtc,
+               if (ret)
+                       return ret;
+-              mdp5_mixer_release(new_crtc_state->state, old_mixer);
++              ret = mdp5_mixer_release(new_crtc_state->state, old_mixer);
++              if (ret)
++                      return ret;
++
+               if (old_r_mixer) {
+-                      mdp5_mixer_release(new_crtc_state->state, old_r_mixer);
++                      ret = mdp5_mixer_release(new_crtc_state->state, old_r_mixer);
++                      if (ret)
++                              return ret;
++
+                       if (!need_right_mixer)
+                               pipeline->r_mixer = NULL;
+               }
+diff --git a/drivers/gpu/drm/msm/disp/mdp5/mdp5_mixer.c b/drivers/gpu/drm/msm/disp/mdp5/mdp5_mixer.c
+index 954db683ae44..2536def2a000 100644
+--- a/drivers/gpu/drm/msm/disp/mdp5/mdp5_mixer.c
++++ b/drivers/gpu/drm/msm/disp/mdp5/mdp5_mixer.c
+@@ -116,21 +116,28 @@ int mdp5_mixer_assign(struct drm_atomic_state *s, struct drm_crtc *crtc,
+       return 0;
+ }
+-void mdp5_mixer_release(struct drm_atomic_state *s, struct mdp5_hw_mixer *mixer)
++int mdp5_mixer_release(struct drm_atomic_state *s, struct mdp5_hw_mixer *mixer)
+ {
+       struct mdp5_global_state *global_state = mdp5_get_global_state(s);
+-      struct mdp5_hw_mixer_state *new_state = &global_state->hwmixer;
++      struct mdp5_hw_mixer_state *new_state;
+       if (!mixer)
+-              return;
++              return 0;
++
++      if (IS_ERR(global_state))
++              return PTR_ERR(global_state);
++
++      new_state = &global_state->hwmixer;
+       if (WARN_ON(!new_state->hwmixer_to_crtc[mixer->idx]))
+-              return;
++              return -EINVAL;
+       DBG("%s: release from crtc %s", mixer->name,
+           new_state->hwmixer_to_crtc[mixer->idx]->name);
+       new_state->hwmixer_to_crtc[mixer->idx] = NULL;
++
++      return 0;
+ }
+ void mdp5_mixer_destroy(struct mdp5_hw_mixer *mixer)
+diff --git a/drivers/gpu/drm/msm/disp/mdp5/mdp5_mixer.h b/drivers/gpu/drm/msm/disp/mdp5/mdp5_mixer.h
+index 43c9ba43ce18..545ee223b9d7 100644
+--- a/drivers/gpu/drm/msm/disp/mdp5/mdp5_mixer.h
++++ b/drivers/gpu/drm/msm/disp/mdp5/mdp5_mixer.h
+@@ -30,7 +30,7 @@ void mdp5_mixer_destroy(struct mdp5_hw_mixer *lm);
+ int mdp5_mixer_assign(struct drm_atomic_state *s, struct drm_crtc *crtc,
+                     uint32_t caps, struct mdp5_hw_mixer **mixer,
+                     struct mdp5_hw_mixer **r_mixer);
+-void mdp5_mixer_release(struct drm_atomic_state *s,
+-                      struct mdp5_hw_mixer *mixer);
++int mdp5_mixer_release(struct drm_atomic_state *s,
++                     struct mdp5_hw_mixer *mixer);
+ #endif /* __MDP5_LM_H__ */
+-- 
+2.35.1
+
diff --git a/queue-5.4/drm-msm-mdp5-return-error-code-in-mdp5_pipe_release-.patch b/queue-5.4/drm-msm-mdp5-return-error-code-in-mdp5_pipe_release-.patch
new file mode 100644 (file)
index 0000000..f8277c7
--- /dev/null
@@ -0,0 +1,134 @@
+From 9e333f2575daa9705a13451593af71f45ddd847d Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Thu, 5 May 2022 14:40:50 -0700
+Subject: drm/msm/mdp5: Return error code in mdp5_pipe_release when deadlock is
+ detected
+
+From: Jessica Zhang <quic_jesszhan@quicinc.com>
+
+[ Upstream commit d59be579fa932c46b908f37509f319cbd4ca9a68 ]
+
+mdp5_get_global_state runs the risk of hitting a -EDEADLK when acquiring
+the modeset lock, but currently mdp5_pipe_release doesn't check for if
+an error is returned. Because of this, there is a possibility of
+mdp5_pipe_release hitting a NULL dereference error.
+
+To avoid this, let's have mdp5_pipe_release check if
+mdp5_get_global_state returns an error and propogate that error.
+
+Changes since v1:
+- Separated declaration and initialization of *new_state to avoid
+  compiler warning
+- Fixed some spelling mistakes in commit message
+
+Changes since v2:
+- Return 0 in case where hwpipe is NULL as this is considered normal
+  behavior
+- Added 2nd patch in series to fix a similar NULL dereference issue in
+  mdp5_mixer_release
+
+Reported-by: Tomeu Vizoso <tomeu.vizoso@collabora.com>
+Signed-off-by: Jessica Zhang <quic_jesszhan@quicinc.com>
+Fixes: 7907a0d77cb4 ("drm/msm/mdp5: Use the new private_obj state")
+Reviewed-by: Rob Clark <robdclark@gmail.com>
+Reviewed-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
+Patchwork: https://patchwork.freedesktop.org/patch/485179/
+Link: https://lore.kernel.org/r/20220505214051.155-1-quic_jesszhan@quicinc.com
+Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/gpu/drm/msm/disp/mdp5/mdp5_pipe.c  | 15 +++++++++++----
+ drivers/gpu/drm/msm/disp/mdp5/mdp5_pipe.h  |  2 +-
+ drivers/gpu/drm/msm/disp/mdp5/mdp5_plane.c | 20 ++++++++++++++++----
+ 3 files changed, 28 insertions(+), 9 deletions(-)
+
+diff --git a/drivers/gpu/drm/msm/disp/mdp5/mdp5_pipe.c b/drivers/gpu/drm/msm/disp/mdp5/mdp5_pipe.c
+index ba6695963aa6..a4f5cb90f3e8 100644
+--- a/drivers/gpu/drm/msm/disp/mdp5/mdp5_pipe.c
++++ b/drivers/gpu/drm/msm/disp/mdp5/mdp5_pipe.c
+@@ -119,18 +119,23 @@ int mdp5_pipe_assign(struct drm_atomic_state *s, struct drm_plane *plane,
+       return 0;
+ }
+-void mdp5_pipe_release(struct drm_atomic_state *s, struct mdp5_hw_pipe *hwpipe)
++int mdp5_pipe_release(struct drm_atomic_state *s, struct mdp5_hw_pipe *hwpipe)
+ {
+       struct msm_drm_private *priv = s->dev->dev_private;
+       struct mdp5_kms *mdp5_kms = to_mdp5_kms(to_mdp_kms(priv->kms));
+       struct mdp5_global_state *state = mdp5_get_global_state(s);
+-      struct mdp5_hw_pipe_state *new_state = &state->hwpipe;
++      struct mdp5_hw_pipe_state *new_state;
+       if (!hwpipe)
+-              return;
++              return 0;
++
++      if (IS_ERR(state))
++              return PTR_ERR(state);
++
++      new_state = &state->hwpipe;
+       if (WARN_ON(!new_state->hwpipe_to_plane[hwpipe->idx]))
+-              return;
++              return -EINVAL;
+       DBG("%s: release from plane %s", hwpipe->name,
+               new_state->hwpipe_to_plane[hwpipe->idx]->name);
+@@ -141,6 +146,8 @@ void mdp5_pipe_release(struct drm_atomic_state *s, struct mdp5_hw_pipe *hwpipe)
+       }
+       new_state->hwpipe_to_plane[hwpipe->idx] = NULL;
++
++      return 0;
+ }
+ void mdp5_pipe_destroy(struct mdp5_hw_pipe *hwpipe)
+diff --git a/drivers/gpu/drm/msm/disp/mdp5/mdp5_pipe.h b/drivers/gpu/drm/msm/disp/mdp5/mdp5_pipe.h
+index 9b26d0761bd4..cca67938cab2 100644
+--- a/drivers/gpu/drm/msm/disp/mdp5/mdp5_pipe.h
++++ b/drivers/gpu/drm/msm/disp/mdp5/mdp5_pipe.h
+@@ -37,7 +37,7 @@ int mdp5_pipe_assign(struct drm_atomic_state *s, struct drm_plane *plane,
+                    uint32_t caps, uint32_t blkcfg,
+                    struct mdp5_hw_pipe **hwpipe,
+                    struct mdp5_hw_pipe **r_hwpipe);
+-void mdp5_pipe_release(struct drm_atomic_state *s, struct mdp5_hw_pipe *hwpipe);
++int mdp5_pipe_release(struct drm_atomic_state *s, struct mdp5_hw_pipe *hwpipe);
+ struct mdp5_hw_pipe *mdp5_pipe_init(enum mdp5_pipe pipe,
+               uint32_t reg_offset, uint32_t caps);
+diff --git a/drivers/gpu/drm/msm/disp/mdp5/mdp5_plane.c b/drivers/gpu/drm/msm/disp/mdp5/mdp5_plane.c
+index da0799333970..0dc23c86747e 100644
+--- a/drivers/gpu/drm/msm/disp/mdp5/mdp5_plane.c
++++ b/drivers/gpu/drm/msm/disp/mdp5/mdp5_plane.c
+@@ -393,12 +393,24 @@ static int mdp5_plane_atomic_check_with_state(struct drm_crtc_state *crtc_state,
+                               mdp5_state->r_hwpipe = NULL;
+-                      mdp5_pipe_release(state->state, old_hwpipe);
+-                      mdp5_pipe_release(state->state, old_right_hwpipe);
++                      ret = mdp5_pipe_release(state->state, old_hwpipe);
++                      if (ret)
++                              return ret;
++
++                      ret = mdp5_pipe_release(state->state, old_right_hwpipe);
++                      if (ret)
++                              return ret;
++
+               }
+       } else {
+-              mdp5_pipe_release(state->state, mdp5_state->hwpipe);
+-              mdp5_pipe_release(state->state, mdp5_state->r_hwpipe);
++              ret = mdp5_pipe_release(state->state, mdp5_state->hwpipe);
++              if (ret)
++                      return ret;
++
++              ret = mdp5_pipe_release(state->state, mdp5_state->r_hwpipe);
++              if (ret)
++                      return ret;
++
+               mdp5_state->hwpipe = mdp5_state->r_hwpipe = NULL;
+       }
+-- 
+2.35.1
+
diff --git a/queue-5.4/drm-msm-return-an-error-pointer-in-msm_gem_prime_get.patch b/queue-5.4/drm-msm-return-an-error-pointer-in-msm_gem_prime_get.patch
new file mode 100644 (file)
index 0000000..7c8d519
--- /dev/null
@@ -0,0 +1,40 @@
+From 16059fccc38c85ca10b31f8cd2389e21c1fb11cb Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Thu, 5 May 2022 13:28:05 +0300
+Subject: drm/msm: return an error pointer in msm_gem_prime_get_sg_table()
+
+From: Dan Carpenter <dan.carpenter@oracle.com>
+
+[ Upstream commit cf575e31611eb6dccf08fad02e57e35b2187704d ]
+
+The msm_gem_prime_get_sg_table() needs to return error pointers on
+error.  This is called from drm_gem_map_dma_buf() and returning a
+NULL will lead to a crash in that function.
+
+Fixes: ac45146733b0 ("drm/msm: fix msm_gem_prime_get_sg_table()")
+Signed-off-by: Dan Carpenter <dan.carpenter@oracle.com>
+Reviewed-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
+Patchwork: https://patchwork.freedesktop.org/patch/485023/
+Link: https://lore.kernel.org/r/YnOmtS5tfENywR9m@kili
+Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/gpu/drm/msm/msm_gem_prime.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/drivers/gpu/drm/msm/msm_gem_prime.c b/drivers/gpu/drm/msm/msm_gem_prime.c
+index d7c8948427fe..705a834ba1e6 100644
+--- a/drivers/gpu/drm/msm/msm_gem_prime.c
++++ b/drivers/gpu/drm/msm/msm_gem_prime.c
+@@ -17,7 +17,7 @@ struct sg_table *msm_gem_prime_get_sg_table(struct drm_gem_object *obj)
+       int npages = obj->size >> PAGE_SHIFT;
+       if (WARN_ON(!msm_obj->pages))  /* should have already pinned! */
+-              return NULL;
++              return ERR_PTR(-ENOMEM);
+       return drm_prime_pages_to_sg(msm_obj->pages, npages);
+ }
+-- 
+2.35.1
+
diff --git a/queue-5.4/drm-plane-move-range-check-for-format_count-earlier.patch b/queue-5.4/drm-plane-move-range-check-for-format_count-earlier.patch
new file mode 100644 (file)
index 0000000..6b10a46
--- /dev/null
@@ -0,0 +1,59 @@
+From fb9e52b80bff9368cac4678f60141bafb7c82657 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Fri, 3 Dec 2021 10:28:15 +0000
+Subject: drm/plane: Move range check for format_count earlier
+
+From: Steven Price <steven.price@arm.com>
+
+[ Upstream commit 4b674dd69701c2e22e8e7770c1706a69f3b17269 ]
+
+While the check for format_count > 64 in __drm_universal_plane_init()
+shouldn't be hit (it's a WARN_ON), in its current position it will then
+leak the plane->format_types array and fail to call
+drm_mode_object_unregister() leaking the modeset identifier. Move it to
+the start of the function to avoid allocating those resources in the
+first place.
+
+Signed-off-by: Steven Price <steven.price@arm.com>
+Signed-off-by: Liviu Dudau <liviu.dudau@arm.com>
+Link: https://lore.kernel.org/dri-devel/20211203102815.38624-1-steven.price@arm.com/
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/gpu/drm/drm_plane.c | 14 +++++++-------
+ 1 file changed, 7 insertions(+), 7 deletions(-)
+
+diff --git a/drivers/gpu/drm/drm_plane.c b/drivers/gpu/drm/drm_plane.c
+index d6ad60ab0d38..6bdebcca5690 100644
+--- a/drivers/gpu/drm/drm_plane.c
++++ b/drivers/gpu/drm/drm_plane.c
+@@ -186,6 +186,13 @@ int drm_universal_plane_init(struct drm_device *dev, struct drm_plane *plane,
+       if (WARN_ON(config->num_total_plane >= 32))
+               return -EINVAL;
++      /*
++       * First driver to need more than 64 formats needs to fix this. Each
++       * format is encoded as a bit and the current code only supports a u64.
++       */
++      if (WARN_ON(format_count > 64))
++              return -EINVAL;
++
+       WARN_ON(drm_drv_uses_atomic_modeset(dev) &&
+               (!funcs->atomic_destroy_state ||
+                !funcs->atomic_duplicate_state));
+@@ -207,13 +214,6 @@ int drm_universal_plane_init(struct drm_device *dev, struct drm_plane *plane,
+               return -ENOMEM;
+       }
+-      /*
+-       * First driver to need more than 64 formats needs to fix this. Each
+-       * format is encoded as a bit and the current code only supports a u64.
+-       */
+-      if (WARN_ON(format_count > 64))
+-              return -EINVAL;
+-
+       if (format_modifiers) {
+               const uint64_t *temp_modifiers = format_modifiers;
+               while (*temp_modifiers++ != DRM_FORMAT_MOD_INVALID)
+-- 
+2.35.1
+
diff --git a/queue-5.4/drm-rockchip-vop-fix-possible-null-ptr-deref-in-vop_.patch b/queue-5.4/drm-rockchip-vop-fix-possible-null-ptr-deref-in-vop_.patch
new file mode 100644 (file)
index 0000000..99965b4
--- /dev/null
@@ -0,0 +1,41 @@
+From 3834c986aaf7985b4d47df81c367cfd388854aaa Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Fri, 22 Apr 2022 11:28:54 +0800
+Subject: drm/rockchip: vop: fix possible null-ptr-deref in vop_bind()
+
+From: Yang Yingliang <yangyingliang@huawei.com>
+
+[ Upstream commit f8c242908ad15bbd604d3bcb54961b7d454c43f8 ]
+
+It will cause null-ptr-deref in resource_size(), if platform_get_resource()
+returns NULL, move calling resource_size() after devm_ioremap_resource() that
+will check 'res' to avoid null-ptr-deref.
+
+Fixes: 2048e3286f34 ("drm: rockchip: Add basic drm driver")
+Signed-off-by: Yang Yingliang <yangyingliang@huawei.com>
+Signed-off-by: Heiko Stuebner <heiko@sntech.de>
+Link: https://patchwork.freedesktop.org/patch/msgid/20220422032854.2995175-1-yangyingliang@huawei.com
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/gpu/drm/rockchip/rockchip_drm_vop.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_vop.c b/drivers/gpu/drm/rockchip/rockchip_drm_vop.c
+index 84e3decb17b1..2e4e1933a43c 100644
+--- a/drivers/gpu/drm/rockchip/rockchip_drm_vop.c
++++ b/drivers/gpu/drm/rockchip/rockchip_drm_vop.c
+@@ -1848,10 +1848,10 @@ static int vop_bind(struct device *dev, struct device *master, void *data)
+       vop_win_init(vop);
+       res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
+-      vop->len = resource_size(res);
+       vop->regs = devm_ioremap_resource(dev, res);
+       if (IS_ERR(vop->regs))
+               return PTR_ERR(vop->regs);
++      vop->len = resource_size(res);
+       vop->regsbak = devm_kzalloc(dev, vop->len, GFP_KERNEL);
+       if (!vop->regsbak)
+-- 
+2.35.1
+
diff --git a/queue-5.4/drm-vc4-txp-don-t-set-txp_vstart_at_eof.patch b/queue-5.4/drm-vc4-txp-don-t-set-txp_vstart_at_eof.patch
new file mode 100644 (file)
index 0000000..5b02cf4
--- /dev/null
@@ -0,0 +1,43 @@
+From 5516d49d7f7e3051a68897e514fafa1ed9afbd94 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Mon, 28 Mar 2022 17:36:55 +0200
+Subject: drm/vc4: txp: Don't set TXP_VSTART_AT_EOF
+
+From: Maxime Ripard <maxime@cerno.tech>
+
+[ Upstream commit 234998df929f14d00cbf2f1e81a7facb69fd9266 ]
+
+The TXP_VSTART_AT_EOF will generate a second VSTART signal to the HVS.
+However, the HVS waits for VSTART to enable the FIFO and will thus start
+filling the FIFO before the start of the frame.
+
+This leads to corruption at the beginning of the first frame, and
+content from the previous frame at the beginning of the next frames.
+
+Since one VSTART is enough, let's get rid of it.
+
+Fixes: 008095e065a8 ("drm/vc4: Add support for the transposer block")
+Signed-off-by: Maxime Ripard <maxime@cerno.tech>
+Acked-by: Thomas Zimmermann <tzimmermann@suse.de>
+Link: https://lore.kernel.org/r/20220328153659.2382206-3-maxime@cerno.tech
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/gpu/drm/vc4/vc4_txp.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/drivers/gpu/drm/vc4/vc4_txp.c b/drivers/gpu/drm/vc4/vc4_txp.c
+index bf720206727f..2342b49c16dd 100644
+--- a/drivers/gpu/drm/vc4/vc4_txp.c
++++ b/drivers/gpu/drm/vc4/vc4_txp.c
+@@ -285,7 +285,7 @@ static void vc4_txp_connector_atomic_commit(struct drm_connector *conn,
+       if (WARN_ON(i == ARRAY_SIZE(drm_fmts)))
+               return;
+-      ctrl = TXP_GO | TXP_VSTART_AT_EOF | TXP_EI |
++      ctrl = TXP_GO | TXP_EI |
+              VC4_SET_FIELD(0xf, TXP_BYTE_ENABLE) |
+              VC4_SET_FIELD(txp_fmts[i], TXP_FORMAT);
+-- 
+2.35.1
+
diff --git a/queue-5.4/drm-vc4-txp-force-alpha-to-be-0xff-if-it-s-disabled.patch b/queue-5.4/drm-vc4-txp-force-alpha-to-be-0xff-if-it-s-disabled.patch
new file mode 100644 (file)
index 0000000..88ec8ef
--- /dev/null
@@ -0,0 +1,47 @@
+From 5fee3d8160c18593a63a4a7454ae51441f7c804a Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Mon, 28 Mar 2022 17:36:56 +0200
+Subject: drm/vc4: txp: Force alpha to be 0xff if it's disabled
+
+From: Maxime Ripard <maxime@cerno.tech>
+
+[ Upstream commit 5453343a88ede8b12812fced81ecd24cb888ccc3 ]
+
+If we use a format that has padding instead of the alpha component (such
+as XRGB8888), it appears that the Transposer will fill the padding to 0,
+disregarding what was stored in the input buffer padding.
+
+This leads to issues with IGT, since it will set the padding to 0xff,
+but will then compare the CRC of the two frames which will thus fail.
+Another nice side effect is that it is now possible to just use the
+buffer as ARGB.
+
+Fixes: 008095e065a8 ("drm/vc4: Add support for the transposer block")
+Signed-off-by: Maxime Ripard <maxime@cerno.tech>
+Acked-by: Thomas Zimmermann <tzimmermann@suse.de>
+Link: https://lore.kernel.org/r/20220328153659.2382206-4-maxime@cerno.tech
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/gpu/drm/vc4/vc4_txp.c | 6 ++++++
+ 1 file changed, 6 insertions(+)
+
+diff --git a/drivers/gpu/drm/vc4/vc4_txp.c b/drivers/gpu/drm/vc4/vc4_txp.c
+index 2342b49c16dd..0d9263f65d95 100644
+--- a/drivers/gpu/drm/vc4/vc4_txp.c
++++ b/drivers/gpu/drm/vc4/vc4_txp.c
+@@ -291,6 +291,12 @@ static void vc4_txp_connector_atomic_commit(struct drm_connector *conn,
+       if (fb->format->has_alpha)
+               ctrl |= TXP_ALPHA_ENABLE;
++      else
++              /*
++               * If TXP_ALPHA_ENABLE isn't set and TXP_ALPHA_INVERT is, the
++               * hardware will force the output padding to be 0xff.
++               */
++              ctrl |= TXP_ALPHA_INVERT;
+       gem = drm_fb_cma_get_gem_obj(fb, 0);
+       TXP_WRITE(TXP_DST_PTR, gem->paddr + fb->offsets[0]);
+-- 
+2.35.1
+
diff --git a/queue-5.4/drm-virtio-fix-null-pointer-dereference-in-virtio_gp.patch b/queue-5.4/drm-virtio-fix-null-pointer-dereference-in-virtio_gp.patch
new file mode 100644 (file)
index 0000000..68e9597
--- /dev/null
@@ -0,0 +1,88 @@
+From e08b98ba1ba5e53ea9c2bff0dde979dba35f38fa Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Tue, 22 Mar 2022 17:17:30 +0800
+Subject: drm/virtio: fix NULL pointer dereference in virtio_gpu_conn_get_modes
+
+From: Liu Zixian <liuzixian4@huawei.com>
+
+[ Upstream commit 194d250cdc4a40ccbd179afd522a9e9846957402 ]
+
+drm_cvt_mode may return NULL and we should check it.
+
+This bug is found by syzkaller:
+
+FAULT_INJECTION stacktrace:
+[  168.567394] FAULT_INJECTION: forcing a failure.
+name failslab, interval 1, probability 0, space 0, times 1
+[  168.567403] CPU: 1 PID: 6425 Comm: syz Kdump: loaded Not tainted 4.19.90-vhulk2201.1.0.h1035.kasan.eulerosv2r10.aarch64 #1
+[  168.567406] Hardware name: QEMU KVM Virtual Machine, BIOS 0.0.0 02/06/2015
+[  168.567408] Call trace:
+[  168.567414]  dump_backtrace+0x0/0x310
+[  168.567418]  show_stack+0x28/0x38
+[  168.567423]  dump_stack+0xec/0x15c
+[  168.567427]  should_fail+0x3ac/0x3d0
+[  168.567437]  __should_failslab+0xb8/0x120
+[  168.567441]  should_failslab+0x28/0xc0
+[  168.567445]  kmem_cache_alloc_trace+0x50/0x640
+[  168.567454]  drm_mode_create+0x40/0x90
+[  168.567458]  drm_cvt_mode+0x48/0xc78
+[  168.567477]  virtio_gpu_conn_get_modes+0xa8/0x140 [virtio_gpu]
+[  168.567485]  drm_helper_probe_single_connector_modes+0x3a4/0xd80
+[  168.567492]  drm_mode_getconnector+0x2e0/0xa70
+[  168.567496]  drm_ioctl_kernel+0x11c/0x1d8
+[  168.567514]  drm_ioctl+0x558/0x6d0
+[  168.567522]  do_vfs_ioctl+0x160/0xf30
+[  168.567525]  ksys_ioctl+0x98/0xd8
+[  168.567530]  __arm64_sys_ioctl+0x50/0xc8
+[  168.567536]  el0_svc_common+0xc8/0x320
+[  168.567540]  el0_svc_handler+0xf8/0x160
+[  168.567544]  el0_svc+0x10/0x218
+
+KASAN stacktrace:
+[  168.567561] BUG: KASAN: null-ptr-deref in virtio_gpu_conn_get_modes+0xb4/0x140 [virtio_gpu]
+[  168.567565] Read of size 4 at addr 0000000000000054 by task syz/6425
+[  168.567566]
+[  168.567571] CPU: 1 PID: 6425 Comm: syz Kdump: loaded Not tainted 4.19.90-vhulk2201.1.0.h1035.kasan.eulerosv2r10.aarch64 #1
+[  168.567573] Hardware name: QEMU KVM Virtual Machine, BIOS 0.0.0 02/06/2015
+[  168.567575] Call trace:
+[  168.567578]  dump_backtrace+0x0/0x310
+[  168.567582]  show_stack+0x28/0x38
+[  168.567586]  dump_stack+0xec/0x15c
+[  168.567591]  kasan_report+0x244/0x2f0
+[  168.567594]  __asan_load4+0x58/0xb0
+[  168.567607]  virtio_gpu_conn_get_modes+0xb4/0x140 [virtio_gpu]
+[  168.567612]  drm_helper_probe_single_connector_modes+0x3a4/0xd80
+[  168.567617]  drm_mode_getconnector+0x2e0/0xa70
+[  168.567621]  drm_ioctl_kernel+0x11c/0x1d8
+[  168.567624]  drm_ioctl+0x558/0x6d0
+[  168.567628]  do_vfs_ioctl+0x160/0xf30
+[  168.567632]  ksys_ioctl+0x98/0xd8
+[  168.567636]  __arm64_sys_ioctl+0x50/0xc8
+[  168.567641]  el0_svc_common+0xc8/0x320
+[  168.567645]  el0_svc_handler+0xf8/0x160
+[  168.567649]  el0_svc+0x10/0x218
+
+Signed-off-by: Liu Zixian <liuzixian4@huawei.com>
+Link: http://patchwork.freedesktop.org/patch/msgid/20220322091730.1653-1-liuzixian4@huawei.com
+Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/gpu/drm/virtio/virtgpu_display.c | 2 ++
+ 1 file changed, 2 insertions(+)
+
+diff --git a/drivers/gpu/drm/virtio/virtgpu_display.c b/drivers/gpu/drm/virtio/virtgpu_display.c
+index e622485ae826..7e34307eb075 100644
+--- a/drivers/gpu/drm/virtio/virtgpu_display.c
++++ b/drivers/gpu/drm/virtio/virtgpu_display.c
+@@ -174,6 +174,8 @@ static int virtio_gpu_conn_get_modes(struct drm_connector *connector)
+               DRM_DEBUG("add mode: %dx%d\n", width, height);
+               mode = drm_cvt_mode(connector->dev, width, height, 60,
+                                   false, false, false);
++              if (!mode)
++                      return count;
+               mode->type |= DRM_MODE_TYPE_PREFERRED;
+               drm_mode_probed_add(connector, mode);
+               count++;
+-- 
+2.35.1
+
diff --git a/queue-5.4/efi-add-missing-prototype-for-efi_capsule_setup_info.patch b/queue-5.4/efi-add-missing-prototype-for-efi_capsule_setup_info.patch
new file mode 100644 (file)
index 0000000..09f3b95
--- /dev/null
@@ -0,0 +1,37 @@
+From 74f240ba963827a3f44420b810e51ee1eb1e4ec6 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Fri, 4 Mar 2022 07:36:37 +0100
+Subject: efi: Add missing prototype for efi_capsule_setup_info
+
+From: Jan Kiszka <jan.kiszka@siemens.com>
+
+[ Upstream commit aa480379d8bdb33920d68acfd90f823c8af32578 ]
+
+Fixes "no previous declaration for 'efi_capsule_setup_info'" warnings
+under W=1.
+
+Fixes: 2959c95d510c ("efi/capsule: Add support for Quark security header")
+Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com>
+Link: https://lore.kernel.org/r/c28d3f86-dd72-27d1-e2c2-40971b8da6bd@siemens.com
+Signed-off-by: Ard Biesheuvel <ardb@kernel.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ include/linux/efi.h | 2 ++
+ 1 file changed, 2 insertions(+)
+
+diff --git a/include/linux/efi.h b/include/linux/efi.h
+index c82ef0eba4f8..f9b9f9a2fd4a 100644
+--- a/include/linux/efi.h
++++ b/include/linux/efi.h
+@@ -165,6 +165,8 @@ struct capsule_info {
+       size_t                  page_bytes_remain;
+ };
++int efi_capsule_setup_info(struct capsule_info *cap_info, void *kbuff,
++                           size_t hdr_bytes);
+ int __efi_capsule_setup_info(struct capsule_info *cap_info);
+ /*
+-- 
+2.35.1
+
diff --git a/queue-5.4/eth-tg3-silence-the-gcc-12-array-bounds-warning.patch b/queue-5.4/eth-tg3-silence-the-gcc-12-array-bounds-warning.patch
new file mode 100644 (file)
index 0000000..b1d31b3
--- /dev/null
@@ -0,0 +1,47 @@
+From 257067e07288dac4274f26dfc2a4651b1638db6f Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Fri, 20 May 2022 12:56:05 -0700
+Subject: eth: tg3: silence the GCC 12 array-bounds warning
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+From: Jakub Kicinski <kuba@kernel.org>
+
+[ Upstream commit 9dec850fd7c210a04b4707df8e6c95bfafdd6a4b ]
+
+GCC 12 currently generates a rather inconsistent warning:
+
+drivers/net/ethernet/broadcom/tg3.c:17795:51: warning: array subscript 5 is above array bounds of ‘struct tg3_napi[5]’ [-Warray-bounds]
+17795 |                 struct tg3_napi *tnapi = &tp->napi[i];
+      |                                           ~~~~~~~~^~~
+
+i is guaranteed < tp->irq_max which in turn is either 1 or 5.
+There are more loops like this one in the driver, but strangely
+GCC 12 dislikes only this single one.
+
+Silence this silliness for now.
+
+Signed-off-by: Jakub Kicinski <kuba@kernel.org>
+Signed-off-by: David S. Miller <davem@davemloft.net>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/net/ethernet/broadcom/Makefile | 5 +++++
+ 1 file changed, 5 insertions(+)
+
+diff --git a/drivers/net/ethernet/broadcom/Makefile b/drivers/net/ethernet/broadcom/Makefile
+index 7046ad6d3d0e..ac50da49ca77 100644
+--- a/drivers/net/ethernet/broadcom/Makefile
++++ b/drivers/net/ethernet/broadcom/Makefile
+@@ -16,3 +16,8 @@ obj-$(CONFIG_BGMAC_BCMA) += bgmac-bcma.o bgmac-bcma-mdio.o
+ obj-$(CONFIG_BGMAC_PLATFORM) += bgmac-platform.o
+ obj-$(CONFIG_SYSTEMPORT) += bcmsysport.o
+ obj-$(CONFIG_BNXT) += bnxt/
++
++# FIXME: temporarily silence -Warray-bounds on non W=1+ builds
++ifndef KBUILD_EXTRA_WARN
++CFLAGS_tg3.o += -Wno-array-bounds
++endif
+-- 
+2.35.1
+
diff --git a/queue-5.4/ext4-reject-the-commit-option-on-ext2-filesystems.patch b/queue-5.4/ext4-reject-the-commit-option-on-ext2-filesystems.patch
new file mode 100644 (file)
index 0000000..6c50008
--- /dev/null
@@ -0,0 +1,40 @@
+From 7b1615a7dd36c25e11ac2741c08acaebeab43f3a Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Tue, 10 May 2022 11:32:32 -0700
+Subject: ext4: reject the 'commit' option on ext2 filesystems
+
+From: Eric Biggers <ebiggers@google.com>
+
+[ Upstream commit cb8435dc8ba33bcafa41cf2aa253794320a3b8df ]
+
+The 'commit' option is only applicable for ext3 and ext4 filesystems,
+and has never been accepted by the ext2 filesystem driver, so the ext4
+driver shouldn't allow it on ext2 filesystems.
+
+This fixes a failure in xfstest ext4/053.
+
+Fixes: 8dc0aa8cf0f7 ("ext4: check incompatible mount options while mounting ext2/3")
+Signed-off-by: Eric Biggers <ebiggers@google.com>
+Reviewed-by: Ritesh Harjani <ritesh.list@gmail.com>
+Reviewed-by: Lukas Czerner <lczerner@redhat.com>
+Link: https://lore.kernel.org/r/20220510183232.172615-1-ebiggers@kernel.org
+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 c13879bd2168..eba2506f4399 100644
+--- a/fs/ext4/super.c
++++ b/fs/ext4/super.c
+@@ -1703,6 +1703,7 @@ static const struct mount_opts {
+        MOPT_EXT4_ONLY | MOPT_CLEAR},
+       {Opt_warn_on_error, EXT4_MOUNT_WARN_ON_ERROR, MOPT_SET},
+       {Opt_nowarn_on_error, EXT4_MOUNT_WARN_ON_ERROR, MOPT_CLEAR},
++      {Opt_commit, 0, MOPT_NO_EXT2},
+       {Opt_nojournal_checksum, EXT4_MOUNT_JOURNAL_CHECKSUM,
+        MOPT_EXT4_ONLY | MOPT_CLEAR},
+       {Opt_journal_checksum, EXT4_MOUNT_JOURNAL_CHECKSUM,
+-- 
+2.35.1
+
diff --git a/queue-5.4/f2fs-fix-dereference-of-stale-list-iterator-after-lo.patch b/queue-5.4/f2fs-fix-dereference-of-stale-list-iterator-after-lo.patch
new file mode 100644 (file)
index 0000000..6a0c9e6
--- /dev/null
@@ -0,0 +1,62 @@
+From f8ec098dcd02567bf390134ea36555964df8a1ec Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Fri, 1 Apr 2022 00:34:14 +0200
+Subject: f2fs: fix dereference of stale list iterator after loop body
+
+From: Jakob Koschel <jakobkoschel@gmail.com>
+
+[ Upstream commit 2aaf51dd39afb6d01d13f1e6fe20b684733b37d5 ]
+
+The list iterator variable will be a bogus pointer if no break was hit.
+Dereferencing it (cur->page in this case) could load an out-of-bounds/undefined
+value making it unsafe to use that in the comparision to determine if the
+specific element was found.
+
+Since 'cur->page' *can* be out-ouf-bounds it cannot be guaranteed that
+by chance (or intention of an attacker) it matches the value of 'page'
+even though the correct element was not found.
+
+This is fixed by using a separate list iterator variable for the loop
+and only setting the original variable if a suitable element was found.
+Then determing if the element was found is simply checking if the
+variable is set.
+
+Fixes: 8c242db9b8c0 ("f2fs: fix stale ATOMIC_WRITTEN_PAGE private pointer")
+Signed-off-by: Jakob Koschel <jakobkoschel@gmail.com>
+Reviewed-by: Chao Yu <chao@kernel.org>
+Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ fs/f2fs/segment.c | 9 ++++++---
+ 1 file changed, 6 insertions(+), 3 deletions(-)
+
+diff --git a/fs/f2fs/segment.c b/fs/f2fs/segment.c
+index 78c54bb7898d..7759323bd775 100644
+--- a/fs/f2fs/segment.c
++++ b/fs/f2fs/segment.c
+@@ -352,16 +352,19 @@ void f2fs_drop_inmem_page(struct inode *inode, struct page *page)
+       struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
+       struct list_head *head = &fi->inmem_pages;
+       struct inmem_pages *cur = NULL;
++      struct inmem_pages *tmp;
+       f2fs_bug_on(sbi, !IS_ATOMIC_WRITTEN_PAGE(page));
+       mutex_lock(&fi->inmem_lock);
+-      list_for_each_entry(cur, head, list) {
+-              if (cur->page == page)
++      list_for_each_entry(tmp, head, list) {
++              if (tmp->page == page) {
++                      cur = tmp;
+                       break;
++              }
+       }
+-      f2fs_bug_on(sbi, list_empty(head) || cur->page != page);
++      f2fs_bug_on(sbi, !cur);
+       list_del(&cur->list);
+       mutex_unlock(&fi->inmem_lock);
+-- 
+2.35.1
+
diff --git a/queue-5.4/fat-add-ratelimit-to-fat-_ent_bread.patch b/queue-5.4/fat-add-ratelimit-to-fat-_ent_bread.patch
new file mode 100644 (file)
index 0000000..5df0a44
--- /dev/null
@@ -0,0 +1,50 @@
+From de63b456c3cb5296af9bb110b24080badc9cac5e Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Fri, 29 Apr 2022 14:38:02 -0700
+Subject: fat: add ratelimit to fat*_ent_bread()
+
+From: OGAWA Hirofumi <hirofumi@mail.parknet.co.jp>
+
+[ Upstream commit 183c3237c928109d2008c0456dff508baf692b20 ]
+
+fat*_ent_bread() can be the cause of too many report on I/O error path.
+So use fat_msg_ratelimit() instead.
+
+Link: https://lkml.kernel.org/r/87bkxogfeq.fsf@mail.parknet.co.jp
+Signed-off-by: OGAWA Hirofumi <hirofumi@mail.parknet.co.jp>
+Reported-by: qianfan <qianfanguijin@163.com>
+Tested-by: qianfan <qianfanguijin@163.com>
+Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ fs/fat/fatent.c | 7 ++++---
+ 1 file changed, 4 insertions(+), 3 deletions(-)
+
+diff --git a/fs/fat/fatent.c b/fs/fat/fatent.c
+index 3647c65a0f48..0191eb1dc7f6 100644
+--- a/fs/fat/fatent.c
++++ b/fs/fat/fatent.c
+@@ -93,7 +93,8 @@ static int fat12_ent_bread(struct super_block *sb, struct fat_entry *fatent,
+ err_brelse:
+       brelse(bhs[0]);
+ err:
+-      fat_msg(sb, KERN_ERR, "FAT read failed (blocknr %llu)", (llu)blocknr);
++      fat_msg_ratelimit(sb, KERN_ERR, "FAT read failed (blocknr %llu)",
++                        (llu)blocknr);
+       return -EIO;
+ }
+@@ -106,8 +107,8 @@ static int fat_ent_bread(struct super_block *sb, struct fat_entry *fatent,
+       fatent->fat_inode = MSDOS_SB(sb)->fat_inode;
+       fatent->bhs[0] = sb_bread(sb, blocknr);
+       if (!fatent->bhs[0]) {
+-              fat_msg(sb, KERN_ERR, "FAT read failed (blocknr %llu)",
+-                     (llu)blocknr);
++              fat_msg_ratelimit(sb, KERN_ERR, "FAT read failed (blocknr %llu)",
++                                (llu)blocknr);
+               return -EIO;
+       }
+       fatent->nr_bhs = 1;
+-- 
+2.35.1
+
diff --git a/queue-5.4/fbcon-consistently-protect-deferred_takeover-with-co.patch b/queue-5.4/fbcon-consistently-protect-deferred_takeover-with-co.patch
new file mode 100644 (file)
index 0000000..84a8141
--- /dev/null
@@ -0,0 +1,54 @@
+From 5f0c142d7171103b2a99540fb6e0503f220631a5 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Tue, 5 Apr 2022 23:03:31 +0200
+Subject: fbcon: Consistently protect deferred_takeover with console_lock()
+
+From: Daniel Vetter <daniel.vetter@ffwll.ch>
+
+[ Upstream commit 43553559121ca90965b572cf8a1d6d0fd618b449 ]
+
+This shouldn't be a problem in practice since until we've actually
+taken over the console there's nothing we've registered with the
+console/vt subsystem, so the exit/unbind path that check this can't
+do the wrong thing. But it's confusing, so fix it by moving it a tad
+later.
+
+Acked-by: Sam Ravnborg <sam@ravnborg.org>
+Signed-off-by: Daniel Vetter <daniel.vetter@intel.com>
+Cc: Daniel Vetter <daniel@ffwll.ch>
+Cc: Du Cheng <ducheng2@gmail.com>
+Cc: Tetsuo Handa <penguin-kernel@I-love.SAKURA.ne.jp>
+Cc: Claudio Suarez <cssk@net-c.es>
+Cc: Thomas Zimmermann <tzimmermann@suse.de>
+Link: https://patchwork.freedesktop.org/patch/msgid/20220405210335.3434130-14-daniel.vetter@ffwll.ch
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/video/fbdev/core/fbcon.c | 5 +++--
+ 1 file changed, 3 insertions(+), 2 deletions(-)
+
+diff --git a/drivers/video/fbdev/core/fbcon.c b/drivers/video/fbdev/core/fbcon.c
+index 75b770514067..1decded4845f 100644
+--- a/drivers/video/fbdev/core/fbcon.c
++++ b/drivers/video/fbdev/core/fbcon.c
+@@ -3286,6 +3286,9 @@ static void fbcon_register_existing_fbs(struct work_struct *work)
+       console_lock();
++      deferred_takeover = false;
++      logo_shown = FBCON_LOGO_DONTSHOW;
++
+       for_each_registered_fb(i)
+               fbcon_fb_registered(registered_fb[i]);
+@@ -3303,8 +3306,6 @@ static int fbcon_output_notifier(struct notifier_block *nb,
+       pr_info("fbcon: Taking over console\n");
+       dummycon_unregister_output_notifier(&fbcon_output_nb);
+-      deferred_takeover = false;
+-      logo_shown = FBCON_LOGO_DONTSHOW;
+       /* We may get called in atomic context */
+       schedule_work(&fbcon_deferred_takeover_work);
+-- 
+2.35.1
+
diff --git a/queue-5.4/firmware-arm_scmi-fix-list-protocols-enumeration-in-.patch b/queue-5.4/firmware-arm_scmi-fix-list-protocols-enumeration-in-.patch
new file mode 100644 (file)
index 0000000..333587d
--- /dev/null
@@ -0,0 +1,44 @@
+From 2fe9a1c2051960c126f81e47c76ef40c0505b1f2 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Wed, 30 Mar 2022 16:05:32 +0100
+Subject: firmware: arm_scmi: Fix list protocols enumeration in the base
+ protocol
+
+From: Cristian Marussi <cristian.marussi@arm.com>
+
+[ Upstream commit 8009120e0354a67068e920eb10dce532391361d0 ]
+
+While enumerating protocols implemented by the SCMI platform using
+BASE_DISCOVER_LIST_PROTOCOLS, the number of returned protocols is
+currently validated in an improper way since the check employs a sum
+between unsigned integers that could overflow and cause the check itself
+to be silently bypassed if the returned value 'loop_num_ret' is big
+enough.
+
+Fix the validation avoiding the addition.
+
+Link: https://lore.kernel.org/r/20220330150551.2573938-4-cristian.marussi@arm.com
+Fixes: b6f20ff8bd94 ("firmware: arm_scmi: add common infrastructure and support for base protocol")
+Signed-off-by: Cristian Marussi <cristian.marussi@arm.com>
+Signed-off-by: Sudeep Holla <sudeep.holla@arm.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/firmware/arm_scmi/base.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/drivers/firmware/arm_scmi/base.c b/drivers/firmware/arm_scmi/base.c
+index f986ee8919f0..2be32e86445f 100644
+--- a/drivers/firmware/arm_scmi/base.c
++++ b/drivers/firmware/arm_scmi/base.c
+@@ -164,7 +164,7 @@ static int scmi_base_implementation_list_get(const struct scmi_handle *handle,
+                       break;
+               loop_num_ret = le32_to_cpu(*num_ret);
+-              if (tot_num_ret + loop_num_ret > MAX_PROTOCOLS_IMP) {
++              if (loop_num_ret > MAX_PROTOCOLS_IMP - tot_num_ret) {
+                       dev_err(dev, "No. of Protocol > MAX_PROTOCOLS_IMP");
+                       break;
+               }
+-- 
+2.35.1
+
diff --git a/queue-5.4/fs-jfs-fix-possible-null-pointer-dereference-in-dbfr.patch b/queue-5.4/fs-jfs-fix-possible-null-pointer-dereference-in-dbfr.patch
new file mode 100644 (file)
index 0000000..55bfbbc
--- /dev/null
@@ -0,0 +1,59 @@
+From 72663336b35461e7ad1d77696354b40bd4cd6145 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Mon, 11 Apr 2022 18:45:34 +0800
+Subject: fs: jfs: fix possible NULL pointer dereference in dbFree()
+
+From: Zixuan Fu <r33s3n6@gmail.com>
+
+[ Upstream commit 0d4837fdb796f99369cf7691d33de1b856bcaf1f ]
+
+In our fault-injection testing, the variable "nblocks" in dbFree() can be
+zero when kmalloc_array() fails in dtSearch(). In this case, the variable
+ "mp" in dbFree() would be NULL and then it is dereferenced in
+"write_metapage(mp)".
+
+The failure log is listed as follows:
+
+[   13.824137] BUG: kernel NULL pointer dereference, address: 0000000000000020
+...
+[   13.827416] RIP: 0010:dbFree+0x5f7/0x910 [jfs]
+[   13.834341] Call Trace:
+[   13.834540]  <TASK>
+[   13.834713]  txFreeMap+0x7b4/0xb10 [jfs]
+[   13.835038]  txUpdateMap+0x311/0x650 [jfs]
+[   13.835375]  jfs_lazycommit+0x5f2/0xc70 [jfs]
+[   13.835726]  ? sched_dynamic_update+0x1b0/0x1b0
+[   13.836092]  kthread+0x3c2/0x4a0
+[   13.836355]  ? txLockFree+0x160/0x160 [jfs]
+[   13.836763]  ? kthread_unuse_mm+0x160/0x160
+[   13.837106]  ret_from_fork+0x1f/0x30
+[   13.837402]  </TASK>
+...
+
+This patch adds a NULL check of "mp" before "write_metapage(mp)" is called.
+
+Reported-by: TOTE Robot <oslab@tsinghua.edu.cn>
+Signed-off-by: Zixuan Fu <r33s3n6@gmail.com>
+Signed-off-by: Dave Kleikamp <dave.kleikamp@oracle.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ fs/jfs/jfs_dmap.c | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+diff --git a/fs/jfs/jfs_dmap.c b/fs/jfs/jfs_dmap.c
+index 79f3440e204b..d3cb27487c70 100644
+--- a/fs/jfs/jfs_dmap.c
++++ b/fs/jfs/jfs_dmap.c
+@@ -385,7 +385,8 @@ int dbFree(struct inode *ip, s64 blkno, s64 nblocks)
+       }
+       /* write the last buffer. */
+-      write_metapage(mp);
++      if (mp)
++              write_metapage(mp);
+       IREAD_UNLOCK(ipbmap);
+-- 
+2.35.1
+
diff --git a/queue-5.4/fsnotify-fix-wrong-lockdep-annotations.patch b/queue-5.4/fsnotify-fix-wrong-lockdep-annotations.patch
new file mode 100644 (file)
index 0000000..408bc3c
--- /dev/null
@@ -0,0 +1,74 @@
+From 4a5b6c5934a96730b5bcbae3e0544326c4c1ac81 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Fri, 22 Apr 2022 15:03:14 +0300
+Subject: fsnotify: fix wrong lockdep annotations
+
+From: Amir Goldstein <amir73il@gmail.com>
+
+[ Upstream commit 623af4f538b5df9b416e1b82f720af7371b4c771 ]
+
+Commit 6960b0d909cd ("fsnotify: change locking order") changed some
+of the mark_mutex locks in direct reclaim path to use:
+  mutex_lock_nested(&group->mark_mutex, SINGLE_DEPTH_NESTING);
+
+This change is explained:
+ "...It uses nested locking to avoid deadlock in case we do the final
+  iput() on an inode which still holds marks and thus would take the
+  mutex again when calling fsnotify_inode_delete() in destroy_inode()."
+
+The problem is that the mutex_lock_nested() is not a nested lock at
+all. In fact, it has the opposite effect of preventing lockdep from
+warning about a very possible deadlock.
+
+Due to these wrong annotations, a deadlock that was introduced with
+nfsd filecache in kernel v5.4 went unnoticed in v5.4.y for over two
+years until it was reported recently by Khazhismel Kumykov, only to
+find out that the deadlock was already fixed in kernel v5.5.
+
+Fix the wrong lockdep annotations.
+
+Cc: Khazhismel Kumykov <khazhy@google.com>
+Fixes: 6960b0d909cd ("fsnotify: change locking order")
+Link: https://lore.kernel.org/r/20220321112310.vpr7oxro2xkz5llh@quack3.lan/
+Link: https://lore.kernel.org/r/20220422120327.3459282-4-amir73il@gmail.com
+Signed-off-by: Amir Goldstein <amir73il@gmail.com>
+Signed-off-by: Jan Kara <jack@suse.cz>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ fs/notify/mark.c | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+diff --git a/fs/notify/mark.c b/fs/notify/mark.c
+index 1d96216dffd1..fdf8e03bf3df 100644
+--- a/fs/notify/mark.c
++++ b/fs/notify/mark.c
+@@ -426,7 +426,7 @@ void fsnotify_free_mark(struct fsnotify_mark *mark)
+ void fsnotify_destroy_mark(struct fsnotify_mark *mark,
+                          struct fsnotify_group *group)
+ {
+-      mutex_lock_nested(&group->mark_mutex, SINGLE_DEPTH_NESTING);
++      mutex_lock(&group->mark_mutex);
+       fsnotify_detach_mark(mark);
+       mutex_unlock(&group->mark_mutex);
+       fsnotify_free_mark(mark);
+@@ -738,7 +738,7 @@ void fsnotify_clear_marks_by_group(struct fsnotify_group *group,
+        * move marks to free to to_free list in one go and then free marks in
+        * to_free list one by one.
+        */
+-      mutex_lock_nested(&group->mark_mutex, SINGLE_DEPTH_NESTING);
++      mutex_lock(&group->mark_mutex);
+       list_for_each_entry_safe(mark, lmark, &group->marks_list, g_list) {
+               if ((1U << mark->connector->type) & type_mask)
+                       list_move(&mark->g_list, &to_free);
+@@ -747,7 +747,7 @@ void fsnotify_clear_marks_by_group(struct fsnotify_group *group,
+ clear:
+       while (1) {
+-              mutex_lock_nested(&group->mark_mutex, SINGLE_DEPTH_NESTING);
++              mutex_lock(&group->mark_mutex);
+               if (list_empty(head)) {
+                       mutex_unlock(&group->mark_mutex);
+                       break;
+-- 
+2.35.1
+
diff --git a/queue-5.4/hid-bigben-fix-slab-out-of-bounds-write-in-bigben_pr.patch b/queue-5.4/hid-bigben-fix-slab-out-of-bounds-write-in-bigben_pr.patch
new file mode 100644 (file)
index 0000000..6639771
--- /dev/null
@@ -0,0 +1,43 @@
+From 365d0dbf125a493ebe0c96e44ca02e1586232a53 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Fri, 6 May 2022 15:24:25 +0800
+Subject: HID: bigben: fix slab-out-of-bounds Write in bigben_probe
+
+From: Dongliang Mu <mudongliangabcd@gmail.com>
+
+[ Upstream commit fc4ef9d5724973193bfa5ebed181dba6de3a56db ]
+
+There is a slab-out-of-bounds Write bug in hid-bigbenff driver.
+The problem is the driver assumes the device must have an input but
+some malicious devices violate this assumption.
+
+Fix this by checking hid_device's input is non-empty before its usage.
+
+Reported-by: syzkaller <syzkaller@googlegroups.com>
+Signed-off-by: Dongliang Mu <mudongliangabcd@gmail.com>
+Signed-off-by: Jiri Kosina <jkosina@suse.cz>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/hid/hid-bigbenff.c | 6 ++++++
+ 1 file changed, 6 insertions(+)
+
+diff --git a/drivers/hid/hid-bigbenff.c b/drivers/hid/hid-bigbenff.c
+index 74ad8bf98bfd..e8c5e3ac9fff 100644
+--- a/drivers/hid/hid-bigbenff.c
++++ b/drivers/hid/hid-bigbenff.c
+@@ -347,6 +347,12 @@ static int bigben_probe(struct hid_device *hid,
+       bigben->report = list_entry(report_list->next,
+               struct hid_report, list);
++      if (list_empty(&hid->inputs)) {
++              hid_err(hid, "no inputs found\n");
++              error = -ENODEV;
++              goto error_hw_stop;
++      }
++
+       hidinput = list_first_entry(&hid->inputs, struct hid_input, list);
+       set_bit(FF_RUMBLE, hidinput->input->ffbit);
+-- 
+2.35.1
+
diff --git a/queue-5.4/hid-elan-fix-potential-double-free-in-elan_input_con.patch b/queue-5.4/hid-elan-fix-potential-double-free-in-elan_input_con.patch
new file mode 100644 (file)
index 0000000..5289a40
--- /dev/null
@@ -0,0 +1,51 @@
+From 7b02fbc31881f2e30ba0b060bc0eb6f41adb8078 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Sat, 16 Apr 2022 07:37:21 +0000
+Subject: HID: elan: Fix potential double free in elan_input_configured
+
+From: Miaoqian Lin <linmq006@gmail.com>
+
+[ Upstream commit 1af20714fedad238362571620be0bd690ded05b6 ]
+
+'input' is a managed resource allocated with devm_input_allocate_device(),
+so there is no need to call input_free_device() explicitly or
+there will be a double free.
+
+According to the doc of devm_input_allocate_device():
+ * Managed input devices do not need to be explicitly unregistered or
+ * freed as it will be done automatically when owner device unbinds from
+ * its driver (or binding fails).
+
+Fixes: b7429ea53d6c ("HID: elan: Fix memleak in elan_input_configured")
+Fixes: 9a6a4193d65b ("HID: Add driver for USB ELAN Touchpad")
+Signed-off-by: Miaoqian Lin <linmq006@gmail.com>
+Acked-by: Benjamin Tissoires <benjamin.tissoires@redhat.com>
+Signed-off-by: Jiri Kosina <jkosina@suse.cz>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/hid/hid-elan.c | 2 --
+ 1 file changed, 2 deletions(-)
+
+diff --git a/drivers/hid/hid-elan.c b/drivers/hid/hid-elan.c
+index 0e8f424025fe..838673303f77 100644
+--- a/drivers/hid/hid-elan.c
++++ b/drivers/hid/hid-elan.c
+@@ -188,7 +188,6 @@ static int elan_input_configured(struct hid_device *hdev, struct hid_input *hi)
+       ret = input_mt_init_slots(input, ELAN_MAX_FINGERS, INPUT_MT_POINTER);
+       if (ret) {
+               hid_err(hdev, "Failed to init elan MT slots: %d\n", ret);
+-              input_free_device(input);
+               return ret;
+       }
+@@ -200,7 +199,6 @@ static int elan_input_configured(struct hid_device *hdev, struct hid_input *hi)
+               hid_err(hdev, "Failed to register elan input device: %d\n",
+                       ret);
+               input_mt_destroy_slots(input);
+-              input_free_device(input);
+               return ret;
+       }
+-- 
+2.35.1
+
diff --git a/queue-5.4/hid-hid-led-fix-maximum-brightness-for-dream-cheeky.patch b/queue-5.4/hid-hid-led-fix-maximum-brightness-for-dream-cheeky.patch
new file mode 100644 (file)
index 0000000..ebdfd5f
--- /dev/null
@@ -0,0 +1,38 @@
+From 782908a7f8032ab0ed9feedb7dae76a85eef742d Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Sun, 13 Mar 2022 19:48:18 +0000
+Subject: HID: hid-led: fix maximum brightness for Dream Cheeky
+
+From: Jonathan Teh <jonathan.teh@outlook.com>
+
+[ Upstream commit 116c3f4a78ebe478d5ad5a038baf931e93e7d748 ]
+
+Increase maximum brightness for Dream Cheeky to 63. Emperically
+determined based on testing in kernel 4.4 on this device:
+
+Bus 003 Device 002: ID 1d34:0004 Dream Cheeky Webmail Notifier
+
+Fixes: 6c7ad07e9e05 ("HID: migrate USB LED driver from usb misc to hid")
+Signed-off-by: Jonathan Teh <jonathan.teh@outlook.com>
+Signed-off-by: Jiri Kosina <jkosina@suse.cz>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/hid/hid-led.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/drivers/hid/hid-led.c b/drivers/hid/hid-led.c
+index c2c66ceca132..7d82f8d426bb 100644
+--- a/drivers/hid/hid-led.c
++++ b/drivers/hid/hid-led.c
+@@ -366,7 +366,7 @@ static const struct hidled_config hidled_configs[] = {
+               .type = DREAM_CHEEKY,
+               .name = "Dream Cheeky Webmail Notifier",
+               .short_name = "dream_cheeky",
+-              .max_brightness = 31,
++              .max_brightness = 63,
+               .num_leds = 1,
+               .report_size = 9,
+               .report_type = RAW_REQUEST,
+-- 
+2.35.1
+
diff --git a/queue-5.4/hwmon-make-chip-parameter-for-with_info-api-mandator.patch b/queue-5.4/hwmon-make-chip-parameter-for-with_info-api-mandator.patch
new file mode 100644 (file)
index 0000000..58276ed
--- /dev/null
@@ -0,0 +1,75 @@
+From 0aeaa83199e670694d9ec0a62d513bacd610742d Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Wed, 11 May 2022 06:22:51 -0700
+Subject: hwmon: Make chip parameter for with_info API mandatory
+
+From: Guenter Roeck <linux@roeck-us.net>
+
+[ Upstream commit ddaefa209c4ac791c1262e97c9b2d0440c8ef1d5 ]
+
+Various attempts were made recently to "convert" the old
+hwmon_device_register() API to devm_hwmon_device_register_with_info()
+by just changing the function name without actually converting the
+driver. Prevent this from happening by making the 'chip' parameter of
+devm_hwmon_device_register_with_info() mandatory.
+
+Signed-off-by: Guenter Roeck <linux@roeck-us.net>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ Documentation/hwmon/hwmon-kernel-api.rst |  2 +-
+ drivers/hwmon/hwmon.c                    | 16 +++++++---------
+ 2 files changed, 8 insertions(+), 10 deletions(-)
+
+diff --git a/Documentation/hwmon/hwmon-kernel-api.rst b/Documentation/hwmon/hwmon-kernel-api.rst
+index c41eb6108103..23f27fe78e37 100644
+--- a/Documentation/hwmon/hwmon-kernel-api.rst
++++ b/Documentation/hwmon/hwmon-kernel-api.rst
+@@ -72,7 +72,7 @@ hwmon_device_register_with_info is the most comprehensive and preferred means
+ to register a hardware monitoring device. It creates the standard sysfs
+ attributes in the hardware monitoring core, letting the driver focus on reading
+ from and writing to the chip instead of having to bother with sysfs attributes.
+-The parent device parameter cannot be NULL with non-NULL chip info. Its
++The parent device parameter as well as the chip parameter must not be NULL. Its
+ parameters are described in more detail below.
+ devm_hwmon_device_register_with_info is similar to
+diff --git a/drivers/hwmon/hwmon.c b/drivers/hwmon/hwmon.c
+index a2175394cd25..c73b93b9bb87 100644
+--- a/drivers/hwmon/hwmon.c
++++ b/drivers/hwmon/hwmon.c
+@@ -715,11 +715,12 @@ EXPORT_SYMBOL_GPL(hwmon_device_register_with_groups);
+ /**
+  * hwmon_device_register_with_info - register w/ hwmon
+- * @dev: the parent device
+- * @name: hwmon name attribute
+- * @drvdata: driver data to attach to created device
+- * @chip: pointer to hwmon chip information
++ * @dev: the parent device (mandatory)
++ * @name: hwmon name attribute (mandatory)
++ * @drvdata: driver data to attach to created device (optional)
++ * @chip: pointer to hwmon chip information (mandatory)
+  * @extra_groups: pointer to list of additional non-standard attribute groups
++ *    (optional)
+  *
+  * hwmon_device_unregister() must be called when the device is no
+  * longer needed.
+@@ -732,13 +733,10 @@ hwmon_device_register_with_info(struct device *dev, const char *name,
+                               const struct hwmon_chip_info *chip,
+                               const struct attribute_group **extra_groups)
+ {
+-      if (!name)
+-              return ERR_PTR(-EINVAL);
+-
+-      if (chip && (!chip->ops || !chip->ops->is_visible || !chip->info))
++      if (!dev || !name || !chip)
+               return ERR_PTR(-EINVAL);
+-      if (chip && !dev)
++      if (!chip->ops || !chip->ops->is_visible || !chip->info)
+               return ERR_PTR(-EINVAL);
+       return __hwmon_device_register(dev, name, drvdata, chip, extra_groups);
+-- 
+2.35.1
+
diff --git a/queue-5.4/i2c-at91-initialize-dma_buf-in-at91_twi_xfer.patch b/queue-5.4/i2c-at91-initialize-dma_buf-in-at91_twi_xfer.patch
new file mode 100644 (file)
index 0000000..735847b
--- /dev/null
@@ -0,0 +1,48 @@
+From 8492fb8a3f28f9c1d431c0e9e326799168df74cc Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Thu, 5 May 2022 08:27:38 -0700
+Subject: i2c: at91: Initialize dma_buf in at91_twi_xfer()
+
+From: Nathan Chancellor <nathan@kernel.org>
+
+[ Upstream commit 6977262c2eee111645668fe9e235ef2f5694abf7 ]
+
+Clang warns:
+
+  drivers/i2c/busses/i2c-at91-master.c:707:6: warning: variable 'dma_buf' is used uninitialized whenever 'if' condition is false [-Wsometimes-uninitialized]
+          if (dev->use_dma) {
+              ^~~~~~~~~~~~
+  drivers/i2c/busses/i2c-at91-master.c:717:27: note: uninitialized use occurs here
+          i2c_put_dma_safe_msg_buf(dma_buf, m_start, !ret);
+                                   ^~~~~~~
+
+Initialize dma_buf to NULL, as i2c_put_dma_safe_msg_buf() is a no-op
+when the first argument is NULL, which will work for the !dev->use_dma
+case.
+
+Fixes: 03fbb903c8bf ("i2c: at91: use dma safe buffers")
+Link: https://github.com/ClangBuiltLinux/linux/issues/1629
+Signed-off-by: Nathan Chancellor <nathan@kernel.org>
+Reviewed-by: Michael Walle <michael@walle.cc>
+Signed-off-by: Wolfram Sang <wsa@kernel.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/i2c/busses/i2c-at91-master.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/drivers/i2c/busses/i2c-at91-master.c b/drivers/i2c/busses/i2c-at91-master.c
+index 44502024cc10..f74d5ad2f1fa 100644
+--- a/drivers/i2c/busses/i2c-at91-master.c
++++ b/drivers/i2c/busses/i2c-at91-master.c
+@@ -609,7 +609,7 @@ static int at91_twi_xfer(struct i2c_adapter *adap, struct i2c_msg *msg, int num)
+       unsigned int_addr_flag = 0;
+       struct i2c_msg *m_start = msg;
+       bool is_read;
+-      u8 *dma_buf;
++      u8 *dma_buf = NULL;
+       dev_dbg(&adap->dev, "at91_xfer: processing %d messages:\n", num);
+-- 
+2.35.1
+
diff --git a/queue-5.4/i2c-at91-use-dma-safe-buffers.patch b/queue-5.4/i2c-at91-use-dma-safe-buffers.patch
new file mode 100644 (file)
index 0000000..6ea6e92
--- /dev/null
@@ -0,0 +1,58 @@
+From 25e9d1cf9d9edf07b6410bd31cdbea0d9128c1c8 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Thu, 7 Apr 2022 17:08:28 +0200
+Subject: i2c: at91: use dma safe buffers
+
+From: Michael Walle <michael@walle.cc>
+
+[ Upstream commit 03fbb903c8bf7e53e101e8d9a7b261264317c411 ]
+
+The supplied buffer might be on the stack and we get the following error
+message:
+[    3.312058] at91_i2c e0070600.i2c: rejecting DMA map of vmalloc memory
+
+Use i2c_{get,put}_dma_safe_msg_buf() to get a DMA-able memory region if
+necessary.
+
+Fixes: 60937b2cdbf9 ("i2c: at91: add dma support")
+Signed-off-by: Michael Walle <michael@walle.cc>
+Reviewed-by: Codrin Ciubotariu <codrin.ciubotariu@microchip.com>
+Signed-off-by: Wolfram Sang <wsa@kernel.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/i2c/busses/i2c-at91-master.c | 11 +++++++++++
+ 1 file changed, 11 insertions(+)
+
+diff --git a/drivers/i2c/busses/i2c-at91-master.c b/drivers/i2c/busses/i2c-at91-master.c
+index a3fcc35ffd3b..44502024cc10 100644
+--- a/drivers/i2c/busses/i2c-at91-master.c
++++ b/drivers/i2c/busses/i2c-at91-master.c
+@@ -609,6 +609,7 @@ static int at91_twi_xfer(struct i2c_adapter *adap, struct i2c_msg *msg, int num)
+       unsigned int_addr_flag = 0;
+       struct i2c_msg *m_start = msg;
+       bool is_read;
++      u8 *dma_buf;
+       dev_dbg(&adap->dev, "at91_xfer: processing %d messages:\n", num);
+@@ -656,7 +657,17 @@ static int at91_twi_xfer(struct i2c_adapter *adap, struct i2c_msg *msg, int num)
+       dev->msg = m_start;
+       dev->recv_len_abort = false;
++      if (dev->use_dma) {
++              dma_buf = i2c_get_dma_safe_msg_buf(m_start, 1);
++              if (!dma_buf) {
++                      ret = -ENOMEM;
++                      goto out;
++              }
++              dev->buf = dma_buf;
++      }
++
+       ret = at91_do_twi_transfer(dev);
++      i2c_put_dma_safe_msg_buf(dma_buf, m_start, !ret);
+       ret = (ret < 0) ? ret : num;
+ out:
+-- 
+2.35.1
+
diff --git a/queue-5.4/ib-rdmavt-add-missing-locks-in-rvt_ruc_loopback.patch b/queue-5.4/ib-rdmavt-add-missing-locks-in-rvt_ruc_loopback.patch
new file mode 100644 (file)
index 0000000..bde3a53
--- /dev/null
@@ -0,0 +1,64 @@
+From 917354942f3929ca328ea1cc696d3d8da2e7cc5e Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Mon, 28 Feb 2022 20:51:44 +0100
+Subject: IB/rdmavt: add missing locks in rvt_ruc_loopback
+
+From: Niels Dossche <dossche.niels@gmail.com>
+
+[ Upstream commit 22cbc6c2681a0a4fe76150270426e763d52353a4 ]
+
+The documentation of the function rvt_error_qp says both r_lock and
+s_lock need to be held when calling that function.
+It also asserts using lockdep that both of those locks are held.
+rvt_error_qp is called form rvt_send_cq, which is called from
+rvt_qp_complete_swqe, which is called from rvt_send_complete, which is
+called from rvt_ruc_loopback in two places. Both of these places do not
+hold r_lock. Fix this by acquiring a spin_lock of r_lock in both of
+these places.
+The r_lock acquiring cannot be added in rvt_qp_complete_swqe because
+some of its other callers already have r_lock acquired.
+
+Link: https://lore.kernel.org/r/20220228195144.71946-1-dossche.niels@gmail.com
+Signed-off-by: Niels Dossche <dossche.niels@gmail.com>
+Signed-off-by: Jason Gunthorpe <jgg@nvidia.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/infiniband/sw/rdmavt/qp.c | 6 +++++-
+ 1 file changed, 5 insertions(+), 1 deletion(-)
+
+diff --git a/drivers/infiniband/sw/rdmavt/qp.c b/drivers/infiniband/sw/rdmavt/qp.c
+index 48e8612c1bc8..e97c13967174 100644
+--- a/drivers/infiniband/sw/rdmavt/qp.c
++++ b/drivers/infiniband/sw/rdmavt/qp.c
+@@ -2812,7 +2812,7 @@ void rvt_qp_iter(struct rvt_dev_info *rdi,
+ EXPORT_SYMBOL(rvt_qp_iter);
+ /*
+- * This should be called with s_lock held.
++ * This should be called with s_lock and r_lock held.
+  */
+ void rvt_send_complete(struct rvt_qp *qp, struct rvt_swqe *wqe,
+                      enum ib_wc_status status)
+@@ -3171,7 +3171,9 @@ void rvt_ruc_loopback(struct rvt_qp *sqp)
+       rvp->n_loop_pkts++;
+ flush_send:
+       sqp->s_rnr_retry = sqp->s_rnr_retry_cnt;
++      spin_lock(&sqp->r_lock);
+       rvt_send_complete(sqp, wqe, send_status);
++      spin_unlock(&sqp->r_lock);
+       if (local_ops) {
+               atomic_dec(&sqp->local_ops_pending);
+               local_ops = 0;
+@@ -3225,7 +3227,9 @@ void rvt_ruc_loopback(struct rvt_qp *sqp)
+       spin_unlock_irqrestore(&qp->r_lock, flags);
+ serr_no_r_lock:
+       spin_lock_irqsave(&sqp->s_lock, flags);
++      spin_lock(&sqp->r_lock);
+       rvt_send_complete(sqp, wqe, send_status);
++      spin_unlock(&sqp->r_lock);
+       if (sqp->ibqp.qp_type == IB_QPT_RC) {
+               int lastwqe;
+-- 
+2.35.1
+
diff --git a/queue-5.4/inotify-show-inotify-mask-flags-in-proc-fdinfo.patch b/queue-5.4/inotify-show-inotify-mask-flags-in-proc-fdinfo.patch
new file mode 100644 (file)
index 0000000..6a16bd1
--- /dev/null
@@ -0,0 +1,86 @@
+From 55a92fe21c8e3f31fc38ede49704d390e76b46f7 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Fri, 22 Apr 2022 15:03:12 +0300
+Subject: inotify: show inotify mask flags in proc fdinfo
+
+From: Amir Goldstein <amir73il@gmail.com>
+
+[ Upstream commit a32e697cda27679a0327ae2cafdad8c7170f548f ]
+
+The inotify mask flags IN_ONESHOT and IN_EXCL_UNLINK are not "internal
+to kernel" and should be exposed in procfs fdinfo so CRIU can restore
+them.
+
+Fixes: 6933599697c9 ("inotify: hide internal kernel bits from fdinfo")
+Link: https://lore.kernel.org/r/20220422120327.3459282-2-amir73il@gmail.com
+Signed-off-by: Amir Goldstein <amir73il@gmail.com>
+Signed-off-by: Jan Kara <jack@suse.cz>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ fs/notify/fdinfo.c               | 11 ++---------
+ fs/notify/inotify/inotify.h      | 12 ++++++++++++
+ fs/notify/inotify/inotify_user.c |  2 +-
+ 3 files changed, 15 insertions(+), 10 deletions(-)
+
+diff --git a/fs/notify/fdinfo.c b/fs/notify/fdinfo.c
+index 1e2bfd26b352..7df9ad4d8433 100644
+--- a/fs/notify/fdinfo.c
++++ b/fs/notify/fdinfo.c
+@@ -84,16 +84,9 @@ static void inotify_fdinfo(struct seq_file *m, struct fsnotify_mark *mark)
+       inode_mark = container_of(mark, struct inotify_inode_mark, fsn_mark);
+       inode = igrab(fsnotify_conn_inode(mark->connector));
+       if (inode) {
+-              /*
+-               * IN_ALL_EVENTS represents all of the mask bits
+-               * that we expose to userspace.  There is at
+-               * least one bit (FS_EVENT_ON_CHILD) which is
+-               * used only internally to the kernel.
+-               */
+-              u32 mask = mark->mask & IN_ALL_EVENTS;
+-              seq_printf(m, "inotify wd:%x ino:%lx sdev:%x mask:%x ignored_mask:%x ",
++              seq_printf(m, "inotify wd:%x ino:%lx sdev:%x mask:%x ignored_mask:0 ",
+                          inode_mark->wd, inode->i_ino, inode->i_sb->s_dev,
+-                         mask, mark->ignored_mask);
++                         inotify_mark_user_mask(mark));
+               show_mark_fhandle(m, inode);
+               seq_putc(m, '\n');
+               iput(inode);
+diff --git a/fs/notify/inotify/inotify.h b/fs/notify/inotify/inotify.h
+index 3f246f7b8a92..8b8bf52dd08b 100644
+--- a/fs/notify/inotify/inotify.h
++++ b/fs/notify/inotify/inotify.h
+@@ -22,6 +22,18 @@ static inline struct inotify_event_info *INOTIFY_E(struct fsnotify_event *fse)
+       return container_of(fse, struct inotify_event_info, fse);
+ }
++/*
++ * INOTIFY_USER_FLAGS represents all of the mask bits that we expose to
++ * userspace.  There is at least one bit (FS_EVENT_ON_CHILD) which is
++ * used only internally to the kernel.
++ */
++#define INOTIFY_USER_MASK (IN_ALL_EVENTS | IN_ONESHOT | IN_EXCL_UNLINK)
++
++static inline __u32 inotify_mark_user_mask(struct fsnotify_mark *fsn_mark)
++{
++      return fsn_mark->mask & INOTIFY_USER_MASK;
++}
++
+ extern void inotify_ignored_and_remove_idr(struct fsnotify_mark *fsn_mark,
+                                          struct fsnotify_group *group);
+ extern int inotify_handle_event(struct fsnotify_group *group,
+diff --git a/fs/notify/inotify/inotify_user.c b/fs/notify/inotify/inotify_user.c
+index 81ffc8629fc4..b949b2c02f4b 100644
+--- a/fs/notify/inotify/inotify_user.c
++++ b/fs/notify/inotify/inotify_user.c
+@@ -86,7 +86,7 @@ static inline __u32 inotify_arg_to_mask(u32 arg)
+       mask = (FS_IN_IGNORED | FS_EVENT_ON_CHILD | FS_UNMOUNT);
+       /* mask off the flags used to open the fd */
+-      mask |= (arg & (IN_ALL_EVENTS | IN_ONESHOT | IN_EXCL_UNLINK));
++      mask |= (arg & INOTIFY_USER_MASK);
+       return mask;
+ }
+-- 
+2.35.1
+
diff --git a/queue-5.4/input-sparcspkr-fix-refcount-leak-in-bbc_beep_probe.patch b/queue-5.4/input-sparcspkr-fix-refcount-leak-in-bbc_beep_probe.patch
new file mode 100644 (file)
index 0000000..ddb7bdd
--- /dev/null
@@ -0,0 +1,38 @@
+From cddd542b073f99bc2c8074a0d4a8ff393767c2c2 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Mon, 16 May 2022 14:55:55 -0700
+Subject: Input: sparcspkr - fix refcount leak in bbc_beep_probe
+
+From: Miaoqian Lin <linmq006@gmail.com>
+
+[ Upstream commit c8994b30d71d64d5dcc9bc0edbfdf367171aa96f ]
+
+of_find_node_by_path() calls of_find_node_opts_by_path(),
+which returns a node pointer with refcount
+incremented, we should use of_node_put() on it when done.
+Add missing of_node_put() to avoid refcount leak.
+
+Fixes: 9c1a5077fdca ("input: Rewrite sparcspkr device probing.")
+Signed-off-by: Miaoqian Lin <linmq006@gmail.com>
+Link: https://lore.kernel.org/r/20220516081018.42728-1-linmq006@gmail.com
+Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/input/misc/sparcspkr.c | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/drivers/input/misc/sparcspkr.c b/drivers/input/misc/sparcspkr.c
+index fe43e5557ed7..cdcb7737c46a 100644
+--- a/drivers/input/misc/sparcspkr.c
++++ b/drivers/input/misc/sparcspkr.c
+@@ -205,6 +205,7 @@ static int bbc_beep_probe(struct platform_device *op)
+       info = &state->u.bbc;
+       info->clock_freq = of_getintprop_default(dp, "clock-frequency", 0);
++      of_node_put(dp);
+       if (!info->clock_freq)
+               goto out_free;
+-- 
+2.35.1
+
diff --git a/queue-5.4/input-stmfts-do-not-leave-device-disabled-in-stmfts_.patch b/queue-5.4/input-stmfts-do-not-leave-device-disabled-in-stmfts_.patch
new file mode 100644 (file)
index 0000000..38f7f07
--- /dev/null
@@ -0,0 +1,65 @@
+From d1d59eeaaf888caf22d6078a5988a2e752d48a30 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Wed, 25 May 2022 09:51:08 -0700
+Subject: Input: stmfts - do not leave device disabled in stmfts_input_open
+
+From: Dmitry Torokhov <dmitry.torokhov@gmail.com>
+
+[ Upstream commit 5f76955ab1e43e5795a9631b22ca4f918a0ae986 ]
+
+The commit 26623eea0da3 attempted to deal with potential leak of runtime
+PM counter when opening the touchscreen device, however it ended up
+erroneously dropping the counter in the case of successfully enabling the
+device.
+
+Let's address this by using pm_runtime_resume_and_get() and then executing
+pm_runtime_put_sync() only when we fail to send "sense on" command to the
+device.
+
+Fixes: 26623eea0da3 ("Input: stmfts - fix reference leak in stmfts_input_open")
+Reported-by: Pavel Machek <pavel@denx.de>
+Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/input/touchscreen/stmfts.c | 16 ++++++++--------
+ 1 file changed, 8 insertions(+), 8 deletions(-)
+
+diff --git a/drivers/input/touchscreen/stmfts.c b/drivers/input/touchscreen/stmfts.c
+index be1dd504d5b1..20bc2279a2f2 100644
+--- a/drivers/input/touchscreen/stmfts.c
++++ b/drivers/input/touchscreen/stmfts.c
+@@ -337,13 +337,15 @@ static int stmfts_input_open(struct input_dev *dev)
+       struct stmfts_data *sdata = input_get_drvdata(dev);
+       int err;
+-      err = pm_runtime_get_sync(&sdata->client->dev);
+-      if (err < 0)
+-              goto out;
++      err = pm_runtime_resume_and_get(&sdata->client->dev);
++      if (err)
++              return err;
+       err = i2c_smbus_write_byte(sdata->client, STMFTS_MS_MT_SENSE_ON);
+-      if (err)
+-              goto out;
++      if (err) {
++              pm_runtime_put_sync(&sdata->client->dev);
++              return err;
++      }
+       mutex_lock(&sdata->mutex);
+       sdata->running = true;
+@@ -366,9 +368,7 @@ static int stmfts_input_open(struct input_dev *dev)
+                                "failed to enable touchkey\n");
+       }
+-out:
+-      pm_runtime_put_noidle(&sdata->client->dev);
+-      return err;
++      return 0;
+ }
+ static void stmfts_input_close(struct input_dev *dev)
+-- 
+2.35.1
+
diff --git a/queue-5.4/iomap-iomap_write_failed-fix.patch b/queue-5.4/iomap-iomap_write_failed-fix.patch
new file mode 100644 (file)
index 0000000..bad0877
--- /dev/null
@@ -0,0 +1,38 @@
+From bef70c1e3ed17133a6b7598eaa683f083fcbaaa6 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Thu, 5 May 2022 18:19:13 -0700
+Subject: iomap: iomap_write_failed fix
+
+From: Andreas Gruenbacher <agruenba@redhat.com>
+
+[ Upstream commit b71450e2cc4b3c79f33c5bd276d152af9bd54f79 ]
+
+The @lend parameter of truncate_pagecache_range() should be the offset
+of the last byte of the hole, not the first byte beyond it.
+
+Fixes: ae259a9c8593 ("fs: introduce iomap infrastructure")
+Signed-off-by: Andreas Gruenbacher <agruenba@redhat.com>
+Reviewed-by: Darrick J. Wong <djwong@kernel.org>
+Signed-off-by: Darrick J. Wong <djwong@kernel.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ fs/iomap/buffered-io.c | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+diff --git a/fs/iomap/buffered-io.c b/fs/iomap/buffered-io.c
+index 5c73751adb2d..53cd7b2bb580 100644
+--- a/fs/iomap/buffered-io.c
++++ b/fs/iomap/buffered-io.c
+@@ -535,7 +535,8 @@ iomap_write_failed(struct inode *inode, loff_t pos, unsigned len)
+        * write started inside the existing inode size.
+        */
+       if (pos + len > i_size)
+-              truncate_pagecache_range(inode, max(pos, i_size), pos + len);
++              truncate_pagecache_range(inode, max(pos, i_size),
++                                       pos + len - 1);
+ }
+ static int
+-- 
+2.35.1
+
diff --git a/queue-5.4/iommu-amd-increase-timeout-waiting-for-ga-log-enable.patch b/queue-5.4/iommu-amd-increase-timeout-waiting-for-ga-log-enable.patch
new file mode 100644 (file)
index 0000000..b173293
--- /dev/null
@@ -0,0 +1,54 @@
+From 309bde26d7d780a26c47ad3ef4f201c9adbf8bfa Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Fri, 20 May 2022 12:22:14 +0200
+Subject: iommu/amd: Increase timeout waiting for GA log enablement
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+From: Joerg Roedel <jroedel@suse.de>
+
+[ Upstream commit 42bb5aa043382f09bef2cc33b8431be867c70f8e ]
+
+On some systems it can take a long time for the hardware to enable the
+GA log of the AMD IOMMU. The current wait time is only 0.1ms, but
+testing showed that it can take up to 14ms for the GA log to enter
+running state after it has been enabled.
+
+Sometimes the long delay happens when booting the system, sometimes
+only on resume. Adjust the timeout accordingly to not print a warning
+when hardware takes a longer than usual.
+
+There has already been an attempt to fix this with commit
+
+       9b45a7738eec ("iommu/amd: Fix loop timeout issue in iommu_ga_log_enable()")
+
+But that commit was based on some wrong math and did not fix the issue
+in all cases.
+
+Cc: "D. Ziegfeld" <dzigg@posteo.de>
+Cc: Jörg-Volker Peetz <jvpeetz@web.de>
+Fixes: 8bda0cfbdc1a ("iommu/amd: Detect and initialize guest vAPIC log")
+Signed-off-by: Joerg Roedel <jroedel@suse.de>
+Link: https://lore.kernel.org/r/20220520102214.12563-1-joro@8bytes.org
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/iommu/amd_iommu_init.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/drivers/iommu/amd_iommu_init.c b/drivers/iommu/amd_iommu_init.c
+index 7502fa84e253..82d008310418 100644
+--- a/drivers/iommu/amd_iommu_init.c
++++ b/drivers/iommu/amd_iommu_init.c
+@@ -83,7 +83,7 @@
+ #define ACPI_DEVFLAG_LINT1              0x80
+ #define ACPI_DEVFLAG_ATSDIS             0x10000000
+-#define LOOP_TIMEOUT  100000
++#define LOOP_TIMEOUT  2000000
+ /*
+  * ACPI table definitions
+  *
+-- 
+2.35.1
+
diff --git a/queue-5.4/iommu-mediatek-add-list_del-in-mtk_iommu_remove.patch b/queue-5.4/iommu-mediatek-add-list_del-in-mtk_iommu_remove.patch
new file mode 100644 (file)
index 0000000..c0d5f44
--- /dev/null
@@ -0,0 +1,43 @@
+From 24d55d1355699319489d7d7f197087866d70be24 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Tue, 3 May 2022 15:13:56 +0800
+Subject: iommu/mediatek: Add list_del in mtk_iommu_remove
+
+From: Yong Wu <yong.wu@mediatek.com>
+
+[ Upstream commit ee55f75e4bcade81d253163641b63bef3e76cac4 ]
+
+Lack the list_del in the mtk_iommu_remove, and remove
+bus_set_iommu(*, NULL) since there may be several iommu HWs.
+we can not bus_set_iommu null when one iommu driver unbind.
+
+This could be a fix for mt2712 which support 2 M4U HW and list them.
+
+Fixes: 7c3a2ec02806 ("iommu/mediatek: Merge 2 M4U HWs into one iommu domain")
+Signed-off-by: Yong Wu <yong.wu@mediatek.com>
+Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>
+Reviewed-by: Matthias Brugger <matthias.bgg@gmail.com>
+Link: https://lore.kernel.org/r/20220503071427.2285-6-yong.wu@mediatek.com
+Signed-off-by: Joerg Roedel <jroedel@suse.de>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/iommu/mtk_iommu.c | 3 +--
+ 1 file changed, 1 insertion(+), 2 deletions(-)
+
+diff --git a/drivers/iommu/mtk_iommu.c b/drivers/iommu/mtk_iommu.c
+index c2f6c78fee44..18d7c818a174 100644
+--- a/drivers/iommu/mtk_iommu.c
++++ b/drivers/iommu/mtk_iommu.c
+@@ -769,8 +769,7 @@ static int mtk_iommu_remove(struct platform_device *pdev)
+       iommu_device_sysfs_remove(&data->iommu);
+       iommu_device_unregister(&data->iommu);
+-      if (iommu_present(&platform_bus_type))
+-              bus_set_iommu(&platform_bus_type, NULL);
++      list_del(&data->list);
+       clk_disable_unprepare(data->bclk);
+       devm_free_irq(&pdev->dev, data->irq, data);
+-- 
+2.35.1
+
diff --git a/queue-5.4/ipc-mqueue-use-get_tree_nodev-in-mqueue_get_tree.patch b/queue-5.4/ipc-mqueue-use-get_tree_nodev-in-mqueue_get_tree.patch
new file mode 100644 (file)
index 0000000..d06aee2
--- /dev/null
@@ -0,0 +1,121 @@
+From 8acda26b1c18df5d17fee264258cc99d1a517acc Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Mon, 9 May 2022 18:29:21 -0700
+Subject: ipc/mqueue: use get_tree_nodev() in mqueue_get_tree()
+
+From: Waiman Long <longman@redhat.com>
+
+[ Upstream commit d60c4d01a98bc1942dba6e3adc02031f5519f94b ]
+
+When running the stress-ng clone benchmark with multiple testing threads,
+it was found that there were significant spinlock contention in sget_fc().
+The contended spinlock was the sb_lock.  It is under heavy contention
+because the following code in the critcal section of sget_fc():
+
+  hlist_for_each_entry(old, &fc->fs_type->fs_supers, s_instances) {
+      if (test(old, fc))
+          goto share_extant_sb;
+  }
+
+After testing with added instrumentation code, it was found that the
+benchmark could generate thousands of ipc namespaces with the
+corresponding number of entries in the mqueue's fs_supers list where the
+namespaces are the key for the search.  This leads to excessive time in
+scanning the list for a match.
+
+Looking back at the mqueue calling sequence leading to sget_fc():
+
+  mq_init_ns()
+  => mq_create_mount()
+  => fc_mount()
+  => vfs_get_tree()
+  => mqueue_get_tree()
+  => get_tree_keyed()
+  => vfs_get_super()
+  => sget_fc()
+
+Currently, mq_init_ns() is the only mqueue function that will indirectly
+call mqueue_get_tree() with a newly allocated ipc namespace as the key for
+searching.  As a result, there will never be a match with the exising ipc
+namespaces stored in the mqueue's fs_supers list.
+
+So using get_tree_keyed() to do an existing ipc namespace search is just a
+waste of time.  Instead, we could use get_tree_nodev() to eliminate the
+useless search.  By doing so, we can greatly reduce the sb_lock hold time
+and avoid the spinlock contention problem in case a large number of ipc
+namespaces are present.
+
+Of course, if the code is modified in the future to allow
+mqueue_get_tree() to be called with an existing ipc namespace instead of a
+new one, we will have to use get_tree_keyed() in this case.
+
+The following stress-ng clone benchmark command was run on a 2-socket
+48-core Intel system:
+
+./stress-ng --clone 32 --verbose --oomable --metrics-brief -t 20
+
+The "bogo ops/s" increased from 5948.45 before patch to 9137.06 after
+patch. This is an increase of 54% in performance.
+
+Link: https://lkml.kernel.org/r/20220121172315.19652-1-longman@redhat.com
+Fixes: 935c6912b198 ("ipc: Convert mqueue fs to fs_context")
+Signed-off-by: Waiman Long <longman@redhat.com>
+Cc: Al Viro <viro@zeniv.linux.org.uk>
+Cc: David Howells <dhowells@redhat.com>
+Cc: Manfred Spraul <manfred@colorfullife.com>
+Cc: Davidlohr Bueso <dave@stgolabs.net>
+Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ ipc/mqueue.c | 14 ++++++++++++++
+ 1 file changed, 14 insertions(+)
+
+diff --git a/ipc/mqueue.c b/ipc/mqueue.c
+index 2ea0c08188e6..12519bf5f330 100644
+--- a/ipc/mqueue.c
++++ b/ipc/mqueue.c
+@@ -45,6 +45,7 @@
+ struct mqueue_fs_context {
+       struct ipc_namespace    *ipc_ns;
++      bool                     newns; /* Set if newly created ipc namespace */
+ };
+ #define MQUEUE_MAGIC  0x19800202
+@@ -365,6 +366,14 @@ static int mqueue_get_tree(struct fs_context *fc)
+ {
+       struct mqueue_fs_context *ctx = fc->fs_private;
++      /*
++       * With a newly created ipc namespace, we don't need to do a search
++       * for an ipc namespace match, but we still need to set s_fs_info.
++       */
++      if (ctx->newns) {
++              fc->s_fs_info = ctx->ipc_ns;
++              return get_tree_nodev(fc, mqueue_fill_super);
++      }
+       return get_tree_keyed(fc, mqueue_fill_super, ctx->ipc_ns);
+ }
+@@ -392,6 +401,10 @@ static int mqueue_init_fs_context(struct fs_context *fc)
+       return 0;
+ }
++/*
++ * mq_init_ns() is currently the only caller of mq_create_mount().
++ * So the ns parameter is always a newly created ipc namespace.
++ */
+ static struct vfsmount *mq_create_mount(struct ipc_namespace *ns)
+ {
+       struct mqueue_fs_context *ctx;
+@@ -403,6 +416,7 @@ static struct vfsmount *mq_create_mount(struct ipc_namespace *ns)
+               return ERR_CAST(fc);
+       ctx = fc->fs_private;
++      ctx->newns = true;
+       put_ipc_ns(ctx->ipc_ns);
+       ctx->ipc_ns = get_ipc_ns(ns);
+       put_user_ns(fc->user_ns);
+-- 
+2.35.1
+
diff --git a/queue-5.4/ipmi-fix-pr_fmt-to-avoid-compilation-issues.patch b/queue-5.4/ipmi-fix-pr_fmt-to-avoid-compilation-issues.patch
new file mode 100644 (file)
index 0000000..654509a
--- /dev/null
@@ -0,0 +1,37 @@
+From d9c264a9b92afbd8afedd94010f9e38f2042e3d7 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Fri, 15 Apr 2022 07:23:32 -0500
+Subject: ipmi: Fix pr_fmt to avoid compilation issues
+
+From: Corey Minyard <cminyard@mvista.com>
+
+[ Upstream commit 2ebaf18a0b7fb764bba6c806af99fe868cee93de ]
+
+The was it was wouldn't work in some situations, simplify it.  What was
+there was unnecessary complexity.
+
+Reported-by: kernel test robot <lkp@intel.com>
+Signed-off-by: Corey Minyard <cminyard@mvista.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/char/ipmi/ipmi_msghandler.c | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/drivers/char/ipmi/ipmi_msghandler.c b/drivers/char/ipmi/ipmi_msghandler.c
+index ad2e6d55d4a5..736970312bbc 100644
+--- a/drivers/char/ipmi/ipmi_msghandler.c
++++ b/drivers/char/ipmi/ipmi_msghandler.c
+@@ -11,8 +11,8 @@
+  * Copyright 2002 MontaVista Software Inc.
+  */
+-#define pr_fmt(fmt) "%s" fmt, "IPMI message handler: "
+-#define dev_fmt pr_fmt
++#define pr_fmt(fmt) "IPMI message handler: " fmt
++#define dev_fmt(fmt) pr_fmt(fmt)
+ #include <linux/module.h>
+ #include <linux/errno.h>
+-- 
+2.35.1
+
diff --git a/queue-5.4/ipmi-ssif-check-for-null-msg-when-handling-events-an.patch b/queue-5.4/ipmi-ssif-check-for-null-msg-when-handling-events-an.patch
new file mode 100644 (file)
index 0000000..f64ec64
--- /dev/null
@@ -0,0 +1,75 @@
+From 26a2b01dffb30b2b865c714d5339b94d3fcd30ec Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Fri, 1 Apr 2022 07:44:53 -0500
+Subject: ipmi:ssif: Check for NULL msg when handling events and messages
+
+From: Corey Minyard <cminyard@mvista.com>
+
+[ Upstream commit 7602b957e2404e5f98d9a40b68f1fd27f0028712 ]
+
+Even though it's not possible to get into the SSIF_GETTING_MESSAGES and
+SSIF_GETTING_EVENTS states without a valid message in the msg field,
+it's probably best to be defensive here and check and print a log, since
+that means something else went wrong.
+
+Also add a default clause to that switch statement to release the lock
+and print a log, in case the state variable gets messed up somehow.
+
+Reported-by: Haowen Bai <baihaowen@meizu.com>
+Signed-off-by: Corey Minyard <cminyard@mvista.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/char/ipmi/ipmi_ssif.c | 23 +++++++++++++++++++++++
+ 1 file changed, 23 insertions(+)
+
+diff --git a/drivers/char/ipmi/ipmi_ssif.c b/drivers/char/ipmi/ipmi_ssif.c
+index bb42a1c92cae..60fb6c62f224 100644
+--- a/drivers/char/ipmi/ipmi_ssif.c
++++ b/drivers/char/ipmi/ipmi_ssif.c
+@@ -845,6 +845,14 @@ static void msg_done_handler(struct ssif_info *ssif_info, int result,
+               break;
+       case SSIF_GETTING_EVENTS:
++              if (!msg) {
++                      /* Should never happen, but just in case. */
++                      dev_warn(&ssif_info->client->dev,
++                               "No message set while getting events\n");
++                      ipmi_ssif_unlock_cond(ssif_info, flags);
++                      break;
++              }
++
+               if ((result < 0) || (len < 3) || (msg->rsp[2] != 0)) {
+                       /* Error getting event, probably done. */
+                       msg->done(msg);
+@@ -869,6 +877,14 @@ static void msg_done_handler(struct ssif_info *ssif_info, int result,
+               break;
+       case SSIF_GETTING_MESSAGES:
++              if (!msg) {
++                      /* Should never happen, but just in case. */
++                      dev_warn(&ssif_info->client->dev,
++                               "No message set while getting messages\n");
++                      ipmi_ssif_unlock_cond(ssif_info, flags);
++                      break;
++              }
++
+               if ((result < 0) || (len < 3) || (msg->rsp[2] != 0)) {
+                       /* Error getting event, probably done. */
+                       msg->done(msg);
+@@ -892,6 +908,13 @@ static void msg_done_handler(struct ssif_info *ssif_info, int result,
+                       deliver_recv_msg(ssif_info, msg);
+               }
+               break;
++
++      default:
++              /* Should never happen, but just in case. */
++              dev_warn(&ssif_info->client->dev,
++                       "Invalid state in message done handling: %d\n",
++                       ssif_info->ssif_state);
++              ipmi_ssif_unlock_cond(ssif_info, flags);
+       }
+       flags = ipmi_ssif_lock_cond(ssif_info, &oflags);
+-- 
+2.35.1
+
diff --git a/queue-5.4/ipv6-don-t-send-rs-packets-to-the-interface-of-arphr.patch b/queue-5.4/ipv6-don-t-send-rs-packets-to-the-interface-of-arphr.patch
new file mode 100644 (file)
index 0000000..9e23c31
--- /dev/null
@@ -0,0 +1,50 @@
+From 0e0cbefb9a125fb8303f40ac17f57f5190d9dd5a Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Fri, 29 Apr 2022 13:38:02 +0800
+Subject: ipv6: Don't send rs packets to the interface of ARPHRD_TUNNEL
+
+From: jianghaoran <jianghaoran@kylinos.cn>
+
+[ Upstream commit b52e1cce31ca721e937d517411179f9196ee6135 ]
+
+ARPHRD_TUNNEL interface can't process rs packets
+and will generate TX errors
+
+ex:
+ip tunnel add ethn mode ipip local 192.168.1.1 remote 192.168.1.2
+ifconfig ethn x.x.x.x
+
+ethn: flags=209<UP,POINTOPOINT,RUNNING,NOARP>  mtu 1480
+       inet x.x.x.x  netmask 255.255.255.255  destination x.x.x.x
+       inet6 fe80::5efe:ac1e:3cdb  prefixlen 64  scopeid 0x20<link>
+       tunnel   txqueuelen 1000  (IPIP Tunnel)
+       RX packets 0  bytes 0 (0.0 B)
+       RX errors 0  dropped 0  overruns 0  frame 0
+       TX packets 0  bytes 0 (0.0 B)
+       TX errors 3  dropped 0 overruns 0  carrier 0  collisions 0
+
+Signed-off-by: jianghaoran <jianghaoran@kylinos.cn>
+Link: https://lore.kernel.org/r/20220429053802.246681-1-jianghaoran@kylinos.cn
+Signed-off-by: Jakub Kicinski <kuba@kernel.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ net/ipv6/addrconf.c | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+diff --git a/net/ipv6/addrconf.c b/net/ipv6/addrconf.c
+index efea88fb3cd5..e29553e4f4ee 100644
+--- a/net/ipv6/addrconf.c
++++ b/net/ipv6/addrconf.c
+@@ -4202,7 +4202,8 @@ static void addrconf_dad_completed(struct inet6_ifaddr *ifp, bool bump_id,
+       send_rs = send_mld &&
+                 ipv6_accept_ra(ifp->idev) &&
+                 ifp->idev->cnf.rtr_solicits != 0 &&
+-                (dev->flags&IFF_LOOPBACK) == 0;
++                (dev->flags & IFF_LOOPBACK) == 0 &&
++                (dev->type != ARPHRD_TUNNEL);
+       read_unlock_bh(&ifp->idev->lock);
+       /* While dad is in progress mld report's source address is in6_addrany.
+-- 
+2.35.1
+
diff --git a/queue-5.4/ipv6-fix-locking-issues-with-loops-over-idev-addr_li.patch b/queue-5.4/ipv6-fix-locking-issues-with-loops-over-idev-addr_li.patch
new file mode 100644 (file)
index 0000000..4edcdc6
--- /dev/null
@@ -0,0 +1,149 @@
+From b5ddbe0f90ec3b7ee5adaa3f8f46a956f8107ce5 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Mon, 4 Apr 2022 01:15:24 +0200
+Subject: ipv6: fix locking issues with loops over idev->addr_list
+
+From: Niels Dossche <dossche.niels@gmail.com>
+
+[ Upstream commit 51454ea42c1ab4e0c2828bb0d4d53957976980de ]
+
+idev->addr_list needs to be protected by idev->lock. However, it is not
+always possible to do so while iterating and performing actions on
+inet6_ifaddr instances. For example, multiple functions (like
+addrconf_{join,leave}_anycast) eventually call down to other functions
+that acquire the idev->lock. The current code temporarily unlocked the
+idev->lock during the loops, which can cause race conditions. Moving the
+locks up is also not an appropriate solution as the ordering of lock
+acquisition will be inconsistent with for example mc_lock.
+
+This solution adds an additional field to inet6_ifaddr that is used
+to temporarily add the instances to a temporary list while holding
+idev->lock. The temporary list can then be traversed without holding
+idev->lock. This change was done in two places. In addrconf_ifdown, the
+list_for_each_entry_safe variant of the list loop is also no longer
+necessary as there is no deletion within that specific loop.
+
+Suggested-by: Paolo Abeni <pabeni@redhat.com>
+Signed-off-by: Niels Dossche <dossche.niels@gmail.com>
+Acked-by: Paolo Abeni <pabeni@redhat.com>
+Link: https://lore.kernel.org/r/20220403231523.45843-1-dossche.niels@gmail.com
+Signed-off-by: Jakub Kicinski <kuba@kernel.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ include/net/if_inet6.h |  8 ++++++++
+ net/ipv6/addrconf.c    | 30 ++++++++++++++++++++++++------
+ 2 files changed, 32 insertions(+), 6 deletions(-)
+
+diff --git a/include/net/if_inet6.h b/include/net/if_inet6.h
+index a01981d7108f..f6d614926e9e 100644
+--- a/include/net/if_inet6.h
++++ b/include/net/if_inet6.h
+@@ -64,6 +64,14 @@ struct inet6_ifaddr {
+       struct hlist_node       addr_lst;
+       struct list_head        if_list;
++      /*
++       * Used to safely traverse idev->addr_list in process context
++       * if the idev->lock needed to protect idev->addr_list cannot be held.
++       * In that case, add the items to this list temporarily and iterate
++       * without holding idev->lock.
++       * See addrconf_ifdown and dev_forward_change.
++       */
++      struct list_head        if_list_aux;
+       struct list_head        tmp_list;
+       struct inet6_ifaddr     *ifpub;
+diff --git a/net/ipv6/addrconf.c b/net/ipv6/addrconf.c
+index 92b32d131e1c..efea88fb3cd5 100644
+--- a/net/ipv6/addrconf.c
++++ b/net/ipv6/addrconf.c
+@@ -789,6 +789,7 @@ static void dev_forward_change(struct inet6_dev *idev)
+ {
+       struct net_device *dev;
+       struct inet6_ifaddr *ifa;
++      LIST_HEAD(tmp_addr_list);
+       if (!idev)
+               return;
+@@ -807,14 +808,24 @@ static void dev_forward_change(struct inet6_dev *idev)
+               }
+       }
++      read_lock_bh(&idev->lock);
+       list_for_each_entry(ifa, &idev->addr_list, if_list) {
+               if (ifa->flags&IFA_F_TENTATIVE)
+                       continue;
++              list_add_tail(&ifa->if_list_aux, &tmp_addr_list);
++      }
++      read_unlock_bh(&idev->lock);
++
++      while (!list_empty(&tmp_addr_list)) {
++              ifa = list_first_entry(&tmp_addr_list,
++                                     struct inet6_ifaddr, if_list_aux);
++              list_del(&ifa->if_list_aux);
+               if (idev->cnf.forwarding)
+                       addrconf_join_anycast(ifa);
+               else
+                       addrconf_leave_anycast(ifa);
+       }
++
+       inet6_netconf_notify_devconf(dev_net(dev), RTM_NEWNETCONF,
+                                    NETCONFA_FORWARDING,
+                                    dev->ifindex, &idev->cnf);
+@@ -3713,7 +3724,8 @@ static int addrconf_ifdown(struct net_device *dev, int how)
+       unsigned long event = how ? NETDEV_UNREGISTER : NETDEV_DOWN;
+       struct net *net = dev_net(dev);
+       struct inet6_dev *idev;
+-      struct inet6_ifaddr *ifa, *tmp;
++      struct inet6_ifaddr *ifa;
++      LIST_HEAD(tmp_addr_list);
+       bool keep_addr = false;
+       bool was_ready;
+       int state, i;
+@@ -3805,16 +3817,23 @@ static int addrconf_ifdown(struct net_device *dev, int how)
+               write_lock_bh(&idev->lock);
+       }
+-      list_for_each_entry_safe(ifa, tmp, &idev->addr_list, if_list) {
++      list_for_each_entry(ifa, &idev->addr_list, if_list)
++              list_add_tail(&ifa->if_list_aux, &tmp_addr_list);
++      write_unlock_bh(&idev->lock);
++
++      while (!list_empty(&tmp_addr_list)) {
+               struct fib6_info *rt = NULL;
+               bool keep;
++              ifa = list_first_entry(&tmp_addr_list,
++                                     struct inet6_ifaddr, if_list_aux);
++              list_del(&ifa->if_list_aux);
++
+               addrconf_del_dad_work(ifa);
+               keep = keep_addr && (ifa->flags & IFA_F_PERMANENT) &&
+                       !addr_is_local(&ifa->addr);
+-              write_unlock_bh(&idev->lock);
+               spin_lock_bh(&ifa->lock);
+               if (keep) {
+@@ -3845,15 +3864,14 @@ static int addrconf_ifdown(struct net_device *dev, int how)
+                       addrconf_leave_solict(ifa->idev, &ifa->addr);
+               }
+-              write_lock_bh(&idev->lock);
+               if (!keep) {
++                      write_lock_bh(&idev->lock);
+                       list_del_rcu(&ifa->if_list);
++                      write_unlock_bh(&idev->lock);
+                       in6_ifa_put(ifa);
+               }
+       }
+-      write_unlock_bh(&idev->lock);
+-
+       /* Step 5: Discard anycast and multicast list */
+       if (how) {
+               ipv6_ac_destroy_dev(idev);
+-- 
+2.35.1
+
diff --git a/queue-5.4/ipw2x00-fix-potential-null-dereference-in-libipw_xmi.patch b/queue-5.4/ipw2x00-fix-potential-null-dereference-in-libipw_xmi.patch
new file mode 100644 (file)
index 0000000..2e8db7a
--- /dev/null
@@ -0,0 +1,36 @@
+From e34f8855c4c1d46223216c983bc19374842d03fe Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Fri, 1 Apr 2022 15:10:54 +0800
+Subject: ipw2x00: Fix potential NULL dereference in libipw_xmit()
+
+From: Haowen Bai <baihaowen@meizu.com>
+
+[ Upstream commit e8366bbabe1d207cf7c5b11ae50e223ae6fc278b ]
+
+crypt and crypt->ops could be null, so we need to checking null
+before dereference
+
+Signed-off-by: Haowen Bai <baihaowen@meizu.com>
+Signed-off-by: Kalle Valo <kvalo@kernel.org>
+Link: https://lore.kernel.org/r/1648797055-25730-1-git-send-email-baihaowen@meizu.com
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/net/wireless/intel/ipw2x00/libipw_tx.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/drivers/net/wireless/intel/ipw2x00/libipw_tx.c b/drivers/net/wireless/intel/ipw2x00/libipw_tx.c
+index d9baa2fa603b..e4c60caa6543 100644
+--- a/drivers/net/wireless/intel/ipw2x00/libipw_tx.c
++++ b/drivers/net/wireless/intel/ipw2x00/libipw_tx.c
+@@ -383,7 +383,7 @@ netdev_tx_t libipw_xmit(struct sk_buff *skb, struct net_device *dev)
+               /* Each fragment may need to have room for encryption
+                * pre/postfix */
+-              if (host_encrypt)
++              if (host_encrypt && crypt && crypt->ops)
+                       bytes_per_frag -= crypt->ops->extra_mpdu_prefix_len +
+                           crypt->ops->extra_mpdu_postfix_len;
+-- 
+2.35.1
+
diff --git a/queue-5.4/irqchip-aspeed-i2c-ic-fix-irq_of_parse_and_map-retur.patch b/queue-5.4/irqchip-aspeed-i2c-ic-fix-irq_of_parse_and_map-retur.patch
new file mode 100644 (file)
index 0000000..0c3f977
--- /dev/null
@@ -0,0 +1,38 @@
+From e874f386060aa3e5312e11cd5b2300563d213325 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Sat, 23 Apr 2022 11:42:26 +0200
+Subject: irqchip/aspeed-i2c-ic: Fix irq_of_parse_and_map() return value
+
+From: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
+
+[ Upstream commit 50f0f26e7c8665763d0d7d3372dbcf191f94d077 ]
+
+The irq_of_parse_and_map() returns 0 on failure, not a negative ERRNO.
+
+Fixes: f48e699ddf70 ("irqchip/aspeed-i2c-ic: Add I2C IRQ controller for Aspeed")
+Signed-off-by: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
+Signed-off-by: Marc Zyngier <maz@kernel.org>
+Link: https://lore.kernel.org/r/20220423094227.33148-1-krzysztof.kozlowski@linaro.org
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/irqchip/irq-aspeed-i2c-ic.c | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/drivers/irqchip/irq-aspeed-i2c-ic.c b/drivers/irqchip/irq-aspeed-i2c-ic.c
+index 8d591c179f81..3d3210828e9b 100644
+--- a/drivers/irqchip/irq-aspeed-i2c-ic.c
++++ b/drivers/irqchip/irq-aspeed-i2c-ic.c
+@@ -79,8 +79,8 @@ static int __init aspeed_i2c_ic_of_init(struct device_node *node,
+       }
+       i2c_ic->parent_irq = irq_of_parse_and_map(node, 0);
+-      if (i2c_ic->parent_irq < 0) {
+-              ret = i2c_ic->parent_irq;
++      if (!i2c_ic->parent_irq) {
++              ret = -EINVAL;
+               goto err_iounmap;
+       }
+-- 
+2.35.1
+
diff --git a/queue-5.4/irqchip-exiu-fix-acknowledgment-of-edge-triggered-in.patch b/queue-5.4/irqchip-exiu-fix-acknowledgment-of-edge-triggered-in.patch
new file mode 100644 (file)
index 0000000..af165a7
--- /dev/null
@@ -0,0 +1,109 @@
+From 02b2920d8d1161a4a94ea546374fa6f6966379b1 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Tue, 3 May 2022 14:45:41 +0100
+Subject: irqchip/exiu: Fix acknowledgment of edge triggered interrupts
+
+From: Daniel Thompson <daniel.thompson@linaro.org>
+
+[ Upstream commit 4efc851c36e389f7ed432edac0149acc5f94b0c7 ]
+
+Currently the EXIU uses the fasteoi interrupt flow that is configured by
+it's parent (irq-gic-v3.c). With this flow the only chance to clear the
+interrupt request happens during .irq_eoi() and (obviously) this happens
+after the interrupt handler has run. EXIU requires edge triggered
+interrupts to be acked prior to interrupt handling. Without this we
+risk incorrect interrupt dismissal when a new interrupt is delivered
+after the handler reads and acknowledges the peripheral but before the
+irq_eoi() takes place.
+
+Fix this by clearing the interrupt request from .irq_ack() if we are
+configured for edge triggered interrupts. This requires adopting the
+fasteoi-ack flow instead of the fasteoi to ensure the ack gets called.
+
+These changes have been tested using the power button on a
+Developerbox/SC2A11 combined with some hackery in gpio-keys so I can
+play with the different trigger mode [and an mdelay(500) so I can
+can check what happens on a double click in both modes].
+
+Fixes: 706cffc1b912 ("irqchip/exiu: Add support for Socionext Synquacer EXIU controller")
+Signed-off-by: Daniel Thompson <daniel.thompson@linaro.org>
+Reviewed-by: Ard Biesheuvel <ardb@kernel.org>
+Signed-off-by: Marc Zyngier <maz@kernel.org>
+Link: https://lore.kernel.org/r/20220503134541.2566457-1-daniel.thompson@linaro.org
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ arch/arm64/Kconfig.platforms   |  1 +
+ drivers/irqchip/irq-sni-exiu.c | 25 ++++++++++++++++++++++---
+ 2 files changed, 23 insertions(+), 3 deletions(-)
+
+diff --git a/arch/arm64/Kconfig.platforms b/arch/arm64/Kconfig.platforms
+index 9dccf4db319b..90202e5608d1 100644
+--- a/arch/arm64/Kconfig.platforms
++++ b/arch/arm64/Kconfig.platforms
+@@ -225,6 +225,7 @@ config ARCH_STRATIX10
+ config ARCH_SYNQUACER
+       bool "Socionext SynQuacer SoC Family"
++      select IRQ_FASTEOI_HIERARCHY_HANDLERS
+ config ARCH_TEGRA
+       bool "NVIDIA Tegra SoC Family"
+diff --git a/drivers/irqchip/irq-sni-exiu.c b/drivers/irqchip/irq-sni-exiu.c
+index abd011fcecf4..c7db617e1a2f 100644
+--- a/drivers/irqchip/irq-sni-exiu.c
++++ b/drivers/irqchip/irq-sni-exiu.c
+@@ -37,11 +37,26 @@ struct exiu_irq_data {
+       u32             spi_base;
+ };
+-static void exiu_irq_eoi(struct irq_data *d)
++static void exiu_irq_ack(struct irq_data *d)
+ {
+       struct exiu_irq_data *data = irq_data_get_irq_chip_data(d);
+       writel(BIT(d->hwirq), data->base + EIREQCLR);
++}
++
++static void exiu_irq_eoi(struct irq_data *d)
++{
++      struct exiu_irq_data *data = irq_data_get_irq_chip_data(d);
++
++      /*
++       * Level triggered interrupts are latched and must be cleared during
++       * EOI or the interrupt will be jammed on. Of course if a level
++       * triggered interrupt is still asserted then the write will not clear
++       * the interrupt.
++       */
++      if (irqd_is_level_type(d))
++              writel(BIT(d->hwirq), data->base + EIREQCLR);
++
+       irq_chip_eoi_parent(d);
+ }
+@@ -91,10 +106,13 @@ static int exiu_irq_set_type(struct irq_data *d, unsigned int type)
+       writel_relaxed(val, data->base + EILVL);
+       val = readl_relaxed(data->base + EIEDG);
+-      if (type == IRQ_TYPE_LEVEL_LOW || type == IRQ_TYPE_LEVEL_HIGH)
++      if (type == IRQ_TYPE_LEVEL_LOW || type == IRQ_TYPE_LEVEL_HIGH) {
+               val &= ~BIT(d->hwirq);
+-      else
++              irq_set_handler_locked(d, handle_fasteoi_irq);
++      } else {
+               val |= BIT(d->hwirq);
++              irq_set_handler_locked(d, handle_fasteoi_ack_irq);
++      }
+       writel_relaxed(val, data->base + EIEDG);
+       writel_relaxed(BIT(d->hwirq), data->base + EIREQCLR);
+@@ -104,6 +122,7 @@ static int exiu_irq_set_type(struct irq_data *d, unsigned int type)
+ static struct irq_chip exiu_irq_chip = {
+       .name                   = "EXIU",
++      .irq_ack                = exiu_irq_ack,
+       .irq_eoi                = exiu_irq_eoi,
+       .irq_enable             = exiu_irq_enable,
+       .irq_mask               = exiu_irq_mask,
+-- 
+2.35.1
+
diff --git a/queue-5.4/kvm-nvmx-leave-most-vm-exit-info-fields-unmodified-o.patch b/queue-5.4/kvm-nvmx-leave-most-vm-exit-info-fields-unmodified-o.patch
new file mode 100644 (file)
index 0000000..f5d2c52
--- /dev/null
@@ -0,0 +1,63 @@
+From 52066136260bcdd04e3132bb453119e285769071 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Thu, 7 Apr 2022 00:23:14 +0000
+Subject: KVM: nVMX: Leave most VM-Exit info fields unmodified on failed
+ VM-Entry
+
+From: Sean Christopherson <seanjc@google.com>
+
+[ Upstream commit c3634d25fbee88e2368a8e0903ae0d0670eb9e71 ]
+
+Don't modify vmcs12 exit fields except EXIT_REASON and EXIT_QUALIFICATION
+when performing a nested VM-Exit due to failed VM-Entry.  Per the SDM,
+only the two aformentioned fields are filled and "All other VM-exit
+information fields are unmodified".
+
+Fixes: 4704d0befb07 ("KVM: nVMX: Exiting from L2 to L1")
+Signed-off-by: Sean Christopherson <seanjc@google.com>
+Message-Id: <20220407002315.78092-3-seanjc@google.com>
+Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ arch/x86/kvm/vmx/nested.c | 15 ++++++++++-----
+ 1 file changed, 10 insertions(+), 5 deletions(-)
+
+diff --git a/arch/x86/kvm/vmx/nested.c b/arch/x86/kvm/vmx/nested.c
+index 3041015b05f7..9f61ae64b727 100644
+--- a/arch/x86/kvm/vmx/nested.c
++++ b/arch/x86/kvm/vmx/nested.c
+@@ -3746,12 +3746,12 @@ static void prepare_vmcs12(struct kvm_vcpu *vcpu, struct vmcs12 *vmcs12,
+       /* update exit information fields: */
+       vmcs12->vm_exit_reason = exit_reason;
+       vmcs12->exit_qualification = exit_qualification;
+-      vmcs12->vm_exit_intr_info = exit_intr_info;
+-
+-      vmcs12->idt_vectoring_info_field = 0;
+-      vmcs12->vm_exit_instruction_len = vmcs_read32(VM_EXIT_INSTRUCTION_LEN);
+-      vmcs12->vmx_instruction_info = vmcs_read32(VMX_INSTRUCTION_INFO);
++      /*
++       * On VM-Exit due to a failed VM-Entry, the VMCS isn't marked launched
++       * and only EXIT_REASON and EXIT_QUALIFICATION are updated, all other
++       * exit info fields are unmodified.
++       */
+       if (!(vmcs12->vm_exit_reason & VMX_EXIT_REASONS_FAILED_VMENTRY)) {
+               vmcs12->launch_state = 1;
+@@ -3763,8 +3763,13 @@ static void prepare_vmcs12(struct kvm_vcpu *vcpu, struct vmcs12 *vmcs12,
+                * Transfer the event that L0 or L1 may wanted to inject into
+                * L2 to IDT_VECTORING_INFO_FIELD.
+                */
++              vmcs12->idt_vectoring_info_field = 0;
+               vmcs12_save_pending_event(vcpu, vmcs12);
++              vmcs12->vm_exit_intr_info = exit_intr_info;
++              vmcs12->vm_exit_instruction_len = vmcs_read32(VM_EXIT_INSTRUCTION_LEN);
++              vmcs12->vmx_instruction_info = vmcs_read32(VMX_INSTRUCTION_INFO);
++
+               /*
+                * According to spec, there's no need to store the guest's
+                * MSRs if the exit is due to a VM-entry failure that occurs
+-- 
+2.35.1
+
diff --git a/queue-5.4/m68k-math-emu-fix-dependencies-of-math-emulation-sup.patch b/queue-5.4/m68k-math-emu-fix-dependencies-of-math-emulation-sup.patch
new file mode 100644 (file)
index 0000000..67c4577
--- /dev/null
@@ -0,0 +1,56 @@
+From 868111d2dded1955e4e9ad36d72795fe7f680905 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Fri, 13 May 2022 14:50:28 +0200
+Subject: m68k: math-emu: Fix dependencies of math emulation support
+
+From: Geert Uytterhoeven <geert@linux-m68k.org>
+
+[ Upstream commit ed6bc6bf0a7d75e80eb1df883c09975ebb74e590 ]
+
+If CONFIG_M54xx=y, CONFIG_MMU=y, and CONFIG_M68KFPU_EMU=y:
+
+    {standard input}:272: Error: invalid instruction for this architecture; needs 68000 or higher (68000 [68ec000, 68hc000, 68hc001, 68008, 68302, 68306, 68307, 68322, 68356], 68010, 68020 [68k, 68ec020], 68030 [68ec030], 68040 [68ec040], 68060 [68ec060], cpu32 [68330, 68331, 68332, 68333, 68334, 68336, 68340, 68341, 68349, 68360], fidoa [fido]) -- statement `sub.b %d1,%d3' ignored
+    {standard input}:609: Error: invalid instruction for this architecture; needs 68020 or higher (68020 [68k, 68ec020], 68030 [68ec030], 68040 [68ec040], 68060 [68ec060]) -- statement `bfextu 4(%a1){%d0,#8},%d0' ignored
+    {standard input}:752: Error: operands mismatch -- statement `mulu.l 4(%a0),%d3:%d0' ignored
+    {standard input}:1155: Error: operands mismatch -- statement `divu.l %d0,%d3:%d7' ignored
+
+The math emulation support code is intended for 68020 and higher, and
+uses several instructions or instruction modes not available on coldfire
+or 68000.
+
+Originally, the dependency of M68KFPU_EMU on MMU was fine, as MMU
+support was only available on 68020 or higher.  But this assumption
+was broken by the introduction of MMU support for M547x and M548x.
+
+Drop the dependency on MMU, as the code should work fine on 68020 and up
+without MMU (which are not yet supported by Linux, though).
+Add dependencies on M68KCLASSIC (to rule out Coldfire) and FPU (kernel
+has some type of floating-point support --- be it hardware or software
+emulated, to rule out anything below 68020).
+
+Fixes: 1f7034b9616e6f14 ("m68k: allow ColdFire 547x and 548x CPUs to be built with MMU enabled")
+Reported-by: kernel test robot <lkp@intel.com>
+Signed-off-by: Geert Uytterhoeven <geert@linux-m68k.org>
+Reviewed-by: Greg Ungerer <gerg@linux-m68k.org>
+Link: https://lore.kernel.org/r/18c34695b7c95107f60ccca82a4ff252f3edf477.1652446117.git.geert@linux-m68k.org
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ arch/m68k/Kconfig.cpu | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/arch/m68k/Kconfig.cpu b/arch/m68k/Kconfig.cpu
+index 60ac1cd8b96f..6bc7fc14163f 100644
+--- a/arch/m68k/Kconfig.cpu
++++ b/arch/m68k/Kconfig.cpu
+@@ -309,7 +309,7 @@ comment "Processor Specific Options"
+ config M68KFPU_EMU
+       bool "Math emulation support"
+-      depends on MMU
++      depends on M68KCLASSIC && FPU
+       help
+         At some point in the future, this will cause floating-point math
+         instructions to be emulated by the kernel on machines that lack a
+-- 
+2.35.1
+
diff --git a/queue-5.4/macintosh-via-pmu-and-via-cuda-need-rtc_lib.patch b/queue-5.4/macintosh-via-pmu-and-via-cuda-need-rtc_lib.patch
new file mode 100644 (file)
index 0000000..9298113
--- /dev/null
@@ -0,0 +1,52 @@
+From f3b037f0eebe1fef422ce1cc6795dff8760de71f Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Sun, 10 Apr 2022 09:10:35 -0700
+Subject: macintosh: via-pmu and via-cuda need RTC_LIB
+
+From: Randy Dunlap <rdunlap@infradead.org>
+
+[ Upstream commit 9a9c5ff5fff87eb1a43db0d899473554e408fd7b ]
+
+Fix build when RTC_LIB is not set/enabled.
+Eliminates these build errors:
+
+m68k-linux-ld: drivers/macintosh/via-pmu.o: in function `pmu_set_rtc_time':
+drivers/macintosh/via-pmu.c:1769: undefined reference to `rtc_tm_to_time64'
+m68k-linux-ld: drivers/macintosh/via-cuda.o: in function `cuda_set_rtc_time':
+drivers/macintosh/via-cuda.c:797: undefined reference to `rtc_tm_to_time64'
+
+Fixes: 0792a2c8e0bb ("macintosh: Use common code to access RTC")
+Reported-by: kernel test robot <lkp@intel.com>
+Suggested-by: Christophe Leroy <christophe.leroy@csgroup.eu>
+Signed-off-by: Randy Dunlap <rdunlap@infradead.org>
+Acked-by: Arnd Bergmann <arnd@arndb.de>
+Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
+Link: https://lore.kernel.org/r/20220410161035.592-1-rdunlap@infradead.org
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/macintosh/Kconfig | 2 ++
+ 1 file changed, 2 insertions(+)
+
+diff --git a/drivers/macintosh/Kconfig b/drivers/macintosh/Kconfig
+index abaf1401cca6..b5a534206edd 100644
+--- a/drivers/macintosh/Kconfig
++++ b/drivers/macintosh/Kconfig
+@@ -44,6 +44,7 @@ config ADB_IOP
+ config ADB_CUDA
+       bool "Support for Cuda/Egret based Macs and PowerMacs"
+       depends on (ADB || PPC_PMAC) && !PPC_PMAC64
++      select RTC_LIB
+       help
+         This provides support for Cuda/Egret based Macintosh and
+         Power Macintosh systems. This includes most m68k based Macs,
+@@ -57,6 +58,7 @@ config ADB_CUDA
+ config ADB_PMU
+       bool "Support for PMU based PowerMacs and PowerBooks"
+       depends on PPC_PMAC || MAC
++      select RTC_LIB
+       help
+         On PowerBooks, iBooks, and recent iMacs and Power Macintoshes, the
+         PMU is an embedded microprocessor whose primary function is to
+-- 
+2.35.1
+
diff --git a/queue-5.4/macintosh-via-pmu-fix-build-failure-when-config_inpu.patch b/queue-5.4/macintosh-via-pmu-fix-build-failure-when-config_inpu.patch
new file mode 100644 (file)
index 0000000..40d2f63
--- /dev/null
@@ -0,0 +1,82 @@
+From 8092201247beac62d7a581eea1ac9b88a1977972 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Thu, 7 Apr 2022 20:11:32 +1000
+Subject: macintosh/via-pmu: Fix build failure when CONFIG_INPUT is disabled
+
+From: Finn Thain <fthain@linux-m68k.org>
+
+[ Upstream commit 86ce436e30d86327c9f5260f718104ae7b21f506 ]
+
+drivers/macintosh/via-pmu-event.o: In function `via_pmu_event':
+via-pmu-event.c:(.text+0x44): undefined reference to `input_event'
+via-pmu-event.c:(.text+0x68): undefined reference to `input_event'
+via-pmu-event.c:(.text+0x94): undefined reference to `input_event'
+via-pmu-event.c:(.text+0xb8): undefined reference to `input_event'
+drivers/macintosh/via-pmu-event.o: In function `via_pmu_event_init':
+via-pmu-event.c:(.init.text+0x20): undefined reference to `input_allocate_device'
+via-pmu-event.c:(.init.text+0xc4): undefined reference to `input_register_device'
+via-pmu-event.c:(.init.text+0xd4): undefined reference to `input_free_device'
+make[1]: *** [Makefile:1155: vmlinux] Error 1
+make: *** [Makefile:350: __build_one_by_one] Error 2
+
+Don't call into the input subsystem unless CONFIG_INPUT is built-in.
+
+Reported-by: kernel test robot <lkp@intel.com>
+Signed-off-by: Finn Thain <fthain@linux-m68k.org>
+Tested-by: Randy Dunlap <rdunlap@infradead.org>
+Reviewed-by: Christophe Leroy <christophe.leroy@csgroup.eu>
+Acked-by: Randy Dunlap <rdunlap@infradead.org>
+Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
+Link: https://lore.kernel.org/r/5edbe76ce68227f71e09af4614cc4c1bd61c7ec8.1649326292.git.fthain@linux-m68k.org
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/macintosh/Kconfig   | 4 ++++
+ drivers/macintosh/Makefile  | 3 ++-
+ drivers/macintosh/via-pmu.c | 2 +-
+ 3 files changed, 7 insertions(+), 2 deletions(-)
+
+diff --git a/drivers/macintosh/Kconfig b/drivers/macintosh/Kconfig
+index 574e122ae105..abaf1401cca6 100644
+--- a/drivers/macintosh/Kconfig
++++ b/drivers/macintosh/Kconfig
+@@ -67,6 +67,10 @@ config ADB_PMU
+         this device; you should do so if your machine is one of those
+         mentioned above.
++config ADB_PMU_EVENT
++      def_bool y
++      depends on ADB_PMU && INPUT=y
++
+ config ADB_PMU_LED
+       bool "Support for the Power/iBook front LED"
+       depends on PPC_PMAC && ADB_PMU
+diff --git a/drivers/macintosh/Makefile b/drivers/macintosh/Makefile
+index 49819b1b6f20..712edcb3e0b0 100644
+--- a/drivers/macintosh/Makefile
++++ b/drivers/macintosh/Makefile
+@@ -12,7 +12,8 @@ obj-$(CONFIG_MAC_EMUMOUSEBTN)        += mac_hid.o
+ obj-$(CONFIG_INPUT_ADBHID)    += adbhid.o
+ obj-$(CONFIG_ANSLCD)          += ans-lcd.o
+-obj-$(CONFIG_ADB_PMU)         += via-pmu.o via-pmu-event.o
++obj-$(CONFIG_ADB_PMU)         += via-pmu.o
++obj-$(CONFIG_ADB_PMU_EVENT)   += via-pmu-event.o
+ obj-$(CONFIG_ADB_PMU_LED)     += via-pmu-led.o
+ obj-$(CONFIG_PMAC_BACKLIGHT)  += via-pmu-backlight.o
+ obj-$(CONFIG_ADB_CUDA)                += via-cuda.o
+diff --git a/drivers/macintosh/via-pmu.c b/drivers/macintosh/via-pmu.c
+index 21d532a78fa4..d8b6ac2ec313 100644
+--- a/drivers/macintosh/via-pmu.c
++++ b/drivers/macintosh/via-pmu.c
+@@ -1464,7 +1464,7 @@ pmu_handle_data(unsigned char *data, int len)
+               pmu_pass_intr(data, len);
+               /* len == 6 is probably a bad check. But how do I
+                * know what PMU versions send what events here? */
+-              if (len == 6) {
++              if (IS_ENABLED(CONFIG_ADB_PMU_EVENT) && len == 6) {
+                       via_pmu_event(PMU_EVT_POWER, !!(data[1]&8));
+                       via_pmu_event(PMU_EVT_LID, data[1]&1);
+               }
+-- 
+2.35.1
+
diff --git a/queue-5.4/mailbox-forward-the-hrtimer-if-not-queued-and-under-.patch b/queue-5.4/mailbox-forward-the-hrtimer-if-not-queued-and-under-.patch
new file mode 100644 (file)
index 0000000..085076c
--- /dev/null
@@ -0,0 +1,112 @@
+From eb8dec42b5fbc03a4fd8e904bb6a1171edd01a52 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Thu, 31 Mar 2022 09:01:15 +0200
+Subject: mailbox: forward the hrtimer if not queued and under a lock
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+From: Björn Ardö <bjorn.ardo@axis.com>
+
+[ Upstream commit bca1a1004615efe141fd78f360ecc48c60bc4ad5 ]
+
+This reverts commit c7dacf5b0f32957b24ef29df1207dc2cd8307743,
+"mailbox: avoid timer start from callback"
+
+The previous commit was reverted since it lead to a race that
+caused the hrtimer to not be started at all. The check for
+hrtimer_active() in msg_submit() will return true if the
+callback function txdone_hrtimer() is currently running. This
+function could return HRTIMER_NORESTART and then the timer
+will not be restarted, and also msg_submit() will not start
+the timer. This will lead to a message actually being submitted
+but no timer will start to check for its compleation.
+
+The original fix that added checking hrtimer_active() was added to
+avoid a warning with hrtimer_forward. Looking in the kernel
+another solution to avoid this warning is to check hrtimer_is_queued()
+before calling hrtimer_forward_now() instead. This however requires a
+lock so the timer is not started by msg_submit() inbetween this check
+and the hrtimer_forward() call.
+
+Fixes: c7dacf5b0f32 ("mailbox: avoid timer start from callback")
+Signed-off-by: Björn Ardö <bjorn.ardo@axis.com>
+Signed-off-by: Jassi Brar <jaswinder.singh@linaro.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/mailbox/mailbox.c          | 19 +++++++++++++------
+ include/linux/mailbox_controller.h |  1 +
+ 2 files changed, 14 insertions(+), 6 deletions(-)
+
+diff --git a/drivers/mailbox/mailbox.c b/drivers/mailbox/mailbox.c
+index 3e7d4b20ab34..4229b9b5da98 100644
+--- a/drivers/mailbox/mailbox.c
++++ b/drivers/mailbox/mailbox.c
+@@ -82,11 +82,11 @@ static void msg_submit(struct mbox_chan *chan)
+ exit:
+       spin_unlock_irqrestore(&chan->lock, flags);
+-      /* kick start the timer immediately to avoid delays */
+       if (!err && (chan->txdone_method & TXDONE_BY_POLL)) {
+-              /* but only if not already active */
+-              if (!hrtimer_active(&chan->mbox->poll_hrt))
+-                      hrtimer_start(&chan->mbox->poll_hrt, 0, HRTIMER_MODE_REL);
++              /* kick start the timer immediately to avoid delays */
++              spin_lock_irqsave(&chan->mbox->poll_hrt_lock, flags);
++              hrtimer_start(&chan->mbox->poll_hrt, 0, HRTIMER_MODE_REL);
++              spin_unlock_irqrestore(&chan->mbox->poll_hrt_lock, flags);
+       }
+ }
+@@ -120,20 +120,26 @@ static enum hrtimer_restart txdone_hrtimer(struct hrtimer *hrtimer)
+               container_of(hrtimer, struct mbox_controller, poll_hrt);
+       bool txdone, resched = false;
+       int i;
++      unsigned long flags;
+       for (i = 0; i < mbox->num_chans; i++) {
+               struct mbox_chan *chan = &mbox->chans[i];
+               if (chan->active_req && chan->cl) {
+-                      resched = true;
+                       txdone = chan->mbox->ops->last_tx_done(chan);
+                       if (txdone)
+                               tx_tick(chan, 0);
++                      else
++                              resched = true;
+               }
+       }
+       if (resched) {
+-              hrtimer_forward_now(hrtimer, ms_to_ktime(mbox->txpoll_period));
++              spin_lock_irqsave(&mbox->poll_hrt_lock, flags);
++              if (!hrtimer_is_queued(hrtimer))
++                      hrtimer_forward_now(hrtimer, ms_to_ktime(mbox->txpoll_period));
++              spin_unlock_irqrestore(&mbox->poll_hrt_lock, flags);
++
+               return HRTIMER_RESTART;
+       }
+       return HRTIMER_NORESTART;
+@@ -500,6 +506,7 @@ int mbox_controller_register(struct mbox_controller *mbox)
+               hrtimer_init(&mbox->poll_hrt, CLOCK_MONOTONIC,
+                            HRTIMER_MODE_REL);
+               mbox->poll_hrt.function = txdone_hrtimer;
++              spin_lock_init(&mbox->poll_hrt_lock);
+       }
+       for (i = 0; i < mbox->num_chans; i++) {
+diff --git a/include/linux/mailbox_controller.h b/include/linux/mailbox_controller.h
+index 36d6ce673503..6fee33cb52f5 100644
+--- a/include/linux/mailbox_controller.h
++++ b/include/linux/mailbox_controller.h
+@@ -83,6 +83,7 @@ struct mbox_controller {
+                                     const struct of_phandle_args *sp);
+       /* Internal to API */
+       struct hrtimer poll_hrt;
++      spinlock_t poll_hrt_lock;
+       struct list_head node;
+ };
+-- 
+2.35.1
+
diff --git a/queue-5.4/md-bitmap-don-t-set-sb-values-if-can-t-pass-sanity-c.patch b/queue-5.4/md-bitmap-don-t-set-sb-values-if-can-t-pass-sanity-c.patch
new file mode 100644 (file)
index 0000000..4691e85
--- /dev/null
@@ -0,0 +1,163 @@
+From 8261ebf5e44d86e78fd928313323b78604306003 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Fri, 1 Apr 2022 10:13:16 +0800
+Subject: md/bitmap: don't set sb values if can't pass sanity check
+
+From: Heming Zhao <heming.zhao@suse.com>
+
+[ Upstream commit e68cb83a57a458b01c9739e2ad9cb70b04d1e6d2 ]
+
+If bitmap area contains invalid data, kernel will crash then mdadm
+triggers "Segmentation fault".
+This is cluster-md speical bug. In non-clustered env, mdadm will
+handle broken metadata case. In clustered array, only kernel space
+handles bitmap slot info. But even this bug only happened in clustered
+env, current sanity check is wrong, the code should be changed.
+
+How to trigger: (faulty injection)
+
+dd if=/dev/zero bs=1M count=1 oflag=direct of=/dev/sda
+dd if=/dev/zero bs=1M count=1 oflag=direct of=/dev/sdb
+mdadm -C /dev/md0 -b clustered -e 1.2 -n 2 -l mirror /dev/sda /dev/sdb
+mdadm -Ss
+echo aaa > magic.txt
+ == below modifying slot 2 bitmap data ==
+dd if=magic.txt of=/dev/sda seek=16384 bs=1 count=3 <== destroy magic
+dd if=/dev/zero of=/dev/sda seek=16436 bs=1 count=4 <== ZERO chunksize
+mdadm -A /dev/md0 /dev/sda /dev/sdb
+ == kernel crashes. mdadm outputs "Segmentation fault" ==
+
+Reason of kernel crash:
+
+In md_bitmap_read_sb (called by md_bitmap_create), bad bitmap magic didn't
+block chunksize assignment, and zero value made DIV_ROUND_UP_SECTOR_T()
+trigger "divide error".
+
+Crash log:
+
+kernel: md: md0 stopped.
+kernel: md/raid1:md0: not clean -- starting background reconstruction
+kernel: md/raid1:md0: active with 2 out of 2 mirrors
+kernel: dlm: ... ...
+kernel: md-cluster: Joined cluster 44810aba-38bb-e6b8-daca-bc97a0b254aa slot 1
+kernel: md0: invalid bitmap file superblock: bad magic
+kernel: md_bitmap_copy_from_slot can't get bitmap from slot 2
+kernel: md-cluster: Could not gather bitmaps from slot 2
+kernel: divide error: 0000 [#1] SMP NOPTI
+kernel: CPU: 0 PID: 1603 Comm: mdadm Not tainted 5.14.6-1-default
+kernel: Hardware name: QEMU Standard PC (i440FX + PIIX, 1996)
+kernel: RIP: 0010:md_bitmap_create+0x1d1/0x850 [md_mod]
+kernel: RSP: 0018:ffffc22ac0843ba0 EFLAGS: 00010246
+kernel: ... ...
+kernel: Call Trace:
+kernel:  ? dlm_lock_sync+0xd0/0xd0 [md_cluster 77fe..7a0]
+kernel:  md_bitmap_copy_from_slot+0x2c/0x290 [md_mod 24ea..d3a]
+kernel:  load_bitmaps+0xec/0x210 [md_cluster 77fe..7a0]
+kernel:  md_bitmap_load+0x81/0x1e0 [md_mod 24ea..d3a]
+kernel:  do_md_run+0x30/0x100 [md_mod 24ea..d3a]
+kernel:  md_ioctl+0x1290/0x15a0 [md_mod 24ea....d3a]
+kernel:  ? mddev_unlock+0xaa/0x130 [md_mod 24ea..d3a]
+kernel:  ? blkdev_ioctl+0xb1/0x2b0
+kernel:  block_ioctl+0x3b/0x40
+kernel:  __x64_sys_ioctl+0x7f/0xb0
+kernel:  do_syscall_64+0x59/0x80
+kernel:  ? exit_to_user_mode_prepare+0x1ab/0x230
+kernel:  ? syscall_exit_to_user_mode+0x18/0x40
+kernel:  ? do_syscall_64+0x69/0x80
+kernel:  entry_SYSCALL_64_after_hwframe+0x44/0xae
+kernel: RIP: 0033:0x7f4a15fa722b
+kernel: ... ...
+kernel: ---[ end trace 8afa7612f559c868 ]---
+kernel: RIP: 0010:md_bitmap_create+0x1d1/0x850 [md_mod]
+
+Reported-by: kernel test robot <lkp@intel.com>
+Reported-by: Dan Carpenter <dan.carpenter@oracle.com>
+Acked-by: Guoqing Jiang <guoqing.jiang@linux.dev>
+Signed-off-by: Heming Zhao <heming.zhao@suse.com>
+Signed-off-by: Song Liu <song@kernel.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/md/md-bitmap.c | 44 ++++++++++++++++++++++--------------------
+ 1 file changed, 23 insertions(+), 21 deletions(-)
+
+diff --git a/drivers/md/md-bitmap.c b/drivers/md/md-bitmap.c
+index d7eef5292ae2..a95e20c3d0d4 100644
+--- a/drivers/md/md-bitmap.c
++++ b/drivers/md/md-bitmap.c
+@@ -642,14 +642,6 @@ static int md_bitmap_read_sb(struct bitmap *bitmap)
+       daemon_sleep = le32_to_cpu(sb->daemon_sleep) * HZ;
+       write_behind = le32_to_cpu(sb->write_behind);
+       sectors_reserved = le32_to_cpu(sb->sectors_reserved);
+-      /* Setup nodes/clustername only if bitmap version is
+-       * cluster-compatible
+-       */
+-      if (sb->version == cpu_to_le32(BITMAP_MAJOR_CLUSTERED)) {
+-              nodes = le32_to_cpu(sb->nodes);
+-              strlcpy(bitmap->mddev->bitmap_info.cluster_name,
+-                              sb->cluster_name, 64);
+-      }
+       /* verify that the bitmap-specific fields are valid */
+       if (sb->magic != cpu_to_le32(BITMAP_MAGIC))
+@@ -671,6 +663,16 @@ static int md_bitmap_read_sb(struct bitmap *bitmap)
+               goto out;
+       }
++      /*
++       * Setup nodes/clustername only if bitmap version is
++       * cluster-compatible
++       */
++      if (sb->version == cpu_to_le32(BITMAP_MAJOR_CLUSTERED)) {
++              nodes = le32_to_cpu(sb->nodes);
++              strlcpy(bitmap->mddev->bitmap_info.cluster_name,
++                              sb->cluster_name, 64);
++      }
++
+       /* keep the array size field of the bitmap superblock up to date */
+       sb->sync_size = cpu_to_le64(bitmap->mddev->resync_max_sectors);
+@@ -703,9 +705,9 @@ static int md_bitmap_read_sb(struct bitmap *bitmap)
+ out:
+       kunmap_atomic(sb);
+-      /* Assigning chunksize is required for "re_read" */
+-      bitmap->mddev->bitmap_info.chunksize = chunksize;
+       if (err == 0 && nodes && (bitmap->cluster_slot < 0)) {
++              /* Assigning chunksize is required for "re_read" */
++              bitmap->mddev->bitmap_info.chunksize = chunksize;
+               err = md_setup_cluster(bitmap->mddev, nodes);
+               if (err) {
+                       pr_warn("%s: Could not setup cluster service (%d)\n",
+@@ -716,18 +718,18 @@ static int md_bitmap_read_sb(struct bitmap *bitmap)
+               goto re_read;
+       }
+-
+ out_no_sb:
+-      if (test_bit(BITMAP_STALE, &bitmap->flags))
+-              bitmap->events_cleared = bitmap->mddev->events;
+-      bitmap->mddev->bitmap_info.chunksize = chunksize;
+-      bitmap->mddev->bitmap_info.daemon_sleep = daemon_sleep;
+-      bitmap->mddev->bitmap_info.max_write_behind = write_behind;
+-      bitmap->mddev->bitmap_info.nodes = nodes;
+-      if (bitmap->mddev->bitmap_info.space == 0 ||
+-          bitmap->mddev->bitmap_info.space > sectors_reserved)
+-              bitmap->mddev->bitmap_info.space = sectors_reserved;
+-      if (err) {
++      if (err == 0) {
++              if (test_bit(BITMAP_STALE, &bitmap->flags))
++                      bitmap->events_cleared = bitmap->mddev->events;
++              bitmap->mddev->bitmap_info.chunksize = chunksize;
++              bitmap->mddev->bitmap_info.daemon_sleep = daemon_sleep;
++              bitmap->mddev->bitmap_info.max_write_behind = write_behind;
++              bitmap->mddev->bitmap_info.nodes = nodes;
++              if (bitmap->mddev->bitmap_info.space == 0 ||
++                      bitmap->mddev->bitmap_info.space > sectors_reserved)
++                      bitmap->mddev->bitmap_info.space = sectors_reserved;
++      } else {
+               md_bitmap_print_sb(bitmap);
+               if (bitmap->cluster_slot < 0)
+                       md_cluster_stop(bitmap->mddev);
+-- 
+2.35.1
+
diff --git a/queue-5.4/media-aspeed-fix-an-error-handling-path-in-aspeed_vi.patch b/queue-5.4/media-aspeed-fix-an-error-handling-path-in-aspeed_vi.patch
new file mode 100644 (file)
index 0000000..45d24ee
--- /dev/null
@@ -0,0 +1,51 @@
+From dc6792a72e464349fb53ac3d7cac0ff9cb4d0fba Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Sun, 6 Mar 2022 19:08:07 +0100
+Subject: media: aspeed: Fix an error handling path in aspeed_video_probe()
+
+From: Christophe JAILLET <christophe.jaillet@wanadoo.fr>
+
+[ Upstream commit 310fda622bbd38be17fb444f7f049b137af3bc0d ]
+
+A dma_free_coherent() call is missing in the error handling path of the
+probe, as already done in the remove function.
+
+In fact, this call is included in aspeed_video_free_buf(). So use the
+latter both in the error handling path of the probe and in the remove
+function.
+It is easier to see the relation with aspeed_video_alloc_buf() this way.
+
+Fixes: d2b4387f3bdf ("media: platform: Add Aspeed Video Engine driver")
+Signed-off-by: Christophe JAILLET <christophe.jaillet@wanadoo.fr>
+Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
+Signed-off-by: Mauro Carvalho Chehab <mchehab@kernel.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/media/platform/aspeed-video.c | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/drivers/media/platform/aspeed-video.c b/drivers/media/platform/aspeed-video.c
+index c87eddb1c93f..c3f0b143330a 100644
+--- a/drivers/media/platform/aspeed-video.c
++++ b/drivers/media/platform/aspeed-video.c
+@@ -1688,6 +1688,7 @@ static int aspeed_video_probe(struct platform_device *pdev)
+       rc = aspeed_video_setup_video(video);
+       if (rc) {
++              aspeed_video_free_buf(video, &video->jpeg);
+               clk_unprepare(video->vclk);
+               clk_unprepare(video->eclk);
+               return rc;
+@@ -1715,8 +1716,7 @@ static int aspeed_video_remove(struct platform_device *pdev)
+       v4l2_device_unregister(v4l2_dev);
+-      dma_free_coherent(video->dev, VE_JPEG_HEADER_SIZE, video->jpeg.virt,
+-                        video->jpeg.dma);
++      aspeed_video_free_buf(video, &video->jpeg);
+       of_reserved_mem_device_release(dev);
+-- 
+2.35.1
+
diff --git a/queue-5.4/media-cec-adap.c-fix-is_configuring-state.patch b/queue-5.4/media-cec-adap.c-fix-is_configuring-state.patch
new file mode 100644 (file)
index 0000000..42ae691
--- /dev/null
@@ -0,0 +1,71 @@
+From 280f3c71ecbdcb843c2281a87af4f5328a3cb927 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Fri, 6 May 2022 09:43:25 +0200
+Subject: media: cec-adap.c: fix is_configuring state
+
+From: Hans Verkuil <hverkuil-cisco@xs4all.nl>
+
+[ Upstream commit 59267fc34f4900dcd2ec3295f6be04b79aee2186 ]
+
+If an adapter is trying to claim a free logical address then it is
+in the 'is_configuring' state. If during that process the cable is
+disconnected (HPD goes low, which in turn invalidates the physical
+address), then cec_adap_unconfigure() is called, and that set the
+is_configuring boolean to false, even though the thread that's
+trying to claim an LA is still running.
+
+Don't touch the is_configuring bool in cec_adap_unconfigure(), it
+will eventually be cleared by the thread. By making that change
+the cec_config_log_addr() function also had to change: it was
+aborting if is_configuring became false (since that is what
+cec_adap_unconfigure() did), but that no longer works. Instead
+check if the physical address is invalid. That is a much
+more appropriate check anyway.
+
+This fixes a bug where the the adapter could be disabled even
+though the device was still configuring. This could cause POLL
+transmits to time out.
+
+Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
+Signed-off-by: Mauro Carvalho Chehab <mchehab@kernel.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/media/cec/cec-adap.c | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+diff --git a/drivers/media/cec/cec-adap.c b/drivers/media/cec/cec-adap.c
+index 56857ac0a0be..c665f7d20c44 100644
+--- a/drivers/media/cec/cec-adap.c
++++ b/drivers/media/cec/cec-adap.c
+@@ -1263,7 +1263,7 @@ static int cec_config_log_addr(struct cec_adapter *adap,
+                * While trying to poll the physical address was reset
+                * and the adapter was unconfigured, so bail out.
+                */
+-              if (!adap->is_configuring)
++              if (adap->phys_addr == CEC_PHYS_ADDR_INVALID)
+                       return -EINTR;
+               if (err)
+@@ -1321,7 +1321,6 @@ static void cec_adap_unconfigure(struct cec_adapter *adap)
+           adap->phys_addr != CEC_PHYS_ADDR_INVALID)
+               WARN_ON(adap->ops->adap_log_addr(adap, CEC_LOG_ADDR_INVALID));
+       adap->log_addrs.log_addr_mask = 0;
+-      adap->is_configuring = false;
+       adap->is_configured = false;
+       memset(adap->phys_addrs, 0xff, sizeof(adap->phys_addrs));
+       cec_flush(adap);
+@@ -1514,9 +1513,10 @@ static int cec_config_thread_func(void *arg)
+       for (i = 0; i < las->num_log_addrs; i++)
+               las->log_addr[i] = CEC_LOG_ADDR_INVALID;
+       cec_adap_unconfigure(adap);
++      adap->is_configuring = false;
+       adap->kthread_config = NULL;
+-      mutex_unlock(&adap->lock);
+       complete(&adap->config_completion);
++      mutex_unlock(&adap->lock);
+       return 0;
+ }
+-- 
+2.35.1
+
diff --git a/queue-5.4/media-coda-limit-frame-interval-enumeration-to-suppo.patch b/queue-5.4/media-coda-limit-frame-interval-enumeration-to-suppo.patch
new file mode 100644 (file)
index 0000000..794ef30
--- /dev/null
@@ -0,0 +1,70 @@
+From e3f7537eedb76182bd3e65d2b00858aaafb174d1 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Tue, 26 Apr 2022 11:15:55 +0200
+Subject: media: coda: limit frame interval enumeration to supported encoder
+ frame sizes
+
+From: Philipp Zabel <p.zabel@pengutronix.de>
+
+[ Upstream commit 67e33dd957880879e785cfea83a3aa24bd5c5577 ]
+
+Let VIDIOC_ENUM_FRAMEINTERVALS return -EINVAL if userspace queries
+frame intervals for frame sizes unsupported by the encoder. Fixes the
+following v4l2-compliance failure:
+
+               fail: v4l2-test-formats.cpp(123): found frame intervals for invalid size 47x16
+               fail: v4l2-test-formats.cpp(282): node->codec_mask & STATEFUL_ENCODER
+       test VIDIOC_ENUM_FMT/FRAMESIZES/FRAMEINTERVALS: FAIL
+
+[hverkuil: drop incorrect 'For decoder devices, return -ENOTTY.' in the commit log]
+
+Signed-off-by: Philipp Zabel <p.zabel@pengutronix.de>
+Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
+Signed-off-by: Mauro Carvalho Chehab <mchehab@kernel.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/media/platform/coda/coda-common.c | 20 ++++++++++++++------
+ 1 file changed, 14 insertions(+), 6 deletions(-)
+
+diff --git a/drivers/media/platform/coda/coda-common.c b/drivers/media/platform/coda/coda-common.c
+index 0adc54832657..fb469340634b 100644
+--- a/drivers/media/platform/coda/coda-common.c
++++ b/drivers/media/platform/coda/coda-common.c
+@@ -1192,7 +1192,8 @@ static int coda_enum_frameintervals(struct file *file, void *fh,
+                                   struct v4l2_frmivalenum *f)
+ {
+       struct coda_ctx *ctx = fh_to_ctx(fh);
+-      int i;
++      struct coda_q_data *q_data;
++      const struct coda_codec *codec;
+       if (f->index)
+               return -EINVAL;
+@@ -1201,12 +1202,19 @@ static int coda_enum_frameintervals(struct file *file, void *fh,
+       if (!ctx->vdoa && f->pixel_format == V4L2_PIX_FMT_YUYV)
+               return -EINVAL;
+-      for (i = 0; i < CODA_MAX_FORMATS; i++) {
+-              if (f->pixel_format == ctx->cvd->src_formats[i] ||
+-                  f->pixel_format == ctx->cvd->dst_formats[i])
+-                      break;
++      if (coda_format_normalize_yuv(f->pixel_format) == V4L2_PIX_FMT_YUV420) {
++              q_data = get_q_data(ctx, V4L2_BUF_TYPE_VIDEO_CAPTURE);
++              codec = coda_find_codec(ctx->dev, f->pixel_format,
++                                      q_data->fourcc);
++      } else {
++              codec = coda_find_codec(ctx->dev, V4L2_PIX_FMT_YUV420,
++                                      f->pixel_format);
+       }
+-      if (i == CODA_MAX_FORMATS)
++      if (!codec)
++              return -EINVAL;
++
++      if (f->width < MIN_W || f->width > codec->max_w ||
++          f->height < MIN_H || f->height > codec->max_h)
+               return -EINVAL;
+       f->type = V4L2_FRMIVAL_TYPE_CONTINUOUS;
+-- 
+2.35.1
+
diff --git a/queue-5.4/media-cx25821-fix-the-warning-when-removing-the-modu.patch b/queue-5.4/media-cx25821-fix-the-warning-when-removing-the-modu.patch
new file mode 100644 (file)
index 0000000..6b21d8a
--- /dev/null
@@ -0,0 +1,57 @@
+From b5f404b5ea3faeabf376bb4c11d5da9c062c5721 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Sun, 10 Apr 2022 08:44:09 +0100
+Subject: media: cx25821: Fix the warning when removing the module
+
+From: Zheyu Ma <zheyuma97@gmail.com>
+
+[ Upstream commit 2203436a4d24302871617373a7eb21bc17e38762 ]
+
+When removing the module, we will get the following warning:
+
+[   14.746697] remove_proc_entry: removing non-empty directory 'irq/21', leaking at least 'cx25821[1]'
+[   14.747449] WARNING: CPU: 4 PID: 368 at fs/proc/generic.c:717 remove_proc_entry+0x389/0x3f0
+[   14.751611] RIP: 0010:remove_proc_entry+0x389/0x3f0
+[   14.759589] Call Trace:
+[   14.759792]  <TASK>
+[   14.759975]  unregister_irq_proc+0x14c/0x170
+[   14.760340]  irq_free_descs+0x94/0xe0
+[   14.760640]  mp_unmap_irq+0xb6/0x100
+[   14.760937]  acpi_unregister_gsi_ioapic+0x27/0x40
+[   14.761334]  acpi_pci_irq_disable+0x1d3/0x320
+[   14.761688]  pci_disable_device+0x1ad/0x380
+[   14.762027]  ? _raw_spin_unlock_irqrestore+0x2d/0x60
+[   14.762442]  ? cx25821_shutdown+0x20/0x9f0 [cx25821]
+[   14.762848]  cx25821_finidev+0x48/0xc0 [cx25821]
+[   14.763242]  pci_device_remove+0x92/0x240
+
+Fix this by freeing the irq before call pci_disable_device().
+
+Signed-off-by: Zheyu Ma <zheyuma97@gmail.com>
+Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
+Signed-off-by: Mauro Carvalho Chehab <mchehab@kernel.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/media/pci/cx25821/cx25821-core.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/drivers/media/pci/cx25821/cx25821-core.c b/drivers/media/pci/cx25821/cx25821-core.c
+index 44839a6461e8..534829e352d1 100644
+--- a/drivers/media/pci/cx25821/cx25821-core.c
++++ b/drivers/media/pci/cx25821/cx25821-core.c
+@@ -1340,11 +1340,11 @@ static void cx25821_finidev(struct pci_dev *pci_dev)
+       struct cx25821_dev *dev = get_cx25821(v4l2_dev);
+       cx25821_shutdown(dev);
+-      pci_disable_device(pci_dev);
+       /* unregister stuff */
+       if (pci_dev->irq)
+               free_irq(pci_dev->irq, dev);
++      pci_disable_device(pci_dev);
+       cx25821_dev_unregister(dev);
+       v4l2_device_unregister(v4l2_dev);
+-- 
+2.35.1
+
diff --git a/queue-5.4/media-exynos4-is-change-clk_disable-to-clk_disable_u.patch b/queue-5.4/media-exynos4-is-change-clk_disable-to-clk_disable_u.patch
new file mode 100644 (file)
index 0000000..367ff97
--- /dev/null
@@ -0,0 +1,39 @@
+From a388b37efbe7076c23e52e8d85125f56734b79b9 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Fri, 18 Mar 2022 12:01:01 +0100
+Subject: media: exynos4-is: Change clk_disable to clk_disable_unprepare
+
+From: Miaoqian Lin <linmq006@gmail.com>
+
+[ Upstream commit 9fadab72a6916c7507d7fedcd644859eef995078 ]
+
+The corresponding API for clk_prepare_enable is clk_disable_unprepare,
+other than clk_disable.
+
+Fix this by changing clk_disable to clk_disable_unprepare.
+
+Fixes: b4155d7d5b2c ("[media] exynos4-is: Ensure fimc-is clocks are not enabled until properly configured")
+Signed-off-by: Miaoqian Lin <linmq006@gmail.com>
+Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
+Signed-off-by: Mauro Carvalho Chehab <mchehab@kernel.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/media/platform/exynos4-is/fimc-is.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/drivers/media/platform/exynos4-is/fimc-is.c b/drivers/media/platform/exynos4-is/fimc-is.c
+index 64148b7e0d98..9bb14bb2e498 100644
+--- a/drivers/media/platform/exynos4-is/fimc-is.c
++++ b/drivers/media/platform/exynos4-is/fimc-is.c
+@@ -141,7 +141,7 @@ static int fimc_is_enable_clocks(struct fimc_is *is)
+                       dev_err(&is->pdev->dev, "clock %s enable failed\n",
+                               fimc_is_clocks[i]);
+                       for (--i; i >= 0; i--)
+-                              clk_disable(is->clocks[i]);
++                              clk_disable_unprepare(is->clocks[i]);
+                       return ret;
+               }
+               pr_debug("enabled clock: %s\n", fimc_is_clocks[i]);
+-- 
+2.35.1
+
diff --git a/queue-5.4/media-exynos4-is-fix-compile-warning.patch b/queue-5.4/media-exynos4-is-fix-compile-warning.patch
new file mode 100644 (file)
index 0000000..41cc9d8
--- /dev/null
@@ -0,0 +1,39 @@
+From 96ff6135643600e70cff1cb6f37ac71eac7f85f9 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Wed, 27 Apr 2022 03:16:45 +0200
+Subject: media: exynos4-is: Fix compile warning
+
+From: Kwanghoon Son <k.son@samsung.com>
+
+[ Upstream commit e080f5c1f2b6d02c02ee5d674e0e392ccf63bbaf ]
+
+Declare static on function 'fimc_isp_video_device_unregister'.
+
+When VIDEO_EXYNOS4_ISP_DMA_CAPTURE=n, compiler warns about
+warning: no previous prototype for function [-Wmissing-prototypes]
+
+Reported-by: kernel test robot <lkp@intel.com>
+Signed-off-by: Kwanghoon Son <k.son@samsung.com>
+Signed-off-by: Sakari Ailus <sakari.ailus@linux.intel.com>
+Signed-off-by: Mauro Carvalho Chehab <mchehab@kernel.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/media/platform/exynos4-is/fimc-isp-video.h | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/drivers/media/platform/exynos4-is/fimc-isp-video.h b/drivers/media/platform/exynos4-is/fimc-isp-video.h
+index edcb3a5e3cb9..2dd4ddbc748a 100644
+--- a/drivers/media/platform/exynos4-is/fimc-isp-video.h
++++ b/drivers/media/platform/exynos4-is/fimc-isp-video.h
+@@ -32,7 +32,7 @@ static inline int fimc_isp_video_device_register(struct fimc_isp *isp,
+       return 0;
+ }
+-void fimc_isp_video_device_unregister(struct fimc_isp *isp,
++static inline void fimc_isp_video_device_unregister(struct fimc_isp *isp,
+                               enum v4l2_buf_type type)
+ {
+ }
+-- 
+2.35.1
+
diff --git a/queue-5.4/media-ov7670-remove-ov7670_power_off-from-ov7670_rem.patch b/queue-5.4/media-ov7670-remove-ov7670_power_off-from-ov7670_rem.patch
new file mode 100644 (file)
index 0000000..95ff3f0
--- /dev/null
@@ -0,0 +1,39 @@
+From 8b7a7fa463327aa1d9b2468a09047180a363f960 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Fri, 22 Apr 2022 10:54:05 +0200
+Subject: media: ov7670: remove ov7670_power_off from ov7670_remove
+
+From: Dongliang Mu <mudongliangabcd@gmail.com>
+
+[ Upstream commit 5bf19572e31375368f19edd2dbb2e0789518bb99 ]
+
+In ov7670_probe, it always invokes ov7670_power_off() no matter
+the execution is successful or failed. So we cannot invoke it
+agiain in ov7670_remove().
+
+Fix this by removing ov7670_power_off from ov7670_remove.
+
+Fixes: 030f9f682e66 ("media: ov7670: control clock along with power")
+Signed-off-by: Dongliang Mu <mudongliangabcd@gmail.com>
+Signed-off-by: Sakari Ailus <sakari.ailus@linux.intel.com>
+Signed-off-by: Mauro Carvalho Chehab <mchehab@kernel.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/media/i2c/ov7670.c | 1 -
+ 1 file changed, 1 deletion(-)
+
+diff --git a/drivers/media/i2c/ov7670.c b/drivers/media/i2c/ov7670.c
+index b42b289faaef..154776d0069e 100644
+--- a/drivers/media/i2c/ov7670.c
++++ b/drivers/media/i2c/ov7670.c
+@@ -2000,7 +2000,6 @@ static int ov7670_remove(struct i2c_client *client)
+       v4l2_async_unregister_subdev(sd);
+       v4l2_ctrl_handler_free(&info->hdl);
+       media_entity_cleanup(&info->sd.entity);
+-      ov7670_power_off(sd);
+       return 0;
+ }
+-- 
+2.35.1
+
diff --git a/queue-5.4/media-pci-cx23885-fix-the-error-handling-in-cx23885_.patch b/queue-5.4/media-pci-cx23885-fix-the-error-handling-in-cx23885_.patch
new file mode 100644 (file)
index 0000000..d8b0854
--- /dev/null
@@ -0,0 +1,66 @@
+From e2f1b8b0ff9b97ff29f1ea57e8fcf41b54da56aa Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Sun, 10 Apr 2022 08:34:41 +0100
+Subject: media: pci: cx23885: Fix the error handling in cx23885_initdev()
+
+From: Zheyu Ma <zheyuma97@gmail.com>
+
+[ Upstream commit e8123311cf06d7dae71e8c5fe78e0510d20cd30b ]
+
+When the driver fails to call the dma_set_mask(), the driver will get
+the following splat:
+
+[   55.853884] BUG: KASAN: use-after-free in __process_removed_driver+0x3c/0x240
+[   55.854486] Read of size 8 at addr ffff88810de60408 by task modprobe/590
+[   55.856822] Call Trace:
+[   55.860327]  __process_removed_driver+0x3c/0x240
+[   55.861347]  bus_for_each_dev+0x102/0x160
+[   55.861681]  i2c_del_driver+0x2f/0x50
+
+This is because the driver has initialized the i2c related resources
+in cx23885_dev_setup() but not released them in error handling, fix this
+bug by modifying the error path that jumps after failing to call the
+dma_set_mask().
+
+Signed-off-by: Zheyu Ma <zheyuma97@gmail.com>
+Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
+Signed-off-by: Mauro Carvalho Chehab <mchehab@kernel.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/media/pci/cx23885/cx23885-core.c | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+diff --git a/drivers/media/pci/cx23885/cx23885-core.c b/drivers/media/pci/cx23885/cx23885-core.c
+index ead0acb7807c..6747ecb4911b 100644
+--- a/drivers/media/pci/cx23885/cx23885-core.c
++++ b/drivers/media/pci/cx23885/cx23885-core.c
+@@ -2154,7 +2154,7 @@ static int cx23885_initdev(struct pci_dev *pci_dev,
+       err = pci_set_dma_mask(pci_dev, 0xffffffff);
+       if (err) {
+               pr_err("%s/0: Oops: no 32bit PCI DMA ???\n", dev->name);
+-              goto fail_ctrl;
++              goto fail_dma_set_mask;
+       }
+       err = request_irq(pci_dev->irq, cx23885_irq,
+@@ -2162,7 +2162,7 @@ static int cx23885_initdev(struct pci_dev *pci_dev,
+       if (err < 0) {
+               pr_err("%s: can't get IRQ %d\n",
+                      dev->name, pci_dev->irq);
+-              goto fail_irq;
++              goto fail_dma_set_mask;
+       }
+       switch (dev->board) {
+@@ -2184,7 +2184,7 @@ static int cx23885_initdev(struct pci_dev *pci_dev,
+       return 0;
+-fail_irq:
++fail_dma_set_mask:
+       cx23885_dev_unregister(dev);
+ fail_ctrl:
+       v4l2_ctrl_handler_free(hdl);
+-- 
+2.35.1
+
diff --git a/queue-5.4/media-pvrusb2-fix-array-index-out-of-bounds-in-pvr2_.patch b/queue-5.4/media-pvrusb2-fix-array-index-out-of-bounds-in-pvr2_.patch
new file mode 100644 (file)
index 0000000..23493b1
--- /dev/null
@@ -0,0 +1,58 @@
+From 5709d42c219350194287da2fc3d42160511f0d99 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Fri, 15 Apr 2022 23:24:48 +0200
+Subject: media: pvrusb2: fix array-index-out-of-bounds in pvr2_i2c_core_init
+
+From: Pavel Skripkin <paskripkin@gmail.com>
+
+[ Upstream commit 471bec68457aaf981add77b4f590d65dd7da1059 ]
+
+Syzbot reported that -1 is used as array index. The problem was in
+missing validation check.
+
+hdw->unit_number is initialized with -1 and then if init table walk fails
+this value remains unchanged. Since code blindly uses this member for
+array indexing adding sanity check is the easiest fix for that.
+
+hdw->workpoll initialization moved upper to prevent warning in
+__flush_work.
+
+Reported-and-tested-by: syzbot+1a247e36149ffd709a9b@syzkaller.appspotmail.com
+
+Fixes: d855497edbfb ("V4L/DVB (4228a): pvrusb2 to kernel 2.6.18")
+Signed-off-by: Pavel Skripkin <paskripkin@gmail.com>
+Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
+Signed-off-by: Mauro Carvalho Chehab <mchehab@kernel.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/media/usb/pvrusb2/pvrusb2-hdw.c | 7 +++++--
+ 1 file changed, 5 insertions(+), 2 deletions(-)
+
+diff --git a/drivers/media/usb/pvrusb2/pvrusb2-hdw.c b/drivers/media/usb/pvrusb2/pvrusb2-hdw.c
+index 2f00679f65a0..11e7fcfc3f19 100644
+--- a/drivers/media/usb/pvrusb2/pvrusb2-hdw.c
++++ b/drivers/media/usb/pvrusb2/pvrusb2-hdw.c
+@@ -2570,6 +2570,11 @@ struct pvr2_hdw *pvr2_hdw_create(struct usb_interface *intf,
+       } while (0);
+       mutex_unlock(&pvr2_unit_mtx);
++      INIT_WORK(&hdw->workpoll, pvr2_hdw_worker_poll);
++
++      if (hdw->unit_number == -1)
++              goto fail;
++
+       cnt1 = 0;
+       cnt2 = scnprintf(hdw->name+cnt1,sizeof(hdw->name)-cnt1,"pvrusb2");
+       cnt1 += cnt2;
+@@ -2581,8 +2586,6 @@ struct pvr2_hdw *pvr2_hdw_create(struct usb_interface *intf,
+       if (cnt1 >= sizeof(hdw->name)) cnt1 = sizeof(hdw->name)-1;
+       hdw->name[cnt1] = 0;
+-      INIT_WORK(&hdw->workpoll,pvr2_hdw_worker_poll);
+-
+       pvr2_trace(PVR2_TRACE_INIT,"Driver unit number is %d, name is %s",
+                  hdw->unit_number,hdw->name);
+-- 
+2.35.1
+
diff --git a/queue-5.4/media-st-delta-fix-pm-disable-depth-imbalance-in-del.patch b/queue-5.4/media-st-delta-fix-pm-disable-depth-imbalance-in-del.patch
new file mode 100644 (file)
index 0000000..0c18c56
--- /dev/null
@@ -0,0 +1,57 @@
+From fb08bb8156f0186d93da98ebd5268ca09829fac9 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Mon, 7 Mar 2022 09:08:59 +0100
+Subject: media: st-delta: Fix PM disable depth imbalance in delta_probe
+
+From: Miaoqian Lin <linmq006@gmail.com>
+
+[ Upstream commit 94e3dba710fe0afc772172305444250023fc2d30 ]
+
+The pm_runtime_enable will decrease power disable depth.
+If the probe fails, we should use pm_runtime_disable() to balance
+pm_runtime_enable().
+
+Fixes: f386509e4959 ("[media] st-delta: STiH4xx multi-format video decoder v4l2 driver")
+Signed-off-by: Miaoqian Lin <linmq006@gmail.com>
+Acked-by: Hugues Fruchet <hugues.fruchet@foss.st.com>
+Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
+Signed-off-by: Mauro Carvalho Chehab <mchehab@kernel.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/media/platform/sti/delta/delta-v4l2.c | 6 ++++--
+ 1 file changed, 4 insertions(+), 2 deletions(-)
+
+diff --git a/drivers/media/platform/sti/delta/delta-v4l2.c b/drivers/media/platform/sti/delta/delta-v4l2.c
+index 2791107e641b..29732b49a2cd 100644
+--- a/drivers/media/platform/sti/delta/delta-v4l2.c
++++ b/drivers/media/platform/sti/delta/delta-v4l2.c
+@@ -1862,7 +1862,7 @@ static int delta_probe(struct platform_device *pdev)
+       if (ret) {
+               dev_err(delta->dev, "%s failed to initialize firmware ipc channel\n",
+                       DELTA_PREFIX);
+-              goto err;
++              goto err_pm_disable;
+       }
+       /* register all available decoders */
+@@ -1876,7 +1876,7 @@ static int delta_probe(struct platform_device *pdev)
+       if (ret) {
+               dev_err(delta->dev, "%s failed to register V4L2 device\n",
+                       DELTA_PREFIX);
+-              goto err;
++              goto err_pm_disable;
+       }
+       delta->work_queue = create_workqueue(DELTA_NAME);
+@@ -1901,6 +1901,8 @@ static int delta_probe(struct platform_device *pdev)
+       destroy_workqueue(delta->work_queue);
+ err_v4l2:
+       v4l2_device_unregister(&delta->v4l2_dev);
++err_pm_disable:
++      pm_runtime_disable(dev);
+ err:
+       return ret;
+ }
+-- 
+2.35.1
+
diff --git a/queue-5.4/media-uvcvideo-fix-missing-check-to-determine-if-ele.patch b/queue-5.4/media-uvcvideo-fix-missing-check-to-determine-if-ele.patch
new file mode 100644 (file)
index 0000000..42dfe34
--- /dev/null
@@ -0,0 +1,87 @@
+From f57a7592d9d82e92fa3feb34959118119f46d93e Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Sat, 19 Mar 2022 11:22:22 +0100
+Subject: media: uvcvideo: Fix missing check to determine if element is found
+ in list
+
+From: Xiaomeng Tong <xiam0nd.tong@gmail.com>
+
+[ Upstream commit 261f33388c29f6f3c12a724e6d89172b7f6d5996 ]
+
+The list iterator will point to a bogus position containing HEAD if
+the list is empty or the element is not found in list. This case
+should be checked before any use of the iterator, otherwise it will
+lead to a invalid memory access. The missing check here is before
+"pin = iterm->id;", just add check here to fix the security bug.
+
+In addition, the list iterator value will *always* be set and non-NULL
+by list_for_each_entry(), so it is incorrect to assume that the iterator
+value will be NULL if the element is not found in list, considering
+the (mis)use here: "if (iterm == NULL".
+
+Use a new value 'it' as the list iterator, while use the old value
+'iterm' as a dedicated pointer to point to the found element, which
+1. can fix this bug, due to 'iterm' is NULL only if it's not found.
+2. do not need to change all the uses of 'iterm' after the loop.
+3. can also limit the scope of the list iterator 'it' *only inside*
+   the traversal loop by simply declaring 'it' inside the loop in the
+   future, as usage of the iterator outside of the list_for_each_entry
+   is considered harmful. https://lkml.org/lkml/2022/2/17/1032
+
+Fixes: d5e90b7a6cd1c ("[media] uvcvideo: Move to video_ioctl2")
+Signed-off-by: Xiaomeng Tong <xiam0nd.tong@gmail.com>
+Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
+Signed-off-by: Mauro Carvalho Chehab <mchehab@kernel.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/media/usb/uvc/uvc_v4l2.c | 20 +++++++++++---------
+ 1 file changed, 11 insertions(+), 9 deletions(-)
+
+diff --git a/drivers/media/usb/uvc/uvc_v4l2.c b/drivers/media/usb/uvc/uvc_v4l2.c
+index 3126ee9e965c..96ef64b6a232 100644
+--- a/drivers/media/usb/uvc/uvc_v4l2.c
++++ b/drivers/media/usb/uvc/uvc_v4l2.c
+@@ -859,29 +859,31 @@ static int uvc_ioctl_enum_input(struct file *file, void *fh,
+       struct uvc_video_chain *chain = handle->chain;
+       const struct uvc_entity *selector = chain->selector;
+       struct uvc_entity *iterm = NULL;
++      struct uvc_entity *it;
+       u32 index = input->index;
+-      int pin = 0;
+       if (selector == NULL ||
+           (chain->dev->quirks & UVC_QUIRK_IGNORE_SELECTOR_UNIT)) {
+               if (index != 0)
+                       return -EINVAL;
+-              list_for_each_entry(iterm, &chain->entities, chain) {
+-                      if (UVC_ENTITY_IS_ITERM(iterm))
++              list_for_each_entry(it, &chain->entities, chain) {
++                      if (UVC_ENTITY_IS_ITERM(it)) {
++                              iterm = it;
+                               break;
++                      }
+               }
+-              pin = iterm->id;
+       } else if (index < selector->bNrInPins) {
+-              pin = selector->baSourceID[index];
+-              list_for_each_entry(iterm, &chain->entities, chain) {
+-                      if (!UVC_ENTITY_IS_ITERM(iterm))
++              list_for_each_entry(it, &chain->entities, chain) {
++                      if (!UVC_ENTITY_IS_ITERM(it))
+                               continue;
+-                      if (iterm->id == pin)
++                      if (it->id == selector->baSourceID[index]) {
++                              iterm = it;
+                               break;
++                      }
+               }
+       }
+-      if (iterm == NULL || iterm->id != pin)
++      if (iterm == NULL)
+               return -EINVAL;
+       memset(input, 0, sizeof(*input));
+-- 
+2.35.1
+
diff --git a/queue-5.4/media-venus-hfi-avoid-null-dereference-in-deinit.patch b/queue-5.4/media-venus-hfi-avoid-null-dereference-in-deinit.patch
new file mode 100644 (file)
index 0000000..7097621
--- /dev/null
@@ -0,0 +1,41 @@
+From 80eac03d87534c3e83d7f4f48c8c10527e381f23 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Fri, 14 Jan 2022 11:02:26 +0000
+Subject: media: venus: hfi: avoid null dereference in deinit
+
+From: Luca Weiss <luca.weiss@fairphone.com>
+
+[ Upstream commit 86594f6af867b5165d2ba7b5a71fae3a5961e56c ]
+
+If venus_probe fails at pm_runtime_put_sync the error handling first
+calls hfi_destroy and afterwards hfi_core_deinit. As hfi_destroy sets
+core->ops to NULL, hfi_core_deinit cannot call the core_deinit function
+anymore.
+
+Avoid this null pointer derefence by skipping the call when necessary.
+
+Signed-off-by: Luca Weiss <luca.weiss@fairphone.com>
+Signed-off-by: Stanimir Varbanov <stanimir.varbanov@linaro.org>
+Signed-off-by: Mauro Carvalho Chehab <mchehab@kernel.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/media/platform/qcom/venus/hfi.c | 3 +++
+ 1 file changed, 3 insertions(+)
+
+diff --git a/drivers/media/platform/qcom/venus/hfi.c b/drivers/media/platform/qcom/venus/hfi.c
+index 3d8b1284d1f3..68964a80fe61 100644
+--- a/drivers/media/platform/qcom/venus/hfi.c
++++ b/drivers/media/platform/qcom/venus/hfi.c
+@@ -104,6 +104,9 @@ int hfi_core_deinit(struct venus_core *core, bool blocking)
+               mutex_lock(&core->lock);
+       }
++      if (!core->ops)
++              goto unlock;
++
+       ret = core->ops->core_deinit(core);
+       if (!ret)
+-- 
+2.35.1
+
diff --git a/queue-5.4/media-vsp1-fix-offset-calculation-for-plane-cropping.patch b/queue-5.4/media-vsp1-fix-offset-calculation-for-plane-cropping.patch
new file mode 100644 (file)
index 0000000..9fb7b30
--- /dev/null
@@ -0,0 +1,51 @@
+From 827d47fe10bdb2f460fe30ea60b2fec8b9aeb4e5 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Tue, 23 Nov 2021 12:50:36 +0100
+Subject: media: vsp1: Fix offset calculation for plane cropping
+
+From: Michael Rodin <mrodin@de.adit-jv.com>
+
+[ Upstream commit 5f25abec8f21b7527c1223a354d23c270befddb3 ]
+
+The vertical subsampling factor is currently not considered in the
+offset calculation for plane cropping done in rpf_configure_partition.
+This causes a distortion (shift of the color plane) when formats with
+the vsub factor larger than 1 are used (e.g. NV12, see
+vsp1_video_formats in vsp1_pipe.c). This commit considers vsub factor
+for all planes except plane 0 (luminance).
+
+Drop generalization of the offset calculation to reduce the binary size.
+
+Fixes: e5ad37b64de9 ("[media] v4l: vsp1: Add cropping support")
+Signed-off-by: Michael Rodin <mrodin@de.adit-jv.com>
+Signed-off-by: LUU HOAI <hoai.luu.ub@renesas.com>
+Signed-off-by: Laurent Pinchart <laurent.pinchart+renesas@ideasonboard.com>
+Reviewed-by: Kieran Bingham <kieran.bingham+renesas@ideasonboard.com>
+Signed-off-by: Mauro Carvalho Chehab <mchehab@kernel.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/media/platform/vsp1/vsp1_rpf.c | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+diff --git a/drivers/media/platform/vsp1/vsp1_rpf.c b/drivers/media/platform/vsp1/vsp1_rpf.c
+index 85587c1b6a37..75083cb234fe 100644
+--- a/drivers/media/platform/vsp1/vsp1_rpf.c
++++ b/drivers/media/platform/vsp1/vsp1_rpf.c
+@@ -291,11 +291,11 @@ static void rpf_configure_partition(struct vsp1_entity *entity,
+                    + crop.left * fmtinfo->bpp[0] / 8;
+       if (format->num_planes > 1) {
++              unsigned int bpl = format->plane_fmt[1].bytesperline;
+               unsigned int offset;
+-              offset = crop.top * format->plane_fmt[1].bytesperline
+-                     + crop.left / fmtinfo->hsub
+-                     * fmtinfo->bpp[1] / 8;
++              offset = crop.top / fmtinfo->vsub * bpl
++                     + crop.left / fmtinfo->hsub * fmtinfo->bpp[1] / 8;
+               mem.addr[1] += offset;
+               mem.addr[2] += offset;
+       }
+-- 
+2.35.1
+
diff --git a/queue-5.4/mfd-davinci_voicecodec-fix-possible-null-ptr-deref-d.patch b/queue-5.4/mfd-davinci_voicecodec-fix-possible-null-ptr-deref-d.patch
new file mode 100644 (file)
index 0000000..e7661d6
--- /dev/null
@@ -0,0 +1,48 @@
+From dce9542159779cd73a59201e665c848d5ba5775a Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Tue, 26 Apr 2022 11:08:57 +0800
+Subject: mfd: davinci_voicecodec: Fix possible null-ptr-deref
+ davinci_vc_probe()
+
+From: Yang Yingliang <yangyingliang@huawei.com>
+
+[ Upstream commit 311242c7703df0da14c206260b7e855f69cb0264 ]
+
+It will cause null-ptr-deref when using 'res', if platform_get_resource()
+returns NULL, so move using 'res' after devm_ioremap_resource() that
+will check it to avoid null-ptr-deref.
+And use devm_platform_get_and_ioremap_resource() to simplify code.
+
+Fixes: b5e29aa880be ("mfd: davinci_voicecodec: Remove pointless #include")
+Signed-off-by: Yang Yingliang <yangyingliang@huawei.com>
+Signed-off-by: Lee Jones <lee.jones@linaro.org>
+Link: https://lore.kernel.org/r/20220426030857.3539336-1-yangyingliang@huawei.com
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/mfd/davinci_voicecodec.c | 6 ++----
+ 1 file changed, 2 insertions(+), 4 deletions(-)
+
+diff --git a/drivers/mfd/davinci_voicecodec.c b/drivers/mfd/davinci_voicecodec.c
+index e5c8bc998eb4..965820481f1e 100644
+--- a/drivers/mfd/davinci_voicecodec.c
++++ b/drivers/mfd/davinci_voicecodec.c
+@@ -46,14 +46,12 @@ static int __init davinci_vc_probe(struct platform_device *pdev)
+       }
+       clk_enable(davinci_vc->clk);
+-      res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
+-
+-      fifo_base = (dma_addr_t)res->start;
+-      davinci_vc->base = devm_ioremap_resource(&pdev->dev, res);
++      davinci_vc->base = devm_platform_get_and_ioremap_resource(pdev, 0, &res);
+       if (IS_ERR(davinci_vc->base)) {
+               ret = PTR_ERR(davinci_vc->base);
+               goto fail;
+       }
++      fifo_base = (dma_addr_t)res->start;
+       davinci_vc->regmap = devm_regmap_init_mmio(&pdev->dev,
+                                                  davinci_vc->base,
+-- 
+2.35.1
+
diff --git a/queue-5.4/mfd-ipaq-micro-fix-error-check-return-value-of-platf.patch b/queue-5.4/mfd-ipaq-micro-fix-error-check-return-value-of-platf.patch
new file mode 100644 (file)
index 0000000..24c20d5
--- /dev/null
@@ -0,0 +1,39 @@
+From 597be3394958df42bd5d9de0cc60b9ec1db3e68d Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Tue, 12 Apr 2022 08:53:05 +0000
+Subject: mfd: ipaq-micro: Fix error check return value of platform_get_irq()
+
+From: Lv Ruyi <lv.ruyi@zte.com.cn>
+
+[ Upstream commit 3b49ae380ce1a3054e0c505dd9a356b82a5b48e8 ]
+
+platform_get_irq() return negative value on failure, so null check of
+irq is incorrect. Fix it by comparing whether it is less than zero.
+
+Fixes: dcc21cc09e3c ("mfd: Add driver for Atmel Microcontroller on iPaq h3xxx")
+Reported-by: Zeal Robot <zealci@zte.com.cn>
+Signed-off-by: Lv Ruyi <lv.ruyi@zte.com.cn>
+Reviewed-by: Linus Walleij <linus.walleij@linaro.org>
+Signed-off-by: Lee Jones <lee.jones@linaro.org>
+Link: https://lore.kernel.org/r/20220412085305.2533030-1-lv.ruyi@zte.com.cn
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/mfd/ipaq-micro.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/drivers/mfd/ipaq-micro.c b/drivers/mfd/ipaq-micro.c
+index a1d9be82734d..88387c7e7443 100644
+--- a/drivers/mfd/ipaq-micro.c
++++ b/drivers/mfd/ipaq-micro.c
+@@ -407,7 +407,7 @@ static int __init micro_probe(struct platform_device *pdev)
+       micro_reset_comm(micro);
+       irq = platform_get_irq(pdev, 0);
+-      if (!irq)
++      if (irq < 0)
+               return -EINVAL;
+       ret = devm_request_irq(&pdev->dev, irq, micro_serial_isr,
+                              IRQF_SHARED, "ipaq-micro",
+-- 
+2.35.1
+
diff --git a/queue-5.4/misc-ocxl-fix-possible-double-free-in-ocxl_file_regi.patch b/queue-5.4/misc-ocxl-fix-possible-double-free-in-ocxl_file_regi.patch
new file mode 100644 (file)
index 0000000..7bc5e81
--- /dev/null
@@ -0,0 +1,42 @@
+From 2c4c0305bcc88d8e3ba608c908fe1859af1eb3e9 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Mon, 18 Apr 2022 16:57:58 +0800
+Subject: misc: ocxl: fix possible double free in ocxl_file_register_afu
+
+From: Hangyu Hua <hbh25y@gmail.com>
+
+[ Upstream commit 950cf957fe34d40d63dfa3bf3968210430b6491e ]
+
+info_release() will be called in device_unregister() when info->dev's
+reference count is 0. So there is no need to call ocxl_afu_put() and
+kfree() again.
+
+Fix this by adding free_minor() and return to err_unregister error path.
+
+Fixes: 75ca758adbaf ("ocxl: Create a clear delineation between ocxl backend & frontend")
+Signed-off-by: Hangyu Hua <hbh25y@gmail.com>
+Acked-by: Frederic Barrat <fbarrat@linux.ibm.com>
+Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
+Link: https://lore.kernel.org/r/20220418085758.38145-1-hbh25y@gmail.com
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/misc/ocxl/file.c | 2 ++
+ 1 file changed, 2 insertions(+)
+
+diff --git a/drivers/misc/ocxl/file.c b/drivers/misc/ocxl/file.c
+index 4d1b44de1492..c742ab02ae18 100644
+--- a/drivers/misc/ocxl/file.c
++++ b/drivers/misc/ocxl/file.c
+@@ -558,7 +558,9 @@ int ocxl_file_register_afu(struct ocxl_afu *afu)
+ err_unregister:
+       ocxl_sysfs_unregister_afu(info); // safe to call even if register failed
++      free_minor(info);
+       device_unregister(&info->dev);
++      return rc;
+ err_put:
+       ocxl_afu_put(afu);
+       free_minor(info);
+-- 
+2.35.1
+
diff --git a/queue-5.4/mlxsw-spectrum_dcb-do-not-warn-about-priority-change.patch b/queue-5.4/mlxsw-spectrum_dcb-do-not-warn-about-priority-change.patch
new file mode 100644 (file)
index 0000000..192ad19
--- /dev/null
@@ -0,0 +1,84 @@
+From fb1f8be02346b2c983b5d2cb05717fb56a589cca Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Wed, 4 May 2022 09:29:05 +0300
+Subject: mlxsw: spectrum_dcb: Do not warn about priority changes
+
+From: Petr Machata <petrm@nvidia.com>
+
+[ Upstream commit b6b584562cbe7dc357083459d6dd5b171e12cadb ]
+
+The idea behind the warnings is that the user would get warned in case when
+more than one priority is configured for a given DSCP value on a netdevice.
+
+The warning is currently wrong, because dcb_ieee_getapp_mask() returns
+the first matching entry, not all of them, and the warning will then claim
+that some priority is "current", when in fact it is not.
+
+But more importantly, the warning is misleading in general. Consider the
+following commands:
+
+ # dcb app flush dev swp19 dscp-prio
+ # dcb app add dev swp19 dscp-prio 24:3
+ # dcb app replace dev swp19 dscp-prio 24:2
+
+The last command will issue the following warning:
+
+ mlxsw_spectrum3 0000:07:00.0 swp19: Ignoring new priority 2 for DSCP 24 in favor of current value of 3
+
+The reason is that the "replace" command works by first adding the new
+value, and then removing all old values. This is the only way to make the
+replacement without causing the traffic to be prioritized to whatever the
+chip defaults to. The warning is issued in response to adding the new
+priority, and then no warning is shown when the old priority is removed.
+The upshot is that the canonical way to change traffic prioritization
+always produces a warning about ignoring the new priority, but what gets
+configured is in fact what the user intended.
+
+An option to just emit warning every time that the prioritization changes
+just to make it clear that it happened is obviously unsatisfactory.
+
+Therefore, in this patch, remove the warnings.
+
+Reported-by: Maksym Yaremchuk <maksymy@nvidia.com>
+Signed-off-by: Petr Machata <petrm@nvidia.com>
+Signed-off-by: Ido Schimmel <idosch@nvidia.com>
+Signed-off-by: David S. Miller <davem@davemloft.net>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/net/ethernet/mellanox/mlxsw/spectrum_dcb.c | 13 -------------
+ 1 file changed, 13 deletions(-)
+
+diff --git a/drivers/net/ethernet/mellanox/mlxsw/spectrum_dcb.c b/drivers/net/ethernet/mellanox/mlxsw/spectrum_dcb.c
+index 21296fa7f7fb..bf51ed94952c 100644
+--- a/drivers/net/ethernet/mellanox/mlxsw/spectrum_dcb.c
++++ b/drivers/net/ethernet/mellanox/mlxsw/spectrum_dcb.c
+@@ -227,8 +227,6 @@ static int mlxsw_sp_dcbnl_ieee_setets(struct net_device *dev,
+ static int mlxsw_sp_dcbnl_app_validate(struct net_device *dev,
+                                      struct dcb_app *app)
+ {
+-      int prio;
+-
+       if (app->priority >= IEEE_8021QAZ_MAX_TCS) {
+               netdev_err(dev, "APP entry with priority value %u is invalid\n",
+                          app->priority);
+@@ -242,17 +240,6 @@ static int mlxsw_sp_dcbnl_app_validate(struct net_device *dev,
+                                  app->protocol);
+                       return -EINVAL;
+               }
+-
+-              /* Warn about any DSCP APP entries with the same PID. */
+-              prio = fls(dcb_ieee_getapp_mask(dev, app));
+-              if (prio--) {
+-                      if (prio < app->priority)
+-                              netdev_warn(dev, "Choosing priority %d for DSCP %d in favor of previously-active value of %d\n",
+-                                          app->priority, app->protocol, prio);
+-                      else if (prio > app->priority)
+-                              netdev_warn(dev, "Ignoring new priority %d for DSCP %d in favor of current value of %d\n",
+-                                          app->priority, app->protocol, prio);
+-              }
+               break;
+       case IEEE_8021QAZ_APP_SEL_ETHERTYPE:
+-- 
+2.35.1
+
diff --git a/queue-5.4/mmc-jz4740-apply-dma-engine-limits-to-maximum-segmen.patch b/queue-5.4/mmc-jz4740-apply-dma-engine-limits-to-maximum-segmen.patch
new file mode 100644 (file)
index 0000000..e96df2c
--- /dev/null
@@ -0,0 +1,89 @@
+From 727b70d3ffed1c6b271cc64c7c3e9f82b0daa964 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Mon, 11 Apr 2022 16:37:53 +0100
+Subject: mmc: jz4740: Apply DMA engine limits to maximum segment size
+
+From: Aidan MacDonald <aidanmacdonald.0x0@gmail.com>
+
+[ Upstream commit afadb04f1d6e74b18a253403f5274cde5e3fd7bd ]
+
+Do what is done in other DMA-enabled MMC host drivers (cf. host/mmci.c) and
+limit the maximum segment size based on the DMA engine's capabilities. This
+is needed to avoid warnings like the following with CONFIG_DMA_API_DEBUG=y.
+
+------------[ cut here ]------------
+WARNING: CPU: 0 PID: 21 at kernel/dma/debug.c:1162 debug_dma_map_sg+0x2f4/0x39c
+DMA-API: jz4780-dma 13420000.dma-controller: mapping sg segment longer than device claims to support [len=98304] [max=65536]
+CPU: 0 PID: 21 Comm: kworker/0:1H Not tainted 5.18.0-rc1 #19
+Workqueue: kblockd blk_mq_run_work_fn
+Stack : 81575aec 00000004 80620000 80620000 80620000 805e7358 00000009 801537ac
+        814c832c 806276e3 806e34b4 80620000 81575aec 00000001 81575ab8 09291444
+        00000000 00000000 805e7358 81575958 ffffffea 8157596c 00000000 636f6c62
+        6220646b 80387a70 0000000f 6d5f6b6c 80620000 00000000 81575ba4 00000009
+        805e170c 80896640 00000001 00010000 00000000 00000000 00006098 806e0000
+        ...
+Call Trace:
+[<80107670>] show_stack+0x84/0x120
+[<80528cd8>] __warn+0xb8/0xec
+[<80528d78>] warn_slowpath_fmt+0x6c/0xb8
+[<8016f1d4>] debug_dma_map_sg+0x2f4/0x39c
+[<80169d4c>] __dma_map_sg_attrs+0xf0/0x118
+[<8016a27c>] dma_map_sg_attrs+0x14/0x28
+[<804f66b4>] jz4740_mmc_prepare_dma_data+0x74/0xa4
+[<804f6714>] jz4740_mmc_pre_request+0x30/0x54
+[<804f4ff4>] mmc_blk_mq_issue_rq+0x6e0/0x7bc
+[<804f5590>] mmc_mq_queue_rq+0x220/0x2d4
+[<8038b2c0>] blk_mq_dispatch_rq_list+0x480/0x664
+[<80391040>] blk_mq_do_dispatch_sched+0x2dc/0x370
+[<80391468>] __blk_mq_sched_dispatch_requests+0xec/0x164
+[<80391540>] blk_mq_sched_dispatch_requests+0x44/0x94
+[<80387900>] __blk_mq_run_hw_queue+0xb0/0xcc
+[<80134c14>] process_one_work+0x1b8/0x264
+[<80134ff8>] worker_thread+0x2ec/0x3b8
+[<8013b13c>] kthread+0x104/0x10c
+[<80101dcc>] ret_from_kernel_thread+0x14/0x1c
+
+---[ end trace 0000000000000000 ]---
+
+Signed-off-by: Aidan MacDonald <aidanmacdonald.0x0@gmail.com>
+Link: https://lore.kernel.org/r/20220411153753.50443-1-aidanmacdonald.0x0@gmail.com
+Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/mmc/host/jz4740_mmc.c | 20 ++++++++++++++++++++
+ 1 file changed, 20 insertions(+)
+
+diff --git a/drivers/mmc/host/jz4740_mmc.c b/drivers/mmc/host/jz4740_mmc.c
+index f816c06ef916..a316c912a118 100644
+--- a/drivers/mmc/host/jz4740_mmc.c
++++ b/drivers/mmc/host/jz4740_mmc.c
+@@ -224,6 +224,26 @@ static int jz4740_mmc_acquire_dma_channels(struct jz4740_mmc_host *host)
+               return PTR_ERR(host->dma_rx);
+       }
++      /*
++       * Limit the maximum segment size in any SG entry according to
++       * the parameters of the DMA engine device.
++       */
++      if (host->dma_tx) {
++              struct device *dev = host->dma_tx->device->dev;
++              unsigned int max_seg_size = dma_get_max_seg_size(dev);
++
++              if (max_seg_size < host->mmc->max_seg_size)
++                      host->mmc->max_seg_size = max_seg_size;
++      }
++
++      if (host->dma_rx) {
++              struct device *dev = host->dma_rx->device->dev;
++              unsigned int max_seg_size = dma_get_max_seg_size(dev);
++
++              if (max_seg_size < host->mmc->max_seg_size)
++                      host->mmc->max_seg_size = max_seg_size;
++      }
++
+       return 0;
+ }
+-- 
+2.35.1
+
diff --git a/queue-5.4/mwifiex-add-mutex-lock-for-call-in-mwifiex_dfs_chan_.patch b/queue-5.4/mwifiex-add-mutex-lock-for-call-in-mwifiex_dfs_chan_.patch
new file mode 100644 (file)
index 0000000..a8e3779
--- /dev/null
@@ -0,0 +1,49 @@
+From 3bcef593bee0fd9f3275067b50a5e6e30951a57b Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Mon, 21 Mar 2022 23:55:16 +0100
+Subject: mwifiex: add mutex lock for call in mwifiex_dfs_chan_sw_work_queue
+
+From: Niels Dossche <dossche.niels@gmail.com>
+
+[ Upstream commit 3e12968f6d12a34b540c39cbd696a760cc4616f0 ]
+
+cfg80211_ch_switch_notify uses ASSERT_WDEV_LOCK to assert that
+net_device->ieee80211_ptr->mtx (which is the same as priv->wdev.mtx)
+is held during the function's execution.
+mwifiex_dfs_chan_sw_work_queue is one of its callers, which does not
+hold that lock, therefore violating the assertion.
+Add a lock around the call.
+
+Disclaimer:
+I am currently working on a static analyser to detect missing locks.
+This was a reported case. I manually verified the report by looking
+at the code, so that I do not send wrong information or patches.
+After concluding that this seems to be a true positive, I created
+this patch.
+However, as I do not in fact have this particular hardware,
+I was unable to test it.
+
+Reviewed-by: Brian Norris <briannorris@chromium.org>
+Signed-off-by: Niels Dossche <dossche.niels@gmail.com>
+Signed-off-by: Kalle Valo <kvalo@kernel.org>
+Link: https://lore.kernel.org/r/20220321225515.32113-1-dossche.niels@gmail.com
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/net/wireless/marvell/mwifiex/11h.c | 2 ++
+ 1 file changed, 2 insertions(+)
+
+diff --git a/drivers/net/wireless/marvell/mwifiex/11h.c b/drivers/net/wireless/marvell/mwifiex/11h.c
+index 238accfe4f41..c4176e357b22 100644
+--- a/drivers/net/wireless/marvell/mwifiex/11h.c
++++ b/drivers/net/wireless/marvell/mwifiex/11h.c
+@@ -303,5 +303,7 @@ void mwifiex_dfs_chan_sw_work_queue(struct work_struct *work)
+       mwifiex_dbg(priv->adapter, MSG,
+                   "indicating channel switch completion to kernel\n");
++      mutex_lock(&priv->wdev.mtx);
+       cfg80211_ch_switch_notify(priv->netdev, &priv->dfs_chandef);
++      mutex_unlock(&priv->wdev.mtx);
+ }
+-- 
+2.35.1
+
diff --git a/queue-5.4/nbd-fix-hung-on-disconnect-request-if-socket-is-clos.patch b/queue-5.4/nbd-fix-hung-on-disconnect-request-if-socket-is-clos.patch
new file mode 100644 (file)
index 0000000..abbd934
--- /dev/null
@@ -0,0 +1,63 @@
+From b7c9161be7084130b74eb21085a04a5840e74145 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Tue, 22 Mar 2022 16:06:39 +0800
+Subject: nbd: Fix hung on disconnect request if socket is closed before
+
+From: Xie Yongji <xieyongji@bytedance.com>
+
+[ Upstream commit 491bf8f236fdeec698fa6744993f1ecf3fafd1a5 ]
+
+When userspace closes the socket before sending a disconnect
+request, the following I/O requests will be blocked in
+wait_for_reconnect() until dead timeout. This will cause the
+following disconnect request also hung on blk_mq_quiesce_queue().
+That means we have no way to disconnect a nbd device if there
+are some I/O requests waiting for reconnecting until dead timeout.
+It's not expected. So let's wake up the thread waiting for
+reconnecting directly when a disconnect request is sent.
+
+Reported-by: Xu Jianhai <zero.xu@bytedance.com>
+Signed-off-by: Xie Yongji <xieyongji@bytedance.com>
+Reviewed-by: Josef Bacik <josef@toxicpanda.com>
+Link: https://lore.kernel.org/r/20220322080639.142-1-xieyongji@bytedance.com
+Signed-off-by: Jens Axboe <axboe@kernel.dk>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/block/nbd.c | 13 +++++++++----
+ 1 file changed, 9 insertions(+), 4 deletions(-)
+
+diff --git a/drivers/block/nbd.c b/drivers/block/nbd.c
+index 25e81b1a59a5..510e75435c43 100644
+--- a/drivers/block/nbd.c
++++ b/drivers/block/nbd.c
+@@ -865,11 +865,15 @@ static int wait_for_reconnect(struct nbd_device *nbd)
+       struct nbd_config *config = nbd->config;
+       if (!config->dead_conn_timeout)
+               return 0;
+-      if (test_bit(NBD_RT_DISCONNECTED, &config->runtime_flags))
++
++      if (!wait_event_timeout(config->conn_wait,
++                              test_bit(NBD_RT_DISCONNECTED,
++                                       &config->runtime_flags) ||
++                              atomic_read(&config->live_connections) > 0,
++                              config->dead_conn_timeout))
+               return 0;
+-      return wait_event_timeout(config->conn_wait,
+-                                atomic_read(&config->live_connections) > 0,
+-                                config->dead_conn_timeout) > 0;
++
++      return !test_bit(NBD_RT_DISCONNECTED, &config->runtime_flags);
+ }
+ static int nbd_handle_cmd(struct nbd_cmd *cmd, int index)
+@@ -2014,6 +2018,7 @@ static void nbd_disconnect_and_put(struct nbd_device *nbd)
+       mutex_lock(&nbd->config_lock);
+       nbd_disconnect(nbd);
+       sock_shutdown(nbd);
++      wake_up(&nbd->config->conn_wait);
+       /*
+        * Make sure recv thread has finished, so it does not drop the last
+        * config ref and try to destroy the workqueue from inside the work
+-- 
+2.35.1
+
diff --git a/queue-5.4/net-mlx5-fs-delete-the-fte-when-there-are-no-rules-a.patch b/queue-5.4/net-mlx5-fs-delete-the-fte-when-there-are-no-rules-a.patch
new file mode 100644 (file)
index 0000000..48f19ce
--- /dev/null
@@ -0,0 +1,52 @@
+From 2b7efac04ea8de519697a6c595e32d6884da088b Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Tue, 15 Mar 2022 11:23:40 +0000
+Subject: net/mlx5: fs, delete the FTE when there are no rules attached to it
+
+From: Mark Bloch <mbloch@nvidia.com>
+
+[ Upstream commit 7b0c6338597613f465d131bd939a51844a00455a ]
+
+When an FTE has no children is means all the rules where removed
+and the FTE can be deleted regardless of the dests_size value.
+While dests_size should be 0 when there are no children
+be extra careful not to leak memory or get firmware syndrome
+if the proper bookkeeping of dests_size wasn't done.
+
+Signed-off-by: Mark Bloch <mbloch@nvidia.com>
+Reviewed-by: Maor Gottlieb <maorg@nvidia.com>
+Signed-off-by: Saeed Mahameed <saeedm@nvidia.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/net/ethernet/mellanox/mlx5/core/fs_core.c | 10 +++++-----
+ 1 file changed, 5 insertions(+), 5 deletions(-)
+
+diff --git a/drivers/net/ethernet/mellanox/mlx5/core/fs_core.c b/drivers/net/ethernet/mellanox/mlx5/core/fs_core.c
+index 5baf2c666d29..8c8b68e7abb4 100644
+--- a/drivers/net/ethernet/mellanox/mlx5/core/fs_core.c
++++ b/drivers/net/ethernet/mellanox/mlx5/core/fs_core.c
+@@ -1937,16 +1937,16 @@ void mlx5_del_flow_rules(struct mlx5_flow_handle *handle)
+       down_write_ref_node(&fte->node, false);
+       for (i = handle->num_rules - 1; i >= 0; i--)
+               tree_remove_node(&handle->rule[i]->node, true);
+-      if (fte->dests_size) {
+-              if (fte->modify_mask)
+-                      modify_fte(fte);
+-              up_write_ref_node(&fte->node, false);
+-      } else if (list_empty(&fte->node.children)) {
++      if (list_empty(&fte->node.children)) {
+               del_hw_fte(&fte->node);
+               /* Avoid double call to del_hw_fte */
+               fte->node.del_hw_func = NULL;
+               up_write_ref_node(&fte->node, false);
+               tree_put_node(&fte->node, false);
++      } else if (fte->dests_size) {
++              if (fte->modify_mask)
++                      modify_fte(fte);
++              up_write_ref_node(&fte->node, false);
+       } else {
+               up_write_ref_node(&fte->node, false);
+       }
+-- 
+2.35.1
+
diff --git a/queue-5.4/net-phy-micrel-allow-probing-without-.driver_data.patch b/queue-5.4/net-phy-micrel-allow-probing-without-.driver_data.patch
new file mode 100644 (file)
index 0000000..008d054
--- /dev/null
@@ -0,0 +1,72 @@
+From 8be3fa3fe57f5f5c82b10137b201d79d41e9cd57 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Fri, 13 May 2022 08:46:12 -0300
+Subject: net: phy: micrel: Allow probing without .driver_data
+
+From: Fabio Estevam <festevam@denx.de>
+
+[ Upstream commit f2ef6f7539c68c6bd6c32323d8845ee102b7c450 ]
+
+Currently, if the .probe element is present in the phy_driver structure
+and the .driver_data is not, a NULL pointer dereference happens.
+
+Allow passing .probe without .driver_data by inserting NULL checks
+for priv->type.
+
+Signed-off-by: Fabio Estevam <festevam@denx.de>
+Reviewed-by: Andrew Lunn <andrew@lunn.ch>
+Link: https://lore.kernel.org/r/20220513114613.762810-1-festevam@gmail.com
+Signed-off-by: Jakub Kicinski <kuba@kernel.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/net/phy/micrel.c | 11 ++++++-----
+ 1 file changed, 6 insertions(+), 5 deletions(-)
+
+diff --git a/drivers/net/phy/micrel.c b/drivers/net/phy/micrel.c
+index 18cc5e4280e8..721153dcfd15 100644
+--- a/drivers/net/phy/micrel.c
++++ b/drivers/net/phy/micrel.c
+@@ -282,7 +282,7 @@ static int kszphy_config_reset(struct phy_device *phydev)
+               }
+       }
+-      if (priv->led_mode >= 0)
++      if (priv->type && priv->led_mode >= 0)
+               kszphy_setup_led(phydev, priv->type->led_mode_reg, priv->led_mode);
+       return 0;
+@@ -298,10 +298,10 @@ static int kszphy_config_init(struct phy_device *phydev)
+       type = priv->type;
+-      if (type->has_broadcast_disable)
++      if (type && type->has_broadcast_disable)
+               kszphy_broadcast_disable(phydev);
+-      if (type->has_nand_tree_disable)
++      if (type && type->has_nand_tree_disable)
+               kszphy_nand_tree_disable(phydev);
+       return kszphy_config_reset(phydev);
+@@ -939,7 +939,7 @@ static int kszphy_probe(struct phy_device *phydev)
+       priv->type = type;
+-      if (type->led_mode_reg) {
++      if (type && type->led_mode_reg) {
+               ret = of_property_read_u32(np, "micrel,led-mode",
+                               &priv->led_mode);
+               if (ret)
+@@ -960,7 +960,8 @@ static int kszphy_probe(struct phy_device *phydev)
+               unsigned long rate = clk_get_rate(clk);
+               bool rmii_ref_clk_sel_25_mhz;
+-              priv->rmii_ref_clk_sel = type->has_rmii_ref_clk_sel;
++              if (type)
++                      priv->rmii_ref_clk_sel = type->has_rmii_ref_clk_sel;
+               rmii_ref_clk_sel_25_mhz = of_property_read_bool(np,
+                               "micrel,rmii-reference-clock-select-25-mhz");
+-- 
+2.35.1
+
diff --git a/queue-5.4/net-remove-two-bug-from-skb_checksum_help.patch b/queue-5.4/net-remove-two-bug-from-skb_checksum_help.patch
new file mode 100644 (file)
index 0000000..e2fc781
--- /dev/null
@@ -0,0 +1,49 @@
+From 64c4b2f8a29a00a5ad19daf7a28770d1c8c7a5f4 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Mon, 9 May 2022 20:57:40 -0700
+Subject: net: remove two BUG() from skb_checksum_help()
+
+From: Eric Dumazet <edumazet@google.com>
+
+[ Upstream commit d7ea0d9df2a6265b2b180d17ebc64b38105968fc ]
+
+I have a syzbot report that managed to get a crash in skb_checksum_help()
+
+If syzbot can trigger these BUG(), it makes sense to replace
+them with more friendly WARN_ON_ONCE() since skb_checksum_help()
+can instead return an error code.
+
+Note that syzbot will still crash there, until real bug is fixed.
+
+Signed-off-by: Eric Dumazet <edumazet@google.com>
+Signed-off-by: David S. Miller <davem@davemloft.net>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ net/core/dev.c | 8 ++++++--
+ 1 file changed, 6 insertions(+), 2 deletions(-)
+
+diff --git a/net/core/dev.c b/net/core/dev.c
+index a03036456221..8fd0a0591e89 100644
+--- a/net/core/dev.c
++++ b/net/core/dev.c
+@@ -2857,11 +2857,15 @@ int skb_checksum_help(struct sk_buff *skb)
+       }
+       offset = skb_checksum_start_offset(skb);
+-      BUG_ON(offset >= skb_headlen(skb));
++      ret = -EINVAL;
++      if (WARN_ON_ONCE(offset >= skb_headlen(skb)))
++              goto out;
++
+       csum = skb_checksum(skb, offset, skb->len - offset, 0);
+       offset += skb->csum_offset;
+-      BUG_ON(offset + sizeof(__sum16) > skb_headlen(skb));
++      if (WARN_ON_ONCE(offset + sizeof(__sum16) > skb_headlen(skb)))
++              goto out;
+       if (skb_cloned(skb) &&
+           !skb_clone_writable(skb, offset + sizeof(__sum16))) {
+-- 
+2.35.1
+
diff --git a/queue-5.4/net-smc-postpone-sk_refcnt-increment-in-connect.patch b/queue-5.4/net-smc-postpone-sk_refcnt-increment-in-connect.patch
new file mode 100644 (file)
index 0000000..ee7163e
--- /dev/null
@@ -0,0 +1,42 @@
+From 270f2461272b0e487e122788174e730c0353c700 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Mon, 23 May 2022 12:57:07 +0800
+Subject: net/smc: postpone sk_refcnt increment in connect()
+
+From: liuyacan <liuyacan@corp.netease.com>
+
+[ Upstream commit 75c1edf23b95a9c66923d9269d8e86e4dbde151f ]
+
+Same trigger condition as commit 86434744. When setsockopt runs
+in parallel to a connect(), and switch the socket into fallback
+mode. Then the sk_refcnt is incremented in smc_connect(), but
+its state stay in SMC_INIT (NOT SMC_ACTIVE). This cause the
+corresponding sk_refcnt decrement in __smc_release() will not be
+performed.
+
+Fixes: 86434744fedf ("net/smc: add fallback check to connect()")
+Signed-off-by: liuyacan <liuyacan@corp.netease.com>
+Signed-off-by: David S. Miller <davem@davemloft.net>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ net/smc/af_smc.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/net/smc/af_smc.c b/net/smc/af_smc.c
+index a5a8cca46bd5..394491692a07 100644
+--- a/net/smc/af_smc.c
++++ b/net/smc/af_smc.c
+@@ -877,9 +877,9 @@ static int smc_connect(struct socket *sock, struct sockaddr *addr,
+       if (rc && rc != -EINPROGRESS)
+               goto out;
+-      sock_hold(&smc->sk); /* sock put in passive closing */
+       if (smc->use_fallback)
+               goto out;
++      sock_hold(&smc->sk); /* sock put in passive closing */
+       if (flags & O_NONBLOCK) {
+               if (schedule_work(&smc->connect_work))
+                       smc->connect_nonblock = 1;
+-- 
+2.35.1
+
diff --git a/queue-5.4/nfc-hci-fix-sleep-in-atomic-context-bugs-in-nfc_hci_.patch b/queue-5.4/nfc-hci-fix-sleep-in-atomic-context-bugs-in-nfc_hci_.patch
new file mode 100644 (file)
index 0000000..be2c562
--- /dev/null
@@ -0,0 +1,117 @@
+From 2d5111afae88e6fd99642997522e0f0d9e94bcf0 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Wed, 18 May 2022 19:57:33 +0800
+Subject: NFC: hci: fix sleep in atomic context bugs in nfc_hci_hcp_message_tx
+
+From: Duoming Zhou <duoming@zju.edu.cn>
+
+[ Upstream commit b413b0cb008646e9f24ce5253cb3cf7ee217aff6 ]
+
+There are sleep in atomic context bugs when the request to secure
+element of st21nfca is timeout. The root cause is that kzalloc and
+alloc_skb with GFP_KERNEL parameter and mutex_lock are called in
+st21nfca_se_wt_timeout which is a timer handler. The call tree shows
+the execution paths that could lead to bugs:
+
+   (Interrupt context)
+st21nfca_se_wt_timeout
+  nfc_hci_send_event
+    nfc_hci_hcp_message_tx
+      kzalloc(..., GFP_KERNEL) //may sleep
+      alloc_skb(..., GFP_KERNEL) //may sleep
+      mutex_lock() //may sleep
+
+This patch moves the operations that may sleep into a work item.
+The work item will run in another kernel thread which is in
+process context to execute the bottom half of the interrupt.
+So it could prevent atomic context from sleeping.
+
+Fixes: 2130fb97fecf ("NFC: st21nfca: Adding support for secure element")
+Signed-off-by: Duoming Zhou <duoming@zju.edu.cn>
+Reviewed-by: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
+Link: https://lore.kernel.org/r/20220518115733.62111-1-duoming@zju.edu.cn
+Signed-off-by: Jakub Kicinski <kuba@kernel.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/nfc/st21nfca/se.c       | 17 ++++++++++++++---
+ drivers/nfc/st21nfca/st21nfca.h |  1 +
+ 2 files changed, 15 insertions(+), 3 deletions(-)
+
+diff --git a/drivers/nfc/st21nfca/se.c b/drivers/nfc/st21nfca/se.c
+index a7ab6dab0f32..5256195f313b 100644
+--- a/drivers/nfc/st21nfca/se.c
++++ b/drivers/nfc/st21nfca/se.c
+@@ -241,7 +241,7 @@ int st21nfca_hci_se_io(struct nfc_hci_dev *hdev, u32 se_idx,
+ }
+ EXPORT_SYMBOL(st21nfca_hci_se_io);
+-static void st21nfca_se_wt_timeout(struct timer_list *t)
++static void st21nfca_se_wt_work(struct work_struct *work)
+ {
+       /*
+        * No answer from the secure element
+@@ -254,8 +254,9 @@ static void st21nfca_se_wt_timeout(struct timer_list *t)
+        */
+       /* hardware reset managed through VCC_UICC_OUT power supply */
+       u8 param = 0x01;
+-      struct st21nfca_hci_info *info = from_timer(info, t,
+-                                                  se_info.bwi_timer);
++      struct st21nfca_hci_info *info = container_of(work,
++                                              struct st21nfca_hci_info,
++                                              se_info.timeout_work);
+       pr_debug("\n");
+@@ -273,6 +274,13 @@ static void st21nfca_se_wt_timeout(struct timer_list *t)
+       info->se_info.cb(info->se_info.cb_context, NULL, 0, -ETIME);
+ }
++static void st21nfca_se_wt_timeout(struct timer_list *t)
++{
++      struct st21nfca_hci_info *info = from_timer(info, t, se_info.bwi_timer);
++
++      schedule_work(&info->se_info.timeout_work);
++}
++
+ static void st21nfca_se_activation_timeout(struct timer_list *t)
+ {
+       struct st21nfca_hci_info *info = from_timer(info, t,
+@@ -365,6 +373,7 @@ int st21nfca_apdu_reader_event_received(struct nfc_hci_dev *hdev,
+       switch (event) {
+       case ST21NFCA_EVT_TRANSMIT_DATA:
+               del_timer_sync(&info->se_info.bwi_timer);
++              cancel_work_sync(&info->se_info.timeout_work);
+               info->se_info.bwi_active = false;
+               r = nfc_hci_send_event(hdev, ST21NFCA_DEVICE_MGNT_GATE,
+                               ST21NFCA_EVT_SE_END_OF_APDU_TRANSFER, NULL, 0);
+@@ -394,6 +403,7 @@ void st21nfca_se_init(struct nfc_hci_dev *hdev)
+       struct st21nfca_hci_info *info = nfc_hci_get_clientdata(hdev);
+       init_completion(&info->se_info.req_completion);
++      INIT_WORK(&info->se_info.timeout_work, st21nfca_se_wt_work);
+       /* initialize timers */
+       timer_setup(&info->se_info.bwi_timer, st21nfca_se_wt_timeout, 0);
+       info->se_info.bwi_active = false;
+@@ -421,6 +431,7 @@ void st21nfca_se_deinit(struct nfc_hci_dev *hdev)
+       if (info->se_info.se_active)
+               del_timer_sync(&info->se_info.se_active_timer);
++      cancel_work_sync(&info->se_info.timeout_work);
+       info->se_info.bwi_active = false;
+       info->se_info.se_active = false;
+ }
+diff --git a/drivers/nfc/st21nfca/st21nfca.h b/drivers/nfc/st21nfca/st21nfca.h
+index 5e0de0fef1d4..0e4a93d11efb 100644
+--- a/drivers/nfc/st21nfca/st21nfca.h
++++ b/drivers/nfc/st21nfca/st21nfca.h
+@@ -141,6 +141,7 @@ struct st21nfca_se_info {
+       se_io_cb_t cb;
+       void *cb_context;
++      struct work_struct timeout_work;
+ };
+ struct st21nfca_hci_info {
+-- 
+2.35.1
+
diff --git a/queue-5.4/nfc-null-out-the-dev-rfkill-to-prevent-uaf.patch b/queue-5.4/nfc-null-out-the-dev-rfkill-to-prevent-uaf.patch
new file mode 100644 (file)
index 0000000..d4ff638
--- /dev/null
@@ -0,0 +1,150 @@
+From 21b108c48bed65b7afed9c19b41e483319020b72 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Tue, 12 Apr 2022 13:32:08 +0800
+Subject: NFC: NULL out the dev->rfkill to prevent UAF
+
+From: Lin Ma <linma@zju.edu.cn>
+
+[ Upstream commit 1b0e81416a24d6e9b8c2341e22e8bf48f8b8bfc9 ]
+
+Commit 3e3b5dfcd16a ("NFC: reorder the logic in nfc_{un,}register_device")
+assumes the device_is_registered() in function nfc_dev_up() will help
+to check when the rfkill is unregistered. However, this check only
+take effect when device_del(&dev->dev) is done in nfc_unregister_device().
+Hence, the rfkill object is still possible be dereferenced.
+
+The crash trace in latest kernel (5.18-rc2):
+
+[   68.760105] ==================================================================
+[   68.760330] BUG: KASAN: use-after-free in __lock_acquire+0x3ec1/0x6750
+[   68.760756] Read of size 8 at addr ffff888009c93018 by task fuzz/313
+[   68.760756]
+[   68.760756] CPU: 0 PID: 313 Comm: fuzz Not tainted 5.18.0-rc2 #4
+[   68.760756] Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS rel-1.14.0-0-g155821a1990b-prebuilt.qemu.org 04/01/2014
+[   68.760756] Call Trace:
+[   68.760756]  <TASK>
+[   68.760756]  dump_stack_lvl+0x57/0x7d
+[   68.760756]  print_report.cold+0x5e/0x5db
+[   68.760756]  ? __lock_acquire+0x3ec1/0x6750
+[   68.760756]  kasan_report+0xbe/0x1c0
+[   68.760756]  ? __lock_acquire+0x3ec1/0x6750
+[   68.760756]  __lock_acquire+0x3ec1/0x6750
+[   68.760756]  ? lockdep_hardirqs_on_prepare+0x410/0x410
+[   68.760756]  ? register_lock_class+0x18d0/0x18d0
+[   68.760756]  lock_acquire+0x1ac/0x4f0
+[   68.760756]  ? rfkill_blocked+0xe/0x60
+[   68.760756]  ? lockdep_hardirqs_on_prepare+0x410/0x410
+[   68.760756]  ? mutex_lock_io_nested+0x12c0/0x12c0
+[   68.760756]  ? nla_get_range_signed+0x540/0x540
+[   68.760756]  ? _raw_spin_lock_irqsave+0x4e/0x50
+[   68.760756]  _raw_spin_lock_irqsave+0x39/0x50
+[   68.760756]  ? rfkill_blocked+0xe/0x60
+[   68.760756]  rfkill_blocked+0xe/0x60
+[   68.760756]  nfc_dev_up+0x84/0x260
+[   68.760756]  nfc_genl_dev_up+0x90/0xe0
+[   68.760756]  genl_family_rcv_msg_doit+0x1f4/0x2f0
+[   68.760756]  ? genl_family_rcv_msg_attrs_parse.constprop.0+0x230/0x230
+[   68.760756]  ? security_capable+0x51/0x90
+[   68.760756]  genl_rcv_msg+0x280/0x500
+[   68.760756]  ? genl_get_cmd+0x3c0/0x3c0
+[   68.760756]  ? lock_acquire+0x1ac/0x4f0
+[   68.760756]  ? nfc_genl_dev_down+0xe0/0xe0
+[   68.760756]  ? lockdep_hardirqs_on_prepare+0x410/0x410
+[   68.760756]  netlink_rcv_skb+0x11b/0x340
+[   68.760756]  ? genl_get_cmd+0x3c0/0x3c0
+[   68.760756]  ? netlink_ack+0x9c0/0x9c0
+[   68.760756]  ? netlink_deliver_tap+0x136/0xb00
+[   68.760756]  genl_rcv+0x1f/0x30
+[   68.760756]  netlink_unicast+0x430/0x710
+[   68.760756]  ? memset+0x20/0x40
+[   68.760756]  ? netlink_attachskb+0x740/0x740
+[   68.760756]  ? __build_skb_around+0x1f4/0x2a0
+[   68.760756]  netlink_sendmsg+0x75d/0xc00
+[   68.760756]  ? netlink_unicast+0x710/0x710
+[   68.760756]  ? netlink_unicast+0x710/0x710
+[   68.760756]  sock_sendmsg+0xdf/0x110
+[   68.760756]  __sys_sendto+0x19e/0x270
+[   68.760756]  ? __ia32_sys_getpeername+0xa0/0xa0
+[   68.760756]  ? fd_install+0x178/0x4c0
+[   68.760756]  ? fd_install+0x195/0x4c0
+[   68.760756]  ? kernel_fpu_begin_mask+0x1c0/0x1c0
+[   68.760756]  __x64_sys_sendto+0xd8/0x1b0
+[   68.760756]  ? lockdep_hardirqs_on+0xbf/0x130
+[   68.760756]  ? syscall_enter_from_user_mode+0x1d/0x50
+[   68.760756]  do_syscall_64+0x3b/0x90
+[   68.760756]  entry_SYSCALL_64_after_hwframe+0x44/0xae
+[   68.760756] RIP: 0033:0x7f67fb50e6b3
+...
+[   68.760756] RSP: 002b:00007f67fa91fe90 EFLAGS: 00000293 ORIG_RAX: 000000000000002c
+[   68.760756] RAX: ffffffffffffffda RBX: 0000000000000000 RCX: 00007f67fb50e6b3
+[   68.760756] RDX: 000000000000001c RSI: 0000559354603090 RDI: 0000000000000003
+[   68.760756] RBP: 00007f67fa91ff00 R08: 00007f67fa91fedc R09: 000000000000000c
+[   68.760756] R10: 0000000000000000 R11: 0000000000000293 R12: 00007ffe824d496e
+[   68.760756] R13: 00007ffe824d496f R14: 00007f67fa120000 R15: 0000000000000003
+
+[   68.760756]  </TASK>
+[   68.760756]
+[   68.760756] Allocated by task 279:
+[   68.760756]  kasan_save_stack+0x1e/0x40
+[   68.760756]  __kasan_kmalloc+0x81/0xa0
+[   68.760756]  rfkill_alloc+0x7f/0x280
+[   68.760756]  nfc_register_device+0xa3/0x1a0
+[   68.760756]  nci_register_device+0x77a/0xad0
+[   68.760756]  nfcmrvl_nci_register_dev+0x20b/0x2c0
+[   68.760756]  nfcmrvl_nci_uart_open+0xf2/0x1dd
+[   68.760756]  nci_uart_tty_ioctl+0x2c3/0x4a0
+[   68.760756]  tty_ioctl+0x764/0x1310
+[   68.760756]  __x64_sys_ioctl+0x122/0x190
+[   68.760756]  do_syscall_64+0x3b/0x90
+[   68.760756]  entry_SYSCALL_64_after_hwframe+0x44/0xae
+[   68.760756]
+[   68.760756] Freed by task 314:
+[   68.760756]  kasan_save_stack+0x1e/0x40
+[   68.760756]  kasan_set_track+0x21/0x30
+[   68.760756]  kasan_set_free_info+0x20/0x30
+[   68.760756]  __kasan_slab_free+0x108/0x170
+[   68.760756]  kfree+0xb0/0x330
+[   68.760756]  device_release+0x96/0x200
+[   68.760756]  kobject_put+0xf9/0x1d0
+[   68.760756]  nfc_unregister_device+0x77/0x190
+[   68.760756]  nfcmrvl_nci_unregister_dev+0x88/0xd0
+[   68.760756]  nci_uart_tty_close+0xdf/0x180
+[   68.760756]  tty_ldisc_kill+0x73/0x110
+[   68.760756]  tty_ldisc_hangup+0x281/0x5b0
+[   68.760756]  __tty_hangup.part.0+0x431/0x890
+[   68.760756]  tty_release+0x3a8/0xc80
+[   68.760756]  __fput+0x1f0/0x8c0
+[   68.760756]  task_work_run+0xc9/0x170
+[   68.760756]  exit_to_user_mode_prepare+0x194/0x1a0
+[   68.760756]  syscall_exit_to_user_mode+0x19/0x50
+[   68.760756]  do_syscall_64+0x48/0x90
+[   68.760756]  entry_SYSCALL_64_after_hwframe+0x44/0xae
+
+This patch just add the null out of dev->rfkill to make sure such
+dereference cannot happen. This is safe since the device_lock() already
+protect the check/write from data race.
+
+Fixes: 3e3b5dfcd16a ("NFC: reorder the logic in nfc_{un,}register_device")
+Signed-off-by: Lin Ma <linma@zju.edu.cn>
+Reviewed-by: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
+Signed-off-by: David S. Miller <davem@davemloft.net>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ net/nfc/core.c | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/net/nfc/core.c b/net/nfc/core.c
+index 63701a980ee1..2d4729d1f0eb 100644
+--- a/net/nfc/core.c
++++ b/net/nfc/core.c
+@@ -1159,6 +1159,7 @@ void nfc_unregister_device(struct nfc_dev *dev)
+       if (dev->rfkill) {
+               rfkill_unregister(dev->rfkill);
+               rfkill_destroy(dev->rfkill);
++              dev->rfkill = NULL;
+       }
+       dev->shutting_down = true;
+       device_unlock(&dev->dev);
+-- 
+2.35.1
+
diff --git a/queue-5.4/nfs-do-not-report-eintr-erestartsys-as-mapping-error.patch b/queue-5.4/nfs-do-not-report-eintr-erestartsys-as-mapping-error.patch
new file mode 100644 (file)
index 0000000..9d3cb06
--- /dev/null
@@ -0,0 +1,36 @@
+From cfd9444b121bbd53a607d203ea4ac1e974e75f1c Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Sat, 14 May 2022 10:27:00 -0400
+Subject: NFS: Do not report EINTR/ERESTARTSYS as mapping errors
+
+From: Trond Myklebust <trond.myklebust@hammerspace.com>
+
+[ Upstream commit cea9ba7239dcc84175041174304c6cdeae3226e5 ]
+
+If the attempt to flush data was interrupted due to a local signal, then
+just requeue the writes back for I/O.
+
+Fixes: 6fbda89b257f ("NFS: Replace custom error reporting mechanism with generic one")
+Signed-off-by: Trond Myklebust <trond.myklebust@hammerspace.com>
+Signed-off-by: Anna Schumaker <Anna.Schumaker@Netapp.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ fs/nfs/write.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/fs/nfs/write.c b/fs/nfs/write.c
+index 30d8e7bc1cef..ecdd79a55840 100644
+--- a/fs/nfs/write.c
++++ b/fs/nfs/write.c
+@@ -1429,7 +1429,7 @@ static void nfs_async_write_error(struct list_head *head, int error)
+       while (!list_empty(head)) {
+               req = nfs_list_entry(head->next);
+               nfs_list_remove_request(req);
+-              if (nfs_error_is_fatal(error))
++              if (nfs_error_is_fatal_on_server(error))
+                       nfs_write_error(req, error);
+               else
+                       nfs_redirty_request(req);
+-- 
+2.35.1
+
diff --git a/queue-5.4/nfs-do-not-report-flush-errors-in-nfs_write_end.patch b/queue-5.4/nfs-do-not-report-flush-errors-in-nfs_write_end.patch
new file mode 100644 (file)
index 0000000..31be9f5
--- /dev/null
@@ -0,0 +1,43 @@
+From 9a86baf54b9c75450b75852dbf1615d2665531c9 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Sat, 14 May 2022 10:27:03 -0400
+Subject: NFS: Do not report flush errors in nfs_write_end()
+
+From: Trond Myklebust <trond.myklebust@hammerspace.com>
+
+[ Upstream commit d95b26650e86175e4a97698d89bc1626cd1df0c6 ]
+
+If we do flush cached writebacks in nfs_write_end() due to the imminent
+expiration of an RPCSEC_GSS session, then we should defer reporting any
+resulting errors until the calls to file_check_and_advance_wb_err() in
+nfs_file_write() and nfs_file_fsync().
+
+Fixes: 6fbda89b257f ("NFS: Replace custom error reporting mechanism with generic one")
+Signed-off-by: Trond Myklebust <trond.myklebust@hammerspace.com>
+Signed-off-by: Anna Schumaker <Anna.Schumaker@Netapp.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ fs/nfs/file.c | 7 ++-----
+ 1 file changed, 2 insertions(+), 5 deletions(-)
+
+diff --git a/fs/nfs/file.c b/fs/nfs/file.c
+index 73415970af38..3233da79d49a 100644
+--- a/fs/nfs/file.c
++++ b/fs/nfs/file.c
+@@ -394,11 +394,8 @@ static int nfs_write_end(struct file *file, struct address_space *mapping,
+               return status;
+       NFS_I(mapping->host)->write_io += copied;
+-      if (nfs_ctx_key_to_expire(ctx, mapping->host)) {
+-              status = nfs_wb_all(mapping->host);
+-              if (status < 0)
+-                      return status;
+-      }
++      if (nfs_ctx_key_to_expire(ctx, mapping->host))
++              nfs_wb_all(mapping->host);
+       return copied;
+ }
+-- 
+2.35.1
+
diff --git a/queue-5.4/nfs-don-t-report-errors-from-nfs_pageio_complete-mor.patch b/queue-5.4/nfs-don-t-report-errors-from-nfs_pageio_complete-mor.patch
new file mode 100644 (file)
index 0000000..99f87e8
--- /dev/null
@@ -0,0 +1,52 @@
+From 79cefa812b68dca272257a48df272a05db6c0d91 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Sat, 14 May 2022 10:27:04 -0400
+Subject: NFS: Don't report errors from nfs_pageio_complete() more than once
+
+From: Trond Myklebust <trond.myklebust@hammerspace.com>
+
+[ Upstream commit c5e483b77cc2edb318da152abe07e33006b975fd ]
+
+Since errors from nfs_pageio_complete() are already being reported
+through nfs_async_write_error(), we should not be returning them to the
+callers of do_writepages() as well. They will end up being reported
+through the generic mechanism instead.
+
+Fixes: 6fbda89b257f ("NFS: Replace custom error reporting mechanism with generic one")
+Signed-off-by: Trond Myklebust <trond.myklebust@hammerspace.com>
+Signed-off-by: Anna Schumaker <Anna.Schumaker@Netapp.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ fs/nfs/write.c | 9 +--------
+ 1 file changed, 1 insertion(+), 8 deletions(-)
+
+diff --git a/fs/nfs/write.c b/fs/nfs/write.c
+index ecdd79a55840..10ce264a6456 100644
+--- a/fs/nfs/write.c
++++ b/fs/nfs/write.c
+@@ -692,11 +692,7 @@ static int nfs_writepage_locked(struct page *page,
+       err = nfs_do_writepage(page, wbc, &pgio);
+       pgio.pg_error = 0;
+       nfs_pageio_complete(&pgio);
+-      if (err < 0)
+-              return err;
+-      if (nfs_error_is_fatal(pgio.pg_error))
+-              return pgio.pg_error;
+-      return 0;
++      return err;
+ }
+ int nfs_writepage(struct page *page, struct writeback_control *wbc)
+@@ -747,9 +743,6 @@ int nfs_writepages(struct address_space *mapping, struct writeback_control *wbc)
+       if (err < 0)
+               goto out_err;
+-      err = pgio.pg_error;
+-      if (nfs_error_is_fatal(err))
+-              goto out_err;
+       return 0;
+ out_err:
+       return err;
+-- 
+2.35.1
+
diff --git a/queue-5.4/nfsv4-pnfs-do-not-fail-i-o-when-we-fail-to-allocate-.patch b/queue-5.4/nfsv4-pnfs-do-not-fail-i-o-when-we-fail-to-allocate-.patch
new file mode 100644 (file)
index 0000000..e1172cb
--- /dev/null
@@ -0,0 +1,47 @@
+From 1d4bd79bd5267378f98ce9d598d06869d999f940 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Sat, 14 May 2022 10:08:11 -0400
+Subject: NFSv4/pNFS: Do not fail I/O when we fail to allocate the pNFS layout
+
+From: Trond Myklebust <trond.myklebust@hammerspace.com>
+
+[ Upstream commit 3764a17e31d579cf9b4bd0a69894b577e8d75702 ]
+
+Commit 587f03deb69b caused pnfs_update_layout() to stop returning ENOMEM
+when the memory allocation fails, and hence causes it to fall back to
+trying to do I/O through the MDS. There is no guarantee that this will
+fare any better. If we're failing the pNFS layout allocation, then we
+should just redirty the page and retry later.
+
+Reported-by: Olga Kornievskaia <aglo@umich.edu>
+Fixes: 587f03deb69b ("pnfs: refactor send_layoutget")
+Signed-off-by: Trond Myklebust <trond.myklebust@hammerspace.com>
+Signed-off-by: Anna Schumaker <Anna.Schumaker@Netapp.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ fs/nfs/pnfs.c | 2 ++
+ 1 file changed, 2 insertions(+)
+
+diff --git a/fs/nfs/pnfs.c b/fs/nfs/pnfs.c
+index 0471b6e0da16..2fe48982fbb4 100644
+--- a/fs/nfs/pnfs.c
++++ b/fs/nfs/pnfs.c
+@@ -1961,6 +1961,7 @@ pnfs_update_layout(struct inode *ino,
+       lo = pnfs_find_alloc_layout(ino, ctx, gfp_flags);
+       if (lo == NULL) {
+               spin_unlock(&ino->i_lock);
++              lseg = ERR_PTR(-ENOMEM);
+               trace_pnfs_update_layout(ino, pos, count, iomode, lo, lseg,
+                                PNFS_UPDATE_LAYOUT_NOMEM);
+               goto out;
+@@ -2090,6 +2091,7 @@ pnfs_update_layout(struct inode *ino,
+       lgp = pnfs_alloc_init_layoutget_args(ino, ctx, &stateid, &arg, gfp_flags);
+       if (!lgp) {
++              lseg = ERR_PTR(-ENOMEM);
+               trace_pnfs_update_layout(ino, pos, count, iomode, lo, NULL,
+                                        PNFS_UPDATE_LAYOUT_NOMEM);
+               nfs_layoutget_end(lo);
+-- 
+2.35.1
+
diff --git a/queue-5.4/nl80211-show-ssid-for-p2p_go-interfaces.patch b/queue-5.4/nl80211-show-ssid-for-p2p_go-interfaces.patch
new file mode 100644 (file)
index 0000000..70e3fe3
--- /dev/null
@@ -0,0 +1,37 @@
+From f5a44f0440a9b7b02ff804d50df42164792682eb Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Fri, 18 Mar 2022 13:46:57 +0100
+Subject: nl80211: show SSID for P2P_GO interfaces
+
+From: Johannes Berg <johannes.berg@intel.com>
+
+[ Upstream commit a75971bc2b8453630e9f85e0beaa4da8db8277a3 ]
+
+There's no real reason not to send the SSID to userspace
+when it requests information about P2P_GO, it is, in that
+respect, exactly the same as AP interfaces. Fix that.
+
+Fixes: 44905265bc15 ("nl80211: don't expose wdev->ssid for most interfaces")
+Signed-off-by: Johannes Berg <johannes.berg@intel.com>
+Link: https://lore.kernel.org/r/20220318134656.14354ae223f0.Ia25e85a512281b92e1645d4160766a4b1a471597@changeid
+Signed-off-by: Johannes Berg <johannes.berg@intel.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ net/wireless/nl80211.c | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/net/wireless/nl80211.c b/net/wireless/nl80211.c
+index d3e2b97d5d05..8459f5b6002e 100644
+--- a/net/wireless/nl80211.c
++++ b/net/wireless/nl80211.c
+@@ -3240,6 +3240,7 @@ static int nl80211_send_iface(struct sk_buff *msg, u32 portid, u32 seq, int flag
+       wdev_lock(wdev);
+       switch (wdev->iftype) {
+       case NL80211_IFTYPE_AP:
++      case NL80211_IFTYPE_P2P_GO:
+               if (wdev->ssid_len &&
+                   nla_put(msg, NL80211_ATTR_SSID, wdev->ssid_len, wdev->ssid))
+                       goto nla_put_failure_locked;
+-- 
+2.35.1
+
diff --git a/queue-5.4/nvdimm-allow-overwrite-in-the-presence-of-disabled-d.patch b/queue-5.4/nvdimm-allow-overwrite-in-the-presence-of-disabled-d.patch
new file mode 100644 (file)
index 0000000..db46c03
--- /dev/null
@@ -0,0 +1,50 @@
+From 80ee999726acc8190561e4e7e8ff977d445bc218 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Thu, 28 Apr 2022 15:47:46 -0700
+Subject: nvdimm: Allow overwrite in the presence of disabled dimms
+
+From: Dan Williams <dan.j.williams@intel.com>
+
+[ Upstream commit bb7bf697fed58eae9d3445944e457ab0de4da54f ]
+
+It is not clear why the original implementation of overwrite support
+required the dimm driver to be active before overwrite could proceed. In
+fact that can lead to cases where the kernel retains an invalid cached
+copy of the labels from before the overwrite. Unfortunately the kernel
+has not only allowed that case, but enforced it.
+
+Going forward, allow for overwrite to happen while the label area is
+offline, and follow-on with updates to 'ndctl sanitize-dimm --overwrite'
+to trigger the label area invalidation by default.
+
+Cc: Vishal Verma <vishal.l.verma@intel.com>
+Cc: Dave Jiang <dave.jiang@intel.com>
+Cc: Ira Weiny <ira.weiny@intel.com>
+Cc: Jeff Moyer <jmoyer@redhat.com>
+Reported-by: Krzysztof Kensicki <krzysztof.kensicki@intel.com>
+Fixes: 7d988097c546 ("acpi/nfit, libnvdimm/security: Add security DSM overwrite support")
+Signed-off-by: Dan Williams <dan.j.williams@intel.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/nvdimm/security.c | 5 -----
+ 1 file changed, 5 deletions(-)
+
+diff --git a/drivers/nvdimm/security.c b/drivers/nvdimm/security.c
+index 35d265014e1e..0e23d8c27792 100644
+--- a/drivers/nvdimm/security.c
++++ b/drivers/nvdimm/security.c
+@@ -379,11 +379,6 @@ static int security_overwrite(struct nvdimm *nvdimm, unsigned int keyid)
+                       || !nvdimm->sec.flags)
+               return -EOPNOTSUPP;
+-      if (dev->driver == NULL) {
+-              dev_dbg(dev, "Unable to overwrite while DIMM active.\n");
+-              return -EINVAL;
+-      }
+-
+       rc = check_security_state(nvdimm);
+       if (rc)
+               return rc;
+-- 
+2.35.1
+
diff --git a/queue-5.4/nvme-pci-fix-a-null-pointer-dereference-in-nvme_allo.patch b/queue-5.4/nvme-pci-fix-a-null-pointer-dereference-in-nvme_allo.patch
new file mode 100644 (file)
index 0000000..3ef7d53
--- /dev/null
@@ -0,0 +1,45 @@
+From 748a4724e7890a9e79d6c269bec7ada34fe4a7d7 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Fri, 22 Apr 2022 14:40:32 +0000
+Subject: nvme-pci: fix a NULL pointer dereference in nvme_alloc_admin_tags
+
+From: Smith, Kyle Miller (Nimble Kernel) <kyles@hpe.com>
+
+[ Upstream commit da42761181627e9bdc37d18368b827948a583929 ]
+
+In nvme_alloc_admin_tags, the admin_q can be set to an error (typically
+-ENOMEM) if the blk_mq_init_queue call fails to set up the queue, which
+is checked immediately after the call. However, when we return the error
+message up the stack, to nvme_reset_work the error takes us to
+nvme_remove_dead_ctrl()
+  nvme_dev_disable()
+   nvme_suspend_queue(&dev->queues[0]).
+
+Here, we only check that the admin_q is non-NULL, rather than not
+an error or NULL, and begin quiescing a queue that never existed, leading
+to bad / NULL pointer dereference.
+
+Signed-off-by: Kyle Smith <kyles@hpe.com>
+Reviewed-by: Chaitanya Kulkarni <kch@nvidia.com>
+Reviewed-by: Hannes Reinecke <hare@suse.de>
+Signed-off-by: Christoph Hellwig <hch@lst.de>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/nvme/host/pci.c | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/drivers/nvme/host/pci.c b/drivers/nvme/host/pci.c
+index af516c35afe6..10fe7a7a2163 100644
+--- a/drivers/nvme/host/pci.c
++++ b/drivers/nvme/host/pci.c
+@@ -1674,6 +1674,7 @@ static int nvme_alloc_admin_tags(struct nvme_dev *dev)
+               dev->ctrl.admin_q = blk_mq_init_queue(&dev->admin_tagset);
+               if (IS_ERR(dev->ctrl.admin_q)) {
+                       blk_mq_free_tag_set(&dev->admin_tagset);
++                      dev->ctrl.admin_q = NULL;
+                       return -ENOMEM;
+               }
+               if (!blk_get_queue(dev->ctrl.admin_q)) {
+-- 
+2.35.1
+
diff --git a/queue-5.4/of-overlay-do-not-break-notify-on-notify_-ok-stop.patch b/queue-5.4/of-overlay-do-not-break-notify-on-notify_-ok-stop.patch
new file mode 100644 (file)
index 0000000..c0789db
--- /dev/null
@@ -0,0 +1,43 @@
+From d0013a96d1f5f83f25759f7499bbe137c7594fb7 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Wed, 20 Apr 2022 15:02:05 +0200
+Subject: of: overlay: do not break notify on NOTIFY_{OK|STOP}
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+From: Nuno Sá <nuno.sa@analog.com>
+
+[ Upstream commit 5f756a2eaa4436d7d3dc1e040147f5e992ae34b5 ]
+
+We should not break overlay notifications on NOTIFY_{OK|STOP}
+otherwise we might break on the first fragment. We should only stop
+notifications if a *real* errno is returned by one of the listeners.
+
+Fixes: a1d19bd4cf1fe ("of: overlay: pr_err from return NOTIFY_OK to overlay apply/remove")
+Signed-off-by: Nuno Sá <nuno.sa@analog.com>
+Signed-off-by: Rob Herring <robh@kernel.org>
+Link: https://lore.kernel.org/r/20220420130205.89435-1-nuno.sa@analog.com
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/of/overlay.c | 4 +---
+ 1 file changed, 1 insertion(+), 3 deletions(-)
+
+diff --git a/drivers/of/overlay.c b/drivers/of/overlay.c
+index 1688f576ee8a..8420ef42d89e 100644
+--- a/drivers/of/overlay.c
++++ b/drivers/of/overlay.c
+@@ -170,9 +170,7 @@ static int overlay_notify(struct overlay_changeset *ovcs,
+               ret = blocking_notifier_call_chain(&overlay_notify_chain,
+                                                  action, &nd);
+-              if (ret == NOTIFY_OK || ret == NOTIFY_STOP)
+-                      return 0;
+-              if (ret) {
++              if (notifier_to_errno(ret)) {
+                       ret = notifier_to_errno(ret);
+                       pr_err("overlay changeset %s notifier error %d, target: %pOF\n",
+                              of_overlay_action_name[action], ret, nd.target);
+-- 
+2.35.1
+
diff --git a/queue-5.4/openrisc-start-cpu-timer-early-in-boot.patch b/queue-5.4/openrisc-start-cpu-timer-early-in-boot.patch
new file mode 100644 (file)
index 0000000..37116af
--- /dev/null
@@ -0,0 +1,62 @@
+From 3e033bb2476c558fbdad523eea4a949d45f3d30e Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Sat, 23 Apr 2022 21:11:41 +0200
+Subject: openrisc: start CPU timer early in boot
+
+From: Jason A. Donenfeld <Jason@zx2c4.com>
+
+[ Upstream commit 516dd4aacd67a0f27da94f3fe63fe0f4dbab6e2b ]
+
+In order to measure the boot process, the timer should be switched on as
+early in boot as possible. As well, the commit defines the get_cycles
+macro, like the previous patches in this series, so that generic code is
+aware that it's implemented by the platform, as is done on other archs.
+
+Cc: Thomas Gleixner <tglx@linutronix.de>
+Cc: Arnd Bergmann <arnd@arndb.de>
+Cc: Jonas Bonn <jonas@southpole.se>
+Cc: Stefan Kristiansson <stefan.kristiansson@saunalahti.fi>
+Acked-by: Stafford Horne <shorne@gmail.com>
+Reported-by: Guenter Roeck <linux@roeck-us.net>
+Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ arch/openrisc/include/asm/timex.h | 1 +
+ arch/openrisc/kernel/head.S       | 9 +++++++++
+ 2 files changed, 10 insertions(+)
+
+diff --git a/arch/openrisc/include/asm/timex.h b/arch/openrisc/include/asm/timex.h
+index d52b4e536e3f..5487fa93dd9b 100644
+--- a/arch/openrisc/include/asm/timex.h
++++ b/arch/openrisc/include/asm/timex.h
+@@ -23,6 +23,7 @@ static inline cycles_t get_cycles(void)
+ {
+       return mfspr(SPR_TTCR);
+ }
++#define get_cycles get_cycles
+ /* This isn't really used any more */
+ #define CLOCK_TICK_RATE 1000
+diff --git a/arch/openrisc/kernel/head.S b/arch/openrisc/kernel/head.S
+index b0dc974f9a74..ffbbf639b7f9 100644
+--- a/arch/openrisc/kernel/head.S
++++ b/arch/openrisc/kernel/head.S
+@@ -521,6 +521,15 @@ _start:
+       l.ori   r3,r0,0x1
+       l.mtspr r0,r3,SPR_SR
++      /*
++       * Start the TTCR as early as possible, so that the RNG can make use of
++       * measurements of boot time from the earliest opportunity. Especially
++       * important is that the TTCR does not return zero by the time we reach
++       * rand_initialize().
++       */
++      l.movhi r3,hi(SPR_TTMR_CR)
++      l.mtspr r0,r3,SPR_TTMR
++
+       CLEAR_GPR(r1)
+       CLEAR_GPR(r2)
+       CLEAR_GPR(r3)
+-- 
+2.35.1
+
diff --git a/queue-5.4/pci-avoid-pci_dev_lock-ab-ba-deadlock-with-sriov_num.patch b/queue-5.4/pci-avoid-pci_dev_lock-ab-ba-deadlock-with-sriov_num.patch
new file mode 100644 (file)
index 0000000..887166f
--- /dev/null
@@ -0,0 +1,90 @@
+From 5d4c43e8fca1bf4ce70ac1020ca21d455e53d4f2 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Mon, 4 Apr 2022 14:25:39 +0800
+Subject: PCI: Avoid pci_dev_lock() AB/BA deadlock with sriov_numvfs_store()
+
+From: Yicong Yang <yangyicong@hisilicon.com>
+
+[ Upstream commit a91ee0e9fca9d7501286cfbced9b30a33e52740a ]
+
+The sysfs sriov_numvfs_store() path acquires the device lock before the
+config space access lock:
+
+  sriov_numvfs_store
+    device_lock                 # A (1) acquire device lock
+    sriov_configure
+      vfio_pci_sriov_configure  # (for example)
+        vfio_pci_core_sriov_configure
+          pci_disable_sriov
+            sriov_disable
+              pci_cfg_access_lock
+                pci_wait_cfg    # B (4) wait for dev->block_cfg_access == 0
+
+Previously, pci_dev_lock() acquired the config space access lock before the
+device lock:
+
+  pci_dev_lock
+    pci_cfg_access_lock
+      dev->block_cfg_access = 1 # B (2) set dev->block_cfg_access = 1
+    device_lock                 # A (3) wait for device lock
+
+Any path that uses pci_dev_lock(), e.g., pci_reset_function(), may
+deadlock with sriov_numvfs_store() if the operations occur in the sequence
+(1) (2) (3) (4).
+
+Avoid the deadlock by reversing the order in pci_dev_lock() so it acquires
+the device lock before the config space access lock, the same as the
+sriov_numvfs_store() path.
+
+[bhelgaas: combined and adapted commit log from Jay Zhou's independent
+subsequent posting:
+https://lore.kernel.org/r/20220404062539.1710-1-jianjay.zhou@huawei.com]
+Link: https://lore.kernel.org/linux-pci/1583489997-17156-1-git-send-email-yangyicong@hisilicon.com/
+Also-posted-by: Jay Zhou <jianjay.zhou@huawei.com>
+Signed-off-by: Yicong Yang <yangyicong@hisilicon.com>
+Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/pci/pci.c | 10 +++++-----
+ 1 file changed, 5 insertions(+), 5 deletions(-)
+
+diff --git a/drivers/pci/pci.c b/drivers/pci/pci.c
+index d539eb379743..c988aa425ac9 100644
+--- a/drivers/pci/pci.c
++++ b/drivers/pci/pci.c
+@@ -4915,18 +4915,18 @@ static int pci_dev_reset_slot_function(struct pci_dev *dev, int probe)
+ static void pci_dev_lock(struct pci_dev *dev)
+ {
+-      pci_cfg_access_lock(dev);
+       /* block PM suspend, driver probe, etc. */
+       device_lock(&dev->dev);
++      pci_cfg_access_lock(dev);
+ }
+ /* Return 1 on successful lock, 0 on contention */
+ static int pci_dev_trylock(struct pci_dev *dev)
+ {
+-      if (pci_cfg_access_trylock(dev)) {
+-              if (device_trylock(&dev->dev))
++      if (device_trylock(&dev->dev)) {
++              if (pci_cfg_access_trylock(dev))
+                       return 1;
+-              pci_cfg_access_unlock(dev);
++              device_unlock(&dev->dev);
+       }
+       return 0;
+@@ -4934,8 +4934,8 @@ static int pci_dev_trylock(struct pci_dev *dev)
+ static void pci_dev_unlock(struct pci_dev *dev)
+ {
+-      device_unlock(&dev->dev);
+       pci_cfg_access_unlock(dev);
++      device_unlock(&dev->dev);
+ }
+ static void pci_dev_save_and_disable(struct pci_dev *dev)
+-- 
+2.35.1
+
diff --git a/queue-5.4/pci-cadence-fix-find_first_zero_bit-limit.patch b/queue-5.4/pci-cadence-fix-find_first_zero_bit-limit.patch
new file mode 100644 (file)
index 0000000..24bc05f
--- /dev/null
@@ -0,0 +1,37 @@
+From f4882e7d2e42004e3b63398330d062b04274a5b0 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Tue, 15 Mar 2022 09:58:29 +0300
+Subject: PCI: cadence: Fix find_first_zero_bit() limit
+
+From: Dan Carpenter <dan.carpenter@oracle.com>
+
+[ Upstream commit 0aa3a0937feeb91a0e4e438c3c063b749b194192 ]
+
+The ep->ob_region_map bitmap is a long and it has BITS_PER_LONG bits.
+
+Link: https://lore.kernel.org/r/20220315065829.GA13572@kili
+Fixes: 37dddf14f1ae ("PCI: cadence: Add EndPoint Controller driver for Cadence PCIe controller")
+Signed-off-by: Dan Carpenter <dan.carpenter@oracle.com>
+Signed-off-by: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/pci/controller/pcie-cadence-ep.c | 3 +--
+ 1 file changed, 1 insertion(+), 2 deletions(-)
+
+diff --git a/drivers/pci/controller/pcie-cadence-ep.c b/drivers/pci/controller/pcie-cadence-ep.c
+index def7820cb824..5e23d575e200 100644
+--- a/drivers/pci/controller/pcie-cadence-ep.c
++++ b/drivers/pci/controller/pcie-cadence-ep.c
+@@ -178,8 +178,7 @@ static int cdns_pcie_ep_map_addr(struct pci_epc *epc, u8 fn, phys_addr_t addr,
+       struct cdns_pcie *pcie = &ep->pcie;
+       u32 r;
+-      r = find_first_zero_bit(&ep->ob_region_map,
+-                              sizeof(ep->ob_region_map) * BITS_PER_LONG);
++      r = find_first_zero_bit(&ep->ob_region_map, BITS_PER_LONG);
+       if (r >= ep->max_regions - 1) {
+               dev_err(&epc->dev, "no free outbound region\n");
+               return -EINVAL;
+-- 
+2.35.1
+
diff --git a/queue-5.4/pci-imx6-fix-perst-start-up-sequence.patch b/queue-5.4/pci-imx6-fix-perst-start-up-sequence.patch
new file mode 100644 (file)
index 0000000..5eb11ae
--- /dev/null
@@ -0,0 +1,98 @@
+From 7400a8a408d58b266c84cd9f5393d0b9134375a7 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Mon, 4 Apr 2022 10:15:09 +0200
+Subject: PCI: imx6: Fix PERST# start-up sequence
+
+From: Francesco Dolcini <francesco.dolcini@toradex.com>
+
+[ Upstream commit a6809941c1f17f455db2cf4ca19c6d8c8746ec25 ]
+
+According to the PCIe standard the PERST# signal (reset-gpio in
+fsl,imx* compatible dts) should be kept asserted for at least 100 usec
+before the PCIe refclock is stable, should be kept asserted for at
+least 100 msec after the power rails are stable and the host should wait
+at least 100 msec after it is de-asserted before accessing the
+configuration space of any attached device.
+
+From PCIe CEM r2.0, sec 2.6.2
+
+  T-PVPERL: Power stable to PERST# inactive - 100 msec
+  T-PERST-CLK: REFCLK stable before PERST# inactive - 100 usec.
+
+From PCIe r5.0, sec 6.6.1
+
+  With a Downstream Port that does not support Link speeds greater than
+  5.0 GT/s, software must wait a minimum of 100 ms before sending a
+  Configuration Request to the device immediately below that Port.
+
+Failure to do so could prevent PCIe devices to be working correctly,
+and this was experienced with real devices.
+
+Move reset assert to imx6_pcie_assert_core_reset(), this way we ensure
+that PERST# is asserted before enabling any clock, move de-assert to the
+end of imx6_pcie_deassert_core_reset() after the clock is enabled and
+deemed stable and add a new delay of 100 msec just afterward.
+
+Link: https://lore.kernel.org/all/20220211152550.286821-1-francesco.dolcini@toradex.com
+Link: https://lore.kernel.org/r/20220404081509.94356-1-francesco.dolcini@toradex.com
+Fixes: bb38919ec56e ("PCI: imx6: Add support for i.MX6 PCIe controller")
+Signed-off-by: Francesco Dolcini <francesco.dolcini@toradex.com>
+Signed-off-by: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>
+Reviewed-by: Lucas Stach <l.stach@pengutronix.de>
+Acked-by: Richard Zhu <hongxing.zhu@nxp.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/pci/controller/dwc/pci-imx6.c | 23 ++++++++++++++---------
+ 1 file changed, 14 insertions(+), 9 deletions(-)
+
+diff --git a/drivers/pci/controller/dwc/pci-imx6.c b/drivers/pci/controller/dwc/pci-imx6.c
+index acfbd34032a8..b34b52b364d5 100644
+--- a/drivers/pci/controller/dwc/pci-imx6.c
++++ b/drivers/pci/controller/dwc/pci-imx6.c
+@@ -413,6 +413,11 @@ static void imx6_pcie_assert_core_reset(struct imx6_pcie *imx6_pcie)
+                       dev_err(dev, "failed to disable vpcie regulator: %d\n",
+                               ret);
+       }
++
++      /* Some boards don't have PCIe reset GPIO. */
++      if (gpio_is_valid(imx6_pcie->reset_gpio))
++              gpio_set_value_cansleep(imx6_pcie->reset_gpio,
++                                      imx6_pcie->gpio_active_high);
+ }
+ static unsigned int imx6_pcie_grp_offset(const struct imx6_pcie *imx6_pcie)
+@@ -535,15 +540,6 @@ static void imx6_pcie_deassert_core_reset(struct imx6_pcie *imx6_pcie)
+       /* allow the clocks to stabilize */
+       usleep_range(200, 500);
+-      /* Some boards don't have PCIe reset GPIO. */
+-      if (gpio_is_valid(imx6_pcie->reset_gpio)) {
+-              gpio_set_value_cansleep(imx6_pcie->reset_gpio,
+-                                      imx6_pcie->gpio_active_high);
+-              msleep(100);
+-              gpio_set_value_cansleep(imx6_pcie->reset_gpio,
+-                                      !imx6_pcie->gpio_active_high);
+-      }
+-
+       switch (imx6_pcie->drvdata->variant) {
+       case IMX8MQ:
+               reset_control_deassert(imx6_pcie->pciephy_reset);
+@@ -586,6 +582,15 @@ static void imx6_pcie_deassert_core_reset(struct imx6_pcie *imx6_pcie)
+               break;
+       }
++      /* Some boards don't have PCIe reset GPIO. */
++      if (gpio_is_valid(imx6_pcie->reset_gpio)) {
++              msleep(100);
++              gpio_set_value_cansleep(imx6_pcie->reset_gpio,
++                                      !imx6_pcie->gpio_active_high);
++              /* Wait for 100ms after PERST# deassertion (PCIe r5.0, 6.6.1) */
++              msleep(100);
++      }
++
+       return;
+ err_ref_clk:
+-- 
+2.35.1
+
diff --git a/queue-5.4/pci-rockchip-fix-find_first_zero_bit-limit.patch b/queue-5.4/pci-rockchip-fix-find_first_zero_bit-limit.patch
new file mode 100644 (file)
index 0000000..b7f82a0
--- /dev/null
@@ -0,0 +1,37 @@
+From a0ba6f2d4688b715674061a90511f2b19d6bedeb Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Tue, 15 Mar 2022 09:59:44 +0300
+Subject: PCI: rockchip: Fix find_first_zero_bit() limit
+
+From: Dan Carpenter <dan.carpenter@oracle.com>
+
+[ Upstream commit 096950e230b8d83645c7cf408b9f399f58c08b96 ]
+
+The ep->ob_region_map bitmap is a long and it has BITS_PER_LONG bits.
+
+Link: https://lore.kernel.org/r/20220315065944.GB13572@kili
+Fixes: cf590b078391 ("PCI: rockchip: Add EP driver for Rockchip PCIe controller")
+Signed-off-by: Dan Carpenter <dan.carpenter@oracle.com>
+Signed-off-by: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/pci/controller/pcie-rockchip-ep.c | 3 +--
+ 1 file changed, 1 insertion(+), 2 deletions(-)
+
+diff --git a/drivers/pci/controller/pcie-rockchip-ep.c b/drivers/pci/controller/pcie-rockchip-ep.c
+index d743b0a48988..b82edefffd15 100644
+--- a/drivers/pci/controller/pcie-rockchip-ep.c
++++ b/drivers/pci/controller/pcie-rockchip-ep.c
+@@ -263,8 +263,7 @@ static int rockchip_pcie_ep_map_addr(struct pci_epc *epc, u8 fn,
+       struct rockchip_pcie *pcie = &ep->rockchip;
+       u32 r;
+-      r = find_first_zero_bit(&ep->ob_region_map,
+-                              sizeof(ep->ob_region_map) * BITS_PER_LONG);
++      r = find_first_zero_bit(&ep->ob_region_map, BITS_PER_LONG);
+       /*
+        * Region 0 is reserved for configuration space and shouldn't
+        * be used elsewhere per TRM, so leave it out.
+-- 
+2.35.1
+
diff --git a/queue-5.4/perf-amd-ibs-use-interrupt-regs-ip-for-stack-unwindi.patch b/queue-5.4/perf-amd-ibs-use-interrupt-regs-ip-for-stack-unwindi.patch
new file mode 100644 (file)
index 0000000..aae1ebb
--- /dev/null
@@ -0,0 +1,68 @@
+From f0ed66e8c2c78398569a092dbd75486208969dd2 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Fri, 29 Apr 2022 10:44:41 +0530
+Subject: perf/amd/ibs: Use interrupt regs ip for stack unwinding
+
+From: Ravi Bangoria <ravi.bangoria@amd.com>
+
+[ Upstream commit 3d47083b9ff46863e8374ad3bb5edb5e464c75f8 ]
+
+IbsOpRip is recorded when IBS interrupt is triggered. But there is
+a skid from the time IBS interrupt gets triggered to the time the
+interrupt is presented to the core. Meanwhile processor would have
+moved ahead and thus IbsOpRip will be inconsistent with rsp and rbp
+recorded as part of the interrupt regs. This causes issues while
+unwinding stack using the ORC unwinder as it needs consistent rip,
+rsp and rbp. Fix this by using rip from interrupt regs instead of
+IbsOpRip for stack unwinding.
+
+Fixes: ee9f8fce99640 ("x86/unwind: Add the ORC unwinder")
+Reported-by: Dmitry Monakhov <dmtrmonakhov@yandex-team.ru>
+Suggested-by: Peter Zijlstra <peterz@infradead.org>
+Signed-off-by: Ravi Bangoria <ravi.bangoria@amd.com>
+Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
+Link: https://lkml.kernel.org/r/20220429051441.14251-1-ravi.bangoria@amd.com
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ arch/x86/events/amd/ibs.c | 18 ++++++++++++++++++
+ 1 file changed, 18 insertions(+)
+
+diff --git a/arch/x86/events/amd/ibs.c b/arch/x86/events/amd/ibs.c
+index b7baaa973317..2e930d8c04d9 100644
+--- a/arch/x86/events/amd/ibs.c
++++ b/arch/x86/events/amd/ibs.c
+@@ -312,6 +312,16 @@ static int perf_ibs_init(struct perf_event *event)
+       hwc->config_base = perf_ibs->msr;
+       hwc->config = config;
++      /*
++       * rip recorded by IbsOpRip will not be consistent with rsp and rbp
++       * recorded as part of interrupt regs. Thus we need to use rip from
++       * interrupt regs while unwinding call stack. Setting _EARLY flag
++       * makes sure we unwind call-stack before perf sample rip is set to
++       * IbsOpRip.
++       */
++      if (event->attr.sample_type & PERF_SAMPLE_CALLCHAIN)
++              event->attr.sample_type |= __PERF_SAMPLE_CALLCHAIN_EARLY;
++
+       return 0;
+ }
+@@ -683,6 +693,14 @@ static int perf_ibs_handle_irq(struct perf_ibs *perf_ibs, struct pt_regs *iregs)
+               data.raw = &raw;
+       }
++      /*
++       * rip recorded by IbsOpRip will not be consistent with rsp and rbp
++       * recorded as part of interrupt regs. Thus we need to use rip from
++       * interrupt regs while unwinding call stack.
++       */
++      if (event->attr.sample_type & PERF_SAMPLE_CALLCHAIN)
++              data.callchain = perf_callchain(event, iregs);
++
+       throttle = perf_event_overflow(event, &data, &regs);
+ out:
+       if (throttle) {
+-- 
+2.35.1
+
diff --git a/queue-5.4/perf-c2c-use-stdio-interface-if-slang-is-not-support.patch b/queue-5.4/perf-c2c-use-stdio-interface-if-slang-is-not-support.patch
new file mode 100644 (file)
index 0000000..a0f9015
--- /dev/null
@@ -0,0 +1,82 @@
+From 7a94d84e794d4442bf347d4df2e284e2cd6c0011 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Thu, 26 May 2022 22:54:00 +0800
+Subject: perf c2c: Use stdio interface if slang is not supported
+
+From: Leo Yan <leo.yan@linaro.org>
+
+[ Upstream commit c4040212bc97d16040712a410335f93bc94d2262 ]
+
+If the slang lib is not installed on the system, perf c2c tool disables TUI
+mode and roll back to use stdio mode;  but the flag 'c2c.use_stdio' is
+missed to set true and thus it wrongly applies UI quirks in the function
+ui_quirks().
+
+This commit forces to use stdio interface if slang is not supported, and
+it can avoid to apply the UI quirks and show the correct metric header.
+
+Before:
+
+=================================================
+      Shared Cache Line Distribution Pareto
+=================================================
+  -------------------------------------------------------------------------------
+      0        0        0       99        0        0        0      0xaaaac17d6000
+  -------------------------------------------------------------------------------
+    0.00%    0.00%    6.06%    0.00%    0.00%    0.00%   0x20   N/A       0      0xaaaac17c25ac         0         0        43       375    18469         2  [.] 0x00000000000025ac  memstress         memstress[25ac]   0
+    0.00%    0.00%   93.94%    0.00%    0.00%    0.00%   0x29   N/A       0      0xaaaac17c3e88         0         0       173       180      135         2  [.] 0x0000000000003e88  memstress         memstress[3e88]   0
+
+After:
+
+=================================================
+      Shared Cache Line Distribution Pareto
+=================================================
+  -------------------------------------------------------------------------------
+      0        0        0       99        0        0        0      0xaaaac17d6000
+  -------------------------------------------------------------------------------
+           0.00%    0.00%    6.06%    0.00%    0.00%    0.00%                0x20   N/A       0      0xaaaac17c25ac         0         0        43       375    18469         2  [.] 0x00000000000025ac  memstress         memstress[25ac]   0
+           0.00%    0.00%   93.94%    0.00%    0.00%    0.00%                0x29   N/A       0      0xaaaac17c3e88         0         0       173       180      135         2  [.] 0x0000000000003e88  memstress         memstress[3e88]   0
+
+Fixes: 5a1a99cd2e4e1557 ("perf c2c report: Add main TUI browser")
+Reported-by: Joe Mario <jmario@redhat.com>
+Signed-off-by: Leo Yan <leo.yan@linaro.org>
+Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
+Cc: Jiri Olsa <jolsa@kernel.org>
+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/20220526145400.611249-1-leo.yan@linaro.org
+Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ tools/perf/builtin-c2c.c | 6 ++++--
+ 1 file changed, 4 insertions(+), 2 deletions(-)
+
+diff --git a/tools/perf/builtin-c2c.c b/tools/perf/builtin-c2c.c
+index f2e9d2b1b913..d3e0ea06d78d 100644
+--- a/tools/perf/builtin-c2c.c
++++ b/tools/perf/builtin-c2c.c
+@@ -2733,9 +2733,7 @@ static int perf_c2c__report(int argc, const char **argv)
+                  "the input file to process"),
+       OPT_INCR('N', "node-info", &c2c.node_info,
+                "show extra node info in report (repeat for more info)"),
+-#ifdef HAVE_SLANG_SUPPORT
+       OPT_BOOLEAN(0, "stdio", &c2c.use_stdio, "Use the stdio interface"),
+-#endif
+       OPT_BOOLEAN(0, "stats", &c2c.stats_only,
+                   "Display only statistic tables (implies --stdio)"),
+       OPT_BOOLEAN(0, "full-symbols", &c2c.symbol_full,
+@@ -2762,6 +2760,10 @@ static int perf_c2c__report(int argc, const char **argv)
+       if (argc)
+               usage_with_options(report_c2c_usage, options);
++#ifndef HAVE_SLANG_SUPPORT
++      c2c.use_stdio = true;
++#endif
++
+       if (c2c.stats_only)
+               c2c.use_stdio = true;
+-- 
+2.35.1
+
diff --git a/queue-5.4/perf-jevents-fix-event-syntax-error-caused-by-extsel.patch b/queue-5.4/perf-jevents-fix-event-syntax-error-caused-by-extsel.patch
new file mode 100644 (file)
index 0000000..eb02f23
--- /dev/null
@@ -0,0 +1,62 @@
+From 55e4e1c9a43b1b6b77a7248098db1e6bca57be67 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Wed, 25 May 2022 22:04:10 +0800
+Subject: perf jevents: Fix event syntax error caused by ExtSel
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+From: Zhengjun Xing <zhengjun.xing@linux.intel.com>
+
+[ Upstream commit f4df0dbbe62ee8e4405a57b27ccd54393971c773 ]
+
+In the origin code, when "ExtSel" is 1, the eventcode will change to
+"eventcode |= 1 << 21”. For event “UNC_Q_RxL_CREDITS_CONSUMED_VN0.DRS",
+its "ExtSel" is "1", its eventcode will change from 0x1E to 0x20001E,
+but in fact the eventcode should <=0x1FF, so this will cause the parse
+fail:
+
+  # perf stat -e "UNC_Q_RxL_CREDITS_CONSUMED_VN0.DRS" -a sleep 0.1
+  event syntax error: '.._RxL_CREDITS_CONSUMED_VN0.DRS'
+                                    \___ value too big for format, maximum is 511
+
+On the perf kernel side, the kernel assumes the valid bits are continuous.
+It will adjust the 0x100 (bit 8 for perf tool) to bit 21 in HW.
+
+DEFINE_UNCORE_FORMAT_ATTR(event_ext, event, "config:0-7,21");
+
+So the perf tool follows the kernel side and just set bit8 other than bit21.
+
+Fixes: fedb2b518239cbc0 ("perf jevents: Add support for parsing uncore json files")
+Reviewed-by: Kan Liang <kan.liang@linux.intel.com>
+Signed-off-by: Xing Zhengjun <zhengjun.xing@linux.intel.com>
+Acked-by: Ian Rogers <irogers@google.com>
+Cc: Adrian Hunter <adrian.hunter@intel.com>
+Cc: Alexander Shishkin <alexander.shishkin@intel.com>
+Cc: Andi Kleen <ak@linux.intel.com>
+Cc: Ingo Molnar <mingo@redhat.com>
+Cc: Jiri Olsa <jolsa@kernel.org>
+Cc: Peter Zijlstra <peterz@infradead.org>
+Link: https://lore.kernel.org/r/20220525140410.1706851-1-zhengjun.xing@linux.intel.com
+Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ tools/perf/pmu-events/jevents.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/tools/perf/pmu-events/jevents.c b/tools/perf/pmu-events/jevents.c
+index 47f57f5829d3..a4244bf242e6 100644
+--- a/tools/perf/pmu-events/jevents.c
++++ b/tools/perf/pmu-events/jevents.c
+@@ -567,7 +567,7 @@ int json_events(const char *fn,
+                       } else if (json_streq(map, field, "ExtSel")) {
+                               char *code = NULL;
+                               addfield(map, &code, "", "", val);
+-                              eventcode |= strtoul(code, NULL, 0) << 21;
++                              eventcode |= strtoul(code, NULL, 0) << 8;
+                               free(code);
+                       } else if (json_streq(map, field, "EventName")) {
+                               addfield(map, &name, "", "", val);
+-- 
+2.35.1
+
diff --git a/queue-5.4/perf-tools-add-missing-headers-needed-by-util-data.h.patch b/queue-5.4/perf-tools-add-missing-headers-needed-by-util-data.h.patch
new file mode 100644 (file)
index 0000000..29c940d
--- /dev/null
@@ -0,0 +1,55 @@
+From b29d3bf7abfe0dd3c50413d9b582fa2b27bf0ae8 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Fri, 29 Apr 2022 17:05:39 +0800
+Subject: perf tools: Add missing headers needed by util/data.h
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+From: Yang Jihong <yangjihong1@huawei.com>
+
+[ Upstream commit 4d27cf1d9de5becfa4d1efb2ea54dba1b9fc962a ]
+
+'struct perf_data' in util/data.h uses the "u64" data type, which is
+defined in "linux/types.h".
+
+If we only include util/data.h, the following compilation error occurs:
+
+  util/data.h:38:3: error: unknown type name ‘u64’
+     u64    version;
+     ^~~
+
+Solution: include "linux/types.h." to add the needed type definitions.
+
+Fixes: 258031c017c353e8 ("perf header: Add DIR_FORMAT feature to describe directory data")
+Signed-off-by: Yang Jihong <yangjihong1@huawei.com>
+Cc: Adrian Hunter <adrian.hunter@intel.com>
+Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
+Cc: Andi Kleen <ak@linux.intel.com>
+Cc: Ingo Molnar <mingo@redhat.com>
+Cc: Jiri Olsa <jolsa@kernel.org>
+Cc: Mark Rutland <mark.rutland@arm.com>
+Cc: Namhyung Kim <namhyung@kernel.org>
+Cc: Peter Zijlstra <peterz@infradead.org>
+Link: https://lore.kernel.org/r/20220429090539.212448-1-yangjihong1@huawei.com
+Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ tools/perf/util/data.h | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/tools/perf/util/data.h b/tools/perf/util/data.h
+index 259868a39019..252d99071249 100644
+--- a/tools/perf/util/data.h
++++ b/tools/perf/util/data.h
+@@ -3,6 +3,7 @@
+ #define __PERF_DATA_H
+ #include <stdbool.h>
++#include <linux/types.h>
+ enum perf_data_mode {
+       PERF_DATA_MODE_WRITE,
+-- 
+2.35.1
+
diff --git a/queue-5.4/pinctrl-mvebu-fix-irq_of_parse_and_map-return-value.patch b/queue-5.4/pinctrl-mvebu-fix-irq_of_parse_and_map-return-value.patch
new file mode 100644 (file)
index 0000000..1d18b1a
--- /dev/null
@@ -0,0 +1,36 @@
+From 3e4660f402cef5c4ec15a63dfc3fbe693ad8903c Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Fri, 22 Apr 2022 12:53:38 +0200
+Subject: pinctrl: mvebu: Fix irq_of_parse_and_map() return value
+
+From: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
+
+[ Upstream commit 71bc7cf3be65bab441e03667cf215c557712976c ]
+
+The irq_of_parse_and_map() returns 0 on failure, not a negative ERRNO.
+
+Fixes: 2f227605394b ("pinctrl: armada-37xx: Add irqchip support")
+Signed-off-by: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
+Link: https://lore.kernel.org/r/20220422105339.78810-1-krzysztof.kozlowski@linaro.org
+Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/pinctrl/mvebu/pinctrl-armada-37xx.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/drivers/pinctrl/mvebu/pinctrl-armada-37xx.c b/drivers/pinctrl/mvebu/pinctrl-armada-37xx.c
+index f56add78d58c..359b2ecfcbdb 100644
+--- a/drivers/pinctrl/mvebu/pinctrl-armada-37xx.c
++++ b/drivers/pinctrl/mvebu/pinctrl-armada-37xx.c
+@@ -773,7 +773,7 @@ static int armada_37xx_irqchip_register(struct platform_device *pdev,
+       for (i = 0; i < nr_irq_parent; i++) {
+               int irq = irq_of_parse_and_map(np, i);
+-              if (irq < 0)
++              if (!irq)
+                       continue;
+               gpiochip_set_chained_irqchip(gc, irqchip, irq,
+-- 
+2.35.1
+
diff --git a/queue-5.4/pm-devfreq-rk3399_dmc-disable-edev-on-remove.patch b/queue-5.4/pm-devfreq-rk3399_dmc-disable-edev-on-remove.patch
new file mode 100644 (file)
index 0000000..479771f
--- /dev/null
@@ -0,0 +1,64 @@
+From f3af7e92339e24f1586f8d311663348aa57f5f3f Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Tue, 8 Mar 2022 11:08:59 -0800
+Subject: PM / devfreq: rk3399_dmc: Disable edev on remove()
+
+From: Brian Norris <briannorris@chromium.org>
+
+[ Upstream commit 2fccf9e6050e0e3b8b4cd275d41daf7f7fa22804 ]
+
+Otherwise we hit an unablanced enable-count when unbinding the DFI
+device:
+
+[ 1279.659119] ------------[ cut here ]------------
+[ 1279.659179] WARNING: CPU: 2 PID: 5638 at drivers/devfreq/devfreq-event.c:360 devfreq_event_remove_edev+0x84/0x8c
+...
+[ 1279.659352] Hardware name: Google Kevin (DT)
+[ 1279.659363] pstate: 80400005 (Nzcv daif +PAN -UAO -TCO BTYPE=--)
+[ 1279.659371] pc : devfreq_event_remove_edev+0x84/0x8c
+[ 1279.659380] lr : devm_devfreq_event_release+0x1c/0x28
+...
+[ 1279.659571] Call trace:
+[ 1279.659582]  devfreq_event_remove_edev+0x84/0x8c
+[ 1279.659590]  devm_devfreq_event_release+0x1c/0x28
+[ 1279.659602]  release_nodes+0x1cc/0x244
+[ 1279.659611]  devres_release_all+0x44/0x60
+[ 1279.659621]  device_release_driver_internal+0x11c/0x1ac
+[ 1279.659629]  device_driver_detach+0x20/0x2c
+[ 1279.659641]  unbind_store+0x7c/0xb0
+[ 1279.659650]  drv_attr_store+0x2c/0x40
+[ 1279.659663]  sysfs_kf_write+0x44/0x58
+[ 1279.659672]  kernfs_fop_write_iter+0xf4/0x190
+[ 1279.659684]  vfs_write+0x2b0/0x2e4
+[ 1279.659693]  ksys_write+0x80/0xec
+[ 1279.659701]  __arm64_sys_write+0x24/0x30
+[ 1279.659714]  el0_svc_common+0xf0/0x1d8
+[ 1279.659724]  do_el0_svc_compat+0x28/0x3c
+[ 1279.659738]  el0_svc_compat+0x10/0x1c
+[ 1279.659746]  el0_sync_compat_handler+0xa8/0xcc
+[ 1279.659758]  el0_sync_compat+0x188/0x1c0
+[ 1279.659768] ---[ end trace cec200e5094155b4 ]---
+
+Signed-off-by: Brian Norris <briannorris@chromium.org>
+Signed-off-by: Chanwoo Choi <cw00.choi@samsung.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/devfreq/rk3399_dmc.c | 2 ++
+ 1 file changed, 2 insertions(+)
+
+diff --git a/drivers/devfreq/rk3399_dmc.c b/drivers/devfreq/rk3399_dmc.c
+index 027769e39f9b..a491dcfa1dd0 100644
+--- a/drivers/devfreq/rk3399_dmc.c
++++ b/drivers/devfreq/rk3399_dmc.c
+@@ -485,6 +485,8 @@ static int rk3399_dmcfreq_remove(struct platform_device *pdev)
+ {
+       struct rk3399_dmcfreq *dmcfreq = dev_get_drvdata(&pdev->dev);
++      devfreq_event_disable_edev(dmcfreq->edev);
++
+       /*
+        * Before remove the opp table we need to unregister the opp notifier.
+        */
+-- 
+2.35.1
+
diff --git a/queue-5.4/powerpc-4xx-cpm-fix-return-value-of-__setup-handler.patch b/queue-5.4/powerpc-4xx-cpm-fix-return-value-of-__setup-handler.patch
new file mode 100644 (file)
index 0000000..6ac18d1
--- /dev/null
@@ -0,0 +1,44 @@
+From 70daf178ad2e9fac37cd9c5d1cab84acae5ed5d6 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Mon, 2 May 2022 12:29:41 -0700
+Subject: powerpc/4xx/cpm: Fix return value of __setup() handler
+
+From: Randy Dunlap <rdunlap@infradead.org>
+
+[ Upstream commit 5bb99fd4090fe1acfdb90a97993fcda7f8f5a3d6 ]
+
+__setup() handlers should return 1 to obsolete_checksetup() in
+init/main.c to indicate that the boot option has been handled.
+
+A return of 0 causes the boot option/value to be listed as an Unknown
+kernel parameter and added to init's (limited) argument or environment
+strings.
+
+Also, error return codes don't mean anything to obsolete_checksetup() --
+only non-zero (usually 1) or zero. So return 1 from cpm_powersave_off().
+
+Fixes: d164f6d4f910 ("powerpc/4xx: Add suspend and idle support")
+Reported-by: Igor Zhbanov <izh1979@gmail.com>
+Signed-off-by: Randy Dunlap <rdunlap@infradead.org>
+Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
+Link: https://lore.kernel.org/r/20220502192941.20955-1-rdunlap@infradead.org
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ arch/powerpc/platforms/4xx/cpm.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/arch/powerpc/platforms/4xx/cpm.c b/arch/powerpc/platforms/4xx/cpm.c
+index ae8b812c9202..2481e78c0423 100644
+--- a/arch/powerpc/platforms/4xx/cpm.c
++++ b/arch/powerpc/platforms/4xx/cpm.c
+@@ -327,6 +327,6 @@ late_initcall(cpm_init);
+ static int __init cpm_powersave_off(char *arg)
+ {
+       cpm.powersave_off = 1;
+-      return 0;
++      return 1;
+ }
+ __setup("powersave=off", cpm_powersave_off);
+-- 
+2.35.1
+
diff --git a/queue-5.4/powerpc-64-only-warn-if-__pa-__va-called-with-bad-ad.patch b/queue-5.4/powerpc-64-only-warn-if-__pa-__va-called-with-bad-ad.patch
new file mode 100644 (file)
index 0000000..87f27c1
--- /dev/null
@@ -0,0 +1,56 @@
+From 67989be1c01a5ce32b0146a592b0494a84704d12 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Thu, 7 Apr 2022 00:58:01 +1000
+Subject: powerpc/64: Only WARN if __pa()/__va() called with bad addresses
+
+From: Michael Ellerman <mpe@ellerman.id.au>
+
+[ Upstream commit c4bce84d0bd3f396f702d69be2e92bbd8af97583 ]
+
+We added checks to __pa() / __va() to ensure they're only called with
+appropriate addresses. But using BUG_ON() is too strong, it means
+virt_addr_valid() will BUG when DEBUG_VIRTUAL is enabled.
+
+Instead switch them to warnings, arm64 does the same.
+
+Fixes: 4dd7554a6456 ("powerpc/64: Add VIRTUAL_BUG_ON checks for __va and __pa addresses")
+Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
+Link: https://lore.kernel.org/r/20220406145802.538416-5-mpe@ellerman.id.au
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ arch/powerpc/include/asm/page.h | 7 +++++--
+ 1 file changed, 5 insertions(+), 2 deletions(-)
+
+diff --git a/arch/powerpc/include/asm/page.h b/arch/powerpc/include/asm/page.h
+index 0d8f9246ce15..d92353a96f81 100644
+--- a/arch/powerpc/include/asm/page.h
++++ b/arch/powerpc/include/asm/page.h
+@@ -216,6 +216,9 @@ static inline bool pfn_valid(unsigned long pfn)
+ #define __pa(x) ((unsigned long)(x) - VIRT_PHYS_OFFSET)
+ #else
+ #ifdef CONFIG_PPC64
++
++#define VIRTUAL_WARN_ON(x)    WARN_ON(IS_ENABLED(CONFIG_DEBUG_VIRTUAL) && (x))
++
+ /*
+  * gcc miscompiles (unsigned long)(&static_var) - PAGE_OFFSET
+  * with -mcmodel=medium, so we use & and | instead of - and + on 64-bit.
+@@ -223,13 +226,13 @@ static inline bool pfn_valid(unsigned long pfn)
+  */
+ #define __va(x)                                                               \
+ ({                                                                    \
+-      VIRTUAL_BUG_ON((unsigned long)(x) >= PAGE_OFFSET);              \
++      VIRTUAL_WARN_ON((unsigned long)(x) >= PAGE_OFFSET);             \
+       (void *)(unsigned long)((phys_addr_t)(x) | PAGE_OFFSET);        \
+ })
+ #define __pa(x)                                                               \
+ ({                                                                    \
+-      VIRTUAL_BUG_ON((unsigned long)(x) < PAGE_OFFSET);               \
++      VIRTUAL_WARN_ON((unsigned long)(x) < PAGE_OFFSET);              \
+       (unsigned long)(x) & 0x0fffffffffffffffUL;                      \
+ })
+-- 
+2.35.1
+
diff --git a/queue-5.4/powerpc-8xx-export-cpm_setbrg-for-modules.patch b/queue-5.4/powerpc-8xx-export-cpm_setbrg-for-modules.patch
new file mode 100644 (file)
index 0000000..973d6a8
--- /dev/null
@@ -0,0 +1,40 @@
+From 7b4107f19242ce90738e1a720ca450297148b75d Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Thu, 21 Jan 2021 17:08:19 -0800
+Subject: powerpc/8xx: export 'cpm_setbrg' for modules
+
+From: Randy Dunlap <rdunlap@infradead.org>
+
+[ Upstream commit 22f8e625ebabd7ed3185b82b44b4f12fc0402113 ]
+
+Fix missing export for a loadable module build:
+
+ERROR: modpost: "cpm_setbrg" [drivers/tty/serial/cpm_uart/cpm_uart.ko] undefined!
+
+Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc")
+Signed-off-by: Randy Dunlap <rdunlap@infradead.org>
+Reported-by: kernel test robot <lkp@intel.com>
+[chleroy: Changed Fixes: tag]
+Signed-off-by: Christophe Leroy <christophe.leroy@csgroup.eu>
+Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
+Link: https://lore.kernel.org/r/20210122010819.30986-1-rdunlap@infradead.org
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ arch/powerpc/platforms/8xx/cpm1.c | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/arch/powerpc/platforms/8xx/cpm1.c b/arch/powerpc/platforms/8xx/cpm1.c
+index 0f65c51271db..ec6dc2d7a9db 100644
+--- a/arch/powerpc/platforms/8xx/cpm1.c
++++ b/arch/powerpc/platforms/8xx/cpm1.c
+@@ -292,6 +292,7 @@ cpm_setbrg(uint brg, uint rate)
+               out_be32(bp, (((BRG_UART_CLK_DIV16 / rate) - 1) << 1) |
+                             CPM_BRG_EN | CPM_BRG_DIV16);
+ }
++EXPORT_SYMBOL(cpm_setbrg);
+ struct cpm_ioport16 {
+       __be16 dir, par, odr_sor, dat, intr;
+-- 
+2.35.1
+
diff --git a/queue-5.4/powerpc-fadump-fix-fadump-to-work-with-a-different-e.patch b/queue-5.4/powerpc-fadump-fix-fadump-to-work-with-a-different-e.patch
new file mode 100644 (file)
index 0000000..0bf3869
--- /dev/null
@@ -0,0 +1,318 @@
+From 0f9074d8d4b6fdb691166fe37d179b60d1c5e6f7 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Wed, 21 Apr 2021 23:20:52 +0530
+Subject: powerpc/fadump: Fix fadump to work with a different endian capture
+ kernel
+
+From: Hari Bathini <hbathini@linux.ibm.com>
+
+[ Upstream commit b74196af372f7cb4902179009265fe63ac81824f ]
+
+Dump capture would fail if capture kernel is not of the endianess as the
+production kernel, because the in-memory data structure (struct
+opal_fadump_mem_struct) shared across production kernel and capture
+kernel assumes the same endianess for both the kernels, which doesn't
+have to be true always. Fix it by having a well-defined endianess for
+struct opal_fadump_mem_struct.
+
+Signed-off-by: Hari Bathini <hbathini@linux.ibm.com>
+Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
+Link: https://lore.kernel.org/r/161902744901.86147.14719228311655123526.stgit@hbathini
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ arch/powerpc/platforms/powernv/opal-fadump.c | 94 +++++++++++---------
+ arch/powerpc/platforms/powernv/opal-fadump.h | 10 +--
+ 2 files changed, 57 insertions(+), 47 deletions(-)
+
+diff --git a/arch/powerpc/platforms/powernv/opal-fadump.c b/arch/powerpc/platforms/powernv/opal-fadump.c
+index d361d37d975f..f5cea068f0bd 100644
+--- a/arch/powerpc/platforms/powernv/opal-fadump.c
++++ b/arch/powerpc/platforms/powernv/opal-fadump.c
+@@ -60,7 +60,7 @@ void __init opal_fadump_dt_scan(struct fw_dump *fadump_conf, u64 node)
+       addr = be64_to_cpu(addr);
+       pr_debug("Kernel metadata addr: %llx\n", addr);
+       opal_fdm_active = (void *)addr;
+-      if (opal_fdm_active->registered_regions == 0)
++      if (be16_to_cpu(opal_fdm_active->registered_regions) == 0)
+               return;
+       ret = opal_mpipl_query_tag(OPAL_MPIPL_TAG_BOOT_MEM, &addr);
+@@ -95,17 +95,17 @@ static int opal_fadump_unregister(struct fw_dump *fadump_conf);
+ static void opal_fadump_update_config(struct fw_dump *fadump_conf,
+                                     const struct opal_fadump_mem_struct *fdm)
+ {
+-      pr_debug("Boot memory regions count: %d\n", fdm->region_cnt);
++      pr_debug("Boot memory regions count: %d\n", be16_to_cpu(fdm->region_cnt));
+       /*
+        * The destination address of the first boot memory region is the
+        * destination address of boot memory regions.
+        */
+-      fadump_conf->boot_mem_dest_addr = fdm->rgn[0].dest;
++      fadump_conf->boot_mem_dest_addr = be64_to_cpu(fdm->rgn[0].dest);
+       pr_debug("Destination address of boot memory regions: %#016llx\n",
+                fadump_conf->boot_mem_dest_addr);
+-      fadump_conf->fadumphdr_addr = fdm->fadumphdr_addr;
++      fadump_conf->fadumphdr_addr = be64_to_cpu(fdm->fadumphdr_addr);
+ }
+ /*
+@@ -126,9 +126,9 @@ static void opal_fadump_get_config(struct fw_dump *fadump_conf,
+       fadump_conf->boot_memory_size = 0;
+       pr_debug("Boot memory regions:\n");
+-      for (i = 0; i < fdm->region_cnt; i++) {
+-              base = fdm->rgn[i].src;
+-              size = fdm->rgn[i].size;
++      for (i = 0; i < be16_to_cpu(fdm->region_cnt); i++) {
++              base = be64_to_cpu(fdm->rgn[i].src);
++              size = be64_to_cpu(fdm->rgn[i].size);
+               pr_debug("\t[%03d] base: 0x%lx, size: 0x%lx\n", i, base, size);
+               fadump_conf->boot_mem_addr[i] = base;
+@@ -143,7 +143,7 @@ static void opal_fadump_get_config(struct fw_dump *fadump_conf,
+        * Start address of reserve dump area (permanent reservation) for
+        * re-registering FADump after dump capture.
+        */
+-      fadump_conf->reserve_dump_area_start = fdm->rgn[0].dest;
++      fadump_conf->reserve_dump_area_start = be64_to_cpu(fdm->rgn[0].dest);
+       /*
+        * Rarely, but it can so happen that system crashes before all
+@@ -155,13 +155,14 @@ static void opal_fadump_get_config(struct fw_dump *fadump_conf,
+        * Hope the memory that could not be preserved only has pages
+        * that are usually filtered out while saving the vmcore.
+        */
+-      if (fdm->region_cnt > fdm->registered_regions) {
++      if (be16_to_cpu(fdm->region_cnt) > be16_to_cpu(fdm->registered_regions)) {
+               pr_warn("Not all memory regions were saved!!!\n");
+               pr_warn("  Unsaved memory regions:\n");
+-              i = fdm->registered_regions;
+-              while (i < fdm->region_cnt) {
++              i = be16_to_cpu(fdm->registered_regions);
++              while (i < be16_to_cpu(fdm->region_cnt)) {
+                       pr_warn("\t[%03d] base: 0x%llx, size: 0x%llx\n",
+-                              i, fdm->rgn[i].src, fdm->rgn[i].size);
++                              i, be64_to_cpu(fdm->rgn[i].src),
++                              be64_to_cpu(fdm->rgn[i].size));
+                       i++;
+               }
+@@ -170,7 +171,7 @@ static void opal_fadump_get_config(struct fw_dump *fadump_conf,
+       }
+       fadump_conf->boot_mem_top = (fadump_conf->boot_memory_size + hole_size);
+-      fadump_conf->boot_mem_regs_cnt = fdm->region_cnt;
++      fadump_conf->boot_mem_regs_cnt = be16_to_cpu(fdm->region_cnt);
+       opal_fadump_update_config(fadump_conf, fdm);
+ }
+@@ -178,35 +179,38 @@ static void opal_fadump_get_config(struct fw_dump *fadump_conf,
+ static void opal_fadump_init_metadata(struct opal_fadump_mem_struct *fdm)
+ {
+       fdm->version = OPAL_FADUMP_VERSION;
+-      fdm->region_cnt = 0;
+-      fdm->registered_regions = 0;
+-      fdm->fadumphdr_addr = 0;
++      fdm->region_cnt = cpu_to_be16(0);
++      fdm->registered_regions = cpu_to_be16(0);
++      fdm->fadumphdr_addr = cpu_to_be64(0);
+ }
+ static u64 opal_fadump_init_mem_struct(struct fw_dump *fadump_conf)
+ {
+       u64 addr = fadump_conf->reserve_dump_area_start;
++      u16 reg_cnt;
+       int i;
+       opal_fdm = __va(fadump_conf->kernel_metadata);
+       opal_fadump_init_metadata(opal_fdm);
+       /* Boot memory regions */
++      reg_cnt = be16_to_cpu(opal_fdm->region_cnt);
+       for (i = 0; i < fadump_conf->boot_mem_regs_cnt; i++) {
+-              opal_fdm->rgn[i].src    = fadump_conf->boot_mem_addr[i];
+-              opal_fdm->rgn[i].dest   = addr;
+-              opal_fdm->rgn[i].size   = fadump_conf->boot_mem_sz[i];
++              opal_fdm->rgn[i].src    = cpu_to_be64(fadump_conf->boot_mem_addr[i]);
++              opal_fdm->rgn[i].dest   = cpu_to_be64(addr);
++              opal_fdm->rgn[i].size   = cpu_to_be64(fadump_conf->boot_mem_sz[i]);
+-              opal_fdm->region_cnt++;
++              reg_cnt++;
+               addr += fadump_conf->boot_mem_sz[i];
+       }
++      opal_fdm->region_cnt = cpu_to_be16(reg_cnt);
+       /*
+        * Kernel metadata is passed to f/w and retrieved in capture kerenl.
+        * So, use it to save fadump header address instead of calculating it.
+        */
+-      opal_fdm->fadumphdr_addr = (opal_fdm->rgn[0].dest +
+-                                  fadump_conf->boot_memory_size);
++      opal_fdm->fadumphdr_addr = cpu_to_be64(be64_to_cpu(opal_fdm->rgn[0].dest) +
++                                             fadump_conf->boot_memory_size);
+       opal_fadump_update_config(fadump_conf, opal_fdm);
+@@ -269,18 +273,21 @@ static u64 opal_fadump_get_bootmem_min(void)
+ static int opal_fadump_register(struct fw_dump *fadump_conf)
+ {
+       s64 rc = OPAL_PARAMETER;
++      u16 registered_regs;
+       int i, err = -EIO;
+-      for (i = 0; i < opal_fdm->region_cnt; i++) {
++      registered_regs = be16_to_cpu(opal_fdm->registered_regions);
++      for (i = 0; i < be16_to_cpu(opal_fdm->region_cnt); i++) {
+               rc = opal_mpipl_update(OPAL_MPIPL_ADD_RANGE,
+-                                     opal_fdm->rgn[i].src,
+-                                     opal_fdm->rgn[i].dest,
+-                                     opal_fdm->rgn[i].size);
++                                     be64_to_cpu(opal_fdm->rgn[i].src),
++                                     be64_to_cpu(opal_fdm->rgn[i].dest),
++                                     be64_to_cpu(opal_fdm->rgn[i].size));
+               if (rc != OPAL_SUCCESS)
+                       break;
+-              opal_fdm->registered_regions++;
++              registered_regs++;
+       }
++      opal_fdm->registered_regions = cpu_to_be16(registered_regs);
+       switch (rc) {
+       case OPAL_SUCCESS:
+@@ -291,7 +298,8 @@ static int opal_fadump_register(struct fw_dump *fadump_conf)
+       case OPAL_RESOURCE:
+               /* If MAX regions limit in f/w is hit, warn and proceed. */
+               pr_warn("%d regions could not be registered for MPIPL as MAX limit is reached!\n",
+-                      (opal_fdm->region_cnt - opal_fdm->registered_regions));
++                      (be16_to_cpu(opal_fdm->region_cnt) -
++                       be16_to_cpu(opal_fdm->registered_regions)));
+               fadump_conf->dump_registered = 1;
+               err = 0;
+               break;
+@@ -312,7 +320,7 @@ static int opal_fadump_register(struct fw_dump *fadump_conf)
+        * If some regions were registered before OPAL_MPIPL_ADD_RANGE
+        * OPAL call failed, unregister all regions.
+        */
+-      if ((err < 0) && (opal_fdm->registered_regions > 0))
++      if ((err < 0) && (be16_to_cpu(opal_fdm->registered_regions) > 0))
+               opal_fadump_unregister(fadump_conf);
+       return err;
+@@ -328,7 +336,7 @@ static int opal_fadump_unregister(struct fw_dump *fadump_conf)
+               return -EIO;
+       }
+-      opal_fdm->registered_regions = 0;
++      opal_fdm->registered_regions = cpu_to_be16(0);
+       fadump_conf->dump_registered = 0;
+       return 0;
+ }
+@@ -563,19 +571,20 @@ static void opal_fadump_region_show(struct fw_dump *fadump_conf,
+       else
+               fdm_ptr = opal_fdm;
+-      for (i = 0; i < fdm_ptr->region_cnt; i++) {
++      for (i = 0; i < be16_to_cpu(fdm_ptr->region_cnt); i++) {
+               /*
+                * Only regions that are registered for MPIPL
+                * would have dump data.
+                */
+               if ((fadump_conf->dump_active) &&
+-                  (i < fdm_ptr->registered_regions))
+-                      dumped_bytes = fdm_ptr->rgn[i].size;
++                  (i < be16_to_cpu(fdm_ptr->registered_regions)))
++                      dumped_bytes = be64_to_cpu(fdm_ptr->rgn[i].size);
+               seq_printf(m, "DUMP: Src: %#016llx, Dest: %#016llx, ",
+-                         fdm_ptr->rgn[i].src, fdm_ptr->rgn[i].dest);
++                         be64_to_cpu(fdm_ptr->rgn[i].src),
++                         be64_to_cpu(fdm_ptr->rgn[i].dest));
+               seq_printf(m, "Size: %#llx, Dumped: %#llx bytes\n",
+-                         fdm_ptr->rgn[i].size, dumped_bytes);
++                         be64_to_cpu(fdm_ptr->rgn[i].size), dumped_bytes);
+       }
+       /* Dump is active. Show reserved area start address. */
+@@ -624,6 +633,7 @@ void __init opal_fadump_dt_scan(struct fw_dump *fadump_conf, u64 node)
+ {
+       const __be32 *prop;
+       unsigned long dn;
++      __be64 be_addr;
+       u64 addr = 0;
+       int i, len;
+       s64 ret;
+@@ -680,13 +690,13 @@ void __init opal_fadump_dt_scan(struct fw_dump *fadump_conf, u64 node)
+       if (!prop)
+               return;
+-      ret = opal_mpipl_query_tag(OPAL_MPIPL_TAG_KERNEL, &addr);
+-      if ((ret != OPAL_SUCCESS) || !addr) {
++      ret = opal_mpipl_query_tag(OPAL_MPIPL_TAG_KERNEL, &be_addr);
++      if ((ret != OPAL_SUCCESS) || !be_addr) {
+               pr_err("Failed to get Kernel metadata (%lld)\n", ret);
+               return;
+       }
+-      addr = be64_to_cpu(addr);
++      addr = be64_to_cpu(be_addr);
+       pr_debug("Kernel metadata addr: %llx\n", addr);
+       opal_fdm_active = __va(addr);
+@@ -697,14 +707,14 @@ void __init opal_fadump_dt_scan(struct fw_dump *fadump_conf, u64 node)
+       }
+       /* Kernel regions not registered with f/w for MPIPL */
+-      if (opal_fdm_active->registered_regions == 0) {
++      if (be16_to_cpu(opal_fdm_active->registered_regions) == 0) {
+               opal_fdm_active = NULL;
+               return;
+       }
+-      ret = opal_mpipl_query_tag(OPAL_MPIPL_TAG_CPU, &addr);
+-      if (addr) {
+-              addr = be64_to_cpu(addr);
++      ret = opal_mpipl_query_tag(OPAL_MPIPL_TAG_CPU, &be_addr);
++      if (be_addr) {
++              addr = be64_to_cpu(be_addr);
+               pr_debug("CPU metadata addr: %llx\n", addr);
+               opal_cpu_metadata = __va(addr);
+       }
+diff --git a/arch/powerpc/platforms/powernv/opal-fadump.h b/arch/powerpc/platforms/powernv/opal-fadump.h
+index f1e9ecf548c5..3f715efb0aa6 100644
+--- a/arch/powerpc/platforms/powernv/opal-fadump.h
++++ b/arch/powerpc/platforms/powernv/opal-fadump.h
+@@ -31,14 +31,14 @@
+  * OPAL FADump kernel metadata
+  *
+  * The address of this structure will be registered with f/w for retrieving
+- * and processing during crash dump.
++ * in the capture kernel to process the crash dump.
+  */
+ struct opal_fadump_mem_struct {
+       u8      version;
+       u8      reserved[3];
+-      u16     region_cnt;             /* number of regions */
+-      u16     registered_regions;     /* Regions registered for MPIPL */
+-      u64     fadumphdr_addr;
++      __be16  region_cnt;             /* number of regions */
++      __be16  registered_regions;     /* Regions registered for MPIPL */
++      __be64  fadumphdr_addr;
+       struct opal_mpipl_region        rgn[FADUMP_MAX_MEM_REGS];
+ } __packed;
+@@ -135,7 +135,7 @@ static inline void opal_fadump_read_regs(char *bufp, unsigned int regs_cnt,
+       for (i = 0; i < regs_cnt; i++, bufp += reg_entry_size) {
+               reg_entry = (struct hdat_fadump_reg_entry *)bufp;
+               val = (cpu_endian ? be64_to_cpu(reg_entry->reg_val) :
+-                     reg_entry->reg_val);
++                     (u64)(reg_entry->reg_val));
+               opal_fadump_set_regval_regnum(regs,
+                                             be32_to_cpu(reg_entry->reg_type),
+                                             be32_to_cpu(reg_entry->reg_num),
+-- 
+2.35.1
+
diff --git a/queue-5.4/powerpc-fadump-fix-pt_load-segment-for-boot-memory-a.patch b/queue-5.4/powerpc-fadump-fix-pt_load-segment-for-boot-memory-a.patch
new file mode 100644 (file)
index 0000000..d72c09f
--- /dev/null
@@ -0,0 +1,62 @@
+From 70f85350ac0dc8da0be2546f6e7ab1e245547158 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Wed, 6 Apr 2022 15:08:37 +0530
+Subject: powerpc/fadump: fix PT_LOAD segment for boot memory area
+
+From: Hari Bathini <hbathini@linux.ibm.com>
+
+[ Upstream commit 15eb77f873255cf9f4d703b63cfbd23c46579654 ]
+
+Boot memory area is setup as separate PT_LOAD segment in the vmcore
+as it is moved by f/w, on crash, to a destination address provided by
+the kernel. Having separate PT_LOAD segment helps in handling the
+different physical address and offset for boot memory area in the
+vmcore.
+
+Commit ced1bf52f477 ("powerpc/fadump: merge adjacent memory ranges to
+reduce PT_LOAD segements") inadvertly broke this pre-condition for
+cases where some of the first kernel memory is available adjacent to
+boot memory area. This scenario is rare but possible when memory for
+fadump could not be reserved adjacent to boot memory area owing to
+memory hole or such. Reading memory from a vmcore exported in such
+scenario provides incorrect data.  Fix it by ensuring no other region
+is folded into boot memory area.
+
+Fixes: ced1bf52f477 ("powerpc/fadump: merge adjacent memory ranges to reduce PT_LOAD segements")
+Signed-off-by: Hari Bathini <hbathini@linux.ibm.com>
+Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
+Link: https://lore.kernel.org/r/20220406093839.206608-2-hbathini@linux.ibm.com
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ arch/powerpc/kernel/fadump.c | 8 ++++++--
+ 1 file changed, 6 insertions(+), 2 deletions(-)
+
+diff --git a/arch/powerpc/kernel/fadump.c b/arch/powerpc/kernel/fadump.c
+index 0455dc1b2797..69d64f406204 100644
+--- a/arch/powerpc/kernel/fadump.c
++++ b/arch/powerpc/kernel/fadump.c
+@@ -835,7 +835,6 @@ static int fadump_alloc_mem_ranges(struct fadump_mrange_info *mrange_info)
+                                      sizeof(struct fadump_memory_range));
+       return 0;
+ }
+-
+ static inline int fadump_add_mem_range(struct fadump_mrange_info *mrange_info,
+                                      u64 base, u64 end)
+ {
+@@ -854,7 +853,12 @@ static inline int fadump_add_mem_range(struct fadump_mrange_info *mrange_info,
+               start = mem_ranges[mrange_info->mem_range_cnt - 1].base;
+               size  = mem_ranges[mrange_info->mem_range_cnt - 1].size;
+-              if ((start + size) == base)
++              /*
++               * Boot memory area needs separate PT_LOAD segment(s) as it
++               * is moved to a different location at the time of crash.
++               * So, fold only if the region is not boot memory area.
++               */
++              if ((start + size) == base && start >= fw_dump.boot_mem_top)
+                       is_adjacent = true;
+       }
+       if (!is_adjacent) {
+-- 
+2.35.1
+
diff --git a/queue-5.4/powerpc-fsl_rio-fix-refcount-leak-in-fsl_rio_setup.patch b/queue-5.4/powerpc-fsl_rio-fix-refcount-leak-in-fsl_rio_setup.patch
new file mode 100644 (file)
index 0000000..65019fa
--- /dev/null
@@ -0,0 +1,40 @@
+From 4c698ab41f7953c325701929486d96c3c8b4db52 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Thu, 12 May 2022 16:37:18 +0400
+Subject: powerpc/fsl_rio: Fix refcount leak in fsl_rio_setup
+
+From: Miaoqian Lin <linmq006@gmail.com>
+
+[ Upstream commit fcee96924ba1596ca80a6770b2567ca546f9a482 ]
+
+of_parse_phandle() returns a node pointer with refcount
+incremented, we should use of_node_put() on it when not need anymore.
+Add missing of_node_put() to avoid refcount leak.
+
+Fixes: abc3aeae3aaa ("fsl-rio: Add two ports and rapidio message units support")
+Signed-off-by: Miaoqian Lin <linmq006@gmail.com>
+Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
+Link: https://lore.kernel.org/r/20220512123724.62931-1-linmq006@gmail.com
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ arch/powerpc/sysdev/fsl_rio.c | 2 ++
+ 1 file changed, 2 insertions(+)
+
+diff --git a/arch/powerpc/sysdev/fsl_rio.c b/arch/powerpc/sysdev/fsl_rio.c
+index 07c164f7f8cf..3f9f78621cf3 100644
+--- a/arch/powerpc/sysdev/fsl_rio.c
++++ b/arch/powerpc/sysdev/fsl_rio.c
+@@ -505,8 +505,10 @@ int fsl_rio_setup(struct platform_device *dev)
+       if (rc) {
+               dev_err(&dev->dev, "Can't get %pOF property 'reg'\n",
+                               rmu_node);
++              of_node_put(rmu_node);
+               goto err_rmu;
+       }
++      of_node_put(rmu_node);
+       rmu_regs_win = ioremap(rmu_regs.start, resource_size(&rmu_regs));
+       if (!rmu_regs_win) {
+               dev_err(&dev->dev, "Unable to map rmu register window\n");
+-- 
+2.35.1
+
diff --git a/queue-5.4/powerpc-idle-fix-return-value-of-__setup-handler.patch b/queue-5.4/powerpc-idle-fix-return-value-of-__setup-handler.patch
new file mode 100644 (file)
index 0000000..04076cb
--- /dev/null
@@ -0,0 +1,45 @@
+From 4e132907731d00674e198fb4776e1cd6ef05b305 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Mon, 2 May 2022 12:29:25 -0700
+Subject: powerpc/idle: Fix return value of __setup() handler
+
+From: Randy Dunlap <rdunlap@infradead.org>
+
+[ Upstream commit b793a01000122d2bd133ba451a76cc135b5e162c ]
+
+__setup() handlers should return 1 to obsolete_checksetup() in
+init/main.c to indicate that the boot option has been handled.
+
+A return of 0 causes the boot option/value to be listed as an Unknown
+kernel parameter and added to init's (limited) argument or environment
+strings.
+
+Also, error return codes don't mean anything to obsolete_checksetup() --
+only non-zero (usually 1) or zero. So return 1 from powersave_off().
+
+Fixes: 302eca184fb8 ("[POWERPC] cell: use ppc_md->power_save instead of cbe_idle_loop")
+Reported-by: Igor Zhbanov <izh1979@gmail.com>
+Signed-off-by: Randy Dunlap <rdunlap@infradead.org>
+Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
+Link: https://lore.kernel.org/r/20220502192925.19954-1-rdunlap@infradead.org
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ arch/powerpc/kernel/idle.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/arch/powerpc/kernel/idle.c b/arch/powerpc/kernel/idle.c
+index a36fd053c3db..0615ba86baef 100644
+--- a/arch/powerpc/kernel/idle.c
++++ b/arch/powerpc/kernel/idle.c
+@@ -37,7 +37,7 @@ static int __init powersave_off(char *arg)
+ {
+       ppc_md.power_save = NULL;
+       cpuidle_disable = IDLE_POWERSAVE_OFF;
+-      return 0;
++      return 1;
+ }
+ __setup("powersave=off", powersave_off);
+-- 
+2.35.1
+
diff --git a/queue-5.4/powerpc-iommu-add-missing-of_node_put-in-iommu_init_.patch b/queue-5.4/powerpc-iommu-add-missing-of_node_put-in-iommu_init_.patch
new file mode 100644 (file)
index 0000000..727d92b
--- /dev/null
@@ -0,0 +1,49 @@
+From 5b61a5999c65185e3950bc7e72d94cba8771323e Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Mon, 25 Apr 2022 08:12:45 +0000
+Subject: powerpc/iommu: Add missing of_node_put in iommu_init_early_dart
+
+From: Peng Wu <wupeng58@huawei.com>
+
+[ Upstream commit 57b742a5b8945118022973e6416b71351df512fb ]
+
+The device_node pointer is returned by of_find_compatible_node
+with refcount incremented. We should use of_node_put() to avoid
+the refcount leak.
+
+Signed-off-by: Peng Wu <wupeng58@huawei.com>
+Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
+Link: https://lore.kernel.org/r/20220425081245.21705-1-wupeng58@huawei.com
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ arch/powerpc/sysdev/dart_iommu.c | 6 ++++--
+ 1 file changed, 4 insertions(+), 2 deletions(-)
+
+diff --git a/arch/powerpc/sysdev/dart_iommu.c b/arch/powerpc/sysdev/dart_iommu.c
+index 6b4a34b36d98..8ff9bcfe4b8d 100644
+--- a/arch/powerpc/sysdev/dart_iommu.c
++++ b/arch/powerpc/sysdev/dart_iommu.c
+@@ -403,9 +403,10 @@ void __init iommu_init_early_dart(struct pci_controller_ops *controller_ops)
+       }
+       /* Initialize the DART HW */
+-      if (dart_init(dn) != 0)
++      if (dart_init(dn) != 0) {
++              of_node_put(dn);
+               return;
+-
++      }
+       /*
+        * U4 supports a DART bypass, we use it for 64-bit capable devices to
+        * improve performance.  However, that only works for devices connected
+@@ -418,6 +419,7 @@ void __init iommu_init_early_dart(struct pci_controller_ops *controller_ops)
+       /* Setup pci_dma ops */
+       set_pci_dma_ops(&dma_iommu_ops);
++      of_node_put(dn);
+ }
+ #ifdef CONFIG_PM
+-- 
+2.35.1
+
diff --git a/queue-5.4/powerpc-perf-fix-the-threshold-compare-group-constra.patch b/queue-5.4/powerpc-perf-fix-the-threshold-compare-group-constra.patch
new file mode 100644 (file)
index 0000000..a5d0057
--- /dev/null
@@ -0,0 +1,76 @@
+From 1c360c5c48cb07270380b8207a41340e5b8cf1b5 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Fri, 6 May 2022 11:40:15 +0530
+Subject: powerpc/perf: Fix the threshold compare group constraint for power9
+
+From: Kajol Jain <kjain@linux.ibm.com>
+
+[ Upstream commit ab0cc6bbf0c812731c703ec757fcc3fc3a457a34 ]
+
+Thresh compare bits for a event is used to program thresh compare
+field in Monitor Mode Control Register A (MMCRA: 9-18 bits for power9).
+When scheduling events as a group, all events in that group should
+match value in threshold bits (like thresh compare, thresh control,
+thresh select). Otherwise event open for the sibling events should fail.
+But in the current code, incase thresh compare bits are not valid,
+we are not failing in group_constraint function which can result
+in invalid group schduling.
+
+Fix the issue by returning -1 incase event is threshold and threshold
+compare value is not valid.
+
+Thresh control bits in the event code is used to program thresh_ctl
+field in Monitor Mode Control Register A (MMCRA: 48-55). In below example,
+the scheduling of group events PM_MRK_INST_CMPL (873534401e0) and
+PM_THRESH_MET (8734340101ec) is expected to fail as both event
+request different thresh control bits and invalid thresh compare value.
+
+Result before the patch changes:
+
+[command]# perf stat -e "{r8735340401e0,r8734340101ec}" sleep 1
+
+ Performance counter stats for 'sleep 1':
+
+            11,048      r8735340401e0
+             1,967      r8734340101ec
+
+       1.001354036 seconds time elapsed
+
+       0.001421000 seconds user
+       0.000000000 seconds sys
+
+Result after the patch changes:
+
+[command]# perf stat -e "{r8735340401e0,r8734340101ec}" sleep 1
+Error:
+The sys_perf_event_open() syscall returned with 22 (Invalid argument)
+for event (r8735340401e0).
+/bin/dmesg | grep -i perf may provide additional information.
+
+Fixes: 78a16d9fc1206 ("powerpc/perf: Avoid FAB_*_MATCH checks for power9")
+Signed-off-by: Kajol Jain <kjain@linux.ibm.com>
+Reviewed-by: Athira Rajeev <atrajeev@linux.vnet.ibm.com>
+Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
+Link: https://lore.kernel.org/r/20220506061015.43916-2-kjain@linux.ibm.com
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ arch/powerpc/perf/isa207-common.c | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+diff --git a/arch/powerpc/perf/isa207-common.c b/arch/powerpc/perf/isa207-common.c
+index 944180f55a3c..25eda98f3b1b 100644
+--- a/arch/powerpc/perf/isa207-common.c
++++ b/arch/powerpc/perf/isa207-common.c
+@@ -326,7 +326,8 @@ int isa207_get_constraint(u64 event, unsigned long *maskp, unsigned long *valp)
+               if (event_is_threshold(event) && is_thresh_cmp_valid(event)) {
+                       mask  |= CNST_THRESH_MASK;
+                       value |= CNST_THRESH_VAL(event >> EVENT_THRESH_SHIFT);
+-              }
++              } else if (event_is_threshold(event))
++                      return -1;
+       } else {
+               /*
+                * Special case for PM_MRK_FAB_RSP_MATCH and PM_MRK_FAB_RSP_MATCH_CYC,
+-- 
+2.35.1
+
diff --git a/queue-5.4/powerpc-powernv-fix-missing-of_node_put-in-uv_init.patch b/queue-5.4/powerpc-powernv-fix-missing-of_node_put-in-uv_init.patch
new file mode 100644 (file)
index 0000000..8180eef
--- /dev/null
@@ -0,0 +1,36 @@
+From c8c85ad90ac43899e43a7efcac8e2e5e286063dc Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Thu, 7 Apr 2022 09:00:43 +0000
+Subject: powerpc/powernv: fix missing of_node_put in uv_init()
+
+From: Lv Ruyi <lv.ruyi@zte.com.cn>
+
+[ Upstream commit 3ffa9fd471f57f365bc54fc87824c530422f64a5 ]
+
+of_find_compatible_node() returns node pointer with refcount incremented,
+use of_node_put() on it when done.
+
+Reported-by: Zeal Robot <zealci@zte.com.cn>
+Signed-off-by: Lv Ruyi <lv.ruyi@zte.com.cn>
+Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
+Link: https://lore.kernel.org/r/20220407090043.2491854-1-lv.ruyi@zte.com.cn
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ arch/powerpc/platforms/powernv/ultravisor.c | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/arch/powerpc/platforms/powernv/ultravisor.c b/arch/powerpc/platforms/powernv/ultravisor.c
+index e4a00ad06f9d..67c8c4b2d8b1 100644
+--- a/arch/powerpc/platforms/powernv/ultravisor.c
++++ b/arch/powerpc/platforms/powernv/ultravisor.c
+@@ -55,6 +55,7 @@ static int __init uv_init(void)
+               return -ENODEV;
+       uv_memcons = memcons_init(node, "memcons");
++      of_node_put(node);
+       if (!uv_memcons)
+               return -ENOENT;
+-- 
+2.35.1
+
diff --git a/queue-5.4/powerpc-xics-fix-refcount-leak-in-icp_opal_init.patch b/queue-5.4/powerpc-xics-fix-refcount-leak-in-icp_opal_init.patch
new file mode 100644 (file)
index 0000000..9741ae0
--- /dev/null
@@ -0,0 +1,36 @@
+From 654725fe5f34fa6a61b2e0fcd64aa74631c1291a Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Sat, 2 Apr 2022 01:34:19 +0000
+Subject: powerpc/xics: fix refcount leak in icp_opal_init()
+
+From: Lv Ruyi <lv.ruyi@zte.com.cn>
+
+[ Upstream commit 5dd9e27ea4a39f7edd4bf81e9e70208e7ac0b7c9 ]
+
+The of_find_compatible_node() function returns a node pointer with
+refcount incremented, use of_node_put() on it when done.
+
+Reported-by: Zeal Robot <zealci@zte.com.cn>
+Signed-off-by: Lv Ruyi <lv.ruyi@zte.com.cn>
+Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
+Link: https://lore.kernel.org/r/20220402013419.2410298-1-lv.ruyi@zte.com.cn
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ arch/powerpc/sysdev/xics/icp-opal.c | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/arch/powerpc/sysdev/xics/icp-opal.c b/arch/powerpc/sysdev/xics/icp-opal.c
+index 68fd2540b093..7fa520efcefa 100644
+--- a/arch/powerpc/sysdev/xics/icp-opal.c
++++ b/arch/powerpc/sysdev/xics/icp-opal.c
+@@ -195,6 +195,7 @@ int icp_opal_init(void)
+       printk("XICS: Using OPAL ICP fallbacks\n");
++      of_node_put(np);
+       return 0;
+ }
+-- 
+2.35.1
+
diff --git a/queue-5.4/proc-fix-dentry-inode-overinstantiating-under-proc-p.patch b/queue-5.4/proc-fix-dentry-inode-overinstantiating-under-proc-p.patch
new file mode 100644 (file)
index 0000000..c5d88d4
--- /dev/null
@@ -0,0 +1,61 @@
+From 574a6b2f5d444f8a8aaabdb0267bea7b6ad48e54 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Mon, 9 May 2022 18:29:19 -0700
+Subject: proc: fix dentry/inode overinstantiating under /proc/${pid}/net
+
+From: Alexey Dobriyan <adobriyan@gmail.com>
+
+[ Upstream commit 7055197705709c59b8ab77e6a5c7d46d61edd96e ]
+
+When a process exits, /proc/${pid}, and /proc/${pid}/net dentries are
+flushed.  However some leaf dentries like /proc/${pid}/net/arp_cache
+aren't.  That's because respective PDEs have proc_misc_d_revalidate() hook
+which returns 1 and leaves dentries/inodes in the LRU.
+
+Force revalidation/lookup on everything under /proc/${pid}/net by
+inheriting proc_net_dentry_ops.
+
+[akpm@linux-foundation.org: coding-style cleanups]
+Link: https://lkml.kernel.org/r/YjdVHgildbWO7diJ@localhost.localdomain
+Fixes: c6c75deda813 ("proc: fix lookup in /proc/net subdirectories after setns(2)")
+Signed-off-by: Alexey Dobriyan <adobriyan@gmail.com>
+Reported-by: hui li <juanfengpy@gmail.com>
+Cc: Al Viro <viro@zeniv.linux.org.uk>
+Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ fs/proc/generic.c  | 3 +++
+ fs/proc/proc_net.c | 3 +++
+ 2 files changed, 6 insertions(+)
+
+diff --git a/fs/proc/generic.c b/fs/proc/generic.c
+index 8c3dbe13e647..372b4dad4863 100644
+--- a/fs/proc/generic.c
++++ b/fs/proc/generic.c
+@@ -446,6 +446,9 @@ static struct proc_dir_entry *__proc_create(struct proc_dir_entry **parent,
+       proc_set_user(ent, (*parent)->uid, (*parent)->gid);
+       ent->proc_dops = &proc_misc_dentry_ops;
++      /* Revalidate everything under /proc/${pid}/net */
++      if ((*parent)->proc_dops == &proc_net_dentry_ops)
++              pde_force_lookup(ent);
+ out:
+       return ent;
+diff --git a/fs/proc/proc_net.c b/fs/proc/proc_net.c
+index 313b7c751867..9cd5b47199cb 100644
+--- a/fs/proc/proc_net.c
++++ b/fs/proc/proc_net.c
+@@ -343,6 +343,9 @@ static __net_init int proc_net_ns_init(struct net *net)
+       proc_set_user(netd, uid, gid);
++      /* Seed dentry revalidation for /proc/${pid}/net */
++      pde_force_lookup(netd);
++
+       err = -EEXIST;
+       net_statd = proc_net_mkdir(net, "stat", netd);
+       if (!net_statd)
+-- 
+2.35.1
+
diff --git a/queue-5.4/rdma-hfi1-prevent-panic-when-sdma-is-disabled.patch b/queue-5.4/rdma-hfi1-prevent-panic-when-sdma-is-disabled.patch
new file mode 100644 (file)
index 0000000..10cf0b1
--- /dev/null
@@ -0,0 +1,50 @@
+From a932898036e5f859bfb6b21641448c063f311cf8 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Fri, 20 May 2022 14:37:06 -0400
+Subject: RDMA/hfi1: Prevent panic when SDMA is disabled
+
+From: Douglas Miller <doug.miller@cornelisnetworks.com>
+
+[ Upstream commit 629e052d0c98e46dde9f0824f0aa437f678d9b8f ]
+
+If the hfi1 module is loaded with HFI1_CAP_SDMA off, a call to
+hfi1_write_iter() will dereference a NULL pointer and panic. A typical
+stack frame is:
+
+  sdma_select_user_engine [hfi1]
+  hfi1_user_sdma_process_request [hfi1]
+  hfi1_write_iter [hfi1]
+  do_iter_readv_writev
+  do_iter_write
+  vfs_writev
+  do_writev
+  do_syscall_64
+
+The fix is to test for SDMA in hfi1_write_iter() and fail the I/O with
+EINVAL.
+
+Link: https://lore.kernel.org/r/20220520183706.48973.79803.stgit@awfm-01.cornelisnetworks.com
+Signed-off-by: Douglas Miller <doug.miller@cornelisnetworks.com>
+Signed-off-by: Dennis Dalessandro <dennis.dalessandro@cornelisnetworks.com>
+Signed-off-by: Jason Gunthorpe <jgg@nvidia.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/infiniband/hw/hfi1/file_ops.c | 2 ++
+ 1 file changed, 2 insertions(+)
+
+diff --git a/drivers/infiniband/hw/hfi1/file_ops.c b/drivers/infiniband/hw/hfi1/file_ops.c
+index 89e1dfd07a1b..8c7ba7bad42b 100644
+--- a/drivers/infiniband/hw/hfi1/file_ops.c
++++ b/drivers/infiniband/hw/hfi1/file_ops.c
+@@ -308,6 +308,8 @@ static ssize_t hfi1_write_iter(struct kiocb *kiocb, struct iov_iter *from)
+       unsigned long dim = from->nr_segs;
+       int idx;
++      if (!HFI1_CAP_IS_KSET(SDMA))
++              return -EINVAL;
+       idx = srcu_read_lock(&fd->pq_srcu);
+       pq = srcu_dereference(fd->pq, &fd->pq_srcu);
+       if (!cq || !pq) {
+-- 
+2.35.1
+
diff --git a/queue-5.4/rdma-hfi1-prevent-use-of-lock-before-it-is-initializ.patch b/queue-5.4/rdma-hfi1-prevent-use-of-lock-before-it-is-initializ.patch
new file mode 100644 (file)
index 0000000..c25b778
--- /dev/null
@@ -0,0 +1,72 @@
+From 483dbf9f79b7bf4688ee2cf37a8d5689a162a366 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Fri, 20 May 2022 14:37:01 -0400
+Subject: RDMA/hfi1: Prevent use of lock before it is initialized
+
+From: Douglas Miller <doug.miller@cornelisnetworks.com>
+
+[ Upstream commit 05c03dfd09c069c4ffd783b47b2da5dcc9421f2c ]
+
+If there is a failure during probe of hfi1 before the sdma_map_lock is
+initialized, the call to hfi1_free_devdata() will attempt to use a lock
+that has not been initialized. If the locking correctness validator is on
+then an INFO message and stack trace resembling the following may be seen:
+
+  INFO: trying to register non-static key.
+  The code is fine but needs lockdep annotation, or maybe
+  you didn't initialize this object before use?
+  turning off the locking correctness validator.
+  Call Trace:
+  register_lock_class+0x11b/0x880
+  __lock_acquire+0xf3/0x7930
+  lock_acquire+0xff/0x2d0
+  _raw_spin_lock_irq+0x46/0x60
+  sdma_clean+0x42a/0x660 [hfi1]
+  hfi1_free_devdata+0x3a7/0x420 [hfi1]
+  init_one+0x867/0x11a0 [hfi1]
+  pci_device_probe+0x40e/0x8d0
+
+The use of sdma_map_lock in sdma_clean() is for freeing the sdma_map
+memory, and sdma_map is not allocated/initialized until after
+sdma_map_lock has been initialized. This code only needs to be run if
+sdma_map is not NULL, and so checking for that condition will avoid trying
+to use the lock before it is initialized.
+
+Fixes: 473291b3ea0e ("IB/hfi1: Fix for early release of sdma context")
+Fixes: 7724105686e7 ("IB/hfi1: add driver files")
+Link: https://lore.kernel.org/r/20220520183701.48973.72434.stgit@awfm-01.cornelisnetworks.com
+Reported-by: Zheyu Ma <zheyuma97@gmail.com>
+Signed-off-by: Douglas Miller <doug.miller@cornelisnetworks.com>
+Signed-off-by: Dennis Dalessandro <dennis.dalessandro@cornelisnetworks.com>
+Signed-off-by: Jason Gunthorpe <jgg@nvidia.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/infiniband/hw/hfi1/sdma.c | 12 +++++++-----
+ 1 file changed, 7 insertions(+), 5 deletions(-)
+
+diff --git a/drivers/infiniband/hw/hfi1/sdma.c b/drivers/infiniband/hw/hfi1/sdma.c
+index 248be21acdbe..2a684fc6056e 100644
+--- a/drivers/infiniband/hw/hfi1/sdma.c
++++ b/drivers/infiniband/hw/hfi1/sdma.c
+@@ -1329,11 +1329,13 @@ void sdma_clean(struct hfi1_devdata *dd, size_t num_engines)
+               kvfree(sde->tx_ring);
+               sde->tx_ring = NULL;
+       }
+-      spin_lock_irq(&dd->sde_map_lock);
+-      sdma_map_free(rcu_access_pointer(dd->sdma_map));
+-      RCU_INIT_POINTER(dd->sdma_map, NULL);
+-      spin_unlock_irq(&dd->sde_map_lock);
+-      synchronize_rcu();
++      if (rcu_access_pointer(dd->sdma_map)) {
++              spin_lock_irq(&dd->sde_map_lock);
++              sdma_map_free(rcu_access_pointer(dd->sdma_map));
++              RCU_INIT_POINTER(dd->sdma_map, NULL);
++              spin_unlock_irq(&dd->sde_map_lock);
++              synchronize_rcu();
++      }
+       kfree(dd->per_sdma);
+       dd->per_sdma = NULL;
+-- 
+2.35.1
+
diff --git a/queue-5.4/regulator-core-fix-enable_count-imbalance-with-exclu.patch b/queue-5.4/regulator-core-fix-enable_count-imbalance-with-exclu.patch
new file mode 100644 (file)
index 0000000..ce3a2f7
--- /dev/null
@@ -0,0 +1,52 @@
+From 761f024068cc5417749e7fe573819e99a2d4ca34 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Wed, 4 May 2022 21:31:52 -0700
+Subject: regulator: core: Fix enable_count imbalance with EXCLUSIVE_GET
+
+From: Zev Weiss <zev@bewilderbeest.net>
+
+[ Upstream commit c3e3ca05dae37f8f74bb80358efd540911cbc2c8 ]
+
+Since the introduction of regulator->enable_count, a driver that did
+an exclusive get on an already-enabled regulator would end up with
+enable_count initialized to 0 but rdev->use_count initialized to 1.
+With that starting point the regulator is effectively stuck enabled,
+because if the driver attempted to disable it it would fail the
+enable_count underflow check in _regulator_handle_consumer_disable().
+
+The EXCLUSIVE_GET path in _regulator_get() now initializes
+enable_count along with rdev->use_count so that the regulator can be
+disabled without underflowing the former.
+
+Signed-off-by: Zev Weiss <zev@bewilderbeest.net>
+Fixes: 5451781dadf85 ("regulator: core: Only count load for enabled consumers")
+Link: https://lore.kernel.org/r/20220505043152.12933-1-zev@bewilderbeest.net
+Signed-off-by: Mark Brown <broonie@kernel.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/regulator/core.c | 7 +++++--
+ 1 file changed, 5 insertions(+), 2 deletions(-)
+
+diff --git a/drivers/regulator/core.c b/drivers/regulator/core.c
+index 7fd793d8536c..ae2addadb36f 100644
+--- a/drivers/regulator/core.c
++++ b/drivers/regulator/core.c
+@@ -1988,10 +1988,13 @@ struct regulator *_regulator_get(struct device *dev, const char *id,
+               rdev->exclusive = 1;
+               ret = _regulator_is_enabled(rdev);
+-              if (ret > 0)
++              if (ret > 0) {
+                       rdev->use_count = 1;
+-              else
++                      regulator->enable_count = 1;
++              } else {
+                       rdev->use_count = 0;
++                      regulator->enable_count = 0;
++              }
+       }
+       device_link_add(dev, &rdev->dev, DL_FLAG_STATELESS);
+-- 
+2.35.1
+
diff --git a/queue-5.4/regulator-pfuze100-fix-refcount-leak-in-pfuze_parse_.patch b/queue-5.4/regulator-pfuze100-fix-refcount-leak-in-pfuze_parse_.patch
new file mode 100644 (file)
index 0000000..436fef9
--- /dev/null
@@ -0,0 +1,44 @@
+From 0867dc666be07296f7ef90fc648100983fa5efaa Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Wed, 11 May 2022 15:35:05 +0400
+Subject: regulator: pfuze100: Fix refcount leak in pfuze_parse_regulators_dt
+
+From: Miaoqian Lin <linmq006@gmail.com>
+
+[ Upstream commit afaa7b933ef00a2d3262f4d1252087613fb5c06d ]
+
+of_node_get() returns a node with refcount incremented.
+Calling of_node_put() to drop the reference when not needed anymore.
+
+Fixes: 3784b6d64dc5 ("regulator: pfuze100: add pfuze100 regulator driver")
+Signed-off-by: Miaoqian Lin <linmq006@gmail.com>
+Link: https://lore.kernel.org/r/20220511113506.45185-1-linmq006@gmail.com
+Signed-off-by: Mark Brown <broonie@kernel.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/regulator/pfuze100-regulator.c | 2 ++
+ 1 file changed, 2 insertions(+)
+
+diff --git a/drivers/regulator/pfuze100-regulator.c b/drivers/regulator/pfuze100-regulator.c
+index 44b1da7cc374..f873d97100e2 100644
+--- a/drivers/regulator/pfuze100-regulator.c
++++ b/drivers/regulator/pfuze100-regulator.c
+@@ -528,6 +528,7 @@ static int pfuze_parse_regulators_dt(struct pfuze_chip *chip)
+       parent = of_get_child_by_name(np, "regulators");
+       if (!parent) {
+               dev_err(dev, "regulators node not found\n");
++              of_node_put(np);
+               return -EINVAL;
+       }
+@@ -557,6 +558,7 @@ static int pfuze_parse_regulators_dt(struct pfuze_chip *chip)
+       }
+       of_node_put(parent);
++      of_node_put(np);
+       if (ret < 0) {
+               dev_err(dev, "Error parsing regulator init data: %d\n",
+                       ret);
+-- 
+2.35.1
+
diff --git a/queue-5.4/revert-cpufreq-fix-possible-race-in-cpufreq-online-e.patch b/queue-5.4/revert-cpufreq-fix-possible-race-in-cpufreq-online-e.patch
new file mode 100644 (file)
index 0000000..cbe17a2
--- /dev/null
@@ -0,0 +1,51 @@
+From 84bc5dad7499a62477f895e64ad746c8139c0271 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Mon, 9 May 2022 09:27:37 +0530
+Subject: Revert "cpufreq: Fix possible race in cpufreq online error path"
+
+From: Viresh Kumar <viresh.kumar@linaro.org>
+
+[ Upstream commit 85f0e42bd65d01b351d561efb38e584d4c596553 ]
+
+This reverts commit f346e96267cd76175d6c201b40f770c0116a8a04.
+
+The commit tried to fix a possible real bug but it made it even worse.
+The fix was simply buggy as now an error out to out_offline_policy or
+out_exit_policy will try to release a semaphore which was never taken in
+the first place. This works fine only if we failed late, i.e. via
+out_destroy_policy.
+
+Fixes: f346e96267cd ("cpufreq: Fix possible race in cpufreq online error path")
+Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
+Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/cpufreq/cpufreq.c | 5 ++---
+ 1 file changed, 2 insertions(+), 3 deletions(-)
+
+diff --git a/drivers/cpufreq/cpufreq.c b/drivers/cpufreq/cpufreq.c
+index 7ea07764988e..af9f34804862 100644
+--- a/drivers/cpufreq/cpufreq.c
++++ b/drivers/cpufreq/cpufreq.c
+@@ -1509,6 +1509,8 @@ static int cpufreq_online(unsigned int cpu)
+       for_each_cpu(j, policy->real_cpus)
+               remove_cpu_dev_symlink(policy, get_cpu_device(j));
++      up_write(&policy->rwsem);
++
+ out_offline_policy:
+       if (cpufreq_driver->offline)
+               cpufreq_driver->offline(policy);
+@@ -1517,9 +1519,6 @@ static int cpufreq_online(unsigned int cpu)
+       if (cpufreq_driver->exit)
+               cpufreq_driver->exit(policy);
+-      cpumask_clear(policy->cpus);
+-      up_write(&policy->rwsem);
+-
+ out_free_policy:
+       cpufreq_policy_free(policy);
+       return ret;
+-- 
+2.35.1
+
diff --git a/queue-5.4/rtlwifi-use-pr_warn-instead-of-warn_once.patch b/queue-5.4/rtlwifi-use-pr_warn-instead-of-warn_once.patch
new file mode 100644 (file)
index 0000000..2ab248a
--- /dev/null
@@ -0,0 +1,39 @@
+From b3bf42a46fe1606095a0872eabd491521c229953 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Wed, 11 May 2022 09:44:52 +0800
+Subject: rtlwifi: Use pr_warn instead of WARN_ONCE
+
+From: Dongliang Mu <mudongliangabcd@gmail.com>
+
+[ Upstream commit ad732da434a2936128769216eddaece3b1af4588 ]
+
+This memory allocation failure can be triggered by fault injection or
+high pressure testing, resulting a WARN.
+
+Fix this by replacing WARN with pr_warn.
+
+Reported-by: syzkaller <syzkaller@googlegroups.com>
+Signed-off-by: Dongliang Mu <mudongliangabcd@gmail.com>
+Signed-off-by: Kalle Valo <kvalo@kernel.org>
+Link: https://lore.kernel.org/r/20220511014453.1621366-1-dzm91@hust.edu.cn
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/net/wireless/realtek/rtlwifi/usb.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/drivers/net/wireless/realtek/rtlwifi/usb.c b/drivers/net/wireless/realtek/rtlwifi/usb.c
+index bad06939a247..9bcb187d37dc 100644
+--- a/drivers/net/wireless/realtek/rtlwifi/usb.c
++++ b/drivers/net/wireless/realtek/rtlwifi/usb.c
+@@ -1013,7 +1013,7 @@ int rtl_usb_probe(struct usb_interface *intf,
+       hw = ieee80211_alloc_hw(sizeof(struct rtl_priv) +
+                               sizeof(struct rtl_usb_priv), &rtl_ops);
+       if (!hw) {
+-              WARN_ONCE(true, "rtl_usb: ieee80211 alloc failed\n");
++              pr_warn("rtl_usb: ieee80211 alloc failed\n");
+               return -ENOMEM;
+       }
+       rtlpriv = hw->priv;
+-- 
+2.35.1
+
diff --git a/queue-5.4/rxrpc-don-t-let-ack.previouspacket-regress.patch b/queue-5.4/rxrpc-don-t-let-ack.previouspacket-regress.patch
new file mode 100644 (file)
index 0000000..1ad925c
--- /dev/null
@@ -0,0 +1,85 @@
+From 4ca369030ac77f19210548ce9a65679d62f3abdf Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Sat, 21 May 2022 09:03:24 +0100
+Subject: rxrpc: Don't let ack.previousPacket regress
+
+From: David Howells <dhowells@redhat.com>
+
+[ Upstream commit 81524b6312535897707f2942695da1d359a5e56b ]
+
+The previousPacket field in the rx ACK packet should never go backwards -
+it's now the highest DATA sequence number received, not the last on
+received (it used to be used for out of sequence detection).
+
+Fixes: 248f219cb8bc ("rxrpc: Rewrite the data and ack handling code")
+Signed-off-by: David Howells <dhowells@redhat.com>
+cc: Marc Dionne <marc.dionne@auristor.com>
+cc: linux-afs@lists.infradead.org
+Signed-off-by: David S. Miller <davem@davemloft.net>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ net/rxrpc/ar-internal.h | 4 ++--
+ net/rxrpc/input.c       | 4 +++-
+ net/rxrpc/output.c      | 2 +-
+ 3 files changed, 6 insertions(+), 4 deletions(-)
+
+diff --git a/net/rxrpc/ar-internal.h b/net/rxrpc/ar-internal.h
+index 8e72b77b33a9..8ca7afe0ac26 100644
+--- a/net/rxrpc/ar-internal.h
++++ b/net/rxrpc/ar-internal.h
+@@ -668,7 +668,7 @@ struct rxrpc_call {
+       /* Receive-phase ACK management (ACKs we send). */
+       u8                      ackr_reason;    /* reason to ACK */
+       rxrpc_serial_t          ackr_serial;    /* serial of packet being ACK'd */
+-      rxrpc_seq_t             ackr_prev_seq;  /* previous sequence number received */
++      rxrpc_seq_t             ackr_highest_seq; /* Higest sequence number received */
+       rxrpc_seq_t             ackr_consumed;  /* Highest packet shown consumed */
+       rxrpc_seq_t             ackr_seen;      /* Highest packet shown seen */
+@@ -679,7 +679,7 @@ struct rxrpc_call {
+       /* Transmission-phase ACK management (ACKs we've received). */
+       ktime_t                 acks_latest_ts; /* Timestamp of latest ACK received */
+       rxrpc_seq_t             acks_first_seq; /* first sequence number received */
+-      rxrpc_seq_t             acks_prev_seq;  /* previous sequence number received */
++      rxrpc_seq_t             acks_prev_seq;  /* Highest previousPacket received */
+       rxrpc_seq_t             acks_lowest_nak; /* Lowest NACK in the buffer (or ==tx_hard_ack) */
+       rxrpc_seq_t             acks_lost_top;  /* tx_top at the time lost-ack ping sent */
+       rxrpc_serial_t          acks_lost_ping; /* Serial number of probe ACK */
+diff --git a/net/rxrpc/input.c b/net/rxrpc/input.c
+index 164dcd8d684a..8eafa3463b88 100644
+--- a/net/rxrpc/input.c
++++ b/net/rxrpc/input.c
+@@ -454,7 +454,6 @@ static void rxrpc_input_data(struct rxrpc_call *call, struct sk_buff *skb)
+           !rxrpc_receiving_reply(call))
+               goto unlock;
+-      call->ackr_prev_seq = seq0;
+       hard_ack = READ_ONCE(call->rx_hard_ack);
+       nr_subpackets = sp->nr_subpackets;
+@@ -535,6 +534,9 @@ static void rxrpc_input_data(struct rxrpc_call *call, struct sk_buff *skb)
+                       ack_serial = serial;
+               }
++              if (after(seq0, call->ackr_highest_seq))
++                      call->ackr_highest_seq = seq0;
++
+               /* Queue the packet.  We use a couple of memory barriers here as need
+                * to make sure that rx_top is perceived to be set after the buffer
+                * pointer and that the buffer pointer is set after the annotation and
+diff --git a/net/rxrpc/output.c b/net/rxrpc/output.c
+index a4a6f8ee0720..7f1c8116e030 100644
+--- a/net/rxrpc/output.c
++++ b/net/rxrpc/output.c
+@@ -89,7 +89,7 @@ static size_t rxrpc_fill_out_ack(struct rxrpc_connection *conn,
+       pkt->ack.bufferSpace    = htons(8);
+       pkt->ack.maxSkew        = htons(0);
+       pkt->ack.firstPacket    = htonl(hard_ack + 1);
+-      pkt->ack.previousPacket = htonl(call->ackr_prev_seq);
++      pkt->ack.previousPacket = htonl(call->ackr_highest_seq);
+       pkt->ack.serial         = htonl(serial);
+       pkt->ack.reason         = reason;
+       pkt->ack.nAcks          = top - hard_ack;
+-- 
+2.35.1
+
diff --git a/queue-5.4/rxrpc-don-t-try-to-resend-the-request-if-we-re-recei.patch b/queue-5.4/rxrpc-don-t-try-to-resend-the-request-if-we-re-recei.patch
new file mode 100644 (file)
index 0000000..492b167
--- /dev/null
@@ -0,0 +1,45 @@
+From 7aa69b6a42829f9caf97a16bdaf4d51f925f8d63 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Sat, 21 May 2022 09:03:11 +0100
+Subject: rxrpc: Don't try to resend the request if we're receiving the reply
+
+From: David Howells <dhowells@redhat.com>
+
+[ Upstream commit 114af61f88fbe34d641b13922d098ffec4c1be1b ]
+
+rxrpc has a timer to trigger resending of unacked data packets in a call.
+This is not cancelled when a client call switches to the receive phase on
+the basis that most calls don't last long enough for it to ever expire.
+However, if it *does* expire after we've started to receive the reply, we
+shouldn't then go into trying to retransmit or pinging the server to find
+out if an ack got lost.
+
+Fix this by skipping the resend code if we're into receiving the reply to a
+client call.
+
+Fixes: 17926a79320a ("[AF_RXRPC]: Provide secure RxRPC sockets for use by userspace and kernel both")
+Signed-off-by: David Howells <dhowells@redhat.com>
+cc: linux-afs@lists.infradead.org
+Signed-off-by: David S. Miller <davem@davemloft.net>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ net/rxrpc/call_event.c | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+diff --git a/net/rxrpc/call_event.c b/net/rxrpc/call_event.c
+index 80e15310f1b2..8574e7066d94 100644
+--- a/net/rxrpc/call_event.c
++++ b/net/rxrpc/call_event.c
+@@ -407,7 +407,8 @@ void rxrpc_process_call(struct work_struct *work)
+               goto recheck_state;
+       }
+-      if (test_and_clear_bit(RXRPC_CALL_EV_RESEND, &call->events)) {
++      if (test_and_clear_bit(RXRPC_CALL_EV_RESEND, &call->events) &&
++          call->state != RXRPC_CALL_CLIENT_RECV_REPLY) {
+               rxrpc_resend(call, now);
+               goto recheck_state;
+       }
+-- 
+2.35.1
+
diff --git a/queue-5.4/rxrpc-fix-decision-on-when-to-generate-an-idle-ack.patch b/queue-5.4/rxrpc-fix-decision-on-when-to-generate-an-idle-ack.patch
new file mode 100644 (file)
index 0000000..2596b51
--- /dev/null
@@ -0,0 +1,170 @@
+From f0b357c75b7f220fcdf8d95dee0e77cbacab0fdb Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Sat, 21 May 2022 09:03:31 +0100
+Subject: rxrpc: Fix decision on when to generate an IDLE ACK
+
+From: David Howells <dhowells@redhat.com>
+
+[ Upstream commit 9a3dedcf18096e8f7f22b8777d78c4acfdea1651 ]
+
+Fix the decision on when to generate an IDLE ACK by keeping a count of the
+number of packets we've received, but not yet soft-ACK'd, and the number of
+packets we've processed, but not yet hard-ACK'd, rather than trying to keep
+track of which DATA sequence numbers correspond to those points.
+
+We then generate an ACK when either counter exceeds 2.  The counters are
+both cleared when we transcribe the information into any sort of ACK packet
+for transmission.  IDLE and DELAY ACKs are skipped if both counters are 0
+(ie. no change).
+
+Fixes: 805b21b929e2 ("rxrpc: Send an ACK after every few DATA packets we receive")
+Signed-off-by: David Howells <dhowells@redhat.com>
+cc: Marc Dionne <marc.dionne@auristor.com>
+cc: linux-afs@lists.infradead.org
+Signed-off-by: David S. Miller <davem@davemloft.net>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ include/trace/events/rxrpc.h |  2 +-
+ net/rxrpc/ar-internal.h      |  4 ++--
+ net/rxrpc/input.c            | 11 +++++++++--
+ net/rxrpc/output.c           | 18 +++++++++++-------
+ net/rxrpc/recvmsg.c          |  8 +++-----
+ 5 files changed, 26 insertions(+), 17 deletions(-)
+
+diff --git a/include/trace/events/rxrpc.h b/include/trace/events/rxrpc.h
+index 059b6e45a028..839bb07b93a7 100644
+--- a/include/trace/events/rxrpc.h
++++ b/include/trace/events/rxrpc.h
+@@ -1511,7 +1511,7 @@ TRACE_EVENT(rxrpc_call_reset,
+                   __entry->call_serial = call->rx_serial;
+                   __entry->conn_serial = call->conn->hi_serial;
+                   __entry->tx_seq = call->tx_hard_ack;
+-                  __entry->rx_seq = call->ackr_seen;
++                  __entry->rx_seq = call->rx_hard_ack;
+                          ),
+           TP_printk("c=%08x %08x:%08x r=%08x/%08x tx=%08x rx=%08x",
+diff --git a/net/rxrpc/ar-internal.h b/net/rxrpc/ar-internal.h
+index 8ca7afe0ac26..cb174f699665 100644
+--- a/net/rxrpc/ar-internal.h
++++ b/net/rxrpc/ar-internal.h
+@@ -669,8 +669,8 @@ struct rxrpc_call {
+       u8                      ackr_reason;    /* reason to ACK */
+       rxrpc_serial_t          ackr_serial;    /* serial of packet being ACK'd */
+       rxrpc_seq_t             ackr_highest_seq; /* Higest sequence number received */
+-      rxrpc_seq_t             ackr_consumed;  /* Highest packet shown consumed */
+-      rxrpc_seq_t             ackr_seen;      /* Highest packet shown seen */
++      atomic_t                ackr_nr_unacked; /* Number of unacked packets */
++      atomic_t                ackr_nr_consumed; /* Number of packets needing hard ACK */
+       /* ping management */
+       rxrpc_serial_t          ping_serial;    /* Last ping sent */
+diff --git a/net/rxrpc/input.c b/net/rxrpc/input.c
+index 8eafa3463b88..5cf64cf8debf 100644
+--- a/net/rxrpc/input.c
++++ b/net/rxrpc/input.c
+@@ -413,8 +413,8 @@ static void rxrpc_input_data(struct rxrpc_call *call, struct sk_buff *skb)
+ {
+       struct rxrpc_skb_priv *sp = rxrpc_skb(skb);
+       enum rxrpc_call_state state;
+-      unsigned int j, nr_subpackets;
+-      rxrpc_serial_t serial = sp->hdr.serial, ack_serial = 0;
++      unsigned int j, nr_subpackets, nr_unacked = 0;
++      rxrpc_serial_t serial = sp->hdr.serial, ack_serial = serial;
+       rxrpc_seq_t seq0 = sp->hdr.seq, hard_ack;
+       bool immediate_ack = false, jumbo_bad = false;
+       u8 ack = 0;
+@@ -570,6 +570,8 @@ static void rxrpc_input_data(struct rxrpc_call *call, struct sk_buff *skb)
+                       sp = NULL;
+               }
++              nr_unacked++;
++
+               if (last) {
+                       set_bit(RXRPC_CALL_RX_LAST, &call->flags);
+                       if (!ack) {
+@@ -589,9 +591,14 @@ static void rxrpc_input_data(struct rxrpc_call *call, struct sk_buff *skb)
+                       }
+                       call->rx_expect_next = seq + 1;
+               }
++              if (!ack)
++                      ack_serial = serial;
+       }
+ ack:
++      if (atomic_add_return(nr_unacked, &call->ackr_nr_unacked) > 2 && !ack)
++              ack = RXRPC_ACK_IDLE;
++
+       if (ack)
+               rxrpc_propose_ACK(call, ack, ack_serial,
+                                 immediate_ack, true,
+diff --git a/net/rxrpc/output.c b/net/rxrpc/output.c
+index 7f1c8116e030..6202d2e32914 100644
+--- a/net/rxrpc/output.c
++++ b/net/rxrpc/output.c
+@@ -74,11 +74,18 @@ static size_t rxrpc_fill_out_ack(struct rxrpc_connection *conn,
+                                u8 reason)
+ {
+       rxrpc_serial_t serial;
++      unsigned int tmp;
+       rxrpc_seq_t hard_ack, top, seq;
+       int ix;
+       u32 mtu, jmax;
+       u8 *ackp = pkt->acks;
++      tmp = atomic_xchg(&call->ackr_nr_unacked, 0);
++      tmp |= atomic_xchg(&call->ackr_nr_consumed, 0);
++      if (!tmp && (reason == RXRPC_ACK_DELAY ||
++                   reason == RXRPC_ACK_IDLE))
++              return 0;
++
+       /* Barrier against rxrpc_input_data(). */
+       serial = call->ackr_serial;
+       hard_ack = READ_ONCE(call->rx_hard_ack);
+@@ -180,6 +187,10 @@ int rxrpc_send_ack_packet(struct rxrpc_call *call, bool ping,
+       n = rxrpc_fill_out_ack(conn, call, pkt, &hard_ack, &top, reason);
+       spin_unlock_bh(&call->lock);
++      if (n == 0) {
++              kfree(pkt);
++              return 0;
++      }
+       iov[0].iov_base = pkt;
+       iov[0].iov_len  = sizeof(pkt->whdr) + sizeof(pkt->ack) + n;
+@@ -227,13 +238,6 @@ int rxrpc_send_ack_packet(struct rxrpc_call *call, bool ping,
+                                         ntohl(pkt->ack.serial),
+                                         false, true,
+                                         rxrpc_propose_ack_retry_tx);
+-              } else {
+-                      spin_lock_bh(&call->lock);
+-                      if (after(hard_ack, call->ackr_consumed))
+-                              call->ackr_consumed = hard_ack;
+-                      if (after(top, call->ackr_seen))
+-                              call->ackr_seen = top;
+-                      spin_unlock_bh(&call->lock);
+               }
+               rxrpc_set_keepalive(call);
+diff --git a/net/rxrpc/recvmsg.c b/net/rxrpc/recvmsg.c
+index 4f48e3bdd4b4..c75789ebc514 100644
+--- a/net/rxrpc/recvmsg.c
++++ b/net/rxrpc/recvmsg.c
+@@ -212,11 +212,9 @@ static void rxrpc_rotate_rx_window(struct rxrpc_call *call)
+               rxrpc_end_rx_phase(call, serial);
+       } else {
+               /* Check to see if there's an ACK that needs sending. */
+-              if (after_eq(hard_ack, call->ackr_consumed + 2) ||
+-                  after_eq(top, call->ackr_seen + 2) ||
+-                  (hard_ack == top && after(hard_ack, call->ackr_consumed)))
+-                      rxrpc_propose_ACK(call, RXRPC_ACK_DELAY, serial,
+-                                        true, true,
++              if (atomic_inc_return(&call->ackr_nr_consumed) > 2)
++                      rxrpc_propose_ACK(call, RXRPC_ACK_IDLE, serial,
++                                        true, false,
+                                         rxrpc_propose_ack_rotate_rx);
+               if (call->ackr_reason && call->ackr_reason != RXRPC_ACK_DELAY)
+                       rxrpc_send_ack_packet(call, false, NULL);
+-- 
+2.35.1
+
diff --git a/queue-5.4/rxrpc-fix-listen-setting-the-bar-too-high-for-the-pr.patch b/queue-5.4/rxrpc-fix-listen-setting-the-bar-too-high-for-the-pr.patch
new file mode 100644 (file)
index 0000000..232f76d
--- /dev/null
@@ -0,0 +1,74 @@
+From be3d5efff50ee1c1f2332a88508e08f67fd98cdf Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Sat, 21 May 2022 09:03:04 +0100
+Subject: rxrpc: Fix listen() setting the bar too high for the prealloc rings
+
+From: David Howells <dhowells@redhat.com>
+
+[ Upstream commit 88e22159750b0d55793302eeed8ee603f5c1a95c ]
+
+AF_RXRPC's listen() handler lets you set the backlog up to 32 (if you bump
+up the sysctl), but whilst the preallocation circular buffers have 32 slots
+in them, one of them has to be a dead slot because we're using CIRC_CNT().
+
+This means that listen(rxrpc_sock, 32) will cause an oops when the socket
+is closed because rxrpc_service_prealloc_one() allocated one too many calls
+and rxrpc_discard_prealloc() won't then be able to get rid of them because
+it'll think the ring is empty.  rxrpc_release_calls_on_socket() then tries
+to abort them, but oopses because call->peer isn't yet set.
+
+Fix this by setting the maximum backlog to RXRPC_BACKLOG_MAX - 1 to match
+the ring capacity.
+
+ BUG: kernel NULL pointer dereference, address: 0000000000000086
+ ...
+ RIP: 0010:rxrpc_send_abort_packet+0x73/0x240 [rxrpc]
+ Call Trace:
+  <TASK>
+  ? __wake_up_common_lock+0x7a/0x90
+  ? rxrpc_notify_socket+0x8e/0x140 [rxrpc]
+  ? rxrpc_abort_call+0x4c/0x60 [rxrpc]
+  rxrpc_release_calls_on_socket+0x107/0x1a0 [rxrpc]
+  rxrpc_release+0xc9/0x1c0 [rxrpc]
+  __sock_release+0x37/0xa0
+  sock_close+0x11/0x20
+  __fput+0x89/0x240
+  task_work_run+0x59/0x90
+  do_exit+0x319/0xaa0
+
+Fixes: 00e907127e6f ("rxrpc: Preallocate peers, conns and calls for incoming service requests")
+Reported-by: Marc Dionne <marc.dionne@auristor.com>
+Signed-off-by: David Howells <dhowells@redhat.com>
+cc: linux-afs@lists.infradead.org
+Link: https://lists.infradead.org/pipermail/linux-afs/2022-March/005079.html
+Signed-off-by: David S. Miller <davem@davemloft.net>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ net/rxrpc/sysctl.c | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/net/rxrpc/sysctl.c b/net/rxrpc/sysctl.c
+index 18dade4e6f9a..8fc419072505 100644
+--- a/net/rxrpc/sysctl.c
++++ b/net/rxrpc/sysctl.c
+@@ -12,7 +12,7 @@
+ static struct ctl_table_header *rxrpc_sysctl_reg_table;
+ static const unsigned int four = 4;
+-static const unsigned int thirtytwo = 32;
++static const unsigned int max_backlog = RXRPC_BACKLOG_MAX - 1;
+ static const unsigned int n_65535 = 65535;
+ static const unsigned int n_max_acks = RXRPC_RXTX_BUFF_SIZE - 1;
+ static const unsigned long one_jiffy = 1;
+@@ -97,7 +97,7 @@ static struct ctl_table rxrpc_sysctl_table[] = {
+               .mode           = 0644,
+               .proc_handler   = proc_dointvec_minmax,
+               .extra1         = (void *)&four,
+-              .extra2         = (void *)&thirtytwo,
++              .extra2         = (void *)&max_backlog,
+       },
+       {
+               .procname       = "rx_window_size",
+-- 
+2.35.1
+
diff --git a/queue-5.4/rxrpc-fix-overlapping-ack-accounting.patch b/queue-5.4/rxrpc-fix-overlapping-ack-accounting.patch
new file mode 100644 (file)
index 0000000..125a223
--- /dev/null
@@ -0,0 +1,109 @@
+From 761a605577182dddaff3876dec444336ecfb10b9 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Sat, 21 May 2022 09:03:18 +0100
+Subject: rxrpc: Fix overlapping ACK accounting
+
+From: David Howells <dhowells@redhat.com>
+
+[ Upstream commit 8940ba3cfe4841928777fd45eaa92051522c7f0c ]
+
+Fix accidental overlapping of Rx-phase ACK accounting with Tx-phase ACK
+accounting through variables shared between the two.  call->acks_* members
+refer to ACKs received in the Tx phase and call->ackr_* members to ACKs
+sent/to be sent during the Rx phase.
+
+Fixes: 1a2391c30c0b ("rxrpc: Fix detection of out of order acks")
+Signed-off-by: David Howells <dhowells@redhat.com>
+cc: Jeffrey Altman <jaltman@auristor.com>
+cc: Marc Dionne <marc.dionne@auristor.com>
+cc: linux-afs@lists.infradead.org
+Signed-off-by: David S. Miller <davem@davemloft.net>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ net/rxrpc/ar-internal.h |  7 ++++---
+ net/rxrpc/input.c       | 16 ++++++++--------
+ 2 files changed, 12 insertions(+), 11 deletions(-)
+
+diff --git a/net/rxrpc/ar-internal.h b/net/rxrpc/ar-internal.h
+index 9fe264bec70c..8e72b77b33a9 100644
+--- a/net/rxrpc/ar-internal.h
++++ b/net/rxrpc/ar-internal.h
+@@ -665,10 +665,9 @@ struct rxrpc_call {
+       spinlock_t              input_lock;     /* Lock for packet input to this call */
+-      /* receive-phase ACK management */
++      /* Receive-phase ACK management (ACKs we send). */
+       u8                      ackr_reason;    /* reason to ACK */
+       rxrpc_serial_t          ackr_serial;    /* serial of packet being ACK'd */
+-      rxrpc_serial_t          ackr_first_seq; /* first sequence number received */
+       rxrpc_seq_t             ackr_prev_seq;  /* previous sequence number received */
+       rxrpc_seq_t             ackr_consumed;  /* Highest packet shown consumed */
+       rxrpc_seq_t             ackr_seen;      /* Highest packet shown seen */
+@@ -677,8 +676,10 @@ struct rxrpc_call {
+       rxrpc_serial_t          ping_serial;    /* Last ping sent */
+       ktime_t                 ping_time;      /* Time last ping sent */
+-      /* transmission-phase ACK management */
++      /* Transmission-phase ACK management (ACKs we've received). */
+       ktime_t                 acks_latest_ts; /* Timestamp of latest ACK received */
++      rxrpc_seq_t             acks_first_seq; /* first sequence number received */
++      rxrpc_seq_t             acks_prev_seq;  /* previous sequence number received */
+       rxrpc_seq_t             acks_lowest_nak; /* Lowest NACK in the buffer (or ==tx_hard_ack) */
+       rxrpc_seq_t             acks_lost_top;  /* tx_top at the time lost-ack ping sent */
+       rxrpc_serial_t          acks_lost_ping; /* Serial number of probe ACK */
+diff --git a/net/rxrpc/input.c b/net/rxrpc/input.c
+index 916d1f455b21..164dcd8d684a 100644
+--- a/net/rxrpc/input.c
++++ b/net/rxrpc/input.c
+@@ -808,7 +808,7 @@ static void rxrpc_input_soft_acks(struct rxrpc_call *call, u8 *acks,
+ static bool rxrpc_is_ack_valid(struct rxrpc_call *call,
+                              rxrpc_seq_t first_pkt, rxrpc_seq_t prev_pkt)
+ {
+-      rxrpc_seq_t base = READ_ONCE(call->ackr_first_seq);
++      rxrpc_seq_t base = READ_ONCE(call->acks_first_seq);
+       if (after(first_pkt, base))
+               return true; /* The window advanced */
+@@ -816,7 +816,7 @@ static bool rxrpc_is_ack_valid(struct rxrpc_call *call,
+       if (before(first_pkt, base))
+               return false; /* firstPacket regressed */
+-      if (after_eq(prev_pkt, call->ackr_prev_seq))
++      if (after_eq(prev_pkt, call->acks_prev_seq))
+               return true; /* previousPacket hasn't regressed. */
+       /* Some rx implementations put a serial number in previousPacket. */
+@@ -891,8 +891,8 @@ static void rxrpc_input_ack(struct rxrpc_call *call, struct sk_buff *skb)
+       /* Discard any out-of-order or duplicate ACKs (outside lock). */
+       if (!rxrpc_is_ack_valid(call, first_soft_ack, prev_pkt)) {
+               trace_rxrpc_rx_discard_ack(call->debug_id, ack_serial,
+-                                         first_soft_ack, call->ackr_first_seq,
+-                                         prev_pkt, call->ackr_prev_seq);
++                                         first_soft_ack, call->acks_first_seq,
++                                         prev_pkt, call->acks_prev_seq);
+               return;
+       }
+@@ -907,14 +907,14 @@ static void rxrpc_input_ack(struct rxrpc_call *call, struct sk_buff *skb)
+       /* Discard any out-of-order or duplicate ACKs (inside lock). */
+       if (!rxrpc_is_ack_valid(call, first_soft_ack, prev_pkt)) {
+               trace_rxrpc_rx_discard_ack(call->debug_id, ack_serial,
+-                                         first_soft_ack, call->ackr_first_seq,
+-                                         prev_pkt, call->ackr_prev_seq);
++                                         first_soft_ack, call->acks_first_seq,
++                                         prev_pkt, call->acks_prev_seq);
+               goto out;
+       }
+       call->acks_latest_ts = skb->tstamp;
+-      call->ackr_first_seq = first_soft_ack;
+-      call->ackr_prev_seq = prev_pkt;
++      call->acks_first_seq = first_soft_ack;
++      call->acks_prev_seq = prev_pkt;
+       /* Parse rwind and mtu sizes if provided. */
+       if (buf.info.rxMTU)
+-- 
+2.35.1
+
diff --git a/queue-5.4/rxrpc-return-an-error-to-sendmsg-if-call-failed.patch b/queue-5.4/rxrpc-return-an-error-to-sendmsg-if-call-failed.patch
new file mode 100644 (file)
index 0000000..a64ce57
--- /dev/null
@@ -0,0 +1,84 @@
+From b6b642495abed051f9c02bdda0eebcf9ec8caf38 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Sat, 21 May 2022 08:45:41 +0100
+Subject: rxrpc: Return an error to sendmsg if call failed
+
+From: David Howells <dhowells@redhat.com>
+
+[ Upstream commit 4ba68c5192554876bd8c3afd904e3064d2915341 ]
+
+If at the end of rxrpc sendmsg() or rxrpc_kernel_send_data() the call that
+was being given data was aborted remotely or otherwise failed, return an
+error rather than returning the amount of data buffered for transmission.
+
+The call (presumably) did not complete, so there's not much point
+continuing with it.  AF_RXRPC considers it "complete" and so will be
+unwilling to do anything else with it - and won't send a notification for
+it, deeming the return from sendmsg sufficient.
+
+Not returning an error causes afs to incorrectly handle a StoreData
+operation that gets interrupted by a change of address due to NAT
+reconfiguration.
+
+This doesn't normally affect most operations since their request parameters
+tend to fit into a single UDP packet and afs_make_call() returns before the
+server responds; StoreData is different as it involves transmission of a
+lot of data.
+
+This can be triggered on a client by doing something like:
+
+       dd if=/dev/zero of=/afs/example.com/foo bs=1M count=512
+
+at one prompt, and then changing the network address at another prompt,
+e.g.:
+
+       ifconfig enp6s0 inet 192.168.6.2 && route add 192.168.6.1 dev enp6s0
+
+Tracing packets on an Auristor fileserver looks something like:
+
+192.168.6.1 -> 192.168.6.3  RX 107 ACK Idle  Seq: 0  Call: 4  Source Port: 7000  Destination Port: 7001
+192.168.6.3 -> 192.168.6.1  AFS (RX) 1482 FS Request: Unknown(64538) (64538)
+192.168.6.3 -> 192.168.6.1  AFS (RX) 1482 FS Request: Unknown(64538) (64538)
+192.168.6.1 -> 192.168.6.3  RX 107 ACK Idle  Seq: 0  Call: 4  Source Port: 7000  Destination Port: 7001
+<ARP exchange for 192.168.6.2>
+192.168.6.2 -> 192.168.6.1  AFS (RX) 1482 FS Request: Unknown(0) (0)
+192.168.6.2 -> 192.168.6.1  AFS (RX) 1482 FS Request: Unknown(0) (0)
+192.168.6.1 -> 192.168.6.2  RX 107 ACK Exceeds Window  Seq: 0  Call: 4  Source Port: 7000  Destination Port: 7001
+192.168.6.1 -> 192.168.6.2  RX 74 ABORT  Seq: 0  Call: 4  Source Port: 7000  Destination Port: 7001
+192.168.6.1 -> 192.168.6.2  RX 74 ABORT  Seq: 29321  Call: 4  Source Port: 7000  Destination Port: 7001
+
+The Auristor fileserver logs code -453 (RXGEN_SS_UNMARSHAL), but the abort
+code received by kafs is -5 (RX_PROTOCOL_ERROR) as the rx layer sees the
+condition and generates an abort first and the unmarshal error is a
+consequence of that at the application layer.
+
+Reported-by: Marc Dionne <marc.dionne@auristor.com>
+Signed-off-by: David Howells <dhowells@redhat.com>
+cc: linux-afs@lists.infradead.org
+Link: http://lists.infradead.org/pipermail/linux-afs/2021-December/004810.html # v1
+Signed-off-by: David S. Miller <davem@davemloft.net>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ net/rxrpc/sendmsg.c | 6 ++++++
+ 1 file changed, 6 insertions(+)
+
+diff --git a/net/rxrpc/sendmsg.c b/net/rxrpc/sendmsg.c
+index 1a340eb0abf7..22f020099214 100644
+--- a/net/rxrpc/sendmsg.c
++++ b/net/rxrpc/sendmsg.c
+@@ -463,6 +463,12 @@ static int rxrpc_send_data(struct rxrpc_sock *rx,
+ success:
+       ret = copied;
++      if (READ_ONCE(call->state) == RXRPC_CALL_COMPLETE) {
++              read_lock_bh(&call->state_lock);
++              if (call->error < 0)
++                      ret = call->error;
++              read_unlock_bh(&call->state_lock);
++      }
+ out:
+       call->tx_pending = skb;
+       _leave(" = %d", ret);
+-- 
+2.35.1
+
diff --git a/queue-5.4/s390-preempt-disable-__preempt_count_add-optimizatio.patch b/queue-5.4/s390-preempt-disable-__preempt_count_add-optimizatio.patch
new file mode 100644 (file)
index 0000000..d041e5d
--- /dev/null
@@ -0,0 +1,65 @@
+From 58290a8e09e93017defcf5bdba12f69b88b8b052 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Fri, 6 May 2022 11:33:19 +0200
+Subject: s390/preempt: disable __preempt_count_add() optimization for
+ PROFILE_ALL_BRANCHES
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+From: Heiko Carstens <hca@linux.ibm.com>
+
+[ Upstream commit 63678eecec57fc51b778be3da35a397931287170 ]
+
+gcc 12 does not (always) optimize away code that should only be generated
+if parameters are constant and within in a certain range. This depends on
+various obscure kernel config options, however in particular
+PROFILE_ALL_BRANCHES can trigger this compile error:
+
+In function ‘__atomic_add_const’,
+    inlined from ‘__preempt_count_add.part.0’ at ./arch/s390/include/asm/preempt.h:50:3:
+./arch/s390/include/asm/atomic_ops.h:80:9: error: impossible constraint in ‘asm’
+   80 |         asm volatile(                                                   \
+      |         ^~~
+
+Workaround this by simply disabling the optimization for
+PROFILE_ALL_BRANCHES, since the kernel will be so slow, that this
+optimization won't matter at all.
+
+Reported-by: Thomas Richter <tmricht@linux.ibm.com>
+Reviewed-by: Sven Schnelle <svens@linux.ibm.com>
+Signed-off-by: Heiko Carstens <hca@linux.ibm.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ arch/s390/include/asm/preempt.h | 15 +++++++++++----
+ 1 file changed, 11 insertions(+), 4 deletions(-)
+
+diff --git a/arch/s390/include/asm/preempt.h b/arch/s390/include/asm/preempt.h
+index b5ea9e14c017..3dcd8ab3db73 100644
+--- a/arch/s390/include/asm/preempt.h
++++ b/arch/s390/include/asm/preempt.h
+@@ -52,10 +52,17 @@ static inline bool test_preempt_need_resched(void)
+ static inline void __preempt_count_add(int val)
+ {
+-      if (__builtin_constant_p(val) && (val >= -128) && (val <= 127))
+-              __atomic_add_const(val, &S390_lowcore.preempt_count);
+-      else
+-              __atomic_add(val, &S390_lowcore.preempt_count);
++      /*
++       * With some obscure config options and CONFIG_PROFILE_ALL_BRANCHES
++       * enabled, gcc 12 fails to handle __builtin_constant_p().
++       */
++      if (!IS_ENABLED(CONFIG_PROFILE_ALL_BRANCHES)) {
++              if (__builtin_constant_p(val) && (val >= -128) && (val <= 127)) {
++                      __atomic_add_const(val, &S390_lowcore.preempt_count);
++                      return;
++              }
++      }
++      __atomic_add(val, &S390_lowcore.preempt_count);
+ }
+ static inline void __preempt_count_sub(int val)
+-- 
+2.35.1
+
diff --git a/queue-5.4/sched-fair-fix-cfs_rq_clock_pelt-for-throttled-cfs_r.patch b/queue-5.4/sched-fair-fix-cfs_rq_clock_pelt-for-throttled-cfs_r.patch
new file mode 100644 (file)
index 0000000..c16a567
--- /dev/null
@@ -0,0 +1,95 @@
+From 6c6ee50fb6c1fb141759cce318435a6679789b13 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Fri, 8 Apr 2022 19:53:08 +0800
+Subject: sched/fair: Fix cfs_rq_clock_pelt() for throttled cfs_rq
+
+From: Chengming Zhou <zhouchengming@bytedance.com>
+
+[ Upstream commit 64eaf50731ac0a8c76ce2fedd50ef6652aabc5ff ]
+
+Since commit 23127296889f ("sched/fair: Update scale invariance of PELT")
+change to use rq_clock_pelt() instead of rq_clock_task(), we should also
+use rq_clock_pelt() for throttled_clock_task_time and throttled_clock_task
+accounting to get correct cfs_rq_clock_pelt() of throttled cfs_rq. And
+rename throttled_clock_task(_time) to be clock_pelt rather than clock_task.
+
+Fixes: 23127296889f ("sched/fair: Update scale invariance of PELT")
+Signed-off-by: Chengming Zhou <zhouchengming@bytedance.com>
+Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
+Reviewed-by: Ben Segall <bsegall@google.com>
+Reviewed-by: Vincent Guittot <vincent.guittot@linaro.org>
+Link: https://lore.kernel.org/r/20220408115309.81603-1-zhouchengming@bytedance.com
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ kernel/sched/fair.c  | 8 ++++----
+ kernel/sched/pelt.h  | 4 ++--
+ kernel/sched/sched.h | 4 ++--
+ 3 files changed, 8 insertions(+), 8 deletions(-)
+
+diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c
+index 87d9fad9d01d..d2a68ae7596e 100644
+--- a/kernel/sched/fair.c
++++ b/kernel/sched/fair.c
+@@ -4485,8 +4485,8 @@ static int tg_unthrottle_up(struct task_group *tg, void *data)
+       cfs_rq->throttle_count--;
+       if (!cfs_rq->throttle_count) {
+-              cfs_rq->throttled_clock_task_time += rq_clock_task(rq) -
+-                                           cfs_rq->throttled_clock_task;
++              cfs_rq->throttled_clock_pelt_time += rq_clock_pelt(rq) -
++                                           cfs_rq->throttled_clock_pelt;
+               /* Add cfs_rq with already running entity in the list */
+               if (cfs_rq->nr_running >= 1)
+@@ -4503,7 +4503,7 @@ static int tg_throttle_down(struct task_group *tg, void *data)
+       /* group is entering throttled state, stop time */
+       if (!cfs_rq->throttle_count) {
+-              cfs_rq->throttled_clock_task = rq_clock_task(rq);
++              cfs_rq->throttled_clock_pelt = rq_clock_pelt(rq);
+               list_del_leaf_cfs_rq(cfs_rq);
+       }
+       cfs_rq->throttle_count++;
+@@ -4932,7 +4932,7 @@ static void sync_throttle(struct task_group *tg, int cpu)
+       pcfs_rq = tg->parent->cfs_rq[cpu];
+       cfs_rq->throttle_count = pcfs_rq->throttle_count;
+-      cfs_rq->throttled_clock_task = rq_clock_task(cpu_rq(cpu));
++      cfs_rq->throttled_clock_pelt = rq_clock_pelt(cpu_rq(cpu));
+ }
+ /* conditionally throttle active cfs_rq's from put_prev_entity() */
+diff --git a/kernel/sched/pelt.h b/kernel/sched/pelt.h
+index afff644da065..43e2a47489fa 100644
+--- a/kernel/sched/pelt.h
++++ b/kernel/sched/pelt.h
+@@ -127,9 +127,9 @@ static inline u64 rq_clock_pelt(struct rq *rq)
+ static inline u64 cfs_rq_clock_pelt(struct cfs_rq *cfs_rq)
+ {
+       if (unlikely(cfs_rq->throttle_count))
+-              return cfs_rq->throttled_clock_task - cfs_rq->throttled_clock_task_time;
++              return cfs_rq->throttled_clock_pelt - cfs_rq->throttled_clock_pelt_time;
+-      return rq_clock_pelt(rq_of(cfs_rq)) - cfs_rq->throttled_clock_task_time;
++      return rq_clock_pelt(rq_of(cfs_rq)) - cfs_rq->throttled_clock_pelt_time;
+ }
+ #else
+ static inline u64 cfs_rq_clock_pelt(struct cfs_rq *cfs_rq)
+diff --git a/kernel/sched/sched.h b/kernel/sched/sched.h
+index fe755c1a0af9..b8a3db59e326 100644
+--- a/kernel/sched/sched.h
++++ b/kernel/sched/sched.h
+@@ -570,8 +570,8 @@ struct cfs_rq {
+       s64                     runtime_remaining;
+       u64                     throttled_clock;
+-      u64                     throttled_clock_task;
+-      u64                     throttled_clock_task_time;
++      u64                     throttled_clock_pelt;
++      u64                     throttled_clock_pelt_time;
+       int                     throttled;
+       int                     throttle_count;
+       struct list_head        throttled_list;
+-- 
+2.35.1
+
diff --git a/queue-5.4/scripts-faddr2line-fix-overlapping-text-section-fail.patch b/queue-5.4/scripts-faddr2line-fix-overlapping-text-section-fail.patch
new file mode 100644 (file)
index 0000000..1c45c56
--- /dev/null
@@ -0,0 +1,271 @@
+From 1f1627e31f1a5d0a33fac92eeac7e472872ff8f7 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Thu, 12 May 2022 12:05:27 -0700
+Subject: scripts/faddr2line: Fix overlapping text section failures
+
+From: Josh Poimboeuf <jpoimboe@kernel.org>
+
+[ Upstream commit 1d1a0e7c5100d332583e20b40aa8c0a8ed3d7849 ]
+
+There have been some recent reports of faddr2line failures:
+
+  $ scripts/faddr2line sound/soundcore.ko sound_devnode+0x5/0x35
+  bad symbol size: base: 0x0000000000000000 end: 0x0000000000000000
+
+  $ ./scripts/faddr2line vmlinux.o enter_from_user_mode+0x24
+  bad symbol size: base: 0x0000000000005fe0 end: 0x0000000000005fe0
+
+The problem is that faddr2line is based on 'nm', which has a major
+limitation: it doesn't know how to distinguish between different text
+sections.  So if an offset exists in multiple text sections in the
+object, it may fail.
+
+Rewrite faddr2line to be section-aware, by basing it on readelf.
+
+Fixes: 67326666e2d4 ("scripts: add script for translating stack dump function offsets")
+Reported-by: Kaiwan N Billimoria <kaiwan.billimoria@gmail.com>
+Reported-by: Peter Zijlstra <peterz@infradead.org>
+Signed-off-by: Josh Poimboeuf <jpoimboe@kernel.org>
+Link: https://lore.kernel.org/r/29ff99f86e3da965b6e46c1cc2d72ce6528c17c3.1652382321.git.jpoimboe@kernel.org
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ scripts/faddr2line | 150 +++++++++++++++++++++++++++++----------------
+ 1 file changed, 97 insertions(+), 53 deletions(-)
+
+diff --git a/scripts/faddr2line b/scripts/faddr2line
+index 6c6439f69a72..0e6268d59883 100755
+--- a/scripts/faddr2line
++++ b/scripts/faddr2line
+@@ -44,17 +44,6 @@
+ set -o errexit
+ set -o nounset
+-READELF="${CROSS_COMPILE:-}readelf"
+-ADDR2LINE="${CROSS_COMPILE:-}addr2line"
+-SIZE="${CROSS_COMPILE:-}size"
+-NM="${CROSS_COMPILE:-}nm"
+-
+-command -v awk >/dev/null 2>&1 || die "awk isn't installed"
+-command -v ${READELF} >/dev/null 2>&1 || die "readelf isn't installed"
+-command -v ${ADDR2LINE} >/dev/null 2>&1 || die "addr2line isn't installed"
+-command -v ${SIZE} >/dev/null 2>&1 || die "size isn't installed"
+-command -v ${NM} >/dev/null 2>&1 || die "nm isn't installed"
+-
+ usage() {
+       echo "usage: faddr2line [--list] <object file> <func+offset> <func+offset>..." >&2
+       exit 1
+@@ -69,6 +58,14 @@ die() {
+       exit 1
+ }
++READELF="${CROSS_COMPILE:-}readelf"
++ADDR2LINE="${CROSS_COMPILE:-}addr2line"
++AWK="awk"
++
++command -v ${AWK} >/dev/null 2>&1 || die "${AWK} isn't installed"
++command -v ${READELF} >/dev/null 2>&1 || die "${READELF} isn't installed"
++command -v ${ADDR2LINE} >/dev/null 2>&1 || die "${ADDR2LINE} isn't installed"
++
+ # Try to figure out the source directory prefix so we can remove it from the
+ # addr2line output.  HACK ALERT: This assumes that start_kernel() is in
+ # init/main.c!  This only works for vmlinux.  Otherwise it falls back to
+@@ -76,7 +73,7 @@ die() {
+ find_dir_prefix() {
+       local objfile=$1
+-      local start_kernel_addr=$(${READELF} -sW $objfile | awk '$8 == "start_kernel" {printf "0x%s", $2}')
++      local start_kernel_addr=$(${READELF} --symbols --wide $objfile | ${AWK} '$8 == "start_kernel" {printf "0x%s", $2}')
+       [[ -z $start_kernel_addr ]] && return
+       local file_line=$(${ADDR2LINE} -e $objfile $start_kernel_addr)
+@@ -97,86 +94,133 @@ __faddr2line() {
+       local dir_prefix=$3
+       local print_warnings=$4
+-      local func=${func_addr%+*}
++      local sym_name=${func_addr%+*}
+       local offset=${func_addr#*+}
+       offset=${offset%/*}
+-      local size=
+-      [[ $func_addr =~ "/" ]] && size=${func_addr#*/}
++      local user_size=
++      [[ $func_addr =~ "/" ]] && user_size=${func_addr#*/}
+-      if [[ -z $func ]] || [[ -z $offset ]] || [[ $func = $func_addr ]]; then
++      if [[ -z $sym_name ]] || [[ -z $offset ]] || [[ $sym_name = $func_addr ]]; then
+               warn "bad func+offset $func_addr"
+               DONE=1
+               return
+       fi
+       # Go through each of the object's symbols which match the func name.
+-      # In rare cases there might be duplicates.
+-      file_end=$(${SIZE} -Ax $objfile | awk '$1 == ".text" {print $2}')
+-      while read symbol; do
+-              local fields=($symbol)
+-              local sym_base=0x${fields[0]}
+-              local sym_type=${fields[1]}
+-              local sym_end=${fields[3]}
+-
+-              # calculate the size
+-              local sym_size=$(($sym_end - $sym_base))
++      # In rare cases there might be duplicates, in which case we print all
++      # matches.
++      while read line; do
++              local fields=($line)
++              local sym_addr=0x${fields[1]}
++              local sym_elf_size=${fields[2]}
++              local sym_sec=${fields[6]}
++
++              # Get the section size:
++              local sec_size=$(${READELF} --section-headers --wide $objfile |
++                      sed 's/\[ /\[/' |
++                      ${AWK} -v sec=$sym_sec '$1 == "[" sec "]" { print "0x" $6; exit }')
++
++              if [[ -z $sec_size ]]; then
++                      warn "bad section size: section: $sym_sec"
++                      DONE=1
++                      return
++              fi
++
++              # Calculate the symbol size.
++              #
++              # Unfortunately we can't use the ELF size, because kallsyms
++              # also includes the padding bytes in its size calculation.  For
++              # kallsyms, the size calculation is the distance between the
++              # symbol and the next symbol in a sorted list.
++              local sym_size
++              local cur_sym_addr
++              local found=0
++              while read line; do
++                      local fields=($line)
++                      cur_sym_addr=0x${fields[1]}
++                      local cur_sym_elf_size=${fields[2]}
++                      local cur_sym_name=${fields[7]:-}
++
++                      if [[ $cur_sym_addr = $sym_addr ]] &&
++                         [[ $cur_sym_elf_size = $sym_elf_size ]] &&
++                         [[ $cur_sym_name = $sym_name ]]; then
++                              found=1
++                              continue
++                      fi
++
++                      if [[ $found = 1 ]]; then
++                              sym_size=$(($cur_sym_addr - $sym_addr))
++                              [[ $sym_size -lt $sym_elf_size ]] && continue;
++                              found=2
++                              break
++                      fi
++              done < <(${READELF} --symbols --wide $objfile | ${AWK} -v sec=$sym_sec '$7 == sec' | sort --key=2)
++
++              if [[ $found = 0 ]]; then
++                      warn "can't find symbol: sym_name: $sym_name sym_sec: $sym_sec sym_addr: $sym_addr sym_elf_size: $sym_elf_size"
++                      DONE=1
++                      return
++              fi
++
++              # If nothing was found after the symbol, assume it's the last
++              # symbol in the section.
++              [[ $found = 1 ]] && sym_size=$(($sec_size - $sym_addr))
++
+               if [[ -z $sym_size ]] || [[ $sym_size -le 0 ]]; then
+-                      warn "bad symbol size: base: $sym_base end: $sym_end"
++                      warn "bad symbol size: sym_addr: $sym_addr cur_sym_addr: $cur_sym_addr"
+                       DONE=1
+                       return
+               fi
++
+               sym_size=0x$(printf %x $sym_size)
+-              # calculate the address
+-              local addr=$(($sym_base + $offset))
++              # Calculate the section address from user-supplied offset:
++              local addr=$(($sym_addr + $offset))
+               if [[ -z $addr ]] || [[ $addr = 0 ]]; then
+-                      warn "bad address: $sym_base + $offset"
++                      warn "bad address: $sym_addr + $offset"
+                       DONE=1
+                       return
+               fi
+               addr=0x$(printf %x $addr)
+-              # weed out non-function symbols
+-              if [[ $sym_type != t ]] && [[ $sym_type != T ]]; then
+-                      [[ $print_warnings = 1 ]] &&
+-                              echo "skipping $func address at $addr due to non-function symbol of type '$sym_type'"
+-                      continue
+-              fi
+-
+-              # if the user provided a size, make sure it matches the symbol's size
+-              if [[ -n $size ]] && [[ $size -ne $sym_size ]]; then
++              # If the user provided a size, make sure it matches the symbol's size:
++              if [[ -n $user_size ]] && [[ $user_size -ne $sym_size ]]; then
+                       [[ $print_warnings = 1 ]] &&
+-                              echo "skipping $func address at $addr due to size mismatch ($size != $sym_size)"
++                              echo "skipping $sym_name address at $addr due to size mismatch ($user_size != $sym_size)"
+                       continue;
+               fi
+-              # make sure the provided offset is within the symbol's range
++              # Make sure the provided offset is within the symbol's range:
+               if [[ $offset -gt $sym_size ]]; then
+                       [[ $print_warnings = 1 ]] &&
+-                              echo "skipping $func address at $addr due to size mismatch ($offset > $sym_size)"
++                              echo "skipping $sym_name address at $addr due to size mismatch ($offset > $sym_size)"
+                       continue
+               fi
+-              # separate multiple entries with a blank line
++              # In case of duplicates or multiple addresses specified on the
++              # cmdline, separate multiple entries with a blank line:
+               [[ $FIRST = 0 ]] && echo
+               FIRST=0
+-              # pass real address to addr2line
+-              echo "$func+$offset/$sym_size:"
+-              local file_lines=$(${ADDR2LINE} -fpie $objfile $addr | sed "s; $dir_prefix\(\./\)*; ;")
+-              [[ -z $file_lines ]] && return
++              echo "$sym_name+$offset/$sym_size:"
++              # Pass section address to addr2line and strip absolute paths
++              # from the output:
++              local output=$(${ADDR2LINE} -fpie $objfile $addr | sed "s; $dir_prefix\(\./\)*; ;")
++              [[ -z $output ]] && continue
++
++              # Default output (non --list):
+               if [[ $LIST = 0 ]]; then
+-                      echo "$file_lines" | while read -r line
++                      echo "$output" | while read -r line
+                       do
+                               echo $line
+                       done
+                       DONE=1;
+-                      return
++                      continue
+               fi
+-              # show each line with context
+-              echo "$file_lines" | while read -r line
++              # For --list, show each line with its corresponding source code:
++              echo "$output" | while read -r line
+               do
+                       echo
+                       echo $line
+@@ -184,12 +228,12 @@ __faddr2line() {
+                       n1=$[$n-5]
+                       n2=$[$n+5]
+                       f=$(echo $line | sed 's/.*at \(.\+\):.*/\1/g')
+-                      awk 'NR>=strtonum("'$n1'") && NR<=strtonum("'$n2'") { if (NR=='$n') printf(">%d<", NR); else printf(" %d ", NR); printf("\t%s\n", $0)}' $f
++                      ${AWK} 'NR>=strtonum("'$n1'") && NR<=strtonum("'$n2'") { if (NR=='$n') printf(">%d<", NR); else printf(" %d ", NR); printf("\t%s\n", $0)}' $f
+               done
+               DONE=1
+-      done < <(${NM} -n $objfile | awk -v fn=$func -v end=$file_end '$3 == fn { found=1; line=$0; start=$1; next } found == 1 { found=0; print line, "0x"$1 } END {if (found == 1) print line, end; }')
++      done < <(${READELF} --symbols --wide $objfile | ${AWK} -v fn=$sym_name '$4 == "FUNC" && $8 == fn')
+ }
+ [[ $# -lt 2 ]] && usage
+-- 
+2.35.1
+
diff --git a/queue-5.4/scsi-fcoe-fix-wstringop-overflow-warnings-in-fcoe_ww.patch b/queue-5.4/scsi-fcoe-fix-wstringop-overflow-warnings-in-fcoe_ww.patch
new file mode 100644 (file)
index 0000000..f4556bb
--- /dev/null
@@ -0,0 +1,130 @@
+From f36de416f1214013ff17a309a2f489cbb20edb91 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Thu, 3 Mar 2022 17:55:21 -0600
+Subject: scsi: fcoe: Fix Wstringop-overflow warnings in fcoe_wwn_from_mac()
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+From: Gustavo A. R. Silva <gustavoars@kernel.org>
+
+[ Upstream commit 54db804d5d7d36709d1ce70bde3b9a6c61b290b6 ]
+
+Fix the following Wstringop-overflow warnings when building with GCC-11:
+
+drivers/scsi/fcoe/fcoe.c: In function ‘fcoe_netdev_config’:
+drivers/scsi/fcoe/fcoe.c:744:32: warning: ‘fcoe_wwn_from_mac’ accessing 32 bytes in a region of size 6 [-Wstringop-overflow=]
+  744 |                         wwnn = fcoe_wwn_from_mac(ctlr->ctl_src_addr, 1, 0);
+      |                                ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+drivers/scsi/fcoe/fcoe.c:744:32: note: referencing argument 1 of type ‘unsigned char *’
+In file included from drivers/scsi/fcoe/fcoe.c:36:
+./include/scsi/libfcoe.h:252:5: note: in a call to function ‘fcoe_wwn_from_mac’
+  252 | u64 fcoe_wwn_from_mac(unsigned char mac[MAX_ADDR_LEN], unsigned int, unsigned int);
+      |     ^~~~~~~~~~~~~~~~~
+drivers/scsi/fcoe/fcoe.c:747:32: warning: ‘fcoe_wwn_from_mac’ accessing 32 bytes in a region of size 6 [-Wstringop-overflow=]
+  747 |                         wwpn = fcoe_wwn_from_mac(ctlr->ctl_src_addr,
+      |                                ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+  748 |                                                  2, 0);
+      |                                                  ~~~~~
+drivers/scsi/fcoe/fcoe.c:747:32: note: referencing argument 1 of type ‘unsigned char *’
+In file included from drivers/scsi/fcoe/fcoe.c:36:
+./include/scsi/libfcoe.h:252:5: note: in a call to function ‘fcoe_wwn_from_mac’
+  252 | u64 fcoe_wwn_from_mac(unsigned char mac[MAX_ADDR_LEN], unsigned int, unsigned int);
+      |     ^~~~~~~~~~~~~~~~~
+  CC      drivers/scsi/bnx2fc/bnx2fc_io.o
+In function ‘bnx2fc_net_config’,
+    inlined from ‘bnx2fc_if_create’ at drivers/scsi/bnx2fc/bnx2fc_fcoe.c:1543:7:
+drivers/scsi/bnx2fc/bnx2fc_fcoe.c:833:32: warning: ‘fcoe_wwn_from_mac’ accessing 32 bytes in a region of size 6 [-Wstringop-overflow=]
+  833 |                         wwnn = fcoe_wwn_from_mac(ctlr->ctl_src_addr,
+      |                                ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+  834 |                                                  1, 0);
+      |                                                  ~~~~~
+drivers/scsi/bnx2fc/bnx2fc_fcoe.c: In function ‘bnx2fc_if_create’:
+drivers/scsi/bnx2fc/bnx2fc_fcoe.c:833:32: note: referencing argument 1 of type ‘unsigned char *’
+In file included from drivers/scsi/bnx2fc/bnx2fc.h:53,
+                 from drivers/scsi/bnx2fc/bnx2fc_fcoe.c:17:
+./include/scsi/libfcoe.h:252:5: note: in a call to function ‘fcoe_wwn_from_mac’
+  252 | u64 fcoe_wwn_from_mac(unsigned char mac[MAX_ADDR_LEN], unsigned int, unsigned int);
+      |     ^~~~~~~~~~~~~~~~~
+In function ‘bnx2fc_net_config’,
+    inlined from ‘bnx2fc_if_create’ at drivers/scsi/bnx2fc/bnx2fc_fcoe.c:1543:7:
+drivers/scsi/bnx2fc/bnx2fc_fcoe.c:839:32: warning: ‘fcoe_wwn_from_mac’ accessing 32 bytes in a region of size 6 [-Wstringop-overflow=]
+  839 |                         wwpn = fcoe_wwn_from_mac(ctlr->ctl_src_addr,
+      |                                ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+  840 |                                                  2, 0);
+      |                                                  ~~~~~
+drivers/scsi/bnx2fc/bnx2fc_fcoe.c: In function ‘bnx2fc_if_create’:
+drivers/scsi/bnx2fc/bnx2fc_fcoe.c:839:32: note: referencing argument 1 of type ‘unsigned char *’
+In file included from drivers/scsi/bnx2fc/bnx2fc.h:53,
+                 from drivers/scsi/bnx2fc/bnx2fc_fcoe.c:17:
+./include/scsi/libfcoe.h:252:5: note: in a call to function ‘fcoe_wwn_from_mac’
+  252 | u64 fcoe_wwn_from_mac(unsigned char mac[MAX_ADDR_LEN], unsigned int, unsigned int);
+      |     ^~~~~~~~~~~~~~~~~
+drivers/scsi/qedf/qedf_main.c: In function ‘__qedf_probe’:
+drivers/scsi/qedf/qedf_main.c:3520:30: warning: ‘fcoe_wwn_from_mac’ accessing 32 bytes in a region of size 6 [-Wstringop-overflow=]
+ 3520 |                 qedf->wwnn = fcoe_wwn_from_mac(qedf->mac, 1, 0);
+      |                              ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+drivers/scsi/qedf/qedf_main.c:3520:30: note: referencing argument 1 of type ‘unsigned char *’
+In file included from drivers/scsi/qedf/qedf.h:9,
+                 from drivers/scsi/qedf/qedf_main.c:23:
+./include/scsi/libfcoe.h:252:5: note: in a call to function ‘fcoe_wwn_from_mac’
+  252 | u64 fcoe_wwn_from_mac(unsigned char mac[MAX_ADDR_LEN], unsigned int, unsigned int);
+      |     ^~~~~~~~~~~~~~~~~
+drivers/scsi/qedf/qedf_main.c:3521:30: warning: ‘fcoe_wwn_from_mac’ accessing 32 bytes in a region of size 6 [-Wstringop-overflow=]
+ 3521 |                 qedf->wwpn = fcoe_wwn_from_mac(qedf->mac, 2, 0);
+      |                              ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+drivers/scsi/qedf/qedf_main.c:3521:30: note: referencing argument 1 of type ‘unsigned char *’
+In file included from drivers/scsi/qedf/qedf.h:9,
+                 from drivers/scsi/qedf/qedf_main.c:23:
+./include/scsi/libfcoe.h:252:5: note: in a call to function ‘fcoe_wwn_from_mac’
+  252 | u64 fcoe_wwn_from_mac(unsigned char mac[MAX_ADDR_LEN], unsigned int, unsigned int);
+      |     ^~~~~~~~~~~~~~~~~
+
+by changing the array size to the correct value of ETH_ALEN in the
+argument declaration.
+
+Also, fix a couple of checkpatch warnings:
+WARNING: function definition argument 'unsigned int' should also have an identifier name
+
+This helps with the ongoing efforts to globally enable
+-Wstringop-overflow.
+
+Link: https://github.com/KSPP/linux/issues/181
+Fixes: 85b4aa4926a5 ("[SCSI] fcoe: Fibre Channel over Ethernet")
+Signed-off-by: Gustavo A. R. Silva <gustavoars@kernel.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/scsi/fcoe/fcoe_ctlr.c | 2 +-
+ include/scsi/libfcoe.h        | 3 ++-
+ 2 files changed, 3 insertions(+), 2 deletions(-)
+
+diff --git a/drivers/scsi/fcoe/fcoe_ctlr.c b/drivers/scsi/fcoe/fcoe_ctlr.c
+index 07a0dadc75bf..7ce2a0434e1e 100644
+--- a/drivers/scsi/fcoe/fcoe_ctlr.c
++++ b/drivers/scsi/fcoe/fcoe_ctlr.c
+@@ -1966,7 +1966,7 @@ EXPORT_SYMBOL(fcoe_ctlr_recv_flogi);
+  *
+  * Returns: u64 fc world wide name
+  */
+-u64 fcoe_wwn_from_mac(unsigned char mac[MAX_ADDR_LEN],
++u64 fcoe_wwn_from_mac(unsigned char mac[ETH_ALEN],
+                     unsigned int scheme, unsigned int port)
+ {
+       u64 wwn;
+diff --git a/include/scsi/libfcoe.h b/include/scsi/libfcoe.h
+index fac8e89aed81..310e0dbffda9 100644
+--- a/include/scsi/libfcoe.h
++++ b/include/scsi/libfcoe.h
+@@ -249,7 +249,8 @@ int fcoe_ctlr_recv_flogi(struct fcoe_ctlr *, struct fc_lport *,
+                        struct fc_frame *);
+ /* libfcoe funcs */
+-u64 fcoe_wwn_from_mac(unsigned char mac[MAX_ADDR_LEN], unsigned int, unsigned int);
++u64 fcoe_wwn_from_mac(unsigned char mac[ETH_ALEN], unsigned int scheme,
++                    unsigned int port);
+ int fcoe_libfc_config(struct fc_lport *, struct fcoe_ctlr *,
+                     const struct libfc_function_template *, int init_fcp);
+ u32 fcoe_fc_crc(struct fc_frame *fp);
+-- 
+2.35.1
+
diff --git a/queue-5.4/scsi-megaraid-fix-error-check-return-value-of-regist.patch b/queue-5.4/scsi-megaraid-fix-error-check-return-value-of-regist.patch
new file mode 100644 (file)
index 0000000..c160a88
--- /dev/null
@@ -0,0 +1,38 @@
+From 26d75aa7f045722db3ee042ccd1b09e303f89ffa Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Mon, 18 Apr 2022 10:57:55 +0000
+Subject: scsi: megaraid: Fix error check return value of register_chrdev()
+
+From: Lv Ruyi <lv.ruyi@zte.com.cn>
+
+[ Upstream commit c5acd61dbb32b6bda0f3a354108f2b8dcb788985 ]
+
+If major equals 0, register_chrdev() returns an error code when it fails.
+This function dynamically allocates a major and returns its number on
+success, so we should use "< 0" to check it instead of "!".
+
+Link: https://lore.kernel.org/r/20220418105755.2558828-1-lv.ruyi@zte.com.cn
+Reported-by: Zeal Robot <zealci@zte.com.cn>
+Signed-off-by: Lv Ruyi <lv.ruyi@zte.com.cn>
+Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/scsi/megaraid.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/drivers/scsi/megaraid.c b/drivers/scsi/megaraid.c
+index ff6d4aa92421..8b1ba690039b 100644
+--- a/drivers/scsi/megaraid.c
++++ b/drivers/scsi/megaraid.c
+@@ -4635,7 +4635,7 @@ static int __init megaraid_init(void)
+        * major number allocation.
+        */
+       major = register_chrdev(0, "megadev_legacy", &megadev_fops);
+-      if (!major) {
++      if (major < 0) {
+               printk(KERN_WARNING
+                               "megaraid: failed to register char device\n");
+       }
+-- 
+2.35.1
+
diff --git a/queue-5.4/scsi-ufs-core-exclude-uecxx-from-sfr-dump-list.patch b/queue-5.4/scsi-ufs-core-exclude-uecxx-from-sfr-dump-list.patch
new file mode 100644 (file)
index 0000000..58810ad
--- /dev/null
@@ -0,0 +1,47 @@
+From 048e385bd858a7e7d995efa0a445bbc55c67004c Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Thu, 31 Mar 2022 10:24:05 +0900
+Subject: scsi: ufs: core: Exclude UECxx from SFR dump list
+
+From: Kiwoong Kim <kwmad.kim@samsung.com>
+
+[ Upstream commit ef60031022eb6d972aac86ca26c98c33e1289436 ]
+
+Some devices may return invalid or zeroed data during an UIC error
+condition. In addition, reading these SFRs will clear them. This means the
+subsequent error handling will not be able to see them and therefore no
+error handling will be scheduled.
+
+Skip reading these SFRs in ufshcd_dump_regs().
+
+Link: https://lore.kernel.org/r/1648689845-33521-1-git-send-email-kwmad.kim@samsung.com
+Fixes: d67247566450 ("scsi: ufs: Use explicit access size in ufshcd_dump_regs")
+Signed-off-by: Kiwoong Kim <kwmad.kim@samsung.com>
+Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/scsi/ufs/ufshcd.c | 7 ++++++-
+ 1 file changed, 6 insertions(+), 1 deletion(-)
+
+diff --git a/drivers/scsi/ufs/ufshcd.c b/drivers/scsi/ufs/ufshcd.c
+index ebf7ae1ef70d..670f4c7934f8 100644
+--- a/drivers/scsi/ufs/ufshcd.c
++++ b/drivers/scsi/ufs/ufshcd.c
+@@ -118,8 +118,13 @@ int ufshcd_dump_regs(struct ufs_hba *hba, size_t offset, size_t len,
+       if (!regs)
+               return -ENOMEM;
+-      for (pos = 0; pos < len; pos += 4)
++      for (pos = 0; pos < len; pos += 4) {
++              if (offset == 0 &&
++                  pos >= REG_UIC_ERROR_CODE_PHY_ADAPTER_LAYER &&
++                  pos <= REG_UIC_ERROR_CODE_DME)
++                      continue;
+               regs[pos / 4] = ufshcd_readl(hba, offset + pos);
++      }
+       ufshcd_hex_dump(prefix, regs, len);
+       kfree(regs);
+-- 
+2.35.1
+
diff --git a/queue-5.4/sctp-read-sk-sk_bound_dev_if-once-in-sctp_rcv.patch b/queue-5.4/sctp-read-sk-sk_bound_dev_if-once-in-sctp_rcv.patch
new file mode 100644 (file)
index 0000000..e2c285b
--- /dev/null
@@ -0,0 +1,49 @@
+From 0e07ade4c6a569ab3f401cee9efbd661c43332a8 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Fri, 13 May 2022 11:55:42 -0700
+Subject: sctp: read sk->sk_bound_dev_if once in sctp_rcv()
+
+From: Eric Dumazet <edumazet@google.com>
+
+[ Upstream commit a20ea298071f46effa3aaf965bf9bb34c901db3f ]
+
+sctp_rcv() reads sk->sk_bound_dev_if twice while the socket
+is not locked. Another cpu could change this field under us.
+
+Fixes: 0fd9a65a76e8 ("[SCTP] Support SO_BINDTODEVICE socket option on incoming packets.")
+Signed-off-by: Eric Dumazet <edumazet@google.com>
+Cc: Neil Horman <nhorman@tuxdriver.com>
+Cc: Vlad Yasevich <vyasevich@gmail.com>
+Cc: Marcelo Ricardo Leitner <marcelo.leitner@gmail.com>
+Acked-by: Marcelo Ricardo Leitner <marcelo.leitner@gmail.com>
+Signed-off-by: David S. Miller <davem@davemloft.net>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ net/sctp/input.c | 4 +++-
+ 1 file changed, 3 insertions(+), 1 deletion(-)
+
+diff --git a/net/sctp/input.c b/net/sctp/input.c
+index 9616b600a876..c306cb25f524 100644
+--- a/net/sctp/input.c
++++ b/net/sctp/input.c
+@@ -92,6 +92,7 @@ int sctp_rcv(struct sk_buff *skb)
+       struct sctp_chunk *chunk;
+       union sctp_addr src;
+       union sctp_addr dest;
++      int bound_dev_if;
+       int family;
+       struct sctp_af *af;
+       struct net *net = dev_net(skb->dev);
+@@ -169,7 +170,8 @@ int sctp_rcv(struct sk_buff *skb)
+        * If a frame arrives on an interface and the receiving socket is
+        * bound to another interface, via SO_BINDTODEVICE, treat it as OOTB
+        */
+-      if (sk->sk_bound_dev_if && (sk->sk_bound_dev_if != af->skb_iif(skb))) {
++      bound_dev_if = READ_ONCE(sk->sk_bound_dev_if);
++      if (bound_dev_if && (bound_dev_if != af->skb_iif(skb))) {
+               if (transport) {
+                       sctp_transport_put(transport);
+                       asoc = NULL;
+-- 
+2.35.1
+
diff --git a/queue-5.4/selftests-bpf-fix-btf_dump-btf_dump-due-to-recent-cl.patch b/queue-5.4/selftests-bpf-fix-btf_dump-btf_dump-due-to-recent-cl.patch
new file mode 100644 (file)
index 0000000..9e9692f
--- /dev/null
@@ -0,0 +1,89 @@
+From 39335efb563a53c7a8ea52d035dcc81e4922871d Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Mon, 23 May 2022 08:20:44 -0700
+Subject: selftests/bpf: fix btf_dump/btf_dump due to recent clang change
+
+From: Yonghong Song <yhs@fb.com>
+
+[ Upstream commit 4050764cbaa25760aab40857f723393c07898474 ]
+
+Latest llvm-project upstream had a change of behavior
+related to qualifiers on function return type ([1]).
+This caused selftests btf_dump/btf_dump failure.
+The following example shows what changed.
+
+  $ cat t.c
+  typedef const char * const (* const (* const fn_ptr_arr2_t[5])())(char * (*)(int));
+  struct t {
+    int a;
+    fn_ptr_arr2_t l;
+  };
+  int foo(struct t *arg) {
+    return arg->a;
+  }
+
+Compiled with latest upstream llvm15,
+  $ clang -O2 -g -target bpf -S -emit-llvm t.c
+The related generated debuginfo IR looks like:
+  !16 = !DIDerivedType(tag: DW_TAG_typedef, name: "fn_ptr_arr2_t", file: !1, line: 1, baseType: !17)
+  !17 = !DICompositeType(tag: DW_TAG_array_type, baseType: !18, size: 320, elements: !32)
+  !18 = !DIDerivedType(tag: DW_TAG_const_type, baseType: !19)
+  !19 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !20, size: 64)
+  !20 = !DISubroutineType(types: !21)
+  !21 = !{!22, null}
+  !22 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !23, size: 64)
+  !23 = !DISubroutineType(types: !24)
+  !24 = !{!25, !28}
+  !25 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !26, size: 64)
+  !26 = !DIDerivedType(tag: DW_TAG_const_type, baseType: !27)
+  !27 = !DIBasicType(name: "char", size: 8, encoding: DW_ATE_signed_char)
+You can see two intermediate const qualifier to pointer are dropped in debuginfo IR.
+
+With llvm14, we have following debuginfo IR:
+  !16 = !DIDerivedType(tag: DW_TAG_typedef, name: "fn_ptr_arr2_t", file: !1, line: 1, baseType: !17)
+  !17 = !DICompositeType(tag: DW_TAG_array_type, baseType: !18, size: 320, elements: !34)
+  !18 = !DIDerivedType(tag: DW_TAG_const_type, baseType: !19)
+  !19 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !20, size: 64)
+  !20 = !DISubroutineType(types: !21)
+  !21 = !{!22, null}
+  !22 = !DIDerivedType(tag: DW_TAG_const_type, baseType: !23)
+  !23 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !24, size: 64)
+  !24 = !DISubroutineType(types: !25)
+  !25 = !{!26, !30}
+  !26 = !DIDerivedType(tag: DW_TAG_const_type, baseType: !27)
+  !27 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !28, size: 64)
+  !28 = !DIDerivedType(tag: DW_TAG_const_type, baseType: !29)
+  !29 = !DIBasicType(name: "char", size: 8, encoding: DW_ATE_signed_char)
+All const qualifiers are preserved.
+
+To adapt the selftest to both old and new llvm, this patch removed
+the intermediate const qualifier in const-to-ptr types, to make the
+test succeed again.
+
+  [1] https://reviews.llvm.org/D125919
+
+Reported-by: Mykola Lysenko <mykolal@fb.com>
+Signed-off-by: Yonghong Song <yhs@fb.com>
+Link: https://lore.kernel.org/r/20220523152044.3905809-1-yhs@fb.com
+Signed-off-by: Alexei Starovoitov <ast@kernel.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ tools/testing/selftests/bpf/progs/btf_dump_test_case_syntax.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/tools/testing/selftests/bpf/progs/btf_dump_test_case_syntax.c b/tools/testing/selftests/bpf/progs/btf_dump_test_case_syntax.c
+index d4a02fe44a12..0620580a5c16 100644
+--- a/tools/testing/selftests/bpf/progs/btf_dump_test_case_syntax.c
++++ b/tools/testing/selftests/bpf/progs/btf_dump_test_case_syntax.c
+@@ -94,7 +94,7 @@ typedef void (* (*signal_t)(int, void (*)(int)))(int);
+ typedef char * (*fn_ptr_arr1_t[10])(int **);
+-typedef char * (* const (* const fn_ptr_arr2_t[5])())(char * (*)(int));
++typedef char * (* (* const fn_ptr_arr2_t[5])())(char * (*)(int));
+ struct struct_w_typedefs {
+       int_t a;
+-- 
+2.35.1
+
index 730b2dea987c71548dc43b6ff6167284c9036f70..ba231ccff6ebb6b015bb0a14056735fe5a577afd 100644 (file)
@@ -9,3 +9,201 @@ ptrace-xtensa-replace-pt_singlestep-with-tif_singlestep.patch
 ptrace-reimplement-ptrace_kill-by-always-sending-sigkill.patch
 btrfs-add-0x-prefix-for-unsupported-optional-features.patch
 btrfs-repair-super-block-num_devices-automatically.patch
+drm-virtio-fix-null-pointer-dereference-in-virtio_gp.patch
+mwifiex-add-mutex-lock-for-call-in-mwifiex_dfs_chan_.patch
+b43legacy-fix-assigning-negative-value-to-unsigned-v.patch
+b43-fix-assigning-negative-value-to-unsigned-variabl.patch
+ipw2x00-fix-potential-null-dereference-in-libipw_xmi.patch
+ipv6-fix-locking-issues-with-loops-over-idev-addr_li.patch
+fbcon-consistently-protect-deferred_takeover-with-co.patch
+acpica-avoid-cache-flush-inside-virtual-machines.patch
+drm-komeda-return-early-if-drm_universal_plane_init-.patch
+alsa-jack-access-input_dev-under-mutex.patch
+spi-spi-rspi-remove-setting-src-dst-_-addr-addr_widt.patch
+tools-power-turbostat-fix-icx-dram-power-numbers.patch
+drm-amd-pm-fix-double-free-in-si_parse_power_table.patch
+ath9k-fix-qca9561-pa-bias-level.patch
+media-venus-hfi-avoid-null-dereference-in-deinit.patch
+media-pci-cx23885-fix-the-error-handling-in-cx23885_.patch
+media-cx25821-fix-the-warning-when-removing-the-modu.patch
+md-bitmap-don-t-set-sb-values-if-can-t-pass-sanity-c.patch
+mmc-jz4740-apply-dma-engine-limits-to-maximum-segmen.patch
+scsi-megaraid-fix-error-check-return-value-of-regist.patch
+drm-plane-move-range-check-for-format_count-earlier.patch
+drm-amd-pm-fix-the-compile-warning.patch
+arm64-compat-do-not-treat-syscall-number-as-esr_elx-.patch
+drm-msm-fix-error-check-return-value-of-irq_of_parse.patch
+ipv6-don-t-send-rs-packets-to-the-interface-of-arphr.patch
+net-mlx5-fs-delete-the-fte-when-there-are-no-rules-a.patch
+asoc-dapm-don-t-fold-register-value-changes-into-not.patch
+mlxsw-spectrum_dcb-do-not-warn-about-priority-change.patch
+drm-amdgpu-ucode-remove-firmware-load-type-check-in-.patch
+hid-bigben-fix-slab-out-of-bounds-write-in-bigben_pr.patch
+asoc-tscs454-add-endianness-flag-in-snd_soc_componen.patch
+net-remove-two-bug-from-skb_checksum_help.patch
+s390-preempt-disable-__preempt_count_add-optimizatio.patch
+spi-stm32-qspi-fix-wait_cmd-timeout-in-apm-mode.patch
+dma-debug-change-allocation-mode-from-gfp_nowait-to-.patch
+acpi-pm-block-asus-b1400ceae-from-suspend-to-idle-by.patch
+ipmi-ssif-check-for-null-msg-when-handling-events-an.patch
+ipmi-fix-pr_fmt-to-avoid-compilation-issues.patch
+rtlwifi-use-pr_warn-instead-of-warn_once.patch
+media-coda-limit-frame-interval-enumeration-to-suppo.patch
+media-cec-adap.c-fix-is_configuring-state.patch
+openrisc-start-cpu-timer-early-in-boot.patch
+nvme-pci-fix-a-null-pointer-dereference-in-nvme_allo.patch
+asoc-rt5645-fix-errorenous-cleanup-order.patch
+nbd-fix-hung-on-disconnect-request-if-socket-is-clos.patch
+net-phy-micrel-allow-probing-without-.driver_data.patch
+media-exynos4-is-fix-compile-warning.patch
+asoc-max98357a-remove-dependency-on-gpiolib.patch
+hwmon-make-chip-parameter-for-with_info-api-mandator.patch
+rxrpc-return-an-error-to-sendmsg-if-call-failed.patch
+eth-tg3-silence-the-gcc-12-array-bounds-warning.patch
+selftests-bpf-fix-btf_dump-btf_dump-due-to-recent-cl.patch
+ib-rdmavt-add-missing-locks-in-rvt_ruc_loopback.patch
+arm-dts-ox820-align-interrupt-controller-node-name-w.patch
+pm-devfreq-rk3399_dmc-disable-edev-on-remove.patch
+fs-jfs-fix-possible-null-pointer-dereference-in-dbfr.patch
+arm-omap1-clock-fix-uart-rate-reporting-algorithm.patch
+powerpc-fadump-fix-fadump-to-work-with-a-different-e.patch
+fat-add-ratelimit-to-fat-_ent_bread.patch
+arm-versatile-add-missing-of_node_put-in-dcscb_init.patch
+arm-dts-exynos-add-atmel-24c128-fallback-to-samsung-.patch
+arm-hisi-add-missing-of_node_put-after-of_find_compa.patch
+pci-avoid-pci_dev_lock-ab-ba-deadlock-with-sriov_num.patch
+tracing-incorrect-isolate_mote_t-cast-in-mm_vmscan_l.patch
+powerpc-xics-fix-refcount-leak-in-icp_opal_init.patch
+powerpc-powernv-fix-missing-of_node_put-in-uv_init.patch
+macintosh-via-pmu-fix-build-failure-when-config_inpu.patch
+powerpc-iommu-add-missing-of_node_put-in-iommu_init_.patch
+rdma-hfi1-prevent-panic-when-sdma-is-disabled.patch
+drm-fix-edid-struct-for-old-arm-oabi-format.patch
+ath9k-fix-ar9003_get_eepmisc.patch
+drm-edid-fix-invalid-edid-extension-block-filtering.patch
+drm-bridge-adv7511-clean-up-cec-adapter-when-probe-f.patch
+asoc-mediatek-fix-error-handling-in-mt8173_max98090_.patch
+asoc-mediatek-fix-missing-of_node_put-in-mt2701_wm89.patch
+x86-delay-fix-the-wrong-asm-constraint-in-delay_loop.patch
+drm-mediatek-fix-mtk_cec_mask.patch
+drm-vc4-txp-don-t-set-txp_vstart_at_eof.patch
+drm-vc4-txp-force-alpha-to-be-0xff-if-it-s-disabled.patch
+bpf-fix-excessive-memory-allocation-in-stack_map_all.patch
+nl80211-show-ssid-for-p2p_go-interfaces.patch
+drm-komeda-fix-an-undefined-behavior-bug-in-komeda_p.patch
+drm-mali-dp-potential-dereference-of-null-pointer.patch
+spi-spi-ti-qspi-fix-return-value-handling-of-wait_fo.patch
+nfc-null-out-the-dev-rfkill-to-prevent-uaf.patch
+efi-add-missing-prototype-for-efi_capsule_setup_info.patch
+drbd-fix-duplicate-array-initializer.patch
+hid-hid-led-fix-maximum-brightness-for-dream-cheeky.patch
+hid-elan-fix-potential-double-free-in-elan_input_con.patch
+drm-bridge-fix-error-handling-in-analogix_dp_probe.patch
+sched-fair-fix-cfs_rq_clock_pelt-for-throttled-cfs_r.patch
+spi-img-spfi-fix-pm_runtime_get_sync-error-checking.patch
+cpufreq-fix-possible-race-in-cpufreq-online-error-pa.patch
+ath9k_htc-fix-potential-out-of-bounds-access-with-in.patch
+inotify-show-inotify-mask-flags-in-proc-fdinfo.patch
+fsnotify-fix-wrong-lockdep-annotations.patch
+of-overlay-do-not-break-notify-on-notify_-ok-stop.patch
+scsi-ufs-core-exclude-uecxx-from-sfr-dump-list.patch
+x86-pm-fix-false-positive-kmemleak-report-in-msr_bui.patch
+x86-speculation-add-missing-prototype-for-unpriv_ebp.patch
+asoc-rk3328-fix-disabling-mclk-on-pclk-probe-failure.patch
+perf-tools-add-missing-headers-needed-by-util-data.h.patch
+drm-msm-disp-dpu1-set-vbif-hw-config-to-null-to-avoi.patch
+drm-msm-dsi-fix-error-checks-and-return-values-for-d.patch
+drm-msm-hdmi-check-return-value-after-calling-platfo.patch
+drm-msm-hdmi-fix-error-check-return-value-of-irq_of_.patch
+drm-rockchip-vop-fix-possible-null-ptr-deref-in-vop_.patch
+virtio_blk-fix-the-discard_granularity-and-discard_a.patch
+x86-fix-return-value-of-__setup-handlers.patch
+irqchip-exiu-fix-acknowledgment-of-edge-triggered-in.patch
+irqchip-aspeed-i2c-ic-fix-irq_of_parse_and_map-retur.patch
+x86-mm-cleanup-the-control_va_addr_alignment-__setup.patch
+regulator-core-fix-enable_count-imbalance-with-exclu.patch
+drm-msm-mdp5-return-error-code-in-mdp5_pipe_release-.patch
+drm-msm-mdp5-return-error-code-in-mdp5_mixer_release.patch
+drm-msm-return-an-error-pointer-in-msm_gem_prime_get.patch
+media-uvcvideo-fix-missing-check-to-determine-if-ele.patch
+iomap-iomap_write_failed-fix.patch
+revert-cpufreq-fix-possible-race-in-cpufreq-online-e.patch
+perf-amd-ibs-use-interrupt-regs-ip-for-stack-unwindi.patch
+asoc-fsl-fix-refcount-leak-in-imx_sgtl5000_probe.patch
+asoc-mxs-saif-fix-refcount-leak-in-mxs_saif_probe.patch
+regulator-pfuze100-fix-refcount-leak-in-pfuze_parse_.patch
+scripts-faddr2line-fix-overlapping-text-section-fail.patch
+media-aspeed-fix-an-error-handling-path-in-aspeed_vi.patch
+media-st-delta-fix-pm-disable-depth-imbalance-in-del.patch
+media-exynos4-is-change-clk_disable-to-clk_disable_u.patch
+media-pvrusb2-fix-array-index-out-of-bounds-in-pvr2_.patch
+media-vsp1-fix-offset-calculation-for-plane-cropping.patch
+bluetooth-fix-dangling-sco_conn-and-use-after-free-i.patch
+m68k-math-emu-fix-dependencies-of-math-emulation-sup.patch
+sctp-read-sk-sk_bound_dev_if-once-in-sctp_rcv.patch
+media-ov7670-remove-ov7670_power_off-from-ov7670_rem.patch
+ext4-reject-the-commit-option-on-ext2-filesystems.patch
+drm-msm-a6xx-fix-refcount-leak-in-a6xx_gpu_init.patch
+drm-msm-fix-possible-memory-leak-in-mdp5_crtc_cursor.patch
+thermal-drivers-broadcom-fix-potential-null-derefere.patch
+asoc-wm2000-fix-missing-clk_disable_unprepare-on-err.patch
+nfc-hci-fix-sleep-in-atomic-context-bugs-in-nfc_hci_.patch
+rxrpc-fix-listen-setting-the-bar-too-high-for-the-pr.patch
+rxrpc-don-t-try-to-resend-the-request-if-we-re-recei.patch
+rxrpc-fix-overlapping-ack-accounting.patch
+rxrpc-don-t-let-ack.previouspacket-regress.patch
+rxrpc-fix-decision-on-when-to-generate-an-idle-ack.patch
+net-smc-postpone-sk_refcnt-increment-in-connect.patch
+arm64-dts-rockchip-move-drive-impedance-ohm-to-emmc-.patch
+arm-dts-suniv-f1c100-fix-watchdog-compatible.patch
+soc-qcom-smp2p-fix-missing-of_node_put-in-smp2p_pars.patch
+soc-qcom-smsm-fix-missing-of_node_put-in-smsm_parse_.patch
+pci-cadence-fix-find_first_zero_bit-limit.patch
+pci-rockchip-fix-find_first_zero_bit-limit.patch
+kvm-nvmx-leave-most-vm-exit-info-fields-unmodified-o.patch
+can-xilinx_can-mark-bit-timing-constants-as-const.patch
+arm-dts-bcm2835-rpi-zero-w-fix-gpio-line-name-for-wi.patch
+arm-dts-bcm2837-rpi-cm3-io3-fix-gpio-line-names-for-.patch
+arm-dts-bcm2837-rpi-3-b-plus-fix-gpio-line-name-of-p.patch
+arm-dts-bcm2835-rpi-b-fix-gpio-line-names.patch
+misc-ocxl-fix-possible-double-free-in-ocxl_file_regi.patch
+crypto-marvell-cesa-ecb-does-not-iv.patch
+arm-mediatek-select-arch-timer-for-mt7629.patch
+powerpc-fadump-fix-pt_load-segment-for-boot-memory-a.patch
+mfd-ipaq-micro-fix-error-check-return-value-of-platf.patch
+scsi-fcoe-fix-wstringop-overflow-warnings-in-fcoe_ww.patch
+firmware-arm_scmi-fix-list-protocols-enumeration-in-.patch
+nvdimm-allow-overwrite-in-the-presence-of-disabled-d.patch
+pinctrl-mvebu-fix-irq_of_parse_and_map-return-value.patch
+drivers-base-node.c-fix-compaction-sysfs-file-leak.patch
+dax-fix-cache-flush-on-pmd-mapped-pages.patch
+powerpc-8xx-export-cpm_setbrg-for-modules.patch
+powerpc-idle-fix-return-value-of-__setup-handler.patch
+powerpc-4xx-cpm-fix-return-value-of-__setup-handler.patch
+proc-fix-dentry-inode-overinstantiating-under-proc-p.patch
+ipc-mqueue-use-get_tree_nodev-in-mqueue_get_tree.patch
+pci-imx6-fix-perst-start-up-sequence.patch
+tty-fix-deadlock-caused-by-calling-printk-under-tty_.patch
+crypto-cryptd-protect-per-cpu-resource-by-disabling-.patch
+input-sparcspkr-fix-refcount-leak-in-bbc_beep_probe.patch
+powerpc-64-only-warn-if-__pa-__va-called-with-bad-ad.patch
+powerpc-perf-fix-the-threshold-compare-group-constra.patch
+macintosh-via-pmu-and-via-cuda-need-rtc_lib.patch
+powerpc-fsl_rio-fix-refcount-leak-in-fsl_rio_setup.patch
+mfd-davinci_voicecodec-fix-possible-null-ptr-deref-d.patch
+mailbox-forward-the-hrtimer-if-not-queued-and-under-.patch
+rdma-hfi1-prevent-use-of-lock-before-it-is-initializ.patch
+input-stmfts-do-not-leave-device-disabled-in-stmfts_.patch
+f2fs-fix-dereference-of-stale-list-iterator-after-lo.patch
+iommu-mediatek-add-list_del-in-mtk_iommu_remove.patch
+i2c-at91-use-dma-safe-buffers.patch
+i2c-at91-initialize-dma_buf-in-at91_twi_xfer.patch
+nfs-do-not-report-eintr-erestartsys-as-mapping-error.patch
+nfs-do-not-report-flush-errors-in-nfs_write_end.patch
+nfs-don-t-report-errors-from-nfs_pageio_complete-mor.patch
+nfsv4-pnfs-do-not-fail-i-o-when-we-fail-to-allocate-.patch
+video-fbdev-clcdfb-fix-refcount-leak-in-clcdfb_of_vr.patch
+dmaengine-stm32-mdma-remove-gisr1-register.patch
+iommu-amd-increase-timeout-waiting-for-ga-log-enable.patch
+perf-c2c-use-stdio-interface-if-slang-is-not-support.patch
+perf-jevents-fix-event-syntax-error-caused-by-extsel.patch
diff --git a/queue-5.4/soc-qcom-smp2p-fix-missing-of_node_put-in-smp2p_pars.patch b/queue-5.4/soc-qcom-smp2p-fix-missing-of_node_put-in-smp2p_pars.patch
new file mode 100644 (file)
index 0000000..e569607
--- /dev/null
@@ -0,0 +1,36 @@
+From fc62621b31ea40f4e243824ee69a7e6a4d903410 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Tue, 8 Mar 2022 07:19:42 +0000
+Subject: soc: qcom: smp2p: Fix missing of_node_put() in smp2p_parse_ipc
+
+From: Miaoqian Lin <linmq006@gmail.com>
+
+[ Upstream commit 8fd3f18ea31a398ecce4a6d3804433658678b0a3 ]
+
+The device_node pointer is returned by of_parse_phandle()  with refcount
+incremented. We should use of_node_put() on it when done.
+
+Fixes: 50e99641413e ("soc: qcom: smp2p: Qualcomm Shared Memory Point to Point")
+Signed-off-by: Miaoqian Lin <linmq006@gmail.com>
+Signed-off-by: Bjorn Andersson <bjorn.andersson@linaro.org>
+Link: https://lore.kernel.org/r/20220308071942.22942-1-linmq006@gmail.com
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/soc/qcom/smp2p.c | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/drivers/soc/qcom/smp2p.c b/drivers/soc/qcom/smp2p.c
+index 42e0b8f647ae..d42bcca3b98e 100644
+--- a/drivers/soc/qcom/smp2p.c
++++ b/drivers/soc/qcom/smp2p.c
+@@ -420,6 +420,7 @@ static int smp2p_parse_ipc(struct qcom_smp2p *smp2p)
+       }
+       smp2p->ipc_regmap = syscon_node_to_regmap(syscon);
++      of_node_put(syscon);
+       if (IS_ERR(smp2p->ipc_regmap))
+               return PTR_ERR(smp2p->ipc_regmap);
+-- 
+2.35.1
+
diff --git a/queue-5.4/soc-qcom-smsm-fix-missing-of_node_put-in-smsm_parse_.patch b/queue-5.4/soc-qcom-smsm-fix-missing-of_node_put-in-smsm_parse_.patch
new file mode 100644 (file)
index 0000000..5a7e69d
--- /dev/null
@@ -0,0 +1,36 @@
+From 6b113c8a3afcd31fd1a0ba334ed55a35e7c371c5 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Tue, 8 Mar 2022 07:36:48 +0000
+Subject: soc: qcom: smsm: Fix missing of_node_put() in smsm_parse_ipc
+
+From: Miaoqian Lin <linmq006@gmail.com>
+
+[ Upstream commit aad66a3c78da668f4506356c2fdb70b7a19ecc76 ]
+
+The device_node pointer is returned by of_parse_phandle()  with refcount
+incremented. We should use of_node_put() on it when done.
+
+Fixes: c97c4090ff72 ("soc: qcom: smsm: Add driver for Qualcomm SMSM")
+Signed-off-by: Miaoqian Lin <linmq006@gmail.com>
+Signed-off-by: Bjorn Andersson <bjorn.andersson@linaro.org>
+Link: https://lore.kernel.org/r/20220308073648.24634-1-linmq006@gmail.com
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/soc/qcom/smsm.c | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/drivers/soc/qcom/smsm.c b/drivers/soc/qcom/smsm.c
+index c428d0f78816..6564f15c5319 100644
+--- a/drivers/soc/qcom/smsm.c
++++ b/drivers/soc/qcom/smsm.c
+@@ -359,6 +359,7 @@ static int smsm_parse_ipc(struct qcom_smsm *smsm, unsigned host_id)
+               return 0;
+       host->ipc_regmap = syscon_node_to_regmap(syscon);
++      of_node_put(syscon);
+       if (IS_ERR(host->ipc_regmap))
+               return PTR_ERR(host->ipc_regmap);
+-- 
+2.35.1
+
diff --git a/queue-5.4/spi-img-spfi-fix-pm_runtime_get_sync-error-checking.patch b/queue-5.4/spi-img-spfi-fix-pm_runtime_get_sync-error-checking.patch
new file mode 100644 (file)
index 0000000..80868e9
--- /dev/null
@@ -0,0 +1,38 @@
+From c106a4d1732be6ab6bd54295f227e255013f7a78 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Fri, 22 Apr 2022 06:26:41 +0000
+Subject: spi: img-spfi: Fix pm_runtime_get_sync() error checking
+
+From: Zheng Yongjun <zhengyongjun3@huawei.com>
+
+[ Upstream commit cc470d55343056d6b2a5c32e10e0aad06f324078 ]
+
+If the device is already in a runtime PM enabled state
+pm_runtime_get_sync() will return 1, so a test for negative
+value should be used to check for errors.
+
+Fixes: deba25800a12b ("spi: Add driver for IMG SPFI controller")
+Signed-off-by: Zheng Yongjun <zhengyongjun3@huawei.com>
+Link: https://lore.kernel.org/r/20220422062641.10486-1-zhengyongjun3@huawei.com
+Signed-off-by: Mark Brown <broonie@kernel.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/spi/spi-img-spfi.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/drivers/spi/spi-img-spfi.c b/drivers/spi/spi-img-spfi.c
+index e9ef80983b79..5a6b02843f2b 100644
+--- a/drivers/spi/spi-img-spfi.c
++++ b/drivers/spi/spi-img-spfi.c
+@@ -771,7 +771,7 @@ static int img_spfi_resume(struct device *dev)
+       int ret;
+       ret = pm_runtime_get_sync(dev);
+-      if (ret) {
++      if (ret < 0) {
+               pm_runtime_put_noidle(dev);
+               return ret;
+       }
+-- 
+2.35.1
+
diff --git a/queue-5.4/spi-spi-rspi-remove-setting-src-dst-_-addr-addr_widt.patch b/queue-5.4/spi-spi-rspi-remove-setting-src-dst-_-addr-addr_widt.patch
new file mode 100644 (file)
index 0000000..2923f11
--- /dev/null
@@ -0,0 +1,71 @@
+From f767177f55695688ab10e3c854dd8fc1f5611d1d Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Mon, 11 Apr 2022 18:31:15 +0100
+Subject: spi: spi-rspi: Remove setting {src,dst}_{addr,addr_width} based on
+ DMA direction
+
+From: Biju Das <biju.das.jz@bp.renesas.com>
+
+[ Upstream commit 6f381481a5b236cb53d6de2c49c6ef83a4d0f432 ]
+
+The direction field in the DMA config is deprecated. The rspi driver
+sets {src,dst}_{addr,addr_width} based on the DMA direction and
+it results in dmaengine_slave_config() failure as RZ DMAC driver
+validates {src,dst}_addr_width values independent of DMA direction.
+
+This patch fixes the issue by passing both {src,dst}_{addr,addr_width}
+values independent of DMA direction.
+
+Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>
+Suggested-by: Vinod Koul <vkoul@kernel.org>
+Reviewed-by: Vinod Koul <vkoul@kernel.org>
+Reviewed-by: Geert Uytterhoeven <geert+renesas@glider.be>
+Tested-by: Geert Uytterhoeven <geert+renesas@glider.be>
+Link: https://lore.kernel.org/r/20220411173115.6619-1-biju.das.jz@bp.renesas.com
+Signed-off-by: Mark Brown <broonie@kernel.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/spi/spi-rspi.c | 15 ++++++---------
+ 1 file changed, 6 insertions(+), 9 deletions(-)
+
+diff --git a/drivers/spi/spi-rspi.c b/drivers/spi/spi-rspi.c
+index 7222c7689c3c..0524741d73b9 100644
+--- a/drivers/spi/spi-rspi.c
++++ b/drivers/spi/spi-rspi.c
+@@ -1044,14 +1044,11 @@ static struct dma_chan *rspi_request_dma_chan(struct device *dev,
+       }
+       memset(&cfg, 0, sizeof(cfg));
++      cfg.dst_addr = port_addr + RSPI_SPDR;
++      cfg.src_addr = port_addr + RSPI_SPDR;
++      cfg.dst_addr_width = DMA_SLAVE_BUSWIDTH_1_BYTE;
++      cfg.src_addr_width = DMA_SLAVE_BUSWIDTH_1_BYTE;
+       cfg.direction = dir;
+-      if (dir == DMA_MEM_TO_DEV) {
+-              cfg.dst_addr = port_addr;
+-              cfg.dst_addr_width = DMA_SLAVE_BUSWIDTH_1_BYTE;
+-      } else {
+-              cfg.src_addr = port_addr;
+-              cfg.src_addr_width = DMA_SLAVE_BUSWIDTH_1_BYTE;
+-      }
+       ret = dmaengine_slave_config(chan, &cfg);
+       if (ret) {
+@@ -1082,12 +1079,12 @@ static int rspi_request_dma(struct device *dev, struct spi_controller *ctlr,
+       }
+       ctlr->dma_tx = rspi_request_dma_chan(dev, DMA_MEM_TO_DEV, dma_tx_id,
+-                                           res->start + RSPI_SPDR);
++                                           res->start);
+       if (!ctlr->dma_tx)
+               return -ENODEV;
+       ctlr->dma_rx = rspi_request_dma_chan(dev, DMA_DEV_TO_MEM, dma_rx_id,
+-                                           res->start + RSPI_SPDR);
++                                           res->start);
+       if (!ctlr->dma_rx) {
+               dma_release_channel(ctlr->dma_tx);
+               ctlr->dma_tx = NULL;
+-- 
+2.35.1
+
diff --git a/queue-5.4/spi-spi-ti-qspi-fix-return-value-handling-of-wait_fo.patch b/queue-5.4/spi-spi-ti-qspi-fix-return-value-handling-of-wait_fo.patch
new file mode 100644 (file)
index 0000000..9a06204
--- /dev/null
@@ -0,0 +1,51 @@
+From f9bb98897407fad0a2ff31e406a242f9456f637d Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Mon, 11 Apr 2022 11:10:33 +0000
+Subject: spi: spi-ti-qspi: Fix return value handling of
+ wait_for_completion_timeout
+
+From: Miaoqian Lin <linmq006@gmail.com>
+
+[ Upstream commit 8b1ea69a63eb62f97cef63e6d816b64ed84e8760 ]
+
+wait_for_completion_timeout() returns unsigned long not int.
+It returns 0 if timed out, and positive if completed.
+The check for <= 0 is ambiguous and should be == 0 here
+indicating timeout which is the only error case.
+
+Fixes: 5720ec0a6d26 ("spi: spi-ti-qspi: Add DMA support for QSPI mmap read")
+Signed-off-by: Miaoqian Lin <linmq006@gmail.com>
+Link: https://lore.kernel.org/r/20220411111034.24447-1-linmq006@gmail.com
+Signed-off-by: Mark Brown <broonie@kernel.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/spi/spi-ti-qspi.c | 5 +++--
+ 1 file changed, 3 insertions(+), 2 deletions(-)
+
+diff --git a/drivers/spi/spi-ti-qspi.c b/drivers/spi/spi-ti-qspi.c
+index 6b6ef8944283..4bbad00244ab 100644
+--- a/drivers/spi/spi-ti-qspi.c
++++ b/drivers/spi/spi-ti-qspi.c
+@@ -401,6 +401,7 @@ static int ti_qspi_dma_xfer(struct ti_qspi *qspi, dma_addr_t dma_dst,
+       enum dma_ctrl_flags flags = DMA_CTRL_ACK | DMA_PREP_INTERRUPT;
+       struct dma_async_tx_descriptor *tx;
+       int ret;
++      unsigned long time_left;
+       tx = dmaengine_prep_dma_memcpy(chan, dma_dst, dma_src, len, flags);
+       if (!tx) {
+@@ -420,9 +421,9 @@ static int ti_qspi_dma_xfer(struct ti_qspi *qspi, dma_addr_t dma_dst,
+       }
+       dma_async_issue_pending(chan);
+-      ret = wait_for_completion_timeout(&qspi->transfer_complete,
++      time_left = wait_for_completion_timeout(&qspi->transfer_complete,
+                                         msecs_to_jiffies(len));
+-      if (ret <= 0) {
++      if (time_left == 0) {
+               dmaengine_terminate_sync(chan);
+               dev_err(qspi->dev, "DMA wait_for_completion_timeout\n");
+               return -ETIMEDOUT;
+-- 
+2.35.1
+
diff --git a/queue-5.4/spi-stm32-qspi-fix-wait_cmd-timeout-in-apm-mode.patch b/queue-5.4/spi-stm32-qspi-fix-wait_cmd-timeout-in-apm-mode.patch
new file mode 100644 (file)
index 0000000..66b701e
--- /dev/null
@@ -0,0 +1,38 @@
+From b261c8d7b8671a3f9fa20c87d0ed24e1e0d965b4 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Wed, 11 May 2022 09:46:42 +0200
+Subject: spi: stm32-qspi: Fix wait_cmd timeout in APM mode
+
+From: Patrice Chotard <patrice.chotard@foss.st.com>
+
+[ Upstream commit d83d89ea68b4726700fa87b22db075e4217e691c ]
+
+In APM mode, TCF and TEF flags are not set. To avoid timeout in
+stm32_qspi_wait_cmd(), don't check if TCF/TEF are set.
+
+Signed-off-by: Patrice Chotard <patrice.chotard@foss.st.com>
+Reported-by: eberhard.stoll@kontron.de
+Link: https://lore.kernel.org/r/20220511074644.558874-2-patrice.chotard@foss.st.com
+Signed-off-by: Mark Brown <broonie@kernel.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/spi/spi-stm32-qspi.c | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+diff --git a/drivers/spi/spi-stm32-qspi.c b/drivers/spi/spi-stm32-qspi.c
+index ea77d915216a..8070b7420217 100644
+--- a/drivers/spi/spi-stm32-qspi.c
++++ b/drivers/spi/spi-stm32-qspi.c
+@@ -293,7 +293,8 @@ static int stm32_qspi_wait_cmd(struct stm32_qspi *qspi,
+       if (!op->data.nbytes)
+               goto wait_nobusy;
+-      if (readl_relaxed(qspi->io_base + QSPI_SR) & SR_TCF)
++      if ((readl_relaxed(qspi->io_base + QSPI_SR) & SR_TCF) ||
++          qspi->fmode == CCR_FMODE_APM)
+               goto out;
+       reinit_completion(&qspi->data_completion);
+-- 
+2.35.1
+
diff --git a/queue-5.4/thermal-drivers-broadcom-fix-potential-null-derefere.patch b/queue-5.4/thermal-drivers-broadcom-fix-potential-null-derefere.patch
new file mode 100644 (file)
index 0000000..dfd85fa
--- /dev/null
@@ -0,0 +1,39 @@
+From 3c7002219cfc2ef784e428459d33e736a1b44a4b Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Mon, 25 Apr 2022 09:29:29 +0000
+Subject: thermal/drivers/broadcom: Fix potential NULL dereference in
+ sr_thermal_probe
+
+From: Zheng Yongjun <zhengyongjun3@huawei.com>
+
+[ Upstream commit e20d136ec7d6f309989c447638365840d3424c8e ]
+
+platform_get_resource() may return NULL, add proper check to
+avoid potential NULL dereferencing.
+
+Fixes: 250e211057c72 ("thermal: broadcom: Add Stingray thermal driver")
+Signed-off-by: Zheng Yongjun <zhengyongjun3@huawei.com>
+Link: https://lore.kernel.org/r/20220425092929.90412-1-zhengyongjun3@huawei.com
+Signed-off-by: Daniel Lezcano <daniel.lezcano@linaro.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/thermal/broadcom/sr-thermal.c | 3 +++
+ 1 file changed, 3 insertions(+)
+
+diff --git a/drivers/thermal/broadcom/sr-thermal.c b/drivers/thermal/broadcom/sr-thermal.c
+index 475ce2900771..85ab9edd580c 100644
+--- a/drivers/thermal/broadcom/sr-thermal.c
++++ b/drivers/thermal/broadcom/sr-thermal.c
+@@ -60,6 +60,9 @@ static int sr_thermal_probe(struct platform_device *pdev)
+               return -ENOMEM;
+       res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
++      if (!res)
++              return -ENOENT;
++
+       sr_thermal->regs = (void __iomem *)devm_memremap(&pdev->dev, res->start,
+                                                        resource_size(res),
+                                                        MEMREMAP_WB);
+-- 
+2.35.1
+
diff --git a/queue-5.4/tools-power-turbostat-fix-icx-dram-power-numbers.patch b/queue-5.4/tools-power-turbostat-fix-icx-dram-power-numbers.patch
new file mode 100644 (file)
index 0000000..0242f7a
--- /dev/null
@@ -0,0 +1,34 @@
+From 76bd4d8eb733c3c0da380841bd49cdc065a13f74 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Thu, 10 Feb 2022 21:06:56 -0500
+Subject: tools/power turbostat: fix ICX DRAM power numbers
+
+From: Len Brown <len.brown@intel.com>
+
+[ Upstream commit 6397b6418935773a34b533b3348b03f4ce3d7050 ]
+
+ICX (and its duplicates) require special hard-coded DRAM RAPL units,
+rather than using the generic RAPL energy units.
+
+Reported-by: Srinivas Pandruvada <srinivas.pandruvada@linux.intel.com>
+Signed-off-by: Len Brown <len.brown@intel.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ tools/power/x86/turbostat/turbostat.c | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/tools/power/x86/turbostat/turbostat.c b/tools/power/x86/turbostat/turbostat.c
+index 988326b67a91..8bf6b01b3560 100644
+--- a/tools/power/x86/turbostat/turbostat.c
++++ b/tools/power/x86/turbostat/turbostat.c
+@@ -3865,6 +3865,7 @@ rapl_dram_energy_units_probe(int  model, double rapl_energy_units)
+       case INTEL_FAM6_HASWELL_X:      /* HSX */
+       case INTEL_FAM6_BROADWELL_X:    /* BDX */
+       case INTEL_FAM6_XEON_PHI_KNL:   /* KNL */
++      case INTEL_FAM6_ICELAKE_X:      /* ICX */
+               return (rapl_dram_energy_units = 15.3 / 1000000);
+       default:
+               return (rapl_energy_units);
+-- 
+2.35.1
+
diff --git a/queue-5.4/tracing-incorrect-isolate_mote_t-cast-in-mm_vmscan_l.patch b/queue-5.4/tracing-incorrect-isolate_mote_t-cast-in-mm_vmscan_l.patch
new file mode 100644 (file)
index 0000000..a49e432
--- /dev/null
@@ -0,0 +1,54 @@
+From cb5f6d4b1c764128161e76977a0cb3dbe371036b Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Wed, 11 May 2022 12:46:53 +0300
+Subject: tracing: incorrect isolate_mote_t cast in mm_vmscan_lru_isolate
+
+From: Vasily Averin <vvs@openvz.org>
+
+[ Upstream commit 2b132903de7124dd9a758be0c27562e91a510848 ]
+
+Fixes following sparse warnings:
+
+  CHECK   mm/vmscan.c
+mm/vmscan.c: note: in included file (through
+include/trace/trace_events.h, include/trace/define_trace.h,
+include/trace/events/vmscan.h):
+./include/trace/events/vmscan.h:281:1: sparse: warning:
+ cast to restricted isolate_mode_t
+./include/trace/events/vmscan.h:281:1: sparse: warning:
+ restricted isolate_mode_t degrades to integer
+
+Link: https://lkml.kernel.org/r/e85d7ff2-fd10-53f8-c24e-ba0458439c1b@openvz.org
+Signed-off-by: Vasily Averin <vvs@openvz.org>
+Acked-by: Steven Rostedt (Google) <rostedt@goodmis.org>
+Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ include/trace/events/vmscan.h | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/include/trace/events/vmscan.h b/include/trace/events/vmscan.h
+index a5ab2973e8dc..57184c02e3b9 100644
+--- a/include/trace/events/vmscan.h
++++ b/include/trace/events/vmscan.h
+@@ -283,7 +283,7 @@ TRACE_EVENT(mm_vmscan_lru_isolate,
+               __field(unsigned long, nr_scanned)
+               __field(unsigned long, nr_skipped)
+               __field(unsigned long, nr_taken)
+-              __field(isolate_mode_t, isolate_mode)
++              __field(unsigned int, isolate_mode)
+               __field(int, lru)
+       ),
+@@ -294,7 +294,7 @@ TRACE_EVENT(mm_vmscan_lru_isolate,
+               __entry->nr_scanned = nr_scanned;
+               __entry->nr_skipped = nr_skipped;
+               __entry->nr_taken = nr_taken;
+-              __entry->isolate_mode = isolate_mode;
++              __entry->isolate_mode = (__force unsigned int)isolate_mode;
+               __entry->lru = lru;
+       ),
+-- 
+2.35.1
+
diff --git a/queue-5.4/tty-fix-deadlock-caused-by-calling-printk-under-tty_.patch b/queue-5.4/tty-fix-deadlock-caused-by-calling-printk-under-tty_.patch
new file mode 100644 (file)
index 0000000..5f4d27a
--- /dev/null
@@ -0,0 +1,143 @@
+From a6f1ea9dd28b07cee9472dc0d84c930598b72b7a Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Thu, 12 May 2022 20:38:37 -0700
+Subject: tty: fix deadlock caused by calling printk() under tty_port->lock
+
+From: Qi Zheng <zhengqi.arch@bytedance.com>
+
+[ Upstream commit 6b9dbedbe3499fef862c4dff5217cf91f34e43b3 ]
+
+pty_write() invokes kmalloc() which may invoke a normal printk() to print
+failure message.  This can cause a deadlock in the scenario reported by
+syz-bot below:
+
+       CPU0              CPU1                    CPU2
+       ----              ----                    ----
+                         lock(console_owner);
+                                                 lock(&port_lock_key);
+  lock(&port->lock);
+                         lock(&port_lock_key);
+                                                 lock(&port->lock);
+  lock(console_owner);
+
+As commit dbdda842fe96 ("printk: Add console owner and waiter logic to
+load balance console writes") said, such deadlock can be prevented by
+using printk_deferred() in kmalloc() (which is invoked in the section
+guarded by the port->lock).  But there are too many printk() on the
+kmalloc() path, and kmalloc() can be called from anywhere, so changing
+printk() to printk_deferred() is too complicated and inelegant.
+
+Therefore, this patch chooses to specify __GFP_NOWARN to kmalloc(), so
+that printk() will not be called, and this deadlock problem can be
+avoided.
+
+Syzbot reported the following lockdep error:
+
+======================================================
+WARNING: possible circular locking dependency detected
+5.4.143-00237-g08ccc19a-dirty #10 Not tainted
+------------------------------------------------------
+syz-executor.4/29420 is trying to acquire lock:
+ffffffff8aedb2a0 (console_owner){....}-{0:0}, at: console_trylock_spinning kernel/printk/printk.c:1752 [inline]
+ffffffff8aedb2a0 (console_owner){....}-{0:0}, at: vprintk_emit+0x2ca/0x470 kernel/printk/printk.c:2023
+
+but task is already holding lock:
+ffff8880119c9158 (&port->lock){-.-.}-{2:2}, at: pty_write+0xf4/0x1f0 drivers/tty/pty.c:120
+
+which lock already depends on the new lock.
+
+the existing dependency chain (in reverse order) is:
+
+-> #2 (&port->lock){-.-.}-{2:2}:
+       __raw_spin_lock_irqsave include/linux/spinlock_api_smp.h:110 [inline]
+       _raw_spin_lock_irqsave+0x35/0x50 kernel/locking/spinlock.c:159
+       tty_port_tty_get drivers/tty/tty_port.c:288 [inline]                    <-- lock(&port->lock);
+       tty_port_default_wakeup+0x1d/0xb0 drivers/tty/tty_port.c:47
+       serial8250_tx_chars+0x530/0xa80 drivers/tty/serial/8250/8250_port.c:1767
+       serial8250_handle_irq.part.0+0x31f/0x3d0 drivers/tty/serial/8250/8250_port.c:1854
+       serial8250_handle_irq drivers/tty/serial/8250/8250_port.c:1827 [inline]         <-- lock(&port_lock_key);
+       serial8250_default_handle_irq+0xb2/0x220 drivers/tty/serial/8250/8250_port.c:1870
+       serial8250_interrupt+0xfd/0x200 drivers/tty/serial/8250/8250_core.c:126
+       __handle_irq_event_percpu+0x109/0xa50 kernel/irq/handle.c:156
+       [...]
+
+-> #1 (&port_lock_key){-.-.}-{2:2}:
+       __raw_spin_lock_irqsave include/linux/spinlock_api_smp.h:110 [inline]
+       _raw_spin_lock_irqsave+0x35/0x50 kernel/locking/spinlock.c:159
+       serial8250_console_write+0x184/0xa40 drivers/tty/serial/8250/8250_port.c:3198
+                                                                               <-- lock(&port_lock_key);
+       call_console_drivers kernel/printk/printk.c:1819 [inline]
+       console_unlock+0x8cb/0xd00 kernel/printk/printk.c:2504
+       vprintk_emit+0x1b5/0x470 kernel/printk/printk.c:2024                    <-- lock(console_owner);
+       vprintk_func+0x8d/0x250 kernel/printk/printk_safe.c:394
+       printk+0xba/0xed kernel/printk/printk.c:2084
+       register_console+0x8b3/0xc10 kernel/printk/printk.c:2829
+       univ8250_console_init+0x3a/0x46 drivers/tty/serial/8250/8250_core.c:681
+       console_init+0x49d/0x6d3 kernel/printk/printk.c:2915
+       start_kernel+0x5e9/0x879 init/main.c:713
+       secondary_startup_64+0xa4/0xb0 arch/x86/kernel/head_64.S:241
+
+-> #0 (console_owner){....}-{0:0}:
+       [...]
+       lock_acquire+0x127/0x340 kernel/locking/lockdep.c:4734
+       console_trylock_spinning kernel/printk/printk.c:1773 [inline]           <-- lock(console_owner);
+       vprintk_emit+0x307/0x470 kernel/printk/printk.c:2023
+       vprintk_func+0x8d/0x250 kernel/printk/printk_safe.c:394
+       printk+0xba/0xed kernel/printk/printk.c:2084
+       fail_dump lib/fault-inject.c:45 [inline]
+       should_fail+0x67b/0x7c0 lib/fault-inject.c:144
+       __should_failslab+0x152/0x1c0 mm/failslab.c:33
+       should_failslab+0x5/0x10 mm/slab_common.c:1224
+       slab_pre_alloc_hook mm/slab.h:468 [inline]
+       slab_alloc_node mm/slub.c:2723 [inline]
+       slab_alloc mm/slub.c:2807 [inline]
+       __kmalloc+0x72/0x300 mm/slub.c:3871
+       kmalloc include/linux/slab.h:582 [inline]
+       tty_buffer_alloc+0x23f/0x2a0 drivers/tty/tty_buffer.c:175
+       __tty_buffer_request_room+0x156/0x2a0 drivers/tty/tty_buffer.c:273
+       tty_insert_flip_string_fixed_flag+0x93/0x250 drivers/tty/tty_buffer.c:318
+       tty_insert_flip_string include/linux/tty_flip.h:37 [inline]
+       pty_write+0x126/0x1f0 drivers/tty/pty.c:122                             <-- lock(&port->lock);
+       n_tty_write+0xa7a/0xfc0 drivers/tty/n_tty.c:2356
+       do_tty_write drivers/tty/tty_io.c:961 [inline]
+       tty_write+0x512/0x930 drivers/tty/tty_io.c:1045
+       __vfs_write+0x76/0x100 fs/read_write.c:494
+       [...]
+
+other info that might help us debug this:
+
+Chain exists of:
+  console_owner --> &port_lock_key --> &port->lock
+
+Link: https://lkml.kernel.org/r/20220511061951.1114-2-zhengqi.arch@bytedance.com
+Link: https://lkml.kernel.org/r/20220510113809.80626-2-zhengqi.arch@bytedance.com
+Fixes: b6da31b2c07c ("tty: Fix data race in tty_insert_flip_string_fixed_flag")
+Signed-off-by: Qi Zheng <zhengqi.arch@bytedance.com>
+Acked-by: Jiri Slaby <jirislaby@kernel.org>
+Acked-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+Cc: Akinobu Mita <akinobu.mita@gmail.com>
+Cc: Vlastimil Babka <vbabka@suse.cz>
+Cc: Steven Rostedt (Google) <rostedt@goodmis.org>
+Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/tty/tty_buffer.c | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+diff --git a/drivers/tty/tty_buffer.c b/drivers/tty/tty_buffer.c
+index bb148dbfbb88..47f2370ad85c 100644
+--- a/drivers/tty/tty_buffer.c
++++ b/drivers/tty/tty_buffer.c
+@@ -172,7 +172,8 @@ static struct tty_buffer *tty_buffer_alloc(struct tty_port *port, size_t size)
+          have queued and recycle that ? */
+       if (atomic_read(&port->buf.mem_used) > port->buf.mem_limit)
+               return NULL;
+-      p = kmalloc(sizeof(struct tty_buffer) + 2 * size, GFP_ATOMIC);
++      p = kmalloc(sizeof(struct tty_buffer) + 2 * size,
++                  GFP_ATOMIC | __GFP_NOWARN);
+       if (p == NULL)
+               return NULL;
+-- 
+2.35.1
+
diff --git a/queue-5.4/video-fbdev-clcdfb-fix-refcount-leak-in-clcdfb_of_vr.patch b/queue-5.4/video-fbdev-clcdfb-fix-refcount-leak-in-clcdfb_of_vr.patch
new file mode 100644 (file)
index 0000000..81fd98a
--- /dev/null
@@ -0,0 +1,45 @@
+From 9fea2d594b6495bed728d20b8203216a3e921bb3 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Thu, 12 May 2022 15:59:08 +0400
+Subject: video: fbdev: clcdfb: Fix refcount leak in clcdfb_of_vram_setup
+
+From: Miaoqian Lin <linmq006@gmail.com>
+
+[ Upstream commit b23789a59fa6f00e98a319291819f91fbba0deb8 ]
+
+of_parse_phandle() returns a node pointer with refcount incremented, we should
+use of_node_put() on it when not need anymore.  Add missing of_node_put() to
+avoid refcount leak.
+
+Fixes: d10715be03bd ("video: ARM CLCD: Add DT support")
+Signed-off-by: Miaoqian Lin <linmq006@gmail.com>
+Signed-off-by: Helge Deller <deller@gmx.de>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/video/fbdev/amba-clcd.c | 5 ++++-
+ 1 file changed, 4 insertions(+), 1 deletion(-)
+
+diff --git a/drivers/video/fbdev/amba-clcd.c b/drivers/video/fbdev/amba-clcd.c
+index 7de43be6ef2c..3b7a7c74bf0a 100644
+--- a/drivers/video/fbdev/amba-clcd.c
++++ b/drivers/video/fbdev/amba-clcd.c
+@@ -774,12 +774,15 @@ static int clcdfb_of_vram_setup(struct clcd_fb *fb)
+               return -ENODEV;
+       fb->fb.screen_base = of_iomap(memory, 0);
+-      if (!fb->fb.screen_base)
++      if (!fb->fb.screen_base) {
++              of_node_put(memory);
+               return -ENOMEM;
++      }
+       fb->fb.fix.smem_start = of_translate_address(memory,
+                       of_get_address(memory, 0, &size, NULL));
+       fb->fb.fix.smem_len = size;
++      of_node_put(memory);
+       return 0;
+ }
+-- 
+2.35.1
+
diff --git a/queue-5.4/virtio_blk-fix-the-discard_granularity-and-discard_a.patch b/queue-5.4/virtio_blk-fix-the-discard_granularity-and-discard_a.patch
new file mode 100644 (file)
index 0000000..d61733f
--- /dev/null
@@ -0,0 +1,58 @@
+From a962b1774d7fe41ee9bfd5275cf5bc6d40bf21dc Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Mon, 18 Apr 2022 06:53:07 +0200
+Subject: virtio_blk: fix the discard_granularity and discard_alignment queue
+ limits
+
+From: Christoph Hellwig <hch@lst.de>
+
+[ Upstream commit 62952cc5bccd89b76d710de1d0b43244af0f2903 ]
+
+The discard_alignment queue limit is named a bit misleading means the
+offset into the block device at which the discard granularity starts.
+
+On the other hand the discard_sector_alignment from the virtio 1.1 looks
+similar to what Linux uses as discard granularity (even if not very well
+described):
+
+  "discard_sector_alignment can be used by OS when splitting a request
+   based on alignment. "
+
+And at least qemu does set it to the discard granularity.
+
+So stop setting the discard_alignment and use the virtio
+discard_sector_alignment to set the discard granularity.
+
+Fixes: 1f23816b8eb8 ("virtio_blk: add discard and write zeroes support")
+Signed-off-by: Christoph Hellwig <hch@lst.de>
+Reviewed-by: Martin K. Petersen <martin.petersen@oracle.com>
+Link: https://lore.kernel.org/r/20220418045314.360785-5-hch@lst.de
+Signed-off-by: Jens Axboe <axboe@kernel.dk>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/block/virtio_blk.c | 7 ++++---
+ 1 file changed, 4 insertions(+), 3 deletions(-)
+
+diff --git a/drivers/block/virtio_blk.c b/drivers/block/virtio_blk.c
+index 2a5cd502feae..9b3ea86c20e5 100644
+--- a/drivers/block/virtio_blk.c
++++ b/drivers/block/virtio_blk.c
+@@ -976,11 +976,12 @@ static int virtblk_probe(struct virtio_device *vdev)
+               blk_queue_io_opt(q, blk_size * opt_io_size);
+       if (virtio_has_feature(vdev, VIRTIO_BLK_F_DISCARD)) {
+-              q->limits.discard_granularity = blk_size;
+-
+               virtio_cread(vdev, struct virtio_blk_config,
+                            discard_sector_alignment, &v);
+-              q->limits.discard_alignment = v ? v << SECTOR_SHIFT : 0;
++              if (v)
++                      q->limits.discard_granularity = v << SECTOR_SHIFT;
++              else
++                      q->limits.discard_granularity = blk_size;
+               virtio_cread(vdev, struct virtio_blk_config,
+                            max_discard_sectors, &v);
+-- 
+2.35.1
+
diff --git a/queue-5.4/x86-delay-fix-the-wrong-asm-constraint-in-delay_loop.patch b/queue-5.4/x86-delay-fix-the-wrong-asm-constraint-in-delay_loop.patch
new file mode 100644 (file)
index 0000000..8f398d3
--- /dev/null
@@ -0,0 +1,51 @@
+From 69105c42781fe44699fda16a12ae6f4657a795af Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Tue, 29 Mar 2022 17:47:04 +0700
+Subject: x86/delay: Fix the wrong asm constraint in delay_loop()
+
+From: Ammar Faizi <ammarfaizi2@gnuweeb.org>
+
+[ Upstream commit b86eb74098a92afd789da02699b4b0dd3f73b889 ]
+
+The asm constraint does not reflect the fact that the asm statement can
+modify the value of the local variable loops. Which it does.
+
+Specifying the wrong constraint may lead to undefined behavior, it may
+clobber random stuff (e.g. local variable, important temporary value in
+regs, etc.). This is especially dangerous when the compiler decides to
+inline the function and since it doesn't know that the value gets
+modified, it might decide to use it from a register directly without
+reloading it.
+
+Change the constraint to "+a" to denote that the first argument is an
+input and an output argument.
+
+  [ bp: Fix typo, massage commit message. ]
+
+Fixes: e01b70ef3eb3 ("x86: fix bug in arch/i386/lib/delay.c file, delay_loop function")
+Signed-off-by: Ammar Faizi <ammarfaizi2@gnuweeb.org>
+Signed-off-by: Borislav Petkov <bp@suse.de>
+Link: https://lore.kernel.org/r/20220329104705.65256-2-ammarfaizi2@gnuweeb.org
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ arch/x86/lib/delay.c | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/arch/x86/lib/delay.c b/arch/x86/lib/delay.c
+index c126571e5e2e..3d1cfad36ba2 100644
+--- a/arch/x86/lib/delay.c
++++ b/arch/x86/lib/delay.c
+@@ -43,8 +43,8 @@ static void delay_loop(unsigned long loops)
+               "       jnz 2b          \n"
+               "3:     dec %0          \n"
+-              : /* we don't need output */
+-              :"a" (loops)
++              : "+a" (loops)
++              :
+       );
+ }
+-- 
+2.35.1
+
diff --git a/queue-5.4/x86-fix-return-value-of-__setup-handlers.patch b/queue-5.4/x86-fix-return-value-of-__setup-handlers.patch
new file mode 100644 (file)
index 0000000..9793d0a
--- /dev/null
@@ -0,0 +1,104 @@
+From 39543b877c535de8cd313b82bded5e1c9b67c05d Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Sun, 13 Mar 2022 18:27:25 -0700
+Subject: x86: Fix return value of __setup handlers
+
+From: Randy Dunlap <rdunlap@infradead.org>
+
+[ Upstream commit 12441ccdf5e2f5a01a46e344976cbbd3d46845c9 ]
+
+__setup() handlers should return 1 to obsolete_checksetup() in
+init/main.c to indicate that the boot option has been handled. A return
+of 0 causes the boot option/value to be listed as an Unknown kernel
+parameter and added to init's (limited) argument (no '=') or environment
+(with '=') strings. So return 1 from these x86 __setup handlers.
+
+Examples:
+
+  Unknown kernel command line parameters "apicpmtimer
+    BOOT_IMAGE=/boot/bzImage-517rc8 vdso=1 ring3mwait=disable", will be
+    passed to user space.
+
+  Run /sbin/init as init process
+   with arguments:
+     /sbin/init
+     apicpmtimer
+   with environment:
+     HOME=/
+     TERM=linux
+     BOOT_IMAGE=/boot/bzImage-517rc8
+     vdso=1
+     ring3mwait=disable
+
+Fixes: 2aae950b21e4 ("x86_64: Add vDSO for x86-64 with gettimeofday/clock_gettime/getcpu")
+Fixes: 77b52b4c5c66 ("x86: add "debugpat" boot option")
+Fixes: e16fd002afe2 ("x86/cpufeature: Enable RING3MWAIT for Knights Landing")
+Fixes: b8ce33590687 ("x86_64: convert to clock events")
+Reported-by: Igor Zhbanov <i.zhbanov@omprussia.ru>
+Signed-off-by: Randy Dunlap <rdunlap@infradead.org>
+Signed-off-by: Borislav Petkov <bp@suse.de>
+Link: https://lore.kernel.org/r/64644a2f-4a20-bab3-1e15-3b2cdd0defe3@omprussia.ru
+Link: https://lore.kernel.org/r/20220314012725.26661-1-rdunlap@infradead.org
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ arch/x86/entry/vdso/vma.c   | 2 +-
+ arch/x86/kernel/apic/apic.c | 2 +-
+ arch/x86/kernel/cpu/intel.c | 2 +-
+ arch/x86/mm/pat.c           | 2 +-
+ 4 files changed, 4 insertions(+), 4 deletions(-)
+
+diff --git a/arch/x86/entry/vdso/vma.c b/arch/x86/entry/vdso/vma.c
+index f5937742b290..3613cfb83c6d 100644
+--- a/arch/x86/entry/vdso/vma.c
++++ b/arch/x86/entry/vdso/vma.c
+@@ -323,7 +323,7 @@ int arch_setup_additional_pages(struct linux_binprm *bprm, int uses_interp)
+ static __init int vdso_setup(char *s)
+ {
+       vdso64_enabled = simple_strtoul(s, NULL, 0);
+-      return 0;
++      return 1;
+ }
+ __setup("vdso=", vdso_setup);
+diff --git a/arch/x86/kernel/apic/apic.c b/arch/x86/kernel/apic/apic.c
+index 4e4476b832be..68c734032523 100644
+--- a/arch/x86/kernel/apic/apic.c
++++ b/arch/x86/kernel/apic/apic.c
+@@ -168,7 +168,7 @@ static __init int setup_apicpmtimer(char *s)
+ {
+       apic_calibrate_pmtmr = 1;
+       notsc_setup(NULL);
+-      return 0;
++      return 1;
+ }
+ __setup("apicpmtimer", setup_apicpmtimer);
+ #endif
+diff --git a/arch/x86/kernel/cpu/intel.c b/arch/x86/kernel/cpu/intel.c
+index 11d5c5950e2d..44688917d51f 100644
+--- a/arch/x86/kernel/cpu/intel.c
++++ b/arch/x86/kernel/cpu/intel.c
+@@ -97,7 +97,7 @@ static bool ring3mwait_disabled __read_mostly;
+ static int __init ring3mwait_disable(char *__unused)
+ {
+       ring3mwait_disabled = true;
+-      return 0;
++      return 1;
+ }
+ __setup("ring3mwait=disable", ring3mwait_disable);
+diff --git a/arch/x86/mm/pat.c b/arch/x86/mm/pat.c
+index 35b2e35c2203..c7c4e2f8c6a5 100644
+--- a/arch/x86/mm/pat.c
++++ b/arch/x86/mm/pat.c
+@@ -75,7 +75,7 @@ int pat_debug_enable;
+ static int __init pat_debug_setup(char *str)
+ {
+       pat_debug_enable = 1;
+-      return 0;
++      return 1;
+ }
+ __setup("debugpat", pat_debug_setup);
+-- 
+2.35.1
+
diff --git a/queue-5.4/x86-mm-cleanup-the-control_va_addr_alignment-__setup.patch b/queue-5.4/x86-mm-cleanup-the-control_va_addr_alignment-__setup.patch
new file mode 100644 (file)
index 0000000..9436b9f
--- /dev/null
@@ -0,0 +1,59 @@
+From d463ba827d867b1a8ea96341c8c5bcac7d33cefb Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Mon, 14 Mar 2022 17:10:45 -0700
+Subject: x86/mm: Cleanup the control_va_addr_alignment() __setup handler
+
+From: Randy Dunlap <rdunlap@infradead.org>
+
+[ Upstream commit 1ef64b1e89e6d4018da46e08ffc32779a31160c7 ]
+
+Clean up control_va_addr_alignment():
+
+a. Make '=' required instead of optional (as documented).
+b. Print a warning if an invalid option value is used.
+c. Return 1 from the __setup handler when an invalid option value is
+   used. This prevents the kernel from polluting init's (limited)
+   environment space with the entire string.
+
+Fixes: dfb09f9b7ab0 ("x86, amd: Avoid cache aliasing penalties on AMD family 15h")
+Reported-by: Igor Zhbanov <i.zhbanov@omprussia.ru>
+Signed-off-by: Randy Dunlap <rdunlap@infradead.org>
+Signed-off-by: Borislav Petkov <bp@suse.de>
+Link: https://lore.kernel.org/r/64644a2f-4a20-bab3-1e15-3b2cdd0defe3@omprussia.ru
+Link: https://lore.kernel.org/r/20220315001045.7680-1-rdunlap@infradead.org
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ arch/x86/kernel/sys_x86_64.c | 7 ++-----
+ 1 file changed, 2 insertions(+), 5 deletions(-)
+
+diff --git a/arch/x86/kernel/sys_x86_64.c b/arch/x86/kernel/sys_x86_64.c
+index f7476ce23b6e..42e31358a9d3 100644
+--- a/arch/x86/kernel/sys_x86_64.c
++++ b/arch/x86/kernel/sys_x86_64.c
+@@ -70,9 +70,6 @@ static int __init control_va_addr_alignment(char *str)
+       if (*str == 0)
+               return 1;
+-      if (*str == '=')
+-              str++;
+-
+       if (!strcmp(str, "32"))
+               va_align.flags = ALIGN_VA_32;
+       else if (!strcmp(str, "64"))
+@@ -82,11 +79,11 @@ static int __init control_va_addr_alignment(char *str)
+       else if (!strcmp(str, "on"))
+               va_align.flags = ALIGN_VA_32 | ALIGN_VA_64;
+       else
+-              return 0;
++              pr_warn("invalid option value: 'align_va_addr=%s'\n", str);
+       return 1;
+ }
+-__setup("align_va_addr", control_va_addr_alignment);
++__setup("align_va_addr=", control_va_addr_alignment);
+ SYSCALL_DEFINE6(mmap, unsigned long, addr, unsigned long, len,
+               unsigned long, prot, unsigned long, flags,
+-- 
+2.35.1
+
diff --git a/queue-5.4/x86-pm-fix-false-positive-kmemleak-report-in-msr_bui.patch b/queue-5.4/x86-pm-fix-false-positive-kmemleak-report-in-msr_bui.patch
new file mode 100644 (file)
index 0000000..7c1d9aa
--- /dev/null
@@ -0,0 +1,161 @@
+From fa9687451ef14b30d5e98bca941006f3f19b4a6d Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Sat, 23 Apr 2022 20:24:10 +0200
+Subject: x86/pm: Fix false positive kmemleak report in msr_build_context()
+
+From: Matthieu Baerts <matthieu.baerts@tessares.net>
+
+[ Upstream commit b0b592cf08367719e1d1ef07c9f136e8c17f7ec3 ]
+
+Since
+
+  e2a1256b17b1 ("x86/speculation: Restore speculation related MSRs during S3 resume")
+
+kmemleak reports this issue:
+
+  unreferenced object 0xffff888009cedc00 (size 256):
+    comm "swapper/0", pid 1, jiffies 4294693823 (age 73.764s)
+    hex dump (first 32 bytes):
+      00 00 00 00 00 00 00 00 48 00 00 00 00 00 00 00  ........H.......
+      00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
+    backtrace:
+      msr_build_context (include/linux/slab.h:621)
+      pm_check_save_msr (arch/x86/power/cpu.c:520)
+      do_one_initcall (init/main.c:1298)
+      kernel_init_freeable (init/main.c:1370)
+      kernel_init (init/main.c:1504)
+      ret_from_fork (arch/x86/entry/entry_64.S:304)
+
+Reproducer:
+
+  - boot the VM with a debug kernel config (see
+    https://github.com/multipath-tcp/mptcp_net-next/issues/268)
+  - wait ~1 minute
+  - start a kmemleak scan
+
+The root cause here is alignment within the packed struct saved_context
+(from suspend_64.h). Kmemleak only searches for pointers that are
+aligned (see how pointers are scanned in kmemleak.c), but pahole shows
+that the saved_msrs struct member and all members after it in the
+structure are unaligned:
+
+  struct saved_context {
+    struct pt_regs             regs;                 /*     0   168 */
+    /* --- cacheline 2 boundary (128 bytes) was 40 bytes ago --- */
+    u16                        ds;                   /*   168     2 */
+
+    ...
+
+    u64                        misc_enable;          /*   232     8 */
+    bool                       misc_enable_saved;    /*   240     1 */
+
+   /* Note below odd offset values for the remainder of this struct */
+
+    struct saved_msrs          saved_msrs;           /*   241    16 */
+    /* --- cacheline 4 boundary (256 bytes) was 1 bytes ago --- */
+    long unsigned int          efer;                 /*   257     8 */
+    u16                        gdt_pad;              /*   265     2 */
+    struct desc_ptr            gdt_desc;             /*   267    10 */
+    u16                        idt_pad;              /*   277     2 */
+    struct desc_ptr            idt;                  /*   279    10 */
+    u16                        ldt;                  /*   289     2 */
+    u16                        tss;                  /*   291     2 */
+    long unsigned int          tr;                   /*   293     8 */
+    long unsigned int          safety;               /*   301     8 */
+    long unsigned int          return_address;       /*   309     8 */
+
+    /* size: 317, cachelines: 5, members: 25 */
+    /* last cacheline: 61 bytes */
+  } __attribute__((__packed__));
+
+Move misc_enable_saved to the end of the struct declaration so that
+saved_msrs fits in before the cacheline 4 boundary.
+
+The comment above the saved_context declaration says to fix wakeup_64.S
+file and __save/__restore_processor_state() if the struct is modified:
+it looks like all the accesses in wakeup_64.S are done through offsets
+which are computed at build-time. Update that comment accordingly.
+
+At the end, the false positive kmemleak report is due to a limitation
+from kmemleak but it is always good to avoid unaligned members for
+optimisation purposes.
+
+Please note that it looks like this issue is not new, e.g.
+
+  https://lore.kernel.org/all/9f1bb619-c4ee-21c4-a251-870bd4db04fa@lwfinger.net/
+  https://lore.kernel.org/all/94e48fcd-1dbd-ebd2-4c91-f39941735909@molgen.mpg.de/
+
+  [ bp: Massage + cleanup commit message. ]
+
+Fixes: 7a9c2dd08ead ("x86/pm: Introduce quirk framework to save/restore extra MSR registers around suspend/resume")
+Suggested-by: Mat Martineau <mathew.j.martineau@linux.intel.com>
+Signed-off-by: Matthieu Baerts <matthieu.baerts@tessares.net>
+Signed-off-by: Borislav Petkov <bp@suse.de>
+Reviewed-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
+Link: https://lore.kernel.org/r/20220426202138.498310-1-matthieu.baerts@tessares.net
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ arch/x86/include/asm/suspend_32.h |  2 +-
+ arch/x86/include/asm/suspend_64.h | 12 ++++++++----
+ 2 files changed, 9 insertions(+), 5 deletions(-)
+
+diff --git a/arch/x86/include/asm/suspend_32.h b/arch/x86/include/asm/suspend_32.h
+index fdbd9d7b7bca..3b97aa921543 100644
+--- a/arch/x86/include/asm/suspend_32.h
++++ b/arch/x86/include/asm/suspend_32.h
+@@ -21,7 +21,6 @@ struct saved_context {
+ #endif
+       unsigned long cr0, cr2, cr3, cr4;
+       u64 misc_enable;
+-      bool misc_enable_saved;
+       struct saved_msrs saved_msrs;
+       struct desc_ptr gdt_desc;
+       struct desc_ptr idt;
+@@ -30,6 +29,7 @@ struct saved_context {
+       unsigned long tr;
+       unsigned long safety;
+       unsigned long return_address;
++      bool misc_enable_saved;
+ } __attribute__((packed));
+ /* routines for saving/restoring kernel state */
+diff --git a/arch/x86/include/asm/suspend_64.h b/arch/x86/include/asm/suspend_64.h
+index 35bb35d28733..54df06687d83 100644
+--- a/arch/x86/include/asm/suspend_64.h
++++ b/arch/x86/include/asm/suspend_64.h
+@@ -14,9 +14,13 @@
+  * Image of the saved processor state, used by the low level ACPI suspend to
+  * RAM code and by the low level hibernation code.
+  *
+- * If you modify it, fix arch/x86/kernel/acpi/wakeup_64.S and make sure that
+- * __save/__restore_processor_state(), defined in arch/x86/kernel/suspend_64.c,
+- * still work as required.
++ * If you modify it, check how it is used in arch/x86/kernel/acpi/wakeup_64.S
++ * and make sure that __save/__restore_processor_state(), defined in
++ * arch/x86/power/cpu.c, still work as required.
++ *
++ * Because the structure is packed, make sure to avoid unaligned members. For
++ * optimisation purposes but also because tools like kmemleak only search for
++ * pointers that are aligned.
+  */
+ struct saved_context {
+       struct pt_regs regs;
+@@ -36,7 +40,6 @@ struct saved_context {
+       unsigned long cr0, cr2, cr3, cr4;
+       u64 misc_enable;
+-      bool misc_enable_saved;
+       struct saved_msrs saved_msrs;
+       unsigned long efer;
+       u16 gdt_pad; /* Unused */
+@@ -48,6 +51,7 @@ struct saved_context {
+       unsigned long tr;
+       unsigned long safety;
+       unsigned long return_address;
++      bool misc_enable_saved;
+ } __attribute__((packed));
+ #define loaddebug(thread,register) \
+-- 
+2.35.1
+
diff --git a/queue-5.4/x86-speculation-add-missing-prototype-for-unpriv_ebp.patch b/queue-5.4/x86-speculation-add-missing-prototype-for-unpriv_ebp.patch
new file mode 100644 (file)
index 0000000..cfd9ade
--- /dev/null
@@ -0,0 +1,48 @@
+From 96f671b81207f3f34044a2d2d56b708238fa9500 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Mon, 25 Apr 2022 16:40:02 -0700
+Subject: x86/speculation: Add missing prototype for unpriv_ebpf_notify()
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+From: Josh Poimboeuf <jpoimboe@redhat.com>
+
+[ Upstream commit 2147c438fde135d6c145a96e373d9348e7076f7f ]
+
+Fix the following warnings seen with "make W=1":
+
+  kernel/sysctl.c:183:13: warning: no previous prototype for ‘unpriv_ebpf_notify’ [-Wmissing-prototypes]
+    183 | void __weak unpriv_ebpf_notify(int new_state)
+        |             ^~~~~~~~~~~~~~~~~~
+
+  arch/x86/kernel/cpu/bugs.c:659:6: warning: no previous prototype for ‘unpriv_ebpf_notify’ [-Wmissing-prototypes]
+    659 | void unpriv_ebpf_notify(int new_state)
+        |      ^~~~~~~~~~~~~~~~~~
+
+Fixes: 44a3918c8245 ("x86/speculation: Include unprivileged eBPF status in Spectre v2 mitigation reporting")
+Reported-by: kernel test robot <lkp@intel.com>
+Signed-off-by: Josh Poimboeuf <jpoimboe@redhat.com>
+Signed-off-by: Borislav Petkov <bp@suse.de>
+Link: https://lore.kernel.org/r/5689d065f739602ececaee1e05e68b8644009608.1650930000.git.jpoimboe@redhat.com
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ include/linux/bpf.h | 2 ++
+ 1 file changed, 2 insertions(+)
+
+diff --git a/include/linux/bpf.h b/include/linux/bpf.h
+index a73ca7c9c7d0..5705cda3c4c4 100644
+--- a/include/linux/bpf.h
++++ b/include/linux/bpf.h
+@@ -929,6 +929,8 @@ void bpf_offload_dev_netdev_unregister(struct bpf_offload_dev *offdev,
+                                      struct net_device *netdev);
+ bool bpf_offload_dev_match(struct bpf_prog *prog, struct net_device *netdev);
++void unpriv_ebpf_notify(int new_state);
++
+ #if defined(CONFIG_NET) && defined(CONFIG_BPF_SYSCALL)
+ int bpf_prog_offload_init(struct bpf_prog *prog, union bpf_attr *attr);
+-- 
+2.35.1
+