From 4383e5d6cd941b4971f71ddb36033f3d998e5ed4 Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Sun, 9 Jul 2023 11:28:15 +0200 Subject: [PATCH] move 6.4 queue off to the side for a bit to get a new release out... --- ...-fix-gaudi2_get_tpc_idle_status-retu.patch | 37 - ...ssible-null-dereference-in-snd_ac97_.patch | 42 - ...te-offset_in_bo-of-drm_amdgpu_gem_va.patch | 73 - ...tly-return-null-for-ghes_get_devices.patch | 40 - ...l-and-__align-_str-outside-ifdef-__a.patch | 62 - ...es-avoid-missing-declaration-warning.patch | 103 - ...x-drop-clock-names-from-the-spi-node.patch | 42 - ...bcm5301x-fix-duplex-full-full-duplex.patch | 56 - ...ve-model-property-out-of-pinctrl-nod.patch | 41 - ...7-common-fix-backlight-pwm-specifier.patch | 49 - ...-lan966x-kontron-d10-fix-board-reset.patch | 51 - ...m-dts-lan966x-kontron-d10-fix-spi-cs.patch | 51 - ...orrect-uart_b-and-uart_c-clock-refer.patch | 51 - ...correct-uart_b-and-uart_c-clock-refe.patch | 47 - ...8074-dragonboard-set-dma-as-remotely.patch | 42 - ...8974-do-not-use-underscore-in-node-n.patch | 38 - ...x-audio-routing-on-stm32mp15xx-dhcom.patch | 52 - ...x-i2s-endpoint-format-property-for-s.patch | 36 - ...ve-ethernet-mac-eeprom-from-som-to-c.patch | 97 - ...horten-the-av96-hdmi-sound-card-name.patch | 38 - ...p93xx-fix-missing-prototype-warnings.patch | 48 - ...omap2-quirk-down-into-twl4030-driver.patch | 251 -- ...up-tps65010-regression-on-omap1-osk1.patch | 392 --- ...rt-old-mmci-omap-to-gpio-descriptors.patch | 384 --- ...emove-global-gpio-numbers-from-tusb6.patch | 413 --- .../arm-omap1-drop-header-on-ams-delta.patch | 36 - ...map1-exorcise-the-legacy-gpio-header.patch | 77 - ...x-up-the-nokia-770-board-device-irqs.patch | 123 - ...-serial-wakeup-gpios-use-descriptors.patch | 136 - ...-reliance-on-gpio-numbers-from-palmt.patch | 114 - ...ve-reliance-on-gpio-numbers-from-sx1.patch | 98 - ...fix-missing-tick_broadcast-prototype.patch | 41 - ...t-usb-hub-reset-gpio-from-descriptor.patch | 110 - ...e-wlan-quirk-to-use-gpio-descriptors.patch | 95 - ...ediatek-add-cpufreq-nodes-for-mt8192.patch | 112 - ...ek-mt8183-add-mediatek-broken-save-r.patch | 44 - ...ek-mt8192-add-mediatek-broken-save-r.patch | 44 - ...ek-mt8192-fix-cpus-capacity-dmips-mh.patch | 86 - ...ek-mt8195-add-mediatek-broken-save-r.patch | 44 - ...hip-sparx5-do-not-use-psci-on-refere.patch | 74 - ...-increase-bl2-partition-on-nand-of-b.patch | 50 - ...pq8016-sbc-fix-1.8v-power-rail-on-ls.patch | 81 - ...pq8016-sbc-fix-regulator-constraints.patch | 186 -- ...pq8096-fix-fixed-regulator-name-prop.patch | 49 - ...om-ipq6018-correct-qrng-unit-address.patch | 39 - ...pq9574-update-the-size-of-gicc-gicv-.patch | 46 - ...m-msm8916-correct-camss-unit-address.patch | 39 - ...com-msm8916-correct-mmc-unit-address.patch | 49 - ...m-msm8916-correct-wcnss-unit-address.patch | 39 - ...m-msm8953-correct-iommu-unit-address.patch | 39 - ...m-msm8953-correct-wcnss-unit-address.patch | 39 - ...com-msm8976-correct-mmc-unit-address.patch | 61 - ...om-msm8994-correct-spmi-unit-address.patch | 39 - ...m-msm8996-correct-camss-unit-address.patch | 39 - ...m7250b-add-missing-spmi-vadc-include.patch | 36 - ...m8998-don-t-use-gic_spi-for-spmi-int.patch | 39 - ...m-qdu1000-flush-rsc-sleep-wake-votes.patch | 40 - ...om-qrb4210-rb2-fix-cd-gpio-for-sdhc2.patch | 40 - ...om-sdm630-correct-camss-unit-address.patch | 40 - ...om-sdm670-flush-rsc-sleep-wake-votes.patch | 40 - ...om-sdm845-correct-camss-unit-address.patch | 39 - ...om-sdm845-flush-rsc-sleep-wake-votes.patch | 40 - ...dm845-polaris-add-missing-touchscree.patch | 40 - ...m6115-correct-thermal-sensor-unit-ad.patch | 39 - ...m8250-edo-panel-framebuffer-is-2.5k-.patch | 52 - ...m8350-correct-dma-controller-unit-ad.patch | 39 - ...-sm8350-correct-pci-phy-unit-address.patch | 39 - ...-sm8350-correct-usb-phy-unit-address.patch | 39 - ...m8550-add-missing-interconnect-path-.patch | 39 - ...m-sm8550-correct-crypto-unit-address.patch | 39 - ...-sm8550-correct-pinctrl-unit-address.patch | 39 - ...om-sm8550-flush-rsc-sleep-wake-votes.patch | 40 - ...s-ulcb-kf-remove-flow-control-for-sc.patch | 46 - ...ip-assign-es8316-mclk-rate-on-rk3588.patch | 54 - ...ip-fix-compatible-for-bluetooth-on-r.patch | 42 - ...ts-ti-k3-am69-sk-fix-main_i2c0-alias.patch | 43 - ...k3-j7200-fix-physical-address-of-pin.patch | 83 - ...j721e-beagleboneai64-fix-mailbox-nod.patch | 70 - ...ti-k3-j784s4-evm-fix-main_i2c0-alias.patch | 43 - ...j784s4-fix-wakeup-pinmux-range-and-p.patch | 122 - ...r-p-to-clear-ffr-context-field-in-st.patch | 76 - ...amd-acp-clear-pdm-dma-interrupt-mask.patch | 38 - ...-mediatek-mt8188-afe-correct-clock-n.patch | 82 - ...ot-set-rate-constraints-for-unsuppor.patch | 91 - ...ement-max-value-for-alc-capture-targ.patch | 91 - ...check-return-value-of-devm_kasprintf.patch | 66 - ...dw-remove-sof_sdw_tgl_hdmi-for-meteo.patch | 38 - ...dw-start-set-codec-init-function-wit.patch | 79 - ...t-blkg_iostat_set-after-clearing-in-.patch | 59 - ...pin_lock_irqsave-in-adjust_inuse_and.patch | 150 - ...ert-passthrough-request-into-sw-queu.patch | 48 - ...ue-plugged-passthrough-requests-into.patch | 69 - ...otential-io-hang-by-wrong-wake_batch.patch | 126 - ...fix-blktrace-debugfs-entries-leakage.patch | 59 - ...pe-of-the-second-bdev_op_is_zoned_wr.patch | 44 - ...-protect-rq_qos-apis-with-a-new-lock.patch | 211 -- ...-do-not-assume-skb-mac_header-is-set.patch | 92 - ...k_lookup-__bpf_skc_lookup-directly-v.patch | 79 - ...-for-g-s-setsockopt-with-wrong-optle.patch | 88 - ...e-precision-backtracking-bookkeeping.patch | 537 ---- ...ocket-lookup-functions-for-the-tc-ho.patch | 120 - ...ist-rbtree-_add-s-beginning-of-node-.patch | 60 - ...et-lookup-from-tc-xdp-to-respect-soc.patch | 250 -- ...memleak-due-to-fentry-attach-failure.patch | 112 - ...ate_precision-logic-for-inner-frames.patch | 181 -- ...-improve-precision-backtrack-logging.patch | 327 -- ...masks-across-all-active-frames-in-__.patch | 237 -- ...count_acquire-fallible-for-non-ownin.patch | 229 -- ...mous-union-in-bpf_kfunc_call_arg_met.patch | 137 - .../bpf-remove-bpf-trampoline-selector.patch | 102 - ...uct_meta-for-node-param-to-list-and-.patch | 64 - ...e-scalar-ids-in-mark_chain_precision.patch | 235 -- ...r-ids-mapping-in-regsafe-using-check.patch | 306 -- ...ted-misreported-as-negative-value-on.patch | 150 - ...always-read-the-entire-extent_buffer.patch | 87 - ...-writeback-when-allocating-the-compr.patch | 161 - ...t-zoned-writeback-as-being-from-an-a.patch | 156 - ...btrfs_bio_ctrl-for-extent-buffer-rea.patch | 203 -- ...ffset-for-req_btrfs_one_ordered-bios.patch | 48 - ...end-calculation-in-extent_write_lock.patch | 41 - ...__extent_writepage_io-from-extent_wr.patch | 167 - ...-bool-from-lock_extent_buffer_for_io.patch | 120 - ...it-a-writeback-bio-per-extent_buffer.patch | 278 -- ...x-dispc-quirk-masking-bool-variables.patch | 49 - ...fd-add-function-to-set-skb-hwtstamps.patch | 104 - ...d-set-hardware-timestamp-on-transmit.patch | 54 - .../can-length-fix-bitstuffing-count.patch | 123 - ...ssary-checks-for-credits-within-or-b.patch | 114 - ...-after-free-by-freeing-the-cfile-lat.patch | 52 - ...off-by-one-in-raspberrypi_discover_c.patch | 46 - ...e925-check-return-value-of-kasprintf.patch | 63 - ...ard-check-return-value-of-devm_kaspr.patch | 41 - ...ard-fix-oops-in-clk_wzrd_register_di.patch | 40 - ...k-export-clk_hw_forward_rate_request.patch | 37 - ...y-leak-in-devm_clk_notifier_register.patch | 42 - ...mn-fix-memory-leak-in-imx8mn_clocks_.patch | 58 - ...mp-improve-error-handling-in-imx8mp_.patch | 85 - ...t1050-fix-memory-leak-in-imxrt1050_c.patch | 88 - ...e-8m-add-imx8m_divider_determine_rat.patch | 113 - ..._safe-list-iterator-to-avoid-a-use-a.patch | 44 - ...mory-leak-and-missing-unwind-goto-in.patch | 84 - ...-clk-check-return-value-of-kasprintf.patch | 40 - ...-mt8173-apmixedsys-fix-iomap-not-rel.patch | 49 - ...-mt8173-apmixedsys-fix-return-value-.patch | 41 - ...-mtk-grab-iomem-pointer-for-divider-.patch | 60 - ...lk-mediatek-fix-of_iomap-memory-leak.patch | 56 - ...l-fix-cpg_sipll5_clk1-register-write.patch | 59 - ...driver_data-content-in-i2c_device_id.patch | 45 - ...heck-return-value-of-devm_-kasprintf.patch | 51 - ...-free-unused-memory-on-probe-failure.patch | 86 - ...n-error-if-one-synth-clock-registrat.patch | 72 - ...gra124-emc-fix-potential-memory-leak.patch | 45 - ...ctrl-check-return-value-of-kasprintf.patch | 52 - ...5-check-memory-returned-by-kasprintf.patch | 108 - ...driver_data-content-in-i2c_device_id.patch | 58 - ...driver_data-content-in-i2c_device_id.patch | 43 - ...ers-cadence-ttc-fix-memory-leak-in-t.patch | 81 - ...tate-fix-energy_performance_preferen.patch | 42 - ...rrect-health-test-during-initializat.patch | 72 - ...rvell-cesa-fix-type-mismatch-warning.patch | 49 - ...ild-warnings-when-debug_fs-is-not-en.patch | 88 - ...-qat-unmap-buffer-before-free-for-dh.patch | 53 - ...at-unmap-buffers-before-free-for-rsa.patch | 62 - ...tate-transitions-after-reset-failure.patch | 77 - ...partially-torn-down-regions-as-unusa.patch | 94 - ...cache-invalidation-before-region-tea.patch | 186 -- ...x-dax_mapping_release-use-after-free.patch | 79 - .../dax-introduce-alloc_dev_dax_id.patch | 195 -- ...lid-argument-to-memory_group_registe.patch | 76 - ...x-use-_safe-loop-iterator-to-avoid-a.patch | 58 - ...secure-pwrc-always-enable-dma-domain.patch | 42 - ...le_m1-force-63bit-counters-for-m2-cp.patch | 155 - ...i-don-t-migrate-perf-to-the-cpu-goin.patch | 65 - ...int-helper-to-get-rounded-integer-va.patch | 57 - ...add-logging-for-display-mall-refresh.patch | 40 - ...explicitly-specify-update-type-per-p.patch | 49 - ...fix-a-test-calculateprefetchschedule.patch | 38 - ...y-fix-a-test-dml32_rq_dlg_get_rq_reg.patch | 39 - ...fix-artifacting-on-edp-panels-when-e.patch | 47 - ...play-fix-is_timing_changed-prototype.patch | 98 - ...unconditionally-print-when-dp-sink-p.patch | 43 - ...emcpy-in-sienna_cichlid_append_power.patch | 99 - ...-fix-usage-of-umc-fill-record-in-ras.patch | 50 - ...otential-deallocation-of-previously-.patch | 58 - ...e-anx7625-prevent-endless-probe-loop.patch | 264 -- ...5-move-a-variable-assignment-behind-.patch | 56 - ...ng-dsim-fix-pms-calculator-on-imx8m-.patch | 147 - ...8767-switch-to-devm-mipi-dsi-helpers.patch | 47 - ...768-add-atomic_get_input_bus_fmts-im.patch | 98 - ...tc358768-always-enable-hs-video-mode.patch | 49 - ...58768-fix-pll-parameters-computation.patch | 49 - ...ge-tc358768-fix-pll-target-frequency.patch | 74 - ...358768-fix-tclk_trailcnt-computation.patch | 92 - ...c358768-fix-tclk_zerocnt-computation.patch | 54 - ...c358768-fix-ths_trailcnt-computation.patch | 60 - ...tc358768-fix-ths_zerocnt-computation.patch | 54 - ...e-tc358768-fix-txtagocnt-computation.patch | 44 - ...65dsi83-fix-enable-disable-flow-to-m.patch | 97 - ...e-ti-sn65dsi83-fix-enable-error-path.patch | 36 - ...vert-intel_info-display-to-a-pointer.patch | 1784 ----------- ...-make-display-responsible-for-probin.patch | 2015 ------------ ...-move-display-device-info-to-header-.patch | 168 - ...-move-display-runtime-info-to-displa.patch | 1246 -------- ...rm-i915-fix-limited-range-csc-matrix.patch | 66 - ...lpc-provide-sysfs-for-efficient-freq.patch | 205 -- ...i915-hide-mkwrite_device_info-better.patch | 147 - ...no-10bit-gamma-on-desktop-gen3-parts.patch | 103 - ...dc-fix-a-null-vs-is_err-bug-in-probe.patch | 43 - ...ally-check-for-a510-in-a5xx_gpu_init.patch | 50 - ...-t-set-io_pgtable_quirk_arm_outer_wb.patch | 44 - ...aux-devices-together-with-dp-control.patch | 92 - ...e-resources-after-unregistering-them.patch | 46 - ...ys-clear-every-individual-pending-fl.patch | 54 - .../drm-msm-dpu-correct-merge_3d-length.patch | 39 - ...ble-pingpong-te-on-dpu-5.0.0-and-abo.patch | 307 -- ...ot-enable-color-management-if-dspps-.patch | 54 - ...-unused-poll_timeout_wr_ptr-pingpong.patch | 83 - ...enable-dspp_2-3-for-lm_2-3-on-sm8450.patch | 41 - ...cursor-block-register-bit-offset-in-.patch | 42 - ...sc7280-and-sc7180-pingpong-done-inte.patch | 74 - ...ix-slice_last_group_size-calculation.patch | 44 - ...-autorefresh-disable-from-cmd-encode.patch | 254 -- ...dpu_data_hctl_en-for-in-intf_sc7180_.patch | 48 - ...dsc-flush-bit-correctly-at-mdp-ctl-f.patch | 49 - ...v4.0-pcc-dspp-sub-block-in-sc7-12-80.patch | 74 - ...t-allow-enabling-14nm-vco-with-unpro.patch | 45 - ...ve-incorrect-references-to-slice_cou.patch | 83 - ...pnv50-fix-missing-prototypes-warning.patch | 53 - ...arp-ls043t1le01-adjust-mode-settings.patch | 60 - ...-fix-active-size-for-ampire-am-48027.patch | 51 - ...fix-possible-division-by-zero-errors.patch | 94 - ...se-devm_clk_get_enabled-in-sun4i_tco.patch | 116 - ...drm-vkms-fix-rgb565-pixel-conversion.patch | 66 - ...olate-pixel-conversion-functionality.patch | 268 -- ...fix-function-names-in-vram-helper-do.patch | 56 - ...arm-smmu-fix-sc8280xp-adreno-binding.patch | 56 - ...-qce-fix-compatible-combinations-for.patch | 48 - ...ble-pci-dma-before-grabbing-the-efi-.patch | 63 - ...ompact-4b-support-for-16k-block-size.patch | 71 - ...d-chains-to-avoid-loops-on-deduplica.patch | 224 -- ...ete-description-of-evm_inode_setattr.patch | 39 - queue-6.4/evm-fix-build-warnings.patch | 59 - ..._mipid-fix-an-error-handling-path-in.patch | 44 - ...pe-reveal-missing-function-protoypes.patch | 56 - ...se-bio_first_page_all-in-fsverity_ve.patch | 75 - ...y-use-shash-api-instead-of-ahash-api.patch | 680 ---- ...se-after-free-in-__gtp_encap_destroy.patch | 190 -- ...lar-kunit-tests-should-not-depend-on.patch | 44 - ...fg-prevent-possible-division-by-zero.patch | 51 - ...wmon-fix-fan-pwm-temperature-scaling.patch | 48 - ...275-fix-problems-with-temperature-mo.patch | 128 - ...ock-enabled-while-hwrng-is-registere.patch | 96 - ...x-race-on-data_avail-and-actual-data.patch | 86 - ...latform-remove-callback-returning-vo.patch | 2748 ----------------- .../i2c-ocores-use-devm_-managed-clks.patch | 168 - ...g-mmu_node-used-for-user-sdma-packet.patch | 765 ----- ...-in-the-miscellaneous-interrupt-thre.patch | 199 -- ...dware-tx-timestamping-is-enabled-ear.patch | 152 - ...le-and-fix-rx-hash-usage-by-netstack.patch | 149 - ...gc-fix-race-condition-in-ptp-tx-code.patch | 237 -- ...-timestamp-during-interrupt-handling.patch | 159 - ...nd-hw-bug-causing-missing-timestamps.patch | 120 - queue-6.4/ima-fix-build-warnings.patch | 61 - ...ds7846-convert-to-use-software-nodes.patch | 610 ---- ...-not-hardcode-interrupt-trigger-type.patch | 39 - ...re-change-del_timer_sync-to-timer_sh.patch | 72 - ...drv260x-sleep-between-polling-go-bit.patch | 39 - ...-powerkey-fix-debounce-on-gen2-pmics.patch | 76 - ...-fix-input_test_match_device_id-test.patch | 40 - ...use-after-free-and-refcount-underflo.patch | 87 - ...lar-kunit-tests-should-not-depend-on.patch | 41 - ...io-detach-domain-on-endpoint-release.patch | 70 - ...urn-size-mapped-for-a-detached-domai.patch | 75 - ...iopt_area_contig_done-under-the-lock.patch | 102 - ...ccess-the-area-pointer-after-unlocki.patch | 175 -- ...ix-return-value-of-ipvlan_queue_xmit.patch | 66 - ...c-fix-missing-allocation-of-irq-desc.patch | 53 - ...-eiointc-fix-irq-affinity-setting-du.patch | 52 - ...ti-fix-warning-on-initialized-field-.patch | 62 - ...always-make-modules_install-to-insta.patch | 45 - ...emove-the-config_modules-check-in-bu.patch | 54 - .../kbuild-disable-gcov-for-.mod.o.patch | 50 - .../kbuild-fix-cfi-failures-with-gcov.patch | 58 - ...ct-64-bits-atomic-builtins-from-32-b.patch | 71 - ...a-memory-leak-in-crash_shrink_memory.patch | 93 - ...ix-accumulation-of-uninitialized-ret.patch | 46 - .../ksmbd-avoid-field-overflow-warning.patch | 47 - ...type-subscripts-for-subprocess.popen.patch | 105 - ...initial-match-offset-for-every-block.patch | 59 - ...type_data_check_overflow-needs-to-co.patch | 120 - ...tof-and-container_of-to-work-with-co.patch | 62 - ...nappropriate-svc_get-from-locked_get.patch | 57 - .../locking-atomic-arm-fix-sync-ops.patch | 191 -- ...ctor-out-a-helper-to-add-bio-to-plug.patch | 109 - ...or-out-a-helper-to-submit-normal-wri.patch | 123 - ...it-write-io-directly-if-bitmap-is-no.patch | 97 - ...slab-out-of-bounds-in-md_bitmap_get_.patch | 65 - ...-loss-while-replacement-replace-rdev.patch | 79 - ...ll-ptr-deref-of-mreplace-in-raid10_s.patch | 81 - ...0-fix-overflow-of-md-safe_mode_delay.patch | 51 - ...rong-setting-of-max_corr_read_errors.patch | 38 - ...pfe-fix-testing-array-offset-after-u.patch | 50 - ...ke-memstick_debug_get_tpc_name-stati.patch | 49 - ...d-parent-supplies-to-act8600-regulat.patch | 72 - ...i20-fix-act8600-regulator-node-names.patch | 113 - ...raise-vddcore-voltage-to-1.125-volts.patch | 51 - ...ove-mm_count-into-its-own-cache-line.patch | 119 - ...k_broken_sd_cache-for-kingston-canva.patch | 169 - ...id-ugly-error-message-when-sdio-wake.patch | 44 - ...-off-by-one-in-is_executable_section.patch | 36 - ...ion-mismatch-message-for-r_arm_-pc24.patch | 106 - ...ion-mismatch-message-for-r_arm_abs32.patch | 133 - ...roken-calculation-of-exception_table.patch | 161 - ...ve-reset-before-64-bit-dma-detection.patch | 60 - ...spicious-rcu-usage-for-synced-vlan-a.patch | 349 --- ...pin-sock-file-if-a-handshake-is-canc.patch | 59 - ...after-free-caused-by-nfc_llcp_find_l.patch | 558 ---- ...t-stmmac-fix-double-serdes-powerdown.patch | 50 - ...ack-dccp-copy-entire-header-to-stack.patch | 148 - ...ntrack_sip-fix-the-ct_sip_parse_nume.patch | 53 - ...les-fix-underflow-in-chain-reference.patch | 47 - ...les-unbind-non-anonymous-set-if-rule.patch | 36 - ...__sock_i_ino-for-__netlink_diag_dump.patch | 152 - ...ard-code-device-address-lenth-in-fdb.patch | 157 - ...otential-deadlock-in-netlink_set_err.patch | 117 - ...sible-use-of-uninitialized-variable-.patch | 41 - ...he-session-table-upon-receiving-nfs4.patch | 41 - queue-6.4/nfsv4.2-fix-wrong-shrinker_id.patch | 170 - ...-add-missing-fault-injection-cleanup.patch | 48 - .../nvme-core-fix-dev_pm_qos-memleak.patch | 59 - ...ix-memory-leak-in-dhchap_ctrl_secret.patch | 51 - ...x-memory-leak-in-dhchap_secret_store.patch | 79 - ...2-fix-use-of-slab-data-with-sendpage.patch | 89 - ...entry-revalidate-flags-after-copy-up.patch | 163 - ...clear_master-stub-for-non-config_pci.patch | 39 - ...-aspm-on-mfd-function-removal-to-avo.patch | 94 - ...nce-fix-gen2-link-retraining-process.patch | 88 - ...-fix-a-kconfig-prompt-of-vntb-driver.patch | 39 - ...ctions-pci-epf-test-fix-dma_chan-dir.patch | 46 - ...ftpci100-release-the-clock-resources.patch | 75 - ...l-bringup-sequence-if-card-is-not-pr.patch | 74 - ...-write-access-to-read-only-registers.patch | 50 - ...-helpers-for-modifying-the-read-only.patch | 62 - ...itialized-variable-usage-in-vmd_enab.patch | 55 - ...d-config-register-between-soft-reboo.patch | 57 - queue-6.4/perf-arm-cmn-fix-dtc-reset.patch | 58 - ...f-arm_cspmu-fix-event-attribute-type.patch | 46 - ...et-irq-affinitiy-only-if-overflow-in.patch | 37 - ...issing-setlocale-call-to-allow-usage.patch | 79 - ...ux-fix-off-by-one-in-die_get_varname.patch | 45 - ...-let-for_each_group-treat-the-head-o.patch | 96 - ...bs-fix-interface-via-core-pmu-events.patch | 164 - .../perf-metric-fix-no-group-check.patch | 50 - ...allocation-of-evsel-priv-related-to-.patch | 100 - ...f-stat-reset-aggr-stats-for-each-run.patch | 48 - ...-perf_exec_path-for-script-execution.patch | 53 - ...task_analyzer-fix-bad-substitution-1.patch | 56 - ...analyzer-skip-tests-if-no-libtraceev.patch | 106 - ...nsolidate-is_amd-check-into-single-f.patch | 174 -- ...rf-tool-x86-fix-perf_env-memory-leak.patch | 70 - ...1-fix-a-couple-null-vs-is_err-checks.patch | 53 - ...4-check-return-value-of-devm_kasprin.patch | 41 - ...handle-gpiochip_add_pin_range-errors.patch | 41 - ...ew-return-correct-value-if-pin-in-pu.patch | 57 - ...e-fix-a-memory-out-of-bounds-when-nu.patch | 48 - ...p-sgpio-check-return-value-of-devm_k.patch | 40 - ...pcm7xx-add-missing-check-for-ioremap.patch | 38 - ...inctrl-sunplus-add-check-for-kmalloc.patch | 91 - ...l-sunplus-add-check-for-kmalloc.patch-3132 | 44 - ...gra-duplicate-pinmux-functions-table.patch | 214 -- ...l-dell-rbtn-fix-resources-leaking-on.patch | 83 - ...rm-x86-intel-pmc-add-resume-callback.patch | 93 - ...el-pmc-mtl-put-devices-in-d3-during-.patch | 71 - ...el-pmc-remove-meteor-lake-s-platform.patch | 40 - ...el-pmc-update-maps-for-meteor-lake-p.patch | 560 ---- ...ovo-yogabook-fix-work-race-on-remove.patch | 93 - ...ovo-yogabook-reprobe-devices-on-remo.patch | 50 - ...ovo-yogabook-set-default-keyboard-ba.patch | 38 - ...nk-lmi-correct-nvme-password-handlin.patch | 48 - ...nk-lmi-correct-system-password-inter.patch | 59 - ...nk-lmi-mutex-protection-around-multi.patch | 86 - ...nkpad_acpi-fix-lkp-tests-warnings-fo.patch | 63 - ...nteger-overflow-issues-in-genpd_pars.patch | 48 - ...the-verification-of-in-params-from-g.patch | 65 - ...prevent-rt-livelock-in-itimer_delete.patch | 110 - ...-rapl-fix-config_iosf_mbi-dependency.patch | 73 - ...x-invalid-initialization-for-pl4_sup.patch | 63 - ...owerpc-64s-fix-vas-mm-use-after-free.patch | 55 - ...-mm-fix-directmap-stats-in-proc-memi.patch | 158 - ...t-don-t-read-msr-from-interrupt_exit.patch | 58 - ...ix-the-condition-when-checking-if-al.patch | 40 - ...sriov-perform-null-check-on-iov-befo.patch | 53 - ...-force-inlining-of-__unsafe_save_use.patch | 79 - ...pc_save_regs-to-save-current-r1-in-p.patch | 104 - .../pstore-ram-add-check-for-kstrdup.patch | 37 - ...eon-avoid-double-free-in-ci_dpm_init.patch | 110 - ..._starting-rely-on-interrupts-being-d.patch | 85 - ...e-rcu_scale_-after-kfree_scale_clean.patch | 245 -- ...p-kfree_scale_thread-thread-s-after-.patch | 81 - ...cu_tasks_invoke_cbs-from-using-never.patch | 125 - ...ct-name-of-use_softirq-module-parame.patch | 45 - ...id-calling-wake_up-threads-from-spin.patch | 99 - ...able-kill-tasklet-only-if-it-is-enab.patch | 150 - ..._re-fix-to-remove-an-unnecessary-log.patch | 44 - ...-to-remove-unnecessary-return-labels.patch | 66 - ...ove-a-redundant-check-inside-bnxt_re.patch | 54 - ...-unique-names-while-registering-inte.patch | 157 - ...xt_re-wraparound-mbox-producer-index.patch | 55 - ...-fix-hns_roce_table_get-return-value.patch | 45 - ...-fortify-string-warning-in-irdma_clr.patch | 64 - ...x-access-checks-in-rxe_check_bind_mw.patch | 102 - ...ix-more-error-checking-for-debugfs_c.patch | 40 - ...r-core-streamline-debugfs-operations.patch | 100 - ...lator-rk808-fix-asynchronous-probing.patch | 41 - ...ize-sec-length-in-reiserfs_security_.patch | 40 - ...remove-warn_on-in-save_processor_sta.patch | 45 - ...n-remove-duplicate-call-of-suspend_r.patch | 41 - ...scv-uprobes-restore-thread.bad_cause.patch | 47 - ...-rtext_filter_skip_stats-to-ifla_vf_.patch | 167 - ...san-fix-insecure-w-x-mapping-warning.patch | 65 - ...f-fix-buffer-overflow-in-tcp_basertt.patch | 36 - ...dp1-and-xdp2-reduce-xdpbufsize-to-60.patch | 58 - ...sues-in-netem_change-vs-get_dist_tab.patch | 152 - ...-multiple-calling-update_rq_clock-in.patch | 121 - .../scripts-mksysmap-fix-badly-escaped.patch | 64 - ...-error-handling-for-initialization-f.patch | 47 - ...-npiv-els-unsol-rcv-cmpl-logic-to-dr.patch | 59 - ...x-null-dereference-in-error-handling.patch | 47 - ...si-ufs-core-fix-handling-of-lrbp-cmd.patch | 96 - ...crease-the-start-stop-unit-timeout-f.patch | 47 - ...q-fix-the-incorrect-ocs-value-for-th.patch | 99 - ...move-a-ufshcd_add_command_trace-call.patch | 39 - ...fs-declare-ufshcd_-hold-release-once.patch | 41 - ...bpf_bypass_getsockopt-proto-callback.patch | 93 - ...bpf-do-not-use-sign-file-as-testcase.patch | 52 - ...x-check_mtu-using-wrong-variable-typ.patch | 42 - ...x-invalid-pointer-check-in-get_xlate.patch | 113 - ...-fix-unexpected-failure-on-test_memc.patch | 53 - ...tests-ftace-fix-ktap-output-ordering.patch | 39 - ...ink-remove-netdevsim-device-after-ip.patch | 40 - queue-6.4/series | 524 ---- ...en-reading-stats-while-nic-is-resett.patch | 70 - ...ease-encap-match-in-efx_tc_flow_free.patch | 80 - ...-broken-file-attrs-with-nodfs-mounts.patch | 58 - ...hared-dfs-root-mounts-with-different.patch | 581 ---- ...-lease-break-acknowledgment-if-all-f.patch | 66 - .../soc-fsl-qe-fix-usb.c-build-errors.patch | 60 - ...ediatek-svs-fix-mt8192-gpu-node-name.patch | 45 - ...-add-interfaces-geni_se_tx_init_dma-.patch | 159 - ...pi-dw-round-of-n_bytes-to-power-of-2.patch | 59 - ...m-correct-cs_toggle-bit-in-spi_trans.patch | 44 - ...m-do-not-do-dma-map-unmap-inside-dri.patch | 229 -- ...ll-file_accessed-in-copy_splice_read.patch | 39 - ...ap_splice_read-to-use-the-correct-in.patch | 58 - ...page-release-when-nothing-was-receiv.patch | 53 - ...qcom-tsens-v0_1-add-mdm9607-correcti.patch | 133 - ...qcom-tsens-v0_1-add-support-for-msm8.patch | 110 - ...qcom-tsens-v0_1-fix-mdm9607-slope-va.patch | 67 - ...-qoriq-only-enable-supported-sensors.patch | 95 - ...sun8i-fix-some-error-handling-paths-.patch | 144 - ...ck-rcu-fix-bogus-ratelimit-condition.patch | 46 - ...ure-fast64-integer-types-have-64-bit.patch | 79 - ...esolve_btfids-fix-setting-hostcflags.patch | 63 - ...l-fix-command-effects-for-inject-cle.patch | 48 - ...d-missing-hrtimer-modes-to-decode_hr.patch | 47 - ...he-compat_class-initialization-to-mo.patch | 116 - ...evguest-add-config_crypto-dependency.patch | 44 - ...kup-change-watchdog_nmi_enable-to-vo.patch | 112 - ...kup-keep-kernel.nmi_watchdog-sysctl-.patch | 133 - ...kup-move-perf-hardlockup-checking-pa.patch | 296 -- ...kup-rename-some-nmi-watchdog-constan.patch | 558 ---- ...apt-the-watchdog_perf-interface-for-.patch | 183 -- ...fine-dummy-watchdog_update_hrtimer_t.patch | 89 - ...re-properly-prevent-false-positives-.patch | 84 - .../watchdog-remove-watchdog_default.patch | 64 - ...ger-sta-disconnect-after-reconfig-co.patch | 90 - ...ath11k-add-missing-check-for-ioremap.patch | 48 - ...missing-hw_ops-get_ring_selector-for.patch | 67 - ...missing-ops-config-for-ipq5018-in-at.patch | 40 - ...art-firmware-after-cold-boot-calibra.patch | 57 - ...-referencing-uninit-memory-in-ath9k_.patch | 58 - ...onvert-msecs-to-jiffies-where-needed.patch | 51 - ...-allow-to-overwrite-endpoint0-attrib.patch | 54 - ...r9003-mac-hardware-hang-check-regist.patch | 95 - ...ossible-stall-on-ath9k_txq_list_has_.patch | 111 - ...n-error-handling-path-in-atmel_probe.patch | 59 - ...op-incorrect-nontransmitted-bss-upda.patch | 218 -- ...x-regulatory-disconnect-with-ocb-nan.patch | 123 - ...ewrite-merging-of-inherited-elements.patch | 290 -- ...ix-the-common-size-calculation-for-r.patch | 47 - ...print-pc-register-value-instead-of-a.patch | 49 - ...fi-mvm-add-support-for-extra-eht-ltf.patch | 98 - ...wlwifi-mvm-check-only-affected-links.patch | 51 - ...m-correctly-access-he-eht-sband-capa.patch | 174 -- ...-handle-return-value-for-iwl_mvm_sta.patch | 38 - ...-indicate-hw-decrypt-for-beacon-prot.patch | 60 - ...fi-mvm-send-time-sync-only-if-needed.patch | 44 - ...e-fix-null-pointer-dereference-in-iw.patch | 57 - ...ull-from-txqs-with-softirqs-disabled.patch | 47 - ...d-helpers-to-access-sband-iftype-dat.patch | 360 --- ...x-permissions-for-valid_links-debugf.patch | 38 - ...recalc-min-chandef-for-new-sta-links.patch | 40 - ...move-missing-iftype-sband-data-eht-c.patch | 49 - ...-the-size-of-a-memory-allocation-in-.patch | 48 - ...-an-error-handling-path-in-orinoco_c.patch | 58 - ...-an-error-handling-path-in-spectrum_.patch | 59 - ...-an-error-handling-path-in-ray_probe.patch | 69 - ...configure-wowlan-in-shutdown-hook-if.patch | 52 - ...ot-set-mmc_pm_keep_power-in-shutdown.patch | 41 - ...k-on-error-path-in-rtw_ops_add_inter.patch | 40 - ...b-silence-log-flooding-error-message.patch | 51 - ...tw89_read_chip_ver-for-rtl8852b-and-.patch | 41 - ...x-for-absent-rsn-capabilities-wfa-te.patch | 55 - ...ix-an-error-handling-path-in-wl3501_.patch | 66 - ...efi_set_virtual_address_map-ibt-safe.patch | 65 - ...trr-state-when-running-as-sev-snp-hy.patch | 51 - ...st.enc_status_change_prepare-to-fail.patch | 93 - ...__swp_entry_to_pte-for-xen-pv-guests.patch | 47 - ...ve-physical-address-size-calculation.patch | 279 -- ...-size_or_mask-and-size_and_mask-with.patch | 360 --- ...-setting-mtrr-state-for-software-def.patch | 198 -- ...-show-tasks-pid-in-current-pid-names.patch | 55 - ...ulation-of-end-address-based-on-numb.patch | 134 - ...-between-set_memory_encrypted-and-lo.patch | 142 - ...-state-when-running-as-xen-pv-initia.patch | 123 - 525 files changed, 56448 deletions(-) delete mode 100644 queue-6.4/accel-habanalabs-fix-gaudi2_get_tpc_idle_status-retu.patch delete mode 100644 queue-6.4/alsa-ac97-fix-possible-null-dereference-in-snd_ac97_.patch delete mode 100644 queue-6.4/amdgpu-validate-offset_in_bo-of-drm_amdgpu_gem_va.patch delete mode 100644 queue-6.4/apei-ghes-correctly-return-null-for-ghes_get_devices.patch delete mode 100644 queue-6.4/arc-define-asm_nl-and-__align-_str-outside-ifdef-__a.patch delete mode 100644 queue-6.4/arm-9303-1-kprobes-avoid-missing-declaration-warning.patch delete mode 100644 queue-6.4/arm-dts-bcm5301x-drop-clock-names-from-the-spi-node.patch delete mode 100644 queue-6.4/arm-dts-bcm5301x-fix-duplex-full-full-duplex.patch delete mode 100644 queue-6.4/arm-dts-gta04-move-model-property-out-of-pinctrl-nod.patch delete mode 100644 queue-6.4/arm-dts-iwg20d-q7-common-fix-backlight-pwm-specifier.patch delete mode 100644 queue-6.4/arm-dts-lan966x-kontron-d10-fix-board-reset.patch delete mode 100644 queue-6.4/arm-dts-lan966x-kontron-d10-fix-spi-cs.patch delete mode 100644 queue-6.4/arm-dts-meson8-correct-uart_b-and-uart_c-clock-refer.patch delete mode 100644 queue-6.4/arm-dts-meson8b-correct-uart_b-and-uart_c-clock-refe.patch delete mode 100644 queue-6.4/arm-dts-qcom-apq8074-dragonboard-set-dma-as-remotely.patch delete mode 100644 queue-6.4/arm-dts-qcom-msm8974-do-not-use-underscore-in-node-n.patch delete mode 100644 queue-6.4/arm-dts-stm32-fix-audio-routing-on-stm32mp15xx-dhcom.patch delete mode 100644 queue-6.4/arm-dts-stm32-fix-i2s-endpoint-format-property-for-s.patch delete mode 100644 queue-6.4/arm-dts-stm32-move-ethernet-mac-eeprom-from-som-to-c.patch delete mode 100644 queue-6.4/arm-dts-stm32-shorten-the-av96-hdmi-sound-card-name.patch delete mode 100644 queue-6.4/arm-ep93xx-fix-missing-prototype-warnings.patch delete mode 100644 queue-6.4/arm-gpio-push-omap2-quirk-down-into-twl4030-driver.patch delete mode 100644 queue-6.4/arm-mfd-gpio-fixup-tps65010-regression-on-omap1-osk1.patch delete mode 100644 queue-6.4/arm-mmc-convert-old-mmci-omap-to-gpio-descriptors.patch delete mode 100644 queue-6.4/arm-musb-omap2-remove-global-gpio-numbers-from-tusb6.patch delete mode 100644 queue-6.4/arm-omap1-drop-header-on-ams-delta.patch delete mode 100644 queue-6.4/arm-omap1-exorcise-the-legacy-gpio-header.patch delete mode 100644 queue-6.4/arm-omap1-fix-up-the-nokia-770-board-device-irqs.patch delete mode 100644 queue-6.4/arm-omap1-make-serial-wakeup-gpios-use-descriptors.patch delete mode 100644 queue-6.4/arm-omap1-remove-reliance-on-gpio-numbers-from-palmt.patch delete mode 100644 queue-6.4/arm-omap1-remove-reliance-on-gpio-numbers-from-sx1.patch delete mode 100644 queue-6.4/arm-omap2-fix-missing-tick_broadcast-prototype.patch delete mode 100644 queue-6.4/arm-omap2-get-usb-hub-reset-gpio-from-descriptor.patch delete mode 100644 queue-6.4/arm-omap2-rewrite-wlan-quirk-to-use-gpio-descriptors.patch delete mode 100644 queue-6.4/arm64-dts-mediatek-add-cpufreq-nodes-for-mt8192.patch delete mode 100644 queue-6.4/arm64-dts-mediatek-mt8183-add-mediatek-broken-save-r.patch delete mode 100644 queue-6.4/arm64-dts-mediatek-mt8192-add-mediatek-broken-save-r.patch delete mode 100644 queue-6.4/arm64-dts-mediatek-mt8192-fix-cpus-capacity-dmips-mh.patch delete mode 100644 queue-6.4/arm64-dts-mediatek-mt8195-add-mediatek-broken-save-r.patch delete mode 100644 queue-6.4/arm64-dts-microchip-sparx5-do-not-use-psci-on-refere.patch delete mode 100644 queue-6.4/arm64-dts-mt7986-increase-bl2-partition-on-nand-of-b.patch delete mode 100644 queue-6.4/arm64-dts-qcom-apq8016-sbc-fix-1.8v-power-rail-on-ls.patch delete mode 100644 queue-6.4/arm64-dts-qcom-apq8016-sbc-fix-regulator-constraints.patch delete mode 100644 queue-6.4/arm64-dts-qcom-apq8096-fix-fixed-regulator-name-prop.patch delete mode 100644 queue-6.4/arm64-dts-qcom-ipq6018-correct-qrng-unit-address.patch delete mode 100644 queue-6.4/arm64-dts-qcom-ipq9574-update-the-size-of-gicc-gicv-.patch delete mode 100644 queue-6.4/arm64-dts-qcom-msm8916-correct-camss-unit-address.patch delete mode 100644 queue-6.4/arm64-dts-qcom-msm8916-correct-mmc-unit-address.patch delete mode 100644 queue-6.4/arm64-dts-qcom-msm8916-correct-wcnss-unit-address.patch delete mode 100644 queue-6.4/arm64-dts-qcom-msm8953-correct-iommu-unit-address.patch delete mode 100644 queue-6.4/arm64-dts-qcom-msm8953-correct-wcnss-unit-address.patch delete mode 100644 queue-6.4/arm64-dts-qcom-msm8976-correct-mmc-unit-address.patch delete mode 100644 queue-6.4/arm64-dts-qcom-msm8994-correct-spmi-unit-address.patch delete mode 100644 queue-6.4/arm64-dts-qcom-msm8996-correct-camss-unit-address.patch delete mode 100644 queue-6.4/arm64-dts-qcom-pm7250b-add-missing-spmi-vadc-include.patch delete mode 100644 queue-6.4/arm64-dts-qcom-pm8998-don-t-use-gic_spi-for-spmi-int.patch delete mode 100644 queue-6.4/arm64-dts-qcom-qdu1000-flush-rsc-sleep-wake-votes.patch delete mode 100644 queue-6.4/arm64-dts-qcom-qrb4210-rb2-fix-cd-gpio-for-sdhc2.patch delete mode 100644 queue-6.4/arm64-dts-qcom-sdm630-correct-camss-unit-address.patch delete mode 100644 queue-6.4/arm64-dts-qcom-sdm670-flush-rsc-sleep-wake-votes.patch delete mode 100644 queue-6.4/arm64-dts-qcom-sdm845-correct-camss-unit-address.patch delete mode 100644 queue-6.4/arm64-dts-qcom-sdm845-flush-rsc-sleep-wake-votes.patch delete mode 100644 queue-6.4/arm64-dts-qcom-sdm845-polaris-add-missing-touchscree.patch delete mode 100644 queue-6.4/arm64-dts-qcom-sm6115-correct-thermal-sensor-unit-ad.patch delete mode 100644 queue-6.4/arm64-dts-qcom-sm8250-edo-panel-framebuffer-is-2.5k-.patch delete mode 100644 queue-6.4/arm64-dts-qcom-sm8350-correct-dma-controller-unit-ad.patch delete mode 100644 queue-6.4/arm64-dts-qcom-sm8350-correct-pci-phy-unit-address.patch delete mode 100644 queue-6.4/arm64-dts-qcom-sm8350-correct-usb-phy-unit-address.patch delete mode 100644 queue-6.4/arm64-dts-qcom-sm8550-add-missing-interconnect-path-.patch delete mode 100644 queue-6.4/arm64-dts-qcom-sm8550-correct-crypto-unit-address.patch delete mode 100644 queue-6.4/arm64-dts-qcom-sm8550-correct-pinctrl-unit-address.patch delete mode 100644 queue-6.4/arm64-dts-qcom-sm8550-flush-rsc-sleep-wake-votes.patch delete mode 100644 queue-6.4/arm64-dts-renesas-ulcb-kf-remove-flow-control-for-sc.patch delete mode 100644 queue-6.4/arm64-dts-rockchip-assign-es8316-mclk-rate-on-rk3588.patch delete mode 100644 queue-6.4/arm64-dts-rockchip-fix-compatible-for-bluetooth-on-r.patch delete mode 100644 queue-6.4/arm64-dts-ti-k3-am69-sk-fix-main_i2c0-alias.patch delete mode 100644 queue-6.4/arm64-dts-ti-k3-j7200-fix-physical-address-of-pin.patch delete mode 100644 queue-6.4/arm64-dts-ti-k3-j721e-beagleboneai64-fix-mailbox-nod.patch delete mode 100644 queue-6.4/arm64-dts-ti-k3-j784s4-evm-fix-main_i2c0-alias.patch delete mode 100644 queue-6.4/arm64-dts-ti-k3-j784s4-fix-wakeup-pinmux-range-and-p.patch delete mode 100644 queue-6.4/arm64-sme-use-str-p-to-clear-ffr-context-field-in-st.patch delete mode 100644 queue-6.4/asoc-amd-acp-clear-pdm-dma-interrupt-mask.patch delete mode 100644 queue-6.4/asoc-dt-bindings-mediatek-mt8188-afe-correct-clock-n.patch delete mode 100644 queue-6.4/asoc-es8316-do-not-set-rate-constraints-for-unsuppor.patch delete mode 100644 queue-6.4/asoc-es8316-increment-max-value-for-alc-capture-targ.patch delete mode 100644 queue-6.4/asoc-imx-audmix-check-return-value-of-devm_kasprintf.patch delete mode 100644 queue-6.4/asoc-intel-sof_sdw-remove-sof_sdw_tgl_hdmi-for-meteo.patch delete mode 100644 queue-6.4/asoc-intel-sof_sdw-start-set-codec-init-function-wit.patch delete mode 100644 queue-6.4/blk-cgroup-reinit-blkg_iostat_set-after-clearing-in-.patch delete mode 100644 queue-6.4/blk-iocost-use-spin_lock_irqsave-in-adjust_inuse_and.patch delete mode 100644 queue-6.4/blk-mq-don-t-insert-passthrough-request-into-sw-queu.patch delete mode 100644 queue-6.4/blk-mq-don-t-queue-plugged-passthrough-requests-into.patch delete mode 100644 queue-6.4/blk-mq-fix-potential-io-hang-by-wrong-wake_batch.patch delete mode 100644 queue-6.4/block-fix-blktrace-debugfs-entries-leakage.patch delete mode 100644 queue-6.4/block-fix-the-type-of-the-second-bdev_op_is_zoned_wr.patch delete mode 100644 queue-6.4/block-rq_qos-protect-rq_qos-apis-with-a-new-lock.patch delete mode 100644 queue-6.4/bonding-do-not-assume-skb-mac_header-is-set.patch delete mode 100644 queue-6.4/bpf-call-__bpf_sk_lookup-__bpf_skc_lookup-directly-v.patch delete mode 100644 queue-6.4/bpf-don-t-efault-for-g-s-setsockopt-with-wrong-optle.patch delete mode 100644 queue-6.4/bpf-encapsulate-precision-backtracking-bookkeeping.patch delete mode 100644 queue-6.4/bpf-factor-out-socket-lookup-functions-for-the-tc-ho.patch delete mode 100644 queue-6.4/bpf-fix-__bpf_-list-rbtree-_add-s-beginning-of-node-.patch delete mode 100644 queue-6.4/bpf-fix-bpf-socket-lookup-from-tc-xdp-to-respect-soc.patch delete mode 100644 queue-6.4/bpf-fix-memleak-due-to-fentry-attach-failure.patch delete mode 100644 queue-6.4/bpf-fix-propagate_precision-logic-for-inner-frames.patch delete mode 100644 queue-6.4/bpf-improve-precision-backtrack-logging.patch delete mode 100644 queue-6.4/bpf-maintain-bitmasks-across-all-active-frames-in-__.patch delete mode 100644 queue-6.4/bpf-make-bpf_refcount_acquire-fallible-for-non-ownin.patch delete mode 100644 queue-6.4/bpf-remove-anonymous-union-in-bpf_kfunc_call_arg_met.patch delete mode 100644 queue-6.4/bpf-remove-bpf-trampoline-selector.patch delete mode 100644 queue-6.4/bpf-set-kptr_struct_meta-for-node-param-to-list-and-.patch delete mode 100644 queue-6.4/bpf-use-scalar-ids-in-mark_chain_precision.patch delete mode 100644 queue-6.4/bpf-verify-scalar-ids-mapping-in-regsafe-using-check.patch delete mode 100644 queue-6.4/bpftool-jit-limited-misreported-as-negative-value-on.patch delete mode 100644 queue-6.4/btrfs-always-read-the-entire-extent_buffer.patch delete mode 100644 queue-6.4/btrfs-don-t-fail-writeback-when-allocating-the-compr.patch delete mode 100644 queue-6.4/btrfs-don-t-treat-zoned-writeback-as-being-from-an-a.patch delete mode 100644 queue-6.4/btrfs-don-t-use-btrfs_bio_ctrl-for-extent-buffer-rea.patch delete mode 100644 queue-6.4/btrfs-fix-file_offset-for-req_btrfs_one_ordered-bios.patch delete mode 100644 queue-6.4/btrfs-fix-range_end-calculation-in-extent_write_lock.patch delete mode 100644 queue-6.4/btrfs-only-call-__extent_writepage_io-from-extent_wr.patch delete mode 100644 queue-6.4/btrfs-return-bool-from-lock_extent_buffer_for_io.patch delete mode 100644 queue-6.4/btrfs-submit-a-writeback-bio-per-extent_buffer.patch delete mode 100644 queue-6.4/bus-ti-sysc-fix-dispc-quirk-masking-bool-variables.patch delete mode 100644 queue-6.4/can-kvaser_pciefd-add-function-to-set-skb-hwtstamps.patch delete mode 100644 queue-6.4/can-kvaser_pciefd-set-hardware-timestamp-on-transmit.patch delete mode 100644 queue-6.4/can-length-fix-bitstuffing-count.patch delete mode 100644 queue-6.4/cifs-do-all-necessary-checks-for-credits-within-or-b.patch delete mode 100644 queue-6.4/cifs-prevent-use-after-free-by-freeing-the-cfile-lat.patch delete mode 100644 queue-6.4/clk-bcm-rpi-fix-off-by-one-in-raspberrypi_discover_c.patch delete mode 100644 queue-6.4/clk-cdce925-check-return-value-of-kasprintf.patch delete mode 100644 queue-6.4/clk-clocking-wizard-check-return-value-of-devm_kaspr.patch delete mode 100644 queue-6.4/clk-clocking-wizard-fix-oops-in-clk_wzrd_register_di.patch delete mode 100644 queue-6.4/clk-export-clk_hw_forward_rate_request.patch delete mode 100644 queue-6.4/clk-fix-memory-leak-in-devm_clk_notifier_register.patch delete mode 100644 queue-6.4/clk-imx-clk-imx8mn-fix-memory-leak-in-imx8mn_clocks_.patch delete mode 100644 queue-6.4/clk-imx-clk-imx8mp-improve-error-handling-in-imx8mp_.patch delete mode 100644 queue-6.4/clk-imx-clk-imxrt1050-fix-memory-leak-in-imxrt1050_c.patch delete mode 100644 queue-6.4/clk-imx-composite-8m-add-imx8m_divider_determine_rat.patch delete mode 100644 queue-6.4/clk-imx-scu-use-_safe-list-iterator-to-avoid-a-use-a.patch delete mode 100644 queue-6.4/clk-imx93-fix-memory-leak-and-missing-unwind-goto-in.patch delete mode 100644 queue-6.4/clk-keystone-sci-clk-check-return-value-of-kasprintf.patch delete mode 100644 queue-6.4/clk-mediatek-clk-mt8173-apmixedsys-fix-iomap-not-rel.patch delete mode 100644 queue-6.4/clk-mediatek-clk-mt8173-apmixedsys-fix-return-value-.patch delete mode 100644 queue-6.4/clk-mediatek-clk-mtk-grab-iomem-pointer-for-divider-.patch delete mode 100644 queue-6.4/clk-mediatek-fix-of_iomap-memory-leak.patch delete mode 100644 queue-6.4/clk-renesas-rzg2l-fix-cpg_sipll5_clk1-register-write.patch delete mode 100644 queue-6.4/clk-rs9-fix-.driver_data-content-in-i2c_device_id.patch delete mode 100644 queue-6.4/clk-si5341-check-return-value-of-devm_-kasprintf.patch delete mode 100644 queue-6.4/clk-si5341-free-unused-memory-on-probe-failure.patch delete mode 100644 queue-6.4/clk-si5341-return-error-if-one-synth-clock-registrat.patch delete mode 100644 queue-6.4/clk-tegra-tegra124-emc-fix-potential-memory-leak.patch delete mode 100644 queue-6.4/clk-ti-clkctrl-check-return-value-of-kasprintf.patch delete mode 100644 queue-6.4/clk-vc5-check-memory-returned-by-kasprintf.patch delete mode 100644 queue-6.4/clk-vc5-fix-.driver_data-content-in-i2c_device_id.patch delete mode 100644 queue-6.4/clk-vc7-fix-.driver_data-content-in-i2c_device_id.patch delete mode 100644 queue-6.4/clocksource-drivers-cadence-ttc-fix-memory-leak-in-t.patch delete mode 100644 queue-6.4/cpufreq-intel_pstate-fix-energy_performance_preferen.patch delete mode 100644 queue-6.4/crypto-jitter-correct-health-test-during-initializat.patch delete mode 100644 queue-6.4/crypto-marvell-cesa-fix-type-mismatch-warning.patch delete mode 100644 queue-6.4/crypto-nx-fix-build-warnings-when-debug_fs-is-not-en.patch delete mode 100644 queue-6.4/crypto-qat-unmap-buffer-before-free-for-dh.patch delete mode 100644 queue-6.4/crypto-qat-unmap-buffers-before-free-for-rsa.patch delete mode 100644 queue-6.4/cxl-region-fix-state-transitions-after-reset-failure.patch delete mode 100644 queue-6.4/cxl-region-flag-partially-torn-down-regions-as-unusa.patch delete mode 100644 queue-6.4/cxl-region-move-cache-invalidation-before-region-tea.patch delete mode 100644 queue-6.4/dax-fix-dax_mapping_release-use-after-free.patch delete mode 100644 queue-6.4/dax-introduce-alloc_dev_dax_id.patch delete mode 100644 queue-6.4/dax-kmem-pass-valid-argument-to-memory_group_registe.patch delete mode 100644 queue-6.4/driver-soc-xilinx-use-_safe-loop-iterator-to-avoid-a.patch delete mode 100644 queue-6.4/drivers-meson-secure-pwrc-always-enable-dma-domain.patch delete mode 100644 queue-6.4/drivers-perf-apple_m1-force-63bit-counters-for-m2-cp.patch delete mode 100644 queue-6.4/drivers-perf-hisi-don-t-migrate-perf-to-the-cpu-goin.patch delete mode 100644 queue-6.4/drm-add-fixed-point-helper-to-get-rounded-integer-va.patch delete mode 100644 queue-6.4/drm-amd-display-add-logging-for-display-mall-refresh.patch delete mode 100644 queue-6.4/drm-amd-display-explicitly-specify-update-type-per-p.patch delete mode 100644 queue-6.4/drm-amd-display-fix-a-test-calculateprefetchschedule.patch delete mode 100644 queue-6.4/drm-amd-display-fix-a-test-dml32_rq_dlg_get_rq_reg.patch delete mode 100644 queue-6.4/drm-amd-display-fix-artifacting-on-edp-panels-when-e.patch delete mode 100644 queue-6.4/drm-amd-display-fix-is_timing_changed-prototype.patch delete mode 100644 queue-6.4/drm-amd-display-unconditionally-print-when-dp-sink-p.patch delete mode 100644 queue-6.4/drm-amdgpu-fix-memcpy-in-sienna_cichlid_append_power.patch delete mode 100644 queue-6.4/drm-amdgpu-fix-usage-of-umc-fill-record-in-ras.patch delete mode 100644 queue-6.4/drm-amdkfd-fix-potential-deallocation-of-previously-.patch delete mode 100644 queue-6.4/drm-bridge-anx7625-prevent-endless-probe-loop.patch delete mode 100644 queue-6.4/drm-bridge-it6505-move-a-variable-assignment-behind-.patch delete mode 100644 queue-6.4/drm-bridge-samsung-dsim-fix-pms-calculator-on-imx8m-.patch delete mode 100644 queue-6.4/drm-bridge-tc358767-switch-to-devm-mipi-dsi-helpers.patch delete mode 100644 queue-6.4/drm-bridge-tc358768-add-atomic_get_input_bus_fmts-im.patch delete mode 100644 queue-6.4/drm-bridge-tc358768-always-enable-hs-video-mode.patch delete mode 100644 queue-6.4/drm-bridge-tc358768-fix-pll-parameters-computation.patch delete mode 100644 queue-6.4/drm-bridge-tc358768-fix-pll-target-frequency.patch delete mode 100644 queue-6.4/drm-bridge-tc358768-fix-tclk_trailcnt-computation.patch delete mode 100644 queue-6.4/drm-bridge-tc358768-fix-tclk_zerocnt-computation.patch delete mode 100644 queue-6.4/drm-bridge-tc358768-fix-ths_trailcnt-computation.patch delete mode 100644 queue-6.4/drm-bridge-tc358768-fix-ths_zerocnt-computation.patch delete mode 100644 queue-6.4/drm-bridge-tc358768-fix-txtagocnt-computation.patch delete mode 100644 queue-6.4/drm-bridge-ti-sn65dsi83-fix-enable-disable-flow-to-m.patch delete mode 100644 queue-6.4/drm-bridge-ti-sn65dsi83-fix-enable-error-path.patch delete mode 100644 queue-6.4/drm-i915-convert-intel_info-display-to-a-pointer.patch delete mode 100644 queue-6.4/drm-i915-display-make-display-responsible-for-probin.patch delete mode 100644 queue-6.4/drm-i915-display-move-display-device-info-to-header-.patch delete mode 100644 queue-6.4/drm-i915-display-move-display-runtime-info-to-displa.patch delete mode 100644 queue-6.4/drm-i915-fix-limited-range-csc-matrix.patch delete mode 100644 queue-6.4/drm-i915-guc-slpc-provide-sysfs-for-efficient-freq.patch delete mode 100644 queue-6.4/drm-i915-hide-mkwrite_device_info-better.patch delete mode 100644 queue-6.4/drm-i915-no-10bit-gamma-on-desktop-gen3-parts.patch delete mode 100644 queue-6.4/drm-imx-lcdc-fix-a-null-vs-is_err-bug-in-probe.patch delete mode 100644 queue-6.4/drm-msm-a5xx-really-check-for-a510-in-a5xx_gpu_init.patch delete mode 100644 queue-6.4/drm-msm-a6xx-don-t-set-io_pgtable_quirk_arm_outer_wb.patch delete mode 100644 queue-6.4/drm-msm-dp-drop-aux-devices-together-with-dp-control.patch delete mode 100644 queue-6.4/drm-msm-dp-free-resources-after-unregistering-them.patch delete mode 100644 queue-6.4/drm-msm-dpu-always-clear-every-individual-pending-fl.patch delete mode 100644 queue-6.4/drm-msm-dpu-correct-merge_3d-length.patch delete mode 100644 queue-6.4/drm-msm-dpu-disable-pingpong-te-on-dpu-5.0.0-and-abo.patch delete mode 100644 queue-6.4/drm-msm-dpu-do-not-enable-color-management-if-dspps-.patch delete mode 100644 queue-6.4/drm-msm-dpu-drop-unused-poll_timeout_wr_ptr-pingpong.patch delete mode 100644 queue-6.4/drm-msm-dpu-enable-dspp_2-3-for-lm_2-3-on-sm8450.patch delete mode 100644 queue-6.4/drm-msm-dpu-fix-cursor-block-register-bit-offset-in-.patch delete mode 100644 queue-6.4/drm-msm-dpu-fix-sc7280-and-sc7180-pingpong-done-inte.patch delete mode 100644 queue-6.4/drm-msm-dpu-fix-slice_last_group_size-calculation.patch delete mode 100644 queue-6.4/drm-msm-dpu-move-autorefresh-disable-from-cmd-encode.patch delete mode 100644 queue-6.4/drm-msm-dpu-set-dpu_data_hctl_en-for-in-intf_sc7180_.patch delete mode 100644 queue-6.4/drm-msm-dpu-set-dsc-flush-bit-correctly-at-mdp-ctl-f.patch delete mode 100644 queue-6.4/drm-msm-dpu-use-v4.0-pcc-dspp-sub-block-in-sc7-12-80.patch delete mode 100644 queue-6.4/drm-msm-dsi-don-t-allow-enabling-14nm-vco-with-unpro.patch delete mode 100644 queue-6.4/drm-msm-dsi-remove-incorrect-references-to-slice_cou.patch delete mode 100644 queue-6.4/drm-nouveau-dispnv50-fix-missing-prototypes-warning.patch delete mode 100644 queue-6.4/drm-panel-sharp-ls043t1le01-adjust-mode-settings.patch delete mode 100644 queue-6.4/drm-panel-simple-fix-active-size-for-ampire-am-48027.patch delete mode 100644 queue-6.4/drm-radeon-fix-possible-division-by-zero-errors.patch delete mode 100644 queue-6.4/drm-sun4i_tcon-use-devm_clk_get_enabled-in-sun4i_tco.patch delete mode 100644 queue-6.4/drm-vkms-fix-rgb565-pixel-conversion.patch delete mode 100644 queue-6.4/drm-vkms-isolate-pixel-conversion-functionality.patch delete mode 100644 queue-6.4/drm-vram-helper-fix-function-names-in-vram-helper-do.patch delete mode 100644 queue-6.4/dt-bindings-arm-smmu-fix-sc8280xp-adreno-binding.patch delete mode 100644 queue-6.4/dt-bindings-qcom-qce-fix-compatible-combinations-for.patch delete mode 100644 queue-6.4/efi-libstub-disable-pci-dma-before-grabbing-the-efi-.patch delete mode 100644 queue-6.4/erofs-fix-compact-4b-support-for-16k-block-size.patch delete mode 100644 queue-6.4/erofs-kill-hooked-chains-to-avoid-loops-on-deduplica.patch delete mode 100644 queue-6.4/evm-complete-description-of-evm_inode_setattr.patch delete mode 100644 queue-6.4/evm-fix-build-warnings.patch delete mode 100644 queue-6.4/fbdev-omapfb-lcd_mipid-fix-an-error-handling-path-in.patch delete mode 100644 queue-6.4/fs-pipe-reveal-missing-function-protoypes.patch delete mode 100644 queue-6.4/fsverity-don-t-use-bio_first_page_all-in-fsverity_ve.patch delete mode 100644 queue-6.4/fsverity-use-shash-api-instead-of-ahash-api.patch delete mode 100644 queue-6.4/gtp-fix-use-after-free-in-__gtp_encap_destroy.patch delete mode 100644 queue-6.4/hid-uclogic-modular-kunit-tests-should-not-depend-on.patch delete mode 100644 queue-6.4/hwmon-f71882fg-prevent-possible-division-by-zero.patch delete mode 100644 queue-6.4/hwmon-gsc-hwmon-fix-fan-pwm-temperature-scaling.patch delete mode 100644 queue-6.4/hwmon-pmbus-adm1275-fix-problems-with-temperature-mo.patch delete mode 100644 queue-6.4/hwrng-st-keep-clock-enabled-while-hwrng-is-registere.patch delete mode 100644 queue-6.4/hwrng-virtio-fix-race-on-data_avail-and-actual-data.patch delete mode 100644 queue-6.4/i2c-convert-to-platform-remove-callback-returning-vo.patch delete mode 100644 queue-6.4/i2c-ocores-use-devm_-managed-clks.patch delete mode 100644 queue-6.4/ib-hfi1-fix-wrong-mmu_node-used-for-user-sdma-packet.patch delete mode 100644 queue-6.4/ice-handle-extts-in-the-miscellaneous-interrupt-thre.patch delete mode 100644 queue-6.4/igc-check-if-hardware-tx-timestamping-is-enabled-ear.patch delete mode 100644 queue-6.4/igc-enable-and-fix-rx-hash-usage-by-netstack.patch delete mode 100644 queue-6.4/igc-fix-race-condition-in-ptp-tx-code.patch delete mode 100644 queue-6.4/igc-retrieve-tx-timestamp-during-interrupt-handling.patch delete mode 100644 queue-6.4/igc-work-around-hw-bug-causing-missing-timestamps.patch delete mode 100644 queue-6.4/ima-fix-build-warnings.patch delete mode 100644 queue-6.4/input-ads7846-convert-to-use-software-nodes.patch delete mode 100644 queue-6.4/input-adxl34x-do-not-hardcode-interrupt-trigger-type.patch delete mode 100644 queue-6.4/input-cyttsp4_core-change-del_timer_sync-to-timer_sh.patch delete mode 100644 queue-6.4/input-drv260x-sleep-between-polling-go-bit.patch delete mode 100644 queue-6.4/input-pm8941-powerkey-fix-debounce-on-gen2-pmics.patch delete mode 100644 queue-6.4/input-tests-fix-input_test_match_device_id-test.patch delete mode 100644 queue-6.4/input-tests-fix-use-after-free-and-refcount-underflo.patch delete mode 100644 queue-6.4/input-tests-modular-kunit-tests-should-not-depend-on.patch delete mode 100644 queue-6.4/iommu-virtio-detach-domain-on-endpoint-release.patch delete mode 100644 queue-6.4/iommu-virtio-return-size-mapped-for-a-detached-domai.patch delete mode 100644 queue-6.4/iommufd-call-iopt_area_contig_done-under-the-lock.patch delete mode 100644 queue-6.4/iommufd-do-not-access-the-area-pointer-after-unlocki.patch delete mode 100644 queue-6.4/ipvlan-fix-return-value-of-ipvlan_queue_xmit.patch delete mode 100644 queue-6.4/irqchip-jcore-aic-fix-missing-allocation-of-irq-desc.patch delete mode 100644 queue-6.4/irqchip-loongson-eiointc-fix-irq-affinity-setting-du.patch delete mode 100644 queue-6.4/irqchip-stm32-exti-fix-warning-on-initialized-field-.patch delete mode 100644 queue-6.4/kbuild-builddeb-always-make-modules_install-to-insta.patch delete mode 100644 queue-6.4/kbuild-deb-pkg-remove-the-config_modules-check-in-bu.patch delete mode 100644 queue-6.4/kbuild-disable-gcov-for-.mod.o.patch delete mode 100644 queue-6.4/kbuild-fix-cfi-failures-with-gcov.patch delete mode 100644 queue-6.4/kcsan-don-t-expect-64-bits-atomic-builtins-from-32-b.patch delete mode 100644 queue-6.4/kexec-fix-a-memory-leak-in-crash_shrink_memory.patch delete mode 100644 queue-6.4/kselftest-vdso-fix-accumulation-of-uninitialized-ret.patch delete mode 100644 queue-6.4/ksmbd-avoid-field-overflow-warning.patch delete mode 100644 queue-6.4/kunit-tool-undo-type-subscripts-for-subprocess.popen.patch delete mode 100644 queue-6.4/lib-ts_bm-reset-initial-match-offset-for-every-block.patch delete mode 100644 queue-6.4/libbpf-btf_dump_type_data_check_overflow-needs-to-co.patch delete mode 100644 queue-6.4/libbpf-fix-offsetof-and-container_of-to-work-with-co.patch delete mode 100644 queue-6.4/lockd-drop-inappropriate-svc_get-from-locked_get.patch delete mode 100644 queue-6.4/locking-atomic-arm-fix-sync-ops.patch delete mode 100644 queue-6.4/md-raid1-10-factor-out-a-helper-to-add-bio-to-plug.patch delete mode 100644 queue-6.4/md-raid1-10-factor-out-a-helper-to-submit-normal-wri.patch delete mode 100644 queue-6.4/md-raid1-10-submit-write-io-directly-if-bitmap-is-no.patch delete mode 100644 queue-6.4/md-raid10-check-slab-out-of-bounds-in-md_bitmap_get_.patch delete mode 100644 queue-6.4/md-raid10-fix-io-loss-while-replacement-replace-rdev.patch delete mode 100644 queue-6.4/md-raid10-fix-null-ptr-deref-of-mreplace-in-raid10_s.patch delete mode 100644 queue-6.4/md-raid10-fix-overflow-of-md-safe_mode_delay.patch delete mode 100644 queue-6.4/md-raid10-fix-wrong-setting-of-max_corr_read_errors.patch delete mode 100644 queue-6.4/memory-brcmstb_dpfe-fix-testing-array-offset-after-u.patch delete mode 100644 queue-6.4/memstick-r592-make-memstick_debug_get_tpc_name-stati.patch delete mode 100644 queue-6.4/mips-dts-ci20-add-parent-supplies-to-act8600-regulat.patch delete mode 100644 queue-6.4/mips-dts-ci20-fix-act8600-regulator-node-names.patch delete mode 100644 queue-6.4/mips-dts-ci20-raise-vddcore-voltage-to-1.125-volts.patch delete mode 100644 queue-6.4/mm-move-mm_count-into-its-own-cache-line.patch delete mode 100644 queue-6.4/mmc-add-mmc_quirk_broken_sd_cache-for-kingston-canva.patch delete mode 100644 queue-6.4/mmc-mediatek-avoid-ugly-error-message-when-sdio-wake.patch delete mode 100644 queue-6.4/modpost-fix-off-by-one-in-is_executable_section.patch delete mode 100644 queue-6.4/modpost-fix-section-mismatch-message-for-r_arm_-pc24.patch delete mode 100644 queue-6.4/modpost-fix-section-mismatch-message-for-r_arm_abs32.patch delete mode 100644 queue-6.4/modpost-remove-broken-calculation-of-exception_table.patch delete mode 100644 queue-6.4/net-axienet-move-reset-before-64-bit-dma-detection.patch delete mode 100644 queue-6.4/net-dsa-avoid-suspicious-rcu-usage-for-synced-vlan-a.patch delete mode 100644 queue-6.4/net-handshake-unpin-sock-file-if-a-handshake-is-canc.patch delete mode 100644 queue-6.4/net-nfc-fix-use-after-free-caused-by-nfc_llcp_find_l.patch delete mode 100644 queue-6.4/net-stmmac-fix-double-serdes-powerdown.patch delete mode 100644 queue-6.4/netfilter-conntrack-dccp-copy-entire-header-to-stack.patch delete mode 100644 queue-6.4/netfilter-nf_conntrack_sip-fix-the-ct_sip_parse_nume.patch delete mode 100644 queue-6.4/netfilter-nf_tables-fix-underflow-in-chain-reference.patch delete mode 100644 queue-6.4/netfilter-nf_tables-unbind-non-anonymous-set-if-rule.patch delete mode 100644 queue-6.4/netlink-add-__sock_i_ino-for-__netlink_diag_dump.patch delete mode 100644 queue-6.4/netlink-do-not-hard-code-device-address-lenth-in-fdb.patch delete mode 100644 queue-6.4/netlink-fix-potential-deadlock-in-netlink_set_err.patch delete mode 100644 queue-6.4/nfc-llcp-fix-possible-use-of-uninitialized-variable-.patch delete mode 100644 queue-6.4/nfsv4.1-freeze-the-session-table-upon-receiving-nfs4.patch delete mode 100644 queue-6.4/nfsv4.2-fix-wrong-shrinker_id.patch delete mode 100644 queue-6.4/nvme-core-add-missing-fault-injection-cleanup.patch delete mode 100644 queue-6.4/nvme-core-fix-dev_pm_qos-memleak.patch delete mode 100644 queue-6.4/nvme-core-fix-memory-leak-in-dhchap_ctrl_secret.patch delete mode 100644 queue-6.4/nvme-core-fix-memory-leak-in-dhchap_secret_store.patch delete mode 100644 queue-6.4/ocfs2-fix-use-of-slab-data-with-sendpage.patch delete mode 100644 queue-6.4/ovl-update-of-dentry-revalidate-flags-after-copy-up.patch delete mode 100644 queue-6.4/pci-add-pci_clear_master-stub-for-non-config_pci.patch delete mode 100644 queue-6.4/pci-aspm-disable-aspm-on-mfd-function-removal-to-avo.patch delete mode 100644 queue-6.4/pci-cadence-fix-gen2-link-retraining-process.patch delete mode 100644 queue-6.4/pci-endpoint-fix-a-kconfig-prompt-of-vntb-driver.patch delete mode 100644 queue-6.4/pci-endpoint-functions-pci-epf-test-fix-dma_chan-dir.patch delete mode 100644 queue-6.4/pci-ftpci100-release-the-clock-resources.patch delete mode 100644 queue-6.4/pci-pciehp-cancel-bringup-sequence-if-card-is-not-pr.patch delete mode 100644 queue-6.4/pci-qcom-disable-write-access-to-read-only-registers.patch delete mode 100644 queue-6.4/pci-qcom-use-dwc-helpers-for-modifying-the-read-only.patch delete mode 100644 queue-6.4/pci-vmd-fix-uninitialized-variable-usage-in-vmd_enab.patch delete mode 100644 queue-6.4/pci-vmd-reset-vmd-config-register-between-soft-reboo.patch delete mode 100644 queue-6.4/perf-arm-cmn-fix-dtc-reset.patch delete mode 100644 queue-6.4/perf-arm_cspmu-fix-event-attribute-type.patch delete mode 100644 queue-6.4/perf-arm_cspmu-set-irq-affinitiy-only-if-overflow-in.patch delete mode 100644 queue-6.4/perf-bench-add-missing-setlocale-call-to-allow-usage.patch delete mode 100644 queue-6.4/perf-dwarf-aux-fix-off-by-one-in-die_get_varname.patch delete mode 100644 queue-6.4/perf-evsel-don-t-let-for_each_group-treat-the-head-o.patch delete mode 100644 queue-6.4/perf-ibs-fix-interface-via-core-pmu-events.patch delete mode 100644 queue-6.4/perf-metric-fix-no-group-check.patch delete mode 100644 queue-6.4/perf-script-fix-allocation-of-evsel-priv-related-to-.patch delete mode 100644 queue-6.4/perf-stat-reset-aggr-stats-for-each-run.patch delete mode 100644 queue-6.4/perf-test-set-perf_exec_path-for-script-execution.patch delete mode 100644 queue-6.4/perf-tests-task_analyzer-fix-bad-substitution-1.patch delete mode 100644 queue-6.4/perf-tests-task_analyzer-skip-tests-if-no-libtraceev.patch delete mode 100644 queue-6.4/perf-tool-x86-consolidate-is_amd-check-into-single-f.patch delete mode 100644 queue-6.4/perf-tool-x86-fix-perf_env-memory-leak.patch delete mode 100644 queue-6.4/pinctrl-at91-fix-a-couple-null-vs-is_err-checks.patch delete mode 100644 queue-6.4/pinctrl-at91-pio4-check-return-value-of-devm_kasprin.patch delete mode 100644 queue-6.4/pinctrl-bcm2835-handle-gpiochip_add_pin_range-errors.patch delete mode 100644 queue-6.4/pinctrl-cherryview-return-correct-value-if-pin-in-pu.patch delete mode 100644 queue-6.4/pinctrl-freescale-fix-a-memory-out-of-bounds-when-nu.patch delete mode 100644 queue-6.4/pinctrl-microchip-sgpio-check-return-value-of-devm_k.patch delete mode 100644 queue-6.4/pinctrl-npcm7xx-add-missing-check-for-ioremap.patch delete mode 100644 queue-6.4/pinctrl-sunplus-add-check-for-kmalloc.patch delete mode 100644 queue-6.4/pinctrl-sunplus-add-check-for-kmalloc.patch-3132 delete mode 100644 queue-6.4/pinctrl-tegra-duplicate-pinmux-functions-table.patch delete mode 100644 queue-6.4/platform-x86-dell-dell-rbtn-fix-resources-leaking-on.patch delete mode 100644 queue-6.4/platform-x86-intel-pmc-add-resume-callback.patch delete mode 100644 queue-6.4/platform-x86-intel-pmc-mtl-put-devices-in-d3-during-.patch delete mode 100644 queue-6.4/platform-x86-intel-pmc-remove-meteor-lake-s-platform.patch delete mode 100644 queue-6.4/platform-x86-intel-pmc-update-maps-for-meteor-lake-p.patch delete mode 100644 queue-6.4/platform-x86-lenovo-yogabook-fix-work-race-on-remove.patch delete mode 100644 queue-6.4/platform-x86-lenovo-yogabook-reprobe-devices-on-remo.patch delete mode 100644 queue-6.4/platform-x86-lenovo-yogabook-set-default-keyboard-ba.patch delete mode 100644 queue-6.4/platform-x86-think-lmi-correct-nvme-password-handlin.patch delete mode 100644 queue-6.4/platform-x86-think-lmi-correct-system-password-inter.patch delete mode 100644 queue-6.4/platform-x86-think-lmi-mutex-protection-around-multi.patch delete mode 100644 queue-6.4/platform-x86-thinkpad_acpi-fix-lkp-tests-warnings-fo.patch delete mode 100644 queue-6.4/pm-domains-fix-integer-overflow-issues-in-genpd_pars.patch delete mode 100644 queue-6.4/pm-domains-move-the-verification-of-in-params-from-g.patch delete mode 100644 queue-6.4/posix-timers-prevent-rt-livelock-in-itimer_delete.patch delete mode 100644 queue-6.4/powercap-rapl-fix-config_iosf_mbi-dependency.patch delete mode 100644 queue-6.4/powercap-rapl-fix-invalid-initialization-for-pl4_sup.patch delete mode 100644 queue-6.4/powerpc-64s-fix-vas-mm-use-after-free.patch delete mode 100644 queue-6.4/powerpc-book3s64-mm-fix-directmap-stats-in-proc-memi.patch delete mode 100644 queue-6.4/powerpc-interrupt-don-t-read-msr-from-interrupt_exit.patch delete mode 100644 queue-6.4/powerpc-mm-dax-fix-the-condition-when-checking-if-al.patch delete mode 100644 queue-6.4/powerpc-powernv-sriov-perform-null-check-on-iov-befo.patch delete mode 100644 queue-6.4/powerpc-signal32-force-inlining-of-__unsafe_save_use.patch delete mode 100644 queue-6.4/powerpc-update-ppc_save_regs-to-save-current-r1-in-p.patch delete mode 100644 queue-6.4/pstore-ram-add-check-for-kstrdup.patch delete mode 100644 queue-6.4/radeon-avoid-double-free-in-ci_dpm_init.patch delete mode 100644 queue-6.4/rcu-make-rcu_cpu_starting-rely-on-interrupts-being-d.patch delete mode 100644 queue-6.4/rcu-rcuscale-move-rcu_scale_-after-kfree_scale_clean.patch delete mode 100644 queue-6.4/rcu-rcuscale-stop-kfree_scale_thread-thread-s-after-.patch delete mode 100644 queue-6.4/rcu-tasks-stop-rcu_tasks_invoke_cbs-from-using-never.patch delete mode 100644 queue-6.4/rcutorture-correct-name-of-use_softirq-module-parame.patch delete mode 100644 queue-6.4/rdma-bnxt_re-avoid-calling-wake_up-threads-from-spin.patch delete mode 100644 queue-6.4/rdma-bnxt_re-disable-kill-tasklet-only-if-it-is-enab.patch delete mode 100644 queue-6.4/rdma-bnxt_re-fix-to-remove-an-unnecessary-log.patch delete mode 100644 queue-6.4/rdma-bnxt_re-fix-to-remove-unnecessary-return-labels.patch delete mode 100644 queue-6.4/rdma-bnxt_re-remove-a-redundant-check-inside-bnxt_re.patch delete mode 100644 queue-6.4/rdma-bnxt_re-use-unique-names-while-registering-inte.patch delete mode 100644 queue-6.4/rdma-bnxt_re-wraparound-mbox-producer-index.patch delete mode 100644 queue-6.4/rdma-hns-fix-hns_roce_table_get-return-value.patch delete mode 100644 queue-6.4/rdma-irdma-avoid-fortify-string-warning-in-irdma_clr.patch delete mode 100644 queue-6.4/rdma-rxe-fix-access-checks-in-rxe_check_bind_mw.patch delete mode 100644 queue-6.4/regulator-core-fix-more-error-checking-for-debugfs_c.patch delete mode 100644 queue-6.4/regulator-core-streamline-debugfs-operations.patch delete mode 100644 queue-6.4/regulator-rk808-fix-asynchronous-probing.patch delete mode 100644 queue-6.4/reiserfs-initialize-sec-length-in-reiserfs_security_.patch delete mode 100644 queue-6.4/riscv-hibernate-remove-warn_on-in-save_processor_sta.patch delete mode 100644 queue-6.4/riscv-hibernation-remove-duplicate-call-of-suspend_r.patch delete mode 100644 queue-6.4/riscv-uprobes-restore-thread.bad_cause.patch delete mode 100644 queue-6.4/rtnetlink-extend-rtext_filter_skip_stats-to-ifla_vf_.patch delete mode 100644 queue-6.4/s390-kasan-fix-insecure-w-x-mapping-warning.patch delete mode 100644 queue-6.4/samples-bpf-fix-buffer-overflow-in-tcp_basertt.patch delete mode 100644 queue-6.4/samples-bpf-xdp1-and-xdp2-reduce-xdpbufsize-to-60.patch delete mode 100644 queue-6.4/sch_netem-fix-issues-in-netem_change-vs-get_dist_tab.patch delete mode 100644 queue-6.4/sched-core-avoid-multiple-calling-update_rq_clock-in.patch delete mode 100644 queue-6.4/scripts-mksysmap-fix-badly-escaped.patch delete mode 100644 queue-6.4/scsi-3w-xxxx-add-error-handling-for-initialization-f.patch delete mode 100644 queue-6.4/scsi-lpfc-revise-npiv-els-unsol-rcv-cmpl-logic-to-dr.patch delete mode 100644 queue-6.4/scsi-qedf-fix-null-dereference-in-error-handling.patch delete mode 100644 queue-6.4/scsi-ufs-core-fix-handling-of-lrbp-cmd.patch delete mode 100644 queue-6.4/scsi-ufs-core-increase-the-start-stop-unit-timeout-f.patch delete mode 100644 queue-6.4/scsi-ufs-core-mcq-fix-the-incorrect-ocs-value-for-th.patch delete mode 100644 queue-6.4/scsi-ufs-core-remove-a-ufshcd_add_command_trace-call.patch delete mode 100644 queue-6.4/scsi-ufs-declare-ufshcd_-hold-release-once.patch delete mode 100644 queue-6.4/sctp-add-bpf_bypass_getsockopt-proto-callback.patch delete mode 100644 queue-6.4/selftests-bpf-do-not-use-sign-file-as-testcase.patch delete mode 100644 queue-6.4/selftests-bpf-fix-check_mtu-using-wrong-variable-typ.patch delete mode 100644 queue-6.4/selftests-bpf-fix-invalid-pointer-check-in-get_xlate.patch delete mode 100644 queue-6.4/selftests-cgroup-fix-unexpected-failure-on-test_memc.patch delete mode 100644 queue-6.4/selftests-ftace-fix-ktap-output-ordering.patch delete mode 100644 queue-6.4/selftests-rtnetlink-remove-netdevsim-device-after-ip.patch delete mode 100644 queue-6.4/series delete mode 100644 queue-6.4/sfc-fix-crash-when-reading-stats-while-nic-is-resett.patch delete mode 100644 queue-6.4/sfc-release-encap-match-in-efx_tc_flow_free.patch delete mode 100644 queue-6.4/smb-client-fix-broken-file-attrs-with-nodfs-mounts.patch delete mode 100644 queue-6.4/smb-client-fix-shared-dfs-root-mounts-with-different.patch delete mode 100644 queue-6.4/smb3-do-not-send-lease-break-acknowledgment-if-all-f.patch delete mode 100644 queue-6.4/soc-fsl-qe-fix-usb.c-build-errors.patch delete mode 100644 queue-6.4/soc-mediatek-svs-fix-mt8192-gpu-node-name.patch delete mode 100644 queue-6.4/soc-qcom-geni-se-add-interfaces-geni_se_tx_init_dma-.patch delete mode 100644 queue-6.4/spi-dw-round-of-n_bytes-to-power-of-2.patch delete mode 100644 queue-6.4/spi-spi-geni-qcom-correct-cs_toggle-bit-in-spi_trans.patch delete mode 100644 queue-6.4/spi-spi-geni-qcom-do-not-do-dma-map-unmap-inside-dri.patch delete mode 100644 queue-6.4/splice-don-t-call-file_accessed-in-copy_splice_read.patch delete mode 100644 queue-6.4/splice-fix-filemap_splice_read-to-use-the-correct-in.patch delete mode 100644 queue-6.4/svcrdma-prevent-page-release-when-nothing-was-receiv.patch delete mode 100644 queue-6.4/thermal-drivers-qcom-tsens-v0_1-add-mdm9607-correcti.patch delete mode 100644 queue-6.4/thermal-drivers-qcom-tsens-v0_1-add-support-for-msm8.patch delete mode 100644 queue-6.4/thermal-drivers-qcom-tsens-v0_1-fix-mdm9607-slope-va.patch delete mode 100644 queue-6.4/thermal-drivers-qoriq-only-enable-supported-sensors.patch delete mode 100644 queue-6.4/thermal-drivers-sun8i-fix-some-error-handling-paths-.patch delete mode 100644 queue-6.4/tick-rcu-fix-bogus-ratelimit-condition.patch delete mode 100644 queue-6.4/tools-nolibc-ensure-fast64-integer-types-have-64-bit.patch delete mode 100644 queue-6.4/tools-resolve_btfids-fix-setting-hostcflags.patch delete mode 100644 queue-6.4/tools-testing-cxl-fix-command-effects-for-inject-cle.patch delete mode 100644 queue-6.4/tracing-timer-add-missing-hrtimer-modes-to-decode_hr.patch delete mode 100644 queue-6.4/vfio-mdev-move-the-compat_class-initialization-to-mo.patch delete mode 100644 queue-6.4/virt-sevguest-add-config_crypto-dependency.patch delete mode 100644 queue-6.4/watchdog-hardlockup-change-watchdog_nmi_enable-to-vo.patch delete mode 100644 queue-6.4/watchdog-hardlockup-keep-kernel.nmi_watchdog-sysctl-.patch delete mode 100644 queue-6.4/watchdog-hardlockup-move-perf-hardlockup-checking-pa.patch delete mode 100644 queue-6.4/watchdog-hardlockup-rename-some-nmi-watchdog-constan.patch delete mode 100644 queue-6.4/watchdog-perf-adapt-the-watchdog_perf-interface-for-.patch delete mode 100644 queue-6.4/watchdog-perf-define-dummy-watchdog_update_hrtimer_t.patch delete mode 100644 queue-6.4/watchdog-perf-more-properly-prevent-false-positives-.patch delete mode 100644 queue-6.4/watchdog-remove-watchdog_default.patch delete mode 100644 queue-6.4/wifi-ath10k-trigger-sta-disconnect-after-reconfig-co.patch delete mode 100644 queue-6.4/wifi-ath11k-add-missing-check-for-ioremap.patch delete mode 100644 queue-6.4/wifi-ath11k-add-missing-hw_ops-get_ring_selector-for.patch delete mode 100644 queue-6.4/wifi-ath11k-add-missing-ops-config-for-ipq5018-in-at.patch delete mode 100644 queue-6.4/wifi-ath11k-restart-firmware-after-cold-boot-calibra.patch delete mode 100644 queue-6.4/wifi-ath9k-avoid-referencing-uninit-memory-in-ath9k_.patch delete mode 100644 queue-6.4/wifi-ath9k-convert-msecs-to-jiffies-where-needed.patch delete mode 100644 queue-6.4/wifi-ath9k-don-t-allow-to-overwrite-endpoint0-attrib.patch delete mode 100644 queue-6.4/wifi-ath9k-fix-ar9003-mac-hardware-hang-check-regist.patch delete mode 100644 queue-6.4/wifi-ath9k-fix-possible-stall-on-ath9k_txq_list_has_.patch delete mode 100644 queue-6.4/wifi-atmel-fix-an-error-handling-path-in-atmel_probe.patch delete mode 100644 queue-6.4/wifi-cfg80211-drop-incorrect-nontransmitted-bss-upda.patch delete mode 100644 queue-6.4/wifi-cfg80211-fix-regulatory-disconnect-with-ocb-nan.patch delete mode 100644 queue-6.4/wifi-cfg80211-rewrite-merging-of-inherited-elements.patch delete mode 100644 queue-6.4/wifi-ieee80211-fix-the-common-size-calculation-for-r.patch delete mode 100644 queue-6.4/wifi-iwlwifi-fw-print-pc-register-value-instead-of-a.patch delete mode 100644 queue-6.4/wifi-iwlwifi-mvm-add-support-for-extra-eht-ltf.patch delete mode 100644 queue-6.4/wifi-iwlwifi-mvm-check-only-affected-links.patch delete mode 100644 queue-6.4/wifi-iwlwifi-mvm-correctly-access-he-eht-sband-capa.patch delete mode 100644 queue-6.4/wifi-iwlwifi-mvm-handle-return-value-for-iwl_mvm_sta.patch delete mode 100644 queue-6.4/wifi-iwlwifi-mvm-indicate-hw-decrypt-for-beacon-prot.patch delete mode 100644 queue-6.4/wifi-iwlwifi-mvm-send-time-sync-only-if-needed.patch delete mode 100644 queue-6.4/wifi-iwlwifi-pcie-fix-null-pointer-dereference-in-iw.patch delete mode 100644 queue-6.4/wifi-iwlwifi-pull-from-txqs-with-softirqs-disabled.patch delete mode 100644 queue-6.4/wifi-mac80211-add-helpers-to-access-sband-iftype-dat.patch delete mode 100644 queue-6.4/wifi-mac80211-fix-permissions-for-valid_links-debugf.patch delete mode 100644 queue-6.4/wifi-mac80211-recalc-min-chandef-for-new-sta-links.patch delete mode 100644 queue-6.4/wifi-mac80211-remove-missing-iftype-sband-data-eht-c.patch delete mode 100644 queue-6.4/wifi-mwifiex-fix-the-size-of-a-memory-allocation-in-.patch delete mode 100644 queue-6.4/wifi-orinoco-fix-an-error-handling-path-in-orinoco_c.patch delete mode 100644 queue-6.4/wifi-orinoco-fix-an-error-handling-path-in-spectrum_.patch delete mode 100644 queue-6.4/wifi-ray_cs-fix-an-error-handling-path-in-ray_probe.patch delete mode 100644 queue-6.4/wifi-rsi-do-not-configure-wowlan-in-shutdown-hook-if.patch delete mode 100644 queue-6.4/wifi-rsi-do-not-set-mmc_pm_keep_power-in-shutdown.patch delete mode 100644 queue-6.4/wifi-rtw88-unlock-on-error-path-in-rtw_ops_add_inter.patch delete mode 100644 queue-6.4/wifi-rtw88-usb-silence-log-flooding-error-message.patch delete mode 100644 queue-6.4/wifi-rtw89-fix-rtw89_read_chip_ver-for-rtl8852b-and-.patch delete mode 100644 queue-6.4/wifi-wilc1000-fix-for-absent-rsn-capabilities-wfa-te.patch delete mode 100644 queue-6.4/wifi-wl3501_cs-fix-an-error-handling-path-in-wl3501_.patch delete mode 100644 queue-6.4/x86-efi-make-efi_set_virtual_address_map-ibt-safe.patch delete mode 100644 queue-6.4/x86-hyperv-set-mtrr-state-when-running-as-sev-snp-hy.patch delete mode 100644 queue-6.4/x86-mm-allow-guest.enc_status_change_prepare-to-fail.patch delete mode 100644 queue-6.4/x86-mm-fix-__swp_entry_to_pte-for-xen-pv-guests.patch delete mode 100644 queue-6.4/x86-mtrr-remove-physical-address-size-calculation.patch delete mode 100644 queue-6.4/x86-mtrr-replace-size_or_mask-and-size_and_mask-with.patch delete mode 100644 queue-6.4/x86-mtrr-support-setting-mtrr-state-for-software-def.patch delete mode 100644 queue-6.4/x86-resctrl-only-show-tasks-pid-in-current-pid-names.patch delete mode 100644 queue-6.4/x86-sev-fix-calculation-of-end-address-based-on-numb.patch delete mode 100644 queue-6.4/x86-tdx-fix-race-between-set_memory_encrypted-and-lo.patch delete mode 100644 queue-6.4/x86-xen-set-mtrr-state-when-running-as-xen-pv-initia.patch diff --git a/queue-6.4/accel-habanalabs-fix-gaudi2_get_tpc_idle_status-retu.patch b/queue-6.4/accel-habanalabs-fix-gaudi2_get_tpc_idle_status-retu.patch deleted file mode 100644 index 43ad5528cab..00000000000 --- a/queue-6.4/accel-habanalabs-fix-gaudi2_get_tpc_idle_status-retu.patch +++ /dev/null @@ -1,37 +0,0 @@ -From 8f6e7a667eee9bdb903559a9045d05656e1835b0 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Mon, 15 May 2023 13:32:18 +0300 -Subject: accel/habanalabs: fix gaudi2_get_tpc_idle_status() return - -From: Dan Carpenter - -[ Upstream commit 9ec7639b5e124f273db20555cc38bd40057157b3 ] - -The gaudi2_get_tpc_idle_status() function returned the incorrect variable -so it always returned true. - -Fixes: d85f0531b928 ("accel/habanalabs: break is_idle function into per-engine sub-routines") -Signed-off-by: Dan Carpenter -Reviewed-by: Oded Gabbay -Signed-off-by: Oded Gabbay -Signed-off-by: Sasha Levin ---- - drivers/accel/habanalabs/gaudi2/gaudi2.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/drivers/accel/habanalabs/gaudi2/gaudi2.c b/drivers/accel/habanalabs/gaudi2/gaudi2.c -index b778cf764a68a..5539c84ee7171 100644 ---- a/drivers/accel/habanalabs/gaudi2/gaudi2.c -+++ b/drivers/accel/habanalabs/gaudi2/gaudi2.c -@@ -7231,7 +7231,7 @@ static bool gaudi2_get_tpc_idle_status(struct hl_device *hdev, u64 *mask_arr, u8 - - gaudi2_iterate_tpcs(hdev, &tpc_iter); - -- return tpc_idle_data.is_idle; -+ return *tpc_idle_data.is_idle; - } - - static bool gaudi2_get_decoder_idle_status(struct hl_device *hdev, u64 *mask_arr, u8 mask_len, --- -2.39.2 - diff --git a/queue-6.4/alsa-ac97-fix-possible-null-dereference-in-snd_ac97_.patch b/queue-6.4/alsa-ac97-fix-possible-null-dereference-in-snd_ac97_.patch deleted file mode 100644 index eaaac38dae4..00000000000 --- a/queue-6.4/alsa-ac97-fix-possible-null-dereference-in-snd_ac97_.patch +++ /dev/null @@ -1,42 +0,0 @@ -From 2c5bab8a6db03bec9f7d94e3cebaba8728b0afcc Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Thu, 15 Jun 2023 10:17:32 +0800 -Subject: ALSA: ac97: Fix possible NULL dereference in snd_ac97_mixer - -From: Su Hui - -[ Upstream commit 79597c8bf64ca99eab385115743131d260339da5 ] - -smatch error: -sound/pci/ac97/ac97_codec.c:2354 snd_ac97_mixer() error: -we previously assumed 'rac97' could be null (see line 2072) - -remove redundant assignment, return error if rac97 is NULL. - -Fixes: da3cec35dd3c ("ALSA: Kill snd_assert() in sound/pci/*") -Signed-off-by: Su Hui -Link: https://lore.kernel.org/r/20230615021732.1972194-1-suhui@nfschina.com -Signed-off-by: Takashi Iwai -Signed-off-by: Sasha Levin ---- - sound/pci/ac97/ac97_codec.c | 4 ++-- - 1 file changed, 2 insertions(+), 2 deletions(-) - -diff --git a/sound/pci/ac97/ac97_codec.c b/sound/pci/ac97/ac97_codec.c -index 9afc5906d662e..80a65b8ad7b9b 100644 ---- a/sound/pci/ac97/ac97_codec.c -+++ b/sound/pci/ac97/ac97_codec.c -@@ -2069,8 +2069,8 @@ int snd_ac97_mixer(struct snd_ac97_bus *bus, struct snd_ac97_template *template, - .dev_disconnect = snd_ac97_dev_disconnect, - }; - -- if (rac97) -- *rac97 = NULL; -+ if (!rac97) -+ return -EINVAL; - if (snd_BUG_ON(!bus || !template)) - return -EINVAL; - if (snd_BUG_ON(template->num >= 4)) --- -2.39.2 - diff --git a/queue-6.4/amdgpu-validate-offset_in_bo-of-drm_amdgpu_gem_va.patch b/queue-6.4/amdgpu-validate-offset_in_bo-of-drm_amdgpu_gem_va.patch deleted file mode 100644 index cbc388266ab..00000000000 --- a/queue-6.4/amdgpu-validate-offset_in_bo-of-drm_amdgpu_gem_va.patch +++ /dev/null @@ -1,73 +0,0 @@ -From b99a1a2a4043f8698c150f5b1cb9812e692f81a1 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Thu, 1 Jun 2023 15:44:12 -0700 -Subject: amdgpu: validate offset_in_bo of drm_amdgpu_gem_va -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -From: Chia-I Wu - -[ Upstream commit 9f0bcf49e9895cb005d78b33a5eebfa11711b425 ] - -This is motivated by OOB access in amdgpu_vm_update_range when -offset_in_bo+map_size overflows. - -v2: keep the validations in amdgpu_vm_bo_map -v3: add the validations to amdgpu_vm_bo_map/amdgpu_vm_bo_replace_map - rather than to amdgpu_gem_va_ioctl - -Fixes: 9f7eb5367d00 ("drm/amdgpu: actually use the VM map parameters") -Reviewed-by: Christian König -Signed-off-by: Chia-I Wu -Signed-off-by: Alex Deucher -Signed-off-by: Sasha Levin ---- - drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c | 16 ++++++++-------- - 1 file changed, 8 insertions(+), 8 deletions(-) - -diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c -index 5b3a70becbdf4..90605938e8951 100644 ---- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c -+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c -@@ -1433,14 +1433,14 @@ int amdgpu_vm_bo_map(struct amdgpu_device *adev, - uint64_t eaddr; - - /* validate the parameters */ -- if (saddr & ~PAGE_MASK || offset & ~PAGE_MASK || -- size == 0 || size & ~PAGE_MASK) -+ if (saddr & ~PAGE_MASK || offset & ~PAGE_MASK || size & ~PAGE_MASK) -+ return -EINVAL; -+ if (saddr + size <= saddr || offset + size <= offset) - return -EINVAL; - - /* make sure object fit at this offset */ - eaddr = saddr + size - 1; -- if (saddr >= eaddr || -- (bo && offset + size > amdgpu_bo_size(bo)) || -+ if ((bo && offset + size > amdgpu_bo_size(bo)) || - (eaddr >= adev->vm_manager.max_pfn << AMDGPU_GPU_PAGE_SHIFT)) - return -EINVAL; - -@@ -1499,14 +1499,14 @@ int amdgpu_vm_bo_replace_map(struct amdgpu_device *adev, - int r; - - /* validate the parameters */ -- if (saddr & ~PAGE_MASK || offset & ~PAGE_MASK || -- size == 0 || size & ~PAGE_MASK) -+ if (saddr & ~PAGE_MASK || offset & ~PAGE_MASK || size & ~PAGE_MASK) -+ return -EINVAL; -+ if (saddr + size <= saddr || offset + size <= offset) - return -EINVAL; - - /* make sure object fit at this offset */ - eaddr = saddr + size - 1; -- if (saddr >= eaddr || -- (bo && offset + size > amdgpu_bo_size(bo)) || -+ if ((bo && offset + size > amdgpu_bo_size(bo)) || - (eaddr >= adev->vm_manager.max_pfn << AMDGPU_GPU_PAGE_SHIFT)) - return -EINVAL; - --- -2.39.2 - diff --git a/queue-6.4/apei-ghes-correctly-return-null-for-ghes_get_devices.patch b/queue-6.4/apei-ghes-correctly-return-null-for-ghes_get_devices.patch deleted file mode 100644 index c898065ea09..00000000000 --- a/queue-6.4/apei-ghes-correctly-return-null-for-ghes_get_devices.patch +++ /dev/null @@ -1,40 +0,0 @@ -From 09ac6d61ba25a1f1515acb110bd4fdd7d36d65f7 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Fri, 19 May 2023 15:12:49 -0500 -Subject: APEI: GHES: correctly return NULL for ghes_get_devices() - -From: Li Yang - -[ Upstream commit 9368aa1882ac7178adcd936cee5f0899dbf76dc4 ] - -Since 315bada690e0 ("EDAC: Check for GHES preference in the -chipset-specific EDAC drivers"), vendor specific EDAC driver will not -probe correctly when CONFIG_ACPI_APEI_GHES is enabled but no GHES device -is present. Make ghes_get_devices() return NULL when the GHES device -list is empty to fix the problem. - -Fixes: 9057a3f7ac36 ("EDAC/ghes: Prepare to make ghes_edac a proper module") -Signed-off-by: Li Yang -Reviewed-by: Tony Luck -Signed-off-by: Rafael J. Wysocki -Signed-off-by: Sasha Levin ---- - drivers/acpi/apei/ghes.c | 2 ++ - 1 file changed, 2 insertions(+) - -diff --git a/drivers/acpi/apei/ghes.c b/drivers/acpi/apei/ghes.c -index 34ad071a64e96..4382fe13ee3e4 100644 ---- a/drivers/acpi/apei/ghes.c -+++ b/drivers/acpi/apei/ghes.c -@@ -1544,6 +1544,8 @@ struct list_head *ghes_get_devices(void) - - pr_warn_once("Force-loading ghes_edac on an unsupported platform. You're on your own!\n"); - } -+ } else if (list_empty(&ghes_devs)) { -+ return NULL; - } - - return &ghes_devs; --- -2.39.2 - diff --git a/queue-6.4/arc-define-asm_nl-and-__align-_str-outside-ifdef-__a.patch b/queue-6.4/arc-define-asm_nl-and-__align-_str-outside-ifdef-__a.patch deleted file mode 100644 index 6f3335ade02..00000000000 --- a/queue-6.4/arc-define-asm_nl-and-__align-_str-outside-ifdef-__a.patch +++ /dev/null @@ -1,62 +0,0 @@ -From 51c97604eecf7ce46d9d516ec8c86430c930d905 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Mon, 12 Jun 2023 00:50:50 +0900 -Subject: ARC: define ASM_NL and __ALIGN(_STR) outside #ifdef __ASSEMBLY__ - guard - -From: Masahiro Yamada - -[ Upstream commit 92e2921eeafdfca9acd9b83f07d2b7ca099bac24 ] - -ASM_NL is useful not only in *.S files but also in .c files for using -inline assembler in C code. - -On ARC, however, ASM_NL is evaluated inconsistently. It is expanded to -a backquote (`) in *.S files, but a semicolon (;) in *.c files because -arch/arc/include/asm/linkage.h defines it inside #ifdef __ASSEMBLY__, -so the definition for C code falls back to the default value defined in -include/linux/linkage.h. - -If ASM_NL is used in inline assembler in .c files, it will result in -wrong assembly code because a semicolon is not an instruction separator, -but the start of a comment for ARC. - -Move ASM_NL (also __ALIGN and __ALIGN_STR) out of the #ifdef. - -Fixes: 9df62f054406 ("arch: use ASM_NL instead of ';' for assembler new line character in the macro") -Fixes: 8d92e992a785 ("ARC: define __ALIGN_STR and __ALIGN symbols for ARC") -Signed-off-by: Masahiro Yamada -Signed-off-by: Sasha Levin ---- - arch/arc/include/asm/linkage.h | 8 ++++---- - 1 file changed, 4 insertions(+), 4 deletions(-) - -diff --git a/arch/arc/include/asm/linkage.h b/arch/arc/include/asm/linkage.h -index c9434ff3aa4ce..8a3fb71e9cfad 100644 ---- a/arch/arc/include/asm/linkage.h -+++ b/arch/arc/include/asm/linkage.h -@@ -8,6 +8,10 @@ - - #include - -+#define ASM_NL ` /* use '`' to mark new line in macro */ -+#define __ALIGN .align 4 -+#define __ALIGN_STR __stringify(__ALIGN) -+ - #ifdef __ASSEMBLY__ - - .macro ST2 e, o, off -@@ -28,10 +32,6 @@ - #endif - .endm - --#define ASM_NL ` /* use '`' to mark new line in macro */ --#define __ALIGN .align 4 --#define __ALIGN_STR __stringify(__ALIGN) -- - /* annotation for data we want in DCCM - if enabled in .config */ - .macro ARCFP_DATA nm - #ifdef CONFIG_ARC_HAS_DCCM --- -2.39.2 - diff --git a/queue-6.4/arm-9303-1-kprobes-avoid-missing-declaration-warning.patch b/queue-6.4/arm-9303-1-kprobes-avoid-missing-declaration-warning.patch deleted file mode 100644 index 896f02346bd..00000000000 --- a/queue-6.4/arm-9303-1-kprobes-avoid-missing-declaration-warning.patch +++ /dev/null @@ -1,103 +0,0 @@ -From 238e75131ea398f5670b399e82c7f26119343afd Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Fri, 2 Jun 2023 19:28:42 +0100 -Subject: ARM: 9303/1: kprobes: avoid missing-declaration warnings - -From: Arnd Bergmann - -[ Upstream commit 1b9c3ddcec6a55e15d3e38e7405e2d078db02020 ] - -checker_stack_use_t32strd() and kprobe_handler() can be made static since -they are not used from other files, while coverage_start_registers() -and __kprobes_test_case() are used from assembler code, and just need -a declaration to avoid a warning with the global definition. - -arch/arm/probes/kprobes/checkers-common.c:43:18: error: no previous prototype for 'checker_stack_use_t32strd' -arch/arm/probes/kprobes/core.c:236:16: error: no previous prototype for 'kprobe_handler' -arch/arm/probes/kprobes/test-core.c:723:10: error: no previous prototype for 'coverage_start_registers' -arch/arm/probes/kprobes/test-core.c:918:14: error: no previous prototype for '__kprobes_test_case_start' -arch/arm/probes/kprobes/test-core.c:952:14: error: no previous prototype for '__kprobes_test_case_end_16' -arch/arm/probes/kprobes/test-core.c:967:14: error: no previous prototype for '__kprobes_test_case_end_32' - -Fixes: 6624cf651f1a ("ARM: kprobes: collects stack consumption for store instructions") -Fixes: 454f3e132d05 ("ARM/kprobes: Remove jprobe arm implementation") -Acked-by: Masami Hiramatsu (Google) -Reviewed-by: Kees Cook -Signed-off-by: Arnd Bergmann -Signed-off-by: Russell King (Oracle) -Signed-off-by: Sasha Levin ---- - arch/arm/probes/kprobes/checkers-common.c | 2 +- - arch/arm/probes/kprobes/core.c | 2 +- - arch/arm/probes/kprobes/opt-arm.c | 2 -- - arch/arm/probes/kprobes/test-core.c | 2 +- - arch/arm/probes/kprobes/test-core.h | 4 ++++ - 5 files changed, 7 insertions(+), 5 deletions(-) - -diff --git a/arch/arm/probes/kprobes/checkers-common.c b/arch/arm/probes/kprobes/checkers-common.c -index 4d720990cf2a3..eba7ac4725c02 100644 ---- a/arch/arm/probes/kprobes/checkers-common.c -+++ b/arch/arm/probes/kprobes/checkers-common.c -@@ -40,7 +40,7 @@ enum probes_insn checker_stack_use_imm_0xx(probes_opcode_t insn, - * Different from other insn uses imm8, the real addressing offset of - * STRD in T32 encoding should be imm8 * 4. See ARMARM description. - */ --enum probes_insn checker_stack_use_t32strd(probes_opcode_t insn, -+static enum probes_insn checker_stack_use_t32strd(probes_opcode_t insn, - struct arch_probes_insn *asi, - const struct decode_header *h) - { -diff --git a/arch/arm/probes/kprobes/core.c b/arch/arm/probes/kprobes/core.c -index 9090c3a74dcce..d8238da095df7 100644 ---- a/arch/arm/probes/kprobes/core.c -+++ b/arch/arm/probes/kprobes/core.c -@@ -233,7 +233,7 @@ singlestep(struct kprobe *p, struct pt_regs *regs, struct kprobe_ctlblk *kcb) - * kprobe, and that level is reserved for user kprobe handlers, so we can't - * risk encountering a new kprobe in an interrupt handler. - */ --void __kprobes kprobe_handler(struct pt_regs *regs) -+static void __kprobes kprobe_handler(struct pt_regs *regs) - { - struct kprobe *p, *cur; - struct kprobe_ctlblk *kcb; -diff --git a/arch/arm/probes/kprobes/opt-arm.c b/arch/arm/probes/kprobes/opt-arm.c -index dbef34ed933f2..7f65048380ca5 100644 ---- a/arch/arm/probes/kprobes/opt-arm.c -+++ b/arch/arm/probes/kprobes/opt-arm.c -@@ -145,8 +145,6 @@ __arch_remove_optimized_kprobe(struct optimized_kprobe *op, int dirty) - } - } - --extern void kprobe_handler(struct pt_regs *regs); -- - static void - optimized_callback(struct optimized_kprobe *op, struct pt_regs *regs) - { -diff --git a/arch/arm/probes/kprobes/test-core.c b/arch/arm/probes/kprobes/test-core.c -index c562832b86272..171c7076b89f4 100644 ---- a/arch/arm/probes/kprobes/test-core.c -+++ b/arch/arm/probes/kprobes/test-core.c -@@ -720,7 +720,7 @@ static const char coverage_register_lookup[16] = { - [REG_TYPE_NOSPPCX] = COVERAGE_ANY_REG | COVERAGE_SP, - }; - --unsigned coverage_start_registers(const struct decode_header *h) -+static unsigned coverage_start_registers(const struct decode_header *h) - { - unsigned regs = 0; - int i; -diff --git a/arch/arm/probes/kprobes/test-core.h b/arch/arm/probes/kprobes/test-core.h -index 56ad3c0aaeeac..c7297037c1623 100644 ---- a/arch/arm/probes/kprobes/test-core.h -+++ b/arch/arm/probes/kprobes/test-core.h -@@ -454,3 +454,7 @@ void kprobe_thumb32_test_cases(void); - #else - void kprobe_arm_test_cases(void); - #endif -+ -+void __kprobes_test_case_start(void); -+void __kprobes_test_case_end_16(void); -+void __kprobes_test_case_end_32(void); --- -2.39.2 - diff --git a/queue-6.4/arm-dts-bcm5301x-drop-clock-names-from-the-spi-node.patch b/queue-6.4/arm-dts-bcm5301x-drop-clock-names-from-the-spi-node.patch deleted file mode 100644 index 7fd9bbf468f..00000000000 --- a/queue-6.4/arm-dts-bcm5301x-drop-clock-names-from-the-spi-node.patch +++ /dev/null @@ -1,42 +0,0 @@ -From 24a2b99e48726a2f3cf74015a9215fff73ae6555 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Wed, 3 May 2023 14:28:30 +0200 -Subject: ARM: dts: BCM5301X: Drop "clock-names" from the SPI node -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -From: Rafał Miłecki - -[ Upstream commit d3c8e2c5757153bbfad70019ec1decbca86f3def ] - -There is no such property in the SPI controller binding documentation. -Also Linux driver doesn't look for it. - -This fixes: -arch/arm/boot/dts/bcm4708-asus-rt-ac56u.dtb: spi@18029200: Unevaluated properties are not allowed ('clock-names' was unexpected) - From schema: Documentation/devicetree/bindings/spi/brcm,spi-bcm-qspi.yaml - -Signed-off-by: Rafał Miłecki -Link: https://lore.kernel.org/r/20230503122830.3200-1-zajec5@gmail.com -Signed-off-by: Florian Fainelli -Signed-off-by: Sasha Levin ---- - arch/arm/boot/dts/bcm5301x.dtsi | 1 - - 1 file changed, 1 deletion(-) - -diff --git a/arch/arm/boot/dts/bcm5301x.dtsi b/arch/arm/boot/dts/bcm5301x.dtsi -index 5fc1b847f4aa5..787a0dd8216b7 100644 ---- a/arch/arm/boot/dts/bcm5301x.dtsi -+++ b/arch/arm/boot/dts/bcm5301x.dtsi -@@ -542,7 +542,6 @@ spi@18029200 { - "spi_lr_session_done", - "spi_lr_overread"; - clocks = <&iprocmed>; -- clock-names = "iprocmed"; - num-cs = <2>; - #address-cells = <1>; - #size-cells = <0>; --- -2.39.2 - diff --git a/queue-6.4/arm-dts-bcm5301x-fix-duplex-full-full-duplex.patch b/queue-6.4/arm-dts-bcm5301x-fix-duplex-full-full-duplex.patch deleted file mode 100644 index f683438c66f..00000000000 --- a/queue-6.4/arm-dts-bcm5301x-fix-duplex-full-full-duplex.patch +++ /dev/null @@ -1,56 +0,0 @@ -From 3ae150984f7d696c2a5b9915ff6203b8e64788ae Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Thu, 8 Jun 2023 17:36:29 +0200 -Subject: ARM: dts: BCM5301X: fix duplex-full => full-duplex - -From: Christian Lamparter - -[ Upstream commit fd274b733bfdde3ca72f0fa2a37f032f3a8c402c ] - -this typo was found by the dtbs_check -| ports:port@5:fixed-link: 'oneOf' conditional failed, -| {'speed': [[1000]], 'duplex-full': True} is not of type 'array' -| 'duplex-full' does not match any of the regexes: 'pinctrl-[0-]..." - -this should have been full-duplex; - -Fixes: 935327a73553 ("ARM: dts: BCM5301X: Add DT for Meraki MR26") -Fixes: ec88a9c344d9 ("ARM: BCM5301X: Add DT for Meraki MR32") -Signed-off-by: Christian Lamparter -Link: https://lore.kernel.org/r/50522f45566951a9eabd22820647924cc6b4a264.1686238550.git.chunkeey@gmail.com -Signed-off-by: Florian Fainelli -Signed-off-by: Sasha Levin ---- - arch/arm/boot/dts/bcm53015-meraki-mr26.dts | 2 +- - arch/arm/boot/dts/bcm53016-meraki-mr32.dts | 2 +- - 2 files changed, 2 insertions(+), 2 deletions(-) - -diff --git a/arch/arm/boot/dts/bcm53015-meraki-mr26.dts b/arch/arm/boot/dts/bcm53015-meraki-mr26.dts -index 14f58033efeb9..ca2266b936ee2 100644 ---- a/arch/arm/boot/dts/bcm53015-meraki-mr26.dts -+++ b/arch/arm/boot/dts/bcm53015-meraki-mr26.dts -@@ -128,7 +128,7 @@ port@5 { - - fixed-link { - speed = <1000>; -- duplex-full; -+ full-duplex; - }; - }; - }; -diff --git a/arch/arm/boot/dts/bcm53016-meraki-mr32.dts b/arch/arm/boot/dts/bcm53016-meraki-mr32.dts -index 46c2c93b01d88..a34e1746a6c59 100644 ---- a/arch/arm/boot/dts/bcm53016-meraki-mr32.dts -+++ b/arch/arm/boot/dts/bcm53016-meraki-mr32.dts -@@ -187,7 +187,7 @@ port@5 { - - fixed-link { - speed = <1000>; -- duplex-full; -+ full-duplex; - }; - }; - }; --- -2.39.2 - diff --git a/queue-6.4/arm-dts-gta04-move-model-property-out-of-pinctrl-nod.patch b/queue-6.4/arm-dts-gta04-move-model-property-out-of-pinctrl-nod.patch deleted file mode 100644 index fe69fc5cda4..00000000000 --- a/queue-6.4/arm-dts-gta04-move-model-property-out-of-pinctrl-nod.patch +++ /dev/null @@ -1,41 +0,0 @@ -From d6d5a1984366425e4c7b2eacadd4731ed93bea9b Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Wed, 17 May 2023 13:32:25 +0300 -Subject: ARM: dts: gta04: Move model property out of pinctrl node - -From: Tony Lindgren - -[ Upstream commit 4ffec92e70ac5097b9f67ec154065305b16a3b46 ] - -The model property should be at the top level, let's move it out -of the pinctrl node. - -Fixes: d2eaf949d2c3 ("ARM: dts: omap3-gta04a5one: define GTA04A5 variant with OneNAND") -Cc: Andreas Kemnade -Cc: H. Nikolaus Schaller -Signed-off-by: Tony Lindgren -Signed-off-by: Sasha Levin ---- - arch/arm/boot/dts/omap3-gta04a5one.dts | 4 +++- - 1 file changed, 3 insertions(+), 1 deletion(-) - -diff --git a/arch/arm/boot/dts/omap3-gta04a5one.dts b/arch/arm/boot/dts/omap3-gta04a5one.dts -index 9db9fe67cd63b..95df45cc70c09 100644 ---- a/arch/arm/boot/dts/omap3-gta04a5one.dts -+++ b/arch/arm/boot/dts/omap3-gta04a5one.dts -@@ -5,9 +5,11 @@ - - #include "omap3-gta04a5.dts" - --&omap3_pmx_core { -+/ { - model = "Goldelico GTA04A5/Letux 2804 with OneNAND"; -+}; - -+&omap3_pmx_core { - gpmc_pins: pinmux_gpmc_pins { - pinctrl-single,pins = < - --- -2.39.2 - diff --git a/queue-6.4/arm-dts-iwg20d-q7-common-fix-backlight-pwm-specifier.patch b/queue-6.4/arm-dts-iwg20d-q7-common-fix-backlight-pwm-specifier.patch deleted file mode 100644 index dab1a122b36..00000000000 --- a/queue-6.4/arm-dts-iwg20d-q7-common-fix-backlight-pwm-specifier.patch +++ /dev/null @@ -1,49 +0,0 @@ -From 863765bcb8be3a0d6e7e7aacaef9ccea02a2c963 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Tue, 23 May 2023 17:35:16 +0200 -Subject: ARM: dts: iwg20d-q7-common: Fix backlight pwm specifier - -From: Geert Uytterhoeven - -[ Upstream commit 0501fdec106a291c43b3c1b525cf22ab4c24b2d8 ] - -make dtbs_check: - - arch/arm/boot/dts/renesas/r8a7743-iwg20d-q7.dtb: backlight: pwms: [[58, 0, 5000000], [0]] is too long - From schema: Documentation/devicetree/bindings/leds/backlight/pwm-backlight.yaml - arch/arm/boot/dts/renesas/r8a7743-iwg20d-q7-dbcm-ca.dtb: backlight: pwms: [[67, 0, 5000000], [0]] is too long - From schema: Documentation/devicetree/bindings/leds/backlight/pwm-backlight.yaml - arch/arm/boot/dts/renesas/r8a7744-iwg20d-q7-dbcm-ca.dtb: backlight: pwms: [[67, 0, 5000000], [0]] is too long - From schema: Documentation/devicetree/bindings/leds/backlight/pwm-backlight.yaml - arch/arm/boot/dts/renesas/r8a7744-iwg20d-q7.dtb: backlight: pwms: [[58, 0, 5000000], [0]] is too long - From schema: Documentation/devicetree/bindings/leds/backlight/pwm-backlight.yaml - -PWM specifiers referring to R-Car PWM Timer Controllers should contain -only two cells. - -Fix this by dropping the bogus third cell. - -Fixes: 6f89dd9e9325d05b ("ARM: dts: iwg20d-q7-common: Add LCD support") -Signed-off-by: Geert Uytterhoeven -Link: https://lore.kernel.org/r/6e5c3167424a43faf8c1fa68d9667b3d87dc86d8.1684855911.git.geert+renesas@glider.be -Signed-off-by: Sasha Levin ---- - arch/arm/boot/dts/iwg20d-q7-common.dtsi | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/arch/arm/boot/dts/iwg20d-q7-common.dtsi b/arch/arm/boot/dts/iwg20d-q7-common.dtsi -index 03caea6fc6ffa..4351c5a02fa59 100644 ---- a/arch/arm/boot/dts/iwg20d-q7-common.dtsi -+++ b/arch/arm/boot/dts/iwg20d-q7-common.dtsi -@@ -49,7 +49,7 @@ audio_clock: audio_clock { - lcd_backlight: backlight { - compatible = "pwm-backlight"; - -- pwms = <&pwm3 0 5000000 0>; -+ pwms = <&pwm3 0 5000000>; - brightness-levels = <0 4 8 16 32 64 128 255>; - default-brightness-level = <7>; - enable-gpios = <&gpio5 14 GPIO_ACTIVE_HIGH>; --- -2.39.2 - diff --git a/queue-6.4/arm-dts-lan966x-kontron-d10-fix-board-reset.patch b/queue-6.4/arm-dts-lan966x-kontron-d10-fix-board-reset.patch deleted file mode 100644 index 68d04a52d5d..00000000000 --- a/queue-6.4/arm-dts-lan966x-kontron-d10-fix-board-reset.patch +++ /dev/null @@ -1,51 +0,0 @@ -From 2747c97f51703088cf80431ce2210396a501a2a3 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Fri, 16 Jun 2023 15:18:39 +0200 -Subject: ARM: dts: lan966x: kontron-d10: fix board reset - -From: Michael Walle - -[ Upstream commit bfcd5714f6424c03e385e0e9296dcd69855cfea7 ] - -The pinctrl node was missing which change the pin mux to GPIO mode. Add -it. - -Fixes: 79d83b3a458e ("ARM: dts: lan966x: add basic Kontron KSwitch D10 support") -Signed-off-by: Michael Walle -[claudiu.beznea: moved pinctrl-* bindings after compatible] -Signed-off-by: Claudiu Beznea -Link: https://lore.kernel.org/r/20230616-feature-d10-dt-cleanups-v1-1-50dd0452b8fe@kernel.org -Signed-off-by: Sasha Levin ---- - arch/arm/boot/dts/lan966x-kontron-kswitch-d10-mmt.dtsi | 8 ++++++++ - 1 file changed, 8 insertions(+) - -diff --git a/arch/arm/boot/dts/lan966x-kontron-kswitch-d10-mmt.dtsi b/arch/arm/boot/dts/lan966x-kontron-kswitch-d10-mmt.dtsi -index 0097e72e3fb22..42be207509a46 100644 ---- a/arch/arm/boot/dts/lan966x-kontron-kswitch-d10-mmt.dtsi -+++ b/arch/arm/boot/dts/lan966x-kontron-kswitch-d10-mmt.dtsi -@@ -18,6 +18,8 @@ chosen { - - gpio-restart { - compatible = "gpio-restart"; -+ pinctrl-0 = <&reset_pins>; -+ pinctrl-names = "default"; - gpios = <&gpio 56 GPIO_ACTIVE_LOW>; - priority = <200>; - }; -@@ -59,6 +61,12 @@ miim_c_pins: miim-c-pins { - function = "miim_c"; - }; - -+ reset_pins: reset-pins { -+ /* SYS_RST# */ -+ pins = "GPIO_56"; -+ function = "gpio"; -+ }; -+ - sgpio_a_pins: sgpio-a-pins { - /* SCK, D0, D1 */ - pins = "GPIO_32", "GPIO_33", "GPIO_34"; --- -2.39.2 - diff --git a/queue-6.4/arm-dts-lan966x-kontron-d10-fix-spi-cs.patch b/queue-6.4/arm-dts-lan966x-kontron-d10-fix-spi-cs.patch deleted file mode 100644 index a1dcc600f88..00000000000 --- a/queue-6.4/arm-dts-lan966x-kontron-d10-fix-spi-cs.patch +++ /dev/null @@ -1,51 +0,0 @@ -From d349d0d58b9e2b8ab39c4f6b0adb9b775654b1fc Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Fri, 16 Jun 2023 15:18:40 +0200 -Subject: ARM: dts: lan966x: kontron-d10: fix SPI CS - -From: Michael Walle - -[ Upstream commit fcb79ee3f0b15ed15f35eca5f24e952fdced9c61 ] - -The pinctrl node was missing which change the pin mux to GPIO mode. -Add it so we don't have to rely on the bootloader to set the correct -mode. - -Fixes: 79d83b3a458e ("ARM: dts: lan966x: add basic Kontron KSwitch D10 support") -Signed-off-by: Michael Walle -Signed-off-by: Claudiu Beznea -Link: https://lore.kernel.org/r/20230616-feature-d10-dt-cleanups-v1-2-50dd0452b8fe@kernel.org -Signed-off-by: Sasha Levin ---- - arch/arm/boot/dts/lan966x-kontron-kswitch-d10-mmt.dtsi | 8 +++++++- - 1 file changed, 7 insertions(+), 1 deletion(-) - -diff --git a/arch/arm/boot/dts/lan966x-kontron-kswitch-d10-mmt.dtsi b/arch/arm/boot/dts/lan966x-kontron-kswitch-d10-mmt.dtsi -index 42be207509a46..f4df4cc1dfa5e 100644 ---- a/arch/arm/boot/dts/lan966x-kontron-kswitch-d10-mmt.dtsi -+++ b/arch/arm/boot/dts/lan966x-kontron-kswitch-d10-mmt.dtsi -@@ -41,7 +41,7 @@ &flx3 { - status = "okay"; - - spi3: spi@400 { -- pinctrl-0 = <&fc3_b_pins>; -+ pinctrl-0 = <&fc3_b_pins>, <&spi3_cs_pins>; - pinctrl-names = "default"; - status = "okay"; - cs-gpios = <&gpio 46 GPIO_ACTIVE_LOW>; -@@ -79,6 +79,12 @@ sgpio_b_pins: sgpio-b-pins { - function = "sgpio_b"; - }; - -+ spi3_cs_pins: spi3-cs-pins { -+ /* CS# */ -+ pins = "GPIO_46"; -+ function = "gpio"; -+ }; -+ - usart0_pins: usart0-pins { - /* RXD, TXD */ - pins = "GPIO_25", "GPIO_26"; --- -2.39.2 - diff --git a/queue-6.4/arm-dts-meson8-correct-uart_b-and-uart_c-clock-refer.patch b/queue-6.4/arm-dts-meson8-correct-uart_b-and-uart_c-clock-refer.patch deleted file mode 100644 index ddeb86edd27..00000000000 --- a/queue-6.4/arm-dts-meson8-correct-uart_b-and-uart_c-clock-refer.patch +++ /dev/null @@ -1,51 +0,0 @@ -From 9da77cddf21bbbcd86a44228ab927488ab2679d4 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Tue, 16 May 2023 22:30:29 +0200 -Subject: ARM: dts: meson8: correct uart_B and uart_C clock references - -From: Martin Blumenstingl - -[ Upstream commit 98b503c7fb13a17a47d8ebf15fa8f7c10118e75c ] - -On Meson8 uart_B and uart_C do not work, because they are relying on -incorrect clocks. Change the references of pclk to the correct CLKID -(UART1 for uart_B and UART2 for uart_C), to allow use of the two uarts. - -This was originally reported by Hans-Frieder Vogt for Meson8b [0], but -the same bug is also present in meson8.dtsi - -[0] https://lore.kernel.org/linux-amlogic/trinity-bf20bcb9-790b-4ab9-99e3-0831ef8257f4-1680878185420@3c-app-gmx-bap55/ - -Fixes: 57007bfb5469 ("ARM: dts: meson8: Fix the UART device-tree schema validation") -Reported-by: Hans-Frieder Vogt # for meson8b.dtsi -Signed-off-by: Martin Blumenstingl -Link: https://lore.kernel.org/r/20230516203029.1031174-1-martin.blumenstingl@googlemail.com -Signed-off-by: Neil Armstrong -Signed-off-by: Sasha Levin ---- - arch/arm/boot/dts/meson8.dtsi | 4 ++-- - 1 file changed, 2 insertions(+), 2 deletions(-) - -diff --git a/arch/arm/boot/dts/meson8.dtsi b/arch/arm/boot/dts/meson8.dtsi -index 4f22ab451aae2..59932fbfd5d5f 100644 ---- a/arch/arm/boot/dts/meson8.dtsi -+++ b/arch/arm/boot/dts/meson8.dtsi -@@ -769,13 +769,13 @@ &uart_A { - - &uart_B { - compatible = "amlogic,meson8-uart"; -- clocks = <&xtal>, <&clkc CLKID_UART0>, <&clkc CLKID_CLK81>; -+ clocks = <&xtal>, <&clkc CLKID_UART1>, <&clkc CLKID_CLK81>; - clock-names = "xtal", "pclk", "baud"; - }; - - &uart_C { - compatible = "amlogic,meson8-uart"; -- clocks = <&xtal>, <&clkc CLKID_UART0>, <&clkc CLKID_CLK81>; -+ clocks = <&xtal>, <&clkc CLKID_UART2>, <&clkc CLKID_CLK81>; - clock-names = "xtal", "pclk", "baud"; - }; - --- -2.39.2 - diff --git a/queue-6.4/arm-dts-meson8b-correct-uart_b-and-uart_c-clock-refe.patch b/queue-6.4/arm-dts-meson8b-correct-uart_b-and-uart_c-clock-refe.patch deleted file mode 100644 index bba03068abc..00000000000 --- a/queue-6.4/arm-dts-meson8b-correct-uart_b-and-uart_c-clock-refe.patch +++ /dev/null @@ -1,47 +0,0 @@ -From ab053c7ac816dbe7de66575467a412932d04d0e5 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Fri, 7 Apr 2023 16:36:25 +0200 -Subject: ARM: dts: meson8b: correct uart_B and uart_C clock references - -From: hfdevel@gmx.net - -[ Upstream commit d542ce8d4769cdef6a7bc3437e59cfed9c68f0e4 ] - -With the current device tree for meson8b, uarts B (e.g. available on pins -8/10 on Odroid-C1) and C (pins 3/5 on Odroid-C1) do not work, because they -are relying on incorrect clocks. Change the references of pclk to the -correct CLKID, to allow use of the two uarts. - -Fixes: 3375aa77135f ("ARM: dts: meson8b: Fix the UART device-tree schema validation") -Signed-off-by: Hans-Frieder Vogt -Reviewed-by: Martin Blumenstingl -Link: https://lore.kernel.org/r/trinity-bf20bcb9-790b-4ab9-99e3-0831ef8257f4-1680878185420@3c-app-gmx-bap55 -Signed-off-by: Neil Armstrong -Signed-off-by: Sasha Levin ---- - arch/arm/boot/dts/meson8b.dtsi | 4 ++-- - 1 file changed, 2 insertions(+), 2 deletions(-) - -diff --git a/arch/arm/boot/dts/meson8b.dtsi b/arch/arm/boot/dts/meson8b.dtsi -index 5979209fe91ef..5198f5177c2c1 100644 ---- a/arch/arm/boot/dts/meson8b.dtsi -+++ b/arch/arm/boot/dts/meson8b.dtsi -@@ -740,13 +740,13 @@ &uart_A { - - &uart_B { - compatible = "amlogic,meson8b-uart"; -- clocks = <&xtal>, <&clkc CLKID_UART0>, <&clkc CLKID_CLK81>; -+ clocks = <&xtal>, <&clkc CLKID_UART1>, <&clkc CLKID_CLK81>; - clock-names = "xtal", "pclk", "baud"; - }; - - &uart_C { - compatible = "amlogic,meson8b-uart"; -- clocks = <&xtal>, <&clkc CLKID_UART0>, <&clkc CLKID_CLK81>; -+ clocks = <&xtal>, <&clkc CLKID_UART2>, <&clkc CLKID_CLK81>; - clock-names = "xtal", "pclk", "baud"; - }; - --- -2.39.2 - diff --git a/queue-6.4/arm-dts-qcom-apq8074-dragonboard-set-dma-as-remotely.patch b/queue-6.4/arm-dts-qcom-apq8074-dragonboard-set-dma-as-remotely.patch deleted file mode 100644 index 35f6ed69240..00000000000 --- a/queue-6.4/arm-dts-qcom-apq8074-dragonboard-set-dma-as-remotely.patch +++ /dev/null @@ -1,42 +0,0 @@ -From 37536d20b9fff4c03dcbafb33abbf68691e60bdc Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Sun, 7 May 2023 22:07:33 +0300 -Subject: ARM: dts: qcom: apq8074-dragonboard: Set DMA as remotely controlled - -From: Dmitry Baryshkov - -[ Upstream commit e60c230588d88036f974cec7e93361e2c4f62226 ] - -Add the qcom,controlled-remotely property for the blsp2_bam -controller node. This board requires this, otherwise the board stalls -during the boot for some reason (most probably because TZ mishandles the -protection error and keeps on looping somewhere inside). - -Fixes: 62bc81792223 dts: msm8974: Add blsp2_bam dma node -Signed-off-by: Dmitry Baryshkov -Reviewed-by: Konrad Dybcio -Signed-off-by: Bjorn Andersson -Link: https://lore.kernel.org/r/20230507190735.2333145-3-dmitry.baryshkov@linaro.org -Signed-off-by: Sasha Levin ---- - arch/arm/boot/dts/qcom-apq8074-dragonboard.dts | 4 ++++ - 1 file changed, 4 insertions(+) - -diff --git a/arch/arm/boot/dts/qcom-apq8074-dragonboard.dts b/arch/arm/boot/dts/qcom-apq8074-dragonboard.dts -index 1345df7cbd002..6b047c6793707 100644 ---- a/arch/arm/boot/dts/qcom-apq8074-dragonboard.dts -+++ b/arch/arm/boot/dts/qcom-apq8074-dragonboard.dts -@@ -23,6 +23,10 @@ &blsp1_uart2 { - status = "okay"; - }; - -+&blsp2_dma { -+ qcom,controlled-remotely; -+}; -+ - &blsp2_i2c5 { - status = "okay"; - clock-frequency = <200000>; --- -2.39.2 - diff --git a/queue-6.4/arm-dts-qcom-msm8974-do-not-use-underscore-in-node-n.patch b/queue-6.4/arm-dts-qcom-msm8974-do-not-use-underscore-in-node-n.patch deleted file mode 100644 index c424a6e5133..00000000000 --- a/queue-6.4/arm-dts-qcom-msm8974-do-not-use-underscore-in-node-n.patch +++ /dev/null @@ -1,38 +0,0 @@ -From 5f1d3d8dcf5b2c788f4fd74ff6a4008135f1e779 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Mon, 10 Apr 2023 19:52:32 +0200 -Subject: ARM: dts: qcom: msm8974: do not use underscore in node name (again) - -From: Krzysztof Kozlowski - -[ Upstream commit 311bbc884b2edcf584b67d331be85ce43b27586f ] - -Align RPM requests node with DT schema by using hyphen instead of -underscore. - -Fixes: f300826d27be ("ARM: dts: qcom-msm8974: Sort and clean up nodes") -Signed-off-by: Krzysztof Kozlowski -Reviewed-by: Konrad Dybcio -Signed-off-by: Bjorn Andersson -Link: https://lore.kernel.org/r/20230410175232.22317-1-krzysztof.kozlowski@linaro.org -Signed-off-by: Sasha Levin ---- - arch/arm/boot/dts/qcom-msm8974.dtsi | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/arch/arm/boot/dts/qcom-msm8974.dtsi b/arch/arm/boot/dts/qcom-msm8974.dtsi -index 7ed0d925a4e99..a22616491dc0e 100644 ---- a/arch/arm/boot/dts/qcom-msm8974.dtsi -+++ b/arch/arm/boot/dts/qcom-msm8974.dtsi -@@ -301,7 +301,7 @@ rpm { - qcom,ipc = <&apcs 8 0>; - qcom,smd-edge = <15>; - -- rpm_requests: rpm_requests { -+ rpm_requests: rpm-requests { - compatible = "qcom,rpm-msm8974"; - qcom,smd-channels = "rpm_requests"; - --- -2.39.2 - diff --git a/queue-6.4/arm-dts-stm32-fix-audio-routing-on-stm32mp15xx-dhcom.patch b/queue-6.4/arm-dts-stm32-fix-audio-routing-on-stm32mp15xx-dhcom.patch deleted file mode 100644 index 9ac17a673d8..00000000000 --- a/queue-6.4/arm-dts-stm32-fix-audio-routing-on-stm32mp15xx-dhcom.patch +++ /dev/null @@ -1,52 +0,0 @@ -From dd8e9c252e35bc5f2cef0088c1c72d3c8fa2a843 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Tue, 6 Jun 2023 20:01:12 +0200 -Subject: ARM: dts: stm32: Fix audio routing on STM32MP15xx DHCOM PDK2 - -From: Marek Vasut - -[ Upstream commit e3f2778b1b6ced649bffdc7cbb05b80bb92f2108 ] - -The audio routing flow is not correct, the flow should be from source -(second element in the pair) to sink (first element in the pair). The -flow now is from "HP_OUT" to "Playback", where "Playback" is source -and "HP_OUT" is sink, i.e. the direction is swapped and there is no -direct link between the two either. - -Fill in the correct routing, where "HP_OUT" supplies the "Headphone Jack", -"Line In Jack" supplies "LINE_IN" input, "Microphone Jack" supplies "MIC_IN" -input and "Mic Bias" supplies "Microphone Jack". - -Fixes: 34e0c7847dcf ("ARM: dts: stm32: Add DH Electronics DHCOM STM32MP1 SoM and PDK2 board") -Signed-off-by: Marek Vasut -Signed-off-by: Alexandre Torgue -Signed-off-by: Sasha Levin ---- - arch/arm/boot/dts/stm32mp15xx-dhcom-pdk2.dtsi | 11 +++++++---- - 1 file changed, 7 insertions(+), 4 deletions(-) - -diff --git a/arch/arm/boot/dts/stm32mp15xx-dhcom-pdk2.dtsi b/arch/arm/boot/dts/stm32mp15xx-dhcom-pdk2.dtsi -index 4709677151aac..46b87a27d8b37 100644 ---- a/arch/arm/boot/dts/stm32mp15xx-dhcom-pdk2.dtsi -+++ b/arch/arm/boot/dts/stm32mp15xx-dhcom-pdk2.dtsi -@@ -137,10 +137,13 @@ reg_panel_supply: regulator-panel-supply { - - sound { - compatible = "audio-graph-card"; -- routing = -- "MIC_IN", "Capture", -- "Capture", "Mic Bias", -- "Playback", "HP_OUT"; -+ widgets = "Headphone", "Headphone Jack", -+ "Line", "Line In Jack", -+ "Microphone", "Microphone Jack"; -+ routing = "Headphone Jack", "HP_OUT", -+ "LINE_IN", "Line In Jack", -+ "MIC_IN", "Microphone Jack", -+ "Microphone Jack", "Mic Bias"; - dais = <&sai2a_port &sai2b_port>; - status = "okay"; - }; --- -2.39.2 - diff --git a/queue-6.4/arm-dts-stm32-fix-i2s-endpoint-format-property-for-s.patch b/queue-6.4/arm-dts-stm32-fix-i2s-endpoint-format-property-for-s.patch deleted file mode 100644 index 207789407a8..00000000000 --- a/queue-6.4/arm-dts-stm32-fix-i2s-endpoint-format-property-for-s.patch +++ /dev/null @@ -1,36 +0,0 @@ -From 4b0f98dec57079f02f0e36a2a44210ba413458ff Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Tue, 6 Jun 2023 13:56:04 +0200 -Subject: ARM: dts: stm32: fix i2s endpoint format property for stm32mp15xx-dkx - -From: Olivier Moysan - -[ Upstream commit 076c74c592cabe4a47537fe5205b5b678bed010d ] - -Use "dai-format" to configure DAI audio format as specified in -audio-graph-port.yaml bindings. - -Fixes: 144d1ba70548 ("ARM: dts: stm32: Adapt STM32MP157 DK boards to stm32 DT diversity") -Signed-off-by: Olivier Moysan -Signed-off-by: Alexandre Torgue -Signed-off-by: Sasha Levin ---- - arch/arm/boot/dts/stm32mp15xx-dkx.dtsi | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/arch/arm/boot/dts/stm32mp15xx-dkx.dtsi b/arch/arm/boot/dts/stm32mp15xx-dkx.dtsi -index cefeeb00fc228..aa2e92f1e63d3 100644 ---- a/arch/arm/boot/dts/stm32mp15xx-dkx.dtsi -+++ b/arch/arm/boot/dts/stm32mp15xx-dkx.dtsi -@@ -435,7 +435,7 @@ &i2s2 { - i2s2_port: port { - i2s2_endpoint: endpoint { - remote-endpoint = <&sii9022_tx_endpoint>; -- format = "i2s"; -+ dai-format = "i2s"; - mclk-fs = <256>; - }; - }; --- -2.39.2 - diff --git a/queue-6.4/arm-dts-stm32-move-ethernet-mac-eeprom-from-som-to-c.patch b/queue-6.4/arm-dts-stm32-move-ethernet-mac-eeprom-from-som-to-c.patch deleted file mode 100644 index d8158b773ba..00000000000 --- a/queue-6.4/arm-dts-stm32-move-ethernet-mac-eeprom-from-som-to-c.patch +++ /dev/null @@ -1,97 +0,0 @@ -From f782528606ddb46fdddb26b51299d2ce86ffe4a1 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Fri, 5 May 2023 23:37:29 +0200 -Subject: ARM: dts: stm32: Move ethernet MAC EEPROM from SoM to carrier boards - -From: Marek Vasut - -[ Upstream commit 9660efc2af37f3c12dc6e6a5511ad99e0addc297 ] - -The ethernet MAC EEPROM is not populated on the SoM itself, it has to be -populated on each carrier board. Move the EEPROM into the correct place -in DTs, i.e. the carrier board DTs. Add label to the EEPROM too. - -Fixes: 7e76f82acd9e1 ("ARM: dts: stm32: Split Avenger96 into DHCOR SoM and Avenger96 board") -Signed-off-by: Marek Vasut -Signed-off-by: Alexandre Torgue -Signed-off-by: Sasha Levin ---- - arch/arm/boot/dts/stm32mp15xx-dhcor-avenger96.dtsi | 6 ++++++ - arch/arm/boot/dts/stm32mp15xx-dhcor-drc-compact.dtsi | 6 ++++++ - arch/arm/boot/dts/stm32mp15xx-dhcor-som.dtsi | 6 ------ - arch/arm/boot/dts/stm32mp15xx-dhcor-testbench.dtsi | 8 ++++++++ - 4 files changed, 20 insertions(+), 6 deletions(-) - -diff --git a/arch/arm/boot/dts/stm32mp15xx-dhcor-avenger96.dtsi b/arch/arm/boot/dts/stm32mp15xx-dhcor-avenger96.dtsi -index 50af4a27d6be4..e67c0fa209cde 100644 ---- a/arch/arm/boot/dts/stm32mp15xx-dhcor-avenger96.dtsi -+++ b/arch/arm/boot/dts/stm32mp15xx-dhcor-avenger96.dtsi -@@ -321,6 +321,12 @@ adv7513_i2s0: endpoint { - }; - }; - }; -+ -+ dh_mac_eeprom: eeprom@53 { -+ compatible = "atmel,24c02"; -+ reg = <0x53>; -+ pagesize = <16>; -+ }; - }; - - <dc { -diff --git a/arch/arm/boot/dts/stm32mp15xx-dhcor-drc-compact.dtsi b/arch/arm/boot/dts/stm32mp15xx-dhcor-drc-compact.dtsi -index c32c160f97f20..39af79dc654cc 100644 ---- a/arch/arm/boot/dts/stm32mp15xx-dhcor-drc-compact.dtsi -+++ b/arch/arm/boot/dts/stm32mp15xx-dhcor-drc-compact.dtsi -@@ -192,6 +192,12 @@ eeprom@50 { - reg = <0x50>; - pagesize = <16>; - }; -+ -+ dh_mac_eeprom: eeprom@53 { -+ compatible = "atmel,24c02"; -+ reg = <0x53>; -+ pagesize = <16>; -+ }; - }; - - &sdmmc1 { /* MicroSD */ -diff --git a/arch/arm/boot/dts/stm32mp15xx-dhcor-som.dtsi b/arch/arm/boot/dts/stm32mp15xx-dhcor-som.dtsi -index bb40fb46da81d..bba19f21e5277 100644 ---- a/arch/arm/boot/dts/stm32mp15xx-dhcor-som.dtsi -+++ b/arch/arm/boot/dts/stm32mp15xx-dhcor-som.dtsi -@@ -213,12 +213,6 @@ watchdog { - status = "disabled"; - }; - }; -- -- eeprom@53 { -- compatible = "atmel,24c02"; -- reg = <0x53>; -- pagesize = <16>; -- }; - }; - - &ipcc { -diff --git a/arch/arm/boot/dts/stm32mp15xx-dhcor-testbench.dtsi b/arch/arm/boot/dts/stm32mp15xx-dhcor-testbench.dtsi -index 5fdb74b652aca..faed31b6d84a1 100644 ---- a/arch/arm/boot/dts/stm32mp15xx-dhcor-testbench.dtsi -+++ b/arch/arm/boot/dts/stm32mp15xx-dhcor-testbench.dtsi -@@ -90,6 +90,14 @@ phy0: ethernet-phy@7 { - }; - }; - -+&i2c4 { -+ dh_mac_eeprom: eeprom@53 { -+ compatible = "atmel,24c02"; -+ reg = <0x53>; -+ pagesize = <16>; -+ }; -+}; -+ - &sdmmc1 { - pinctrl-names = "default", "opendrain", "sleep"; - pinctrl-0 = <&sdmmc1_b4_pins_a &sdmmc1_dir_pins_b>; --- -2.39.2 - diff --git a/queue-6.4/arm-dts-stm32-shorten-the-av96-hdmi-sound-card-name.patch b/queue-6.4/arm-dts-stm32-shorten-the-av96-hdmi-sound-card-name.patch deleted file mode 100644 index 322e19d3dfa..00000000000 --- a/queue-6.4/arm-dts-stm32-shorten-the-av96-hdmi-sound-card-name.patch +++ /dev/null @@ -1,38 +0,0 @@ -From f5ddc79696bd3c2542b9d2d93dc6638cbe2b1bae Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Thu, 18 May 2023 02:42:32 +0200 -Subject: ARM: dts: stm32: Shorten the AV96 HDMI sound card name - -From: Marek Vasut - -[ Upstream commit 0cf765e598712addec34d0208cc1418c151fefb2 ] - -Fix the following error in kernel log due to too long sound card name: -" -asoc-audio-graph-card sound: ASoC: driver name too long 'STM32MP1-AV96-HDMI' -> 'STM32MP1-AV96-H' -" - -Fixes: e027da342772 ("ARM: dts: stm32: Add bindings for audio on AV96") -Signed-off-by: Marek Vasut -Signed-off-by: Alexandre Torgue -Signed-off-by: Sasha Levin ---- - arch/arm/boot/dts/stm32mp15xx-dhcor-avenger96.dtsi | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/arch/arm/boot/dts/stm32mp15xx-dhcor-avenger96.dtsi b/arch/arm/boot/dts/stm32mp15xx-dhcor-avenger96.dtsi -index e67c0fa209cde..7d5d6d4360385 100644 ---- a/arch/arm/boot/dts/stm32mp15xx-dhcor-avenger96.dtsi -+++ b/arch/arm/boot/dts/stm32mp15xx-dhcor-avenger96.dtsi -@@ -87,7 +87,7 @@ sd_switch: regulator-sd_switch { - - sound { - compatible = "audio-graph-card"; -- label = "STM32MP1-AV96-HDMI"; -+ label = "STM32-AV96-HDMI"; - dais = <&sai2a_port>; - status = "okay"; - }; --- -2.39.2 - diff --git a/queue-6.4/arm-ep93xx-fix-missing-prototype-warnings.patch b/queue-6.4/arm-ep93xx-fix-missing-prototype-warnings.patch deleted file mode 100644 index 8ca24e088ce..00000000000 --- a/queue-6.4/arm-ep93xx-fix-missing-prototype-warnings.patch +++ /dev/null @@ -1,48 +0,0 @@ -From 54a15565953596265cd9c11ae630f06124113b61 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Tue, 16 May 2023 17:30:58 +0200 -Subject: ARM: ep93xx: fix missing-prototype warnings - -From: Arnd Bergmann - -[ Upstream commit 419013740ea1e4343d8ade535d999f59fa28e460 ] - -ep93xx_clocksource_read() is only called from the file it is declared in, -while ep93xx_timer_init() is declared in a header that is not included here. - -arch/arm/mach-ep93xx/timer-ep93xx.c:120:13: error: no previous prototype for 'ep93xx_timer_init' -arch/arm/mach-ep93xx/timer-ep93xx.c:63:5: error: no previous prototype for 'ep93xx_clocksource_read' - -Fixes: 000bc17817bf ("ARM: ep93xx: switch to GENERIC_CLOCKEVENTS") -Acked-by: Alexander Sverdlin -Link: https://lore.kernel.org/r/20230516153109.514251-3-arnd@kernel.org -Signed-off-by: Arnd Bergmann -Signed-off-by: Sasha Levin ---- - arch/arm/mach-ep93xx/timer-ep93xx.c | 3 ++- - 1 file changed, 2 insertions(+), 1 deletion(-) - -diff --git a/arch/arm/mach-ep93xx/timer-ep93xx.c b/arch/arm/mach-ep93xx/timer-ep93xx.c -index dd4b164d18317..a9efa7bc2fa12 100644 ---- a/arch/arm/mach-ep93xx/timer-ep93xx.c -+++ b/arch/arm/mach-ep93xx/timer-ep93xx.c -@@ -9,6 +9,7 @@ - #include - #include - #include "soc.h" -+#include "platform.h" - - /************************************************************************* - * Timer handling for EP93xx -@@ -60,7 +61,7 @@ static u64 notrace ep93xx_read_sched_clock(void) - return ret; - } - --u64 ep93xx_clocksource_read(struct clocksource *c) -+static u64 ep93xx_clocksource_read(struct clocksource *c) - { - u64 ret; - --- -2.39.2 - diff --git a/queue-6.4/arm-gpio-push-omap2-quirk-down-into-twl4030-driver.patch b/queue-6.4/arm-gpio-push-omap2-quirk-down-into-twl4030-driver.patch deleted file mode 100644 index 9dc44d5526d..00000000000 --- a/queue-6.4/arm-gpio-push-omap2-quirk-down-into-twl4030-driver.patch +++ /dev/null @@ -1,251 +0,0 @@ -From aa27413e336c14245339c7cdd0cfceab6cd1ce89 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Mon, 1 May 2023 11:05:21 +0200 -Subject: ARM/gpio: Push OMAP2 quirk down into TWL4030 driver - -From: Linus Walleij - -[ Upstream commit d5f4fa60d63aa54ae33339895b88d8932b6037ed ] - -The TWL4030 GPIO driver has a custom platform data .set_up() -callback to call back into the platform and do misc stuff such -as hog and export a GPIO for WLAN PWR on a specific OMAP3 board. - -Avoid all the kludgery in the platform data and the boardfile -and just put the quirks right into the driver. Make it -conditional on OMAP3. - -I think the exported GPIO is used by some kind of userspace -so ordinary DTS hogs will probably not work. - -Fixes: 92bf78b33b0b ("gpio: omap: use dynamic allocation of base") -Signed-off-by: Linus Walleij -Signed-off-by: Sasha Levin ---- - arch/arm/mach-omap2/omap_device.c | 1 - - arch/arm/mach-omap2/pdata-quirks.c | 41 +---------------------- - drivers/gpio/gpio-twl4030.c | 52 +++++++++++++++++++++--------- - include/linux/mfd/twl.h | 3 -- - 4 files changed, 37 insertions(+), 60 deletions(-) - -diff --git a/arch/arm/mach-omap2/omap_device.c b/arch/arm/mach-omap2/omap_device.c -index 4afa2f08e6681..fca7869c8075a 100644 ---- a/arch/arm/mach-omap2/omap_device.c -+++ b/arch/arm/mach-omap2/omap_device.c -@@ -244,7 +244,6 @@ static int _omap_device_notifier_call(struct notifier_block *nb, - case BUS_NOTIFY_ADD_DEVICE: - if (pdev->dev.of_node) - omap_device_build_from_dt(pdev); -- omap_auxdata_legacy_init(dev); - fallthrough; - default: - od = to_omap_device(pdev); -diff --git a/arch/arm/mach-omap2/pdata-quirks.c b/arch/arm/mach-omap2/pdata-quirks.c -index 04208cc52784e..c363ad8d6a06c 100644 ---- a/arch/arm/mach-omap2/pdata-quirks.c -+++ b/arch/arm/mach-omap2/pdata-quirks.c -@@ -6,6 +6,7 @@ - */ - #include - #include -+#include - #include - #include - #include -@@ -41,7 +42,6 @@ struct pdata_init { - }; - - static struct of_dev_auxdata omap_auxdata_lookup[]; --static struct twl4030_gpio_platform_data twl_gpio_auxdata; - - #ifdef CONFIG_MACH_NOKIA_N8X0 - static void __init omap2420_n8x0_legacy_init(void) -@@ -98,22 +98,6 @@ static struct iommu_platform_data omap3_iommu_isp_pdata = { - }; - #endif - --static int omap3_sbc_t3730_twl_callback(struct device *dev, -- unsigned gpio, -- unsigned ngpio) --{ -- int res; -- -- res = gpio_request_one(gpio + 2, GPIOF_OUT_INIT_HIGH, -- "wlan pwr"); -- if (res) -- return res; -- -- gpiod_export(gpio_to_desc(gpio), 0); -- -- return 0; --} -- - static void __init omap3_sbc_t3x_usb_hub_init(int gpio, char *hub_name) - { - int err = gpio_request_one(gpio, GPIOF_OUT_INIT_LOW, hub_name); -@@ -131,11 +115,6 @@ static void __init omap3_sbc_t3x_usb_hub_init(int gpio, char *hub_name) - msleep(1); - } - --static void __init omap3_sbc_t3730_twl_init(void) --{ -- twl_gpio_auxdata.setup = omap3_sbc_t3730_twl_callback; --} -- - static void __init omap3_sbc_t3730_legacy_init(void) - { - omap3_sbc_t3x_usb_hub_init(167, "sb-t35 usb hub"); -@@ -393,21 +372,6 @@ static struct ti_prm_platform_data ti_prm_pdata = { - .clkdm_lookup = clkdm_lookup, - }; - --/* -- * GPIOs for TWL are initialized by the I2C bus and need custom -- * handing until DSS has device tree bindings. -- */ --void omap_auxdata_legacy_init(struct device *dev) --{ -- if (dev->platform_data) -- return; -- -- if (strcmp("twl4030-gpio", dev_name(dev))) -- return; -- -- dev->platform_data = &twl_gpio_auxdata; --} -- - #if defined(CONFIG_ARCH_OMAP3) && IS_ENABLED(CONFIG_SND_SOC_OMAP_MCBSP) - static struct omap_mcbsp_platform_data mcbsp_pdata; - static void __init omap3_mcbsp_init(void) -@@ -427,9 +391,6 @@ static struct pdata_init auxdata_quirks[] __initdata = { - { "nokia,n800", omap2420_n8x0_legacy_init, }, - { "nokia,n810", omap2420_n8x0_legacy_init, }, - { "nokia,n810-wimax", omap2420_n8x0_legacy_init, }, --#endif --#ifdef CONFIG_ARCH_OMAP3 -- { "compulab,omap3-sbc-t3730", omap3_sbc_t3730_twl_init, }, - #endif - { /* sentinel */ }, - }; -diff --git a/drivers/gpio/gpio-twl4030.c b/drivers/gpio/gpio-twl4030.c -index c1bb2c3ca6f29..446599ac234a9 100644 ---- a/drivers/gpio/gpio-twl4030.c -+++ b/drivers/gpio/gpio-twl4030.c -@@ -17,7 +17,9 @@ - #include - #include - #include -+#include - #include -+#include - #include - #include - #include -@@ -465,8 +467,7 @@ static int gpio_twl4030_debounce(u32 debounce, u8 mmc_cd) - REG_GPIO_DEBEN1, 3); - } - --static struct twl4030_gpio_platform_data *of_gpio_twl4030(struct device *dev, -- struct twl4030_gpio_platform_data *pdata) -+static struct twl4030_gpio_platform_data *of_gpio_twl4030(struct device *dev) - { - struct twl4030_gpio_platform_data *omap_twl_info; - -@@ -474,9 +475,6 @@ static struct twl4030_gpio_platform_data *of_gpio_twl4030(struct device *dev, - if (!omap_twl_info) - return NULL; - -- if (pdata) -- *omap_twl_info = *pdata; -- - omap_twl_info->use_leds = of_property_read_bool(dev->of_node, - "ti,use-leds"); - -@@ -504,9 +502,18 @@ static int gpio_twl4030_remove(struct platform_device *pdev) - return 0; - } - -+/* Called from the registered devm action */ -+static void gpio_twl4030_power_off_action(void *data) -+{ -+ struct gpio_desc *d = data; -+ -+ gpiod_unexport(d); -+ gpiochip_free_own_desc(d); -+} -+ - static int gpio_twl4030_probe(struct platform_device *pdev) - { -- struct twl4030_gpio_platform_data *pdata = dev_get_platdata(&pdev->dev); -+ struct twl4030_gpio_platform_data *pdata; - struct device_node *node = pdev->dev.of_node; - struct gpio_twl4030_priv *priv; - int ret, irq_base; -@@ -546,9 +553,7 @@ static int gpio_twl4030_probe(struct platform_device *pdev) - - mutex_init(&priv->mutex); - -- if (node) -- pdata = of_gpio_twl4030(&pdev->dev, pdata); -- -+ pdata = of_gpio_twl4030(&pdev->dev); - if (pdata == NULL) { - dev_err(&pdev->dev, "Platform data is missing\n"); - return -ENXIO; -@@ -585,17 +590,32 @@ static int gpio_twl4030_probe(struct platform_device *pdev) - goto out; - } - -- platform_set_drvdata(pdev, priv); -+ /* -+ * Special quirk for the OMAP3 to hog and export a WLAN power -+ * GPIO. -+ */ -+ if (IS_ENABLED(CONFIG_ARCH_OMAP3) && -+ of_machine_is_compatible("compulab,omap3-sbc-t3730")) { -+ struct gpio_desc *d; - -- if (pdata->setup) { -- int status; -+ d = gpiochip_request_own_desc(&priv->gpio_chip, -+ 2, "wlan pwr", -+ GPIO_ACTIVE_HIGH, -+ GPIOD_OUT_HIGH); -+ if (IS_ERR(d)) -+ return dev_err_probe(&pdev->dev, PTR_ERR(d), -+ "unable to hog wlan pwr GPIO\n"); -+ -+ gpiod_export(d, 0); -+ -+ ret = devm_add_action_or_reset(&pdev->dev, gpio_twl4030_power_off_action, d); -+ if (ret) -+ return dev_err_probe(&pdev->dev, ret, -+ "failed to install power off handler\n"); - -- status = pdata->setup(&pdev->dev, priv->gpio_chip.base, -- TWL4030_GPIO_MAX); -- if (status) -- dev_dbg(&pdev->dev, "setup --> %d\n", status); - } - -+ platform_set_drvdata(pdev, priv); - out: - return ret; - } -diff --git a/include/linux/mfd/twl.h b/include/linux/mfd/twl.h -index 6e3d99b7a0ee6..c062d91a67d92 100644 ---- a/include/linux/mfd/twl.h -+++ b/include/linux/mfd/twl.h -@@ -593,9 +593,6 @@ struct twl4030_gpio_platform_data { - */ - u32 pullups; - u32 pulldowns; -- -- int (*setup)(struct device *dev, -- unsigned gpio, unsigned ngpio); - }; - - struct twl4030_madc_platform_data { --- -2.39.2 - diff --git a/queue-6.4/arm-mfd-gpio-fixup-tps65010-regression-on-omap1-osk1.patch b/queue-6.4/arm-mfd-gpio-fixup-tps65010-regression-on-omap1-osk1.patch deleted file mode 100644 index 31b28e9e2f0..00000000000 --- a/queue-6.4/arm-mfd-gpio-fixup-tps65010-regression-on-omap1-osk1.patch +++ /dev/null @@ -1,392 +0,0 @@ -From 93b033842270774f94e2a384921f7367d29f5c8e Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Sun, 30 Apr 2023 11:35:05 +0200 -Subject: ARM/mfd/gpio: Fixup TPS65010 regression on OMAP1 OSK1 - -From: Linus Walleij - -[ Upstream commit c32c81f3dbdfd68f6ab20a29ad86f811aed36e4e ] - -Aaro reports problems on the OSK1 board after we altered -the dynamic base for GPIO allocations. - -It appears this happens because the OMAP driver now -allocates GPIO numbers dynamically, so all that is -references by number is a bit up in the air. - -Let's bite the bullet and try to just move the gpio_chip -in the tps65010 MFD driver over to using dynamic allocations. -Alter everything in the OSK1 board file to use a GPIO -descriptor table and lookups. - -Utilize the NULL device to define some board-specific -GPIO lookups and use these to immediately look up the -same GPIOs, convert to IRQ numbers and pass as resources -to the devices. This is ugly but should work. - -The .setup() callback for tps65010 was used for some GPIO -hogging, but since the OSK1 is the only user in the entire -kernel we can alter the signatures to something that -is helpful and make a clean transition. - -Fixes: 92bf78b33b0b ("gpio: omap: use dynamic allocation of base") -Cc: Christophe Leroy -Cc: andy.shevchenko@gmail.com -Cc: Andreas Kemnade -Acked-by: Lee Jones -Reviewed-by: Lee Jones -Reported-by: Aaro Koskinen -Reviewed-by: Andy Shevchenko -Signed-off-by: Linus Walleij -Signed-off-by: Sasha Levin ---- - arch/arm/mach-omap1/board-osk.c | 139 ++++++++++++++++++++++---------- - drivers/mfd/tps65010.c | 14 ++-- - include/linux/mfd/tps65010.h | 11 +-- - 3 files changed, 104 insertions(+), 60 deletions(-) - -diff --git a/arch/arm/mach-omap1/board-osk.c b/arch/arm/mach-omap1/board-osk.c -index df758c1f92373..a8ca8d427182d 100644 ---- a/arch/arm/mach-omap1/board-osk.c -+++ b/arch/arm/mach-omap1/board-osk.c -@@ -25,7 +25,8 @@ - * with this program; if not, write to the Free Software Foundation, Inc., - * 675 Mass Ave, Cambridge, MA 02139, USA. - */ --#include -+#include -+#include - #include - #include - #include -@@ -64,13 +65,12 @@ - /* TPS65010 has four GPIOs. nPG and LED2 can be treated like GPIOs with - * alternate pin configurations for hardware-controlled blinking. - */ --#define OSK_TPS_GPIO_BASE (OMAP_MAX_GPIO_LINES + 16 /* MPUIO */) --# define OSK_TPS_GPIO_USB_PWR_EN (OSK_TPS_GPIO_BASE + 0) --# define OSK_TPS_GPIO_LED_D3 (OSK_TPS_GPIO_BASE + 1) --# define OSK_TPS_GPIO_LAN_RESET (OSK_TPS_GPIO_BASE + 2) --# define OSK_TPS_GPIO_DSP_PWR_EN (OSK_TPS_GPIO_BASE + 3) --# define OSK_TPS_GPIO_LED_D9 (OSK_TPS_GPIO_BASE + 4) --# define OSK_TPS_GPIO_LED_D2 (OSK_TPS_GPIO_BASE + 5) -+#define OSK_TPS_GPIO_USB_PWR_EN 0 -+#define OSK_TPS_GPIO_LED_D3 1 -+#define OSK_TPS_GPIO_LAN_RESET 2 -+#define OSK_TPS_GPIO_DSP_PWR_EN 3 -+#define OSK_TPS_GPIO_LED_D9 4 -+#define OSK_TPS_GPIO_LED_D2 5 - - static struct mtd_partition osk_partitions[] = { - /* bootloader (U-Boot, etc) in first sector */ -@@ -174,11 +174,20 @@ static const struct gpio_led tps_leds[] = { - /* NOTE: D9 and D2 have hardware blink support. - * Also, D9 requires non-battery power. - */ -- { .gpio = OSK_TPS_GPIO_LED_D9, .name = "d9", -- .default_trigger = "disk-activity", }, -- { .gpio = OSK_TPS_GPIO_LED_D2, .name = "d2", }, -- { .gpio = OSK_TPS_GPIO_LED_D3, .name = "d3", .active_low = 1, -- .default_trigger = "heartbeat", }, -+ { .name = "d9", .default_trigger = "disk-activity", }, -+ { .name = "d2", }, -+ { .name = "d3", .default_trigger = "heartbeat", }, -+}; -+ -+static struct gpiod_lookup_table tps_leds_gpio_table = { -+ .dev_id = "leds-gpio", -+ .table = { -+ /* Use local offsets on TPS65010 */ -+ GPIO_LOOKUP_IDX("tps65010", OSK_TPS_GPIO_LED_D9, NULL, 0, GPIO_ACTIVE_HIGH), -+ GPIO_LOOKUP_IDX("tps65010", OSK_TPS_GPIO_LED_D2, NULL, 1, GPIO_ACTIVE_HIGH), -+ GPIO_LOOKUP_IDX("tps65010", OSK_TPS_GPIO_LED_D3, NULL, 2, GPIO_ACTIVE_LOW), -+ { } -+ }, - }; - - static struct gpio_led_platform_data tps_leds_data = { -@@ -192,29 +201,34 @@ static struct platform_device osk5912_tps_leds = { - .dev.platform_data = &tps_leds_data, - }; - --static int osk_tps_setup(struct i2c_client *client, void *context) -+/* The board just hold these GPIOs hogged from setup to teardown */ -+static struct gpio_desc *eth_reset; -+static struct gpio_desc *vdd_dsp; -+ -+static int osk_tps_setup(struct i2c_client *client, struct gpio_chip *gc) - { -+ struct gpio_desc *d; - if (!IS_BUILTIN(CONFIG_TPS65010)) - return -ENOSYS; - - /* Set GPIO 1 HIGH to disable VBUS power supply; - * OHCI driver powers it up/down as needed. - */ -- gpio_request(OSK_TPS_GPIO_USB_PWR_EN, "n_vbus_en"); -- gpio_direction_output(OSK_TPS_GPIO_USB_PWR_EN, 1); -+ d = gpiochip_request_own_desc(gc, OSK_TPS_GPIO_USB_PWR_EN, "n_vbus_en", -+ GPIO_ACTIVE_HIGH, GPIOD_OUT_HIGH); - /* Free the GPIO again as the driver will request it */ -- gpio_free(OSK_TPS_GPIO_USB_PWR_EN); -+ gpiochip_free_own_desc(d); - - /* Set GPIO 2 high so LED D3 is off by default */ - tps65010_set_gpio_out_value(GPIO2, HIGH); - - /* Set GPIO 3 low to take ethernet out of reset */ -- gpio_request(OSK_TPS_GPIO_LAN_RESET, "smc_reset"); -- gpio_direction_output(OSK_TPS_GPIO_LAN_RESET, 0); -+ eth_reset = gpiochip_request_own_desc(gc, OSK_TPS_GPIO_LAN_RESET, "smc_reset", -+ GPIO_ACTIVE_HIGH, GPIOD_OUT_LOW); - - /* GPIO4 is VDD_DSP */ -- gpio_request(OSK_TPS_GPIO_DSP_PWR_EN, "dsp_power"); -- gpio_direction_output(OSK_TPS_GPIO_DSP_PWR_EN, 1); -+ vdd_dsp = gpiochip_request_own_desc(gc, OSK_TPS_GPIO_DSP_PWR_EN, "dsp_power", -+ GPIO_ACTIVE_HIGH, GPIOD_OUT_HIGH); - /* REVISIT if DSP support isn't configured, power it off ... */ - - /* Let LED1 (D9) blink; leds-gpio may override it */ -@@ -232,15 +246,22 @@ static int osk_tps_setup(struct i2c_client *client, void *context) - - /* register these three LEDs */ - osk5912_tps_leds.dev.parent = &client->dev; -+ gpiod_add_lookup_table(&tps_leds_gpio_table); - platform_device_register(&osk5912_tps_leds); - - return 0; - } - -+static void osk_tps_teardown(struct i2c_client *client, struct gpio_chip *gc) -+{ -+ gpiochip_free_own_desc(eth_reset); -+ gpiochip_free_own_desc(vdd_dsp); -+} -+ - static struct tps65010_board tps_board = { -- .base = OSK_TPS_GPIO_BASE, - .outmask = 0x0f, - .setup = osk_tps_setup, -+ .teardown = osk_tps_teardown, - }; - - static struct i2c_board_info __initdata osk_i2c_board_info[] = { -@@ -263,11 +284,6 @@ static void __init osk_init_smc91x(void) - { - u32 l; - -- if ((gpio_request(0, "smc_irq")) < 0) { -- printk("Error requesting gpio 0 for smc91x irq\n"); -- return; -- } -- - /* Check EMIFS wait states to fix errors with SMC_GET_PKT_HDR */ - l = omap_readl(EMIFS_CCS(1)); - l |= 0x3; -@@ -279,10 +295,6 @@ static void __init osk_init_cf(int seg) - struct resource *res = &osk5912_cf_resources[1]; - - omap_cfg_reg(M7_1610_GPIO62); -- if ((gpio_request(62, "cf_irq")) < 0) { -- printk("Error requesting gpio 62 for CF irq\n"); -- return; -- } - - switch (seg) { - /* NOTE: CS0 could be configured too ... */ -@@ -308,18 +320,17 @@ static void __init osk_init_cf(int seg) - seg, omap_readl(EMIFS_CCS(seg)), omap_readl(EMIFS_ACS(seg))); - omap_writel(0x0004a1b3, EMIFS_CCS(seg)); /* synch mode 4 etc */ - omap_writel(0x00000000, EMIFS_ACS(seg)); /* OE hold/setup */ -- -- /* the CF I/O IRQ is really active-low */ -- irq_set_irq_type(gpio_to_irq(62), IRQ_TYPE_EDGE_FALLING); - } - - static struct gpiod_lookup_table osk_usb_gpio_table = { - .dev_id = "ohci", - .table = { - /* Power GPIO on the I2C-attached TPS65010 */ -- GPIO_LOOKUP("tps65010", 0, "power", GPIO_ACTIVE_HIGH), -+ GPIO_LOOKUP("tps65010", OSK_TPS_GPIO_USB_PWR_EN, "power", -+ GPIO_ACTIVE_HIGH), - GPIO_LOOKUP(OMAP_GPIO_LABEL, 9, "overcurrent", - GPIO_ACTIVE_HIGH), -+ { } - }, - }; - -@@ -341,8 +352,25 @@ static struct omap_usb_config osk_usb_config __initdata = { - - #define EMIFS_CS3_VAL (0x88013141) - -+static struct gpiod_lookup_table osk_irq_gpio_table = { -+ .dev_id = NULL, -+ .table = { -+ /* GPIO used for SMC91x IRQ */ -+ GPIO_LOOKUP(OMAP_GPIO_LABEL, 0, "smc_irq", -+ GPIO_ACTIVE_HIGH), -+ /* GPIO used for CF IRQ */ -+ GPIO_LOOKUP("gpio-48-63", 14, "cf_irq", -+ GPIO_ACTIVE_HIGH), -+ /* GPIO used by the TPS65010 chip */ -+ GPIO_LOOKUP("mpuio", 1, "tps65010", -+ GPIO_ACTIVE_HIGH), -+ { } -+ }, -+}; -+ - static void __init osk_init(void) - { -+ struct gpio_desc *d; - u32 l; - - osk_init_smc91x(); -@@ -359,10 +387,31 @@ static void __init osk_init(void) - - osk_flash_resource.end = osk_flash_resource.start = omap_cs3_phys(); - osk_flash_resource.end += SZ_32M - 1; -- osk5912_smc91x_resources[1].start = gpio_to_irq(0); -- osk5912_smc91x_resources[1].end = gpio_to_irq(0); -- osk5912_cf_resources[0].start = gpio_to_irq(62); -- osk5912_cf_resources[0].end = gpio_to_irq(62); -+ -+ /* -+ * Add the GPIOs to be used as IRQs and immediately look them up -+ * to be passed as an IRQ resource. This is ugly but should work -+ * until the day we convert to device tree. -+ */ -+ gpiod_add_lookup_table(&osk_irq_gpio_table); -+ -+ d = gpiod_get(NULL, "smc_irq", GPIOD_IN); -+ if (IS_ERR(d)) { -+ pr_err("Unable to get SMC IRQ GPIO descriptor\n"); -+ } else { -+ irq_set_irq_type(gpiod_to_irq(d), IRQ_TYPE_EDGE_RISING); -+ osk5912_smc91x_resources[1] = DEFINE_RES_IRQ(gpiod_to_irq(d)); -+ } -+ -+ d = gpiod_get(NULL, "cf_irq", GPIOD_IN); -+ if (IS_ERR(d)) { -+ pr_err("Unable to get CF IRQ GPIO descriptor\n"); -+ } else { -+ /* the CF I/O IRQ is really active-low */ -+ irq_set_irq_type(gpiod_to_irq(d), IRQ_TYPE_EDGE_FALLING); -+ osk5912_cf_resources[0] = DEFINE_RES_IRQ(gpiod_to_irq(d)); -+ } -+ - platform_add_devices(osk5912_devices, ARRAY_SIZE(osk5912_devices)); - - l = omap_readl(USB_TRANSCEIVER_CTRL); -@@ -372,13 +421,15 @@ static void __init osk_init(void) - gpiod_add_lookup_table(&osk_usb_gpio_table); - omap1_usb_init(&osk_usb_config); - -+ omap_serial_init(); -+ - /* irq for tps65010 chip */ - /* bootloader effectively does: omap_cfg_reg(U19_1610_MPUIO1); */ -- if (gpio_request(OMAP_MPUIO(1), "tps65010") == 0) -- gpio_direction_input(OMAP_MPUIO(1)); -- -- omap_serial_init(); -- osk_i2c_board_info[0].irq = gpio_to_irq(OMAP_MPUIO(1)); -+ d = gpiod_get(NULL, "tps65010", GPIOD_IN); -+ if (IS_ERR(d)) -+ pr_err("Unable to get TPS65010 IRQ GPIO descriptor\n"); -+ else -+ osk_i2c_board_info[0].irq = gpiod_to_irq(d); - omap_register_i2c_bus(1, 400, osk_i2c_board_info, - ARRAY_SIZE(osk_i2c_board_info)); - } -diff --git a/drivers/mfd/tps65010.c b/drivers/mfd/tps65010.c -index fb733288cca3b..faea4ff44c6fe 100644 ---- a/drivers/mfd/tps65010.c -+++ b/drivers/mfd/tps65010.c -@@ -506,12 +506,8 @@ static void tps65010_remove(struct i2c_client *client) - struct tps65010 *tps = i2c_get_clientdata(client); - struct tps65010_board *board = dev_get_platdata(&client->dev); - -- if (board && board->teardown) { -- int status = board->teardown(client, board->context); -- if (status < 0) -- dev_dbg(&client->dev, "board %s %s err %d\n", -- "teardown", client->name, status); -- } -+ if (board && board->teardown) -+ board->teardown(client, &tps->chip); - if (client->irq > 0) - free_irq(client->irq, tps); - cancel_delayed_work_sync(&tps->work); -@@ -619,7 +615,7 @@ static int tps65010_probe(struct i2c_client *client) - tps, DEBUG_FOPS); - - /* optionally register GPIOs */ -- if (board && board->base != 0) { -+ if (board) { - tps->outmask = board->outmask; - - tps->chip.label = client->name; -@@ -632,7 +628,7 @@ static int tps65010_probe(struct i2c_client *client) - /* NOTE: only partial support for inputs; nyet IRQs */ - tps->chip.get = tps65010_gpio_get; - -- tps->chip.base = board->base; -+ tps->chip.base = -1; - tps->chip.ngpio = 7; - tps->chip.can_sleep = 1; - -@@ -641,7 +637,7 @@ static int tps65010_probe(struct i2c_client *client) - dev_err(&client->dev, "can't add gpiochip, err %d\n", - status); - else if (board->setup) { -- status = board->setup(client, board->context); -+ status = board->setup(client, &tps->chip); - if (status < 0) { - dev_dbg(&client->dev, - "board %s %s err %d\n", -diff --git a/include/linux/mfd/tps65010.h b/include/linux/mfd/tps65010.h -index a1fb9bc5311de..5edf1aef11185 100644 ---- a/include/linux/mfd/tps65010.h -+++ b/include/linux/mfd/tps65010.h -@@ -28,6 +28,8 @@ - #ifndef __LINUX_I2C_TPS65010_H - #define __LINUX_I2C_TPS65010_H - -+struct gpio_chip; -+ - /* - * ---------------------------------------------------------------------------- - * Registers, all 8 bits -@@ -176,12 +178,10 @@ struct i2c_client; - - /** - * struct tps65010_board - packages GPIO and LED lines -- * @base: the GPIO number to assign to GPIO-1 - * @outmask: bit (N-1) is set to allow GPIO-N to be used as an - * (open drain) output - * @setup: optional callback issued once the GPIOs are valid - * @teardown: optional callback issued before the GPIOs are invalidated -- * @context: optional parameter passed to setup() and teardown() - * - * Board data may be used to package the GPIO (and LED) lines for use - * in by the generic GPIO and LED frameworks. The first four GPIOs -@@ -193,12 +193,9 @@ struct i2c_client; - * devices in their initial states using these GPIOs. - */ - struct tps65010_board { -- int base; - unsigned outmask; -- -- int (*setup)(struct i2c_client *client, void *context); -- int (*teardown)(struct i2c_client *client, void *context); -- void *context; -+ int (*setup)(struct i2c_client *client, struct gpio_chip *gc); -+ void (*teardown)(struct i2c_client *client, struct gpio_chip *gc); - }; - - #endif /* __LINUX_I2C_TPS65010_H */ --- -2.39.2 - diff --git a/queue-6.4/arm-mmc-convert-old-mmci-omap-to-gpio-descriptors.patch b/queue-6.4/arm-mmc-convert-old-mmci-omap-to-gpio-descriptors.patch deleted file mode 100644 index 0a441e94c45..00000000000 --- a/queue-6.4/arm-mmc-convert-old-mmci-omap-to-gpio-descriptors.patch +++ /dev/null @@ -1,384 +0,0 @@ -From 6ce4abab1795f49a307a94d14451d40c17f428d1 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Mon, 8 May 2023 23:20:07 +0200 -Subject: ARM/mmc: Convert old mmci-omap to GPIO descriptors - -From: Linus Walleij - -[ Upstream commit e519f0bb64efc2c9c8b67bb2d114dda458bdc34d ] - -A recent change to the OMAP driver making it use a dynamic GPIO -base created problems with some old OMAP1 board files, among -them Nokia 770, SX1 and also the OMAP2 Nokia n8x0. - -Fix up all instances of GPIOs being used for the MMC driver -by pushing the handling of power, slot selection and MMC -"cover" into the driver as optional GPIOs. - -This is maybe not the most perfect solution as the MMC -framework have some central handlers for some of the -stuff, but it at least makes the situtation better and -solves the immediate issue. - -Fixes: 92bf78b33b0b ("gpio: omap: use dynamic allocation of base") -Acked-by: Ulf Hansson -Signed-off-by: Linus Walleij -Signed-off-by: Sasha Levin ---- - arch/arm/mach-omap1/board-nokia770.c | 43 ++++--------- - arch/arm/mach-omap1/board-sx1-mmc.c | 1 - - arch/arm/mach-omap2/board-n8x0.c | 85 ++++++++------------------ - drivers/mmc/host/omap.c | 46 +++++++++++++- - include/linux/platform_data/mmc-omap.h | 2 - - 5 files changed, 83 insertions(+), 94 deletions(-) - -diff --git a/arch/arm/mach-omap1/board-nokia770.c b/arch/arm/mach-omap1/board-nokia770.c -index dde74694cb4c0..9583417f5bea8 100644 ---- a/arch/arm/mach-omap1/board-nokia770.c -+++ b/arch/arm/mach-omap1/board-nokia770.c -@@ -184,27 +184,23 @@ static struct omap_usb_config nokia770_usb_config __initdata = { - - #if IS_ENABLED(CONFIG_MMC_OMAP) - --#define NOKIA770_GPIO_MMC_POWER 41 --#define NOKIA770_GPIO_MMC_SWITCH 23 -- --static int nokia770_mmc_set_power(struct device *dev, int slot, int power_on, -- int vdd) --{ -- gpio_set_value(NOKIA770_GPIO_MMC_POWER, power_on); -- return 0; --} -- --static int nokia770_mmc_get_cover_state(struct device *dev, int slot) --{ -- return gpio_get_value(NOKIA770_GPIO_MMC_SWITCH); --} -+static struct gpiod_lookup_table nokia770_mmc_gpio_table = { -+ .dev_id = "mmci-omap.1", -+ .table = { -+ /* Slot index 0, VSD power, GPIO 41 */ -+ GPIO_LOOKUP_IDX("gpio-32-47", 9, -+ "vsd", 0, GPIO_ACTIVE_HIGH), -+ /* Slot index 0, switch, GPIO 23 */ -+ GPIO_LOOKUP_IDX("gpio-16-31", 7, -+ "cover", 0, GPIO_ACTIVE_HIGH), -+ { } -+ }, -+}; - - static struct omap_mmc_platform_data nokia770_mmc2_data = { - .nr_slots = 1, - .max_freq = 12000000, - .slots[0] = { -- .set_power = nokia770_mmc_set_power, -- .get_cover_state = nokia770_mmc_get_cover_state, - .ocr_mask = MMC_VDD_32_33|MMC_VDD_33_34, - .name = "mmcblk", - }, -@@ -214,20 +210,7 @@ static struct omap_mmc_platform_data *nokia770_mmc_data[OMAP16XX_NR_MMC]; - - static void __init nokia770_mmc_init(void) - { -- int ret; -- -- ret = gpio_request(NOKIA770_GPIO_MMC_POWER, "MMC power"); -- if (ret < 0) -- return; -- gpio_direction_output(NOKIA770_GPIO_MMC_POWER, 0); -- -- ret = gpio_request(NOKIA770_GPIO_MMC_SWITCH, "MMC cover"); -- if (ret < 0) { -- gpio_free(NOKIA770_GPIO_MMC_POWER); -- return; -- } -- gpio_direction_input(NOKIA770_GPIO_MMC_SWITCH); -- -+ gpiod_add_lookup_table(&nokia770_mmc_gpio_table); - /* Only the second MMC controller is used */ - nokia770_mmc_data[1] = &nokia770_mmc2_data; - omap1_init_mmc(nokia770_mmc_data, OMAP16XX_NR_MMC); -diff --git a/arch/arm/mach-omap1/board-sx1-mmc.c b/arch/arm/mach-omap1/board-sx1-mmc.c -index f1c160924dfe4..f183a8448a7b0 100644 ---- a/arch/arm/mach-omap1/board-sx1-mmc.c -+++ b/arch/arm/mach-omap1/board-sx1-mmc.c -@@ -9,7 +9,6 @@ - * Copyright (C) 2007 Instituto Nokia de Tecnologia - INdT - */ - --#include - #include - - #include "hardware.h" -diff --git a/arch/arm/mach-omap2/board-n8x0.c b/arch/arm/mach-omap2/board-n8x0.c -index 3353b0a923d96..50b88eb23f9f8 100644 ---- a/arch/arm/mach-omap2/board-n8x0.c -+++ b/arch/arm/mach-omap2/board-n8x0.c -@@ -11,6 +11,7 @@ - #include - #include - #include -+#include - #include - #include - #include -@@ -170,22 +171,32 @@ static struct spi_board_info n800_spi_board_info[] __initdata = { - * GPIO23 and GPIO9 slot 2 EMMC on N810 - * - */ --#define N8X0_SLOT_SWITCH_GPIO 96 --#define N810_EMMC_VSD_GPIO 23 --#define N810_EMMC_VIO_GPIO 9 -- - static int slot1_cover_open; - static int slot2_cover_open; - static struct device *mmc_device; - --static int n8x0_mmc_switch_slot(struct device *dev, int slot) --{ --#ifdef CONFIG_MMC_DEBUG -- dev_dbg(dev, "Choose slot %d\n", slot + 1); --#endif -- gpio_set_value(N8X0_SLOT_SWITCH_GPIO, slot); -- return 0; --} -+static struct gpiod_lookup_table nokia8xx_mmc_gpio_table = { -+ .dev_id = "mmci-omap.0", -+ .table = { -+ /* Slot switch, GPIO 96 */ -+ GPIO_LOOKUP("gpio-80-111", 16, -+ "switch", GPIO_ACTIVE_HIGH), -+ { } -+ }, -+}; -+ -+static struct gpiod_lookup_table nokia810_mmc_gpio_table = { -+ .dev_id = "mmci-omap.0", -+ .table = { -+ /* Slot index 1, VSD power, GPIO 23 */ -+ GPIO_LOOKUP_IDX("gpio-16-31", 7, -+ "vsd", 1, GPIO_ACTIVE_HIGH), -+ /* Slot index 1, VIO power, GPIO 9 */ -+ GPIO_LOOKUP_IDX("gpio-0-15", 9, -+ "vsd", 1, GPIO_ACTIVE_HIGH), -+ { } -+ }, -+}; - - static int n8x0_mmc_set_power_menelaus(struct device *dev, int slot, - int power_on, int vdd) -@@ -256,31 +267,13 @@ static int n8x0_mmc_set_power_menelaus(struct device *dev, int slot, - return 0; - } - --static void n810_set_power_emmc(struct device *dev, -- int power_on) --{ -- dev_dbg(dev, "Set EMMC power %s\n", power_on ? "on" : "off"); -- -- if (power_on) { -- gpio_set_value(N810_EMMC_VSD_GPIO, 1); -- msleep(1); -- gpio_set_value(N810_EMMC_VIO_GPIO, 1); -- msleep(1); -- } else { -- gpio_set_value(N810_EMMC_VIO_GPIO, 0); -- msleep(50); -- gpio_set_value(N810_EMMC_VSD_GPIO, 0); -- msleep(50); -- } --} -- - static int n8x0_mmc_set_power(struct device *dev, int slot, int power_on, - int vdd) - { - if (board_is_n800() || slot == 0) - return n8x0_mmc_set_power_menelaus(dev, slot, power_on, vdd); - -- n810_set_power_emmc(dev, power_on); -+ /* The n810 power will be handled by GPIO code in the driver */ - - return 0; - } -@@ -418,13 +411,6 @@ static void n8x0_mmc_shutdown(struct device *dev) - static void n8x0_mmc_cleanup(struct device *dev) - { - menelaus_unregister_mmc_callback(); -- -- gpio_free(N8X0_SLOT_SWITCH_GPIO); -- -- if (board_is_n810()) { -- gpio_free(N810_EMMC_VSD_GPIO); -- gpio_free(N810_EMMC_VIO_GPIO); -- } - } - - /* -@@ -433,7 +419,6 @@ static void n8x0_mmc_cleanup(struct device *dev) - */ - static struct omap_mmc_platform_data mmc1_data = { - .nr_slots = 0, -- .switch_slot = n8x0_mmc_switch_slot, - .init = n8x0_mmc_late_init, - .cleanup = n8x0_mmc_cleanup, - .shutdown = n8x0_mmc_shutdown, -@@ -463,14 +448,9 @@ static struct omap_mmc_platform_data mmc1_data = { - - static struct omap_mmc_platform_data *mmc_data[OMAP24XX_NR_MMC]; - --static struct gpio n810_emmc_gpios[] __initdata = { -- { N810_EMMC_VSD_GPIO, GPIOF_OUT_INIT_LOW, "MMC slot 2 Vddf" }, -- { N810_EMMC_VIO_GPIO, GPIOF_OUT_INIT_LOW, "MMC slot 2 Vdd" }, --}; -- - static void __init n8x0_mmc_init(void) - { -- int err; -+ gpiod_add_lookup_table(&nokia8xx_mmc_gpio_table); - - if (board_is_n810()) { - mmc1_data.slots[0].name = "external"; -@@ -483,20 +463,7 @@ static void __init n8x0_mmc_init(void) - */ - mmc1_data.slots[1].name = "internal"; - mmc1_data.slots[1].ban_openended = 1; -- } -- -- err = gpio_request_one(N8X0_SLOT_SWITCH_GPIO, GPIOF_OUT_INIT_LOW, -- "MMC slot switch"); -- if (err) -- return; -- -- if (board_is_n810()) { -- err = gpio_request_array(n810_emmc_gpios, -- ARRAY_SIZE(n810_emmc_gpios)); -- if (err) { -- gpio_free(N8X0_SLOT_SWITCH_GPIO); -- return; -- } -+ gpiod_add_lookup_table(&nokia810_mmc_gpio_table); - } - - mmc1_data.nr_slots = 2; -diff --git a/drivers/mmc/host/omap.c b/drivers/mmc/host/omap.c -index 86454f1182bb1..6a259563690d6 100644 ---- a/drivers/mmc/host/omap.c -+++ b/drivers/mmc/host/omap.c -@@ -26,6 +26,7 @@ - #include - #include - #include -+#include - #include - - -@@ -111,6 +112,9 @@ struct mmc_omap_slot { - struct mmc_request *mrq; - struct mmc_omap_host *host; - struct mmc_host *mmc; -+ struct gpio_desc *vsd; -+ struct gpio_desc *vio; -+ struct gpio_desc *cover; - struct omap_mmc_slot_data *pdata; - }; - -@@ -133,6 +137,7 @@ struct mmc_omap_host { - int irq; - unsigned char bus_mode; - unsigned int reg_shift; -+ struct gpio_desc *slot_switch; - - struct work_struct cmd_abort_work; - unsigned abort:1; -@@ -216,8 +221,13 @@ static void mmc_omap_select_slot(struct mmc_omap_slot *slot, int claimed) - - if (host->current_slot != slot) { - OMAP_MMC_WRITE(host, CON, slot->saved_con & 0xFC00); -- if (host->pdata->switch_slot != NULL) -- host->pdata->switch_slot(mmc_dev(slot->mmc), slot->id); -+ if (host->slot_switch) -+ /* -+ * With two slots and a simple GPIO switch, setting -+ * the GPIO to 0 selects slot ID 0, setting it to 1 -+ * selects slot ID 1. -+ */ -+ gpiod_set_value(host->slot_switch, slot->id); - host->current_slot = slot; - } - -@@ -297,6 +307,9 @@ static void mmc_omap_release_slot(struct mmc_omap_slot *slot, int clk_enabled) - static inline - int mmc_omap_cover_is_open(struct mmc_omap_slot *slot) - { -+ /* If we have a GPIO then use that */ -+ if (slot->cover) -+ return gpiod_get_value(slot->cover); - if (slot->pdata->get_cover_state) - return slot->pdata->get_cover_state(mmc_dev(slot->mmc), - slot->id); -@@ -1106,6 +1119,11 @@ static void mmc_omap_set_power(struct mmc_omap_slot *slot, int power_on, - - host = slot->host; - -+ if (slot->vsd) -+ gpiod_set_value(slot->vsd, power_on); -+ if (slot->vio) -+ gpiod_set_value(slot->vio, power_on); -+ - if (slot->pdata->set_power != NULL) - slot->pdata->set_power(mmc_dev(slot->mmc), slot->id, power_on, - vdd); -@@ -1240,6 +1258,23 @@ static int mmc_omap_new_slot(struct mmc_omap_host *host, int id) - slot->power_mode = MMC_POWER_UNDEFINED; - slot->pdata = &host->pdata->slots[id]; - -+ /* Check for some optional GPIO controls */ -+ slot->vsd = gpiod_get_index_optional(host->dev, "vsd", -+ id, GPIOD_OUT_LOW); -+ if (IS_ERR(slot->vsd)) -+ return dev_err_probe(host->dev, PTR_ERR(slot->vsd), -+ "error looking up VSD GPIO\n"); -+ slot->vio = gpiod_get_index_optional(host->dev, "vio", -+ id, GPIOD_OUT_LOW); -+ if (IS_ERR(slot->vio)) -+ return dev_err_probe(host->dev, PTR_ERR(slot->vio), -+ "error looking up VIO GPIO\n"); -+ slot->cover = gpiod_get_index_optional(host->dev, "cover", -+ id, GPIOD_IN); -+ if (IS_ERR(slot->cover)) -+ return dev_err_probe(host->dev, PTR_ERR(slot->cover), -+ "error looking up cover switch GPIO\n"); -+ - host->slots[id] = slot; - - mmc->caps = 0; -@@ -1349,6 +1384,13 @@ static int mmc_omap_probe(struct platform_device *pdev) - if (IS_ERR(host->virt_base)) - return PTR_ERR(host->virt_base); - -+ host->slot_switch = gpiod_get_optional(host->dev, "switch", -+ GPIOD_OUT_LOW); -+ if (IS_ERR(host->slot_switch)) -+ return dev_err_probe(host->dev, PTR_ERR(host->slot_switch), -+ "error looking up slot switch GPIO\n"); -+ -+ - INIT_WORK(&host->slot_release_work, mmc_omap_slot_release_work); - INIT_WORK(&host->send_stop_work, mmc_omap_send_stop_work); - -diff --git a/include/linux/platform_data/mmc-omap.h b/include/linux/platform_data/mmc-omap.h -index 91051e9907f34..054d0c3c5ec58 100644 ---- a/include/linux/platform_data/mmc-omap.h -+++ b/include/linux/platform_data/mmc-omap.h -@@ -20,8 +20,6 @@ struct omap_mmc_platform_data { - * maximum frequency on the MMC bus */ - unsigned int max_freq; - -- /* switch the bus to a new slot */ -- int (*switch_slot)(struct device *dev, int slot); - /* initialize board-specific MMC functionality, can be NULL if - * not supported */ - int (*init)(struct device *dev); --- -2.39.2 - diff --git a/queue-6.4/arm-musb-omap2-remove-global-gpio-numbers-from-tusb6.patch b/queue-6.4/arm-musb-omap2-remove-global-gpio-numbers-from-tusb6.patch deleted file mode 100644 index 2f9e7aff354..00000000000 --- a/queue-6.4/arm-musb-omap2-remove-global-gpio-numbers-from-tusb6.patch +++ /dev/null @@ -1,413 +0,0 @@ -From 43c778ca81aa34c11661638bd6119fac09a91ffa Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Sun, 30 Apr 2023 21:38:24 +0200 -Subject: ARM/musb: omap2: Remove global GPIO numbers from TUSB6010 - -From: Linus Walleij - -[ Upstream commit 8e0285ab95a9baf374f2c13eb152221c8ecb3f28 ] - -The TUSB6010 (MUSB) device is picking up some GPIO lines -hardcoded by number and passing on to the TUSB6010 device -when registering it. - -Instead of nasty workarounds, provide a GPIO descriptor -table and then make the TUSB6010 MUSB glue driver pick up -the GPIO lines directly, convert it to an IRQ and pass down -to the MUSB driver. OMAP2 is the only system using the -TUSB6010. - -Stash the GPIO descriptors in the glue layer and use -then to power up and down the TUSB6010 on-demand, instead -of using boardfile callbacks. - -Since the OMAP2 boards are the only boards using the -.set_power() and .board_set_power() callbacks, we can -just delete them as the power is now handled directly -in the TUSB6010 glue code. - -Cc: Bin Liu -Cc: linux-usb@vger.kernel.org -Fixes: 92bf78b33b0b ("gpio: omap: use dynamic allocation of base") -Acked-by: Greg Kroah-Hartman -Signed-off-by: Linus Walleij -Signed-off-by: Sasha Levin ---- - arch/arm/mach-omap2/board-n8x0.c | 71 ++++++++---------------------- - arch/arm/mach-omap2/usb-tusb6010.c | 20 ++------- - arch/arm/mach-omap2/usb-tusb6010.h | 12 +++++ - drivers/usb/musb/musb_core.c | 1 - - drivers/usb/musb/musb_core.h | 2 - - drivers/usb/musb/tusb6010.c | 53 ++++++++++++++++------ - include/linux/usb/musb.h | 13 ------ - 7 files changed, 73 insertions(+), 99 deletions(-) - create mode 100644 arch/arm/mach-omap2/usb-tusb6010.h - -diff --git a/arch/arm/mach-omap2/board-n8x0.c b/arch/arm/mach-omap2/board-n8x0.c -index 50b88eb23f9f8..564bf80a26212 100644 ---- a/arch/arm/mach-omap2/board-n8x0.c -+++ b/arch/arm/mach-omap2/board-n8x0.c -@@ -10,8 +10,8 @@ - - #include - #include --#include - #include -+#include - #include - #include - #include -@@ -29,13 +29,12 @@ - - #include "common.h" - #include "mmc.h" -+#include "usb-tusb6010.h" - #include "soc.h" - #include "common-board-devices.h" - - #define TUSB6010_ASYNC_CS 1 - #define TUSB6010_SYNC_CS 4 --#define TUSB6010_GPIO_INT 58 --#define TUSB6010_GPIO_ENABLE 0 - #define TUSB6010_DMACHAN 0x3f - - #define NOKIA_N810_WIMAX (1 << 2) -@@ -62,37 +61,6 @@ static void board_check_revision(void) - } - - #if IS_ENABLED(CONFIG_USB_MUSB_TUSB6010) --/* -- * Enable or disable power to TUSB6010. When enabling, turn on 3.3 V and -- * 1.5 V voltage regulators of PM companion chip. Companion chip will then -- * provide then PGOOD signal to TUSB6010 which will release it from reset. -- */ --static int tusb_set_power(int state) --{ -- int i, retval = 0; -- -- if (state) { -- gpio_set_value(TUSB6010_GPIO_ENABLE, 1); -- msleep(1); -- -- /* Wait until TUSB6010 pulls INT pin down */ -- i = 100; -- while (i && gpio_get_value(TUSB6010_GPIO_INT)) { -- msleep(1); -- i--; -- } -- -- if (!i) { -- printk(KERN_ERR "tusb: powerup failed\n"); -- retval = -ENODEV; -- } -- } else { -- gpio_set_value(TUSB6010_GPIO_ENABLE, 0); -- msleep(10); -- } -- -- return retval; --} - - static struct musb_hdrc_config musb_config = { - .multipoint = 1, -@@ -103,39 +71,36 @@ static struct musb_hdrc_config musb_config = { - - static struct musb_hdrc_platform_data tusb_data = { - .mode = MUSB_OTG, -- .set_power = tusb_set_power, - .min_power = 25, /* x2 = 50 mA drawn from VBUS as peripheral */ - .power = 100, /* Max 100 mA VBUS for host mode */ - .config = &musb_config, - }; - -+static struct gpiod_lookup_table tusb_gpio_table = { -+ .dev_id = "musb-tusb", -+ .table = { -+ GPIO_LOOKUP("gpio-0-15", 0, "enable", -+ GPIO_ACTIVE_HIGH), -+ GPIO_LOOKUP("gpio-48-63", 10, "int", -+ GPIO_ACTIVE_HIGH), -+ { } -+ }, -+}; -+ - static void __init n8x0_usb_init(void) - { - int ret = 0; -- static const char announce[] __initconst = KERN_INFO "TUSB 6010\n"; -- -- /* PM companion chip power control pin */ -- ret = gpio_request_one(TUSB6010_GPIO_ENABLE, GPIOF_OUT_INIT_LOW, -- "TUSB6010 enable"); -- if (ret != 0) { -- printk(KERN_ERR "Could not get TUSB power GPIO%i\n", -- TUSB6010_GPIO_ENABLE); -- return; -- } -- tusb_set_power(0); - -+ gpiod_add_lookup_table(&tusb_gpio_table); - ret = tusb6010_setup_interface(&tusb_data, TUSB6010_REFCLK_19, 2, -- TUSB6010_ASYNC_CS, TUSB6010_SYNC_CS, -- TUSB6010_GPIO_INT, TUSB6010_DMACHAN); -+ TUSB6010_ASYNC_CS, TUSB6010_SYNC_CS, -+ TUSB6010_DMACHAN); - if (ret != 0) -- goto err; -+ return; - -- printk(announce); -+ pr_info("TUSB 6010\n"); - - return; -- --err: -- gpio_free(TUSB6010_GPIO_ENABLE); - } - #else - -diff --git a/arch/arm/mach-omap2/usb-tusb6010.c b/arch/arm/mach-omap2/usb-tusb6010.c -index 18fa52f828dc7..b46c254c2bc41 100644 ---- a/arch/arm/mach-omap2/usb-tusb6010.c -+++ b/arch/arm/mach-omap2/usb-tusb6010.c -@@ -11,12 +11,12 @@ - #include - #include - #include --#include - #include - #include - - #include - -+#include "usb-tusb6010.h" - #include "gpmc.h" - - static u8 async_cs, sync_cs; -@@ -132,10 +132,6 @@ static struct resource tusb_resources[] = { - { /* Synchronous access */ - .flags = IORESOURCE_MEM, - }, -- { /* IRQ */ -- .name = "mc", -- .flags = IORESOURCE_IRQ, -- }, - }; - - static u64 tusb_dmamask = ~(u32)0; -@@ -154,9 +150,9 @@ static struct platform_device tusb_device = { - - /* this may be called only from board-*.c setup code */ - int __init tusb6010_setup_interface(struct musb_hdrc_platform_data *data, -- unsigned ps_refclk, unsigned waitpin, -- unsigned async, unsigned sync, -- unsigned irq, unsigned dmachan) -+ unsigned int ps_refclk, unsigned int waitpin, -+ unsigned int async, unsigned int sync, -+ unsigned int dmachan) - { - int status; - static char error[] __initdata = -@@ -192,14 +188,6 @@ int __init tusb6010_setup_interface(struct musb_hdrc_platform_data *data, - if (status < 0) - return status; - -- /* IRQ */ -- status = gpio_request_one(irq, GPIOF_IN, "TUSB6010 irq"); -- if (status < 0) { -- printk(error, 3, status); -- return status; -- } -- tusb_resources[2].start = gpio_to_irq(irq); -- - /* set up memory timings ... can speed them up later */ - if (!ps_refclk) { - printk(error, 4, status); -diff --git a/arch/arm/mach-omap2/usb-tusb6010.h b/arch/arm/mach-omap2/usb-tusb6010.h -new file mode 100644 -index 0000000000000..d210ff6238c26 ---- /dev/null -+++ b/arch/arm/mach-omap2/usb-tusb6010.h -@@ -0,0 +1,12 @@ -+/* SPDX-License-Identifier: GPL-2.0 */ -+ -+#ifndef __USB_TUSB6010_H -+#define __USB_TUSB6010_H -+ -+extern int __init tusb6010_setup_interface( -+ struct musb_hdrc_platform_data *data, -+ unsigned int ps_refclk, unsigned int waitpin, -+ unsigned int async_cs, unsigned int sync_cs, -+ unsigned int dmachan); -+ -+#endif /* __USB_TUSB6010_H */ -diff --git a/drivers/usb/musb/musb_core.c b/drivers/usb/musb/musb_core.c -index d162afbbe19f7..ecbd3784bec36 100644 ---- a/drivers/usb/musb/musb_core.c -+++ b/drivers/usb/musb/musb_core.c -@@ -2330,7 +2330,6 @@ musb_init_controller(struct device *dev, int nIrq, void __iomem *ctrl) - - spin_lock_init(&musb->lock); - spin_lock_init(&musb->list_lock); -- musb->board_set_power = plat->set_power; - musb->min_power = plat->min_power; - musb->ops = plat->platform_ops; - musb->port_mode = plat->mode; -diff --git a/drivers/usb/musb/musb_core.h b/drivers/usb/musb/musb_core.h -index b7588d11cfc59..91b5b6b66f963 100644 ---- a/drivers/usb/musb/musb_core.h -+++ b/drivers/usb/musb/musb_core.h -@@ -352,8 +352,6 @@ struct musb { - u16 epmask; - u8 nr_endpoints; - -- int (*board_set_power)(int state); -- - u8 min_power; /* vbus for periph, in mA/2 */ - - enum musb_mode port_mode; -diff --git a/drivers/usb/musb/tusb6010.c b/drivers/usb/musb/tusb6010.c -index a1f29dbc62e6e..cbc707fe570fa 100644 ---- a/drivers/usb/musb/tusb6010.c -+++ b/drivers/usb/musb/tusb6010.c -@@ -11,6 +11,8 @@ - * interface. - */ - -+#include -+#include - #include - #include - #include -@@ -30,6 +32,8 @@ struct tusb6010_glue { - struct device *dev; - struct platform_device *musb; - struct platform_device *phy; -+ struct gpio_desc *enable; -+ struct gpio_desc *intpin; - }; - - static void tusb_musb_set_vbus(struct musb *musb, int is_on); -@@ -1021,16 +1025,29 @@ static void tusb_setup_cpu_interface(struct musb *musb) - - static int tusb_musb_start(struct musb *musb) - { -+ struct tusb6010_glue *glue = dev_get_drvdata(musb->controller->parent); - void __iomem *tbase = musb->ctrl_base; -- int ret = 0; - unsigned long flags; - u32 reg; -+ int i; - -- if (musb->board_set_power) -- ret = musb->board_set_power(1); -- if (ret != 0) { -- printk(KERN_ERR "tusb: Cannot enable TUSB6010\n"); -- return ret; -+ /* -+ * Enable or disable power to TUSB6010. When enabling, turn on 3.3 V and -+ * 1.5 V voltage regulators of PM companion chip. Companion chip will then -+ * provide then PGOOD signal to TUSB6010 which will release it from reset. -+ */ -+ gpiod_set_value(glue->enable, 1); -+ msleep(1); -+ -+ /* Wait for 100ms until TUSB6010 pulls INT pin down */ -+ i = 100; -+ while (i && gpiod_get_value(glue->intpin)) { -+ msleep(1); -+ i--; -+ } -+ if (!i) { -+ pr_err("tusb: Powerup respones failed\n"); -+ return -ENODEV; - } - - spin_lock_irqsave(&musb->lock, flags); -@@ -1083,8 +1100,8 @@ static int tusb_musb_start(struct musb *musb) - err: - spin_unlock_irqrestore(&musb->lock, flags); - -- if (musb->board_set_power) -- musb->board_set_power(0); -+ gpiod_set_value(glue->enable, 0); -+ msleep(10); - - return -ENODEV; - } -@@ -1158,11 +1175,13 @@ static int tusb_musb_init(struct musb *musb) - - static int tusb_musb_exit(struct musb *musb) - { -+ struct tusb6010_glue *glue = dev_get_drvdata(musb->controller->parent); -+ - del_timer_sync(&musb->dev_timer); - the_musb = NULL; - -- if (musb->board_set_power) -- musb->board_set_power(0); -+ gpiod_set_value(glue->enable, 0); -+ msleep(10); - - iounmap(musb->sync_va); - -@@ -1218,6 +1237,15 @@ static int tusb_probe(struct platform_device *pdev) - - glue->dev = &pdev->dev; - -+ glue->enable = devm_gpiod_get(glue->dev, "enable", GPIOD_OUT_LOW); -+ if (IS_ERR(glue->enable)) -+ return dev_err_probe(glue->dev, PTR_ERR(glue->enable), -+ "could not obtain power on/off GPIO\n"); -+ glue->intpin = devm_gpiod_get(glue->dev, "int", GPIOD_IN); -+ if (IS_ERR(glue->intpin)) -+ return dev_err_probe(glue->dev, PTR_ERR(glue->intpin), -+ "could not obtain INT GPIO\n"); -+ - pdata->platform_ops = &tusb_ops; - - usb_phy_generic_register(); -@@ -1236,10 +1264,7 @@ static int tusb_probe(struct platform_device *pdev) - musb_resources[1].end = pdev->resource[1].end; - musb_resources[1].flags = pdev->resource[1].flags; - -- musb_resources[2].name = pdev->resource[2].name; -- musb_resources[2].start = pdev->resource[2].start; -- musb_resources[2].end = pdev->resource[2].end; -- musb_resources[2].flags = pdev->resource[2].flags; -+ musb_resources[2] = DEFINE_RES_IRQ_NAMED(gpiod_to_irq(glue->intpin), "mc"); - - pinfo = tusb_dev_info; - pinfo.parent = &pdev->dev; -diff --git a/include/linux/usb/musb.h b/include/linux/usb/musb.h -index e4a3ad3c800f5..3963e55e88a31 100644 ---- a/include/linux/usb/musb.h -+++ b/include/linux/usb/musb.h -@@ -99,9 +99,6 @@ struct musb_hdrc_platform_data { - /* (HOST or OTG) program PHY for external Vbus */ - unsigned extvbus:1; - -- /* Power the device on or off */ -- int (*set_power)(int state); -- - /* MUSB configuration-specific details */ - const struct musb_hdrc_config *config; - -@@ -135,14 +132,4 @@ static inline int musb_mailbox(enum musb_vbus_id_status status) - #define TUSB6010_REFCLK_24 41667 /* psec/clk @ 24.0 MHz XI */ - #define TUSB6010_REFCLK_19 52083 /* psec/clk @ 19.2 MHz CLKIN */ - --#ifdef CONFIG_ARCH_OMAP2 -- --extern int __init tusb6010_setup_interface( -- struct musb_hdrc_platform_data *data, -- unsigned ps_refclk, unsigned waitpin, -- unsigned async_cs, unsigned sync_cs, -- unsigned irq, unsigned dmachan); -- --#endif /* OMAP2 */ -- - #endif /* __LINUX_USB_MUSB_H */ --- -2.39.2 - diff --git a/queue-6.4/arm-omap1-drop-header-on-ams-delta.patch b/queue-6.4/arm-omap1-drop-header-on-ams-delta.patch deleted file mode 100644 index d394db34350..00000000000 --- a/queue-6.4/arm-omap1-drop-header-on-ams-delta.patch +++ /dev/null @@ -1,36 +0,0 @@ -From 1ac5251a7d910dc5be5d9092a345f41443cddf16 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Sun, 30 Apr 2023 11:40:28 +0200 -Subject: ARM: omap1: Drop header on AMS Delta - -From: Linus Walleij - -[ Upstream commit fa1ae0cd897b089b5cc05ab471518ad13db2d567 ] - -The AMS Delta board uses GPIO descriptors exclusively and -does not have any dependencies on the legacy -header, so just drop it. - -Acked-by: Janusz Krzysztofik -Fixes: 92bf78b33b0b ("gpio: omap: use dynamic allocation of base") -Signed-off-by: Linus Walleij -Signed-off-by: Sasha Levin ---- - arch/arm/mach-omap1/board-ams-delta.c | 1 - - 1 file changed, 1 deletion(-) - -diff --git a/arch/arm/mach-omap1/board-ams-delta.c b/arch/arm/mach-omap1/board-ams-delta.c -index 9108c871d129a..ac47ab9fe0964 100644 ---- a/arch/arm/mach-omap1/board-ams-delta.c -+++ b/arch/arm/mach-omap1/board-ams-delta.c -@@ -11,7 +11,6 @@ - #include - #include - #include --#include - #include - #include - #include --- -2.39.2 - diff --git a/queue-6.4/arm-omap1-exorcise-the-legacy-gpio-header.patch b/queue-6.4/arm-omap1-exorcise-the-legacy-gpio-header.patch deleted file mode 100644 index 21b80b35209..00000000000 --- a/queue-6.4/arm-omap1-exorcise-the-legacy-gpio-header.patch +++ /dev/null @@ -1,77 +0,0 @@ -From df12328f96206b90b89f1fd6f3a3354dd5637328 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Sun, 30 Apr 2023 19:56:37 +0200 -Subject: ARM: omap1: Exorcise the legacy GPIO header - -From: Linus Walleij - -[ Upstream commit c729baa8604226a8f878296bd145ab4046c80b12 ] - -After fixing all the offending users referencing the global GPIO -numberspace in OMAP1, a few sites still remain including the -legacy header for no reason. - -Delete the last remaining users, and OMAP1 is free from legacy -GPIO dependencies. - -Fixes: 92bf78b33b0b ("gpio: omap: use dynamic allocation of base") -Signed-off-by: Linus Walleij -Signed-off-by: Sasha Levin ---- - arch/arm/mach-omap1/devices.c | 1 - - arch/arm/mach-omap1/gpio15xx.c | 1 - - arch/arm/mach-omap1/gpio16xx.c | 1 - - arch/arm/mach-omap1/irq.c | 1 - - 4 files changed, 4 deletions(-) - -diff --git a/arch/arm/mach-omap1/devices.c b/arch/arm/mach-omap1/devices.c -index 5304699c7a97e..8b2c5f911e973 100644 ---- a/arch/arm/mach-omap1/devices.c -+++ b/arch/arm/mach-omap1/devices.c -@@ -6,7 +6,6 @@ - */ - - #include --#include - #include - #include - #include -diff --git a/arch/arm/mach-omap1/gpio15xx.c b/arch/arm/mach-omap1/gpio15xx.c -index 61fa26efd8653..6724af4925f24 100644 ---- a/arch/arm/mach-omap1/gpio15xx.c -+++ b/arch/arm/mach-omap1/gpio15xx.c -@@ -8,7 +8,6 @@ - * Charulatha V - */ - --#include - #include - #include - #include -diff --git a/arch/arm/mach-omap1/gpio16xx.c b/arch/arm/mach-omap1/gpio16xx.c -index cf052714b3f8a..55acec22fef4e 100644 ---- a/arch/arm/mach-omap1/gpio16xx.c -+++ b/arch/arm/mach-omap1/gpio16xx.c -@@ -8,7 +8,6 @@ - * Charulatha V - */ - --#include - #include - #include - -diff --git a/arch/arm/mach-omap1/irq.c b/arch/arm/mach-omap1/irq.c -index bfc7ab010ae28..af06a8753fdc3 100644 ---- a/arch/arm/mach-omap1/irq.c -+++ b/arch/arm/mach-omap1/irq.c -@@ -35,7 +35,6 @@ - * with this program; if not, write to the Free Software Foundation, Inc., - * 675 Mass Ave, Cambridge, MA 02139, USA. - */ --#include - #include - #include - #include --- -2.39.2 - diff --git a/queue-6.4/arm-omap1-fix-up-the-nokia-770-board-device-irqs.patch b/queue-6.4/arm-omap1-fix-up-the-nokia-770-board-device-irqs.patch deleted file mode 100644 index d088fb4591f..00000000000 --- a/queue-6.4/arm-omap1-fix-up-the-nokia-770-board-device-irqs.patch +++ /dev/null @@ -1,123 +0,0 @@ -From d3e462464d1a06e5529630b70c201201c2021af4 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Sun, 30 Apr 2023 11:12:54 +0200 -Subject: ARM: omap1: Fix up the Nokia 770 board device IRQs - -From: Linus Walleij - -[ Upstream commit 084b6f216778b4109123b396b531f12ff6c354e9 ] - -The platform devices on the Nokia 770 is using some -board-specific IRQs that get statically assigned to platform -devices in the boardfile. - -This does not work with dynamic IRQ chip bases. - -Utilize the NULL device to define some board-specific -GPIO lookups and use these to immediately look up the -same GPIOs, convert to IRQ numbers and pass as resources -to the devices. This is ugly but should work. - -Fixes: 92bf78b33b0b ("gpio: omap: use dynamic allocation of base") -Signed-off-by: Linus Walleij -Signed-off-by: Sasha Levin ---- - arch/arm/mach-omap1/board-nokia770.c | 58 +++++++++++++++++++++------- - 1 file changed, 45 insertions(+), 13 deletions(-) - -diff --git a/arch/arm/mach-omap1/board-nokia770.c b/arch/arm/mach-omap1/board-nokia770.c -index 9583417f5bea8..dd1a8f439fac4 100644 ---- a/arch/arm/mach-omap1/board-nokia770.c -+++ b/arch/arm/mach-omap1/board-nokia770.c -@@ -6,7 +6,7 @@ - */ - #include - #include --#include -+#include - #include - #include - #include -@@ -251,19 +251,25 @@ static struct i2c_board_info nokia770_i2c_board_info_2[] __initdata = { - - static void __init nokia770_cbus_init(void) - { -- const int retu_irq_gpio = 62; -- const int tahvo_irq_gpio = 40; -- -- if (gpio_request_one(retu_irq_gpio, GPIOF_IN, "Retu IRQ")) -- return; -- if (gpio_request_one(tahvo_irq_gpio, GPIOF_IN, "Tahvo IRQ")) { -- gpio_free(retu_irq_gpio); -- return; -+ struct gpio_desc *d; -+ int irq; -+ -+ d = gpiod_get(NULL, "retu_irq", GPIOD_IN); -+ if (IS_ERR(d)) { -+ pr_err("Unable to get CBUS Retu IRQ GPIO descriptor\n"); -+ } else { -+ irq = gpiod_to_irq(d); -+ irq_set_irq_type(irq, IRQ_TYPE_EDGE_RISING); -+ nokia770_i2c_board_info_2[0].irq = irq; -+ } -+ d = gpiod_get(NULL, "tahvo_irq", GPIOD_IN); -+ if (IS_ERR(d)) { -+ pr_err("Unable to get CBUS Tahvo IRQ GPIO descriptor\n"); -+ } else { -+ irq = gpiod_to_irq(d); -+ irq_set_irq_type(irq, IRQ_TYPE_EDGE_RISING); -+ nokia770_i2c_board_info_2[1].irq = irq; - } -- irq_set_irq_type(gpio_to_irq(retu_irq_gpio), IRQ_TYPE_EDGE_RISING); -- irq_set_irq_type(gpio_to_irq(tahvo_irq_gpio), IRQ_TYPE_EDGE_RISING); -- nokia770_i2c_board_info_2[0].irq = gpio_to_irq(retu_irq_gpio); -- nokia770_i2c_board_info_2[1].irq = gpio_to_irq(tahvo_irq_gpio); - i2c_register_board_info(2, nokia770_i2c_board_info_2, - ARRAY_SIZE(nokia770_i2c_board_info_2)); - device_create_managed_software_node(&nokia770_cbus_device.dev, -@@ -276,8 +282,26 @@ static void __init nokia770_cbus_init(void) - } - #endif /* CONFIG_I2C_CBUS_GPIO */ - -+static struct gpiod_lookup_table nokia770_irq_gpio_table = { -+ .dev_id = NULL, -+ .table = { -+ /* GPIO used by SPI device 1 */ -+ GPIO_LOOKUP("gpio-0-15", 15, "ads7846_irq", -+ GPIO_ACTIVE_HIGH), -+ /* GPIO used for retu IRQ */ -+ GPIO_LOOKUP("gpio-48-63", 15, "retu_irq", -+ GPIO_ACTIVE_HIGH), -+ /* GPIO used for tahvo IRQ */ -+ GPIO_LOOKUP("gpio-32-47", 8, "tahvo_irq", -+ GPIO_ACTIVE_HIGH), -+ { } -+ }, -+}; -+ - static void __init omap_nokia770_init(void) - { -+ struct gpio_desc *d; -+ - /* On Nokia 770, the SleepX signal is masked with an - * MPUIO line by default. It has to be unmasked for it - * to become functional */ -@@ -289,6 +313,14 @@ static void __init omap_nokia770_init(void) - - software_node_register_node_group(nokia770_gpiochip_nodes); - platform_add_devices(nokia770_devices, ARRAY_SIZE(nokia770_devices)); -+ -+ gpiod_add_lookup_table(&nokia770_irq_gpio_table); -+ d = gpiod_get(NULL, "ads7846_irq", GPIOD_IN); -+ if (IS_ERR(d)) -+ pr_err("Unable to get ADS7846 IRQ GPIO descriptor\n"); -+ else -+ nokia770_spi_board_info[1].irq = gpiod_to_irq(d); -+ - spi_register_board_info(nokia770_spi_board_info, - ARRAY_SIZE(nokia770_spi_board_info)); - omap_serial_init(); --- -2.39.2 - diff --git a/queue-6.4/arm-omap1-make-serial-wakeup-gpios-use-descriptors.patch b/queue-6.4/arm-omap1-make-serial-wakeup-gpios-use-descriptors.patch deleted file mode 100644 index c81f48132e5..00000000000 --- a/queue-6.4/arm-omap1-make-serial-wakeup-gpios-use-descriptors.patch +++ /dev/null @@ -1,136 +0,0 @@ -From 6393d6689002da559c53f83e99f969b502d2f740 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Sun, 30 Apr 2023 19:51:30 +0200 -Subject: ARM: omap1: Make serial wakeup GPIOs use descriptors - -From: Linus Walleij - -[ Upstream commit df89de979f0e09e1896d59312362ce1657b848eb ] - -The code in serial.c looks up GPIOs corresponding to a line -on the UART when muxed in as GPIO to use this as a wakeup -on serial activity for OMAP1. - -Utilize the NULL device to define some board-specific -GPIO lookups and use these to immediately look up the -same GPIOs, set as input and convert to IRQ numbers, -then set these to wakeup IRQs. This is ugly but should work. - -This is only needed on the OSK1 and Nokia 770 devices that -use the OMAP16xx. - -Fixes: 92bf78b33b0b ("gpio: omap: use dynamic allocation of base") -Signed-off-by: Linus Walleij -Signed-off-by: Sasha Levin ---- - arch/arm/mach-omap1/board-nokia770.c | 7 +++++++ - arch/arm/mach-omap1/board-osk.c | 7 +++++++ - arch/arm/mach-omap1/serial.c | 30 ++++++++++++++-------------- - 3 files changed, 29 insertions(+), 15 deletions(-) - -diff --git a/arch/arm/mach-omap1/board-nokia770.c b/arch/arm/mach-omap1/board-nokia770.c -index dd1a8f439fac4..5ea27ca26abf2 100644 ---- a/arch/arm/mach-omap1/board-nokia770.c -+++ b/arch/arm/mach-omap1/board-nokia770.c -@@ -294,6 +294,13 @@ static struct gpiod_lookup_table nokia770_irq_gpio_table = { - /* GPIO used for tahvo IRQ */ - GPIO_LOOKUP("gpio-32-47", 8, "tahvo_irq", - GPIO_ACTIVE_HIGH), -+ /* GPIOs used by serial wakeup IRQs */ -+ GPIO_LOOKUP_IDX("gpio-32-47", 5, "wakeup", 0, -+ GPIO_ACTIVE_HIGH), -+ GPIO_LOOKUP_IDX("gpio-16-31", 2, "wakeup", 1, -+ GPIO_ACTIVE_HIGH), -+ GPIO_LOOKUP_IDX("gpio-48-63", 1, "wakeup", 2, -+ GPIO_ACTIVE_HIGH), - { } - }, - }; -diff --git a/arch/arm/mach-omap1/board-osk.c b/arch/arm/mach-omap1/board-osk.c -index a8ca8d427182d..463687b9ca52a 100644 ---- a/arch/arm/mach-omap1/board-osk.c -+++ b/arch/arm/mach-omap1/board-osk.c -@@ -364,6 +364,13 @@ static struct gpiod_lookup_table osk_irq_gpio_table = { - /* GPIO used by the TPS65010 chip */ - GPIO_LOOKUP("mpuio", 1, "tps65010", - GPIO_ACTIVE_HIGH), -+ /* GPIOs used for serial wakeup IRQs */ -+ GPIO_LOOKUP_IDX("gpio-32-47", 5, "wakeup", 0, -+ GPIO_ACTIVE_HIGH), -+ GPIO_LOOKUP_IDX("gpio-16-31", 2, "wakeup", 1, -+ GPIO_ACTIVE_HIGH), -+ GPIO_LOOKUP_IDX("gpio-48-63", 1, "wakeup", 2, -+ GPIO_ACTIVE_HIGH), - { } - }, - }; -diff --git a/arch/arm/mach-omap1/serial.c b/arch/arm/mach-omap1/serial.c -index c7f5906457748..3adceb97138fb 100644 ---- a/arch/arm/mach-omap1/serial.c -+++ b/arch/arm/mach-omap1/serial.c -@@ -4,7 +4,8 @@ - * - * OMAP1 serial support. - */ --#include -+#include -+#include - #include - #include - #include -@@ -196,39 +197,38 @@ void omap_serial_wake_trigger(int enable) - } - } - --static void __init omap_serial_set_port_wakeup(int gpio_nr) -+static void __init omap_serial_set_port_wakeup(int idx) - { -+ struct gpio_desc *d; - int ret; - -- ret = gpio_request(gpio_nr, "UART wake"); -- if (ret < 0) { -- printk(KERN_ERR "Could not request UART wake GPIO: %i\n", -- gpio_nr); -+ d = gpiod_get_index(NULL, "wakeup", idx, GPIOD_IN); -+ if (IS_ERR(d)) { -+ pr_err("Unable to get UART wakeup GPIO descriptor\n"); - return; - } -- gpio_direction_input(gpio_nr); -- ret = request_irq(gpio_to_irq(gpio_nr), &omap_serial_wake_interrupt, -+ ret = request_irq(gpiod_to_irq(d), &omap_serial_wake_interrupt, - IRQF_TRIGGER_RISING, "serial wakeup", NULL); - if (ret) { -- gpio_free(gpio_nr); -- printk(KERN_ERR "No interrupt for UART wake GPIO: %i\n", -- gpio_nr); -+ gpiod_put(d); -+ pr_err("No interrupt for UART%d wake GPIO\n", idx + 1); - return; - } -- enable_irq_wake(gpio_to_irq(gpio_nr)); -+ enable_irq_wake(gpiod_to_irq(d)); - } - -+ - int __init omap_serial_wakeup_init(void) - { - if (!cpu_is_omap16xx()) - return 0; - - if (uart1_ck != NULL) -- omap_serial_set_port_wakeup(37); -+ omap_serial_set_port_wakeup(0); - if (uart2_ck != NULL) -- omap_serial_set_port_wakeup(18); -+ omap_serial_set_port_wakeup(1); - if (uart3_ck != NULL) -- omap_serial_set_port_wakeup(49); -+ omap_serial_set_port_wakeup(2); - - return 0; - } --- -2.39.2 - diff --git a/queue-6.4/arm-omap1-remove-reliance-on-gpio-numbers-from-palmt.patch b/queue-6.4/arm-omap1-remove-reliance-on-gpio-numbers-from-palmt.patch deleted file mode 100644 index 1542c4144d7..00000000000 --- a/queue-6.4/arm-omap1-remove-reliance-on-gpio-numbers-from-palmt.patch +++ /dev/null @@ -1,114 +0,0 @@ -From 0e048c0622867bd6ce9b2475183e380db1e55a05 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Sun, 30 Apr 2023 11:56:23 +0200 -Subject: ARM: omap1: Remove reliance on GPIO numbers from PalmTE - -From: Linus Walleij - -[ Upstream commit 4c40db6249ff1da335b276bdd6c3c3462efbc2ab ] - -It appears this happens because the OMAP driver now -allocates GPIO numbers dynamically, so all that is -references by number is a bit up in the air. - -Utilize the NULL device to define some board-specific -GPIO lookups and use these to immediately look up the -same GPIOs, convert to IRQ numbers and pass as resources -to the devices. This is ugly but should work. - -Fixes: 92bf78b33b0b ("gpio: omap: use dynamic allocation of base") -Signed-off-by: Linus Walleij -Signed-off-by: Sasha Levin ---- - arch/arm/mach-omap1/board-palmte.c | 51 ++++++++++++++++++------------ - 1 file changed, 31 insertions(+), 20 deletions(-) - -diff --git a/arch/arm/mach-omap1/board-palmte.c b/arch/arm/mach-omap1/board-palmte.c -index f79c497f04d57..49b7757cb2fd3 100644 ---- a/arch/arm/mach-omap1/board-palmte.c -+++ b/arch/arm/mach-omap1/board-palmte.c -@@ -13,7 +13,8 @@ - * - * Copyright (c) 2006 Andrzej Zaborowski - */ --#include -+#include -+#include - #include - #include - #include -@@ -187,23 +188,6 @@ static struct spi_board_info palmte_spi_info[] __initdata = { - }, - }; - --static void __init palmte_misc_gpio_setup(void) --{ -- /* Set TSC2102 PINTDAV pin as input (used by TSC2102 driver) */ -- if (gpio_request(PALMTE_PINTDAV_GPIO, "TSC2102 PINTDAV") < 0) { -- printk(KERN_ERR "Could not reserve PINTDAV GPIO!\n"); -- return; -- } -- gpio_direction_input(PALMTE_PINTDAV_GPIO); -- -- /* Set USB-or-DC-IN pin as input (unused) */ -- if (gpio_request(PALMTE_USB_OR_DC_GPIO, "USB/DC-IN") < 0) { -- printk(KERN_ERR "Could not reserve cable signal GPIO!\n"); -- return; -- } -- gpio_direction_input(PALMTE_USB_OR_DC_GPIO); --} -- - #if IS_ENABLED(CONFIG_MMC_OMAP) - - static struct omap_mmc_platform_data _palmte_mmc_config = { -@@ -231,8 +215,23 @@ static void palmte_mmc_init(void) - - #endif /* CONFIG_MMC_OMAP */ - -+static struct gpiod_lookup_table palmte_irq_gpio_table = { -+ .dev_id = NULL, -+ .table = { -+ /* GPIO used for TSC2102 PINTDAV IRQ */ -+ GPIO_LOOKUP("gpio-0-15", PALMTE_PINTDAV_GPIO, "tsc2102_irq", -+ GPIO_ACTIVE_HIGH), -+ /* GPIO used for USB or DC input detection */ -+ GPIO_LOOKUP("gpio-0-15", PALMTE_USB_OR_DC_GPIO, "usb_dc_irq", -+ GPIO_ACTIVE_HIGH), -+ { } -+ }, -+}; -+ - static void __init omap_palmte_init(void) - { -+ struct gpio_desc *d; -+ - /* mux pins for uarts */ - omap_cfg_reg(UART1_TX); - omap_cfg_reg(UART1_RTS); -@@ -243,9 +242,21 @@ static void __init omap_palmte_init(void) - - platform_add_devices(palmte_devices, ARRAY_SIZE(palmte_devices)); - -- palmte_spi_info[0].irq = gpio_to_irq(PALMTE_PINTDAV_GPIO); -+ gpiod_add_lookup_table(&palmte_irq_gpio_table); -+ d = gpiod_get(NULL, "tsc2102_irq", GPIOD_IN); -+ if (IS_ERR(d)) -+ pr_err("Unable to get TSC2102 IRQ GPIO descriptor\n"); -+ else -+ palmte_spi_info[0].irq = gpiod_to_irq(d); - spi_register_board_info(palmte_spi_info, ARRAY_SIZE(palmte_spi_info)); -- palmte_misc_gpio_setup(); -+ -+ /* We are getting this just to set it up as input */ -+ d = gpiod_get(NULL, "usb_dc_irq", GPIOD_IN); -+ if (IS_ERR(d)) -+ pr_err("Unable to get USB/DC IRQ GPIO descriptor\n"); -+ else -+ gpiod_put(d); -+ - omap_serial_init(); - omap1_usb_init(&palmte_usb_config); - omap_register_i2c_bus(1, 100, NULL, 0); --- -2.39.2 - diff --git a/queue-6.4/arm-omap1-remove-reliance-on-gpio-numbers-from-sx1.patch b/queue-6.4/arm-omap1-remove-reliance-on-gpio-numbers-from-sx1.patch deleted file mode 100644 index 3825884e98e..00000000000 --- a/queue-6.4/arm-omap1-remove-reliance-on-gpio-numbers-from-sx1.patch +++ /dev/null @@ -1,98 +0,0 @@ -From 5ea8a93f3a2be0e017c612bb467d73f9a2a63c74 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Sun, 30 Apr 2023 17:45:29 +0200 -Subject: ARM: omap1: Remove reliance on GPIO numbers from SX1 - -From: Linus Walleij - -[ Upstream commit 480c82daa3e41873421dc2c9e2918ad7e21d7a0b ] - -It appears this happens because the OMAP driver now -allocates GPIO numbers dynamically, so all that is -references by number is a bit up in the air. - -Utilize the NULL device to define some board-specific -GPIO lookups and use these to immediately look up the -same GPIOs, convert to IRQ numbers and pass as resources -to the devices. This is ugly but should work. - -Fixes: 92bf78b33b0b ("gpio: omap: use dynamic allocation of base") -Signed-off-by: Linus Walleij -Signed-off-by: Sasha Levin ---- - arch/arm/mach-omap1/board-sx1.c | 40 +++++++++++++++++++++++++++------ - 1 file changed, 33 insertions(+), 7 deletions(-) - -diff --git a/arch/arm/mach-omap1/board-sx1.c b/arch/arm/mach-omap1/board-sx1.c -index 0c0cdd5e77c79..a13c630be7b7f 100644 ---- a/arch/arm/mach-omap1/board-sx1.c -+++ b/arch/arm/mach-omap1/board-sx1.c -@@ -11,7 +11,8 @@ - * Maintainters : Vladimir Ananiev (aka Vovan888), Sergge - * oslik.ru - */ --#include -+#include -+#include - #include - #include - #include -@@ -304,8 +305,23 @@ static struct platform_device *sx1_devices[] __initdata = { - - /*-----------------------------------------*/ - -+static struct gpiod_lookup_table sx1_gpio_table = { -+ .dev_id = NULL, -+ .table = { -+ GPIO_LOOKUP("gpio-0-15", 1, "irda_off", -+ GPIO_ACTIVE_HIGH), -+ GPIO_LOOKUP("gpio-0-15", 11, "switch", -+ GPIO_ACTIVE_HIGH), -+ GPIO_LOOKUP("gpio-0-15", 15, "usb_on", -+ GPIO_ACTIVE_HIGH), -+ { } -+ }, -+}; -+ - static void __init omap_sx1_init(void) - { -+ struct gpio_desc *d; -+ - /* mux pins for uarts */ - omap_cfg_reg(UART1_TX); - omap_cfg_reg(UART1_RTS); -@@ -320,15 +336,25 @@ static void __init omap_sx1_init(void) - omap_register_i2c_bus(1, 100, NULL, 0); - omap1_usb_init(&sx1_usb_config); - sx1_mmc_init(); -+ gpiod_add_lookup_table(&sx1_gpio_table); - - /* turn on USB power */ - /* sx1_setusbpower(1); can't do it here because i2c is not ready */ -- gpio_request(1, "A_IRDA_OFF"); -- gpio_request(11, "A_SWITCH"); -- gpio_request(15, "A_USB_ON"); -- gpio_direction_output(1, 1); /*A_IRDA_OFF = 1 */ -- gpio_direction_output(11, 0); /*A_SWITCH = 0 */ -- gpio_direction_output(15, 0); /*A_USB_ON = 0 */ -+ d = gpiod_get(NULL, "irda_off", GPIOD_OUT_HIGH); -+ if (IS_ERR(d)) -+ pr_err("Unable to get IRDA OFF GPIO descriptor\n"); -+ else -+ gpiod_put(d); -+ d = gpiod_get(NULL, "switch", GPIOD_OUT_LOW); -+ if (IS_ERR(d)) -+ pr_err("Unable to get SWITCH GPIO descriptor\n"); -+ else -+ gpiod_put(d); -+ d = gpiod_get(NULL, "usb_on", GPIOD_OUT_LOW); -+ if (IS_ERR(d)) -+ pr_err("Unable to get USB ON GPIO descriptor\n"); -+ else -+ gpiod_put(d); - - omapfb_set_lcd_config(&sx1_lcd_config); - } --- -2.39.2 - diff --git a/queue-6.4/arm-omap2-fix-missing-tick_broadcast-prototype.patch b/queue-6.4/arm-omap2-fix-missing-tick_broadcast-prototype.patch deleted file mode 100644 index ae2346e4a0d..00000000000 --- a/queue-6.4/arm-omap2-fix-missing-tick_broadcast-prototype.patch +++ /dev/null @@ -1,41 +0,0 @@ -From d6e6ffc72720c5595f2db16cb4bcf4355282dd1c Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Tue, 16 May 2023 17:31:04 +0200 -Subject: ARM: omap2: fix missing tick_broadcast() prototype - -From: Arnd Bergmann - -[ Upstream commit 861bc1d2886d47bd57a2cbf2cda87fdbe3eb9d08 ] - -omap2 contains a hack to define tick_broadcast() on non-SMP -configurations in place of the normal SMP definition. This one -causes a warning because of a missing prototype: - -arch/arm/mach-omap2/board-generic.c:44:6: error: no previous prototype for 'tick_broadcast' - -Make sure to always include the header with the declaration. - -Fixes: d86ad463d670 ("ARM: OMAP2+: Fix regression for using local timer on non-SMP SoCs") -Acked-by: Aaro Koskinen -Link: https://lore.kernel.org/r/20230516153109.514251-9-arnd@kernel.org -Signed-off-by: Arnd Bergmann -Signed-off-by: Sasha Levin ---- - arch/arm/mach-omap2/board-generic.c | 1 + - 1 file changed, 1 insertion(+) - -diff --git a/arch/arm/mach-omap2/board-generic.c b/arch/arm/mach-omap2/board-generic.c -index 1610c567a6a3a..10d2f078e4a8e 100644 ---- a/arch/arm/mach-omap2/board-generic.c -+++ b/arch/arm/mach-omap2/board-generic.c -@@ -13,6 +13,7 @@ - #include - #include - #include -+#include - - #include - #include --- -2.39.2 - diff --git a/queue-6.4/arm-omap2-get-usb-hub-reset-gpio-from-descriptor.patch b/queue-6.4/arm-omap2-get-usb-hub-reset-gpio-from-descriptor.patch deleted file mode 100644 index 6172c91c028..00000000000 --- a/queue-6.4/arm-omap2-get-usb-hub-reset-gpio-from-descriptor.patch +++ /dev/null @@ -1,110 +0,0 @@ -From d80aa9975b1a5ab9be16440cd902193acfc804be Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Mon, 1 May 2023 11:05:22 +0200 -Subject: ARM: omap2: Get USB hub reset GPIO from descriptor - -From: Linus Walleij - -[ Upstream commit 94075d16beefc2304e756e3b23d8ecf0f36eecd7 ] - -This switches the USB hub GPIO reset line handling in the -OMAP2 pdata quirks over to using GPIO descriptors to avoid using -the global GPIO numberspace. - -Since the GPIOs are exported and assumedly used by some kind -of userspace we cannot simply use hogs in the device tree. - -Fixes: 92bf78b33b0b ("gpio: omap: use dynamic allocation of base") -Signed-off-by: Linus Walleij -Signed-off-by: Sasha Levin ---- - arch/arm/mach-omap2/pdata-quirks.c | 50 ++++++++++++++++++++++-------- - 1 file changed, 37 insertions(+), 13 deletions(-) - -diff --git a/arch/arm/mach-omap2/pdata-quirks.c b/arch/arm/mach-omap2/pdata-quirks.c -index c363ad8d6a06c..3264c4e77a8aa 100644 ---- a/arch/arm/mach-omap2/pdata-quirks.c -+++ b/arch/arm/mach-omap2/pdata-quirks.c -@@ -98,31 +98,43 @@ static struct iommu_platform_data omap3_iommu_isp_pdata = { - }; - #endif - --static void __init omap3_sbc_t3x_usb_hub_init(int gpio, char *hub_name) -+static void __init omap3_sbc_t3x_usb_hub_init(char *hub_name, int idx) - { -- int err = gpio_request_one(gpio, GPIOF_OUT_INIT_LOW, hub_name); -+ struct gpio_desc *d; - -- if (err) { -- pr_err("SBC-T3x: %s reset gpio request failed: %d\n", -- hub_name, err); -+ /* This asserts the RESET line (reverse polarity) */ -+ d = gpiod_get_index(NULL, "reset", idx, GPIOD_OUT_HIGH); -+ if (IS_ERR(d)) { -+ pr_err("Unable to get T3x USB reset GPIO descriptor\n"); - return; - } -- -- gpiod_export(gpio_to_desc(gpio), 0); -- -+ gpiod_set_consumer_name(d, hub_name); -+ gpiod_export(d, 0); - udelay(10); -- gpio_set_value(gpio, 1); -+ /* De-assert RESET */ -+ gpiod_set_value(d, 0); - msleep(1); - } - -+static struct gpiod_lookup_table omap3_sbc_t3x_usb_gpio_table = { -+ .dev_id = NULL, -+ .table = { -+ GPIO_LOOKUP_IDX("gpio-160-175", 7, "reset", 0, -+ GPIO_ACTIVE_LOW), -+ { } -+ }, -+}; -+ - static void __init omap3_sbc_t3730_legacy_init(void) - { -- omap3_sbc_t3x_usb_hub_init(167, "sb-t35 usb hub"); -+ gpiod_add_lookup_table(&omap3_sbc_t3x_usb_gpio_table); -+ omap3_sbc_t3x_usb_hub_init("sb-t35 usb hub", 0); - } - - static void __init omap3_sbc_t3530_legacy_init(void) - { -- omap3_sbc_t3x_usb_hub_init(167, "sb-t35 usb hub"); -+ gpiod_add_lookup_table(&omap3_sbc_t3x_usb_gpio_table); -+ omap3_sbc_t3x_usb_hub_init("sb-t35 usb hub", 0); - } - - static void __init omap3_evm_legacy_init(void) -@@ -187,10 +199,22 @@ static void __init omap3_sbc_t3517_wifi_init(void) - gpio_set_value(cm_t3517_wlan_gpios[1].gpio, 0); - } - -+static struct gpiod_lookup_table omap3_sbc_t3517_usb_gpio_table = { -+ .dev_id = NULL, -+ .table = { -+ GPIO_LOOKUP_IDX("gpio-144-159", 8, "reset", 0, -+ GPIO_ACTIVE_LOW), -+ GPIO_LOOKUP_IDX("gpio-96-111", 2, "reset", 1, -+ GPIO_ACTIVE_LOW), -+ { } -+ }, -+}; -+ - static void __init omap3_sbc_t3517_legacy_init(void) - { -- omap3_sbc_t3x_usb_hub_init(152, "cm-t3517 usb hub"); -- omap3_sbc_t3x_usb_hub_init(98, "sb-t35 usb hub"); -+ gpiod_add_lookup_table(&omap3_sbc_t3517_usb_gpio_table); -+ omap3_sbc_t3x_usb_hub_init("cm-t3517 usb hub", 0); -+ omap3_sbc_t3x_usb_hub_init("sb-t35 usb hub", 1); - am35xx_emac_reset(); - hsmmc2_internal_input_clk(); - omap3_sbc_t3517_wifi_init(); --- -2.39.2 - diff --git a/queue-6.4/arm-omap2-rewrite-wlan-quirk-to-use-gpio-descriptors.patch b/queue-6.4/arm-omap2-rewrite-wlan-quirk-to-use-gpio-descriptors.patch deleted file mode 100644 index 373f64e566a..00000000000 --- a/queue-6.4/arm-omap2-rewrite-wlan-quirk-to-use-gpio-descriptors.patch +++ /dev/null @@ -1,95 +0,0 @@ -From 5a209eae4e35c0b2004a831a2bf3ba63c1574903 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Mon, 1 May 2023 11:05:23 +0200 -Subject: ARM: omap2: Rewrite WLAN quirk to use GPIO descriptors - -From: Linus Walleij - -[ Upstream commit 078dc5194c0ac1b8e2fc088be2168a1104e16f72 ] - -The OMAP2 platform data quirk is using the global GPIO numberspace -to obtain two WLAN GPIOs to drive power and xcvr reset GPIO -lines during start-up. - -Rewrite the quirk to use a GPIO descriptor table so we avoid using -global GPIO numbers. - -This gets rid of the final dependency on the legacy -header from the OMAP2/3 platforms. - -Fixes: 92bf78b33b0b ("gpio: omap: use dynamic allocation of base") -Signed-off-by: Linus Walleij -Signed-off-by: Sasha Levin ---- - arch/arm/mach-omap2/pdata-quirks.c | 41 ++++++++++++++++++++---------- - 1 file changed, 28 insertions(+), 13 deletions(-) - -diff --git a/arch/arm/mach-omap2/pdata-quirks.c b/arch/arm/mach-omap2/pdata-quirks.c -index 3264c4e77a8aa..c1c0121f478d6 100644 ---- a/arch/arm/mach-omap2/pdata-quirks.c -+++ b/arch/arm/mach-omap2/pdata-quirks.c -@@ -8,7 +8,6 @@ - #include - #include - #include --#include - #include - #include - #include -@@ -178,25 +177,41 @@ static void __init am35xx_emac_reset(void) - omap_ctrl_readl(AM35XX_CONTROL_IP_SW_RESET); /* OCP barrier */ - } - --static struct gpio cm_t3517_wlan_gpios[] __initdata = { -- { 56, GPIOF_OUT_INIT_HIGH, "wlan pwr" }, -- { 4, GPIOF_OUT_INIT_HIGH, "xcvr noe" }, -+static struct gpiod_lookup_table cm_t3517_wlan_gpio_table = { -+ .dev_id = NULL, -+ .table = { -+ GPIO_LOOKUP("gpio-48-53", 8, "power", -+ GPIO_ACTIVE_HIGH), -+ GPIO_LOOKUP("gpio-0-15", 4, "noe", -+ GPIO_ACTIVE_HIGH), -+ { } -+ }, - }; - - static void __init omap3_sbc_t3517_wifi_init(void) - { -- int err = gpio_request_array(cm_t3517_wlan_gpios, -- ARRAY_SIZE(cm_t3517_wlan_gpios)); -- if (err) { -- pr_err("SBC-T3517: wl12xx gpios request failed: %d\n", err); -- return; -- } -+ struct gpio_desc *d; - -- gpiod_export(gpio_to_desc(cm_t3517_wlan_gpios[0].gpio), 0); -- gpiod_export(gpio_to_desc(cm_t3517_wlan_gpios[1].gpio), 0); -+ gpiod_add_lookup_table(&cm_t3517_wlan_gpio_table); - -+ /* This asserts the RESET line (reverse polarity) */ -+ d = gpiod_get(NULL, "power", GPIOD_OUT_HIGH); -+ if (IS_ERR(d)) { -+ pr_err("Unable to get CM T3517 WLAN power GPIO descriptor\n"); -+ } else { -+ gpiod_set_consumer_name(d, "wlan pwr"); -+ gpiod_export(d, 0); -+ } -+ -+ d = gpiod_get(NULL, "noe", GPIOD_OUT_HIGH); -+ if (IS_ERR(d)) { -+ pr_err("Unable to get CM T3517 WLAN XCVR NOE GPIO descriptor\n"); -+ } else { -+ gpiod_set_consumer_name(d, "xcvr noe"); -+ gpiod_export(d, 0); -+ } - msleep(100); -- gpio_set_value(cm_t3517_wlan_gpios[1].gpio, 0); -+ gpiod_set_value(d, 0); - } - - static struct gpiod_lookup_table omap3_sbc_t3517_usb_gpio_table = { --- -2.39.2 - diff --git a/queue-6.4/arm64-dts-mediatek-add-cpufreq-nodes-for-mt8192.patch b/queue-6.4/arm64-dts-mediatek-add-cpufreq-nodes-for-mt8192.patch deleted file mode 100644 index 6f48d92f204..00000000000 --- a/queue-6.4/arm64-dts-mediatek-add-cpufreq-nodes-for-mt8192.patch +++ /dev/null @@ -1,112 +0,0 @@ -From 7d17a8b0b9513f2731d1251feea4c7539713cb66 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Fri, 17 Mar 2023 14:19:44 +0800 -Subject: arm64: dts: mediatek: Add cpufreq nodes for MT8192 -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -From: Allen-KH Cheng - -[ Upstream commit 9d498cce9298a71e3896e2d1aee24a1a4c531d81 ] - -Add the cpufreq nodes for MT8192 SoC. - -Signed-off-by: Allen-KH Cheng -Tested-by: Chen-Yu Tsai -Reviewed-by: Nícolas F. R. A. Prado -Tested-by: Nícolas F. R. A. Prado -Reviewed-by: AngeloGioacchino Del Regno -Tested-by: AngeloGioacchino Del Regno -Link: https://lore.kernel.org/r/20230317061944.15434-1-allen-kh.cheng@mediatek.com -Signed-off-by: Matthias Brugger -Stable-dep-of: a4366b5695c9 ("arm64: dts: mediatek: mt8192: Fix CPUs capacity-dmips-mhz") -Signed-off-by: Sasha Levin ---- - arch/arm64/boot/dts/mediatek/mt8192.dtsi | 14 ++++++++++++++ - 1 file changed, 14 insertions(+) - -diff --git a/arch/arm64/boot/dts/mediatek/mt8192.dtsi b/arch/arm64/boot/dts/mediatek/mt8192.dtsi -index 5c30caf740265..6593cd0ef2972 100644 ---- a/arch/arm64/boot/dts/mediatek/mt8192.dtsi -+++ b/arch/arm64/boot/dts/mediatek/mt8192.dtsi -@@ -70,6 +70,7 @@ cpu0: cpu@0 { - d-cache-line-size = <64>; - d-cache-sets = <128>; - next-level-cache = <&l2_0>; -+ performance-domains = <&performance 0>; - capacity-dmips-mhz = <530>; - }; - -@@ -87,6 +88,7 @@ cpu1: cpu@100 { - d-cache-line-size = <64>; - d-cache-sets = <128>; - next-level-cache = <&l2_0>; -+ performance-domains = <&performance 0>; - capacity-dmips-mhz = <530>; - }; - -@@ -104,6 +106,7 @@ cpu2: cpu@200 { - d-cache-line-size = <64>; - d-cache-sets = <128>; - next-level-cache = <&l2_0>; -+ performance-domains = <&performance 0>; - capacity-dmips-mhz = <530>; - }; - -@@ -121,6 +124,7 @@ cpu3: cpu@300 { - d-cache-line-size = <64>; - d-cache-sets = <128>; - next-level-cache = <&l2_0>; -+ performance-domains = <&performance 0>; - capacity-dmips-mhz = <530>; - }; - -@@ -138,6 +142,7 @@ cpu4: cpu@400 { - d-cache-line-size = <64>; - d-cache-sets = <256>; - next-level-cache = <&l2_1>; -+ performance-domains = <&performance 1>; - capacity-dmips-mhz = <1024>; - }; - -@@ -155,6 +160,7 @@ cpu5: cpu@500 { - d-cache-line-size = <64>; - d-cache-sets = <256>; - next-level-cache = <&l2_1>; -+ performance-domains = <&performance 1>; - capacity-dmips-mhz = <1024>; - }; - -@@ -172,6 +178,7 @@ cpu6: cpu@600 { - d-cache-line-size = <64>; - d-cache-sets = <256>; - next-level-cache = <&l2_1>; -+ performance-domains = <&performance 1>; - capacity-dmips-mhz = <1024>; - }; - -@@ -189,6 +196,7 @@ cpu7: cpu@700 { - d-cache-line-size = <64>; - d-cache-sets = <256>; - next-level-cache = <&l2_1>; -+ performance-domains = <&performance 1>; - capacity-dmips-mhz = <1024>; - }; - -@@ -403,6 +411,12 @@ soc { - compatible = "simple-bus"; - ranges; - -+ performance: performance-controller@11bc10 { -+ compatible = "mediatek,cpufreq-hw"; -+ reg = <0 0x0011bc10 0 0x120>, <0 0x0011bd30 0 0x120>; -+ #performance-domain-cells = <1>; -+ }; -+ - gic: interrupt-controller@c000000 { - compatible = "arm,gic-v3"; - #interrupt-cells = <4>; --- -2.39.2 - diff --git a/queue-6.4/arm64-dts-mediatek-mt8183-add-mediatek-broken-save-r.patch b/queue-6.4/arm64-dts-mediatek-mt8183-add-mediatek-broken-save-r.patch deleted file mode 100644 index f2f8bfffc58..00000000000 --- a/queue-6.4/arm64-dts-mediatek-mt8183-add-mediatek-broken-save-r.patch +++ /dev/null @@ -1,44 +0,0 @@ -From 6e0a13ff635a52f08cf77682abf498a26b59a5a1 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Mon, 15 May 2023 13:13:52 -0700 -Subject: arm64: dts: mediatek: mt8183: Add mediatek,broken-save-restore-fw to - kukui - -From: Douglas Anderson - -[ Upstream commit 42127f578ebde652d1373e0233356fbd351675c4 ] - -Firmware shipped on mt8183 Chromebooks is affected by the GICR -save/restore issue as described by the patch ("dt-bindings: -interrupt-controller: arm,gic-v3: Add quirk for Mediatek SoCs w/ -broken FW"). Add the quirk property. - -Fixes: cd894e274b74 ("arm64: dts: mt8183: Add krane-sku176 board") -Reviewed-by: Julius Werner -Signed-off-by: Douglas Anderson -Reviewed-by: AngeloGioacchino Del Regno -Link: https://lore.kernel.org/r/20230515131353.v2.3.I525a2ed4260046d43c885ee1275e91707743df1c@changeid -Signed-off-by: Matthias Brugger -Signed-off-by: Sasha Levin ---- - arch/arm64/boot/dts/mediatek/mt8183-kukui.dtsi | 4 ++++ - 1 file changed, 4 insertions(+) - -diff --git a/arch/arm64/boot/dts/mediatek/mt8183-kukui.dtsi b/arch/arm64/boot/dts/mediatek/mt8183-kukui.dtsi -index 63952c1251dfd..8892b2f64a0f0 100644 ---- a/arch/arm64/boot/dts/mediatek/mt8183-kukui.dtsi -+++ b/arch/arm64/boot/dts/mediatek/mt8183-kukui.dtsi -@@ -292,6 +292,10 @@ dsi_out: endpoint { - }; - }; - -+&gic { -+ mediatek,broken-save-restore-fw; -+}; -+ - &gpu { - mali-supply = <&mt6358_vgpu_reg>; - }; --- -2.39.2 - diff --git a/queue-6.4/arm64-dts-mediatek-mt8192-add-mediatek-broken-save-r.patch b/queue-6.4/arm64-dts-mediatek-mt8192-add-mediatek-broken-save-r.patch deleted file mode 100644 index cdc9a822fb0..00000000000 --- a/queue-6.4/arm64-dts-mediatek-mt8192-add-mediatek-broken-save-r.patch +++ /dev/null @@ -1,44 +0,0 @@ -From ed9c064b55f8a04dd3dfb03e121c3142797c8ff7 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Mon, 15 May 2023 13:13:53 -0700 -Subject: arm64: dts: mediatek: mt8192: Add mediatek,broken-save-restore-fw to - asurada - -From: Douglas Anderson - -[ Upstream commit d72cfbd6fcf7cd02084991eee47ecc9f4b4c1e69 ] - -Firmware shipped on mt8192 Chromebooks is affected by the GICR -save/restore issue as described by the patch ("dt-bindings: -interrupt-controller: arm,gic-v3: Add quirk for Mediatek SoCs w/ -broken FW"). Add the quirk property. - -Fixes: 331fae2fc922 ("arm64: dts: mediatek: Introduce MT8192-based Asurada board family") -Reviewed-by: Julius Werner -Signed-off-by: Douglas Anderson -Reviewed-by: AngeloGioacchino Del Regno -Link: https://lore.kernel.org/r/20230515131353.v2.4.Ie7e600278ffbed55a1e5a58178203787b1449b35@changeid -Signed-off-by: Matthias Brugger -Signed-off-by: Sasha Levin ---- - arch/arm64/boot/dts/mediatek/mt8192-asurada.dtsi | 4 ++++ - 1 file changed, 4 insertions(+) - -diff --git a/arch/arm64/boot/dts/mediatek/mt8192-asurada.dtsi b/arch/arm64/boot/dts/mediatek/mt8192-asurada.dtsi -index 5a440504d4f9b..0e8b341170907 100644 ---- a/arch/arm64/boot/dts/mediatek/mt8192-asurada.dtsi -+++ b/arch/arm64/boot/dts/mediatek/mt8192-asurada.dtsi -@@ -275,6 +275,10 @@ &dsi_out { - remote-endpoint = <&anx7625_in>; - }; - -+&gic { -+ mediatek,broken-save-restore-fw; -+}; -+ - &gpu { - mali-supply = <&mt6315_7_vbuck1>; - status = "okay"; --- -2.39.2 - diff --git a/queue-6.4/arm64-dts-mediatek-mt8192-fix-cpus-capacity-dmips-mh.patch b/queue-6.4/arm64-dts-mediatek-mt8192-fix-cpus-capacity-dmips-mh.patch deleted file mode 100644 index 81edafe2c2b..00000000000 --- a/queue-6.4/arm64-dts-mediatek-mt8192-fix-cpus-capacity-dmips-mh.patch +++ /dev/null @@ -1,86 +0,0 @@ -From cb1ee493ba2425d80d2bc6ed1ce01e506db58361 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Fri, 2 Jun 2023 14:35:15 -0400 -Subject: arm64: dts: mediatek: mt8192: Fix CPUs capacity-dmips-mhz -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -From: Nícolas F. R. A. Prado - -[ Upstream commit a4366b5695c984b8a3fc8b31de9e758c8f6d1aed ] - -The capacity-dmips-mhz parameter was miscalculated: this SoC runs -the first (Cortex-A55) cluster at a maximum of 2000MHz and the -second (Cortex-A76) cluster at a maximum of 2200MHz. - -In order to calculate the right capacity-dmips-mhz, the following -test was performed: -1. CPUFREQ governor was set to 'performance' on both clusters -2. Ran dhrystone with 500000000 iterations for 10 times on each cluster -3. Calculated the mean result for each cluster -4. Calculated DMIPS/MHz: dmips_mhz = dmips_per_second / cpu_mhz -5. Scaled results to 1024: - result_c0 = dmips_mhz_c0 / dmips_mhz_c1 * 1024 - -The mean results for this SoC are: -Cluster 0 (LITTLE): 12016411 Dhry/s -Cluster 1 (BIG): 31702034 Dhry/s - -The calculated scaled results are: -Cluster 0: 426.953226899238 (rounded to 427) -Cluster 1: 1024 - -Fixes: 48489980e27e ("arm64: dts: Add Mediatek SoC MT8192 and evaluation board dts and Makefile") -Signed-off-by: Nícolas F. R. A. Prado -Reviewed-by: AngeloGioacchino Del Regno -Link: https://lore.kernel.org/r/20230602183515.3778780-1-nfraprado@collabora.com -Signed-off-by: Matthias Brugger -Signed-off-by: Sasha Levin ---- - arch/arm64/boot/dts/mediatek/mt8192.dtsi | 8 ++++---- - 1 file changed, 4 insertions(+), 4 deletions(-) - -diff --git a/arch/arm64/boot/dts/mediatek/mt8192.dtsi b/arch/arm64/boot/dts/mediatek/mt8192.dtsi -index 6593cd0ef2972..75eeba539e6fe 100644 ---- a/arch/arm64/boot/dts/mediatek/mt8192.dtsi -+++ b/arch/arm64/boot/dts/mediatek/mt8192.dtsi -@@ -71,7 +71,7 @@ cpu0: cpu@0 { - d-cache-sets = <128>; - next-level-cache = <&l2_0>; - performance-domains = <&performance 0>; -- capacity-dmips-mhz = <530>; -+ capacity-dmips-mhz = <427>; - }; - - cpu1: cpu@100 { -@@ -89,7 +89,7 @@ cpu1: cpu@100 { - d-cache-sets = <128>; - next-level-cache = <&l2_0>; - performance-domains = <&performance 0>; -- capacity-dmips-mhz = <530>; -+ capacity-dmips-mhz = <427>; - }; - - cpu2: cpu@200 { -@@ -107,7 +107,7 @@ cpu2: cpu@200 { - d-cache-sets = <128>; - next-level-cache = <&l2_0>; - performance-domains = <&performance 0>; -- capacity-dmips-mhz = <530>; -+ capacity-dmips-mhz = <427>; - }; - - cpu3: cpu@300 { -@@ -125,7 +125,7 @@ cpu3: cpu@300 { - d-cache-sets = <128>; - next-level-cache = <&l2_0>; - performance-domains = <&performance 0>; -- capacity-dmips-mhz = <530>; -+ capacity-dmips-mhz = <427>; - }; - - cpu4: cpu@400 { --- -2.39.2 - diff --git a/queue-6.4/arm64-dts-mediatek-mt8195-add-mediatek-broken-save-r.patch b/queue-6.4/arm64-dts-mediatek-mt8195-add-mediatek-broken-save-r.patch deleted file mode 100644 index 7c0f25116fc..00000000000 --- a/queue-6.4/arm64-dts-mediatek-mt8195-add-mediatek-broken-save-r.patch +++ /dev/null @@ -1,44 +0,0 @@ -From f28c6994266f6b25d6dbc176d80dda3d5b71e7cc Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Mon, 15 May 2023 13:13:54 -0700 -Subject: arm64: dts: mediatek: mt8195: Add mediatek,broken-save-restore-fw to - cherry - -From: Douglas Anderson - -[ Upstream commit ea6c5f21efecbaa3a14cb21c5bc0e23c84473a11 ] - -Firmware shipped on mt8195 Chromebooks is affected by the GICR -save/restore issue as described by the patch ("dt-bindings: -interrupt-controller: arm,gic-v3: Add quirk for Mediatek SoCs w/ -broken FW"). Add the quirk property. - -Fixes: 5eb2e303ec6b ("arm64: dts: mediatek: Introduce MT8195 Cherry platform's Tomato") -Reviewed-by: Julius Werner -Signed-off-by: Douglas Anderson -Reviewed-by: AngeloGioacchino Del Regno -Link: https://lore.kernel.org/r/20230515131353.v2.5.Ia0b6ebbaa351e3cd67e201355b9ae67783c7d718@changeid -Signed-off-by: Matthias Brugger -Signed-off-by: Sasha Levin ---- - arch/arm64/boot/dts/mediatek/mt8195-cherry.dtsi | 4 ++++ - 1 file changed, 4 insertions(+) - -diff --git a/arch/arm64/boot/dts/mediatek/mt8195-cherry.dtsi b/arch/arm64/boot/dts/mediatek/mt8195-cherry.dtsi -index 8ac80a136c371..f2d0726546c77 100644 ---- a/arch/arm64/boot/dts/mediatek/mt8195-cherry.dtsi -+++ b/arch/arm64/boot/dts/mediatek/mt8195-cherry.dtsi -@@ -255,6 +255,10 @@ dptx_out: endpoint { - }; - }; - -+&gic { -+ mediatek,broken-save-restore-fw; -+}; -+ - &gpu { - status = "okay"; - mali-supply = <&mt6315_7_vbuck1>; --- -2.39.2 - diff --git a/queue-6.4/arm64-dts-microchip-sparx5-do-not-use-psci-on-refere.patch b/queue-6.4/arm64-dts-microchip-sparx5-do-not-use-psci-on-refere.patch deleted file mode 100644 index 4589d7517bd..00000000000 --- a/queue-6.4/arm64-dts-microchip-sparx5-do-not-use-psci-on-refere.patch +++ /dev/null @@ -1,74 +0,0 @@ -From 1e384a63ce1b2a4d66ef558231016c8a426467a9 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Tue, 21 Feb 2023 11:50:37 +0100 -Subject: arm64: dts: microchip: sparx5: do not use PSCI on reference boards - -From: Robert Marko - -[ Upstream commit 70be83708c925b3f72c508e4756e48ad2330c830 ] - -PSCI is not implemented on SparX-5 at all, there is no ATF and U-boot that -is shipped does not implement it as well. - -I have tried flashing the latest BSP 2022.12 U-boot which did not work. -After contacting Microchip, they confirmed that there is no ATF for the -SoC nor PSCI implementation which is unfortunate in 2023. - -So, disable PSCI as otherwise kernel crashes as soon as it tries probing -PSCI with, and the crash is only visible if earlycon is used. - -Since PSCI is not implemented, switch core bringup to use spin-tables -which are implemented in the vendor U-boot and actually work. - -Tested on PCB134 with eMMC (VSC5640EV). - -Fixes: 6694aee00a4b ("arm64: dts: sparx5: Add basic cpu support") -Signed-off-by: Robert Marko -Acked-by: Steen Hegelund -Link: https://lore.kernel.org/r/20230221105039.316819-1-robert.marko@sartura.hr -Signed-off-by: Krzysztof Kozlowski -Signed-off-by: Sasha Levin ---- - arch/arm64/boot/dts/microchip/sparx5.dtsi | 2 +- - arch/arm64/boot/dts/microchip/sparx5_pcb_common.dtsi | 12 ++++++++++++ - 2 files changed, 13 insertions(+), 1 deletion(-) - -diff --git a/arch/arm64/boot/dts/microchip/sparx5.dtsi b/arch/arm64/boot/dts/microchip/sparx5.dtsi -index 0367a00a269b3..5eae6e7fd248e 100644 ---- a/arch/arm64/boot/dts/microchip/sparx5.dtsi -+++ b/arch/arm64/boot/dts/microchip/sparx5.dtsi -@@ -61,7 +61,7 @@ arm-pmu { - interrupt-affinity = <&cpu0>, <&cpu1>; - }; - -- psci { -+ psci: psci { - compatible = "arm,psci-0.2"; - method = "smc"; - }; -diff --git a/arch/arm64/boot/dts/microchip/sparx5_pcb_common.dtsi b/arch/arm64/boot/dts/microchip/sparx5_pcb_common.dtsi -index 9d1a082de3e29..32bb76b3202a0 100644 ---- a/arch/arm64/boot/dts/microchip/sparx5_pcb_common.dtsi -+++ b/arch/arm64/boot/dts/microchip/sparx5_pcb_common.dtsi -@@ -6,6 +6,18 @@ - /dts-v1/; - #include "sparx5.dtsi" - -+&psci { -+ status = "disabled"; -+}; -+ -+&cpu0 { -+ enable-method = "spin-table"; -+}; -+ -+&cpu1 { -+ enable-method = "spin-table"; -+}; -+ - &uart0 { - status = "okay"; - }; --- -2.39.2 - diff --git a/queue-6.4/arm64-dts-mt7986-increase-bl2-partition-on-nand-of-b.patch b/queue-6.4/arm64-dts-mt7986-increase-bl2-partition-on-nand-of-b.patch deleted file mode 100644 index 9fdccaf519e..00000000000 --- a/queue-6.4/arm64-dts-mt7986-increase-bl2-partition-on-nand-of-b.patch +++ /dev/null @@ -1,50 +0,0 @@ -From 5a3b181887e15ea8f40a709a6f0f091f06789214 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Tue, 6 Jun 2023 16:43:20 +0100 -Subject: arm64: dts: mt7986: increase bl2 partition on NAND of Bananapi R3 - -From: Daniel Golle - -[ Upstream commit 3bfbff9b461e3506dfb5b2904e8c15a0aea39e07 ] - -The bootrom burned into the MT7986 SoC will try multiple locations on -the SPI-NAND flash to load bl2 in case the bl2 image located at the the -previously attempted offset is corrupt. - -Use 0x100000 instead of 0x80000 as partition size for bl2 on SPI-NAND, -allowing for up to four redundant copies of bl2 (typically sized a -bit less than 0x40000). - -Fixes: 8e01fb15b8157 ("arm64: dts: mt7986: add Bananapi R3") -Signed-off-by: Daniel Golle -Link: https://lore.kernel.org/r/ZH9UGF99RgzrHZ88@makrotopia.org -Signed-off-by: Matthias Brugger -Signed-off-by: Sasha Levin ---- - .../boot/dts/mediatek/mt7986a-bananapi-bpi-r3-nand.dtso | 6 +++--- - 1 file changed, 3 insertions(+), 3 deletions(-) - -diff --git a/arch/arm64/boot/dts/mediatek/mt7986a-bananapi-bpi-r3-nand.dtso b/arch/arm64/boot/dts/mediatek/mt7986a-bananapi-bpi-r3-nand.dtso -index 15ee8c568f3c3..543c13385d6e3 100644 ---- a/arch/arm64/boot/dts/mediatek/mt7986a-bananapi-bpi-r3-nand.dtso -+++ b/arch/arm64/boot/dts/mediatek/mt7986a-bananapi-bpi-r3-nand.dtso -@@ -29,13 +29,13 @@ partitions { - - partition@0 { - label = "bl2"; -- reg = <0x0 0x80000>; -+ reg = <0x0 0x100000>; - read-only; - }; - -- partition@80000 { -+ partition@100000 { - label = "reserved"; -- reg = <0x80000 0x300000>; -+ reg = <0x100000 0x280000>; - }; - - partition@380000 { --- -2.39.2 - diff --git a/queue-6.4/arm64-dts-qcom-apq8016-sbc-fix-1.8v-power-rail-on-ls.patch b/queue-6.4/arm64-dts-qcom-apq8016-sbc-fix-1.8v-power-rail-on-ls.patch deleted file mode 100644 index 0281056ffcf..00000000000 --- a/queue-6.4/arm64-dts-qcom-apq8016-sbc-fix-1.8v-power-rail-on-ls.patch +++ /dev/null @@ -1,81 +0,0 @@ -From 92a26e8eaeb163d0cb5c57098c70c59311fa69ed Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Wed, 17 May 2023 20:48:41 +0200 -Subject: arm64: dts: qcom: apq8016-sbc: Fix 1.8V power rail on LS expansion - -From: Stephan Gerhold - -[ Upstream commit 5500f823db38db073d30557af159b77fb1f2bf26 ] - -The 96Boards specification expects a 1.8V power rail on the low-speed -expansion connector that is able to provide at least 0.18W / 100 mA. -According to the DB410c hardware user manual this is done by connecting -both L15 and L16 in parallel with up to 55mA each (for 110 mA total) [1]. - -Unfortunately the current regulator setup in the DB410c device tree -does not implement the specification correctly and only provides 5 mA: - - - Only L15 is marked always-on, so L16 is never enabled. - - Without specifying a load the regulator is put into LPM where - it can only provide 5 mA. - -Fix this by: - - - Adding proper voltage constraints for L16. - - Making L16 always-on. - - Adding regulator-system-load for both L15 and L16. 100 mA should be - available in total, so specify 50 mA for each. (The regulator - hardware can only be in normal (55 mA) or low-power mode (5 mA) so - this will actually result in the expected 110 mA total...) - -[1]: https://www.96boards.org/documentation/consumer/dragonboard/dragonboard410c/hardware-docs/hardware-user-manual.md.html#power-supplies - -Cc: Srinivas Kandagatla -Fixes: 828dd5d66f0f ("arm64: dts: apq8016-sbc: make 1.8v available on LS expansion") -Signed-off-by: Stephan Gerhold -Signed-off-by: Bjorn Andersson -Link: https://lore.kernel.org/r/20230510-msm8916-regulators-v1-2-54d4960a05fc@gerhold.net -Signed-off-by: Sasha Levin ---- - arch/arm64/boot/dts/qcom/apq8016-sbc.dts | 16 ++++++++++++---- - 1 file changed, 12 insertions(+), 4 deletions(-) - -diff --git a/arch/arm64/boot/dts/qcom/apq8016-sbc.dts b/arch/arm64/boot/dts/qcom/apq8016-sbc.dts -index 14cb217a13c1e..3ec449f5cab78 100644 ---- a/arch/arm64/boot/dts/qcom/apq8016-sbc.dts -+++ b/arch/arm64/boot/dts/qcom/apq8016-sbc.dts -@@ -526,19 +526,27 @@ l14 { - regulator-max-microvolt = <3300000>; - }; - -- /** -- * 1.8v required on LS expansion -- * for mezzanine boards -+ /* -+ * The 96Boards specification expects a 1.8V power rail on the low-speed -+ * expansion connector that is able to provide at least 0.18W / 100 mA. -+ * L15/L16 are connected in parallel to provide 55 mA each. A minimum load -+ * must be specified to ensure the regulators are not put in LPM where they -+ * would only provide 5 mA. - */ - l15 { - regulator-min-microvolt = <1800000>; - regulator-max-microvolt = <1800000>; -+ regulator-system-load = <50000>; -+ regulator-allow-set-load; - regulator-always-on; - }; - - l16 { - regulator-min-microvolt = <1800000>; -- regulator-max-microvolt = <3300000>; -+ regulator-max-microvolt = <1800000>; -+ regulator-system-load = <50000>; -+ regulator-allow-set-load; -+ regulator-always-on; - }; - - l17 { --- -2.39.2 - diff --git a/queue-6.4/arm64-dts-qcom-apq8016-sbc-fix-regulator-constraints.patch b/queue-6.4/arm64-dts-qcom-apq8016-sbc-fix-regulator-constraints.patch deleted file mode 100644 index 5be2cc149c3..00000000000 --- a/queue-6.4/arm64-dts-qcom-apq8016-sbc-fix-regulator-constraints.patch +++ /dev/null @@ -1,186 +0,0 @@ -From f10b07f650b66a278a7f3b805c8ddf4fd2055e80 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Wed, 17 May 2023 20:48:40 +0200 -Subject: arm64: dts: qcom: apq8016-sbc: Fix regulator constraints - -From: Stephan Gerhold - -[ Upstream commit e27654df20d77ad7549a3cf6739ebaa3aa59a088 ] - -For some reason DB410c has completely bogus regulator constraints that -actually just correspond to the programmable voltages which are already -provided by the regulator driver. Some of them are not just outside the -recommended operating conditions of the APQ8016E SoC but even exceed -the absolute maximum ratings, potentially risking permanent device -damage. - -In practice it's not quite as dangerous thanks to the RPM firmware: -It turns out that it has its own voltage constraints and silently -clamps all regulator requests. For example, requesting 3.3V for L5 -(allowed by the current regulator constraints!) still results in 1.8V -being programmed in the actual regulator hardware. - -Experimentation with various voltages shows that the internal RPM -voltage constraints roughly correspond to the safe "specified range" -in the PM8916 Device Specification (rather than the "programmable -range" used inside apq8016-sbc.dtsi right now). - -Combine those together with some fixed voltages used in the old -msm-3.10 device tree from Qualcomm to give DB410c some actually valid -voltage constraints. - -Cc: Srinivas Kandagatla -Fixes: 4c7d53d16d77 ("arm64: dts: apq8016-sbc: add regulators support") -Signed-off-by: Stephan Gerhold -Signed-off-by: Bjorn Andersson -Link: https://lore.kernel.org/r/20230510-msm8916-regulators-v1-1-54d4960a05fc@gerhold.net -Signed-off-by: Sasha Levin ---- - arch/arm64/boot/dts/qcom/apq8016-sbc.dts | 64 ++++++++++++------------ - 1 file changed, 32 insertions(+), 32 deletions(-) - -diff --git a/arch/arm64/boot/dts/qcom/apq8016-sbc.dts b/arch/arm64/boot/dts/qcom/apq8016-sbc.dts -index 59860a2223b83..14cb217a13c1e 100644 ---- a/arch/arm64/boot/dts/qcom/apq8016-sbc.dts -+++ b/arch/arm64/boot/dts/qcom/apq8016-sbc.dts -@@ -447,21 +447,21 @@ &smd_rpm_regulators { - vdd_l7-supply = <&pm8916_s4>; - - s3 { -- regulator-min-microvolt = <375000>; -- regulator-max-microvolt = <1562000>; -+ regulator-min-microvolt = <1250000>; -+ regulator-max-microvolt = <1350000>; - }; - - s4 { -- regulator-min-microvolt = <1800000>; -- regulator-max-microvolt = <1800000>; -+ regulator-min-microvolt = <1850000>; -+ regulator-max-microvolt = <2150000>; - - regulator-always-on; - regulator-boot-on; - }; - - l1 { -- regulator-min-microvolt = <375000>; -- regulator-max-microvolt = <1525000>; -+ regulator-min-microvolt = <1225000>; -+ regulator-max-microvolt = <1225000>; - }; - - l2 { -@@ -470,13 +470,13 @@ l2 { - }; - - l4 { -- regulator-min-microvolt = <1750000>; -- regulator-max-microvolt = <3337000>; -+ regulator-min-microvolt = <2050000>; -+ regulator-max-microvolt = <2050000>; - }; - - l5 { -- regulator-min-microvolt = <1750000>; -- regulator-max-microvolt = <3337000>; -+ regulator-min-microvolt = <1800000>; -+ regulator-max-microvolt = <1800000>; - }; - - l6 { -@@ -485,45 +485,45 @@ l6 { - }; - - l7 { -- regulator-min-microvolt = <1750000>; -- regulator-max-microvolt = <3337000>; -+ regulator-min-microvolt = <1800000>; -+ regulator-max-microvolt = <1800000>; - }; - - l8 { -- regulator-min-microvolt = <1750000>; -- regulator-max-microvolt = <3337000>; -+ regulator-min-microvolt = <2900000>; -+ regulator-max-microvolt = <2900000>; - }; - - l9 { -- regulator-min-microvolt = <1750000>; -- regulator-max-microvolt = <3337000>; -+ regulator-min-microvolt = <3300000>; -+ regulator-max-microvolt = <3300000>; - }; - - l10 { -- regulator-min-microvolt = <1750000>; -- regulator-max-microvolt = <3337000>; -+ regulator-min-microvolt = <2800000>; -+ regulator-max-microvolt = <2800000>; - }; - - l11 { -- regulator-min-microvolt = <1750000>; -- regulator-max-microvolt = <3337000>; -+ regulator-min-microvolt = <2950000>; -+ regulator-max-microvolt = <2950000>; - regulator-allow-set-load; - regulator-system-load = <200000>; - }; - - l12 { -- regulator-min-microvolt = <1750000>; -- regulator-max-microvolt = <3337000>; -+ regulator-min-microvolt = <1800000>; -+ regulator-max-microvolt = <2950000>; - }; - - l13 { -- regulator-min-microvolt = <1750000>; -- regulator-max-microvolt = <3337000>; -+ regulator-min-microvolt = <3075000>; -+ regulator-max-microvolt = <3075000>; - }; - - l14 { -- regulator-min-microvolt = <1750000>; -- regulator-max-microvolt = <3337000>; -+ regulator-min-microvolt = <1800000>; -+ regulator-max-microvolt = <3300000>; - }; - - /** -@@ -531,14 +531,14 @@ l14 { - * for mezzanine boards - */ - l15 { -- regulator-min-microvolt = <1750000>; -- regulator-max-microvolt = <3337000>; -+ regulator-min-microvolt = <1800000>; -+ regulator-max-microvolt = <1800000>; - regulator-always-on; - }; - - l16 { -- regulator-min-microvolt = <1750000>; -- regulator-max-microvolt = <3337000>; -+ regulator-min-microvolt = <1800000>; -+ regulator-max-microvolt = <3300000>; - }; - - l17 { -@@ -547,8 +547,8 @@ l17 { - }; - - l18 { -- regulator-min-microvolt = <1750000>; -- regulator-max-microvolt = <3337000>; -+ regulator-min-microvolt = <2700000>; -+ regulator-max-microvolt = <2700000>; - }; - }; - --- -2.39.2 - diff --git a/queue-6.4/arm64-dts-qcom-apq8096-fix-fixed-regulator-name-prop.patch b/queue-6.4/arm64-dts-qcom-apq8096-fix-fixed-regulator-name-prop.patch deleted file mode 100644 index 29f55cc2cc9..00000000000 --- a/queue-6.4/arm64-dts-qcom-apq8096-fix-fixed-regulator-name-prop.patch +++ /dev/null @@ -1,49 +0,0 @@ -From b7ffd2d0e45073d979768f2389817bc05d53e835 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Sun, 7 May 2023 19:45:16 +0200 -Subject: arm64: dts: qcom: apq8096: fix fixed regulator name property - -From: Krzysztof Kozlowski - -[ Upstream commit c77612a07d18d4425fd8ddd532a8a9b8e1970c53 ] - -Correct the typo in 'regulator-name' property. - - apq8096-ifc6640.dtb: v1p05-regulator: 'regulator-name' is a required property - apq8096-ifc6640.dtb: v1p05-regulator: Unevaluated properties are not allowed ('reglator-name' was unexpected) - -Fixes: 6cbdec2d3ca6 ("arm64: dts: qcom: msm8996: Introduce IFC6640") -Signed-off-by: Krzysztof Kozlowski -Reviewed-by: Konrad Dybcio -Signed-off-by: Bjorn Andersson -Link: https://lore.kernel.org/r/20230507174516.264936-3-krzysztof.kozlowski@linaro.org -Signed-off-by: Sasha Levin ---- - arch/arm64/boot/dts/qcom/apq8096-ifc6640.dts | 4 ++-- - 1 file changed, 2 insertions(+), 2 deletions(-) - -diff --git a/arch/arm64/boot/dts/qcom/apq8096-ifc6640.dts b/arch/arm64/boot/dts/qcom/apq8096-ifc6640.dts -index 71e0a500599c8..ed2e2f6c6775a 100644 ---- a/arch/arm64/boot/dts/qcom/apq8096-ifc6640.dts -+++ b/arch/arm64/boot/dts/qcom/apq8096-ifc6640.dts -@@ -26,7 +26,7 @@ chosen { - - v1p05: v1p05-regulator { - compatible = "regulator-fixed"; -- reglator-name = "v1p05"; -+ regulator-name = "v1p05"; - regulator-always-on; - regulator-boot-on; - -@@ -38,7 +38,7 @@ v1p05: v1p05-regulator { - - v12_poe: v12-poe-regulator { - compatible = "regulator-fixed"; -- reglator-name = "v12_poe"; -+ regulator-name = "v12_poe"; - regulator-always-on; - regulator-boot-on; - --- -2.39.2 - diff --git a/queue-6.4/arm64-dts-qcom-ipq6018-correct-qrng-unit-address.patch b/queue-6.4/arm64-dts-qcom-ipq6018-correct-qrng-unit-address.patch deleted file mode 100644 index ed05d421f7c..00000000000 --- a/queue-6.4/arm64-dts-qcom-ipq6018-correct-qrng-unit-address.patch +++ /dev/null @@ -1,39 +0,0 @@ -From 5d2e2561d512c66f25379be5912749107f7bfe34 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Wed, 19 Apr 2023 23:18:39 +0200 -Subject: arm64: dts: qcom: ipq6018: correct qrng unit address - -From: Krzysztof Kozlowski - -[ Upstream commit 085058786a7890dd44ec623fe5ac74db870f6b93 ] - -Match unit-address to reg entry to fix dtbs W=1 warnings: - - Warning (simple_bus_reg): /soc/qrng@e1000: simple-bus unit address format error, expected "e3000" - -Fixes: 5bf635621245 ("arm64: dts: ipq6018: Add a few device nodes") -Signed-off-by: Krzysztof Kozlowski -Reviewed-by: Konrad Dybcio -Signed-off-by: Bjorn Andersson -Link: https://lore.kernel.org/r/20230419211856.79332-1-krzysztof.kozlowski@linaro.org -Signed-off-by: Sasha Levin ---- - arch/arm64/boot/dts/qcom/ipq6018.dtsi | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/arch/arm64/boot/dts/qcom/ipq6018.dtsi b/arch/arm64/boot/dts/qcom/ipq6018.dtsi -index f531797f26195..c58eeb4376abe 100644 ---- a/arch/arm64/boot/dts/qcom/ipq6018.dtsi -+++ b/arch/arm64/boot/dts/qcom/ipq6018.dtsi -@@ -302,7 +302,7 @@ mdio: mdio@90000 { - status = "disabled"; - }; - -- prng: qrng@e1000 { -+ prng: qrng@e3000 { - compatible = "qcom,prng-ee"; - reg = <0x0 0x000e3000 0x0 0x1000>; - clocks = <&gcc GCC_PRNG_AHB_CLK>; --- -2.39.2 - diff --git a/queue-6.4/arm64-dts-qcom-ipq9574-update-the-size-of-gicc-gicv-.patch b/queue-6.4/arm64-dts-qcom-ipq9574-update-the-size-of-gicc-gicv-.patch deleted file mode 100644 index 5bba9a8ed12..00000000000 --- a/queue-6.4/arm64-dts-qcom-ipq9574-update-the-size-of-gicc-gicv-.patch +++ /dev/null @@ -1,46 +0,0 @@ -From cc2ecc7272b7931b049bcc9a4880a1ba335046dc Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Tue, 25 Apr 2023 14:10:05 +0530 -Subject: arm64: dts: qcom: ipq9574: Update the size of GICC & GICV regions - -From: Devi Priya - -[ Upstream commit 6fb45762691d12d9812c41d20b2f5db1412047ae ] - -Update the size of GICC and GICV regions to 8kB as the GICC_DIR & GICV_DIR -registers lie in the second 4kB region. Also, add target CPU encoding. - -Fixes: 97cb36ff52a1 ("arm64: dts: qcom: Add ipq9574 SoC and AL02 board support") -Signed-off-by: Devi Priya -Signed-off-by: Bjorn Andersson -Link: https://lore.kernel.org/r/20230425084010.15581-2-quic_devipriy@quicinc.com -Signed-off-by: Sasha Levin ---- - arch/arm64/boot/dts/qcom/ipq9574.dtsi | 6 +++--- - 1 file changed, 3 insertions(+), 3 deletions(-) - -diff --git a/arch/arm64/boot/dts/qcom/ipq9574.dtsi b/arch/arm64/boot/dts/qcom/ipq9574.dtsi -index 0ed19fbf7d87d..6e3a88ee06152 100644 ---- a/arch/arm64/boot/dts/qcom/ipq9574.dtsi -+++ b/arch/arm64/boot/dts/qcom/ipq9574.dtsi -@@ -173,14 +173,14 @@ blsp1_uart2: serial@78b1000 { - intc: interrupt-controller@b000000 { - compatible = "qcom,msm-qgic2"; - reg = <0x0b000000 0x1000>, /* GICD */ -- <0x0b002000 0x1000>, /* GICC */ -+ <0x0b002000 0x2000>, /* GICC */ - <0x0b001000 0x1000>, /* GICH */ -- <0x0b004000 0x1000>; /* GICV */ -+ <0x0b004000 0x2000>; /* GICV */ - #address-cells = <1>; - #size-cells = <1>; - interrupt-controller; - #interrupt-cells = <3>; -- interrupts = ; -+ interrupts = ; - ranges = <0 0x0b00c000 0x3000>; - - v2m0: v2m@0 { --- -2.39.2 - diff --git a/queue-6.4/arm64-dts-qcom-msm8916-correct-camss-unit-address.patch b/queue-6.4/arm64-dts-qcom-msm8916-correct-camss-unit-address.patch deleted file mode 100644 index 3a5271f6b99..00000000000 --- a/queue-6.4/arm64-dts-qcom-msm8916-correct-camss-unit-address.patch +++ /dev/null @@ -1,39 +0,0 @@ -From f5ab6d1d84fffbc12047c95c23d33f476772c789 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Wed, 19 Apr 2023 23:18:40 +0200 -Subject: arm64: dts: qcom: msm8916: correct camss unit address - -From: Krzysztof Kozlowski - -[ Upstream commit 48798d992ce276cf0d57bf75318daf8eabd02aa4 ] - -Match unit-address to reg entry to fix dtbs W=1 warnings: - - Warning (simple_bus_reg): /soc@0/camss@1b00000: simple-bus unit address format error, expected "1b0ac00" - -Fixes: 58f479f90a7c ("arm64: dts: qcom: msm8916: Add CAMSS support") -Signed-off-by: Krzysztof Kozlowski -Reviewed-by: Konrad Dybcio -Signed-off-by: Bjorn Andersson -Link: https://lore.kernel.org/r/20230419211856.79332-2-krzysztof.kozlowski@linaro.org -Signed-off-by: Sasha Levin ---- - arch/arm64/boot/dts/qcom/msm8916.dtsi | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/arch/arm64/boot/dts/qcom/msm8916.dtsi b/arch/arm64/boot/dts/qcom/msm8916.dtsi -index 834e0b66b7f2e..894a994311580 100644 ---- a/arch/arm64/boot/dts/qcom/msm8916.dtsi -+++ b/arch/arm64/boot/dts/qcom/msm8916.dtsi -@@ -1162,7 +1162,7 @@ dsi_phy0: phy@1a98300 { - }; - }; - -- camss: camss@1b00000 { -+ camss: camss@1b0ac00 { - compatible = "qcom,msm8916-camss"; - reg = <0x01b0ac00 0x200>, - <0x01b00030 0x4>, --- -2.39.2 - diff --git a/queue-6.4/arm64-dts-qcom-msm8916-correct-mmc-unit-address.patch b/queue-6.4/arm64-dts-qcom-msm8916-correct-mmc-unit-address.patch deleted file mode 100644 index 5ba3f6d8d98..00000000000 --- a/queue-6.4/arm64-dts-qcom-msm8916-correct-mmc-unit-address.patch +++ /dev/null @@ -1,49 +0,0 @@ -From 9338f9844ccfef15be4a786df20a9432e339f65d Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Wed, 19 Apr 2023 23:18:41 +0200 -Subject: arm64: dts: qcom: msm8916: correct MMC unit address - -From: Krzysztof Kozlowski - -[ Upstream commit 72644bc76d5145c098c268829554a0b98fab1de1 ] - -Match unit-address to reg entry to fix dtbs W=1 warnings: - - Warning (simple_bus_reg): /soc@0/mmc@7824000: simple-bus unit address format error, expected "7824900" - Warning (simple_bus_reg): /soc@0/mmc@7864000: simple-bus unit address format error, expected "7864900" - -Fixes: c4da5a561627 ("arm64: dts: qcom: Add msm8916 sdhci configuration nodes") -Signed-off-by: Krzysztof Kozlowski -Reviewed-by: Konrad Dybcio -Signed-off-by: Bjorn Andersson -Link: https://lore.kernel.org/r/20230419211856.79332-3-krzysztof.kozlowski@linaro.org -Signed-off-by: Sasha Levin ---- - arch/arm64/boot/dts/qcom/msm8916.dtsi | 4 ++-- - 1 file changed, 2 insertions(+), 2 deletions(-) - -diff --git a/arch/arm64/boot/dts/qcom/msm8916.dtsi b/arch/arm64/boot/dts/qcom/msm8916.dtsi -index 894a994311580..f6ccce0dad4e2 100644 ---- a/arch/arm64/boot/dts/qcom/msm8916.dtsi -+++ b/arch/arm64/boot/dts/qcom/msm8916.dtsi -@@ -1554,7 +1554,7 @@ lpass_codec: audio-codec@771c000 { - #sound-dai-cells = <1>; - }; - -- sdhc_1: mmc@7824000 { -+ sdhc_1: mmc@7824900 { - compatible = "qcom,msm8916-sdhci", "qcom,sdhci-msm-v4"; - reg = <0x07824900 0x11c>, <0x07824000 0x800>; - reg-names = "hc", "core"; -@@ -1572,7 +1572,7 @@ sdhc_1: mmc@7824000 { - status = "disabled"; - }; - -- sdhc_2: mmc@7864000 { -+ sdhc_2: mmc@7864900 { - compatible = "qcom,msm8916-sdhci", "qcom,sdhci-msm-v4"; - reg = <0x07864900 0x11c>, <0x07864000 0x800>; - reg-names = "hc", "core"; --- -2.39.2 - diff --git a/queue-6.4/arm64-dts-qcom-msm8916-correct-wcnss-unit-address.patch b/queue-6.4/arm64-dts-qcom-msm8916-correct-wcnss-unit-address.patch deleted file mode 100644 index f85a9e0a2d7..00000000000 --- a/queue-6.4/arm64-dts-qcom-msm8916-correct-wcnss-unit-address.patch +++ /dev/null @@ -1,39 +0,0 @@ -From 8d85bdc0e1ac36843179eadfb42f2aec43b7d316 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Wed, 19 Apr 2023 23:18:42 +0200 -Subject: arm64: dts: qcom: msm8916: correct WCNSS unit address - -From: Krzysztof Kozlowski - -[ Upstream commit 1f9a41bb0bba7b373c26a6f2cc8d35cc3159c861 ] - -Match unit-address to reg entry to fix dtbs W=1 warnings: - - Warning (simple_bus_reg): /soc@0/remoteproc@a21b000: simple-bus unit address format error, expected "a204000" - -Fixes: 88106096cbf8 ("ARM: dts: msm8916: Add and enable wcnss node") -Signed-off-by: Krzysztof Kozlowski -Reviewed-by: Konrad Dybcio -Signed-off-by: Bjorn Andersson -Link: https://lore.kernel.org/r/20230419211856.79332-4-krzysztof.kozlowski@linaro.org -Signed-off-by: Sasha Levin ---- - arch/arm64/boot/dts/qcom/msm8916.dtsi | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/arch/arm64/boot/dts/qcom/msm8916.dtsi b/arch/arm64/boot/dts/qcom/msm8916.dtsi -index f6ccce0dad4e2..bf88c10ff55b0 100644 ---- a/arch/arm64/boot/dts/qcom/msm8916.dtsi -+++ b/arch/arm64/boot/dts/qcom/msm8916.dtsi -@@ -1871,7 +1871,7 @@ usb_hs_phy: phy { - }; - }; - -- wcnss: remoteproc@a21b000 { -+ wcnss: remoteproc@a204000 { - compatible = "qcom,pronto-v2-pil", "qcom,pronto"; - reg = <0x0a204000 0x2000>, <0x0a202000 0x1000>, <0x0a21b000 0x3000>; - reg-names = "ccu", "dxe", "pmu"; --- -2.39.2 - diff --git a/queue-6.4/arm64-dts-qcom-msm8953-correct-iommu-unit-address.patch b/queue-6.4/arm64-dts-qcom-msm8953-correct-iommu-unit-address.patch deleted file mode 100644 index 61711d1242c..00000000000 --- a/queue-6.4/arm64-dts-qcom-msm8953-correct-iommu-unit-address.patch +++ /dev/null @@ -1,39 +0,0 @@ -From 0739ef818f0e4aebe70a67e119607c02c8d26329 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Wed, 19 Apr 2023 23:18:43 +0200 -Subject: arm64: dts: qcom: msm8953: correct IOMMU unit address - -From: Krzysztof Kozlowski - -[ Upstream commit 1c06b93461ec9df8a5878947db4a9d2d1cb72855 ] - -Match unit-address to reg entry to fix dtbs W=1 warnings: - - Warning (simple_bus_reg): /soc@0/iommu@1e00000: simple-bus unit address format error, expected "1e20000" - -Fixes: c0b9575a3606 ("arm64: dts: qcom: msm8953: add APPS IOMMU") -Signed-off-by: Krzysztof Kozlowski -Reviewed-by: Konrad Dybcio -Signed-off-by: Bjorn Andersson -Link: https://lore.kernel.org/r/20230419211856.79332-5-krzysztof.kozlowski@linaro.org -Signed-off-by: Sasha Levin ---- - arch/arm64/boot/dts/qcom/msm8953.dtsi | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/arch/arm64/boot/dts/qcom/msm8953.dtsi b/arch/arm64/boot/dts/qcom/msm8953.dtsi -index d44cfa0471e9a..4038e47a4610e 100644 ---- a/arch/arm64/boot/dts/qcom/msm8953.dtsi -+++ b/arch/arm64/boot/dts/qcom/msm8953.dtsi -@@ -1002,7 +1002,7 @@ dsi1_phy: phy@1a96400 { - }; - }; - -- apps_iommu: iommu@1e00000 { -+ apps_iommu: iommu@1e20000 { - compatible = "qcom,msm8953-iommu", "qcom,msm-iommu-v1"; - ranges = <0 0x01e20000 0x20000>; - --- -2.39.2 - diff --git a/queue-6.4/arm64-dts-qcom-msm8953-correct-wcnss-unit-address.patch b/queue-6.4/arm64-dts-qcom-msm8953-correct-wcnss-unit-address.patch deleted file mode 100644 index d85539b32fb..00000000000 --- a/queue-6.4/arm64-dts-qcom-msm8953-correct-wcnss-unit-address.patch +++ /dev/null @@ -1,39 +0,0 @@ -From 2cab88673b63906c25886eb250f381a654704ec1 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Wed, 19 Apr 2023 23:18:44 +0200 -Subject: arm64: dts: qcom: msm8953: correct WCNSS unit address - -From: Krzysztof Kozlowski - -[ Upstream commit 751038676e3075a5cb816034f7d5ba6e95f4486d ] - -Match unit-address to reg entry to fix dtbs W=1 warnings: - - Warning (simple_bus_reg): /soc@0/remoteproc@a21b000: simple-bus unit address format error, expected "a204000" - -Fixes: b12428640ebe ("arm64: dts: MSM8953: Add wcnss nodes") -Signed-off-by: Krzysztof Kozlowski -Reviewed-by: Konrad Dybcio -Signed-off-by: Bjorn Andersson -Link: https://lore.kernel.org/r/20230419211856.79332-6-krzysztof.kozlowski@linaro.org -Signed-off-by: Sasha Levin ---- - arch/arm64/boot/dts/qcom/msm8953.dtsi | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/arch/arm64/boot/dts/qcom/msm8953.dtsi b/arch/arm64/boot/dts/qcom/msm8953.dtsi -index 4038e47a4610e..d1d6f80bb2e6b 100644 ---- a/arch/arm64/boot/dts/qcom/msm8953.dtsi -+++ b/arch/arm64/boot/dts/qcom/msm8953.dtsi -@@ -1425,7 +1425,7 @@ i2c_8: i2c@7af8000 { - status = "disabled"; - }; - -- wcnss: remoteproc@a21b000 { -+ wcnss: remoteproc@a204000 { - compatible = "qcom,pronto-v3-pil", "qcom,pronto"; - reg = <0x0a204000 0x2000>, <0x0a202000 0x1000>, <0x0a21b000 0x3000>; - reg-names = "ccu", "dxe", "pmu"; --- -2.39.2 - diff --git a/queue-6.4/arm64-dts-qcom-msm8976-correct-mmc-unit-address.patch b/queue-6.4/arm64-dts-qcom-msm8976-correct-mmc-unit-address.patch deleted file mode 100644 index 1386fc13b17..00000000000 --- a/queue-6.4/arm64-dts-qcom-msm8976-correct-mmc-unit-address.patch +++ /dev/null @@ -1,61 +0,0 @@ -From e52d585a7503d1e47136908bc5cf8f009653cbec Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Wed, 19 Apr 2023 23:18:45 +0200 -Subject: arm64: dts: qcom: msm8976: correct MMC unit address - -From: Krzysztof Kozlowski - -[ Upstream commit 80284797a4cb8ceae71e3c403bafc6648263a060 ] - -Match unit-address to reg entry to fix dtbs W=1 warnings: - - Warning (simple_bus_reg): /soc@0/mmc@7824000: simple-bus unit address format error, expected "7824900" - Warning (simple_bus_reg): /soc@0/mmc@7864000: simple-bus unit address format error, expected "7864900" - Warning (simple_bus_reg): /soc@0/mmc@7a24000: simple-bus unit address format error, expected "7a24900" - -Fixes: 0484d3ce0902 ("arm64: dts: qcom: Add DTS for MSM8976 and MSM8956 SoCs") -Signed-off-by: Krzysztof Kozlowski -Reviewed-by: Marijn Suijten -Reviewed-by: Konrad Dybcio -Reviewed-by: AngeloGioacchino Del Regno -Signed-off-by: Bjorn Andersson -Link: https://lore.kernel.org/r/20230419211856.79332-7-krzysztof.kozlowski@linaro.org -Signed-off-by: Sasha Levin ---- - arch/arm64/boot/dts/qcom/msm8976.dtsi | 6 +++--- - 1 file changed, 3 insertions(+), 3 deletions(-) - -diff --git a/arch/arm64/boot/dts/qcom/msm8976.dtsi b/arch/arm64/boot/dts/qcom/msm8976.dtsi -index f47fb8ea71e20..753b9a2105edd 100644 ---- a/arch/arm64/boot/dts/qcom/msm8976.dtsi -+++ b/arch/arm64/boot/dts/qcom/msm8976.dtsi -@@ -822,7 +822,7 @@ spmi_bus: spmi@200f000 { - #interrupt-cells = <4>; - }; - -- sdhc_1: mmc@7824000 { -+ sdhc_1: mmc@7824900 { - compatible = "qcom,msm8976-sdhci", "qcom,sdhci-msm-v4"; - reg = <0x07824900 0x500>, <0x07824000 0x800>; - reg-names = "hc", "core"; -@@ -838,7 +838,7 @@ sdhc_1: mmc@7824000 { - status = "disabled"; - }; - -- sdhc_2: mmc@7864000 { -+ sdhc_2: mmc@7864900 { - compatible = "qcom,msm8976-sdhci", "qcom,sdhci-msm-v4"; - reg = <0x07864900 0x11c>, <0x07864000 0x800>; - reg-names = "hc", "core"; -@@ -957,7 +957,7 @@ otg: usb@78db000 { - #reset-cells = <1>; - }; - -- sdhc_3: mmc@7a24000 { -+ sdhc_3: mmc@7a24900 { - compatible = "qcom,msm8976-sdhci", "qcom,sdhci-msm-v4"; - reg = <0x07a24900 0x11c>, <0x07a24000 0x800>; - reg-names = "hc", "core"; --- -2.39.2 - diff --git a/queue-6.4/arm64-dts-qcom-msm8994-correct-spmi-unit-address.patch b/queue-6.4/arm64-dts-qcom-msm8994-correct-spmi-unit-address.patch deleted file mode 100644 index 2c76e66615d..00000000000 --- a/queue-6.4/arm64-dts-qcom-msm8994-correct-spmi-unit-address.patch +++ /dev/null @@ -1,39 +0,0 @@ -From a73d0ad21d8192ee99a1121762f479ceb74f588e Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Wed, 19 Apr 2023 23:18:46 +0200 -Subject: arm64: dts: qcom: msm8994: correct SPMI unit address - -From: Krzysztof Kozlowski - -[ Upstream commit 24f0f6a8059c7108d4ee3476c95db1e7ff4feb79 ] - -Match unit-address to reg entry to fix dtbs W=1 warnings: - - Warning (simple_bus_reg): /soc/spmi@fc4c0000: simple-bus unit address format error, expected "fc4cf000" - -Fixes: b0ad598f8ec0 ("arm64: dts: qcom: msm8994: Add SPMI PMIC arbiter device") -Signed-off-by: Krzysztof Kozlowski -Reviewed-by: Konrad Dybcio -Signed-off-by: Bjorn Andersson -Link: https://lore.kernel.org/r/20230419211856.79332-8-krzysztof.kozlowski@linaro.org -Signed-off-by: Sasha Levin ---- - arch/arm64/boot/dts/qcom/msm8994.dtsi | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/arch/arm64/boot/dts/qcom/msm8994.dtsi b/arch/arm64/boot/dts/qcom/msm8994.dtsi -index bdc3f2ba1755e..c5cf01c7f72e1 100644 ---- a/arch/arm64/boot/dts/qcom/msm8994.dtsi -+++ b/arch/arm64/boot/dts/qcom/msm8994.dtsi -@@ -747,7 +747,7 @@ restart@fc4ab000 { - reg = <0xfc4ab000 0x4>; - }; - -- spmi_bus: spmi@fc4c0000 { -+ spmi_bus: spmi@fc4cf000 { - compatible = "qcom,spmi-pmic-arb"; - reg = <0xfc4cf000 0x1000>, - <0xfc4cb000 0x1000>, --- -2.39.2 - diff --git a/queue-6.4/arm64-dts-qcom-msm8996-correct-camss-unit-address.patch b/queue-6.4/arm64-dts-qcom-msm8996-correct-camss-unit-address.patch deleted file mode 100644 index 2167f350504..00000000000 --- a/queue-6.4/arm64-dts-qcom-msm8996-correct-camss-unit-address.patch +++ /dev/null @@ -1,39 +0,0 @@ -From 0cb0c6304ae59f66e6d466ae32e2b7042b6f4bd8 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Wed, 19 Apr 2023 23:18:47 +0200 -Subject: arm64: dts: qcom: msm8996: correct camss unit address - -From: Krzysztof Kozlowski - -[ Upstream commit e959ced1d0e5ef0b1f66a0c2d0e1ae80790e5ca5 ] - -Match unit-address to reg entry to fix dtbs W=1 warnings: - - Warning (simple_bus_reg): /soc/camss@a00000: simple-bus unit address format error, expected "a34000" - -Fixes: e0531312e78f ("arm64: dts: qcom: msm8996: Add CAMSS support") -Signed-off-by: Krzysztof Kozlowski -Reviewed-by: Konrad Dybcio -Signed-off-by: Bjorn Andersson -Link: https://lore.kernel.org/r/20230419211856.79332-9-krzysztof.kozlowski@linaro.org -Signed-off-by: Sasha Levin ---- - arch/arm64/boot/dts/qcom/msm8996.dtsi | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/arch/arm64/boot/dts/qcom/msm8996.dtsi b/arch/arm64/boot/dts/qcom/msm8996.dtsi -index 30257c07e1279..25fe2b8552fc7 100644 ---- a/arch/arm64/boot/dts/qcom/msm8996.dtsi -+++ b/arch/arm64/boot/dts/qcom/msm8996.dtsi -@@ -2069,7 +2069,7 @@ ufsphy_lane: phy@627400 { - }; - }; - -- camss: camss@a00000 { -+ camss: camss@a34000 { - compatible = "qcom,msm8996-camss"; - reg = <0x00a34000 0x1000>, - <0x00a00030 0x4>, --- -2.39.2 - diff --git a/queue-6.4/arm64-dts-qcom-pm7250b-add-missing-spmi-vadc-include.patch b/queue-6.4/arm64-dts-qcom-pm7250b-add-missing-spmi-vadc-include.patch deleted file mode 100644 index baa0acbf2dc..00000000000 --- a/queue-6.4/arm64-dts-qcom-pm7250b-add-missing-spmi-vadc-include.patch +++ /dev/null @@ -1,36 +0,0 @@ -From 15975eeb0cef7ed98239516c67e9199573ce8c58 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Fri, 7 Apr 2023 09:45:44 +0200 -Subject: arm64: dts: qcom: pm7250b: add missing spmi-vadc include - -From: Luca Weiss - -[ Upstream commit 83022f6484b11a60dbf9a95a88c7ef8e59c4b19c ] - -This file is using definitions from the spmi-vadc header, so we need to -include it. - -Fixes: 11975b9b8135 ("arm64: dts: qcom: Add pm7250b PMIC") -Signed-off-by: Luca Weiss -Signed-off-by: Bjorn Andersson -Link: https://lore.kernel.org/r/20230407-pm7250b-sid-v1-1-fc648478cc25@fairphone.com -Signed-off-by: Sasha Levin ---- - arch/arm64/boot/dts/qcom/pm7250b.dtsi | 1 + - 1 file changed, 1 insertion(+) - -diff --git a/arch/arm64/boot/dts/qcom/pm7250b.dtsi b/arch/arm64/boot/dts/qcom/pm7250b.dtsi -index d709d955a2f5a..daa6f1d30efa0 100644 ---- a/arch/arm64/boot/dts/qcom/pm7250b.dtsi -+++ b/arch/arm64/boot/dts/qcom/pm7250b.dtsi -@@ -3,6 +3,7 @@ - * Copyright (C) 2022 Luca Weiss - */ - -+#include - #include - #include - --- -2.39.2 - diff --git a/queue-6.4/arm64-dts-qcom-pm8998-don-t-use-gic_spi-for-spmi-int.patch b/queue-6.4/arm64-dts-qcom-pm8998-don-t-use-gic_spi-for-spmi-int.patch deleted file mode 100644 index 052e841222e..00000000000 --- a/queue-6.4/arm64-dts-qcom-pm8998-don-t-use-gic_spi-for-spmi-int.patch +++ /dev/null @@ -1,39 +0,0 @@ -From 589e91276ca093011aa31332888feb847760eb5c Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Sun, 9 Apr 2023 21:21:45 +0300 -Subject: arm64: dts: qcom: pm8998: don't use GIC_SPI for SPMI interrupts - -From: Dmitry Baryshkov - -[ Upstream commit d9ef7a805a709a0b07341857d97a25598a7f92da ] - -Unlike typical GIC interrupts, first cell for SPMI interrupts is the -USID rather than GIC_SPI/GIC_PPI/GIC_LPI qualifier. Fix the resin -interrupt to use USID value 0x0 rather than GIC_SPI define. - -Fixes: f86ae6f23a9e ("arm64: dts: qcom: sagit: add initial device tree for sagit") -Signed-off-by: Dmitry Baryshkov -Reviewed-by: Konrad Dybcio -Signed-off-by: Bjorn Andersson -Link: https://lore.kernel.org/r/20230409182145.122895-1-dmitry.baryshkov@linaro.org -Signed-off-by: Sasha Levin ---- - arch/arm64/boot/dts/qcom/pm8998.dtsi | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/arch/arm64/boot/dts/qcom/pm8998.dtsi b/arch/arm64/boot/dts/qcom/pm8998.dtsi -index 340033ac31860..695d79116cde2 100644 ---- a/arch/arm64/boot/dts/qcom/pm8998.dtsi -+++ b/arch/arm64/boot/dts/qcom/pm8998.dtsi -@@ -55,7 +55,7 @@ pm8998_pwrkey: pwrkey { - - pm8998_resin: resin { - compatible = "qcom,pm8941-resin"; -- interrupts = ; -+ interrupts = <0x0 0x8 1 IRQ_TYPE_EDGE_BOTH>; - debounce = <15625>; - bias-pull-up; - status = "disabled"; --- -2.39.2 - diff --git a/queue-6.4/arm64-dts-qcom-qdu1000-flush-rsc-sleep-wake-votes.patch b/queue-6.4/arm64-dts-qcom-qdu1000-flush-rsc-sleep-wake-votes.patch deleted file mode 100644 index 53c59f945a8..00000000000 --- a/queue-6.4/arm64-dts-qcom-qdu1000-flush-rsc-sleep-wake-votes.patch +++ /dev/null @@ -1,40 +0,0 @@ -From 4b840dfe3342ab7b9b5cbc77a20b9baf0e2994ab Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Wed, 31 May 2023 15:22:37 +0200 -Subject: arm64: dts: qcom: qdu1000: Flush RSC sleep & wake votes - -From: Konrad Dybcio - -[ Upstream commit ab033e7846f91953244d0626b28ce66412b813b3 ] - -The rpmh driver will cache sleep and wake votes until the cluster -power-domain is about to enter idle, to avoid unnecessary writes. So -associate the apps_rsc with the cluster pd, so that it can be notified -about this event. - -Without this, only AMC votes are being commited. - -Fixes: 6bd20c54b589 ("arm64: dts: qcom: Add base QDU1000/QRU1000 DTSIs") -Signed-off-by: Konrad Dybcio -Signed-off-by: Bjorn Andersson -Link: https://lore.kernel.org/r/20230531-topic-rsc-v1-3-b4a985f57b8b@linaro.org -Signed-off-by: Sasha Levin ---- - arch/arm64/boot/dts/qcom/qdu1000.dtsi | 1 + - 1 file changed, 1 insertion(+) - -diff --git a/arch/arm64/boot/dts/qcom/qdu1000.dtsi b/arch/arm64/boot/dts/qcom/qdu1000.dtsi -index fb553f0bb17aa..6a6830777d8a8 100644 ---- a/arch/arm64/boot/dts/qcom/qdu1000.dtsi -+++ b/arch/arm64/boot/dts/qcom/qdu1000.dtsi -@@ -1252,6 +1252,7 @@ apps_rsc: rsc@17a00000 { - qcom,tcs-config = , , - , ; - label = "apps_rsc"; -+ power-domains = <&CLUSTER_PD>; - - apps_bcm_voter: bcm-voter { - compatible = "qcom,bcm-voter"; --- -2.39.2 - diff --git a/queue-6.4/arm64-dts-qcom-qrb4210-rb2-fix-cd-gpio-for-sdhc2.patch b/queue-6.4/arm64-dts-qcom-qrb4210-rb2-fix-cd-gpio-for-sdhc2.patch deleted file mode 100644 index fa7c36e4f6e..00000000000 --- a/queue-6.4/arm64-dts-qcom-qrb4210-rb2-fix-cd-gpio-for-sdhc2.patch +++ /dev/null @@ -1,40 +0,0 @@ -From a9c3b7d7673cd7b0762440e430b9b33e1795033e Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Tue, 16 May 2023 13:29:07 +0530 -Subject: arm64: dts: qcom: qrb4210-rb2: Fix CD gpio for SDHC2 - -From: Bhupesh Sharma - -[ Upstream commit 14e6c47b628788a8c8634bc59b2dd50d68a74de3 ] - -Card-Detect (CD) gpio for SDHC2 is an active GPIO line. Fix the same. -This allows the uSD card to be properly detected on the board. - -Fixes: 8d58a8c0d930 ("arm64: dts: qcom: Add base qrb4210-rb2 board dts") -Reviewed-by: Dmitry Baryshkov -Reviewed-by: Krzysztof Kozlowski -Signed-off-by: Bhupesh Sharma -Signed-off-by: Bjorn Andersson -Link: https://lore.kernel.org/r/20230516075908.2323372-3-bhupesh.sharma@linaro.org -Signed-off-by: Sasha Levin ---- - arch/arm64/boot/dts/qcom/qrb4210-rb2.dts | 3 ++- - 1 file changed, 2 insertions(+), 1 deletion(-) - -diff --git a/arch/arm64/boot/dts/qcom/qrb4210-rb2.dts b/arch/arm64/boot/dts/qcom/qrb4210-rb2.dts -index dc80f0bca7676..5554b3b9aaf32 100644 ---- a/arch/arm64/boot/dts/qcom/qrb4210-rb2.dts -+++ b/arch/arm64/boot/dts/qcom/qrb4210-rb2.dts -@@ -199,7 +199,8 @@ &sdhc_1 { - }; - - &sdhc_2 { -- cd-gpios = <&tlmm 88 GPIO_ACTIVE_HIGH>; /* card detect gpio */ -+ cd-gpios = <&tlmm 88 GPIO_ACTIVE_LOW>; /* card detect gpio */ -+ - vmmc-supply = <&vreg_l22a_2p96>; - vqmmc-supply = <&vreg_l5a_2p96>; - no-sdio; --- -2.39.2 - diff --git a/queue-6.4/arm64-dts-qcom-sdm630-correct-camss-unit-address.patch b/queue-6.4/arm64-dts-qcom-sdm630-correct-camss-unit-address.patch deleted file mode 100644 index f5b7795b5f0..00000000000 --- a/queue-6.4/arm64-dts-qcom-sdm630-correct-camss-unit-address.patch +++ /dev/null @@ -1,40 +0,0 @@ -From 275cf74880b28f2d72177b5d6fa91753b8dbea14 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Wed, 19 Apr 2023 23:18:48 +0200 -Subject: arm64: dts: qcom: sdm630: correct camss unit address - -From: Krzysztof Kozlowski - -[ Upstream commit c8b7faa7e9913a94444b3f00b6480e53a174fcfd ] - -Match unit-address to reg entry to fix dtbs W=1 warnings: - - Warning (simple_bus_reg): /soc/camss@ca00000: simple-bus unit address format error, expected "ca00020" - -Fixes: f3d5d3cc6971 ("arm64: dts: qcom: sdm630: Configure the camera subsystem") -Signed-off-by: Krzysztof Kozlowski -Reviewed-by: Konrad Dybcio -Reviewed-by: AngeloGioacchino Del Regno -Signed-off-by: Bjorn Andersson -Link: https://lore.kernel.org/r/20230419211856.79332-10-krzysztof.kozlowski@linaro.org -Signed-off-by: Sasha Levin ---- - arch/arm64/boot/dts/qcom/sdm630.dtsi | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/arch/arm64/boot/dts/qcom/sdm630.dtsi b/arch/arm64/boot/dts/qcom/sdm630.dtsi -index eaead2f7beb4e..ab04903fa3ff3 100644 ---- a/arch/arm64/boot/dts/qcom/sdm630.dtsi -+++ b/arch/arm64/boot/dts/qcom/sdm630.dtsi -@@ -1894,7 +1894,7 @@ pil-reloc@94c { - }; - }; - -- camss: camss@ca00000 { -+ camss: camss@ca00020 { - compatible = "qcom,sdm660-camss"; - reg = <0x0ca00020 0x10>, - <0x0ca30000 0x100>, --- -2.39.2 - diff --git a/queue-6.4/arm64-dts-qcom-sdm670-flush-rsc-sleep-wake-votes.patch b/queue-6.4/arm64-dts-qcom-sdm670-flush-rsc-sleep-wake-votes.patch deleted file mode 100644 index d8151c8441e..00000000000 --- a/queue-6.4/arm64-dts-qcom-sdm670-flush-rsc-sleep-wake-votes.patch +++ /dev/null @@ -1,40 +0,0 @@ -From 44dc5e110e856fec863eba8ac1eca51a50f8b96c Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Wed, 31 May 2023 15:22:39 +0200 -Subject: arm64: dts: qcom: sdm670: Flush RSC sleep & wake votes - -From: Konrad Dybcio - -[ Upstream commit 7b04cbd81b0e60c5151a310e7b730dc4a951a211 ] - -The rpmh driver will cache sleep and wake votes until the cluster -power-domain is about to enter idle, to avoid unnecessary writes. So -associate the apps_rsc with the cluster pd, so that it can be notified -about this event. - -Without this, only AMC votes are being commited. - -Fixes: 07c8ded6e373 ("arm64: dts: qcom: add sdm670 and pixel 3a device trees") -Signed-off-by: Konrad Dybcio -Signed-off-by: Bjorn Andersson -Link: https://lore.kernel.org/r/20230531-topic-rsc-v1-5-b4a985f57b8b@linaro.org -Signed-off-by: Sasha Levin ---- - arch/arm64/boot/dts/qcom/sdm670.dtsi | 1 + - 1 file changed, 1 insertion(+) - -diff --git a/arch/arm64/boot/dts/qcom/sdm670.dtsi b/arch/arm64/boot/dts/qcom/sdm670.dtsi -index b61e13db89bd5..a1c207c0266da 100644 ---- a/arch/arm64/boot/dts/qcom/sdm670.dtsi -+++ b/arch/arm64/boot/dts/qcom/sdm670.dtsi -@@ -1282,6 +1282,7 @@ apps_rsc: rsc@179c0000 { - , - , - ; -+ power-domains = <&CLUSTER_PD>; - - apps_bcm_voter: bcm-voter { - compatible = "qcom,bcm-voter"; --- -2.39.2 - diff --git a/queue-6.4/arm64-dts-qcom-sdm845-correct-camss-unit-address.patch b/queue-6.4/arm64-dts-qcom-sdm845-correct-camss-unit-address.patch deleted file mode 100644 index f1986046065..00000000000 --- a/queue-6.4/arm64-dts-qcom-sdm845-correct-camss-unit-address.patch +++ /dev/null @@ -1,39 +0,0 @@ -From 94495993795eaa9a5cf4ff4369f166c57bae06c6 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Wed, 19 Apr 2023 23:18:49 +0200 -Subject: arm64: dts: qcom: sdm845: correct camss unit address - -From: Krzysztof Kozlowski - -[ Upstream commit a05b913a27e46926ba60ba2bcacc7ec7a8403e4c ] - -Match unit-address to reg entry to fix dtbs W=1 warnings: - - Warning (simple_bus_reg): /soc@0/camss@a00000: simple-bus unit address format error, expected "acb3000" - -Fixes: d48a6698a6b7 ("arm64: dts: qcom: sdm845: Add CAMSS ISP node") -Signed-off-by: Krzysztof Kozlowski -Reviewed-by: Konrad Dybcio -Signed-off-by: Bjorn Andersson -Link: https://lore.kernel.org/r/20230419211856.79332-11-krzysztof.kozlowski@linaro.org -Signed-off-by: Sasha Levin ---- - arch/arm64/boot/dts/qcom/sdm845.dtsi | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/arch/arm64/boot/dts/qcom/sdm845.dtsi b/arch/arm64/boot/dts/qcom/sdm845.dtsi -index cdeb05e95674e..8f99e79ba3fd4 100644 ---- a/arch/arm64/boot/dts/qcom/sdm845.dtsi -+++ b/arch/arm64/boot/dts/qcom/sdm845.dtsi -@@ -4238,7 +4238,7 @@ videocc: clock-controller@ab00000 { - #reset-cells = <1>; - }; - -- camss: camss@a00000 { -+ camss: camss@acb3000 { - compatible = "qcom,sdm845-camss"; - - reg = <0 0x0acb3000 0 0x1000>, --- -2.39.2 - diff --git a/queue-6.4/arm64-dts-qcom-sdm845-flush-rsc-sleep-wake-votes.patch b/queue-6.4/arm64-dts-qcom-sdm845-flush-rsc-sleep-wake-votes.patch deleted file mode 100644 index 8b72fab48e4..00000000000 --- a/queue-6.4/arm64-dts-qcom-sdm845-flush-rsc-sleep-wake-votes.patch +++ /dev/null @@ -1,40 +0,0 @@ -From f9340ba88ded7f7e784004f5cba9804a81ac1e69 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Wed, 31 May 2023 15:22:40 +0200 -Subject: arm64: dts: qcom: sdm845: Flush RSC sleep & wake votes - -From: Konrad Dybcio - -[ Upstream commit 91e83140b5dd5598fbcfada3ee1f8b2b410c3731 ] - -The rpmh driver will cache sleep and wake votes until the cluster -power-domain is about to enter idle, to avoid unnecessary writes. So -associate the apps_rsc with the cluster pd, so that it can be notified -about this event. - -Without this, only AMC votes are being commited. - -Fixes: c83545d95376 ("arm64: dts: sdm845: Add rpmh-rsc node") -Signed-off-by: Konrad Dybcio -Signed-off-by: Bjorn Andersson -Link: https://lore.kernel.org/r/20230531-topic-rsc-v1-6-b4a985f57b8b@linaro.org -Signed-off-by: Sasha Levin ---- - arch/arm64/boot/dts/qcom/sdm845.dtsi | 1 + - 1 file changed, 1 insertion(+) - -diff --git a/arch/arm64/boot/dts/qcom/sdm845.dtsi b/arch/arm64/boot/dts/qcom/sdm845.dtsi -index 8f99e79ba3fd4..1bfb938e284fb 100644 ---- a/arch/arm64/boot/dts/qcom/sdm845.dtsi -+++ b/arch/arm64/boot/dts/qcom/sdm845.dtsi -@@ -5137,6 +5137,7 @@ apps_rsc: rsc@179c0000 { - , - , - ; -+ power-domains = <&CLUSTER_PD>; - - apps_bcm_voter: bcm-voter { - compatible = "qcom,bcm-voter"; --- -2.39.2 - diff --git a/queue-6.4/arm64-dts-qcom-sdm845-polaris-add-missing-touchscree.patch b/queue-6.4/arm64-dts-qcom-sdm845-polaris-add-missing-touchscree.patch deleted file mode 100644 index 7c069be1a6f..00000000000 --- a/queue-6.4/arm64-dts-qcom-sdm845-polaris-add-missing-touchscree.patch +++ /dev/null @@ -1,40 +0,0 @@ -From 72e20170549d7151ee4759dabeca7e5fff410928 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Wed, 19 Apr 2023 23:18:56 +0200 -Subject: arm64: dts: qcom: sdm845-polaris: add missing touchscreen child node - reg - -From: Krzysztof Kozlowski - -[ Upstream commit 4a0156b8862665a3e31c8280607388e3001ace3d ] - -Add missing reg property to touchscreen child node to fix dtbs W=1 warnings: - - Warning (unit_address_vs_reg): /soc@0/geniqup@ac0000/i2c@a98000/touchscreen@20/rmi4-f12@12: node has a unit name, but no reg or ranges property - -Fixes: be497abe19bf ("arm64: dts: qcom: Add support for Xiaomi Mi Mix2s") -Signed-off-by: Krzysztof Kozlowski -Reviewed-by: Konrad Dybcio -Reviewed-by: Molly Sophia -Signed-off-by: Bjorn Andersson -Link: https://lore.kernel.org/r/20230419211856.79332-18-krzysztof.kozlowski@linaro.org -Signed-off-by: Sasha Levin ---- - arch/arm64/boot/dts/qcom/sdm845-xiaomi-polaris.dts | 1 + - 1 file changed, 1 insertion(+) - -diff --git a/arch/arm64/boot/dts/qcom/sdm845-xiaomi-polaris.dts b/arch/arm64/boot/dts/qcom/sdm845-xiaomi-polaris.dts -index 8ae0ffccaab22..576f0421824f4 100644 ---- a/arch/arm64/boot/dts/qcom/sdm845-xiaomi-polaris.dts -+++ b/arch/arm64/boot/dts/qcom/sdm845-xiaomi-polaris.dts -@@ -483,6 +483,7 @@ rmi4-f01@1 { - }; - - rmi4-f12@12 { -+ reg = <0x12>; - syna,rezero-wait-ms = <0xc8>; - syna,clip-x-high = <0x438>; - syna,clip-y-high = <0x870>; --- -2.39.2 - diff --git a/queue-6.4/arm64-dts-qcom-sm6115-correct-thermal-sensor-unit-ad.patch b/queue-6.4/arm64-dts-qcom-sm6115-correct-thermal-sensor-unit-ad.patch deleted file mode 100644 index 052ea2a58af..00000000000 --- a/queue-6.4/arm64-dts-qcom-sm6115-correct-thermal-sensor-unit-ad.patch +++ /dev/null @@ -1,39 +0,0 @@ -From bacf3229b38877b8c2d2652175f35aa6b76bd14b Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Wed, 19 Apr 2023 23:18:50 +0200 -Subject: arm64: dts: qcom: sm6115: correct thermal-sensor unit address - -From: Krzysztof Kozlowski - -[ Upstream commit 2358b43256080459fcc5642265ed4fec75558f8c ] - -Match unit-address to reg entry to fix dtbs W=1 warnings: - - Warning (simple_bus_reg): /soc@0/thermal-sensor@4410000: simple-bus unit address format error, expected "4411000" - -Fixes: 7b74cba6b13f ("arm64: dts: qcom: sm6115: Add TSENS node") -Signed-off-by: Krzysztof Kozlowski -Reviewed-by: Konrad Dybcio -Signed-off-by: Bjorn Andersson -Link: https://lore.kernel.org/r/20230419211856.79332-12-krzysztof.kozlowski@linaro.org -Signed-off-by: Sasha Levin ---- - arch/arm64/boot/dts/qcom/sm6115.dtsi | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/arch/arm64/boot/dts/qcom/sm6115.dtsi b/arch/arm64/boot/dts/qcom/sm6115.dtsi -index 43f31c1b9d5a7..ea71249bbdf3f 100644 ---- a/arch/arm64/boot/dts/qcom/sm6115.dtsi -+++ b/arch/arm64/boot/dts/qcom/sm6115.dtsi -@@ -700,7 +700,7 @@ spmi_bus: spmi@1c40000 { - #interrupt-cells = <4>; - }; - -- tsens0: thermal-sensor@4410000 { -+ tsens0: thermal-sensor@4411000 { - compatible = "qcom,sm6115-tsens", "qcom,tsens-v2"; - reg = <0x0 0x04411000 0x0 0x1ff>, /* TM */ - <0x0 0x04410000 0x0 0x8>; /* SROT */ --- -2.39.2 - diff --git a/queue-6.4/arm64-dts-qcom-sm8250-edo-panel-framebuffer-is-2.5k-.patch b/queue-6.4/arm64-dts-qcom-sm8250-edo-panel-framebuffer-is-2.5k-.patch deleted file mode 100644 index d06bb5c62d7..00000000000 --- a/queue-6.4/arm64-dts-qcom-sm8250-edo-panel-framebuffer-is-2.5k-.patch +++ /dev/null @@ -1,52 +0,0 @@ -From d5156ced7bbb3bdf9de95a1d364175efff7cb767 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Tue, 6 Jun 2023 23:14:18 +0200 -Subject: arm64: dts: qcom: sm8250-edo: Panel framebuffer is 2.5k instead of 4k - -From: Marijn Suijten - -[ Upstream commit 223ce29c8b7e5b00f01a68387aabeefd77d97f06 ] - -The framebuffer configuration for edo pdx203, written in edo dtsi (which -is overwritten in pdx206 dts for its smaller panel) has to use a -1096x2560 configuration as this is what the panel (and framebuffer area) -has been initialized to. Downstream userspace also has access to (and -uses) this 2.5k mode by default, and only switches the panel to 4k when -requested. - -This is similar to commit be8de06dc397 ("arm64: dts: qcom: -sm8150-kumano: Panel framebuffer is 2.5k instead of 4k") which fixed the -same for the previous generation Sony platform. - -Fixes: 69cdb97ef652 ("arm64: dts: qcom: sm8250: Add support for SONY Xperia 1 II / 5 II (Edo platform)") -Signed-off-by: Marijn Suijten -Reviewed-by: AngeloGioacchino Del Regno -Reviewed-by: Konrad Dybcio -Signed-off-by: Bjorn Andersson -Link: https://lore.kernel.org/r/20230606211418.587676-1-marijn.suijten@somainline.org -Signed-off-by: Sasha Levin ---- - arch/arm64/boot/dts/qcom/sm8250-sony-xperia-edo.dtsi | 7 ++++--- - 1 file changed, 4 insertions(+), 3 deletions(-) - -diff --git a/arch/arm64/boot/dts/qcom/sm8250-sony-xperia-edo.dtsi b/arch/arm64/boot/dts/qcom/sm8250-sony-xperia-edo.dtsi -index 2f22d348d45d7..dcabb714f0f35 100644 ---- a/arch/arm64/boot/dts/qcom/sm8250-sony-xperia-edo.dtsi -+++ b/arch/arm64/boot/dts/qcom/sm8250-sony-xperia-edo.dtsi -@@ -26,9 +26,10 @@ chosen { - framebuffer: framebuffer@9c000000 { - compatible = "simple-framebuffer"; - reg = <0 0x9c000000 0 0x2300000>; -- width = <1644>; -- height = <3840>; -- stride = <(1644 * 4)>; -+ /* pdx203 BL initializes in 2.5k mode, not 4k */ -+ width = <1096>; -+ height = <2560>; -+ stride = <(1096 * 4)>; - format = "a8r8g8b8"; - /* - * That's a lot of clocks, but it's necessary due --- -2.39.2 - diff --git a/queue-6.4/arm64-dts-qcom-sm8350-correct-dma-controller-unit-ad.patch b/queue-6.4/arm64-dts-qcom-sm8350-correct-dma-controller-unit-ad.patch deleted file mode 100644 index 65fcff6be89..00000000000 --- a/queue-6.4/arm64-dts-qcom-sm8350-correct-dma-controller-unit-ad.patch +++ /dev/null @@ -1,39 +0,0 @@ -From d173b3d9d7b634d97a3d1b2ebb814385f7754e4b Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Wed, 19 Apr 2023 23:18:51 +0200 -Subject: arm64: dts: qcom: sm8350: correct DMA controller unit address - -From: Krzysztof Kozlowski - -[ Upstream commit 41d6bca799b3f40d4d3c22dd4545aeac7c210e33 ] - -Match unit-address to reg entry to fix dtbs W=1 warnings: - - Warning (simple_bus_reg): /soc@0/dma-controller@900000: simple-bus unit address format error, expected "9800000" - -Fixes: bc08fbf49bc8 ("arm64: dts: qcom: sm8350: Define GPI DMA engines") -Signed-off-by: Krzysztof Kozlowski -Reviewed-by: Konrad Dybcio -Signed-off-by: Bjorn Andersson -Link: https://lore.kernel.org/r/20230419211856.79332-13-krzysztof.kozlowski@linaro.org -Signed-off-by: Sasha Levin ---- - arch/arm64/boot/dts/qcom/sm8350.dtsi | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/arch/arm64/boot/dts/qcom/sm8350.dtsi b/arch/arm64/boot/dts/qcom/sm8350.dtsi -index 3efdc03ed0f11..a9af730e0b1c0 100644 ---- a/arch/arm64/boot/dts/qcom/sm8350.dtsi -+++ b/arch/arm64/boot/dts/qcom/sm8350.dtsi -@@ -907,7 +907,7 @@ spi19: spi@894000 { - }; - }; - -- gpi_dma0: dma-controller@900000 { -+ gpi_dma0: dma-controller@9800000 { - compatible = "qcom,sm8350-gpi-dma", "qcom,sm6350-gpi-dma"; - reg = <0 0x09800000 0 0x60000>; - interrupts = , --- -2.39.2 - diff --git a/queue-6.4/arm64-dts-qcom-sm8350-correct-pci-phy-unit-address.patch b/queue-6.4/arm64-dts-qcom-sm8350-correct-pci-phy-unit-address.patch deleted file mode 100644 index eb88aad4b55..00000000000 --- a/queue-6.4/arm64-dts-qcom-sm8350-correct-pci-phy-unit-address.patch +++ /dev/null @@ -1,39 +0,0 @@ -From 71e5f65f7b644da3c07500b663a38247c10d7467 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Wed, 19 Apr 2023 23:18:52 +0200 -Subject: arm64: dts: qcom: sm8350: correct PCI phy unit address - -From: Krzysztof Kozlowski - -[ Upstream commit ab98c21bc9246f421a6ae70e69f1b73cea6f85e3 ] - -Match unit-address to reg entry to fix dtbs W=1 warnings: - - Warning (simple_bus_reg): /soc@0/phy@1c0f000: simple-bus unit address format error, expected "1c0e000" - -Fixes: 6daee40678a0 ("arm64: dts: qcom: sm8350: add PCIe devices") -Signed-off-by: Krzysztof Kozlowski -Reviewed-by: Konrad Dybcio -Signed-off-by: Bjorn Andersson -Link: https://lore.kernel.org/r/20230419211856.79332-14-krzysztof.kozlowski@linaro.org -Signed-off-by: Sasha Levin ---- - arch/arm64/boot/dts/qcom/sm8350.dtsi | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/arch/arm64/boot/dts/qcom/sm8350.dtsi b/arch/arm64/boot/dts/qcom/sm8350.dtsi -index a9af730e0b1c0..5ca21cd1cbec6 100644 ---- a/arch/arm64/boot/dts/qcom/sm8350.dtsi -+++ b/arch/arm64/boot/dts/qcom/sm8350.dtsi -@@ -1638,7 +1638,7 @@ pcie1: pci@1c08000 { - status = "disabled"; - }; - -- pcie1_phy: phy@1c0f000 { -+ pcie1_phy: phy@1c0e000 { - compatible = "qcom,sm8350-qmp-gen3x2-pcie-phy"; - reg = <0 0x01c0e000 0 0x2000>; - clocks = <&gcc GCC_PCIE_1_AUX_CLK>, --- -2.39.2 - diff --git a/queue-6.4/arm64-dts-qcom-sm8350-correct-usb-phy-unit-address.patch b/queue-6.4/arm64-dts-qcom-sm8350-correct-usb-phy-unit-address.patch deleted file mode 100644 index 7220f9b83e6..00000000000 --- a/queue-6.4/arm64-dts-qcom-sm8350-correct-usb-phy-unit-address.patch +++ /dev/null @@ -1,39 +0,0 @@ -From 5f90a3d5a0f05b16c65504c0f1eba88af158ffe8 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Wed, 19 Apr 2023 23:18:53 +0200 -Subject: arm64: dts: qcom: sm8350: correct USB phy unit address - -From: Krzysztof Kozlowski - -[ Upstream commit a560ab70c6e28ba784a824611d3f58969d8fadba ] - -Match unit-address to reg entry to fix dtbs W=1 warnings: - - Warning (simple_bus_reg): /soc@0/phy@88e9000: simple-bus unit address format error, expected "88e8000" - -Fixes: 2458a305e80e ("arm64: dts: qcom: sm8350: switch to combo usb3/dp phy") -Signed-off-by: Krzysztof Kozlowski -Reviewed-by: Konrad Dybcio -Signed-off-by: Bjorn Andersson -Link: https://lore.kernel.org/r/20230419211856.79332-15-krzysztof.kozlowski@linaro.org -Signed-off-by: Sasha Levin ---- - arch/arm64/boot/dts/qcom/sm8350.dtsi | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/arch/arm64/boot/dts/qcom/sm8350.dtsi b/arch/arm64/boot/dts/qcom/sm8350.dtsi -index 5ca21cd1cbec6..425af2c38a37f 100644 ---- a/arch/arm64/boot/dts/qcom/sm8350.dtsi -+++ b/arch/arm64/boot/dts/qcom/sm8350.dtsi -@@ -2140,7 +2140,7 @@ usb_2_hsphy: phy@88e4000 { - resets = <&gcc GCC_QUSB2PHY_SEC_BCR>; - }; - -- usb_1_qmpphy: phy@88e9000 { -+ usb_1_qmpphy: phy@88e8000 { - compatible = "qcom,sm8350-qmp-usb3-dp-phy"; - reg = <0 0x088e8000 0 0x3000>; - --- -2.39.2 - diff --git a/queue-6.4/arm64-dts-qcom-sm8550-add-missing-interconnect-path-.patch b/queue-6.4/arm64-dts-qcom-sm8550-add-missing-interconnect-path-.patch deleted file mode 100644 index 07898cf0507..00000000000 --- a/queue-6.4/arm64-dts-qcom-sm8550-add-missing-interconnect-path-.patch +++ /dev/null @@ -1,39 +0,0 @@ -From 314d2d341c5f27295edabaa559fa1795ba80baab Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Thu, 1 Jun 2023 13:38:17 +0300 -Subject: arm64: dts: qcom: sm8550: Add missing interconnect path to USB HC - -From: Abel Vesa - -[ Upstream commit 11a1397bbf69e408223bb691858a0fcd295a8f76 ] - -The USB HC node is missing the interconnect paths, so add them. - -Fixes: 7f7e5c1b037f ("arm64: dts: qcom: sm8550: Add USB PHYs and controller nodes") -Signed-off-by: Abel Vesa -Reviewed-by: Konrad Dybcio -Signed-off-by: Bjorn Andersson -Link: https://lore.kernel.org/r/20230601103817.4066446-1-abel.vesa@linaro.org -Signed-off-by: Sasha Levin ---- - arch/arm64/boot/dts/qcom/sm8550.dtsi | 4 ++++ - 1 file changed, 4 insertions(+) - -diff --git a/arch/arm64/boot/dts/qcom/sm8550.dtsi b/arch/arm64/boot/dts/qcom/sm8550.dtsi -index 13fd8f516d182..d2b404736a8e4 100644 ---- a/arch/arm64/boot/dts/qcom/sm8550.dtsi -+++ b/arch/arm64/boot/dts/qcom/sm8550.dtsi -@@ -2769,6 +2769,10 @@ usb_1: usb@a6f8800 { - - resets = <&gcc GCC_USB30_PRIM_BCR>; - -+ interconnects = <&aggre1_noc MASTER_USB3_0 0 &mc_virt SLAVE_EBI1 0>, -+ <&gem_noc MASTER_APPSS_PROC 0 &config_noc SLAVE_USB3_0 0>; -+ interconnect-names = "usb-ddr", "apps-usb"; -+ - status = "disabled"; - - usb_1_dwc3: usb@a600000 { --- -2.39.2 - diff --git a/queue-6.4/arm64-dts-qcom-sm8550-correct-crypto-unit-address.patch b/queue-6.4/arm64-dts-qcom-sm8550-correct-crypto-unit-address.patch deleted file mode 100644 index a9c58aef705..00000000000 --- a/queue-6.4/arm64-dts-qcom-sm8550-correct-crypto-unit-address.patch +++ /dev/null @@ -1,39 +0,0 @@ -From ba3fc9a830d76a642878f20545f5f2bb146f4c98 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Wed, 19 Apr 2023 23:18:54 +0200 -Subject: arm64: dts: qcom: sm8550: correct crypto unit address - -From: Krzysztof Kozlowski - -[ Upstream commit 3cbf49ef16962ab6d99a3659cb34a33c5f147b50 ] - -Match unit-address to reg entry to fix dtbs W=1 warnings: - - Warning (simple_bus_reg): /soc@0/crypto@1de0000: simple-bus unit address format error, expected "1dfa000" - -Fixes: 433477c3bf0b ("arm64: dts: qcom: sm8550: add QCrypto nodes") -Signed-off-by: Krzysztof Kozlowski -Reviewed-by: Konrad Dybcio -Signed-off-by: Bjorn Andersson -Link: https://lore.kernel.org/r/20230419211856.79332-16-krzysztof.kozlowski@linaro.org -Signed-off-by: Sasha Levin ---- - arch/arm64/boot/dts/qcom/sm8550.dtsi | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/arch/arm64/boot/dts/qcom/sm8550.dtsi b/arch/arm64/boot/dts/qcom/sm8550.dtsi -index 558cbc4307080..7bf101095bd35 100644 ---- a/arch/arm64/boot/dts/qcom/sm8550.dtsi -+++ b/arch/arm64/boot/dts/qcom/sm8550.dtsi -@@ -1858,7 +1858,7 @@ cryptobam: dma-controller@1dc4000 { - <&apps_smmu 0x481 0x0>; - }; - -- crypto: crypto@1de0000 { -+ crypto: crypto@1dfa000 { - compatible = "qcom,sm8550-qce", "qcom,sm8150-qce", "qcom,qce"; - reg = <0x0 0x01dfa000 0x0 0x6000>; - dmas = <&cryptobam 4>, <&cryptobam 5>; --- -2.39.2 - diff --git a/queue-6.4/arm64-dts-qcom-sm8550-correct-pinctrl-unit-address.patch b/queue-6.4/arm64-dts-qcom-sm8550-correct-pinctrl-unit-address.patch deleted file mode 100644 index 755d8347929..00000000000 --- a/queue-6.4/arm64-dts-qcom-sm8550-correct-pinctrl-unit-address.patch +++ /dev/null @@ -1,39 +0,0 @@ -From 11d1e056acb8e47007ef1600740cb6fb06e7554e Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Wed, 19 Apr 2023 23:18:55 +0200 -Subject: arm64: dts: qcom: sm8550: correct pinctrl unit address - -From: Krzysztof Kozlowski - -[ Upstream commit 950a4fe6ec8498799d1c7bd31a489a718f94a87e ] - -Match unit-address to reg entry to fix dtbs W=1 warnings: - - Warning (simple_bus_reg): /soc@0/pinctrl@f000000: simple-bus unit address format error, expected "f100000" - -Fixes: ffc50b2d3828 ("arm64: dts: qcom: Add base SM8550 dtsi") -Signed-off-by: Krzysztof Kozlowski -Reviewed-by: Konrad Dybcio -Signed-off-by: Bjorn Andersson -Link: https://lore.kernel.org/r/20230419211856.79332-17-krzysztof.kozlowski@linaro.org -Signed-off-by: Sasha Levin ---- - arch/arm64/boot/dts/qcom/sm8550.dtsi | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/arch/arm64/boot/dts/qcom/sm8550.dtsi b/arch/arm64/boot/dts/qcom/sm8550.dtsi -index 7bf101095bd35..15716e34e5365 100644 ---- a/arch/arm64/boot/dts/qcom/sm8550.dtsi -+++ b/arch/arm64/boot/dts/qcom/sm8550.dtsi -@@ -2883,7 +2883,7 @@ spmi_bus: spmi@c400000 { - #interrupt-cells = <4>; - }; - -- tlmm: pinctrl@f000000 { -+ tlmm: pinctrl@f100000 { - compatible = "qcom,sm8550-tlmm"; - reg = <0 0x0f100000 0 0x300000>; - interrupts = ; --- -2.39.2 - diff --git a/queue-6.4/arm64-dts-qcom-sm8550-flush-rsc-sleep-wake-votes.patch b/queue-6.4/arm64-dts-qcom-sm8550-flush-rsc-sleep-wake-votes.patch deleted file mode 100644 index fb3c0091eaa..00000000000 --- a/queue-6.4/arm64-dts-qcom-sm8550-flush-rsc-sleep-wake-votes.patch +++ /dev/null @@ -1,40 +0,0 @@ -From af6f7626ac8f7d0e6ac43c8528d215c01656fe6f Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Wed, 31 May 2023 15:22:42 +0200 -Subject: arm64: dts: qcom: sm8550: Flush RSC sleep & wake votes - -From: Konrad Dybcio - -[ Upstream commit 4b2c7ac8e469ab7f92e50c34ad4012a77e79d078 ] - -The rpmh driver will cache sleep and wake votes until the cluster -power-domain is about to enter idle, to avoid unnecessary writes. So -associate the apps_rsc with the cluster pd, so that it can be notified -about this event. - -Without this, only AMC votes are being commited. - -Fixes: ffc50b2d3828 ("arm64: dts: qcom: Add base SM8550 dtsi") -Signed-off-by: Konrad Dybcio -Signed-off-by: Bjorn Andersson -Link: https://lore.kernel.org/r/20230531-topic-rsc-v1-8-b4a985f57b8b@linaro.org -Signed-off-by: Sasha Levin ---- - arch/arm64/boot/dts/qcom/sm8550.dtsi | 1 + - 1 file changed, 1 insertion(+) - -diff --git a/arch/arm64/boot/dts/qcom/sm8550.dtsi b/arch/arm64/boot/dts/qcom/sm8550.dtsi -index 15716e34e5365..13fd8f516d182 100644 ---- a/arch/arm64/boot/dts/qcom/sm8550.dtsi -+++ b/arch/arm64/boot/dts/qcom/sm8550.dtsi -@@ -3597,6 +3597,7 @@ apps_rsc: rsc@17a00000 { - qcom,drv-id = <2>; - qcom,tcs-config = , , - , ; -+ power-domains = <&CLUSTER_PD>; - - apps_bcm_voter: bcm-voter { - compatible = "qcom,bcm-voter"; --- -2.39.2 - diff --git a/queue-6.4/arm64-dts-renesas-ulcb-kf-remove-flow-control-for-sc.patch b/queue-6.4/arm64-dts-renesas-ulcb-kf-remove-flow-control-for-sc.patch deleted file mode 100644 index 1304aebd3d5..00000000000 --- a/queue-6.4/arm64-dts-renesas-ulcb-kf-remove-flow-control-for-sc.patch +++ /dev/null @@ -1,46 +0,0 @@ -From 812e4a63125a0d99192d8595844e5f295f5d0688 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Thu, 25 May 2023 10:48:22 +0200 -Subject: arm64: dts: renesas: ulcb-kf: Remove flow control for SCIF1 - -From: Wolfram Sang - -[ Upstream commit 1a2c4e5635177939a088d22fa35c6a7032725663 ] - -The schematics are misleading, the flow control is for HSCIF1. We need -SCIF1 for GNSS/GPS which does not use flow control. - -Fixes: c6c816e22bc8 ("arm64: dts: ulcb-kf: enable SCIF1") -Signed-off-by: Wolfram Sang -Reviewed-by: Geert Uytterhoeven -Link: https://lore.kernel.org/r/20230525084823.4195-2-wsa+renesas@sang-engineering.com -Signed-off-by: Geert Uytterhoeven -Signed-off-by: Sasha Levin ---- - arch/arm64/boot/dts/renesas/ulcb-kf.dtsi | 3 +-- - 1 file changed, 1 insertion(+), 2 deletions(-) - -diff --git a/arch/arm64/boot/dts/renesas/ulcb-kf.dtsi b/arch/arm64/boot/dts/renesas/ulcb-kf.dtsi -index efc80960380f4..c78b7a5c2e2aa 100644 ---- a/arch/arm64/boot/dts/renesas/ulcb-kf.dtsi -+++ b/arch/arm64/boot/dts/renesas/ulcb-kf.dtsi -@@ -367,7 +367,7 @@ hscif0_pins: hscif0 { - }; - - scif1_pins: scif1 { -- groups = "scif1_data_b", "scif1_ctrl"; -+ groups = "scif1_data_b"; - function = "scif1"; - }; - -@@ -397,7 +397,6 @@ &sound_clk_pins - &scif1 { - pinctrl-0 = <&scif1_pins>; - pinctrl-names = "default"; -- uart-has-rtscts; - - status = "okay"; - }; --- -2.39.2 - diff --git a/queue-6.4/arm64-dts-rockchip-assign-es8316-mclk-rate-on-rk3588.patch b/queue-6.4/arm64-dts-rockchip-assign-es8316-mclk-rate-on-rk3588.patch deleted file mode 100644 index c2b7071de1a..00000000000 --- a/queue-6.4/arm64-dts-rockchip-assign-es8316-mclk-rate-on-rk3588.patch +++ /dev/null @@ -1,54 +0,0 @@ -From ac099c760a905cff327b6363bfbd24ff71606a69 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Tue, 30 May 2023 21:11:40 +0300 -Subject: arm64: dts: rockchip: Assign ES8316 MCLK rate on rk3588-rock-5b - -From: Cristian Ciocaltea - -[ Upstream commit 28ee08cef4f838c343013330a3cd12674c4dd113 ] - -The I2S0_8CH_MCLKOUT clock rate on Rock 5B board defaults to 12 MHz and -it is used to provide the master clock (MCLK) for the ES8316 audio -codec. - -On sound card initialization, this limits the allowed sample rates -according to the MCLK/LRCK ratios supported by the codec, which results -in the following non-standard rates: 15625, 30000, 31250, 46875. - -Hence, the very first access of the sound card fails: - - Broken configuration for playback: no configurations available: Invalid argument - Setting of hwparams failed: Invalid argument - -However, all subsequent attempts will succeed, as the audio graph card -will request a correct clock frequency, based on the stream sample rate -and the multiplication factor. - -Assign MCLK to 12.288 MHz, which allows the codec to advertise most of -the standard sample rates. - -Fixes: 55529fe3f32d ("arm64: dts: rockchip: Add rk3588-rock-5b analog audio") -Signed-off-by: Cristian Ciocaltea -Link: https://lore.kernel.org/r/20230530181140.483936-4-cristian.ciocaltea@collabora.com -Signed-off-by: Heiko Stuebner -Signed-off-by: Sasha Levin ---- - arch/arm64/boot/dts/rockchip/rk3588-rock-5b.dts | 2 ++ - 1 file changed, 2 insertions(+) - -diff --git a/arch/arm64/boot/dts/rockchip/rk3588-rock-5b.dts b/arch/arm64/boot/dts/rockchip/rk3588-rock-5b.dts -index 3e4aee8f70c1b..30cdd366813fb 100644 ---- a/arch/arm64/boot/dts/rockchip/rk3588-rock-5b.dts -+++ b/arch/arm64/boot/dts/rockchip/rk3588-rock-5b.dts -@@ -133,6 +133,8 @@ es8316: audio-codec@11 { - reg = <0x11>; - clocks = <&cru I2S0_8CH_MCLKOUT>; - clock-names = "mclk"; -+ assigned-clocks = <&cru I2S0_8CH_MCLKOUT>; -+ assigned-clock-rates = <12288000>; - #sound-dai-cells = <0>; - - port { --- -2.39.2 - diff --git a/queue-6.4/arm64-dts-rockchip-fix-compatible-for-bluetooth-on-r.patch b/queue-6.4/arm64-dts-rockchip-fix-compatible-for-bluetooth-on-r.patch deleted file mode 100644 index 98faa3fccc0..00000000000 --- a/queue-6.4/arm64-dts-rockchip-fix-compatible-for-bluetooth-on-r.patch +++ /dev/null @@ -1,42 +0,0 @@ -From 96b2734b1884a16e1e53c8f7ea7bda347829ae7c Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Mon, 8 May 2023 11:08:11 -0500 -Subject: arm64: dts: rockchip: Fix compatible for Bluetooth on rk3566-anbernic - -From: Chris Morgan - -[ Upstream commit a325956fa7048906e26a4535ac2e87e111788fe8 ] - -The realtek Bluetooth module uses the same driver as the -realtek,rtl8822cs-bt and the realtek,rtl8723bs-bt, however by selecting -the 8723bs advanced power saving features are disabled that appear -to interfere with normal operation of the bluetooth module. This -change switches the compatible string to disable power saving. Without -this patch evtest of a paired bluetooth controller fails, with this -patch the controller operates as expected. - -Fixes: b6986b7920bb ("arm64: dts: rockchip: Update compatible for bluetooth") -Signed-off-by: Chris Morgan -Link: https://lore.kernel.org/r/20230508160811.3568213-3-macroalpha82@gmail.com -Signed-off-by: Heiko Stuebner -Signed-off-by: Sasha Levin ---- - arch/arm64/boot/dts/rockchip/rk3566-anbernic-rgxx3.dtsi | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/arch/arm64/boot/dts/rockchip/rk3566-anbernic-rgxx3.dtsi b/arch/arm64/boot/dts/rockchip/rk3566-anbernic-rgxx3.dtsi -index 8fadd8afb1906..ad43fa199ca55 100644 ---- a/arch/arm64/boot/dts/rockchip/rk3566-anbernic-rgxx3.dtsi -+++ b/arch/arm64/boot/dts/rockchip/rk3566-anbernic-rgxx3.dtsi -@@ -716,7 +716,7 @@ &uart1 { - status = "okay"; - - bluetooth { -- compatible = "realtek,rtl8821cs-bt", "realtek,rtl8822cs-bt"; -+ compatible = "realtek,rtl8821cs-bt", "realtek,rtl8723bs-bt"; - device-wake-gpios = <&gpio4 4 GPIO_ACTIVE_HIGH>; - enable-gpios = <&gpio4 3 GPIO_ACTIVE_HIGH>; - host-wake-gpios = <&gpio4 5 GPIO_ACTIVE_HIGH>; --- -2.39.2 - diff --git a/queue-6.4/arm64-dts-ti-k3-am69-sk-fix-main_i2c0-alias.patch b/queue-6.4/arm64-dts-ti-k3-am69-sk-fix-main_i2c0-alias.patch deleted file mode 100644 index 7830fbe7405..00000000000 --- a/queue-6.4/arm64-dts-ti-k3-am69-sk-fix-main_i2c0-alias.patch +++ /dev/null @@ -1,43 +0,0 @@ -From a72e03e7578958463ec0c5fef20a45080b572e01 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Fri, 2 Jun 2023 16:49:33 -0500 -Subject: arm64: dts: ti: k3-am69-sk: Fix main_i2c0 alias - -From: Nishanth Menon - -[ Upstream commit b38c6ced4ec5b3f6260ff6cc2b71e8a3d8c897d7 ] - -main_i2c0 is aliased as i2c0 which creates a problem for u-boot R5 -SPL attempting to reuse the same definition in the common board -detection logic as it looks for the first i2c instance as the bus on -which to detect the eeprom to understand the board variant involved. -Switch main_i2c0 to i2c3 alias allowing us to introduce wkup_i2c0 -and potentially space for mcu_i2c instances in the gap for follow on -patches. - -Fixes: 635fb18ba008 ("arch: arm64: dts: Add support for AM69 Starter Kit") -Signed-off-by: Nishanth Menon -Reviewed-by: Udit Kumar -Link: https://lore.kernel.org/r/20230602214937.2349545-5-nm@ti.com -Signed-off-by: Vignesh Raghavendra -Signed-off-by: Sasha Levin ---- - arch/arm64/boot/dts/ti/k3-am69-sk.dts | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/arch/arm64/boot/dts/ti/k3-am69-sk.dts b/arch/arm64/boot/dts/ti/k3-am69-sk.dts -index bc49ba534790e..f364b7803115d 100644 ---- a/arch/arm64/boot/dts/ti/k3-am69-sk.dts -+++ b/arch/arm64/boot/dts/ti/k3-am69-sk.dts -@@ -23,7 +23,7 @@ chosen { - aliases { - serial2 = &main_uart8; - mmc1 = &main_sdhci1; -- i2c0 = &main_i2c0; -+ i2c3 = &main_i2c0; - }; - - memory@80000000 { --- -2.39.2 - diff --git a/queue-6.4/arm64-dts-ti-k3-j7200-fix-physical-address-of-pin.patch b/queue-6.4/arm64-dts-ti-k3-j7200-fix-physical-address-of-pin.patch deleted file mode 100644 index a45323be8b4..00000000000 --- a/queue-6.4/arm64-dts-ti-k3-j7200-fix-physical-address-of-pin.patch +++ /dev/null @@ -1,83 +0,0 @@ -From 6f7dcb568a46e3899fa39389b89e53b1298c2365 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Wed, 19 Apr 2023 09:30:06 +0530 -Subject: arm64: dts: ti: k3-j7200: Fix physical address of pin - -From: Keerthy - -[ Upstream commit 3d011933000ed9054c649952d83162d24f020a93 ] - -wkup_pmx splits into multiple regions. Like - - wkup_pmx0 -> 13 pins (WKUP_PADCONFIG 0 - 12) - wkup_pmx1 -> 2 pins (WKUP_PADCONFIG 14 - 15) - wkup_pmx2 -> 59 pins (WKUP_PADCONFIG 26 - 84) - wkup_pmx3 -> 8 pins (WKUP_PADCONFIG 93 - 100) - -With this split, pin offset needs to be adjusted to -match with new pmx for all pins above wkup_pmx0. - -Example a pin under wkup_pmx1 should start from 0 instead of -old offset(0x38 WKUP_PADCONFIG 14 offset) - -J7200 Datasheet (Table 6-106, Section 6.4 Pin Multiplexing) : -https://www.ti.com/lit/ds/symlink/dra821u.pdf - -Fixes: 9ae21ac445e9 ("arm64: dts: ti: k3-j7200: Fix wakeup pinmux range") - -Signed-off-by: Keerthy -Signed-off-by: Udit Kumar -Link: https://lore.kernel.org/r/20230419040007.3022780-2-u-kumar1@ti.com -Signed-off-by: Vignesh Raghavendra -Signed-off-by: Sasha Levin ---- - .../dts/ti/k3-j7200-common-proc-board.dts | 28 +++++++++---------- - 1 file changed, 14 insertions(+), 14 deletions(-) - -diff --git a/arch/arm64/boot/dts/ti/k3-j7200-common-proc-board.dts b/arch/arm64/boot/dts/ti/k3-j7200-common-proc-board.dts -index 0d39d6b8cc0ca..63633e4f6c59f 100644 ---- a/arch/arm64/boot/dts/ti/k3-j7200-common-proc-board.dts -+++ b/arch/arm64/boot/dts/ti/k3-j7200-common-proc-board.dts -@@ -83,25 +83,25 @@ vdd_sd_dv: gpio-regulator-TLV71033 { - &wkup_pmx2 { - mcu_cpsw_pins_default: mcu-cpsw-pins-default { - pinctrl-single,pins = < -- J721E_WKUP_IOPAD(0x0068, PIN_OUTPUT, 0) /* MCU_RGMII1_TX_CTL */ -- J721E_WKUP_IOPAD(0x006c, PIN_INPUT, 0) /* MCU_RGMII1_RX_CTL */ -- J721E_WKUP_IOPAD(0x0070, PIN_OUTPUT, 0) /* MCU_RGMII1_TD3 */ -- J721E_WKUP_IOPAD(0x0074, PIN_OUTPUT, 0) /* MCU_RGMII1_TD2 */ -- J721E_WKUP_IOPAD(0x0078, PIN_OUTPUT, 0) /* MCU_RGMII1_TD1 */ -- J721E_WKUP_IOPAD(0x007c, PIN_OUTPUT, 0) /* MCU_RGMII1_TD0 */ -- J721E_WKUP_IOPAD(0x0088, PIN_INPUT, 0) /* MCU_RGMII1_RD3 */ -- J721E_WKUP_IOPAD(0x008c, PIN_INPUT, 0) /* MCU_RGMII1_RD2 */ -- J721E_WKUP_IOPAD(0x0090, PIN_INPUT, 0) /* MCU_RGMII1_RD1 */ -- J721E_WKUP_IOPAD(0x0094, PIN_INPUT, 0) /* MCU_RGMII1_RD0 */ -- J721E_WKUP_IOPAD(0x0080, PIN_OUTPUT, 0) /* MCU_RGMII1_TXC */ -- J721E_WKUP_IOPAD(0x0084, PIN_INPUT, 0) /* MCU_RGMII1_RXC */ -+ J721E_WKUP_IOPAD(0x0000, PIN_OUTPUT, 0) /* MCU_RGMII1_TX_CTL */ -+ J721E_WKUP_IOPAD(0x0004, PIN_INPUT, 0) /* MCU_RGMII1_RX_CTL */ -+ J721E_WKUP_IOPAD(0x0008, PIN_OUTPUT, 0) /* MCU_RGMII1_TD3 */ -+ J721E_WKUP_IOPAD(0x000c, PIN_OUTPUT, 0) /* MCU_RGMII1_TD2 */ -+ J721E_WKUP_IOPAD(0x0010, PIN_OUTPUT, 0) /* MCU_RGMII1_TD1 */ -+ J721E_WKUP_IOPAD(0x0014, PIN_OUTPUT, 0) /* MCU_RGMII1_TD0 */ -+ J721E_WKUP_IOPAD(0x0020, PIN_INPUT, 0) /* MCU_RGMII1_RD3 */ -+ J721E_WKUP_IOPAD(0x0024, PIN_INPUT, 0) /* MCU_RGMII1_RD2 */ -+ J721E_WKUP_IOPAD(0x0028, PIN_INPUT, 0) /* MCU_RGMII1_RD1 */ -+ J721E_WKUP_IOPAD(0x002c, PIN_INPUT, 0) /* MCU_RGMII1_RD0 */ -+ J721E_WKUP_IOPAD(0x0018, PIN_OUTPUT, 0) /* MCU_RGMII1_TXC */ -+ J721E_WKUP_IOPAD(0x001c, PIN_INPUT, 0) /* MCU_RGMII1_RXC */ - >; - }; - - mcu_mdio_pins_default: mcu-mdio1-pins-default { - pinctrl-single,pins = < -- J721E_WKUP_IOPAD(0x009c, PIN_OUTPUT, 0) /* (L1) MCU_MDIO0_MDC */ -- J721E_WKUP_IOPAD(0x0098, PIN_INPUT, 0) /* (L4) MCU_MDIO0_MDIO */ -+ J721E_WKUP_IOPAD(0x0034, PIN_OUTPUT, 0) /* (L1) MCU_MDIO0_MDC */ -+ J721E_WKUP_IOPAD(0x0030, PIN_INPUT, 0) /* (L4) MCU_MDIO0_MDIO */ - >; - }; - }; --- -2.39.2 - diff --git a/queue-6.4/arm64-dts-ti-k3-j721e-beagleboneai64-fix-mailbox-nod.patch b/queue-6.4/arm64-dts-ti-k3-j721e-beagleboneai64-fix-mailbox-nod.patch deleted file mode 100644 index dfa2523cdac..00000000000 --- a/queue-6.4/arm64-dts-ti-k3-j721e-beagleboneai64-fix-mailbox-nod.patch +++ /dev/null @@ -1,70 +0,0 @@ -From 17da4b5c4655c15aa4c6cbf389a643af184acea9 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Mon, 15 May 2023 12:21:33 -0500 -Subject: arm64: dts: ti: k3-j721e-beagleboneai64: Fix mailbox node status - -From: Andrew Davis - -[ Upstream commit 155e7635ed1f3814d94d12556a3a0fed41d05b76 ] - -Mailbox nodes are now disabled by default. The BeagleBoard AI64 DT -addition went in at around the same time and must have missed that -change so the mailboxes are not re-enabled. Do that here. - -Fixes: fae14a1cb8dd ("arm64: dts: ti: Add k3-j721e-beagleboneai64") -Signed-off-by: Andrew Davis -Reviewed-by: Nishanth Menon -Link: https://lore.kernel.org/r/20230515172137.474626-1-afd@ti.com -Signed-off-by: Vignesh Raghavendra -Signed-off-by: Sasha Levin ---- - arch/arm64/boot/dts/ti/k3-j721e-beagleboneai64.dts | 5 +++++ - 1 file changed, 5 insertions(+) - -diff --git a/arch/arm64/boot/dts/ti/k3-j721e-beagleboneai64.dts b/arch/arm64/boot/dts/ti/k3-j721e-beagleboneai64.dts -index 37c24b077b6aa..8a62ac263b89a 100644 ---- a/arch/arm64/boot/dts/ti/k3-j721e-beagleboneai64.dts -+++ b/arch/arm64/boot/dts/ti/k3-j721e-beagleboneai64.dts -@@ -936,6 +936,7 @@ &ufs_wrapper { - }; - - &mailbox0_cluster0 { -+ status = "okay"; - interrupts = <436>; - - mbox_mcu_r5fss0_core0: mbox-mcu-r5fss0-core0 { -@@ -950,6 +951,7 @@ mbox_mcu_r5fss0_core1: mbox-mcu-r5fss0-core1 { - }; - - &mailbox0_cluster1 { -+ status = "okay"; - interrupts = <432>; - - mbox_main_r5fss0_core0: mbox-main-r5fss0-core0 { -@@ -964,6 +966,7 @@ mbox_main_r5fss0_core1: mbox-main-r5fss0-core1 { - }; - - &mailbox0_cluster2 { -+ status = "okay"; - interrupts = <428>; - - mbox_main_r5fss1_core0: mbox-main-r5fss1-core0 { -@@ -978,6 +981,7 @@ mbox_main_r5fss1_core1: mbox-main-r5fss1-core1 { - }; - - &mailbox0_cluster3 { -+ status = "okay"; - interrupts = <424>; - - mbox_c66_0: mbox-c66-0 { -@@ -992,6 +996,7 @@ mbox_c66_1: mbox-c66-1 { - }; - - &mailbox0_cluster4 { -+ status = "okay"; - interrupts = <420>; - - mbox_c71_0: mbox-c71-0 { --- -2.39.2 - diff --git a/queue-6.4/arm64-dts-ti-k3-j784s4-evm-fix-main_i2c0-alias.patch b/queue-6.4/arm64-dts-ti-k3-j784s4-evm-fix-main_i2c0-alias.patch deleted file mode 100644 index f522b635910..00000000000 --- a/queue-6.4/arm64-dts-ti-k3-j784s4-evm-fix-main_i2c0-alias.patch +++ /dev/null @@ -1,43 +0,0 @@ -From 86cbe34ea02693cef83c8fb28f5413c4f5e91684 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Fri, 2 Jun 2023 16:49:30 -0500 -Subject: arm64: dts: ti: k3-j784s4-evm: Fix main_i2c0 alias - -From: Nishanth Menon - -[ Upstream commit c10a9df30e3401bd5a5ee43f1afd6c2b2ca75ad7 ] - -main_i2c0 is aliased as i2c0 which creates a problem for u-boot R5 -SPL attempting to reuse the same definition in the common board -detection logic as it looks for the first i2c instance as the bus on -which to detect the eeprom to understand the board variant involved. -Switch main_i2c0 to i2c3 alias allowing us to introduce wkup_i2c0 -and potentially space for mcu_i2c instances in the gap for follow on -patches. - -Fixes: e20a06aca5c9 ("arm64: dts: ti: Add support for J784S4 EVM board") -Signed-off-by: Nishanth Menon -Reviewed-by: Udit Kumar -Link: https://lore.kernel.org/r/20230602214937.2349545-2-nm@ti.com -Signed-off-by: Vignesh Raghavendra -Signed-off-by: Sasha Levin ---- - arch/arm64/boot/dts/ti/k3-j784s4-evm.dts | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/arch/arm64/boot/dts/ti/k3-j784s4-evm.dts b/arch/arm64/boot/dts/ti/k3-j784s4-evm.dts -index f33815953e779..e8e007e4a7d4f 100644 ---- a/arch/arm64/boot/dts/ti/k3-j784s4-evm.dts -+++ b/arch/arm64/boot/dts/ti/k3-j784s4-evm.dts -@@ -23,7 +23,7 @@ aliases { - serial2 = &main_uart8; - mmc0 = &main_sdhci0; - mmc1 = &main_sdhci1; -- i2c0 = &main_i2c0; -+ i2c3 = &main_i2c0; - }; - - memory@80000000 { --- -2.39.2 - diff --git a/queue-6.4/arm64-dts-ti-k3-j784s4-fix-wakeup-pinmux-range-and-p.patch b/queue-6.4/arm64-dts-ti-k3-j784s4-fix-wakeup-pinmux-range-and-p.patch deleted file mode 100644 index fe8415bff35..00000000000 --- a/queue-6.4/arm64-dts-ti-k3-j784s4-fix-wakeup-pinmux-range-and-p.patch +++ /dev/null @@ -1,122 +0,0 @@ -From 48d3c023090f2d7573d8da519bafec42c93221db Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Wed, 3 May 2023 14:01:43 +0530 -Subject: arm64: dts: ti: k3-j784s4: Fix wakeup pinmux range and pinctrl node - offsets - -From: Thejasvi Konduru - -[ Upstream commit 14462bd0b247d05070d48d0f02eb7ca2680ab7bd ] - -The wkup_pmx register region in j784s4 has multiple non-addressable -regions, hence the existing wkup_pmx region is split as follows to -avoid the non-addressable regions. The pinctrl node offsets are -also corrected as per the newly split wkup_pmx* nodes. - -wkup_pmx0 -> 13 pins (WKUP_PADCONFIG 0 - 12) -wkup_pmx1 -> 11 pins (WKUP_PADCONFIG 14 - 24) -wkup_pmx2 -> 72 pins (WKUP_PADCONFIG 26 - 97) -wkup_pmx3 -> 1 pin (WKUP_PADCONFIG 100) - -Fixes: 4664ebd8346a ("arm64: dts: ti: Add initial support for J784S4 SoC") -Signed-off-by: Thejasvi Konduru -Reviewed-by: Nishanth Menon -Link: https://lore.kernel.org/r/20230503083143.32369-1-t-konduru@ti.com -Signed-off-by: Vignesh Raghavendra -Signed-off-by: Sasha Levin ---- - arch/arm64/boot/dts/ti/k3-j784s4-evm.dts | 30 +++++++++---------- - .../boot/dts/ti/k3-j784s4-mcu-wakeup.dtsi | 29 +++++++++++++++++- - 2 files changed, 43 insertions(+), 16 deletions(-) - -diff --git a/arch/arm64/boot/dts/ti/k3-j784s4-evm.dts b/arch/arm64/boot/dts/ti/k3-j784s4-evm.dts -index e8e007e4a7d4f..34e9bc89ac663 100644 ---- a/arch/arm64/boot/dts/ti/k3-j784s4-evm.dts -+++ b/arch/arm64/boot/dts/ti/k3-j784s4-evm.dts -@@ -141,28 +141,28 @@ J784S4_IOPAD(0x020, PIN_INPUT, 7) /* (AJ35) MCAN15_RX.GPIO0_8 */ - }; - }; - --&wkup_pmx0 { -+&wkup_pmx2 { - mcu_cpsw_pins_default: mcu-cpsw-pins-default { - pinctrl-single,pins = < -- J784S4_WKUP_IOPAD(0x094, PIN_INPUT, 0) /* (A35) MCU_RGMII1_RD0 */ -- J784S4_WKUP_IOPAD(0x090, PIN_INPUT, 0) /* (B36) MCU_RGMII1_RD1 */ -- J784S4_WKUP_IOPAD(0x08c, PIN_INPUT, 0) /* (C36) MCU_RGMII1_RD2 */ -- J784S4_WKUP_IOPAD(0x088, PIN_INPUT, 0) /* (D36) MCU_RGMII1_RD3 */ -- J784S4_WKUP_IOPAD(0x084, PIN_INPUT, 0) /* (B37) MCU_RGMII1_RXC */ -- J784S4_WKUP_IOPAD(0x06c, PIN_INPUT, 0) /* (C37) MCU_RGMII1_RX_CTL */ -- J784S4_WKUP_IOPAD(0x07c, PIN_OUTPUT, 0) /* (D37) MCU_RGMII1_TD0 */ -- J784S4_WKUP_IOPAD(0x078, PIN_OUTPUT, 0) /* (D38) MCU_RGMII1_TD1 */ -- J784S4_WKUP_IOPAD(0x074, PIN_OUTPUT, 0) /* (E37) MCU_RGMII1_TD2 */ -- J784S4_WKUP_IOPAD(0x070, PIN_OUTPUT, 0) /* (E38) MCU_RGMII1_TD3 */ -- J784S4_WKUP_IOPAD(0x080, PIN_OUTPUT, 0) /* (E36) MCU_RGMII1_TXC */ -- J784S4_WKUP_IOPAD(0x068, PIN_OUTPUT, 0) /* (C38) MCU_RGMII1_TX_CTL */ -+ J784S4_WKUP_IOPAD(0x02c, PIN_INPUT, 0) /* (A35) MCU_RGMII1_RD0 */ -+ J784S4_WKUP_IOPAD(0x028, PIN_INPUT, 0) /* (B36) MCU_RGMII1_RD1 */ -+ J784S4_WKUP_IOPAD(0x024, PIN_INPUT, 0) /* (C36) MCU_RGMII1_RD2 */ -+ J784S4_WKUP_IOPAD(0x020, PIN_INPUT, 0) /* (D36) MCU_RGMII1_RD3 */ -+ J784S4_WKUP_IOPAD(0x01c, PIN_INPUT, 0) /* (B37) MCU_RGMII1_RXC */ -+ J784S4_WKUP_IOPAD(0x004, PIN_INPUT, 0) /* (C37) MCU_RGMII1_RX_CTL */ -+ J784S4_WKUP_IOPAD(0x014, PIN_OUTPUT, 0) /* (D37) MCU_RGMII1_TD0 */ -+ J784S4_WKUP_IOPAD(0x010, PIN_OUTPUT, 0) /* (D38) MCU_RGMII1_TD1 */ -+ J784S4_WKUP_IOPAD(0x00c, PIN_OUTPUT, 0) /* (E37) MCU_RGMII1_TD2 */ -+ J784S4_WKUP_IOPAD(0x008, PIN_OUTPUT, 0) /* (E38) MCU_RGMII1_TD3 */ -+ J784S4_WKUP_IOPAD(0x018, PIN_OUTPUT, 0) /* (E36) MCU_RGMII1_TXC */ -+ J784S4_WKUP_IOPAD(0x000, PIN_OUTPUT, 0) /* (C38) MCU_RGMII1_TX_CTL */ - >; - }; - - mcu_mdio_pins_default: mcu-mdio-pins-default { - pinctrl-single,pins = < -- J784S4_WKUP_IOPAD(0x09c, PIN_OUTPUT, 0) /* (A36) MCU_MDIO0_MDC */ -- J784S4_WKUP_IOPAD(0x098, PIN_INPUT, 0) /* (B35) MCU_MDIO0_MDIO */ -+ J784S4_WKUP_IOPAD(0x034, PIN_OUTPUT, 0) /* (A36) MCU_MDIO0_MDC */ -+ J784S4_WKUP_IOPAD(0x030, PIN_INPUT, 0) /* (B35) MCU_MDIO0_MDIO */ - >; - }; - }; -diff --git a/arch/arm64/boot/dts/ti/k3-j784s4-mcu-wakeup.dtsi b/arch/arm64/boot/dts/ti/k3-j784s4-mcu-wakeup.dtsi -index f04fcb614cbe4..ed2b40369c59a 100644 ---- a/arch/arm64/boot/dts/ti/k3-j784s4-mcu-wakeup.dtsi -+++ b/arch/arm64/boot/dts/ti/k3-j784s4-mcu-wakeup.dtsi -@@ -50,7 +50,34 @@ mcu_ram: sram@41c00000 { - wkup_pmx0: pinctrl@4301c000 { - compatible = "pinctrl-single"; - /* Proxy 0 addressing */ -- reg = <0x00 0x4301c000 0x00 0x178>; -+ reg = <0x00 0x4301c000 0x00 0x034>; -+ #pinctrl-cells = <1>; -+ pinctrl-single,register-width = <32>; -+ pinctrl-single,function-mask = <0xffffffff>; -+ }; -+ -+ wkup_pmx1: pinctrl@4301c038 { -+ compatible = "pinctrl-single"; -+ /* Proxy 0 addressing */ -+ reg = <0x00 0x4301c038 0x00 0x02c>; -+ #pinctrl-cells = <1>; -+ pinctrl-single,register-width = <32>; -+ pinctrl-single,function-mask = <0xffffffff>; -+ }; -+ -+ wkup_pmx2: pinctrl@4301c068 { -+ compatible = "pinctrl-single"; -+ /* Proxy 0 addressing */ -+ reg = <0x00 0x4301c068 0x00 0x120>; -+ #pinctrl-cells = <1>; -+ pinctrl-single,register-width = <32>; -+ pinctrl-single,function-mask = <0xffffffff>; -+ }; -+ -+ wkup_pmx3: pinctrl@4301c190 { -+ compatible = "pinctrl-single"; -+ /* Proxy 0 addressing */ -+ reg = <0x00 0x4301c190 0x00 0x004>; - #pinctrl-cells = <1>; - pinctrl-single,register-width = <32>; - pinctrl-single,function-mask = <0xffffffff>; --- -2.39.2 - diff --git a/queue-6.4/arm64-sme-use-str-p-to-clear-ffr-context-field-in-st.patch b/queue-6.4/arm64-sme-use-str-p-to-clear-ffr-context-field-in-st.patch deleted file mode 100644 index e7fe042ebea..00000000000 --- a/queue-6.4/arm64-sme-use-str-p-to-clear-ffr-context-field-in-st.patch +++ /dev/null @@ -1,76 +0,0 @@ -From 6c891cd0eece597a9eb627a73b6ffdd929dc3d71 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Wed, 28 Jun 2023 16:56:05 +0100 -Subject: arm64: sme: Use STR P to clear FFR context field in streaming SVE - mode - -From: Will Deacon - -[ Upstream commit 893b24181b4c4bf1fa2841b1ed192e5413a97cb1 ] - -The FFR is a predicate register which can vary between 16 and 256 bits -in size depending upon the configured vector length. When saving the -SVE state in streaming SVE mode, the FFR register is inaccessible and -so commit 9f5848665788 ("arm64/sve: Make access to FFR optional") simply -clears the FFR field of the in-memory context structure. Unfortunately, -it achieves this using an unconditional 8-byte store and so if the SME -vector length is anything other than 64 bytes in size we will either -fail to clear the entire field or, worse, we will corrupt memory -immediately following the structure. This has led to intermittent kfence -splats in CI [1] and can trigger kmalloc Redzone corruption messages -when running the 'fp-stress' kselftest: - - | ============================================================================= - | BUG kmalloc-1k (Not tainted): kmalloc Redzone overwritten - | ----------------------------------------------------------------------------- - | - | 0xffff000809bf1e22-0xffff000809bf1e27 @offset=7714. First byte 0x0 instead of 0xcc - | Allocated in do_sme_acc+0x9c/0x220 age=2613 cpu=1 pid=531 - | __kmalloc+0x8c/0xcc - | do_sme_acc+0x9c/0x220 - | ... - -Replace the 8-byte store with a store of a predicate register which has -been zero-initialised with PFALSE, ensuring that the entire field is -cleared in memory. - -[1] https://lore.kernel.org/r/CA+G9fYtU7HsV0R0dp4XEH5xXHSJFw8KyDf5VQrLLfMxWfxQkag@mail.gmail.com - -Cc: Mark Brown -Cc: Mark Rutland -Cc: Naresh Kamboju -Fixes: 9f5848665788 ("arm64/sve: Make access to FFR optional") -Reported-by: Linux Kernel Functional Testing -Signed-off-by: Will Deacon -Reviewed-by: Mark Brown -Tested-by: Anders Roxell -Link: https://lore.kernel.org/r/20230628155605.22296-1-will@kernel.org -Signed-off-by: Catalin Marinas -Signed-off-by: Sasha Levin ---- - arch/arm64/include/asm/fpsimdmacros.h | 6 +++--- - 1 file changed, 3 insertions(+), 3 deletions(-) - -diff --git a/arch/arm64/include/asm/fpsimdmacros.h b/arch/arm64/include/asm/fpsimdmacros.h -index cd03819a3b686..cdf6a35e39944 100644 ---- a/arch/arm64/include/asm/fpsimdmacros.h -+++ b/arch/arm64/include/asm/fpsimdmacros.h -@@ -316,12 +316,12 @@ - _for n, 0, 15, _sve_str_p \n, \nxbase, \n - 16 - cbz \save_ffr, 921f - _sve_rdffr 0 -- _sve_str_p 0, \nxbase -- _sve_ldr_p 0, \nxbase, -16 - b 922f - 921: -- str xzr, [x\nxbase] // Zero out FFR -+ _sve_pfalse 0 // Zero out FFR - 922: -+ _sve_str_p 0, \nxbase -+ _sve_ldr_p 0, \nxbase, -16 - mrs x\nxtmp, fpsr - str w\nxtmp, [\xpfpsr] - mrs x\nxtmp, fpcr --- -2.39.2 - diff --git a/queue-6.4/asoc-amd-acp-clear-pdm-dma-interrupt-mask.patch b/queue-6.4/asoc-amd-acp-clear-pdm-dma-interrupt-mask.patch deleted file mode 100644 index c1b517d7f15..00000000000 --- a/queue-6.4/asoc-amd-acp-clear-pdm-dma-interrupt-mask.patch +++ /dev/null @@ -1,38 +0,0 @@ -From 90baa06504ddbdb4146108a6c5989ed23c86bcef Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Thu, 22 Jun 2023 20:53:38 +0530 -Subject: ASoC: amd: acp: clear pdm dma interrupt mask - -From: Syed Saba Kareem - -[ Upstream commit ad60672394bd1f95c58d3d9336902f47e05126fc ] - -Clear pdm dma interrupt mask in acp_dmic_shutdown(). - -'Fixes: c32bd332ce5c9 ("ASoC: amd: acp: Add generic support for -PDM controller on ACP")' - -Signed-off-by: Syed Saba Kareem -Link: https://lore.kernel.org/r/Message-Id: <20230622152406.3709231-1-Syed.SabaKareem@amd.com> -Signed-off-by: Mark Brown -Signed-off-by: Sasha Levin ---- - sound/soc/amd/acp/acp-pdm.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/sound/soc/amd/acp/acp-pdm.c b/sound/soc/amd/acp/acp-pdm.c -index 66ec6b6a59723..f8030b79ac17c 100644 ---- a/sound/soc/amd/acp/acp-pdm.c -+++ b/sound/soc/amd/acp/acp-pdm.c -@@ -176,7 +176,7 @@ static void acp_dmic_dai_shutdown(struct snd_pcm_substream *substream, - - /* Disable DMIC interrupts */ - ext_int_ctrl = readl(ACP_EXTERNAL_INTR_CNTL(adata, 0)); -- ext_int_ctrl |= ~PDM_DMA_INTR_MASK; -+ ext_int_ctrl &= ~PDM_DMA_INTR_MASK; - writel(ext_int_ctrl, ACP_EXTERNAL_INTR_CNTL(adata, 0)); - } - --- -2.39.2 - diff --git a/queue-6.4/asoc-dt-bindings-mediatek-mt8188-afe-correct-clock-n.patch b/queue-6.4/asoc-dt-bindings-mediatek-mt8188-afe-correct-clock-n.patch deleted file mode 100644 index 79393c1b50d..00000000000 --- a/queue-6.4/asoc-dt-bindings-mediatek-mt8188-afe-correct-clock-n.patch +++ /dev/null @@ -1,82 +0,0 @@ -From 213e15f39729723106e2ba37f99a9f423ebd8928 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Wed, 10 May 2023 11:55:25 +0800 -Subject: ASoC: dt-bindings: mediatek,mt8188-afe: correct clock name - -From: Trevor Wu - -[ Upstream commit 1e4fe75e9746be8e40c57132bb3fba1ce3dd24af ] - -The original clock names are different from the list in driver code. -Correct the mismatched binding names in the patch. - -Because no mt8188 upstream dts exists, it doesn't affect the existing -dts file. - -Fixes: 692d25b67e10 ("ASoC: dt-bindings: mediatek,mt8188-afe: add audio afe document") -Signed-off-by: Trevor Wu ---- - .../bindings/sound/mediatek,mt8188-afe.yaml | 36 +++++++++---------- - 1 file changed, 18 insertions(+), 18 deletions(-) - -diff --git a/Documentation/devicetree/bindings/sound/mediatek,mt8188-afe.yaml b/Documentation/devicetree/bindings/sound/mediatek,mt8188-afe.yaml -index 82ccb32f08f27..9e877f0d19fbb 100644 ---- a/Documentation/devicetree/bindings/sound/mediatek,mt8188-afe.yaml -+++ b/Documentation/devicetree/bindings/sound/mediatek,mt8188-afe.yaml -@@ -63,15 +63,15 @@ properties: - - const: apll12_div2 - - const: apll12_div3 - - const: apll12_div9 -- - const: a1sys_hp_sel -- - const: aud_intbus_sel -- - const: audio_h_sel -- - const: audio_local_bus_sel -- - const: dptx_m_sel -- - const: i2so1_m_sel -- - const: i2so2_m_sel -- - const: i2si1_m_sel -- - const: i2si2_m_sel -+ - const: top_a1sys_hp -+ - const: top_aud_intbus -+ - const: top_audio_h -+ - const: top_audio_local_bus -+ - const: top_dptx -+ - const: top_i2so1 -+ - const: top_i2so2 -+ - const: top_i2si1 -+ - const: top_i2si2 - - const: adsp_audio_26m - - mediatek,etdm-in1-cowork-source: -@@ -193,15 +193,15 @@ examples: - "apll12_div2", - "apll12_div3", - "apll12_div9", -- "a1sys_hp_sel", -- "aud_intbus_sel", -- "audio_h_sel", -- "audio_local_bus_sel", -- "dptx_m_sel", -- "i2so1_m_sel", -- "i2so2_m_sel", -- "i2si1_m_sel", -- "i2si2_m_sel", -+ "top_a1sys_hp", -+ "top_aud_intbus", -+ "top_audio_h", -+ "top_audio_local_bus", -+ "top_dptx", -+ "top_i2so1", -+ "top_i2so2", -+ "top_i2si1", -+ "top_i2si2", - "adsp_audio_26m"; - }; - --- -2.39.2 - diff --git a/queue-6.4/asoc-es8316-do-not-set-rate-constraints-for-unsuppor.patch b/queue-6.4/asoc-es8316-do-not-set-rate-constraints-for-unsuppor.patch deleted file mode 100644 index f27bf89b82c..00000000000 --- a/queue-6.4/asoc-es8316-do-not-set-rate-constraints-for-unsuppor.patch +++ /dev/null @@ -1,91 +0,0 @@ -From 0ac974a5c0ca5eff49ae2a81166080d2b11f396c Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Tue, 30 May 2023 21:11:39 +0300 -Subject: ASoC: es8316: Do not set rate constraints for unsupported MCLKs - -From: Cristian Ciocaltea - -[ Upstream commit 60413129ee2b38a80347489270af7f6e1c1de4d0 ] - -When using the codec through the generic audio graph card, there are at -least two calls of es8316_set_dai_sysclk(), with the effect of limiting -the allowed sample rates according to the MCLK/LRCK ratios supported by -the codec: - -1. During audio card setup, to set the initial MCLK - see - asoc_simple_init_dai(). - -2. Before opening a stream, to update MCLK, according to the stream - sample rate and the multiplication factor - see - asoc_simple_hw_params(). - -In some cases the initial MCLK might be set to a frequency that doesn't -match any of the supported ratios, e.g. 12287999 instead of 12288000, -which is only 1 Hz below the supported clock, as that is what the -hardware reports. This creates an empty list of rate constraints, which -is further passed to snd_pcm_hw_constraint_list() via -es8316_pcm_startup(), and causes the following error on the very first -access of the sound card: - - $ speaker-test -D hw:Analog,0 -F S16_LE -c 2 -t wav - Broken configuration for playback: no configurations available: Invalid argument - Setting of hwparams failed: Invalid argument - -Note that all subsequent retries succeed thanks to the updated MCLK set -at point 2 above, which uses a computed frequency value instead of a -reading from the hardware registers. Normally this would have mitigated -the issue, but es8316_pcm_startup() executes before the 2nd call to -es8316_set_dai_sysclk(), hence it cannot make use of the updated -constraints. - -Since es8316_pcm_hw_params() performs anyway a final validation of MCLK -against the stream sample rate and the supported MCLK/LRCK ratios, fix -the issue by ensuring that sysclk_constraints list is only set when at -least one supported sample rate is autodetected by the codec. - -Fixes: b8b88b70875a ("ASoC: add es8316 codec driver") -Signed-off-by: Cristian Ciocaltea -Link: https://lore.kernel.org/r/20230530181140.483936-3-cristian.ciocaltea@collabora.com -Signed-off-by: Mark Brown -Signed-off-by: Sasha Levin ---- - sound/soc/codecs/es8316.c | 14 +++++++------- - 1 file changed, 7 insertions(+), 7 deletions(-) - -diff --git a/sound/soc/codecs/es8316.c b/sound/soc/codecs/es8316.c -index 18d485e6921a7..ccecfdf700649 100644 ---- a/sound/soc/codecs/es8316.c -+++ b/sound/soc/codecs/es8316.c -@@ -369,13 +369,11 @@ static int es8316_set_dai_sysclk(struct snd_soc_dai *codec_dai, - int count = 0; - - es8316->sysclk = freq; -+ es8316->sysclk_constraints.list = NULL; -+ es8316->sysclk_constraints.count = 0; - -- if (freq == 0) { -- es8316->sysclk_constraints.list = NULL; -- es8316->sysclk_constraints.count = 0; -- -+ if (freq == 0) - return 0; -- } - - ret = clk_set_rate(es8316->mclk, freq); - if (ret) -@@ -391,8 +389,10 @@ static int es8316_set_dai_sysclk(struct snd_soc_dai *codec_dai, - es8316->allowed_rates[count++] = freq / ratio; - } - -- es8316->sysclk_constraints.list = es8316->allowed_rates; -- es8316->sysclk_constraints.count = count; -+ if (count) { -+ es8316->sysclk_constraints.list = es8316->allowed_rates; -+ es8316->sysclk_constraints.count = count; -+ } - - return 0; - } --- -2.39.2 - diff --git a/queue-6.4/asoc-es8316-increment-max-value-for-alc-capture-targ.patch b/queue-6.4/asoc-es8316-increment-max-value-for-alc-capture-targ.patch deleted file mode 100644 index bd515574498..00000000000 --- a/queue-6.4/asoc-es8316-increment-max-value-for-alc-capture-targ.patch +++ /dev/null @@ -1,91 +0,0 @@ -From 58e57e9f7f56de4acb655462d033faf705fb8023 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Tue, 30 May 2023 21:11:38 +0300 -Subject: ASoC: es8316: Increment max value for ALC Capture Target Volume - control - -From: Cristian Ciocaltea - -[ Upstream commit 6f073429037cd79d7311cd8236311c53f5ea8f01 ] - -The following error occurs when trying to restore a previously saved -ALSA mixer state (tested on a Rock 5B board): - - $ alsactl --no-ucm -f /tmp/asound.state store hw:Analog - $ alsactl --no-ucm -I -f /tmp/asound.state restore hw:Analog - alsactl: set_control:1475: Cannot write control '2:0:0:ALC Capture Target Volume:0' : Invalid argument - -According to ES8316 datasheet, the register at address 0x2B, which is -related to the above mixer control, contains by default the value 0xB0. -Considering the corresponding ALC target bits (ALCLVL) are 7:4, the -control is initialized with 11, which is one step above the maximum -value allowed by the driver: - - ALCLVL | dB gain - -------+-------- - 0000 | -16.5 - 0001 | -15.0 - 0010 | -13.5 - .... | ..... - 0111 | -6.0 - 1000 | -4.5 - 1001 | -3.0 - 1010 | -1.5 - .... | ..... - 1111 | -1.5 - -The tests performed using the VU meter feature (--vumeter=TYPE) of -arecord/aplay confirm the specs are correct and there is no measured -gain if the 1011-1111 range would have been mapped to 0 dB: - - dB gain | VU meter % - --------+----------- - -6.0 | 30-31 - -4.5 | 35-36 - -3.0 | 42-43 - -1.5 | 50-51 - 0.0 | 50-51 - -Increment the max value allowed for ALC Capture Target Volume control, -so that it matches the hardware default. Additionally, update the -related TLV to prevent an artificial extension of the dB gain range. - -Fixes: b8b88b70875a ("ASoC: add es8316 codec driver") -Signed-off-by: Cristian Ciocaltea -Link: https://lore.kernel.org/r/20230530181140.483936-2-cristian.ciocaltea@collabora.com -Signed-off-by: Mark Brown -Signed-off-by: Sasha Levin ---- - sound/soc/codecs/es8316.c | 9 +++++++-- - 1 file changed, 7 insertions(+), 2 deletions(-) - -diff --git a/sound/soc/codecs/es8316.c b/sound/soc/codecs/es8316.c -index a27d809564593..18d485e6921a7 100644 ---- a/sound/soc/codecs/es8316.c -+++ b/sound/soc/codecs/es8316.c -@@ -52,7 +52,12 @@ static const SNDRV_CTL_TLVD_DECLARE_DB_SCALE(dac_vol_tlv, -9600, 50, 1); - static const SNDRV_CTL_TLVD_DECLARE_DB_SCALE(adc_vol_tlv, -9600, 50, 1); - static const SNDRV_CTL_TLVD_DECLARE_DB_SCALE(alc_max_gain_tlv, -650, 150, 0); - static const SNDRV_CTL_TLVD_DECLARE_DB_SCALE(alc_min_gain_tlv, -1200, 150, 0); --static const SNDRV_CTL_TLVD_DECLARE_DB_SCALE(alc_target_tlv, -1650, 150, 0); -+ -+static const SNDRV_CTL_TLVD_DECLARE_DB_RANGE(alc_target_tlv, -+ 0, 10, TLV_DB_SCALE_ITEM(-1650, 150, 0), -+ 11, 11, TLV_DB_SCALE_ITEM(-150, 0, 0), -+); -+ - static const SNDRV_CTL_TLVD_DECLARE_DB_RANGE(hpmixer_gain_tlv, - 0, 4, TLV_DB_SCALE_ITEM(-1200, 150, 0), - 8, 11, TLV_DB_SCALE_ITEM(-450, 150, 0), -@@ -115,7 +120,7 @@ static const struct snd_kcontrol_new es8316_snd_controls[] = { - alc_max_gain_tlv), - SOC_SINGLE_TLV("ALC Capture Min Volume", ES8316_ADC_ALC2, 0, 28, 0, - alc_min_gain_tlv), -- SOC_SINGLE_TLV("ALC Capture Target Volume", ES8316_ADC_ALC3, 4, 10, 0, -+ SOC_SINGLE_TLV("ALC Capture Target Volume", ES8316_ADC_ALC3, 4, 11, 0, - alc_target_tlv), - SOC_SINGLE("ALC Capture Hold Time", ES8316_ADC_ALC3, 0, 10, 0), - SOC_SINGLE("ALC Capture Decay Time", ES8316_ADC_ALC4, 4, 10, 0), --- -2.39.2 - diff --git a/queue-6.4/asoc-imx-audmix-check-return-value-of-devm_kasprintf.patch b/queue-6.4/asoc-imx-audmix-check-return-value-of-devm_kasprintf.patch deleted file mode 100644 index b1c29fd79ed..00000000000 --- a/queue-6.4/asoc-imx-audmix-check-return-value-of-devm_kasprintf.patch +++ /dev/null @@ -1,66 +0,0 @@ -From 0cc17a5321ec7bf1ffa89d13c834b6cf4f261e4c Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Wed, 14 Jun 2023 15:15:09 +0300 -Subject: ASoC: imx-audmix: check return value of devm_kasprintf() - -From: Claudiu Beznea - -[ Upstream commit 2f76e1d6ca524a888d29aafe29f2ad2003857971 ] - -devm_kasprintf() returns a pointer to dynamically allocated memory. -Pointer could be NULL in case allocation fails. Check pointer validity. -Identified with coccinelle (kmerr.cocci script). - -Fixes: b86ef5367761 ("ASoC: fsl: Add Audio Mixer machine driver") -Signed-off-by: Claudiu Beznea -Link: https://lore.kernel.org/r/20230614121509.443926-1-claudiu.beznea@microchip.com -Signed-off-by: Mark Brown -Signed-off-by: Sasha Levin ---- - sound/soc/fsl/imx-audmix.c | 9 +++++++++ - 1 file changed, 9 insertions(+) - -diff --git a/sound/soc/fsl/imx-audmix.c b/sound/soc/fsl/imx-audmix.c -index b2c5aca92c6bf..f9ed8fcc03c48 100644 ---- a/sound/soc/fsl/imx-audmix.c -+++ b/sound/soc/fsl/imx-audmix.c -@@ -228,6 +228,8 @@ static int imx_audmix_probe(struct platform_device *pdev) - - dai_name = devm_kasprintf(&pdev->dev, GFP_KERNEL, "%s%s", - fe_name_pref, args.np->full_name + 1); -+ if (!dai_name) -+ return -ENOMEM; - - dev_info(pdev->dev.parent, "DAI FE name:%s\n", dai_name); - -@@ -236,6 +238,8 @@ static int imx_audmix_probe(struct platform_device *pdev) - capture_dai_name = - devm_kasprintf(&pdev->dev, GFP_KERNEL, "%s %s", - dai_name, "CPU-Capture"); -+ if (!capture_dai_name) -+ return -ENOMEM; - } - - /* -@@ -269,6 +273,8 @@ static int imx_audmix_probe(struct platform_device *pdev) - "AUDMIX-Playback-%d", i); - be_cp = devm_kasprintf(&pdev->dev, GFP_KERNEL, - "AUDMIX-Capture-%d", i); -+ if (!be_name || !be_pb || !be_cp) -+ return -ENOMEM; - - priv->dai[num_dai + i].cpus = &dlc[2]; - priv->dai[num_dai + i].codecs = &dlc[3]; -@@ -293,6 +299,9 @@ static int imx_audmix_probe(struct platform_device *pdev) - priv->dapm_routes[i].source = - devm_kasprintf(&pdev->dev, GFP_KERNEL, "%s %s", - dai_name, "CPU-Playback"); -+ if (!priv->dapm_routes[i].source) -+ return -ENOMEM; -+ - priv->dapm_routes[i].sink = be_pb; - priv->dapm_routes[num_dai + i].source = be_pb; - priv->dapm_routes[num_dai + i].sink = be_cp; --- -2.39.2 - diff --git a/queue-6.4/asoc-intel-sof_sdw-remove-sof_sdw_tgl_hdmi-for-meteo.patch b/queue-6.4/asoc-intel-sof_sdw-remove-sof_sdw_tgl_hdmi-for-meteo.patch deleted file mode 100644 index e52f4a73d2a..00000000000 --- a/queue-6.4/asoc-intel-sof_sdw-remove-sof_sdw_tgl_hdmi-for-meteo.patch +++ /dev/null @@ -1,38 +0,0 @@ -From 15f0dbcfb4ac47a940a57f84e25cef4195f73a94 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Fri, 12 May 2023 12:32:59 -0500 -Subject: ASoC: Intel: sof_sdw: remove SOF_SDW_TGL_HDMI for MeteorLake devices - -From: Bard Liao - -[ Upstream commit 0db94947c9d3da16aa31d152b7d26fab78b02cb9 ] - -Topologies support three HDMI links on MeteorLake devices only. - -Fixes: 18489174e4fb ("ASoC: intel: sof_sdw: add RT711 SDCA card for MTL platform") -Signed-off-by: Bard Liao ---- - sound/soc/intel/boards/sof_sdw.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/sound/soc/intel/boards/sof_sdw.c b/sound/soc/intel/boards/sof_sdw.c -index 144f082c63fda..a33b7678bc3b8 100644 ---- a/sound/soc/intel/boards/sof_sdw.c -+++ b/sound/soc/intel/boards/sof_sdw.c -@@ -413,7 +413,7 @@ static const struct dmi_system_id sof_sdw_quirk_table[] = { - .matches = { - DMI_MATCH(DMI_PRODUCT_FAMILY, "Intel_mtlrvp"), - }, -- .driver_data = (void *)(RT711_JD1 | SOF_SDW_TGL_HDMI), -+ .driver_data = (void *)(RT711_JD1), - }, - {} - }; --- -2.39.2 - diff --git a/queue-6.4/asoc-intel-sof_sdw-start-set-codec-init-function-wit.patch b/queue-6.4/asoc-intel-sof_sdw-start-set-codec-init-function-wit.patch deleted file mode 100644 index 2b8bf5bc5ea..00000000000 --- a/queue-6.4/asoc-intel-sof_sdw-start-set-codec-init-function-wit.patch +++ /dev/null @@ -1,79 +0,0 @@ -From 2a27df0263241a1b96ba406e96aebdfc9378bb4d Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Fri, 12 May 2023 12:33:02 -0500 -Subject: ASoC: Intel: sof_sdw: start set codec init function with an adr index - -From: Bard Liao - -[ Upstream commit f0c8d83ab1a3532ebeb1a89acb649be01657aed8 ] - -Currently, set_codec_init_func always start with link->adr_d[0] because -we assumed all adr_d on the same link are the same devices. The -assumption is no longer valid when different devices on the same sdw link -are supported. - -Fixes: c8db7b50128b ("ASoC: Intel: sof_sdw: support different devices on the same sdw link") -Signed-off-by: Bard Liao ---- - sound/soc/intel/boards/sof_sdw.c | 16 +++++++++++----- - 1 file changed, 11 insertions(+), 5 deletions(-) - -diff --git a/sound/soc/intel/boards/sof_sdw.c b/sound/soc/intel/boards/sof_sdw.c -index a33b7678bc3b8..5fa204897a52b 100644 ---- a/sound/soc/intel/boards/sof_sdw.c -+++ b/sound/soc/intel/boards/sof_sdw.c -@@ -902,17 +902,20 @@ static int create_codec_dai_name(struct device *dev, - static int set_codec_init_func(struct snd_soc_card *card, - const struct snd_soc_acpi_link_adr *link, - struct snd_soc_dai_link *dai_links, -- bool playback, int group_id) -+ bool playback, int group_id, int adr_index) - { -- int i; -+ int i = adr_index; - - do { - /* - * Initialize the codec. If codec is part of an aggregated - * group (group_id>0), initialize all codecs belonging to - * same group. -+ * The first link should start with link->adr_d[adr_index] -+ * because that is the device that we want to initialize and -+ * we should end immediately if it is not aggregated (group_id=0) - */ -- for (i = 0; i < link->num_adr; i++) { -+ for ( ; i < link->num_adr; i++) { - int codec_index; - - codec_index = find_codec_info_part(link->adr_d[i].adr); -@@ -928,9 +931,12 @@ static int set_codec_init_func(struct snd_soc_card *card, - dai_links, - &codec_info_list[codec_index], - playback); -+ if (!group_id) -+ return 0; - } -+ i = 0; - link++; -- } while (link->mask && group_id); -+ } while (link->mask); - - return 0; - } -@@ -1180,7 +1186,7 @@ static int create_sdw_dailink(struct snd_soc_card *card, - dai_links[*link_index].nonatomic = true; - - ret = set_codec_init_func(card, link, dai_links + (*link_index)++, -- playback, group_id); -+ playback, group_id, adr_index); - if (ret < 0) { - dev_err(dev, "failed to init codec %d", codec_index); - return ret; --- -2.39.2 - diff --git a/queue-6.4/blk-cgroup-reinit-blkg_iostat_set-after-clearing-in-.patch b/queue-6.4/blk-cgroup-reinit-blkg_iostat_set-after-clearing-in-.patch deleted file mode 100644 index 051bd7a75be..00000000000 --- a/queue-6.4/blk-cgroup-reinit-blkg_iostat_set-after-clearing-in-.patch +++ /dev/null @@ -1,59 +0,0 @@ -From 82689b7bb25bd2b9aab7f1c15825afca13cf107f Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Tue, 6 Jun 2023 14:07:24 -0400 -Subject: blk-cgroup: Reinit blkg_iostat_set after clearing in - blkcg_reset_stats() - -From: Waiman Long - -[ Upstream commit 3d2af77e31ade05ff7ccc3658c3635ec1bea0979 ] - -When blkg_alloc() is called to allocate a blkcg_gq structure -with the associated blkg_iostat_set's, there are 2 fields within -blkg_iostat_set that requires proper initialization - blkg & sync. -The former field was introduced by commit 3b8cc6298724 ("blk-cgroup: -Optimize blkcg_rstat_flush()") while the later one was introduced by -commit f73316482977 ("blk-cgroup: reimplement basic IO stats using -cgroup rstat"). - -Unfortunately those fields in the blkg_iostat_set's are not properly -re-initialized when they are cleared in v1's blkcg_reset_stats(). This -can lead to a kernel panic due to NULL pointer access of the blkg -pointer. The missing initialization of sync is less problematic and -can be a problem in a debug kernel due to missing lockdep initialization. - -Fix these problems by re-initializing them after memory clearing. - -Fixes: 3b8cc6298724 ("blk-cgroup: Optimize blkcg_rstat_flush()") -Fixes: f73316482977 ("blk-cgroup: reimplement basic IO stats using cgroup rstat") -Signed-off-by: Waiman Long -Reviewed-by: Ming Lei -Acked-by: Tejun Heo -Link: https://lore.kernel.org/r/20230606180724.2455066-1-longman@redhat.com -Signed-off-by: Jens Axboe -Signed-off-by: Sasha Levin ---- - block/blk-cgroup.c | 5 +++++ - 1 file changed, 5 insertions(+) - -diff --git a/block/blk-cgroup.c b/block/blk-cgroup.c -index 5215bc7af5514..aaf9903ad7b2f 100644 ---- a/block/blk-cgroup.c -+++ b/block/blk-cgroup.c -@@ -624,8 +624,13 @@ static int blkcg_reset_stats(struct cgroup_subsys_state *css, - struct blkg_iostat_set *bis = - per_cpu_ptr(blkg->iostat_cpu, cpu); - memset(bis, 0, sizeof(*bis)); -+ -+ /* Re-initialize the cleared blkg_iostat_set */ -+ u64_stats_init(&bis->sync); -+ bis->blkg = blkg; - } - memset(&blkg->iostat, 0, sizeof(blkg->iostat)); -+ u64_stats_init(&blkg->iostat.sync); - - for (i = 0; i < BLKCG_MAX_POLS; i++) { - struct blkcg_policy *pol = blkcg_policy[i]; --- -2.39.2 - diff --git a/queue-6.4/blk-iocost-use-spin_lock_irqsave-in-adjust_inuse_and.patch b/queue-6.4/blk-iocost-use-spin_lock_irqsave-in-adjust_inuse_and.patch deleted file mode 100644 index 0b10925281c..00000000000 --- a/queue-6.4/blk-iocost-use-spin_lock_irqsave-in-adjust_inuse_and.patch +++ /dev/null @@ -1,150 +0,0 @@ -From 2ca21478aa3dfd0c045ef936e20031a175748f9b Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Sat, 27 May 2023 17:19:04 +0800 -Subject: blk-iocost: use spin_lock_irqsave in adjust_inuse_and_calc_cost - -From: Li Nan - -[ Upstream commit 8d211554679d0b23702bd32ba04aeac0c1c4f660 ] - -adjust_inuse_and_calc_cost() use spin_lock_irq() and IRQ will be enabled -when unlock. DEADLOCK might happen if we have held other locks and disabled -IRQ before invoking it. - -Fix it by using spin_lock_irqsave() instead, which can keep IRQ state -consistent with before when unlock. - - ================================ - WARNING: inconsistent lock state - 5.10.0-02758-g8e5f91fd772f #26 Not tainted - -------------------------------- - inconsistent {IN-HARDIRQ-W} -> {HARDIRQ-ON-W} usage. - kworker/2:3/388 [HC0[0]:SC0[0]:HE0:SE1] takes: - ffff888118c00c28 (&bfqd->lock){?.-.}-{2:2}, at: spin_lock_irq - ffff888118c00c28 (&bfqd->lock){?.-.}-{2:2}, at: bfq_bio_merge+0x141/0x390 - {IN-HARDIRQ-W} state was registered at: - __lock_acquire+0x3d7/0x1070 - lock_acquire+0x197/0x4a0 - __raw_spin_lock_irqsave - _raw_spin_lock_irqsave+0x3b/0x60 - bfq_idle_slice_timer_body - bfq_idle_slice_timer+0x53/0x1d0 - __run_hrtimer+0x477/0xa70 - __hrtimer_run_queues+0x1c6/0x2d0 - hrtimer_interrupt+0x302/0x9e0 - local_apic_timer_interrupt - __sysvec_apic_timer_interrupt+0xfd/0x420 - run_sysvec_on_irqstack_cond - sysvec_apic_timer_interrupt+0x46/0xa0 - asm_sysvec_apic_timer_interrupt+0x12/0x20 - irq event stamp: 837522 - hardirqs last enabled at (837521): [] __raw_spin_unlock_irqrestore - hardirqs last enabled at (837521): [] _raw_spin_unlock_irqrestore+0x3d/0x40 - hardirqs last disabled at (837522): [] __raw_spin_lock_irq - hardirqs last disabled at (837522): [] _raw_spin_lock_irq+0x43/0x50 - softirqs last enabled at (835852): [] __do_softirq+0x558/0x8ec - softirqs last disabled at (835845): [] asm_call_irq_on_stack+0xf/0x20 - - other info that might help us debug this: - Possible unsafe locking scenario: - - CPU0 - ---- - lock(&bfqd->lock); - - lock(&bfqd->lock); - - *** DEADLOCK *** - - 3 locks held by kworker/2:3/388: - #0: ffff888107af0f38 ((wq_completion)kthrotld){+.+.}-{0:0}, at: process_one_work+0x742/0x13f0 - #1: ffff8881176bfdd8 ((work_completion)(&td->dispatch_work)){+.+.}-{0:0}, at: process_one_work+0x777/0x13f0 - #2: ffff888118c00c28 (&bfqd->lock){?.-.}-{2:2}, at: spin_lock_irq - #2: ffff888118c00c28 (&bfqd->lock){?.-.}-{2:2}, at: bfq_bio_merge+0x141/0x390 - - stack backtrace: - CPU: 2 PID: 388 Comm: kworker/2:3 Not tainted 5.10.0-02758-g8e5f91fd772f #26 - Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS rel-1.14.0-0-g155821a1990b-prebuilt.qemu.org 04/01/2014 - Workqueue: kthrotld blk_throtl_dispatch_work_fn - Call Trace: - __dump_stack lib/dump_stack.c:77 [inline] - dump_stack+0x107/0x167 - print_usage_bug - valid_state - mark_lock_irq.cold+0x32/0x3a - mark_lock+0x693/0xbc0 - mark_held_locks+0x9e/0xe0 - __trace_hardirqs_on_caller - lockdep_hardirqs_on_prepare.part.0+0x151/0x360 - trace_hardirqs_on+0x5b/0x180 - __raw_spin_unlock_irq - _raw_spin_unlock_irq+0x24/0x40 - spin_unlock_irq - adjust_inuse_and_calc_cost+0x4fb/0x970 - ioc_rqos_merge+0x277/0x740 - __rq_qos_merge+0x62/0xb0 - rq_qos_merge - bio_attempt_back_merge+0x12c/0x4a0 - blk_mq_sched_try_merge+0x1b6/0x4d0 - bfq_bio_merge+0x24a/0x390 - __blk_mq_sched_bio_merge+0xa6/0x460 - blk_mq_sched_bio_merge - blk_mq_submit_bio+0x2e7/0x1ee0 - __submit_bio_noacct_mq+0x175/0x3b0 - submit_bio_noacct+0x1fb/0x270 - blk_throtl_dispatch_work_fn+0x1ef/0x2b0 - process_one_work+0x83e/0x13f0 - process_scheduled_works - worker_thread+0x7e3/0xd80 - kthread+0x353/0x470 - ret_from_fork+0x1f/0x30 - -Fixes: b0853ab4a238 ("blk-iocost: revamp in-period donation snapbacks") -Signed-off-by: Li Nan -Acked-by: Tejun Heo -Reviewed-by: Yu Kuai -Link: https://lore.kernel.org/r/20230527091904.3001833-1-linan666@huaweicloud.com -Signed-off-by: Jens Axboe -Signed-off-by: Sasha Levin ---- - block/blk-iocost.c | 7 ++++--- - 1 file changed, 4 insertions(+), 3 deletions(-) - -diff --git a/block/blk-iocost.c b/block/blk-iocost.c -index 285ced3467abb..6084a9519883e 100644 ---- a/block/blk-iocost.c -+++ b/block/blk-iocost.c -@@ -2455,6 +2455,7 @@ static u64 adjust_inuse_and_calc_cost(struct ioc_gq *iocg, u64 vtime, - u32 hwi, adj_step; - s64 margin; - u64 cost, new_inuse; -+ unsigned long flags; - - current_hweight(iocg, NULL, &hwi); - old_hwi = hwi; -@@ -2473,11 +2474,11 @@ static u64 adjust_inuse_and_calc_cost(struct ioc_gq *iocg, u64 vtime, - iocg->inuse == iocg->active) - return cost; - -- spin_lock_irq(&ioc->lock); -+ spin_lock_irqsave(&ioc->lock, flags); - - /* we own inuse only when @iocg is in the normal active state */ - if (iocg->abs_vdebt || list_empty(&iocg->active_list)) { -- spin_unlock_irq(&ioc->lock); -+ spin_unlock_irqrestore(&ioc->lock, flags); - return cost; - } - -@@ -2498,7 +2499,7 @@ static u64 adjust_inuse_and_calc_cost(struct ioc_gq *iocg, u64 vtime, - } while (time_after64(vtime + cost, now->vnow) && - iocg->inuse != iocg->active); - -- spin_unlock_irq(&ioc->lock); -+ spin_unlock_irqrestore(&ioc->lock, flags); - - TRACE_IOCG_PATH(inuse_adjust, iocg, now, - old_inuse, iocg->inuse, old_hwi, hwi); --- -2.39.2 - diff --git a/queue-6.4/blk-mq-don-t-insert-passthrough-request-into-sw-queu.patch b/queue-6.4/blk-mq-don-t-insert-passthrough-request-into-sw-queu.patch deleted file mode 100644 index 5d83ba20989..00000000000 --- a/queue-6.4/blk-mq-don-t-insert-passthrough-request-into-sw-queu.patch +++ /dev/null @@ -1,48 +0,0 @@ -From 645fc590b8aa63978875e3e6991d519c17ee62d5 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Wed, 21 Jun 2023 21:22:08 +0800 -Subject: blk-mq: don't insert passthrough request into sw queue - -From: Ming Lei - -[ Upstream commit 2293cae703cda162684ae966db6b1b4a11b5e88f ] - -In case of real io scheduler, q->elevator is set, so blk_mq_run_hw_queue() -may just check if scheduler queue has request to dispatch, see -__blk_mq_sched_dispatch_requests(). Then IO hang may be caused because -all passthorugh requests may stay in sw queue. - -And any passthrough request should have been inserted to hctx->dispatch -always. - -Reported-by: Guangwu Zhang -Fixes: d97217e7f024 ("blk-mq: don't queue plugged passthrough requests into scheduler") -Signed-off-by: Ming Lei -Link: https://lore.kernel.org/r/20230621132208.1142318-1-ming.lei@redhat.com -Signed-off-by: Jens Axboe -Signed-off-by: Sasha Levin ---- - block/blk-mq.c | 7 ++++++- - 1 file changed, 6 insertions(+), 1 deletion(-) - -diff --git a/block/blk-mq.c b/block/blk-mq.c -index c763f0bc66371..b9f4546139894 100644 ---- a/block/blk-mq.c -+++ b/block/blk-mq.c -@@ -2735,7 +2735,12 @@ static void blk_mq_dispatch_plug_list(struct blk_plug *plug, bool from_sched) - - percpu_ref_get(&this_hctx->queue->q_usage_counter); - /* passthrough requests should never be issued to the I/O scheduler */ -- if (this_hctx->queue->elevator && !is_passthrough) { -+ if (is_passthrough) { -+ spin_lock(&this_hctx->lock); -+ list_splice_tail_init(&list, &this_hctx->dispatch); -+ spin_unlock(&this_hctx->lock); -+ blk_mq_run_hw_queue(this_hctx, from_sched); -+ } else if (this_hctx->queue->elevator) { - this_hctx->queue->elevator->type->ops.insert_requests(this_hctx, - &list, 0); - blk_mq_run_hw_queue(this_hctx, from_sched); --- -2.39.2 - diff --git a/queue-6.4/blk-mq-don-t-queue-plugged-passthrough-requests-into.patch b/queue-6.4/blk-mq-don-t-queue-plugged-passthrough-requests-into.patch deleted file mode 100644 index 14e93c701ce..00000000000 --- a/queue-6.4/blk-mq-don-t-queue-plugged-passthrough-requests-into.patch +++ /dev/null @@ -1,69 +0,0 @@ -From 3c2eaae313aa443f0a732f6dfd4ccaf748dfce48 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Thu, 18 May 2023 07:30:59 +0200 -Subject: blk-mq: don't queue plugged passthrough requests into scheduler - -From: Ming Lei - -[ Upstream commit d97217e7f024bbe9aa62aea070771234c2879358 ] - -Passthrough requests should never be queued to the I/O scheduler, -as scheduling these opaque requests doesn't make sense, and I/O -schedulers might require req->bio to be always valid. - -We never let passthrough requests insert into the scheduler before -commit 1c2d2fff6dc0 ("block: wire-up support for passthrough plugging"), -restore this behavior even for passthrough requests issued under a plug. - -[hch: use blk_mq_insert_requests for passthrough requests, - fix up the commit message and comments] - -Reported-by: Guangwu Zhang -Closes: https://lore.kernel.org/linux-block/CAGS2=YosaYaUTEMU3uaf+y=8MqSrhL7sYsJn8EwbaM=76p_4Qg@mail.gmail.com/ -Investigated-by: Yu Kuai -Fixes: 1c2d2fff6dc0 ("block: wire-up support for passthrough plugging") -Signed-off-by: Ming Lei -Signed-off-by: Christoph Hellwig -Link: https://lore.kernel.org/r/20230518053101.760632-2-hch@lst.de -Signed-off-by: Jens Axboe -Signed-off-by: Sasha Levin ---- - block/blk-mq.c | 8 ++++++-- - 1 file changed, 6 insertions(+), 2 deletions(-) - -diff --git a/block/blk-mq.c b/block/blk-mq.c -index 850bfb844ed2f..c763f0bc66371 100644 ---- a/block/blk-mq.c -+++ b/block/blk-mq.c -@@ -2711,6 +2711,7 @@ static void blk_mq_dispatch_plug_list(struct blk_plug *plug, bool from_sched) - struct request *requeue_list = NULL; - struct request **requeue_lastp = &requeue_list; - unsigned int depth = 0; -+ bool is_passthrough = false; - LIST_HEAD(list); - - do { -@@ -2719,7 +2720,9 @@ static void blk_mq_dispatch_plug_list(struct blk_plug *plug, bool from_sched) - if (!this_hctx) { - this_hctx = rq->mq_hctx; - this_ctx = rq->mq_ctx; -- } else if (this_hctx != rq->mq_hctx || this_ctx != rq->mq_ctx) { -+ is_passthrough = blk_rq_is_passthrough(rq); -+ } else if (this_hctx != rq->mq_hctx || this_ctx != rq->mq_ctx || -+ is_passthrough != blk_rq_is_passthrough(rq)) { - rq_list_add_tail(&requeue_lastp, rq); - continue; - } -@@ -2731,7 +2734,8 @@ static void blk_mq_dispatch_plug_list(struct blk_plug *plug, bool from_sched) - trace_block_unplug(this_hctx->queue, depth, !from_sched); - - percpu_ref_get(&this_hctx->queue->q_usage_counter); -- if (this_hctx->queue->elevator) { -+ /* passthrough requests should never be issued to the I/O scheduler */ -+ if (this_hctx->queue->elevator && !is_passthrough) { - this_hctx->queue->elevator->type->ops.insert_requests(this_hctx, - &list, 0); - blk_mq_run_hw_queue(this_hctx, from_sched); --- -2.39.2 - diff --git a/queue-6.4/blk-mq-fix-potential-io-hang-by-wrong-wake_batch.patch b/queue-6.4/blk-mq-fix-potential-io-hang-by-wrong-wake_batch.patch deleted file mode 100644 index 7fed2aaa5e6..00000000000 --- a/queue-6.4/blk-mq-fix-potential-io-hang-by-wrong-wake_batch.patch +++ /dev/null @@ -1,126 +0,0 @@ -From deebb219b69f456361bcfd7aef31e7e5731d746e Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Sat, 10 Jun 2023 10:30:43 +0800 -Subject: blk-mq: fix potential io hang by wrong 'wake_batch' - -From: Yu Kuai - -[ Upstream commit 4f1731df60f9033669f024d06ae26a6301260b55 ] - -In __blk_mq_tag_busy/idle(), updating 'active_queues' and calculating -'wake_batch' is not atomic: - -t1: t2: -_blk_mq_tag_busy blk_mq_tag_busy -inc active_queues -// assume 1->2 - inc active_queues - // 2 -> 3 - blk_mq_update_wake_batch - // calculate based on 3 -blk_mq_update_wake_batch -/* calculate based on 2, while active_queues is actually 3. */ - -Fix this problem by protecting them wih 'tags->lock', this is not a hot -path, so performance should not be concerned. And now that all writers -are inside the lock, switch 'actives_queues' from atomic to unsigned -int. - -Fixes: 180dccb0dba4 ("blk-mq: fix tag_get wait task can't be awakened") -Signed-off-by: Yu Kuai -Reviewed-by: Jan Kara -Link: https://lore.kernel.org/r/20230610023043.2559121-1-yukuai1@huaweicloud.com -Signed-off-by: Jens Axboe -Signed-off-by: Sasha Levin ---- - block/blk-mq-debugfs.c | 2 +- - block/blk-mq-tag.c | 15 ++++++++++----- - block/blk-mq.h | 3 +-- - include/linux/blk-mq.h | 3 +-- - 4 files changed, 13 insertions(+), 10 deletions(-) - -diff --git a/block/blk-mq-debugfs.c b/block/blk-mq-debugfs.c -index d23a8554ec4ae..7851e149d365f 100644 ---- a/block/blk-mq-debugfs.c -+++ b/block/blk-mq-debugfs.c -@@ -399,7 +399,7 @@ static void blk_mq_debugfs_tags_show(struct seq_file *m, - seq_printf(m, "nr_tags=%u\n", tags->nr_tags); - seq_printf(m, "nr_reserved_tags=%u\n", tags->nr_reserved_tags); - seq_printf(m, "active_queues=%d\n", -- atomic_read(&tags->active_queues)); -+ READ_ONCE(tags->active_queues)); - - seq_puts(m, "\nbitmap_tags:\n"); - sbitmap_queue_show(&tags->bitmap_tags, m); -diff --git a/block/blk-mq-tag.c b/block/blk-mq-tag.c -index dfd81cab57888..cc57e2dd9a0bb 100644 ---- a/block/blk-mq-tag.c -+++ b/block/blk-mq-tag.c -@@ -38,6 +38,7 @@ static void blk_mq_update_wake_batch(struct blk_mq_tags *tags, - void __blk_mq_tag_busy(struct blk_mq_hw_ctx *hctx) - { - unsigned int users; -+ struct blk_mq_tags *tags = hctx->tags; - - /* - * calling test_bit() prior to test_and_set_bit() is intentional, -@@ -55,9 +56,11 @@ void __blk_mq_tag_busy(struct blk_mq_hw_ctx *hctx) - return; - } - -- users = atomic_inc_return(&hctx->tags->active_queues); -- -- blk_mq_update_wake_batch(hctx->tags, users); -+ spin_lock_irq(&tags->lock); -+ users = tags->active_queues + 1; -+ WRITE_ONCE(tags->active_queues, users); -+ blk_mq_update_wake_batch(tags, users); -+ spin_unlock_irq(&tags->lock); - } - - /* -@@ -90,9 +93,11 @@ void __blk_mq_tag_idle(struct blk_mq_hw_ctx *hctx) - return; - } - -- users = atomic_dec_return(&tags->active_queues); -- -+ spin_lock_irq(&tags->lock); -+ users = tags->active_queues - 1; -+ WRITE_ONCE(tags->active_queues, users); - blk_mq_update_wake_batch(tags, users); -+ spin_unlock_irq(&tags->lock); - - blk_mq_tag_wakeup_all(tags, false); - } -diff --git a/block/blk-mq.h b/block/blk-mq.h -index e876584d35163..890fef9796bf9 100644 ---- a/block/blk-mq.h -+++ b/block/blk-mq.h -@@ -417,8 +417,7 @@ static inline bool hctx_may_queue(struct blk_mq_hw_ctx *hctx, - return true; - } - -- users = atomic_read(&hctx->tags->active_queues); -- -+ users = READ_ONCE(hctx->tags->active_queues); - if (!users) - return true; - -diff --git a/include/linux/blk-mq.h b/include/linux/blk-mq.h -index 06caacd77ed66..710d122472641 100644 ---- a/include/linux/blk-mq.h -+++ b/include/linux/blk-mq.h -@@ -746,8 +746,7 @@ struct request *blk_mq_alloc_request_hctx(struct request_queue *q, - struct blk_mq_tags { - unsigned int nr_tags; - unsigned int nr_reserved_tags; -- -- atomic_t active_queues; -+ unsigned int active_queues; - - struct sbitmap_queue bitmap_tags; - struct sbitmap_queue breserved_tags; --- -2.39.2 - diff --git a/queue-6.4/block-fix-blktrace-debugfs-entries-leakage.patch b/queue-6.4/block-fix-blktrace-debugfs-entries-leakage.patch deleted file mode 100644 index 607fc0c2704..00000000000 --- a/queue-6.4/block-fix-blktrace-debugfs-entries-leakage.patch +++ /dev/null @@ -1,59 +0,0 @@ -From 9e39508a07bae00c0f0c4fbe441eff334766c7e3 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Sat, 10 Jun 2023 10:20:03 +0800 -Subject: block: fix blktrace debugfs entries leakage - -From: Yu Kuai - -[ Upstream commit dd7de3704af9989b780693d51eaea49a665bd9c2 ] - -Commit 99d055b4fd4b ("block: remove per-disk debugfs files in -blk_unregister_queue") moves blk_trace_shutdown() from -blk_release_queue() to blk_unregister_queue(), this is safe if blktrace -is created through sysfs, however, there is a regression in corner -case. - -blktrace can still be enabled after del_gendisk() through ioctl if -the disk is opened before del_gendisk(), and if blktrace is not shutdown -through ioctl before closing the disk, debugfs entries will be leaked. - -Fix this problem by shutdown blktrace in disk_release(), this is safe -because blk_trace_remove() is reentrant. - -Fixes: 99d055b4fd4b ("block: remove per-disk debugfs files in blk_unregister_queue") -Signed-off-by: Yu Kuai -Reviewed-by: Christoph Hellwig -Link: https://lore.kernel.org/r/20230610022003.2557284-4-yukuai1@huaweicloud.com -Signed-off-by: Jens Axboe -Signed-off-by: Sasha Levin ---- - block/genhd.c | 5 ++++- - 1 file changed, 4 insertions(+), 1 deletion(-) - -diff --git a/block/genhd.c b/block/genhd.c -index 1cb489b927d50..bb895397e9385 100644 ---- a/block/genhd.c -+++ b/block/genhd.c -@@ -25,8 +25,9 @@ - #include - #include - #include --#include "blk-throttle.h" -+#include - -+#include "blk-throttle.h" - #include "blk.h" - #include "blk-mq-sched.h" - #include "blk-rq-qos.h" -@@ -1171,6 +1172,8 @@ static void disk_release(struct device *dev) - might_sleep(); - WARN_ON_ONCE(disk_live(disk)); - -+ blk_trace_remove(disk->queue); -+ - /* - * To undo the all initialization from blk_mq_init_allocated_queue in - * case of a probe failure where add_disk is never called we have to --- -2.39.2 - diff --git a/queue-6.4/block-fix-the-type-of-the-second-bdev_op_is_zoned_wr.patch b/queue-6.4/block-fix-the-type-of-the-second-bdev_op_is_zoned_wr.patch deleted file mode 100644 index 17b14481da2..00000000000 --- a/queue-6.4/block-fix-the-type-of-the-second-bdev_op_is_zoned_wr.patch +++ /dev/null @@ -1,44 +0,0 @@ -From 1e161625da79905d79edfd0f93d012a919466595 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Wed, 17 May 2023 10:42:21 -0700 -Subject: block: Fix the type of the second bdev_op_is_zoned_write() argument - -From: Bart Van Assche - -[ Upstream commit 3ddbe2a7e0d4a155a805f69c906c9beed30d4cc4 ] - -Change the type of the second argument of bdev_op_is_zoned_write() from -blk_opf_t into enum req_op because this function expects an operation -without flags as second argument. - -Reviewed-by: Johannes Thumshirn -Reviewed-by: Pankaj Raghav -Reviewed-by: Christoph Hellwig -Reviewed-by: Damien Le Moal -Reviewed-by: Hannes Reinecke -Cc: Ming Lei -Fixes: 8cafdb5ab94c ("block: adapt blk_mq_plug() to not plug for writes that require a zone lock") -Signed-off-by: Bart Van Assche -Link: https://lore.kernel.org/r/20230517174230.897144-4-bvanassche@acm.org -Signed-off-by: Jens Axboe -Signed-off-by: Sasha Levin ---- - include/linux/blkdev.h | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/include/linux/blkdev.h b/include/linux/blkdev.h -index c0ffe203a6022..be9d7d8237b33 100644 ---- a/include/linux/blkdev.h -+++ b/include/linux/blkdev.h -@@ -1282,7 +1282,7 @@ static inline unsigned int bdev_zone_no(struct block_device *bdev, sector_t sec) - } - - static inline bool bdev_op_is_zoned_write(struct block_device *bdev, -- blk_opf_t op) -+ enum req_op op) - { - if (!bdev_is_zoned(bdev)) - return false; --- -2.39.2 - diff --git a/queue-6.4/block-rq_qos-protect-rq_qos-apis-with-a-new-lock.patch b/queue-6.4/block-rq_qos-protect-rq_qos-apis-with-a-new-lock.patch deleted file mode 100644 index 573f76601f8..00000000000 --- a/queue-6.4/block-rq_qos-protect-rq_qos-apis-with-a-new-lock.patch +++ /dev/null @@ -1,211 +0,0 @@ -From f932f058a2b8101815f944ae6150da8f1dfab7b6 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Fri, 14 Apr 2023 16:40:08 +0800 -Subject: block/rq_qos: protect rq_qos apis with a new lock - -From: Yu Kuai - -[ Upstream commit a13bd91be22318768d55470cbc0b0f4488ef9edf ] - -commit 50e34d78815e ("block: disable the elevator int del_gendisk") -move rq_qos_exit() from disk_release() to del_gendisk(), this will -introduce some problems: - -1) If rq_qos_add() is triggered by enabling iocost/iolatency through - cgroupfs, then it can concurrent with del_gendisk(), it's not safe to - write 'q->rq_qos' concurrently. - -2) Activate cgroup policy that is relied on rq_qos will call - rq_qos_add() and blkcg_activate_policy(), and if rq_qos_exit() is - called in the middle, null-ptr-dereference will be triggered in - blkcg_activate_policy(). - -3) blkg_conf_open_bdev() can call blkdev_get_no_open() first to find the - disk, then if rq_qos_exit() from del_gendisk() is done before - rq_qos_add(), then memory will be leaked. - -This patch add a new disk level mutex 'rq_qos_mutex': - -1) The lock will protect rq_qos_exit() directly. - -2) For wbt that doesn't relied on blk-cgroup, rq_qos_add() can only be - called from disk initialization for now because wbt can't be - destructed until rq_qos_exit(), so it's safe not to protect wbt for - now. Hoever, in case that rq_qos dynamically destruction is supported - in the furture, this patch also protect rq_qos_add() from wbt_init() - directly, this is enough because blk-sysfs already synchronize - writers with disk removal. - -3) For iocost and iolatency, in order to synchronize disk removal and - cgroup configuration, the lock is held after blkdev_get_no_open() - from blkg_conf_open_bdev(), and is released in blkg_conf_exit(). - In order to fix the above memory leak, disk_live() is checked after - holding the new lock. - -Fixes: 50e34d78815e ("block: disable the elevator int del_gendisk") -Signed-off-by: Yu Kuai -Acked-by: Tejun Heo -Link: https://lore.kernel.org/r/20230414084008.2085155-1-yukuai1@huaweicloud.com -Signed-off-by: Jens Axboe -Signed-off-by: Sasha Levin ---- - block/blk-cgroup.c | 9 +++++++++ - block/blk-core.c | 1 + - block/blk-rq-qos.c | 20 ++++++-------------- - block/blk-wbt.c | 2 ++ - include/linux/blkdev.h | 1 + - 5 files changed, 19 insertions(+), 14 deletions(-) - -diff --git a/block/blk-cgroup.c b/block/blk-cgroup.c -index dce1548a7a0c3..5215bc7af5514 100644 ---- a/block/blk-cgroup.c -+++ b/block/blk-cgroup.c -@@ -762,6 +762,13 @@ int blkg_conf_open_bdev(struct blkg_conf_ctx *ctx) - return -ENODEV; - } - -+ mutex_lock(&bdev->bd_queue->rq_qos_mutex); -+ if (!disk_live(bdev->bd_disk)) { -+ blkdev_put_no_open(bdev); -+ mutex_unlock(&bdev->bd_queue->rq_qos_mutex); -+ return -ENODEV; -+ } -+ - ctx->body = input; - ctx->bdev = bdev; - return 0; -@@ -906,6 +913,7 @@ EXPORT_SYMBOL_GPL(blkg_conf_prep); - */ - void blkg_conf_exit(struct blkg_conf_ctx *ctx) - __releases(&ctx->bdev->bd_queue->queue_lock) -+ __releases(&ctx->bdev->bd_queue->rq_qos_mutex) - { - if (ctx->blkg) { - spin_unlock_irq(&bdev_get_queue(ctx->bdev)->queue_lock); -@@ -913,6 +921,7 @@ void blkg_conf_exit(struct blkg_conf_ctx *ctx) - } - - if (ctx->bdev) { -+ mutex_unlock(&ctx->bdev->bd_queue->rq_qos_mutex); - blkdev_put_no_open(ctx->bdev); - ctx->body = NULL; - ctx->bdev = NULL; -diff --git a/block/blk-core.c b/block/blk-core.c -index 1da77e7d62894..3fc68b9444791 100644 ---- a/block/blk-core.c -+++ b/block/blk-core.c -@@ -420,6 +420,7 @@ struct request_queue *blk_alloc_queue(int node_id) - mutex_init(&q->debugfs_mutex); - mutex_init(&q->sysfs_lock); - mutex_init(&q->sysfs_dir_lock); -+ mutex_init(&q->rq_qos_mutex); - spin_lock_init(&q->queue_lock); - - init_waitqueue_head(&q->mq_freeze_wq); -diff --git a/block/blk-rq-qos.c b/block/blk-rq-qos.c -index d8cc820a365e3..167be74df4eec 100644 ---- a/block/blk-rq-qos.c -+++ b/block/blk-rq-qos.c -@@ -288,11 +288,13 @@ void rq_qos_wait(struct rq_wait *rqw, void *private_data, - - void rq_qos_exit(struct request_queue *q) - { -+ mutex_lock(&q->rq_qos_mutex); - while (q->rq_qos) { - struct rq_qos *rqos = q->rq_qos; - q->rq_qos = rqos->next; - rqos->ops->exit(rqos); - } -+ mutex_unlock(&q->rq_qos_mutex); - } - - int rq_qos_add(struct rq_qos *rqos, struct gendisk *disk, enum rq_qos_id id, -@@ -300,6 +302,8 @@ int rq_qos_add(struct rq_qos *rqos, struct gendisk *disk, enum rq_qos_id id, - { - struct request_queue *q = disk->queue; - -+ lockdep_assert_held(&q->rq_qos_mutex); -+ - rqos->disk = disk; - rqos->id = id; - rqos->ops = ops; -@@ -307,18 +311,13 @@ int rq_qos_add(struct rq_qos *rqos, struct gendisk *disk, enum rq_qos_id id, - /* - * No IO can be in-flight when adding rqos, so freeze queue, which - * is fine since we only support rq_qos for blk-mq queue. -- * -- * Reuse ->queue_lock for protecting against other concurrent -- * rq_qos adding/deleting - */ - blk_mq_freeze_queue(q); - -- spin_lock_irq(&q->queue_lock); - if (rq_qos_id(q, rqos->id)) - goto ebusy; - rqos->next = q->rq_qos; - q->rq_qos = rqos; -- spin_unlock_irq(&q->queue_lock); - - blk_mq_unfreeze_queue(q); - -@@ -330,7 +329,6 @@ int rq_qos_add(struct rq_qos *rqos, struct gendisk *disk, enum rq_qos_id id, - - return 0; - ebusy: -- spin_unlock_irq(&q->queue_lock); - blk_mq_unfreeze_queue(q); - return -EBUSY; - } -@@ -340,21 +338,15 @@ void rq_qos_del(struct rq_qos *rqos) - struct request_queue *q = rqos->disk->queue; - struct rq_qos **cur; - -- /* -- * See comment in rq_qos_add() about freezing queue & using -- * ->queue_lock. -- */ -- blk_mq_freeze_queue(q); -+ lockdep_assert_held(&q->rq_qos_mutex); - -- spin_lock_irq(&q->queue_lock); -+ blk_mq_freeze_queue(q); - for (cur = &q->rq_qos; *cur; cur = &(*cur)->next) { - if (*cur == rqos) { - *cur = rqos->next; - break; - } - } -- spin_unlock_irq(&q->queue_lock); -- - blk_mq_unfreeze_queue(q); - - mutex_lock(&q->debugfs_mutex); -diff --git a/block/blk-wbt.c b/block/blk-wbt.c -index 9ec2a2f1eda38..7a87506ff8e1c 100644 ---- a/block/blk-wbt.c -+++ b/block/blk-wbt.c -@@ -944,7 +944,9 @@ int wbt_init(struct gendisk *disk) - /* - * Assign rwb and add the stats callback. - */ -+ mutex_lock(&q->rq_qos_mutex); - ret = rq_qos_add(&rwb->rqos, disk, RQ_QOS_WBT, &wbt_rqos_ops); -+ mutex_unlock(&q->rq_qos_mutex); - if (ret) - goto err_free; - -diff --git a/include/linux/blkdev.h b/include/linux/blkdev.h -index be9d7d8237b33..67e942d776bd8 100644 ---- a/include/linux/blkdev.h -+++ b/include/linux/blkdev.h -@@ -392,6 +392,7 @@ struct request_queue { - - struct blk_queue_stats *stats; - struct rq_qos *rq_qos; -+ struct mutex rq_qos_mutex; - - const struct blk_mq_ops *mq_ops; - --- -2.39.2 - diff --git a/queue-6.4/bonding-do-not-assume-skb-mac_header-is-set.patch b/queue-6.4/bonding-do-not-assume-skb-mac_header-is-set.patch deleted file mode 100644 index 4e10b75e447..00000000000 --- a/queue-6.4/bonding-do-not-assume-skb-mac_header-is-set.patch +++ /dev/null @@ -1,92 +0,0 @@ -From 62a1f3a985ce62c13bc4cec506001ad41594a12b Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Thu, 22 Jun 2023 15:23:04 +0000 -Subject: bonding: do not assume skb mac_header is set - -From: Eric Dumazet - -[ Upstream commit 6a940abdef3162e5723f1495b8a49859d1708f79 ] - -Drivers must not assume in their ndo_start_xmit() that -skbs have their mac_header set. skb->data is all what is needed. - -bonding seems to be one of the last offender as caught by syzbot: - -WARNING: CPU: 1 PID: 12155 at include/linux/skbuff.h:2907 skb_mac_offset include/linux/skbuff.h:2913 [inline] -WARNING: CPU: 1 PID: 12155 at include/linux/skbuff.h:2907 bond_xmit_hash drivers/net/bonding/bond_main.c:4170 [inline] -WARNING: CPU: 1 PID: 12155 at include/linux/skbuff.h:2907 bond_xmit_3ad_xor_slave_get drivers/net/bonding/bond_main.c:5149 [inline] -WARNING: CPU: 1 PID: 12155 at include/linux/skbuff.h:2907 bond_3ad_xor_xmit drivers/net/bonding/bond_main.c:5186 [inline] -WARNING: CPU: 1 PID: 12155 at include/linux/skbuff.h:2907 __bond_start_xmit drivers/net/bonding/bond_main.c:5442 [inline] -WARNING: CPU: 1 PID: 12155 at include/linux/skbuff.h:2907 bond_start_xmit+0x14ab/0x19d0 drivers/net/bonding/bond_main.c:5470 -Modules linked in: -CPU: 1 PID: 12155 Comm: syz-executor.3 Not tainted 6.1.30-syzkaller #0 -Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 05/25/2023 -RIP: 0010:skb_mac_header include/linux/skbuff.h:2907 [inline] -RIP: 0010:skb_mac_offset include/linux/skbuff.h:2913 [inline] -RIP: 0010:bond_xmit_hash drivers/net/bonding/bond_main.c:4170 [inline] -RIP: 0010:bond_xmit_3ad_xor_slave_get drivers/net/bonding/bond_main.c:5149 [inline] -RIP: 0010:bond_3ad_xor_xmit drivers/net/bonding/bond_main.c:5186 [inline] -RIP: 0010:__bond_start_xmit drivers/net/bonding/bond_main.c:5442 [inline] -RIP: 0010:bond_start_xmit+0x14ab/0x19d0 drivers/net/bonding/bond_main.c:5470 -Code: 8b 7c 24 30 e8 76 dd 1a 01 48 85 c0 74 0d 48 89 c3 e8 29 67 2e fe e9 15 ef ff ff e8 1f 67 2e fe e9 10 ef ff ff e8 15 67 2e fe <0f> 0b e9 45 f8 ff ff e8 09 67 2e fe e9 dc fa ff ff e8 ff 66 2e fe -RSP: 0018:ffffc90002fff6e0 EFLAGS: 00010283 -RAX: ffffffff835874db RBX: 000000000000ffff RCX: 0000000000040000 -RDX: ffffc90004dcf000 RSI: 00000000000000b5 RDI: 00000000000000b6 -RBP: ffffc90002fff8b8 R08: ffffffff83586d16 R09: ffffffff83586584 -R10: 0000000000000007 R11: ffff8881599fc780 R12: ffff88811b6a7b7e -R13: 1ffff110236d4f6f R14: ffff88811b6a7ac0 R15: 1ffff110236d4f76 -FS: 00007f2e9eb47700(0000) GS:ffff8881f6b00000(0000) knlGS:0000000000000000 -CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033 -CR2: 0000001b2e421000 CR3: 000000010e6d4000 CR4: 00000000003526e0 -DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000 -DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400 -Call Trace: - -[] netdev_start_xmit include/linux/netdevice.h:4925 [inline] -[] __dev_direct_xmit+0x4ef/0x850 net/core/dev.c:4380 -[] dev_direct_xmit include/linux/netdevice.h:3043 [inline] -[] packet_direct_xmit+0x18b/0x300 net/packet/af_packet.c:284 -[] packet_snd net/packet/af_packet.c:3112 [inline] -[] packet_sendmsg+0x4a22/0x64d0 net/packet/af_packet.c:3143 -[] sock_sendmsg_nosec net/socket.c:716 [inline] -[] sock_sendmsg net/socket.c:736 [inline] -[] __sys_sendto+0x472/0x5f0 net/socket.c:2139 -[] __do_sys_sendto net/socket.c:2151 [inline] -[] __se_sys_sendto net/socket.c:2147 [inline] -[] __x64_sys_sendto+0xe5/0x100 net/socket.c:2147 -[] do_syscall_x64 arch/x86/entry/common.c:50 [inline] -[] do_syscall_64+0x2f/0x50 arch/x86/entry/common.c:80 -[] entry_SYSCALL_64_after_hwframe+0x63/0xcd - -Fixes: 7b8fc0103bb5 ("bonding: add a vlan+srcmac tx hashing option") -Reported-by: syzbot -Signed-off-by: Eric Dumazet -Cc: Jarod Wilson -Cc: Moshe Tal -Cc: Jussi Maki -Cc: Jay Vosburgh -Cc: Andy Gospodarek -Cc: Vladimir Oltean -Link: https://lore.kernel.org/r/20230622152304.2137482-1-edumazet@google.com -Signed-off-by: Jakub Kicinski -Signed-off-by: Sasha Levin ---- - drivers/net/bonding/bond_main.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/drivers/net/bonding/bond_main.c b/drivers/net/bonding/bond_main.c -index edbaa1444f8ec..091e035c76a6f 100644 ---- a/drivers/net/bonding/bond_main.c -+++ b/drivers/net/bonding/bond_main.c -@@ -4197,7 +4197,7 @@ u32 bond_xmit_hash(struct bonding *bond, struct sk_buff *skb) - return skb->hash; - - return __bond_xmit_hash(bond, skb, skb->data, skb->protocol, -- skb_mac_offset(skb), skb_network_offset(skb), -+ 0, skb_network_offset(skb), - skb_headlen(skb)); - } - --- -2.39.2 - diff --git a/queue-6.4/bpf-call-__bpf_sk_lookup-__bpf_skc_lookup-directly-v.patch b/queue-6.4/bpf-call-__bpf_sk_lookup-__bpf_skc_lookup-directly-v.patch deleted file mode 100644 index 5cb95208ed0..00000000000 --- a/queue-6.4/bpf-call-__bpf_sk_lookup-__bpf_skc_lookup-directly-v.patch +++ /dev/null @@ -1,79 +0,0 @@ -From c2b9e56d2cfaaf62f79d17a24eaa53af3f56b324 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Wed, 21 Jun 2023 13:42:09 +0300 -Subject: bpf: Call __bpf_sk_lookup()/__bpf_skc_lookup() directly via TC - hookpoint - -From: Gilad Sever - -[ Upstream commit 97fbfeb86917bdbe9c41d5143e335a929147f405 ] - -skb->dev always exists in the tc flow. There is no need to use -bpf_skc_lookup(), bpf_sk_lookup() from this code path. - -This change facilitates fixing the tc flow to be VRF aware. - -Signed-off-by: Gilad Sever -Signed-off-by: Daniel Borkmann -Reviewed-by: Shmulik Ladkani -Reviewed-by: Eyal Birger -Acked-by: Stanislav Fomichev -Link: https://lore.kernel.org/bpf/20230621104211.301902-3-gilad9366@gmail.com -Stable-dep-of: 9a5cb79762e0 ("bpf: Fix bpf socket lookup from tc/xdp to respect socket VRF bindings") -Signed-off-by: Sasha Levin ---- - net/core/filter.c | 24 ++++++++++++++++++------ - 1 file changed, 18 insertions(+), 6 deletions(-) - -diff --git a/net/core/filter.c b/net/core/filter.c -index 57d853460e126..e06547922edcf 100644 ---- a/net/core/filter.c -+++ b/net/core/filter.c -@@ -6730,8 +6730,12 @@ static const struct bpf_func_proto bpf_sk_lookup_udp_proto = { - BPF_CALL_5(bpf_tc_skc_lookup_tcp, struct sk_buff *, skb, - struct bpf_sock_tuple *, tuple, u32, len, u64, netns_id, u64, flags) - { -- return (unsigned long)bpf_skc_lookup(skb, tuple, len, IPPROTO_TCP, -- netns_id, flags); -+ struct net *caller_net = dev_net(skb->dev); -+ int ifindex = skb->dev->ifindex; -+ -+ return (unsigned long)__bpf_skc_lookup(skb, tuple, len, caller_net, -+ ifindex, IPPROTO_TCP, netns_id, -+ flags); - } - - static const struct bpf_func_proto bpf_tc_skc_lookup_tcp_proto = { -@@ -6749,8 +6753,12 @@ static const struct bpf_func_proto bpf_tc_skc_lookup_tcp_proto = { - BPF_CALL_5(bpf_tc_sk_lookup_tcp, struct sk_buff *, skb, - struct bpf_sock_tuple *, tuple, u32, len, u64, netns_id, u64, flags) - { -- return (unsigned long)bpf_sk_lookup(skb, tuple, len, IPPROTO_TCP, -- netns_id, flags); -+ struct net *caller_net = dev_net(skb->dev); -+ int ifindex = skb->dev->ifindex; -+ -+ return (unsigned long)__bpf_sk_lookup(skb, tuple, len, caller_net, -+ ifindex, IPPROTO_TCP, netns_id, -+ flags); - } - - static const struct bpf_func_proto bpf_tc_sk_lookup_tcp_proto = { -@@ -6768,8 +6776,12 @@ static const struct bpf_func_proto bpf_tc_sk_lookup_tcp_proto = { - BPF_CALL_5(bpf_tc_sk_lookup_udp, struct sk_buff *, skb, - struct bpf_sock_tuple *, tuple, u32, len, u64, netns_id, u64, flags) - { -- return (unsigned long)bpf_sk_lookup(skb, tuple, len, IPPROTO_UDP, -- netns_id, flags); -+ struct net *caller_net = dev_net(skb->dev); -+ int ifindex = skb->dev->ifindex; -+ -+ return (unsigned long)__bpf_sk_lookup(skb, tuple, len, caller_net, -+ ifindex, IPPROTO_UDP, netns_id, -+ flags); - } - - static const struct bpf_func_proto bpf_tc_sk_lookup_udp_proto = { --- -2.39.2 - diff --git a/queue-6.4/bpf-don-t-efault-for-g-s-setsockopt-with-wrong-optle.patch b/queue-6.4/bpf-don-t-efault-for-g-s-setsockopt-with-wrong-optle.patch deleted file mode 100644 index 3c554b2bbcd..00000000000 --- a/queue-6.4/bpf-don-t-efault-for-g-s-setsockopt-with-wrong-optle.patch +++ /dev/null @@ -1,88 +0,0 @@ -From cc4793551a6e6ef34e83b92ecaf1b5f7766e9f57 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Thu, 11 May 2023 10:04:53 -0700 -Subject: bpf: Don't EFAULT for {g,s}setsockopt with wrong optlen - -From: Stanislav Fomichev - -[ Upstream commit 29ebbba7d46136cba324264e513a1e964ca16c0a ] - -With the way the hooks implemented right now, we have a special -condition: optval larger than PAGE_SIZE will expose only first 4k into -BPF; any modifications to the optval are ignored. If the BPF program -doesn't handle this condition by resetting optlen to 0, -the userspace will get EFAULT. - -The intention of the EFAULT was to make it apparent to the -developers that the program is doing something wrong. -However, this inadvertently might affect production workloads -with the BPF programs that are not too careful (i.e., returning EFAULT -for perfectly valid setsockopt/getsockopt calls). - -Let's try to minimize the chance of BPF program screwing up userspace -by ignoring the output of those BPF programs (instead of returning -EFAULT to the userspace). pr_info_once those cases to -the dmesg to help with figuring out what's going wrong. - -Fixes: 0d01da6afc54 ("bpf: implement getsockopt and setsockopt hooks") -Suggested-by: Martin KaFai Lau -Signed-off-by: Stanislav Fomichev -Link: https://lore.kernel.org/r/20230511170456.1759459-2-sdf@google.com -Signed-off-by: Martin KaFai Lau -Signed-off-by: Sasha Levin ---- - kernel/bpf/cgroup.c | 15 +++++++++++++++ - 1 file changed, 15 insertions(+) - -diff --git a/kernel/bpf/cgroup.c b/kernel/bpf/cgroup.c -index 517b6a5928cc0..5b2741aa0d9bb 100644 ---- a/kernel/bpf/cgroup.c -+++ b/kernel/bpf/cgroup.c -@@ -1826,6 +1826,12 @@ int __cgroup_bpf_run_filter_setsockopt(struct sock *sk, int *level, - ret = 1; - } else if (ctx.optlen > max_optlen || ctx.optlen < -1) { - /* optlen is out of bounds */ -+ if (*optlen > PAGE_SIZE && ctx.optlen >= 0) { -+ pr_info_once("bpf setsockopt: ignoring program buffer with optlen=%d (max_optlen=%d)\n", -+ ctx.optlen, max_optlen); -+ ret = 0; -+ goto out; -+ } - ret = -EFAULT; - } else { - /* optlen within bounds, run kernel handler */ -@@ -1881,8 +1887,10 @@ int __cgroup_bpf_run_filter_getsockopt(struct sock *sk, int level, - .optname = optname, - .current_task = current, - }; -+ int orig_optlen; - int ret; - -+ orig_optlen = max_optlen; - ctx.optlen = max_optlen; - max_optlen = sockopt_alloc_buf(&ctx, max_optlen, &buf); - if (max_optlen < 0) -@@ -1905,6 +1913,7 @@ int __cgroup_bpf_run_filter_getsockopt(struct sock *sk, int level, - ret = -EFAULT; - goto out; - } -+ orig_optlen = ctx.optlen; - - if (copy_from_user(ctx.optval, optval, - min(ctx.optlen, max_optlen)) != 0) { -@@ -1922,6 +1931,12 @@ int __cgroup_bpf_run_filter_getsockopt(struct sock *sk, int level, - goto out; - - if (optval && (ctx.optlen > max_optlen || ctx.optlen < 0)) { -+ if (orig_optlen > PAGE_SIZE && ctx.optlen >= 0) { -+ pr_info_once("bpf getsockopt: ignoring program buffer with optlen=%d (max_optlen=%d)\n", -+ ctx.optlen, max_optlen); -+ ret = retval; -+ goto out; -+ } - ret = -EFAULT; - goto out; - } --- -2.39.2 - diff --git a/queue-6.4/bpf-encapsulate-precision-backtracking-bookkeeping.patch b/queue-6.4/bpf-encapsulate-precision-backtracking-bookkeeping.patch deleted file mode 100644 index fd8876dd347..00000000000 --- a/queue-6.4/bpf-encapsulate-precision-backtracking-bookkeeping.patch +++ /dev/null @@ -1,537 +0,0 @@ -From cc4d2a0b9158a947bd21a2ebd0ce32179df18458 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Thu, 4 May 2023 21:33:10 -0700 -Subject: bpf: encapsulate precision backtracking bookkeeping - -From: Andrii Nakryiko - -[ Upstream commit 407958a0e980b9e1842ab87b5a1040521e1e24e9 ] - -Add struct backtrack_state and straightforward API around it to keep -track of register and stack masks used and maintained during precision -backtracking process. Having this logic separately allow to keep -high-level backtracking algorithm cleaner, but also it sets us up to -cleanly keep track of register and stack masks per frame, allowing (with -some further logic adjustments) to perform precision backpropagation -across multiple frames (i.e., subprog calls). - -Signed-off-by: Andrii Nakryiko -Link: https://lore.kernel.org/r/20230505043317.3629845-4-andrii@kernel.org -Signed-off-by: Alexei Starovoitov -Stable-dep-of: f655badf2a8f ("bpf: fix propagate_precision() logic for inner frames") -Signed-off-by: Sasha Levin ---- - include/linux/bpf_verifier.h | 14 ++ - kernel/bpf/verifier.c | 249 +++++++++++++++++++++++++---------- - 2 files changed, 196 insertions(+), 67 deletions(-) - -diff --git a/include/linux/bpf_verifier.h b/include/linux/bpf_verifier.h -index 3dd29a53b7112..33f541366f4e7 100644 ---- a/include/linux/bpf_verifier.h -+++ b/include/linux/bpf_verifier.h -@@ -238,6 +238,10 @@ enum bpf_stack_slot_type { - - #define BPF_REG_SIZE 8 /* size of eBPF register in bytes */ - -+#define BPF_REGMASK_ARGS ((1 << BPF_REG_1) | (1 << BPF_REG_2) | \ -+ (1 << BPF_REG_3) | (1 << BPF_REG_4) | \ -+ (1 << BPF_REG_5)) -+ - #define BPF_DYNPTR_SIZE sizeof(struct bpf_dynptr_kern) - #define BPF_DYNPTR_NR_SLOTS (BPF_DYNPTR_SIZE / BPF_REG_SIZE) - -@@ -541,6 +545,15 @@ struct bpf_subprog_info { - bool is_async_cb; - }; - -+struct bpf_verifier_env; -+ -+struct backtrack_state { -+ struct bpf_verifier_env *env; -+ u32 frame; -+ u32 reg_masks[MAX_CALL_FRAMES]; -+ u64 stack_masks[MAX_CALL_FRAMES]; -+}; -+ - /* single container for all structs - * one verifier_env per bpf_check() call - */ -@@ -578,6 +591,7 @@ struct bpf_verifier_env { - int *insn_stack; - int cur_stack; - } cfg; -+ struct backtrack_state bt; - u32 pass_cnt; /* number of times do_check() was called */ - u32 subprog_cnt; - /* number of instructions analyzed by the verifier */ -diff --git a/kernel/bpf/verifier.c b/kernel/bpf/verifier.c -index cf5f230360f53..acd0780f9b907 100644 ---- a/kernel/bpf/verifier.c -+++ b/kernel/bpf/verifier.c -@@ -1254,6 +1254,12 @@ static bool is_spilled_reg(const struct bpf_stack_state *stack) - return stack->slot_type[BPF_REG_SIZE - 1] == STACK_SPILL; - } - -+static bool is_spilled_scalar_reg(const struct bpf_stack_state *stack) -+{ -+ return stack->slot_type[BPF_REG_SIZE - 1] == STACK_SPILL && -+ stack->spilled_ptr.type == SCALAR_VALUE; -+} -+ - static void scrub_spilled_slot(u8 *stype) - { - if (*stype != STACK_INVALID) -@@ -3144,12 +3150,128 @@ static const char *disasm_kfunc_name(void *data, const struct bpf_insn *insn) - return btf_name_by_offset(desc_btf, func->name_off); - } - -+static inline void bt_init(struct backtrack_state *bt, u32 frame) -+{ -+ bt->frame = frame; -+} -+ -+static inline void bt_reset(struct backtrack_state *bt) -+{ -+ struct bpf_verifier_env *env = bt->env; -+ -+ memset(bt, 0, sizeof(*bt)); -+ bt->env = env; -+} -+ -+static inline u32 bt_empty(struct backtrack_state *bt) -+{ -+ u64 mask = 0; -+ int i; -+ -+ for (i = 0; i <= bt->frame; i++) -+ mask |= bt->reg_masks[i] | bt->stack_masks[i]; -+ -+ return mask == 0; -+} -+ -+static inline int bt_subprog_enter(struct backtrack_state *bt) -+{ -+ if (bt->frame == MAX_CALL_FRAMES - 1) { -+ verbose(bt->env, "BUG subprog enter from frame %d\n", bt->frame); -+ WARN_ONCE(1, "verifier backtracking bug"); -+ return -EFAULT; -+ } -+ bt->frame++; -+ return 0; -+} -+ -+static inline int bt_subprog_exit(struct backtrack_state *bt) -+{ -+ if (bt->frame == 0) { -+ verbose(bt->env, "BUG subprog exit from frame 0\n"); -+ WARN_ONCE(1, "verifier backtracking bug"); -+ return -EFAULT; -+ } -+ bt->frame--; -+ return 0; -+} -+ -+static inline void bt_set_frame_reg(struct backtrack_state *bt, u32 frame, u32 reg) -+{ -+ bt->reg_masks[frame] |= 1 << reg; -+} -+ -+static inline void bt_clear_frame_reg(struct backtrack_state *bt, u32 frame, u32 reg) -+{ -+ bt->reg_masks[frame] &= ~(1 << reg); -+} -+ -+static inline void bt_set_reg(struct backtrack_state *bt, u32 reg) -+{ -+ bt_set_frame_reg(bt, bt->frame, reg); -+} -+ -+static inline void bt_clear_reg(struct backtrack_state *bt, u32 reg) -+{ -+ bt_clear_frame_reg(bt, bt->frame, reg); -+} -+ -+static inline void bt_set_frame_slot(struct backtrack_state *bt, u32 frame, u32 slot) -+{ -+ bt->stack_masks[frame] |= 1ull << slot; -+} -+ -+static inline void bt_clear_frame_slot(struct backtrack_state *bt, u32 frame, u32 slot) -+{ -+ bt->stack_masks[frame] &= ~(1ull << slot); -+} -+ -+static inline void bt_set_slot(struct backtrack_state *bt, u32 slot) -+{ -+ bt_set_frame_slot(bt, bt->frame, slot); -+} -+ -+static inline void bt_clear_slot(struct backtrack_state *bt, u32 slot) -+{ -+ bt_clear_frame_slot(bt, bt->frame, slot); -+} -+ -+static inline u32 bt_frame_reg_mask(struct backtrack_state *bt, u32 frame) -+{ -+ return bt->reg_masks[frame]; -+} -+ -+static inline u32 bt_reg_mask(struct backtrack_state *bt) -+{ -+ return bt->reg_masks[bt->frame]; -+} -+ -+static inline u64 bt_frame_stack_mask(struct backtrack_state *bt, u32 frame) -+{ -+ return bt->stack_masks[frame]; -+} -+ -+static inline u64 bt_stack_mask(struct backtrack_state *bt) -+{ -+ return bt->stack_masks[bt->frame]; -+} -+ -+static inline bool bt_is_reg_set(struct backtrack_state *bt, u32 reg) -+{ -+ return bt->reg_masks[bt->frame] & (1 << reg); -+} -+ -+static inline bool bt_is_slot_set(struct backtrack_state *bt, u32 slot) -+{ -+ return bt->stack_masks[bt->frame] & (1ull << slot); -+} -+ - /* For given verifier state backtrack_insn() is called from the last insn to - * the first insn. Its purpose is to compute a bitmask of registers and - * stack slots that needs precision in the parent verifier state. - */ - static int backtrack_insn(struct bpf_verifier_env *env, int idx, -- u32 *reg_mask, u64 *stack_mask) -+ struct backtrack_state *bt) - { - const struct bpf_insn_cbs cbs = { - .cb_call = disasm_kfunc_name, -@@ -3160,20 +3282,20 @@ static int backtrack_insn(struct bpf_verifier_env *env, int idx, - u8 class = BPF_CLASS(insn->code); - u8 opcode = BPF_OP(insn->code); - u8 mode = BPF_MODE(insn->code); -- u32 dreg = 1u << insn->dst_reg; -- u32 sreg = 1u << insn->src_reg; -+ u32 dreg = insn->dst_reg; -+ u32 sreg = insn->src_reg; - u32 spi; - - if (insn->code == 0) - return 0; - if (env->log.level & BPF_LOG_LEVEL2) { -- verbose(env, "regs=%x stack=%llx before ", *reg_mask, *stack_mask); -+ verbose(env, "regs=%x stack=%llx before ", bt_reg_mask(bt), bt_stack_mask(bt)); - verbose(env, "%d: ", idx); - print_bpf_insn(&cbs, insn, env->allow_ptr_leaks); - } - - if (class == BPF_ALU || class == BPF_ALU64) { -- if (!(*reg_mask & dreg)) -+ if (!bt_is_reg_set(bt, dreg)) - return 0; - if (opcode == BPF_MOV) { - if (BPF_SRC(insn->code) == BPF_X) { -@@ -3181,8 +3303,8 @@ static int backtrack_insn(struct bpf_verifier_env *env, int idx, - * dreg needs precision after this insn - * sreg needs precision before this insn - */ -- *reg_mask &= ~dreg; -- *reg_mask |= sreg; -+ bt_clear_reg(bt, dreg); -+ bt_set_reg(bt, sreg); - } else { - /* dreg = K - * dreg needs precision after this insn. -@@ -3190,7 +3312,7 @@ static int backtrack_insn(struct bpf_verifier_env *env, int idx, - * as precise=true in this verifier state. - * No further markings in parent are necessary - */ -- *reg_mask &= ~dreg; -+ bt_clear_reg(bt, dreg); - } - } else { - if (BPF_SRC(insn->code) == BPF_X) { -@@ -3198,15 +3320,15 @@ static int backtrack_insn(struct bpf_verifier_env *env, int idx, - * both dreg and sreg need precision - * before this insn - */ -- *reg_mask |= sreg; -+ bt_set_reg(bt, sreg); - } /* else dreg += K - * dreg still needs precision before this insn - */ - } - } else if (class == BPF_LDX) { -- if (!(*reg_mask & dreg)) -+ if (!bt_is_reg_set(bt, dreg)) - return 0; -- *reg_mask &= ~dreg; -+ bt_clear_reg(bt, dreg); - - /* scalars can only be spilled into stack w/o losing precision. - * Load from any other memory can be zero extended. -@@ -3227,9 +3349,9 @@ static int backtrack_insn(struct bpf_verifier_env *env, int idx, - WARN_ONCE(1, "verifier backtracking bug"); - return -EFAULT; - } -- *stack_mask |= 1ull << spi; -+ bt_set_slot(bt, spi); - } else if (class == BPF_STX || class == BPF_ST) { -- if (*reg_mask & dreg) -+ if (bt_is_reg_set(bt, dreg)) - /* stx & st shouldn't be using _scalar_ dst_reg - * to access memory. It means backtracking - * encountered a case of pointer subtraction. -@@ -3244,11 +3366,11 @@ static int backtrack_insn(struct bpf_verifier_env *env, int idx, - WARN_ONCE(1, "verifier backtracking bug"); - return -EFAULT; - } -- if (!(*stack_mask & (1ull << spi))) -+ if (!bt_is_slot_set(bt, spi)) - return 0; -- *stack_mask &= ~(1ull << spi); -+ bt_clear_slot(bt, spi); - if (class == BPF_STX) -- *reg_mask |= sreg; -+ bt_set_reg(bt, sreg); - } else if (class == BPF_JMP || class == BPF_JMP32) { - if (opcode == BPF_CALL) { - if (insn->src_reg == BPF_PSEUDO_CALL) -@@ -3265,19 +3387,19 @@ static int backtrack_insn(struct bpf_verifier_env *env, int idx, - if (insn->src_reg == BPF_PSEUDO_KFUNC_CALL && insn->imm == 0) - return -ENOTSUPP; - /* regular helper call sets R0 */ -- *reg_mask &= ~1; -- if (*reg_mask & 0x3f) { -+ bt_clear_reg(bt, BPF_REG_0); -+ if (bt_reg_mask(bt) & BPF_REGMASK_ARGS) { - /* if backtracing was looking for registers R1-R5 - * they should have been found already. - */ -- verbose(env, "BUG regs %x\n", *reg_mask); -+ verbose(env, "BUG regs %x\n", bt_reg_mask(bt)); - WARN_ONCE(1, "verifier backtracking bug"); - return -EFAULT; - } - } else if (opcode == BPF_EXIT) { - return -ENOTSUPP; - } else if (BPF_SRC(insn->code) == BPF_X) { -- if (!(*reg_mask & (dreg | sreg))) -+ if (!bt_is_reg_set(bt, dreg) && !bt_is_reg_set(bt, sreg)) - return 0; - /* dreg sreg - * Both dreg and sreg need precision before -@@ -3285,7 +3407,8 @@ static int backtrack_insn(struct bpf_verifier_env *env, int idx, - * before it would be equally necessary to - * propagate it to dreg. - */ -- *reg_mask |= (sreg | dreg); -+ bt_set_reg(bt, dreg); -+ bt_set_reg(bt, sreg); - /* else dreg K - * Only dreg still needs precision before - * this insn, so for the K-based conditional -@@ -3293,9 +3416,9 @@ static int backtrack_insn(struct bpf_verifier_env *env, int idx, - */ - } - } else if (class == BPF_LD) { -- if (!(*reg_mask & dreg)) -+ if (!bt_is_reg_set(bt, dreg)) - return 0; -- *reg_mask &= ~dreg; -+ bt_clear_reg(bt, dreg); - /* It's ld_imm64 or ld_abs or ld_ind. - * For ld_imm64 no further tracking of precision - * into parent is necessary -@@ -3508,20 +3631,21 @@ static void mark_all_scalars_imprecise(struct bpf_verifier_env *env, struct bpf_ - static int __mark_chain_precision(struct bpf_verifier_env *env, int frame, int regno, - int spi) - { -+ struct backtrack_state *bt = &env->bt; - struct bpf_verifier_state *st = env->cur_state; - int first_idx = st->first_insn_idx; - int last_idx = env->insn_idx; - struct bpf_func_state *func; - struct bpf_reg_state *reg; -- u32 reg_mask = regno >= 0 ? 1u << regno : 0; -- u64 stack_mask = spi >= 0 ? 1ull << spi : 0; - bool skip_first = true; -- bool new_marks = false; - int i, err; - - if (!env->bpf_capable) - return 0; - -+ /* set frame number from which we are starting to backtrack */ -+ bt_init(bt, frame); -+ - /* Do sanity checks against current state of register and/or stack - * slot, but don't set precise flag in current state, as precision - * tracking in the current state is unnecessary. -@@ -3533,26 +3657,17 @@ static int __mark_chain_precision(struct bpf_verifier_env *env, int frame, int r - WARN_ONCE(1, "backtracing misuse"); - return -EFAULT; - } -- new_marks = true; -+ bt_set_reg(bt, regno); - } - - while (spi >= 0) { -- if (!is_spilled_reg(&func->stack[spi])) { -- stack_mask = 0; -+ if (!is_spilled_scalar_reg(&func->stack[spi])) - break; -- } -- reg = &func->stack[spi].spilled_ptr; -- if (reg->type != SCALAR_VALUE) { -- stack_mask = 0; -- break; -- } -- new_marks = true; -+ bt_set_slot(bt, spi); - break; - } - -- if (!new_marks) -- return 0; -- if (!reg_mask && !stack_mask) -+ if (bt_empty(bt)) - return 0; - - for (;;) { -@@ -3571,12 +3686,13 @@ static int __mark_chain_precision(struct bpf_verifier_env *env, int frame, int r - if (st->curframe == 0 && - st->frame[0]->subprogno > 0 && - st->frame[0]->callsite == BPF_MAIN_FUNC && -- stack_mask == 0 && (reg_mask & ~0x3e) == 0) { -- bitmap_from_u64(mask, reg_mask); -+ bt_stack_mask(bt) == 0 && -+ (bt_reg_mask(bt) & ~BPF_REGMASK_ARGS) == 0) { -+ bitmap_from_u64(mask, bt_reg_mask(bt)); - for_each_set_bit(i, mask, 32) { - reg = &st->frame[0]->regs[i]; - if (reg->type != SCALAR_VALUE) { -- reg_mask &= ~(1u << i); -+ bt_clear_reg(bt, i); - continue; - } - reg->precise = true; -@@ -3584,8 +3700,8 @@ static int __mark_chain_precision(struct bpf_verifier_env *env, int frame, int r - return 0; - } - -- verbose(env, "BUG backtracing func entry subprog %d reg_mask %x stack_mask %llx\n", -- st->frame[0]->subprogno, reg_mask, stack_mask); -+ verbose(env, "BUG backtracking func entry subprog %d reg_mask %x stack_mask %llx\n", -+ st->frame[0]->subprogno, bt_reg_mask(bt), bt_stack_mask(bt)); - WARN_ONCE(1, "verifier backtracking bug"); - return -EFAULT; - } -@@ -3595,15 +3711,16 @@ static int __mark_chain_precision(struct bpf_verifier_env *env, int frame, int r - err = 0; - skip_first = false; - } else { -- err = backtrack_insn(env, i, ®_mask, &stack_mask); -+ err = backtrack_insn(env, i, bt); - } - if (err == -ENOTSUPP) { - mark_all_scalars_precise(env, st); -+ bt_reset(bt); - return 0; - } else if (err) { - return err; - } -- if (!reg_mask && !stack_mask) -+ if (bt_empty(bt)) - /* Found assignment(s) into tracked register in this state. - * Since this state is already marked, just return. - * Nothing to be tracked further in the parent state. -@@ -3628,21 +3745,21 @@ static int __mark_chain_precision(struct bpf_verifier_env *env, int frame, int r - if (!st) - break; - -- new_marks = false; - func = st->frame[frame]; -- bitmap_from_u64(mask, reg_mask); -+ bitmap_from_u64(mask, bt_reg_mask(bt)); - for_each_set_bit(i, mask, 32) { - reg = &func->regs[i]; - if (reg->type != SCALAR_VALUE) { -- reg_mask &= ~(1u << i); -+ bt_clear_reg(bt, i); - continue; - } -- if (!reg->precise) -- new_marks = true; -- reg->precise = true; -+ if (reg->precise) -+ bt_clear_reg(bt, i); -+ else -+ reg->precise = true; - } - -- bitmap_from_u64(mask, stack_mask); -+ bitmap_from_u64(mask, bt_stack_mask(bt)); - for_each_set_bit(i, mask, 64) { - if (i >= func->allocated_stack / BPF_REG_SIZE) { - /* the sequence of instructions: -@@ -3659,32 +3776,28 @@ static int __mark_chain_precision(struct bpf_verifier_env *env, int frame, int r - * In such case fallback to conservative. - */ - mark_all_scalars_precise(env, st); -+ bt_reset(bt); - return 0; - } - -- if (!is_spilled_reg(&func->stack[i])) { -- stack_mask &= ~(1ull << i); -+ if (!is_spilled_scalar_reg(&func->stack[i])) { -+ bt_clear_slot(bt, i); - continue; - } - reg = &func->stack[i].spilled_ptr; -- if (reg->type != SCALAR_VALUE) { -- stack_mask &= ~(1ull << i); -- continue; -- } -- if (!reg->precise) -- new_marks = true; -- reg->precise = true; -+ if (reg->precise) -+ bt_clear_slot(bt, i); -+ else -+ reg->precise = true; - } - if (env->log.level & BPF_LOG_LEVEL2) { - verbose(env, "parent %s regs=%x stack=%llx marks:", -- new_marks ? "didn't have" : "already had", -- reg_mask, stack_mask); -+ !bt_empty(bt) ? "didn't have" : "already had", -+ bt_reg_mask(bt), bt_stack_mask(bt)); - print_verifier_state(env, func, true); - } - -- if (!reg_mask && !stack_mask) -- break; -- if (!new_marks) -+ if (bt_empty(bt)) - break; - - last_idx = st->last_insn_idx; -@@ -18812,6 +18925,8 @@ int bpf_check(struct bpf_prog **prog, union bpf_attr *attr, bpfptr_t uattr, __u3 - if (!env) - return -ENOMEM; - -+ env->bt.env = env; -+ - len = (*prog)->len; - env->insn_aux_data = - vzalloc(array_size(sizeof(struct bpf_insn_aux_data), len)); --- -2.39.2 - diff --git a/queue-6.4/bpf-factor-out-socket-lookup-functions-for-the-tc-ho.patch b/queue-6.4/bpf-factor-out-socket-lookup-functions-for-the-tc-ho.patch deleted file mode 100644 index 247229dcbc8..00000000000 --- a/queue-6.4/bpf-factor-out-socket-lookup-functions-for-the-tc-ho.patch +++ /dev/null @@ -1,120 +0,0 @@ -From 4861c0c257267d3e61b1e92b58d458b662b66715 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Wed, 21 Jun 2023 13:42:08 +0300 -Subject: bpf: Factor out socket lookup functions for the TC hookpoint. - -From: Gilad Sever - -[ Upstream commit 6e98730bc0b44acaf86eccc75f823128aa9c9e79 ] - -Change BPF helper socket lookup functions to use TC specific variants: -bpf_tc_sk_lookup_tcp() / bpf_tc_sk_lookup_udp() / bpf_tc_skc_lookup_tcp() -instead of sharing implementation with the cg / sk_skb hooking points. -This allows introducing a separate logic for the TC flow. - -The tc functions are identical to the original code. - -Signed-off-by: Gilad Sever -Signed-off-by: Daniel Borkmann -Reviewed-by: Shmulik Ladkani -Reviewed-by: Eyal Birger -Acked-by: Stanislav Fomichev -Link: https://lore.kernel.org/bpf/20230621104211.301902-2-gilad9366@gmail.com -Stable-dep-of: 9a5cb79762e0 ("bpf: Fix bpf socket lookup from tc/xdp to respect socket VRF bindings") -Signed-off-by: Sasha Levin ---- - net/core/filter.c | 63 ++++++++++++++++++++++++++++++++++++++++++++--- - 1 file changed, 60 insertions(+), 3 deletions(-) - -diff --git a/net/core/filter.c b/net/core/filter.c -index d9ce04ca22ce8..57d853460e126 100644 ---- a/net/core/filter.c -+++ b/net/core/filter.c -@@ -6727,6 +6727,63 @@ static const struct bpf_func_proto bpf_sk_lookup_udp_proto = { - .arg5_type = ARG_ANYTHING, - }; - -+BPF_CALL_5(bpf_tc_skc_lookup_tcp, struct sk_buff *, skb, -+ struct bpf_sock_tuple *, tuple, u32, len, u64, netns_id, u64, flags) -+{ -+ return (unsigned long)bpf_skc_lookup(skb, tuple, len, IPPROTO_TCP, -+ netns_id, flags); -+} -+ -+static const struct bpf_func_proto bpf_tc_skc_lookup_tcp_proto = { -+ .func = bpf_tc_skc_lookup_tcp, -+ .gpl_only = false, -+ .pkt_access = true, -+ .ret_type = RET_PTR_TO_SOCK_COMMON_OR_NULL, -+ .arg1_type = ARG_PTR_TO_CTX, -+ .arg2_type = ARG_PTR_TO_MEM | MEM_RDONLY, -+ .arg3_type = ARG_CONST_SIZE, -+ .arg4_type = ARG_ANYTHING, -+ .arg5_type = ARG_ANYTHING, -+}; -+ -+BPF_CALL_5(bpf_tc_sk_lookup_tcp, struct sk_buff *, skb, -+ struct bpf_sock_tuple *, tuple, u32, len, u64, netns_id, u64, flags) -+{ -+ return (unsigned long)bpf_sk_lookup(skb, tuple, len, IPPROTO_TCP, -+ netns_id, flags); -+} -+ -+static const struct bpf_func_proto bpf_tc_sk_lookup_tcp_proto = { -+ .func = bpf_tc_sk_lookup_tcp, -+ .gpl_only = false, -+ .pkt_access = true, -+ .ret_type = RET_PTR_TO_SOCKET_OR_NULL, -+ .arg1_type = ARG_PTR_TO_CTX, -+ .arg2_type = ARG_PTR_TO_MEM | MEM_RDONLY, -+ .arg3_type = ARG_CONST_SIZE, -+ .arg4_type = ARG_ANYTHING, -+ .arg5_type = ARG_ANYTHING, -+}; -+ -+BPF_CALL_5(bpf_tc_sk_lookup_udp, struct sk_buff *, skb, -+ struct bpf_sock_tuple *, tuple, u32, len, u64, netns_id, u64, flags) -+{ -+ return (unsigned long)bpf_sk_lookup(skb, tuple, len, IPPROTO_UDP, -+ netns_id, flags); -+} -+ -+static const struct bpf_func_proto bpf_tc_sk_lookup_udp_proto = { -+ .func = bpf_tc_sk_lookup_udp, -+ .gpl_only = false, -+ .pkt_access = true, -+ .ret_type = RET_PTR_TO_SOCKET_OR_NULL, -+ .arg1_type = ARG_PTR_TO_CTX, -+ .arg2_type = ARG_PTR_TO_MEM | MEM_RDONLY, -+ .arg3_type = ARG_CONST_SIZE, -+ .arg4_type = ARG_ANYTHING, -+ .arg5_type = ARG_ANYTHING, -+}; -+ - BPF_CALL_1(bpf_sk_release, struct sock *, sk) - { - if (sk && sk_is_refcounted(sk)) -@@ -7980,9 +8037,9 @@ tc_cls_act_func_proto(enum bpf_func_id func_id, const struct bpf_prog *prog) - #endif - #ifdef CONFIG_INET - case BPF_FUNC_sk_lookup_tcp: -- return &bpf_sk_lookup_tcp_proto; -+ return &bpf_tc_sk_lookup_tcp_proto; - case BPF_FUNC_sk_lookup_udp: -- return &bpf_sk_lookup_udp_proto; -+ return &bpf_tc_sk_lookup_udp_proto; - case BPF_FUNC_sk_release: - return &bpf_sk_release_proto; - case BPF_FUNC_tcp_sock: -@@ -7990,7 +8047,7 @@ tc_cls_act_func_proto(enum bpf_func_id func_id, const struct bpf_prog *prog) - case BPF_FUNC_get_listener_sock: - return &bpf_get_listener_sock_proto; - case BPF_FUNC_skc_lookup_tcp: -- return &bpf_skc_lookup_tcp_proto; -+ return &bpf_tc_skc_lookup_tcp_proto; - case BPF_FUNC_tcp_check_syncookie: - return &bpf_tcp_check_syncookie_proto; - case BPF_FUNC_skb_ecn_set_ce: --- -2.39.2 - diff --git a/queue-6.4/bpf-fix-__bpf_-list-rbtree-_add-s-beginning-of-node-.patch b/queue-6.4/bpf-fix-__bpf_-list-rbtree-_add-s-beginning-of-node-.patch deleted file mode 100644 index 5c904bdb2b4..00000000000 --- a/queue-6.4/bpf-fix-__bpf_-list-rbtree-_add-s-beginning-of-node-.patch +++ /dev/null @@ -1,60 +0,0 @@ -From d9e3725fac6363552edd87ff66c0ed219572a341 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Thu, 1 Jun 2023 19:26:41 -0700 -Subject: bpf: Fix __bpf_{list,rbtree}_add's beginning-of-node calculation - -From: Dave Marchevsky - -[ Upstream commit cc0d76cafebbd3e1ffab9c4252d48ecc9e0737f6 ] - -Given the pointer to struct bpf_{rb,list}_node within a local kptr and -the byte offset of that field within the kptr struct, the calculation changed -by this patch is meant to find the beginning of the kptr so that it can -be passed to bpf_obj_drop. - -Unfortunately instead of doing - - ptr_to_kptr = ptr_to_node_field - offset_bytes - -the calculation is erroneously doing - - ptr_to_ktpr = ptr_to_node_field - (offset_bytes * sizeof(struct bpf_rb_node)) - -or the bpf_list_node equivalent. - -This patch fixes the calculation. - -Fixes: d2dcc67df910 ("bpf: Migrate bpf_rbtree_add and bpf_list_push_{front,back} to possibly fail") -Signed-off-by: Dave Marchevsky -Link: https://lore.kernel.org/r/20230602022647.1571784-4-davemarchevsky@fb.com -Signed-off-by: Alexei Starovoitov -Signed-off-by: Sasha Levin ---- - kernel/bpf/helpers.c | 4 ++-- - 1 file changed, 2 insertions(+), 2 deletions(-) - -diff --git a/kernel/bpf/helpers.c b/kernel/bpf/helpers.c -index 8d368fa353f99..27b9f78195b2c 100644 ---- a/kernel/bpf/helpers.c -+++ b/kernel/bpf/helpers.c -@@ -1943,7 +1943,7 @@ static int __bpf_list_add(struct bpf_list_node *node, struct bpf_list_head *head - INIT_LIST_HEAD(h); - if (!list_empty(n)) { - /* Only called from BPF prog, no need to migrate_disable */ -- __bpf_obj_drop_impl(n - off, rec); -+ __bpf_obj_drop_impl((void *)n - off, rec); - return -EINVAL; - } - -@@ -2025,7 +2025,7 @@ static int __bpf_rbtree_add(struct bpf_rb_root *root, struct bpf_rb_node *node, - - if (!RB_EMPTY_NODE(n)) { - /* Only called from BPF prog, no need to migrate_disable */ -- __bpf_obj_drop_impl(n - off, rec); -+ __bpf_obj_drop_impl((void *)n - off, rec); - return -EINVAL; - } - --- -2.39.2 - diff --git a/queue-6.4/bpf-fix-bpf-socket-lookup-from-tc-xdp-to-respect-soc.patch b/queue-6.4/bpf-fix-bpf-socket-lookup-from-tc-xdp-to-respect-soc.patch deleted file mode 100644 index e039366030a..00000000000 --- a/queue-6.4/bpf-fix-bpf-socket-lookup-from-tc-xdp-to-respect-soc.patch +++ /dev/null @@ -1,250 +0,0 @@ -From f69dd98a21b3d7d4567b0035c5d1b1f40d9e451a Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Wed, 21 Jun 2023 13:42:10 +0300 -Subject: bpf: Fix bpf socket lookup from tc/xdp to respect socket VRF bindings - -From: Gilad Sever - -[ Upstream commit 9a5cb79762e0eda17ca15c2a6eaca4622383c21c ] - -When calling bpf_sk_lookup_tcp(), bpf_sk_lookup_udp() or -bpf_skc_lookup_tcp() from tc/xdp ingress, VRF socket bindings aren't -respoected, i.e. unbound sockets are returned, and bound sockets aren't -found. - -VRF binding is determined by the sdif argument to sk_lookup(), however -when called from tc the IP SKB control block isn't initialized and thus -inet{,6}_sdif() always returns 0. - -Fix by calculating sdif for the tc/xdp flows by observing the device's -l3 enslaved state. - -The cg/sk_skb hooking points which are expected to support -inet{,6}_sdif() pass sdif=-1 which makes __bpf_skc_lookup() use the -existing logic. - -Fixes: 6acc9b432e67 ("bpf: Add helper to retrieve socket in BPF") -Signed-off-by: Gilad Sever -Signed-off-by: Daniel Borkmann -Reviewed-by: Shmulik Ladkani -Reviewed-by: Eyal Birger -Acked-by: Stanislav Fomichev -Cc: David Ahern -Link: https://lore.kernel.org/bpf/20230621104211.301902-4-gilad9366@gmail.com -Signed-off-by: Sasha Levin ---- - include/linux/netdevice.h | 9 +++++ - net/core/filter.c | 69 ++++++++++++++++++++++----------------- - 2 files changed, 48 insertions(+), 30 deletions(-) - -diff --git a/include/linux/netdevice.h b/include/linux/netdevice.h -index c2f0c6002a84b..68adc8af29efb 100644 ---- a/include/linux/netdevice.h -+++ b/include/linux/netdevice.h -@@ -5093,6 +5093,15 @@ static inline bool netif_is_l3_slave(const struct net_device *dev) - return dev->priv_flags & IFF_L3MDEV_SLAVE; - } - -+static inline int dev_sdif(const struct net_device *dev) -+{ -+#ifdef CONFIG_NET_L3_MASTER_DEV -+ if (netif_is_l3_slave(dev)) -+ return dev->ifindex; -+#endif -+ return 0; -+} -+ - static inline bool netif_is_bridge_master(const struct net_device *dev) - { - return dev->priv_flags & IFF_EBRIDGE; -diff --git a/net/core/filter.c b/net/core/filter.c -index e06547922edcf..1c959794a8862 100644 ---- a/net/core/filter.c -+++ b/net/core/filter.c -@@ -6555,12 +6555,11 @@ static struct sock *sk_lookup(struct net *net, struct bpf_sock_tuple *tuple, - static struct sock * - __bpf_skc_lookup(struct sk_buff *skb, struct bpf_sock_tuple *tuple, u32 len, - struct net *caller_net, u32 ifindex, u8 proto, u64 netns_id, -- u64 flags) -+ u64 flags, int sdif) - { - struct sock *sk = NULL; - struct net *net; - u8 family; -- int sdif; - - if (len == sizeof(tuple->ipv4)) - family = AF_INET; -@@ -6572,10 +6571,12 @@ __bpf_skc_lookup(struct sk_buff *skb, struct bpf_sock_tuple *tuple, u32 len, - if (unlikely(flags || !((s32)netns_id < 0 || netns_id <= S32_MAX))) - goto out; - -- if (family == AF_INET) -- sdif = inet_sdif(skb); -- else -- sdif = inet6_sdif(skb); -+ if (sdif < 0) { -+ if (family == AF_INET) -+ sdif = inet_sdif(skb); -+ else -+ sdif = inet6_sdif(skb); -+ } - - if ((s32)netns_id < 0) { - net = caller_net; -@@ -6595,10 +6596,11 @@ __bpf_skc_lookup(struct sk_buff *skb, struct bpf_sock_tuple *tuple, u32 len, - static struct sock * - __bpf_sk_lookup(struct sk_buff *skb, struct bpf_sock_tuple *tuple, u32 len, - struct net *caller_net, u32 ifindex, u8 proto, u64 netns_id, -- u64 flags) -+ u64 flags, int sdif) - { - struct sock *sk = __bpf_skc_lookup(skb, tuple, len, caller_net, -- ifindex, proto, netns_id, flags); -+ ifindex, proto, netns_id, flags, -+ sdif); - - if (sk) { - struct sock *sk2 = sk_to_full_sk(sk); -@@ -6638,7 +6640,7 @@ bpf_skc_lookup(struct sk_buff *skb, struct bpf_sock_tuple *tuple, u32 len, - } - - return __bpf_skc_lookup(skb, tuple, len, caller_net, ifindex, proto, -- netns_id, flags); -+ netns_id, flags, -1); - } - - static struct sock * -@@ -6730,12 +6732,13 @@ static const struct bpf_func_proto bpf_sk_lookup_udp_proto = { - BPF_CALL_5(bpf_tc_skc_lookup_tcp, struct sk_buff *, skb, - struct bpf_sock_tuple *, tuple, u32, len, u64, netns_id, u64, flags) - { -- struct net *caller_net = dev_net(skb->dev); -- int ifindex = skb->dev->ifindex; -+ struct net_device *dev = skb->dev; -+ int ifindex = dev->ifindex, sdif = dev_sdif(dev); -+ struct net *caller_net = dev_net(dev); - - return (unsigned long)__bpf_skc_lookup(skb, tuple, len, caller_net, - ifindex, IPPROTO_TCP, netns_id, -- flags); -+ flags, sdif); - } - - static const struct bpf_func_proto bpf_tc_skc_lookup_tcp_proto = { -@@ -6753,12 +6756,13 @@ static const struct bpf_func_proto bpf_tc_skc_lookup_tcp_proto = { - BPF_CALL_5(bpf_tc_sk_lookup_tcp, struct sk_buff *, skb, - struct bpf_sock_tuple *, tuple, u32, len, u64, netns_id, u64, flags) - { -- struct net *caller_net = dev_net(skb->dev); -- int ifindex = skb->dev->ifindex; -+ struct net_device *dev = skb->dev; -+ int ifindex = dev->ifindex, sdif = dev_sdif(dev); -+ struct net *caller_net = dev_net(dev); - - return (unsigned long)__bpf_sk_lookup(skb, tuple, len, caller_net, - ifindex, IPPROTO_TCP, netns_id, -- flags); -+ flags, sdif); - } - - static const struct bpf_func_proto bpf_tc_sk_lookup_tcp_proto = { -@@ -6776,12 +6780,13 @@ static const struct bpf_func_proto bpf_tc_sk_lookup_tcp_proto = { - BPF_CALL_5(bpf_tc_sk_lookup_udp, struct sk_buff *, skb, - struct bpf_sock_tuple *, tuple, u32, len, u64, netns_id, u64, flags) - { -- struct net *caller_net = dev_net(skb->dev); -- int ifindex = skb->dev->ifindex; -+ struct net_device *dev = skb->dev; -+ int ifindex = dev->ifindex, sdif = dev_sdif(dev); -+ struct net *caller_net = dev_net(dev); - - return (unsigned long)__bpf_sk_lookup(skb, tuple, len, caller_net, - ifindex, IPPROTO_UDP, netns_id, -- flags); -+ flags, sdif); - } - - static const struct bpf_func_proto bpf_tc_sk_lookup_udp_proto = { -@@ -6813,12 +6818,13 @@ static const struct bpf_func_proto bpf_sk_release_proto = { - BPF_CALL_5(bpf_xdp_sk_lookup_udp, struct xdp_buff *, ctx, - struct bpf_sock_tuple *, tuple, u32, len, u32, netns_id, u64, flags) - { -- struct net *caller_net = dev_net(ctx->rxq->dev); -- int ifindex = ctx->rxq->dev->ifindex; -+ struct net_device *dev = ctx->rxq->dev; -+ int ifindex = dev->ifindex, sdif = dev_sdif(dev); -+ struct net *caller_net = dev_net(dev); - - return (unsigned long)__bpf_sk_lookup(NULL, tuple, len, caller_net, - ifindex, IPPROTO_UDP, netns_id, -- flags); -+ flags, sdif); - } - - static const struct bpf_func_proto bpf_xdp_sk_lookup_udp_proto = { -@@ -6836,12 +6842,13 @@ static const struct bpf_func_proto bpf_xdp_sk_lookup_udp_proto = { - BPF_CALL_5(bpf_xdp_skc_lookup_tcp, struct xdp_buff *, ctx, - struct bpf_sock_tuple *, tuple, u32, len, u32, netns_id, u64, flags) - { -- struct net *caller_net = dev_net(ctx->rxq->dev); -- int ifindex = ctx->rxq->dev->ifindex; -+ struct net_device *dev = ctx->rxq->dev; -+ int ifindex = dev->ifindex, sdif = dev_sdif(dev); -+ struct net *caller_net = dev_net(dev); - - return (unsigned long)__bpf_skc_lookup(NULL, tuple, len, caller_net, - ifindex, IPPROTO_TCP, netns_id, -- flags); -+ flags, sdif); - } - - static const struct bpf_func_proto bpf_xdp_skc_lookup_tcp_proto = { -@@ -6859,12 +6866,13 @@ static const struct bpf_func_proto bpf_xdp_skc_lookup_tcp_proto = { - BPF_CALL_5(bpf_xdp_sk_lookup_tcp, struct xdp_buff *, ctx, - struct bpf_sock_tuple *, tuple, u32, len, u32, netns_id, u64, flags) - { -- struct net *caller_net = dev_net(ctx->rxq->dev); -- int ifindex = ctx->rxq->dev->ifindex; -+ struct net_device *dev = ctx->rxq->dev; -+ int ifindex = dev->ifindex, sdif = dev_sdif(dev); -+ struct net *caller_net = dev_net(dev); - - return (unsigned long)__bpf_sk_lookup(NULL, tuple, len, caller_net, - ifindex, IPPROTO_TCP, netns_id, -- flags); -+ flags, sdif); - } - - static const struct bpf_func_proto bpf_xdp_sk_lookup_tcp_proto = { -@@ -6884,7 +6892,8 @@ BPF_CALL_5(bpf_sock_addr_skc_lookup_tcp, struct bpf_sock_addr_kern *, ctx, - { - return (unsigned long)__bpf_skc_lookup(NULL, tuple, len, - sock_net(ctx->sk), 0, -- IPPROTO_TCP, netns_id, flags); -+ IPPROTO_TCP, netns_id, flags, -+ -1); - } - - static const struct bpf_func_proto bpf_sock_addr_skc_lookup_tcp_proto = { -@@ -6903,7 +6912,7 @@ BPF_CALL_5(bpf_sock_addr_sk_lookup_tcp, struct bpf_sock_addr_kern *, ctx, - { - return (unsigned long)__bpf_sk_lookup(NULL, tuple, len, - sock_net(ctx->sk), 0, IPPROTO_TCP, -- netns_id, flags); -+ netns_id, flags, -1); - } - - static const struct bpf_func_proto bpf_sock_addr_sk_lookup_tcp_proto = { -@@ -6922,7 +6931,7 @@ BPF_CALL_5(bpf_sock_addr_sk_lookup_udp, struct bpf_sock_addr_kern *, ctx, - { - return (unsigned long)__bpf_sk_lookup(NULL, tuple, len, - sock_net(ctx->sk), 0, IPPROTO_UDP, -- netns_id, flags); -+ netns_id, flags, -1); - } - - static const struct bpf_func_proto bpf_sock_addr_sk_lookup_udp_proto = { --- -2.39.2 - diff --git a/queue-6.4/bpf-fix-memleak-due-to-fentry-attach-failure.patch b/queue-6.4/bpf-fix-memleak-due-to-fentry-attach-failure.patch deleted file mode 100644 index dbed0722e67..00000000000 --- a/queue-6.4/bpf-fix-memleak-due-to-fentry-attach-failure.patch +++ /dev/null @@ -1,112 +0,0 @@ -From 0b838fe7cfb7deee0325478667e914aaf099fedd Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Mon, 15 May 2023 13:08:47 +0000 -Subject: bpf: Fix memleak due to fentry attach failure - -From: Yafang Shao - -[ Upstream commit 108598c39eefbedc9882273ac0df96127a629220 ] - -If it fails to attach fentry, the allocated bpf trampoline image will be -left in the system. That can be verified by checking /proc/kallsyms. - -This meamleak can be verified by a simple bpf program as follows: - - SEC("fentry/trap_init") - int fentry_run() - { - return 0; - } - -It will fail to attach trap_init because this function is freed after -kernel init, and then we can find the trampoline image is left in the -system by checking /proc/kallsyms. - - $ tail /proc/kallsyms - ffffffffc0613000 t bpf_trampoline_6442453466_1 [bpf] - ffffffffc06c3000 t bpf_trampoline_6442453466_1 [bpf] - - $ bpftool btf dump file /sys/kernel/btf/vmlinux | grep "FUNC 'trap_init'" - [2522] FUNC 'trap_init' type_id=119 linkage=static - - $ echo $((6442453466 & 0x7fffffff)) - 2522 - -Note that there are two left bpf trampoline images, that is because the -libbpf will fallback to raw tracepoint if -EINVAL is returned. - -Fixes: e21aa341785c ("bpf: Fix fexit trampoline.") -Signed-off-by: Yafang Shao -Signed-off-by: Daniel Borkmann -Acked-by: Song Liu -Cc: Jiri Olsa -Link: https://lore.kernel.org/bpf/20230515130849.57502-2-laoar.shao@gmail.com -Signed-off-by: Sasha Levin ---- - kernel/bpf/trampoline.c | 21 +++++++++++++++------ - 1 file changed, 15 insertions(+), 6 deletions(-) - -diff --git a/kernel/bpf/trampoline.c b/kernel/bpf/trampoline.c -index 84850e66ce3d6..78acf28d48732 100644 ---- a/kernel/bpf/trampoline.c -+++ b/kernel/bpf/trampoline.c -@@ -251,11 +251,8 @@ bpf_trampoline_get_progs(const struct bpf_trampoline *tr, int *total, bool *ip_a - return tlinks; - } - --static void __bpf_tramp_image_put_deferred(struct work_struct *work) -+static void bpf_tramp_image_free(struct bpf_tramp_image *im) - { -- struct bpf_tramp_image *im; -- -- im = container_of(work, struct bpf_tramp_image, work); - bpf_image_ksym_del(&im->ksym); - bpf_jit_free_exec(im->image); - bpf_jit_uncharge_modmem(PAGE_SIZE); -@@ -263,6 +260,14 @@ static void __bpf_tramp_image_put_deferred(struct work_struct *work) - kfree_rcu(im, rcu); - } - -+static void __bpf_tramp_image_put_deferred(struct work_struct *work) -+{ -+ struct bpf_tramp_image *im; -+ -+ im = container_of(work, struct bpf_tramp_image, work); -+ bpf_tramp_image_free(im); -+} -+ - /* callback, fexit step 3 or fentry step 2 */ - static void __bpf_tramp_image_put_rcu(struct rcu_head *rcu) - { -@@ -437,7 +442,7 @@ static int bpf_trampoline_update(struct bpf_trampoline *tr, bool lock_direct_mut - &tr->func.model, tr->flags, tlinks, - tr->func.addr); - if (err < 0) -- goto out; -+ goto out_free; - - set_memory_rox((long)im->image, 1); - -@@ -466,7 +471,7 @@ static int bpf_trampoline_update(struct bpf_trampoline *tr, bool lock_direct_mut - } - #endif - if (err) -- goto out; -+ goto out_free; - - if (tr->cur_image) - bpf_tramp_image_put(tr->cur_image); -@@ -477,6 +482,10 @@ static int bpf_trampoline_update(struct bpf_trampoline *tr, bool lock_direct_mut - tr->flags = orig_flags; - kfree(tlinks); - return err; -+ -+out_free: -+ bpf_tramp_image_free(im); -+ goto out; - } - - static enum bpf_tramp_prog_type bpf_attach_type_to_tramp(struct bpf_prog *prog) --- -2.39.2 - diff --git a/queue-6.4/bpf-fix-propagate_precision-logic-for-inner-frames.patch b/queue-6.4/bpf-fix-propagate_precision-logic-for-inner-frames.patch deleted file mode 100644 index 150954c03da..00000000000 --- a/queue-6.4/bpf-fix-propagate_precision-logic-for-inner-frames.patch +++ /dev/null @@ -1,181 +0,0 @@ -From e1abf04f2923137032920de23132a35d76fa57e4 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Thu, 4 May 2023 21:33:13 -0700 -Subject: bpf: fix propagate_precision() logic for inner frames - -From: Andrii Nakryiko - -[ Upstream commit f655badf2a8fc028433d9583bf86a6b473721f09 ] - -Fix propagate_precision() logic to perform propagation of all necessary -registers and stack slots across all active frames *in one batch step*. - -Doing this for each register/slot in each individual frame is wasteful, -but the main problem is that backtracking of instruction in any frame -except the deepest one just doesn't work. This is due to backtracking -logic relying on jump history, and available jump history always starts -(or ends, depending how you view it) in current frame. So, if -prog A (frame #0) called subprog B (frame #1) and we need to propagate -precision of, say, register R6 (callee-saved) within frame #0, we -actually don't even know where jump history that corresponds to prog -A even starts. We'd need to skip subprog part of jump history first to -be able to do this. - -Luckily, with struct backtrack_state and __mark_chain_precision() -handling bitmasks tracking/propagation across all active frames at the -same time (added in previous patch), propagate_precision() can be both -fixed and sped up by setting all the necessary bits across all frames -and then performing one __mark_chain_precision() pass. This makes it -unnecessary to skip subprog parts of jump history. - -We also improve logging along the way, to clearly specify which -registers' and slots' precision markings are propagated within which -frame. Each frame will have dedicated line and all registers and stack -slots from that frame will be reported in format similar to precision -backtrack regs/stack logging. E.g.: - -frame 1: propagating r1,r2,r3,fp-8,fp-16 -frame 0: propagating r3,r9,fp-120 - -Fixes: 529409ea92d5 ("bpf: propagate precision across all frames, not just the last one") -Signed-off-by: Andrii Nakryiko -Link: https://lore.kernel.org/r/20230505043317.3629845-7-andrii@kernel.org -Signed-off-by: Alexei Starovoitov -Signed-off-by: Sasha Levin ---- - kernel/bpf/verifier.c | 65 +++++++++++++++++++++++-------------------- - 1 file changed, 35 insertions(+), 30 deletions(-) - -diff --git a/kernel/bpf/verifier.c b/kernel/bpf/verifier.c -index bc4cf078e6277..fb0aee90ccfaa 100644 ---- a/kernel/bpf/verifier.c -+++ b/kernel/bpf/verifier.c -@@ -3684,8 +3684,7 @@ static void mark_all_scalars_imprecise(struct bpf_verifier_env *env, struct bpf_ - * mark_all_scalars_imprecise() to hopefully get more permissive and generic - * finalized states which help in short circuiting more future states. - */ --static int __mark_chain_precision(struct bpf_verifier_env *env, int frame, int regno, -- int spi) -+static int __mark_chain_precision(struct bpf_verifier_env *env, int regno) - { - struct backtrack_state *bt = &env->bt; - struct bpf_verifier_state *st = env->cur_state; -@@ -3700,13 +3699,13 @@ static int __mark_chain_precision(struct bpf_verifier_env *env, int frame, int r - return 0; - - /* set frame number from which we are starting to backtrack */ -- bt_init(bt, frame); -+ bt_init(bt, env->cur_state->curframe); - - /* Do sanity checks against current state of register and/or stack - * slot, but don't set precise flag in current state, as precision - * tracking in the current state is unnecessary. - */ -- func = st->frame[frame]; -+ func = st->frame[bt->frame]; - if (regno >= 0) { - reg = &func->regs[regno]; - if (reg->type != SCALAR_VALUE) { -@@ -3716,13 +3715,6 @@ static int __mark_chain_precision(struct bpf_verifier_env *env, int frame, int r - bt_set_reg(bt, regno); - } - -- while (spi >= 0) { -- if (!is_spilled_scalar_reg(&func->stack[spi])) -- break; -- bt_set_slot(bt, spi); -- break; -- } -- - if (bt_empty(bt)) - return 0; - -@@ -3872,17 +3864,15 @@ static int __mark_chain_precision(struct bpf_verifier_env *env, int frame, int r - - int mark_chain_precision(struct bpf_verifier_env *env, int regno) - { -- return __mark_chain_precision(env, env->cur_state->curframe, regno, -1); --} -- --static int mark_chain_precision_frame(struct bpf_verifier_env *env, int frame, int regno) --{ -- return __mark_chain_precision(env, frame, regno, -1); -+ return __mark_chain_precision(env, regno); - } - --static int mark_chain_precision_stack_frame(struct bpf_verifier_env *env, int frame, int spi) -+/* mark_chain_precision_batch() assumes that env->bt is set in the caller to -+ * desired reg and stack masks across all relevant frames -+ */ -+static int mark_chain_precision_batch(struct bpf_verifier_env *env) - { -- return __mark_chain_precision(env, frame, -1, spi); -+ return __mark_chain_precision(env, -1); - } - - static bool is_spillable_regtype(enum bpf_reg_type type) -@@ -15298,20 +15288,25 @@ static int propagate_precision(struct bpf_verifier_env *env, - struct bpf_reg_state *state_reg; - struct bpf_func_state *state; - int i, err = 0, fr; -+ bool first; - - for (fr = old->curframe; fr >= 0; fr--) { - state = old->frame[fr]; - state_reg = state->regs; -+ first = true; - for (i = 0; i < BPF_REG_FP; i++, state_reg++) { - if (state_reg->type != SCALAR_VALUE || - !state_reg->precise || - !(state_reg->live & REG_LIVE_READ)) - continue; -- if (env->log.level & BPF_LOG_LEVEL2) -- verbose(env, "frame %d: propagating r%d\n", fr, i); -- err = mark_chain_precision_frame(env, fr, i); -- if (err < 0) -- return err; -+ if (env->log.level & BPF_LOG_LEVEL2) { -+ if (first) -+ verbose(env, "frame %d: propagating r%d", fr, i); -+ else -+ verbose(env, ",r%d", i); -+ } -+ bt_set_frame_reg(&env->bt, fr, i); -+ first = false; - } - - for (i = 0; i < state->allocated_stack / BPF_REG_SIZE; i++) { -@@ -15322,14 +15317,24 @@ static int propagate_precision(struct bpf_verifier_env *env, - !state_reg->precise || - !(state_reg->live & REG_LIVE_READ)) - continue; -- if (env->log.level & BPF_LOG_LEVEL2) -- verbose(env, "frame %d: propagating fp%d\n", -- fr, (-i - 1) * BPF_REG_SIZE); -- err = mark_chain_precision_stack_frame(env, fr, i); -- if (err < 0) -- return err; -+ if (env->log.level & BPF_LOG_LEVEL2) { -+ if (first) -+ verbose(env, "frame %d: propagating fp%d", -+ fr, (-i - 1) * BPF_REG_SIZE); -+ else -+ verbose(env, ",fp%d", (-i - 1) * BPF_REG_SIZE); -+ } -+ bt_set_frame_slot(&env->bt, fr, i); -+ first = false; - } -+ if (!first) -+ verbose(env, "\n"); - } -+ -+ err = mark_chain_precision_batch(env); -+ if (err < 0) -+ return err; -+ - return 0; - } - --- -2.39.2 - diff --git a/queue-6.4/bpf-improve-precision-backtrack-logging.patch b/queue-6.4/bpf-improve-precision-backtrack-logging.patch deleted file mode 100644 index ab8b4f286d3..00000000000 --- a/queue-6.4/bpf-improve-precision-backtrack-logging.patch +++ /dev/null @@ -1,327 +0,0 @@ -From 68c2b8c937bb12e0abec42839ef23c660272a190 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Thu, 4 May 2023 21:33:11 -0700 -Subject: bpf: improve precision backtrack logging - -From: Andrii Nakryiko - -[ Upstream commit d9439c21a9e4769bfd83a03ab39056164d44ac31 ] - -Add helper to format register and stack masks in more human-readable -format. Adjust logging a bit during backtrack propagation and especially -during forcing precision fallback logic to make it clearer what's going -on (with log_level=2, of course), and also start reporting affected -frame depth. This is in preparation for having more than one active -frame later when precision propagation between subprog calls is added. - -Signed-off-by: Andrii Nakryiko -Link: https://lore.kernel.org/r/20230505043317.3629845-5-andrii@kernel.org -Signed-off-by: Alexei Starovoitov -Stable-dep-of: f655badf2a8f ("bpf: fix propagate_precision() logic for inner frames") -Signed-off-by: Sasha Levin ---- - include/linux/bpf_verifier.h | 13 ++- - kernel/bpf/verifier.c | 72 ++++++++++-- - .../testing/selftests/bpf/verifier/precise.c | 106 +++++++++--------- - 3 files changed, 128 insertions(+), 63 deletions(-) - -diff --git a/include/linux/bpf_verifier.h b/include/linux/bpf_verifier.h -index 33f541366f4e7..5b11a3b0fec0b 100644 ---- a/include/linux/bpf_verifier.h -+++ b/include/linux/bpf_verifier.h -@@ -18,8 +18,11 @@ - * that converting umax_value to int cannot overflow. - */ - #define BPF_MAX_VAR_SIZ (1 << 29) --/* size of type_str_buf in bpf_verifier. */ --#define TYPE_STR_BUF_LEN 128 -+/* size of tmp_str_buf in bpf_verifier. -+ * we need at least 306 bytes to fit full stack mask representation -+ * (in the "-8,-16,...,-512" form) -+ */ -+#define TMP_STR_BUF_LEN 320 - - /* Liveness marks, used for registers and spilled-regs (in stack slots). - * Read marks propagate upwards until they find a write mark; they record that -@@ -620,8 +623,10 @@ struct bpf_verifier_env { - /* Same as scratched_regs but for stack slots */ - u64 scratched_stack_slots; - u64 prev_log_pos, prev_insn_print_pos; -- /* buffer used in reg_type_str() to generate reg_type string */ -- char type_str_buf[TYPE_STR_BUF_LEN]; -+ /* buffer used to generate temporary string representations, -+ * e.g., in reg_type_str() to generate reg_type string -+ */ -+ char tmp_str_buf[TMP_STR_BUF_LEN]; - }; - - __printf(2, 0) void bpf_verifier_vlog(struct bpf_verifier_log *log, -diff --git a/kernel/bpf/verifier.c b/kernel/bpf/verifier.c -index acd0780f9b907..9260006c13823 100644 ---- a/kernel/bpf/verifier.c -+++ b/kernel/bpf/verifier.c -@@ -604,9 +604,9 @@ static const char *reg_type_str(struct bpf_verifier_env *env, - type & PTR_TRUSTED ? "trusted_" : "" - ); - -- snprintf(env->type_str_buf, TYPE_STR_BUF_LEN, "%s%s%s", -+ snprintf(env->tmp_str_buf, TMP_STR_BUF_LEN, "%s%s%s", - prefix, str[base_type(type)], postfix); -- return env->type_str_buf; -+ return env->tmp_str_buf; - } - - static char slot_type_char[] = { -@@ -3266,6 +3266,45 @@ static inline bool bt_is_slot_set(struct backtrack_state *bt, u32 slot) - return bt->stack_masks[bt->frame] & (1ull << slot); - } - -+/* format registers bitmask, e.g., "r0,r2,r4" for 0x15 mask */ -+static void fmt_reg_mask(char *buf, ssize_t buf_sz, u32 reg_mask) -+{ -+ DECLARE_BITMAP(mask, 64); -+ bool first = true; -+ int i, n; -+ -+ buf[0] = '\0'; -+ -+ bitmap_from_u64(mask, reg_mask); -+ for_each_set_bit(i, mask, 32) { -+ n = snprintf(buf, buf_sz, "%sr%d", first ? "" : ",", i); -+ first = false; -+ buf += n; -+ buf_sz -= n; -+ if (buf_sz < 0) -+ break; -+ } -+} -+/* format stack slots bitmask, e.g., "-8,-24,-40" for 0x15 mask */ -+static void fmt_stack_mask(char *buf, ssize_t buf_sz, u64 stack_mask) -+{ -+ DECLARE_BITMAP(mask, 64); -+ bool first = true; -+ int i, n; -+ -+ buf[0] = '\0'; -+ -+ bitmap_from_u64(mask, stack_mask); -+ for_each_set_bit(i, mask, 64) { -+ n = snprintf(buf, buf_sz, "%s%d", first ? "" : ",", -(i + 1) * 8); -+ first = false; -+ buf += n; -+ buf_sz -= n; -+ if (buf_sz < 0) -+ break; -+ } -+} -+ - /* For given verifier state backtrack_insn() is called from the last insn to - * the first insn. Its purpose is to compute a bitmask of registers and - * stack slots that needs precision in the parent verifier state. -@@ -3289,7 +3328,11 @@ static int backtrack_insn(struct bpf_verifier_env *env, int idx, - if (insn->code == 0) - return 0; - if (env->log.level & BPF_LOG_LEVEL2) { -- verbose(env, "regs=%x stack=%llx before ", bt_reg_mask(bt), bt_stack_mask(bt)); -+ fmt_reg_mask(env->tmp_str_buf, TMP_STR_BUF_LEN, bt_reg_mask(bt)); -+ verbose(env, "mark_precise: frame%d: regs=%s ", -+ bt->frame, env->tmp_str_buf); -+ fmt_stack_mask(env->tmp_str_buf, TMP_STR_BUF_LEN, bt_stack_mask(bt)); -+ verbose(env, "stack=%s before ", env->tmp_str_buf); - verbose(env, "%d: ", idx); - print_bpf_insn(&cbs, insn, env->allow_ptr_leaks); - } -@@ -3489,6 +3532,11 @@ static void mark_all_scalars_precise(struct bpf_verifier_env *env, - struct bpf_reg_state *reg; - int i, j; - -+ if (env->log.level & BPF_LOG_LEVEL2) { -+ verbose(env, "mark_precise: frame%d: falling back to forcing all scalars precise\n", -+ st->curframe); -+ } -+ - /* big hammer: mark all scalars precise in this path. - * pop_stack may still get !precise scalars. - * We also skip current state and go straight to first parent state, -@@ -3500,17 +3548,25 @@ static void mark_all_scalars_precise(struct bpf_verifier_env *env, - func = st->frame[i]; - for (j = 0; j < BPF_REG_FP; j++) { - reg = &func->regs[j]; -- if (reg->type != SCALAR_VALUE) -+ if (reg->type != SCALAR_VALUE || reg->precise) - continue; - reg->precise = true; -+ if (env->log.level & BPF_LOG_LEVEL2) { -+ verbose(env, "force_precise: frame%d: forcing r%d to be precise\n", -+ i, j); -+ } - } - for (j = 0; j < func->allocated_stack / BPF_REG_SIZE; j++) { - if (!is_spilled_reg(&func->stack[j])) - continue; - reg = &func->stack[j].spilled_ptr; -- if (reg->type != SCALAR_VALUE) -+ if (reg->type != SCALAR_VALUE || reg->precise) - continue; - reg->precise = true; -+ if (env->log.level & BPF_LOG_LEVEL2) { -+ verbose(env, "force_precise: frame%d: forcing fp%d to be precise\n", -+ i, -(j + 1) * 8); -+ } - } - } - } -@@ -3674,8 +3730,10 @@ static int __mark_chain_precision(struct bpf_verifier_env *env, int frame, int r - DECLARE_BITMAP(mask, 64); - u32 history = st->jmp_history_cnt; - -- if (env->log.level & BPF_LOG_LEVEL2) -- verbose(env, "last_idx %d first_idx %d\n", last_idx, first_idx); -+ if (env->log.level & BPF_LOG_LEVEL2) { -+ verbose(env, "mark_precise: frame%d: last_idx %d first_idx %d\n", -+ bt->frame, last_idx, first_idx); -+ } - - if (last_idx < 0) { - /* we are at the entry into subprog, which -diff --git a/tools/testing/selftests/bpf/verifier/precise.c b/tools/testing/selftests/bpf/verifier/precise.c -index 6c03a7d805f9d..86cb0722792f0 100644 ---- a/tools/testing/selftests/bpf/verifier/precise.c -+++ b/tools/testing/selftests/bpf/verifier/precise.c -@@ -38,25 +38,24 @@ - .fixup_map_array_48b = { 1 }, - .result = VERBOSE_ACCEPT, - .errstr = -- "26: (85) call bpf_probe_read_kernel#113\ -- last_idx 26 first_idx 20\ -- regs=4 stack=0 before 25\ -- regs=4 stack=0 before 24\ -- regs=4 stack=0 before 23\ -- regs=4 stack=0 before 22\ -- regs=4 stack=0 before 20\ -- parent didn't have regs=4 stack=0 marks\ -- last_idx 19 first_idx 10\ -- regs=4 stack=0 before 19\ -- regs=200 stack=0 before 18\ -- regs=300 stack=0 before 17\ -- regs=201 stack=0 before 15\ -- regs=201 stack=0 before 14\ -- regs=200 stack=0 before 13\ -- regs=200 stack=0 before 12\ -- regs=200 stack=0 before 11\ -- regs=200 stack=0 before 10\ -- parent already had regs=0 stack=0 marks", -+ "mark_precise: frame0: last_idx 26 first_idx 20\ -+ mark_precise: frame0: regs=r2 stack= before 25\ -+ mark_precise: frame0: regs=r2 stack= before 24\ -+ mark_precise: frame0: regs=r2 stack= before 23\ -+ mark_precise: frame0: regs=r2 stack= before 22\ -+ mark_precise: frame0: regs=r2 stack= before 20\ -+ parent didn't have regs=4 stack=0 marks:\ -+ mark_precise: frame0: last_idx 19 first_idx 10\ -+ mark_precise: frame0: regs=r2 stack= before 19\ -+ mark_precise: frame0: regs=r9 stack= before 18\ -+ mark_precise: frame0: regs=r8,r9 stack= before 17\ -+ mark_precise: frame0: regs=r0,r9 stack= before 15\ -+ mark_precise: frame0: regs=r0,r9 stack= before 14\ -+ mark_precise: frame0: regs=r9 stack= before 13\ -+ mark_precise: frame0: regs=r9 stack= before 12\ -+ mark_precise: frame0: regs=r9 stack= before 11\ -+ mark_precise: frame0: regs=r9 stack= before 10\ -+ parent already had regs=0 stack=0 marks:", - }, - { - "precise: test 2", -@@ -100,20 +99,20 @@ - .flags = BPF_F_TEST_STATE_FREQ, - .errstr = - "26: (85) call bpf_probe_read_kernel#113\ -- last_idx 26 first_idx 22\ -- regs=4 stack=0 before 25\ -- regs=4 stack=0 before 24\ -- regs=4 stack=0 before 23\ -- regs=4 stack=0 before 22\ -- parent didn't have regs=4 stack=0 marks\ -- last_idx 20 first_idx 20\ -- regs=4 stack=0 before 20\ -- parent didn't have regs=4 stack=0 marks\ -- last_idx 19 first_idx 17\ -- regs=4 stack=0 before 19\ -- regs=200 stack=0 before 18\ -- regs=300 stack=0 before 17\ -- parent already had regs=0 stack=0 marks", -+ mark_precise: frame0: last_idx 26 first_idx 22\ -+ mark_precise: frame0: regs=r2 stack= before 25\ -+ mark_precise: frame0: regs=r2 stack= before 24\ -+ mark_precise: frame0: regs=r2 stack= before 23\ -+ mark_precise: frame0: regs=r2 stack= before 22\ -+ parent didn't have regs=4 stack=0 marks:\ -+ mark_precise: frame0: last_idx 20 first_idx 20\ -+ mark_precise: frame0: regs=r2 stack= before 20\ -+ parent didn't have regs=4 stack=0 marks:\ -+ mark_precise: frame0: last_idx 19 first_idx 17\ -+ mark_precise: frame0: regs=r2 stack= before 19\ -+ mark_precise: frame0: regs=r9 stack= before 18\ -+ mark_precise: frame0: regs=r8,r9 stack= before 17\ -+ parent already had regs=0 stack=0 marks:", - }, - { - "precise: cross frame pruning", -@@ -153,15 +152,15 @@ - }, - .prog_type = BPF_PROG_TYPE_XDP, - .flags = BPF_F_TEST_STATE_FREQ, -- .errstr = "5: (2d) if r4 > r0 goto pc+0\ -- last_idx 5 first_idx 5\ -- parent didn't have regs=10 stack=0 marks\ -- last_idx 4 first_idx 2\ -- regs=10 stack=0 before 4\ -- regs=10 stack=0 before 3\ -- regs=0 stack=1 before 2\ -- last_idx 5 first_idx 5\ -- parent didn't have regs=1 stack=0 marks", -+ .errstr = "mark_precise: frame0: last_idx 5 first_idx 5\ -+ parent didn't have regs=10 stack=0 marks:\ -+ mark_precise: frame0: last_idx 4 first_idx 2\ -+ mark_precise: frame0: regs=r4 stack= before 4\ -+ mark_precise: frame0: regs=r4 stack= before 3\ -+ mark_precise: frame0: regs= stack=-8 before 2\ -+ mark_precise: frame0: falling back to forcing all scalars precise\ -+ mark_precise: frame0: last_idx 5 first_idx 5\ -+ parent didn't have regs=1 stack=0 marks:", - .result = VERBOSE_ACCEPT, - .retval = -1, - }, -@@ -179,16 +178,19 @@ - }, - .prog_type = BPF_PROG_TYPE_XDP, - .flags = BPF_F_TEST_STATE_FREQ, -- .errstr = "last_idx 6 first_idx 6\ -- parent didn't have regs=10 stack=0 marks\ -- last_idx 5 first_idx 3\ -- regs=10 stack=0 before 5\ -- regs=10 stack=0 before 4\ -- regs=0 stack=1 before 3\ -- last_idx 6 first_idx 6\ -- parent didn't have regs=1 stack=0 marks\ -- last_idx 5 first_idx 3\ -- regs=1 stack=0 before 5", -+ .errstr = "mark_precise: frame0: last_idx 6 first_idx 6\ -+ parent didn't have regs=10 stack=0 marks:\ -+ mark_precise: frame0: last_idx 5 first_idx 3\ -+ mark_precise: frame0: regs=r4 stack= before 5\ -+ mark_precise: frame0: regs=r4 stack= before 4\ -+ mark_precise: frame0: regs= stack=-8 before 3\ -+ mark_precise: frame0: falling back to forcing all scalars precise\ -+ force_precise: frame0: forcing r0 to be precise\ -+ force_precise: frame0: forcing r0 to be precise\ -+ mark_precise: frame0: last_idx 6 first_idx 6\ -+ parent didn't have regs=1 stack=0 marks:\ -+ mark_precise: frame0: last_idx 5 first_idx 3\ -+ mark_precise: frame0: regs=r0 stack= before 5", - .result = VERBOSE_ACCEPT, - .retval = -1, - }, --- -2.39.2 - diff --git a/queue-6.4/bpf-maintain-bitmasks-across-all-active-frames-in-__.patch b/queue-6.4/bpf-maintain-bitmasks-across-all-active-frames-in-__.patch deleted file mode 100644 index 291d11d33a8..00000000000 --- a/queue-6.4/bpf-maintain-bitmasks-across-all-active-frames-in-__.patch +++ /dev/null @@ -1,237 +0,0 @@ -From ed6df480dc570b95293e996322a9130bf4f64d6c Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Thu, 4 May 2023 21:33:12 -0700 -Subject: bpf: maintain bitmasks across all active frames in - __mark_chain_precision - -From: Andrii Nakryiko - -[ Upstream commit 1ef22b6865a73a8aed36d43375fe8c7b30869326 ] - -Teach __mark_chain_precision logic to maintain register/stack masks -across all active frames when going from child state to parent state. -Currently this should be mostly no-op, as precision backtracking usually -bails out when encountering subprog entry/exit. - -It's not very apparent from the diff due to increased indentation, but -the logic remains the same, except everything is done on specific `fr` -frame index. Calls to bt_clear_reg() and bt_clear_slot() are replaced -with frame-specific bt_clear_frame_reg() and bt_clear_frame_slot(), -where frame index is passed explicitly, instead of using current frame -number. - -We also adjust logging to emit affected frame number. And we also add -better logging of human-readable register and stack slot masks, similar -to previous patch. - -Signed-off-by: Andrii Nakryiko -Link: https://lore.kernel.org/r/20230505043317.3629845-6-andrii@kernel.org -Signed-off-by: Alexei Starovoitov -Stable-dep-of: f655badf2a8f ("bpf: fix propagate_precision() logic for inner frames") -Signed-off-by: Sasha Levin ---- - kernel/bpf/verifier.c | 100 ++++++++++-------- - .../testing/selftests/bpf/verifier/precise.c | 18 ++-- - 2 files changed, 62 insertions(+), 56 deletions(-) - -diff --git a/kernel/bpf/verifier.c b/kernel/bpf/verifier.c -index 9260006c13823..bc4cf078e6277 100644 ---- a/kernel/bpf/verifier.c -+++ b/kernel/bpf/verifier.c -@@ -3694,7 +3694,7 @@ static int __mark_chain_precision(struct bpf_verifier_env *env, int frame, int r - struct bpf_func_state *func; - struct bpf_reg_state *reg; - bool skip_first = true; -- int i, err; -+ int i, fr, err; - - if (!env->bpf_capable) - return 0; -@@ -3803,56 +3803,62 @@ static int __mark_chain_precision(struct bpf_verifier_env *env, int frame, int r - if (!st) - break; - -- func = st->frame[frame]; -- bitmap_from_u64(mask, bt_reg_mask(bt)); -- for_each_set_bit(i, mask, 32) { -- reg = &func->regs[i]; -- if (reg->type != SCALAR_VALUE) { -- bt_clear_reg(bt, i); -- continue; -+ for (fr = bt->frame; fr >= 0; fr--) { -+ func = st->frame[fr]; -+ bitmap_from_u64(mask, bt_frame_reg_mask(bt, fr)); -+ for_each_set_bit(i, mask, 32) { -+ reg = &func->regs[i]; -+ if (reg->type != SCALAR_VALUE) { -+ bt_clear_frame_reg(bt, fr, i); -+ continue; -+ } -+ if (reg->precise) -+ bt_clear_frame_reg(bt, fr, i); -+ else -+ reg->precise = true; - } -- if (reg->precise) -- bt_clear_reg(bt, i); -- else -- reg->precise = true; -- } - -- bitmap_from_u64(mask, bt_stack_mask(bt)); -- for_each_set_bit(i, mask, 64) { -- if (i >= func->allocated_stack / BPF_REG_SIZE) { -- /* the sequence of instructions: -- * 2: (bf) r3 = r10 -- * 3: (7b) *(u64 *)(r3 -8) = r0 -- * 4: (79) r4 = *(u64 *)(r10 -8) -- * doesn't contain jmps. It's backtracked -- * as a single block. -- * During backtracking insn 3 is not recognized as -- * stack access, so at the end of backtracking -- * stack slot fp-8 is still marked in stack_mask. -- * However the parent state may not have accessed -- * fp-8 and it's "unallocated" stack space. -- * In such case fallback to conservative. -- */ -- mark_all_scalars_precise(env, st); -- bt_reset(bt); -- return 0; -- } -+ bitmap_from_u64(mask, bt_frame_stack_mask(bt, fr)); -+ for_each_set_bit(i, mask, 64) { -+ if (i >= func->allocated_stack / BPF_REG_SIZE) { -+ /* the sequence of instructions: -+ * 2: (bf) r3 = r10 -+ * 3: (7b) *(u64 *)(r3 -8) = r0 -+ * 4: (79) r4 = *(u64 *)(r10 -8) -+ * doesn't contain jmps. It's backtracked -+ * as a single block. -+ * During backtracking insn 3 is not recognized as -+ * stack access, so at the end of backtracking -+ * stack slot fp-8 is still marked in stack_mask. -+ * However the parent state may not have accessed -+ * fp-8 and it's "unallocated" stack space. -+ * In such case fallback to conservative. -+ */ -+ mark_all_scalars_precise(env, st); -+ bt_reset(bt); -+ return 0; -+ } - -- if (!is_spilled_scalar_reg(&func->stack[i])) { -- bt_clear_slot(bt, i); -- continue; -+ if (!is_spilled_scalar_reg(&func->stack[i])) { -+ bt_clear_frame_slot(bt, fr, i); -+ continue; -+ } -+ reg = &func->stack[i].spilled_ptr; -+ if (reg->precise) -+ bt_clear_frame_slot(bt, fr, i); -+ else -+ reg->precise = true; -+ } -+ if (env->log.level & BPF_LOG_LEVEL2) { -+ fmt_reg_mask(env->tmp_str_buf, TMP_STR_BUF_LEN, -+ bt_frame_reg_mask(bt, fr)); -+ verbose(env, "mark_precise: frame%d: parent state regs=%s ", -+ fr, env->tmp_str_buf); -+ fmt_stack_mask(env->tmp_str_buf, TMP_STR_BUF_LEN, -+ bt_frame_stack_mask(bt, fr)); -+ verbose(env, "stack=%s: ", env->tmp_str_buf); -+ print_verifier_state(env, func, true); - } -- reg = &func->stack[i].spilled_ptr; -- if (reg->precise) -- bt_clear_slot(bt, i); -- else -- reg->precise = true; -- } -- if (env->log.level & BPF_LOG_LEVEL2) { -- verbose(env, "parent %s regs=%x stack=%llx marks:", -- !bt_empty(bt) ? "didn't have" : "already had", -- bt_reg_mask(bt), bt_stack_mask(bt)); -- print_verifier_state(env, func, true); - } - - if (bt_empty(bt)) -diff --git a/tools/testing/selftests/bpf/verifier/precise.c b/tools/testing/selftests/bpf/verifier/precise.c -index 86cb0722792f0..a928c53432999 100644 ---- a/tools/testing/selftests/bpf/verifier/precise.c -+++ b/tools/testing/selftests/bpf/verifier/precise.c -@@ -44,7 +44,7 @@ - mark_precise: frame0: regs=r2 stack= before 23\ - mark_precise: frame0: regs=r2 stack= before 22\ - mark_precise: frame0: regs=r2 stack= before 20\ -- parent didn't have regs=4 stack=0 marks:\ -+ mark_precise: frame0: parent state regs=r2 stack=:\ - mark_precise: frame0: last_idx 19 first_idx 10\ - mark_precise: frame0: regs=r2 stack= before 19\ - mark_precise: frame0: regs=r9 stack= before 18\ -@@ -55,7 +55,7 @@ - mark_precise: frame0: regs=r9 stack= before 12\ - mark_precise: frame0: regs=r9 stack= before 11\ - mark_precise: frame0: regs=r9 stack= before 10\ -- parent already had regs=0 stack=0 marks:", -+ mark_precise: frame0: parent state regs= stack=:", - }, - { - "precise: test 2", -@@ -104,15 +104,15 @@ - mark_precise: frame0: regs=r2 stack= before 24\ - mark_precise: frame0: regs=r2 stack= before 23\ - mark_precise: frame0: regs=r2 stack= before 22\ -- parent didn't have regs=4 stack=0 marks:\ -+ mark_precise: frame0: parent state regs=r2 stack=:\ - mark_precise: frame0: last_idx 20 first_idx 20\ - mark_precise: frame0: regs=r2 stack= before 20\ -- parent didn't have regs=4 stack=0 marks:\ -+ mark_precise: frame0: parent state regs=r2 stack=:\ - mark_precise: frame0: last_idx 19 first_idx 17\ - mark_precise: frame0: regs=r2 stack= before 19\ - mark_precise: frame0: regs=r9 stack= before 18\ - mark_precise: frame0: regs=r8,r9 stack= before 17\ -- parent already had regs=0 stack=0 marks:", -+ mark_precise: frame0: parent state regs= stack=:", - }, - { - "precise: cross frame pruning", -@@ -153,14 +153,14 @@ - .prog_type = BPF_PROG_TYPE_XDP, - .flags = BPF_F_TEST_STATE_FREQ, - .errstr = "mark_precise: frame0: last_idx 5 first_idx 5\ -- parent didn't have regs=10 stack=0 marks:\ -+ mark_precise: frame0: parent state regs=r4 stack=:\ - mark_precise: frame0: last_idx 4 first_idx 2\ - mark_precise: frame0: regs=r4 stack= before 4\ - mark_precise: frame0: regs=r4 stack= before 3\ - mark_precise: frame0: regs= stack=-8 before 2\ - mark_precise: frame0: falling back to forcing all scalars precise\ - mark_precise: frame0: last_idx 5 first_idx 5\ -- parent didn't have regs=1 stack=0 marks:", -+ mark_precise: frame0: parent state regs=r0 stack=:", - .result = VERBOSE_ACCEPT, - .retval = -1, - }, -@@ -179,7 +179,7 @@ - .prog_type = BPF_PROG_TYPE_XDP, - .flags = BPF_F_TEST_STATE_FREQ, - .errstr = "mark_precise: frame0: last_idx 6 first_idx 6\ -- parent didn't have regs=10 stack=0 marks:\ -+ mark_precise: frame0: parent state regs=r4 stack=:\ - mark_precise: frame0: last_idx 5 first_idx 3\ - mark_precise: frame0: regs=r4 stack= before 5\ - mark_precise: frame0: regs=r4 stack= before 4\ -@@ -188,7 +188,7 @@ - force_precise: frame0: forcing r0 to be precise\ - force_precise: frame0: forcing r0 to be precise\ - mark_precise: frame0: last_idx 6 first_idx 6\ -- parent didn't have regs=1 stack=0 marks:\ -+ mark_precise: frame0: parent state regs=r0 stack=:\ - mark_precise: frame0: last_idx 5 first_idx 3\ - mark_precise: frame0: regs=r0 stack= before 5", - .result = VERBOSE_ACCEPT, --- -2.39.2 - diff --git a/queue-6.4/bpf-make-bpf_refcount_acquire-fallible-for-non-ownin.patch b/queue-6.4/bpf-make-bpf_refcount_acquire-fallible-for-non-ownin.patch deleted file mode 100644 index 1fa5b319fd9..00000000000 --- a/queue-6.4/bpf-make-bpf_refcount_acquire-fallible-for-non-ownin.patch +++ /dev/null @@ -1,229 +0,0 @@ -From 3994479e341f7a01be087217dbc89ba15b575153 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Thu, 1 Jun 2023 19:26:42 -0700 -Subject: bpf: Make bpf_refcount_acquire fallible for non-owning refs - -From: Dave Marchevsky - -[ Upstream commit 7793fc3babe9fea908e57f7c187ea819f9fd7e95 ] - -This patch fixes an incorrect assumption made in the original -bpf_refcount series [0], specifically that the BPF program calling -bpf_refcount_acquire on some node can always guarantee that the node is -alive. In that series, the patch adding failure behavior to rbtree_add -and list_push_{front, back} breaks this assumption for non-owning -references. - -Consider the following program: - - n = bpf_kptr_xchg(&mapval, NULL); - /* skip error checking */ - - bpf_spin_lock(&l); - if(bpf_rbtree_add(&t, &n->rb, less)) { - bpf_refcount_acquire(n); - /* Failed to add, do something else with the node */ - } - bpf_spin_unlock(&l); - -It's incorrect to assume that bpf_refcount_acquire will always succeed in this -scenario. bpf_refcount_acquire is being called in a critical section -here, but the lock being held is associated with rbtree t, which isn't -necessarily the lock associated with the tree that the node is already -in. So after bpf_rbtree_add fails to add the node and calls bpf_obj_drop -in it, the program has no ownership of the node's lifetime. Therefore -the node's refcount can be decr'd to 0 at any time after the failing -rbtree_add. If this happens before the refcount_acquire above, the node -might be free'd, and regardless refcount_acquire will be incrementing a -0 refcount. - -Later patches in the series exercise this scenario, resulting in the -expected complaint from the kernel (without this patch's changes): - - refcount_t: addition on 0; use-after-free. - WARNING: CPU: 1 PID: 207 at lib/refcount.c:25 refcount_warn_saturate+0xbc/0x110 - Modules linked in: bpf_testmod(O) - CPU: 1 PID: 207 Comm: test_progs Tainted: G O 6.3.0-rc7-02231-g723de1a718a2-dirty #371 - Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS rel-1.15.0-0-g2dd4b9b3f840-prebuilt.qemu.org 04/01/2014 - RIP: 0010:refcount_warn_saturate+0xbc/0x110 - Code: 6f 64 f6 02 01 e8 84 a3 5c ff 0f 0b eb 9d 80 3d 5e 64 f6 02 00 75 94 48 c7 c7 e0 13 d2 82 c6 05 4e 64 f6 02 01 e8 64 a3 5c ff <0f> 0b e9 7a ff ff ff 80 3d 38 64 f6 02 00 0f 85 6d ff ff ff 48 c7 - RSP: 0018:ffff88810b9179b0 EFLAGS: 00010082 - RAX: 0000000000000000 RBX: 0000000000000002 RCX: 0000000000000000 - RDX: 0000000000000202 RSI: 0000000000000008 RDI: ffffffff857c3680 - RBP: ffff88810027d3c0 R08: ffffffff8125f2a4 R09: ffff88810b9176e7 - R10: ffffed1021722edc R11: 746e756f63666572 R12: ffff88810027d388 - R13: ffff88810027d3c0 R14: ffffc900005fe030 R15: ffffc900005fe048 - FS: 00007fee0584a700(0000) GS:ffff88811b280000(0000) knlGS:0000000000000000 - CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033 - CR2: 00005634a96f6c58 CR3: 0000000108ce9002 CR4: 0000000000770ee0 - DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000 - DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400 - PKRU: 55555554 - Call Trace: - - bpf_refcount_acquire_impl+0xb5/0xc0 - - (rest of output snipped) - -The patch addresses this by changing bpf_refcount_acquire_impl to use -refcount_inc_not_zero instead of refcount_inc and marking -bpf_refcount_acquire KF_RET_NULL. - -For owning references, though, we know the above scenario is not possible -and thus that bpf_refcount_acquire will always succeed. Some verifier -bookkeeping is added to track "is input owning ref?" for bpf_refcount_acquire -calls and return false from is_kfunc_ret_null for bpf_refcount_acquire on -owning refs despite it being marked KF_RET_NULL. - -Existing selftests using bpf_refcount_acquire are modified where -necessary to NULL-check its return value. - - [0]: https://lore.kernel.org/bpf/20230415201811.343116-1-davemarchevsky@fb.com/ - -Fixes: d2dcc67df910 ("bpf: Migrate bpf_rbtree_add and bpf_list_push_{front,back} to possibly fail") -Reported-by: Kumar Kartikeya Dwivedi -Signed-off-by: Dave Marchevsky -Link: https://lore.kernel.org/r/20230602022647.1571784-5-davemarchevsky@fb.com -Signed-off-by: Alexei Starovoitov -Signed-off-by: Sasha Levin ---- - kernel/bpf/helpers.c | 8 ++++-- - kernel/bpf/verifier.c | 26 +++++++++++++------ - .../selftests/bpf/progs/refcounted_kptr.c | 2 ++ - .../bpf/progs/refcounted_kptr_fail.c | 4 ++- - 4 files changed, 29 insertions(+), 11 deletions(-) - -diff --git a/kernel/bpf/helpers.c b/kernel/bpf/helpers.c -index 27b9f78195b2c..f12565ba136b0 100644 ---- a/kernel/bpf/helpers.c -+++ b/kernel/bpf/helpers.c -@@ -1926,8 +1926,12 @@ __bpf_kfunc void *bpf_refcount_acquire_impl(void *p__refcounted_kptr, void *meta - * bpf_refcount type so that it is emitted in vmlinux BTF - */ - ref = (struct bpf_refcount *)(p__refcounted_kptr + meta->record->refcount_off); -+ if (!refcount_inc_not_zero((refcount_t *)ref)) -+ return NULL; - -- refcount_inc((refcount_t *)ref); -+ /* Verifier strips KF_RET_NULL if input is owned ref, see is_kfunc_ret_null -+ * in verifier.c -+ */ - return (void *)p__refcounted_kptr; - } - -@@ -2325,7 +2329,7 @@ BTF_ID_FLAGS(func, crash_kexec, KF_DESTRUCTIVE) - #endif - BTF_ID_FLAGS(func, bpf_obj_new_impl, KF_ACQUIRE | KF_RET_NULL) - BTF_ID_FLAGS(func, bpf_obj_drop_impl, KF_RELEASE) --BTF_ID_FLAGS(func, bpf_refcount_acquire_impl, KF_ACQUIRE) -+BTF_ID_FLAGS(func, bpf_refcount_acquire_impl, KF_ACQUIRE | KF_RET_NULL) - BTF_ID_FLAGS(func, bpf_list_push_front_impl) - BTF_ID_FLAGS(func, bpf_list_push_back_impl) - BTF_ID_FLAGS(func, bpf_list_pop_front, KF_ACQUIRE | KF_RET_NULL) -diff --git a/kernel/bpf/verifier.c b/kernel/bpf/verifier.c -index 405f29079a8cb..8e4ccbc0ae604 100644 ---- a/kernel/bpf/verifier.c -+++ b/kernel/bpf/verifier.c -@@ -292,16 +292,19 @@ struct bpf_kfunc_call_arg_meta { - bool found; - } arg_constant; - -- /* arg_btf and arg_btf_id are used by kfunc-specific handling, -+ /* arg_{btf,btf_id,owning_ref} are used by kfunc-specific handling, - * generally to pass info about user-defined local kptr types to later - * verification logic - * bpf_obj_drop - * Record the local kptr type to be drop'd - * bpf_refcount_acquire (via KF_ARG_PTR_TO_REFCOUNTED_KPTR arg type) -- * Record the local kptr type to be refcount_incr'd -+ * Record the local kptr type to be refcount_incr'd and use -+ * arg_owning_ref to determine whether refcount_acquire should be -+ * fallible - */ - struct btf *arg_btf; - u32 arg_btf_id; -+ bool arg_owning_ref; - - struct { - struct btf_field *field; -@@ -9497,11 +9500,6 @@ static bool is_kfunc_acquire(struct bpf_kfunc_call_arg_meta *meta) - return meta->kfunc_flags & KF_ACQUIRE; - } - --static bool is_kfunc_ret_null(struct bpf_kfunc_call_arg_meta *meta) --{ -- return meta->kfunc_flags & KF_RET_NULL; --} -- - static bool is_kfunc_release(struct bpf_kfunc_call_arg_meta *meta) - { - return meta->kfunc_flags & KF_RELEASE; -@@ -9809,6 +9807,16 @@ BTF_ID(func, bpf_dynptr_from_xdp) - BTF_ID(func, bpf_dynptr_slice) - BTF_ID(func, bpf_dynptr_slice_rdwr) - -+static bool is_kfunc_ret_null(struct bpf_kfunc_call_arg_meta *meta) -+{ -+ if (meta->func_id == special_kfunc_list[KF_bpf_refcount_acquire_impl] && -+ meta->arg_owning_ref) { -+ return false; -+ } -+ -+ return meta->kfunc_flags & KF_RET_NULL; -+} -+ - static bool is_kfunc_bpf_rcu_read_lock(struct bpf_kfunc_call_arg_meta *meta) - { - return meta->func_id == special_kfunc_list[KF_bpf_rcu_read_lock]; -@@ -10669,10 +10677,12 @@ static int check_kfunc_args(struct bpf_verifier_env *env, struct bpf_kfunc_call_ - meta->subprogno = reg->subprogno; - break; - case KF_ARG_PTR_TO_REFCOUNTED_KPTR: -- if (!type_is_ptr_alloc_obj(reg->type) && !type_is_non_owning_ref(reg->type)) { -+ if (!type_is_ptr_alloc_obj(reg->type)) { - verbose(env, "arg#%d is neither owning or non-owning ref\n", i); - return -EINVAL; - } -+ if (!type_is_non_owning_ref(reg->type)) -+ meta->arg_owning_ref = true; - - rec = reg_btf_record(reg); - if (!rec) { -diff --git a/tools/testing/selftests/bpf/progs/refcounted_kptr.c b/tools/testing/selftests/bpf/progs/refcounted_kptr.c -index 1d348a225140d..a3da610b1e6b0 100644 ---- a/tools/testing/selftests/bpf/progs/refcounted_kptr.c -+++ b/tools/testing/selftests/bpf/progs/refcounted_kptr.c -@@ -375,6 +375,8 @@ long rbtree_refcounted_node_ref_escapes(void *ctx) - bpf_rbtree_add(&aroot, &n->node, less_a); - m = bpf_refcount_acquire(n); - bpf_spin_unlock(&alock); -+ if (!m) -+ return 2; - - m->key = 2; - bpf_obj_drop(m); -diff --git a/tools/testing/selftests/bpf/progs/refcounted_kptr_fail.c b/tools/testing/selftests/bpf/progs/refcounted_kptr_fail.c -index efcb308f80adf..0b09e5c915b15 100644 ---- a/tools/testing/selftests/bpf/progs/refcounted_kptr_fail.c -+++ b/tools/testing/selftests/bpf/progs/refcounted_kptr_fail.c -@@ -29,7 +29,7 @@ static bool less(struct bpf_rb_node *a, const struct bpf_rb_node *b) - } - - SEC("?tc") --__failure __msg("Unreleased reference id=3 alloc_insn=21") -+__failure __msg("Unreleased reference id=4 alloc_insn=21") - long rbtree_refcounted_node_ref_escapes(void *ctx) - { - struct node_acquire *n, *m; -@@ -43,6 +43,8 @@ long rbtree_refcounted_node_ref_escapes(void *ctx) - /* m becomes an owning ref but is never drop'd or added to a tree */ - m = bpf_refcount_acquire(n); - bpf_spin_unlock(&glock); -+ if (!m) -+ return 2; - - m->key = 2; - return 0; --- -2.39.2 - diff --git a/queue-6.4/bpf-remove-anonymous-union-in-bpf_kfunc_call_arg_met.patch b/queue-6.4/bpf-remove-anonymous-union-in-bpf_kfunc_call_arg_met.patch deleted file mode 100644 index ff1e326781e..00000000000 --- a/queue-6.4/bpf-remove-anonymous-union-in-bpf_kfunc_call_arg_met.patch +++ /dev/null @@ -1,137 +0,0 @@ -From 480eefe9771d6ca7f7c1d05627f3982a10eab809 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Wed, 10 May 2023 14:30:47 -0700 -Subject: bpf: Remove anonymous union in bpf_kfunc_call_arg_meta - -From: Dave Marchevsky - -[ Upstream commit 4d585f48ee6b38c54c075b151c5efd2ff65f8ffd ] - -For kfuncs like bpf_obj_drop and bpf_refcount_acquire - which take -user-defined types as input - the verifier needs to track the specific -type passed in when checking a particular kfunc call. This requires -tracking (btf, btf_id) tuple. In commit 7c50b1cb76ac -("bpf: Add bpf_refcount_acquire kfunc") I added an anonymous union with -inner structs named after the specific kfuncs tracking this information, -with the goal of making it more obvious which kfunc this data was being -tracked / expected to be tracked on behalf of. - -In a recent series adding a new user of this tuple, Alexei mentioned -that he didn't like this union usage as it doesn't really help with -readability or bug-proofing ([0]). In an offline convo we agreed to -have the tuple be fields (arg_btf, arg_btf_id), with comments in -bpf_kfunc_call_arg_meta definition enumerating the uses of the fields by -kfunc-specific handling logic. Such a pattern is used by struct -bpf_reg_state without trouble. - -Accordingly, this patch removes the anonymous union in favor of arg_btf -and arg_btf_id fields and comment enumerating their current uses. The -patch also removes struct btf_and_id, which was only being used by the -removed union's inner structs. - -This is a mechanical change, existing linked_list and rbtree tests will -validate that correct (btf, btf_id) are being passed. - - [0]: https://lore.kernel.org/bpf/20230505021707.vlyiwy57vwxglbka@dhcp-172-26-102-232.dhcp.thefacebook.com - -Signed-off-by: Dave Marchevsky -Link: https://lore.kernel.org/r/20230510213047.1633612-1-davemarchevsky@fb.com -Signed-off-by: Alexei Starovoitov -Stable-dep-of: 2140a6e3422d ("bpf: Set kptr_struct_meta for node param to list and rbtree insert funcs") -Signed-off-by: Sasha Levin ---- - kernel/bpf/verifier.c | 41 ++++++++++++++++++++++------------------- - 1 file changed, 22 insertions(+), 19 deletions(-) - -diff --git a/kernel/bpf/verifier.c b/kernel/bpf/verifier.c -index fb0aee90ccfaa..4b3d0ead703f4 100644 ---- a/kernel/bpf/verifier.c -+++ b/kernel/bpf/verifier.c -@@ -273,11 +273,6 @@ struct bpf_call_arg_meta { - struct btf_field *kptr_field; - }; - --struct btf_and_id { -- struct btf *btf; -- u32 btf_id; --}; -- - struct bpf_kfunc_call_arg_meta { - /* In parameters */ - struct btf *btf; -@@ -296,10 +291,18 @@ struct bpf_kfunc_call_arg_meta { - u64 value; - bool found; - } arg_constant; -- union { -- struct btf_and_id arg_obj_drop; -- struct btf_and_id arg_refcount_acquire; -- }; -+ -+ /* arg_btf and arg_btf_id are used by kfunc-specific handling, -+ * generally to pass info about user-defined local kptr types to later -+ * verification logic -+ * bpf_obj_drop -+ * Record the local kptr type to be drop'd -+ * bpf_refcount_acquire (via KF_ARG_PTR_TO_REFCOUNTED_KPTR arg type) -+ * Record the local kptr type to be refcount_incr'd -+ */ -+ struct btf *arg_btf; -+ u32 arg_btf_id; -+ - struct { - struct btf_field *field; - } arg_list_head; -@@ -10493,8 +10496,8 @@ static int check_kfunc_args(struct bpf_verifier_env *env, struct bpf_kfunc_call_ - } - if (meta->btf == btf_vmlinux && - meta->func_id == special_kfunc_list[KF_bpf_obj_drop_impl]) { -- meta->arg_obj_drop.btf = reg->btf; -- meta->arg_obj_drop.btf_id = reg->btf_id; -+ meta->arg_btf = reg->btf; -+ meta->arg_btf_id = reg->btf_id; - } - break; - case KF_ARG_PTR_TO_DYNPTR: -@@ -10683,8 +10686,8 @@ static int check_kfunc_args(struct bpf_verifier_env *env, struct bpf_kfunc_call_ - verbose(env, "bpf_refcount_acquire calls are disabled for now\n"); - return -EINVAL; - } -- meta->arg_refcount_acquire.btf = reg->btf; -- meta->arg_refcount_acquire.btf_id = reg->btf_id; -+ meta->arg_btf = reg->btf; -+ meta->arg_btf_id = reg->btf_id; - break; - } - } -@@ -10916,12 +10919,12 @@ static int check_kfunc_call(struct bpf_verifier_env *env, struct bpf_insn *insn, - } else if (meta.func_id == special_kfunc_list[KF_bpf_refcount_acquire_impl]) { - mark_reg_known_zero(env, regs, BPF_REG_0); - regs[BPF_REG_0].type = PTR_TO_BTF_ID | MEM_ALLOC; -- regs[BPF_REG_0].btf = meta.arg_refcount_acquire.btf; -- regs[BPF_REG_0].btf_id = meta.arg_refcount_acquire.btf_id; -+ regs[BPF_REG_0].btf = meta.arg_btf; -+ regs[BPF_REG_0].btf_id = meta.arg_btf_id; - - insn_aux->kptr_struct_meta = -- btf_find_struct_meta(meta.arg_refcount_acquire.btf, -- meta.arg_refcount_acquire.btf_id); -+ btf_find_struct_meta(meta.arg_btf, -+ meta.arg_btf_id); - } else if (meta.func_id == special_kfunc_list[KF_bpf_list_pop_front] || - meta.func_id == special_kfunc_list[KF_bpf_list_pop_back]) { - struct btf_field *field = meta.arg_list_head.field; -@@ -11051,8 +11054,8 @@ static int check_kfunc_call(struct bpf_verifier_env *env, struct bpf_insn *insn, - if (meta.btf == btf_vmlinux && btf_id_set_contains(&special_kfunc_set, meta.func_id)) { - if (meta.func_id == special_kfunc_list[KF_bpf_obj_drop_impl]) { - insn_aux->kptr_struct_meta = -- btf_find_struct_meta(meta.arg_obj_drop.btf, -- meta.arg_obj_drop.btf_id); -+ btf_find_struct_meta(meta.arg_btf, -+ meta.arg_btf_id); - } - } - } --- -2.39.2 - diff --git a/queue-6.4/bpf-remove-bpf-trampoline-selector.patch b/queue-6.4/bpf-remove-bpf-trampoline-selector.patch deleted file mode 100644 index d311f44bb50..00000000000 --- a/queue-6.4/bpf-remove-bpf-trampoline-selector.patch +++ /dev/null @@ -1,102 +0,0 @@ -From 3ae06bf1851bef09419489748fa978721e1431ad Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Mon, 15 May 2023 13:08:48 +0000 -Subject: bpf: Remove bpf trampoline selector - -From: Yafang Shao - -[ Upstream commit 47e79cbeea4b3891ad476047f4c68543eb51c8e0 ] - -After commit e21aa341785c ("bpf: Fix fexit trampoline."), the selector is only -used to indicate how many times the bpf trampoline image are updated and been -displayed in the trampoline ksym name. After the trampoline is freed, the -selector will start from 0 again. So the selector is a useless value to the -user. We can remove it. - -If the user want to check whether the bpf trampoline image has been updated -or not, the user can compare the address. Each time the trampoline image is -updated, the address will change consequently. Jiri also pointed out another -issue that perf is still using the old name "bpf_trampoline_%lu", so this -change can fix the issue in perf. - -Fixes: e21aa341785c ("bpf: Fix fexit trampoline.") -Signed-off-by: Yafang Shao -Signed-off-by: Daniel Borkmann -Acked-by: Song Liu -Cc: Jiri Olsa -Link: https://lore.kernel.org/bpf/ZFvOOlrmHiY9AgXE@krava -Link: https://lore.kernel.org/bpf/20230515130849.57502-3-laoar.shao@gmail.com -Signed-off-by: Sasha Levin ---- - include/linux/bpf.h | 1 - - kernel/bpf/trampoline.c | 11 ++++------- - 2 files changed, 4 insertions(+), 8 deletions(-) - -diff --git a/include/linux/bpf.h b/include/linux/bpf.h -index e53ceee1df370..1ad211acf1d25 100644 ---- a/include/linux/bpf.h -+++ b/include/linux/bpf.h -@@ -1125,7 +1125,6 @@ struct bpf_trampoline { - int progs_cnt[BPF_TRAMP_MAX]; - /* Executable image of trampoline */ - struct bpf_tramp_image *cur_image; -- u64 selector; - struct module *mod; - }; - -diff --git a/kernel/bpf/trampoline.c b/kernel/bpf/trampoline.c -index ac021bc43a66b..84850e66ce3d6 100644 ---- a/kernel/bpf/trampoline.c -+++ b/kernel/bpf/trampoline.c -@@ -344,7 +344,7 @@ static void bpf_tramp_image_put(struct bpf_tramp_image *im) - call_rcu_tasks_trace(&im->rcu, __bpf_tramp_image_put_rcu_tasks); - } - --static struct bpf_tramp_image *bpf_tramp_image_alloc(u64 key, u32 idx) -+static struct bpf_tramp_image *bpf_tramp_image_alloc(u64 key) - { - struct bpf_tramp_image *im; - struct bpf_ksym *ksym; -@@ -371,7 +371,7 @@ static struct bpf_tramp_image *bpf_tramp_image_alloc(u64 key, u32 idx) - - ksym = &im->ksym; - INIT_LIST_HEAD_RCU(&ksym->lnode); -- snprintf(ksym->name, KSYM_NAME_LEN, "bpf_trampoline_%llu_%u", key, idx); -+ snprintf(ksym->name, KSYM_NAME_LEN, "bpf_trampoline_%llu", key); - bpf_image_ksym_add(image, ksym); - return im; - -@@ -401,11 +401,10 @@ static int bpf_trampoline_update(struct bpf_trampoline *tr, bool lock_direct_mut - err = unregister_fentry(tr, tr->cur_image->image); - bpf_tramp_image_put(tr->cur_image); - tr->cur_image = NULL; -- tr->selector = 0; - goto out; - } - -- im = bpf_tramp_image_alloc(tr->key, tr->selector); -+ im = bpf_tramp_image_alloc(tr->key); - if (IS_ERR(im)) { - err = PTR_ERR(im); - goto out; -@@ -442,8 +441,7 @@ static int bpf_trampoline_update(struct bpf_trampoline *tr, bool lock_direct_mut - - set_memory_rox((long)im->image, 1); - -- WARN_ON(tr->cur_image && tr->selector == 0); -- WARN_ON(!tr->cur_image && tr->selector); -+ WARN_ON(tr->cur_image && total == 0); - if (tr->cur_image) - /* progs already running at this address */ - err = modify_fentry(tr, tr->cur_image->image, im->image, lock_direct_mutex); -@@ -473,7 +471,6 @@ static int bpf_trampoline_update(struct bpf_trampoline *tr, bool lock_direct_mut - if (tr->cur_image) - bpf_tramp_image_put(tr->cur_image); - tr->cur_image = im; -- tr->selector++; - out: - /* If any error happens, restore previous flags */ - if (err) --- -2.39.2 - diff --git a/queue-6.4/bpf-set-kptr_struct_meta-for-node-param-to-list-and-.patch b/queue-6.4/bpf-set-kptr_struct_meta-for-node-param-to-list-and-.patch deleted file mode 100644 index bcb5cce1a0c..00000000000 --- a/queue-6.4/bpf-set-kptr_struct_meta-for-node-param-to-list-and-.patch +++ /dev/null @@ -1,64 +0,0 @@ -From 40006323c7d05162bfe50ba5e8134c184e8d69fd Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Thu, 1 Jun 2023 19:26:40 -0700 -Subject: bpf: Set kptr_struct_meta for node param to list and rbtree insert - funcs - -From: Dave Marchevsky - -[ Upstream commit 2140a6e3422de22e6ebe77d4d18b6c0c9c425426 ] - -In verifier.c, fixup_kfunc_call uses struct bpf_insn_aux_data's -kptr_struct_meta field to pass information about local kptr types to -various helpers and kfuncs at runtime. The recent bpf_refcount series -added a few functions to the set that need this information: - - * bpf_refcount_acquire - * Needs to know where the refcount field is in order to increment - * Graph collection insert kfuncs: bpf_rbtree_add, bpf_list_push_{front,back} - * Were migrated to possibly fail by the bpf_refcount series. If - insert fails, the input node is bpf_obj_drop'd. bpf_obj_drop needs - the kptr_struct_meta in order to decr refcount and properly free - special fields. - -Unfortunately the verifier handling of collection insert kfuncs was not -modified to actually populate kptr_struct_meta. Accordingly, when the -node input to those kfuncs is passed to bpf_obj_drop, it is done so -without the information necessary to decr refcount. - -This patch fixes the issue by populating kptr_struct_meta for those -kfuncs. - -Fixes: d2dcc67df910 ("bpf: Migrate bpf_rbtree_add and bpf_list_push_{front,back} to possibly fail") -Signed-off-by: Dave Marchevsky -Link: https://lore.kernel.org/r/20230602022647.1571784-3-davemarchevsky@fb.com -Signed-off-by: Alexei Starovoitov -Signed-off-by: Sasha Levin ---- - kernel/bpf/verifier.c | 3 +++ - 1 file changed, 3 insertions(+) - -diff --git a/kernel/bpf/verifier.c b/kernel/bpf/verifier.c -index 4b3d0ead703f4..405f29079a8cb 100644 ---- a/kernel/bpf/verifier.c -+++ b/kernel/bpf/verifier.c -@@ -10286,6 +10286,8 @@ __process_kf_arg_ptr_to_graph_node(struct bpf_verifier_env *env, - node_off, btf_name_by_offset(reg->btf, t->name_off)); - return -EINVAL; - } -+ meta->arg_btf = reg->btf; -+ meta->arg_btf_id = reg->btf_id; - - if (node_off != field->graph_root.node_offset) { - verbose(env, "arg#1 offset=%d, but expected %s at offset=%d in struct %s\n", -@@ -10833,6 +10835,7 @@ static int check_kfunc_call(struct bpf_verifier_env *env, struct bpf_insn *insn, - meta.func_id == special_kfunc_list[KF_bpf_rbtree_add_impl]) { - release_ref_obj_id = regs[BPF_REG_2].ref_obj_id; - insn_aux->insert_off = regs[BPF_REG_2].off; -+ insn_aux->kptr_struct_meta = btf_find_struct_meta(meta.arg_btf, meta.arg_btf_id); - err = ref_convert_owning_non_owning(env, release_ref_obj_id); - if (err) { - verbose(env, "kfunc %s#%d conversion of owning ref to non-owning failed\n", --- -2.39.2 - diff --git a/queue-6.4/bpf-use-scalar-ids-in-mark_chain_precision.patch b/queue-6.4/bpf-use-scalar-ids-in-mark_chain_precision.patch deleted file mode 100644 index 40dc7e55143..00000000000 --- a/queue-6.4/bpf-use-scalar-ids-in-mark_chain_precision.patch +++ /dev/null @@ -1,235 +0,0 @@ -From 761bb3db12f059a10571acdbed62d1fa7afd152d Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Tue, 13 Jun 2023 18:38:21 +0300 -Subject: bpf: Use scalar ids in mark_chain_precision() - -From: Eduard Zingerman - -[ Upstream commit 904e6ddf4133c52fdb9654c2cd2ad90f320d48b9 ] - -Change mark_chain_precision() to track precision in situations -like below: - - r2 = unknown value - ... - --- state #0 --- - ... - r1 = r2 // r1 and r2 now share the same ID - ... - --- state #1 {r1.id = A, r2.id = A} --- - ... - if (r2 > 10) goto exit; // find_equal_scalars() assigns range to r1 - ... - --- state #2 {r1.id = A, r2.id = A} --- - r3 = r10 - r3 += r1 // need to mark both r1 and r2 - -At the beginning of the processing of each state, ensure that if a -register with a scalar ID is marked as precise, all registers sharing -this ID are also marked as precise. - -This property would be used by a follow-up change in regsafe(). - -Signed-off-by: Eduard Zingerman -Signed-off-by: Andrii Nakryiko -Acked-by: Andrii Nakryiko -Link: https://lore.kernel.org/bpf/20230613153824.3324830-2-eddyz87@gmail.com -Stable-dep-of: 1ffc85d9298e ("bpf: Verify scalar ids mapping in regsafe() using check_ids()") -Signed-off-by: Sasha Levin ---- - include/linux/bpf_verifier.h | 10 +- - kernel/bpf/verifier.c | 115 ++++++++++++++++++ - .../testing/selftests/bpf/verifier/precise.c | 8 +- - 3 files changed, 128 insertions(+), 5 deletions(-) - -diff --git a/include/linux/bpf_verifier.h b/include/linux/bpf_verifier.h -index 5b11a3b0fec0b..22fb13c738a9a 100644 ---- a/include/linux/bpf_verifier.h -+++ b/include/linux/bpf_verifier.h -@@ -557,6 +557,11 @@ struct backtrack_state { - u64 stack_masks[MAX_CALL_FRAMES]; - }; - -+struct bpf_idset { -+ u32 count; -+ u32 ids[BPF_ID_MAP_SIZE]; -+}; -+ - /* single container for all structs - * one verifier_env per bpf_check() call - */ -@@ -588,7 +593,10 @@ struct bpf_verifier_env { - const struct bpf_line_info *prev_linfo; - struct bpf_verifier_log log; - struct bpf_subprog_info subprog_info[BPF_MAX_SUBPROGS + 1]; -- struct bpf_id_pair idmap_scratch[BPF_ID_MAP_SIZE]; -+ union { -+ struct bpf_id_pair idmap_scratch[BPF_ID_MAP_SIZE]; -+ struct bpf_idset idset_scratch; -+ }; - struct { - int *insn_state; - int *insn_stack; -diff --git a/kernel/bpf/verifier.c b/kernel/bpf/verifier.c -index 8e4ccbc0ae604..70056b7d5960c 100644 ---- a/kernel/bpf/verifier.c -+++ b/kernel/bpf/verifier.c -@@ -3603,6 +3603,96 @@ static void mark_all_scalars_imprecise(struct bpf_verifier_env *env, struct bpf_ - } - } - -+static bool idset_contains(struct bpf_idset *s, u32 id) -+{ -+ u32 i; -+ -+ for (i = 0; i < s->count; ++i) -+ if (s->ids[i] == id) -+ return true; -+ -+ return false; -+} -+ -+static int idset_push(struct bpf_idset *s, u32 id) -+{ -+ if (WARN_ON_ONCE(s->count >= ARRAY_SIZE(s->ids))) -+ return -EFAULT; -+ s->ids[s->count++] = id; -+ return 0; -+} -+ -+static void idset_reset(struct bpf_idset *s) -+{ -+ s->count = 0; -+} -+ -+/* Collect a set of IDs for all registers currently marked as precise in env->bt. -+ * Mark all registers with these IDs as precise. -+ */ -+static int mark_precise_scalar_ids(struct bpf_verifier_env *env, struct bpf_verifier_state *st) -+{ -+ struct bpf_idset *precise_ids = &env->idset_scratch; -+ struct backtrack_state *bt = &env->bt; -+ struct bpf_func_state *func; -+ struct bpf_reg_state *reg; -+ DECLARE_BITMAP(mask, 64); -+ int i, fr; -+ -+ idset_reset(precise_ids); -+ -+ for (fr = bt->frame; fr >= 0; fr--) { -+ func = st->frame[fr]; -+ -+ bitmap_from_u64(mask, bt_frame_reg_mask(bt, fr)); -+ for_each_set_bit(i, mask, 32) { -+ reg = &func->regs[i]; -+ if (!reg->id || reg->type != SCALAR_VALUE) -+ continue; -+ if (idset_push(precise_ids, reg->id)) -+ return -EFAULT; -+ } -+ -+ bitmap_from_u64(mask, bt_frame_stack_mask(bt, fr)); -+ for_each_set_bit(i, mask, 64) { -+ if (i >= func->allocated_stack / BPF_REG_SIZE) -+ break; -+ if (!is_spilled_scalar_reg(&func->stack[i])) -+ continue; -+ reg = &func->stack[i].spilled_ptr; -+ if (!reg->id) -+ continue; -+ if (idset_push(precise_ids, reg->id)) -+ return -EFAULT; -+ } -+ } -+ -+ for (fr = 0; fr <= st->curframe; ++fr) { -+ func = st->frame[fr]; -+ -+ for (i = BPF_REG_0; i < BPF_REG_10; ++i) { -+ reg = &func->regs[i]; -+ if (!reg->id) -+ continue; -+ if (!idset_contains(precise_ids, reg->id)) -+ continue; -+ bt_set_frame_reg(bt, fr, i); -+ } -+ for (i = 0; i < func->allocated_stack / BPF_REG_SIZE; ++i) { -+ if (!is_spilled_scalar_reg(&func->stack[i])) -+ continue; -+ reg = &func->stack[i].spilled_ptr; -+ if (!reg->id) -+ continue; -+ if (!idset_contains(precise_ids, reg->id)) -+ continue; -+ bt_set_frame_slot(bt, fr, i); -+ } -+ } -+ -+ return 0; -+} -+ - /* - * __mark_chain_precision() backtracks BPF program instruction sequence and - * chain of verifier states making sure that register *regno* (if regno >= 0) -@@ -3733,6 +3823,31 @@ static int __mark_chain_precision(struct bpf_verifier_env *env, int regno) - bt->frame, last_idx, first_idx); - } - -+ /* If some register with scalar ID is marked as precise, -+ * make sure that all registers sharing this ID are also precise. -+ * This is needed to estimate effect of find_equal_scalars(). -+ * Do this at the last instruction of each state, -+ * bpf_reg_state::id fields are valid for these instructions. -+ * -+ * Allows to track precision in situation like below: -+ * -+ * r2 = unknown value -+ * ... -+ * --- state #0 --- -+ * ... -+ * r1 = r2 // r1 and r2 now share the same ID -+ * ... -+ * --- state #1 {r1.id = A, r2.id = A} --- -+ * ... -+ * if (r2 > 10) goto exit; // find_equal_scalars() assigns range to r1 -+ * ... -+ * --- state #2 {r1.id = A, r2.id = A} --- -+ * r3 = r10 -+ * r3 += r1 // need to mark both r1 and r2 -+ */ -+ if (mark_precise_scalar_ids(env, st)) -+ return -EFAULT; -+ - if (last_idx < 0) { - /* we are at the entry into subprog, which - * is expected for global funcs, but only if -diff --git a/tools/testing/selftests/bpf/verifier/precise.c b/tools/testing/selftests/bpf/verifier/precise.c -index a928c53432999..ac5eeea094683 100644 ---- a/tools/testing/selftests/bpf/verifier/precise.c -+++ b/tools/testing/selftests/bpf/verifier/precise.c -@@ -46,7 +46,7 @@ - mark_precise: frame0: regs=r2 stack= before 20\ - mark_precise: frame0: parent state regs=r2 stack=:\ - mark_precise: frame0: last_idx 19 first_idx 10\ -- mark_precise: frame0: regs=r2 stack= before 19\ -+ mark_precise: frame0: regs=r2,r9 stack= before 19\ - mark_precise: frame0: regs=r9 stack= before 18\ - mark_precise: frame0: regs=r8,r9 stack= before 17\ - mark_precise: frame0: regs=r0,r9 stack= before 15\ -@@ -106,10 +106,10 @@ - mark_precise: frame0: regs=r2 stack= before 22\ - mark_precise: frame0: parent state regs=r2 stack=:\ - mark_precise: frame0: last_idx 20 first_idx 20\ -- mark_precise: frame0: regs=r2 stack= before 20\ -- mark_precise: frame0: parent state regs=r2 stack=:\ -+ mark_precise: frame0: regs=r2,r9 stack= before 20\ -+ mark_precise: frame0: parent state regs=r2,r9 stack=:\ - mark_precise: frame0: last_idx 19 first_idx 17\ -- mark_precise: frame0: regs=r2 stack= before 19\ -+ mark_precise: frame0: regs=r2,r9 stack= before 19\ - mark_precise: frame0: regs=r9 stack= before 18\ - mark_precise: frame0: regs=r8,r9 stack= before 17\ - mark_precise: frame0: parent state regs= stack=:", --- -2.39.2 - diff --git a/queue-6.4/bpf-verify-scalar-ids-mapping-in-regsafe-using-check.patch b/queue-6.4/bpf-verify-scalar-ids-mapping-in-regsafe-using-check.patch deleted file mode 100644 index f6472e21c2a..00000000000 --- a/queue-6.4/bpf-verify-scalar-ids-mapping-in-regsafe-using-check.patch +++ /dev/null @@ -1,306 +0,0 @@ -From b03e308de0ff628392a09ffc4db878dbe5214bba Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Tue, 13 Jun 2023 18:38:23 +0300 -Subject: bpf: Verify scalar ids mapping in regsafe() using check_ids() - -From: Eduard Zingerman - -[ Upstream commit 1ffc85d9298e0ca0137ba65c93a786143fe167b8 ] - -Make sure that the following unsafe example is rejected by verifier: - -1: r9 = ... some pointer with range X ... -2: r6 = ... unbound scalar ID=a ... -3: r7 = ... unbound scalar ID=b ... -4: if (r6 > r7) goto +1 -5: r6 = r7 -6: if (r6 > X) goto ... ---- checkpoint --- -7: r9 += r7 -8: *(u64 *)r9 = Y - -This example is unsafe because not all execution paths verify r7 range. -Because of the jump at (4) the verifier would arrive at (6) in two states: -I. r6{.id=b}, r7{.id=b} via path 1-6; -II. r6{.id=a}, r7{.id=b} via path 1-4, 6. - -Currently regsafe() does not call check_ids() for scalar registers, -thus from POV of regsafe() states (I) and (II) are identical. If the -path 1-6 is taken by verifier first, and checkpoint is created at (6) -the path [1-4, 6] would be considered safe. - -Changes in this commit: -- check_ids() is modified to disallow mapping multiple old_id to the - same cur_id. -- check_scalar_ids() is added, unlike check_ids() it treats ID zero as - a unique scalar ID. -- check_scalar_ids() needs to generate temporary unique IDs, field - 'tmp_id_gen' is added to bpf_verifier_env::idmap_scratch to - facilitate this. -- regsafe() is updated to: - - use check_scalar_ids() for precise scalar registers. - - compare scalar registers using memcmp only for explore_alu_limits - branch. This simplifies control flow for scalar case, and has no - measurable performance impact. -- check_alu_op() is updated to avoid generating bpf_reg_state::id for - constant scalar values when processing BPF_MOV. ID is needed to - propagate range information for identical values, but there is - nothing to propagate for constants. - -Fixes: 75748837b7e5 ("bpf: Propagate scalar ranges through register assignments.") -Signed-off-by: Eduard Zingerman -Signed-off-by: Andrii Nakryiko -Acked-by: Andrii Nakryiko -Link: https://lore.kernel.org/bpf/20230613153824.3324830-4-eddyz87@gmail.com -Signed-off-by: Sasha Levin ---- - include/linux/bpf_verifier.h | 17 ++++--- - kernel/bpf/verifier.c | 91 +++++++++++++++++++++++++++--------- - 2 files changed, 79 insertions(+), 29 deletions(-) - -diff --git a/include/linux/bpf_verifier.h b/include/linux/bpf_verifier.h -index 22fb13c738a9a..f70f9ac884d24 100644 ---- a/include/linux/bpf_verifier.h -+++ b/include/linux/bpf_verifier.h -@@ -313,11 +313,6 @@ struct bpf_idx_pair { - u32 idx; - }; - --struct bpf_id_pair { -- u32 old; -- u32 cur; --}; -- - #define MAX_CALL_FRAMES 8 - /* Maximum number of register states that can exist at once */ - #define BPF_ID_MAP_SIZE ((MAX_BPF_REG + MAX_BPF_STACK / BPF_REG_SIZE) * MAX_CALL_FRAMES) -@@ -557,6 +552,16 @@ struct backtrack_state { - u64 stack_masks[MAX_CALL_FRAMES]; - }; - -+struct bpf_id_pair { -+ u32 old; -+ u32 cur; -+}; -+ -+struct bpf_idmap { -+ u32 tmp_id_gen; -+ struct bpf_id_pair map[BPF_ID_MAP_SIZE]; -+}; -+ - struct bpf_idset { - u32 count; - u32 ids[BPF_ID_MAP_SIZE]; -@@ -594,7 +599,7 @@ struct bpf_verifier_env { - struct bpf_verifier_log log; - struct bpf_subprog_info subprog_info[BPF_MAX_SUBPROGS + 1]; - union { -- struct bpf_id_pair idmap_scratch[BPF_ID_MAP_SIZE]; -+ struct bpf_idmap idmap_scratch; - struct bpf_idset idset_scratch; - }; - struct { -diff --git a/kernel/bpf/verifier.c b/kernel/bpf/verifier.c -index 70056b7d5960c..30fabae47a07b 100644 ---- a/kernel/bpf/verifier.c -+++ b/kernel/bpf/verifier.c -@@ -12718,12 +12718,14 @@ static int check_alu_op(struct bpf_verifier_env *env, struct bpf_insn *insn) - if (BPF_SRC(insn->code) == BPF_X) { - struct bpf_reg_state *src_reg = regs + insn->src_reg; - struct bpf_reg_state *dst_reg = regs + insn->dst_reg; -+ bool need_id = src_reg->type == SCALAR_VALUE && !src_reg->id && -+ !tnum_is_const(src_reg->var_off); - - if (BPF_CLASS(insn->code) == BPF_ALU64) { - /* case: R1 = R2 - * copy register state to dest reg - */ -- if (src_reg->type == SCALAR_VALUE && !src_reg->id) -+ if (need_id) - /* Assign src and dst registers the same ID - * that will be used by find_equal_scalars() - * to propagate min/max range. -@@ -12742,7 +12744,7 @@ static int check_alu_op(struct bpf_verifier_env *env, struct bpf_insn *insn) - } else if (src_reg->type == SCALAR_VALUE) { - bool is_src_reg_u32 = src_reg->umax_value <= U32_MAX; - -- if (is_src_reg_u32 && !src_reg->id) -+ if (is_src_reg_u32 && need_id) - src_reg->id = ++env->id_gen; - copy_register_state(dst_reg, src_reg); - /* Make sure ID is cleared if src_reg is not in u32 range otherwise -@@ -14898,8 +14900,9 @@ static bool range_within(struct bpf_reg_state *old, - * So we look through our idmap to see if this old id has been seen before. If - * so, we require the new id to match; otherwise, we add the id pair to the map. - */ --static bool check_ids(u32 old_id, u32 cur_id, struct bpf_id_pair *idmap) -+static bool check_ids(u32 old_id, u32 cur_id, struct bpf_idmap *idmap) - { -+ struct bpf_id_pair *map = idmap->map; - unsigned int i; - - /* either both IDs should be set or both should be zero */ -@@ -14910,20 +14913,34 @@ static bool check_ids(u32 old_id, u32 cur_id, struct bpf_id_pair *idmap) - return true; - - for (i = 0; i < BPF_ID_MAP_SIZE; i++) { -- if (!idmap[i].old) { -+ if (!map[i].old) { - /* Reached an empty slot; haven't seen this id before */ -- idmap[i].old = old_id; -- idmap[i].cur = cur_id; -+ map[i].old = old_id; -+ map[i].cur = cur_id; - return true; - } -- if (idmap[i].old == old_id) -- return idmap[i].cur == cur_id; -+ if (map[i].old == old_id) -+ return map[i].cur == cur_id; -+ if (map[i].cur == cur_id) -+ return false; - } - /* We ran out of idmap slots, which should be impossible */ - WARN_ON_ONCE(1); - return false; - } - -+/* Similar to check_ids(), but allocate a unique temporary ID -+ * for 'old_id' or 'cur_id' of zero. -+ * This makes pairs like '0 vs unique ID', 'unique ID vs 0' valid. -+ */ -+static bool check_scalar_ids(u32 old_id, u32 cur_id, struct bpf_idmap *idmap) -+{ -+ old_id = old_id ? old_id : ++idmap->tmp_id_gen; -+ cur_id = cur_id ? cur_id : ++idmap->tmp_id_gen; -+ -+ return check_ids(old_id, cur_id, idmap); -+} -+ - static void clean_func_state(struct bpf_verifier_env *env, - struct bpf_func_state *st) - { -@@ -15022,7 +15039,7 @@ static void clean_live_states(struct bpf_verifier_env *env, int insn, - - static bool regs_exact(const struct bpf_reg_state *rold, - const struct bpf_reg_state *rcur, -- struct bpf_id_pair *idmap) -+ struct bpf_idmap *idmap) - { - return memcmp(rold, rcur, offsetof(struct bpf_reg_state, id)) == 0 && - check_ids(rold->id, rcur->id, idmap) && -@@ -15031,7 +15048,7 @@ static bool regs_exact(const struct bpf_reg_state *rold, - - /* Returns true if (rold safe implies rcur safe) */ - static bool regsafe(struct bpf_verifier_env *env, struct bpf_reg_state *rold, -- struct bpf_reg_state *rcur, struct bpf_id_pair *idmap) -+ struct bpf_reg_state *rcur, struct bpf_idmap *idmap) - { - if (!(rold->live & REG_LIVE_READ)) - /* explored state didn't use this */ -@@ -15068,15 +15085,42 @@ static bool regsafe(struct bpf_verifier_env *env, struct bpf_reg_state *rold, - - switch (base_type(rold->type)) { - case SCALAR_VALUE: -- if (regs_exact(rold, rcur, idmap)) -- return true; -- if (env->explore_alu_limits) -- return false; -+ if (env->explore_alu_limits) { -+ /* explore_alu_limits disables tnum_in() and range_within() -+ * logic and requires everything to be strict -+ */ -+ return memcmp(rold, rcur, offsetof(struct bpf_reg_state, id)) == 0 && -+ check_scalar_ids(rold->id, rcur->id, idmap); -+ } - if (!rold->precise) - return true; -- /* new val must satisfy old val knowledge */ -+ /* Why check_ids() for scalar registers? -+ * -+ * Consider the following BPF code: -+ * 1: r6 = ... unbound scalar, ID=a ... -+ * 2: r7 = ... unbound scalar, ID=b ... -+ * 3: if (r6 > r7) goto +1 -+ * 4: r6 = r7 -+ * 5: if (r6 > X) goto ... -+ * 6: ... memory operation using r7 ... -+ * -+ * First verification path is [1-6]: -+ * - at (4) same bpf_reg_state::id (b) would be assigned to r6 and r7; -+ * - at (5) r6 would be marked <= X, find_equal_scalars() would also mark -+ * r7 <= X, because r6 and r7 share same id. -+ * Next verification path is [1-4, 6]. -+ * -+ * Instruction (6) would be reached in two states: -+ * I. r6{.id=b}, r7{.id=b} via path 1-6; -+ * II. r6{.id=a}, r7{.id=b} via path 1-4, 6. -+ * -+ * Use check_ids() to distinguish these states. -+ * --- -+ * Also verify that new value satisfies old value range knowledge. -+ */ - return range_within(rold, rcur) && -- tnum_in(rold->var_off, rcur->var_off); -+ tnum_in(rold->var_off, rcur->var_off) && -+ check_scalar_ids(rold->id, rcur->id, idmap); - case PTR_TO_MAP_KEY: - case PTR_TO_MAP_VALUE: - case PTR_TO_MEM: -@@ -15122,7 +15166,7 @@ static bool regsafe(struct bpf_verifier_env *env, struct bpf_reg_state *rold, - } - - static bool stacksafe(struct bpf_verifier_env *env, struct bpf_func_state *old, -- struct bpf_func_state *cur, struct bpf_id_pair *idmap) -+ struct bpf_func_state *cur, struct bpf_idmap *idmap) - { - int i, spi; - -@@ -15225,7 +15269,7 @@ static bool stacksafe(struct bpf_verifier_env *env, struct bpf_func_state *old, - } - - static bool refsafe(struct bpf_func_state *old, struct bpf_func_state *cur, -- struct bpf_id_pair *idmap) -+ struct bpf_idmap *idmap) - { - int i; - -@@ -15273,13 +15317,13 @@ static bool func_states_equal(struct bpf_verifier_env *env, struct bpf_func_stat - - for (i = 0; i < MAX_BPF_REG; i++) - if (!regsafe(env, &old->regs[i], &cur->regs[i], -- env->idmap_scratch)) -+ &env->idmap_scratch)) - return false; - -- if (!stacksafe(env, old, cur, env->idmap_scratch)) -+ if (!stacksafe(env, old, cur, &env->idmap_scratch)) - return false; - -- if (!refsafe(old, cur, env->idmap_scratch)) -+ if (!refsafe(old, cur, &env->idmap_scratch)) - return false; - - return true; -@@ -15294,7 +15338,8 @@ static bool states_equal(struct bpf_verifier_env *env, - if (old->curframe != cur->curframe) - return false; - -- memset(env->idmap_scratch, 0, sizeof(env->idmap_scratch)); -+ env->idmap_scratch.tmp_id_gen = env->id_gen; -+ memset(&env->idmap_scratch.map, 0, sizeof(env->idmap_scratch.map)); - - /* Verification state from speculative execution simulation - * must never prune a non-speculative execution one. -@@ -15312,7 +15357,7 @@ static bool states_equal(struct bpf_verifier_env *env, - return false; - - if (old->active_lock.id && -- !check_ids(old->active_lock.id, cur->active_lock.id, env->idmap_scratch)) -+ !check_ids(old->active_lock.id, cur->active_lock.id, &env->idmap_scratch)) - return false; - - if (old->active_rcu_lock != cur->active_rcu_lock) --- -2.39.2 - diff --git a/queue-6.4/bpftool-jit-limited-misreported-as-negative-value-on.patch b/queue-6.4/bpftool-jit-limited-misreported-as-negative-value-on.patch deleted file mode 100644 index c214da86a67..00000000000 --- a/queue-6.4/bpftool-jit-limited-misreported-as-negative-value-on.patch +++ /dev/null @@ -1,150 +0,0 @@ -From 0bef60c15fddd8c6fd63c156dc7e8da1e30dea8a Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Fri, 12 May 2023 12:31:34 +0100 -Subject: bpftool: JIT limited misreported as negative value on aarch64 - -From: Alan Maguire - -[ Upstream commit 04cb8453a91c7c22f60ddadb6cef0d19abb33bb5 ] - -On aarch64, "bpftool feature" reports an incorrect BPF JIT limit: - -$ sudo /sbin/bpftool feature -Scanning system configuration... -bpf() syscall restricted to privileged users -JIT compiler is enabled -JIT compiler hardening is disabled -JIT compiler kallsyms exports are enabled for root -skipping kernel config, can't open file: No such file or directory -Global memory limit for JIT compiler for unprivileged users is -201326592 bytes - -This is because /proc/sys/net/core/bpf_jit_limit reports - -$ sudo cat /proc/sys/net/core/bpf_jit_limit -68169519595520 - -...and an int is assumed in read_procfs(). Change read_procfs() -to return a long to avoid negative value reporting. - -Fixes: 7a4522bbef0c ("tools: bpftool: add probes for /proc/ eBPF parameters") -Reported-by: Nicky Veitch -Signed-off-by: Alan Maguire -Signed-off-by: Daniel Borkmann -Acked-by: Jiri Olsa -Acked-by: Quentin Monnet -Link: https://lore.kernel.org/bpf/20230512113134.58996-1-alan.maguire@oracle.com -Signed-off-by: Sasha Levin ---- - tools/bpf/bpftool/feature.c | 24 ++++++++++++------------ - 1 file changed, 12 insertions(+), 12 deletions(-) - -diff --git a/tools/bpf/bpftool/feature.c b/tools/bpf/bpftool/feature.c -index da16e6a27cccd..0675d6a464138 100644 ---- a/tools/bpf/bpftool/feature.c -+++ b/tools/bpf/bpftool/feature.c -@@ -167,12 +167,12 @@ static int get_vendor_id(int ifindex) - return strtol(buf, NULL, 0); - } - --static int read_procfs(const char *path) -+static long read_procfs(const char *path) - { - char *endptr, *line = NULL; - size_t len = 0; - FILE *fd; -- int res; -+ long res; - - fd = fopen(path, "r"); - if (!fd) -@@ -194,7 +194,7 @@ static int read_procfs(const char *path) - - static void probe_unprivileged_disabled(void) - { -- int res; -+ long res; - - /* No support for C-style ouptut */ - -@@ -216,14 +216,14 @@ static void probe_unprivileged_disabled(void) - printf("Unable to retrieve required privileges for bpf() syscall\n"); - break; - default: -- printf("bpf() syscall restriction has unknown value %d\n", res); -+ printf("bpf() syscall restriction has unknown value %ld\n", res); - } - } - } - - static void probe_jit_enable(void) - { -- int res; -+ long res; - - /* No support for C-style ouptut */ - -@@ -245,7 +245,7 @@ static void probe_jit_enable(void) - printf("Unable to retrieve JIT-compiler status\n"); - break; - default: -- printf("JIT-compiler status has unknown value %d\n", -+ printf("JIT-compiler status has unknown value %ld\n", - res); - } - } -@@ -253,7 +253,7 @@ static void probe_jit_enable(void) - - static void probe_jit_harden(void) - { -- int res; -+ long res; - - /* No support for C-style ouptut */ - -@@ -275,7 +275,7 @@ static void probe_jit_harden(void) - printf("Unable to retrieve JIT hardening status\n"); - break; - default: -- printf("JIT hardening status has unknown value %d\n", -+ printf("JIT hardening status has unknown value %ld\n", - res); - } - } -@@ -283,7 +283,7 @@ static void probe_jit_harden(void) - - static void probe_jit_kallsyms(void) - { -- int res; -+ long res; - - /* No support for C-style ouptut */ - -@@ -302,14 +302,14 @@ static void probe_jit_kallsyms(void) - printf("Unable to retrieve JIT kallsyms export status\n"); - break; - default: -- printf("JIT kallsyms exports status has unknown value %d\n", res); -+ printf("JIT kallsyms exports status has unknown value %ld\n", res); - } - } - } - - static void probe_jit_limit(void) - { -- int res; -+ long res; - - /* No support for C-style ouptut */ - -@@ -322,7 +322,7 @@ static void probe_jit_limit(void) - printf("Unable to retrieve global memory limit for JIT compiler for unprivileged users\n"); - break; - default: -- printf("Global memory limit for JIT compiler for unprivileged users is %d bytes\n", res); -+ printf("Global memory limit for JIT compiler for unprivileged users is %ld bytes\n", res); - } - } - } --- -2.39.2 - diff --git a/queue-6.4/btrfs-always-read-the-entire-extent_buffer.patch b/queue-6.4/btrfs-always-read-the-entire-extent_buffer.patch deleted file mode 100644 index 825f378c5ed..00000000000 --- a/queue-6.4/btrfs-always-read-the-entire-extent_buffer.patch +++ /dev/null @@ -1,87 +0,0 @@ -From 7fa6fa50bcf63d8f4c6a381d7fb7a2ffc0521572 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Wed, 3 May 2023 17:24:25 +0200 -Subject: btrfs: always read the entire extent_buffer - -From: Christoph Hellwig - -[ Upstream commit e95382834cf885b478dbe14a66451b863eb35c94 ] - -Currently read_extent_buffer_pages skips pages that are already uptodate -when reading in an extent_buffer. While this reduces the amount of data -read, it increases the number of I/O operations as we now need to do -multiple I/Os when reading an extent buffer with one or more uptodate -pages in the middle of it. On any modern storage device, be that hard -drives or SSDs this actually decreases I/O performance. Fortunately -this case is pretty rare as the pages are always initially read together -and then aged the same way. Besides simplifying the code a bit as-is -this will allow for major simplifications to the I/O completion handler -later on. - -Note that the case where all pages are uptodate is still handled by an -optimized fast path that does not read any data from disk. - -Reviewed-by: Johannes Thumshirn -Reviewed-by: Qu Wenruo -Signed-off-by: Christoph Hellwig -Reviewed-by: David Sterba -Signed-off-by: David Sterba -Stable-dep-of: 7027f87108ce ("btrfs: don't treat zoned writeback as being from an async helper thread") -Signed-off-by: Sasha Levin ---- - fs/btrfs/extent_io.c | 17 +++++------------ - 1 file changed, 5 insertions(+), 12 deletions(-) - -diff --git a/fs/btrfs/extent_io.c b/fs/btrfs/extent_io.c -index a1adadd5d25dd..d1a635f237688 100644 ---- a/fs/btrfs/extent_io.c -+++ b/fs/btrfs/extent_io.c -@@ -4314,7 +4314,6 @@ int read_extent_buffer_pages(struct extent_buffer *eb, int wait, int mirror_num, - int locked_pages = 0; - int all_uptodate = 1; - int num_pages; -- unsigned long num_reads = 0; - struct btrfs_bio_ctrl bio_ctrl = { - .opf = REQ_OP_READ, - .mirror_num = mirror_num, -@@ -4360,10 +4359,8 @@ int read_extent_buffer_pages(struct extent_buffer *eb, int wait, int mirror_num, - */ - for (i = 0; i < num_pages; i++) { - page = eb->pages[i]; -- if (!PageUptodate(page)) { -- num_reads++; -+ if (!PageUptodate(page)) - all_uptodate = 0; -- } - } - - if (all_uptodate) { -@@ -4373,7 +4370,7 @@ int read_extent_buffer_pages(struct extent_buffer *eb, int wait, int mirror_num, - - clear_bit(EXTENT_BUFFER_READ_ERR, &eb->bflags); - eb->read_mirror = 0; -- atomic_set(&eb->io_pages, num_reads); -+ atomic_set(&eb->io_pages, num_pages); - /* - * It is possible for release_folio to clear the TREE_REF bit before we - * set io_pages. See check_buffer_tree_ref for a more detailed comment. -@@ -4383,13 +4380,9 @@ int read_extent_buffer_pages(struct extent_buffer *eb, int wait, int mirror_num, - for (i = 0; i < num_pages; i++) { - page = eb->pages[i]; - -- if (!PageUptodate(page)) { -- ClearPageError(page); -- submit_extent_page(&bio_ctrl, page_offset(page), page, -- PAGE_SIZE, 0); -- } else { -- unlock_page(page); -- } -+ ClearPageError(page); -+ submit_extent_page(&bio_ctrl, page_offset(page), page, -+ PAGE_SIZE, 0); - } - - submit_one_bio(&bio_ctrl); --- -2.39.2 - diff --git a/queue-6.4/btrfs-don-t-fail-writeback-when-allocating-the-compr.patch b/queue-6.4/btrfs-don-t-fail-writeback-when-allocating-the-compr.patch deleted file mode 100644 index 8500f056a6a..00000000000 --- a/queue-6.4/btrfs-don-t-fail-writeback-when-allocating-the-compr.patch +++ /dev/null @@ -1,161 +0,0 @@ -From d007dd4a7f2229f0b7e3ae79052176c4677707da Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Wed, 31 May 2023 08:04:54 +0200 -Subject: btrfs: don't fail writeback when allocating the compression context - fails - -From: Christoph Hellwig - -[ Upstream commit 973fb26e81a9f59dfe45b079a698c0e238f7bf69 ] - -If cow_file_range_async fails to allocate the asynchronous writeback -context, it currently returns an error and entirely fails the writeback. -This is not a good idea as a writeback failure is a non-temporary error -condition that will make the file system unusable. Just fall back to -synchronous uncompressed writeback instead. This requires us to delay -setting the BTRFS_INODE_HAS_ASYNC_EXTENT flag until we've committed to -the async writeback. - -The compression checks INODE_NOCOMPRESS and FORCE_COMPRESS are moved -from cow_file_range_async to the preceding checks btrfs_run_delalloc_range(). - -Reviewed-by: Josef Bacik -Signed-off-by: Christoph Hellwig -Reviewed-by: David Sterba -Signed-off-by: David Sterba -Stable-dep-of: 7027f87108ce ("btrfs: don't treat zoned writeback as being from an async helper thread") -Signed-off-by: Sasha Levin ---- - fs/btrfs/inode.c | 74 ++++++++++++++++++------------------------------ - 1 file changed, 28 insertions(+), 46 deletions(-) - -diff --git a/fs/btrfs/inode.c b/fs/btrfs/inode.c -index 7fcafcc5292c8..3d12dba145152 100644 ---- a/fs/btrfs/inode.c -+++ b/fs/btrfs/inode.c -@@ -1521,58 +1521,36 @@ static noinline void async_cow_free(struct btrfs_work *work) - kvfree(async_cow); - } - --static int cow_file_range_async(struct btrfs_inode *inode, -- struct writeback_control *wbc, -- struct page *locked_page, -- u64 start, u64 end, int *page_started, -- unsigned long *nr_written) -+static bool cow_file_range_async(struct btrfs_inode *inode, -+ struct writeback_control *wbc, -+ struct page *locked_page, -+ u64 start, u64 end, int *page_started, -+ unsigned long *nr_written) - { - struct btrfs_fs_info *fs_info = inode->root->fs_info; - struct cgroup_subsys_state *blkcg_css = wbc_blkcg_css(wbc); - struct async_cow *ctx; - struct async_chunk *async_chunk; - unsigned long nr_pages; -- u64 cur_end; - u64 num_chunks = DIV_ROUND_UP(end - start, SZ_512K); - int i; -- bool should_compress; - unsigned nofs_flag; - const blk_opf_t write_flags = wbc_to_write_flags(wbc); - -- unlock_extent(&inode->io_tree, start, end, NULL); -- -- if (inode->flags & BTRFS_INODE_NOCOMPRESS && -- !btrfs_test_opt(fs_info, FORCE_COMPRESS)) { -- num_chunks = 1; -- should_compress = false; -- } else { -- should_compress = true; -- } -- - nofs_flag = memalloc_nofs_save(); - ctx = kvmalloc(struct_size(ctx, chunks, num_chunks), GFP_KERNEL); - memalloc_nofs_restore(nofs_flag); -+ if (!ctx) -+ return false; - -- if (!ctx) { -- unsigned clear_bits = EXTENT_LOCKED | EXTENT_DELALLOC | -- EXTENT_DELALLOC_NEW | EXTENT_DEFRAG | -- EXTENT_DO_ACCOUNTING; -- unsigned long page_ops = PAGE_UNLOCK | PAGE_START_WRITEBACK | -- PAGE_END_WRITEBACK | PAGE_SET_ERROR; -- -- extent_clear_unlock_delalloc(inode, start, end, locked_page, -- clear_bits, page_ops); -- return -ENOMEM; -- } -+ unlock_extent(&inode->io_tree, start, end, NULL); -+ set_bit(BTRFS_INODE_HAS_ASYNC_EXTENT, &inode->runtime_flags); - - async_chunk = ctx->chunks; - atomic_set(&ctx->num_chunks, num_chunks); - - for (i = 0; i < num_chunks; i++) { -- if (should_compress) -- cur_end = min(end, start + SZ_512K - 1); -- else -- cur_end = end; -+ u64 cur_end = min(end, start + SZ_512K - 1); - - /* - * igrab is called higher up in the call chain, take only the -@@ -1633,7 +1611,7 @@ static int cow_file_range_async(struct btrfs_inode *inode, - start = cur_end + 1; - } - *page_started = 1; -- return 0; -+ return true; - } - - static noinline int run_delalloc_zoned(struct btrfs_inode *inode, -@@ -2214,7 +2192,7 @@ int btrfs_run_delalloc_range(struct btrfs_inode *inode, struct page *locked_page - u64 start, u64 end, int *page_started, unsigned long *nr_written, - struct writeback_control *wbc) - { -- int ret; -+ int ret = 0; - const bool zoned = btrfs_is_zoned(inode->root->fs_info); - - /* -@@ -2235,19 +2213,23 @@ int btrfs_run_delalloc_range(struct btrfs_inode *inode, struct page *locked_page - ASSERT(!zoned || btrfs_is_data_reloc_root(inode->root)); - ret = run_delalloc_nocow(inode, locked_page, start, end, - page_started, nr_written); -- } else if (!btrfs_inode_can_compress(inode) || -- !inode_need_compress(inode, start, end)) { -- if (zoned) -- ret = run_delalloc_zoned(inode, locked_page, start, end, -- page_started, nr_written); -- else -- ret = cow_file_range(inode, locked_page, start, end, -- page_started, nr_written, 1, NULL); -- } else { -- set_bit(BTRFS_INODE_HAS_ASYNC_EXTENT, &inode->runtime_flags); -- ret = cow_file_range_async(inode, wbc, locked_page, start, end, -- page_started, nr_written); -+ goto out; - } -+ -+ if (btrfs_inode_can_compress(inode) && -+ inode_need_compress(inode, start, end) && -+ cow_file_range_async(inode, wbc, locked_page, start, -+ end, page_started, nr_written)) -+ goto out; -+ -+ if (zoned) -+ ret = run_delalloc_zoned(inode, locked_page, start, end, -+ page_started, nr_written); -+ else -+ ret = cow_file_range(inode, locked_page, start, end, -+ page_started, nr_written, 1, NULL); -+ -+out: - ASSERT(ret <= 0); - if (ret) - btrfs_cleanup_ordered_extents(inode, locked_page, start, --- -2.39.2 - diff --git a/queue-6.4/btrfs-don-t-treat-zoned-writeback-as-being-from-an-a.patch b/queue-6.4/btrfs-don-t-treat-zoned-writeback-as-being-from-an-a.patch deleted file mode 100644 index 2180a191343..00000000000 --- a/queue-6.4/btrfs-don-t-treat-zoned-writeback-as-being-from-an-a.patch +++ /dev/null @@ -1,156 +0,0 @@ -From cedc431fde1cba40083422a0aa2fece8f89d524c Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Wed, 31 May 2023 08:05:02 +0200 -Subject: btrfs: don't treat zoned writeback as being from an async helper - thread - -From: Christoph Hellwig - -[ Upstream commit 7027f87108ce3d23ea542e1a9a79056530db4a87 ] - -When extent_write_locked_range was originally added, it was only used -writing back compressed pages from an async helper thread. But it is -now also used for writing back pages on zoned devices, where it is -called directly from the ->writepage context. In this case we want to -be able to pass on the writeback_control instead of creating a new one, -and more importantly want to use all the normal cgroup interaction -instead of potentially deferring writeback to another helper. - -Fixes: 898793d992c2 ("btrfs: zoned: write out partially allocated region") -Reviewed-by: Josef Bacik -Signed-off-by: Christoph Hellwig -Reviewed-by: David Sterba -Signed-off-by: David Sterba -Signed-off-by: Sasha Levin ---- - fs/btrfs/extent_io.c | 20 +++++++------------- - fs/btrfs/extent_io.h | 3 ++- - fs/btrfs/inode.c | 20 +++++++++++++++----- - 3 files changed, 24 insertions(+), 19 deletions(-) - -diff --git a/fs/btrfs/extent_io.c b/fs/btrfs/extent_io.c -index 6116da5d0a1ed..a69a488605b21 100644 ---- a/fs/btrfs/extent_io.c -+++ b/fs/btrfs/extent_io.c -@@ -2432,7 +2432,8 @@ static int extent_write_cache_pages(struct address_space *mapping, - * already been ran (aka, ordered extent inserted) and all pages are still - * locked. - */ --int extent_write_locked_range(struct inode *inode, u64 start, u64 end) -+int extent_write_locked_range(struct inode *inode, u64 start, u64 end, -+ struct writeback_control *wbc) - { - bool found_error = false; - int first_error = 0; -@@ -2442,22 +2443,16 @@ int extent_write_locked_range(struct inode *inode, u64 start, u64 end) - const u32 sectorsize = fs_info->sectorsize; - loff_t i_size = i_size_read(inode); - u64 cur = start; -- struct writeback_control wbc_writepages = { -- .sync_mode = WB_SYNC_ALL, -- .range_start = start, -- .range_end = end, -- .no_cgroup_owner = 1, -- }; - struct btrfs_bio_ctrl bio_ctrl = { -- .wbc = &wbc_writepages, -- /* We're called from an async helper function */ -- .opf = REQ_OP_WRITE | REQ_BTRFS_CGROUP_PUNT | -- wbc_to_write_flags(&wbc_writepages), -+ .wbc = wbc, -+ .opf = REQ_OP_WRITE | wbc_to_write_flags(wbc), - }; - -+ if (wbc->no_cgroup_owner) -+ bio_ctrl.opf |= REQ_BTRFS_CGROUP_PUNT; -+ - ASSERT(IS_ALIGNED(start, sectorsize) && IS_ALIGNED(end + 1, sectorsize)); - -- wbc_attach_fdatawrite_inode(&wbc_writepages, inode); - while (cur <= end) { - u64 cur_end = min(round_down(cur, PAGE_SIZE) + PAGE_SIZE - 1, end); - struct page *page; -@@ -2497,7 +2492,6 @@ int extent_write_locked_range(struct inode *inode, u64 start, u64 end) - - submit_write_bio(&bio_ctrl, found_error ? ret : 0); - -- wbc_detach_inode(&wbc_writepages); - if (found_error) - return first_error; - return ret; -diff --git a/fs/btrfs/extent_io.h b/fs/btrfs/extent_io.h -index 4341ad978fb8e..aac7e6817e8ff 100644 ---- a/fs/btrfs/extent_io.h -+++ b/fs/btrfs/extent_io.h -@@ -179,7 +179,8 @@ int try_release_extent_mapping(struct page *page, gfp_t mask); - int try_release_extent_buffer(struct page *page); - - int btrfs_read_folio(struct file *file, struct folio *folio); --int extent_write_locked_range(struct inode *inode, u64 start, u64 end); -+int extent_write_locked_range(struct inode *inode, u64 start, u64 end, -+ struct writeback_control *wbc); - int extent_writepages(struct address_space *mapping, - struct writeback_control *wbc); - int btree_write_cache_pages(struct address_space *mapping, -diff --git a/fs/btrfs/inode.c b/fs/btrfs/inode.c -index 3d12dba145152..2e6eed4b1b3cc 100644 ---- a/fs/btrfs/inode.c -+++ b/fs/btrfs/inode.c -@@ -934,6 +934,12 @@ static int submit_uncompressed_range(struct btrfs_inode *inode, - unsigned long nr_written = 0; - int page_started = 0; - int ret; -+ struct writeback_control wbc = { -+ .sync_mode = WB_SYNC_ALL, -+ .range_start = start, -+ .range_end = end, -+ .no_cgroup_owner = 1, -+ }; - - /* - * Call cow_file_range() to run the delalloc range directly, since we -@@ -965,7 +971,10 @@ static int submit_uncompressed_range(struct btrfs_inode *inode, - } - - /* All pages will be unlocked, including @locked_page */ -- return extent_write_locked_range(&inode->vfs_inode, start, end); -+ wbc_attach_fdatawrite_inode(&wbc, &inode->vfs_inode); -+ ret = extent_write_locked_range(&inode->vfs_inode, start, end, &wbc); -+ wbc_detach_inode(&wbc); -+ return ret; - } - - static int submit_one_async_extent(struct btrfs_inode *inode, -@@ -1617,7 +1626,8 @@ static bool cow_file_range_async(struct btrfs_inode *inode, - static noinline int run_delalloc_zoned(struct btrfs_inode *inode, - struct page *locked_page, u64 start, - u64 end, int *page_started, -- unsigned long *nr_written) -+ unsigned long *nr_written, -+ struct writeback_control *wbc) - { - u64 done_offset = end; - int ret; -@@ -1649,8 +1659,8 @@ static noinline int run_delalloc_zoned(struct btrfs_inode *inode, - account_page_redirty(locked_page); - } - locked_page_done = true; -- extent_write_locked_range(&inode->vfs_inode, start, done_offset); -- -+ extent_write_locked_range(&inode->vfs_inode, start, done_offset, -+ wbc); - start = done_offset + 1; - } - -@@ -2224,7 +2234,7 @@ int btrfs_run_delalloc_range(struct btrfs_inode *inode, struct page *locked_page - - if (zoned) - ret = run_delalloc_zoned(inode, locked_page, start, end, -- page_started, nr_written); -+ page_started, nr_written, wbc); - else - ret = cow_file_range(inode, locked_page, start, end, - page_started, nr_written, 1, NULL); --- -2.39.2 - diff --git a/queue-6.4/btrfs-don-t-use-btrfs_bio_ctrl-for-extent-buffer-rea.patch b/queue-6.4/btrfs-don-t-use-btrfs_bio_ctrl-for-extent-buffer-rea.patch deleted file mode 100644 index 4bfe520f236..00000000000 --- a/queue-6.4/btrfs-don-t-use-btrfs_bio_ctrl-for-extent-buffer-rea.patch +++ /dev/null @@ -1,203 +0,0 @@ -From 52172f32f998de9abae489ad34796bee0e242343 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Wed, 3 May 2023 17:24:26 +0200 -Subject: btrfs: don't use btrfs_bio_ctrl for extent buffer reading - -From: Christoph Hellwig - -[ Upstream commit b78b98e06fb7f9860da5a7c28e1edbaefc2f7be1 ] - -The btrfs_bio_ctrl machinery is overkill for reading extent_buffers -as we always operate on PAGE_SIZE chunks (or one smaller one for the -subpage case) that are contiguous and are guaranteed to fit into a -single bio. Replace it with open coded btrfs_bio_alloc, __bio_add_page -and btrfs_submit_bio calls in a helper function shared between -the subpage and node size >= PAGE_SIZE cases. - -Reviewed-by: Johannes Thumshirn -Reviewed-by: Qu Wenruo -Reviewed-by: Josef Bacik -Signed-off-by: Christoph Hellwig -Reviewed-by: David Sterba -Signed-off-by: David Sterba -Stable-dep-of: 7027f87108ce ("btrfs: don't treat zoned writeback as being from an async helper thread") -Signed-off-by: Sasha Levin ---- - fs/btrfs/extent_io.c | 99 ++++++++++++++++---------------------------- - 1 file changed, 36 insertions(+), 63 deletions(-) - -diff --git a/fs/btrfs/extent_io.c b/fs/btrfs/extent_io.c -index d1a635f237688..51f0f28fb9b2c 100644 ---- a/fs/btrfs/extent_io.c -+++ b/fs/btrfs/extent_io.c -@@ -98,22 +98,12 @@ void btrfs_extent_buffer_leak_debug_check(struct btrfs_fs_info *fs_info) - */ - struct btrfs_bio_ctrl { - struct btrfs_bio *bbio; -- int mirror_num; - enum btrfs_compression_type compress_type; - u32 len_to_oe_boundary; - blk_opf_t opf; - btrfs_bio_end_io_t end_io_func; - struct writeback_control *wbc; - -- /* -- * This is for metadata read, to provide the extra needed verification -- * info. This has to be provided for submit_one_bio(), as -- * submit_one_bio() can submit a bio if it ends at stripe boundary. If -- * no such parent_check is provided, the metadata can hit false alert at -- * endio time. -- */ -- struct btrfs_tree_parent_check *parent_check; -- - /* - * Tell writepage not to lock the state bits for this range, it still - * does the unlocking. -@@ -124,7 +114,6 @@ struct btrfs_bio_ctrl { - static void submit_one_bio(struct btrfs_bio_ctrl *bio_ctrl) - { - struct btrfs_bio *bbio = bio_ctrl->bbio; -- int mirror_num = bio_ctrl->mirror_num; - - if (!bbio) - return; -@@ -132,25 +121,14 @@ static void submit_one_bio(struct btrfs_bio_ctrl *bio_ctrl) - /* Caller should ensure the bio has at least some range added */ - ASSERT(bbio->bio.bi_iter.bi_size); - -- if (!is_data_inode(&bbio->inode->vfs_inode)) { -- if (btrfs_op(&bbio->bio) != BTRFS_MAP_WRITE) { -- /* -- * For metadata read, we should have the parent_check, -- * and copy it to bbio for metadata verification. -- */ -- ASSERT(bio_ctrl->parent_check); -- memcpy(&bbio->parent_check, -- bio_ctrl->parent_check, -- sizeof(struct btrfs_tree_parent_check)); -- } -+ if (!is_data_inode(&bbio->inode->vfs_inode)) - bbio->bio.bi_opf |= REQ_META; -- } - - if (btrfs_op(&bbio->bio) == BTRFS_MAP_READ && - bio_ctrl->compress_type != BTRFS_COMPRESS_NONE) -- btrfs_submit_compressed_read(bbio, mirror_num); -+ btrfs_submit_compressed_read(bbio, 0); - else -- btrfs_submit_bio(bbio, mirror_num); -+ btrfs_submit_bio(bbio, 0); - - /* The bbio is owned by the end_io handler now */ - bio_ctrl->bbio = NULL; -@@ -4242,6 +4220,36 @@ void set_extent_buffer_uptodate(struct extent_buffer *eb) - } - } - -+static void __read_extent_buffer_pages(struct extent_buffer *eb, int mirror_num, -+ struct btrfs_tree_parent_check *check) -+{ -+ int num_pages = num_extent_pages(eb), i; -+ struct btrfs_bio *bbio; -+ -+ clear_bit(EXTENT_BUFFER_READ_ERR, &eb->bflags); -+ eb->read_mirror = 0; -+ atomic_set(&eb->io_pages, num_pages); -+ check_buffer_tree_ref(eb); -+ -+ bbio = btrfs_bio_alloc(INLINE_EXTENT_BUFFER_PAGES, -+ REQ_OP_READ | REQ_META, eb->fs_info, -+ end_bio_extent_readpage, NULL); -+ bbio->bio.bi_iter.bi_sector = eb->start >> SECTOR_SHIFT; -+ bbio->inode = BTRFS_I(eb->fs_info->btree_inode); -+ bbio->file_offset = eb->start; -+ memcpy(&bbio->parent_check, check, sizeof(*check)); -+ if (eb->fs_info->nodesize < PAGE_SIZE) { -+ __bio_add_page(&bbio->bio, eb->pages[0], eb->len, -+ eb->start - page_offset(eb->pages[0])); -+ } else { -+ for (i = 0; i < num_pages; i++) { -+ ClearPageError(eb->pages[i]); -+ __bio_add_page(&bbio->bio, eb->pages[i], PAGE_SIZE, 0); -+ } -+ } -+ btrfs_submit_bio(bbio, mirror_num); -+} -+ - static int read_extent_buffer_subpage(struct extent_buffer *eb, int wait, - int mirror_num, - struct btrfs_tree_parent_check *check) -@@ -4250,11 +4258,6 @@ static int read_extent_buffer_subpage(struct extent_buffer *eb, int wait, - struct extent_io_tree *io_tree; - struct page *page = eb->pages[0]; - struct extent_state *cached_state = NULL; -- struct btrfs_bio_ctrl bio_ctrl = { -- .opf = REQ_OP_READ, -- .mirror_num = mirror_num, -- .parent_check = check, -- }; - int ret; - - ASSERT(!test_bit(EXTENT_BUFFER_UNMAPPED, &eb->bflags)); -@@ -4282,18 +4285,10 @@ static int read_extent_buffer_subpage(struct extent_buffer *eb, int wait, - return 0; - } - -- clear_bit(EXTENT_BUFFER_READ_ERR, &eb->bflags); -- eb->read_mirror = 0; -- atomic_set(&eb->io_pages, 1); -- check_buffer_tree_ref(eb); -- bio_ctrl.end_io_func = end_bio_extent_readpage; -- - btrfs_subpage_clear_error(fs_info, page, eb->start, eb->len); -- - btrfs_subpage_start_reader(fs_info, page, eb->start, eb->len); -- submit_extent_page(&bio_ctrl, eb->start, page, eb->len, -- eb->start - page_offset(page)); -- submit_one_bio(&bio_ctrl); -+ -+ __read_extent_buffer_pages(eb, mirror_num, check); - if (wait != WAIT_COMPLETE) { - free_extent_state(cached_state); - return 0; -@@ -4314,11 +4309,6 @@ int read_extent_buffer_pages(struct extent_buffer *eb, int wait, int mirror_num, - int locked_pages = 0; - int all_uptodate = 1; - int num_pages; -- struct btrfs_bio_ctrl bio_ctrl = { -- .opf = REQ_OP_READ, -- .mirror_num = mirror_num, -- .parent_check = check, -- }; - - if (test_bit(EXTENT_BUFFER_UPTODATE, &eb->bflags)) - return 0; -@@ -4368,24 +4358,7 @@ int read_extent_buffer_pages(struct extent_buffer *eb, int wait, int mirror_num, - goto unlock_exit; - } - -- clear_bit(EXTENT_BUFFER_READ_ERR, &eb->bflags); -- eb->read_mirror = 0; -- atomic_set(&eb->io_pages, num_pages); -- /* -- * It is possible for release_folio to clear the TREE_REF bit before we -- * set io_pages. See check_buffer_tree_ref for a more detailed comment. -- */ -- check_buffer_tree_ref(eb); -- bio_ctrl.end_io_func = end_bio_extent_readpage; -- for (i = 0; i < num_pages; i++) { -- page = eb->pages[i]; -- -- ClearPageError(page); -- submit_extent_page(&bio_ctrl, page_offset(page), page, -- PAGE_SIZE, 0); -- } -- -- submit_one_bio(&bio_ctrl); -+ __read_extent_buffer_pages(eb, mirror_num, check); - - if (wait != WAIT_COMPLETE) - return 0; --- -2.39.2 - diff --git a/queue-6.4/btrfs-fix-file_offset-for-req_btrfs_one_ordered-bios.patch b/queue-6.4/btrfs-fix-file_offset-for-req_btrfs_one_ordered-bios.patch deleted file mode 100644 index 054798e26d1..00000000000 --- a/queue-6.4/btrfs-fix-file_offset-for-req_btrfs_one_ordered-bios.patch +++ /dev/null @@ -1,48 +0,0 @@ -From aed7b096ff1a7875fffa4dcdaeff78af197d7828 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Wed, 31 May 2023 09:53:54 +0200 -Subject: btrfs: fix file_offset for REQ_BTRFS_ONE_ORDERED bios that get split - -From: Christoph Hellwig - -[ Upstream commit c731cd0b6d255e4855a7cac9f276864032ab2387 ] - -If a bio gets split, it needs to have a proper file_offset for checksum -validation and repair to work properly. - -Based on feedback from Josef, commit 852eee62d31a ("btrfs: allow -btrfs_submit_bio to split bios") skipped this adjustment for ONE_ORDERED -bios. But if we actually ever need to split a ONE_ORDERED read bio, this -will lead to a wrong file offset in the repair code. Right now the only -user of the file_offset is logging of an error message so this is mostly -harmless, but the wrong offset might be more problematic for additional -users in the future. - -Fixes: 852eee62d31a ("btrfs: allow btrfs_submit_bio to split bios") -Reviewed-by: Johannes Thumshirn -Reviewed-by: Josef Bacik -Signed-off-by: Christoph Hellwig -Reviewed-by: David Sterba -Signed-off-by: David Sterba -Signed-off-by: Sasha Levin ---- - fs/btrfs/bio.c | 3 +-- - 1 file changed, 1 insertion(+), 2 deletions(-) - -diff --git a/fs/btrfs/bio.c b/fs/btrfs/bio.c -index b3ad0f51e6162..b86faf8126e77 100644 ---- a/fs/btrfs/bio.c -+++ b/fs/btrfs/bio.c -@@ -95,8 +95,7 @@ static struct btrfs_bio *btrfs_split_bio(struct btrfs_fs_info *fs_info, - btrfs_bio_init(bbio, fs_info, NULL, orig_bbio); - bbio->inode = orig_bbio->inode; - bbio->file_offset = orig_bbio->file_offset; -- if (!(orig_bbio->bio.bi_opf & REQ_BTRFS_ONE_ORDERED)) -- orig_bbio->file_offset += map_length; -+ orig_bbio->file_offset += map_length; - - atomic_inc(&orig_bbio->pending_ios); - return bbio; --- -2.39.2 - diff --git a/queue-6.4/btrfs-fix-range_end-calculation-in-extent_write_lock.patch b/queue-6.4/btrfs-fix-range_end-calculation-in-extent_write_lock.patch deleted file mode 100644 index 346a65a8d21..00000000000 --- a/queue-6.4/btrfs-fix-range_end-calculation-in-extent_write_lock.patch +++ /dev/null @@ -1,41 +0,0 @@ -From 67644565dd202bc90e9c91375fe5e3249a986f56 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Wed, 31 May 2023 08:04:50 +0200 -Subject: btrfs: fix range_end calculation in extent_write_locked_range - -From: Christoph Hellwig - -[ Upstream commit 36614a3beba33a05ad78d4dcb9aa1d00e8a7d01f ] - -The range_end field in struct writeback_control is inclusive, just like -the end parameter passed to extent_write_locked_range. Not doing this -could cause extra writeout, which is harmless but suboptimal. - -Fixes: 771ed689d2cd ("Btrfs: Optimize compressed writeback and reads") -CC: stable@vger.kernel.org # 5.9+ -Reviewed-by: Josef Bacik -Signed-off-by: Christoph Hellwig -Reviewed-by: David Sterba -Signed-off-by: David Sterba -Stable-dep-of: 7027f87108ce ("btrfs: don't treat zoned writeback as being from an async helper thread") -Signed-off-by: Sasha Levin ---- - fs/btrfs/extent_io.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/fs/btrfs/extent_io.c b/fs/btrfs/extent_io.c -index 0c9538bb3c852..ac3aae55d55e5 100644 ---- a/fs/btrfs/extent_io.c -+++ b/fs/btrfs/extent_io.c -@@ -2468,7 +2468,7 @@ int extent_write_locked_range(struct inode *inode, u64 start, u64 end) - struct writeback_control wbc_writepages = { - .sync_mode = WB_SYNC_ALL, - .range_start = start, -- .range_end = end + 1, -+ .range_end = end, - .no_cgroup_owner = 1, - }; - struct btrfs_bio_ctrl bio_ctrl = { --- -2.39.2 - diff --git a/queue-6.4/btrfs-only-call-__extent_writepage_io-from-extent_wr.patch b/queue-6.4/btrfs-only-call-__extent_writepage_io-from-extent_wr.patch deleted file mode 100644 index 037c22977e2..00000000000 --- a/queue-6.4/btrfs-only-call-__extent_writepage_io-from-extent_wr.patch +++ /dev/null @@ -1,167 +0,0 @@ -From f3654f23bf75b0ae736fbd445886a0b0e2edfd24 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Wed, 31 May 2023 08:05:01 +0200 -Subject: btrfs: only call __extent_writepage_io from extent_write_locked_range - -From: Christoph Hellwig - -[ Upstream commit eb34dceace983e304e00d4bf711cec0a603959ac ] - -__extent_writepage does a lot of things that make no sense for -extent_write_locked_range, given that extent_write_locked_range itself is -called from __extent_writepage either directly or through a workqueue, -and all this work has already been done in the first invocation and the -pages haven't been unlocked since. Call __extent_writepage_io directly -instead and open code the logic tracked in -btrfs_bio_ctrl::extent_locked. - -Reviewed-by: Josef Bacik -Signed-off-by: Christoph Hellwig -Reviewed-by: David Sterba -Signed-off-by: David Sterba -Stable-dep-of: 7027f87108ce ("btrfs: don't treat zoned writeback as being from an async helper thread") -Signed-off-by: Sasha Levin ---- - fs/btrfs/extent_io.c | 65 ++++++++++++++++++-------------------------- - 1 file changed, 26 insertions(+), 39 deletions(-) - -diff --git a/fs/btrfs/extent_io.c b/fs/btrfs/extent_io.c -index ac3aae55d55e5..6116da5d0a1ed 100644 ---- a/fs/btrfs/extent_io.c -+++ b/fs/btrfs/extent_io.c -@@ -103,12 +103,6 @@ struct btrfs_bio_ctrl { - blk_opf_t opf; - btrfs_bio_end_io_t end_io_func; - struct writeback_control *wbc; -- -- /* -- * Tell writepage not to lock the state bits for this range, it still -- * does the unlocking. -- */ -- bool extent_locked; - }; - - static void submit_one_bio(struct btrfs_bio_ctrl *bio_ctrl) -@@ -1550,7 +1544,6 @@ static int __extent_writepage(struct page *page, struct btrfs_bio_ctrl *bio_ctrl - { - struct folio *folio = page_folio(page); - struct inode *inode = page->mapping->host; -- struct btrfs_fs_info *fs_info = btrfs_sb(inode->i_sb); - const u64 page_start = page_offset(page); - const u64 page_end = page_start + PAGE_SIZE - 1; - int ret; -@@ -1583,13 +1576,11 @@ static int __extent_writepage(struct page *page, struct btrfs_bio_ctrl *bio_ctrl - goto done; - } - -- if (!bio_ctrl->extent_locked) { -- ret = writepage_delalloc(BTRFS_I(inode), page, bio_ctrl->wbc); -- if (ret == 1) -- return 0; -- if (ret) -- goto done; -- } -+ ret = writepage_delalloc(BTRFS_I(inode), page, bio_ctrl->wbc); -+ if (ret == 1) -+ return 0; -+ if (ret) -+ goto done; - - ret = __extent_writepage_io(BTRFS_I(inode), page, bio_ctrl, i_size, &nr); - if (ret == 1) -@@ -1634,21 +1625,7 @@ static int __extent_writepage(struct page *page, struct btrfs_bio_ctrl *bio_ctrl - */ - if (PageError(page)) - end_extent_writepage(page, ret, page_start, page_end); -- if (bio_ctrl->extent_locked) { -- struct writeback_control *wbc = bio_ctrl->wbc; -- -- /* -- * If bio_ctrl->extent_locked, it's from extent_write_locked_range(), -- * the page can either be locked by lock_page() or -- * process_one_page(). -- * Let btrfs_page_unlock_writer() handle both cases. -- */ -- ASSERT(wbc); -- btrfs_page_unlock_writer(fs_info, page, wbc->range_start, -- wbc->range_end + 1 - wbc->range_start); -- } else { -- unlock_page(page); -- } -+ unlock_page(page); - ASSERT(ret <= 0); - return ret; - } -@@ -2461,10 +2438,10 @@ int extent_write_locked_range(struct inode *inode, u64 start, u64 end) - int first_error = 0; - int ret = 0; - struct address_space *mapping = inode->i_mapping; -- struct page *page; -+ struct btrfs_fs_info *fs_info = btrfs_sb(inode->i_sb); -+ const u32 sectorsize = fs_info->sectorsize; -+ loff_t i_size = i_size_read(inode); - u64 cur = start; -- unsigned long nr_pages; -- const u32 sectorsize = btrfs_sb(inode->i_sb)->sectorsize; - struct writeback_control wbc_writepages = { - .sync_mode = WB_SYNC_ALL, - .range_start = start, -@@ -2476,17 +2453,15 @@ int extent_write_locked_range(struct inode *inode, u64 start, u64 end) - /* We're called from an async helper function */ - .opf = REQ_OP_WRITE | REQ_BTRFS_CGROUP_PUNT | - wbc_to_write_flags(&wbc_writepages), -- .extent_locked = 1, - }; - - ASSERT(IS_ALIGNED(start, sectorsize) && IS_ALIGNED(end + 1, sectorsize)); -- nr_pages = (round_up(end, PAGE_SIZE) - round_down(start, PAGE_SIZE)) >> -- PAGE_SHIFT; -- wbc_writepages.nr_to_write = nr_pages * 2; - - wbc_attach_fdatawrite_inode(&wbc_writepages, inode); - while (cur <= end) { - u64 cur_end = min(round_down(cur, PAGE_SIZE) + PAGE_SIZE - 1, end); -+ struct page *page; -+ int nr = 0; - - page = find_get_page(mapping, cur >> PAGE_SHIFT); - /* -@@ -2497,12 +2472,25 @@ int extent_write_locked_range(struct inode *inode, u64 start, u64 end) - ASSERT(PageLocked(page)); - ASSERT(PageDirty(page)); - clear_page_dirty_for_io(page); -- ret = __extent_writepage(page, &bio_ctrl); -- ASSERT(ret <= 0); -+ -+ ret = __extent_writepage_io(BTRFS_I(inode), page, &bio_ctrl, -+ i_size, &nr); -+ if (ret == 1) -+ goto next_page; -+ -+ /* Make sure the mapping tag for page dirty gets cleared. */ -+ if (nr == 0) { -+ set_page_writeback(page); -+ end_page_writeback(page); -+ } -+ if (ret) -+ end_extent_writepage(page, ret, cur, cur_end); -+ btrfs_page_unlock_writer(fs_info, page, cur, cur_end + 1 - cur); - if (ret < 0) { - found_error = true; - first_error = ret; - } -+next_page: - put_page(page); - cur = cur_end + 1; - } -@@ -2523,7 +2511,6 @@ int extent_writepages(struct address_space *mapping, - struct btrfs_bio_ctrl bio_ctrl = { - .wbc = wbc, - .opf = REQ_OP_WRITE | wbc_to_write_flags(wbc), -- .extent_locked = 0, - }; - - /* --- -2.39.2 - diff --git a/queue-6.4/btrfs-return-bool-from-lock_extent_buffer_for_io.patch b/queue-6.4/btrfs-return-bool-from-lock_extent_buffer_for_io.patch deleted file mode 100644 index 15fe27dc0d4..00000000000 --- a/queue-6.4/btrfs-return-bool-from-lock_extent_buffer_for_io.patch +++ /dev/null @@ -1,120 +0,0 @@ -From 2399a7bf8b8bc98025c63b245c1592ef15eea824 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Wed, 3 May 2023 17:24:30 +0200 -Subject: btrfs: return bool from lock_extent_buffer_for_io - -From: Christoph Hellwig - -[ Upstream commit 9fdd160160f002ac2604c5b8f90598febad44ae7 ] - -lock_extent_buffer_for_io never returns a negative error value, so switch -the return value to a simple bool. - -Reviewed-by: Johannes Thumshirn -Reviewed-by: Josef Bacik -Signed-off-by: Christoph Hellwig -Reviewed-by: David Sterba -[ keep noinline_for_stack ] -Signed-off-by: David Sterba -Stable-dep-of: 7027f87108ce ("btrfs: don't treat zoned writeback as being from an async helper thread") -Signed-off-by: Sasha Levin ---- - fs/btrfs/extent_io.c | 37 +++++++++++-------------------------- - 1 file changed, 11 insertions(+), 26 deletions(-) - -diff --git a/fs/btrfs/extent_io.c b/fs/btrfs/extent_io.c -index 51f0f28fb9b2c..28d0792359968 100644 ---- a/fs/btrfs/extent_io.c -+++ b/fs/btrfs/extent_io.c -@@ -1671,18 +1671,17 @@ static void end_extent_buffer_writeback(struct extent_buffer *eb) - * - * May try to flush write bio if we can't get the lock. - * -- * Return 0 if the extent buffer doesn't need to be submitted. -- * (E.g. the extent buffer is not dirty) -- * Return >0 is the extent buffer is submitted to bio. -- * Return <0 if something went wrong, no page is locked. -+ * Return %false if the extent buffer doesn't need to be submitted (e.g. the -+ * extent buffer is not dirty) -+ * Return %true is the extent buffer is submitted to bio. - */ --static noinline_for_stack int lock_extent_buffer_for_io(struct extent_buffer *eb, -+static noinline_for_stack bool lock_extent_buffer_for_io(struct extent_buffer *eb, - struct btrfs_bio_ctrl *bio_ctrl) - { - struct btrfs_fs_info *fs_info = eb->fs_info; - int i, num_pages; - int flush = 0; -- int ret = 0; -+ bool ret = false; - - if (!btrfs_try_tree_write_lock(eb)) { - submit_write_bio(bio_ctrl, 0); -@@ -1693,7 +1692,7 @@ static noinline_for_stack int lock_extent_buffer_for_io(struct extent_buffer *eb - if (test_bit(EXTENT_BUFFER_WRITEBACK, &eb->bflags)) { - btrfs_tree_unlock(eb); - if (bio_ctrl->wbc->sync_mode != WB_SYNC_ALL) -- return 0; -+ return false; - if (!flush) { - submit_write_bio(bio_ctrl, 0); - flush = 1; -@@ -1720,7 +1719,7 @@ static noinline_for_stack int lock_extent_buffer_for_io(struct extent_buffer *eb - percpu_counter_add_batch(&fs_info->dirty_metadata_bytes, - -eb->len, - fs_info->dirty_metadata_batch); -- ret = 1; -+ ret = true; - } else { - spin_unlock(&eb->refs_lock); - } -@@ -2053,7 +2052,6 @@ static int submit_eb_subpage(struct page *page, struct btrfs_bio_ctrl *bio_ctrl) - u64 page_start = page_offset(page); - int bit_start = 0; - int sectors_per_node = fs_info->nodesize >> fs_info->sectorsize_bits; -- int ret; - - /* Lock and write each dirty extent buffers in the range */ - while (bit_start < fs_info->subpage_info->bitmap_nr_bits) { -@@ -2099,25 +2097,13 @@ static int submit_eb_subpage(struct page *page, struct btrfs_bio_ctrl *bio_ctrl) - if (!eb) - continue; - -- ret = lock_extent_buffer_for_io(eb, bio_ctrl); -- if (ret == 0) { -- free_extent_buffer(eb); -- continue; -+ if (lock_extent_buffer_for_io(eb, bio_ctrl)) { -+ write_one_subpage_eb(eb, bio_ctrl); -+ submitted++; - } -- if (ret < 0) { -- free_extent_buffer(eb); -- goto cleanup; -- } -- write_one_subpage_eb(eb, bio_ctrl); - free_extent_buffer(eb); -- submitted++; - } - return submitted; -- --cleanup: -- /* We hit error, end bio for the submitted extent buffers */ -- submit_write_bio(bio_ctrl, ret); -- return ret; - } - - /* -@@ -2196,8 +2182,7 @@ static int submit_eb_page(struct page *page, struct btrfs_bio_ctrl *bio_ctrl, - - *eb_context = eb; - -- ret = lock_extent_buffer_for_io(eb, bio_ctrl); -- if (ret <= 0) { -+ if (!lock_extent_buffer_for_io(eb, bio_ctrl)) { - btrfs_revert_meta_write_pointer(cache, eb); - if (cache) - btrfs_put_block_group(cache); --- -2.39.2 - diff --git a/queue-6.4/btrfs-submit-a-writeback-bio-per-extent_buffer.patch b/queue-6.4/btrfs-submit-a-writeback-bio-per-extent_buffer.patch deleted file mode 100644 index b0b32a4c84d..00000000000 --- a/queue-6.4/btrfs-submit-a-writeback-bio-per-extent_buffer.patch +++ /dev/null @@ -1,278 +0,0 @@ -From 4b3f51320502ed33b3c9997c593d1b50fc7360ca Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Wed, 3 May 2023 17:24:31 +0200 -Subject: btrfs: submit a writeback bio per extent_buffer - -From: Christoph Hellwig - -[ Upstream commit 50b21d7a066f9a702b1d54ca11fc577302e875cb ] - -Stop trying to cluster writes of multiple extent_buffers into a single -bio. There is no need for that as the blk_plug mechanism used all the -way up in writeback_inodes_wb gives us the same I/O pattern even with -multiple bios. Removing the clustering simplifies -lock_extent_buffer_for_io a lot and will also allow passing the eb -as private data to the end I/O handler. - -Reviewed-by: Johannes Thumshirn -Reviewed-by: Josef Bacik -Signed-off-by: Christoph Hellwig -Reviewed-by: David Sterba -Signed-off-by: David Sterba -Stable-dep-of: 7027f87108ce ("btrfs: don't treat zoned writeback as being from an async helper thread") -Signed-off-by: Sasha Levin ---- - fs/btrfs/extent_io.c | 102 ++++++++++++++++--------------------------- - 1 file changed, 37 insertions(+), 65 deletions(-) - -diff --git a/fs/btrfs/extent_io.c b/fs/btrfs/extent_io.c -index 28d0792359968..0c9538bb3c852 100644 ---- a/fs/btrfs/extent_io.c -+++ b/fs/btrfs/extent_io.c -@@ -1669,41 +1669,24 @@ static void end_extent_buffer_writeback(struct extent_buffer *eb) - /* - * Lock extent buffer status and pages for writeback. - * -- * May try to flush write bio if we can't get the lock. -- * - * Return %false if the extent buffer doesn't need to be submitted (e.g. the - * extent buffer is not dirty) - * Return %true is the extent buffer is submitted to bio. - */ - static noinline_for_stack bool lock_extent_buffer_for_io(struct extent_buffer *eb, -- struct btrfs_bio_ctrl *bio_ctrl) -+ struct writeback_control *wbc) - { - struct btrfs_fs_info *fs_info = eb->fs_info; -- int i, num_pages; -- int flush = 0; - bool ret = false; -+ int i; - -- if (!btrfs_try_tree_write_lock(eb)) { -- submit_write_bio(bio_ctrl, 0); -- flush = 1; -- btrfs_tree_lock(eb); -- } -- -- if (test_bit(EXTENT_BUFFER_WRITEBACK, &eb->bflags)) { -+ btrfs_tree_lock(eb); -+ while (test_bit(EXTENT_BUFFER_WRITEBACK, &eb->bflags)) { - btrfs_tree_unlock(eb); -- if (bio_ctrl->wbc->sync_mode != WB_SYNC_ALL) -+ if (wbc->sync_mode != WB_SYNC_ALL) - return false; -- if (!flush) { -- submit_write_bio(bio_ctrl, 0); -- flush = 1; -- } -- while (1) { -- wait_on_extent_buffer_writeback(eb); -- btrfs_tree_lock(eb); -- if (!test_bit(EXTENT_BUFFER_WRITEBACK, &eb->bflags)) -- break; -- btrfs_tree_unlock(eb); -- } -+ wait_on_extent_buffer_writeback(eb); -+ btrfs_tree_lock(eb); - } - - /* -@@ -1735,19 +1718,8 @@ static noinline_for_stack bool lock_extent_buffer_for_io(struct extent_buffer *e - if (!ret || fs_info->nodesize < PAGE_SIZE) - return ret; - -- num_pages = num_extent_pages(eb); -- for (i = 0; i < num_pages; i++) { -- struct page *p = eb->pages[i]; -- -- if (!trylock_page(p)) { -- if (!flush) { -- submit_write_bio(bio_ctrl, 0); -- flush = 1; -- } -- lock_page(p); -- } -- } -- -+ for (i = 0; i < num_extent_pages(eb); i++) -+ lock_page(eb->pages[i]); - return ret; - } - -@@ -1977,11 +1949,16 @@ static void prepare_eb_write(struct extent_buffer *eb) - * Page locking is only utilized at minimum to keep the VMM code happy. - */ - static void write_one_subpage_eb(struct extent_buffer *eb, -- struct btrfs_bio_ctrl *bio_ctrl) -+ struct writeback_control *wbc) - { - struct btrfs_fs_info *fs_info = eb->fs_info; - struct page *page = eb->pages[0]; - bool no_dirty_ebs = false; -+ struct btrfs_bio_ctrl bio_ctrl = { -+ .wbc = wbc, -+ .opf = REQ_OP_WRITE | wbc_to_write_flags(wbc), -+ .end_io_func = end_bio_subpage_eb_writepage, -+ }; - - prepare_eb_write(eb); - -@@ -1995,40 +1972,43 @@ static void write_one_subpage_eb(struct extent_buffer *eb, - if (no_dirty_ebs) - clear_page_dirty_for_io(page); - -- bio_ctrl->end_io_func = end_bio_subpage_eb_writepage; -- -- submit_extent_page(bio_ctrl, eb->start, page, eb->len, -+ submit_extent_page(&bio_ctrl, eb->start, page, eb->len, - eb->start - page_offset(page)); - unlock_page(page); -+ submit_one_bio(&bio_ctrl); - /* - * Submission finished without problem, if no range of the page is - * dirty anymore, we have submitted a page. Update nr_written in wbc. - */ - if (no_dirty_ebs) -- bio_ctrl->wbc->nr_to_write--; -+ wbc->nr_to_write--; - } - - static noinline_for_stack void write_one_eb(struct extent_buffer *eb, -- struct btrfs_bio_ctrl *bio_ctrl) -+ struct writeback_control *wbc) - { - u64 disk_bytenr = eb->start; - int i, num_pages; -+ struct btrfs_bio_ctrl bio_ctrl = { -+ .wbc = wbc, -+ .opf = REQ_OP_WRITE | wbc_to_write_flags(wbc), -+ .end_io_func = end_bio_extent_buffer_writepage, -+ }; - - prepare_eb_write(eb); - -- bio_ctrl->end_io_func = end_bio_extent_buffer_writepage; -- - num_pages = num_extent_pages(eb); - for (i = 0; i < num_pages; i++) { - struct page *p = eb->pages[i]; - - clear_page_dirty_for_io(p); - set_page_writeback(p); -- submit_extent_page(bio_ctrl, disk_bytenr, p, PAGE_SIZE, 0); -+ submit_extent_page(&bio_ctrl, disk_bytenr, p, PAGE_SIZE, 0); - disk_bytenr += PAGE_SIZE; -- bio_ctrl->wbc->nr_to_write--; -+ wbc->nr_to_write--; - unlock_page(p); - } -+ submit_one_bio(&bio_ctrl); - } - - /* -@@ -2045,7 +2025,7 @@ static noinline_for_stack void write_one_eb(struct extent_buffer *eb, - * Return >=0 for the number of submitted extent buffers. - * Return <0 for fatal error. - */ --static int submit_eb_subpage(struct page *page, struct btrfs_bio_ctrl *bio_ctrl) -+static int submit_eb_subpage(struct page *page, struct writeback_control *wbc) - { - struct btrfs_fs_info *fs_info = btrfs_sb(page->mapping->host->i_sb); - int submitted = 0; -@@ -2097,8 +2077,8 @@ static int submit_eb_subpage(struct page *page, struct btrfs_bio_ctrl *bio_ctrl) - if (!eb) - continue; - -- if (lock_extent_buffer_for_io(eb, bio_ctrl)) { -- write_one_subpage_eb(eb, bio_ctrl); -+ if (lock_extent_buffer_for_io(eb, wbc)) { -+ write_one_subpage_eb(eb, wbc); - submitted++; - } - free_extent_buffer(eb); -@@ -2126,7 +2106,7 @@ static int submit_eb_subpage(struct page *page, struct btrfs_bio_ctrl *bio_ctrl) - * previous call. - * Return <0 for fatal error. - */ --static int submit_eb_page(struct page *page, struct btrfs_bio_ctrl *bio_ctrl, -+static int submit_eb_page(struct page *page, struct writeback_control *wbc, - struct extent_buffer **eb_context) - { - struct address_space *mapping = page->mapping; -@@ -2138,7 +2118,7 @@ static int submit_eb_page(struct page *page, struct btrfs_bio_ctrl *bio_ctrl, - return 0; - - if (btrfs_sb(page->mapping->host->i_sb)->nodesize < PAGE_SIZE) -- return submit_eb_subpage(page, bio_ctrl); -+ return submit_eb_subpage(page, wbc); - - spin_lock(&mapping->private_lock); - if (!PagePrivate(page)) { -@@ -2171,8 +2151,7 @@ static int submit_eb_page(struct page *page, struct btrfs_bio_ctrl *bio_ctrl, - * If for_sync, this hole will be filled with - * trasnsaction commit. - */ -- if (bio_ctrl->wbc->sync_mode == WB_SYNC_ALL && -- !bio_ctrl->wbc->for_sync) -+ if (wbc->sync_mode == WB_SYNC_ALL && !wbc->for_sync) - ret = -EAGAIN; - else - ret = 0; -@@ -2182,12 +2161,12 @@ static int submit_eb_page(struct page *page, struct btrfs_bio_ctrl *bio_ctrl, - - *eb_context = eb; - -- if (!lock_extent_buffer_for_io(eb, bio_ctrl)) { -+ if (!lock_extent_buffer_for_io(eb, wbc)) { - btrfs_revert_meta_write_pointer(cache, eb); - if (cache) - btrfs_put_block_group(cache); - free_extent_buffer(eb); -- return ret; -+ return 0; - } - if (cache) { - /* -@@ -2196,7 +2175,7 @@ static int submit_eb_page(struct page *page, struct btrfs_bio_ctrl *bio_ctrl, - btrfs_schedule_zone_finish_bg(cache, eb); - btrfs_put_block_group(cache); - } -- write_one_eb(eb, bio_ctrl); -+ write_one_eb(eb, wbc); - free_extent_buffer(eb); - return 1; - } -@@ -2205,11 +2184,6 @@ int btree_write_cache_pages(struct address_space *mapping, - struct writeback_control *wbc) - { - struct extent_buffer *eb_context = NULL; -- struct btrfs_bio_ctrl bio_ctrl = { -- .wbc = wbc, -- .opf = REQ_OP_WRITE | wbc_to_write_flags(wbc), -- .extent_locked = 0, -- }; - struct btrfs_fs_info *fs_info = BTRFS_I(mapping->host)->root->fs_info; - int ret = 0; - int done = 0; -@@ -2251,7 +2225,7 @@ int btree_write_cache_pages(struct address_space *mapping, - for (i = 0; i < nr_folios; i++) { - struct folio *folio = fbatch.folios[i]; - -- ret = submit_eb_page(&folio->page, &bio_ctrl, &eb_context); -+ ret = submit_eb_page(&folio->page, wbc, &eb_context); - if (ret == 0) - continue; - if (ret < 0) { -@@ -2312,8 +2286,6 @@ int btree_write_cache_pages(struct address_space *mapping, - ret = 0; - if (!ret && BTRFS_FS_ERROR(fs_info)) - ret = -EROFS; -- submit_write_bio(&bio_ctrl, ret); -- - btrfs_zoned_meta_io_unlock(fs_info); - return ret; - } --- -2.39.2 - diff --git a/queue-6.4/bus-ti-sysc-fix-dispc-quirk-masking-bool-variables.patch b/queue-6.4/bus-ti-sysc-fix-dispc-quirk-masking-bool-variables.patch deleted file mode 100644 index b29b8554158..00000000000 --- a/queue-6.4/bus-ti-sysc-fix-dispc-quirk-masking-bool-variables.patch +++ /dev/null @@ -1,49 +0,0 @@ -From 7527a1698a8d2706bb21a53250d3783f15fe5f34 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Wed, 17 May 2023 10:04:16 +0300 -Subject: bus: ti-sysc: Fix dispc quirk masking bool variables - -From: Tony Lindgren - -[ Upstream commit f620596fa347170852da499e778a5736d79a4b79 ] - -Fix warning drivers/bus/ti-sysc.c:1806 sysc_quirk_dispc() -warn: masking a bool. - -While at it let's add a comment for what were doing to make -the code a bit easier to follow. - -Fixes: 7324a7a0d5e2 ("bus: ti-sysc: Implement display subsystem reset quirk") -Reported-by: Dan Carpenter -Closes: https://lore.kernel.org/linux-omap/a8ec8a68-9c2c-4076-bf47-09fccce7659f@kili.mountain/ -Signed-off-by: Tony Lindgren -Signed-off-by: Sasha Levin ---- - drivers/bus/ti-sysc.c | 4 ++-- - 1 file changed, 2 insertions(+), 2 deletions(-) - -diff --git a/drivers/bus/ti-sysc.c b/drivers/bus/ti-sysc.c -index 6c49de37d5e90..21fe9854703f9 100644 ---- a/drivers/bus/ti-sysc.c -+++ b/drivers/bus/ti-sysc.c -@@ -1791,7 +1791,7 @@ static u32 sysc_quirk_dispc(struct sysc *ddata, int dispc_offset, - if (!ddata->module_va) - return -EIO; - -- /* DISP_CONTROL */ -+ /* DISP_CONTROL, shut down lcd and digit on disable if enabled */ - val = sysc_read(ddata, dispc_offset + 0x40); - lcd_en = val & lcd_en_mask; - digit_en = val & digit_en_mask; -@@ -1803,7 +1803,7 @@ static u32 sysc_quirk_dispc(struct sysc *ddata, int dispc_offset, - else - irq_mask |= BIT(2) | BIT(3); /* EVSYNC bits */ - } -- if (disable & (lcd_en | digit_en)) -+ if (disable && (lcd_en || digit_en)) - sysc_write(ddata, dispc_offset + 0x40, - val & ~(lcd_en_mask | digit_en_mask)); - --- -2.39.2 - diff --git a/queue-6.4/can-kvaser_pciefd-add-function-to-set-skb-hwtstamps.patch b/queue-6.4/can-kvaser_pciefd-add-function-to-set-skb-hwtstamps.patch deleted file mode 100644 index 208ef241db9..00000000000 --- a/queue-6.4/can-kvaser_pciefd-add-function-to-set-skb-hwtstamps.patch +++ /dev/null @@ -1,104 +0,0 @@ -From b8f8b3728e599e8cb92c5e96557ced12096e6e2a Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Mon, 29 May 2023 15:42:37 +0200 -Subject: can: kvaser_pciefd: Add function to set skb hwtstamps - -From: Jimmy Assarsson - -[ Upstream commit 2d55e9f9b4427e1ad59b974f2267767aac3788d3 ] - -Add new function, kvaser_pciefd_set_skb_timestamp(), to set skb hwtstamps. - -Signed-off-by: Jimmy Assarsson -Reviewed-by: Vincent Mailhol -Link: https://lore.kernel.org/all/20230529134248.752036-4-extja@kvaser.com -Signed-off-by: Marc Kleine-Budde -Stable-dep-of: ec681b91befa ("can: kvaser_pciefd: Set hardware timestamp on transmitted packets") -Signed-off-by: Sasha Levin ---- - drivers/net/can/kvaser_pciefd.c | 27 ++++++++++----------------- - 1 file changed, 10 insertions(+), 17 deletions(-) - -diff --git a/drivers/net/can/kvaser_pciefd.c b/drivers/net/can/kvaser_pciefd.c -index be189edb256ce..404eb90db4ca1 100644 ---- a/drivers/net/can/kvaser_pciefd.c -+++ b/drivers/net/can/kvaser_pciefd.c -@@ -538,6 +538,13 @@ static int kvaser_pciefd_set_tx_irq(struct kvaser_pciefd_can *can) - return 0; - } - -+static inline void kvaser_pciefd_set_skb_timestamp(const struct kvaser_pciefd *pcie, -+ struct sk_buff *skb, u64 timestamp) -+{ -+ skb_hwtstamps(skb)->hwtstamp = -+ ns_to_ktime(div_u64(timestamp * 1000, pcie->freq_to_ticks_div)); -+} -+ - static void kvaser_pciefd_setup_controller(struct kvaser_pciefd_can *can) - { - u32 mode; -@@ -1171,7 +1178,6 @@ static int kvaser_pciefd_handle_data_packet(struct kvaser_pciefd *pcie, - struct canfd_frame *cf; - struct can_priv *priv; - struct net_device_stats *stats; -- struct skb_shared_hwtstamps *shhwtstamps; - u8 ch_id = (p->header[1] >> KVASER_PCIEFD_PACKET_CHID_SHIFT) & 0x7; - - if (ch_id >= pcie->nr_channels) -@@ -1214,12 +1220,7 @@ static int kvaser_pciefd_handle_data_packet(struct kvaser_pciefd *pcie, - stats->rx_bytes += cf->len; - } - stats->rx_packets++; -- -- shhwtstamps = skb_hwtstamps(skb); -- -- shhwtstamps->hwtstamp = -- ns_to_ktime(div_u64(p->timestamp * 1000, -- pcie->freq_to_ticks_div)); -+ kvaser_pciefd_set_skb_timestamp(pcie, skb, p->timestamp); - - return netif_rx(skb); - } -@@ -1282,7 +1283,6 @@ static int kvaser_pciefd_rx_error_frame(struct kvaser_pciefd_can *can, - struct net_device *ndev = can->can.dev; - struct sk_buff *skb; - struct can_frame *cf = NULL; -- struct skb_shared_hwtstamps *shhwtstamps; - struct net_device_stats *stats = &ndev->stats; - - old_state = can->can.state; -@@ -1323,10 +1323,7 @@ static int kvaser_pciefd_rx_error_frame(struct kvaser_pciefd_can *can, - return -ENOMEM; - } - -- shhwtstamps = skb_hwtstamps(skb); -- shhwtstamps->hwtstamp = -- ns_to_ktime(div_u64(p->timestamp * 1000, -- can->kv_pcie->freq_to_ticks_div)); -+ kvaser_pciefd_set_skb_timestamp(can->kv_pcie, skb, p->timestamp); - cf->can_id |= CAN_ERR_BUSERROR | CAN_ERR_CNT; - - cf->data[6] = bec.txerr; -@@ -1374,7 +1371,6 @@ static int kvaser_pciefd_handle_status_resp(struct kvaser_pciefd_can *can, - struct net_device *ndev = can->can.dev; - struct sk_buff *skb; - struct can_frame *cf; -- struct skb_shared_hwtstamps *shhwtstamps; - - skb = alloc_can_err_skb(ndev, &cf); - if (!skb) { -@@ -1394,10 +1390,7 @@ static int kvaser_pciefd_handle_status_resp(struct kvaser_pciefd_can *can, - cf->can_id |= CAN_ERR_RESTARTED; - } - -- shhwtstamps = skb_hwtstamps(skb); -- shhwtstamps->hwtstamp = -- ns_to_ktime(div_u64(p->timestamp * 1000, -- can->kv_pcie->freq_to_ticks_div)); -+ kvaser_pciefd_set_skb_timestamp(can->kv_pcie, skb, p->timestamp); - - cf->data[6] = bec.txerr; - cf->data[7] = bec.rxerr; --- -2.39.2 - diff --git a/queue-6.4/can-kvaser_pciefd-set-hardware-timestamp-on-transmit.patch b/queue-6.4/can-kvaser_pciefd-set-hardware-timestamp-on-transmit.patch deleted file mode 100644 index 84f752345f1..00000000000 --- a/queue-6.4/can-kvaser_pciefd-set-hardware-timestamp-on-transmit.patch +++ /dev/null @@ -1,54 +0,0 @@ -From c84290d651f6abc937c1b69502509e60740ce7d6 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Mon, 29 May 2023 15:42:38 +0200 -Subject: can: kvaser_pciefd: Set hardware timestamp on transmitted packets - -From: Jimmy Assarsson - -[ Upstream commit ec681b91befa982477e24a150dd6452427fe6473 ] - -Set hardware timestamp on transmitted packets. - -Fixes: 26ad340e582d ("can: kvaser_pciefd: Add driver for Kvaser PCIEcan devices") -Signed-off-by: Jimmy Assarsson -Reviewed-by: Vincent Mailhol -Link: https://lore.kernel.org/all/20230529134248.752036-5-extja@kvaser.com -Signed-off-by: Marc Kleine-Budde -Signed-off-by: Sasha Levin ---- - drivers/net/can/kvaser_pciefd.c | 12 ++++++++++-- - 1 file changed, 10 insertions(+), 2 deletions(-) - -diff --git a/drivers/net/can/kvaser_pciefd.c b/drivers/net/can/kvaser_pciefd.c -index 404eb90db4ca1..37f4befca0345 100644 ---- a/drivers/net/can/kvaser_pciefd.c -+++ b/drivers/net/can/kvaser_pciefd.c -@@ -1519,6 +1519,7 @@ static void kvaser_pciefd_handle_nack_packet(struct kvaser_pciefd_can *can, - - if (skb) { - cf->can_id |= CAN_ERR_BUSERROR; -+ kvaser_pciefd_set_skb_timestamp(can->kv_pcie, skb, p->timestamp); - netif_rx(skb); - } else { - stats->rx_dropped++; -@@ -1550,8 +1551,15 @@ static int kvaser_pciefd_handle_ack_packet(struct kvaser_pciefd *pcie, - netdev_dbg(can->can.dev, "Packet was flushed\n"); - } else { - int echo_idx = p->header[0] & KVASER_PCIEFD_PACKET_SEQ_MSK; -- int dlc = can_get_echo_skb(can->can.dev, echo_idx, NULL); -- u8 count = ioread32(can->reg_base + -+ int dlc; -+ u8 count; -+ struct sk_buff *skb; -+ -+ skb = can->can.echo_skb[echo_idx]; -+ if (skb) -+ kvaser_pciefd_set_skb_timestamp(pcie, skb, p->timestamp); -+ dlc = can_get_echo_skb(can->can.dev, echo_idx, NULL); -+ count = ioread32(can->reg_base + - KVASER_PCIEFD_KCAN_TX_NPACKETS_REG) & 0xff; - - if (count < KVASER_PCIEFD_CAN_TX_MAX_COUNT && --- -2.39.2 - diff --git a/queue-6.4/can-length-fix-bitstuffing-count.patch b/queue-6.4/can-length-fix-bitstuffing-count.patch deleted file mode 100644 index 1f8802af058..00000000000 --- a/queue-6.4/can-length-fix-bitstuffing-count.patch +++ /dev/null @@ -1,123 +0,0 @@ -From d10a2c67d2433579486c7ee59990baf2ebef58a8 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Sun, 11 Jun 2023 11:57:26 +0900 -Subject: can: length: fix bitstuffing count - -From: Vincent Mailhol - -[ Upstream commit 9fde4c557f78ee2f3626e92b4089ce9d54a2573a ] - -The Stuff Bit Count is always coded on 4 bits [1]. Update the Stuff -Bit Count size accordingly. - -In addition, the CRC fields of CAN FD Frames contain stuff bits at -fixed positions called fixed stuff bits [2]. The CRC field starts with -a fixed stuff bit and then has another fixed stuff bit after each -fourth bit [2], which allows us to derive this formula: - - FSB count = 1 + round_down(len(CRC field)/4) - -The length of the CRC field is [1]: - - len(CRC field) = len(Stuff Bit Count) + len(CRC) - = 4 + len(CRC) - -with len(CRC) either 17 or 21 bits depending of the payload length. - -In conclusion, for CRC17: - - FSB count = 1 + round_down((4 + 17)/4) - = 6 - -and for CRC 21: - - FSB count = 1 + round_down((4 + 21)/4) - = 7 - -Add a Fixed Stuff bits (FSB) field with above values and update -CANFD_FRAME_OVERHEAD_SFF and CANFD_FRAME_OVERHEAD_EFF accordingly. - -[1] ISO 11898-1:2015 section 10.4.2.6 "CRC field": - - The CRC field shall contain the CRC sequence followed by a recessive - CRC delimiter. For FD Frames, the CRC field shall also contain the - stuff count. - - Stuff count - - If FD Frames, the stuff count shall be at the beginning of the CRC - field. It shall consist of the stuff bit count modulo 8 in a 3-bit - gray code followed by a parity bit [...] - -[2] ISO 11898-1:2015 paragraph 10.5 "Frame coding": - - In the CRC field of FD Frames, the stuff bits shall be inserted at - fixed positions; they are called fixed stuff bits. There shall be a - fixed stuff bit before the first bit of the stuff count, even if the - last bits of the preceding field are a sequence of five consecutive - bits of identical value, there shall be only the fixed stuff bit, - there shall not be two consecutive stuff bits. A further fixed stuff - bit shall be inserted after each fourth bit of the CRC field [...] - -Fixes: 85d99c3e2a13 ("can: length: can_skb_get_frame_len(): introduce function to get data length of frame in data link layer") -Suggested-by: Thomas Kopp -Signed-off-by: Vincent Mailhol -Reviewed-by: Thomas Kopp -Link: https://lore.kernel.org/all/20230611025728.450837-2-mailhol.vincent@wanadoo.fr -Signed-off-by: Marc Kleine-Budde -Signed-off-by: Sasha Levin ---- - include/linux/can/length.h | 14 ++++++++------ - 1 file changed, 8 insertions(+), 6 deletions(-) - -diff --git a/include/linux/can/length.h b/include/linux/can/length.h -index 6995092b774ec..ef1fd32cef16b 100644 ---- a/include/linux/can/length.h -+++ b/include/linux/can/length.h -@@ -69,17 +69,18 @@ - * Error Status Indicator (ESI) 1 - * Data length code (DLC) 4 - * Data field 0...512 -- * Stuff Bit Count (SBC) 0...16: 4 20...64:5 -+ * Stuff Bit Count (SBC) 4 - * CRC 0...16: 17 20...64:21 - * CRC delimiter (CD) 1 -+ * Fixed Stuff bits (FSB) 0...16: 6 20...64:7 - * ACK slot (AS) 1 - * ACK delimiter (AD) 1 - * End-of-frame (EOF) 7 - * Inter frame spacing 3 - * -- * assuming CRC21, rounded up and ignoring bitstuffing -+ * assuming CRC21, rounded up and ignoring dynamic bitstuffing - */ --#define CANFD_FRAME_OVERHEAD_SFF DIV_ROUND_UP(61, 8) -+#define CANFD_FRAME_OVERHEAD_SFF DIV_ROUND_UP(67, 8) - - /* - * Size of a CAN-FD Extended Frame -@@ -98,17 +99,18 @@ - * Error Status Indicator (ESI) 1 - * Data length code (DLC) 4 - * Data field 0...512 -- * Stuff Bit Count (SBC) 0...16: 4 20...64:5 -+ * Stuff Bit Count (SBC) 4 - * CRC 0...16: 17 20...64:21 - * CRC delimiter (CD) 1 -+ * Fixed Stuff bits (FSB) 0...16: 6 20...64:7 - * ACK slot (AS) 1 - * ACK delimiter (AD) 1 - * End-of-frame (EOF) 7 - * Inter frame spacing 3 - * -- * assuming CRC21, rounded up and ignoring bitstuffing -+ * assuming CRC21, rounded up and ignoring dynamic bitstuffing - */ --#define CANFD_FRAME_OVERHEAD_EFF DIV_ROUND_UP(80, 8) -+#define CANFD_FRAME_OVERHEAD_EFF DIV_ROUND_UP(86, 8) - - /* - * Maximum size of a Classical CAN frame --- -2.39.2 - diff --git a/queue-6.4/cifs-do-all-necessary-checks-for-credits-within-or-b.patch b/queue-6.4/cifs-do-all-necessary-checks-for-credits-within-or-b.patch deleted file mode 100644 index ff3a54036e4..00000000000 --- a/queue-6.4/cifs-do-all-necessary-checks-for-credits-within-or-b.patch +++ /dev/null @@ -1,114 +0,0 @@ -From 57e04461f6fa27afe01e3341a86fbac2830b1983 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Thu, 22 Jun 2023 18:16:04 +0000 -Subject: cifs: do all necessary checks for credits within or before locking - -From: Shyam Prasad N - -[ Upstream commit 326a8d04f147e2bf393f6f9cdb74126ee6900607 ] - -All the server credits and in-flight info is protected by req_lock. -Once the req_lock is held, and we've determined that we have enough -credits to continue, this lock cannot be dropped till we've made the -changes to credits and in-flight count. - -However, we used to drop the lock in order to avoid deadlock with -the recent srv_lock. This could cause the checks already made to be -invalidated. - -Fixed it by moving the server status check to before locking req_lock. - -Fixes: d7d7a66aacd6 ("cifs: avoid use of global locks for high contention data") -Signed-off-by: Shyam Prasad N -Signed-off-by: Steve French -Signed-off-by: Sasha Levin ---- - fs/smb/client/smb2ops.c | 19 ++++++++++--------- - fs/smb/client/transport.c | 20 ++++++++++---------- - 2 files changed, 20 insertions(+), 19 deletions(-) - -diff --git a/fs/smb/client/smb2ops.c b/fs/smb/client/smb2ops.c -index a8bb9d00d33ad..3bac586e8a8eb 100644 ---- a/fs/smb/client/smb2ops.c -+++ b/fs/smb/client/smb2ops.c -@@ -211,6 +211,16 @@ smb2_wait_mtu_credits(struct TCP_Server_Info *server, unsigned int size, - - spin_lock(&server->req_lock); - while (1) { -+ spin_unlock(&server->req_lock); -+ -+ spin_lock(&server->srv_lock); -+ if (server->tcpStatus == CifsExiting) { -+ spin_unlock(&server->srv_lock); -+ return -ENOENT; -+ } -+ spin_unlock(&server->srv_lock); -+ -+ spin_lock(&server->req_lock); - if (server->credits <= 0) { - spin_unlock(&server->req_lock); - cifs_num_waiters_inc(server); -@@ -221,15 +231,6 @@ smb2_wait_mtu_credits(struct TCP_Server_Info *server, unsigned int size, - return rc; - spin_lock(&server->req_lock); - } else { -- spin_unlock(&server->req_lock); -- spin_lock(&server->srv_lock); -- if (server->tcpStatus == CifsExiting) { -- spin_unlock(&server->srv_lock); -- return -ENOENT; -- } -- spin_unlock(&server->srv_lock); -- -- spin_lock(&server->req_lock); - scredits = server->credits; - /* can deadlock with reopen */ - if (scredits <= 8) { -diff --git a/fs/smb/client/transport.c b/fs/smb/client/transport.c -index 0474d0bba0a2e..f280502a2aee8 100644 ---- a/fs/smb/client/transport.c -+++ b/fs/smb/client/transport.c -@@ -522,6 +522,16 @@ wait_for_free_credits(struct TCP_Server_Info *server, const int num_credits, - } - - while (1) { -+ spin_unlock(&server->req_lock); -+ -+ spin_lock(&server->srv_lock); -+ if (server->tcpStatus == CifsExiting) { -+ spin_unlock(&server->srv_lock); -+ return -ENOENT; -+ } -+ spin_unlock(&server->srv_lock); -+ -+ spin_lock(&server->req_lock); - if (*credits < num_credits) { - scredits = *credits; - spin_unlock(&server->req_lock); -@@ -547,15 +557,6 @@ wait_for_free_credits(struct TCP_Server_Info *server, const int num_credits, - return -ERESTARTSYS; - spin_lock(&server->req_lock); - } else { -- spin_unlock(&server->req_lock); -- -- spin_lock(&server->srv_lock); -- if (server->tcpStatus == CifsExiting) { -- spin_unlock(&server->srv_lock); -- return -ENOENT; -- } -- spin_unlock(&server->srv_lock); -- - /* - * For normal commands, reserve the last MAX_COMPOUND - * credits to compound requests. -@@ -569,7 +570,6 @@ wait_for_free_credits(struct TCP_Server_Info *server, const int num_credits, - * for servers that are slow to hand out credits on - * new sessions. - */ -- spin_lock(&server->req_lock); - if (!optype && num_credits == 1 && - server->in_flight > 2 * MAX_COMPOUND && - *credits <= MAX_COMPOUND) { --- -2.39.2 - diff --git a/queue-6.4/cifs-prevent-use-after-free-by-freeing-the-cfile-lat.patch b/queue-6.4/cifs-prevent-use-after-free-by-freeing-the-cfile-lat.patch deleted file mode 100644 index 45a135a3fb9..00000000000 --- a/queue-6.4/cifs-prevent-use-after-free-by-freeing-the-cfile-lat.patch +++ /dev/null @@ -1,52 +0,0 @@ -From 30bd0e7f7fdf783ca47b8252b0fa867b464f3372 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Thu, 22 Jun 2023 18:16:03 +0000 -Subject: cifs: prevent use-after-free by freeing the cfile later - -From: Shyam Prasad N - -[ Upstream commit 33f736187d08f6bc822117629f263b97d3df4165 ] - -In smb2_compound_op we have a possible use-after-free -which can cause hard to debug problems later on. - -This was revealed during stress testing with KASAN enabled -kernel. Fixing it by moving the cfile free call to -a few lines below, after the usage. - -Fixes: 76894f3e2f71 ("cifs: improve symlink handling for smb2+") -Reviewed-by: Paulo Alcantara (SUSE) -Signed-off-by: Shyam Prasad N -Signed-off-by: Steve French -Signed-off-by: Sasha Levin ---- - fs/smb/client/smb2inode.c | 6 +++--- - 1 file changed, 3 insertions(+), 3 deletions(-) - -diff --git a/fs/smb/client/smb2inode.c b/fs/smb/client/smb2inode.c -index 163a03298430d..7e3ac4cb4efa6 100644 ---- a/fs/smb/client/smb2inode.c -+++ b/fs/smb/client/smb2inode.c -@@ -398,9 +398,6 @@ static int smb2_compound_op(const unsigned int xid, struct cifs_tcon *tcon, - rsp_iov); - - finished: -- if (cfile) -- cifsFileInfo_put(cfile); -- - SMB2_open_free(&rqst[0]); - if (rc == -EREMCHG) { - pr_warn_once("server share %s deleted\n", tcon->tree_name); -@@ -529,6 +526,9 @@ static int smb2_compound_op(const unsigned int xid, struct cifs_tcon *tcon, - break; - } - -+ if (cfile) -+ cifsFileInfo_put(cfile); -+ - if (rc && err_iov && err_buftype) { - memcpy(err_iov, rsp_iov, 3 * sizeof(*err_iov)); - memcpy(err_buftype, resp_buftype, 3 * sizeof(*err_buftype)); --- -2.39.2 - diff --git a/queue-6.4/clk-bcm-rpi-fix-off-by-one-in-raspberrypi_discover_c.patch b/queue-6.4/clk-bcm-rpi-fix-off-by-one-in-raspberrypi_discover_c.patch deleted file mode 100644 index 0eb788ff8ca..00000000000 --- a/queue-6.4/clk-bcm-rpi-fix-off-by-one-in-raspberrypi_discover_c.patch +++ /dev/null @@ -1,46 +0,0 @@ -From 6b0b924be425abf538bb6f2eb795e7e3e854b572 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Fri, 21 Apr 2023 13:41:01 +0300 -Subject: clk: bcm: rpi: Fix off by one in raspberrypi_discover_clocks() - -From: Dan Carpenter - -[ Upstream commit da2edb3e3c09fd1451b7f400ccd1070ef086619a ] - -Smatch detected an off by one in this code: - drivers/clk/bcm/clk-raspberrypi.c:374 raspberrypi_discover_clocks() - error: buffer overflow 'data->hws' 16 <= 16 - -The data->hws[] array has RPI_FIRMWARE_NUM_CLK_ID elements so the > -comparison needs to changed to >=. - -Fixes: 12c90f3f27bb ("clk: bcm: rpi: Add variant structure") -Signed-off-by: Dan Carpenter -Link: https://lore.kernel.org/r/5a850b08-d2f5-4794-aceb-a6b468965139@kili.mountain -Reviewed-by: Stefan Wahren -Reviewed-by: Florian Fainelli -Signed-off-by: Stephen Boyd -Signed-off-by: Sasha Levin ---- - drivers/clk/bcm/clk-raspberrypi.c | 4 ++-- - 1 file changed, 2 insertions(+), 2 deletions(-) - -diff --git a/drivers/clk/bcm/clk-raspberrypi.c b/drivers/clk/bcm/clk-raspberrypi.c -index eb399a4d141ba..829406dc44a20 100644 ---- a/drivers/clk/bcm/clk-raspberrypi.c -+++ b/drivers/clk/bcm/clk-raspberrypi.c -@@ -356,9 +356,9 @@ static int raspberrypi_discover_clocks(struct raspberrypi_clk *rpi, - while (clks->id) { - struct raspberrypi_clk_variant *variant; - -- if (clks->id > RPI_FIRMWARE_NUM_CLK_ID) { -+ if (clks->id >= RPI_FIRMWARE_NUM_CLK_ID) { - dev_err(rpi->dev, "Unknown clock id: %u (max: %u)\n", -- clks->id, RPI_FIRMWARE_NUM_CLK_ID); -+ clks->id, RPI_FIRMWARE_NUM_CLK_ID - 1); - return -EINVAL; - } - --- -2.39.2 - diff --git a/queue-6.4/clk-cdce925-check-return-value-of-kasprintf.patch b/queue-6.4/clk-cdce925-check-return-value-of-kasprintf.patch deleted file mode 100644 index a159b47f4d2..00000000000 --- a/queue-6.4/clk-cdce925-check-return-value-of-kasprintf.patch +++ /dev/null @@ -1,63 +0,0 @@ -From 5545d762f1172a0bf98857e948c5075319417ff0 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Tue, 30 May 2023 12:39:07 +0300 -Subject: clk: cdce925: check return value of kasprintf() - -From: Claudiu Beznea - -[ Upstream commit bb7d09ddbf361d51eae46f38e7c8a2b85914ea2a ] - -kasprintf() returns a pointer to dynamically allocated memory. -Pointer could be NULL in case allocation fails. Check pointer validity. -Identified with coccinelle (kmerr.cocci script). - -Fixes: 19fbbbbcd3a3 ("Add TI CDCE925 I2C controlled clock synthesizer driver") -Depends-on: e665f029a283 ("clk: Convert to using %pOFn instead of device_node.name") -Signed-off-by: Claudiu Beznea -Link: https://lore.kernel.org/r/20230530093913.1656095-3-claudiu.beznea@microchip.com -Signed-off-by: Stephen Boyd -Signed-off-by: Sasha Levin ---- - drivers/clk/clk-cdce925.c | 12 ++++++++++++ - 1 file changed, 12 insertions(+) - -diff --git a/drivers/clk/clk-cdce925.c b/drivers/clk/clk-cdce925.c -index 6350682f7e6d2..87890669297d8 100644 ---- a/drivers/clk/clk-cdce925.c -+++ b/drivers/clk/clk-cdce925.c -@@ -701,6 +701,10 @@ static int cdce925_probe(struct i2c_client *client) - for (i = 0; i < data->chip_info->num_plls; ++i) { - pll_clk_name[i] = kasprintf(GFP_KERNEL, "%pOFn.pll%d", - client->dev.of_node, i); -+ if (!pll_clk_name[i]) { -+ err = -ENOMEM; -+ goto error; -+ } - init.name = pll_clk_name[i]; - data->pll[i].chip = data; - data->pll[i].hw.init = &init; -@@ -742,6 +746,10 @@ static int cdce925_probe(struct i2c_client *client) - init.num_parents = 1; - init.parent_names = &parent_name; /* Mux Y1 to input */ - init.name = kasprintf(GFP_KERNEL, "%pOFn.Y1", client->dev.of_node); -+ if (!init.name) { -+ err = -ENOMEM; -+ goto error; -+ } - data->clk[0].chip = data; - data->clk[0].hw.init = &init; - data->clk[0].index = 0; -@@ -760,6 +768,10 @@ static int cdce925_probe(struct i2c_client *client) - for (i = 1; i < data->chip_info->num_outputs; ++i) { - init.name = kasprintf(GFP_KERNEL, "%pOFn.Y%d", - client->dev.of_node, i+1); -+ if (!init.name) { -+ err = -ENOMEM; -+ goto error; -+ } - data->clk[i].chip = data; - data->clk[i].hw.init = &init; - data->clk[i].index = i; --- -2.39.2 - diff --git a/queue-6.4/clk-clocking-wizard-check-return-value-of-devm_kaspr.patch b/queue-6.4/clk-clocking-wizard-check-return-value-of-devm_kaspr.patch deleted file mode 100644 index 85b5a10242e..00000000000 --- a/queue-6.4/clk-clocking-wizard-check-return-value-of-devm_kaspr.patch +++ /dev/null @@ -1,41 +0,0 @@ -From a88051b252675163903d741bdb3f7c863cb015a1 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Tue, 30 May 2023 12:39:13 +0300 -Subject: clk: clocking-wizard: check return value of devm_kasprintf() - -From: Claudiu Beznea - -[ Upstream commit b1356ed1a4461de06dfdc02bf549c3e8750162e5 ] - -devm_kasprintf() returns a pointer to dynamically allocated memory. -Pointer could be NULL in case allocation fails. Check pointer validity. -Identified with coccinelle (kmerr.cocci script). - -Fixes: 2046338dcbc6 ("ARM: mxs: Use soc bus infrastructure") -Signed-off-by: Claudiu Beznea -Link: https://lore.kernel.org/r/20230530093913.1656095-9-claudiu.beznea@microchip.com -Signed-off-by: Stephen Boyd -Signed-off-by: Sasha Levin ---- - drivers/clk/xilinx/clk-xlnx-clock-wizard.c | 5 +++++ - 1 file changed, 5 insertions(+) - -diff --git a/drivers/clk/xilinx/clk-xlnx-clock-wizard.c b/drivers/clk/xilinx/clk-xlnx-clock-wizard.c -index 16df34f46280f..d56822ce6126c 100644 ---- a/drivers/clk/xilinx/clk-xlnx-clock-wizard.c -+++ b/drivers/clk/xilinx/clk-xlnx-clock-wizard.c -@@ -648,6 +648,11 @@ static int clk_wzrd_probe(struct platform_device *pdev) - } - - clkout_name = devm_kasprintf(&pdev->dev, GFP_KERNEL, "%s_out0", dev_name(&pdev->dev)); -+ if (!clkout_name) { -+ ret = -ENOMEM; -+ goto err_disable_clk; -+ } -+ - if (nr_outputs == 1) { - clk_wzrd->clkout[0] = clk_wzrd_register_divider - (&pdev->dev, clkout_name, --- -2.39.2 - diff --git a/queue-6.4/clk-clocking-wizard-fix-oops-in-clk_wzrd_register_di.patch b/queue-6.4/clk-clocking-wizard-fix-oops-in-clk_wzrd_register_di.patch deleted file mode 100644 index 5168c41b66e..00000000000 --- a/queue-6.4/clk-clocking-wizard-fix-oops-in-clk_wzrd_register_di.patch +++ /dev/null @@ -1,40 +0,0 @@ -From 725d8a8d0d2ffd855a009f7191aed85f4cd6c932 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Thu, 11 May 2023 20:01:20 +0300 -Subject: clk: clocking-wizard: Fix Oops in clk_wzrd_register_divider() - -From: Dan Carpenter - -[ Upstream commit 9c632a6396505a019ea6d12b5ab45e659a542a93 ] - -Smatch detected this potential error pointer dereference -clk_wzrd_register_divider(). If devm_clk_hw_register() fails then -it sets "hw" to an error pointer and then dereferences it on the -next line. Return the error directly instead. - -Fixes: 5a853722eb32 ("staging: clocking-wizard: Add support for dynamic reconfiguration") -Signed-off-by: Dan Carpenter -Link: https://lore.kernel.org/r/f0e39b5c-4554-41e0-80d9-54ca3fabd060@kili.mountain -Reviewed-by: Michal Simek -Signed-off-by: Stephen Boyd -Signed-off-by: Sasha Levin ---- - drivers/clk/xilinx/clk-xlnx-clock-wizard.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/drivers/clk/xilinx/clk-xlnx-clock-wizard.c b/drivers/clk/xilinx/clk-xlnx-clock-wizard.c -index e83f104fad029..16df34f46280f 100644 ---- a/drivers/clk/xilinx/clk-xlnx-clock-wizard.c -+++ b/drivers/clk/xilinx/clk-xlnx-clock-wizard.c -@@ -525,7 +525,7 @@ static struct clk *clk_wzrd_register_divider(struct device *dev, - hw = &div->hw; - ret = devm_clk_hw_register(dev, hw); - if (ret) -- hw = ERR_PTR(ret); -+ return ERR_PTR(ret); - - return hw->clk; - } --- -2.39.2 - diff --git a/queue-6.4/clk-export-clk_hw_forward_rate_request.patch b/queue-6.4/clk-export-clk_hw_forward_rate_request.patch deleted file mode 100644 index 3111bc67e30..00000000000 --- a/queue-6.4/clk-export-clk_hw_forward_rate_request.patch +++ /dev/null @@ -1,37 +0,0 @@ -From aa83e427512caa0e4754007830782b8ab4ca37e6 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Fri, 5 May 2023 13:25:03 +0200 -Subject: clk: Export clk_hw_forward_rate_request() - -From: Maxime Ripard - -[ Upstream commit ed046ac74da0b5602566073023a1519b5ae657b7 ] - -Commit 262ca38f4b6e ("clk: Stop forwarding clk_rate_requests to the -parent") introduced the public clk_hw_forward_rate_request() function, -but didn't export the symbol. Make sure it's the case. - -Fixes: 262ca38f4b6e ("clk: Stop forwarding clk_rate_requests to the parent") -Signed-off-by: Maxime Ripard -Link: https://lore.kernel.org/r/20221018-clk-range-checks-fixes-v4-1-971d5077e7d2@cerno.tech -Signed-off-by: Stephen Boyd -Signed-off-by: Sasha Levin ---- - drivers/clk/clk.c | 1 + - 1 file changed, 1 insertion(+) - -diff --git a/drivers/clk/clk.c b/drivers/clk/clk.c -index 27c30a533759a..e495dd7a1eae1 100644 ---- a/drivers/clk/clk.c -+++ b/drivers/clk/clk.c -@@ -1549,6 +1549,7 @@ void clk_hw_forward_rate_request(const struct clk_hw *hw, - parent->core, req, - parent_rate); - } -+EXPORT_SYMBOL_GPL(clk_hw_forward_rate_request); - - static bool clk_core_can_round(struct clk_core * const core) - { --- -2.39.2 - diff --git a/queue-6.4/clk-fix-memory-leak-in-devm_clk_notifier_register.patch b/queue-6.4/clk-fix-memory-leak-in-devm_clk_notifier_register.patch deleted file mode 100644 index 4266d926ae0..00000000000 --- a/queue-6.4/clk-fix-memory-leak-in-devm_clk_notifier_register.patch +++ /dev/null @@ -1,42 +0,0 @@ -From f6a7ada1981d79fdd7694cd685cb327651cbe173 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Mon, 19 Jun 2023 11:22:53 +0800 -Subject: clk: Fix memory leak in devm_clk_notifier_register() - -From: Fei Shao - -[ Upstream commit 7fb933e56f77a57ef7cfc59fc34cbbf1b1fa31ff ] - -devm_clk_notifier_register() allocates a devres resource for clk -notifier but didn't register that to the device, so the notifier didn't -get unregistered on device detach and the allocated resource was leaked. - -Fix the issue by registering the resource through devres_add(). - -This issue was found with kmemleak on a Chromebook. - -Fixes: 6d30d50d037d ("clk: add devm variant of clk_notifier_register") -Signed-off-by: Fei Shao -Link: https://lore.kernel.org/r/20230619112253.v2.1.I13f060c10549ef181603e921291bdea95f83033c@changeid -Reviewed-by: Dan Carpenter -Signed-off-by: Stephen Boyd -Signed-off-by: Sasha Levin ---- - drivers/clk/clk.c | 1 + - 1 file changed, 1 insertion(+) - -diff --git a/drivers/clk/clk.c b/drivers/clk/clk.c -index e495dd7a1eae1..8c13bcf57f1ae 100644 ---- a/drivers/clk/clk.c -+++ b/drivers/clk/clk.c -@@ -4696,6 +4696,7 @@ int devm_clk_notifier_register(struct device *dev, struct clk *clk, - if (!ret) { - devres->clk = clk; - devres->nb = nb; -+ devres_add(dev, devres); - } else { - devres_free(devres); - } --- -2.39.2 - diff --git a/queue-6.4/clk-imx-clk-imx8mn-fix-memory-leak-in-imx8mn_clocks_.patch b/queue-6.4/clk-imx-clk-imx8mn-fix-memory-leak-in-imx8mn_clocks_.patch deleted file mode 100644 index c88eb22b7f4..00000000000 --- a/queue-6.4/clk-imx-clk-imx8mn-fix-memory-leak-in-imx8mn_clocks_.patch +++ /dev/null @@ -1,58 +0,0 @@ -From 9f5ba423ede041b83c8f3facd9fca1372b554f1a Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Tue, 11 Apr 2023 09:51:07 +0800 -Subject: clk: imx: clk-imx8mn: fix memory leak in imx8mn_clocks_probe - -From: Hao Luo - -[ Upstream commit 188d070de9132667956f5aadd98d2bd87d3eac89 ] - -Use devm_of_iomap() instead of of_iomap() to automatically handle -the unused ioremap region. - -If any error occurs, regions allocated by kzalloc() will leak, -but using devm_kzalloc() instead will automatically free the memory -using devm_kfree(). - -Fixes: daeb14545514 ("clk: imx: imx8mn: Switch to clk_hw based API") -Fixes: 96d6392b54db ("clk: imx: Add support for i.MX8MN clock driver") -Signed-off-by: Hao Luo -Reviewed-by: Dongliang Mu -Reviewed-by: Peng Fan -Link: https://lore.kernel.org/r/20230411015107.2645-1-m202171776@hust.edu.cn -Signed-off-by: Abel Vesa -Signed-off-by: Sasha Levin ---- - drivers/clk/imx/clk-imx8mn.c | 8 ++++---- - 1 file changed, 4 insertions(+), 4 deletions(-) - -diff --git a/drivers/clk/imx/clk-imx8mn.c b/drivers/clk/imx/clk-imx8mn.c -index 4b23a46486004..4bd1ed11353b3 100644 ---- a/drivers/clk/imx/clk-imx8mn.c -+++ b/drivers/clk/imx/clk-imx8mn.c -@@ -323,7 +323,7 @@ static int imx8mn_clocks_probe(struct platform_device *pdev) - void __iomem *base; - int ret; - -- clk_hw_data = kzalloc(struct_size(clk_hw_data, hws, -+ clk_hw_data = devm_kzalloc(dev, struct_size(clk_hw_data, hws, - IMX8MN_CLK_END), GFP_KERNEL); - if (WARN_ON(!clk_hw_data)) - return -ENOMEM; -@@ -340,10 +340,10 @@ static int imx8mn_clocks_probe(struct platform_device *pdev) - hws[IMX8MN_CLK_EXT4] = imx_get_clk_hw_by_name(np, "clk_ext4"); - - np = of_find_compatible_node(NULL, NULL, "fsl,imx8mn-anatop"); -- base = of_iomap(np, 0); -+ base = devm_of_iomap(dev, np, 0, NULL); - of_node_put(np); -- if (WARN_ON(!base)) { -- ret = -ENOMEM; -+ if (WARN_ON(IS_ERR(base))) { -+ ret = PTR_ERR(base); - goto unregister_hws; - } - --- -2.39.2 - diff --git a/queue-6.4/clk-imx-clk-imx8mp-improve-error-handling-in-imx8mp_.patch b/queue-6.4/clk-imx-clk-imx8mp-improve-error-handling-in-imx8mp_.patch deleted file mode 100644 index 0dad125e3cb..00000000000 --- a/queue-6.4/clk-imx-clk-imx8mp-improve-error-handling-in-imx8mp_.patch +++ /dev/null @@ -1,85 +0,0 @@ -From 0f5bcf21e22ee68dbefadd5efbac95d5e8381255 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Wed, 3 May 2023 07:06:07 +0000 -Subject: clk: imx: clk-imx8mp: improve error handling in imx8mp_clocks_probe() - -From: Yuxing Liu - -[ Upstream commit 878b02d5f3b56cb090dbe2c70c89273be144087f ] - -Replace of_iomap() and kzalloc() with devm_of_iomap() and devm_kzalloc() -which can automatically release the related memory when the device -or driver is removed or unloaded to avoid potential memory leak. - -In this case, iounmap(anatop_base) in line 427,433 are removed -as manual release is not required. - -Besides, referring to clk-imx8mq.c, check the return code of -of_clk_add_hw_provider, if it returns negtive, print error info -and unregister hws, which makes the program more robust. - -Fixes: 9c140d992676 ("clk: imx: Add support for i.MX8MP clock driver") -Signed-off-by: Yuxing Liu -Reviewed-by: Dongliang Mu -Reviewed-by: Abel Vesa -Link: https://lore.kernel.org/r/20230503070607.2462-1-lyx2022@hust.edu.cn -Signed-off-by: Abel Vesa -Signed-off-by: Sasha Levin ---- - drivers/clk/imx/clk-imx8mp.c | 24 +++++++++++++----------- - 1 file changed, 13 insertions(+), 11 deletions(-) - -diff --git a/drivers/clk/imx/clk-imx8mp.c b/drivers/clk/imx/clk-imx8mp.c -index f26ae8de4cc6f..1469249386dd8 100644 ---- a/drivers/clk/imx/clk-imx8mp.c -+++ b/drivers/clk/imx/clk-imx8mp.c -@@ -414,25 +414,22 @@ static int imx8mp_clocks_probe(struct platform_device *pdev) - struct device *dev = &pdev->dev; - struct device_node *np; - void __iomem *anatop_base, *ccm_base; -+ int err; - - np = of_find_compatible_node(NULL, NULL, "fsl,imx8mp-anatop"); -- anatop_base = of_iomap(np, 0); -+ anatop_base = devm_of_iomap(dev, np, 0, NULL); - of_node_put(np); -- if (WARN_ON(!anatop_base)) -- return -ENOMEM; -+ if (WARN_ON(IS_ERR(anatop_base))) -+ return PTR_ERR(anatop_base); - - np = dev->of_node; - ccm_base = devm_platform_ioremap_resource(pdev, 0); -- if (WARN_ON(IS_ERR(ccm_base))) { -- iounmap(anatop_base); -+ if (WARN_ON(IS_ERR(ccm_base))) - return PTR_ERR(ccm_base); -- } - -- clk_hw_data = kzalloc(struct_size(clk_hw_data, hws, IMX8MP_CLK_END), GFP_KERNEL); -- if (WARN_ON(!clk_hw_data)) { -- iounmap(anatop_base); -+ clk_hw_data = devm_kzalloc(dev, struct_size(clk_hw_data, hws, IMX8MP_CLK_END), GFP_KERNEL); -+ if (WARN_ON(!clk_hw_data)) - return -ENOMEM; -- } - - clk_hw_data->num = IMX8MP_CLK_END; - hws = clk_hw_data->hws; -@@ -722,7 +719,12 @@ static int imx8mp_clocks_probe(struct platform_device *pdev) - - imx_check_clk_hws(hws, IMX8MP_CLK_END); - -- of_clk_add_hw_provider(np, of_clk_hw_onecell_get, clk_hw_data); -+ err = of_clk_add_hw_provider(np, of_clk_hw_onecell_get, clk_hw_data); -+ if (err < 0) { -+ dev_err(dev, "failed to register hws for i.MX8MP\n"); -+ imx_unregister_hw_clocks(hws, IMX8MP_CLK_END); -+ return err; -+ } - - imx_register_uart_clocks(); - --- -2.39.2 - diff --git a/queue-6.4/clk-imx-clk-imxrt1050-fix-memory-leak-in-imxrt1050_c.patch b/queue-6.4/clk-imx-clk-imxrt1050-fix-memory-leak-in-imxrt1050_c.patch deleted file mode 100644 index 04950752687..00000000000 --- a/queue-6.4/clk-imx-clk-imxrt1050-fix-memory-leak-in-imxrt1050_c.patch +++ /dev/null @@ -1,88 +0,0 @@ -From 263dd016bcc7e10aad7b217d427a49d9b23f90a3 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Tue, 18 Apr 2023 11:34:51 +0000 -Subject: clk: imx: clk-imxrt1050: fix memory leak in imxrt1050_clocks_probe - -From: Kai Ma - -[ Upstream commit 1b280598ab3bd8a2dc8b96a12530d5b1ee7a8f4a ] - -Use devm_of_iomap() instead of of_iomap() to automatically -handle the unused ioremap region. If any error occurs, regions allocated by -kzalloc() will leak, but using devm_kzalloc() instead will automatically -free the memory using devm_kfree(). - -Also, fix error handling of hws by adding unregister_hws label, which -unregisters remaining hws when iomap failed. - -Fixes: 7154b046d8f3 ("clk: imx: Add initial support for i.MXRT1050 clock driver") -Signed-off-by: Kai Ma -Reviewed-by: Peng Fan -Acked-by: Jesse Taube -Reviewed-by: Abel Vesa -Link: https://lore.kernel.org/r/20230418113451.151312-1-kaima@hust.edu.cn -Signed-off-by: Abel Vesa -Signed-off-by: Sasha Levin ---- - drivers/clk/imx/clk-imxrt1050.c | 22 +++++++++++++++------- - 1 file changed, 15 insertions(+), 7 deletions(-) - -diff --git a/drivers/clk/imx/clk-imxrt1050.c b/drivers/clk/imx/clk-imxrt1050.c -index fd5c51fc92c0e..08d155feb035a 100644 ---- a/drivers/clk/imx/clk-imxrt1050.c -+++ b/drivers/clk/imx/clk-imxrt1050.c -@@ -42,7 +42,7 @@ static int imxrt1050_clocks_probe(struct platform_device *pdev) - struct device_node *anp; - int ret; - -- clk_hw_data = kzalloc(struct_size(clk_hw_data, hws, -+ clk_hw_data = devm_kzalloc(dev, struct_size(clk_hw_data, hws, - IMXRT1050_CLK_END), GFP_KERNEL); - if (WARN_ON(!clk_hw_data)) - return -ENOMEM; -@@ -53,10 +53,12 @@ static int imxrt1050_clocks_probe(struct platform_device *pdev) - hws[IMXRT1050_CLK_OSC] = imx_get_clk_hw_by_name(np, "osc"); - - anp = of_find_compatible_node(NULL, NULL, "fsl,imxrt-anatop"); -- pll_base = of_iomap(anp, 0); -+ pll_base = devm_of_iomap(dev, anp, 0, NULL); - of_node_put(anp); -- if (WARN_ON(!pll_base)) -- return -ENOMEM; -+ if (WARN_ON(IS_ERR(pll_base))) { -+ ret = PTR_ERR(pll_base); -+ goto unregister_hws; -+ } - - /* Anatop clocks */ - hws[IMXRT1050_CLK_DUMMY] = imx_clk_hw_fixed("dummy", 0UL); -@@ -104,8 +106,10 @@ static int imxrt1050_clocks_probe(struct platform_device *pdev) - - /* CCM clocks */ - ccm_base = devm_platform_ioremap_resource(pdev, 0); -- if (WARN_ON(IS_ERR(ccm_base))) -- return PTR_ERR(ccm_base); -+ if (WARN_ON(IS_ERR(ccm_base))) { -+ ret = PTR_ERR(ccm_base); -+ goto unregister_hws; -+ } - - hws[IMXRT1050_CLK_ARM_PODF] = imx_clk_hw_divider("arm_podf", "pll1_arm", ccm_base + 0x10, 0, 3); - hws[IMXRT1050_CLK_PRE_PERIPH_SEL] = imx_clk_hw_mux("pre_periph_sel", ccm_base + 0x18, 18, 2, -@@ -149,8 +153,12 @@ static int imxrt1050_clocks_probe(struct platform_device *pdev) - ret = of_clk_add_hw_provider(np, of_clk_hw_onecell_get, clk_hw_data); - if (ret < 0) { - dev_err(dev, "Failed to register clks for i.MXRT1050.\n"); -- imx_unregister_hw_clocks(hws, IMXRT1050_CLK_END); -+ goto unregister_hws; - } -+ return 0; -+ -+unregister_hws: -+ imx_unregister_hw_clocks(hws, IMXRT1050_CLK_END); - return ret; - } - static const struct of_device_id imxrt1050_clk_of_match[] = { --- -2.39.2 - diff --git a/queue-6.4/clk-imx-composite-8m-add-imx8m_divider_determine_rat.patch b/queue-6.4/clk-imx-composite-8m-add-imx8m_divider_determine_rat.patch deleted file mode 100644 index e0580b2202a..00000000000 --- a/queue-6.4/clk-imx-composite-8m-add-imx8m_divider_determine_rat.patch +++ /dev/null @@ -1,113 +0,0 @@ -From 22e6a85c58b72caae91a1354a59a25c96f7f5a9f Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Sat, 6 May 2023 14:53:25 -0500 -Subject: clk: imx: composite-8m: Add imx8m_divider_determine_rate - -From: Adam Ford - -[ Upstream commit 8208181fe536bba3b411508f81c4426fc9c71d9a ] - -Currently, certain clocks are derrived as a divider from their -parent clock. For some clocks, even when CLK_SET_RATE_PARENT -is set, the parent clock is not properly set which can lead -to some relatively inaccurate clock values. - -Unlike imx/clk-composite-93 and imx/clk-divider-gate, it -cannot rely on calling a standard determine_rate function, -because the 8m composite clocks have a pre-divider and -post-divider. Because of this, a custom determine_rate -function is necessary to determine the maximum clock -division which is equivalent to pre-divider * the -post-divider. - -With this added, the system can attempt to adjust the parent rate -when the proper flags are set which can lead to a more precise clock -value. - -On the imx8mplus, no clock changes are present. -On the Mini and Nano, this can help achieve more accurate -lcdif clocks. When trying to get a pixel clock of 31.500MHz -on an imx8m Nano, the clocks divided the 594MHz down, but -left the parent rate untouched which caused a calulation error. - -Before: -video_pll 594000000 - video_pll_bypass 594000000 - video_pll_out 594000000 - disp_pixel 31263158 - disp_pixel_clk 31263158 - -Variance = -236842 Hz - -After this patch: -video_pll 31500000 - video_pll_bypass 31500000 - video_pll_out 31500000 - disp_pixel 31500000 - disp_pixel_clk 31500000 - -Variance = 0 Hz - -All other clocks rates and parent were the same. -Similar results on imx8mm were found. - -Fixes: 690dccc4a0bf ("Revert "clk: imx: composite-8m: Add support to determine_rate"") -Signed-off-by: Adam Ford -Reviewed-by: Abel Vesa -Tested-by: Fabio Estevam -Link: https://lore.kernel.org/r/20230506195325.876871-1-aford173@gmail.com -Signed-off-by: Abel Vesa -Signed-off-by: Sasha Levin ---- - drivers/clk/imx/clk-composite-8m.c | 31 ++++++++++++++++++++++++++++++ - 1 file changed, 31 insertions(+) - -diff --git a/drivers/clk/imx/clk-composite-8m.c b/drivers/clk/imx/clk-composite-8m.c -index cbf0d7955a00a..7a6e3ce97133b 100644 ---- a/drivers/clk/imx/clk-composite-8m.c -+++ b/drivers/clk/imx/clk-composite-8m.c -@@ -119,10 +119,41 @@ static int imx8m_clk_composite_divider_set_rate(struct clk_hw *hw, - return ret; - } - -+static int imx8m_divider_determine_rate(struct clk_hw *hw, -+ struct clk_rate_request *req) -+{ -+ struct clk_divider *divider = to_clk_divider(hw); -+ int prediv_value; -+ int div_value; -+ -+ /* if read only, just return current value */ -+ if (divider->flags & CLK_DIVIDER_READ_ONLY) { -+ u32 val; -+ -+ val = readl(divider->reg); -+ prediv_value = val >> divider->shift; -+ prediv_value &= clk_div_mask(divider->width); -+ prediv_value++; -+ -+ div_value = val >> PCG_DIV_SHIFT; -+ div_value &= clk_div_mask(PCG_DIV_WIDTH); -+ div_value++; -+ -+ return divider_ro_determine_rate(hw, req, divider->table, -+ PCG_PREDIV_WIDTH + PCG_DIV_WIDTH, -+ divider->flags, prediv_value * div_value); -+ } -+ -+ return divider_determine_rate(hw, req, divider->table, -+ PCG_PREDIV_WIDTH + PCG_DIV_WIDTH, -+ divider->flags); -+} -+ - static const struct clk_ops imx8m_clk_composite_divider_ops = { - .recalc_rate = imx8m_clk_composite_divider_recalc_rate, - .round_rate = imx8m_clk_composite_divider_round_rate, - .set_rate = imx8m_clk_composite_divider_set_rate, -+ .determine_rate = imx8m_divider_determine_rate, - }; - - static u8 imx8m_clk_composite_mux_get_parent(struct clk_hw *hw) --- -2.39.2 - diff --git a/queue-6.4/clk-imx-scu-use-_safe-list-iterator-to-avoid-a-use-a.patch b/queue-6.4/clk-imx-scu-use-_safe-list-iterator-to-avoid-a-use-a.patch deleted file mode 100644 index d48aed0f568..00000000000 --- a/queue-6.4/clk-imx-scu-use-_safe-list-iterator-to-avoid-a-use-a.patch +++ /dev/null @@ -1,44 +0,0 @@ -From 5aaf9acd377afe38a427d2223cd0698e361701d4 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Wed, 19 Apr 2023 17:23:01 +0300 -Subject: clk: imx: scu: use _safe list iterator to avoid a use after free - -From: Dan Carpenter - -[ Upstream commit 632c60ecd25dbacee54d5581fe3aeb834b57010a ] - -This loop is freeing "clk" so it needs to use list_for_each_entry_safe(). -Otherwise it dereferences a freed variable to get the next item on the -loop. - -Fixes: 77d8f3068c63 ("clk: imx: scu: add two cells binding support") -Signed-off-by: Dan Carpenter -Reviewed-by: Abel Vesa -Link: https://lore.kernel.org/r/0793fbd1-d2b5-4ec2-9403-3c39343a3e2d@kili.mountain -Signed-off-by: Abel Vesa -Signed-off-by: Sasha Levin ---- - drivers/clk/imx/clk-scu.c | 4 ++-- - 1 file changed, 2 insertions(+), 2 deletions(-) - -diff --git a/drivers/clk/imx/clk-scu.c b/drivers/clk/imx/clk-scu.c -index 1e6870f3671f6..db307890e4c16 100644 ---- a/drivers/clk/imx/clk-scu.c -+++ b/drivers/clk/imx/clk-scu.c -@@ -707,11 +707,11 @@ struct clk_hw *imx_clk_scu_alloc_dev(const char *name, - - void imx_clk_scu_unregister(void) - { -- struct imx_scu_clk_node *clk; -+ struct imx_scu_clk_node *clk, *n; - int i; - - for (i = 0; i < IMX_SC_R_LAST; i++) { -- list_for_each_entry(clk, &imx_scu_clks[i], node) { -+ list_for_each_entry_safe(clk, n, &imx_scu_clks[i], node) { - clk_hw_unregister(clk->hw); - kfree(clk); - } --- -2.39.2 - diff --git a/queue-6.4/clk-imx93-fix-memory-leak-and-missing-unwind-goto-in.patch b/queue-6.4/clk-imx93-fix-memory-leak-and-missing-unwind-goto-in.patch deleted file mode 100644 index 97a9d881b7e..00000000000 --- a/queue-6.4/clk-imx93-fix-memory-leak-and-missing-unwind-goto-in.patch +++ /dev/null @@ -1,84 +0,0 @@ -From 9a6b90a2ad242fe2edbc42503c3efb1fd52bb268 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Thu, 1 Jun 2023 03:38:25 +0000 -Subject: clk: imx93: fix memory leak and missing unwind goto in - imx93_clocks_probe - -From: Zhanhao Hu - -[ Upstream commit e02ba11b457647050cb16e7cad16cec3c252fade ] - -In function probe(), it returns directly without unregistered hws -when error occurs. - -Fix this by adding 'goto unregister_hws;' on line 295 and -line 310. - -Use devm_kzalloc() instead of kzalloc() to automatically -free the memory using devm_kfree() when error occurs. - -Replace of_iomap() with devm_of_iomap() to automatically -handle the unused ioremap region and delete 'iounmap(anatop_base);' -in unregister_hws. - -Fixes: 24defbe194b6 ("clk: imx: add i.MX93 clk") -Signed-off-by: Zhanhao Hu -Reviewed-by: Abel Vesa -Link: https://lore.kernel.org/r/20230601033825.336558-1-zero12113@hust.edu.cn -Signed-off-by: Abel Vesa -Signed-off-by: Sasha Levin ---- - drivers/clk/imx/clk-imx93.c | 15 ++++++++------- - 1 file changed, 8 insertions(+), 7 deletions(-) - -diff --git a/drivers/clk/imx/clk-imx93.c b/drivers/clk/imx/clk-imx93.c -index 07b4a043e4495..b6c7c2725906c 100644 ---- a/drivers/clk/imx/clk-imx93.c -+++ b/drivers/clk/imx/clk-imx93.c -@@ -264,7 +264,7 @@ static int imx93_clocks_probe(struct platform_device *pdev) - void __iomem *base, *anatop_base; - int i, ret; - -- clk_hw_data = kzalloc(struct_size(clk_hw_data, hws, -+ clk_hw_data = devm_kzalloc(dev, struct_size(clk_hw_data, hws, - IMX93_CLK_END), GFP_KERNEL); - if (!clk_hw_data) - return -ENOMEM; -@@ -288,10 +288,12 @@ static int imx93_clocks_probe(struct platform_device *pdev) - "sys_pll_pfd2", 1, 2); - - np = of_find_compatible_node(NULL, NULL, "fsl,imx93-anatop"); -- anatop_base = of_iomap(np, 0); -+ anatop_base = devm_of_iomap(dev, np, 0, NULL); - of_node_put(np); -- if (WARN_ON(!anatop_base)) -- return -ENOMEM; -+ if (WARN_ON(IS_ERR(anatop_base))) { -+ ret = PTR_ERR(base); -+ goto unregister_hws; -+ } - - clks[IMX93_CLK_ARM_PLL] = imx_clk_fracn_gppll_integer("arm_pll", "osc_24m", - anatop_base + 0x1000, -@@ -304,8 +306,8 @@ static int imx93_clocks_probe(struct platform_device *pdev) - np = dev->of_node; - base = devm_platform_ioremap_resource(pdev, 0); - if (WARN_ON(IS_ERR(base))) { -- iounmap(anatop_base); -- return PTR_ERR(base); -+ ret = PTR_ERR(base); -+ goto unregister_hws; - } - - for (i = 0; i < ARRAY_SIZE(root_array); i++) { -@@ -345,7 +347,6 @@ static int imx93_clocks_probe(struct platform_device *pdev) - - unregister_hws: - imx_unregister_hw_clocks(clks, IMX93_CLK_END); -- iounmap(anatop_base); - - return ret; - } --- -2.39.2 - diff --git a/queue-6.4/clk-keystone-sci-clk-check-return-value-of-kasprintf.patch b/queue-6.4/clk-keystone-sci-clk-check-return-value-of-kasprintf.patch deleted file mode 100644 index d82d387f39e..00000000000 --- a/queue-6.4/clk-keystone-sci-clk-check-return-value-of-kasprintf.patch +++ /dev/null @@ -1,40 +0,0 @@ -From 0d372126237f8b3cf91c5b867c61faa126c9f09a Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Tue, 30 May 2023 12:39:11 +0300 -Subject: clk: keystone: sci-clk: check return value of kasprintf() - -From: Claudiu Beznea - -[ Upstream commit b73ed981da6d25c921aaefa7ca3df85bbd85b7fc ] - -kasprintf() returns a pointer to dynamically allocated memory. -Pointer could be NULL in case allocation fails. Check pointer validity. -Identified with coccinelle (kmerr.cocci script). - -Fixes: b745c0794e2f ("clk: keystone: Add sci-clk driver support") -Depends-on: 96488c09b0f4 ("clk: keystone: sci-clk: cut down the clock name length") -Signed-off-by: Claudiu Beznea -Link: https://lore.kernel.org/r/20230530093913.1656095-7-claudiu.beznea@microchip.com -Reviewed-by: Tony Lindgren -Signed-off-by: Stephen Boyd -Signed-off-by: Sasha Levin ---- - drivers/clk/keystone/sci-clk.c | 2 ++ - 1 file changed, 2 insertions(+) - -diff --git a/drivers/clk/keystone/sci-clk.c b/drivers/clk/keystone/sci-clk.c -index 910ecd58c4ca2..6c1df4f11536d 100644 ---- a/drivers/clk/keystone/sci-clk.c -+++ b/drivers/clk/keystone/sci-clk.c -@@ -294,6 +294,8 @@ static int _sci_clk_build(struct sci_clk_provider *provider, - - name = kasprintf(GFP_KERNEL, "clk:%d:%d", sci_clk->dev_id, - sci_clk->clk_id); -+ if (!name) -+ return -ENOMEM; - - init.name = name; - --- -2.39.2 - diff --git a/queue-6.4/clk-mediatek-clk-mt8173-apmixedsys-fix-iomap-not-rel.patch b/queue-6.4/clk-mediatek-clk-mt8173-apmixedsys-fix-iomap-not-rel.patch deleted file mode 100644 index 73ab29b48bd..00000000000 --- a/queue-6.4/clk-mediatek-clk-mt8173-apmixedsys-fix-iomap-not-rel.patch +++ /dev/null @@ -1,49 +0,0 @@ -From 8b0b7db8639c4a2335dc521be3e7fbd7f8f02676 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Thu, 15 Jun 2023 14:20:51 +0200 -Subject: clk: mediatek: clk-mt8173-apmixedsys: Fix iomap not released issue - -From: AngeloGioacchino Del Regno - -[ Upstream commit b270ae61730e0ebccee39a21dd3311d6896a38ae ] - -In case of error after of_ioremap() the resource must be released: -call iounmap() where appropriate to fix that. - -Fixes: 41138fbf876c ("clk: mediatek: mt8173: Migrate to platform driver and common probe") -Signed-off-by: AngeloGioacchino Del Regno -Link: https://lore.kernel.org/r/20230615122051.546985-4-angelogioacchino.delregno@collabora.com -Reviewed-by: Chen-Yu Tsai -Signed-off-by: Stephen Boyd -Signed-off-by: Sasha Levin ---- - drivers/clk/mediatek/clk-mt8173-apmixedsys.c | 5 ++++- - 1 file changed, 4 insertions(+), 1 deletion(-) - -diff --git a/drivers/clk/mediatek/clk-mt8173-apmixedsys.c b/drivers/clk/mediatek/clk-mt8173-apmixedsys.c -index c7adcfcc12e27..307c24aa1fb41 100644 ---- a/drivers/clk/mediatek/clk-mt8173-apmixedsys.c -+++ b/drivers/clk/mediatek/clk-mt8173-apmixedsys.c -@@ -151,8 +151,10 @@ static int clk_mt8173_apmixed_probe(struct platform_device *pdev) - return -ENOMEM; - - clk_data = mtk_alloc_clk_data(CLK_APMIXED_NR_CLK); -- if (IS_ERR_OR_NULL(clk_data)) -+ if (IS_ERR_OR_NULL(clk_data)) { -+ iounmap(base); - return -ENOMEM; -+ } - - fhctl_parse_dt(fhctl_node, pllfhs, ARRAY_SIZE(pllfhs)); - r = mtk_clk_register_pllfhs(node, plls, ARRAY_SIZE(plls), -@@ -186,6 +188,7 @@ static int clk_mt8173_apmixed_probe(struct platform_device *pdev) - ARRAY_SIZE(pllfhs), clk_data); - free_clk_data: - mtk_free_clk_data(clk_data); -+ iounmap(base); - return r; - } - --- -2.39.2 - diff --git a/queue-6.4/clk-mediatek-clk-mt8173-apmixedsys-fix-return-value-.patch b/queue-6.4/clk-mediatek-clk-mt8173-apmixedsys-fix-return-value-.patch deleted file mode 100644 index 6abd625f145..00000000000 --- a/queue-6.4/clk-mediatek-clk-mt8173-apmixedsys-fix-return-value-.patch +++ /dev/null @@ -1,41 +0,0 @@ -From a7278329531ec3e966a7da2c3cf52e85aaaf05a3 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Thu, 15 Jun 2023 14:20:50 +0200 -Subject: clk: mediatek: clk-mt8173-apmixedsys: Fix return value for of_iomap() - error - -From: AngeloGioacchino Del Regno - -[ Upstream commit 3dc265b369ee61db999d6d1588e888eb21dc421e ] - -The of_iomap() function returns NULL in case of error so usage of -PTR_ERR() is wrong! -Change that to return -ENOMEM in case of failure. - -Fixes: 41138fbf876c ("clk: mediatek: mt8173: Migrate to platform driver and common probe") -Signed-off-by: AngeloGioacchino Del Regno -Link: https://lore.kernel.org/r/20230615122051.546985-3-angelogioacchino.delregno@collabora.com -Reviewed-by: Chen-Yu Tsai -Reviewed-by: Markus Schneider-Pargmann -Signed-off-by: Stephen Boyd -Signed-off-by: Sasha Levin ---- - drivers/clk/mediatek/clk-mt8173-apmixedsys.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/drivers/clk/mediatek/clk-mt8173-apmixedsys.c b/drivers/clk/mediatek/clk-mt8173-apmixedsys.c -index 8c2aa8b0f39ea..c7adcfcc12e27 100644 ---- a/drivers/clk/mediatek/clk-mt8173-apmixedsys.c -+++ b/drivers/clk/mediatek/clk-mt8173-apmixedsys.c -@@ -148,7 +148,7 @@ static int clk_mt8173_apmixed_probe(struct platform_device *pdev) - - base = of_iomap(node, 0); - if (!base) -- return PTR_ERR(base); -+ return -ENOMEM; - - clk_data = mtk_alloc_clk_data(CLK_APMIXED_NR_CLK); - if (IS_ERR_OR_NULL(clk_data)) --- -2.39.2 - diff --git a/queue-6.4/clk-mediatek-clk-mtk-grab-iomem-pointer-for-divider-.patch b/queue-6.4/clk-mediatek-clk-mtk-grab-iomem-pointer-for-divider-.patch deleted file mode 100644 index 1ef6f2f7d1a..00000000000 --- a/queue-6.4/clk-mediatek-clk-mtk-grab-iomem-pointer-for-divider-.patch +++ /dev/null @@ -1,60 +0,0 @@ -From 5d9310d6ebe6f77d365dd9450a769d4c0225c916 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Thu, 15 Jun 2023 14:20:49 +0200 -Subject: clk: mediatek: clk-mtk: Grab iomem pointer for divider clocks - -From: AngeloGioacchino Del Regno - -[ Upstream commit 51821765e89906090753421580a61d25a4668186 ] - -In the rare case in which one of the clock drivers has divider clocks -but not composite clocks, mtk_clk_simple_probe() would not io(re)map, -hence passing a NULL pointer to mtk_clk_register_dividers(). - -To fix this issue, extend the `if` conditional to also check if any -divider clocks are present. While at it, also make sure the iomem -pointer is NULL if no composite/divider clocks are declared, as we -are checking for that when iounmapping it in the error path. - -This hasn't been seen on any MediaTek clock driver as the current ones -always declare composite clocks along with divider clocks, but this is -still an important fix for a future potential KP. - -Fixes: 1fe074b1f112 ("clk: mediatek: Add divider clocks to mtk_clk_simple_{probe,remove}()") -Signed-off-by: AngeloGioacchino Del Regno -Link: https://lore.kernel.org/r/20230615122051.546985-2-angelogioacchino.delregno@collabora.com -Reviewed-by: Chen-Yu Tsai -Reviewed-by: Markus Schneider-Pargmann -Signed-off-by: Stephen Boyd -Signed-off-by: Sasha Levin ---- - drivers/clk/mediatek/clk-mtk.c | 6 +++--- - 1 file changed, 3 insertions(+), 3 deletions(-) - -diff --git a/drivers/clk/mediatek/clk-mtk.c b/drivers/clk/mediatek/clk-mtk.c -index 3c50f48e93a7b..affaf52c82bd4 100644 ---- a/drivers/clk/mediatek/clk-mtk.c -+++ b/drivers/clk/mediatek/clk-mtk.c -@@ -469,7 +469,7 @@ static int __mtk_clk_simple_probe(struct platform_device *pdev, - const struct platform_device_id *id; - const struct mtk_clk_desc *mcd; - struct clk_hw_onecell_data *clk_data; -- void __iomem *base; -+ void __iomem *base = NULL; - int num_clks, r; - - mcd = device_get_match_data(&pdev->dev); -@@ -483,8 +483,8 @@ static int __mtk_clk_simple_probe(struct platform_device *pdev, - return -EINVAL; - } - -- /* Composite clocks needs us to pass iomem pointer */ -- if (mcd->composite_clks) { -+ /* Composite and divider clocks needs us to pass iomem pointer */ -+ if (mcd->composite_clks || mcd->divider_clks) { - if (!mcd->shared_io) - base = devm_platform_ioremap_resource(pdev, 0); - else --- -2.39.2 - diff --git a/queue-6.4/clk-mediatek-fix-of_iomap-memory-leak.patch b/queue-6.4/clk-mediatek-fix-of_iomap-memory-leak.patch deleted file mode 100644 index 5bd678615c2..00000000000 --- a/queue-6.4/clk-mediatek-fix-of_iomap-memory-leak.patch +++ /dev/null @@ -1,56 +0,0 @@ -From ffab5b504089c874f308a51d0da1a20e479e5590 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Sat, 22 Apr 2023 08:43:31 +0000 -Subject: clk: mediatek: fix of_iomap memory leak - -From: Bosi Zhang - -[ Upstream commit 3db7285e044144fd88a356f5b641b9cd4b231a77 ] - -Smatch reports: -drivers/clk/mediatek/clk-mtk.c:583 mtk_clk_simple_probe() warn: - 'base' from of_iomap() not released on lines: 496. - -This problem was also found in linux-next. In mtk_clk_simple_probe(), -base is not released when handling errors -if clk_data is not existed, which may cause a leak. -So free_base should be added here to release base. - -Fixes: c58cd0e40ffa ("clk: mediatek: Add mtk_clk_simple_probe() to simplify clock providers") -Signed-off-by: Bosi Zhang -Reviewed-by: Dongliang Mu -Link: https://lore.kernel.org/r/20230422084331.47198-1-u201911157@hust.edu.cn -Signed-off-by: Stephen Boyd -Signed-off-by: Sasha Levin ---- - drivers/clk/mediatek/clk-mtk.c | 7 +++++-- - 1 file changed, 5 insertions(+), 2 deletions(-) - -diff --git a/drivers/clk/mediatek/clk-mtk.c b/drivers/clk/mediatek/clk-mtk.c -index fd2214c3242f2..3c50f48e93a7b 100644 ---- a/drivers/clk/mediatek/clk-mtk.c -+++ b/drivers/clk/mediatek/clk-mtk.c -@@ -500,8 +500,10 @@ static int __mtk_clk_simple_probe(struct platform_device *pdev, - num_clks += mcd->num_mux_clks + mcd->num_divider_clks; - - clk_data = mtk_alloc_clk_data(num_clks); -- if (!clk_data) -- return -ENOMEM; -+ if (!clk_data) { -+ r = -ENOMEM; -+ goto free_base; -+ } - - if (mcd->fixed_clks) { - r = mtk_clk_register_fixed_clks(mcd->fixed_clks, -@@ -599,6 +601,7 @@ static int __mtk_clk_simple_probe(struct platform_device *pdev, - mcd->num_fixed_clks, clk_data); - free_data: - mtk_free_clk_data(clk_data); -+free_base: - if (mcd->shared_io && base) - iounmap(base); - return r; --- -2.39.2 - diff --git a/queue-6.4/clk-renesas-rzg2l-fix-cpg_sipll5_clk1-register-write.patch b/queue-6.4/clk-renesas-rzg2l-fix-cpg_sipll5_clk1-register-write.patch deleted file mode 100644 index 03b2b000ee5..00000000000 --- a/queue-6.4/clk-renesas-rzg2l-fix-cpg_sipll5_clk1-register-write.patch +++ /dev/null @@ -1,59 +0,0 @@ -From 5dc99f8849be794a880863f24aeaa685abbc4b4c Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Thu, 18 May 2023 16:23:34 +0100 -Subject: clk: renesas: rzg2l: Fix CPG_SIPLL5_CLK1 register write - -From: Biju Das - -[ Upstream commit d1c20885d3b01e6a62e920af4b227abd294d22f3 ] - -As per the RZ/G2L HW(Rev.1.30 May2023) manual, there are no "write enable" -bits in the CPG_SIPLL5_CLK1 register. So fix the CPG_SIPLL5_CLK register -write by removing the "write enable" bits. - -Fixes: 1561380ee72f ("clk: renesas: rzg2l: Add FOUTPOSTDIV clk support") -Signed-off-by: Biju Das -Reviewed-by: Geert Uytterhoeven -Link: https://lore.kernel.org/r/20230518152334.514922-1-biju.das.jz@bp.renesas.com -[geert: Remove CPG_SIPLL5_CLK1_*_WEN bit definitions] -Signed-off-by: Geert Uytterhoeven -Signed-off-by: Sasha Levin ---- - drivers/clk/renesas/rzg2l-cpg.c | 6 ++---- - drivers/clk/renesas/rzg2l-cpg.h | 3 --- - 2 files changed, 2 insertions(+), 7 deletions(-) - -diff --git a/drivers/clk/renesas/rzg2l-cpg.c b/drivers/clk/renesas/rzg2l-cpg.c -index 93b02cdc98c25..ca8b921c77625 100644 ---- a/drivers/clk/renesas/rzg2l-cpg.c -+++ b/drivers/clk/renesas/rzg2l-cpg.c -@@ -603,10 +603,8 @@ static int rzg2l_cpg_sipll5_set_rate(struct clk_hw *hw, - } - - /* Output clock setting 1 */ -- writel(CPG_SIPLL5_CLK1_POSTDIV1_WEN | CPG_SIPLL5_CLK1_POSTDIV2_WEN | -- CPG_SIPLL5_CLK1_REFDIV_WEN | (params.pl5_postdiv1 << 0) | -- (params.pl5_postdiv2 << 4) | (params.pl5_refdiv << 8), -- priv->base + CPG_SIPLL5_CLK1); -+ writel((params.pl5_postdiv1 << 0) | (params.pl5_postdiv2 << 4) | -+ (params.pl5_refdiv << 8), priv->base + CPG_SIPLL5_CLK1); - - /* Output clock setting, SSCG modulation value setting 3 */ - writel((params.pl5_fracin << 8), priv->base + CPG_SIPLL5_CLK3); -diff --git a/drivers/clk/renesas/rzg2l-cpg.h b/drivers/clk/renesas/rzg2l-cpg.h -index eee780276a9e2..6cee9e56acc72 100644 ---- a/drivers/clk/renesas/rzg2l-cpg.h -+++ b/drivers/clk/renesas/rzg2l-cpg.h -@@ -32,9 +32,6 @@ - #define CPG_SIPLL5_STBY_RESETB_WEN BIT(16) - #define CPG_SIPLL5_STBY_SSCG_EN_WEN BIT(18) - #define CPG_SIPLL5_STBY_DOWNSPREAD_WEN BIT(20) --#define CPG_SIPLL5_CLK1_POSTDIV1_WEN BIT(16) --#define CPG_SIPLL5_CLK1_POSTDIV2_WEN BIT(20) --#define CPG_SIPLL5_CLK1_REFDIV_WEN BIT(24) - #define CPG_SIPLL5_CLK4_RESV_LSB (0xFF) - #define CPG_SIPLL5_MON_PLL5_LOCK BIT(4) - --- -2.39.2 - diff --git a/queue-6.4/clk-rs9-fix-.driver_data-content-in-i2c_device_id.patch b/queue-6.4/clk-rs9-fix-.driver_data-content-in-i2c_device_id.patch deleted file mode 100644 index 7c947ffff7c..00000000000 --- a/queue-6.4/clk-rs9-fix-.driver_data-content-in-i2c_device_id.patch +++ /dev/null @@ -1,45 +0,0 @@ -From 34e83ef4a0312fa1c86ce55ef2fb57d4844f8abf Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Sun, 7 May 2023 15:39:06 +0200 -Subject: clk: rs9: Fix .driver_data content in i2c_device_id - -From: Marek Vasut - -[ Upstream commit ad527ca87e4ea42d7baad2ce710b44069287931b ] - -The .driver_data content in i2c_device_id table must match the -.data content in of_device_id table, else device_get_match_data() -would return bogus value on i2c_device_id match. Align the two -tables. - -The i2c_device_id table is now converted from of_device_id using -'s@.compatible = "renesas,\([^"]\+"\), .data = \(.*\)@"\1, .driver_data = (kernel_ulong_t)\2@' - -Fixes: 892e0ddea1aa ("clk: rs9: Add Renesas 9-series PCIe clock generator driver") -Signed-off-by: Marek Vasut -Link: https://lore.kernel.org/r/20230507133906.15061-3-marek.vasut+renesas@mailbox.org -Reviewed-by: Geert Uytterhoeven -Signed-off-by: Stephen Boyd -Signed-off-by: Sasha Levin ---- - drivers/clk/clk-renesas-pcie.c | 4 ++-- - 1 file changed, 2 insertions(+), 2 deletions(-) - -diff --git a/drivers/clk/clk-renesas-pcie.c b/drivers/clk/clk-renesas-pcie.c -index 10d31c222a1cb..6060cafe1aa22 100644 ---- a/drivers/clk/clk-renesas-pcie.c -+++ b/drivers/clk/clk-renesas-pcie.c -@@ -392,8 +392,8 @@ static const struct rs9_chip_info renesas_9fgv0441_info = { - }; - - static const struct i2c_device_id rs9_id[] = { -- { "9fgv0241", .driver_data = RENESAS_9FGV0241 }, -- { "9fgv0441", .driver_data = RENESAS_9FGV0441 }, -+ { "9fgv0241", .driver_data = (kernel_ulong_t)&renesas_9fgv0241_info }, -+ { "9fgv0441", .driver_data = (kernel_ulong_t)&renesas_9fgv0441_info }, - { } - }; - MODULE_DEVICE_TABLE(i2c, rs9_id); --- -2.39.2 - diff --git a/queue-6.4/clk-si5341-check-return-value-of-devm_-kasprintf.patch b/queue-6.4/clk-si5341-check-return-value-of-devm_-kasprintf.patch deleted file mode 100644 index 048c90bf029..00000000000 --- a/queue-6.4/clk-si5341-check-return-value-of-devm_-kasprintf.patch +++ /dev/null @@ -1,51 +0,0 @@ -From 5944f2455ac73388164a3a28625924216dc3d927 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Tue, 30 May 2023 12:39:09 +0300 -Subject: clk: si5341: check return value of {devm_}kasprintf() - -From: Claudiu Beznea - -[ Upstream commit 36e4ef82016a2b785cf2317eade77e76699b7bff ] - -{devm_}kasprintf() returns a pointer to dynamically allocated memory. -Pointer could be NULL in case allocation fails. Check pointer validity. -Identified with coccinelle (kmerr.cocci script). - -Fixes: 3044a860fd09 ("clk: Add Si5341/Si5340 driver") -Signed-off-by: Claudiu Beznea -Link: https://lore.kernel.org/r/20230530093913.1656095-5-claudiu.beznea@microchip.com -Signed-off-by: Stephen Boyd -Signed-off-by: Sasha Levin ---- - drivers/clk/clk-si5341.c | 8 ++++++++ - 1 file changed, 8 insertions(+) - -diff --git a/drivers/clk/clk-si5341.c b/drivers/clk/clk-si5341.c -index 6dca3288c8940..b2cf7edc8b308 100644 ---- a/drivers/clk/clk-si5341.c -+++ b/drivers/clk/clk-si5341.c -@@ -1697,6 +1697,10 @@ static int si5341_probe(struct i2c_client *client) - for (i = 0; i < data->num_synth; ++i) { - synth_clock_names[i] = devm_kasprintf(&client->dev, GFP_KERNEL, - "%s.N%u", client->dev.of_node->name, i); -+ if (!synth_clock_names[i]) { -+ err = -ENOMEM; -+ goto free_clk_names; -+ } - init.name = synth_clock_names[i]; - data->synth[i].index = i; - data->synth[i].data = data; -@@ -1715,6 +1719,10 @@ static int si5341_probe(struct i2c_client *client) - for (i = 0; i < data->num_outputs; ++i) { - init.name = kasprintf(GFP_KERNEL, "%s.%d", - client->dev.of_node->name, i); -+ if (!init.name) { -+ err = -ENOMEM; -+ goto free_clk_names; -+ } - init.flags = config[i].synth_master ? CLK_SET_RATE_PARENT : 0; - data->clk[i].index = i; - data->clk[i].data = data; --- -2.39.2 - diff --git a/queue-6.4/clk-si5341-free-unused-memory-on-probe-failure.patch b/queue-6.4/clk-si5341-free-unused-memory-on-probe-failure.patch deleted file mode 100644 index 5955c31ab7a..00000000000 --- a/queue-6.4/clk-si5341-free-unused-memory-on-probe-failure.patch +++ /dev/null @@ -1,86 +0,0 @@ -From e3e16ccd727e7965aa12081796f6af0001d39488 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Tue, 30 May 2023 12:39:10 +0300 -Subject: clk: si5341: free unused memory on probe failure - -From: Claudiu Beznea - -[ Upstream commit 267ad94b13c53d8c99a336f0841b1fa1595b1d0f ] - -Pointers from synth_clock_names[] should be freed at the end of probe -either on probe success or failure path. - -Fixes: b7bbf6ec4940 ("clk: si5341: Allow different output VDD_SEL values") -Fixes: 9b13ff4340df ("clk: si5341: Add sysfs properties to allow checking/resetting device faults") -Signed-off-by: Claudiu Beznea -Link: https://lore.kernel.org/r/20230530093913.1656095-6-claudiu.beznea@microchip.com -Signed-off-by: Stephen Boyd -Signed-off-by: Sasha Levin ---- - drivers/clk/clk-si5341.c | 16 +++++++--------- - 1 file changed, 7 insertions(+), 9 deletions(-) - -diff --git a/drivers/clk/clk-si5341.c b/drivers/clk/clk-si5341.c -index b2cf7edc8b308..c7d8cbd22bacc 100644 ---- a/drivers/clk/clk-si5341.c -+++ b/drivers/clk/clk-si5341.c -@@ -1744,7 +1744,7 @@ static int si5341_probe(struct i2c_client *client) - if (err) { - dev_err(&client->dev, - "output %u registration failed\n", i); -- goto cleanup; -+ goto free_clk_names; - } - if (config[i].always_on) - clk_prepare(data->clk[i].hw.clk); -@@ -1754,7 +1754,7 @@ static int si5341_probe(struct i2c_client *client) - data); - if (err) { - dev_err(&client->dev, "unable to add clk provider\n"); -- goto cleanup; -+ goto free_clk_names; - } - - if (initialization_required) { -@@ -1762,11 +1762,11 @@ static int si5341_probe(struct i2c_client *client) - regcache_cache_only(data->regmap, false); - err = regcache_sync(data->regmap); - if (err < 0) -- goto cleanup; -+ goto free_clk_names; - - err = si5341_finalize_defaults(data); - if (err < 0) -- goto cleanup; -+ goto free_clk_names; - } - - /* wait for device to report input clock present and PLL lock */ -@@ -1775,21 +1775,19 @@ static int si5341_probe(struct i2c_client *client) - 10000, 250000); - if (err) { - dev_err(&client->dev, "Error waiting for input clock or PLL lock\n"); -- goto cleanup; -+ goto free_clk_names; - } - - /* clear sticky alarm bits from initialization */ - err = regmap_write(data->regmap, SI5341_STATUS_STICKY, 0); - if (err) { - dev_err(&client->dev, "unable to clear sticky status\n"); -- goto cleanup; -+ goto free_clk_names; - } - - err = sysfs_create_files(&client->dev.kobj, si5341_attributes); -- if (err) { -+ if (err) - dev_err(&client->dev, "unable to create sysfs files\n"); -- goto cleanup; -- } - - free_clk_names: - /* Free the names, clk framework makes copies */ --- -2.39.2 - diff --git a/queue-6.4/clk-si5341-return-error-if-one-synth-clock-registrat.patch b/queue-6.4/clk-si5341-return-error-if-one-synth-clock-registrat.patch deleted file mode 100644 index a83cb3c82fe..00000000000 --- a/queue-6.4/clk-si5341-return-error-if-one-synth-clock-registrat.patch +++ /dev/null @@ -1,72 +0,0 @@ -From 999c39fc83c7cbd63f8480b7bf6d4067f61b41b7 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Tue, 30 May 2023 12:39:08 +0300 -Subject: clk: si5341: return error if one synth clock registration fails - -From: Claudiu Beznea - -[ Upstream commit 2560114c06d7a752b3f4639f28cece58fed11267 ] - -In case devm_clk_hw_register() fails for one of synth clocks the probe -continues. Later on, when registering output clocks which have as parents -all the synth clocks, in case there is registration failure for at least -one synth clock the information passed to clk core for registering output -clock is not right: init.num_parents is fixed but init.parents may contain -an array with less parents. - -Fixes: 3044a860fd09 ("clk: Add Si5341/Si5340 driver") -Signed-off-by: Claudiu Beznea -Link: https://lore.kernel.org/r/20230530093913.1656095-4-claudiu.beznea@microchip.com -Signed-off-by: Stephen Boyd -Signed-off-by: Sasha Levin ---- - drivers/clk/clk-si5341.c | 14 ++++++++------ - 1 file changed, 8 insertions(+), 6 deletions(-) - -diff --git a/drivers/clk/clk-si5341.c b/drivers/clk/clk-si5341.c -index 0e528d7ba656e..6dca3288c8940 100644 ---- a/drivers/clk/clk-si5341.c -+++ b/drivers/clk/clk-si5341.c -@@ -1553,7 +1553,7 @@ static int si5341_probe(struct i2c_client *client) - struct clk_init_data init; - struct clk *input; - const char *root_clock_name; -- const char *synth_clock_names[SI5341_NUM_SYNTH]; -+ const char *synth_clock_names[SI5341_NUM_SYNTH] = { NULL }; - int err; - unsigned int i; - struct clk_si5341_output_config config[SI5341_MAX_NUM_OUTPUTS]; -@@ -1705,6 +1705,7 @@ static int si5341_probe(struct i2c_client *client) - if (err) { - dev_err(&client->dev, - "synth N%u registration failed\n", i); -+ goto free_clk_names; - } - } - -@@ -1782,16 +1783,17 @@ static int si5341_probe(struct i2c_client *client) - goto cleanup; - } - -+free_clk_names: - /* Free the names, clk framework makes copies */ - for (i = 0; i < data->num_synth; ++i) - devm_kfree(&client->dev, (void *)synth_clock_names[i]); - -- return 0; -- - cleanup: -- for (i = 0; i < SI5341_MAX_NUM_OUTPUTS; ++i) { -- if (data->clk[i].vddo_reg) -- regulator_disable(data->clk[i].vddo_reg); -+ if (err) { -+ for (i = 0; i < SI5341_MAX_NUM_OUTPUTS; ++i) { -+ if (data->clk[i].vddo_reg) -+ regulator_disable(data->clk[i].vddo_reg); -+ } - } - return err; - } --- -2.39.2 - diff --git a/queue-6.4/clk-tegra-tegra124-emc-fix-potential-memory-leak.patch b/queue-6.4/clk-tegra-tegra124-emc-fix-potential-memory-leak.patch deleted file mode 100644 index 73c8ee84895..00000000000 --- a/queue-6.4/clk-tegra-tegra124-emc-fix-potential-memory-leak.patch +++ /dev/null @@ -1,45 +0,0 @@ -From a5b09d7e35017019a35c290904fdc2ef3dc72293 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Fri, 9 Dec 2022 09:41:24 +0000 -Subject: clk: tegra: tegra124-emc: Fix potential memory leak - -From: Yuan Can - -[ Upstream commit 53a06e5924c0d43c11379a08c5a78529c3e61595 ] - -The tegra and tegra needs to be freed in the error handling path, otherwise -it will be leaked. - -Fixes: 2db04f16b589 ("clk: tegra: Add EMC clock driver") -Signed-off-by: Yuan Can -Link: https://lore.kernel.org/r/20221209094124.71043-1-yuancan@huawei.com -Acked-by: Thierry Reding -Signed-off-by: Stephen Boyd -Signed-off-by: Sasha Levin ---- - drivers/clk/tegra/clk-tegra124-emc.c | 2 ++ - 1 file changed, 2 insertions(+) - -diff --git a/drivers/clk/tegra/clk-tegra124-emc.c b/drivers/clk/tegra/clk-tegra124-emc.c -index 219c80653dbdb..2a6db04342815 100644 ---- a/drivers/clk/tegra/clk-tegra124-emc.c -+++ b/drivers/clk/tegra/clk-tegra124-emc.c -@@ -464,6 +464,7 @@ static int load_timings_from_dt(struct tegra_clk_emc *tegra, - err = load_one_timing_from_dt(tegra, timing, child); - if (err) { - of_node_put(child); -+ kfree(tegra->timings); - return err; - } - -@@ -515,6 +516,7 @@ struct clk *tegra124_clk_register_emc(void __iomem *base, struct device_node *np - err = load_timings_from_dt(tegra, node, node_ram_code); - if (err) { - of_node_put(node); -+ kfree(tegra); - return ERR_PTR(err); - } - } --- -2.39.2 - diff --git a/queue-6.4/clk-ti-clkctrl-check-return-value-of-kasprintf.patch b/queue-6.4/clk-ti-clkctrl-check-return-value-of-kasprintf.patch deleted file mode 100644 index 8183954d3a8..00000000000 --- a/queue-6.4/clk-ti-clkctrl-check-return-value-of-kasprintf.patch +++ /dev/null @@ -1,52 +0,0 @@ -From ca9d41ec11c969a8679966da00659dbbfaf79d65 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Tue, 30 May 2023 12:39:12 +0300 -Subject: clk: ti: clkctrl: check return value of kasprintf() - -From: Claudiu Beznea - -[ Upstream commit bd46cd0b802d9c9576ca78007aa084ae3e74907b ] - -kasprintf() returns a pointer to dynamically allocated memory. -Pointer could be NULL in case allocation fails. Check pointer validity. -Identified with coccinelle (kmerr.cocci script). - -Fixes: 852049594b9a ("clk: ti: clkctrl: convert subclocks to use proper names also") -Fixes: 6c3090520554 ("clk: ti: clkctrl: Fix hidden dependency to node name") -Signed-off-by: Claudiu Beznea -Link: https://lore.kernel.org/r/20230530093913.1656095-8-claudiu.beznea@microchip.com -Reviewed-by: Tony Lindgren -Signed-off-by: Stephen Boyd -Signed-off-by: Sasha Levin ---- - drivers/clk/ti/clkctrl.c | 7 +++++++ - 1 file changed, 7 insertions(+) - -diff --git a/drivers/clk/ti/clkctrl.c b/drivers/clk/ti/clkctrl.c -index b6fce916967ce..8c40f10280b74 100644 ---- a/drivers/clk/ti/clkctrl.c -+++ b/drivers/clk/ti/clkctrl.c -@@ -258,6 +258,9 @@ static const char * __init clkctrl_get_clock_name(struct device_node *np, - if (clkctrl_name && !legacy_naming) { - clock_name = kasprintf(GFP_KERNEL, "%s-clkctrl:%04x:%d", - clkctrl_name, offset, index); -+ if (!clock_name) -+ return NULL; -+ - strreplace(clock_name, '_', '-'); - - return clock_name; -@@ -586,6 +589,10 @@ static void __init _ti_omap4_clkctrl_setup(struct device_node *node) - if (clkctrl_name) { - provider->clkdm_name = kasprintf(GFP_KERNEL, - "%s_clkdm", clkctrl_name); -+ if (!provider->clkdm_name) { -+ kfree(provider); -+ return; -+ } - goto clkdm_found; - } - --- -2.39.2 - diff --git a/queue-6.4/clk-vc5-check-memory-returned-by-kasprintf.patch b/queue-6.4/clk-vc5-check-memory-returned-by-kasprintf.patch deleted file mode 100644 index 8d50404d2bb..00000000000 --- a/queue-6.4/clk-vc5-check-memory-returned-by-kasprintf.patch +++ /dev/null @@ -1,108 +0,0 @@ -From 4c99bda2dc615320494b03406cd353dfb5049b47 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Tue, 30 May 2023 12:39:06 +0300 -Subject: clk: vc5: check memory returned by kasprintf() - -From: Claudiu Beznea - -[ Upstream commit 144601f6228de5598f03e693822b60a95c367a17 ] - -kasprintf() returns a pointer to dynamically allocated memory. -Pointer could be NULL in case allocation fails. Check pointer validity. -Identified with coccinelle (kmerr.cocci script). - -Fixes: f491276a5168 ("clk: vc5: Allow Versaclock driver to support multiple instances") -Signed-off-by: Claudiu Beznea -Link: https://lore.kernel.org/r/20230530093913.1656095-2-claudiu.beznea@microchip.com -Reviewed-by: Luca Ceresoli -Signed-off-by: Stephen Boyd -Signed-off-by: Sasha Levin ---- - drivers/clk/clk-versaclock5.c | 29 +++++++++++++++++++++++++++++ - 1 file changed, 29 insertions(+) - -diff --git a/drivers/clk/clk-versaclock5.c b/drivers/clk/clk-versaclock5.c -index 5452471b7ba55..e9a7f3c91ae0e 100644 ---- a/drivers/clk/clk-versaclock5.c -+++ b/drivers/clk/clk-versaclock5.c -@@ -1028,6 +1028,11 @@ static int vc5_probe(struct i2c_client *client) - } - - init.name = kasprintf(GFP_KERNEL, "%pOFn.mux", client->dev.of_node); -+ if (!init.name) { -+ ret = -ENOMEM; -+ goto err_clk; -+ } -+ - init.ops = &vc5_mux_ops; - init.flags = 0; - init.parent_names = parent_names; -@@ -1042,6 +1047,10 @@ static int vc5_probe(struct i2c_client *client) - memset(&init, 0, sizeof(init)); - init.name = kasprintf(GFP_KERNEL, "%pOFn.dbl", - client->dev.of_node); -+ if (!init.name) { -+ ret = -ENOMEM; -+ goto err_clk; -+ } - init.ops = &vc5_dbl_ops; - init.flags = CLK_SET_RATE_PARENT; - init.parent_names = parent_names; -@@ -1057,6 +1066,10 @@ static int vc5_probe(struct i2c_client *client) - /* Register PFD */ - memset(&init, 0, sizeof(init)); - init.name = kasprintf(GFP_KERNEL, "%pOFn.pfd", client->dev.of_node); -+ if (!init.name) { -+ ret = -ENOMEM; -+ goto err_clk; -+ } - init.ops = &vc5_pfd_ops; - init.flags = CLK_SET_RATE_PARENT; - init.parent_names = parent_names; -@@ -1074,6 +1087,10 @@ static int vc5_probe(struct i2c_client *client) - /* Register PLL */ - memset(&init, 0, sizeof(init)); - init.name = kasprintf(GFP_KERNEL, "%pOFn.pll", client->dev.of_node); -+ if (!init.name) { -+ ret = -ENOMEM; -+ goto err_clk; -+ } - init.ops = &vc5_pll_ops; - init.flags = CLK_SET_RATE_PARENT; - init.parent_names = parent_names; -@@ -1093,6 +1110,10 @@ static int vc5_probe(struct i2c_client *client) - memset(&init, 0, sizeof(init)); - init.name = kasprintf(GFP_KERNEL, "%pOFn.fod%d", - client->dev.of_node, idx); -+ if (!init.name) { -+ ret = -ENOMEM; -+ goto err_clk; -+ } - init.ops = &vc5_fod_ops; - init.flags = CLK_SET_RATE_PARENT; - init.parent_names = parent_names; -@@ -1111,6 +1132,10 @@ static int vc5_probe(struct i2c_client *client) - memset(&init, 0, sizeof(init)); - init.name = kasprintf(GFP_KERNEL, "%pOFn.out0_sel_i2cb", - client->dev.of_node); -+ if (!init.name) { -+ ret = -ENOMEM; -+ goto err_clk; -+ } - init.ops = &vc5_clk_out_ops; - init.flags = CLK_SET_RATE_PARENT; - init.parent_names = parent_names; -@@ -1137,6 +1162,10 @@ static int vc5_probe(struct i2c_client *client) - memset(&init, 0, sizeof(init)); - init.name = kasprintf(GFP_KERNEL, "%pOFn.out%d", - client->dev.of_node, idx + 1); -+ if (!init.name) { -+ ret = -ENOMEM; -+ goto err_clk; -+ } - init.ops = &vc5_clk_out_ops; - init.flags = CLK_SET_RATE_PARENT; - init.parent_names = parent_names; --- -2.39.2 - diff --git a/queue-6.4/clk-vc5-fix-.driver_data-content-in-i2c_device_id.patch b/queue-6.4/clk-vc5-fix-.driver_data-content-in-i2c_device_id.patch deleted file mode 100644 index 499e329f40d..00000000000 --- a/queue-6.4/clk-vc5-fix-.driver_data-content-in-i2c_device_id.patch +++ /dev/null @@ -1,58 +0,0 @@ -From 4ed07c0a406538db5a65c861ac783c99b00335f1 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Sun, 7 May 2023 15:39:04 +0200 -Subject: clk: vc5: Fix .driver_data content in i2c_device_id - -From: Marek Vasut - -[ Upstream commit be3471c5bd9b921c9adfab7948e8021611639164 ] - -The .driver_data content in i2c_device_id table must match the -.data content in of_device_id table, else device_get_match_data() -would return bogus value on i2c_device_id match. Align the two -tables. - -The i2c_device_id table is now converted from of_device_id using -'s@.compatible = "idt,\([^"]\+"\), .data = \(.*\)@"\1, .driver_data = (kernel_ulong_t)\2@' - -Fixes: 9adddb01ce5f ("clk: vc5: Add structure to describe particular chip features") -Signed-off-by: Marek Vasut -Link: https://lore.kernel.org/r/20230507133906.15061-1-marek.vasut+renesas@mailbox.org -Reviewed-by: Luca Ceresoli -Reviewed-by: Geert Uytterhoeven -Signed-off-by: Stephen Boyd -Signed-off-by: Sasha Levin ---- - drivers/clk/clk-versaclock5.c | 16 ++++++++-------- - 1 file changed, 8 insertions(+), 8 deletions(-) - -diff --git a/drivers/clk/clk-versaclock5.c b/drivers/clk/clk-versaclock5.c -index fa71a57875ce8..5452471b7ba55 100644 ---- a/drivers/clk/clk-versaclock5.c -+++ b/drivers/clk/clk-versaclock5.c -@@ -1271,14 +1271,14 @@ static const struct vc5_chip_info idt_5p49v6975_info = { - }; - - static const struct i2c_device_id vc5_id[] = { -- { "5p49v5923", .driver_data = IDT_VC5_5P49V5923 }, -- { "5p49v5925", .driver_data = IDT_VC5_5P49V5925 }, -- { "5p49v5933", .driver_data = IDT_VC5_5P49V5933 }, -- { "5p49v5935", .driver_data = IDT_VC5_5P49V5935 }, -- { "5p49v60", .driver_data = IDT_VC6_5P49V60 }, -- { "5p49v6901", .driver_data = IDT_VC6_5P49V6901 }, -- { "5p49v6965", .driver_data = IDT_VC6_5P49V6965 }, -- { "5p49v6975", .driver_data = IDT_VC6_5P49V6975 }, -+ { "5p49v5923", .driver_data = (kernel_ulong_t)&idt_5p49v5923_info }, -+ { "5p49v5925", .driver_data = (kernel_ulong_t)&idt_5p49v5925_info }, -+ { "5p49v5933", .driver_data = (kernel_ulong_t)&idt_5p49v5933_info }, -+ { "5p49v5935", .driver_data = (kernel_ulong_t)&idt_5p49v5935_info }, -+ { "5p49v60", .driver_data = (kernel_ulong_t)&idt_5p49v60_info }, -+ { "5p49v6901", .driver_data = (kernel_ulong_t)&idt_5p49v6901_info }, -+ { "5p49v6965", .driver_data = (kernel_ulong_t)&idt_5p49v6965_info }, -+ { "5p49v6975", .driver_data = (kernel_ulong_t)&idt_5p49v6975_info }, - { } - }; - MODULE_DEVICE_TABLE(i2c, vc5_id); --- -2.39.2 - diff --git a/queue-6.4/clk-vc7-fix-.driver_data-content-in-i2c_device_id.patch b/queue-6.4/clk-vc7-fix-.driver_data-content-in-i2c_device_id.patch deleted file mode 100644 index f971e2603df..00000000000 --- a/queue-6.4/clk-vc7-fix-.driver_data-content-in-i2c_device_id.patch +++ /dev/null @@ -1,43 +0,0 @@ -From a65cc690e96c72b10533dd038a29b393f9c8c88c Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Sun, 7 May 2023 15:39:05 +0200 -Subject: clk: vc7: Fix .driver_data content in i2c_device_id - -From: Marek Vasut - -[ Upstream commit b5e10beeafaa3266559c582dde7534ae3fe8cefb ] - -The .driver_data content in i2c_device_id table must match the -.data content in of_device_id table, else device_get_match_data() -would return bogus value on i2c_device_id match. Align the two -tables. - -The i2c_device_id table is now converted from of_device_id using -'s@.compatible = "renesas,\([^"]\+"\), .data = \(.*\)@"\1, .driver_data = (kernel_ulong_t)\2@' - -Fixes: 48c5e98fedd9 ("clk: Renesas versaclock7 ccf device driver") -Signed-off-by: Marek Vasut -Link: https://lore.kernel.org/r/20230507133906.15061-2-marek.vasut+renesas@mailbox.org -Reviewed-by: Geert Uytterhoeven -Signed-off-by: Stephen Boyd -Signed-off-by: Sasha Levin ---- - drivers/clk/clk-versaclock7.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/drivers/clk/clk-versaclock7.c b/drivers/clk/clk-versaclock7.c -index 8e4f86e852aa0..0ae191f50b4b2 100644 ---- a/drivers/clk/clk-versaclock7.c -+++ b/drivers/clk/clk-versaclock7.c -@@ -1282,7 +1282,7 @@ static const struct regmap_config vc7_regmap_config = { - }; - - static const struct i2c_device_id vc7_i2c_id[] = { -- { "rc21008a", VC7_RC21008A }, -+ { "rc21008a", .driver_data = (kernel_ulong_t)&vc7_rc21008a_info }, - {} - }; - MODULE_DEVICE_TABLE(i2c, vc7_i2c_id); --- -2.39.2 - diff --git a/queue-6.4/clocksource-drivers-cadence-ttc-fix-memory-leak-in-t.patch b/queue-6.4/clocksource-drivers-cadence-ttc-fix-memory-leak-in-t.patch deleted file mode 100644 index 7d2b8f48145..00000000000 --- a/queue-6.4/clocksource-drivers-cadence-ttc-fix-memory-leak-in-t.patch +++ /dev/null @@ -1,81 +0,0 @@ -From 279a1f8e82639a96c931bdb1e21dddb7bd9eaf1f Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Tue, 25 Apr 2023 06:56:11 +0000 -Subject: clocksource/drivers/cadence-ttc: Fix memory leak in ttc_timer_probe - -From: Feng Mingxi - -[ Upstream commit 8b5bf64c89c7100c921bd807ba39b2eb003061ab ] - -Smatch reports: -drivers/clocksource/timer-cadence-ttc.c:529 ttc_timer_probe() -warn: 'timer_baseaddr' from of_iomap() not released on lines: 498,508,516. - -timer_baseaddr may have the problem of not being released after use, -I replaced it with the devm_of_iomap() function and added the clk_put() -function to cleanup the "clk_ce" and "clk_cs". - -Fixes: e932900a3279 ("arm: zynq: Use standard timer binding") -Fixes: 70504f311d4b ("clocksource/drivers/cadence_ttc: Convert init function to return error") -Signed-off-by: Feng Mingxi -Reviewed-by: Dongliang Mu -Acked-by: Michal Simek -Signed-off-by: Daniel Lezcano -Link: https://lore.kernel.org/r/20230425065611.702917-1-m202271825@hust.edu.cn -Signed-off-by: Sasha Levin ---- - drivers/clocksource/timer-cadence-ttc.c | 19 +++++++++++++------ - 1 file changed, 13 insertions(+), 6 deletions(-) - -diff --git a/drivers/clocksource/timer-cadence-ttc.c b/drivers/clocksource/timer-cadence-ttc.c -index 4efd0cf3b602d..0d52e28fea4de 100644 ---- a/drivers/clocksource/timer-cadence-ttc.c -+++ b/drivers/clocksource/timer-cadence-ttc.c -@@ -486,10 +486,10 @@ static int __init ttc_timer_probe(struct platform_device *pdev) - * and use it. Note that the event timer uses the interrupt and it's the - * 2nd TTC hence the irq_of_parse_and_map(,1) - */ -- timer_baseaddr = of_iomap(timer, 0); -- if (!timer_baseaddr) { -+ timer_baseaddr = devm_of_iomap(&pdev->dev, timer, 0, NULL); -+ if (IS_ERR(timer_baseaddr)) { - pr_err("ERROR: invalid timer base address\n"); -- return -ENXIO; -+ return PTR_ERR(timer_baseaddr); - } - - irq = irq_of_parse_and_map(timer, 1); -@@ -513,20 +513,27 @@ static int __init ttc_timer_probe(struct platform_device *pdev) - clk_ce = of_clk_get(timer, clksel); - if (IS_ERR(clk_ce)) { - pr_err("ERROR: timer input clock not found\n"); -- return PTR_ERR(clk_ce); -+ ret = PTR_ERR(clk_ce); -+ goto put_clk_cs; - } - - ret = ttc_setup_clocksource(clk_cs, timer_baseaddr, timer_width); - if (ret) -- return ret; -+ goto put_clk_ce; - - ret = ttc_setup_clockevent(clk_ce, timer_baseaddr + 4, irq); - if (ret) -- return ret; -+ goto put_clk_ce; - - pr_info("%pOFn #0 at %p, irq=%d\n", timer, timer_baseaddr, irq); - - return 0; -+ -+put_clk_ce: -+ clk_put(clk_ce); -+put_clk_cs: -+ clk_put(clk_cs); -+ return ret; - } - - static const struct of_device_id ttc_timer_of_match[] = { --- -2.39.2 - diff --git a/queue-6.4/cpufreq-intel_pstate-fix-energy_performance_preferen.patch b/queue-6.4/cpufreq-intel_pstate-fix-energy_performance_preferen.patch deleted file mode 100644 index 1e86fde7625..00000000000 --- a/queue-6.4/cpufreq-intel_pstate-fix-energy_performance_preferen.patch +++ /dev/null @@ -1,42 +0,0 @@ -From 8f702c72730c3cb344a75acab74fe0f1d13b219f Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Wed, 21 Jun 2023 09:58:39 +0300 -Subject: cpufreq: intel_pstate: Fix energy_performance_preference for passive - -From: Tero Kristo - -[ Upstream commit 03f44ffb3d5be2fceda375d92c70ab6de4df7081 ] - -If the intel_pstate driver is set to passive mode, then writing the -same value to the energy_performance_preference sysfs twice will fail. -This is caused by the wrong return value used (index of the matched -energy_perf_string), instead of the length of the passed in parameter. -Fix by forcing the internal return value to zero when the same -preference is passed in by user. This same issue is not present when -active mode is used for the driver. - -Fixes: f6ebbcf08f37 ("cpufreq: intel_pstate: Implement passive mode with HWP enabled") -Reported-by: Niklas Neronin -Signed-off-by: Tero Kristo -Signed-off-by: Rafael J. Wysocki -Signed-off-by: Sasha Levin ---- - drivers/cpufreq/intel_pstate.c | 2 ++ - 1 file changed, 2 insertions(+) - -diff --git a/drivers/cpufreq/intel_pstate.c b/drivers/cpufreq/intel_pstate.c -index 2548ec92faa28..f29182512b982 100644 ---- a/drivers/cpufreq/intel_pstate.c -+++ b/drivers/cpufreq/intel_pstate.c -@@ -824,6 +824,8 @@ static ssize_t store_energy_performance_preference( - err = cpufreq_start_governor(policy); - if (!ret) - ret = err; -+ } else { -+ ret = 0; - } - } - --- -2.39.2 - diff --git a/queue-6.4/crypto-jitter-correct-health-test-during-initializat.patch b/queue-6.4/crypto-jitter-correct-health-test-during-initializat.patch deleted file mode 100644 index f20a2d97a4c..00000000000 --- a/queue-6.4/crypto-jitter-correct-health-test-during-initializat.patch +++ /dev/null @@ -1,72 +0,0 @@ -From 9858904df1dee39ff0db1d7c8de30ee271b53a85 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Thu, 25 May 2023 19:00:05 +0200 -Subject: crypto: jitter - correct health test during initialization -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -From: Stephan Müller - -[ Upstream commit d23659769ad1bf2cbafaa0efcbae20ef1a74f77e ] - -With the update of the permanent and intermittent health errors, the -actual indicator for the health test indicates a potential error only -for the one offending time stamp gathered in the current iteration -round. The next iteration round will "overwrite" the health test result. - -Thus, the entropy collection loop in jent_gen_entropy checks for -the health test failure upon each loop iteration. However, the -initialization operation checked for the APT health test once for -an APT window which implies it would not catch most errors. - -Thus, the check for all health errors is now invoked unconditionally -during each loop iteration for the startup test. - -With the change, the error JENT_ERCT becomes unused as all health -errors are only reported with the JENT_HEALTH return code. This -allows the removal of the error indicator. - -Fixes: 3fde2fe99aa6 ("crypto: jitter - permanent and intermittent health errors" -) -Reported-by: Joachim Vandersmissen -Signed-off-by: Stephan Mueller -Signed-off-by: Herbert Xu -Signed-off-by: Sasha Levin ---- - crypto/jitterentropy.c | 9 +++------ - 1 file changed, 3 insertions(+), 6 deletions(-) - -diff --git a/crypto/jitterentropy.c b/crypto/jitterentropy.c -index 22f48bf4c6f57..227cedfa4f0ae 100644 ---- a/crypto/jitterentropy.c -+++ b/crypto/jitterentropy.c -@@ -117,7 +117,6 @@ struct rand_data { - * zero). */ - #define JENT_ESTUCK 8 /* Too many stuck results during init. */ - #define JENT_EHEALTH 9 /* Health test failed during initialization */ --#define JENT_ERCT 10 /* RCT failed during initialization */ - - /* - * The output n bits can receive more than n bits of min entropy, of course, -@@ -762,14 +761,12 @@ int jent_entropy_init(void) - if ((nonstuck % JENT_APT_WINDOW_SIZE) == 0) { - jent_apt_reset(&ec, - delta & JENT_APT_WORD_MASK); -- if (jent_health_failure(&ec)) -- return JENT_EHEALTH; - } - } - -- /* Validate RCT */ -- if (jent_rct_failure(&ec)) -- return JENT_ERCT; -+ /* Validate health test result */ -+ if (jent_health_failure(&ec)) -+ return JENT_EHEALTH; - - /* test whether we have an increasing timer */ - if (!(time2 > time)) --- -2.39.2 - diff --git a/queue-6.4/crypto-marvell-cesa-fix-type-mismatch-warning.patch b/queue-6.4/crypto-marvell-cesa-fix-type-mismatch-warning.patch deleted file mode 100644 index 9a79620b51a..00000000000 --- a/queue-6.4/crypto-marvell-cesa-fix-type-mismatch-warning.patch +++ /dev/null @@ -1,49 +0,0 @@ -From e05c68045d727a5f5f1dc064b41bcffb62f615fa Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Tue, 23 May 2023 10:33:04 +0200 -Subject: crypto: marvell/cesa - Fix type mismatch warning - -From: Arnd Bergmann - -[ Upstream commit efbc7764c4446566edb76ca05e903b5905673d2e ] - -Commit df8fc4e934c1 ("kbuild: Enable -fstrict-flex-arrays=3") uncovered -a type mismatch in cesa 3des support that leads to a memcpy beyond the -end of a structure: - -In function 'fortify_memcpy_chk', - inlined from 'mv_cesa_des3_ede_setkey' at drivers/crypto/marvell/cesa/cipher.c:307:2: -include/linux/fortify-string.h:583:25: error: call to '__write_overflow_field' declared with attribute warning: detected write beyond size of field (1st parameter); maybe use struct_group()? [-Werror=attribute-warning] - 583 | __write_overflow_field(p_size_field, size); - | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -This is probably harmless as the actual data that is copied has the correct -type, but clearly worth fixing nonetheless. - -Fixes: 4ada48397823 ("crypto: marvell/cesa - add Triple-DES support") -Cc: Kees Cook -Cc: Gustavo A. R. Silva" -Signed-off-by: Arnd Bergmann -Reviewed-by: Kees Cook -Signed-off-by: Herbert Xu -Signed-off-by: Sasha Levin ---- - drivers/crypto/marvell/cesa/cipher.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/drivers/crypto/marvell/cesa/cipher.c b/drivers/crypto/marvell/cesa/cipher.c -index c6f2fa753b7c0..0f37dfd42d850 100644 ---- a/drivers/crypto/marvell/cesa/cipher.c -+++ b/drivers/crypto/marvell/cesa/cipher.c -@@ -297,7 +297,7 @@ static int mv_cesa_des_setkey(struct crypto_skcipher *cipher, const u8 *key, - static int mv_cesa_des3_ede_setkey(struct crypto_skcipher *cipher, - const u8 *key, unsigned int len) - { -- struct mv_cesa_des_ctx *ctx = crypto_skcipher_ctx(cipher); -+ struct mv_cesa_des3_ctx *ctx = crypto_skcipher_ctx(cipher); - int err; - - err = verify_skcipher_des3_key(cipher, key); --- -2.39.2 - diff --git a/queue-6.4/crypto-nx-fix-build-warnings-when-debug_fs-is-not-en.patch b/queue-6.4/crypto-nx-fix-build-warnings-when-debug_fs-is-not-en.patch deleted file mode 100644 index 9bec9187f92..00000000000 --- a/queue-6.4/crypto-nx-fix-build-warnings-when-debug_fs-is-not-en.patch +++ /dev/null @@ -1,88 +0,0 @@ -From 76cbf265bab8f9ecc543754b36064c8f9cdfb045 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Fri, 19 May 2023 15:33:34 -0700 -Subject: crypto: nx - fix build warnings when DEBUG_FS is not enabled -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -From: Randy Dunlap - -[ Upstream commit b04b076fb56560b39d695ac3744db457e12278fd ] - -Fix build warnings when DEBUG_FS is not enabled by using an empty -do-while loop instead of a value: - -In file included from ../drivers/crypto/nx/nx.c:27: -../drivers/crypto/nx/nx.c: In function 'nx_register_algs': -../drivers/crypto/nx/nx.h:173:33: warning: statement with no effect [-Wunused-value] - 173 | #define NX_DEBUGFS_INIT(drv) (0) -../drivers/crypto/nx/nx.c:573:9: note: in expansion of macro 'NX_DEBUGFS_INIT' - 573 | NX_DEBUGFS_INIT(&nx_driver); -../drivers/crypto/nx/nx.c: In function 'nx_remove': -../drivers/crypto/nx/nx.h:174:33: warning: statement with no effect [-Wunused-value] - 174 | #define NX_DEBUGFS_FINI(drv) (0) -../drivers/crypto/nx/nx.c:793:17: note: in expansion of macro 'NX_DEBUGFS_FINI' - 793 | NX_DEBUGFS_FINI(&nx_driver); - -Also, there is no need to build nx_debugfs.o when DEBUG_FS is not -enabled, so change the Makefile to accommodate that. - -Fixes: ae0222b7289d ("powerpc/crypto: nx driver code supporting nx encryption") -Fixes: aef7b31c8833 ("powerpc/crypto: Build files for the nx device driver") -Signed-off-by: Randy Dunlap -Cc: Breno Leitão -Cc: Nayna Jain -Cc: Paulo Flabiano Smorigo -Cc: Herbert Xu -Cc: "David S. Miller" -Cc: linux-crypto@vger.kernel.org -Cc: Michael Ellerman -Cc: Nicholas Piggin -Cc: Christophe Leroy -Cc: linuxppc-dev@lists.ozlabs.org -Signed-off-by: Herbert Xu -Signed-off-by: Sasha Levin ---- - drivers/crypto/nx/Makefile | 2 +- - drivers/crypto/nx/nx.h | 4 ++-- - 2 files changed, 3 insertions(+), 3 deletions(-) - -diff --git a/drivers/crypto/nx/Makefile b/drivers/crypto/nx/Makefile -index d00181a26dd65..483cef62acee8 100644 ---- a/drivers/crypto/nx/Makefile -+++ b/drivers/crypto/nx/Makefile -@@ -1,7 +1,6 @@ - # SPDX-License-Identifier: GPL-2.0 - obj-$(CONFIG_CRYPTO_DEV_NX_ENCRYPT) += nx-crypto.o - nx-crypto-objs := nx.o \ -- nx_debugfs.o \ - nx-aes-cbc.o \ - nx-aes-ecb.o \ - nx-aes-gcm.o \ -@@ -11,6 +10,7 @@ nx-crypto-objs := nx.o \ - nx-sha256.o \ - nx-sha512.o - -+nx-crypto-$(CONFIG_DEBUG_FS) += nx_debugfs.o - obj-$(CONFIG_CRYPTO_DEV_NX_COMPRESS_PSERIES) += nx-compress-pseries.o nx-compress.o - obj-$(CONFIG_CRYPTO_DEV_NX_COMPRESS_POWERNV) += nx-compress-powernv.o nx-compress.o - nx-compress-objs := nx-842.o -diff --git a/drivers/crypto/nx/nx.h b/drivers/crypto/nx/nx.h -index c6233173c612e..2697baebb6a35 100644 ---- a/drivers/crypto/nx/nx.h -+++ b/drivers/crypto/nx/nx.h -@@ -170,8 +170,8 @@ struct nx_sg *nx_walk_and_build(struct nx_sg *, unsigned int, - void nx_debugfs_init(struct nx_crypto_driver *); - void nx_debugfs_fini(struct nx_crypto_driver *); - #else --#define NX_DEBUGFS_INIT(drv) (0) --#define NX_DEBUGFS_FINI(drv) (0) -+#define NX_DEBUGFS_INIT(drv) do {} while (0) -+#define NX_DEBUGFS_FINI(drv) do {} while (0) - #endif - - #define NX_PAGE_NUM(x) ((u64)(x) & 0xfffffffffffff000ULL) --- -2.39.2 - diff --git a/queue-6.4/crypto-qat-unmap-buffer-before-free-for-dh.patch b/queue-6.4/crypto-qat-unmap-buffer-before-free-for-dh.patch deleted file mode 100644 index 03bea4e1f9f..00000000000 --- a/queue-6.4/crypto-qat-unmap-buffer-before-free-for-dh.patch +++ /dev/null @@ -1,53 +0,0 @@ -From 03b4b8720ecaedf72c7f84116f0ef5d748b89f3a Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Mon, 5 Jun 2023 22:06:06 +0100 -Subject: crypto: qat - unmap buffer before free for DH - -From: Hareshx Sankar Raj - -[ Upstream commit eb7713f5ca97697b92f225127440d1525119b8de ] - -The callback function for DH frees the memory allocated for the -destination buffer before unmapping it. -This sequence is wrong. - -Change the cleanup sequence to unmap the buffer before freeing it. - -Fixes: 029aa4624a7f ("crypto: qat - remove dma_free_coherent() for DH") -Signed-off-by: Hareshx Sankar Raj -Co-developed-by: Bolemx Sivanagaleela -Signed-off-by: Bolemx Sivanagaleela -Reviewed-by: Giovanni Cabiddu -Reviewed-by: Andy Shevchenko -Signed-off-by: Giovanni Cabiddu -Signed-off-by: Herbert Xu -Signed-off-by: Sasha Levin ---- - drivers/crypto/intel/qat/qat_common/qat_asym_algs.c | 5 ++--- - 1 file changed, 2 insertions(+), 3 deletions(-) - -diff --git a/drivers/crypto/intel/qat/qat_common/qat_asym_algs.c b/drivers/crypto/intel/qat/qat_common/qat_asym_algs.c -index 935a7e012946e..8806242469a06 100644 ---- a/drivers/crypto/intel/qat/qat_common/qat_asym_algs.c -+++ b/drivers/crypto/intel/qat/qat_common/qat_asym_algs.c -@@ -170,15 +170,14 @@ static void qat_dh_cb(struct icp_qat_fw_pke_resp *resp) - } - - areq->dst_len = req->ctx.dh->p_size; -+ dma_unmap_single(dev, req->out.dh.r, req->ctx.dh->p_size, -+ DMA_FROM_DEVICE); - if (req->dst_align) { - scatterwalk_map_and_copy(req->dst_align, areq->dst, 0, - areq->dst_len, 1); - kfree_sensitive(req->dst_align); - } - -- dma_unmap_single(dev, req->out.dh.r, req->ctx.dh->p_size, -- DMA_FROM_DEVICE); -- - dma_unmap_single(dev, req->phy_in, sizeof(struct qat_dh_input_params), - DMA_TO_DEVICE); - dma_unmap_single(dev, req->phy_out, --- -2.39.2 - diff --git a/queue-6.4/crypto-qat-unmap-buffers-before-free-for-rsa.patch b/queue-6.4/crypto-qat-unmap-buffers-before-free-for-rsa.patch deleted file mode 100644 index 7e0606af7c6..00000000000 --- a/queue-6.4/crypto-qat-unmap-buffers-before-free-for-rsa.patch +++ /dev/null @@ -1,62 +0,0 @@ -From 5832b73b365231e729f1fbe28ece3f9487200d31 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Mon, 5 Jun 2023 22:06:07 +0100 -Subject: crypto: qat - unmap buffers before free for RSA - -From: Hareshx Sankar Raj - -[ Upstream commit d776b25495f2c71b9dbf1f5e53b642215ba72f3c ] - -The callback function for RSA frees the memory allocated for the source -and destination buffers before unmapping them. -This sequence is wrong. - -Change the cleanup sequence to unmap the buffers before freeing them. - -Fixes: 3dfaf0071ed7 ("crypto: qat - remove dma_free_coherent() for RSA") -Signed-off-by: Hareshx Sankar Raj -Co-developed-by: Bolemx Sivanagaleela -Signed-off-by: Bolemx Sivanagaleela -Reviewed-by: Giovanni Cabiddu -Reviewed-by: Andy Shevchenko -Signed-off-by: Giovanni Cabiddu -Signed-off-by: Herbert Xu -Signed-off-by: Sasha Levin ---- - drivers/crypto/intel/qat/qat_common/qat_asym_algs.c | 9 ++++----- - 1 file changed, 4 insertions(+), 5 deletions(-) - -diff --git a/drivers/crypto/intel/qat/qat_common/qat_asym_algs.c b/drivers/crypto/intel/qat/qat_common/qat_asym_algs.c -index 8806242469a06..4128200a90329 100644 ---- a/drivers/crypto/intel/qat/qat_common/qat_asym_algs.c -+++ b/drivers/crypto/intel/qat/qat_common/qat_asym_algs.c -@@ -520,12 +520,14 @@ static void qat_rsa_cb(struct icp_qat_fw_pke_resp *resp) - - err = (err == ICP_QAT_FW_COMN_STATUS_FLAG_OK) ? 0 : -EINVAL; - -- kfree_sensitive(req->src_align); -- - dma_unmap_single(dev, req->in.rsa.enc.m, req->ctx.rsa->key_sz, - DMA_TO_DEVICE); - -+ kfree_sensitive(req->src_align); -+ - areq->dst_len = req->ctx.rsa->key_sz; -+ dma_unmap_single(dev, req->out.rsa.enc.c, req->ctx.rsa->key_sz, -+ DMA_FROM_DEVICE); - if (req->dst_align) { - scatterwalk_map_and_copy(req->dst_align, areq->dst, 0, - areq->dst_len, 1); -@@ -533,9 +535,6 @@ static void qat_rsa_cb(struct icp_qat_fw_pke_resp *resp) - kfree_sensitive(req->dst_align); - } - -- dma_unmap_single(dev, req->out.rsa.enc.c, req->ctx.rsa->key_sz, -- DMA_FROM_DEVICE); -- - dma_unmap_single(dev, req->phy_in, sizeof(struct qat_rsa_input_params), - DMA_TO_DEVICE); - dma_unmap_single(dev, req->phy_out, --- -2.39.2 - diff --git a/queue-6.4/cxl-region-fix-state-transitions-after-reset-failure.patch b/queue-6.4/cxl-region-fix-state-transitions-after-reset-failure.patch deleted file mode 100644 index 96a6b1d2619..00000000000 --- a/queue-6.4/cxl-region-fix-state-transitions-after-reset-failure.patch +++ /dev/null @@ -1,77 +0,0 @@ -From 558b58be63a6431a8a75a41b8f45ca40aeb3ee08 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Fri, 16 Jun 2023 18:24:39 -0700 -Subject: cxl/region: Fix state transitions after reset failure - -From: Dan Williams - -[ Upstream commit adfe19738b71a893da62cb2e30bd6bdb4299ea67 ] - -Jonathan reports that failed attempts to reset a region (teardown its -HDM decoder configuration) mistakenly advance the state of the region -to "not committed". Revert to the previous state of the region on reset -failure so that the reset can be re-attempted. - -Reported-by: Jonathan Cameron -Closes: http://lore.kernel.org/r/20230316171441.0000205b@Huawei.com -Fixes: 176baefb2eb5 ("cxl/hdm: Commit decoder state to hardware") -Reviewed-by: Jonathan Cameron -Reviewed-by: Dave Jiang -Link: https://lore.kernel.org/r/168696507968.3590522.14484000711718573626.stgit@dwillia2-xfh.jf.intel.com -Signed-off-by: Dan Williams -Signed-off-by: Sasha Levin ---- - drivers/cxl/core/region.c | 26 +++++++++++++++----------- - 1 file changed, 15 insertions(+), 11 deletions(-) - -diff --git a/drivers/cxl/core/region.c b/drivers/cxl/core/region.c -index fa29bd2ec3227..bfdd424d68970 100644 ---- a/drivers/cxl/core/region.c -+++ b/drivers/cxl/core/region.c -@@ -296,9 +296,11 @@ static ssize_t commit_store(struct device *dev, struct device_attribute *attr, - if (rc) - return rc; - -- if (commit) -+ if (commit) { - rc = cxl_region_decode_commit(cxlr); -- else { -+ if (rc == 0) -+ p->state = CXL_CONFIG_COMMIT; -+ } else { - p->state = CXL_CONFIG_RESET_PENDING; - up_write(&cxl_region_rwsem); - device_release_driver(&cxlr->dev); -@@ -308,18 +310,20 @@ static ssize_t commit_store(struct device *dev, struct device_attribute *attr, - * The lock was dropped, so need to revalidate that the reset is - * still pending. - */ -- if (p->state == CXL_CONFIG_RESET_PENDING) -+ if (p->state == CXL_CONFIG_RESET_PENDING) { - rc = cxl_region_decode_reset(cxlr, p->interleave_ways); -+ /* -+ * Revert to committed since there may still be active -+ * decoders associated with this region, or move forward -+ * to active to mark the reset successful -+ */ -+ if (rc) -+ p->state = CXL_CONFIG_COMMIT; -+ else -+ p->state = CXL_CONFIG_ACTIVE; -+ } - } - -- if (rc) -- goto out; -- -- if (commit) -- p->state = CXL_CONFIG_COMMIT; -- else if (p->state == CXL_CONFIG_RESET_PENDING) -- p->state = CXL_CONFIG_ACTIVE; -- - out: - up_write(&cxl_region_rwsem); - --- -2.39.2 - diff --git a/queue-6.4/cxl-region-flag-partially-torn-down-regions-as-unusa.patch b/queue-6.4/cxl-region-flag-partially-torn-down-regions-as-unusa.patch deleted file mode 100644 index 74a84f5d28e..00000000000 --- a/queue-6.4/cxl-region-flag-partially-torn-down-regions-as-unusa.patch +++ /dev/null @@ -1,94 +0,0 @@ -From a56a23889b99a230290dea81f551ce772554732e Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Fri, 16 Jun 2023 18:24:34 -0700 -Subject: cxl/region: Flag partially torn down regions as unusable - -From: Dan Williams - -[ Upstream commit 2ab47045ac96a605e3037d479a7d5854570ee5bf ] - -cxl_region_decode_reset() walks all the decoders associated with a given -region and disables them. Due to decoder ordering rules it is possible -that a switch in the topology notices that a given decoder can not be -shutdown before another region with a higher HPA is shutdown first. That -can leave the region in a partially committed state. - -Capture that state in a new CXL_REGION_F_NEEDS_RESET flag and require -that a successful cxl_region_decode_reset() attempt must be completed -before cxl_region_probe() accepts the region. - -This is a corollary for the bug that Jonathan identified in "CXL/region -: commit reset of out of order region appears to succeed." [1]. - -Cc: Jonathan Cameron -Link: http://lore.kernel.org/r/20230316171441.0000205b@Huawei.com [1] -Fixes: 176baefb2eb5 ("cxl/hdm: Commit decoder state to hardware") -Reviewed-by: Dave Jiang -Link: https://lore.kernel.org/r/168696507423.3590522.16254212607926684429.stgit@dwillia2-xfh.jf.intel.com -Signed-off-by: Dan Williams -Signed-off-by: Sasha Levin ---- - drivers/cxl/core/region.c | 12 ++++++++++++ - drivers/cxl/cxl.h | 8 ++++++++ - 2 files changed, 20 insertions(+) - -diff --git a/drivers/cxl/core/region.c b/drivers/cxl/core/region.c -index 594ce3c2565df..fa29bd2ec3227 100644 ---- a/drivers/cxl/core/region.c -+++ b/drivers/cxl/core/region.c -@@ -182,14 +182,19 @@ static int cxl_region_decode_reset(struct cxl_region *cxlr, int count) - rc = cxld->reset(cxld); - if (rc) - return rc; -+ set_bit(CXL_REGION_F_NEEDS_RESET, &cxlr->flags); - } - - endpoint_reset: - rc = cxled->cxld.reset(&cxled->cxld); - if (rc) - return rc; -+ set_bit(CXL_REGION_F_NEEDS_RESET, &cxlr->flags); - } - -+ /* all decoders associated with this region have been torn down */ -+ clear_bit(CXL_REGION_F_NEEDS_RESET, &cxlr->flags); -+ - return 0; - } - -@@ -2864,6 +2869,13 @@ static int cxl_region_probe(struct device *dev) - goto out; - } - -+ if (test_bit(CXL_REGION_F_NEEDS_RESET, &cxlr->flags)) { -+ dev_err(&cxlr->dev, -+ "failed to activate, re-commit region and retry\n"); -+ rc = -ENXIO; -+ goto out; -+ } -+ - /* - * From this point on any path that changes the region's state away from - * CXL_CONFIG_COMMIT is also responsible for releasing the driver. -diff --git a/drivers/cxl/cxl.h b/drivers/cxl/cxl.h -index 70ab8fcd0377c..dcebe48bb5bb5 100644 ---- a/drivers/cxl/cxl.h -+++ b/drivers/cxl/cxl.h -@@ -469,6 +469,14 @@ struct cxl_region_params { - */ - #define CXL_REGION_F_AUTO 0 - -+/* -+ * Require that a committed region successfully complete a teardown once -+ * any of its associated decoders have been torn down. This maintains -+ * the commit state for the region since there are committed decoders, -+ * but blocks cxl_region_probe(). -+ */ -+#define CXL_REGION_F_NEEDS_RESET 1 -+ - /** - * struct cxl_region - CXL region - * @dev: This region's device --- -2.39.2 - diff --git a/queue-6.4/cxl-region-move-cache-invalidation-before-region-tea.patch b/queue-6.4/cxl-region-move-cache-invalidation-before-region-tea.patch deleted file mode 100644 index cbc16b3f3b1..00000000000 --- a/queue-6.4/cxl-region-move-cache-invalidation-before-region-tea.patch +++ /dev/null @@ -1,186 +0,0 @@ -From fa8717524c2cab4bf74a252a78098ec612b1ca5c Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Fri, 16 Jun 2023 18:24:28 -0700 -Subject: cxl/region: Move cache invalidation before region teardown, and - before setup - -From: Dan Williams - -[ Upstream commit d1257d098a5a38753a0736a50db0a26a62377ad7 ] - -Vikram raised a concern with the theoretical case of a CPU sending -MemClnEvict to a device that is not prepared to receive. MemClnEvict is -a message that is sent after a CPU has taken ownership of a cacheline -from accelerator memory (HDM-DB). In the case of hotplug or HDM decoder -reconfiguration it is possible that the CPU is holding old contents for -a new device that has taken over the physical address range being cached -by the CPU. - -To avoid this scenario, invalidate caches prior to tearing down an HDM -decoder configuration. - -Now, this poses another problem that it is possible for something to -speculate into that space while the decode configuration is still up, so -to close that gap also invalidate prior to establish new contents behind -a given physical address range. - -With this change the cache invalidation is now explicit and need not be -checked in cxl_region_probe(), and that obviates the need for -CXL_REGION_F_INCOHERENT. - -Cc: Jonathan Cameron -Fixes: d18bc74aced6 ("cxl/region: Manage CPU caches relative to DPA invalidation events") -Reported-by: Vikram Sethi -Closes: http://lore.kernel.org/r/BYAPR12MB33364B5EB908BF7239BB996BBD53A@BYAPR12MB3336.namprd12.prod.outlook.com -Reviewed-by: Jonathan Cameron -Reviewed-by: Dave Jiang -Link: https://lore.kernel.org/r/168696506886.3590522.4597053660991916591.stgit@dwillia2-xfh.jf.intel.com -Signed-off-by: Dan Williams -Signed-off-by: Sasha Levin ---- - drivers/cxl/core/region.c | 66 ++++++++++++++++++++++----------------- - drivers/cxl/cxl.h | 8 +---- - 2 files changed, 38 insertions(+), 36 deletions(-) - -diff --git a/drivers/cxl/core/region.c b/drivers/cxl/core/region.c -index f822de44bee0a..594ce3c2565df 100644 ---- a/drivers/cxl/core/region.c -+++ b/drivers/cxl/core/region.c -@@ -125,10 +125,38 @@ static struct cxl_region_ref *cxl_rr_load(struct cxl_port *port, - return xa_load(&port->regions, (unsigned long)cxlr); - } - -+static int cxl_region_invalidate_memregion(struct cxl_region *cxlr) -+{ -+ if (!cpu_cache_has_invalidate_memregion()) { -+ if (IS_ENABLED(CONFIG_CXL_REGION_INVALIDATION_TEST)) { -+ dev_warn_once( -+ &cxlr->dev, -+ "Bypassing cpu_cache_invalidate_memregion() for testing!\n"); -+ return 0; -+ } else { -+ dev_err(&cxlr->dev, -+ "Failed to synchronize CPU cache state\n"); -+ return -ENXIO; -+ } -+ } -+ -+ cpu_cache_invalidate_memregion(IORES_DESC_CXL); -+ return 0; -+} -+ - static int cxl_region_decode_reset(struct cxl_region *cxlr, int count) - { - struct cxl_region_params *p = &cxlr->params; -- int i; -+ int i, rc = 0; -+ -+ /* -+ * Before region teardown attempt to flush, and if the flush -+ * fails cancel the region teardown for data consistency -+ * concerns -+ */ -+ rc = cxl_region_invalidate_memregion(cxlr); -+ if (rc) -+ return rc; - - for (i = count - 1; i >= 0; i--) { - struct cxl_endpoint_decoder *cxled = p->targets[i]; -@@ -136,7 +164,6 @@ static int cxl_region_decode_reset(struct cxl_region *cxlr, int count) - struct cxl_port *iter = cxled_to_port(cxled); - struct cxl_dev_state *cxlds = cxlmd->cxlds; - struct cxl_ep *ep; -- int rc = 0; - - if (cxlds->rcd) - goto endpoint_reset; -@@ -256,6 +283,14 @@ static ssize_t commit_store(struct device *dev, struct device_attribute *attr, - goto out; - } - -+ /* -+ * Invalidate caches before region setup to drop any speculative -+ * consumption of this address space -+ */ -+ rc = cxl_region_invalidate_memregion(cxlr); -+ if (rc) -+ return rc; -+ - if (commit) - rc = cxl_region_decode_commit(cxlr); - else { -@@ -1674,7 +1709,6 @@ static int cxl_region_attach(struct cxl_region *cxlr, - if (rc) - goto err_decrement; - p->state = CXL_CONFIG_ACTIVE; -- set_bit(CXL_REGION_F_INCOHERENT, &cxlr->flags); - } - - cxled->cxld.interleave_ways = p->interleave_ways; -@@ -2803,30 +2837,6 @@ int cxl_add_to_region(struct cxl_port *root, struct cxl_endpoint_decoder *cxled) - } - EXPORT_SYMBOL_NS_GPL(cxl_add_to_region, CXL); - --static int cxl_region_invalidate_memregion(struct cxl_region *cxlr) --{ -- if (!test_bit(CXL_REGION_F_INCOHERENT, &cxlr->flags)) -- return 0; -- -- if (!cpu_cache_has_invalidate_memregion()) { -- if (IS_ENABLED(CONFIG_CXL_REGION_INVALIDATION_TEST)) { -- dev_warn_once( -- &cxlr->dev, -- "Bypassing cpu_cache_invalidate_memregion() for testing!\n"); -- clear_bit(CXL_REGION_F_INCOHERENT, &cxlr->flags); -- return 0; -- } else { -- dev_err(&cxlr->dev, -- "Failed to synchronize CPU cache state\n"); -- return -ENXIO; -- } -- } -- -- cpu_cache_invalidate_memregion(IORES_DESC_CXL); -- clear_bit(CXL_REGION_F_INCOHERENT, &cxlr->flags); -- return 0; --} -- - static int is_system_ram(struct resource *res, void *arg) - { - struct cxl_region *cxlr = arg; -@@ -2854,8 +2864,6 @@ static int cxl_region_probe(struct device *dev) - goto out; - } - -- rc = cxl_region_invalidate_memregion(cxlr); -- - /* - * From this point on any path that changes the region's state away from - * CXL_CONFIG_COMMIT is also responsible for releasing the driver. -diff --git a/drivers/cxl/cxl.h b/drivers/cxl/cxl.h -index 044a92d9813e2..70ab8fcd0377c 100644 ---- a/drivers/cxl/cxl.h -+++ b/drivers/cxl/cxl.h -@@ -462,18 +462,12 @@ struct cxl_region_params { - int nr_targets; - }; - --/* -- * Flag whether this region needs to have its HPA span synchronized with -- * CPU cache state at region activation time. -- */ --#define CXL_REGION_F_INCOHERENT 0 -- - /* - * Indicate whether this region has been assembled by autodetection or - * userspace assembly. Prevent endpoint decoders outside of automatic - * detection from being added to the region. - */ --#define CXL_REGION_F_AUTO 1 -+#define CXL_REGION_F_AUTO 0 - - /** - * struct cxl_region - CXL region --- -2.39.2 - diff --git a/queue-6.4/dax-fix-dax_mapping_release-use-after-free.patch b/queue-6.4/dax-fix-dax_mapping_release-use-after-free.patch deleted file mode 100644 index 14b8315fd9c..00000000000 --- a/queue-6.4/dax-fix-dax_mapping_release-use-after-free.patch +++ /dev/null @@ -1,79 +0,0 @@ -From 22ddaaf9bd880376ce050708319c2eb9450b0c95 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Fri, 2 Jun 2023 23:13:54 -0700 -Subject: dax: Fix dax_mapping_release() use after free - -From: Dan Williams - -[ Upstream commit 6d24b170a9db0456f577b1ab01226a2254c016a8 ] - -A CONFIG_DEBUG_KOBJECT_RELEASE test of removing a device-dax region -provider (like modprobe -r dax_hmem) yields: - - kobject: 'mapping0' (ffff93eb460e8800): kobject_release, parent 0000000000000000 (delayed 2000) - [..] - DEBUG_LOCKS_WARN_ON(1) - WARNING: CPU: 23 PID: 282 at kernel/locking/lockdep.c:232 __lock_acquire+0x9fc/0x2260 - [..] - RIP: 0010:__lock_acquire+0x9fc/0x2260 - [..] - Call Trace: - - [..] - lock_acquire+0xd4/0x2c0 - ? ida_free+0x62/0x130 - _raw_spin_lock_irqsave+0x47/0x70 - ? ida_free+0x62/0x130 - ida_free+0x62/0x130 - dax_mapping_release+0x1f/0x30 - device_release+0x36/0x90 - kobject_delayed_cleanup+0x46/0x150 - -Due to attempting ida_free() on an ida object that has already been -freed. Devices typically only hold a reference on their parent while -registered. If a child needs a parent object to complete its release it -needs to hold a reference that it drops from its release callback. -Arrange for a dax_mapping to pin its parent dev_dax instance until -dax_mapping_release(). - -Fixes: 0b07ce872a9e ("device-dax: introduce 'mapping' devices") -Signed-off-by: Dan Williams -Link: https://lore.kernel.org/r/168577283412.1672036.16111545266174261446.stgit@dwillia2-xfh.jf.intel.com -Reviewed-by: Dave Jiang -Reviewed-by: Fan Ni -Reviewed-by: Ira Weiny -Signed-off-by: Vishal Verma -Signed-off-by: Sasha Levin ---- - drivers/dax/bus.c | 5 ++++- - 1 file changed, 4 insertions(+), 1 deletion(-) - -diff --git a/drivers/dax/bus.c b/drivers/dax/bus.c -index 227800053309f..aee695f86b445 100644 ---- a/drivers/dax/bus.c -+++ b/drivers/dax/bus.c -@@ -635,10 +635,12 @@ EXPORT_SYMBOL_GPL(alloc_dax_region); - static void dax_mapping_release(struct device *dev) - { - struct dax_mapping *mapping = to_dax_mapping(dev); -- struct dev_dax *dev_dax = to_dev_dax(dev->parent); -+ struct device *parent = dev->parent; -+ struct dev_dax *dev_dax = to_dev_dax(parent); - - ida_free(&dev_dax->ida, mapping->id); - kfree(mapping); -+ put_device(parent); - } - - static void unregister_dax_mapping(void *data) -@@ -778,6 +780,7 @@ static int devm_register_dax_mapping(struct dev_dax *dev_dax, int range_id) - dev = &mapping->dev; - device_initialize(dev); - dev->parent = &dev_dax->dev; -+ get_device(dev->parent); - dev->type = &dax_mapping_type; - dev_set_name(dev, "mapping%d", mapping->id); - rc = device_add(dev); --- -2.39.2 - diff --git a/queue-6.4/dax-introduce-alloc_dev_dax_id.patch b/queue-6.4/dax-introduce-alloc_dev_dax_id.patch deleted file mode 100644 index cdfaef1e983..00000000000 --- a/queue-6.4/dax-introduce-alloc_dev_dax_id.patch +++ /dev/null @@ -1,195 +0,0 @@ -From ca94eb200d84f4e5eaefa2f70d5001179e8b2273 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Fri, 2 Jun 2023 23:14:05 -0700 -Subject: dax: Introduce alloc_dev_dax_id() - -From: Dan Williams - -[ Upstream commit 70aab281e18c68a1284bc387de127c2fc0bed3f8 ] - -The reference counting of dax_region objects is needlessly complicated, -has lead to confusion [1], and has hidden a bug [2]. Towards cleaning up -that mess introduce alloc_dev_dax_id() to minimize the holding of a -dax_region reference to only what dev_dax_release() needs, the -dax_region->ida. - -Part of the reason for the mess was the design to dereference a -dax_region in all cases in free_dev_dax_id() even if the id was -statically assigned by the upper level dax_region driver. Remove the -need to call "is_static(dax_region)" by tracking whether the id is -dynamic directly in the dev_dax instance itself. - -With that flag the dax_region pinning and release per dev_dax instance -can move to alloc_dev_dax_id() and free_dev_dax_id() respectively. - -A follow-on cleanup address the unnecessary references in the dax_region -setup and drivers. - -Fixes: 0f3da14a4f05 ("device-dax: introduce 'seed' devices") -Link: http://lore.kernel.org/r/20221203095858.612027-1-liuyongqiang13@huawei.com [1] -Link: http://lore.kernel.org/r/3cf0890b-4eb0-e70e-cd9c-2ecc3d496263@hpe.com [2] -Reported-by: Yongqiang Liu -Reported-by: Paul Cassella -Reported-by: Ira Weiny -Signed-off-by: Dan Williams -Link: https://lore.kernel.org/r/168577284563.1672036.13493034988900989554.stgit@dwillia2-xfh.jf.intel.com -Reviewed-by: Ira Weiny -Signed-off-by: Vishal Verma -Signed-off-by: Sasha Levin ---- - drivers/dax/bus.c | 56 ++++++++++++++++++++++++--------------- - drivers/dax/dax-private.h | 4 ++- - 2 files changed, 37 insertions(+), 23 deletions(-) - -diff --git a/drivers/dax/bus.c b/drivers/dax/bus.c -index aee695f86b445..e7c61358564e1 100644 ---- a/drivers/dax/bus.c -+++ b/drivers/dax/bus.c -@@ -446,18 +446,34 @@ static void unregister_dev_dax(void *dev) - put_device(dev); - } - -+static void dax_region_free(struct kref *kref) -+{ -+ struct dax_region *dax_region; -+ -+ dax_region = container_of(kref, struct dax_region, kref); -+ kfree(dax_region); -+} -+ -+void dax_region_put(struct dax_region *dax_region) -+{ -+ kref_put(&dax_region->kref, dax_region_free); -+} -+EXPORT_SYMBOL_GPL(dax_region_put); -+ - /* a return value >= 0 indicates this invocation invalidated the id */ - static int __free_dev_dax_id(struct dev_dax *dev_dax) - { -- struct dax_region *dax_region = dev_dax->region; - struct device *dev = &dev_dax->dev; -+ struct dax_region *dax_region; - int rc = dev_dax->id; - - device_lock_assert(dev); - -- if (is_static(dax_region) || dev_dax->id < 0) -+ if (!dev_dax->dyn_id || dev_dax->id < 0) - return -1; -+ dax_region = dev_dax->region; - ida_free(&dax_region->ida, dev_dax->id); -+ dax_region_put(dax_region); - dev_dax->id = -1; - return rc; - } -@@ -473,6 +489,20 @@ static int free_dev_dax_id(struct dev_dax *dev_dax) - return rc; - } - -+static int alloc_dev_dax_id(struct dev_dax *dev_dax) -+{ -+ struct dax_region *dax_region = dev_dax->region; -+ int id; -+ -+ id = ida_alloc(&dax_region->ida, GFP_KERNEL); -+ if (id < 0) -+ return id; -+ kref_get(&dax_region->kref); -+ dev_dax->dyn_id = true; -+ dev_dax->id = id; -+ return id; -+} -+ - static ssize_t delete_store(struct device *dev, struct device_attribute *attr, - const char *buf, size_t len) - { -@@ -560,20 +590,6 @@ static const struct attribute_group *dax_region_attribute_groups[] = { - NULL, - }; - --static void dax_region_free(struct kref *kref) --{ -- struct dax_region *dax_region; -- -- dax_region = container_of(kref, struct dax_region, kref); -- kfree(dax_region); --} -- --void dax_region_put(struct dax_region *dax_region) --{ -- kref_put(&dax_region->kref, dax_region_free); --} --EXPORT_SYMBOL_GPL(dax_region_put); -- - static void dax_region_unregister(void *region) - { - struct dax_region *dax_region = region; -@@ -1298,12 +1314,10 @@ static const struct attribute_group *dax_attribute_groups[] = { - static void dev_dax_release(struct device *dev) - { - struct dev_dax *dev_dax = to_dev_dax(dev); -- struct dax_region *dax_region = dev_dax->region; - struct dax_device *dax_dev = dev_dax->dax_dev; - - put_dax(dax_dev); - free_dev_dax_id(dev_dax); -- dax_region_put(dax_region); - kfree(dev_dax->pgmap); - kfree(dev_dax); - } -@@ -1327,6 +1341,7 @@ struct dev_dax *devm_create_dev_dax(struct dev_dax_data *data) - if (!dev_dax) - return ERR_PTR(-ENOMEM); - -+ dev_dax->region = dax_region; - if (is_static(dax_region)) { - if (dev_WARN_ONCE(parent, data->id < 0, - "dynamic id specified to static region\n")) { -@@ -1342,13 +1357,11 @@ struct dev_dax *devm_create_dev_dax(struct dev_dax_data *data) - goto err_id; - } - -- rc = ida_alloc(&dax_region->ida, GFP_KERNEL); -+ rc = alloc_dev_dax_id(dev_dax); - if (rc < 0) - goto err_id; -- dev_dax->id = rc; - } - -- dev_dax->region = dax_region; - dev = &dev_dax->dev; - device_initialize(dev); - dev_set_name(dev, "dax%d.%d", dax_region->id, dev_dax->id); -@@ -1389,7 +1402,6 @@ struct dev_dax *devm_create_dev_dax(struct dev_dax_data *data) - dev_dax->target_node = dax_region->target_node; - dev_dax->align = dax_region->align; - ida_init(&dev_dax->ida); -- kref_get(&dax_region->kref); - - inode = dax_inode(dax_dev); - dev->devt = inode->i_rdev; -diff --git a/drivers/dax/dax-private.h b/drivers/dax/dax-private.h -index 1c974b7caae6e..afcada6fd2eda 100644 ---- a/drivers/dax/dax-private.h -+++ b/drivers/dax/dax-private.h -@@ -52,7 +52,8 @@ struct dax_mapping { - * @region - parent region - * @dax_dev - core dax functionality - * @target_node: effective numa node if dev_dax memory range is onlined -- * @id: ida allocated id -+ * @dyn_id: is this a dynamic or statically created instance -+ * @id: ida allocated id when the dax_region is not static - * @ida: mapping id allocator - * @dev - device core - * @pgmap - pgmap for memmap setup / lifetime (driver owned) -@@ -64,6 +65,7 @@ struct dev_dax { - struct dax_device *dax_dev; - unsigned int align; - int target_node; -+ bool dyn_id; - int id; - struct ida ida; - struct device dev; --- -2.39.2 - diff --git a/queue-6.4/dax-kmem-pass-valid-argument-to-memory_group_registe.patch b/queue-6.4/dax-kmem-pass-valid-argument-to-memory_group_registe.patch deleted file mode 100644 index 6f51c8ce357..00000000000 --- a/queue-6.4/dax-kmem-pass-valid-argument-to-memory_group_registe.patch +++ /dev/null @@ -1,76 +0,0 @@ -From 8e958803877d22468d6730b631f0dae7d9868256 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Wed, 21 Jun 2023 21:20:25 +0530 -Subject: dax/kmem: Pass valid argument to memory_group_register_static - -From: Tarun Sahu - -[ Upstream commit 46e66dab8565f742374e9cc4ff7d35f344d774e2 ] - -memory_group_register_static takes maximum number of pages as the argument -while dev_dax_kmem_probe passes total_len (in bytes) as the argument. - -IIUC, I don't see any crash/panic impact as such. As, -memory_group_register_static just set the max_pages limit which is used in -auto_movable_zone_for_pfn to determine the zone. - -which might cause these condition to behave differently, - -This will be true always so jump will happen to kernel_zone - ... - if (!auto_movable_can_online_movable(NUMA_NO_NODE, group, nr_pages)) - goto kernel_zone; - - ... - kernel_zone: - return default_kernel_zone_for_pfn(nid, pfn, nr_pages); - -Here, In below, zone_intersects compare range will be larger as nr_pages -will be higher (derived from total_len passed in dev_dax_kmem_probe). - - ... - static struct zone *default_kernel_zone_for_pfn(int nid, unsigned long start_pfn, - unsigned long nr_pages) - { - struct pglist_data *pgdat = NODE_DATA(nid); - int zid; - - for (zid = 0; zid < ZONE_NORMAL; zid++) { - struct zone *zone = &pgdat->node_zones[zid]; - - if (zone_intersects(zone, start_pfn, nr_pages)) - return zone; - } - - return &pgdat->node_zones[ZONE_NORMAL]; - } - -Incorrect zone will be returned here, which in later time might cause bigger -problem. - -Fixes: eedf634aac3b ("dax/kmem: use a single static memory group for a single probed unit") -Signed-off-by: Tarun Sahu -Link: https://lore.kernel.org/r/20230621155025.370672-1-tsahu@linux.ibm.com -Reviewed-by: Vishal Verma -Signed-off-by: Vishal Verma -Signed-off-by: Sasha Levin ---- - drivers/dax/kmem.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/drivers/dax/kmem.c b/drivers/dax/kmem.c -index 7b36db6f1cbdc..898ca95057547 100644 ---- a/drivers/dax/kmem.c -+++ b/drivers/dax/kmem.c -@@ -99,7 +99,7 @@ static int dev_dax_kmem_probe(struct dev_dax *dev_dax) - if (!data->res_name) - goto err_res_name; - -- rc = memory_group_register_static(numa_node, total_len); -+ rc = memory_group_register_static(numa_node, PFN_UP(total_len)); - if (rc < 0) - goto err_reg_mgid; - data->mgid = rc; --- -2.39.2 - diff --git a/queue-6.4/driver-soc-xilinx-use-_safe-loop-iterator-to-avoid-a.patch b/queue-6.4/driver-soc-xilinx-use-_safe-loop-iterator-to-avoid-a.patch deleted file mode 100644 index e5da39753a1..00000000000 --- a/queue-6.4/driver-soc-xilinx-use-_safe-loop-iterator-to-avoid-a.patch +++ /dev/null @@ -1,58 +0,0 @@ -From ae6e67711a9edc023a88f29286990ef0b54b9c01 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Fri, 21 Apr 2023 13:44:54 +0300 -Subject: driver: soc: xilinx: use _safe loop iterator to avoid a use after - free - -From: Dan Carpenter - -[ Upstream commit c58da0ba3e5c86e51e2c1557afaf6f71e00c4533 ] - -The hash_for_each_possible() loop dereferences "eve_data" to get the -next item on the list. However the loop frees eve_data so it leads to -a use after free. Use hash_for_each_possible_safe() instead. - -Fixes: c7fdb2404f66 ("drivers: soc: xilinx: add xilinx event management driver") -Signed-off-by: Dan Carpenter -Link: https://lore.kernel.org/r/761e0e4a-4caf-4a71-8f47-1c6ad908a848@kili.mountain -Signed-off-by: Michal Simek -Signed-off-by: Sasha Levin ---- - drivers/soc/xilinx/xlnx_event_manager.c | 6 ++++-- - 1 file changed, 4 insertions(+), 2 deletions(-) - -diff --git a/drivers/soc/xilinx/xlnx_event_manager.c b/drivers/soc/xilinx/xlnx_event_manager.c -index c76381899ef49..f9d9b82b562da 100644 ---- a/drivers/soc/xilinx/xlnx_event_manager.c -+++ b/drivers/soc/xilinx/xlnx_event_manager.c -@@ -192,11 +192,12 @@ static int xlnx_remove_cb_for_suspend(event_cb_func_t cb_fun) - struct registered_event_data *eve_data; - struct agent_cb *cb_pos; - struct agent_cb *cb_next; -+ struct hlist_node *tmp; - - is_need_to_unregister = false; - - /* Check for existing entry in hash table for given cb_type */ -- hash_for_each_possible(reg_driver_map, eve_data, hentry, PM_INIT_SUSPEND_CB) { -+ hash_for_each_possible_safe(reg_driver_map, eve_data, tmp, hentry, PM_INIT_SUSPEND_CB) { - if (eve_data->cb_type == PM_INIT_SUSPEND_CB) { - /* Delete the list of callback */ - list_for_each_entry_safe(cb_pos, cb_next, &eve_data->cb_list_head, list) { -@@ -228,11 +229,12 @@ static int xlnx_remove_cb_for_notify_event(const u32 node_id, const u32 event, - u64 key = ((u64)node_id << 32U) | (u64)event; - struct agent_cb *cb_pos; - struct agent_cb *cb_next; -+ struct hlist_node *tmp; - - is_need_to_unregister = false; - - /* Check for existing entry in hash table for given key id */ -- hash_for_each_possible(reg_driver_map, eve_data, hentry, key) { -+ hash_for_each_possible_safe(reg_driver_map, eve_data, tmp, hentry, key) { - if (eve_data->key == key) { - /* Delete the list of callback */ - list_for_each_entry_safe(cb_pos, cb_next, &eve_data->cb_list_head, list) { --- -2.39.2 - diff --git a/queue-6.4/drivers-meson-secure-pwrc-always-enable-dma-domain.patch b/queue-6.4/drivers-meson-secure-pwrc-always-enable-dma-domain.patch deleted file mode 100644 index 15f316aa5a4..00000000000 --- a/queue-6.4/drivers-meson-secure-pwrc-always-enable-dma-domain.patch +++ /dev/null @@ -1,42 +0,0 @@ -From b0c3a1434ddfcbb951647e6eb239b7f4f922777c Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Sat, 10 Jun 2023 12:04:14 +0300 -Subject: drivers: meson: secure-pwrc: always enable DMA domain - -From: Alexey Romanov - -[ Upstream commit 0bb4644d583789c97e74d3e3047189f0c59c4742 ] - -Starting from commit e45f243409db ("firmware: meson_sm: -populate platform devices from sm device tree data") pwrc -is probed successfully and disables unused pwr domains. -By A1 SoC family design, any TEE requires DMA pwr domain -always enabled. - -Fixes: b3dde5013e13 ("soc: amlogic: Add support for Secure power domains controller") -Signed-off-by: Alexey Romanov -Acked-by: Neil Armstrong -Link: https://lore.kernel.org/r/20230610090414.90529-1-avromanov@sberdevices.ru -[narmstrong: added fixes tag] -Signed-off-by: Neil Armstrong -Signed-off-by: Sasha Levin ---- - drivers/soc/amlogic/meson-secure-pwrc.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/drivers/soc/amlogic/meson-secure-pwrc.c b/drivers/soc/amlogic/meson-secure-pwrc.c -index e935187635267..25b4b71df9b89 100644 ---- a/drivers/soc/amlogic/meson-secure-pwrc.c -+++ b/drivers/soc/amlogic/meson-secure-pwrc.c -@@ -105,7 +105,7 @@ static struct meson_secure_pwrc_domain_desc a1_pwrc_domains[] = { - SEC_PD(ACODEC, 0), - SEC_PD(AUDIO, 0), - SEC_PD(OTP, 0), -- SEC_PD(DMA, 0), -+ SEC_PD(DMA, GENPD_FLAG_ALWAYS_ON | GENPD_FLAG_IRQ_SAFE), - SEC_PD(SD_EMMC, 0), - SEC_PD(RAMA, 0), - /* SRAMB is used as ATF runtime memory, and should be always on */ --- -2.39.2 - diff --git a/queue-6.4/drivers-perf-apple_m1-force-63bit-counters-for-m2-cp.patch b/queue-6.4/drivers-perf-apple_m1-force-63bit-counters-for-m2-cp.patch deleted file mode 100644 index d2dbe1f3339..00000000000 --- a/queue-6.4/drivers-perf-apple_m1-force-63bit-counters-for-m2-cp.patch +++ /dev/null @@ -1,155 +0,0 @@ -From cf0fc9ccac6f8110574b3b83a8cbd21918290d12 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Sun, 28 May 2023 09:02:05 +0100 -Subject: drivers/perf: apple_m1: Force 63bit counters for M2 CPUs - -From: Marc Zyngier - -[ Upstream commit 8be3593b9efa8903d2ee7bb9cdf57a8e56c66f36 ] - -Sidharth reports that on M2, the PMU never generates any interrupt -when using 'perf record', which is a annoying as you get no sample. -I'm temped to say "no sample, no problem", but others may have -a different opinion. - -Upon investigation, it appears that the counters on M2 are -significantly different from the ones on M1, as they count on -64 bits instead of 48. Which of course, in the fine M1 tradition, -means that we can only use 63 bits, as the top bit is used to signal -the interrupt... - -This results in having to introduce yet another flag to indicate yet -another odd counter width. Who knows what the next crazy implementation -will do... - -With this, perf can work out the correct offset, and 'perf record' -works as intended. - -Tested on M2 and M2-Pro CPUs. - -Cc: Janne Grunau -Cc: Hector Martin -Cc: Mark Rutland -Cc: Will Deacon -Fixes: 7d0bfb7c9977 ("drivers/perf: apple_m1: Add Apple M2 support") -Reported-by: Sidharth Kshatriya -Tested-by: Sidharth Kshatriya -Signed-off-by: Marc Zyngier -Link: https://lore.kernel.org/r/20230528080205.288446-1-maz@kernel.org -Signed-off-by: Will Deacon -Signed-off-by: Sasha Levin ---- - drivers/perf/apple_m1_cpu_pmu.c | 30 ++++++++++++++++++++++++------ - drivers/perf/arm_pmu.c | 2 ++ - include/linux/perf/arm_pmu.h | 2 ++ - 3 files changed, 28 insertions(+), 6 deletions(-) - -diff --git a/drivers/perf/apple_m1_cpu_pmu.c b/drivers/perf/apple_m1_cpu_pmu.c -index 8574c6e58c83a..cd2de44b61b91 100644 ---- a/drivers/perf/apple_m1_cpu_pmu.c -+++ b/drivers/perf/apple_m1_cpu_pmu.c -@@ -493,6 +493,17 @@ static int m1_pmu_map_event(struct perf_event *event) - return armpmu_map_event(event, &m1_pmu_perf_map, NULL, M1_PMU_CFG_EVENT); - } - -+static int m2_pmu_map_event(struct perf_event *event) -+{ -+ /* -+ * Same deal as the above, except that M2 has 64bit counters. -+ * Which, as far as we're concerned, actually means 63 bits. -+ * Yes, this is getting awkward. -+ */ -+ event->hw.flags |= ARMPMU_EVT_63BIT; -+ return armpmu_map_event(event, &m1_pmu_perf_map, NULL, M1_PMU_CFG_EVENT); -+} -+ - static void m1_pmu_reset(void *info) - { - int i; -@@ -525,7 +536,7 @@ static int m1_pmu_set_event_filter(struct hw_perf_event *event, - return 0; - } - --static int m1_pmu_init(struct arm_pmu *cpu_pmu) -+static int m1_pmu_init(struct arm_pmu *cpu_pmu, u32 flags) - { - cpu_pmu->handle_irq = m1_pmu_handle_irq; - cpu_pmu->enable = m1_pmu_enable_event; -@@ -536,7 +547,14 @@ static int m1_pmu_init(struct arm_pmu *cpu_pmu) - cpu_pmu->clear_event_idx = m1_pmu_clear_event_idx; - cpu_pmu->start = m1_pmu_start; - cpu_pmu->stop = m1_pmu_stop; -- cpu_pmu->map_event = m1_pmu_map_event; -+ -+ if (flags & ARMPMU_EVT_47BIT) -+ cpu_pmu->map_event = m1_pmu_map_event; -+ else if (flags & ARMPMU_EVT_63BIT) -+ cpu_pmu->map_event = m2_pmu_map_event; -+ else -+ return WARN_ON(-EINVAL); -+ - cpu_pmu->reset = m1_pmu_reset; - cpu_pmu->set_event_filter = m1_pmu_set_event_filter; - -@@ -550,25 +568,25 @@ static int m1_pmu_init(struct arm_pmu *cpu_pmu) - static int m1_pmu_ice_init(struct arm_pmu *cpu_pmu) - { - cpu_pmu->name = "apple_icestorm_pmu"; -- return m1_pmu_init(cpu_pmu); -+ return m1_pmu_init(cpu_pmu, ARMPMU_EVT_47BIT); - } - - static int m1_pmu_fire_init(struct arm_pmu *cpu_pmu) - { - cpu_pmu->name = "apple_firestorm_pmu"; -- return m1_pmu_init(cpu_pmu); -+ return m1_pmu_init(cpu_pmu, ARMPMU_EVT_47BIT); - } - - static int m2_pmu_avalanche_init(struct arm_pmu *cpu_pmu) - { - cpu_pmu->name = "apple_avalanche_pmu"; -- return m1_pmu_init(cpu_pmu); -+ return m1_pmu_init(cpu_pmu, ARMPMU_EVT_63BIT); - } - - static int m2_pmu_blizzard_init(struct arm_pmu *cpu_pmu) - { - cpu_pmu->name = "apple_blizzard_pmu"; -- return m1_pmu_init(cpu_pmu); -+ return m1_pmu_init(cpu_pmu, ARMPMU_EVT_63BIT); - } - - static const struct of_device_id m1_pmu_of_device_ids[] = { -diff --git a/drivers/perf/arm_pmu.c b/drivers/perf/arm_pmu.c -index 15bd1e34a88ea..277e29fbd504f 100644 ---- a/drivers/perf/arm_pmu.c -+++ b/drivers/perf/arm_pmu.c -@@ -109,6 +109,8 @@ static inline u64 arm_pmu_event_max_period(struct perf_event *event) - { - if (event->hw.flags & ARMPMU_EVT_64BIT) - return GENMASK_ULL(63, 0); -+ else if (event->hw.flags & ARMPMU_EVT_63BIT) -+ return GENMASK_ULL(62, 0); - else if (event->hw.flags & ARMPMU_EVT_47BIT) - return GENMASK_ULL(46, 0); - else -diff --git a/include/linux/perf/arm_pmu.h b/include/linux/perf/arm_pmu.h -index 525b5d64e3948..c0e4baf940dce 100644 ---- a/include/linux/perf/arm_pmu.h -+++ b/include/linux/perf/arm_pmu.h -@@ -26,9 +26,11 @@ - */ - #define ARMPMU_EVT_64BIT 0x00001 /* Event uses a 64bit counter */ - #define ARMPMU_EVT_47BIT 0x00002 /* Event uses a 47bit counter */ -+#define ARMPMU_EVT_63BIT 0x00004 /* Event uses a 63bit counter */ - - static_assert((PERF_EVENT_FLAG_ARCH & ARMPMU_EVT_64BIT) == ARMPMU_EVT_64BIT); - static_assert((PERF_EVENT_FLAG_ARCH & ARMPMU_EVT_47BIT) == ARMPMU_EVT_47BIT); -+static_assert((PERF_EVENT_FLAG_ARCH & ARMPMU_EVT_63BIT) == ARMPMU_EVT_63BIT); - - #define HW_OP_UNSUPPORTED 0xFFFF - #define C(_x) PERF_COUNT_HW_CACHE_##_x --- -2.39.2 - diff --git a/queue-6.4/drivers-perf-hisi-don-t-migrate-perf-to-the-cpu-goin.patch b/queue-6.4/drivers-perf-hisi-don-t-migrate-perf-to-the-cpu-goin.patch deleted file mode 100644 index 831c56f85e5..00000000000 --- a/queue-6.4/drivers-perf-hisi-don-t-migrate-perf-to-the-cpu-goin.patch +++ /dev/null @@ -1,65 +0,0 @@ -From ec361c8b7cd8d6cd0a09f278a3bef321683d5630 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Thu, 8 Jun 2023 19:43:26 +0800 -Subject: drivers/perf: hisi: Don't migrate perf to the CPU going to teardown - -From: Junhao He - -[ Upstream commit 7a6a9f1c5a0a875a421db798d4b2ee022dc1ee1a ] - -The driver needs to migrate the perf context if the current using CPU going -to teardown. By the time calling the cpuhp::teardown() callback the -cpu_online_mask() hasn't updated yet and still includes the CPU going to -teardown. In current driver's implementation we may migrate the context -to the teardown CPU and leads to the below calltrace: - -... -[ 368.104662][ T932] task:cpuhp/0 state:D stack: 0 pid: 15 ppid: 2 flags:0x00000008 -[ 368.113699][ T932] Call trace: -[ 368.116834][ T932] __switch_to+0x7c/0xbc -[ 368.120924][ T932] __schedule+0x338/0x6f0 -[ 368.125098][ T932] schedule+0x50/0xe0 -[ 368.128926][ T932] schedule_preempt_disabled+0x18/0x24 -[ 368.134229][ T932] __mutex_lock.constprop.0+0x1d4/0x5dc -[ 368.139617][ T932] __mutex_lock_slowpath+0x1c/0x30 -[ 368.144573][ T932] mutex_lock+0x50/0x60 -[ 368.148579][ T932] perf_pmu_migrate_context+0x84/0x2b0 -[ 368.153884][ T932] hisi_pcie_pmu_offline_cpu+0x90/0xe0 [hisi_pcie_pmu] -[ 368.160579][ T932] cpuhp_invoke_callback+0x2a0/0x650 -[ 368.165707][ T932] cpuhp_thread_fun+0xe4/0x190 -[ 368.170316][ T932] smpboot_thread_fn+0x15c/0x1a0 -[ 368.175099][ T932] kthread+0x108/0x13c -[ 368.179012][ T932] ret_from_fork+0x10/0x18 -... - -Use function cpumask_any_but() to find one correct active cpu to fixes -this issue. - -Fixes: 8404b0fbc7fb ("drivers/perf: hisi: Add driver for HiSilicon PCIe PMU") -Signed-off-by: Junhao He -Reviewed-by: Jonathan Cameron -Reviewed-by: Yicong Yang -Acked-by: Mark Rutland -Link: https://lore.kernel.org/r/20230608114326.27649-1-hejunhao3@huawei.com -Signed-off-by: Will Deacon -Signed-off-by: Sasha Levin ---- - drivers/perf/hisilicon/hisi_pcie_pmu.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/drivers/perf/hisilicon/hisi_pcie_pmu.c b/drivers/perf/hisilicon/hisi_pcie_pmu.c -index 6fee0b6e163bb..e10fc7cb9493a 100644 ---- a/drivers/perf/hisilicon/hisi_pcie_pmu.c -+++ b/drivers/perf/hisilicon/hisi_pcie_pmu.c -@@ -683,7 +683,7 @@ static int hisi_pcie_pmu_offline_cpu(unsigned int cpu, struct hlist_node *node) - - pcie_pmu->on_cpu = -1; - /* Choose a new CPU from all online cpus. */ -- target = cpumask_first(cpu_online_mask); -+ target = cpumask_any_but(cpu_online_mask, cpu); - if (target >= nr_cpu_ids) { - pci_err(pcie_pmu->pdev, "There is no CPU to set\n"); - return 0; --- -2.39.2 - diff --git a/queue-6.4/drm-add-fixed-point-helper-to-get-rounded-integer-va.patch b/queue-6.4/drm-add-fixed-point-helper-to-get-rounded-integer-va.patch deleted file mode 100644 index 45f54e8ae69..00000000000 --- a/queue-6.4/drm-add-fixed-point-helper-to-get-rounded-integer-va.patch +++ /dev/null @@ -1,57 +0,0 @@ -From b4eec99cad6d7fb48fbf1626b9e98223162339c1 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Fri, 12 May 2023 07:40:44 -0300 -Subject: drm: Add fixed-point helper to get rounded integer values -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -From: Maíra Canal - -[ Upstream commit 8b25320887d7feac98875546ea0f521628b745bb ] - -Create a new fixed-point helper to allow us to return the rounded value -of our fixed point value. - -[v2]: - * Create the function drm_fixp2int_round() (Melissa Wen). -[v3]: - * Use drm_fixp2int() instead of shifting manually (Arthur Grillo). - -Signed-off-by: Maíra Canal -Reviewed-by: Arthur Grillo -Signed-off-by: Maíra Canal -Link: https://patchwork.freedesktop.org/patch/msgid/20230512104044.65034-1-mcanal@igalia.com -Stable-dep-of: ab87f558dcfb ("drm/vkms: Fix RGB565 pixel conversion") -Signed-off-by: Sasha Levin ---- - include/drm/drm_fixed.h | 6 ++++++ - 1 file changed, 6 insertions(+) - -diff --git a/include/drm/drm_fixed.h b/include/drm/drm_fixed.h -index 255645c1f9a89..6ea339d5de088 100644 ---- a/include/drm/drm_fixed.h -+++ b/include/drm/drm_fixed.h -@@ -71,6 +71,7 @@ static inline u32 dfixed_div(fixed20_12 A, fixed20_12 B) - } - - #define DRM_FIXED_POINT 32 -+#define DRM_FIXED_POINT_HALF 16 - #define DRM_FIXED_ONE (1ULL << DRM_FIXED_POINT) - #define DRM_FIXED_DECIMAL_MASK (DRM_FIXED_ONE - 1) - #define DRM_FIXED_DIGITS_MASK (~DRM_FIXED_DECIMAL_MASK) -@@ -87,6 +88,11 @@ static inline int drm_fixp2int(s64 a) - return ((s64)a) >> DRM_FIXED_POINT; - } - -+static inline int drm_fixp2int_round(s64 a) -+{ -+ return drm_fixp2int(a + (1 << (DRM_FIXED_POINT_HALF - 1))); -+} -+ - static inline int drm_fixp2int_ceil(s64 a) - { - if (a > 0) --- -2.39.2 - diff --git a/queue-6.4/drm-amd-display-add-logging-for-display-mall-refresh.patch b/queue-6.4/drm-amd-display-add-logging-for-display-mall-refresh.patch deleted file mode 100644 index ce4908c3cfe..00000000000 --- a/queue-6.4/drm-amd-display-add-logging-for-display-mall-refresh.patch +++ /dev/null @@ -1,40 +0,0 @@ -From 9bdd669ae7b90fff3ab67d2cb7610ae231a29f35 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Wed, 10 Jun 2020 11:49:16 -0400 -Subject: drm/amd/display: Add logging for display MALL refresh setting - -From: Wesley Chalmers - -[ Upstream commit cd8f067a46d34dee3188da184912ae3d64d98444 ] - -[WHY] -Add log entry for when display refresh from MALL -settings are sent to SMU. - -Fixes: 1664641ea946 ("drm/amd/display: Add logger for SMU msg") -Signed-off-by: Wesley Chalmers -Acked-by: Aurabindo Pillai -Tested-by: Daniel Wheeler -Signed-off-by: Alex Deucher -Signed-off-by: Sasha Levin ---- - .../drm/amd/display/dc/clk_mgr/dcn30/dcn30_clk_mgr_smu_msg.c | 3 +++ - 1 file changed, 3 insertions(+) - -diff --git a/drivers/gpu/drm/amd/display/dc/clk_mgr/dcn30/dcn30_clk_mgr_smu_msg.c b/drivers/gpu/drm/amd/display/dc/clk_mgr/dcn30/dcn30_clk_mgr_smu_msg.c -index 1fbf1c105dc12..bdbf183066981 100644 ---- a/drivers/gpu/drm/amd/display/dc/clk_mgr/dcn30/dcn30_clk_mgr_smu_msg.c -+++ b/drivers/gpu/drm/amd/display/dc/clk_mgr/dcn30/dcn30_clk_mgr_smu_msg.c -@@ -312,6 +312,9 @@ void dcn30_smu_set_display_refresh_from_mall(struct clk_mgr_internal *clk_mgr, b - /* bits 8:7 for cache timer scale, bits 6:1 for cache timer delay, bit 0 = 1 for enable, = 0 for disable */ - uint32_t param = (cache_timer_scale << 7) | (cache_timer_delay << 1) | (enable ? 1 : 0); - -+ smu_print("SMU Set display refresh from mall: enable = %d, cache_timer_delay = %d, cache_timer_scale = %d\n", -+ enable, cache_timer_delay, cache_timer_scale); -+ - dcn30_smu_send_msg_with_param(clk_mgr, - DALSMC_MSG_SetDisplayRefreshFromMall, param, NULL); - } --- -2.39.2 - diff --git a/queue-6.4/drm-amd-display-explicitly-specify-update-type-per-p.patch b/queue-6.4/drm-amd-display-explicitly-specify-update-type-per-p.patch deleted file mode 100644 index 61bac488497..00000000000 --- a/queue-6.4/drm-amd-display-explicitly-specify-update-type-per-p.patch +++ /dev/null @@ -1,49 +0,0 @@ -From eabcadc4253bf7eaa0c9aa0cebfbd4d745de3b09 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Thu, 2 May 2019 13:21:48 -0400 -Subject: drm/amd/display: Explicitly specify update type per plane info change - -From: Nicholas Kazlauskas - -[ Upstream commit 710cc1e7cd461446a9325c9bd1e9a54daa462952 ] - -[Why] -The bit for flip addr is being set causing the determination for -FAST vs MEDIUM to always return MEDIUM when plane info is provided -as a surface update. This causes extreme stuttering for the typical -atomic update path on Linux. - -[How] -Don't use update_flags->raw for determining FAST vs MEDIUM. It's too -fragile to changes like this. - -Explicitly specify the update type per update flag instead. It's not -as clever as checking the bits itself but at least it's correct. - -Fixes: aa5fdb1ab5b6 ("drm/amd/display: Explicitly specify update type per plane info change") -Reviewed-by: Rodrigo Siqueira -Signed-off-by: Nicholas Kazlauskas -Tested-by: Daniel Wheeler -Signed-off-by: Alex Deucher -Signed-off-by: Sasha Levin ---- - drivers/gpu/drm/amd/display/dc/core/dc.c | 3 --- - 1 file changed, 3 deletions(-) - -diff --git a/drivers/gpu/drm/amd/display/dc/core/dc.c b/drivers/gpu/drm/amd/display/dc/core/dc.c -index 7cde67b7f0c33..dcf8631181690 100644 ---- a/drivers/gpu/drm/amd/display/dc/core/dc.c -+++ b/drivers/gpu/drm/amd/display/dc/core/dc.c -@@ -2504,9 +2504,6 @@ static enum surface_update_type det_surface_update(const struct dc *dc, - enum surface_update_type overall_type = UPDATE_TYPE_FAST; - union surface_update_flags *update_flags = &u->surface->update_flags; - -- if (u->flip_addr) -- update_flags->bits.addr_update = 1; -- - if (!is_surface_in_context(context, u->surface) || u->surface->force_full_update) { - update_flags->raw = 0xFFFFFFFF; - return UPDATE_TYPE_FULL; --- -2.39.2 - diff --git a/queue-6.4/drm-amd-display-fix-a-test-calculateprefetchschedule.patch b/queue-6.4/drm-amd-display-fix-a-test-calculateprefetchschedule.patch deleted file mode 100644 index d67810c5c5e..00000000000 --- a/queue-6.4/drm-amd-display-fix-a-test-calculateprefetchschedule.patch +++ /dev/null @@ -1,38 +0,0 @@ -From 2e6073d29b55b124ef8d43247db3df30e4b74186 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Mon, 17 Apr 2023 23:35:08 +0200 -Subject: drm/amd/display: Fix a test CalculatePrefetchSchedule() - -From: Christophe JAILLET - -[ Upstream commit 960e27a5741cd3001996ff6ddfb3eb0ed3a4909d ] - -It is likely Height was expected here, instead of Width. - -Test the correct variable. - -Fixes: 17529ea2acfa ("drm/amd/display: Optimizations for DML math") -Signed-off-by: Christophe JAILLET -Signed-off-by: Hamza Mahfooz -Signed-off-by: Alex Deucher -Signed-off-by: Sasha Levin ---- - drivers/gpu/drm/amd/display/dc/dml/dcn21/display_mode_vba_21.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/drivers/gpu/drm/amd/display/dc/dml/dcn21/display_mode_vba_21.c b/drivers/gpu/drm/amd/display/dc/dml/dcn21/display_mode_vba_21.c -index b7c2844d0cbee..f294f2f8c75bc 100644 ---- a/drivers/gpu/drm/amd/display/dc/dml/dcn21/display_mode_vba_21.c -+++ b/drivers/gpu/drm/amd/display/dc/dml/dcn21/display_mode_vba_21.c -@@ -810,7 +810,7 @@ static bool CalculatePrefetchSchedule( - *swath_width_chroma_ub = dml_ceil(SwathWidthY / 2 - 1, myPipe->BlockWidth256BytesC) + myPipe->BlockWidth256BytesC; - } else { - *swath_width_luma_ub = dml_ceil(SwathWidthY - 1, myPipe->BlockHeight256BytesY) + myPipe->BlockHeight256BytesY; -- if (myPipe->BlockWidth256BytesC > 0) -+ if (myPipe->BlockHeight256BytesC > 0) - *swath_width_chroma_ub = dml_ceil(SwathWidthY / 2 - 1, myPipe->BlockHeight256BytesC) + myPipe->BlockHeight256BytesC; - } - --- -2.39.2 - diff --git a/queue-6.4/drm-amd-display-fix-a-test-dml32_rq_dlg_get_rq_reg.patch b/queue-6.4/drm-amd-display-fix-a-test-dml32_rq_dlg_get_rq_reg.patch deleted file mode 100644 index 336b5629b4e..00000000000 --- a/queue-6.4/drm-amd-display-fix-a-test-dml32_rq_dlg_get_rq_reg.patch +++ /dev/null @@ -1,39 +0,0 @@ -From cbc7b515b7d2b15450c5ff27a00d596a39044a7a Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Mon, 17 Apr 2023 23:41:11 +0200 -Subject: drm/amd/display: Fix a test dml32_rq_dlg_get_rq_reg() - -From: Christophe JAILLET - -[ Upstream commit bafc31166aa7df5fa26ae0ad8196d1717e6cdea9 ] - -It is likely p1_min_meta_chunk_bytes was expected here, instead of -min_meta_chunk_bytes. - -Test the correct variable. - -Fixes: dda4fb85e433 ("drm/amd/display: DML changes for DCN32/321") -Signed-off-by: Christophe JAILLET -Signed-off-by: Hamza Mahfooz -Signed-off-by: Alex Deucher -Signed-off-by: Sasha Levin ---- - .../gpu/drm/amd/display/dc/dml/dcn32/display_rq_dlg_calc_32.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/drivers/gpu/drm/amd/display/dc/dml/dcn32/display_rq_dlg_calc_32.c b/drivers/gpu/drm/amd/display/dc/dml/dcn32/display_rq_dlg_calc_32.c -index 395ae8761980f..9ba6cb67655f4 100644 ---- a/drivers/gpu/drm/amd/display/dc/dml/dcn32/display_rq_dlg_calc_32.c -+++ b/drivers/gpu/drm/amd/display/dc/dml/dcn32/display_rq_dlg_calc_32.c -@@ -116,7 +116,7 @@ void dml32_rq_dlg_get_rq_reg(display_rq_regs_st *rq_regs, - else - rq_regs->rq_regs_l.min_meta_chunk_size = dml_log2(min_meta_chunk_bytes) - 6 + 1; - -- if (min_meta_chunk_bytes == 0) -+ if (p1_min_meta_chunk_bytes == 0) - rq_regs->rq_regs_c.min_meta_chunk_size = 0; - else - rq_regs->rq_regs_c.min_meta_chunk_size = dml_log2(p1_min_meta_chunk_bytes) - 6 + 1; --- -2.39.2 - diff --git a/queue-6.4/drm-amd-display-fix-artifacting-on-edp-panels-when-e.patch b/queue-6.4/drm-amd-display-fix-artifacting-on-edp-panels-when-e.patch deleted file mode 100644 index 92d25762f0d..00000000000 --- a/queue-6.4/drm-amd-display-fix-artifacting-on-edp-panels-when-e.patch +++ /dev/null @@ -1,47 +0,0 @@ -From 8795ad52e9cd606d05cac888201f8dcddb72f54d Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Wed, 17 May 2023 14:39:46 -0400 -Subject: drm/amd/display: Fix artifacting on eDP panels when engaging freesync - video mode - -From: Aurabindo Pillai - -[ Upstream commit b18f05a0666aecd5cb19c26a8305bcfa4e9d6502 ] - -[Why] -When freesync video mode is enabled, switching resolution from native -mode to one of the freesync video compatible modes can trigger continous -artifacts on some eDP panels when running under KDE. The articating can be seen in the -attached bug report. - -[How] -Fix this by restricting updates that require full commit by using the same checks -for stream and scaling changes in the the enable pass of dm_update_crtc_state() -along with the check for compatible timings for freesync vide mode. - -Bug: https://gitlab.freedesktop.org/drm/amd/-/issues/2162 -Fixes: da5e14909776 ("drm/amd/display: Fix hang when skipping modeset") -Signed-off-by: Aurabindo Pillai -Reviewed-by: Rodrigo Siqueira -Signed-off-by: Alex Deucher -Signed-off-by: Sasha Levin ---- - drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 2 ++ - 1 file changed, 2 insertions(+) - -diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c -index 7acd73e5004fb..05ed8b89bd717 100644 ---- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c -+++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c -@@ -9265,6 +9265,8 @@ static int dm_update_crtc_state(struct amdgpu_display_manager *dm, - - /* Now check if we should set freesync video mode */ - if (amdgpu_freesync_vid_mode && dm_new_crtc_state->stream && -+ dc_is_stream_unchanged(new_stream, dm_old_crtc_state->stream) && -+ dc_is_stream_scaling_unchanged(new_stream, dm_old_crtc_state->stream) && - is_timing_unchanged_for_freesync(new_crtc_state, - old_crtc_state)) { - new_crtc_state->mode_changed = false; --- -2.39.2 - diff --git a/queue-6.4/drm-amd-display-fix-is_timing_changed-prototype.patch b/queue-6.4/drm-amd-display-fix-is_timing_changed-prototype.patch deleted file mode 100644 index c2072839e4f..00000000000 --- a/queue-6.4/drm-amd-display-fix-is_timing_changed-prototype.patch +++ /dev/null @@ -1,98 +0,0 @@ -From 519979ec4d6c91fc95994142aad297fbfbf24e95 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Tue, 18 Apr 2023 00:07:18 +0200 -Subject: drm/amd/display: fix is_timing_changed() prototype - -From: Arnd Bergmann - -[ Upstream commit 3306ba4b60b2f3d9ac6bddc587a4d702e1ba2224 ] - -Three functions in the amdgpu display driver cause -Wmissing-prototype -warnings: - -drivers/gpu/drm/amd/amdgpu/../display/dc/core/dc_resource.c:1858:6: error: no previous prototype for 'is_timing_changed' [-Werror=missing-prototypes] - -is_timing_changed() is actually meant to be a global symbol, but needs -a proper name and prototype. - -Fixes: 17ce8a6907f7 ("drm/amd/display: Add dsc pre-validation in atomic check") -Reviewed-by: Aurabindo Pillai -Signed-off-by: Arnd Bergmann -Signed-off-by: Hamza Mahfooz -Signed-off-by: Alex Deucher -Signed-off-by: Sasha Levin ---- - drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_mst_types.c | 5 ++--- - drivers/gpu/drm/amd/display/dc/core/dc_resource.c | 6 +++--- - drivers/gpu/drm/amd/display/dc/dc.h | 3 +++ - 3 files changed, 8 insertions(+), 6 deletions(-) - -diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_mst_types.c b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_mst_types.c -index 810ab682f424f..46d0a8f57e552 100644 ---- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_mst_types.c -+++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_mst_types.c -@@ -45,8 +45,7 @@ - #endif - - #include "dc/dcn20/dcn20_resource.h" --bool is_timing_changed(struct dc_stream_state *cur_stream, -- struct dc_stream_state *new_stream); -+ - #define PEAK_FACTOR_X1000 1006 - - static ssize_t dm_dp_aux_transfer(struct drm_dp_aux *aux, -@@ -1422,7 +1421,7 @@ int pre_validate_dsc(struct drm_atomic_state *state, - struct dc_stream_state *stream = dm_state->context->streams[i]; - - if (local_dc_state->streams[i] && -- is_timing_changed(stream, local_dc_state->streams[i])) { -+ dc_is_timing_changed(stream, local_dc_state->streams[i])) { - DRM_INFO_ONCE("crtc[%d] needs mode_changed\n", i); - } else { - int ind = find_crtc_index_in_state_by_stream(state, stream); -diff --git a/drivers/gpu/drm/amd/display/dc/core/dc_resource.c b/drivers/gpu/drm/amd/display/dc/core/dc_resource.c -index fe1551393b264..ba3eb36e75bc3 100644 ---- a/drivers/gpu/drm/amd/display/dc/core/dc_resource.c -+++ b/drivers/gpu/drm/amd/display/dc/core/dc_resource.c -@@ -1878,7 +1878,7 @@ bool dc_add_all_planes_for_stream( - return add_all_planes_for_stream(dc, stream, &set, 1, context); - } - --bool is_timing_changed(struct dc_stream_state *cur_stream, -+bool dc_is_timing_changed(struct dc_stream_state *cur_stream, - struct dc_stream_state *new_stream) - { - if (cur_stream == NULL) -@@ -1903,7 +1903,7 @@ static bool are_stream_backends_same( - if (stream_a == NULL || stream_b == NULL) - return false; - -- if (is_timing_changed(stream_a, stream_b)) -+ if (dc_is_timing_changed(stream_a, stream_b)) - return false; - - if (stream_a->signal != stream_b->signal) -@@ -3528,7 +3528,7 @@ bool pipe_need_reprogram( - if (pipe_ctx_old->stream_res.stream_enc != pipe_ctx->stream_res.stream_enc) - return true; - -- if (is_timing_changed(pipe_ctx_old->stream, pipe_ctx->stream)) -+ if (dc_is_timing_changed(pipe_ctx_old->stream, pipe_ctx->stream)) - return true; - - if (pipe_ctx_old->stream->dpms_off != pipe_ctx->stream->dpms_off) -diff --git a/drivers/gpu/drm/amd/display/dc/dc.h b/drivers/gpu/drm/amd/display/dc/dc.h -index 30f0ba05a6e6c..4d93ca9c627b0 100644 ---- a/drivers/gpu/drm/amd/display/dc/dc.h -+++ b/drivers/gpu/drm/amd/display/dc/dc.h -@@ -2226,4 +2226,7 @@ void dc_process_dmub_dpia_hpd_int_enable(const struct dc *dc, - /* Disable acc mode Interfaces */ - void dc_disable_accelerated_mode(struct dc *dc); - -+bool dc_is_timing_changed(struct dc_stream_state *cur_stream, -+ struct dc_stream_state *new_stream); -+ - #endif /* DC_INTERFACE_H_ */ --- -2.39.2 - diff --git a/queue-6.4/drm-amd-display-unconditionally-print-when-dp-sink-p.patch b/queue-6.4/drm-amd-display-unconditionally-print-when-dp-sink-p.patch deleted file mode 100644 index 022aadf5ce9..00000000000 --- a/queue-6.4/drm-amd-display-unconditionally-print-when-dp-sink-p.patch +++ /dev/null @@ -1,43 +0,0 @@ -From eb23fb70b5be8b9ecd1298f3a95c497724f9e094 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Mon, 17 Apr 2023 22:30:01 +0530 -Subject: drm/amd/display: Unconditionally print when DP sink power state fails - -From: Srinivasan Shanmugam - -[ Upstream commit e4dfd94d5e3851df607b26ab5b20ad8d94f5ccff ] - -The previous 'commit ca9beb8aac68 ("drm/amd/display: Add logging when -setting DP sink power state fails")', it is better to unconditionally -print "failed to power up sink", because we are returning -DC_ERROR_UNEXPECTED. - -Fixes: ca9beb8aac68 ("drm/amd/display: Add logging when setting DP sink power state fails") -Cc: Aurabindo Pillai -Cc: Fangzhi Zuo -Signed-off-by: Srinivasan Shanmugam -Reviewed-by: Aurabindo Pillai -Signed-off-by: Alex Deucher -Signed-off-by: Sasha Levin ---- - .../drm/amd/display/dc/link/protocols/link_dp_capability.c | 4 +--- - 1 file changed, 1 insertion(+), 3 deletions(-) - -diff --git a/drivers/gpu/drm/amd/display/dc/link/protocols/link_dp_capability.c b/drivers/gpu/drm/amd/display/dc/link/protocols/link_dp_capability.c -index ba98013fecd00..6d2d10da2b77c 100644 ---- a/drivers/gpu/drm/amd/display/dc/link/protocols/link_dp_capability.c -+++ b/drivers/gpu/drm/amd/display/dc/link/protocols/link_dp_capability.c -@@ -1043,9 +1043,7 @@ static enum dc_status wake_up_aux_channel(struct dc_link *link) - DP_SET_POWER, - &dpcd_power_state, - sizeof(dpcd_power_state)); -- if (status < 0) -- DC_LOG_DC("%s: Failed to power up sink: %s\n", __func__, -- dpcd_power_state == DP_SET_POWER_D0 ? "D0" : "D3"); -+ DC_LOG_DC("%s: Failed to power up sink\n", __func__); - return DC_ERROR_UNEXPECTED; - } - --- -2.39.2 - diff --git a/queue-6.4/drm-amdgpu-fix-memcpy-in-sienna_cichlid_append_power.patch b/queue-6.4/drm-amdgpu-fix-memcpy-in-sienna_cichlid_append_power.patch deleted file mode 100644 index f4a3c866ba8..00000000000 --- a/queue-6.4/drm-amdgpu-fix-memcpy-in-sienna_cichlid_append_power.patch +++ /dev/null @@ -1,99 +0,0 @@ -From 69b665f51eae4fc816e792e2d0aa1cd06c656638 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Fri, 9 Jun 2023 14:06:43 +0530 -Subject: drm/amdgpu: Fix memcpy() in sienna_cichlid_append_powerplay_table - function. -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -From: Srinivasan Shanmugam - -[ Upstream commit d50dc746ff72b9c48812dac3344fa87fbde940a3 ] - -Fixes the following gcc with W=1: - -In file included from ./include/linux/string.h:253, - from ./include/linux/bitmap.h:11, - from ./include/linux/cpumask.h:12, - from ./arch/x86/include/asm/cpumask.h:5, - from ./arch/x86/include/asm/msr.h:11, - from ./arch/x86/include/asm/processor.h:22, - from ./arch/x86/include/asm/cpufeature.h:5, - from ./arch/x86/include/asm/thread_info.h:53, - from ./include/linux/thread_info.h:60, - from ./arch/x86/include/asm/preempt.h:7, - from ./include/linux/preempt.h:78, - from ./include/linux/spinlock.h:56, - from ./include/linux/mmzone.h:8, - from ./include/linux/gfp.h:7, - from ./include/linux/firmware.h:7, - from drivers/gpu/drm/amd/amdgpu/../pm/swsmu/smu11/sienna_cichlid_ppt.c:26: -In function ‘fortify_memcpy_chk’, - inlined from ‘sienna_cichlid_append_powerplay_table’ at drivers/gpu/drm/amd/amdgpu/../pm/swsmu/smu11/sienna_cichlid_ppt.c:444:2, - inlined from ‘sienna_cichlid_setup_pptable’ at drivers/gpu/drm/amd/amdgpu/../pm/swsmu/smu11/sienna_cichlid_ppt.c:506:8, - inlined from ‘sienna_cichlid_setup_pptable’ at drivers/gpu/drm/amd/amdgpu/../pm/swsmu/smu11/sienna_cichlid_ppt.c:494:12: -./include/linux/fortify-string.h:413:4: warning: call to ‘__read_overflow2_field’ declared with attribute warning: detected read beyond size of field (2nd parameter); maybe use struct_group()? [-Wattribute-warning] - 413 | __read_overflow2_field(q_size_field, size); - | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -the compiler complains about the size calculation in the memcpy() - -"sizeof(*smc_dpm_table) - sizeof(smc_dpm_table->table_header)" is much -larger than what fits into table_member. - -Hence, reuse 'smu_memcpy_trailing' for nv1x - -Fixes: 7077b19a38240 ("drm/amd/pm: use macro to get pptable members") -Suggested-by: Evan Quan -Cc: Evan Quan -Cc: Chengming Gui -Cc: Christian König -Cc: Alex Deucher -Signed-off-by: Srinivasan Shanmugam -Reviewed-by: Evan Quan -Acked-by: Alex Deucher -Signed-off-by: Alex Deucher -Signed-off-by: Sasha Levin ---- - .../amd/pm/swsmu/smu11/sienna_cichlid_ppt.c | 18 ++++++++++++++---- - 1 file changed, 14 insertions(+), 4 deletions(-) - -diff --git a/drivers/gpu/drm/amd/pm/swsmu/smu11/sienna_cichlid_ppt.c b/drivers/gpu/drm/amd/pm/swsmu/smu11/sienna_cichlid_ppt.c -index 85d53597eb07a..f7ed3e655e397 100644 ---- a/drivers/gpu/drm/amd/pm/swsmu/smu11/sienna_cichlid_ppt.c -+++ b/drivers/gpu/drm/amd/pm/swsmu/smu11/sienna_cichlid_ppt.c -@@ -431,7 +431,13 @@ static int sienna_cichlid_append_powerplay_table(struct smu_context *smu) - { - struct atom_smc_dpm_info_v4_9 *smc_dpm_table; - int index, ret; -- I2cControllerConfig_t *table_member; -+ PPTable_beige_goby_t *ppt_beige_goby; -+ PPTable_t *ppt; -+ -+ if (smu->adev->ip_versions[MP1_HWIP][0] == IP_VERSION(11, 0, 13)) -+ ppt_beige_goby = smu->smu_table.driver_pptable; -+ else -+ ppt = smu->smu_table.driver_pptable; - - index = get_index_into_master_table(atom_master_list_of_data_tables_v2_1, - smc_dpm_info); -@@ -440,9 +446,13 @@ static int sienna_cichlid_append_powerplay_table(struct smu_context *smu) - (uint8_t **)&smc_dpm_table); - if (ret) - return ret; -- GET_PPTABLE_MEMBER(I2cControllers, &table_member); -- memcpy(table_member, smc_dpm_table->I2cControllers, -- sizeof(*smc_dpm_table) - sizeof(smc_dpm_table->table_header)); -+ -+ if (smu->adev->ip_versions[MP1_HWIP][0] == IP_VERSION(11, 0, 13)) -+ smu_memcpy_trailing(ppt_beige_goby, I2cControllers, BoardReserved, -+ smc_dpm_table, I2cControllers); -+ else -+ smu_memcpy_trailing(ppt, I2cControllers, BoardReserved, -+ smc_dpm_table, I2cControllers); - - return 0; - } --- -2.39.2 - diff --git a/queue-6.4/drm-amdgpu-fix-usage-of-umc-fill-record-in-ras.patch b/queue-6.4/drm-amdgpu-fix-usage-of-umc-fill-record-in-ras.patch deleted file mode 100644 index d7ebd9724c1..00000000000 --- a/queue-6.4/drm-amdgpu-fix-usage-of-umc-fill-record-in-ras.patch +++ /dev/null @@ -1,50 +0,0 @@ -From 29d39c07fe7695e4b3e07e1b3551bdf758249add Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Sat, 10 Jun 2023 06:19:15 -0400 -Subject: drm/amdgpu: Fix usage of UMC fill record in RAS - -From: Luben Tuikov - -[ Upstream commit 71344a718a9fda8c551cdc4381d354f9a9907f6f ] - -The fixed commit listed in the Fixes tag below, introduced a bug in -amdgpu_ras.c::amdgpu_reserve_page_direct(), in that when introducing the new -amdgpu_umc_fill_error_record() and internally in that new function the physical -address (argument "uint64_t retired_page"--wrong name) is right-shifted by -AMDGPU_GPU_PAGE_SHIFT. Thus, in amdgpu_reserve_page_direct() when we pass -"address" to that new function, we should NOT right-shift it, since this -results, erroneously, in the page address to be 0 for first -2^(2*AMDGPU_GPU_PAGE_SHIFT) memory addresses. - -This commit fixes this bug. - -Cc: Tao Zhou -Cc: Hawking Zhang -Cc: Alex Deucher -Fixes: 400013b268cb ("drm/amdgpu: add umc_fill_error_record to make code more simple") -Signed-off-by: Luben Tuikov -Link: https://lore.kernel.org/r/20230610113536.10621-1-luben.tuikov@amd.com -Reviewed-by: Hawking Zhang -Signed-off-by: Alex Deucher -Signed-off-by: Sasha Levin ---- - drivers/gpu/drm/amd/amdgpu/amdgpu_ras.c | 3 +-- - 1 file changed, 1 insertion(+), 2 deletions(-) - -diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ras.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_ras.c -index 3ab8a88789c8f..dcca63019ea76 100644 ---- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ras.c -+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ras.c -@@ -171,8 +171,7 @@ static int amdgpu_reserve_page_direct(struct amdgpu_device *adev, uint64_t addre - - memset(&err_rec, 0x0, sizeof(struct eeprom_table_record)); - err_data.err_addr = &err_rec; -- amdgpu_umc_fill_error_record(&err_data, address, -- (address >> AMDGPU_GPU_PAGE_SHIFT), 0, 0); -+ amdgpu_umc_fill_error_record(&err_data, address, address, 0, 0); - - if (amdgpu_bad_page_threshold != 0) { - amdgpu_ras_add_bad_pages(adev, err_data.err_addr, --- -2.39.2 - diff --git a/queue-6.4/drm-amdkfd-fix-potential-deallocation-of-previously-.patch b/queue-6.4/drm-amdkfd-fix-potential-deallocation-of-previously-.patch deleted file mode 100644 index 60fc3be29ba..00000000000 --- a/queue-6.4/drm-amdkfd-fix-potential-deallocation-of-previously-.patch +++ /dev/null @@ -1,58 +0,0 @@ -From 21618c2c96b89b33d4b765d56917cb7c69be7d2b Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Thu, 11 May 2023 04:23:14 -0700 -Subject: drm/amdkfd: Fix potential deallocation of previously deallocated - memory. - -From: Daniil Dulov - -[ Upstream commit cabbdea1f1861098991768d7bbf5a49ed1608213 ] - -Pointer mqd_mem_obj can be deallocated in kfd_gtt_sa_allocate(). -The function then returns non-zero value, which causes the second deallocation. - -Found by Linux Verification Center (linuxtesting.org) with SVACE. - -Fixes: d1f8f0d17d40 ("drm/amdkfd: Move non-sdma mqd allocation out of init_mqd") -Signed-off-by: Daniil Dulov -Signed-off-by: Felix Kuehling -Reviewed-by: Felix Kuehling -Signed-off-by: Alex Deucher -Signed-off-by: Sasha Levin ---- - drivers/gpu/drm/amd/amdkfd/kfd_mqd_manager_v9.c | 13 +++++++------ - 1 file changed, 7 insertions(+), 6 deletions(-) - -diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_mqd_manager_v9.c b/drivers/gpu/drm/amd/amdkfd/kfd_mqd_manager_v9.c -index fdbfd725841ff..51b53110341bb 100644 ---- a/drivers/gpu/drm/amd/amdkfd/kfd_mqd_manager_v9.c -+++ b/drivers/gpu/drm/amd/amdkfd/kfd_mqd_manager_v9.c -@@ -115,18 +115,19 @@ static struct kfd_mem_obj *allocate_mqd(struct kfd_dev *kfd, - &(mqd_mem_obj->gtt_mem), - &(mqd_mem_obj->gpu_addr), - (void *)&(mqd_mem_obj->cpu_ptr), true); -+ -+ if (retval) { -+ kfree(mqd_mem_obj); -+ return NULL; -+ } - } else { - retval = kfd_gtt_sa_allocate(kfd, sizeof(struct v9_mqd), - &mqd_mem_obj); -- } -- -- if (retval) { -- kfree(mqd_mem_obj); -- return NULL; -+ if (retval) -+ return NULL; - } - - return mqd_mem_obj; -- - } - - static void init_mqd(struct mqd_manager *mm, void **mqd, --- -2.39.2 - diff --git a/queue-6.4/drm-bridge-anx7625-prevent-endless-probe-loop.patch b/queue-6.4/drm-bridge-anx7625-prevent-endless-probe-loop.patch deleted file mode 100644 index a3d7572b1ac..00000000000 --- a/queue-6.4/drm-bridge-anx7625-prevent-endless-probe-loop.patch +++ /dev/null @@ -1,264 +0,0 @@ -From 090e8bf55e3b79147968de2fbe8e6c77ea448ae4 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Thu, 18 May 2023 15:39:02 -0400 -Subject: drm/bridge: anx7625: Prevent endless probe loop -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -From: Nícolas F. R. A. Prado - -[ Upstream commit 1464e48d69ab7a50a377c9d39f5e5eb3cee2722e ] - -During probe, the driver registers i2c dummy devices and populates the -aux bus, which registers a device for the panel. After doing that, the -driver can still defer probe if needed. This ordering of operations is -troublesome however, because the deferred probe work will retry probing -all pending devices every time a new device is registered. Therefore, if -modules need to be loaded in order to satisfy the dependencies for this -driver to complete probe, the kernel will stall, since it'll keep trying -to probe the anx7625 driver, but never succeed, given that modules would -only be loaded after the deferred probe work completes. - -Two changes are required to avoid this issue: -* Move of_find_mipi_dsi_host_by_node(), which can defer probe, to before - anx7625_register_i2c_dummy_clients() and - devm_of_dp_aux_populate_ep_devices(), which register devices. -* Make use of the done_probing callback when populating the aux bus, - so that the bridge registration is only done after the panel is - probed. This is required because the panel might need to defer probe, - but the aux bus population needs the i2c dummy devices working, so - this call couldn't just be moved to an earlier point in probe. - One caveat is that if the panel is described outside the aux bus, the - probe loop issue can still happen, but we don't have a way to avoid - it in that case since there's no callback available. - -With this patch applied, it's possible to boot on -mt8192-asurada-spherion with - -CONFIG_DRM_ANALOGIX_ANX7625=y -CONFIG_MTK_MMSYS=m -CONFIG_BACKLIGHT_PWM=y - -and also with - -CONFIG_DRM_ANALOGIX_ANX7625=y -CONFIG_MTK_MMSYS=y -CONFIG_BACKLIGHT_PWM=m - -Fixes: adca62ec370c ("drm/bridge: anx7625: Support reading edid through aux channel") -Fixes: 269332997a16 ("drm/bridge: anx7625: Return -EPROBE_DEFER if the dsi host was not found") -Reported-by: "kernelci.org bot" -Signed-off-by: Nícolas F. R. A. Prado -Reviewed-by: Robert Foss -Signed-off-by: Robert Foss -Link: https://patchwork.freedesktop.org/patch/msgid/20230518193902.891121-1-nfraprado@collabora.com -Signed-off-by: Sasha Levin ---- - drivers/gpu/drm/bridge/analogix/anx7625.c | 128 +++++++++++++++------- - 1 file changed, 88 insertions(+), 40 deletions(-) - -diff --git a/drivers/gpu/drm/bridge/analogix/anx7625.c b/drivers/gpu/drm/bridge/analogix/anx7625.c -index 6846199a2ee14..9e387c3e9b696 100644 ---- a/drivers/gpu/drm/bridge/analogix/anx7625.c -+++ b/drivers/gpu/drm/bridge/analogix/anx7625.c -@@ -1687,6 +1687,14 @@ static int anx7625_parse_dt(struct device *dev, - if (of_property_read_bool(np, "analogix,audio-enable")) - pdata->audio_en = 1; - -+ return 0; -+} -+ -+static int anx7625_parse_dt_panel(struct device *dev, -+ struct anx7625_platform_data *pdata) -+{ -+ struct device_node *np = dev->of_node; -+ - pdata->panel_bridge = devm_drm_of_get_bridge(dev, np, 1, 0); - if (IS_ERR(pdata->panel_bridge)) { - if (PTR_ERR(pdata->panel_bridge) == -ENODEV) { -@@ -2032,7 +2040,7 @@ static int anx7625_register_audio(struct device *dev, struct anx7625_data *ctx) - return 0; - } - --static int anx7625_attach_dsi(struct anx7625_data *ctx) -+static int anx7625_setup_dsi_device(struct anx7625_data *ctx) - { - struct mipi_dsi_device *dsi; - struct device *dev = &ctx->client->dev; -@@ -2042,9 +2050,6 @@ static int anx7625_attach_dsi(struct anx7625_data *ctx) - .channel = 0, - .node = NULL, - }; -- int ret; -- -- DRM_DEV_DEBUG_DRIVER(dev, "attach dsi\n"); - - host = of_find_mipi_dsi_host_by_node(ctx->pdata.mipi_host_node); - if (!host) { -@@ -2065,14 +2070,24 @@ static int anx7625_attach_dsi(struct anx7625_data *ctx) - MIPI_DSI_MODE_VIDEO_HSE | - MIPI_DSI_HS_PKT_END_ALIGNED; - -- ret = devm_mipi_dsi_attach(dev, dsi); -+ ctx->dsi = dsi; -+ -+ return 0; -+} -+ -+static int anx7625_attach_dsi(struct anx7625_data *ctx) -+{ -+ struct device *dev = &ctx->client->dev; -+ int ret; -+ -+ DRM_DEV_DEBUG_DRIVER(dev, "attach dsi\n"); -+ -+ ret = devm_mipi_dsi_attach(dev, ctx->dsi); - if (ret) { - DRM_DEV_ERROR(dev, "fail to attach dsi to host.\n"); - return ret; - } - -- ctx->dsi = dsi; -- - DRM_DEV_DEBUG_DRIVER(dev, "attach dsi succeeded.\n"); - - return 0; -@@ -2560,6 +2575,40 @@ static void anx7625_runtime_disable(void *data) - pm_runtime_disable(data); - } - -+static int anx7625_link_bridge(struct drm_dp_aux *aux) -+{ -+ struct anx7625_data *platform = container_of(aux, struct anx7625_data, aux); -+ struct device *dev = aux->dev; -+ int ret; -+ -+ ret = anx7625_parse_dt_panel(dev, &platform->pdata); -+ if (ret) { -+ DRM_DEV_ERROR(dev, "fail to parse DT for panel : %d\n", ret); -+ return ret; -+ } -+ -+ platform->bridge.funcs = &anx7625_bridge_funcs; -+ platform->bridge.of_node = dev->of_node; -+ if (!anx7625_of_panel_on_aux_bus(dev)) -+ platform->bridge.ops |= DRM_BRIDGE_OP_EDID; -+ if (!platform->pdata.panel_bridge) -+ platform->bridge.ops |= DRM_BRIDGE_OP_HPD | -+ DRM_BRIDGE_OP_DETECT; -+ platform->bridge.type = platform->pdata.panel_bridge ? -+ DRM_MODE_CONNECTOR_eDP : -+ DRM_MODE_CONNECTOR_DisplayPort; -+ -+ drm_bridge_add(&platform->bridge); -+ -+ if (!platform->pdata.is_dpi) { -+ ret = anx7625_attach_dsi(platform); -+ if (ret) -+ drm_bridge_remove(&platform->bridge); -+ } -+ -+ return ret; -+} -+ - static int anx7625_i2c_probe(struct i2c_client *client) - { - struct anx7625_data *platform; -@@ -2634,6 +2683,24 @@ static int anx7625_i2c_probe(struct i2c_client *client) - platform->aux.wait_hpd_asserted = anx7625_wait_hpd_asserted; - drm_dp_aux_init(&platform->aux); - -+ ret = anx7625_parse_dt(dev, pdata); -+ if (ret) { -+ if (ret != -EPROBE_DEFER) -+ DRM_DEV_ERROR(dev, "fail to parse DT : %d\n", ret); -+ goto free_wq; -+ } -+ -+ if (!platform->pdata.is_dpi) { -+ ret = anx7625_setup_dsi_device(platform); -+ if (ret < 0) -+ goto free_wq; -+ } -+ -+ /* -+ * Registering the i2c devices will retrigger deferred probe, so it -+ * needs to be done after calls that might return EPROBE_DEFER, -+ * otherwise we can get an infinite loop. -+ */ - if (anx7625_register_i2c_dummy_clients(platform, client) != 0) { - ret = -ENOMEM; - DRM_DEV_ERROR(dev, "fail to reserve I2C bus.\n"); -@@ -2648,13 +2715,21 @@ static int anx7625_i2c_probe(struct i2c_client *client) - if (ret) - goto free_wq; - -- devm_of_dp_aux_populate_ep_devices(&platform->aux); -- -- ret = anx7625_parse_dt(dev, pdata); -+ /* -+ * Populating the aux bus will retrigger deferred probe, so it needs to -+ * be done after calls that might return EPROBE_DEFER, otherwise we can -+ * get an infinite loop. -+ */ -+ ret = devm_of_dp_aux_populate_bus(&platform->aux, anx7625_link_bridge); - if (ret) { -- if (ret != -EPROBE_DEFER) -- DRM_DEV_ERROR(dev, "fail to parse DT : %d\n", ret); -- goto free_wq; -+ if (ret != -ENODEV) { -+ DRM_DEV_ERROR(dev, "failed to populate aux bus : %d\n", ret); -+ goto free_wq; -+ } -+ -+ ret = anx7625_link_bridge(&platform->aux); -+ if (ret) -+ goto free_wq; - } - - if (!platform->pdata.low_power_mode) { -@@ -2667,27 +2742,6 @@ static int anx7625_i2c_probe(struct i2c_client *client) - if (platform->pdata.intp_irq) - queue_work(platform->workqueue, &platform->work); - -- platform->bridge.funcs = &anx7625_bridge_funcs; -- platform->bridge.of_node = client->dev.of_node; -- if (!anx7625_of_panel_on_aux_bus(&client->dev)) -- platform->bridge.ops |= DRM_BRIDGE_OP_EDID; -- if (!platform->pdata.panel_bridge) -- platform->bridge.ops |= DRM_BRIDGE_OP_HPD | -- DRM_BRIDGE_OP_DETECT; -- platform->bridge.type = platform->pdata.panel_bridge ? -- DRM_MODE_CONNECTOR_eDP : -- DRM_MODE_CONNECTOR_DisplayPort; -- -- drm_bridge_add(&platform->bridge); -- -- if (!platform->pdata.is_dpi) { -- ret = anx7625_attach_dsi(platform); -- if (ret) { -- DRM_DEV_ERROR(dev, "Fail to attach to dsi : %d\n", ret); -- goto unregister_bridge; -- } -- } -- - if (platform->pdata.audio_en) - anx7625_register_audio(dev, platform); - -@@ -2695,12 +2749,6 @@ static int anx7625_i2c_probe(struct i2c_client *client) - - return 0; - --unregister_bridge: -- drm_bridge_remove(&platform->bridge); -- -- if (!platform->pdata.low_power_mode) -- pm_runtime_put_sync_suspend(&client->dev); -- - free_wq: - if (platform->workqueue) - destroy_workqueue(platform->workqueue); --- -2.39.2 - diff --git a/queue-6.4/drm-bridge-it6505-move-a-variable-assignment-behind-.patch b/queue-6.4/drm-bridge-it6505-move-a-variable-assignment-behind-.patch deleted file mode 100644 index cd566981906..00000000000 --- a/queue-6.4/drm-bridge-it6505-move-a-variable-assignment-behind-.patch +++ /dev/null @@ -1,56 +0,0 @@ -From 0ee72fad8406124bfe7426add1674f5994034dba Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Sun, 16 Apr 2023 17:30:46 +0200 -Subject: drm/bridge: it6505: Move a variable assignment behind a null pointer - check in receive_timing_debugfs_show() -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -From: Markus Elfring - -[ Upstream commit 0be05a75de2916421e88e0d64b001984f54df0bd ] - -The address of a data structure member was determined before -a corresponding null pointer check in the implementation of -the function “receive_timing_debugfs_show”. - -Thus avoid the risk for undefined behaviour by moving the assignment -for the variable “vid” behind the null pointer check. - -This issue was detected by using the Coccinelle software. - -Fixes: b5c84a9edcd4 ("drm/bridge: add it6505 driver") -Signed-off-by: Markus Elfring -Link: https://patchwork.freedesktop.org/patch/msgid/fa69384f-1485-142b-c4ee-3df54ac68a89@web.de -Reviewed-by: Robert Foss -Signed-off-by: Robert Foss -Signed-off-by: Sasha Levin ---- - drivers/gpu/drm/bridge/ite-it6505.c | 3 ++- - 1 file changed, 2 insertions(+), 1 deletion(-) - -diff --git a/drivers/gpu/drm/bridge/ite-it6505.c b/drivers/gpu/drm/bridge/ite-it6505.c -index abaf6e23775eb..45f579c365e7f 100644 ---- a/drivers/gpu/drm/bridge/ite-it6505.c -+++ b/drivers/gpu/drm/bridge/ite-it6505.c -@@ -3207,7 +3207,7 @@ static ssize_t receive_timing_debugfs_show(struct file *file, char __user *buf, - size_t len, loff_t *ppos) - { - struct it6505 *it6505 = file->private_data; -- struct drm_display_mode *vid = &it6505->video_info; -+ struct drm_display_mode *vid; - u8 read_buf[READ_BUFFER_SIZE]; - u8 *str = read_buf, *end = read_buf + READ_BUFFER_SIZE; - ssize_t ret, count; -@@ -3216,6 +3216,7 @@ static ssize_t receive_timing_debugfs_show(struct file *file, char __user *buf, - return -ENODEV; - - it6505_calc_video_info(it6505); -+ vid = &it6505->video_info; - str += scnprintf(str, end - str, "---video timing---\n"); - str += scnprintf(str, end - str, "PCLK:%d.%03dMHz\n", - vid->clock / 1000, vid->clock % 1000); --- -2.39.2 - diff --git a/queue-6.4/drm-bridge-samsung-dsim-fix-pms-calculator-on-imx8m-.patch b/queue-6.4/drm-bridge-samsung-dsim-fix-pms-calculator-on-imx8m-.patch deleted file mode 100644 index b8289f8db97..00000000000 --- a/queue-6.4/drm-bridge-samsung-dsim-fix-pms-calculator-on-imx8m-.patch +++ /dev/null @@ -1,147 +0,0 @@ -From c250125a55704f33c6f6e2adbfe54dc809dd6923 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Thu, 25 May 2023 22:05:54 -0500 -Subject: drm: bridge: samsung-dsim: Fix PMS Calculator on imx8m[mnp] - -From: Adam Ford - -[ Upstream commit 54f1a83c72250b182fa7722b0c5f6eb5e769598d ] - -According to Table 13-45 of the i.MX8M Mini Reference Manual, the min -and max values for M and the frequency range for the VCO_out -calculator were incorrect. This information was contradicted in other -parts of the mini, nano and plus manuals. After reaching out to my -NXP Rep, when confronting him about discrepencies in the Nano manual, -he responded with: - "Yes it is definitely wrong, the one that is part - of the NOTE in MIPI_DPHY_M_PLLPMS register table against PMS_P, - PMS_M and PMS_S is not correct. I will report this to Doc team, - the one customer should be take into account is the Table 13-40 - DPHY PLL Parameters and the Note above." - -These updated values also match what is used in the NXP downstream -kernel. - -To fix this, make new variables to hold the min and max values of m -and the minimum value of VCO_out, and update the PMS calculator to -use these new variables instead of using hard-coded values to keep -the backwards compatibility with other parts using this driver. - -Fixes: 4d562c70c4dc ("drm: bridge: samsung-dsim: Add i.MX8M Mini/Nano support") -Signed-off-by: Adam Ford -Reviewed-by: Lucas Stach -Tested-by: Chen-Yu Tsai -Tested-by: Frieder Schrempf -Reviewed-by: Frieder Schrempf -Tested-by: Marek Szyprowski -Reviewed-by: Jagan Teki -Tested-by: Jagan Teki # imx8mm-icore -Signed-off-by: Neil Armstrong -Link: https://patchwork.freedesktop.org/patch/msgid/20230526030559.326566-3-aford173@gmail.com -Signed-off-by: Sasha Levin ---- - drivers/gpu/drm/bridge/samsung-dsim.c | 22 ++++++++++++++++++++-- - include/drm/bridge/samsung-dsim.h | 3 +++ - 2 files changed, 23 insertions(+), 2 deletions(-) - -diff --git a/drivers/gpu/drm/bridge/samsung-dsim.c b/drivers/gpu/drm/bridge/samsung-dsim.c -index e0a402a85787c..3194cabb26b32 100644 ---- a/drivers/gpu/drm/bridge/samsung-dsim.c -+++ b/drivers/gpu/drm/bridge/samsung-dsim.c -@@ -405,6 +405,9 @@ static const struct samsung_dsim_driver_data exynos3_dsi_driver_data = { - .num_bits_resol = 11, - .pll_p_offset = 13, - .reg_values = reg_values, -+ .m_min = 41, -+ .m_max = 125, -+ .min_freq = 500, - }; - - static const struct samsung_dsim_driver_data exynos4_dsi_driver_data = { -@@ -418,6 +421,9 @@ static const struct samsung_dsim_driver_data exynos4_dsi_driver_data = { - .num_bits_resol = 11, - .pll_p_offset = 13, - .reg_values = reg_values, -+ .m_min = 41, -+ .m_max = 125, -+ .min_freq = 500, - }; - - static const struct samsung_dsim_driver_data exynos5_dsi_driver_data = { -@@ -429,6 +435,9 @@ static const struct samsung_dsim_driver_data exynos5_dsi_driver_data = { - .num_bits_resol = 11, - .pll_p_offset = 13, - .reg_values = reg_values, -+ .m_min = 41, -+ .m_max = 125, -+ .min_freq = 500, - }; - - static const struct samsung_dsim_driver_data exynos5433_dsi_driver_data = { -@@ -441,6 +450,9 @@ static const struct samsung_dsim_driver_data exynos5433_dsi_driver_data = { - .num_bits_resol = 12, - .pll_p_offset = 13, - .reg_values = exynos5433_reg_values, -+ .m_min = 41, -+ .m_max = 125, -+ .min_freq = 500, - }; - - static const struct samsung_dsim_driver_data exynos5422_dsi_driver_data = { -@@ -453,6 +465,9 @@ static const struct samsung_dsim_driver_data exynos5422_dsi_driver_data = { - .num_bits_resol = 12, - .pll_p_offset = 13, - .reg_values = exynos5422_reg_values, -+ .m_min = 41, -+ .m_max = 125, -+ .min_freq = 500, - }; - - static const struct samsung_dsim_driver_data imx8mm_dsi_driver_data = { -@@ -469,6 +484,9 @@ static const struct samsung_dsim_driver_data imx8mm_dsi_driver_data = { - */ - .pll_p_offset = 14, - .reg_values = imx8mm_dsim_reg_values, -+ .m_min = 64, -+ .m_max = 1023, -+ .min_freq = 1050, - }; - - static const struct samsung_dsim_driver_data * -@@ -547,12 +565,12 @@ static unsigned long samsung_dsim_pll_find_pms(struct samsung_dsim *dsi, - tmp = (u64)fout * (_p << _s); - do_div(tmp, fin); - _m = tmp; -- if (_m < 41 || _m > 125) -+ if (_m < driver_data->m_min || _m > driver_data->m_max) - continue; - - tmp = (u64)_m * fin; - do_div(tmp, _p); -- if (tmp < 500 * MHZ || -+ if (tmp < driver_data->min_freq * MHZ || - tmp > driver_data->max_freq * MHZ) - continue; - -diff --git a/include/drm/bridge/samsung-dsim.h b/include/drm/bridge/samsung-dsim.h -index ba5484de2b30e..a1a5b2b89a7ab 100644 ---- a/include/drm/bridge/samsung-dsim.h -+++ b/include/drm/bridge/samsung-dsim.h -@@ -54,11 +54,14 @@ struct samsung_dsim_driver_data { - unsigned int has_freqband:1; - unsigned int has_clklane_stop:1; - unsigned int num_clks; -+ unsigned int min_freq; - unsigned int max_freq; - unsigned int wait_for_reset; - unsigned int num_bits_resol; - unsigned int pll_p_offset; - const unsigned int *reg_values; -+ u16 m_min; -+ u16 m_max; - }; - - struct samsung_dsim_host_ops { --- -2.39.2 - diff --git a/queue-6.4/drm-bridge-tc358767-switch-to-devm-mipi-dsi-helpers.patch b/queue-6.4/drm-bridge-tc358767-switch-to-devm-mipi-dsi-helpers.patch deleted file mode 100644 index 7e8363fb2de..00000000000 --- a/queue-6.4/drm-bridge-tc358767-switch-to-devm-mipi-dsi-helpers.patch +++ /dev/null @@ -1,47 +0,0 @@ -From 736f1f0f40f60c97fcfae032cde92631464a539d Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Wed, 17 May 2023 14:21:06 +0200 -Subject: drm/bridge: tc358767: Switch to devm MIPI-DSI helpers - -From: Alexander Stein - -[ Upstream commit f47d6140b7a4c858d82d263e7577ff6fb5279a9c ] - -DSI device registering and attaching needs to be undone upon -deregistration. This fixes module unload/load. - -Fixes: bbfd3190b656 ("drm/bridge: tc358767: Add DSI-to-DPI mode support") -Signed-off-by: Alexander Stein -Reviewed-by: Robert Foss -Signed-off-by: Robert Foss -Link: https://patchwork.freedesktop.org/patch/msgid/20230517122107.1766673-1-alexander.stein@ew.tq-group.com -Signed-off-by: Sasha Levin ---- - drivers/gpu/drm/bridge/tc358767.c | 4 ++-- - 1 file changed, 2 insertions(+), 2 deletions(-) - -diff --git a/drivers/gpu/drm/bridge/tc358767.c b/drivers/gpu/drm/bridge/tc358767.c -index 91f7cb56a654d..d6349af4f1b62 100644 ---- a/drivers/gpu/drm/bridge/tc358767.c -+++ b/drivers/gpu/drm/bridge/tc358767.c -@@ -1890,7 +1890,7 @@ static int tc_mipi_dsi_host_attach(struct tc_data *tc) - if (dsi_lanes < 0) - return dsi_lanes; - -- dsi = mipi_dsi_device_register_full(host, &info); -+ dsi = devm_mipi_dsi_device_register_full(dev, host, &info); - if (IS_ERR(dsi)) - return dev_err_probe(dev, PTR_ERR(dsi), - "failed to create dsi device\n"); -@@ -1901,7 +1901,7 @@ static int tc_mipi_dsi_host_attach(struct tc_data *tc) - dsi->mode_flags = MIPI_DSI_MODE_VIDEO | MIPI_DSI_MODE_VIDEO_BURST | - MIPI_DSI_MODE_LPM | MIPI_DSI_CLOCK_NON_CONTINUOUS; - -- ret = mipi_dsi_attach(dsi); -+ ret = devm_mipi_dsi_attach(dev, dsi); - if (ret < 0) { - dev_err(dev, "failed to attach dsi to host: %d\n", ret); - return ret; --- -2.39.2 - diff --git a/queue-6.4/drm-bridge-tc358768-add-atomic_get_input_bus_fmts-im.patch b/queue-6.4/drm-bridge-tc358768-add-atomic_get_input_bus_fmts-im.patch deleted file mode 100644 index 8ab247652da..00000000000 --- a/queue-6.4/drm-bridge-tc358768-add-atomic_get_input_bus_fmts-im.patch +++ /dev/null @@ -1,98 +0,0 @@ -From 8f741a9786522fc3c3337ad843dd1730bd3ad2e3 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Thu, 30 Mar 2023 11:59:41 +0200 -Subject: drm/bridge: tc358768: Add atomic_get_input_bus_fmts() implementation - -From: Francesco Dolcini - -[ Upstream commit cec5ccef85bd0128cf895612de54a9d21d2015d0 ] - -Add atomic_get_input_bus_fmts() implementation, tc358768 has a parallel -RGB input interface with the actual bus format depending on the amount -of parallel input data lines. - -Without this change when the tc358768 is used with less than 24bit the -color mapping is completely wrong. - -Signed-off-by: Francesco Dolcini -Reviewed-by: Robert Foss -Signed-off-by: Robert Foss -Link: https://patchwork.freedesktop.org/patch/msgid/20230330095941.428122-7-francesco@dolcini.it -Stable-dep-of: ee18698e212b ("drm/bridge: tc358768: fix TCLK_TRAILCNT computation") -Signed-off-by: Sasha Levin ---- - drivers/gpu/drm/bridge/tc358768.c | 44 +++++++++++++++++++++++++++++++ - 1 file changed, 44 insertions(+) - -diff --git a/drivers/gpu/drm/bridge/tc358768.c b/drivers/gpu/drm/bridge/tc358768.c -index aff400c360662..487bfe33edc88 100644 ---- a/drivers/gpu/drm/bridge/tc358768.c -+++ b/drivers/gpu/drm/bridge/tc358768.c -@@ -9,6 +9,7 @@ - #include - #include - #include -+#include - #include - #include - #include -@@ -918,6 +919,44 @@ static void tc358768_bridge_enable(struct drm_bridge *bridge) - } - } - -+#define MAX_INPUT_SEL_FORMATS 1 -+ -+static u32 * -+tc358768_atomic_get_input_bus_fmts(struct drm_bridge *bridge, -+ struct drm_bridge_state *bridge_state, -+ struct drm_crtc_state *crtc_state, -+ struct drm_connector_state *conn_state, -+ u32 output_fmt, -+ unsigned int *num_input_fmts) -+{ -+ struct tc358768_priv *priv = bridge_to_tc358768(bridge); -+ u32 *input_fmts; -+ -+ *num_input_fmts = 0; -+ -+ input_fmts = kcalloc(MAX_INPUT_SEL_FORMATS, sizeof(*input_fmts), -+ GFP_KERNEL); -+ if (!input_fmts) -+ return NULL; -+ -+ switch (priv->pd_lines) { -+ case 16: -+ input_fmts[0] = MEDIA_BUS_FMT_RGB565_1X16; -+ break; -+ case 18: -+ input_fmts[0] = MEDIA_BUS_FMT_RGB666_1X18; -+ break; -+ default: -+ case 24: -+ input_fmts[0] = MEDIA_BUS_FMT_RGB888_1X24; -+ break; -+ }; -+ -+ *num_input_fmts = MAX_INPUT_SEL_FORMATS; -+ -+ return input_fmts; -+} -+ - static const struct drm_bridge_funcs tc358768_bridge_funcs = { - .attach = tc358768_bridge_attach, - .mode_valid = tc358768_bridge_mode_valid, -@@ -925,6 +964,11 @@ static const struct drm_bridge_funcs tc358768_bridge_funcs = { - .enable = tc358768_bridge_enable, - .disable = tc358768_bridge_disable, - .post_disable = tc358768_bridge_post_disable, -+ -+ .atomic_duplicate_state = drm_atomic_helper_bridge_duplicate_state, -+ .atomic_destroy_state = drm_atomic_helper_bridge_destroy_state, -+ .atomic_reset = drm_atomic_helper_bridge_reset, -+ .atomic_get_input_bus_fmts = tc358768_atomic_get_input_bus_fmts, - }; - - static const struct drm_bridge_timings default_tc358768_timings = { --- -2.39.2 - diff --git a/queue-6.4/drm-bridge-tc358768-always-enable-hs-video-mode.patch b/queue-6.4/drm-bridge-tc358768-always-enable-hs-video-mode.patch deleted file mode 100644 index eaab58b600e..00000000000 --- a/queue-6.4/drm-bridge-tc358768-always-enable-hs-video-mode.patch +++ /dev/null @@ -1,49 +0,0 @@ -From 480140b6d591fd0605cbc933bc3104cbaaa2426a Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Thu, 27 Apr 2023 16:29:26 +0200 -Subject: drm/bridge: tc358768: always enable HS video mode - -From: Francesco Dolcini - -[ Upstream commit 75a8aeac2573ab258c53676eba9b3796ea691988 ] - -Always enable HS video mode setting the TXMD bit, without this change no -video output is present with DSI sinks that are setting -MIPI_DSI_MODE_LPM flag (tested with LT8912B DSI-HDMI bridge). - -Previously the driver was enabling HS mode only when the DSI sink was -not explicitly setting the MIPI_DSI_MODE_LPM, however this is not -correct. - -The MIPI_DSI_MODE_LPM is supposed to indicate that the sink is willing -to receive data in low power mode, however clearing the -TC358768_DSI_CONTROL_TXMD bit will make the TC358768 send video in -LP mode that is not the intended behavior. - -Fixes: ff1ca6397b1d ("drm/bridge: Add tc358768 driver") -Signed-off-by: Francesco Dolcini -Reviewed-by: Robert Foss -Signed-off-by: Robert Foss -Link: https://patchwork.freedesktop.org/patch/msgid/20230427142934.55435-2-francesco@dolcini.it -Signed-off-by: Sasha Levin ---- - drivers/gpu/drm/bridge/tc358768.c | 3 +-- - 1 file changed, 1 insertion(+), 2 deletions(-) - -diff --git a/drivers/gpu/drm/bridge/tc358768.c b/drivers/gpu/drm/bridge/tc358768.c -index 7c0cbe84611b9..8f349bf4fc32f 100644 ---- a/drivers/gpu/drm/bridge/tc358768.c -+++ b/drivers/gpu/drm/bridge/tc358768.c -@@ -866,8 +866,7 @@ static void tc358768_bridge_pre_enable(struct drm_bridge *bridge) - val = TC358768_DSI_CONFW_MODE_SET | TC358768_DSI_CONFW_ADDR_DSI_CONTROL; - val |= (dsi_dev->lanes - 1) << 1; - -- if (!(dsi_dev->mode_flags & MIPI_DSI_MODE_LPM)) -- val |= TC358768_DSI_CONTROL_TXMD; -+ val |= TC358768_DSI_CONTROL_TXMD; - - if (!(mode_flags & MIPI_DSI_CLOCK_NON_CONTINUOUS)) - val |= TC358768_DSI_CONTROL_HSCKMD; --- -2.39.2 - diff --git a/queue-6.4/drm-bridge-tc358768-fix-pll-parameters-computation.patch b/queue-6.4/drm-bridge-tc358768-fix-pll-parameters-computation.patch deleted file mode 100644 index 5a6fa90c931..00000000000 --- a/queue-6.4/drm-bridge-tc358768-fix-pll-parameters-computation.patch +++ /dev/null @@ -1,49 +0,0 @@ -From d8a5989703de99999e694cdaeda7c6a39cfc1ea3 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Thu, 27 Apr 2023 16:29:27 +0200 -Subject: drm/bridge: tc358768: fix PLL parameters computation - -From: Francesco Dolcini - -[ Upstream commit 6a4020b4c63911977aaf8047f904a300d15de739 ] - -According to Toshiba documentation the PLL input clock after the divider -should be not less than 4MHz, fix the PLL parameters computation -accordingly. - -Fixes: ff1ca6397b1d ("drm/bridge: Add tc358768 driver") -Signed-off-by: Francesco Dolcini -Reviewed-by: Robert Foss -Signed-off-by: Robert Foss -Link: https://patchwork.freedesktop.org/patch/msgid/20230427142934.55435-3-francesco@dolcini.it -Signed-off-by: Sasha Levin ---- - drivers/gpu/drm/bridge/tc358768.c | 6 +++++- - 1 file changed, 5 insertions(+), 1 deletion(-) - -diff --git a/drivers/gpu/drm/bridge/tc358768.c b/drivers/gpu/drm/bridge/tc358768.c -index 8f349bf4fc32f..e9e3f9e02bba0 100644 ---- a/drivers/gpu/drm/bridge/tc358768.c -+++ b/drivers/gpu/drm/bridge/tc358768.c -@@ -334,13 +334,17 @@ static int tc358768_calc_pll(struct tc358768_priv *priv, - u32 fbd; - - for (fbd = 0; fbd < 512; ++fbd) { -- u32 pll, diff; -+ u32 pll, diff, pll_in; - - pll = (u32)div_u64((u64)refclk * (fbd + 1), divisor); - - if (pll >= max_pll || pll < min_pll) - continue; - -+ pll_in = (u32)div_u64((u64)refclk, prd + 1); -+ if (pll_in < 4000000) -+ continue; -+ - diff = max(pll, target_pll) - min(pll, target_pll); - - if (diff < best_diff) { --- -2.39.2 - diff --git a/queue-6.4/drm-bridge-tc358768-fix-pll-target-frequency.patch b/queue-6.4/drm-bridge-tc358768-fix-pll-target-frequency.patch deleted file mode 100644 index df2eb8be2b6..00000000000 --- a/queue-6.4/drm-bridge-tc358768-fix-pll-target-frequency.patch +++ /dev/null @@ -1,74 +0,0 @@ -From 8bb4b7626d5a47d6023bb880b55859b13d0178fa Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Thu, 27 Apr 2023 16:29:28 +0200 -Subject: drm/bridge: tc358768: fix PLL target frequency - -From: Francesco Dolcini - -[ Upstream commit ffd2e4bbea626d565b9817312b0fcfb382fecb88 ] - -Correctly compute the PLL target frequency, the current formula works -correctly only when the input bus width is 24bit, actually to properly -compute the PLL target frequency what is relevant is the bits-per-pixel -on the DSI link. - -No regression expected since the DSI format is currently hard-coded as -MIPI_DSI_FMT_RGB888. - -Fixes: ff1ca6397b1d ("drm/bridge: Add tc358768 driver") -Signed-off-by: Francesco Dolcini -Reviewed-by: Robert Foss -Signed-off-by: Robert Foss -Link: https://patchwork.freedesktop.org/patch/msgid/20230427142934.55435-4-francesco@dolcini.it -Signed-off-by: Sasha Levin ---- - drivers/gpu/drm/bridge/tc358768.c | 8 +++++--- - 1 file changed, 5 insertions(+), 3 deletions(-) - -diff --git a/drivers/gpu/drm/bridge/tc358768.c b/drivers/gpu/drm/bridge/tc358768.c -index e9e3f9e02bba0..dba1bf3912f1e 100644 ---- a/drivers/gpu/drm/bridge/tc358768.c -+++ b/drivers/gpu/drm/bridge/tc358768.c -@@ -146,6 +146,7 @@ struct tc358768_priv { - - u32 pd_lines; /* number of Parallel Port Input Data Lines */ - u32 dsi_lanes; /* number of DSI Lanes */ -+ u32 dsi_bpp; /* number of Bits Per Pixel over DSI */ - - /* Parameters for PLL programming */ - u32 fbd; /* PLL feedback divider */ -@@ -284,12 +285,12 @@ static void tc358768_hw_disable(struct tc358768_priv *priv) - - static u32 tc358768_pll_to_pclk(struct tc358768_priv *priv, u32 pll_clk) - { -- return (u32)div_u64((u64)pll_clk * priv->dsi_lanes, priv->pd_lines); -+ return (u32)div_u64((u64)pll_clk * priv->dsi_lanes, priv->dsi_bpp); - } - - static u32 tc358768_pclk_to_pll(struct tc358768_priv *priv, u32 pclk) - { -- return (u32)div_u64((u64)pclk * priv->pd_lines, priv->dsi_lanes); -+ return (u32)div_u64((u64)pclk * priv->dsi_bpp, priv->dsi_lanes); - } - - static int tc358768_calc_pll(struct tc358768_priv *priv, -@@ -426,6 +427,7 @@ static int tc358768_dsi_host_attach(struct mipi_dsi_host *host, - priv->output.panel = panel; - - priv->dsi_lanes = dev->lanes; -+ priv->dsi_bpp = mipi_dsi_pixel_format_to_bpp(dev->format); - - /* get input ep (port0/endpoint0) */ - ret = -EINVAL; -@@ -437,7 +439,7 @@ static int tc358768_dsi_host_attach(struct mipi_dsi_host *host, - } - - if (ret) -- priv->pd_lines = mipi_dsi_pixel_format_to_bpp(dev->format); -+ priv->pd_lines = priv->dsi_bpp; - - drm_bridge_add(&priv->bridge); - --- -2.39.2 - diff --git a/queue-6.4/drm-bridge-tc358768-fix-tclk_trailcnt-computation.patch b/queue-6.4/drm-bridge-tc358768-fix-tclk_trailcnt-computation.patch deleted file mode 100644 index 673484d563e..00000000000 --- a/queue-6.4/drm-bridge-tc358768-fix-tclk_trailcnt-computation.patch +++ /dev/null @@ -1,92 +0,0 @@ -From 6cfa6bfe721af0e933787d9e99a9a293b2edcba6 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Thu, 27 Apr 2023 16:29:30 +0200 -Subject: drm/bridge: tc358768: fix TCLK_TRAILCNT computation - -From: Francesco Dolcini - -[ Upstream commit ee18698e212b1659dd0850d7e2ae0f22e16ed3d3 ] - -Correct computation of TCLK_TRAILCNT register. - -The driver does not implement non-continuous clock mode, so the actual -value doesn't make a practical difference yet. However this change also -ensures that the value does not write to reserved registers bits in case -of under/overflow. - -This register must be set to a value that ensures that - -TCLK-TRAIL > 60ns - and -TEOT <= (105 ns + 12 x UI) - -with the actual value of TCLK-TRAIL being - -(TCLK_TRAILCNT + (1 to 2)) xHSByteClkCycle + - (2 + (1 to 2)) * HSBYTECLKCycle - (PHY output delay) - -with PHY output delay being about - -(2 to 3) x MIPIBitClk cycle in the BitClk conversion. - -Fixes: ff1ca6397b1d ("drm/bridge: Add tc358768 driver") -Signed-off-by: Francesco Dolcini -Reviewed-by: Robert Foss -Signed-off-by: Robert Foss -Link: https://patchwork.freedesktop.org/patch/msgid/20230427142934.55435-2-francesco@dolcini.it -Link: https://patchwork.freedesktop.org/patch/msgid/20230427142934.55435-3-francesco@dolcini.it -Link: https://patchwork.freedesktop.org/patch/msgid/20230427142934.55435-4-francesco@dolcini.it -Link: https://patchwork.freedesktop.org/patch/msgid/20230427142934.55435-5-francesco@dolcini.it -Link: https://patchwork.freedesktop.org/patch/msgid/20230427142934.55435-2-francesco@dolcini.it -Link: https://patchwork.freedesktop.org/patch/msgid/20230427142934.55435-3-francesco@dolcini.it -Link: https://patchwork.freedesktop.org/patch/msgid/20230427142934.55435-4-francesco@dolcini.it -Link: https://patchwork.freedesktop.org/patch/msgid/20230427142934.55435-5-francesco@dolcini.it -Link: https://patchwork.freedesktop.org/patch/msgid/20230427142934.55435-2-francesco@dolcini.it -Link: https://patchwork.freedesktop.org/patch/msgid/20230427142934.55435-3-francesco@dolcini.it -Link: https://patchwork.freedesktop.org/patch/msgid/20230427142934.55435-4-francesco@dolcini.it -Link: https://patchwork.freedesktop.org/patch/msgid/20230427142934.55435-5-francesco@dolcini.it -Link: https://patchwork.freedesktop.org/patch/msgid/20230427142934.55435-2-francesco@dolcini.it -Link: https://patchwork.freedesktop.org/patch/msgid/20230427142934.55435-3-francesco@dolcini.it -Link: https://patchwork.freedesktop.org/patch/msgid/20230427142934.55435-4-francesco@dolcini.it -Link: https://patchwork.freedesktop.org/patch/msgid/20230427142934.55435-5-francesco@dolcini.it -Signed-off-by: Sasha Levin ---- - drivers/gpu/drm/bridge/tc358768.c | 8 +++++--- - 1 file changed, 5 insertions(+), 3 deletions(-) - -diff --git a/drivers/gpu/drm/bridge/tc358768.c b/drivers/gpu/drm/bridge/tc358768.c -index 487bfe33edc88..4cb46a3e6be8c 100644 ---- a/drivers/gpu/drm/bridge/tc358768.c -+++ b/drivers/gpu/drm/bridge/tc358768.c -@@ -10,6 +10,7 @@ - #include - #include - #include -+#include - #include - #include - #include -@@ -639,6 +640,7 @@ static void tc358768_bridge_pre_enable(struct drm_bridge *bridge) - struct mipi_dsi_device *dsi_dev = priv->output.dev; - unsigned long mode_flags = dsi_dev->mode_flags; - u32 val, val2, lptxcnt, hact, data_type; -+ s32 raw_val; - const struct drm_display_mode *mode; - u32 dsibclk_nsk, dsiclk_nsk, ui_nsk, phy_delay_nsk; - u32 dsiclk, dsibclk, video_start; -@@ -750,9 +752,9 @@ static void tc358768_bridge_pre_enable(struct drm_bridge *bridge) - dev_dbg(priv->dev, "TCLK_HEADERCNT: 0x%x\n", val); - tc358768_write(priv, TC358768_TCLK_HEADERCNT, val); - -- /* TCLK_TRAIL > 60ns + 3*UI */ -- val = 60 + tc358768_to_ns(3 * ui_nsk); -- val = tc358768_ns_to_cnt(val, dsibclk_nsk) - 5; -+ /* TCLK_TRAIL > 60ns AND TEOT <= 105 ns + 12*UI */ -+ raw_val = tc358768_ns_to_cnt(60 + tc358768_to_ns(2 * ui_nsk), dsibclk_nsk) - 5; -+ val = clamp(raw_val, 0, 127); - dev_dbg(priv->dev, "TCLK_TRAILCNT: 0x%x\n", val); - tc358768_write(priv, TC358768_TCLK_TRAILCNT, val); - --- -2.39.2 - diff --git a/queue-6.4/drm-bridge-tc358768-fix-tclk_zerocnt-computation.patch b/queue-6.4/drm-bridge-tc358768-fix-tclk_zerocnt-computation.patch deleted file mode 100644 index 8473c7d2cf8..00000000000 --- a/queue-6.4/drm-bridge-tc358768-fix-tclk_zerocnt-computation.patch +++ /dev/null @@ -1,54 +0,0 @@ -From 936c2750c357fb8a1fe8aeb8ecbdabef756d98c5 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Thu, 27 Apr 2023 16:29:29 +0200 -Subject: drm/bridge: tc358768: fix TCLK_ZEROCNT computation - -From: Francesco Dolcini - -[ Upstream commit f9cf811374f42fca31ac34aaf59ee2ae72b89879 ] - -Correct computation of TCLK_ZEROCNT register. - -This register must be set to a value that ensure that -(TCLK-PREPARECNT + TCLK-ZERO) > 300ns - -with the actual value of (TCLK-PREPARECNT + TCLK-ZERO) being - -(1 to 2) + (TCLK_ZEROCNT + 1)) x HSByteClkCycle + (PHY output delay) - -with PHY output delay being about - -(2 to 3) x MIPIBitClk cycle in the BitClk conversion. - -Fixes: ff1ca6397b1d ("drm/bridge: Add tc358768 driver") -Signed-off-by: Francesco Dolcini -Reviewed-by: Robert Foss -Signed-off-by: Robert Foss -Link: https://patchwork.freedesktop.org/patch/msgid/20230427142934.55435-5-francesco@dolcini.it -Signed-off-by: Sasha Levin ---- - drivers/gpu/drm/bridge/tc358768.c | 8 ++++---- - 1 file changed, 4 insertions(+), 4 deletions(-) - -diff --git a/drivers/gpu/drm/bridge/tc358768.c b/drivers/gpu/drm/bridge/tc358768.c -index dba1bf3912f1e..aff400c360662 100644 ---- a/drivers/gpu/drm/bridge/tc358768.c -+++ b/drivers/gpu/drm/bridge/tc358768.c -@@ -742,10 +742,10 @@ static void tc358768_bridge_pre_enable(struct drm_bridge *bridge) - - /* 38ns < TCLK_PREPARE < 95ns */ - val = tc358768_ns_to_cnt(65, dsibclk_nsk) - 1; -- /* TCLK_PREPARE > 300ns */ -- val2 = tc358768_ns_to_cnt(300 + tc358768_to_ns(3 * ui_nsk), -- dsibclk_nsk); -- val |= (val2 - tc358768_to_ns(phy_delay_nsk - dsibclk_nsk)) << 8; -+ /* TCLK_PREPARE + TCLK_ZERO > 300ns */ -+ val2 = tc358768_ns_to_cnt(300 - tc358768_to_ns(2 * ui_nsk), -+ dsibclk_nsk) - 2; -+ val |= val2 << 8; - dev_dbg(priv->dev, "TCLK_HEADERCNT: 0x%x\n", val); - tc358768_write(priv, TC358768_TCLK_HEADERCNT, val); - --- -2.39.2 - diff --git a/queue-6.4/drm-bridge-tc358768-fix-ths_trailcnt-computation.patch b/queue-6.4/drm-bridge-tc358768-fix-ths_trailcnt-computation.patch deleted file mode 100644 index 3db4bd25799..00000000000 --- a/queue-6.4/drm-bridge-tc358768-fix-ths_trailcnt-computation.patch +++ /dev/null @@ -1,60 +0,0 @@ -From 5b87369aa58490fea7967b3d754203e3cba6858f Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Thu, 27 Apr 2023 16:29:33 +0200 -Subject: drm/bridge: tc358768: fix THS_TRAILCNT computation - -From: Francesco Dolcini - -[ Upstream commit bac7842cd179572e8e0fc2d7b5254e40c6e9e057 ] - -Correct computation of THS_TRAILCNT register. - -This register must be set to a value that ensure that -THS_TRAIL > 60 ns + 4 x UI - and -THS_TRAIL > 8 x UI - and -THS_TRAIL < TEOT - with -TEOT = 105 ns + (12 x UI) - -with the actual value of THS_TRAIL being - -(1 + THS_TRAILCNT) x ByteClk cycle + ((1 to 2) + 2) xHSBYTECLK cycle + - - (PHY output delay) - -with PHY output delay being about - -(8 + (5 to 6)) x MIPIBitClk cycle in the BitClk conversion. - -Fixes: ff1ca6397b1d ("drm/bridge: Add tc358768 driver") -Signed-off-by: Francesco Dolcini -Reviewed-by: Robert Foss -Signed-off-by: Robert Foss -Link: https://patchwork.freedesktop.org/patch/msgid/20230427142934.55435-9-francesco@dolcini.it -Signed-off-by: Sasha Levin ---- - drivers/gpu/drm/bridge/tc358768.c | 7 ++++--- - 1 file changed, 4 insertions(+), 3 deletions(-) - -diff --git a/drivers/gpu/drm/bridge/tc358768.c b/drivers/gpu/drm/bridge/tc358768.c -index d8209433d5f43..966a25cb0b108 100644 ---- a/drivers/gpu/drm/bridge/tc358768.c -+++ b/drivers/gpu/drm/bridge/tc358768.c -@@ -780,9 +780,10 @@ static void tc358768_bridge_pre_enable(struct drm_bridge *bridge) - dev_dbg(priv->dev, "TCLK_POSTCNT: 0x%x\n", val); - tc358768_write(priv, TC358768_TCLK_POSTCNT, val); - -- /* 60ns + 4*UI < THS_PREPARE < 105ns + 12*UI */ -- val = tc358768_ns_to_cnt(60 + tc358768_to_ns(15 * ui_nsk), -- dsibclk_nsk) - 5; -+ /* max(60ns + 4*UI, 8*UI) < THS_TRAILCNT < 105ns + 12*UI */ -+ raw_val = tc358768_ns_to_cnt(60 + tc358768_to_ns(18 * ui_nsk), -+ dsibclk_nsk) - 4; -+ val = clamp(raw_val, 0, 15); - dev_dbg(priv->dev, "THS_TRAILCNT: 0x%x\n", val); - tc358768_write(priv, TC358768_THS_TRAILCNT, val); - --- -2.39.2 - diff --git a/queue-6.4/drm-bridge-tc358768-fix-ths_zerocnt-computation.patch b/queue-6.4/drm-bridge-tc358768-fix-ths_zerocnt-computation.patch deleted file mode 100644 index c270c4eedec..00000000000 --- a/queue-6.4/drm-bridge-tc358768-fix-ths_zerocnt-computation.patch +++ /dev/null @@ -1,54 +0,0 @@ -From db8307c9e5fe32928ba648a3319d50ecc804cdac Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Thu, 27 Apr 2023 16:29:31 +0200 -Subject: drm/bridge: tc358768: fix THS_ZEROCNT computation - -From: Francesco Dolcini - -[ Upstream commit 77a089328da791118af9692543a5eedc79eb5fd4 ] - -Correct computation of THS_ZEROCNT register. - -This register must be set to a value that ensure that -THS_PREPARE + THS_ZERO > 145ns + 10*UI - -with the actual value of (THS_PREPARE + THS_ZERO) being - -((1 to 2) + 1 + (TCLK_ZEROCNT + 1) + (3 to 4)) x ByteClk cycle + - + HSByteClk x (2 + (1 to 2)) + (PHY delay) - -with PHY delay being about - -(8 + (5 to 6)) x MIPIBitClk cycle in the BitClk conversion. - -Fixes: ff1ca6397b1d ("drm/bridge: Add tc358768 driver") -Signed-off-by: Francesco Dolcini -Reviewed-by: Robert Foss -Signed-off-by: Robert Foss -Link: https://patchwork.freedesktop.org/patch/msgid/20230427142934.55435-7-francesco@dolcini.it -Signed-off-by: Sasha Levin ---- - drivers/gpu/drm/bridge/tc358768.c | 7 ++++--- - 1 file changed, 4 insertions(+), 3 deletions(-) - -diff --git a/drivers/gpu/drm/bridge/tc358768.c b/drivers/gpu/drm/bridge/tc358768.c -index 4cb46a3e6be8c..e3f456bfb90c1 100644 ---- a/drivers/gpu/drm/bridge/tc358768.c -+++ b/drivers/gpu/drm/bridge/tc358768.c -@@ -761,9 +761,10 @@ static void tc358768_bridge_pre_enable(struct drm_bridge *bridge) - /* 40ns + 4*UI < THS_PREPARE < 85ns + 6*UI */ - val = 50 + tc358768_to_ns(4 * ui_nsk); - val = tc358768_ns_to_cnt(val, dsibclk_nsk) - 1; -- /* THS_ZERO > 145ns + 10*UI */ -- val2 = tc358768_ns_to_cnt(145 - tc358768_to_ns(ui_nsk), dsibclk_nsk); -- val |= (val2 - tc358768_to_ns(phy_delay_nsk)) << 8; -+ /* THS_PREPARE + THS_ZERO > 145ns + 10*UI */ -+ raw_val = tc358768_ns_to_cnt(145 - tc358768_to_ns(3 * ui_nsk), dsibclk_nsk) - 10; -+ val2 = clamp(raw_val, 0, 127); -+ val |= val2 << 8; - dev_dbg(priv->dev, "THS_HEADERCNT: 0x%x\n", val); - tc358768_write(priv, TC358768_THS_HEADERCNT, val); - --- -2.39.2 - diff --git a/queue-6.4/drm-bridge-tc358768-fix-txtagocnt-computation.patch b/queue-6.4/drm-bridge-tc358768-fix-txtagocnt-computation.patch deleted file mode 100644 index a6d7ba96ba1..00000000000 --- a/queue-6.4/drm-bridge-tc358768-fix-txtagocnt-computation.patch +++ /dev/null @@ -1,44 +0,0 @@ -From 6711ed5be6ea9e675607bb2e313828b43a99e51d Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Thu, 27 Apr 2023 16:29:32 +0200 -Subject: drm/bridge: tc358768: fix TXTAGOCNT computation - -From: Francesco Dolcini - -[ Upstream commit 3666aad8185af8d0ce164fd3c4974235417d6d0b ] - -Correct computation of TXTAGOCNT register. - -This register must be set to a value that ensure that the -TTA-GO period = (4 x TLPX) - -with the actual value of TTA-GO being - -4 x (TXTAGOCNT + 1) x (HSByteClk cycle) - -Fixes: ff1ca6397b1d ("drm/bridge: Add tc358768 driver") -Signed-off-by: Francesco Dolcini -Reviewed-by: Robert Foss -Signed-off-by: Robert Foss -Link: https://patchwork.freedesktop.org/patch/msgid/20230427142934.55435-8-francesco@dolcini.it -Signed-off-by: Sasha Levin ---- - drivers/gpu/drm/bridge/tc358768.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/drivers/gpu/drm/bridge/tc358768.c b/drivers/gpu/drm/bridge/tc358768.c -index e3f456bfb90c1..d8209433d5f43 100644 ---- a/drivers/gpu/drm/bridge/tc358768.c -+++ b/drivers/gpu/drm/bridge/tc358768.c -@@ -796,7 +796,7 @@ static void tc358768_bridge_pre_enable(struct drm_bridge *bridge) - - /* TXTAGOCNT[26:16] RXTASURECNT[10:0] */ - val = tc358768_to_ns((lptxcnt + 1) * dsibclk_nsk * 4); -- val = tc358768_ns_to_cnt(val, dsibclk_nsk) - 1; -+ val = tc358768_ns_to_cnt(val, dsibclk_nsk) / 4 - 1; - val2 = tc358768_ns_to_cnt(tc358768_to_ns((lptxcnt + 1) * dsibclk_nsk), - dsibclk_nsk) - 2; - val = val << 16 | val2; --- -2.39.2 - diff --git a/queue-6.4/drm-bridge-ti-sn65dsi83-fix-enable-disable-flow-to-m.patch b/queue-6.4/drm-bridge-ti-sn65dsi83-fix-enable-disable-flow-to-m.patch deleted file mode 100644 index ded1a21ec78..00000000000 --- a/queue-6.4/drm-bridge-ti-sn65dsi83-fix-enable-disable-flow-to-m.patch +++ /dev/null @@ -1,97 +0,0 @@ -From 010b1d4f8ba367a638f2aba86effb6f90f15e580 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Wed, 3 May 2023 18:33:07 +0200 -Subject: drm/bridge: ti-sn65dsi83: Fix enable/disable flow to meet spec - -From: Frieder Schrempf - -[ Upstream commit dd9e329af7236e34c566d3705ea32a63069b9b13 ] - -The datasheet describes the following initialization flow including -minimum delay times between each step: - -1. DSI data lanes need to be in LP-11 and the clock lane in HS mode -2. toggle EN signal -3. initialize registers -4. enable PLL -5. soft reset -6. enable DSI stream -7. check error status register - -To meet this requirement we need to make sure the host bridge's -pre_enable() is called first by using the pre_enable_prev_first -flag. - -Furthermore we need to split enable() into pre_enable() which covers -steps 2-5 from above and enable() which covers step 7 and is called -after the host bridge's enable(). - -Signed-off-by: Frieder Schrempf -Fixes: ceb515ba29ba ("drm/bridge: ti-sn65dsi83: Add TI SN65DSI83 and SN65DSI84 driver") -Tested-by: Alexander Stein #TQMa8MxML/MBa8Mx -Reviewed-by: Neil Armstrong -Signed-off-by: Neil Armstrong -Link: https://patchwork.freedesktop.org/patch/msgid/20230503163313.2640898-3-frieder@fris.de -Signed-off-by: Sasha Levin ---- - drivers/gpu/drm/bridge/ti-sn65dsi83.c | 19 ++++++++++++++++--- - 1 file changed, 16 insertions(+), 3 deletions(-) - -diff --git a/drivers/gpu/drm/bridge/ti-sn65dsi83.c b/drivers/gpu/drm/bridge/ti-sn65dsi83.c -index 1f5c07989e2bf..6e125ba4f0d75 100644 ---- a/drivers/gpu/drm/bridge/ti-sn65dsi83.c -+++ b/drivers/gpu/drm/bridge/ti-sn65dsi83.c -@@ -321,8 +321,8 @@ static u8 sn65dsi83_get_dsi_div(struct sn65dsi83 *ctx) - return dsi_div - 1; - } - --static void sn65dsi83_atomic_enable(struct drm_bridge *bridge, -- struct drm_bridge_state *old_bridge_state) -+static void sn65dsi83_atomic_pre_enable(struct drm_bridge *bridge, -+ struct drm_bridge_state *old_bridge_state) - { - struct sn65dsi83 *ctx = bridge_to_sn65dsi83(bridge); - struct drm_atomic_state *state = old_bridge_state->base.state; -@@ -485,11 +485,22 @@ static void sn65dsi83_atomic_enable(struct drm_bridge *bridge, - /* Trigger reset after CSR register update. */ - regmap_write(ctx->regmap, REG_RC_RESET, REG_RC_RESET_SOFT_RESET); - -+ /* Wait for 10ms after soft reset as specified in datasheet */ -+ usleep_range(10000, 12000); -+} -+ -+static void sn65dsi83_atomic_enable(struct drm_bridge *bridge, -+ struct drm_bridge_state *old_bridge_state) -+{ -+ struct sn65dsi83 *ctx = bridge_to_sn65dsi83(bridge); -+ unsigned int pval; -+ - /* Clear all errors that got asserted during initialization. */ - regmap_read(ctx->regmap, REG_IRQ_STAT, &pval); - regmap_write(ctx->regmap, REG_IRQ_STAT, pval); - -- usleep_range(10000, 12000); -+ /* Wait for 1ms and check for errors in status register */ -+ usleep_range(1000, 1100); - regmap_read(ctx->regmap, REG_IRQ_STAT, &pval); - if (pval) - dev_err(ctx->dev, "Unexpected link status 0x%02x\n", pval); -@@ -556,6 +567,7 @@ static const struct drm_bridge_funcs sn65dsi83_funcs = { - .attach = sn65dsi83_attach, - .detach = sn65dsi83_detach, - .atomic_enable = sn65dsi83_atomic_enable, -+ .atomic_pre_enable = sn65dsi83_atomic_pre_enable, - .atomic_disable = sn65dsi83_atomic_disable, - .mode_valid = sn65dsi83_mode_valid, - -@@ -698,6 +710,7 @@ static int sn65dsi83_probe(struct i2c_client *client) - - ctx->bridge.funcs = &sn65dsi83_funcs; - ctx->bridge.of_node = dev->of_node; -+ ctx->bridge.pre_enable_prev_first = true; - drm_bridge_add(&ctx->bridge); - - ret = sn65dsi83_host_attach(ctx); --- -2.39.2 - diff --git a/queue-6.4/drm-bridge-ti-sn65dsi83-fix-enable-error-path.patch b/queue-6.4/drm-bridge-ti-sn65dsi83-fix-enable-error-path.patch deleted file mode 100644 index 369386f6615..00000000000 --- a/queue-6.4/drm-bridge-ti-sn65dsi83-fix-enable-error-path.patch +++ /dev/null @@ -1,36 +0,0 @@ -From 7a65878fc3cb38c05696e68114dd7fb8e3cd02da Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Thu, 4 May 2023 08:53:16 +0200 -Subject: drm/bridge: ti-sn65dsi83: Fix enable error path - -From: Alexander Stein - -[ Upstream commit 8a91b29f1f50ce7742cdbe5cf11d17f128511f3f ] - -If PLL locking failed, the regulator needs to be disabled again. - -Fixes: 5664e3c907e2 ("drm/bridge: ti-sn65dsi83: Add vcc supply regulator support") -Signed-off-by: Alexander Stein -Reviewed-by: Laurent Pinchart -Signed-off-by: Robert Foss -Link: https://patchwork.freedesktop.org/patch/msgid/20230504065316.2640739-1-alexander.stein@ew.tq-group.com -Signed-off-by: Sasha Levin ---- - drivers/gpu/drm/bridge/ti-sn65dsi83.c | 1 + - 1 file changed, 1 insertion(+) - -diff --git a/drivers/gpu/drm/bridge/ti-sn65dsi83.c b/drivers/gpu/drm/bridge/ti-sn65dsi83.c -index 75286c9afbb96..1f5c07989e2bf 100644 ---- a/drivers/gpu/drm/bridge/ti-sn65dsi83.c -+++ b/drivers/gpu/drm/bridge/ti-sn65dsi83.c -@@ -478,6 +478,7 @@ static void sn65dsi83_atomic_enable(struct drm_bridge *bridge, - dev_err(ctx->dev, "failed to lock PLL, ret=%i\n", ret); - /* On failure, disable PLL again and exit. */ - regmap_write(ctx->regmap, REG_RC_PLL_EN, 0x00); -+ regulator_disable(ctx->vcc); - return; - } - --- -2.39.2 - diff --git a/queue-6.4/drm-i915-convert-intel_info-display-to-a-pointer.patch b/queue-6.4/drm-i915-convert-intel_info-display-to-a-pointer.patch deleted file mode 100644 index e5c331e04cb..00000000000 --- a/queue-6.4/drm-i915-convert-intel_info-display-to-a-pointer.patch +++ /dev/null @@ -1,1784 +0,0 @@ -From 0b518d38ccb998c6d0e9268dfb3b3080e316c333 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Tue, 23 May 2023 12:56:05 -0700 -Subject: drm/i915: Convert INTEL_INFO()->display to a pointer - -From: Matt Roper - -[ Upstream commit 5af5169d758275490ab00e209a09dc1d6b85e535 ] - -Rather than embeddeding the display's device info within the main device -info structure, just provide a pointer to the display-specific -structure. This is in preparation for moving the display device info -definitions into the display code itself and for eventually allowing the -pointer to be assigned at runtime on platforms that use GMD_ID for -device identification. - -In the future, this will also eventually allow the same display device -info structures to be used outside the current i915 code (e.g., from the -Xe driver). - -v2: - - Move introduction of DISPLAY_INFO() to this patch. (Andrzej) -v3: - - Also use DISPLAY_INFO() in intel_display_reg_defs.h. (Andrzej) - - Use "{}" instead of "{ 0 }" for empty struct init. (Jani) - -Signed-off-by: Matt Roper -Acked-by: Lucas De Marchi -Reviewed-by: Andrzej Hajda -Acked-by: Jani Nikula -Link: https://patchwork.freedesktop.org/patch/msgid/20230523195609.73627-3-matthew.d.roper@intel.com -Stable-dep-of: 19db2062094c ("drm/i915: No 10bit gamma on desktop gen3 parts") -Signed-off-by: Sasha Levin ---- - drivers/gpu/drm/i915/display/intel_color.c | 31 +- - drivers/gpu/drm/i915/display/intel_cursor.c | 2 +- - drivers/gpu/drm/i915/display/intel_display.h | 2 +- - .../drm/i915/display/intel_display_power.c | 6 +- - .../drm/i915/display/intel_display_reg_defs.h | 14 +- - drivers/gpu/drm/i915/display/intel_fb_pin.c | 2 +- - drivers/gpu/drm/i915/display/intel_hti.c | 2 +- - drivers/gpu/drm/i915/display/skl_watermark.c | 8 +- - drivers/gpu/drm/i915/i915_drv.h | 29 +- - drivers/gpu/drm/i915/i915_pci.c | 575 ++++++++++++------ - drivers/gpu/drm/i915/intel_device_info.c | 6 +- - drivers/gpu/drm/i915/intel_device_info.h | 2 +- - 12 files changed, 450 insertions(+), 229 deletions(-) - -diff --git a/drivers/gpu/drm/i915/display/intel_color.c b/drivers/gpu/drm/i915/display/intel_color.c -index 3c3e2f5a5cdec..a5fb08f6cf136 100644 ---- a/drivers/gpu/drm/i915/display/intel_color.c -+++ b/drivers/gpu/drm/i915/display/intel_color.c -@@ -1605,14 +1605,14 @@ static u32 intel_gamma_lut_tests(const struct intel_crtc_state *crtc_state) - if (lut_is_legacy(gamma_lut)) - return 0; - -- return INTEL_INFO(i915)->display.color.gamma_lut_tests; -+ return DISPLAY_INFO(i915)->color.gamma_lut_tests; - } - - static u32 intel_degamma_lut_tests(const struct intel_crtc_state *crtc_state) - { - struct drm_i915_private *i915 = to_i915(crtc_state->uapi.crtc->dev); - -- return INTEL_INFO(i915)->display.color.degamma_lut_tests; -+ return DISPLAY_INFO(i915)->color.degamma_lut_tests; - } - - static int intel_gamma_lut_size(const struct intel_crtc_state *crtc_state) -@@ -1623,14 +1623,14 @@ static int intel_gamma_lut_size(const struct intel_crtc_state *crtc_state) - if (lut_is_legacy(gamma_lut)) - return LEGACY_LUT_LENGTH; - -- return INTEL_INFO(i915)->display.color.gamma_lut_size; -+ return DISPLAY_INFO(i915)->color.gamma_lut_size; - } - - static u32 intel_degamma_lut_size(const struct intel_crtc_state *crtc_state) - { - struct drm_i915_private *i915 = to_i915(crtc_state->uapi.crtc->dev); - -- return INTEL_INFO(i915)->display.color.degamma_lut_size; -+ return DISPLAY_INFO(i915)->color.degamma_lut_size; - } - - static int check_lut_size(const struct drm_property_blob *lut, int expected) -@@ -2096,7 +2096,7 @@ static int glk_assign_luts(struct intel_crtc_state *crtc_state) - struct drm_property_blob *gamma_lut; - - gamma_lut = create_resized_lut(i915, crtc_state->hw.gamma_lut, -- INTEL_INFO(i915)->display.color.degamma_lut_size, -+ DISPLAY_INFO(i915)->color.degamma_lut_size, - false); - if (IS_ERR(gamma_lut)) - return PTR_ERR(gamma_lut); -@@ -2626,7 +2626,7 @@ static struct drm_property_blob *i9xx_read_lut_8(struct intel_crtc *crtc) - static struct drm_property_blob *i9xx_read_lut_10(struct intel_crtc *crtc) - { - struct drm_i915_private *dev_priv = to_i915(crtc->base.dev); -- u32 lut_size = INTEL_INFO(dev_priv)->display.color.gamma_lut_size; -+ u32 lut_size = DISPLAY_INFO(dev_priv)->color.gamma_lut_size; - enum pipe pipe = crtc->pipe; - struct drm_property_blob *blob; - struct drm_color_lut *lut; -@@ -2675,7 +2675,7 @@ static void i9xx_read_luts(struct intel_crtc_state *crtc_state) - static struct drm_property_blob *i965_read_lut_10p6(struct intel_crtc *crtc) - { - struct drm_i915_private *dev_priv = to_i915(crtc->base.dev); -- int i, lut_size = INTEL_INFO(dev_priv)->display.color.gamma_lut_size; -+ int i, lut_size = DISPLAY_INFO(dev_priv)->color.gamma_lut_size; - enum pipe pipe = crtc->pipe; - struct drm_property_blob *blob; - struct drm_color_lut *lut; -@@ -2725,7 +2725,7 @@ static void i965_read_luts(struct intel_crtc_state *crtc_state) - static struct drm_property_blob *chv_read_cgm_degamma(struct intel_crtc *crtc) - { - struct drm_i915_private *dev_priv = to_i915(crtc->base.dev); -- int i, lut_size = INTEL_INFO(dev_priv)->display.color.degamma_lut_size; -+ int i, lut_size = DISPLAY_INFO(dev_priv)->color.degamma_lut_size; - enum pipe pipe = crtc->pipe; - struct drm_property_blob *blob; - struct drm_color_lut *lut; -@@ -2751,7 +2751,7 @@ static struct drm_property_blob *chv_read_cgm_degamma(struct intel_crtc *crtc) - static struct drm_property_blob *chv_read_cgm_gamma(struct intel_crtc *crtc) - { - struct drm_i915_private *i915 = to_i915(crtc->base.dev); -- int i, lut_size = INTEL_INFO(i915)->display.color.gamma_lut_size; -+ int i, lut_size = DISPLAY_INFO(i915)->color.gamma_lut_size; - enum pipe pipe = crtc->pipe; - struct drm_property_blob *blob; - struct drm_color_lut *lut; -@@ -2815,7 +2815,7 @@ static struct drm_property_blob *ilk_read_lut_8(struct intel_crtc *crtc) - static struct drm_property_blob *ilk_read_lut_10(struct intel_crtc *crtc) - { - struct drm_i915_private *i915 = to_i915(crtc->base.dev); -- int i, lut_size = INTEL_INFO(i915)->display.color.gamma_lut_size; -+ int i, lut_size = DISPLAY_INFO(i915)->color.gamma_lut_size; - enum pipe pipe = crtc->pipe; - struct drm_property_blob *blob; - struct drm_color_lut *lut; -@@ -2999,7 +2999,7 @@ static void bdw_read_luts(struct intel_crtc_state *crtc_state) - static struct drm_property_blob *glk_read_degamma_lut(struct intel_crtc *crtc) - { - struct drm_i915_private *dev_priv = to_i915(crtc->base.dev); -- int i, lut_size = INTEL_INFO(dev_priv)->display.color.degamma_lut_size; -+ int i, lut_size = DISPLAY_INFO(dev_priv)->color.degamma_lut_size; - enum pipe pipe = crtc->pipe; - struct drm_property_blob *blob; - struct drm_color_lut *lut; -@@ -3064,7 +3064,7 @@ static struct drm_property_blob * - icl_read_lut_multi_segment(struct intel_crtc *crtc) - { - struct drm_i915_private *i915 = to_i915(crtc->base.dev); -- int i, lut_size = INTEL_INFO(i915)->display.color.gamma_lut_size; -+ int i, lut_size = DISPLAY_INFO(i915)->color.gamma_lut_size; - enum pipe pipe = crtc->pipe; - struct drm_property_blob *blob; - struct drm_color_lut *lut; -@@ -3233,8 +3233,8 @@ void intel_color_crtc_init(struct intel_crtc *crtc) - - drm_mode_crtc_set_gamma_size(&crtc->base, 256); - -- gamma_lut_size = INTEL_INFO(i915)->display.color.gamma_lut_size; -- degamma_lut_size = INTEL_INFO(i915)->display.color.degamma_lut_size; -+ gamma_lut_size = DISPLAY_INFO(i915)->color.gamma_lut_size; -+ degamma_lut_size = DISPLAY_INFO(i915)->color.degamma_lut_size; - has_ctm = degamma_lut_size != 0; - - /* -@@ -3259,7 +3259,8 @@ int intel_color_init(struct drm_i915_private *i915) - if (DISPLAY_VER(i915) != 10) - return 0; - -- blob = create_linear_lut(i915, INTEL_INFO(i915)->display.color.degamma_lut_size); -+ blob = create_linear_lut(i915, -+ DISPLAY_INFO(i915)->color.degamma_lut_size); - if (IS_ERR(blob)) - return PTR_ERR(blob); - -diff --git a/drivers/gpu/drm/i915/display/intel_cursor.c b/drivers/gpu/drm/i915/display/intel_cursor.c -index 31bef04273779..3864da5f5c17f 100644 ---- a/drivers/gpu/drm/i915/display/intel_cursor.c -+++ b/drivers/gpu/drm/i915/display/intel_cursor.c -@@ -36,7 +36,7 @@ static u32 intel_cursor_base(const struct intel_plane_state *plane_state) - const struct drm_i915_gem_object *obj = intel_fb_obj(fb); - u32 base; - -- if (INTEL_INFO(dev_priv)->display.cursor_needs_physical) -+ if (DISPLAY_INFO(dev_priv)->cursor_needs_physical) - base = sg_dma_address(obj->mm.pages->sgl); - else - base = intel_plane_ggtt_offset(plane_state); -diff --git a/drivers/gpu/drm/i915/display/intel_display.h b/drivers/gpu/drm/i915/display/intel_display.h -index 287159bdeb0d1..17ae321b70ba5 100644 ---- a/drivers/gpu/drm/i915/display/intel_display.h -+++ b/drivers/gpu/drm/i915/display/intel_display.h -@@ -113,7 +113,7 @@ enum i9xx_plane_id { - - #define for_each_dbuf_slice(__dev_priv, __slice) \ - for ((__slice) = DBUF_S1; (__slice) < I915_MAX_DBUF_SLICES; (__slice)++) \ -- for_each_if(INTEL_INFO(__dev_priv)->display.dbuf.slice_mask & BIT(__slice)) -+ for_each_if(INTEL_INFO(__dev_priv)->display->dbuf.slice_mask & BIT(__slice)) - - #define for_each_dbuf_slice_in_mask(__dev_priv, __slice, __mask) \ - for_each_dbuf_slice((__dev_priv), (__slice)) \ -diff --git a/drivers/gpu/drm/i915/display/intel_display_power.c b/drivers/gpu/drm/i915/display/intel_display_power.c -index 7c9f4288329ed..5f7deaa23b218 100644 ---- a/drivers/gpu/drm/i915/display/intel_display_power.c -+++ b/drivers/gpu/drm/i915/display/intel_display_power.c -@@ -1052,7 +1052,7 @@ void gen9_dbuf_slices_update(struct drm_i915_private *dev_priv, - u8 req_slices) - { - struct i915_power_domains *power_domains = &dev_priv->display.power.domains; -- u8 slice_mask = INTEL_INFO(dev_priv)->display.dbuf.slice_mask; -+ u8 slice_mask = DISPLAY_INFO(dev_priv)->dbuf.slice_mask; - enum dbuf_slice slice; - - drm_WARN(&dev_priv->drm, req_slices & ~slice_mask, -@@ -1112,7 +1112,7 @@ static void gen12_dbuf_slices_config(struct drm_i915_private *dev_priv) - - static void icl_mbus_init(struct drm_i915_private *dev_priv) - { -- unsigned long abox_regs = INTEL_INFO(dev_priv)->display.abox_mask; -+ unsigned long abox_regs = DISPLAY_INFO(dev_priv)->abox_mask; - u32 mask, val, i; - - if (IS_ALDERLAKE_P(dev_priv) || DISPLAY_VER(dev_priv) >= 14) -@@ -1558,7 +1558,7 @@ static void tgl_bw_buddy_init(struct drm_i915_private *dev_priv) - enum intel_dram_type type = dev_priv->dram_info.type; - u8 num_channels = dev_priv->dram_info.num_channels; - const struct buddy_page_mask *table; -- unsigned long abox_mask = INTEL_INFO(dev_priv)->display.abox_mask; -+ unsigned long abox_mask = DISPLAY_INFO(dev_priv)->abox_mask; - int config, i; - - /* BW_BUDDY registers are not used on dgpu's beyond DG1 */ -diff --git a/drivers/gpu/drm/i915/display/intel_display_reg_defs.h b/drivers/gpu/drm/i915/display/intel_display_reg_defs.h -index 755c1ea8225c5..2f07b7afa3bfe 100644 ---- a/drivers/gpu/drm/i915/display/intel_display_reg_defs.h -+++ b/drivers/gpu/drm/i915/display/intel_display_reg_defs.h -@@ -8,7 +8,7 @@ - - #include "i915_reg_defs.h" - --#define DISPLAY_MMIO_BASE(dev_priv) (INTEL_INFO(dev_priv)->display.mmio_offset) -+#define DISPLAY_MMIO_BASE(dev_priv) (DISPLAY_INFO(dev_priv)->mmio_offset) - - #define VLV_DISPLAY_BASE 0x180000 - -@@ -36,14 +36,14 @@ - * Device info offset array based helpers for groups of registers with unevenly - * spaced base offsets. - */ --#define _MMIO_PIPE2(pipe, reg) _MMIO(INTEL_INFO(dev_priv)->display.pipe_offsets[(pipe)] - \ -- INTEL_INFO(dev_priv)->display.pipe_offsets[PIPE_A] + \ -+#define _MMIO_PIPE2(pipe, reg) _MMIO(DISPLAY_INFO(dev_priv)->pipe_offsets[(pipe)] - \ -+ DISPLAY_INFO(dev_priv)->pipe_offsets[PIPE_A] + \ - DISPLAY_MMIO_BASE(dev_priv) + (reg)) --#define _MMIO_TRANS2(tran, reg) _MMIO(INTEL_INFO(dev_priv)->display.trans_offsets[(tran)] - \ -- INTEL_INFO(dev_priv)->display.trans_offsets[TRANSCODER_A] + \ -+#define _MMIO_TRANS2(tran, reg) _MMIO(DISPLAY_INFO(dev_priv)->trans_offsets[(tran)] - \ -+ DISPLAY_INFO(dev_priv)->trans_offsets[TRANSCODER_A] + \ - DISPLAY_MMIO_BASE(dev_priv) + (reg)) --#define _MMIO_CURSOR2(pipe, reg) _MMIO(INTEL_INFO(dev_priv)->display.cursor_offsets[(pipe)] - \ -- INTEL_INFO(dev_priv)->display.cursor_offsets[PIPE_A] + \ -+#define _MMIO_CURSOR2(pipe, reg) _MMIO(DISPLAY_INFO(dev_priv)->cursor_offsets[(pipe)] - \ -+ DISPLAY_INFO(dev_priv)->cursor_offsets[PIPE_A] + \ - DISPLAY_MMIO_BASE(dev_priv) + (reg)) - - #endif /* __INTEL_DISPLAY_REG_DEFS_H__ */ -diff --git a/drivers/gpu/drm/i915/display/intel_fb_pin.c b/drivers/gpu/drm/i915/display/intel_fb_pin.c -index 1aca7552a85d0..fffd568070d41 100644 ---- a/drivers/gpu/drm/i915/display/intel_fb_pin.c -+++ b/drivers/gpu/drm/i915/display/intel_fb_pin.c -@@ -243,7 +243,7 @@ int intel_plane_pin_fb(struct intel_plane_state *plane_state) - struct i915_vma *vma; - bool phys_cursor = - plane->id == PLANE_CURSOR && -- INTEL_INFO(dev_priv)->display.cursor_needs_physical; -+ DISPLAY_INFO(dev_priv)->cursor_needs_physical; - - if (!intel_fb_uses_dpt(fb)) { - vma = intel_pin_and_fence_fb_obj(fb, phys_cursor, -diff --git a/drivers/gpu/drm/i915/display/intel_hti.c b/drivers/gpu/drm/i915/display/intel_hti.c -index c518efebdf779..a92d008d4e6e5 100644 ---- a/drivers/gpu/drm/i915/display/intel_hti.c -+++ b/drivers/gpu/drm/i915/display/intel_hti.c -@@ -15,7 +15,7 @@ void intel_hti_init(struct drm_i915_private *i915) - * If the platform has HTI, we need to find out whether it has reserved - * any display resources before we create our display outputs. - */ -- if (INTEL_INFO(i915)->display.has_hti) -+ if (DISPLAY_INFO(i915)->has_hti) - i915->display.hti.state = intel_de_read(i915, HDPORT_STATE); - } - -diff --git a/drivers/gpu/drm/i915/display/skl_watermark.c b/drivers/gpu/drm/i915/display/skl_watermark.c -index 1c7e6468f3e34..d1245c847f1cb 100644 ---- a/drivers/gpu/drm/i915/display/skl_watermark.c -+++ b/drivers/gpu/drm/i915/display/skl_watermark.c -@@ -507,8 +507,8 @@ static u16 skl_ddb_entry_init(struct skl_ddb_entry *entry, - - static int intel_dbuf_slice_size(struct drm_i915_private *i915) - { -- return INTEL_INFO(i915)->display.dbuf.size / -- hweight8(INTEL_INFO(i915)->display.dbuf.slice_mask); -+ return DISPLAY_INFO(i915)->dbuf.size / -+ hweight8(DISPLAY_INFO(i915)->dbuf.slice_mask); - } - - static void -@@ -527,7 +527,7 @@ skl_ddb_entry_for_slices(struct drm_i915_private *i915, u8 slice_mask, - ddb->end = fls(slice_mask) * slice_size; - - WARN_ON(ddb->start >= ddb->end); -- WARN_ON(ddb->end > INTEL_INFO(i915)->display.dbuf.size); -+ WARN_ON(ddb->end > DISPLAY_INFO(i915)->dbuf.size); - } - - static unsigned int mbus_ddb_offset(struct drm_i915_private *i915, u8 slice_mask) -@@ -2625,7 +2625,7 @@ skl_compute_ddb(struct intel_atomic_state *state) - "Enabled dbuf slices 0x%x -> 0x%x (total dbuf slices 0x%x), mbus joined? %s->%s\n", - old_dbuf_state->enabled_slices, - new_dbuf_state->enabled_slices, -- INTEL_INFO(i915)->display.dbuf.slice_mask, -+ DISPLAY_INFO(i915)->dbuf.slice_mask, - str_yes_no(old_dbuf_state->joined_mbus), - str_yes_no(new_dbuf_state->joined_mbus)); - } -diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h -index fe7eeafe9cff6..0c341107363f7 100644 ---- a/drivers/gpu/drm/i915/i915_drv.h -+++ b/drivers/gpu/drm/i915/i915_drv.h -@@ -408,6 +408,7 @@ static inline struct intel_gt *to_gt(struct drm_i915_private *i915) - (engine__) = rb_to_uabi_engine(rb_next(&(engine__)->uabi_node))) - - #define INTEL_INFO(dev_priv) (&(dev_priv)->__info) -+#define DISPLAY_INFO(i915) (INTEL_INFO(i915)->display) - #define RUNTIME_INFO(dev_priv) (&(dev_priv)->__runtime) - #define DRIVER_CAPS(dev_priv) (&(dev_priv)->caps) - -@@ -782,9 +783,9 @@ IS_SUBPLATFORM(const struct drm_i915_private *i915, - ((sizes) & ~RUNTIME_INFO(dev_priv)->page_sizes) == 0; \ - }) - --#define HAS_OVERLAY(dev_priv) (INTEL_INFO(dev_priv)->display.has_overlay) -+#define HAS_OVERLAY(dev_priv) (DISPLAY_INFO(dev_priv)->has_overlay) - #define OVERLAY_NEEDS_PHYSICAL(dev_priv) \ -- (INTEL_INFO(dev_priv)->display.overlay_needs_physical) -+ (DISPLAY_INFO(dev_priv)->overlay_needs_physical) - - /* Early gen2 have a totally busted CS tlb and require pinned batches. */ - #define HAS_BROKEN_CS_TLB(dev_priv) (IS_I830(dev_priv) || IS_I845G(dev_priv)) -@@ -806,8 +807,8 @@ IS_SUBPLATFORM(const struct drm_i915_private *i915, - */ - #define HAS_128_BYTE_Y_TILING(dev_priv) (GRAPHICS_VER(dev_priv) != 2 && \ - !(IS_I915G(dev_priv) || IS_I915GM(dev_priv))) --#define SUPPORTS_TV(dev_priv) (INTEL_INFO(dev_priv)->display.supports_tv) --#define I915_HAS_HOTPLUG(dev_priv) (INTEL_INFO(dev_priv)->display.has_hotplug) -+#define SUPPORTS_TV(dev_priv) (DISPLAY_INFO(dev_priv)->supports_tv) -+#define I915_HAS_HOTPLUG(dev_priv) (DISPLAY_INFO(dev_priv)->has_hotplug) - - #define HAS_FW_BLC(dev_priv) (DISPLAY_VER(dev_priv) > 2) - #define HAS_FBC(dev_priv) (RUNTIME_INFO(dev_priv)->fbc_mask != 0) -@@ -817,18 +818,18 @@ IS_SUBPLATFORM(const struct drm_i915_private *i915, - - #define HAS_IPS(dev_priv) (IS_HSW_ULT(dev_priv) || IS_BROADWELL(dev_priv)) - --#define HAS_DP_MST(dev_priv) (INTEL_INFO(dev_priv)->display.has_dp_mst) -+#define HAS_DP_MST(dev_priv) (DISPLAY_INFO(dev_priv)->has_dp_mst) - #define HAS_DP20(dev_priv) (IS_DG2(dev_priv) || DISPLAY_VER(dev_priv) >= 14) - - #define HAS_DOUBLE_BUFFERED_M_N(dev_priv) (DISPLAY_VER(dev_priv) >= 9 || IS_BROADWELL(dev_priv)) - --#define HAS_CDCLK_CRAWL(dev_priv) (INTEL_INFO(dev_priv)->display.has_cdclk_crawl) --#define HAS_CDCLK_SQUASH(dev_priv) (INTEL_INFO(dev_priv)->display.has_cdclk_squash) --#define HAS_DDI(dev_priv) (INTEL_INFO(dev_priv)->display.has_ddi) --#define HAS_FPGA_DBG_UNCLAIMED(dev_priv) (INTEL_INFO(dev_priv)->display.has_fpga_dbg) --#define HAS_PSR(dev_priv) (INTEL_INFO(dev_priv)->display.has_psr) -+#define HAS_CDCLK_CRAWL(dev_priv) (DISPLAY_INFO(dev_priv)->has_cdclk_crawl) -+#define HAS_CDCLK_SQUASH(dev_priv) (DISPLAY_INFO(dev_priv)->has_cdclk_squash) -+#define HAS_DDI(dev_priv) (DISPLAY_INFO(dev_priv)->has_ddi) -+#define HAS_FPGA_DBG_UNCLAIMED(dev_priv) (DISPLAY_INFO(dev_priv)->has_fpga_dbg) -+#define HAS_PSR(dev_priv) (DISPLAY_INFO(dev_priv)->has_psr) - #define HAS_PSR_HW_TRACKING(dev_priv) \ -- (INTEL_INFO(dev_priv)->display.has_psr_hw_tracking) -+ (DISPLAY_INFO(dev_priv)->has_psr_hw_tracking) - #define HAS_PSR2_SEL_FETCH(dev_priv) (DISPLAY_VER(dev_priv) >= 12) - #define HAS_TRANSCODER(dev_priv, trans) ((RUNTIME_INFO(dev_priv)->cpu_transcoder_mask & BIT(trans)) != 0) - -@@ -839,7 +840,7 @@ IS_SUBPLATFORM(const struct drm_i915_private *i915, - #define HAS_RPS(dev_priv) (INTEL_INFO(dev_priv)->has_rps) - - #define HAS_DMC(dev_priv) (RUNTIME_INFO(dev_priv)->has_dmc) --#define HAS_DSB(dev_priv) (INTEL_INFO(dev_priv)->display.has_dsb) -+#define HAS_DSB(dev_priv) (DISPLAY_INFO(dev_priv)->has_dsb) - #define HAS_DSC(__i915) (RUNTIME_INFO(__i915)->has_dsc) - #define HAS_HW_SAGV_WM(i915) (DISPLAY_VER(i915) >= 13 && !IS_DGFX(i915)) - -@@ -869,7 +870,7 @@ IS_SUBPLATFORM(const struct drm_i915_private *i915, - */ - #define HAS_64K_PAGES(dev_priv) (INTEL_INFO(dev_priv)->has_64k_pages) - --#define HAS_IPC(dev_priv) (INTEL_INFO(dev_priv)->display.has_ipc) -+#define HAS_IPC(dev_priv) (DISPLAY_INFO(dev_priv)->has_ipc) - #define HAS_SAGV(dev_priv) (DISPLAY_VER(dev_priv) >= 9 && !IS_LP(dev_priv)) - - #define HAS_REGION(i915, i) (RUNTIME_INFO(i915)->memory_regions & (i)) -@@ -889,7 +890,7 @@ IS_SUBPLATFORM(const struct drm_i915_private *i915, - - #define HAS_GLOBAL_MOCS_REGISTERS(dev_priv) (INTEL_INFO(dev_priv)->has_global_mocs) - --#define HAS_GMCH(dev_priv) (INTEL_INFO(dev_priv)->display.has_gmch) -+#define HAS_GMCH(dev_priv) (DISPLAY_INFO(dev_priv)->has_gmch) - - #define HAS_GMD_ID(i915) (INTEL_INFO(i915)->has_gmd_id) - -diff --git a/drivers/gpu/drm/i915/i915_pci.c b/drivers/gpu/drm/i915/i915_pci.c -index edcfb5fe20b24..3d15f5af563d5 100644 ---- a/drivers/gpu/drm/i915/i915_pci.c -+++ b/drivers/gpu/drm/i915/i915_pci.c -@@ -45,43 +45,43 @@ - #define NO_DISPLAY .__runtime.pipe_mask = 0 - - #define I845_PIPE_OFFSETS \ -- .display.pipe_offsets = { \ -+ .pipe_offsets = { \ - [TRANSCODER_A] = PIPE_A_OFFSET, \ - }, \ -- .display.trans_offsets = { \ -+ .trans_offsets = { \ - [TRANSCODER_A] = TRANSCODER_A_OFFSET, \ - } - - #define I9XX_PIPE_OFFSETS \ -- .display.pipe_offsets = { \ -+ .pipe_offsets = { \ - [TRANSCODER_A] = PIPE_A_OFFSET, \ - [TRANSCODER_B] = PIPE_B_OFFSET, \ - }, \ -- .display.trans_offsets = { \ -+ .trans_offsets = { \ - [TRANSCODER_A] = TRANSCODER_A_OFFSET, \ - [TRANSCODER_B] = TRANSCODER_B_OFFSET, \ - } - - #define IVB_PIPE_OFFSETS \ -- .display.pipe_offsets = { \ -+ .pipe_offsets = { \ - [TRANSCODER_A] = PIPE_A_OFFSET, \ - [TRANSCODER_B] = PIPE_B_OFFSET, \ - [TRANSCODER_C] = PIPE_C_OFFSET, \ - }, \ -- .display.trans_offsets = { \ -+ .trans_offsets = { \ - [TRANSCODER_A] = TRANSCODER_A_OFFSET, \ - [TRANSCODER_B] = TRANSCODER_B_OFFSET, \ - [TRANSCODER_C] = TRANSCODER_C_OFFSET, \ - } - - #define HSW_PIPE_OFFSETS \ -- .display.pipe_offsets = { \ -+ .pipe_offsets = { \ - [TRANSCODER_A] = PIPE_A_OFFSET, \ - [TRANSCODER_B] = PIPE_B_OFFSET, \ - [TRANSCODER_C] = PIPE_C_OFFSET, \ - [TRANSCODER_EDP] = PIPE_EDP_OFFSET, \ - }, \ -- .display.trans_offsets = { \ -+ .trans_offsets = { \ - [TRANSCODER_A] = TRANSCODER_A_OFFSET, \ - [TRANSCODER_B] = TRANSCODER_B_OFFSET, \ - [TRANSCODER_C] = TRANSCODER_C_OFFSET, \ -@@ -89,44 +89,44 @@ - } - - #define CHV_PIPE_OFFSETS \ -- .display.pipe_offsets = { \ -+ .pipe_offsets = { \ - [TRANSCODER_A] = PIPE_A_OFFSET, \ - [TRANSCODER_B] = PIPE_B_OFFSET, \ - [TRANSCODER_C] = CHV_PIPE_C_OFFSET, \ - }, \ -- .display.trans_offsets = { \ -+ .trans_offsets = { \ - [TRANSCODER_A] = TRANSCODER_A_OFFSET, \ - [TRANSCODER_B] = TRANSCODER_B_OFFSET, \ - [TRANSCODER_C] = CHV_TRANSCODER_C_OFFSET, \ - } - - #define I845_CURSOR_OFFSETS \ -- .display.cursor_offsets = { \ -+ .cursor_offsets = { \ - [PIPE_A] = CURSOR_A_OFFSET, \ - } - - #define I9XX_CURSOR_OFFSETS \ -- .display.cursor_offsets = { \ -+ .cursor_offsets = { \ - [PIPE_A] = CURSOR_A_OFFSET, \ - [PIPE_B] = CURSOR_B_OFFSET, \ - } - - #define CHV_CURSOR_OFFSETS \ -- .display.cursor_offsets = { \ -+ .cursor_offsets = { \ - [PIPE_A] = CURSOR_A_OFFSET, \ - [PIPE_B] = CURSOR_B_OFFSET, \ - [PIPE_C] = CHV_CURSOR_C_OFFSET, \ - } - - #define IVB_CURSOR_OFFSETS \ -- .display.cursor_offsets = { \ -+ .cursor_offsets = { \ - [PIPE_A] = CURSOR_A_OFFSET, \ - [PIPE_B] = IVB_CURSOR_B_OFFSET, \ - [PIPE_C] = IVB_CURSOR_C_OFFSET, \ - } - - #define TGL_CURSOR_OFFSETS \ -- .display.cursor_offsets = { \ -+ .cursor_offsets = { \ - [PIPE_A] = CURSOR_A_OFFSET, \ - [PIPE_B] = IVB_CURSOR_B_OFFSET, \ - [PIPE_C] = IVB_CURSOR_C_OFFSET, \ -@@ -134,29 +134,29 @@ - } - - #define I845_COLORS \ -- .display.color = { .gamma_lut_size = 256 } -+ .color = { .gamma_lut_size = 256 } - #define I9XX_COLORS \ -- .display.color = { .gamma_lut_size = 129, \ -+ .color = { .gamma_lut_size = 129, \ - .gamma_lut_tests = DRM_COLOR_LUT_NON_DECREASING, \ - } - #define ILK_COLORS \ -- .display.color = { .gamma_lut_size = 1024 } -+ .color = { .gamma_lut_size = 1024 } - #define IVB_COLORS \ -- .display.color = { .degamma_lut_size = 1024, .gamma_lut_size = 1024 } -+ .color = { .degamma_lut_size = 1024, .gamma_lut_size = 1024 } - #define CHV_COLORS \ -- .display.color = { \ -+ .color = { \ - .degamma_lut_size = 65, .gamma_lut_size = 257, \ - .degamma_lut_tests = DRM_COLOR_LUT_NON_DECREASING, \ - .gamma_lut_tests = DRM_COLOR_LUT_NON_DECREASING, \ - } - #define GLK_COLORS \ -- .display.color = { \ -+ .color = { \ - .degamma_lut_size = 33, .gamma_lut_size = 1024, \ - .degamma_lut_tests = DRM_COLOR_LUT_NON_DECREASING | \ - DRM_COLOR_LUT_EQUAL_CHANNELS, \ - } - #define ICL_COLORS \ -- .display.color = { \ -+ .color = { \ - .degamma_lut_size = 33, .gamma_lut_size = 262145, \ - .degamma_lut_tests = DRM_COLOR_LUT_NON_DECREASING | \ - DRM_COLOR_LUT_EQUAL_CHANNELS, \ -@@ -171,15 +171,24 @@ - #define GEN_DEFAULT_REGIONS \ - .__runtime.memory_regions = REGION_SMEM | REGION_STOLEN_SMEM - -+#define I830_DISPLAY \ -+ .has_overlay = 1, \ -+ .cursor_needs_physical = 1, \ -+ .overlay_needs_physical = 1, \ -+ .has_gmch = 1, \ -+ I9XX_PIPE_OFFSETS, \ -+ I9XX_CURSOR_OFFSETS, \ -+ I9XX_COLORS -+ -+static const struct intel_display_device_info i830_display = { -+ I830_DISPLAY, -+}; -+ - #define I830_FEATURES \ - GEN(2), \ - .is_mobile = 1, \ - .__runtime.pipe_mask = BIT(PIPE_A) | BIT(PIPE_B), \ - .__runtime.cpu_transcoder_mask = BIT(TRANSCODER_A) | BIT(TRANSCODER_B), \ -- .display.has_overlay = 1, \ -- .display.cursor_needs_physical = 1, \ -- .display.overlay_needs_physical = 1, \ -- .display.has_gmch = 1, \ - .gpu_reset_clobbers_display = true, \ - .has_3d_pipeline = 1, \ - .hws_needs_physical = 1, \ -@@ -188,19 +197,25 @@ - .has_snoop = true, \ - .has_coherent_ggtt = false, \ - .dma_mask_size = 32, \ -- I9XX_PIPE_OFFSETS, \ -- I9XX_CURSOR_OFFSETS, \ -- I9XX_COLORS, \ - GEN_DEFAULT_PAGE_SIZES, \ - GEN_DEFAULT_REGIONS - -+#define I845_DISPLAY \ -+ .has_overlay = 1, \ -+ .overlay_needs_physical = 1, \ -+ .has_gmch = 1, \ -+ I845_PIPE_OFFSETS, \ -+ I845_CURSOR_OFFSETS, \ -+ I845_COLORS -+ -+static const struct intel_display_device_info i845_display = { -+ I845_DISPLAY, -+}; -+ - #define I845_FEATURES \ - GEN(2), \ - .__runtime.pipe_mask = BIT(PIPE_A), \ - .__runtime.cpu_transcoder_mask = BIT(TRANSCODER_A), \ -- .display.has_overlay = 1, \ -- .display.overlay_needs_physical = 1, \ -- .display.has_gmch = 1, \ - .has_3d_pipeline = 1, \ - .gpu_reset_clobbers_display = true, \ - .hws_needs_physical = 1, \ -@@ -209,58 +224,101 @@ - .has_snoop = true, \ - .has_coherent_ggtt = false, \ - .dma_mask_size = 32, \ -- I845_PIPE_OFFSETS, \ -- I845_CURSOR_OFFSETS, \ -- I845_COLORS, \ - GEN_DEFAULT_PAGE_SIZES, \ - GEN_DEFAULT_REGIONS - - static const struct intel_device_info i830_info = { - I830_FEATURES, - PLATFORM(INTEL_I830), -+ .display = &i830_display, - }; - - static const struct intel_device_info i845g_info = { - I845_FEATURES, - PLATFORM(INTEL_I845G), -+ .display = &i845_display, -+}; -+ -+static const struct intel_display_device_info i85x_display = { -+ I830_DISPLAY, - }; - - static const struct intel_device_info i85x_info = { - I830_FEATURES, - PLATFORM(INTEL_I85X), -+ .display = &i85x_display, - .__runtime.fbc_mask = BIT(INTEL_FBC_A), - }; - -+static const struct intel_display_device_info i865g_display = { -+ I845_DISPLAY, -+}; -+ - static const struct intel_device_info i865g_info = { - I845_FEATURES, - PLATFORM(INTEL_I865G), -+ .display = &i865g_display, - .__runtime.fbc_mask = BIT(INTEL_FBC_A), - }; - -+#define GEN3_DISPLAY \ -+ .has_gmch = 1, \ -+ .has_overlay = 1, \ -+ I9XX_PIPE_OFFSETS, \ -+ I9XX_CURSOR_OFFSETS, \ -+ I9XX_COLORS -+ -+static const struct intel_display_device_info i915g_display = { -+ GEN3_DISPLAY, -+ .cursor_needs_physical = 1, -+ .overlay_needs_physical = 1, -+}; -+ -+static const struct intel_display_device_info i915gm_display = { -+ GEN3_DISPLAY, -+ .cursor_needs_physical = 1, -+ .overlay_needs_physical = 1, -+ .supports_tv = 1, -+}; -+ -+static const struct intel_display_device_info i945g_display = { -+ GEN3_DISPLAY, -+ .has_hotplug = 1, -+ .cursor_needs_physical = 1, -+ .overlay_needs_physical = 1, -+}; -+ -+static const struct intel_display_device_info i945gm_display = { -+ GEN3_DISPLAY, -+ .has_hotplug = 1, -+ .cursor_needs_physical = 1, -+ .overlay_needs_physical = 1, -+ .supports_tv = 1, -+}; -+ -+static const struct intel_display_device_info g33_display = { -+ GEN3_DISPLAY, -+ .has_hotplug = 1, -+}; -+ - #define GEN3_FEATURES \ - GEN(3), \ - .__runtime.pipe_mask = BIT(PIPE_A) | BIT(PIPE_B), \ - .__runtime.cpu_transcoder_mask = BIT(TRANSCODER_A) | BIT(TRANSCODER_B), \ -- .display.has_gmch = 1, \ - .gpu_reset_clobbers_display = true, \ - .__runtime.platform_engine_mask = BIT(RCS0), \ - .has_3d_pipeline = 1, \ - .has_snoop = true, \ - .has_coherent_ggtt = true, \ - .dma_mask_size = 32, \ -- I9XX_PIPE_OFFSETS, \ -- I9XX_CURSOR_OFFSETS, \ -- I9XX_COLORS, \ - GEN_DEFAULT_PAGE_SIZES, \ - GEN_DEFAULT_REGIONS - - static const struct intel_device_info i915g_info = { - GEN3_FEATURES, - PLATFORM(INTEL_I915G), -+ .display = &i915g_display, - .has_coherent_ggtt = false, -- .display.cursor_needs_physical = 1, -- .display.has_overlay = 1, -- .display.overlay_needs_physical = 1, - .hws_needs_physical = 1, - .unfenced_needs_alignment = 1, - }; -@@ -268,11 +326,8 @@ static const struct intel_device_info i915g_info = { - static const struct intel_device_info i915gm_info = { - GEN3_FEATURES, - PLATFORM(INTEL_I915GM), -+ .display = &i915gm_display, - .is_mobile = 1, -- .display.cursor_needs_physical = 1, -- .display.has_overlay = 1, -- .display.overlay_needs_physical = 1, -- .display.supports_tv = 1, - .__runtime.fbc_mask = BIT(INTEL_FBC_A), - .hws_needs_physical = 1, - .unfenced_needs_alignment = 1, -@@ -281,10 +336,7 @@ static const struct intel_device_info i915gm_info = { - static const struct intel_device_info i945g_info = { - GEN3_FEATURES, - PLATFORM(INTEL_I945G), -- .display.has_hotplug = 1, -- .display.cursor_needs_physical = 1, -- .display.has_overlay = 1, -- .display.overlay_needs_physical = 1, -+ .display = &i945g_display, - .hws_needs_physical = 1, - .unfenced_needs_alignment = 1, - }; -@@ -292,12 +344,8 @@ static const struct intel_device_info i945g_info = { - static const struct intel_device_info i945gm_info = { - GEN3_FEATURES, - PLATFORM(INTEL_I945GM), -+ .display = &i945gm_display, - .is_mobile = 1, -- .display.has_hotplug = 1, -- .display.cursor_needs_physical = 1, -- .display.has_overlay = 1, -- .display.overlay_needs_physical = 1, -- .display.supports_tv = 1, - .__runtime.fbc_mask = BIT(INTEL_FBC_A), - .hws_needs_physical = 1, - .unfenced_needs_alignment = 1, -@@ -306,16 +354,14 @@ static const struct intel_device_info i945gm_info = { - static const struct intel_device_info g33_info = { - GEN3_FEATURES, - PLATFORM(INTEL_G33), -- .display.has_hotplug = 1, -- .display.has_overlay = 1, -+ .display = &g33_display, - .dma_mask_size = 36, - }; - - static const struct intel_device_info pnv_g_info = { - GEN3_FEATURES, - PLATFORM(INTEL_PINEVIEW), -- .display.has_hotplug = 1, -- .display.has_overlay = 1, -+ .display = &g33_display, - .dma_mask_size = 36, - }; - -@@ -323,33 +369,54 @@ static const struct intel_device_info pnv_m_info = { - GEN3_FEATURES, - PLATFORM(INTEL_PINEVIEW), - .is_mobile = 1, -- .display.has_hotplug = 1, -- .display.has_overlay = 1, -+ .display = &g33_display, - .dma_mask_size = 36, - }; - -+#define GEN4_DISPLAY \ -+ .has_hotplug = 1, \ -+ .has_gmch = 1, \ -+ I9XX_PIPE_OFFSETS, \ -+ I9XX_CURSOR_OFFSETS, \ -+ I9XX_COLORS -+ -+static const struct intel_display_device_info i965g_display = { -+ GEN4_DISPLAY, -+ .has_overlay = 1, -+}; -+ -+static const struct intel_display_device_info i965gm_display = { -+ GEN4_DISPLAY, -+ .has_overlay = 1, -+ .supports_tv = 1, -+}; -+ -+static const struct intel_display_device_info g45_display = { -+ GEN4_DISPLAY, -+}; -+ -+static const struct intel_display_device_info gm45_display = { -+ GEN4_DISPLAY, -+ .supports_tv = 1, -+}; -+ - #define GEN4_FEATURES \ - GEN(4), \ - .__runtime.pipe_mask = BIT(PIPE_A) | BIT(PIPE_B), \ - .__runtime.cpu_transcoder_mask = BIT(TRANSCODER_A) | BIT(TRANSCODER_B), \ -- .display.has_hotplug = 1, \ -- .display.has_gmch = 1, \ - .gpu_reset_clobbers_display = true, \ - .__runtime.platform_engine_mask = BIT(RCS0), \ - .has_3d_pipeline = 1, \ - .has_snoop = true, \ - .has_coherent_ggtt = true, \ - .dma_mask_size = 36, \ -- I9XX_PIPE_OFFSETS, \ -- I9XX_CURSOR_OFFSETS, \ -- I9XX_COLORS, \ - GEN_DEFAULT_PAGE_SIZES, \ - GEN_DEFAULT_REGIONS - - static const struct intel_device_info i965g_info = { - GEN4_FEATURES, - PLATFORM(INTEL_I965G), -- .display.has_overlay = 1, -+ .display = &i965g_display, - .hws_needs_physical = 1, - .has_snoop = false, - }; -@@ -357,10 +424,9 @@ static const struct intel_device_info i965g_info = { - static const struct intel_device_info i965gm_info = { - GEN4_FEATURES, - PLATFORM(INTEL_I965GM), -+ .display = &i965gm_display, - .is_mobile = 1, - .__runtime.fbc_mask = BIT(INTEL_FBC_A), -- .display.has_overlay = 1, -- .display.supports_tv = 1, - .hws_needs_physical = 1, - .has_snoop = false, - }; -@@ -369,6 +435,7 @@ static const struct intel_device_info g45_info = { - GEN4_FEATURES, - PLATFORM(INTEL_G45), - .__runtime.platform_engine_mask = BIT(RCS0) | BIT(VCS0), -+ .display = &g45_display, - .gpu_reset_clobbers_display = false, - }; - -@@ -377,8 +444,8 @@ static const struct intel_device_info gm45_info = { - PLATFORM(INTEL_GM45), - .is_mobile = 1, - .__runtime.fbc_mask = BIT(INTEL_FBC_A), -- .display.supports_tv = 1, - .__runtime.platform_engine_mask = BIT(RCS0) | BIT(VCS0), -+ .display = &gm45_display, - .gpu_reset_clobbers_display = false, - }; - -@@ -386,7 +453,6 @@ static const struct intel_device_info gm45_info = { - GEN(5), \ - .__runtime.pipe_mask = BIT(PIPE_A) | BIT(PIPE_B), \ - .__runtime.cpu_transcoder_mask = BIT(TRANSCODER_A) | BIT(TRANSCODER_B), \ -- .display.has_hotplug = 1, \ - .__runtime.platform_engine_mask = BIT(RCS0) | BIT(VCS0), \ - .has_3d_pipeline = 1, \ - .has_snoop = true, \ -@@ -394,20 +460,33 @@ static const struct intel_device_info gm45_info = { - /* ilk does support rc6, but we do not implement [power] contexts */ \ - .has_rc6 = 0, \ - .dma_mask_size = 36, \ -- I9XX_PIPE_OFFSETS, \ -- I9XX_CURSOR_OFFSETS, \ -- ILK_COLORS, \ - GEN_DEFAULT_PAGE_SIZES, \ - GEN_DEFAULT_REGIONS - -+#define ILK_DISPLAY \ -+ .has_hotplug = 1, \ -+ I9XX_PIPE_OFFSETS, \ -+ I9XX_CURSOR_OFFSETS, \ -+ ILK_COLORS -+ -+static const struct intel_display_device_info ilk_d_display = { -+ ILK_DISPLAY, -+}; -+ - static const struct intel_device_info ilk_d_info = { - GEN5_FEATURES, - PLATFORM(INTEL_IRONLAKE), -+ .display = &ilk_d_display, - }; - -+static const struct intel_display_device_info ilk_m_display = { -+ ILK_DISPLAY, -+ }; -+ - static const struct intel_device_info ilk_m_info = { - GEN5_FEATURES, - PLATFORM(INTEL_IRONLAKE), -+ .display = &ilk_m_display, - .is_mobile = 1, - .has_rps = true, - .__runtime.fbc_mask = BIT(INTEL_FBC_A), -@@ -417,7 +496,6 @@ static const struct intel_device_info ilk_m_info = { - GEN(6), \ - .__runtime.pipe_mask = BIT(PIPE_A) | BIT(PIPE_B), \ - .__runtime.cpu_transcoder_mask = BIT(TRANSCODER_A) | BIT(TRANSCODER_B), \ -- .display.has_hotplug = 1, \ - .__runtime.fbc_mask = BIT(INTEL_FBC_A), \ - .__runtime.platform_engine_mask = BIT(RCS0) | BIT(VCS0) | BIT(BCS0), \ - .has_3d_pipeline = 1, \ -@@ -430,23 +508,29 @@ static const struct intel_device_info ilk_m_info = { - .dma_mask_size = 40, \ - .__runtime.ppgtt_type = INTEL_PPGTT_ALIASING, \ - .__runtime.ppgtt_size = 31, \ -- I9XX_PIPE_OFFSETS, \ -- I9XX_CURSOR_OFFSETS, \ -- ILK_COLORS, \ - GEN_DEFAULT_PAGE_SIZES, \ - GEN_DEFAULT_REGIONS - -+static const struct intel_display_device_info snb_display = { -+ .has_hotplug = 1, -+ I9XX_PIPE_OFFSETS, -+ I9XX_CURSOR_OFFSETS, -+ ILK_COLORS, -+}; -+ - #define SNB_D_PLATFORM \ - GEN6_FEATURES, \ - PLATFORM(INTEL_SANDYBRIDGE) - - static const struct intel_device_info snb_d_gt1_info = { - SNB_D_PLATFORM, -+ .display = &snb_display, - .gt = 1, - }; - - static const struct intel_device_info snb_d_gt2_info = { - SNB_D_PLATFORM, -+ .display = &snb_display, - .gt = 2, - }; - -@@ -458,11 +542,13 @@ static const struct intel_device_info snb_d_gt2_info = { - - static const struct intel_device_info snb_m_gt1_info = { - SNB_M_PLATFORM, -+ .display = &snb_display, - .gt = 1, - }; - - static const struct intel_device_info snb_m_gt2_info = { - SNB_M_PLATFORM, -+ .display = &snb_display, - .gt = 2, - }; - -@@ -470,7 +556,6 @@ static const struct intel_device_info snb_m_gt2_info = { - GEN(7), \ - .__runtime.pipe_mask = BIT(PIPE_A) | BIT(PIPE_B) | BIT(PIPE_C), \ - .__runtime.cpu_transcoder_mask = BIT(TRANSCODER_A) | BIT(TRANSCODER_B) | BIT(TRANSCODER_C), \ -- .display.has_hotplug = 1, \ - .__runtime.fbc_mask = BIT(INTEL_FBC_A), \ - .__runtime.platform_engine_mask = BIT(RCS0) | BIT(VCS0) | BIT(BCS0), \ - .has_3d_pipeline = 1, \ -@@ -483,9 +568,6 @@ static const struct intel_device_info snb_m_gt2_info = { - .dma_mask_size = 40, \ - .__runtime.ppgtt_type = INTEL_PPGTT_ALIASING, \ - .__runtime.ppgtt_size = 31, \ -- IVB_PIPE_OFFSETS, \ -- IVB_CURSOR_OFFSETS, \ -- IVB_COLORS, \ - GEN_DEFAULT_PAGE_SIZES, \ - GEN_DEFAULT_REGIONS - -@@ -494,13 +576,22 @@ static const struct intel_device_info snb_m_gt2_info = { - PLATFORM(INTEL_IVYBRIDGE), \ - .has_l3_dpf = 1 - -+static const struct intel_display_device_info ivb_display = { -+ .has_hotplug = 1, -+ IVB_PIPE_OFFSETS, -+ IVB_CURSOR_OFFSETS, -+ IVB_COLORS, -+}; -+ - static const struct intel_device_info ivb_d_gt1_info = { - IVB_D_PLATFORM, -+ .display = &ivb_display, - .gt = 1, - }; - - static const struct intel_device_info ivb_d_gt2_info = { - IVB_D_PLATFORM, -+ .display = &ivb_display, - .gt = 2, - }; - -@@ -512,11 +603,13 @@ static const struct intel_device_info ivb_d_gt2_info = { - - static const struct intel_device_info ivb_m_gt1_info = { - IVB_M_PLATFORM, -+ .display = &ivb_display, - .gt = 1, - }; - - static const struct intel_device_info ivb_m_gt2_info = { - IVB_M_PLATFORM, -+ .display = &ivb_display, - .gt = 2, - }; - -@@ -528,28 +621,32 @@ static const struct intel_device_info ivb_q_info = { - .has_l3_dpf = 1, - }; - -+static const struct intel_display_device_info vlv_display = { -+ .has_gmch = 1, -+ .has_hotplug = 1, -+ .mmio_offset = VLV_DISPLAY_BASE, -+ I9XX_PIPE_OFFSETS, -+ I9XX_CURSOR_OFFSETS, -+ I9XX_COLORS, -+}; -+ - static const struct intel_device_info vlv_info = { - PLATFORM(INTEL_VALLEYVIEW), - GEN(7), - .is_lp = 1, - .__runtime.pipe_mask = BIT(PIPE_A) | BIT(PIPE_B), - .__runtime.cpu_transcoder_mask = BIT(TRANSCODER_A) | BIT(TRANSCODER_B), -+ .display = &vlv_display, - .has_runtime_pm = 1, - .has_rc6 = 1, - .has_reset_engine = true, - .has_rps = true, -- .display.has_gmch = 1, -- .display.has_hotplug = 1, - .dma_mask_size = 40, - .__runtime.ppgtt_type = INTEL_PPGTT_ALIASING, - .__runtime.ppgtt_size = 31, - .has_snoop = true, - .has_coherent_ggtt = false, - .__runtime.platform_engine_mask = BIT(RCS0) | BIT(VCS0) | BIT(BCS0), -- .display.mmio_offset = VLV_DISPLAY_BASE, -- I9XX_PIPE_OFFSETS, -- I9XX_CURSOR_OFFSETS, -- I9XX_COLORS, - GEN_DEFAULT_PAGE_SIZES, - GEN_DEFAULT_REGIONS, - }; -@@ -559,11 +656,7 @@ static const struct intel_device_info vlv_info = { - .__runtime.platform_engine_mask = BIT(RCS0) | BIT(VCS0) | BIT(BCS0) | BIT(VECS0), \ - .__runtime.cpu_transcoder_mask = BIT(TRANSCODER_A) | BIT(TRANSCODER_B) | \ - BIT(TRANSCODER_C) | BIT(TRANSCODER_EDP), \ -- .display.has_ddi = 1, \ -- .display.has_fpga_dbg = 1, \ -- .display.has_dp_mst = 1, \ - .has_rc6p = 0 /* RC6p removed-by HSW */, \ -- HSW_PIPE_OFFSETS, \ - .has_runtime_pm = 1 - - #define HSW_PLATFORM \ -@@ -571,18 +664,31 @@ static const struct intel_device_info vlv_info = { - PLATFORM(INTEL_HASWELL), \ - .has_l3_dpf = 1 - -+static const struct intel_display_device_info hsw_display = { -+ .has_ddi = 1, -+ .has_dp_mst = 1, -+ .has_fpga_dbg = 1, -+ .has_hotplug = 1, -+ HSW_PIPE_OFFSETS, -+ IVB_CURSOR_OFFSETS, -+ IVB_COLORS, -+}; -+ - static const struct intel_device_info hsw_gt1_info = { - HSW_PLATFORM, -+ .display = &hsw_display, - .gt = 1, - }; - - static const struct intel_device_info hsw_gt2_info = { - HSW_PLATFORM, -+ .display = &hsw_display, - .gt = 2, - }; - - static const struct intel_device_info hsw_gt3_info = { - HSW_PLATFORM, -+ .display = &hsw_display, - .gt = 3, - }; - -@@ -595,22 +701,35 @@ static const struct intel_device_info hsw_gt3_info = { - .__runtime.ppgtt_size = 48, \ - .has_64bit_reloc = 1 - -+static const struct intel_display_device_info bdw_display = { -+ .has_ddi = 1, -+ .has_dp_mst = 1, -+ .has_fpga_dbg = 1, -+ .has_hotplug = 1, -+ HSW_PIPE_OFFSETS, -+ IVB_CURSOR_OFFSETS, -+ IVB_COLORS, -+}; -+ - #define BDW_PLATFORM \ - GEN8_FEATURES, \ - PLATFORM(INTEL_BROADWELL) - - static const struct intel_device_info bdw_gt1_info = { - BDW_PLATFORM, -+ .display = &bdw_display, - .gt = 1, - }; - - static const struct intel_device_info bdw_gt2_info = { - BDW_PLATFORM, -+ .display = &bdw_display, - .gt = 2, - }; - - static const struct intel_device_info bdw_rsvd_info = { - BDW_PLATFORM, -+ .display = &bdw_display, - .gt = 3, - /* According to the device ID those devices are GT3, they were - * previously treated as not GT3, keep it like that. -@@ -619,17 +738,27 @@ static const struct intel_device_info bdw_rsvd_info = { - - static const struct intel_device_info bdw_gt3_info = { - BDW_PLATFORM, -+ .display = &bdw_display, - .gt = 3, - .__runtime.platform_engine_mask = - BIT(RCS0) | BIT(VCS0) | BIT(BCS0) | BIT(VECS0) | BIT(VCS1), - }; - -+static const struct intel_display_device_info chv_display = { -+ .has_hotplug = 1, -+ .has_gmch = 1, -+ .mmio_offset = VLV_DISPLAY_BASE, -+ CHV_PIPE_OFFSETS, -+ CHV_CURSOR_OFFSETS, -+ CHV_COLORS, -+}; -+ - static const struct intel_device_info chv_info = { - PLATFORM(INTEL_CHERRYVIEW), - GEN(8), - .__runtime.pipe_mask = BIT(PIPE_A) | BIT(PIPE_B) | BIT(PIPE_C), - .__runtime.cpu_transcoder_mask = BIT(TRANSCODER_A) | BIT(TRANSCODER_B) | BIT(TRANSCODER_C), -- .display.has_hotplug = 1, -+ .display = &chv_display, - .is_lp = 1, - .__runtime.platform_engine_mask = BIT(RCS0) | BIT(VCS0) | BIT(BCS0) | BIT(VECS0), - .has_64bit_reloc = 1, -@@ -637,17 +766,12 @@ static const struct intel_device_info chv_info = { - .has_rc6 = 1, - .has_rps = true, - .has_logical_ring_contexts = 1, -- .display.has_gmch = 1, - .dma_mask_size = 39, - .__runtime.ppgtt_type = INTEL_PPGTT_FULL, - .__runtime.ppgtt_size = 32, - .has_reset_engine = 1, - .has_snoop = true, - .has_coherent_ggtt = false, -- .display.mmio_offset = VLV_DISPLAY_BASE, -- CHV_PIPE_OFFSETS, -- CHV_CURSOR_OFFSETS, -- CHV_COLORS, - GEN_DEFAULT_PAGE_SIZES, - GEN_DEFAULT_REGIONS, - }; -@@ -662,12 +786,22 @@ static const struct intel_device_info chv_info = { - GEN9_DEFAULT_PAGE_SIZES, \ - .__runtime.has_dmc = 1, \ - .has_gt_uc = 1, \ -- .__runtime.has_hdcp = 1, \ -- .display.has_ipc = 1, \ -- .display.has_psr = 1, \ -- .display.has_psr_hw_tracking = 1, \ -- .display.dbuf.size = 896 - 4, /* 4 blocks for bypass path allocation */ \ -- .display.dbuf.slice_mask = BIT(DBUF_S1) -+ .__runtime.has_hdcp = 1 -+ -+static const struct intel_display_device_info skl_display = { -+ .dbuf.size = 896 - 4, /* 4 blocks for bypass path allocation */ -+ .dbuf.slice_mask = BIT(DBUF_S1), -+ .has_ddi = 1, -+ .has_dp_mst = 1, -+ .has_fpga_dbg = 1, -+ .has_hotplug = 1, -+ .has_ipc = 1, -+ .has_psr = 1, -+ .has_psr_hw_tracking = 1, -+ HSW_PIPE_OFFSETS, -+ IVB_CURSOR_OFFSETS, -+ IVB_COLORS, -+}; - - #define SKL_PLATFORM \ - GEN9_FEATURES, \ -@@ -675,11 +809,13 @@ static const struct intel_device_info chv_info = { - - static const struct intel_device_info skl_gt1_info = { - SKL_PLATFORM, -+ .display = &skl_display, - .gt = 1, - }; - - static const struct intel_device_info skl_gt2_info = { - SKL_PLATFORM, -+ .display = &skl_display, - .gt = 2, - }; - -@@ -691,19 +827,19 @@ static const struct intel_device_info skl_gt2_info = { - - static const struct intel_device_info skl_gt3_info = { - SKL_GT3_PLUS_PLATFORM, -+ .display = &skl_display, - .gt = 3, - }; - - static const struct intel_device_info skl_gt4_info = { - SKL_GT3_PLUS_PLATFORM, -+ .display = &skl_display, - .gt = 4, - }; - - #define GEN9_LP_FEATURES \ - GEN(9), \ - .is_lp = 1, \ -- .display.dbuf.slice_mask = BIT(DBUF_S1), \ -- .display.has_hotplug = 1, \ - .__runtime.platform_engine_mask = BIT(RCS0) | BIT(VCS0) | BIT(BCS0) | BIT(VECS0), \ - .__runtime.pipe_mask = BIT(PIPE_A) | BIT(PIPE_B) | BIT(PIPE_C), \ - .__runtime.cpu_transcoder_mask = BIT(TRANSCODER_A) | BIT(TRANSCODER_B) | \ -@@ -711,17 +847,12 @@ static const struct intel_device_info skl_gt4_info = { - BIT(TRANSCODER_DSI_A) | BIT(TRANSCODER_DSI_C), \ - .has_3d_pipeline = 1, \ - .has_64bit_reloc = 1, \ -- .display.has_ddi = 1, \ -- .display.has_fpga_dbg = 1, \ - .__runtime.fbc_mask = BIT(INTEL_FBC_A), \ - .__runtime.has_hdcp = 1, \ -- .display.has_psr = 1, \ -- .display.has_psr_hw_tracking = 1, \ - .has_runtime_pm = 1, \ - .__runtime.has_dmc = 1, \ - .has_rc6 = 1, \ - .has_rps = true, \ -- .display.has_dp_mst = 1, \ - .has_logical_ring_contexts = 1, \ - .has_gt_uc = 1, \ - .dma_mask_size = 39, \ -@@ -730,25 +861,44 @@ static const struct intel_device_info skl_gt4_info = { - .has_reset_engine = 1, \ - .has_snoop = true, \ - .has_coherent_ggtt = false, \ -- .display.has_ipc = 1, \ -- HSW_PIPE_OFFSETS, \ -- IVB_CURSOR_OFFSETS, \ -- IVB_COLORS, \ - GEN9_DEFAULT_PAGE_SIZES, \ - GEN_DEFAULT_REGIONS - -+#define GEN9_LP_DISPLAY \ -+ .dbuf.slice_mask = BIT(DBUF_S1), \ -+ .has_dp_mst = 1, \ -+ .has_ddi = 1, \ -+ .has_fpga_dbg = 1, \ -+ .has_hotplug = 1, \ -+ .has_ipc = 1, \ -+ .has_psr = 1, \ -+ .has_psr_hw_tracking = 1, \ -+ HSW_PIPE_OFFSETS, \ -+ IVB_CURSOR_OFFSETS, \ -+ IVB_COLORS -+ -+static const struct intel_display_device_info bxt_display = { -+ GEN9_LP_DISPLAY, -+ .dbuf.size = 512 - 4, /* 4 blocks for bypass path allocation */ -+}; -+ - static const struct intel_device_info bxt_info = { - GEN9_LP_FEATURES, - PLATFORM(INTEL_BROXTON), -- .display.dbuf.size = 512 - 4, /* 4 blocks for bypass path allocation */ -+ .display = &bxt_display, -+}; -+ -+static const struct intel_display_device_info glk_display = { -+ GEN9_LP_DISPLAY, -+ .dbuf.size = 1024 - 4, /* 4 blocks for bypass path allocation */ -+ GLK_COLORS, - }; - - static const struct intel_device_info glk_info = { - GEN9_LP_FEATURES, - PLATFORM(INTEL_GEMINILAKE), - .__runtime.display.ip.ver = 10, -- .display.dbuf.size = 1024 - 4, /* 4 blocks for bypass path allocation */ -- GLK_COLORS, -+ .display = &glk_display, - }; - - #define KBL_PLATFORM \ -@@ -757,16 +907,19 @@ static const struct intel_device_info glk_info = { - - static const struct intel_device_info kbl_gt1_info = { - KBL_PLATFORM, -+ .display = &skl_display, - .gt = 1, - }; - - static const struct intel_device_info kbl_gt2_info = { - KBL_PLATFORM, -+ .display = &skl_display, - .gt = 2, - }; - - static const struct intel_device_info kbl_gt3_info = { - KBL_PLATFORM, -+ .display = &skl_display, - .gt = 3, - .__runtime.platform_engine_mask = - BIT(RCS0) | BIT(VCS0) | BIT(BCS0) | BIT(VECS0) | BIT(VCS1), -@@ -778,16 +931,19 @@ static const struct intel_device_info kbl_gt3_info = { - - static const struct intel_device_info cfl_gt1_info = { - CFL_PLATFORM, -+ .display = &skl_display, - .gt = 1, - }; - - static const struct intel_device_info cfl_gt2_info = { - CFL_PLATFORM, -+ .display = &skl_display, - .gt = 2, - }; - - static const struct intel_device_info cfl_gt3_info = { - CFL_PLATFORM, -+ .display = &skl_display, - .gt = 3, - .__runtime.platform_engine_mask = - BIT(RCS0) | BIT(VCS0) | BIT(BCS0) | BIT(VECS0) | BIT(VCS1), -@@ -799,11 +955,13 @@ static const struct intel_device_info cfl_gt3_info = { - - static const struct intel_device_info cml_gt1_info = { - CML_PLATFORM, -+ .display = &skl_display, - .gt = 1, - }; - - static const struct intel_device_info cml_gt2_info = { - CML_PLATFORM, -+ .display = &skl_display, - .gt = 2, - }; - -@@ -815,39 +973,51 @@ static const struct intel_device_info cml_gt2_info = { - #define GEN11_FEATURES \ - GEN9_FEATURES, \ - GEN11_DEFAULT_PAGE_SIZES, \ -- .display.abox_mask = BIT(0), \ - .__runtime.cpu_transcoder_mask = BIT(TRANSCODER_A) | BIT(TRANSCODER_B) | \ - BIT(TRANSCODER_C) | BIT(TRANSCODER_EDP) | \ - BIT(TRANSCODER_DSI_0) | BIT(TRANSCODER_DSI_1), \ -- .display.pipe_offsets = { \ -- [TRANSCODER_A] = PIPE_A_OFFSET, \ -- [TRANSCODER_B] = PIPE_B_OFFSET, \ -- [TRANSCODER_C] = PIPE_C_OFFSET, \ -- [TRANSCODER_EDP] = PIPE_EDP_OFFSET, \ -- [TRANSCODER_DSI_0] = PIPE_DSI0_OFFSET, \ -- [TRANSCODER_DSI_1] = PIPE_DSI1_OFFSET, \ -- }, \ -- .display.trans_offsets = { \ -- [TRANSCODER_A] = TRANSCODER_A_OFFSET, \ -- [TRANSCODER_B] = TRANSCODER_B_OFFSET, \ -- [TRANSCODER_C] = TRANSCODER_C_OFFSET, \ -- [TRANSCODER_EDP] = TRANSCODER_EDP_OFFSET, \ -- [TRANSCODER_DSI_0] = TRANSCODER_DSI0_OFFSET, \ -- [TRANSCODER_DSI_1] = TRANSCODER_DSI1_OFFSET, \ -- }, \ - GEN(11), \ -- ICL_COLORS, \ -- .display.dbuf.size = 2048, \ -- .display.dbuf.slice_mask = BIT(DBUF_S1) | BIT(DBUF_S2), \ - .__runtime.has_dsc = 1, \ - .has_coherent_ggtt = false, \ - .has_logical_ring_elsq = 1 - -+static const struct intel_display_device_info gen11_display = { -+ .abox_mask = BIT(0), -+ .dbuf.size = 2048, -+ .dbuf.slice_mask = BIT(DBUF_S1) | BIT(DBUF_S2), -+ .has_ddi = 1, -+ .has_dp_mst = 1, -+ .has_fpga_dbg = 1, -+ .has_hotplug = 1, -+ .has_ipc = 1, -+ .has_psr = 1, -+ .has_psr_hw_tracking = 1, -+ .pipe_offsets = { -+ [TRANSCODER_A] = PIPE_A_OFFSET, -+ [TRANSCODER_B] = PIPE_B_OFFSET, -+ [TRANSCODER_C] = PIPE_C_OFFSET, -+ [TRANSCODER_EDP] = PIPE_EDP_OFFSET, -+ [TRANSCODER_DSI_0] = PIPE_DSI0_OFFSET, -+ [TRANSCODER_DSI_1] = PIPE_DSI1_OFFSET, -+ }, -+ .trans_offsets = { -+ [TRANSCODER_A] = TRANSCODER_A_OFFSET, -+ [TRANSCODER_B] = TRANSCODER_B_OFFSET, -+ [TRANSCODER_C] = TRANSCODER_C_OFFSET, -+ [TRANSCODER_EDP] = TRANSCODER_EDP_OFFSET, -+ [TRANSCODER_DSI_0] = TRANSCODER_DSI0_OFFSET, -+ [TRANSCODER_DSI_1] = TRANSCODER_DSI1_OFFSET, -+ }, -+ IVB_CURSOR_OFFSETS, -+ ICL_COLORS, -+}; -+ - static const struct intel_device_info icl_info = { - GEN11_FEATURES, - PLATFORM(INTEL_ICELAKE), - .__runtime.platform_engine_mask = - BIT(RCS0) | BIT(BCS0) | BIT(VECS0) | BIT(VCS0) | BIT(VCS2), -+ .display = &gen11_display, - }; - - static const struct intel_device_info ehl_info = { -@@ -855,6 +1025,7 @@ static const struct intel_device_info ehl_info = { - PLATFORM(INTEL_ELKHARTLAKE), - .__runtime.platform_engine_mask = BIT(RCS0) | BIT(BCS0) | BIT(VCS0) | BIT(VECS0), - .__runtime.ppgtt_size = 36, -+ .display = &gen11_display, - }; - - static const struct intel_device_info jsl_info = { -@@ -862,17 +1033,32 @@ static const struct intel_device_info jsl_info = { - PLATFORM(INTEL_JASPERLAKE), - .__runtime.platform_engine_mask = BIT(RCS0) | BIT(BCS0) | BIT(VCS0) | BIT(VECS0), - .__runtime.ppgtt_size = 36, -+ .display = &gen11_display, - }; - - #define GEN12_FEATURES \ - GEN11_FEATURES, \ - GEN(12), \ -- .display.abox_mask = GENMASK(2, 1), \ - .__runtime.pipe_mask = BIT(PIPE_A) | BIT(PIPE_B) | BIT(PIPE_C) | BIT(PIPE_D), \ - .__runtime.cpu_transcoder_mask = BIT(TRANSCODER_A) | BIT(TRANSCODER_B) | \ - BIT(TRANSCODER_C) | BIT(TRANSCODER_D) | \ - BIT(TRANSCODER_DSI_0) | BIT(TRANSCODER_DSI_1), \ -- .display.pipe_offsets = { \ -+ .has_global_mocs = 1, \ -+ .has_pxp = 1 -+ -+#define XE_D_DISPLAY \ -+ .abox_mask = GENMASK(2, 1), \ -+ .dbuf.size = 2048, \ -+ .dbuf.slice_mask = BIT(DBUF_S1) | BIT(DBUF_S2), \ -+ .has_ddi = 1, \ -+ .has_dp_mst = 1, \ -+ .has_dsb = 1, \ -+ .has_fpga_dbg = 1, \ -+ .has_hotplug = 1, \ -+ .has_ipc = 1, \ -+ .has_psr = 1, \ -+ .has_psr_hw_tracking = 1, \ -+ .pipe_offsets = { \ - [TRANSCODER_A] = PIPE_A_OFFSET, \ - [TRANSCODER_B] = PIPE_B_OFFSET, \ - [TRANSCODER_C] = PIPE_C_OFFSET, \ -@@ -880,7 +1066,7 @@ static const struct intel_device_info jsl_info = { - [TRANSCODER_DSI_0] = PIPE_DSI0_OFFSET, \ - [TRANSCODER_DSI_1] = PIPE_DSI1_OFFSET, \ - }, \ -- .display.trans_offsets = { \ -+ .trans_offsets = { \ - [TRANSCODER_A] = TRANSCODER_A_OFFSET, \ - [TRANSCODER_B] = TRANSCODER_B_OFFSET, \ - [TRANSCODER_C] = TRANSCODER_C_OFFSET, \ -@@ -889,28 +1075,36 @@ static const struct intel_device_info jsl_info = { - [TRANSCODER_DSI_1] = TRANSCODER_DSI1_OFFSET, \ - }, \ - TGL_CURSOR_OFFSETS, \ -- .has_global_mocs = 1, \ -- .has_pxp = 1, \ -- .display.has_dsb = 1 -+ ICL_COLORS -+ -+static const struct intel_display_device_info tgl_display = { -+ XE_D_DISPLAY, -+}; - - static const struct intel_device_info tgl_info = { - GEN12_FEATURES, - PLATFORM(INTEL_TIGERLAKE), - .__runtime.platform_engine_mask = - BIT(RCS0) | BIT(BCS0) | BIT(VECS0) | BIT(VCS0) | BIT(VCS2), -+ .display = &tgl_display, -+}; -+ -+static const struct intel_display_device_info rkl_display = { -+ XE_D_DISPLAY, -+ .abox_mask = BIT(0), -+ .has_hti = 1, -+ .has_psr_hw_tracking = 0, - }; - - static const struct intel_device_info rkl_info = { - GEN12_FEATURES, - PLATFORM(INTEL_ROCKETLAKE), -- .display.abox_mask = BIT(0), - .__runtime.pipe_mask = BIT(PIPE_A) | BIT(PIPE_B) | BIT(PIPE_C), - .__runtime.cpu_transcoder_mask = BIT(TRANSCODER_A) | BIT(TRANSCODER_B) | - BIT(TRANSCODER_C), -- .display.has_hti = 1, -- .display.has_psr_hw_tracking = 0, - .__runtime.platform_engine_mask = - BIT(RCS0) | BIT(BCS0) | BIT(VECS0) | BIT(VCS0), -+ .display = &rkl_display, - }; - - #define DGFX_FEATURES \ -@@ -933,43 +1127,43 @@ static const struct intel_device_info dg1_info = { - BIT(VCS0) | BIT(VCS2), - /* Wa_16011227922 */ - .__runtime.ppgtt_size = 47, -+ .display = &tgl_display, -+}; -+ -+static const struct intel_display_device_info adl_s_display = { -+ XE_D_DISPLAY, -+ .has_hti = 1, -+ .has_psr_hw_tracking = 0, - }; - - static const struct intel_device_info adl_s_info = { - GEN12_FEATURES, - PLATFORM(INTEL_ALDERLAKE_S), - .__runtime.pipe_mask = BIT(PIPE_A) | BIT(PIPE_B) | BIT(PIPE_C) | BIT(PIPE_D), -- .display.has_hti = 1, -- .display.has_psr_hw_tracking = 0, - .__runtime.platform_engine_mask = - BIT(RCS0) | BIT(BCS0) | BIT(VECS0) | BIT(VCS0) | BIT(VCS2), - .dma_mask_size = 39, -+ .display = &adl_s_display, - }; - - #define XE_LPD_FEATURES \ -- .display.abox_mask = GENMASK(1, 0), \ -- .display.color = { \ -+ .abox_mask = GENMASK(1, 0), \ -+ .color = { \ - .degamma_lut_size = 129, .gamma_lut_size = 1024, \ - .degamma_lut_tests = DRM_COLOR_LUT_NON_DECREASING | \ -- DRM_COLOR_LUT_EQUAL_CHANNELS, \ -+ DRM_COLOR_LUT_EQUAL_CHANNELS, \ - }, \ -- .display.dbuf.size = 4096, \ -- .display.dbuf.slice_mask = BIT(DBUF_S1) | BIT(DBUF_S2) | BIT(DBUF_S3) | \ -+ .dbuf.size = 4096, \ -+ .dbuf.slice_mask = BIT(DBUF_S1) | BIT(DBUF_S2) | BIT(DBUF_S3) | \ - BIT(DBUF_S4), \ -- .display.has_ddi = 1, \ -- .__runtime.has_dmc = 1, \ -- .display.has_dp_mst = 1, \ -- .display.has_dsb = 1, \ -- .__runtime.has_dsc = 1, \ -- .__runtime.fbc_mask = BIT(INTEL_FBC_A), \ -- .display.has_fpga_dbg = 1, \ -- .__runtime.has_hdcp = 1, \ -- .display.has_hotplug = 1, \ -- .display.has_ipc = 1, \ -- .display.has_psr = 1, \ -- .__runtime.display.ip.ver = 13, \ -- .__runtime.pipe_mask = BIT(PIPE_A) | BIT(PIPE_B) | BIT(PIPE_C) | BIT(PIPE_D), \ -- .display.pipe_offsets = { \ -+ .has_ddi = 1, \ -+ .has_dp_mst = 1, \ -+ .has_dsb = 1, \ -+ .has_fpga_dbg = 1, \ -+ .has_hotplug = 1, \ -+ .has_ipc = 1, \ -+ .has_psr = 1, \ -+ .pipe_offsets = { \ - [TRANSCODER_A] = PIPE_A_OFFSET, \ - [TRANSCODER_B] = PIPE_B_OFFSET, \ - [TRANSCODER_C] = PIPE_C_OFFSET, \ -@@ -977,7 +1171,7 @@ static const struct intel_device_info adl_s_info = { - [TRANSCODER_DSI_0] = PIPE_DSI0_OFFSET, \ - [TRANSCODER_DSI_1] = PIPE_DSI1_OFFSET, \ - }, \ -- .display.trans_offsets = { \ -+ .trans_offsets = { \ - [TRANSCODER_A] = TRANSCODER_A_OFFSET, \ - [TRANSCODER_B] = TRANSCODER_B_OFFSET, \ - [TRANSCODER_C] = TRANSCODER_C_OFFSET, \ -@@ -987,18 +1181,31 @@ static const struct intel_device_info adl_s_info = { - }, \ - TGL_CURSOR_OFFSETS - -+#define XE_LPD_RUNTIME \ -+ .__runtime.has_dmc = 1, \ -+ .__runtime.has_dsc = 1, \ -+ .__runtime.fbc_mask = BIT(INTEL_FBC_A), \ -+ .__runtime.has_hdcp = 1, \ -+ .__runtime.display.ip.ver = 13, \ -+ .__runtime.pipe_mask = BIT(PIPE_A) | BIT(PIPE_B) | BIT(PIPE_C) | BIT(PIPE_D) -+ -+static const struct intel_display_device_info xe_lpd_display = { -+ XE_LPD_FEATURES, -+ .has_cdclk_crawl = 1, -+ .has_psr_hw_tracking = 0, -+}; -+ - static const struct intel_device_info adl_p_info = { - GEN12_FEATURES, -- XE_LPD_FEATURES, -+ XE_LPD_RUNTIME, - PLATFORM(INTEL_ALDERLAKE_P), - .__runtime.cpu_transcoder_mask = BIT(TRANSCODER_A) | BIT(TRANSCODER_B) | - BIT(TRANSCODER_C) | BIT(TRANSCODER_D) | - BIT(TRANSCODER_DSI_0) | BIT(TRANSCODER_DSI_1), -- .display.has_cdclk_crawl = 1, -- .display.has_psr_hw_tracking = 0, - .__runtime.platform_engine_mask = - BIT(RCS0) | BIT(BCS0) | BIT(VECS0) | BIT(VCS0) | BIT(VCS2), - .__runtime.ppgtt_size = 48, -+ .display = &xe_lpd_display, - .dma_mask_size = 39, - }; - -@@ -1067,18 +1274,23 @@ static const struct intel_device_info xehpsdv_info = { - .has_guc_deprivilege = 1, \ - .has_heci_pxp = 1, \ - .has_media_ratio_mode = 1, \ -- .display.has_cdclk_squash = 1, \ - .__runtime.platform_engine_mask = \ - BIT(RCS0) | BIT(BCS0) | \ - BIT(VECS0) | BIT(VECS1) | \ - BIT(VCS0) | BIT(VCS2) | \ - BIT(CCS0) | BIT(CCS1) | BIT(CCS2) | BIT(CCS3) - -+static const struct intel_display_device_info xe_hpd_display = { -+ XE_LPD_FEATURES, -+ .has_cdclk_squash = 1, -+}; -+ - static const struct intel_device_info dg2_info = { - DG2_FEATURES, -- XE_LPD_FEATURES, -+ XE_LPD_RUNTIME, - .__runtime.cpu_transcoder_mask = BIT(TRANSCODER_A) | BIT(TRANSCODER_B) | - BIT(TRANSCODER_C) | BIT(TRANSCODER_D), -+ .display = &xe_hpd_display, - }; - - static const struct intel_device_info ats_m_info = { -@@ -1114,11 +1326,9 @@ static const struct intel_device_info pvc_info = { - .require_force_probe = 1, - }; - --#define XE_LPDP_FEATURES \ -- XE_LPD_FEATURES, \ -+#define XE_LPDP_RUNTIME \ -+ XE_LPD_RUNTIME, \ - .__runtime.display.ip.ver = 14, \ -- .display.has_cdclk_crawl = 1, \ -- .display.has_cdclk_squash = 1, \ - .__runtime.fbc_mask = BIT(INTEL_FBC_A) | BIT(INTEL_FBC_B) - - static const struct intel_gt_definition xelpmp_extra_gt[] = { -@@ -1131,9 +1341,15 @@ static const struct intel_gt_definition xelpmp_extra_gt[] = { - {} - }; - -+static const struct intel_display_device_info xe_lpdp_display = { -+ XE_LPD_FEATURES, -+ .has_cdclk_crawl = 1, -+ .has_cdclk_squash = 1, -+}; -+ - static const struct intel_device_info mtl_info = { - XE_HP_FEATURES, -- XE_LPDP_FEATURES, -+ XE_LPDP_RUNTIME, - .__runtime.cpu_transcoder_mask = BIT(TRANSCODER_A) | BIT(TRANSCODER_B) | - BIT(TRANSCODER_C) | BIT(TRANSCODER_D), - /* -@@ -1144,6 +1360,7 @@ static const struct intel_device_info mtl_info = { - .__runtime.graphics.ip.rel = 70, - .__runtime.media.ip.ver = 13, - PLATFORM(INTEL_METEORLAKE), -+ .display = &xe_lpdp_display, - .extra_gt_list = xelpmp_extra_gt, - .has_flat_ccs = 0, - .has_gmd_id = 1, -diff --git a/drivers/gpu/drm/i915/intel_device_info.c b/drivers/gpu/drm/i915/intel_device_info.c -index 4e23be2995bf6..e8836b9900589 100644 ---- a/drivers/gpu/drm/i915/intel_device_info.c -+++ b/drivers/gpu/drm/i915/intel_device_info.c -@@ -138,7 +138,7 @@ void intel_device_info_print(const struct intel_device_info *info, - - drm_printf(p, "has_pooled_eu: %s\n", str_yes_no(runtime->has_pooled_eu)); - --#define PRINT_FLAG(name) drm_printf(p, "%s: %s\n", #name, str_yes_no(info->display.name)) -+#define PRINT_FLAG(name) drm_printf(p, "%s: %s\n", #name, str_yes_no(info->display->name)) - DEV_INFO_DISPLAY_FOR_EACH_FLAG(PRINT_FLAG); - #undef PRINT_FLAG - -@@ -388,6 +388,8 @@ mkwrite_device_info(struct drm_i915_private *i915) - return (struct intel_device_info *)INTEL_INFO(i915); - } - -+static const struct intel_display_device_info no_display = {}; -+ - /** - * intel_device_info_runtime_init - initialize runtime info - * @dev_priv: the i915 device -@@ -538,7 +540,7 @@ void intel_device_info_runtime_init(struct drm_i915_private *dev_priv) - if (!HAS_DISPLAY(dev_priv)) { - dev_priv->drm.driver_features &= ~(DRIVER_MODESET | - DRIVER_ATOMIC); -- memset(&info->display, 0, sizeof(info->display)); -+ info->display = &no_display; - - runtime->cpu_transcoder_mask = 0; - memset(runtime->num_sprites, 0, sizeof(runtime->num_sprites)); -diff --git a/drivers/gpu/drm/i915/intel_device_info.h b/drivers/gpu/drm/i915/intel_device_info.h -index c14bc3f5d0fa1..f838ae7191644 100644 ---- a/drivers/gpu/drm/i915/intel_device_info.h -+++ b/drivers/gpu/drm/i915/intel_device_info.h -@@ -257,7 +257,7 @@ struct intel_device_info { - DEV_INFO_FOR_EACH_FLAG(DEFINE_FLAG); - #undef DEFINE_FLAG - -- struct intel_display_device_info display; -+ const struct intel_display_device_info *display; - - /* - * Initial runtime info. Do not access outside of i915_driver_create(). --- -2.39.2 - diff --git a/queue-6.4/drm-i915-display-make-display-responsible-for-probin.patch b/queue-6.4/drm-i915-display-make-display-responsible-for-probin.patch deleted file mode 100644 index 0f8fec658c3..00000000000 --- a/queue-6.4/drm-i915-display-make-display-responsible-for-probin.patch +++ /dev/null @@ -1,2015 +0,0 @@ -From 216260614406dac10435b23080fec329cc326d46 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Tue, 23 May 2023 12:56:07 -0700 -Subject: drm/i915/display: Make display responsible for probing its own IP - -From: Matt Roper - -[ Upstream commit 69d439818fe501e8c9e50d963a53cb596e36f9f7 ] - -Rather than selecting the display IP and feature flags at the same time -the general PCI probing happens, move this step into the display code -itself so that it can be more easily re-used outside of i915 (i.e., by -the Xe driver). - -v2: - - Make intel_display_device_probe() always return a non-NULL pointer - and simplify copying of runtime_defaults. (Andrzej) -v3: - - Redefine INTEL_VGA_DEVICE/INTEL_QUANTA_DEVICE to eliminate a cast and - an include of linux/mod_devicetable.h. (Jani) - - Keep explicit memcpy for runtime defaults. (Jani) - -Cc: Andrzej Hajda -Signed-off-by: Matt Roper -Reviewed-by: Andrzej Hajda -Acked-by: Jani Nikula -Link: https://patchwork.freedesktop.org/patch/msgid/20230523195609.73627-5-matthew.d.roper@intel.com -Stable-dep-of: 19db2062094c ("drm/i915: No 10bit gamma on desktop gen3 parts") -Signed-off-by: Sasha Levin ---- - drivers/gpu/drm/i915/Makefile | 2 + - .../drm/i915/display/intel_display_device.c | 718 ++++++++++++++++++ - .../drm/i915/display/intel_display_device.h | 3 + - drivers/gpu/drm/i915/i915_pci.c | 665 ---------------- - drivers/gpu/drm/i915/i915_reg.h | 33 - - drivers/gpu/drm/i915/intel_device_info.c | 10 +- - 6 files changed, 729 insertions(+), 702 deletions(-) - create mode 100644 drivers/gpu/drm/i915/display/intel_display_device.c - -diff --git a/drivers/gpu/drm/i915/Makefile b/drivers/gpu/drm/i915/Makefile -index 97b0d4ae221ac..b158f10b4269a 100644 ---- a/drivers/gpu/drm/i915/Makefile -+++ b/drivers/gpu/drm/i915/Makefile -@@ -25,6 +25,7 @@ subdir-ccflags-$(CONFIG_DRM_I915_WERROR) += -Werror - - # Fine grained warnings disable - CFLAGS_i915_pci.o = $(call cc-disable-warning, override-init) -+CFLAGS_display/intel_display_device.o = $(call cc-disable-warning, override-init) - CFLAGS_display/intel_fbdev.o = $(call cc-disable-warning, override-init) - - subdir-ccflags-y += -I$(srctree)/$(src) -@@ -300,6 +301,7 @@ i915-y += \ - display/intel_crt.o \ - display/intel_ddi.o \ - display/intel_ddi_buf_trans.o \ -+ display/intel_display_device.o \ - display/intel_display_trace.o \ - display/intel_dkl_phy.o \ - display/intel_dp.o \ -diff --git a/drivers/gpu/drm/i915/display/intel_display_device.c b/drivers/gpu/drm/i915/display/intel_display_device.c -new file mode 100644 -index 0000000000000..3e2f4cd0b9f56 ---- /dev/null -+++ b/drivers/gpu/drm/i915/display/intel_display_device.c -@@ -0,0 +1,718 @@ -+// SPDX-License-Identifier: MIT -+/* -+ * Copyright © 2023 Intel Corporation -+ */ -+ -+#include -+#include -+ -+#include "intel_display_device.h" -+#include "intel_display_power.h" -+#include "intel_display_reg_defs.h" -+#include "intel_fbc.h" -+ -+static const struct intel_display_device_info no_display = {}; -+ -+#define PIPE_A_OFFSET 0x70000 -+#define PIPE_B_OFFSET 0x71000 -+#define PIPE_C_OFFSET 0x72000 -+#define PIPE_D_OFFSET 0x73000 -+#define CHV_PIPE_C_OFFSET 0x74000 -+/* -+ * There's actually no pipe EDP. Some pipe registers have -+ * simply shifted from the pipe to the transcoder, while -+ * keeping their original offset. Thus we need PIPE_EDP_OFFSET -+ * to access such registers in transcoder EDP. -+ */ -+#define PIPE_EDP_OFFSET 0x7f000 -+ -+/* ICL DSI 0 and 1 */ -+#define PIPE_DSI0_OFFSET 0x7b000 -+#define PIPE_DSI1_OFFSET 0x7b800 -+ -+#define TRANSCODER_A_OFFSET 0x60000 -+#define TRANSCODER_B_OFFSET 0x61000 -+#define TRANSCODER_C_OFFSET 0x62000 -+#define CHV_TRANSCODER_C_OFFSET 0x63000 -+#define TRANSCODER_D_OFFSET 0x63000 -+#define TRANSCODER_EDP_OFFSET 0x6f000 -+#define TRANSCODER_DSI0_OFFSET 0x6b000 -+#define TRANSCODER_DSI1_OFFSET 0x6b800 -+ -+#define CURSOR_A_OFFSET 0x70080 -+#define CURSOR_B_OFFSET 0x700c0 -+#define CHV_CURSOR_C_OFFSET 0x700e0 -+#define IVB_CURSOR_B_OFFSET 0x71080 -+#define IVB_CURSOR_C_OFFSET 0x72080 -+#define TGL_CURSOR_D_OFFSET 0x73080 -+ -+#define I845_PIPE_OFFSETS \ -+ .pipe_offsets = { \ -+ [TRANSCODER_A] = PIPE_A_OFFSET, \ -+ }, \ -+ .trans_offsets = { \ -+ [TRANSCODER_A] = TRANSCODER_A_OFFSET, \ -+ } -+ -+#define I9XX_PIPE_OFFSETS \ -+ .pipe_offsets = { \ -+ [TRANSCODER_A] = PIPE_A_OFFSET, \ -+ [TRANSCODER_B] = PIPE_B_OFFSET, \ -+ }, \ -+ .trans_offsets = { \ -+ [TRANSCODER_A] = TRANSCODER_A_OFFSET, \ -+ [TRANSCODER_B] = TRANSCODER_B_OFFSET, \ -+ } -+ -+#define IVB_PIPE_OFFSETS \ -+ .pipe_offsets = { \ -+ [TRANSCODER_A] = PIPE_A_OFFSET, \ -+ [TRANSCODER_B] = PIPE_B_OFFSET, \ -+ [TRANSCODER_C] = PIPE_C_OFFSET, \ -+ }, \ -+ .trans_offsets = { \ -+ [TRANSCODER_A] = TRANSCODER_A_OFFSET, \ -+ [TRANSCODER_B] = TRANSCODER_B_OFFSET, \ -+ [TRANSCODER_C] = TRANSCODER_C_OFFSET, \ -+ } -+ -+#define HSW_PIPE_OFFSETS \ -+ .pipe_offsets = { \ -+ [TRANSCODER_A] = PIPE_A_OFFSET, \ -+ [TRANSCODER_B] = PIPE_B_OFFSET, \ -+ [TRANSCODER_C] = PIPE_C_OFFSET, \ -+ [TRANSCODER_EDP] = PIPE_EDP_OFFSET, \ -+ }, \ -+ .trans_offsets = { \ -+ [TRANSCODER_A] = TRANSCODER_A_OFFSET, \ -+ [TRANSCODER_B] = TRANSCODER_B_OFFSET, \ -+ [TRANSCODER_C] = TRANSCODER_C_OFFSET, \ -+ [TRANSCODER_EDP] = TRANSCODER_EDP_OFFSET, \ -+ } -+ -+#define CHV_PIPE_OFFSETS \ -+ .pipe_offsets = { \ -+ [TRANSCODER_A] = PIPE_A_OFFSET, \ -+ [TRANSCODER_B] = PIPE_B_OFFSET, \ -+ [TRANSCODER_C] = CHV_PIPE_C_OFFSET, \ -+ }, \ -+ .trans_offsets = { \ -+ [TRANSCODER_A] = TRANSCODER_A_OFFSET, \ -+ [TRANSCODER_B] = TRANSCODER_B_OFFSET, \ -+ [TRANSCODER_C] = CHV_TRANSCODER_C_OFFSET, \ -+ } -+ -+#define I845_CURSOR_OFFSETS \ -+ .cursor_offsets = { \ -+ [PIPE_A] = CURSOR_A_OFFSET, \ -+ } -+ -+#define I9XX_CURSOR_OFFSETS \ -+ .cursor_offsets = { \ -+ [PIPE_A] = CURSOR_A_OFFSET, \ -+ [PIPE_B] = CURSOR_B_OFFSET, \ -+ } -+ -+#define CHV_CURSOR_OFFSETS \ -+ .cursor_offsets = { \ -+ [PIPE_A] = CURSOR_A_OFFSET, \ -+ [PIPE_B] = CURSOR_B_OFFSET, \ -+ [PIPE_C] = CHV_CURSOR_C_OFFSET, \ -+ } -+ -+#define IVB_CURSOR_OFFSETS \ -+ .cursor_offsets = { \ -+ [PIPE_A] = CURSOR_A_OFFSET, \ -+ [PIPE_B] = IVB_CURSOR_B_OFFSET, \ -+ [PIPE_C] = IVB_CURSOR_C_OFFSET, \ -+ } -+ -+#define TGL_CURSOR_OFFSETS \ -+ .cursor_offsets = { \ -+ [PIPE_A] = CURSOR_A_OFFSET, \ -+ [PIPE_B] = IVB_CURSOR_B_OFFSET, \ -+ [PIPE_C] = IVB_CURSOR_C_OFFSET, \ -+ [PIPE_D] = TGL_CURSOR_D_OFFSET, \ -+ } -+ -+#define I845_COLORS \ -+ .color = { .gamma_lut_size = 256 } -+#define I9XX_COLORS \ -+ .color = { .gamma_lut_size = 129, \ -+ .gamma_lut_tests = DRM_COLOR_LUT_NON_DECREASING, \ -+ } -+#define ILK_COLORS \ -+ .color = { .gamma_lut_size = 1024 } -+#define IVB_COLORS \ -+ .color = { .degamma_lut_size = 1024, .gamma_lut_size = 1024 } -+#define CHV_COLORS \ -+ .color = { \ -+ .degamma_lut_size = 65, .gamma_lut_size = 257, \ -+ .degamma_lut_tests = DRM_COLOR_LUT_NON_DECREASING, \ -+ .gamma_lut_tests = DRM_COLOR_LUT_NON_DECREASING, \ -+ } -+#define GLK_COLORS \ -+ .color = { \ -+ .degamma_lut_size = 33, .gamma_lut_size = 1024, \ -+ .degamma_lut_tests = DRM_COLOR_LUT_NON_DECREASING | \ -+ DRM_COLOR_LUT_EQUAL_CHANNELS, \ -+ } -+#define ICL_COLORS \ -+ .color = { \ -+ .degamma_lut_size = 33, .gamma_lut_size = 262145, \ -+ .degamma_lut_tests = DRM_COLOR_LUT_NON_DECREASING | \ -+ DRM_COLOR_LUT_EQUAL_CHANNELS, \ -+ .gamma_lut_tests = DRM_COLOR_LUT_NON_DECREASING, \ -+ } -+ -+#define I830_DISPLAY \ -+ .has_overlay = 1, \ -+ .cursor_needs_physical = 1, \ -+ .overlay_needs_physical = 1, \ -+ .has_gmch = 1, \ -+ I9XX_PIPE_OFFSETS, \ -+ I9XX_CURSOR_OFFSETS, \ -+ I9XX_COLORS, \ -+ \ -+ .__runtime_defaults.ip.ver = 2, \ -+ .__runtime_defaults.pipe_mask = BIT(PIPE_A) | BIT(PIPE_B), \ -+ .__runtime_defaults.cpu_transcoder_mask = \ -+ BIT(TRANSCODER_A) | BIT(TRANSCODER_B) -+ -+static const struct intel_display_device_info i830_display = { -+ I830_DISPLAY, -+}; -+ -+#define I845_DISPLAY \ -+ .has_overlay = 1, \ -+ .overlay_needs_physical = 1, \ -+ .has_gmch = 1, \ -+ I845_PIPE_OFFSETS, \ -+ I845_CURSOR_OFFSETS, \ -+ I845_COLORS, \ -+ \ -+ .__runtime_defaults.ip.ver = 2, \ -+ .__runtime_defaults.pipe_mask = BIT(PIPE_A), \ -+ .__runtime_defaults.cpu_transcoder_mask = BIT(TRANSCODER_A) -+ -+static const struct intel_display_device_info i845_display = { -+ I845_DISPLAY, -+}; -+ -+static const struct intel_display_device_info i85x_display = { -+ I830_DISPLAY, -+ -+ .__runtime_defaults.fbc_mask = BIT(INTEL_FBC_A), -+}; -+ -+static const struct intel_display_device_info i865g_display = { -+ I845_DISPLAY, -+ -+ .__runtime_defaults.fbc_mask = BIT(INTEL_FBC_A), -+}; -+ -+#define GEN3_DISPLAY \ -+ .has_gmch = 1, \ -+ .has_overlay = 1, \ -+ I9XX_PIPE_OFFSETS, \ -+ I9XX_CURSOR_OFFSETS, \ -+ I9XX_COLORS, \ -+ \ -+ .__runtime_defaults.ip.ver = 3, \ -+ .__runtime_defaults.pipe_mask = BIT(PIPE_A) | BIT(PIPE_B), \ -+ .__runtime_defaults.cpu_transcoder_mask = \ -+ BIT(TRANSCODER_A) | BIT(TRANSCODER_B) -+ -+static const struct intel_display_device_info i915g_display = { -+ GEN3_DISPLAY, -+ .cursor_needs_physical = 1, -+ .overlay_needs_physical = 1, -+}; -+ -+static const struct intel_display_device_info i915gm_display = { -+ GEN3_DISPLAY, -+ .cursor_needs_physical = 1, -+ .overlay_needs_physical = 1, -+ .supports_tv = 1, -+ -+ .__runtime_defaults.fbc_mask = BIT(INTEL_FBC_A), -+}; -+ -+static const struct intel_display_device_info i945g_display = { -+ GEN3_DISPLAY, -+ .has_hotplug = 1, -+ .cursor_needs_physical = 1, -+ .overlay_needs_physical = 1, -+}; -+ -+static const struct intel_display_device_info i945gm_display = { -+ GEN3_DISPLAY, -+ .has_hotplug = 1, -+ .cursor_needs_physical = 1, -+ .overlay_needs_physical = 1, -+ .supports_tv = 1, -+ -+ .__runtime_defaults.fbc_mask = BIT(INTEL_FBC_A), -+}; -+ -+static const struct intel_display_device_info g33_display = { -+ GEN3_DISPLAY, -+ .has_hotplug = 1, -+}; -+ -+#define GEN4_DISPLAY \ -+ .has_hotplug = 1, \ -+ .has_gmch = 1, \ -+ I9XX_PIPE_OFFSETS, \ -+ I9XX_CURSOR_OFFSETS, \ -+ I9XX_COLORS, \ -+ \ -+ .__runtime_defaults.ip.ver = 4, \ -+ .__runtime_defaults.pipe_mask = BIT(PIPE_A) | BIT(PIPE_B), \ -+ .__runtime_defaults.cpu_transcoder_mask = \ -+ BIT(TRANSCODER_A) | BIT(TRANSCODER_B) -+ -+static const struct intel_display_device_info i965g_display = { -+ GEN4_DISPLAY, -+ .has_overlay = 1, -+}; -+ -+static const struct intel_display_device_info i965gm_display = { -+ GEN4_DISPLAY, -+ .has_overlay = 1, -+ .supports_tv = 1, -+ -+ .__runtime_defaults.fbc_mask = BIT(INTEL_FBC_A), -+}; -+ -+static const struct intel_display_device_info g45_display = { -+ GEN4_DISPLAY, -+}; -+ -+static const struct intel_display_device_info gm45_display = { -+ GEN4_DISPLAY, -+ .supports_tv = 1, -+ -+ .__runtime_defaults.fbc_mask = BIT(INTEL_FBC_A), -+}; -+ -+#define ILK_DISPLAY \ -+ .has_hotplug = 1, \ -+ I9XX_PIPE_OFFSETS, \ -+ I9XX_CURSOR_OFFSETS, \ -+ ILK_COLORS, \ -+ \ -+ .__runtime_defaults.ip.ver = 5, \ -+ .__runtime_defaults.pipe_mask = BIT(PIPE_A) | BIT(PIPE_B), \ -+ .__runtime_defaults.cpu_transcoder_mask = \ -+ BIT(TRANSCODER_A) | BIT(TRANSCODER_B) -+ -+static const struct intel_display_device_info ilk_d_display = { -+ ILK_DISPLAY, -+}; -+ -+static const struct intel_display_device_info ilk_m_display = { -+ ILK_DISPLAY, -+ -+ .__runtime_defaults.fbc_mask = BIT(INTEL_FBC_A), -+}; -+ -+static const struct intel_display_device_info snb_display = { -+ .has_hotplug = 1, -+ I9XX_PIPE_OFFSETS, -+ I9XX_CURSOR_OFFSETS, -+ ILK_COLORS, -+ -+ .__runtime_defaults.ip.ver = 6, -+ .__runtime_defaults.pipe_mask = BIT(PIPE_A) | BIT(PIPE_B), -+ .__runtime_defaults.cpu_transcoder_mask = -+ BIT(TRANSCODER_A) | BIT(TRANSCODER_B), -+ .__runtime_defaults.fbc_mask = BIT(INTEL_FBC_A), -+}; -+ -+static const struct intel_display_device_info ivb_display = { -+ .has_hotplug = 1, -+ IVB_PIPE_OFFSETS, -+ IVB_CURSOR_OFFSETS, -+ IVB_COLORS, -+ -+ .__runtime_defaults.ip.ver = 7, -+ .__runtime_defaults.pipe_mask = BIT(PIPE_A) | BIT(PIPE_B) | BIT(PIPE_C), -+ .__runtime_defaults.cpu_transcoder_mask = -+ BIT(TRANSCODER_A) | BIT(TRANSCODER_B) | BIT(TRANSCODER_C), -+ .__runtime_defaults.fbc_mask = BIT(INTEL_FBC_A), -+}; -+ -+static const struct intel_display_device_info vlv_display = { -+ .has_gmch = 1, -+ .has_hotplug = 1, -+ .mmio_offset = VLV_DISPLAY_BASE, -+ I9XX_PIPE_OFFSETS, -+ I9XX_CURSOR_OFFSETS, -+ I9XX_COLORS, -+ -+ .__runtime_defaults.ip.ver = 7, -+ .__runtime_defaults.pipe_mask = BIT(PIPE_A) | BIT(PIPE_B), -+ .__runtime_defaults.cpu_transcoder_mask = -+ BIT(TRANSCODER_A) | BIT(TRANSCODER_B), -+}; -+ -+static const struct intel_display_device_info hsw_display = { -+ .has_ddi = 1, -+ .has_dp_mst = 1, -+ .has_fpga_dbg = 1, -+ .has_hotplug = 1, -+ HSW_PIPE_OFFSETS, -+ IVB_CURSOR_OFFSETS, -+ IVB_COLORS, -+ -+ .__runtime_defaults.ip.ver = 7, -+ .__runtime_defaults.pipe_mask = BIT(PIPE_A) | BIT(PIPE_B) | BIT(PIPE_C), -+ .__runtime_defaults.cpu_transcoder_mask = -+ BIT(TRANSCODER_A) | BIT(TRANSCODER_B) | -+ BIT(TRANSCODER_C) | BIT(TRANSCODER_EDP), -+ .__runtime_defaults.fbc_mask = BIT(INTEL_FBC_A), -+}; -+ -+static const struct intel_display_device_info bdw_display = { -+ .has_ddi = 1, -+ .has_dp_mst = 1, -+ .has_fpga_dbg = 1, -+ .has_hotplug = 1, -+ HSW_PIPE_OFFSETS, -+ IVB_CURSOR_OFFSETS, -+ IVB_COLORS, -+ -+ .__runtime_defaults.ip.ver = 8, -+ .__runtime_defaults.pipe_mask = BIT(PIPE_A) | BIT(PIPE_B) | BIT(PIPE_C), -+ .__runtime_defaults.cpu_transcoder_mask = -+ BIT(TRANSCODER_A) | BIT(TRANSCODER_B) | -+ BIT(TRANSCODER_C) | BIT(TRANSCODER_EDP), -+ .__runtime_defaults.fbc_mask = BIT(INTEL_FBC_A), -+}; -+ -+static const struct intel_display_device_info chv_display = { -+ .has_hotplug = 1, -+ .has_gmch = 1, -+ .mmio_offset = VLV_DISPLAY_BASE, -+ CHV_PIPE_OFFSETS, -+ CHV_CURSOR_OFFSETS, -+ CHV_COLORS, -+ -+ .__runtime_defaults.ip.ver = 8, -+ .__runtime_defaults.pipe_mask = BIT(PIPE_A) | BIT(PIPE_B) | BIT(PIPE_C), -+ .__runtime_defaults.cpu_transcoder_mask = -+ BIT(TRANSCODER_A) | BIT(TRANSCODER_B) | BIT(TRANSCODER_C), -+}; -+ -+static const struct intel_display_device_info skl_display = { -+ .dbuf.size = 896 - 4, /* 4 blocks for bypass path allocation */ -+ .dbuf.slice_mask = BIT(DBUF_S1), -+ .has_ddi = 1, -+ .has_dp_mst = 1, -+ .has_fpga_dbg = 1, -+ .has_hotplug = 1, -+ .has_ipc = 1, -+ .has_psr = 1, -+ .has_psr_hw_tracking = 1, -+ HSW_PIPE_OFFSETS, -+ IVB_CURSOR_OFFSETS, -+ IVB_COLORS, -+ -+ .__runtime_defaults.ip.ver = 9, -+ .__runtime_defaults.has_dmc = 1, -+ .__runtime_defaults.has_hdcp = 1, -+ .__runtime_defaults.pipe_mask = BIT(PIPE_A) | BIT(PIPE_B) | BIT(PIPE_C), -+ .__runtime_defaults.cpu_transcoder_mask = -+ BIT(TRANSCODER_A) | BIT(TRANSCODER_B) | -+ BIT(TRANSCODER_C) | BIT(TRANSCODER_EDP), -+ .__runtime_defaults.fbc_mask = BIT(INTEL_FBC_A), -+}; -+ -+#define GEN9_LP_DISPLAY \ -+ .dbuf.slice_mask = BIT(DBUF_S1), \ -+ .has_dp_mst = 1, \ -+ .has_ddi = 1, \ -+ .has_fpga_dbg = 1, \ -+ .has_hotplug = 1, \ -+ .has_ipc = 1, \ -+ .has_psr = 1, \ -+ .has_psr_hw_tracking = 1, \ -+ HSW_PIPE_OFFSETS, \ -+ IVB_CURSOR_OFFSETS, \ -+ IVB_COLORS, \ -+ \ -+ .__runtime_defaults.has_dmc = 1, \ -+ .__runtime_defaults.has_hdcp = 1, \ -+ .__runtime_defaults.fbc_mask = BIT(INTEL_FBC_A), \ -+ .__runtime_defaults.pipe_mask = BIT(PIPE_A) | BIT(PIPE_B) | BIT(PIPE_C), \ -+ .__runtime_defaults.cpu_transcoder_mask = \ -+ BIT(TRANSCODER_A) | BIT(TRANSCODER_B) | \ -+ BIT(TRANSCODER_C) | BIT(TRANSCODER_EDP) | \ -+ BIT(TRANSCODER_DSI_A) | BIT(TRANSCODER_DSI_C) -+ -+static const struct intel_display_device_info bxt_display = { -+ GEN9_LP_DISPLAY, -+ .dbuf.size = 512 - 4, /* 4 blocks for bypass path allocation */ -+ -+ .__runtime_defaults.ip.ver = 9, -+}; -+ -+static const struct intel_display_device_info glk_display = { -+ GEN9_LP_DISPLAY, -+ .dbuf.size = 1024 - 4, /* 4 blocks for bypass path allocation */ -+ GLK_COLORS, -+ -+ .__runtime_defaults.ip.ver = 10, -+}; -+ -+static const struct intel_display_device_info gen11_display = { -+ .abox_mask = BIT(0), -+ .dbuf.size = 2048, -+ .dbuf.slice_mask = BIT(DBUF_S1) | BIT(DBUF_S2), -+ .has_ddi = 1, -+ .has_dp_mst = 1, -+ .has_fpga_dbg = 1, -+ .has_hotplug = 1, -+ .has_ipc = 1, -+ .has_psr = 1, -+ .has_psr_hw_tracking = 1, -+ .pipe_offsets = { -+ [TRANSCODER_A] = PIPE_A_OFFSET, -+ [TRANSCODER_B] = PIPE_B_OFFSET, -+ [TRANSCODER_C] = PIPE_C_OFFSET, -+ [TRANSCODER_EDP] = PIPE_EDP_OFFSET, -+ [TRANSCODER_DSI_0] = PIPE_DSI0_OFFSET, -+ [TRANSCODER_DSI_1] = PIPE_DSI1_OFFSET, -+ }, -+ .trans_offsets = { -+ [TRANSCODER_A] = TRANSCODER_A_OFFSET, -+ [TRANSCODER_B] = TRANSCODER_B_OFFSET, -+ [TRANSCODER_C] = TRANSCODER_C_OFFSET, -+ [TRANSCODER_EDP] = TRANSCODER_EDP_OFFSET, -+ [TRANSCODER_DSI_0] = TRANSCODER_DSI0_OFFSET, -+ [TRANSCODER_DSI_1] = TRANSCODER_DSI1_OFFSET, -+ }, -+ IVB_CURSOR_OFFSETS, -+ ICL_COLORS, -+ -+ .__runtime_defaults.ip.ver = 11, -+ .__runtime_defaults.has_dmc = 1, -+ .__runtime_defaults.has_dsc = 1, -+ .__runtime_defaults.has_hdcp = 1, -+ .__runtime_defaults.pipe_mask = BIT(PIPE_A) | BIT(PIPE_B) | BIT(PIPE_C), -+ .__runtime_defaults.cpu_transcoder_mask = -+ BIT(TRANSCODER_A) | BIT(TRANSCODER_B) | -+ BIT(TRANSCODER_C) | BIT(TRANSCODER_EDP) | -+ BIT(TRANSCODER_DSI_0) | BIT(TRANSCODER_DSI_1), -+ .__runtime_defaults.fbc_mask = BIT(INTEL_FBC_A), -+}; -+ -+#define XE_D_DISPLAY \ -+ .abox_mask = GENMASK(2, 1), \ -+ .dbuf.size = 2048, \ -+ .dbuf.slice_mask = BIT(DBUF_S1) | BIT(DBUF_S2), \ -+ .has_ddi = 1, \ -+ .has_dp_mst = 1, \ -+ .has_dsb = 1, \ -+ .has_fpga_dbg = 1, \ -+ .has_hotplug = 1, \ -+ .has_ipc = 1, \ -+ .has_psr = 1, \ -+ .has_psr_hw_tracking = 1, \ -+ .pipe_offsets = { \ -+ [TRANSCODER_A] = PIPE_A_OFFSET, \ -+ [TRANSCODER_B] = PIPE_B_OFFSET, \ -+ [TRANSCODER_C] = PIPE_C_OFFSET, \ -+ [TRANSCODER_D] = PIPE_D_OFFSET, \ -+ [TRANSCODER_DSI_0] = PIPE_DSI0_OFFSET, \ -+ [TRANSCODER_DSI_1] = PIPE_DSI1_OFFSET, \ -+ }, \ -+ .trans_offsets = { \ -+ [TRANSCODER_A] = TRANSCODER_A_OFFSET, \ -+ [TRANSCODER_B] = TRANSCODER_B_OFFSET, \ -+ [TRANSCODER_C] = TRANSCODER_C_OFFSET, \ -+ [TRANSCODER_D] = TRANSCODER_D_OFFSET, \ -+ [TRANSCODER_DSI_0] = TRANSCODER_DSI0_OFFSET, \ -+ [TRANSCODER_DSI_1] = TRANSCODER_DSI1_OFFSET, \ -+ }, \ -+ TGL_CURSOR_OFFSETS, \ -+ ICL_COLORS, \ -+ \ -+ .__runtime_defaults.ip.ver = 12, \ -+ .__runtime_defaults.has_dmc = 1, \ -+ .__runtime_defaults.has_dsc = 1, \ -+ .__runtime_defaults.has_hdcp = 1, \ -+ .__runtime_defaults.pipe_mask = \ -+ BIT(PIPE_A) | BIT(PIPE_B) | BIT(PIPE_C) | BIT(PIPE_D), \ -+ .__runtime_defaults.cpu_transcoder_mask = \ -+ BIT(TRANSCODER_A) | BIT(TRANSCODER_B) | \ -+ BIT(TRANSCODER_C) | BIT(TRANSCODER_D) | \ -+ BIT(TRANSCODER_DSI_0) | BIT(TRANSCODER_DSI_1), \ -+ .__runtime_defaults.fbc_mask = BIT(INTEL_FBC_A) -+ -+static const struct intel_display_device_info tgl_display = { -+ XE_D_DISPLAY, -+}; -+ -+static const struct intel_display_device_info rkl_display = { -+ XE_D_DISPLAY, -+ .abox_mask = BIT(0), -+ .has_hti = 1, -+ .has_psr_hw_tracking = 0, -+ -+ .__runtime_defaults.pipe_mask = BIT(PIPE_A) | BIT(PIPE_B) | BIT(PIPE_C), -+ .__runtime_defaults.cpu_transcoder_mask = -+ BIT(TRANSCODER_A) | BIT(TRANSCODER_B) | BIT(TRANSCODER_C), -+}; -+ -+static const struct intel_display_device_info adl_s_display = { -+ XE_D_DISPLAY, -+ .has_hti = 1, -+ .has_psr_hw_tracking = 0, -+}; -+ -+#define XE_LPD_FEATURES \ -+ .abox_mask = GENMASK(1, 0), \ -+ .color = { \ -+ .degamma_lut_size = 129, .gamma_lut_size = 1024, \ -+ .degamma_lut_tests = DRM_COLOR_LUT_NON_DECREASING | \ -+ DRM_COLOR_LUT_EQUAL_CHANNELS, \ -+ }, \ -+ .dbuf.size = 4096, \ -+ .dbuf.slice_mask = BIT(DBUF_S1) | BIT(DBUF_S2) | BIT(DBUF_S3) | \ -+ BIT(DBUF_S4), \ -+ .has_ddi = 1, \ -+ .has_dp_mst = 1, \ -+ .has_dsb = 1, \ -+ .has_fpga_dbg = 1, \ -+ .has_hotplug = 1, \ -+ .has_ipc = 1, \ -+ .has_psr = 1, \ -+ .pipe_offsets = { \ -+ [TRANSCODER_A] = PIPE_A_OFFSET, \ -+ [TRANSCODER_B] = PIPE_B_OFFSET, \ -+ [TRANSCODER_C] = PIPE_C_OFFSET, \ -+ [TRANSCODER_D] = PIPE_D_OFFSET, \ -+ [TRANSCODER_DSI_0] = PIPE_DSI0_OFFSET, \ -+ [TRANSCODER_DSI_1] = PIPE_DSI1_OFFSET, \ -+ }, \ -+ .trans_offsets = { \ -+ [TRANSCODER_A] = TRANSCODER_A_OFFSET, \ -+ [TRANSCODER_B] = TRANSCODER_B_OFFSET, \ -+ [TRANSCODER_C] = TRANSCODER_C_OFFSET, \ -+ [TRANSCODER_D] = TRANSCODER_D_OFFSET, \ -+ [TRANSCODER_DSI_0] = TRANSCODER_DSI0_OFFSET, \ -+ [TRANSCODER_DSI_1] = TRANSCODER_DSI1_OFFSET, \ -+ }, \ -+ TGL_CURSOR_OFFSETS, \ -+ \ -+ .__runtime_defaults.ip.ver = 13, \ -+ .__runtime_defaults.has_dmc = 1, \ -+ .__runtime_defaults.has_dsc = 1, \ -+ .__runtime_defaults.fbc_mask = BIT(INTEL_FBC_A), \ -+ .__runtime_defaults.has_hdcp = 1, \ -+ .__runtime_defaults.pipe_mask = \ -+ BIT(PIPE_A) | BIT(PIPE_B) | BIT(PIPE_C) | BIT(PIPE_D) -+ -+static const struct intel_display_device_info xe_lpd_display = { -+ XE_LPD_FEATURES, -+ .has_cdclk_crawl = 1, -+ .has_psr_hw_tracking = 0, -+ -+ .__runtime_defaults.cpu_transcoder_mask = -+ BIT(TRANSCODER_A) | BIT(TRANSCODER_B) | -+ BIT(TRANSCODER_C) | BIT(TRANSCODER_D) | -+ BIT(TRANSCODER_DSI_0) | BIT(TRANSCODER_DSI_1), -+}; -+ -+static const struct intel_display_device_info xe_hpd_display = { -+ XE_LPD_FEATURES, -+ .has_cdclk_squash = 1, -+ -+ .__runtime_defaults.cpu_transcoder_mask = -+ BIT(TRANSCODER_A) | BIT(TRANSCODER_B) | -+ BIT(TRANSCODER_C) | BIT(TRANSCODER_D), -+}; -+ -+static const struct intel_display_device_info xe_lpdp_display = { -+ XE_LPD_FEATURES, -+ .has_cdclk_crawl = 1, -+ .has_cdclk_squash = 1, -+ -+ .__runtime_defaults.ip.ver = 14, -+ .__runtime_defaults.fbc_mask = BIT(INTEL_FBC_A) | BIT(INTEL_FBC_B), -+ .__runtime_defaults.cpu_transcoder_mask = -+ BIT(TRANSCODER_A) | BIT(TRANSCODER_B) | -+ BIT(TRANSCODER_C) | BIT(TRANSCODER_D), -+}; -+ -+#undef INTEL_VGA_DEVICE -+#undef INTEL_QUANTA_VGA_DEVICE -+#define INTEL_VGA_DEVICE(id, info) { id, info } -+#define INTEL_QUANTA_VGA_DEVICE(info) { 0x16a, info } -+ -+static const struct { -+ u32 devid; -+ const struct intel_display_device_info *info; -+} intel_display_ids[] = { -+ INTEL_I830_IDS(&i830_display), -+ INTEL_I845G_IDS(&i845_display), -+ INTEL_I85X_IDS(&i85x_display), -+ INTEL_I865G_IDS(&i865g_display), -+ INTEL_I915G_IDS(&i915g_display), -+ INTEL_I915GM_IDS(&i915gm_display), -+ INTEL_I945G_IDS(&i945g_display), -+ INTEL_I945GM_IDS(&i945gm_display), -+ INTEL_I965G_IDS(&i965g_display), -+ INTEL_G33_IDS(&g33_display), -+ INTEL_I965GM_IDS(&i965gm_display), -+ INTEL_GM45_IDS(&gm45_display), -+ INTEL_G45_IDS(&g45_display), -+ INTEL_PINEVIEW_G_IDS(&g33_display), -+ INTEL_PINEVIEW_M_IDS(&g33_display), -+ INTEL_IRONLAKE_D_IDS(&ilk_d_display), -+ INTEL_IRONLAKE_M_IDS(&ilk_m_display), -+ INTEL_SNB_D_IDS(&snb_display), -+ INTEL_SNB_M_IDS(&snb_display), -+ INTEL_IVB_Q_IDS(NULL), /* must be first IVB in list */ -+ INTEL_IVB_M_IDS(&ivb_display), -+ INTEL_IVB_D_IDS(&ivb_display), -+ INTEL_HSW_IDS(&hsw_display), -+ INTEL_VLV_IDS(&vlv_display), -+ INTEL_BDW_IDS(&bdw_display), -+ INTEL_CHV_IDS(&chv_display), -+ INTEL_SKL_IDS(&skl_display), -+ INTEL_BXT_IDS(&bxt_display), -+ INTEL_GLK_IDS(&glk_display), -+ INTEL_KBL_IDS(&skl_display), -+ INTEL_CFL_IDS(&skl_display), -+ INTEL_ICL_11_IDS(&gen11_display), -+ INTEL_EHL_IDS(&gen11_display), -+ INTEL_JSL_IDS(&gen11_display), -+ INTEL_TGL_12_IDS(&tgl_display), -+ INTEL_DG1_IDS(&tgl_display), -+ INTEL_RKL_IDS(&rkl_display), -+ INTEL_ADLS_IDS(&adl_s_display), -+ INTEL_RPLS_IDS(&adl_s_display), -+ INTEL_ADLP_IDS(&xe_lpd_display), -+ INTEL_ADLN_IDS(&xe_lpd_display), -+ INTEL_RPLP_IDS(&xe_lpd_display), -+ INTEL_DG2_IDS(&xe_hpd_display), -+ -+ /* FIXME: Replace this with a GMD_ID lookup */ -+ INTEL_MTL_IDS(&xe_lpdp_display), -+}; -+ -+const struct intel_display_device_info * -+intel_display_device_probe(u16 pci_devid) -+{ -+ int i; -+ -+ for (i = 0; i < ARRAY_SIZE(intel_display_ids); i++) { -+ if (intel_display_ids[i].devid == pci_devid) -+ return intel_display_ids[i].info; -+ } -+ -+ return &no_display; -+} -diff --git a/drivers/gpu/drm/i915/display/intel_display_device.h b/drivers/gpu/drm/i915/display/intel_display_device.h -index 613607fad5af0..1f7d08b3ad6b1 100644 ---- a/drivers/gpu/drm/i915/display/intel_display_device.h -+++ b/drivers/gpu/drm/i915/display/intel_display_device.h -@@ -80,4 +80,7 @@ struct intel_display_device_info { - } color; - }; - -+const struct intel_display_device_info * -+intel_display_device_probe(u16 pci_devid); -+ - #endif -diff --git a/drivers/gpu/drm/i915/i915_pci.c b/drivers/gpu/drm/i915/i915_pci.c -index 2de23af68963a..6b69d4c7bdb79 100644 ---- a/drivers/gpu/drm/i915/i915_pci.c -+++ b/drivers/gpu/drm/i915/i915_pci.c -@@ -41,127 +41,6 @@ - .__runtime.graphics.ip.ver = (x), \ - .__runtime.media.ip.ver = (x) - --static const struct intel_display_device_info no_display = {}; -- --#define I845_PIPE_OFFSETS \ -- .pipe_offsets = { \ -- [TRANSCODER_A] = PIPE_A_OFFSET, \ -- }, \ -- .trans_offsets = { \ -- [TRANSCODER_A] = TRANSCODER_A_OFFSET, \ -- } -- --#define I9XX_PIPE_OFFSETS \ -- .pipe_offsets = { \ -- [TRANSCODER_A] = PIPE_A_OFFSET, \ -- [TRANSCODER_B] = PIPE_B_OFFSET, \ -- }, \ -- .trans_offsets = { \ -- [TRANSCODER_A] = TRANSCODER_A_OFFSET, \ -- [TRANSCODER_B] = TRANSCODER_B_OFFSET, \ -- } -- --#define IVB_PIPE_OFFSETS \ -- .pipe_offsets = { \ -- [TRANSCODER_A] = PIPE_A_OFFSET, \ -- [TRANSCODER_B] = PIPE_B_OFFSET, \ -- [TRANSCODER_C] = PIPE_C_OFFSET, \ -- }, \ -- .trans_offsets = { \ -- [TRANSCODER_A] = TRANSCODER_A_OFFSET, \ -- [TRANSCODER_B] = TRANSCODER_B_OFFSET, \ -- [TRANSCODER_C] = TRANSCODER_C_OFFSET, \ -- } -- --#define HSW_PIPE_OFFSETS \ -- .pipe_offsets = { \ -- [TRANSCODER_A] = PIPE_A_OFFSET, \ -- [TRANSCODER_B] = PIPE_B_OFFSET, \ -- [TRANSCODER_C] = PIPE_C_OFFSET, \ -- [TRANSCODER_EDP] = PIPE_EDP_OFFSET, \ -- }, \ -- .trans_offsets = { \ -- [TRANSCODER_A] = TRANSCODER_A_OFFSET, \ -- [TRANSCODER_B] = TRANSCODER_B_OFFSET, \ -- [TRANSCODER_C] = TRANSCODER_C_OFFSET, \ -- [TRANSCODER_EDP] = TRANSCODER_EDP_OFFSET, \ -- } -- --#define CHV_PIPE_OFFSETS \ -- .pipe_offsets = { \ -- [TRANSCODER_A] = PIPE_A_OFFSET, \ -- [TRANSCODER_B] = PIPE_B_OFFSET, \ -- [TRANSCODER_C] = CHV_PIPE_C_OFFSET, \ -- }, \ -- .trans_offsets = { \ -- [TRANSCODER_A] = TRANSCODER_A_OFFSET, \ -- [TRANSCODER_B] = TRANSCODER_B_OFFSET, \ -- [TRANSCODER_C] = CHV_TRANSCODER_C_OFFSET, \ -- } -- --#define I845_CURSOR_OFFSETS \ -- .cursor_offsets = { \ -- [PIPE_A] = CURSOR_A_OFFSET, \ -- } -- --#define I9XX_CURSOR_OFFSETS \ -- .cursor_offsets = { \ -- [PIPE_A] = CURSOR_A_OFFSET, \ -- [PIPE_B] = CURSOR_B_OFFSET, \ -- } -- --#define CHV_CURSOR_OFFSETS \ -- .cursor_offsets = { \ -- [PIPE_A] = CURSOR_A_OFFSET, \ -- [PIPE_B] = CURSOR_B_OFFSET, \ -- [PIPE_C] = CHV_CURSOR_C_OFFSET, \ -- } -- --#define IVB_CURSOR_OFFSETS \ -- .cursor_offsets = { \ -- [PIPE_A] = CURSOR_A_OFFSET, \ -- [PIPE_B] = IVB_CURSOR_B_OFFSET, \ -- [PIPE_C] = IVB_CURSOR_C_OFFSET, \ -- } -- --#define TGL_CURSOR_OFFSETS \ -- .cursor_offsets = { \ -- [PIPE_A] = CURSOR_A_OFFSET, \ -- [PIPE_B] = IVB_CURSOR_B_OFFSET, \ -- [PIPE_C] = IVB_CURSOR_C_OFFSET, \ -- [PIPE_D] = TGL_CURSOR_D_OFFSET, \ -- } -- --#define I845_COLORS \ -- .color = { .gamma_lut_size = 256 } --#define I9XX_COLORS \ -- .color = { .gamma_lut_size = 129, \ -- .gamma_lut_tests = DRM_COLOR_LUT_NON_DECREASING, \ -- } --#define ILK_COLORS \ -- .color = { .gamma_lut_size = 1024 } --#define IVB_COLORS \ -- .color = { .degamma_lut_size = 1024, .gamma_lut_size = 1024 } --#define CHV_COLORS \ -- .color = { \ -- .degamma_lut_size = 65, .gamma_lut_size = 257, \ -- .degamma_lut_tests = DRM_COLOR_LUT_NON_DECREASING, \ -- .gamma_lut_tests = DRM_COLOR_LUT_NON_DECREASING, \ -- } --#define GLK_COLORS \ -- .color = { \ -- .degamma_lut_size = 33, .gamma_lut_size = 1024, \ -- .degamma_lut_tests = DRM_COLOR_LUT_NON_DECREASING | \ -- DRM_COLOR_LUT_EQUAL_CHANNELS, \ -- } --#define ICL_COLORS \ -- .color = { \ -- .degamma_lut_size = 33, .gamma_lut_size = 262145, \ -- .degamma_lut_tests = DRM_COLOR_LUT_NON_DECREASING | \ -- DRM_COLOR_LUT_EQUAL_CHANNELS, \ -- .gamma_lut_tests = DRM_COLOR_LUT_NON_DECREASING, \ -- } -- - /* Keep in gen based order, and chronological order within a gen */ - - #define GEN_DEFAULT_PAGE_SIZES \ -@@ -170,24 +49,6 @@ static const struct intel_display_device_info no_display = {}; - #define GEN_DEFAULT_REGIONS \ - .__runtime.memory_regions = REGION_SMEM | REGION_STOLEN_SMEM - --#define I830_DISPLAY \ -- .has_overlay = 1, \ -- .cursor_needs_physical = 1, \ -- .overlay_needs_physical = 1, \ -- .has_gmch = 1, \ -- I9XX_PIPE_OFFSETS, \ -- I9XX_CURSOR_OFFSETS, \ -- I9XX_COLORS, \ -- \ -- .__runtime_defaults.ip.ver = 2, \ -- .__runtime_defaults.pipe_mask = BIT(PIPE_A) | BIT(PIPE_B), \ -- .__runtime_defaults.cpu_transcoder_mask = \ -- BIT(TRANSCODER_A) | BIT(TRANSCODER_B) -- --static const struct intel_display_device_info i830_display = { -- I830_DISPLAY, --}; -- - #define I830_FEATURES \ - GEN(2), \ - .is_mobile = 1, \ -@@ -202,22 +63,6 @@ static const struct intel_display_device_info i830_display = { - GEN_DEFAULT_PAGE_SIZES, \ - GEN_DEFAULT_REGIONS - --#define I845_DISPLAY \ -- .has_overlay = 1, \ -- .overlay_needs_physical = 1, \ -- .has_gmch = 1, \ -- I845_PIPE_OFFSETS, \ -- I845_CURSOR_OFFSETS, \ -- I845_COLORS, \ -- \ -- .__runtime_defaults.ip.ver = 2, \ -- .__runtime_defaults.pipe_mask = BIT(PIPE_A), \ -- .__runtime_defaults.cpu_transcoder_mask = BIT(TRANSCODER_A) -- --static const struct intel_display_device_info i845_display = { -- I845_DISPLAY, --}; -- - #define I845_FEATURES \ - GEN(2), \ - .has_3d_pipeline = 1, \ -@@ -234,86 +79,21 @@ static const struct intel_display_device_info i845_display = { - static const struct intel_device_info i830_info = { - I830_FEATURES, - PLATFORM(INTEL_I830), -- .display = &i830_display, - }; - - static const struct intel_device_info i845g_info = { - I845_FEATURES, - PLATFORM(INTEL_I845G), -- .display = &i845_display, --}; -- --static const struct intel_display_device_info i85x_display = { -- I830_DISPLAY, -- -- .__runtime_defaults.fbc_mask = BIT(INTEL_FBC_A), - }; - - static const struct intel_device_info i85x_info = { - I830_FEATURES, - PLATFORM(INTEL_I85X), -- .display = &i85x_display, --}; -- --static const struct intel_display_device_info i865g_display = { -- I845_DISPLAY, -- -- .__runtime_defaults.fbc_mask = BIT(INTEL_FBC_A), - }; - - static const struct intel_device_info i865g_info = { - I845_FEATURES, - PLATFORM(INTEL_I865G), -- .display = &i865g_display, --}; -- --#define GEN3_DISPLAY \ -- .has_gmch = 1, \ -- .has_overlay = 1, \ -- I9XX_PIPE_OFFSETS, \ -- I9XX_CURSOR_OFFSETS, \ -- I9XX_COLORS, \ -- \ -- .__runtime_defaults.ip.ver = 3, \ -- .__runtime_defaults.pipe_mask = BIT(PIPE_A) | BIT(PIPE_B), \ -- .__runtime_defaults.cpu_transcoder_mask = \ -- BIT(TRANSCODER_A) | BIT(TRANSCODER_B) -- --static const struct intel_display_device_info i915g_display = { -- GEN3_DISPLAY, -- .cursor_needs_physical = 1, -- .overlay_needs_physical = 1, --}; -- --static const struct intel_display_device_info i915gm_display = { -- GEN3_DISPLAY, -- .cursor_needs_physical = 1, -- .overlay_needs_physical = 1, -- .supports_tv = 1, -- -- .__runtime_defaults.fbc_mask = BIT(INTEL_FBC_A), --}; -- --static const struct intel_display_device_info i945g_display = { -- GEN3_DISPLAY, -- .has_hotplug = 1, -- .cursor_needs_physical = 1, -- .overlay_needs_physical = 1, --}; -- --static const struct intel_display_device_info i945gm_display = { -- GEN3_DISPLAY, -- .has_hotplug = 1, -- .cursor_needs_physical = 1, -- .overlay_needs_physical = 1, -- .supports_tv = 1, -- -- .__runtime_defaults.fbc_mask = BIT(INTEL_FBC_A), --}; -- --static const struct intel_display_device_info g33_display = { -- GEN3_DISPLAY, -- .has_hotplug = 1, - }; - - #define GEN3_FEATURES \ -@@ -330,7 +110,6 @@ static const struct intel_display_device_info g33_display = { - static const struct intel_device_info i915g_info = { - GEN3_FEATURES, - PLATFORM(INTEL_I915G), -- .display = &i915g_display, - .has_coherent_ggtt = false, - .hws_needs_physical = 1, - .unfenced_needs_alignment = 1, -@@ -339,7 +118,6 @@ static const struct intel_device_info i915g_info = { - static const struct intel_device_info i915gm_info = { - GEN3_FEATURES, - PLATFORM(INTEL_I915GM), -- .display = &i915gm_display, - .is_mobile = 1, - .hws_needs_physical = 1, - .unfenced_needs_alignment = 1, -@@ -348,7 +126,6 @@ static const struct intel_device_info i915gm_info = { - static const struct intel_device_info i945g_info = { - GEN3_FEATURES, - PLATFORM(INTEL_I945G), -- .display = &i945g_display, - .hws_needs_physical = 1, - .unfenced_needs_alignment = 1, - }; -@@ -356,7 +133,6 @@ static const struct intel_device_info i945g_info = { - static const struct intel_device_info i945gm_info = { - GEN3_FEATURES, - PLATFORM(INTEL_I945GM), -- .display = &i945gm_display, - .is_mobile = 1, - .hws_needs_physical = 1, - .unfenced_needs_alignment = 1, -@@ -365,14 +141,12 @@ static const struct intel_device_info i945gm_info = { - static const struct intel_device_info g33_info = { - GEN3_FEATURES, - PLATFORM(INTEL_G33), -- .display = &g33_display, - .dma_mask_size = 36, - }; - - static const struct intel_device_info pnv_g_info = { - GEN3_FEATURES, - PLATFORM(INTEL_PINEVIEW), -- .display = &g33_display, - .dma_mask_size = 36, - }; - -@@ -380,46 +154,9 @@ static const struct intel_device_info pnv_m_info = { - GEN3_FEATURES, - PLATFORM(INTEL_PINEVIEW), - .is_mobile = 1, -- .display = &g33_display, - .dma_mask_size = 36, - }; - --#define GEN4_DISPLAY \ -- .has_hotplug = 1, \ -- .has_gmch = 1, \ -- I9XX_PIPE_OFFSETS, \ -- I9XX_CURSOR_OFFSETS, \ -- I9XX_COLORS, \ -- \ -- .__runtime_defaults.ip.ver = 4, \ -- .__runtime_defaults.pipe_mask = BIT(PIPE_A) | BIT(PIPE_B), \ -- .__runtime_defaults.cpu_transcoder_mask = \ -- BIT(TRANSCODER_A) | BIT(TRANSCODER_B) -- --static const struct intel_display_device_info i965g_display = { -- GEN4_DISPLAY, -- .has_overlay = 1, --}; -- --static const struct intel_display_device_info i965gm_display = { -- GEN4_DISPLAY, -- .has_overlay = 1, -- .supports_tv = 1, -- -- .__runtime_defaults.fbc_mask = BIT(INTEL_FBC_A), --}; -- --static const struct intel_display_device_info g45_display = { -- GEN4_DISPLAY, --}; -- --static const struct intel_display_device_info gm45_display = { -- GEN4_DISPLAY, -- .supports_tv = 1, -- -- .__runtime_defaults.fbc_mask = BIT(INTEL_FBC_A), --}; -- - #define GEN4_FEATURES \ - GEN(4), \ - .gpu_reset_clobbers_display = true, \ -@@ -434,7 +171,6 @@ static const struct intel_display_device_info gm45_display = { - static const struct intel_device_info i965g_info = { - GEN4_FEATURES, - PLATFORM(INTEL_I965G), -- .display = &i965g_display, - .hws_needs_physical = 1, - .has_snoop = false, - }; -@@ -442,7 +178,6 @@ static const struct intel_device_info i965g_info = { - static const struct intel_device_info i965gm_info = { - GEN4_FEATURES, - PLATFORM(INTEL_I965GM), -- .display = &i965gm_display, - .is_mobile = 1, - .hws_needs_physical = 1, - .has_snoop = false, -@@ -452,7 +187,6 @@ static const struct intel_device_info g45_info = { - GEN4_FEATURES, - PLATFORM(INTEL_G45), - .__runtime.platform_engine_mask = BIT(RCS0) | BIT(VCS0), -- .display = &g45_display, - .gpu_reset_clobbers_display = false, - }; - -@@ -461,7 +195,6 @@ static const struct intel_device_info gm45_info = { - PLATFORM(INTEL_GM45), - .is_mobile = 1, - .__runtime.platform_engine_mask = BIT(RCS0) | BIT(VCS0), -- .display = &gm45_display, - .gpu_reset_clobbers_display = false, - }; - -@@ -477,37 +210,14 @@ static const struct intel_device_info gm45_info = { - GEN_DEFAULT_PAGE_SIZES, \ - GEN_DEFAULT_REGIONS - --#define ILK_DISPLAY \ -- .has_hotplug = 1, \ -- I9XX_PIPE_OFFSETS, \ -- I9XX_CURSOR_OFFSETS, \ -- ILK_COLORS, \ -- \ -- .__runtime_defaults.ip.ver = 5, \ -- .__runtime_defaults.pipe_mask = BIT(PIPE_A) | BIT(PIPE_B), \ -- .__runtime_defaults.cpu_transcoder_mask = \ -- BIT(TRANSCODER_A) | BIT(TRANSCODER_B) -- --static const struct intel_display_device_info ilk_d_display = { -- ILK_DISPLAY, --}; -- - static const struct intel_device_info ilk_d_info = { - GEN5_FEATURES, - PLATFORM(INTEL_IRONLAKE), -- .display = &ilk_d_display, - }; - --static const struct intel_display_device_info ilk_m_display = { -- ILK_DISPLAY, -- -- .__runtime_defaults.fbc_mask = BIT(INTEL_FBC_A), -- }; -- - static const struct intel_device_info ilk_m_info = { - GEN5_FEATURES, - PLATFORM(INTEL_IRONLAKE), -- .display = &ilk_m_display, - .is_mobile = 1, - .has_rps = true, - }; -@@ -528,32 +238,17 @@ static const struct intel_device_info ilk_m_info = { - GEN_DEFAULT_PAGE_SIZES, \ - GEN_DEFAULT_REGIONS - --static const struct intel_display_device_info snb_display = { -- .has_hotplug = 1, -- I9XX_PIPE_OFFSETS, -- I9XX_CURSOR_OFFSETS, -- ILK_COLORS, -- -- .__runtime_defaults.ip.ver = 6, -- .__runtime_defaults.pipe_mask = BIT(PIPE_A) | BIT(PIPE_B), -- .__runtime_defaults.cpu_transcoder_mask = -- BIT(TRANSCODER_A) | BIT(TRANSCODER_B), -- .__runtime_defaults.fbc_mask = BIT(INTEL_FBC_A), --}; -- - #define SNB_D_PLATFORM \ - GEN6_FEATURES, \ - PLATFORM(INTEL_SANDYBRIDGE) - - static const struct intel_device_info snb_d_gt1_info = { - SNB_D_PLATFORM, -- .display = &snb_display, - .gt = 1, - }; - - static const struct intel_device_info snb_d_gt2_info = { - SNB_D_PLATFORM, -- .display = &snb_display, - .gt = 2, - }; - -@@ -565,13 +260,11 @@ static const struct intel_device_info snb_d_gt2_info = { - - static const struct intel_device_info snb_m_gt1_info = { - SNB_M_PLATFORM, -- .display = &snb_display, - .gt = 1, - }; - - static const struct intel_device_info snb_m_gt2_info = { - SNB_M_PLATFORM, -- .display = &snb_display, - .gt = 2, - }; - -@@ -596,28 +289,13 @@ static const struct intel_device_info snb_m_gt2_info = { - PLATFORM(INTEL_IVYBRIDGE), \ - .has_l3_dpf = 1 - --static const struct intel_display_device_info ivb_display = { -- .has_hotplug = 1, -- IVB_PIPE_OFFSETS, -- IVB_CURSOR_OFFSETS, -- IVB_COLORS, -- -- .__runtime_defaults.ip.ver = 7, -- .__runtime_defaults.pipe_mask = BIT(PIPE_A) | BIT(PIPE_B) | BIT(PIPE_C), -- .__runtime_defaults.cpu_transcoder_mask = -- BIT(TRANSCODER_A) | BIT(TRANSCODER_B) | BIT(TRANSCODER_C), -- .__runtime_defaults.fbc_mask = BIT(INTEL_FBC_A), --}; -- - static const struct intel_device_info ivb_d_gt1_info = { - IVB_D_PLATFORM, -- .display = &ivb_display, - .gt = 1, - }; - - static const struct intel_device_info ivb_d_gt2_info = { - IVB_D_PLATFORM, -- .display = &ivb_display, - .gt = 2, - }; - -@@ -629,43 +307,25 @@ static const struct intel_device_info ivb_d_gt2_info = { - - static const struct intel_device_info ivb_m_gt1_info = { - IVB_M_PLATFORM, -- .display = &ivb_display, - .gt = 1, - }; - - static const struct intel_device_info ivb_m_gt2_info = { - IVB_M_PLATFORM, -- .display = &ivb_display, - .gt = 2, - }; - - static const struct intel_device_info ivb_q_info = { - GEN7_FEATURES, - PLATFORM(INTEL_IVYBRIDGE), -- .display = &no_display, - .gt = 2, - .has_l3_dpf = 1, - }; - --static const struct intel_display_device_info vlv_display = { -- .has_gmch = 1, -- .has_hotplug = 1, -- .mmio_offset = VLV_DISPLAY_BASE, -- I9XX_PIPE_OFFSETS, -- I9XX_CURSOR_OFFSETS, -- I9XX_COLORS, -- -- .__runtime_defaults.ip.ver = 7, -- .__runtime_defaults.pipe_mask = BIT(PIPE_A) | BIT(PIPE_B), -- .__runtime_defaults.cpu_transcoder_mask = -- BIT(TRANSCODER_A) | BIT(TRANSCODER_B), --}; -- - static const struct intel_device_info vlv_info = { - PLATFORM(INTEL_VALLEYVIEW), - GEN(7), - .is_lp = 1, -- .display = &vlv_display, - .has_runtime_pm = 1, - .has_rc6 = 1, - .has_reset_engine = true, -@@ -691,38 +351,18 @@ static const struct intel_device_info vlv_info = { - PLATFORM(INTEL_HASWELL), \ - .has_l3_dpf = 1 - --static const struct intel_display_device_info hsw_display = { -- .has_ddi = 1, -- .has_dp_mst = 1, -- .has_fpga_dbg = 1, -- .has_hotplug = 1, -- HSW_PIPE_OFFSETS, -- IVB_CURSOR_OFFSETS, -- IVB_COLORS, -- -- .__runtime_defaults.ip.ver = 7, -- .__runtime_defaults.pipe_mask = BIT(PIPE_A) | BIT(PIPE_B) | BIT(PIPE_C), -- .__runtime_defaults.cpu_transcoder_mask = -- BIT(TRANSCODER_A) | BIT(TRANSCODER_B) | -- BIT(TRANSCODER_C) | BIT(TRANSCODER_EDP), -- .__runtime_defaults.fbc_mask = BIT(INTEL_FBC_A), --}; -- - static const struct intel_device_info hsw_gt1_info = { - HSW_PLATFORM, -- .display = &hsw_display, - .gt = 1, - }; - - static const struct intel_device_info hsw_gt2_info = { - HSW_PLATFORM, -- .display = &hsw_display, - .gt = 2, - }; - - static const struct intel_device_info hsw_gt3_info = { - HSW_PLATFORM, -- .display = &hsw_display, - .gt = 3, - }; - -@@ -735,42 +375,22 @@ static const struct intel_device_info hsw_gt3_info = { - .__runtime.ppgtt_size = 48, \ - .has_64bit_reloc = 1 - --static const struct intel_display_device_info bdw_display = { -- .has_ddi = 1, -- .has_dp_mst = 1, -- .has_fpga_dbg = 1, -- .has_hotplug = 1, -- HSW_PIPE_OFFSETS, -- IVB_CURSOR_OFFSETS, -- IVB_COLORS, -- -- .__runtime_defaults.ip.ver = 8, -- .__runtime_defaults.pipe_mask = BIT(PIPE_A) | BIT(PIPE_B) | BIT(PIPE_C), -- .__runtime_defaults.cpu_transcoder_mask = -- BIT(TRANSCODER_A) | BIT(TRANSCODER_B) | -- BIT(TRANSCODER_C) | BIT(TRANSCODER_EDP), -- .__runtime_defaults.fbc_mask = BIT(INTEL_FBC_A), --}; -- - #define BDW_PLATFORM \ - GEN8_FEATURES, \ - PLATFORM(INTEL_BROADWELL) - - static const struct intel_device_info bdw_gt1_info = { - BDW_PLATFORM, -- .display = &bdw_display, - .gt = 1, - }; - - static const struct intel_device_info bdw_gt2_info = { - BDW_PLATFORM, -- .display = &bdw_display, - .gt = 2, - }; - - static const struct intel_device_info bdw_rsvd_info = { - BDW_PLATFORM, -- .display = &bdw_display, - .gt = 3, - /* According to the device ID those devices are GT3, they were - * previously treated as not GT3, keep it like that. -@@ -779,30 +399,14 @@ static const struct intel_device_info bdw_rsvd_info = { - - static const struct intel_device_info bdw_gt3_info = { - BDW_PLATFORM, -- .display = &bdw_display, - .gt = 3, - .__runtime.platform_engine_mask = - BIT(RCS0) | BIT(VCS0) | BIT(BCS0) | BIT(VECS0) | BIT(VCS1), - }; - --static const struct intel_display_device_info chv_display = { -- .has_hotplug = 1, -- .has_gmch = 1, -- .mmio_offset = VLV_DISPLAY_BASE, -- CHV_PIPE_OFFSETS, -- CHV_CURSOR_OFFSETS, -- CHV_COLORS, -- -- .__runtime_defaults.ip.ver = 8, -- .__runtime_defaults.pipe_mask = BIT(PIPE_A) | BIT(PIPE_B) | BIT(PIPE_C), -- .__runtime_defaults.cpu_transcoder_mask = -- BIT(TRANSCODER_A) | BIT(TRANSCODER_B) | BIT(TRANSCODER_C), --}; -- - static const struct intel_device_info chv_info = { - PLATFORM(INTEL_CHERRYVIEW), - GEN(8), -- .display = &chv_display, - .is_lp = 1, - .__runtime.platform_engine_mask = BIT(RCS0) | BIT(VCS0) | BIT(BCS0) | BIT(VECS0), - .has_64bit_reloc = 1, -@@ -830,43 +434,17 @@ static const struct intel_device_info chv_info = { - GEN9_DEFAULT_PAGE_SIZES, \ - .has_gt_uc = 1 - --static const struct intel_display_device_info skl_display = { -- .dbuf.size = 896 - 4, /* 4 blocks for bypass path allocation */ -- .dbuf.slice_mask = BIT(DBUF_S1), -- .has_ddi = 1, -- .has_dp_mst = 1, -- .has_fpga_dbg = 1, -- .has_hotplug = 1, -- .has_ipc = 1, -- .has_psr = 1, -- .has_psr_hw_tracking = 1, -- HSW_PIPE_OFFSETS, -- IVB_CURSOR_OFFSETS, -- IVB_COLORS, -- -- .__runtime_defaults.ip.ver = 9, -- .__runtime_defaults.has_dmc = 1, -- .__runtime_defaults.has_hdcp = 1, -- .__runtime_defaults.pipe_mask = BIT(PIPE_A) | BIT(PIPE_B) | BIT(PIPE_C), -- .__runtime_defaults.cpu_transcoder_mask = -- BIT(TRANSCODER_A) | BIT(TRANSCODER_B) | -- BIT(TRANSCODER_C) | BIT(TRANSCODER_EDP), -- .__runtime_defaults.fbc_mask = BIT(INTEL_FBC_A), --}; -- - #define SKL_PLATFORM \ - GEN9_FEATURES, \ - PLATFORM(INTEL_SKYLAKE) - - static const struct intel_device_info skl_gt1_info = { - SKL_PLATFORM, -- .display = &skl_display, - .gt = 1, - }; - - static const struct intel_device_info skl_gt2_info = { - SKL_PLATFORM, -- .display = &skl_display, - .gt = 2, - }; - -@@ -878,13 +456,11 @@ static const struct intel_device_info skl_gt2_info = { - - static const struct intel_device_info skl_gt3_info = { - SKL_GT3_PLUS_PLATFORM, -- .display = &skl_display, - .gt = 3, - }; - - static const struct intel_device_info skl_gt4_info = { - SKL_GT3_PLUS_PLATFORM, -- .display = &skl_display, - .gt = 4, - }; - -@@ -908,53 +484,14 @@ static const struct intel_device_info skl_gt4_info = { - GEN9_DEFAULT_PAGE_SIZES, \ - GEN_DEFAULT_REGIONS - --#define GEN9_LP_DISPLAY \ -- .dbuf.slice_mask = BIT(DBUF_S1), \ -- .has_dp_mst = 1, \ -- .has_ddi = 1, \ -- .has_fpga_dbg = 1, \ -- .has_hotplug = 1, \ -- .has_ipc = 1, \ -- .has_psr = 1, \ -- .has_psr_hw_tracking = 1, \ -- HSW_PIPE_OFFSETS, \ -- IVB_CURSOR_OFFSETS, \ -- IVB_COLORS, \ -- \ -- .__runtime_defaults.has_dmc = 1, \ -- .__runtime_defaults.has_hdcp = 1, \ -- .__runtime_defaults.fbc_mask = BIT(INTEL_FBC_A), \ -- .__runtime_defaults.pipe_mask = BIT(PIPE_A) | BIT(PIPE_B) | BIT(PIPE_C), \ -- .__runtime_defaults.cpu_transcoder_mask = \ -- BIT(TRANSCODER_A) | BIT(TRANSCODER_B) | \ -- BIT(TRANSCODER_C) | BIT(TRANSCODER_EDP) | \ -- BIT(TRANSCODER_DSI_A) | BIT(TRANSCODER_DSI_C) -- --static const struct intel_display_device_info bxt_display = { -- GEN9_LP_DISPLAY, -- .dbuf.size = 512 - 4, /* 4 blocks for bypass path allocation */ -- -- .__runtime_defaults.ip.ver = 9, --}; -- - static const struct intel_device_info bxt_info = { - GEN9_LP_FEATURES, - PLATFORM(INTEL_BROXTON), -- .display = &bxt_display, --}; -- --static const struct intel_display_device_info glk_display = { -- GEN9_LP_DISPLAY, -- .dbuf.size = 1024 - 4, /* 4 blocks for bypass path allocation */ -- GLK_COLORS, -- -- .__runtime_defaults.ip.ver = 10, - }; - - static const struct intel_device_info glk_info = { - GEN9_LP_FEATURES, - PLATFORM(INTEL_GEMINILAKE), -- .display = &glk_display, - }; - - #define KBL_PLATFORM \ -@@ -963,19 +500,16 @@ static const struct intel_device_info glk_info = { - - static const struct intel_device_info kbl_gt1_info = { - KBL_PLATFORM, -- .display = &skl_display, - .gt = 1, - }; - - static const struct intel_device_info kbl_gt2_info = { - KBL_PLATFORM, -- .display = &skl_display, - .gt = 2, - }; - - static const struct intel_device_info kbl_gt3_info = { - KBL_PLATFORM, -- .display = &skl_display, - .gt = 3, - .__runtime.platform_engine_mask = - BIT(RCS0) | BIT(VCS0) | BIT(BCS0) | BIT(VECS0) | BIT(VCS1), -@@ -987,19 +521,16 @@ static const struct intel_device_info kbl_gt3_info = { - - static const struct intel_device_info cfl_gt1_info = { - CFL_PLATFORM, -- .display = &skl_display, - .gt = 1, - }; - - static const struct intel_device_info cfl_gt2_info = { - CFL_PLATFORM, -- .display = &skl_display, - .gt = 2, - }; - - static const struct intel_device_info cfl_gt3_info = { - CFL_PLATFORM, -- .display = &skl_display, - .gt = 3, - .__runtime.platform_engine_mask = - BIT(RCS0) | BIT(VCS0) | BIT(BCS0) | BIT(VECS0) | BIT(VCS1), -@@ -1011,13 +542,11 @@ static const struct intel_device_info cfl_gt3_info = { - - static const struct intel_device_info cml_gt1_info = { - CML_PLATFORM, -- .display = &skl_display, - .gt = 1, - }; - - static const struct intel_device_info cml_gt2_info = { - CML_PLATFORM, -- .display = &skl_display, - .gt = 2, - }; - -@@ -1033,54 +562,11 @@ static const struct intel_device_info cml_gt2_info = { - .has_coherent_ggtt = false, \ - .has_logical_ring_elsq = 1 - --static const struct intel_display_device_info gen11_display = { -- .abox_mask = BIT(0), -- .dbuf.size = 2048, -- .dbuf.slice_mask = BIT(DBUF_S1) | BIT(DBUF_S2), -- .has_ddi = 1, -- .has_dp_mst = 1, -- .has_fpga_dbg = 1, -- .has_hotplug = 1, -- .has_ipc = 1, -- .has_psr = 1, -- .has_psr_hw_tracking = 1, -- .pipe_offsets = { -- [TRANSCODER_A] = PIPE_A_OFFSET, -- [TRANSCODER_B] = PIPE_B_OFFSET, -- [TRANSCODER_C] = PIPE_C_OFFSET, -- [TRANSCODER_EDP] = PIPE_EDP_OFFSET, -- [TRANSCODER_DSI_0] = PIPE_DSI0_OFFSET, -- [TRANSCODER_DSI_1] = PIPE_DSI1_OFFSET, -- }, -- .trans_offsets = { -- [TRANSCODER_A] = TRANSCODER_A_OFFSET, -- [TRANSCODER_B] = TRANSCODER_B_OFFSET, -- [TRANSCODER_C] = TRANSCODER_C_OFFSET, -- [TRANSCODER_EDP] = TRANSCODER_EDP_OFFSET, -- [TRANSCODER_DSI_0] = TRANSCODER_DSI0_OFFSET, -- [TRANSCODER_DSI_1] = TRANSCODER_DSI1_OFFSET, -- }, -- IVB_CURSOR_OFFSETS, -- ICL_COLORS, -- -- .__runtime_defaults.ip.ver = 11, -- .__runtime_defaults.has_dmc = 1, -- .__runtime_defaults.has_dsc = 1, -- .__runtime_defaults.has_hdcp = 1, -- .__runtime_defaults.pipe_mask = BIT(PIPE_A) | BIT(PIPE_B) | BIT(PIPE_C), -- .__runtime_defaults.cpu_transcoder_mask = -- BIT(TRANSCODER_A) | BIT(TRANSCODER_B) | -- BIT(TRANSCODER_C) | BIT(TRANSCODER_EDP) | -- BIT(TRANSCODER_DSI_0) | BIT(TRANSCODER_DSI_1), -- .__runtime_defaults.fbc_mask = BIT(INTEL_FBC_A), --}; -- - static const struct intel_device_info icl_info = { - GEN11_FEATURES, - PLATFORM(INTEL_ICELAKE), - .__runtime.platform_engine_mask = - BIT(RCS0) | BIT(BCS0) | BIT(VECS0) | BIT(VCS0) | BIT(VCS2), -- .display = &gen11_display, - }; - - static const struct intel_device_info ehl_info = { -@@ -1088,7 +574,6 @@ static const struct intel_device_info ehl_info = { - PLATFORM(INTEL_ELKHARTLAKE), - .__runtime.platform_engine_mask = BIT(RCS0) | BIT(BCS0) | BIT(VCS0) | BIT(VECS0), - .__runtime.ppgtt_size = 36, -- .display = &gen11_display, - }; - - static const struct intel_device_info jsl_info = { -@@ -1096,7 +581,6 @@ static const struct intel_device_info jsl_info = { - PLATFORM(INTEL_JASPERLAKE), - .__runtime.platform_engine_mask = BIT(RCS0) | BIT(BCS0) | BIT(VCS0) | BIT(VECS0), - .__runtime.ppgtt_size = 36, -- .display = &gen11_display, - }; - - #define GEN12_FEATURES \ -@@ -1105,70 +589,11 @@ static const struct intel_device_info jsl_info = { - .has_global_mocs = 1, \ - .has_pxp = 1 - --#define XE_D_DISPLAY \ -- .abox_mask = GENMASK(2, 1), \ -- .dbuf.size = 2048, \ -- .dbuf.slice_mask = BIT(DBUF_S1) | BIT(DBUF_S2), \ -- .has_ddi = 1, \ -- .has_dp_mst = 1, \ -- .has_dsb = 1, \ -- .has_fpga_dbg = 1, \ -- .has_hotplug = 1, \ -- .has_ipc = 1, \ -- .has_psr = 1, \ -- .has_psr_hw_tracking = 1, \ -- .pipe_offsets = { \ -- [TRANSCODER_A] = PIPE_A_OFFSET, \ -- [TRANSCODER_B] = PIPE_B_OFFSET, \ -- [TRANSCODER_C] = PIPE_C_OFFSET, \ -- [TRANSCODER_D] = PIPE_D_OFFSET, \ -- [TRANSCODER_DSI_0] = PIPE_DSI0_OFFSET, \ -- [TRANSCODER_DSI_1] = PIPE_DSI1_OFFSET, \ -- }, \ -- .trans_offsets = { \ -- [TRANSCODER_A] = TRANSCODER_A_OFFSET, \ -- [TRANSCODER_B] = TRANSCODER_B_OFFSET, \ -- [TRANSCODER_C] = TRANSCODER_C_OFFSET, \ -- [TRANSCODER_D] = TRANSCODER_D_OFFSET, \ -- [TRANSCODER_DSI_0] = TRANSCODER_DSI0_OFFSET, \ -- [TRANSCODER_DSI_1] = TRANSCODER_DSI1_OFFSET, \ -- }, \ -- TGL_CURSOR_OFFSETS, \ -- ICL_COLORS, \ -- \ -- .__runtime_defaults.ip.ver = 12, \ -- .__runtime_defaults.has_dmc = 1, \ -- .__runtime_defaults.has_dsc = 1, \ -- .__runtime_defaults.has_hdcp = 1, \ -- .__runtime_defaults.pipe_mask = \ -- BIT(PIPE_A) | BIT(PIPE_B) | BIT(PIPE_C) | BIT(PIPE_D), \ -- .__runtime_defaults.cpu_transcoder_mask = \ -- BIT(TRANSCODER_A) | BIT(TRANSCODER_B) | \ -- BIT(TRANSCODER_C) | BIT(TRANSCODER_D) | \ -- BIT(TRANSCODER_DSI_0) | BIT(TRANSCODER_DSI_1), \ -- .__runtime_defaults.fbc_mask = BIT(INTEL_FBC_A) -- --static const struct intel_display_device_info tgl_display = { -- XE_D_DISPLAY, --}; -- - static const struct intel_device_info tgl_info = { - GEN12_FEATURES, - PLATFORM(INTEL_TIGERLAKE), - .__runtime.platform_engine_mask = - BIT(RCS0) | BIT(BCS0) | BIT(VECS0) | BIT(VCS0) | BIT(VCS2), -- .display = &tgl_display, --}; -- --static const struct intel_display_device_info rkl_display = { -- XE_D_DISPLAY, -- .abox_mask = BIT(0), -- .has_hti = 1, -- .has_psr_hw_tracking = 0, -- -- .__runtime_defaults.pipe_mask = BIT(PIPE_A) | BIT(PIPE_B) | BIT(PIPE_C), -- .__runtime_defaults.cpu_transcoder_mask = -- BIT(TRANSCODER_A) | BIT(TRANSCODER_B) | BIT(TRANSCODER_C), - }; - - static const struct intel_device_info rkl_info = { -@@ -1176,7 +601,6 @@ static const struct intel_device_info rkl_info = { - PLATFORM(INTEL_ROCKETLAKE), - .__runtime.platform_engine_mask = - BIT(RCS0) | BIT(BCS0) | BIT(VECS0) | BIT(VCS0), -- .display = &rkl_display, - }; - - #define DGFX_FEATURES \ -@@ -1198,13 +622,6 @@ static const struct intel_device_info dg1_info = { - BIT(VCS0) | BIT(VCS2), - /* Wa_16011227922 */ - .__runtime.ppgtt_size = 47, -- .display = &tgl_display, --}; -- --static const struct intel_display_device_info adl_s_display = { -- XE_D_DISPLAY, -- .has_hti = 1, -- .has_psr_hw_tracking = 0, - }; - - static const struct intel_device_info adl_s_info = { -@@ -1213,61 +630,6 @@ static const struct intel_device_info adl_s_info = { - .__runtime.platform_engine_mask = - BIT(RCS0) | BIT(BCS0) | BIT(VECS0) | BIT(VCS0) | BIT(VCS2), - .dma_mask_size = 39, -- .display = &adl_s_display, --}; -- --#define XE_LPD_FEATURES \ -- .abox_mask = GENMASK(1, 0), \ -- .color = { \ -- .degamma_lut_size = 129, .gamma_lut_size = 1024, \ -- .degamma_lut_tests = DRM_COLOR_LUT_NON_DECREASING | \ -- DRM_COLOR_LUT_EQUAL_CHANNELS, \ -- }, \ -- .dbuf.size = 4096, \ -- .dbuf.slice_mask = BIT(DBUF_S1) | BIT(DBUF_S2) | BIT(DBUF_S3) | \ -- BIT(DBUF_S4), \ -- .has_ddi = 1, \ -- .has_dp_mst = 1, \ -- .has_dsb = 1, \ -- .has_fpga_dbg = 1, \ -- .has_hotplug = 1, \ -- .has_ipc = 1, \ -- .has_psr = 1, \ -- .pipe_offsets = { \ -- [TRANSCODER_A] = PIPE_A_OFFSET, \ -- [TRANSCODER_B] = PIPE_B_OFFSET, \ -- [TRANSCODER_C] = PIPE_C_OFFSET, \ -- [TRANSCODER_D] = PIPE_D_OFFSET, \ -- [TRANSCODER_DSI_0] = PIPE_DSI0_OFFSET, \ -- [TRANSCODER_DSI_1] = PIPE_DSI1_OFFSET, \ -- }, \ -- .trans_offsets = { \ -- [TRANSCODER_A] = TRANSCODER_A_OFFSET, \ -- [TRANSCODER_B] = TRANSCODER_B_OFFSET, \ -- [TRANSCODER_C] = TRANSCODER_C_OFFSET, \ -- [TRANSCODER_D] = TRANSCODER_D_OFFSET, \ -- [TRANSCODER_DSI_0] = TRANSCODER_DSI0_OFFSET, \ -- [TRANSCODER_DSI_1] = TRANSCODER_DSI1_OFFSET, \ -- }, \ -- TGL_CURSOR_OFFSETS, \ -- \ -- .__runtime_defaults.ip.ver = 13, \ -- .__runtime_defaults.has_dmc = 1, \ -- .__runtime_defaults.has_dsc = 1, \ -- .__runtime_defaults.fbc_mask = BIT(INTEL_FBC_A), \ -- .__runtime_defaults.has_hdcp = 1, \ -- .__runtime_defaults.pipe_mask = \ -- BIT(PIPE_A) | BIT(PIPE_B) | BIT(PIPE_C) | BIT(PIPE_D) -- --static const struct intel_display_device_info xe_lpd_display = { -- XE_LPD_FEATURES, -- .has_cdclk_crawl = 1, -- .has_psr_hw_tracking = 0, -- -- .__runtime_defaults.cpu_transcoder_mask = -- BIT(TRANSCODER_A) | BIT(TRANSCODER_B) | -- BIT(TRANSCODER_C) | BIT(TRANSCODER_D) | -- BIT(TRANSCODER_DSI_0) | BIT(TRANSCODER_DSI_1), - }; - - static const struct intel_device_info adl_p_info = { -@@ -1276,7 +638,6 @@ static const struct intel_device_info adl_p_info = { - .__runtime.platform_engine_mask = - BIT(RCS0) | BIT(BCS0) | BIT(VECS0) | BIT(VCS0) | BIT(VCS2), - .__runtime.ppgtt_size = 48, -- .display = &xe_lpd_display, - .dma_mask_size = 39, - }; - -@@ -1322,7 +683,6 @@ static const struct intel_device_info xehpsdv_info = { - XE_HPM_FEATURES, - DGFX_FEATURES, - PLATFORM(INTEL_XEHPSDV), -- .display = &no_display, - .has_64k_pages = 1, - .has_media_ratio_mode = 1, - .__runtime.platform_engine_mask = -@@ -1351,23 +711,12 @@ static const struct intel_device_info xehpsdv_info = { - BIT(VCS0) | BIT(VCS2) | \ - BIT(CCS0) | BIT(CCS1) | BIT(CCS2) | BIT(CCS3) - --static const struct intel_display_device_info xe_hpd_display = { -- XE_LPD_FEATURES, -- .has_cdclk_squash = 1, -- -- .__runtime_defaults.cpu_transcoder_mask = -- BIT(TRANSCODER_A) | BIT(TRANSCODER_B) | -- BIT(TRANSCODER_C) | BIT(TRANSCODER_D), --}; -- - static const struct intel_device_info dg2_info = { - DG2_FEATURES, -- .display = &xe_hpd_display, - }; - - static const struct intel_device_info ats_m_info = { - DG2_FEATURES, -- .display = &no_display, - .require_force_probe = 1, - .tuning_thread_rr_after_dep = 1, - }; -@@ -1389,7 +738,6 @@ static const struct intel_device_info pvc_info = { - .__runtime.graphics.ip.rel = 60, - .__runtime.media.ip.rel = 60, - PLATFORM(INTEL_PONTEVECCHIO), -- .display = &no_display, - .has_flat_ccs = 0, - .__runtime.platform_engine_mask = - BIT(BCS0) | -@@ -1408,18 +756,6 @@ static const struct intel_gt_definition xelpmp_extra_gt[] = { - {} - }; - --static const struct intel_display_device_info xe_lpdp_display = { -- XE_LPD_FEATURES, -- .has_cdclk_crawl = 1, -- .has_cdclk_squash = 1, -- -- .__runtime_defaults.ip.ver = 14, -- .__runtime_defaults.fbc_mask = BIT(INTEL_FBC_A) | BIT(INTEL_FBC_B), -- .__runtime_defaults.cpu_transcoder_mask = -- BIT(TRANSCODER_A) | BIT(TRANSCODER_B) | -- BIT(TRANSCODER_C) | BIT(TRANSCODER_D), --}; -- - static const struct intel_device_info mtl_info = { - XE_HP_FEATURES, - /* -@@ -1430,7 +766,6 @@ static const struct intel_device_info mtl_info = { - .__runtime.graphics.ip.rel = 70, - .__runtime.media.ip.ver = 13, - PLATFORM(INTEL_METEORLAKE), -- .display = &xe_lpdp_display, - .extra_gt_list = xelpmp_extra_gt, - .has_flat_ccs = 0, - .has_gmd_id = 1, -diff --git a/drivers/gpu/drm/i915/i915_reg.h b/drivers/gpu/drm/i915/i915_reg.h -index c4197e31962e1..d35c89f9da778 100644 ---- a/drivers/gpu/drm/i915/i915_reg.h -+++ b/drivers/gpu/drm/i915/i915_reg.h -@@ -1961,15 +1961,6 @@ - #define _TRANS_VSYNC_DSI1 0x6b814 - #define _TRANS_VSYNCSHIFT_DSI1 0x6b828 - --#define TRANSCODER_A_OFFSET 0x60000 --#define TRANSCODER_B_OFFSET 0x61000 --#define TRANSCODER_C_OFFSET 0x62000 --#define CHV_TRANSCODER_C_OFFSET 0x63000 --#define TRANSCODER_D_OFFSET 0x63000 --#define TRANSCODER_EDP_OFFSET 0x6f000 --#define TRANSCODER_DSI0_OFFSET 0x6b000 --#define TRANSCODER_DSI1_OFFSET 0x6b800 -- - #define TRANS_HTOTAL(trans) _MMIO_TRANS2((trans), _TRANS_HTOTAL_A) - #define TRANS_HBLANK(trans) _MMIO_TRANS2((trans), _TRANS_HBLANK_A) - #define TRANS_HSYNC(trans) _MMIO_TRANS2((trans), _TRANS_HSYNC_A) -@@ -2619,23 +2610,6 @@ - #define PIPESTAT_INT_ENABLE_MASK 0x7fff0000 - #define PIPESTAT_INT_STATUS_MASK 0x0000ffff - --#define PIPE_A_OFFSET 0x70000 --#define PIPE_B_OFFSET 0x71000 --#define PIPE_C_OFFSET 0x72000 --#define PIPE_D_OFFSET 0x73000 --#define CHV_PIPE_C_OFFSET 0x74000 --/* -- * There's actually no pipe EDP. Some pipe registers have -- * simply shifted from the pipe to the transcoder, while -- * keeping their original offset. Thus we need PIPE_EDP_OFFSET -- * to access such registers in transcoder EDP. -- */ --#define PIPE_EDP_OFFSET 0x7f000 -- --/* ICL DSI 0 and 1 */ --#define PIPE_DSI0_OFFSET 0x7b000 --#define PIPE_DSI1_OFFSET 0x7b800 -- - #define TRANSCONF(trans) _MMIO_PIPE2((trans), _TRANSACONF) - #define PIPEDSL(pipe) _MMIO_PIPE2(pipe, _PIPEADSL) - #define PIPEFRAME(pipe) _MMIO_PIPE2(pipe, _PIPEAFRAMEHIGH) -@@ -3091,13 +3065,6 @@ - #define CUR_CHICKEN(pipe) _MMIO_CURSOR2(pipe, _CUR_CHICKEN_A) - #define CURSURFLIVE(pipe) _MMIO_CURSOR2(pipe, _CURASURFLIVE) - --#define CURSOR_A_OFFSET 0x70080 --#define CURSOR_B_OFFSET 0x700c0 --#define CHV_CURSOR_C_OFFSET 0x700e0 --#define IVB_CURSOR_B_OFFSET 0x71080 --#define IVB_CURSOR_C_OFFSET 0x72080 --#define TGL_CURSOR_D_OFFSET 0x73080 -- - /* Display A control */ - #define _DSPAADDR_VLV 0x7017C /* vlv/chv */ - #define _DSPACNTR 0x70180 -diff --git a/drivers/gpu/drm/i915/intel_device_info.c b/drivers/gpu/drm/i915/intel_device_info.c -index 3a0d1cb2eaa9c..79523e55ca9c4 100644 ---- a/drivers/gpu/drm/i915/intel_device_info.c -+++ b/drivers/gpu/drm/i915/intel_device_info.c -@@ -574,7 +574,6 @@ void intel_device_info_driver_create(struct drm_i915_private *i915, - { - struct intel_device_info *info; - struct intel_runtime_info *runtime; -- struct intel_display_runtime_info *display_runtime; - - /* Setup the write-once "constant" device info */ - info = mkwrite_device_info(i915); -@@ -583,9 +582,12 @@ void intel_device_info_driver_create(struct drm_i915_private *i915, - /* Initialize initial runtime info from static const data and pdev. */ - runtime = RUNTIME_INFO(i915); - memcpy(runtime, &INTEL_INFO(i915)->__runtime, sizeof(*runtime)); -- display_runtime = DISPLAY_RUNTIME_INFO(i915); -- memcpy(display_runtime, &DISPLAY_INFO(i915)->__runtime_defaults, -- sizeof(*display_runtime)); -+ -+ /* Probe display support */ -+ info->display = intel_display_device_probe(device_id); -+ memcpy(DISPLAY_RUNTIME_INFO(i915), -+ &DISPLAY_INFO(i915)->__runtime_defaults, -+ sizeof(*DISPLAY_RUNTIME_INFO(i915))); - - runtime->device_id = device_id; - } --- -2.39.2 - diff --git a/queue-6.4/drm-i915-display-move-display-device-info-to-header-.patch b/queue-6.4/drm-i915-display-move-display-device-info-to-header-.patch deleted file mode 100644 index 9cd380e0271..00000000000 --- a/queue-6.4/drm-i915-display-move-display-device-info-to-header-.patch +++ /dev/null @@ -1,168 +0,0 @@ -From d03c0a4ab4a07a08638b0a42db245518dfa1e155 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Tue, 23 May 2023 12:56:04 -0700 -Subject: drm/i915/display: Move display device info to header under display/ - -From: Matt Roper - -[ Upstream commit 05aa8e0135094ae3d1e6837b5457a740266d7cfc ] - -Moving display-specific substructure definitions will help keep display -more self-contained and make it easier to re-use in other drivers (i.e., -Xe) in the future. - -Signed-off-by: Matt Roper -Reviewed-by: Andrzej Hajda -Reviewed-by: Lucas De Marchi -Link: https://patchwork.freedesktop.org/patch/msgid/20230523195609.73627-2-matthew.d.roper@intel.com -Stable-dep-of: 19db2062094c ("drm/i915: No 10bit gamma on desktop gen3 parts") -Signed-off-by: Sasha Levin ---- - .../drm/i915/display/intel_display_device.h | 60 +++++++++++++++++++ - drivers/gpu/drm/i915/intel_device_info.h | 49 +-------------- - 2 files changed, 62 insertions(+), 47 deletions(-) - create mode 100644 drivers/gpu/drm/i915/display/intel_display_device.h - -diff --git a/drivers/gpu/drm/i915/display/intel_display_device.h b/drivers/gpu/drm/i915/display/intel_display_device.h -new file mode 100644 -index 0000000000000..c689d582dbf13 ---- /dev/null -+++ b/drivers/gpu/drm/i915/display/intel_display_device.h -@@ -0,0 +1,60 @@ -+/* SPDX-License-Identifier: MIT */ -+/* -+ * Copyright © 2023 Intel Corporation -+ */ -+ -+#ifndef __INTEL_DISPLAY_DEVICE_H__ -+#define __INTEL_DISPLAY_DEVICE_H__ -+ -+#include -+ -+#include "display/intel_display_limits.h" -+ -+#define DEV_INFO_DISPLAY_FOR_EACH_FLAG(func) \ -+ /* Keep in alphabetical order */ \ -+ func(cursor_needs_physical); \ -+ func(has_cdclk_crawl); \ -+ func(has_cdclk_squash); \ -+ func(has_ddi); \ -+ func(has_dp_mst); \ -+ func(has_dsb); \ -+ func(has_fpga_dbg); \ -+ func(has_gmch); \ -+ func(has_hotplug); \ -+ func(has_hti); \ -+ func(has_ipc); \ -+ func(has_overlay); \ -+ func(has_psr); \ -+ func(has_psr_hw_tracking); \ -+ func(overlay_needs_physical); \ -+ func(supports_tv); -+ -+struct intel_display_device_info { -+ u8 abox_mask; -+ -+ struct { -+ u16 size; /* in blocks */ -+ u8 slice_mask; -+ } dbuf; -+ -+#define DEFINE_FLAG(name) u8 name:1 -+ DEV_INFO_DISPLAY_FOR_EACH_FLAG(DEFINE_FLAG); -+#undef DEFINE_FLAG -+ -+ /* Global register offset for the display engine */ -+ u32 mmio_offset; -+ -+ /* Register offsets for the various display pipes and transcoders */ -+ u32 pipe_offsets[I915_MAX_TRANSCODERS]; -+ u32 trans_offsets[I915_MAX_TRANSCODERS]; -+ u32 cursor_offsets[I915_MAX_PIPES]; -+ -+ struct { -+ u32 degamma_lut_size; -+ u32 gamma_lut_size; -+ u32 degamma_lut_tests; -+ u32 gamma_lut_tests; -+ } color; -+}; -+ -+#endif -diff --git a/drivers/gpu/drm/i915/intel_device_info.h b/drivers/gpu/drm/i915/intel_device_info.h -index f032f2500f505..c14bc3f5d0fa1 100644 ---- a/drivers/gpu/drm/i915/intel_device_info.h -+++ b/drivers/gpu/drm/i915/intel_device_info.h -@@ -29,7 +29,7 @@ - - #include "intel_step.h" - --#include "display/intel_display_limits.h" -+#include "display/intel_display_device.h" - - #include "gt/intel_engine_types.h" - #include "gt/intel_context_types.h" -@@ -180,25 +180,6 @@ enum intel_ppgtt_type { - func(unfenced_needs_alignment); \ - func(hws_needs_physical); - --#define DEV_INFO_DISPLAY_FOR_EACH_FLAG(func) \ -- /* Keep in alphabetical order */ \ -- func(cursor_needs_physical); \ -- func(has_cdclk_crawl); \ -- func(has_cdclk_squash); \ -- func(has_ddi); \ -- func(has_dp_mst); \ -- func(has_dsb); \ -- func(has_fpga_dbg); \ -- func(has_gmch); \ -- func(has_hotplug); \ -- func(has_hti); \ -- func(has_ipc); \ -- func(has_overlay); \ -- func(has_psr); \ -- func(has_psr_hw_tracking); \ -- func(overlay_needs_physical); \ -- func(supports_tv); -- - struct intel_ip_version { - u8 ver; - u8 rel; -@@ -276,33 +257,7 @@ struct intel_device_info { - DEV_INFO_FOR_EACH_FLAG(DEFINE_FLAG); - #undef DEFINE_FLAG - -- struct { -- u8 abox_mask; -- -- struct { -- u16 size; /* in blocks */ -- u8 slice_mask; -- } dbuf; -- --#define DEFINE_FLAG(name) u8 name:1 -- DEV_INFO_DISPLAY_FOR_EACH_FLAG(DEFINE_FLAG); --#undef DEFINE_FLAG -- -- /* Global register offset for the display engine */ -- u32 mmio_offset; -- -- /* Register offsets for the various display pipes and transcoders */ -- u32 pipe_offsets[I915_MAX_TRANSCODERS]; -- u32 trans_offsets[I915_MAX_TRANSCODERS]; -- u32 cursor_offsets[I915_MAX_PIPES]; -- -- struct { -- u32 degamma_lut_size; -- u32 gamma_lut_size; -- u32 degamma_lut_tests; -- u32 gamma_lut_tests; -- } color; -- } display; -+ struct intel_display_device_info display; - - /* - * Initial runtime info. Do not access outside of i915_driver_create(). --- -2.39.2 - diff --git a/queue-6.4/drm-i915-display-move-display-runtime-info-to-displa.patch b/queue-6.4/drm-i915-display-move-display-runtime-info-to-displa.patch deleted file mode 100644 index 71740bd4872..00000000000 --- a/queue-6.4/drm-i915-display-move-display-runtime-info-to-displa.patch +++ /dev/null @@ -1,1246 +0,0 @@ -From 45df7ce7a7b69ea2ba8cd079ebf977b2789b533b Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Tue, 23 May 2023 12:56:06 -0700 -Subject: drm/i915/display: Move display runtime info to display structure - -From: Matt Roper - -[ Upstream commit 18e0deeed8c80d8ec0adfff3312252028739ce52 ] - -Move the runtime info specific to display into display-specific -structures as has already been done with the constant display info. - -v2: - - Rename __runtime to __runtime_defaults for more clarity on the - purpose. (Andrzej) - - Move introduction of DISPLAY_INFO() to previous patch. (Andrzej) - - Drop NO_DISPLAY macro. (Andrzej) -v3: - - Use "{}" instead of "{ 0 }" for empty struct init. (Jani) - -Cc: Andrzej Hajda -Signed-off-by: Matt Roper -Reviewed-by: Andrzej Hajda -Acked-by: Jani Nikula -Link: https://patchwork.freedesktop.org/patch/msgid/20230523195609.73627-4-matthew.d.roper@intel.com -Stable-dep-of: 19db2062094c ("drm/i915: No 10bit gamma on desktop gen3 parts") -Signed-off-by: Sasha Levin ---- - drivers/gpu/drm/i915/display/intel_crtc.c | 2 +- - drivers/gpu/drm/i915/display/intel_cursor.c | 2 +- - drivers/gpu/drm/i915/display/intel_display.c | 2 +- - drivers/gpu/drm/i915/display/intel_display.h | 8 +- - .../drm/i915/display/intel_display_device.h | 23 ++ - drivers/gpu/drm/i915/display/intel_fbc.c | 6 +- - drivers/gpu/drm/i915/display/intel_hdcp.c | 2 +- - .../drm/i915/display/skl_universal_plane.c | 2 +- - drivers/gpu/drm/i915/i915_drv.h | 16 +- - drivers/gpu/drm/i915/i915_pci.c | 252 +++++++++++------- - drivers/gpu/drm/i915/intel_device_info.c | 101 +++---- - drivers/gpu/drm/i915/intel_device_info.h | 18 -- - drivers/gpu/drm/i915/intel_step.c | 8 +- - 13 files changed, 267 insertions(+), 175 deletions(-) - -diff --git a/drivers/gpu/drm/i915/display/intel_crtc.c b/drivers/gpu/drm/i915/display/intel_crtc.c -index ed45a69348548..349bc7f5f9a0d 100644 ---- a/drivers/gpu/drm/i915/display/intel_crtc.c -+++ b/drivers/gpu/drm/i915/display/intel_crtc.c -@@ -302,7 +302,7 @@ int intel_crtc_init(struct drm_i915_private *dev_priv, enum pipe pipe) - return PTR_ERR(crtc); - - crtc->pipe = pipe; -- crtc->num_scalers = RUNTIME_INFO(dev_priv)->num_scalers[pipe]; -+ crtc->num_scalers = DISPLAY_RUNTIME_INFO(dev_priv)->num_scalers[pipe]; - - if (DISPLAY_VER(dev_priv) >= 9) - primary = skl_universal_plane_create(dev_priv, pipe, -diff --git a/drivers/gpu/drm/i915/display/intel_cursor.c b/drivers/gpu/drm/i915/display/intel_cursor.c -index 3864da5f5c17f..b342fad180ca5 100644 ---- a/drivers/gpu/drm/i915/display/intel_cursor.c -+++ b/drivers/gpu/drm/i915/display/intel_cursor.c -@@ -814,7 +814,7 @@ intel_cursor_plane_create(struct drm_i915_private *dev_priv, - DRM_MODE_ROTATE_0 | - DRM_MODE_ROTATE_180); - -- zpos = RUNTIME_INFO(dev_priv)->num_sprites[pipe] + 1; -+ zpos = DISPLAY_RUNTIME_INFO(dev_priv)->num_sprites[pipe] + 1; - drm_plane_create_zpos_immutable_property(&cursor->base, zpos); - - if (DISPLAY_VER(dev_priv) >= 12) -diff --git a/drivers/gpu/drm/i915/display/intel_display.c b/drivers/gpu/drm/i915/display/intel_display.c -index 0aae9a1eb3d58..7749f95d5d02a 100644 ---- a/drivers/gpu/drm/i915/display/intel_display.c -+++ b/drivers/gpu/drm/i915/display/intel_display.c -@@ -3568,7 +3568,7 @@ static u8 bigjoiner_pipes(struct drm_i915_private *i915) - else - pipes = 0; - -- return pipes & RUNTIME_INFO(i915)->pipe_mask; -+ return pipes & DISPLAY_RUNTIME_INFO(i915)->pipe_mask; - } - - static bool transcoder_ddi_func_is_enabled(struct drm_i915_private *dev_priv, -diff --git a/drivers/gpu/drm/i915/display/intel_display.h b/drivers/gpu/drm/i915/display/intel_display.h -index 17ae321b70ba5..4065b6598cf31 100644 ---- a/drivers/gpu/drm/i915/display/intel_display.h -+++ b/drivers/gpu/drm/i915/display/intel_display.h -@@ -105,7 +105,7 @@ enum i9xx_plane_id { - }; - - #define plane_name(p) ((p) + 'A') --#define sprite_name(p, s) ((p) * RUNTIME_INFO(dev_priv)->num_sprites[(p)] + (s) + 'A') -+#define sprite_name(p, s) ((p) * DISPLAY_RUNTIME_INFO(dev_priv)->num_sprites[(p)] + (s) + 'A') - - #define for_each_plane_id_on_crtc(__crtc, __p) \ - for ((__p) = PLANE_PRIMARY; (__p) < I915_MAX_PLANES; (__p)++) \ -@@ -221,7 +221,7 @@ enum phy_fia { - - #define for_each_pipe(__dev_priv, __p) \ - for ((__p) = 0; (__p) < I915_MAX_PIPES; (__p)++) \ -- for_each_if(RUNTIME_INFO(__dev_priv)->pipe_mask & BIT(__p)) -+ for_each_if(DISPLAY_RUNTIME_INFO(__dev_priv)->pipe_mask & BIT(__p)) - - #define for_each_pipe_masked(__dev_priv, __p, __mask) \ - for_each_pipe(__dev_priv, __p) \ -@@ -229,7 +229,7 @@ enum phy_fia { - - #define for_each_cpu_transcoder(__dev_priv, __t) \ - for ((__t) = 0; (__t) < I915_MAX_TRANSCODERS; (__t)++) \ -- for_each_if (RUNTIME_INFO(__dev_priv)->cpu_transcoder_mask & BIT(__t)) -+ for_each_if (DISPLAY_RUNTIME_INFO(__dev_priv)->cpu_transcoder_mask & BIT(__t)) - - #define for_each_cpu_transcoder_masked(__dev_priv, __t, __mask) \ - for_each_cpu_transcoder(__dev_priv, __t) \ -@@ -237,7 +237,7 @@ enum phy_fia { - - #define for_each_sprite(__dev_priv, __p, __s) \ - for ((__s) = 0; \ -- (__s) < RUNTIME_INFO(__dev_priv)->num_sprites[(__p)]; \ -+ (__s) < DISPLAY_RUNTIME_INFO(__dev_priv)->num_sprites[(__p)]; \ - (__s)++) - - #define for_each_port(__port) \ -diff --git a/drivers/gpu/drm/i915/display/intel_display_device.h b/drivers/gpu/drm/i915/display/intel_display_device.h -index c689d582dbf13..613607fad5af0 100644 ---- a/drivers/gpu/drm/i915/display/intel_display_device.h -+++ b/drivers/gpu/drm/i915/display/intel_display_device.h -@@ -29,7 +29,30 @@ - func(overlay_needs_physical); \ - func(supports_tv); - -+struct intel_display_runtime_info { -+ struct { -+ u16 ver; -+ u16 rel; -+ u16 step; -+ } ip; -+ -+ u8 pipe_mask; -+ u8 cpu_transcoder_mask; -+ -+ u8 num_sprites[I915_MAX_PIPES]; -+ u8 num_scalers[I915_MAX_PIPES]; -+ -+ u8 fbc_mask; -+ -+ bool has_hdcp; -+ bool has_dmc; -+ bool has_dsc; -+}; -+ - struct intel_display_device_info { -+ /* Initial runtime info. */ -+ const struct intel_display_runtime_info __runtime_defaults; -+ - u8 abox_mask; - - struct { -diff --git a/drivers/gpu/drm/i915/display/intel_fbc.c b/drivers/gpu/drm/i915/display/intel_fbc.c -index b507ff944864e..61914a1fe58df 100644 ---- a/drivers/gpu/drm/i915/display/intel_fbc.c -+++ b/drivers/gpu/drm/i915/display/intel_fbc.c -@@ -55,7 +55,7 @@ - - #define for_each_fbc_id(__dev_priv, __fbc_id) \ - for ((__fbc_id) = INTEL_FBC_A; (__fbc_id) < I915_MAX_FBCS; (__fbc_id)++) \ -- for_each_if(RUNTIME_INFO(__dev_priv)->fbc_mask & BIT(__fbc_id)) -+ for_each_if(DISPLAY_RUNTIME_INFO(__dev_priv)->fbc_mask & BIT(__fbc_id)) - - #define for_each_intel_fbc(__dev_priv, __fbc, __fbc_id) \ - for_each_fbc_id((__dev_priv), (__fbc_id)) \ -@@ -1707,10 +1707,10 @@ void intel_fbc_init(struct drm_i915_private *i915) - enum intel_fbc_id fbc_id; - - if (!drm_mm_initialized(&i915->mm.stolen)) -- RUNTIME_INFO(i915)->fbc_mask = 0; -+ DISPLAY_RUNTIME_INFO(i915)->fbc_mask = 0; - - if (need_fbc_vtd_wa(i915)) -- RUNTIME_INFO(i915)->fbc_mask = 0; -+ DISPLAY_RUNTIME_INFO(i915)->fbc_mask = 0; - - i915->params.enable_fbc = intel_sanitize_fbc_option(i915); - drm_dbg_kms(&i915->drm, "Sanitized enable_fbc value: %d\n", -diff --git a/drivers/gpu/drm/i915/display/intel_hdcp.c b/drivers/gpu/drm/i915/display/intel_hdcp.c -index b183efab04a1d..ac46350074df2 100644 ---- a/drivers/gpu/drm/i915/display/intel_hdcp.c -+++ b/drivers/gpu/drm/i915/display/intel_hdcp.c -@@ -1141,7 +1141,7 @@ static void intel_hdcp_prop_work(struct work_struct *work) - - bool is_hdcp_supported(struct drm_i915_private *dev_priv, enum port port) - { -- return RUNTIME_INFO(dev_priv)->has_hdcp && -+ return DISPLAY_RUNTIME_INFO(dev_priv)->has_hdcp && - (DISPLAY_VER(dev_priv) >= 12 || port < PORT_E); - } - -diff --git a/drivers/gpu/drm/i915/display/skl_universal_plane.c b/drivers/gpu/drm/i915/display/skl_universal_plane.c -index 8ea0598a5a07e..5df7b02483629 100644 ---- a/drivers/gpu/drm/i915/display/skl_universal_plane.c -+++ b/drivers/gpu/drm/i915/display/skl_universal_plane.c -@@ -1936,7 +1936,7 @@ static enum intel_fbc_id skl_fbc_id_for_pipe(enum pipe pipe) - static bool skl_plane_has_fbc(struct drm_i915_private *dev_priv, - enum intel_fbc_id fbc_id, enum plane_id plane_id) - { -- if ((RUNTIME_INFO(dev_priv)->fbc_mask & BIT(fbc_id)) == 0) -+ if ((DISPLAY_RUNTIME_INFO(dev_priv)->fbc_mask & BIT(fbc_id)) == 0) - return false; - - return plane_id == PLANE_PRIMARY; -diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h -index 0c341107363f7..dbdecf1ee24fe 100644 ---- a/drivers/gpu/drm/i915/i915_drv.h -+++ b/drivers/gpu/drm/i915/i915_drv.h -@@ -205,6 +205,7 @@ struct drm_i915_private { - - const struct intel_device_info __info; /* Use INTEL_INFO() to access. */ - struct intel_runtime_info __runtime; /* Use RUNTIME_INFO() to access. */ -+ struct intel_display_runtime_info __display_runtime; /* Access with DISPLAY_RUNTIME_INFO() */ - struct intel_driver_caps caps; - - struct i915_dsm dsm; -@@ -410,6 +411,7 @@ static inline struct intel_gt *to_gt(struct drm_i915_private *i915) - #define INTEL_INFO(dev_priv) (&(dev_priv)->__info) - #define DISPLAY_INFO(i915) (INTEL_INFO(i915)->display) - #define RUNTIME_INFO(dev_priv) (&(dev_priv)->__runtime) -+#define DISPLAY_RUNTIME_INFO(i915) (&(i915)->__display_runtime) - #define DRIVER_CAPS(dev_priv) (&(dev_priv)->caps) - - #define INTEL_DEVID(dev_priv) (RUNTIME_INFO(dev_priv)->device_id) -@@ -428,7 +430,7 @@ static inline struct intel_gt *to_gt(struct drm_i915_private *i915) - #define IS_MEDIA_VER(i915, from, until) \ - (MEDIA_VER(i915) >= (from) && MEDIA_VER(i915) <= (until)) - --#define DISPLAY_VER(i915) (RUNTIME_INFO(i915)->display.ip.ver) -+#define DISPLAY_VER(i915) (DISPLAY_RUNTIME_INFO(i915)->ip.ver) - #define IS_DISPLAY_VER(i915, from, until) \ - (DISPLAY_VER(i915) >= (from) && DISPLAY_VER(i915) <= (until)) - -@@ -811,7 +813,7 @@ IS_SUBPLATFORM(const struct drm_i915_private *i915, - #define I915_HAS_HOTPLUG(dev_priv) (DISPLAY_INFO(dev_priv)->has_hotplug) - - #define HAS_FW_BLC(dev_priv) (DISPLAY_VER(dev_priv) > 2) --#define HAS_FBC(dev_priv) (RUNTIME_INFO(dev_priv)->fbc_mask != 0) -+#define HAS_FBC(dev_priv) (DISPLAY_RUNTIME_INFO(dev_priv)->fbc_mask != 0) - #define HAS_CUR_FBC(dev_priv) (!HAS_GMCH(dev_priv) && DISPLAY_VER(dev_priv) >= 7) - - #define HAS_DPT(dev_priv) (DISPLAY_VER(dev_priv) >= 13) -@@ -831,7 +833,7 @@ IS_SUBPLATFORM(const struct drm_i915_private *i915, - #define HAS_PSR_HW_TRACKING(dev_priv) \ - (DISPLAY_INFO(dev_priv)->has_psr_hw_tracking) - #define HAS_PSR2_SEL_FETCH(dev_priv) (DISPLAY_VER(dev_priv) >= 12) --#define HAS_TRANSCODER(dev_priv, trans) ((RUNTIME_INFO(dev_priv)->cpu_transcoder_mask & BIT(trans)) != 0) -+#define HAS_TRANSCODER(dev_priv, trans) ((DISPLAY_RUNTIME_INFO(dev_priv)->cpu_transcoder_mask & BIT(trans)) != 0) - - #define HAS_RC6(dev_priv) (INTEL_INFO(dev_priv)->has_rc6) - #define HAS_RC6p(dev_priv) (INTEL_INFO(dev_priv)->has_rc6p) -@@ -839,9 +841,9 @@ IS_SUBPLATFORM(const struct drm_i915_private *i915, - - #define HAS_RPS(dev_priv) (INTEL_INFO(dev_priv)->has_rps) - --#define HAS_DMC(dev_priv) (RUNTIME_INFO(dev_priv)->has_dmc) -+#define HAS_DMC(dev_priv) (DISPLAY_RUNTIME_INFO(dev_priv)->has_dmc) - #define HAS_DSB(dev_priv) (DISPLAY_INFO(dev_priv)->has_dsb) --#define HAS_DSC(__i915) (RUNTIME_INFO(__i915)->has_dsc) -+#define HAS_DSC(__i915) (DISPLAY_RUNTIME_INFO(__i915)->has_dsc) - #define HAS_HW_SAGV_WM(i915) (DISPLAY_VER(i915) >= 13 && !IS_DGFX(i915)) - - #define HAS_HECI_PXP(dev_priv) \ -@@ -903,9 +905,9 @@ IS_SUBPLATFORM(const struct drm_i915_private *i915, - #define NUM_L3_SLICES(dev_priv) (IS_HSW_GT3(dev_priv) ? \ - 2 : HAS_L3_DPF(dev_priv)) - --#define INTEL_NUM_PIPES(dev_priv) (hweight8(RUNTIME_INFO(dev_priv)->pipe_mask)) -+#define INTEL_NUM_PIPES(dev_priv) (hweight8(DISPLAY_RUNTIME_INFO(dev_priv)->pipe_mask)) - --#define HAS_DISPLAY(dev_priv) (RUNTIME_INFO(dev_priv)->pipe_mask != 0) -+#define HAS_DISPLAY(dev_priv) (DISPLAY_RUNTIME_INFO(dev_priv)->pipe_mask != 0) - - #define HAS_VRR(i915) (DISPLAY_VER(i915) >= 11) - -diff --git a/drivers/gpu/drm/i915/i915_pci.c b/drivers/gpu/drm/i915/i915_pci.c -index 3d15f5af563d5..2de23af68963a 100644 ---- a/drivers/gpu/drm/i915/i915_pci.c -+++ b/drivers/gpu/drm/i915/i915_pci.c -@@ -39,10 +39,9 @@ - #define PLATFORM(x) .platform = (x) - #define GEN(x) \ - .__runtime.graphics.ip.ver = (x), \ -- .__runtime.media.ip.ver = (x), \ -- .__runtime.display.ip.ver = (x) -+ .__runtime.media.ip.ver = (x) - --#define NO_DISPLAY .__runtime.pipe_mask = 0 -+static const struct intel_display_device_info no_display = {}; - - #define I845_PIPE_OFFSETS \ - .pipe_offsets = { \ -@@ -178,7 +177,12 @@ - .has_gmch = 1, \ - I9XX_PIPE_OFFSETS, \ - I9XX_CURSOR_OFFSETS, \ -- I9XX_COLORS -+ I9XX_COLORS, \ -+ \ -+ .__runtime_defaults.ip.ver = 2, \ -+ .__runtime_defaults.pipe_mask = BIT(PIPE_A) | BIT(PIPE_B), \ -+ .__runtime_defaults.cpu_transcoder_mask = \ -+ BIT(TRANSCODER_A) | BIT(TRANSCODER_B) - - static const struct intel_display_device_info i830_display = { - I830_DISPLAY, -@@ -187,8 +191,6 @@ static const struct intel_display_device_info i830_display = { - #define I830_FEATURES \ - GEN(2), \ - .is_mobile = 1, \ -- .__runtime.pipe_mask = BIT(PIPE_A) | BIT(PIPE_B), \ -- .__runtime.cpu_transcoder_mask = BIT(TRANSCODER_A) | BIT(TRANSCODER_B), \ - .gpu_reset_clobbers_display = true, \ - .has_3d_pipeline = 1, \ - .hws_needs_physical = 1, \ -@@ -206,7 +208,11 @@ static const struct intel_display_device_info i830_display = { - .has_gmch = 1, \ - I845_PIPE_OFFSETS, \ - I845_CURSOR_OFFSETS, \ -- I845_COLORS -+ I845_COLORS, \ -+ \ -+ .__runtime_defaults.ip.ver = 2, \ -+ .__runtime_defaults.pipe_mask = BIT(PIPE_A), \ -+ .__runtime_defaults.cpu_transcoder_mask = BIT(TRANSCODER_A) - - static const struct intel_display_device_info i845_display = { - I845_DISPLAY, -@@ -214,8 +220,6 @@ static const struct intel_display_device_info i845_display = { - - #define I845_FEATURES \ - GEN(2), \ -- .__runtime.pipe_mask = BIT(PIPE_A), \ -- .__runtime.cpu_transcoder_mask = BIT(TRANSCODER_A), \ - .has_3d_pipeline = 1, \ - .gpu_reset_clobbers_display = true, \ - .hws_needs_physical = 1, \ -@@ -241,24 +245,26 @@ static const struct intel_device_info i845g_info = { - - static const struct intel_display_device_info i85x_display = { - I830_DISPLAY, -+ -+ .__runtime_defaults.fbc_mask = BIT(INTEL_FBC_A), - }; - - static const struct intel_device_info i85x_info = { - I830_FEATURES, - PLATFORM(INTEL_I85X), - .display = &i85x_display, -- .__runtime.fbc_mask = BIT(INTEL_FBC_A), - }; - - static const struct intel_display_device_info i865g_display = { - I845_DISPLAY, -+ -+ .__runtime_defaults.fbc_mask = BIT(INTEL_FBC_A), - }; - - static const struct intel_device_info i865g_info = { - I845_FEATURES, - PLATFORM(INTEL_I865G), - .display = &i865g_display, -- .__runtime.fbc_mask = BIT(INTEL_FBC_A), - }; - - #define GEN3_DISPLAY \ -@@ -266,7 +272,12 @@ static const struct intel_device_info i865g_info = { - .has_overlay = 1, \ - I9XX_PIPE_OFFSETS, \ - I9XX_CURSOR_OFFSETS, \ -- I9XX_COLORS -+ I9XX_COLORS, \ -+ \ -+ .__runtime_defaults.ip.ver = 3, \ -+ .__runtime_defaults.pipe_mask = BIT(PIPE_A) | BIT(PIPE_B), \ -+ .__runtime_defaults.cpu_transcoder_mask = \ -+ BIT(TRANSCODER_A) | BIT(TRANSCODER_B) - - static const struct intel_display_device_info i915g_display = { - GEN3_DISPLAY, -@@ -279,6 +290,8 @@ static const struct intel_display_device_info i915gm_display = { - .cursor_needs_physical = 1, - .overlay_needs_physical = 1, - .supports_tv = 1, -+ -+ .__runtime_defaults.fbc_mask = BIT(INTEL_FBC_A), - }; - - static const struct intel_display_device_info i945g_display = { -@@ -294,6 +307,8 @@ static const struct intel_display_device_info i945gm_display = { - .cursor_needs_physical = 1, - .overlay_needs_physical = 1, - .supports_tv = 1, -+ -+ .__runtime_defaults.fbc_mask = BIT(INTEL_FBC_A), - }; - - static const struct intel_display_device_info g33_display = { -@@ -303,8 +318,6 @@ static const struct intel_display_device_info g33_display = { - - #define GEN3_FEATURES \ - GEN(3), \ -- .__runtime.pipe_mask = BIT(PIPE_A) | BIT(PIPE_B), \ -- .__runtime.cpu_transcoder_mask = BIT(TRANSCODER_A) | BIT(TRANSCODER_B), \ - .gpu_reset_clobbers_display = true, \ - .__runtime.platform_engine_mask = BIT(RCS0), \ - .has_3d_pipeline = 1, \ -@@ -328,7 +341,6 @@ static const struct intel_device_info i915gm_info = { - PLATFORM(INTEL_I915GM), - .display = &i915gm_display, - .is_mobile = 1, -- .__runtime.fbc_mask = BIT(INTEL_FBC_A), - .hws_needs_physical = 1, - .unfenced_needs_alignment = 1, - }; -@@ -346,7 +358,6 @@ static const struct intel_device_info i945gm_info = { - PLATFORM(INTEL_I945GM), - .display = &i945gm_display, - .is_mobile = 1, -- .__runtime.fbc_mask = BIT(INTEL_FBC_A), - .hws_needs_physical = 1, - .unfenced_needs_alignment = 1, - }; -@@ -378,7 +389,12 @@ static const struct intel_device_info pnv_m_info = { - .has_gmch = 1, \ - I9XX_PIPE_OFFSETS, \ - I9XX_CURSOR_OFFSETS, \ -- I9XX_COLORS -+ I9XX_COLORS, \ -+ \ -+ .__runtime_defaults.ip.ver = 4, \ -+ .__runtime_defaults.pipe_mask = BIT(PIPE_A) | BIT(PIPE_B), \ -+ .__runtime_defaults.cpu_transcoder_mask = \ -+ BIT(TRANSCODER_A) | BIT(TRANSCODER_B) - - static const struct intel_display_device_info i965g_display = { - GEN4_DISPLAY, -@@ -389,6 +405,8 @@ static const struct intel_display_device_info i965gm_display = { - GEN4_DISPLAY, - .has_overlay = 1, - .supports_tv = 1, -+ -+ .__runtime_defaults.fbc_mask = BIT(INTEL_FBC_A), - }; - - static const struct intel_display_device_info g45_display = { -@@ -398,12 +416,12 @@ static const struct intel_display_device_info g45_display = { - static const struct intel_display_device_info gm45_display = { - GEN4_DISPLAY, - .supports_tv = 1, -+ -+ .__runtime_defaults.fbc_mask = BIT(INTEL_FBC_A), - }; - - #define GEN4_FEATURES \ - GEN(4), \ -- .__runtime.pipe_mask = BIT(PIPE_A) | BIT(PIPE_B), \ -- .__runtime.cpu_transcoder_mask = BIT(TRANSCODER_A) | BIT(TRANSCODER_B), \ - .gpu_reset_clobbers_display = true, \ - .__runtime.platform_engine_mask = BIT(RCS0), \ - .has_3d_pipeline = 1, \ -@@ -426,7 +444,6 @@ static const struct intel_device_info i965gm_info = { - PLATFORM(INTEL_I965GM), - .display = &i965gm_display, - .is_mobile = 1, -- .__runtime.fbc_mask = BIT(INTEL_FBC_A), - .hws_needs_physical = 1, - .has_snoop = false, - }; -@@ -443,7 +460,6 @@ static const struct intel_device_info gm45_info = { - GEN4_FEATURES, - PLATFORM(INTEL_GM45), - .is_mobile = 1, -- .__runtime.fbc_mask = BIT(INTEL_FBC_A), - .__runtime.platform_engine_mask = BIT(RCS0) | BIT(VCS0), - .display = &gm45_display, - .gpu_reset_clobbers_display = false, -@@ -451,8 +467,6 @@ static const struct intel_device_info gm45_info = { - - #define GEN5_FEATURES \ - GEN(5), \ -- .__runtime.pipe_mask = BIT(PIPE_A) | BIT(PIPE_B), \ -- .__runtime.cpu_transcoder_mask = BIT(TRANSCODER_A) | BIT(TRANSCODER_B), \ - .__runtime.platform_engine_mask = BIT(RCS0) | BIT(VCS0), \ - .has_3d_pipeline = 1, \ - .has_snoop = true, \ -@@ -467,7 +481,12 @@ static const struct intel_device_info gm45_info = { - .has_hotplug = 1, \ - I9XX_PIPE_OFFSETS, \ - I9XX_CURSOR_OFFSETS, \ -- ILK_COLORS -+ ILK_COLORS, \ -+ \ -+ .__runtime_defaults.ip.ver = 5, \ -+ .__runtime_defaults.pipe_mask = BIT(PIPE_A) | BIT(PIPE_B), \ -+ .__runtime_defaults.cpu_transcoder_mask = \ -+ BIT(TRANSCODER_A) | BIT(TRANSCODER_B) - - static const struct intel_display_device_info ilk_d_display = { - ILK_DISPLAY, -@@ -481,6 +500,8 @@ static const struct intel_device_info ilk_d_info = { - - static const struct intel_display_device_info ilk_m_display = { - ILK_DISPLAY, -+ -+ .__runtime_defaults.fbc_mask = BIT(INTEL_FBC_A), - }; - - static const struct intel_device_info ilk_m_info = { -@@ -489,14 +510,10 @@ static const struct intel_device_info ilk_m_info = { - .display = &ilk_m_display, - .is_mobile = 1, - .has_rps = true, -- .__runtime.fbc_mask = BIT(INTEL_FBC_A), - }; - - #define GEN6_FEATURES \ - GEN(6), \ -- .__runtime.pipe_mask = BIT(PIPE_A) | BIT(PIPE_B), \ -- .__runtime.cpu_transcoder_mask = BIT(TRANSCODER_A) | BIT(TRANSCODER_B), \ -- .__runtime.fbc_mask = BIT(INTEL_FBC_A), \ - .__runtime.platform_engine_mask = BIT(RCS0) | BIT(VCS0) | BIT(BCS0), \ - .has_3d_pipeline = 1, \ - .has_coherent_ggtt = true, \ -@@ -516,6 +533,12 @@ static const struct intel_display_device_info snb_display = { - I9XX_PIPE_OFFSETS, - I9XX_CURSOR_OFFSETS, - ILK_COLORS, -+ -+ .__runtime_defaults.ip.ver = 6, -+ .__runtime_defaults.pipe_mask = BIT(PIPE_A) | BIT(PIPE_B), -+ .__runtime_defaults.cpu_transcoder_mask = -+ BIT(TRANSCODER_A) | BIT(TRANSCODER_B), -+ .__runtime_defaults.fbc_mask = BIT(INTEL_FBC_A), - }; - - #define SNB_D_PLATFORM \ -@@ -554,9 +577,6 @@ static const struct intel_device_info snb_m_gt2_info = { - - #define GEN7_FEATURES \ - GEN(7), \ -- .__runtime.pipe_mask = BIT(PIPE_A) | BIT(PIPE_B) | BIT(PIPE_C), \ -- .__runtime.cpu_transcoder_mask = BIT(TRANSCODER_A) | BIT(TRANSCODER_B) | BIT(TRANSCODER_C), \ -- .__runtime.fbc_mask = BIT(INTEL_FBC_A), \ - .__runtime.platform_engine_mask = BIT(RCS0) | BIT(VCS0) | BIT(BCS0), \ - .has_3d_pipeline = 1, \ - .has_coherent_ggtt = true, \ -@@ -581,6 +601,12 @@ static const struct intel_display_device_info ivb_display = { - IVB_PIPE_OFFSETS, - IVB_CURSOR_OFFSETS, - IVB_COLORS, -+ -+ .__runtime_defaults.ip.ver = 7, -+ .__runtime_defaults.pipe_mask = BIT(PIPE_A) | BIT(PIPE_B) | BIT(PIPE_C), -+ .__runtime_defaults.cpu_transcoder_mask = -+ BIT(TRANSCODER_A) | BIT(TRANSCODER_B) | BIT(TRANSCODER_C), -+ .__runtime_defaults.fbc_mask = BIT(INTEL_FBC_A), - }; - - static const struct intel_device_info ivb_d_gt1_info = { -@@ -616,7 +642,7 @@ static const struct intel_device_info ivb_m_gt2_info = { - static const struct intel_device_info ivb_q_info = { - GEN7_FEATURES, - PLATFORM(INTEL_IVYBRIDGE), -- NO_DISPLAY, -+ .display = &no_display, - .gt = 2, - .has_l3_dpf = 1, - }; -@@ -628,14 +654,17 @@ static const struct intel_display_device_info vlv_display = { - I9XX_PIPE_OFFSETS, - I9XX_CURSOR_OFFSETS, - I9XX_COLORS, -+ -+ .__runtime_defaults.ip.ver = 7, -+ .__runtime_defaults.pipe_mask = BIT(PIPE_A) | BIT(PIPE_B), -+ .__runtime_defaults.cpu_transcoder_mask = -+ BIT(TRANSCODER_A) | BIT(TRANSCODER_B), - }; - - static const struct intel_device_info vlv_info = { - PLATFORM(INTEL_VALLEYVIEW), - GEN(7), - .is_lp = 1, -- .__runtime.pipe_mask = BIT(PIPE_A) | BIT(PIPE_B), -- .__runtime.cpu_transcoder_mask = BIT(TRANSCODER_A) | BIT(TRANSCODER_B), - .display = &vlv_display, - .has_runtime_pm = 1, - .has_rc6 = 1, -@@ -654,8 +683,6 @@ static const struct intel_device_info vlv_info = { - #define G75_FEATURES \ - GEN7_FEATURES, \ - .__runtime.platform_engine_mask = BIT(RCS0) | BIT(VCS0) | BIT(BCS0) | BIT(VECS0), \ -- .__runtime.cpu_transcoder_mask = BIT(TRANSCODER_A) | BIT(TRANSCODER_B) | \ -- BIT(TRANSCODER_C) | BIT(TRANSCODER_EDP), \ - .has_rc6p = 0 /* RC6p removed-by HSW */, \ - .has_runtime_pm = 1 - -@@ -672,6 +699,13 @@ static const struct intel_display_device_info hsw_display = { - HSW_PIPE_OFFSETS, - IVB_CURSOR_OFFSETS, - IVB_COLORS, -+ -+ .__runtime_defaults.ip.ver = 7, -+ .__runtime_defaults.pipe_mask = BIT(PIPE_A) | BIT(PIPE_B) | BIT(PIPE_C), -+ .__runtime_defaults.cpu_transcoder_mask = -+ BIT(TRANSCODER_A) | BIT(TRANSCODER_B) | -+ BIT(TRANSCODER_C) | BIT(TRANSCODER_EDP), -+ .__runtime_defaults.fbc_mask = BIT(INTEL_FBC_A), - }; - - static const struct intel_device_info hsw_gt1_info = { -@@ -709,6 +743,13 @@ static const struct intel_display_device_info bdw_display = { - HSW_PIPE_OFFSETS, - IVB_CURSOR_OFFSETS, - IVB_COLORS, -+ -+ .__runtime_defaults.ip.ver = 8, -+ .__runtime_defaults.pipe_mask = BIT(PIPE_A) | BIT(PIPE_B) | BIT(PIPE_C), -+ .__runtime_defaults.cpu_transcoder_mask = -+ BIT(TRANSCODER_A) | BIT(TRANSCODER_B) | -+ BIT(TRANSCODER_C) | BIT(TRANSCODER_EDP), -+ .__runtime_defaults.fbc_mask = BIT(INTEL_FBC_A), - }; - - #define BDW_PLATFORM \ -@@ -751,13 +792,16 @@ static const struct intel_display_device_info chv_display = { - CHV_PIPE_OFFSETS, - CHV_CURSOR_OFFSETS, - CHV_COLORS, -+ -+ .__runtime_defaults.ip.ver = 8, -+ .__runtime_defaults.pipe_mask = BIT(PIPE_A) | BIT(PIPE_B) | BIT(PIPE_C), -+ .__runtime_defaults.cpu_transcoder_mask = -+ BIT(TRANSCODER_A) | BIT(TRANSCODER_B) | BIT(TRANSCODER_C), - }; - - static const struct intel_device_info chv_info = { - PLATFORM(INTEL_CHERRYVIEW), - GEN(8), -- .__runtime.pipe_mask = BIT(PIPE_A) | BIT(PIPE_B) | BIT(PIPE_C), -- .__runtime.cpu_transcoder_mask = BIT(TRANSCODER_A) | BIT(TRANSCODER_B) | BIT(TRANSCODER_C), - .display = &chv_display, - .is_lp = 1, - .__runtime.platform_engine_mask = BIT(RCS0) | BIT(VCS0) | BIT(BCS0) | BIT(VECS0), -@@ -784,9 +828,7 @@ static const struct intel_device_info chv_info = { - GEN8_FEATURES, \ - GEN(9), \ - GEN9_DEFAULT_PAGE_SIZES, \ -- .__runtime.has_dmc = 1, \ -- .has_gt_uc = 1, \ -- .__runtime.has_hdcp = 1 -+ .has_gt_uc = 1 - - static const struct intel_display_device_info skl_display = { - .dbuf.size = 896 - 4, /* 4 blocks for bypass path allocation */ -@@ -801,6 +843,15 @@ static const struct intel_display_device_info skl_display = { - HSW_PIPE_OFFSETS, - IVB_CURSOR_OFFSETS, - IVB_COLORS, -+ -+ .__runtime_defaults.ip.ver = 9, -+ .__runtime_defaults.has_dmc = 1, -+ .__runtime_defaults.has_hdcp = 1, -+ .__runtime_defaults.pipe_mask = BIT(PIPE_A) | BIT(PIPE_B) | BIT(PIPE_C), -+ .__runtime_defaults.cpu_transcoder_mask = -+ BIT(TRANSCODER_A) | BIT(TRANSCODER_B) | -+ BIT(TRANSCODER_C) | BIT(TRANSCODER_EDP), -+ .__runtime_defaults.fbc_mask = BIT(INTEL_FBC_A), - }; - - #define SKL_PLATFORM \ -@@ -841,16 +892,9 @@ static const struct intel_device_info skl_gt4_info = { - GEN(9), \ - .is_lp = 1, \ - .__runtime.platform_engine_mask = BIT(RCS0) | BIT(VCS0) | BIT(BCS0) | BIT(VECS0), \ -- .__runtime.pipe_mask = BIT(PIPE_A) | BIT(PIPE_B) | BIT(PIPE_C), \ -- .__runtime.cpu_transcoder_mask = BIT(TRANSCODER_A) | BIT(TRANSCODER_B) | \ -- BIT(TRANSCODER_C) | BIT(TRANSCODER_EDP) | \ -- BIT(TRANSCODER_DSI_A) | BIT(TRANSCODER_DSI_C), \ - .has_3d_pipeline = 1, \ - .has_64bit_reloc = 1, \ -- .__runtime.fbc_mask = BIT(INTEL_FBC_A), \ -- .__runtime.has_hdcp = 1, \ - .has_runtime_pm = 1, \ -- .__runtime.has_dmc = 1, \ - .has_rc6 = 1, \ - .has_rps = true, \ - .has_logical_ring_contexts = 1, \ -@@ -875,11 +919,22 @@ static const struct intel_device_info skl_gt4_info = { - .has_psr_hw_tracking = 1, \ - HSW_PIPE_OFFSETS, \ - IVB_CURSOR_OFFSETS, \ -- IVB_COLORS -+ IVB_COLORS, \ -+ \ -+ .__runtime_defaults.has_dmc = 1, \ -+ .__runtime_defaults.has_hdcp = 1, \ -+ .__runtime_defaults.fbc_mask = BIT(INTEL_FBC_A), \ -+ .__runtime_defaults.pipe_mask = BIT(PIPE_A) | BIT(PIPE_B) | BIT(PIPE_C), \ -+ .__runtime_defaults.cpu_transcoder_mask = \ -+ BIT(TRANSCODER_A) | BIT(TRANSCODER_B) | \ -+ BIT(TRANSCODER_C) | BIT(TRANSCODER_EDP) | \ -+ BIT(TRANSCODER_DSI_A) | BIT(TRANSCODER_DSI_C) - - static const struct intel_display_device_info bxt_display = { - GEN9_LP_DISPLAY, - .dbuf.size = 512 - 4, /* 4 blocks for bypass path allocation */ -+ -+ .__runtime_defaults.ip.ver = 9, - }; - - static const struct intel_device_info bxt_info = { -@@ -892,12 +947,13 @@ static const struct intel_display_device_info glk_display = { - GEN9_LP_DISPLAY, - .dbuf.size = 1024 - 4, /* 4 blocks for bypass path allocation */ - GLK_COLORS, -+ -+ .__runtime_defaults.ip.ver = 10, - }; - - static const struct intel_device_info glk_info = { - GEN9_LP_FEATURES, - PLATFORM(INTEL_GEMINILAKE), -- .__runtime.display.ip.ver = 10, - .display = &glk_display, - }; - -@@ -973,11 +1029,7 @@ static const struct intel_device_info cml_gt2_info = { - #define GEN11_FEATURES \ - GEN9_FEATURES, \ - GEN11_DEFAULT_PAGE_SIZES, \ -- .__runtime.cpu_transcoder_mask = BIT(TRANSCODER_A) | BIT(TRANSCODER_B) | \ -- BIT(TRANSCODER_C) | BIT(TRANSCODER_EDP) | \ -- BIT(TRANSCODER_DSI_0) | BIT(TRANSCODER_DSI_1), \ - GEN(11), \ -- .__runtime.has_dsc = 1, \ - .has_coherent_ggtt = false, \ - .has_logical_ring_elsq = 1 - -@@ -1010,6 +1062,17 @@ static const struct intel_display_device_info gen11_display = { - }, - IVB_CURSOR_OFFSETS, - ICL_COLORS, -+ -+ .__runtime_defaults.ip.ver = 11, -+ .__runtime_defaults.has_dmc = 1, -+ .__runtime_defaults.has_dsc = 1, -+ .__runtime_defaults.has_hdcp = 1, -+ .__runtime_defaults.pipe_mask = BIT(PIPE_A) | BIT(PIPE_B) | BIT(PIPE_C), -+ .__runtime_defaults.cpu_transcoder_mask = -+ BIT(TRANSCODER_A) | BIT(TRANSCODER_B) | -+ BIT(TRANSCODER_C) | BIT(TRANSCODER_EDP) | -+ BIT(TRANSCODER_DSI_0) | BIT(TRANSCODER_DSI_1), -+ .__runtime_defaults.fbc_mask = BIT(INTEL_FBC_A), - }; - - static const struct intel_device_info icl_info = { -@@ -1039,10 +1102,6 @@ static const struct intel_device_info jsl_info = { - #define GEN12_FEATURES \ - GEN11_FEATURES, \ - GEN(12), \ -- .__runtime.pipe_mask = BIT(PIPE_A) | BIT(PIPE_B) | BIT(PIPE_C) | BIT(PIPE_D), \ -- .__runtime.cpu_transcoder_mask = BIT(TRANSCODER_A) | BIT(TRANSCODER_B) | \ -- BIT(TRANSCODER_C) | BIT(TRANSCODER_D) | \ -- BIT(TRANSCODER_DSI_0) | BIT(TRANSCODER_DSI_1), \ - .has_global_mocs = 1, \ - .has_pxp = 1 - -@@ -1075,7 +1134,19 @@ static const struct intel_device_info jsl_info = { - [TRANSCODER_DSI_1] = TRANSCODER_DSI1_OFFSET, \ - }, \ - TGL_CURSOR_OFFSETS, \ -- ICL_COLORS -+ ICL_COLORS, \ -+ \ -+ .__runtime_defaults.ip.ver = 12, \ -+ .__runtime_defaults.has_dmc = 1, \ -+ .__runtime_defaults.has_dsc = 1, \ -+ .__runtime_defaults.has_hdcp = 1, \ -+ .__runtime_defaults.pipe_mask = \ -+ BIT(PIPE_A) | BIT(PIPE_B) | BIT(PIPE_C) | BIT(PIPE_D), \ -+ .__runtime_defaults.cpu_transcoder_mask = \ -+ BIT(TRANSCODER_A) | BIT(TRANSCODER_B) | \ -+ BIT(TRANSCODER_C) | BIT(TRANSCODER_D) | \ -+ BIT(TRANSCODER_DSI_0) | BIT(TRANSCODER_DSI_1), \ -+ .__runtime_defaults.fbc_mask = BIT(INTEL_FBC_A) - - static const struct intel_display_device_info tgl_display = { - XE_D_DISPLAY, -@@ -1094,14 +1165,15 @@ static const struct intel_display_device_info rkl_display = { - .abox_mask = BIT(0), - .has_hti = 1, - .has_psr_hw_tracking = 0, -+ -+ .__runtime_defaults.pipe_mask = BIT(PIPE_A) | BIT(PIPE_B) | BIT(PIPE_C), -+ .__runtime_defaults.cpu_transcoder_mask = -+ BIT(TRANSCODER_A) | BIT(TRANSCODER_B) | BIT(TRANSCODER_C), - }; - - static const struct intel_device_info rkl_info = { - GEN12_FEATURES, - PLATFORM(INTEL_ROCKETLAKE), -- .__runtime.pipe_mask = BIT(PIPE_A) | BIT(PIPE_B) | BIT(PIPE_C), -- .__runtime.cpu_transcoder_mask = BIT(TRANSCODER_A) | BIT(TRANSCODER_B) | -- BIT(TRANSCODER_C), - .__runtime.platform_engine_mask = - BIT(RCS0) | BIT(BCS0) | BIT(VECS0) | BIT(VCS0), - .display = &rkl_display, -@@ -1120,7 +1192,6 @@ static const struct intel_device_info dg1_info = { - DGFX_FEATURES, - .__runtime.graphics.ip.rel = 10, - PLATFORM(INTEL_DG1), -- .__runtime.pipe_mask = BIT(PIPE_A) | BIT(PIPE_B) | BIT(PIPE_C) | BIT(PIPE_D), - .require_force_probe = 1, - .__runtime.platform_engine_mask = - BIT(RCS0) | BIT(BCS0) | BIT(VECS0) | -@@ -1139,7 +1210,6 @@ static const struct intel_display_device_info adl_s_display = { - static const struct intel_device_info adl_s_info = { - GEN12_FEATURES, - PLATFORM(INTEL_ALDERLAKE_S), -- .__runtime.pipe_mask = BIT(PIPE_A) | BIT(PIPE_B) | BIT(PIPE_C) | BIT(PIPE_D), - .__runtime.platform_engine_mask = - BIT(RCS0) | BIT(BCS0) | BIT(VECS0) | BIT(VCS0) | BIT(VCS2), - .dma_mask_size = 39, -@@ -1179,29 +1249,30 @@ static const struct intel_device_info adl_s_info = { - [TRANSCODER_DSI_0] = TRANSCODER_DSI0_OFFSET, \ - [TRANSCODER_DSI_1] = TRANSCODER_DSI1_OFFSET, \ - }, \ -- TGL_CURSOR_OFFSETS -- --#define XE_LPD_RUNTIME \ -- .__runtime.has_dmc = 1, \ -- .__runtime.has_dsc = 1, \ -- .__runtime.fbc_mask = BIT(INTEL_FBC_A), \ -- .__runtime.has_hdcp = 1, \ -- .__runtime.display.ip.ver = 13, \ -- .__runtime.pipe_mask = BIT(PIPE_A) | BIT(PIPE_B) | BIT(PIPE_C) | BIT(PIPE_D) -+ TGL_CURSOR_OFFSETS, \ -+ \ -+ .__runtime_defaults.ip.ver = 13, \ -+ .__runtime_defaults.has_dmc = 1, \ -+ .__runtime_defaults.has_dsc = 1, \ -+ .__runtime_defaults.fbc_mask = BIT(INTEL_FBC_A), \ -+ .__runtime_defaults.has_hdcp = 1, \ -+ .__runtime_defaults.pipe_mask = \ -+ BIT(PIPE_A) | BIT(PIPE_B) | BIT(PIPE_C) | BIT(PIPE_D) - - static const struct intel_display_device_info xe_lpd_display = { - XE_LPD_FEATURES, - .has_cdclk_crawl = 1, - .has_psr_hw_tracking = 0, -+ -+ .__runtime_defaults.cpu_transcoder_mask = -+ BIT(TRANSCODER_A) | BIT(TRANSCODER_B) | -+ BIT(TRANSCODER_C) | BIT(TRANSCODER_D) | -+ BIT(TRANSCODER_DSI_0) | BIT(TRANSCODER_DSI_1), - }; - - static const struct intel_device_info adl_p_info = { - GEN12_FEATURES, -- XE_LPD_RUNTIME, - PLATFORM(INTEL_ALDERLAKE_P), -- .__runtime.cpu_transcoder_mask = BIT(TRANSCODER_A) | BIT(TRANSCODER_B) | -- BIT(TRANSCODER_C) | BIT(TRANSCODER_D) | -- BIT(TRANSCODER_DSI_0) | BIT(TRANSCODER_DSI_1), - .__runtime.platform_engine_mask = - BIT(RCS0) | BIT(BCS0) | BIT(VECS0) | BIT(VCS0) | BIT(VCS2), - .__runtime.ppgtt_size = 48, -@@ -1251,7 +1322,7 @@ static const struct intel_device_info xehpsdv_info = { - XE_HPM_FEATURES, - DGFX_FEATURES, - PLATFORM(INTEL_XEHPSDV), -- NO_DISPLAY, -+ .display = &no_display, - .has_64k_pages = 1, - .has_media_ratio_mode = 1, - .__runtime.platform_engine_mask = -@@ -1283,19 +1354,20 @@ static const struct intel_device_info xehpsdv_info = { - static const struct intel_display_device_info xe_hpd_display = { - XE_LPD_FEATURES, - .has_cdclk_squash = 1, -+ -+ .__runtime_defaults.cpu_transcoder_mask = -+ BIT(TRANSCODER_A) | BIT(TRANSCODER_B) | -+ BIT(TRANSCODER_C) | BIT(TRANSCODER_D), - }; - - static const struct intel_device_info dg2_info = { - DG2_FEATURES, -- XE_LPD_RUNTIME, -- .__runtime.cpu_transcoder_mask = BIT(TRANSCODER_A) | BIT(TRANSCODER_B) | -- BIT(TRANSCODER_C) | BIT(TRANSCODER_D), - .display = &xe_hpd_display, - }; - - static const struct intel_device_info ats_m_info = { - DG2_FEATURES, -- NO_DISPLAY, -+ .display = &no_display, - .require_force_probe = 1, - .tuning_thread_rr_after_dep = 1, - }; -@@ -1317,7 +1389,7 @@ static const struct intel_device_info pvc_info = { - .__runtime.graphics.ip.rel = 60, - .__runtime.media.ip.rel = 60, - PLATFORM(INTEL_PONTEVECCHIO), -- NO_DISPLAY, -+ .display = &no_display, - .has_flat_ccs = 0, - .__runtime.platform_engine_mask = - BIT(BCS0) | -@@ -1326,11 +1398,6 @@ static const struct intel_device_info pvc_info = { - .require_force_probe = 1, - }; - --#define XE_LPDP_RUNTIME \ -- XE_LPD_RUNTIME, \ -- .__runtime.display.ip.ver = 14, \ -- .__runtime.fbc_mask = BIT(INTEL_FBC_A) | BIT(INTEL_FBC_B) -- - static const struct intel_gt_definition xelpmp_extra_gt[] = { - { - .type = GT_MEDIA, -@@ -1345,13 +1412,16 @@ static const struct intel_display_device_info xe_lpdp_display = { - XE_LPD_FEATURES, - .has_cdclk_crawl = 1, - .has_cdclk_squash = 1, -+ -+ .__runtime_defaults.ip.ver = 14, -+ .__runtime_defaults.fbc_mask = BIT(INTEL_FBC_A) | BIT(INTEL_FBC_B), -+ .__runtime_defaults.cpu_transcoder_mask = -+ BIT(TRANSCODER_A) | BIT(TRANSCODER_B) | -+ BIT(TRANSCODER_C) | BIT(TRANSCODER_D), - }; - - static const struct intel_device_info mtl_info = { - XE_HP_FEATURES, -- XE_LPDP_RUNTIME, -- .__runtime.cpu_transcoder_mask = BIT(TRANSCODER_A) | BIT(TRANSCODER_B) | -- BIT(TRANSCODER_C) | BIT(TRANSCODER_D), - /* - * Real graphics IP version will be obtained from hardware GMD_ID - * register. Value provided here is just for sanity checking. -diff --git a/drivers/gpu/drm/i915/intel_device_info.c b/drivers/gpu/drm/i915/intel_device_info.c -index e8836b9900589..3a0d1cb2eaa9c 100644 ---- a/drivers/gpu/drm/i915/intel_device_info.c -+++ b/drivers/gpu/drm/i915/intel_device_info.c -@@ -95,6 +95,9 @@ void intel_device_info_print(const struct intel_device_info *info, - const struct intel_runtime_info *runtime, - struct drm_printer *p) - { -+ const struct intel_display_runtime_info *display_runtime = -+ &info->display->__runtime_defaults; -+ - if (runtime->graphics.ip.rel) - drm_printf(p, "graphics version: %u.%02u\n", - runtime->graphics.ip.ver, -@@ -111,13 +114,13 @@ void intel_device_info_print(const struct intel_device_info *info, - drm_printf(p, "media version: %u\n", - runtime->media.ip.ver); - -- if (runtime->display.ip.rel) -+ if (display_runtime->ip.rel) - drm_printf(p, "display version: %u.%02u\n", -- runtime->display.ip.ver, -- runtime->display.ip.rel); -+ display_runtime->ip.ver, -+ display_runtime->ip.rel); - else - drm_printf(p, "display version: %u\n", -- runtime->display.ip.ver); -+ display_runtime->ip.ver); - - drm_printf(p, "graphics stepping: %s\n", intel_step_name(runtime->step.graphics_step)); - drm_printf(p, "media stepping: %s\n", intel_step_name(runtime->step.media_step)); -@@ -142,9 +145,9 @@ void intel_device_info_print(const struct intel_device_info *info, - DEV_INFO_DISPLAY_FOR_EACH_FLAG(PRINT_FLAG); - #undef PRINT_FLAG - -- drm_printf(p, "has_hdcp: %s\n", str_yes_no(runtime->has_hdcp)); -- drm_printf(p, "has_dmc: %s\n", str_yes_no(runtime->has_dmc)); -- drm_printf(p, "has_dsc: %s\n", str_yes_no(runtime->has_dsc)); -+ drm_printf(p, "has_hdcp: %s\n", str_yes_no(display_runtime->has_hdcp)); -+ drm_printf(p, "has_dmc: %s\n", str_yes_no(display_runtime->has_dmc)); -+ drm_printf(p, "has_dsc: %s\n", str_yes_no(display_runtime->has_dsc)); - - drm_printf(p, "rawclk rate: %u kHz\n", runtime->rawclk_freq); - } -@@ -342,6 +345,7 @@ static void ip_ver_read(struct drm_i915_private *i915, u32 offset, struct intel_ - static void intel_ipver_early_init(struct drm_i915_private *i915) - { - struct intel_runtime_info *runtime = RUNTIME_INFO(i915); -+ struct intel_display_runtime_info *display_runtime = DISPLAY_RUNTIME_INFO(i915); - - if (!HAS_GMD_ID(i915)) { - drm_WARN_ON(&i915->drm, RUNTIME_INFO(i915)->graphics.ip.ver > 12); -@@ -363,7 +367,7 @@ static void intel_ipver_early_init(struct drm_i915_private *i915) - RUNTIME_INFO(i915)->graphics.ip.rel = 70; - } - ip_ver_read(i915, i915_mmio_reg_offset(GMD_ID_DISPLAY), -- &runtime->display.ip); -+ (struct intel_ip_version *)&display_runtime->ip); - ip_ver_read(i915, i915_mmio_reg_offset(GMD_ID_MEDIA), - &runtime->media.ip); - } -@@ -410,32 +414,34 @@ void intel_device_info_runtime_init(struct drm_i915_private *dev_priv) - { - struct intel_device_info *info = mkwrite_device_info(dev_priv); - struct intel_runtime_info *runtime = RUNTIME_INFO(dev_priv); -+ struct intel_display_runtime_info *display_runtime = -+ DISPLAY_RUNTIME_INFO(dev_priv); - enum pipe pipe; - - /* Wa_14011765242: adl-s A0,A1 */ - if (IS_ADLS_DISPLAY_STEP(dev_priv, STEP_A0, STEP_A2)) - for_each_pipe(dev_priv, pipe) -- runtime->num_scalers[pipe] = 0; -+ display_runtime->num_scalers[pipe] = 0; - else if (DISPLAY_VER(dev_priv) >= 11) { - for_each_pipe(dev_priv, pipe) -- runtime->num_scalers[pipe] = 2; -+ display_runtime->num_scalers[pipe] = 2; - } else if (DISPLAY_VER(dev_priv) >= 9) { -- runtime->num_scalers[PIPE_A] = 2; -- runtime->num_scalers[PIPE_B] = 2; -- runtime->num_scalers[PIPE_C] = 1; -+ display_runtime->num_scalers[PIPE_A] = 2; -+ display_runtime->num_scalers[PIPE_B] = 2; -+ display_runtime->num_scalers[PIPE_C] = 1; - } - - BUILD_BUG_ON(BITS_PER_TYPE(intel_engine_mask_t) < I915_NUM_ENGINES); - - if (DISPLAY_VER(dev_priv) >= 13 || HAS_D12_PLANE_MINIMIZATION(dev_priv)) - for_each_pipe(dev_priv, pipe) -- runtime->num_sprites[pipe] = 4; -+ display_runtime->num_sprites[pipe] = 4; - else if (DISPLAY_VER(dev_priv) >= 11) - for_each_pipe(dev_priv, pipe) -- runtime->num_sprites[pipe] = 6; -+ display_runtime->num_sprites[pipe] = 6; - else if (DISPLAY_VER(dev_priv) == 10) - for_each_pipe(dev_priv, pipe) -- runtime->num_sprites[pipe] = 3; -+ display_runtime->num_sprites[pipe] = 3; - else if (IS_BROXTON(dev_priv)) { - /* - * Skylake and Broxton currently don't expose the topmost plane as its -@@ -446,15 +452,15 @@ void intel_device_info_runtime_init(struct drm_i915_private *dev_priv) - * down the line. - */ - -- runtime->num_sprites[PIPE_A] = 2; -- runtime->num_sprites[PIPE_B] = 2; -- runtime->num_sprites[PIPE_C] = 1; -+ display_runtime->num_sprites[PIPE_A] = 2; -+ display_runtime->num_sprites[PIPE_B] = 2; -+ display_runtime->num_sprites[PIPE_C] = 1; - } else if (IS_VALLEYVIEW(dev_priv) || IS_CHERRYVIEW(dev_priv)) { - for_each_pipe(dev_priv, pipe) -- runtime->num_sprites[pipe] = 2; -+ display_runtime->num_sprites[pipe] = 2; - } else if (DISPLAY_VER(dev_priv) >= 5 || IS_G4X(dev_priv)) { - for_each_pipe(dev_priv, pipe) -- runtime->num_sprites[pipe] = 1; -+ display_runtime->num_sprites[pipe] = 1; - } - - if (HAS_DISPLAY(dev_priv) && -@@ -462,7 +468,7 @@ void intel_device_info_runtime_init(struct drm_i915_private *dev_priv) - !(intel_de_read(dev_priv, GU_CNTL_PROTECTED) & DEPRESENT)) { - drm_info(&dev_priv->drm, "Display not present, disabling\n"); - -- runtime->pipe_mask = 0; -+ display_runtime->pipe_mask = 0; - } - - if (HAS_DISPLAY(dev_priv) && IS_GRAPHICS_VER(dev_priv, 7, 8) && -@@ -485,47 +491,47 @@ void intel_device_info_runtime_init(struct drm_i915_private *dev_priv) - !(sfuse_strap & SFUSE_STRAP_FUSE_LOCK))) { - drm_info(&dev_priv->drm, - "Display fused off, disabling\n"); -- runtime->pipe_mask = 0; -+ display_runtime->pipe_mask = 0; - } else if (fuse_strap & IVB_PIPE_C_DISABLE) { - drm_info(&dev_priv->drm, "PipeC fused off\n"); -- runtime->pipe_mask &= ~BIT(PIPE_C); -- runtime->cpu_transcoder_mask &= ~BIT(TRANSCODER_C); -+ display_runtime->pipe_mask &= ~BIT(PIPE_C); -+ display_runtime->cpu_transcoder_mask &= ~BIT(TRANSCODER_C); - } - } else if (HAS_DISPLAY(dev_priv) && DISPLAY_VER(dev_priv) >= 9) { - u32 dfsm = intel_de_read(dev_priv, SKL_DFSM); - - if (dfsm & SKL_DFSM_PIPE_A_DISABLE) { -- runtime->pipe_mask &= ~BIT(PIPE_A); -- runtime->cpu_transcoder_mask &= ~BIT(TRANSCODER_A); -- runtime->fbc_mask &= ~BIT(INTEL_FBC_A); -+ display_runtime->pipe_mask &= ~BIT(PIPE_A); -+ display_runtime->cpu_transcoder_mask &= ~BIT(TRANSCODER_A); -+ display_runtime->fbc_mask &= ~BIT(INTEL_FBC_A); - } - if (dfsm & SKL_DFSM_PIPE_B_DISABLE) { -- runtime->pipe_mask &= ~BIT(PIPE_B); -- runtime->cpu_transcoder_mask &= ~BIT(TRANSCODER_B); -+ display_runtime->pipe_mask &= ~BIT(PIPE_B); -+ display_runtime->cpu_transcoder_mask &= ~BIT(TRANSCODER_B); - } - if (dfsm & SKL_DFSM_PIPE_C_DISABLE) { -- runtime->pipe_mask &= ~BIT(PIPE_C); -- runtime->cpu_transcoder_mask &= ~BIT(TRANSCODER_C); -+ display_runtime->pipe_mask &= ~BIT(PIPE_C); -+ display_runtime->cpu_transcoder_mask &= ~BIT(TRANSCODER_C); - } - - if (DISPLAY_VER(dev_priv) >= 12 && - (dfsm & TGL_DFSM_PIPE_D_DISABLE)) { -- runtime->pipe_mask &= ~BIT(PIPE_D); -- runtime->cpu_transcoder_mask &= ~BIT(TRANSCODER_D); -+ display_runtime->pipe_mask &= ~BIT(PIPE_D); -+ display_runtime->cpu_transcoder_mask &= ~BIT(TRANSCODER_D); - } - - if (dfsm & SKL_DFSM_DISPLAY_HDCP_DISABLE) -- runtime->has_hdcp = 0; -+ display_runtime->has_hdcp = 0; - - if (dfsm & SKL_DFSM_DISPLAY_PM_DISABLE) -- runtime->fbc_mask = 0; -+ display_runtime->fbc_mask = 0; - - if (DISPLAY_VER(dev_priv) >= 11 && (dfsm & ICL_DFSM_DMC_DISABLE)) -- runtime->has_dmc = 0; -+ display_runtime->has_dmc = 0; - - if (IS_DISPLAY_VER(dev_priv, 10, 12) && - (dfsm & GLK_DFSM_DISPLAY_DSC_DISABLE)) -- runtime->has_dsc = 0; -+ display_runtime->has_dsc = 0; - } - - if (GRAPHICS_VER(dev_priv) == 6 && i915_vtd_active(dev_priv)) { -@@ -542,13 +548,13 @@ void intel_device_info_runtime_init(struct drm_i915_private *dev_priv) - DRIVER_ATOMIC); - info->display = &no_display; - -- runtime->cpu_transcoder_mask = 0; -- memset(runtime->num_sprites, 0, sizeof(runtime->num_sprites)); -- memset(runtime->num_scalers, 0, sizeof(runtime->num_scalers)); -- runtime->fbc_mask = 0; -- runtime->has_hdcp = false; -- runtime->has_dmc = false; -- runtime->has_dsc = false; -+ display_runtime->cpu_transcoder_mask = 0; -+ memset(display_runtime->num_sprites, 0, sizeof(display_runtime->num_sprites)); -+ memset(display_runtime->num_scalers, 0, sizeof(display_runtime->num_scalers)); -+ display_runtime->fbc_mask = 0; -+ display_runtime->has_hdcp = false; -+ display_runtime->has_dmc = false; -+ display_runtime->has_dsc = false; - } - - /* Disable nuclear pageflip by default on pre-g4x */ -@@ -568,6 +574,7 @@ void intel_device_info_driver_create(struct drm_i915_private *i915, - { - struct intel_device_info *info; - struct intel_runtime_info *runtime; -+ struct intel_display_runtime_info *display_runtime; - - /* Setup the write-once "constant" device info */ - info = mkwrite_device_info(i915); -@@ -576,6 +583,10 @@ void intel_device_info_driver_create(struct drm_i915_private *i915, - /* Initialize initial runtime info from static const data and pdev. */ - runtime = RUNTIME_INFO(i915); - memcpy(runtime, &INTEL_INFO(i915)->__runtime, sizeof(*runtime)); -+ display_runtime = DISPLAY_RUNTIME_INFO(i915); -+ memcpy(display_runtime, &DISPLAY_INFO(i915)->__runtime_defaults, -+ sizeof(*display_runtime)); -+ - runtime->device_id = device_id; - } - -diff --git a/drivers/gpu/drm/i915/intel_device_info.h b/drivers/gpu/drm/i915/intel_device_info.h -index f838ae7191644..faf6cccdb343d 100644 ---- a/drivers/gpu/drm/i915/intel_device_info.h -+++ b/drivers/gpu/drm/i915/intel_device_info.h -@@ -197,9 +197,6 @@ struct intel_runtime_info { - struct { - struct intel_ip_version ip; - } media; -- struct { -- struct intel_ip_version ip; -- } display; - - /* - * Platform mask is used for optimizing or-ed IS_PLATFORM calls into -@@ -227,21 +224,6 @@ struct intel_runtime_info { - u32 memory_regions; /* regions supported by the HW */ - - bool has_pooled_eu; -- -- /* display */ -- struct { -- u8 pipe_mask; -- u8 cpu_transcoder_mask; -- -- u8 num_sprites[I915_MAX_PIPES]; -- u8 num_scalers[I915_MAX_PIPES]; -- -- u8 fbc_mask; -- -- bool has_hdcp; -- bool has_dmc; -- bool has_dsc; -- }; - }; - - struct intel_device_info { -diff --git a/drivers/gpu/drm/i915/intel_step.c b/drivers/gpu/drm/i915/intel_step.c -index 84a6fe736a3b5..8a9ff6227e536 100644 ---- a/drivers/gpu/drm/i915/intel_step.c -+++ b/drivers/gpu/drm/i915/intel_step.c -@@ -166,8 +166,12 @@ void intel_step_init(struct drm_i915_private *i915) - &RUNTIME_INFO(i915)->graphics.ip); - step.media_step = gmd_to_intel_step(i915, - &RUNTIME_INFO(i915)->media.ip); -- step.display_step = gmd_to_intel_step(i915, -- &RUNTIME_INFO(i915)->display.ip); -+ step.display_step = STEP_A0 + DISPLAY_RUNTIME_INFO(i915)->ip.step; -+ if (step.display_step >= STEP_FUTURE) { -+ drm_dbg(&i915->drm, "Using future display steppings\n"); -+ step.display_step = STEP_FUTURE; -+ } -+ - RUNTIME_INFO(i915)->step = step; - - return; --- -2.39.2 - diff --git a/queue-6.4/drm-i915-fix-limited-range-csc-matrix.patch b/queue-6.4/drm-i915-fix-limited-range-csc-matrix.patch deleted file mode 100644 index 4cf589089c6..00000000000 --- a/queue-6.4/drm-i915-fix-limited-range-csc-matrix.patch +++ /dev/null @@ -1,66 +0,0 @@ -From e7ec21daa06ec8533c484507f2e1ca2309e83942 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Wed, 29 Mar 2023 16:49:51 +0300 -Subject: drm/i915: Fix limited range csc matrix -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -From: Ville Syrjälä - -[ Upstream commit 404c3acda4b65924c05bc63242e94f954f84c165 ] - -Our current limited range matrix is a bit off. I think it -was originally calculated with rounding, as if we wanted -the normal pixel replication type of behaviour. -That is, since the 8bpc max value is 0xeb we assumed the -16bpc max value should be 0xebeb, but what the HDMI spec -actually says it should be is 0xeb00. - -So to get what we want we make the formula - out = in * (235-16) << (12-8) / in_max + 16 << (12-8), -with 12 being precision of the csc, 8 being the precision -of the constants we used. - -The hardware takes its coefficients as floating point -values, but the (235−16)/255 = ~.86, so exponent 0 -is what we want anyway, so it works out perfectly without -having to hardcode it in hex or start playing with floats. - -In terms of raw numbers we are feeding the hardware the -post offset changes from 0x101 to 0x100, and the coefficient -changes from 0xdc0 to 0xdb0 (~.860->~.855). So this should -make everything come out just a tad darker. - -I already used better constants in lut_limited_range() earlier -so the output of the two paths should be closer now. - -Signed-off-by: Ville Syrjälä -Link: https://patchwork.freedesktop.org/patch/msgid/20230329135002.3096-2-ville.syrjala@linux.intel.com -Reviewed-by: Ankit Nautiyal -Stable-dep-of: 19db2062094c ("drm/i915: No 10bit gamma on desktop gen3 parts") -Signed-off-by: Sasha Levin ---- - drivers/gpu/drm/i915/display/intel_color.c | 5 ++--- - 1 file changed, 2 insertions(+), 3 deletions(-) - -diff --git a/drivers/gpu/drm/i915/display/intel_color.c b/drivers/gpu/drm/i915/display/intel_color.c -index 36aac88143ac1..3c3e2f5a5cdec 100644 ---- a/drivers/gpu/drm/i915/display/intel_color.c -+++ b/drivers/gpu/drm/i915/display/intel_color.c -@@ -116,10 +116,9 @@ struct intel_color_funcs { - #define ILK_CSC_COEFF_FP(coeff, fbits) \ - (clamp_val(((coeff) >> (32 - (fbits) - 3)) + 4, 0, 0xfff) & 0xff8) - --#define ILK_CSC_COEFF_LIMITED_RANGE 0x0dc0 - #define ILK_CSC_COEFF_1_0 0x7800 -- --#define ILK_CSC_POSTOFF_LIMITED_RANGE (16 * (1 << 12) / 255) -+#define ILK_CSC_COEFF_LIMITED_RANGE ((235 - 16) << (12 - 8)) /* exponent 0 */ -+#define ILK_CSC_POSTOFF_LIMITED_RANGE (16 << (12 - 8)) - - /* Nop pre/post offsets */ - static const u16 ilk_csc_off_zero[3] = {}; --- -2.39.2 - diff --git a/queue-6.4/drm-i915-guc-slpc-provide-sysfs-for-efficient-freq.patch b/queue-6.4/drm-i915-guc-slpc-provide-sysfs-for-efficient-freq.patch deleted file mode 100644 index face862980a..00000000000 --- a/queue-6.4/drm-i915-guc-slpc-provide-sysfs-for-efficient-freq.patch +++ /dev/null @@ -1,205 +0,0 @@ -From 82964626f7c309a9154a2124aeaa7c58581f306a Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Tue, 25 Apr 2023 17:39:41 -0700 -Subject: drm/i915/guc/slpc: Provide sysfs for efficient freq - -From: Vinay Belgaumkar - -[ Upstream commit 55f9720dbf23ed640a51ea5564c22305efa8a467 ] - -SLPC enables use of efficient freq at init by default. It is -possible for GuC to request frequencies that are higher than -the 'software' max if user has set it lower than the efficient -level. - -Scenarios/tests that require strict fixing of freq below the efficient -level will need to disable it through this interface. - -v2: Keep just one interface to toggle sysfs. With this, user will -be completely responsible for toggling efficient frequency if need -be. There will be no implicit disabling when user sets min < RP1 (Ashutosh) - -v3: Remove unused label, review comments (Ashutosh) - -v4: Toggle efficient freq usage in SLPC selftest and checkpatch fixes - -v5: Review comments (Andi) and add a separate patch for selftest updates - -Fixes: 95ccf312a1e4 ("drm/i915/guc/slpc: Allow SLPC to use efficient frequency") -Signed-off-by: Vinay Belgaumkar -Reviewed-by: Rodrigo Vivi -Reviewed-by: Ashutosh Dixit -Reviewed-by: Andi Shyti -Signed-off-by: John Harrison -Link: https://patchwork.freedesktop.org/patch/msgid/20230426003942.1924347-1-vinay.belgaumkar@intel.com -Signed-off-by: Sasha Levin ---- - drivers/gpu/drm/i915/gt/intel_gt_sysfs_pm.c | 35 +++++++++++++++++ - drivers/gpu/drm/i915/gt/uc/intel_guc_slpc.c | 38 +++++++++++++------ - drivers/gpu/drm/i915/gt/uc/intel_guc_slpc.h | 1 + - .../gpu/drm/i915/gt/uc/intel_guc_slpc_types.h | 1 + - 4 files changed, 64 insertions(+), 11 deletions(-) - -diff --git a/drivers/gpu/drm/i915/gt/intel_gt_sysfs_pm.c b/drivers/gpu/drm/i915/gt/intel_gt_sysfs_pm.c -index 28f27091cd3b7..ee2b44f896a27 100644 ---- a/drivers/gpu/drm/i915/gt/intel_gt_sysfs_pm.c -+++ b/drivers/gpu/drm/i915/gt/intel_gt_sysfs_pm.c -@@ -451,6 +451,33 @@ static ssize_t punit_req_freq_mhz_show(struct kobject *kobj, - return sysfs_emit(buff, "%u\n", preq); - } - -+static ssize_t slpc_ignore_eff_freq_show(struct kobject *kobj, -+ struct kobj_attribute *attr, -+ char *buff) -+{ -+ struct intel_gt *gt = intel_gt_sysfs_get_drvdata(kobj, attr->attr.name); -+ struct intel_guc_slpc *slpc = >->uc.guc.slpc; -+ -+ return sysfs_emit(buff, "%u\n", slpc->ignore_eff_freq); -+} -+ -+static ssize_t slpc_ignore_eff_freq_store(struct kobject *kobj, -+ struct kobj_attribute *attr, -+ const char *buff, size_t count) -+{ -+ struct intel_gt *gt = intel_gt_sysfs_get_drvdata(kobj, attr->attr.name); -+ struct intel_guc_slpc *slpc = >->uc.guc.slpc; -+ int err; -+ u32 val; -+ -+ err = kstrtou32(buff, 0, &val); -+ if (err) -+ return err; -+ -+ err = intel_guc_slpc_set_ignore_eff_freq(slpc, val); -+ return err ?: count; -+} -+ - struct intel_gt_bool_throttle_attr { - struct attribute attr; - ssize_t (*show)(struct kobject *kobj, struct kobj_attribute *attr, -@@ -663,6 +690,8 @@ static struct kobj_attribute attr_media_freq_factor_scale = - INTEL_GT_ATTR_RO(media_RP0_freq_mhz); - INTEL_GT_ATTR_RO(media_RPn_freq_mhz); - -+INTEL_GT_ATTR_RW(slpc_ignore_eff_freq); -+ - static const struct attribute *media_perf_power_attrs[] = { - &attr_media_freq_factor.attr, - &attr_media_freq_factor_scale.attr, -@@ -744,6 +773,12 @@ void intel_gt_sysfs_pm_init(struct intel_gt *gt, struct kobject *kobj) - if (ret) - gt_warn(gt, "failed to create punit_req_freq_mhz sysfs (%pe)", ERR_PTR(ret)); - -+ if (intel_uc_uses_guc_slpc(>->uc)) { -+ ret = sysfs_create_file(kobj, &attr_slpc_ignore_eff_freq.attr); -+ if (ret) -+ gt_warn(gt, "failed to create ignore_eff_freq sysfs (%pe)", ERR_PTR(ret)); -+ } -+ - if (i915_mmio_reg_valid(intel_gt_perf_limit_reasons_reg(gt))) { - ret = sysfs_create_files(kobj, throttle_reason_attrs); - if (ret) -diff --git a/drivers/gpu/drm/i915/gt/uc/intel_guc_slpc.c b/drivers/gpu/drm/i915/gt/uc/intel_guc_slpc.c -index 026d73855f36c..56dbba1ef6684 100644 ---- a/drivers/gpu/drm/i915/gt/uc/intel_guc_slpc.c -+++ b/drivers/gpu/drm/i915/gt/uc/intel_guc_slpc.c -@@ -277,6 +277,7 @@ int intel_guc_slpc_init(struct intel_guc_slpc *slpc) - - slpc->max_freq_softlimit = 0; - slpc->min_freq_softlimit = 0; -+ slpc->ignore_eff_freq = false; - slpc->min_is_rpmax = false; - - slpc->boost_freq = 0; -@@ -457,6 +458,29 @@ int intel_guc_slpc_get_max_freq(struct intel_guc_slpc *slpc, u32 *val) - return ret; - } - -+int intel_guc_slpc_set_ignore_eff_freq(struct intel_guc_slpc *slpc, bool val) -+{ -+ struct drm_i915_private *i915 = slpc_to_i915(slpc); -+ intel_wakeref_t wakeref; -+ int ret; -+ -+ mutex_lock(&slpc->lock); -+ wakeref = intel_runtime_pm_get(&i915->runtime_pm); -+ -+ ret = slpc_set_param(slpc, -+ SLPC_PARAM_IGNORE_EFFICIENT_FREQUENCY, -+ val); -+ if (ret) -+ guc_probe_error(slpc_to_guc(slpc), "Failed to set efficient freq(%d): %pe\n", -+ val, ERR_PTR(ret)); -+ else -+ slpc->ignore_eff_freq = val; -+ -+ intel_runtime_pm_put(&i915->runtime_pm, wakeref); -+ mutex_unlock(&slpc->lock); -+ return ret; -+} -+ - /** - * intel_guc_slpc_set_min_freq() - Set min frequency limit for SLPC. - * @slpc: pointer to intel_guc_slpc. -@@ -482,16 +506,6 @@ int intel_guc_slpc_set_min_freq(struct intel_guc_slpc *slpc, u32 val) - mutex_lock(&slpc->lock); - wakeref = intel_runtime_pm_get(&i915->runtime_pm); - -- /* Ignore efficient freq if lower min freq is requested */ -- ret = slpc_set_param(slpc, -- SLPC_PARAM_IGNORE_EFFICIENT_FREQUENCY, -- val < slpc->rp1_freq); -- if (ret) { -- guc_probe_error(slpc_to_guc(slpc), "Failed to toggle efficient freq: %pe\n", -- ERR_PTR(ret)); -- goto out; -- } -- - ret = slpc_set_param(slpc, - SLPC_PARAM_GLOBAL_MIN_GT_UNSLICE_FREQ_MHZ, - val); -@@ -499,7 +513,6 @@ int intel_guc_slpc_set_min_freq(struct intel_guc_slpc *slpc, u32 val) - if (!ret) - slpc->min_freq_softlimit = val; - --out: - intel_runtime_pm_put(&i915->runtime_pm, wakeref); - mutex_unlock(&slpc->lock); - -@@ -752,6 +765,9 @@ int intel_guc_slpc_enable(struct intel_guc_slpc *slpc) - /* Set cached media freq ratio mode */ - intel_guc_slpc_set_media_ratio_mode(slpc, slpc->media_ratio_mode); - -+ /* Set cached value of ignore efficient freq */ -+ intel_guc_slpc_set_ignore_eff_freq(slpc, slpc->ignore_eff_freq); -+ - return 0; - } - -diff --git a/drivers/gpu/drm/i915/gt/uc/intel_guc_slpc.h b/drivers/gpu/drm/i915/gt/uc/intel_guc_slpc.h -index 17ed515f6a852..597eb5413ddf2 100644 ---- a/drivers/gpu/drm/i915/gt/uc/intel_guc_slpc.h -+++ b/drivers/gpu/drm/i915/gt/uc/intel_guc_slpc.h -@@ -46,5 +46,6 @@ void intel_guc_slpc_boost(struct intel_guc_slpc *slpc); - void intel_guc_slpc_dec_waiters(struct intel_guc_slpc *slpc); - int intel_guc_slpc_unset_gucrc_mode(struct intel_guc_slpc *slpc); - int intel_guc_slpc_override_gucrc_mode(struct intel_guc_slpc *slpc, u32 mode); -+int intel_guc_slpc_set_ignore_eff_freq(struct intel_guc_slpc *slpc, bool val); - - #endif -diff --git a/drivers/gpu/drm/i915/gt/uc/intel_guc_slpc_types.h b/drivers/gpu/drm/i915/gt/uc/intel_guc_slpc_types.h -index a6ef53b04e047..a886513314977 100644 ---- a/drivers/gpu/drm/i915/gt/uc/intel_guc_slpc_types.h -+++ b/drivers/gpu/drm/i915/gt/uc/intel_guc_slpc_types.h -@@ -31,6 +31,7 @@ struct intel_guc_slpc { - /* frequency softlimits */ - u32 min_freq_softlimit; - u32 max_freq_softlimit; -+ bool ignore_eff_freq; - - /* cached media ratio mode */ - u32 media_ratio_mode; --- -2.39.2 - diff --git a/queue-6.4/drm-i915-hide-mkwrite_device_info-better.patch b/queue-6.4/drm-i915-hide-mkwrite_device_info-better.patch deleted file mode 100644 index 68dbc8f6539..00000000000 --- a/queue-6.4/drm-i915-hide-mkwrite_device_info-better.patch +++ /dev/null @@ -1,147 +0,0 @@ -From b71edb549117480f45cf96c537b0cf34bc4765cf Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Tue, 11 Apr 2023 13:56:43 +0300 -Subject: drm/i915: hide mkwrite_device_info() better - -From: Jani Nikula - -[ Upstream commit 446a20c9ba622bb531f1705eab88b64d478ee434 ] - -The goal has been to just make device info a pointer to static const -data, i.e. the static const structs in i915_pci.c. See [1]. However, -there were issues with intel_device_info_runtime_init() clearing the -display sub-struct of device info on the !HAS_DISPLAY() path, which -consequently disables a lot of display functionality, like it -should. Looks like we'd have to cover all those paths, and maybe -sprinkle HAS_DISPLAY() checks in them, which we haven't gotten around -to. - -In the mean time, hide mkwrite_device_info() better within -intel_device_info.c by adding a intel_device_info_driver_create() for -the very early initialization of the device info and initial runtime -info. This also lets us declutter i915_drv.h a bit, and stops promoting -mkwrite_device_info() as something that could be used. - -[1] https://lore.kernel.org/r/a0422f0a8ac055f65b7922bcd3119b180a41e79e.1655712106.git.jani.nikula@intel.com - -Signed-off-by: Jani Nikula -Reviewed-by: Tvrtko Ursulin -Link: https://patchwork.freedesktop.org/patch/msgid/20230411105643.292416-1-jani.nikula@intel.com -Stable-dep-of: 19db2062094c ("drm/i915: No 10bit gamma on desktop gen3 parts") -Signed-off-by: Sasha Levin ---- - drivers/gpu/drm/i915/i915_driver.c | 12 ++-------- - drivers/gpu/drm/i915/i915_drv.h | 7 ------ - drivers/gpu/drm/i915/intel_device_info.c | 29 ++++++++++++++++++++++++ - drivers/gpu/drm/i915/intel_device_info.h | 2 ++ - 4 files changed, 33 insertions(+), 17 deletions(-) - -diff --git a/drivers/gpu/drm/i915/i915_driver.c b/drivers/gpu/drm/i915/i915_driver.c -index 93fdc40d724fa..2980ccdef6cd6 100644 ---- a/drivers/gpu/drm/i915/i915_driver.c -+++ b/drivers/gpu/drm/i915/i915_driver.c -@@ -720,8 +720,6 @@ i915_driver_create(struct pci_dev *pdev, const struct pci_device_id *ent) - { - const struct intel_device_info *match_info = - (struct intel_device_info *)ent->driver_data; -- struct intel_device_info *device_info; -- struct intel_runtime_info *runtime; - struct drm_i915_private *i915; - - i915 = devm_drm_dev_alloc(&pdev->dev, &i915_drm_driver, -@@ -734,14 +732,8 @@ i915_driver_create(struct pci_dev *pdev, const struct pci_device_id *ent) - /* Device parameters start as a copy of module parameters. */ - i915_params_copy(&i915->params, &i915_modparams); - -- /* Setup the write-once "constant" device info */ -- device_info = mkwrite_device_info(i915); -- memcpy(device_info, match_info, sizeof(*device_info)); -- -- /* Initialize initial runtime info from static const data and pdev. */ -- runtime = RUNTIME_INFO(i915); -- memcpy(runtime, &INTEL_INFO(i915)->__runtime, sizeof(*runtime)); -- runtime->device_id = pdev->device; -+ /* Set up device info and initial runtime info. */ -+ intel_device_info_driver_create(i915, pdev->device, match_info); - - return i915; - } -diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h -index e771fdc3099c2..fe7eeafe9cff6 100644 ---- a/drivers/gpu/drm/i915/i915_drv.h -+++ b/drivers/gpu/drm/i915/i915_drv.h -@@ -931,11 +931,4 @@ IS_SUBPLATFORM(const struct drm_i915_private *i915, - #define HAS_LMEMBAR_SMEM_STOLEN(i915) (!HAS_LMEM(i915) && \ - GRAPHICS_VER_FULL(i915) >= IP_VER(12, 70)) - --/* intel_device_info.c */ --static inline struct intel_device_info * --mkwrite_device_info(struct drm_i915_private *dev_priv) --{ -- return (struct intel_device_info *)INTEL_INFO(dev_priv); --} -- - #endif -diff --git a/drivers/gpu/drm/i915/intel_device_info.c b/drivers/gpu/drm/i915/intel_device_info.c -index fc5cd14adfccb..4e23be2995bf6 100644 ---- a/drivers/gpu/drm/i915/intel_device_info.c -+++ b/drivers/gpu/drm/i915/intel_device_info.c -@@ -381,6 +381,13 @@ void intel_device_info_runtime_init_early(struct drm_i915_private *i915) - intel_device_info_subplatform_init(i915); - } - -+/* FIXME: Remove this, and make device info a const pointer to rodata. */ -+static struct intel_device_info * -+mkwrite_device_info(struct drm_i915_private *i915) -+{ -+ return (struct intel_device_info *)INTEL_INFO(i915); -+} -+ - /** - * intel_device_info_runtime_init - initialize runtime info - * @dev_priv: the i915 device -@@ -548,6 +555,28 @@ void intel_device_info_runtime_init(struct drm_i915_private *dev_priv) - dev_priv->drm.driver_features &= ~DRIVER_ATOMIC; - } - -+/* -+ * Set up device info and initial runtime info at driver create. -+ * -+ * Note: i915 is only an allocated blob of memory at this point. -+ */ -+void intel_device_info_driver_create(struct drm_i915_private *i915, -+ u16 device_id, -+ const struct intel_device_info *match_info) -+{ -+ struct intel_device_info *info; -+ struct intel_runtime_info *runtime; -+ -+ /* Setup the write-once "constant" device info */ -+ info = mkwrite_device_info(i915); -+ memcpy(info, match_info, sizeof(*info)); -+ -+ /* Initialize initial runtime info from static const data and pdev. */ -+ runtime = RUNTIME_INFO(i915); -+ memcpy(runtime, &INTEL_INFO(i915)->__runtime, sizeof(*runtime)); -+ runtime->device_id = device_id; -+} -+ - void intel_driver_caps_print(const struct intel_driver_caps *caps, - struct drm_printer *p) - { -diff --git a/drivers/gpu/drm/i915/intel_device_info.h b/drivers/gpu/drm/i915/intel_device_info.h -index 080a4557899b6..f032f2500f505 100644 ---- a/drivers/gpu/drm/i915/intel_device_info.h -+++ b/drivers/gpu/drm/i915/intel_device_info.h -@@ -317,6 +317,8 @@ struct intel_driver_caps { - - const char *intel_platform_name(enum intel_platform platform); - -+void intel_device_info_driver_create(struct drm_i915_private *i915, u16 device_id, -+ const struct intel_device_info *match_info); - void intel_device_info_runtime_init_early(struct drm_i915_private *dev_priv); - void intel_device_info_runtime_init(struct drm_i915_private *dev_priv); - --- -2.39.2 - diff --git a/queue-6.4/drm-i915-no-10bit-gamma-on-desktop-gen3-parts.patch b/queue-6.4/drm-i915-no-10bit-gamma-on-desktop-gen3-parts.patch deleted file mode 100644 index 4d4e4b3b9b7..00000000000 --- a/queue-6.4/drm-i915-no-10bit-gamma-on-desktop-gen3-parts.patch +++ /dev/null @@ -1,103 +0,0 @@ -From 209d5d677e40042d55d2e9d6c6d9a5470e4a6428 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Wed, 31 May 2023 16:56:25 +0300 -Subject: drm/i915: No 10bit gamma on desktop gen3 parts -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -From: Ville Syrjälä - -[ Upstream commit 19db2062094c75c64039d820c2547aad4dcfd905 ] - -Apparently desktop gen3 parts don't support the -10bit gamma mode at all. Stop claiming otherwise. - -As is the case with pipe A on gen3 mobile parts, the -PIPECONF gamma mode bit can be set but it has no -effect on the output. - -PNV seems to be the only slight exception, but generally -the desktop PNV variant looks more like a mobile part so -this is not entirely surprising. - -Fixes: 67630bacae23 ("drm/i915: Add 10bit gamma mode for gen2/3") -Signed-off-by: Ville Syrjälä -Reviewed-by: Uma Shankar -Link: https://patchwork.freedesktop.org/patch/msgid/20230531135625.3467-1-ville.syrjala@linux.intel.com -Signed-off-by: Sasha Levin ---- - .../gpu/drm/i915/display/intel_display_device.c | 16 +++++++++++++--- - 1 file changed, 13 insertions(+), 3 deletions(-) - -diff --git a/drivers/gpu/drm/i915/display/intel_display_device.c b/drivers/gpu/drm/i915/display/intel_display_device.c -index 3e2f4cd0b9f56..8c57d48e8270f 100644 ---- a/drivers/gpu/drm/i915/display/intel_display_device.c -+++ b/drivers/gpu/drm/i915/display/intel_display_device.c -@@ -216,7 +216,6 @@ static const struct intel_display_device_info i865g_display = { - .has_overlay = 1, \ - I9XX_PIPE_OFFSETS, \ - I9XX_CURSOR_OFFSETS, \ -- I9XX_COLORS, \ - \ - .__runtime_defaults.ip.ver = 3, \ - .__runtime_defaults.pipe_mask = BIT(PIPE_A) | BIT(PIPE_B), \ -@@ -225,12 +224,14 @@ static const struct intel_display_device_info i865g_display = { - - static const struct intel_display_device_info i915g_display = { - GEN3_DISPLAY, -+ I845_COLORS, - .cursor_needs_physical = 1, - .overlay_needs_physical = 1, - }; - - static const struct intel_display_device_info i915gm_display = { - GEN3_DISPLAY, -+ I9XX_COLORS, - .cursor_needs_physical = 1, - .overlay_needs_physical = 1, - .supports_tv = 1, -@@ -240,6 +241,7 @@ static const struct intel_display_device_info i915gm_display = { - - static const struct intel_display_device_info i945g_display = { - GEN3_DISPLAY, -+ I845_COLORS, - .has_hotplug = 1, - .cursor_needs_physical = 1, - .overlay_needs_physical = 1, -@@ -247,6 +249,7 @@ static const struct intel_display_device_info i945g_display = { - - static const struct intel_display_device_info i945gm_display = { - GEN3_DISPLAY, -+ I9XX_COLORS, - .has_hotplug = 1, - .cursor_needs_physical = 1, - .overlay_needs_physical = 1, -@@ -257,6 +260,13 @@ static const struct intel_display_device_info i945gm_display = { - - static const struct intel_display_device_info g33_display = { - GEN3_DISPLAY, -+ I845_COLORS, -+ .has_hotplug = 1, -+}; -+ -+static const struct intel_display_device_info pnv_display = { -+ GEN3_DISPLAY, -+ I9XX_COLORS, - .has_hotplug = 1, - }; - -@@ -669,8 +679,8 @@ static const struct { - INTEL_I965GM_IDS(&i965gm_display), - INTEL_GM45_IDS(&gm45_display), - INTEL_G45_IDS(&g45_display), -- INTEL_PINEVIEW_G_IDS(&g33_display), -- INTEL_PINEVIEW_M_IDS(&g33_display), -+ INTEL_PINEVIEW_G_IDS(&pnv_display), -+ INTEL_PINEVIEW_M_IDS(&pnv_display), - INTEL_IRONLAKE_D_IDS(&ilk_d_display), - INTEL_IRONLAKE_M_IDS(&ilk_m_display), - INTEL_SNB_D_IDS(&snb_display), --- -2.39.2 - diff --git a/queue-6.4/drm-imx-lcdc-fix-a-null-vs-is_err-bug-in-probe.patch b/queue-6.4/drm-imx-lcdc-fix-a-null-vs-is_err-bug-in-probe.patch deleted file mode 100644 index eb4f576e0c9..00000000000 --- a/queue-6.4/drm-imx-lcdc-fix-a-null-vs-is_err-bug-in-probe.patch +++ /dev/null @@ -1,43 +0,0 @@ -From ea8ba3e7dff013313a6a7a5fa4ed24e6f50b4d87 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Wed, 22 Mar 2023 12:06:55 +0300 -Subject: drm/imx/lcdc: fix a NULL vs IS_ERR() bug in probe -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -From: Dan Carpenter - -[ Upstream commit dae2f7b89a8436351a2982d0d96a8a56accca576 ] - -The devm_drm_dev_alloc() function returns error pointers. It never -returns NULL. Fix the check. - -Fixes: c87e859cdeb5 ("drm/imx/lcdc: Implement DRM driver for imx25") -Signed-off-by: Dan Carpenter -Reviewed-by: Uwe Kleine-König -Signed-off-by: Javier Martinez Canillas -Link: https://patchwork.freedesktop.org/patch/msgid/d0a1fc55-3ef6-444e-b3ef-fdc937d8d57a@kili.mountain -Signed-off-by: Sasha Levin ---- - drivers/gpu/drm/imx/lcdc/imx-lcdc.c | 4 ++-- - 1 file changed, 2 insertions(+), 2 deletions(-) - -diff --git a/drivers/gpu/drm/imx/lcdc/imx-lcdc.c b/drivers/gpu/drm/imx/lcdc/imx-lcdc.c -index 8e6d457917daf..277ead6a459a4 100644 ---- a/drivers/gpu/drm/imx/lcdc/imx-lcdc.c -+++ b/drivers/gpu/drm/imx/lcdc/imx-lcdc.c -@@ -400,8 +400,8 @@ static int imx_lcdc_probe(struct platform_device *pdev) - - lcdc = devm_drm_dev_alloc(dev, &imx_lcdc_drm_driver, - struct imx_lcdc, drm); -- if (!lcdc) -- return -ENOMEM; -+ if (IS_ERR(lcdc)) -+ return PTR_ERR(lcdc); - - drm = &lcdc->drm; - --- -2.39.2 - diff --git a/queue-6.4/drm-msm-a5xx-really-check-for-a510-in-a5xx_gpu_init.patch b/queue-6.4/drm-msm-a5xx-really-check-for-a510-in-a5xx_gpu_init.patch deleted file mode 100644 index 945ed825137..00000000000 --- a/queue-6.4/drm-msm-a5xx-really-check-for-a510-in-a5xx_gpu_init.patch +++ /dev/null @@ -1,50 +0,0 @@ -From ec4ce380c490e90dd209a5f82738bc12b2d5c195 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Sun, 9 Apr 2023 04:13:29 +0300 -Subject: drm/msm/a5xx: really check for A510 in a5xx_gpu_init - -From: Dmitry Baryshkov - -[ Upstream commit 736a9327365644b460e4498b1ce172ca411efcbc ] - -The commit 010c8bbad2cb ("drm: msm: adreno: Disable preemption on Adreno -510") added special handling for a510 (this SKU doesn't seem to support -preemption, so the driver should clamp nr_rings to 1). However the -gpu->revn is not yet set (it is set later, in adreno_gpu_init()) and -thus the condition is always false. Check config->rev instead. - -Fixes: 010c8bbad2cb ("drm: msm: adreno: Disable preemption on Adreno 510") -Reported-by: Adam Skladowski -Signed-off-by: Dmitry Baryshkov -Tested-by: Adam Skladowski -Patchwork: https://patchwork.freedesktop.org/patch/531511/ -Signed-off-by: Rob Clark -Signed-off-by: Sasha Levin ---- - drivers/gpu/drm/msm/adreno/a5xx_gpu.c | 3 ++- - 1 file changed, 2 insertions(+), 1 deletion(-) - -diff --git a/drivers/gpu/drm/msm/adreno/a5xx_gpu.c b/drivers/gpu/drm/msm/adreno/a5xx_gpu.c -index 1e8d2982d603c..a99310b687932 100644 ---- a/drivers/gpu/drm/msm/adreno/a5xx_gpu.c -+++ b/drivers/gpu/drm/msm/adreno/a5xx_gpu.c -@@ -1743,6 +1743,7 @@ struct msm_gpu *a5xx_gpu_init(struct drm_device *dev) - { - struct msm_drm_private *priv = dev->dev_private; - struct platform_device *pdev = priv->gpu_pdev; -+ struct adreno_platform_config *config = pdev->dev.platform_data; - struct a5xx_gpu *a5xx_gpu = NULL; - struct adreno_gpu *adreno_gpu; - struct msm_gpu *gpu; -@@ -1769,7 +1770,7 @@ struct msm_gpu *a5xx_gpu_init(struct drm_device *dev) - - nr_rings = 4; - -- if (adreno_is_a510(adreno_gpu)) -+ if (adreno_cmp_rev(ADRENO_REV(5, 1, 0, ANY_ID), config->rev)) - nr_rings = 1; - - ret = adreno_gpu_init(dev, pdev, adreno_gpu, &funcs, nr_rings); --- -2.39.2 - diff --git a/queue-6.4/drm-msm-a6xx-don-t-set-io_pgtable_quirk_arm_outer_wb.patch b/queue-6.4/drm-msm-a6xx-don-t-set-io_pgtable_quirk_arm_outer_wb.patch deleted file mode 100644 index 7a17f297643..00000000000 --- a/queue-6.4/drm-msm-a6xx-don-t-set-io_pgtable_quirk_arm_outer_wb.patch +++ /dev/null @@ -1,44 +0,0 @@ -From d26b39bcf435f82ccedb4e70e8537b307c0e3243 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Mon, 10 Apr 2023 21:52:26 +0300 -Subject: drm/msm/a6xx: don't set IO_PGTABLE_QUIRK_ARM_OUTER_WBWA with coherent - SMMU - -From: Dmitry Baryshkov - -[ Upstream commit 38e27a6fbf2206b18417c5985dbcdeca0f2026b8 ] - -If the Adreno SMMU is dma-coherent, allocation will fail unless we -disable IO_PGTABLE_QUIRK_ARM_OUTER_WBWA. Skip setting this quirk for the -coherent SMMUs (like we have on sm8350 platform). - -Fixes: 54af0ceb7595 ("arm64: dts: qcom: sm8350: add GPU, GMU, GPU CC and SMMU nodes") -Reported-by: David Heidelberg -Signed-off-by: Dmitry Baryshkov -Tested-by: David Heidelberg -Reviewed-by: Konrad Dybcio -Tested-by: Konrad Dybcio # SM8450 HDK -Patchwork: https://patchwork.freedesktop.org/patch/531562/ -Signed-off-by: Rob Clark -Signed-off-by: Sasha Levin ---- - drivers/gpu/drm/msm/adreno/a6xx_gpu.c | 3 ++- - 1 file changed, 2 insertions(+), 1 deletion(-) - -diff --git a/drivers/gpu/drm/msm/adreno/a6xx_gpu.c b/drivers/gpu/drm/msm/adreno/a6xx_gpu.c -index 52da3795b175d..411b7a5fa2f32 100644 ---- a/drivers/gpu/drm/msm/adreno/a6xx_gpu.c -+++ b/drivers/gpu/drm/msm/adreno/a6xx_gpu.c -@@ -1744,7 +1744,8 @@ a6xx_create_address_space(struct msm_gpu *gpu, struct platform_device *pdev) - * This allows GPU to set the bus attributes required to use system - * cache on behalf of the iommu page table walker. - */ -- if (!IS_ERR_OR_NULL(a6xx_gpu->htw_llc_slice)) -+ if (!IS_ERR_OR_NULL(a6xx_gpu->htw_llc_slice) && -+ !device_iommu_capable(&pdev->dev, IOMMU_CAP_CACHE_COHERENCY)) - quirks |= IO_PGTABLE_QUIRK_ARM_OUTER_WBWA; - - return adreno_iommu_create_address_space(gpu, pdev, quirks); --- -2.39.2 - diff --git a/queue-6.4/drm-msm-dp-drop-aux-devices-together-with-dp-control.patch b/queue-6.4/drm-msm-dp-drop-aux-devices-together-with-dp-control.patch deleted file mode 100644 index 2ec2dec5d3f..00000000000 --- a/queue-6.4/drm-msm-dp-drop-aux-devices-together-with-dp-control.patch +++ /dev/null @@ -1,92 +0,0 @@ -From aea0b17971a5cb8038b662d8761b341128e951a2 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Mon, 12 Jun 2023 15:01:06 -0700 -Subject: drm/msm/dp: Drop aux devices together with DP controller - -From: Bjorn Andersson - -[ Upstream commit a7bfb2ad2184a1fba78be35209b6019aa8cc8d4d ] - -Using devres to depopulate the aux bus made sure that upon a probe -deferral the EDP panel device would be destroyed and recreated upon next -attempt. - -But the struct device which the devres is tied to is the DPUs -(drm_dev->dev), which may be happen after the DP controller is torn -down. - -Indications of this can be seen in the commonly seen EDID-hexdump full -of zeros in the log, or the occasional/rare KASAN fault where the -panel's attempt to read the EDID information causes a use after free on -DP resources. - -It's tempting to move the devres to the DP controller's struct device, -but the resources used by the device(s) on the aux bus are explicitly -torn down in the error path. The KASAN-reported use-after-free also -remains, as the DP aux "module" explicitly frees its devres-allocated -memory in this code path. - -As such, explicitly depopulate the aux bus in the error path, and in the -component unbind path, to avoid these issues. - -Fixes: 2b57f726611e ("drm/msm/dp: fix aux-bus EP lifetime") -Signed-off-by: Bjorn Andersson -Reviewed-by: Dmitry Baryshkov -Reviewed-by: Douglas Anderson -Patchwork: https://patchwork.freedesktop.org/patch/542163/ -Link: https://lore.kernel.org/r/20230612220106.1884039-1-quic_bjorande@quicinc.com -Signed-off-by: Dmitry Baryshkov -Signed-off-by: Sasha Levin ---- - drivers/gpu/drm/msm/dp/dp_display.c | 14 +++----------- - 1 file changed, 3 insertions(+), 11 deletions(-) - -diff --git a/drivers/gpu/drm/msm/dp/dp_display.c b/drivers/gpu/drm/msm/dp/dp_display.c -index 03b0eda6df54a..294ab2bd856de 100644 ---- a/drivers/gpu/drm/msm/dp/dp_display.c -+++ b/drivers/gpu/drm/msm/dp/dp_display.c -@@ -329,6 +329,8 @@ static void dp_display_unbind(struct device *dev, struct device *master, - - kthread_stop(dp->ev_tsk); - -+ of_dp_aux_depopulate_bus(dp->aux); -+ - dp_power_client_deinit(dp->power); - dp_unregister_audio_driver(dev, dp->audio); - dp_aux_unregister(dp->aux); -@@ -1509,11 +1511,6 @@ void msm_dp_debugfs_init(struct msm_dp *dp_display, struct drm_minor *minor) - } - } - --static void of_dp_aux_depopulate_bus_void(void *data) --{ -- of_dp_aux_depopulate_bus(data); --} -- - static int dp_display_get_next_bridge(struct msm_dp *dp) - { - int rc; -@@ -1541,12 +1538,6 @@ static int dp_display_get_next_bridge(struct msm_dp *dp) - of_node_put(aux_bus); - if (rc) - goto error; -- -- rc = devm_add_action_or_reset(dp->drm_dev->dev, -- of_dp_aux_depopulate_bus_void, -- dp_priv->aux); -- if (rc) -- goto error; - } else if (dp->is_edp) { - DRM_ERROR("eDP aux_bus not found\n"); - return -ENODEV; -@@ -1570,6 +1561,7 @@ static int dp_display_get_next_bridge(struct msm_dp *dp) - - error: - if (dp->is_edp) { -+ of_dp_aux_depopulate_bus(dp_priv->aux); - dp_display_host_phy_exit(dp_priv); - dp_display_host_deinit(dp_priv); - } --- -2.39.2 - diff --git a/queue-6.4/drm-msm-dp-free-resources-after-unregistering-them.patch b/queue-6.4/drm-msm-dp-free-resources-after-unregistering-them.patch deleted file mode 100644 index 7f0b682c38e..00000000000 --- a/queue-6.4/drm-msm-dp-free-resources-after-unregistering-them.patch +++ /dev/null @@ -1,46 +0,0 @@ -From c777f518f9d77cc27e3ee86188c21a3fee70b1c3 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Mon, 12 Jun 2023 15:02:59 -0700 -Subject: drm/msm/dp: Free resources after unregistering them - -From: Bjorn Andersson - -[ Upstream commit fa0048a4b1fa7a50c8b0e514f5b428abdf69a6f8 ] - -The DP component's unbind operation walks through the submodules to -unregister and clean things up. But if the unbind happens because the DP -controller itself is being removed, all the memory for those submodules -has just been freed. - -Change the order of these operations to avoid the many use-after-free -that otherwise happens in this code path. - -Fixes: c943b4948b58 ("drm/msm/dp: add displayPort driver support") -Signed-off-by: Bjorn Andersson -Reviewed-by: Dmitry Baryshkov -Patchwork: https://patchwork.freedesktop.org/patch/542166/ -Link: https://lore.kernel.org/r/20230612220259.1884381-1-quic_bjorande@quicinc.com -Signed-off-by: Dmitry Baryshkov -Signed-off-by: Sasha Levin ---- - drivers/gpu/drm/msm/dp/dp_display.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/drivers/gpu/drm/msm/dp/dp_display.c b/drivers/gpu/drm/msm/dp/dp_display.c -index 294ab2bd856de..cffb3f41f6023 100644 ---- a/drivers/gpu/drm/msm/dp/dp_display.c -+++ b/drivers/gpu/drm/msm/dp/dp_display.c -@@ -1330,9 +1330,9 @@ static int dp_display_remove(struct platform_device *pdev) - { - struct dp_display_private *dp = dev_get_dp_display_private(&pdev->dev); - -+ component_del(&pdev->dev, &dp_display_comp_ops); - dp_display_deinit_sub_modules(dp); - -- component_del(&pdev->dev, &dp_display_comp_ops); - platform_set_drvdata(pdev, NULL); - - return 0; --- -2.39.2 - diff --git a/queue-6.4/drm-msm-dpu-always-clear-every-individual-pending-fl.patch b/queue-6.4/drm-msm-dpu-always-clear-every-individual-pending-fl.patch deleted file mode 100644 index 7174ff1a264..00000000000 --- a/queue-6.4/drm-msm-dpu-always-clear-every-individual-pending-fl.patch +++ /dev/null @@ -1,54 +0,0 @@ -From 775a1cb5ea9fcbde4b2a592697a8ef2040968f4b Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Thu, 25 May 2023 10:40:55 -0700 -Subject: drm/msm/dpu: always clear every individual pending flush mask - -From: Kuogee Hsieh - -[ Upstream commit 625cbb077007698060b12d0ae5657a4d8411b153 ] - -There are two tiers of pending flush control, top level and -individual hardware block. Currently only the top level of -flush mask is reset to 0 but the individual pending flush masks -of particular hardware blocks are left at their previous values, -eventually accumulating all possible bit values and typically -flushing more than necessary. -Reset all individual hardware block flush masks to 0 to avoid -accidentally flushing them. - -Changes in V13: --- rewording commit text --- add an empty space line as suggested - -Changes in V14: --- add Fixes tag - -Fixes: 73bfb790ac78 ("msm:disp:dpu1: setup display datapath for SC7180 target") -Signed-off-by: Kuogee Hsieh -Reviewed-by: Dmitry Baryshkov -Reviewed-by: Marijn Suijten -Patchwork: https://patchwork.freedesktop.org/patch/539508/ -Link: https://lore.kernel.org/r/1685036458-22683-8-git-send-email-quic_khsieh@quicinc.com -Signed-off-by: Dmitry Baryshkov -Signed-off-by: Sasha Levin ---- - drivers/gpu/drm/msm/disp/dpu1/dpu_hw_ctl.c | 3 +++ - 1 file changed, 3 insertions(+) - -diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_ctl.c b/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_ctl.c -index e57faf5906a8b..f6270b7a0b140 100644 ---- a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_ctl.c -+++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_ctl.c -@@ -117,6 +117,9 @@ static inline void dpu_hw_ctl_clear_pending_flush(struct dpu_hw_ctl *ctx) - trace_dpu_hw_ctl_clear_pending_flush(ctx->pending_flush_mask, - dpu_hw_ctl_get_flush_register(ctx)); - ctx->pending_flush_mask = 0x0; -+ ctx->pending_intf_flush_mask = 0; -+ ctx->pending_wb_flush_mask = 0; -+ ctx->pending_merge_3d_flush_mask = 0; - - memset(ctx->pending_dspp_flush_mask, 0, - sizeof(ctx->pending_dspp_flush_mask)); --- -2.39.2 - diff --git a/queue-6.4/drm-msm-dpu-correct-merge_3d-length.patch b/queue-6.4/drm-msm-dpu-correct-merge_3d-length.patch deleted file mode 100644 index 93dc28bee73..00000000000 --- a/queue-6.4/drm-msm-dpu-correct-merge_3d-length.patch +++ /dev/null @@ -1,39 +0,0 @@ -From a4c73373a65cf6d943e42b4d733e811d1ed9e737 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Tue, 13 Jun 2023 03:09:41 +0300 -Subject: drm/msm/dpu: correct MERGE_3D length - -From: Dmitry Baryshkov - -[ Upstream commit 9a6c13b847d61b0c3796820ca6e976789df59cd8 ] - -Each MERGE_3D block has just two registers. Correct the block length -accordingly. - -Fixes: 4369c93cf36b ("drm/msm/dpu: initial support for merge3D hardware block") -Signed-off-by: Dmitry Baryshkov -Reviewed-by: Abhinav Kumar -Patchwork: https://patchwork.freedesktop.org/patch/542177/ -Reviewed-by: Marijn Suijten -Link: https://lore.kernel.org/r/20230613001004.3426676-3-dmitry.baryshkov@linaro.org -Signed-off-by: Sasha Levin ---- - drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.c b/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.c -index d6fc605dc4446..0b604f31197bb 100644 ---- a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.c -+++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.c -@@ -520,7 +520,7 @@ static const struct dpu_pingpong_sub_blks sc7280_pp_sblk = { - #define MERGE_3D_BLK(_name, _id, _base) \ - {\ - .name = _name, .id = _id, \ -- .base = _base, .len = 0x100, \ -+ .base = _base, .len = 0x8, \ - .features = MERGE_3D_SM8150_MASK, \ - .sblk = NULL \ - } --- -2.39.2 - diff --git a/queue-6.4/drm-msm-dpu-disable-pingpong-te-on-dpu-5.0.0-and-abo.patch b/queue-6.4/drm-msm-dpu-disable-pingpong-te-on-dpu-5.0.0-and-abo.patch deleted file mode 100644 index c7d771f50c0..00000000000 --- a/queue-6.4/drm-msm-dpu-disable-pingpong-te-on-dpu-5.0.0-and-abo.patch +++ /dev/null @@ -1,307 +0,0 @@ -From a2dcb8ec72ff1ef408dc7dc1a02e5a4ff2dfb5cd Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Thu, 27 Apr 2023 00:37:28 +0200 -Subject: drm/msm/dpu: Disable pingpong TE on DPU 5.0.0 and above - -From: Marijn Suijten - -[ Upstream commit fe9d66cf6e8d2f6651e55ae57026464a080c2f2a ] - -Since hardware revision 5.0.0 the TE configuration moved out of the -PINGPONG block into the INTF block. Writing these registers has no -effect, and is omitted downstream via the DPU/SDE_PINGPONG_TE feature -flag. This flag is only added to PINGPONG blocks used by hardware prior -to 5.0.0. - -The existing PP_BLK_TE macro has been removed in favour of directly -passing this feature flag, which has thus far been the only difference -with PP_BLK. PP_BLK_DITHER has been left in place as its embedded -feature flag already excludes this DPU_PINGPONG_TE bit and differs by -setting the block length to zero, as it only contains a DITHER subblock. - -The code that writes to these registers in the INTF block will follow in -subsequent patches. - -Signed-off-by: Marijn Suijten -Reviewed-by: Konrad Dybcio -Reviewed-by: Dmitry Baryshkov -Patchwork: https://patchwork.freedesktop.org/patch/534240/ -Link: https://lore.kernel.org/r/20230411-dpu-intf-te-v4-14-27ce1a5ab5c6@somainline.org -Signed-off-by: Dmitry Baryshkov -Stable-dep-of: 0b78be614c50 ("drm/msm/dpu: fix sc7280 and sc7180 PINGPONG done interrupts") -Signed-off-by: Sasha Levin ---- - .../msm/disp/dpu1/catalog/dpu_3_0_msm8998.h | 8 +++---- - .../msm/disp/dpu1/catalog/dpu_4_0_sdm845.h | 8 +++---- - .../msm/disp/dpu1/catalog/dpu_5_0_sm8150.h | 12 +++++----- - .../msm/disp/dpu1/catalog/dpu_5_1_sc8180x.h | 12 +++++----- - .../msm/disp/dpu1/catalog/dpu_6_0_sm8250.h | 12 +++++----- - .../msm/disp/dpu1/catalog/dpu_6_2_sc7180.h | 4 ++-- - .../msm/disp/dpu1/catalog/dpu_6_3_sm6115.h | 2 +- - .../msm/disp/dpu1/catalog/dpu_6_5_qcm2290.h | 2 +- - .../gpu/drm/msm/disp/dpu1/dpu_hw_catalog.c | 22 +++++++------------ - .../gpu/drm/msm/disp/dpu1/dpu_hw_pingpong.c | 12 +++++----- - 10 files changed, 45 insertions(+), 49 deletions(-) - -diff --git a/drivers/gpu/drm/msm/disp/dpu1/catalog/dpu_3_0_msm8998.h b/drivers/gpu/drm/msm/disp/dpu1/catalog/dpu_3_0_msm8998.h -index 9116129527797..ff9ccf72a4bf9 100644 ---- a/drivers/gpu/drm/msm/disp/dpu1/catalog/dpu_3_0_msm8998.h -+++ b/drivers/gpu/drm/msm/disp/dpu1/catalog/dpu_3_0_msm8998.h -@@ -112,16 +112,16 @@ static const struct dpu_lm_cfg msm8998_lm[] = { - }; - - static const struct dpu_pingpong_cfg msm8998_pp[] = { -- PP_BLK_TE("pingpong_0", PINGPONG_0, 0x70000, 0, sdm845_pp_sblk_te, -+ PP_BLK("pingpong_0", PINGPONG_0, 0x70000, PINGPONG_SDM845_TE2_MASK, 0, sdm845_pp_sblk_te, - DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 8), - DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 12)), -- PP_BLK_TE("pingpong_1", PINGPONG_1, 0x70800, 0, sdm845_pp_sblk_te, -+ PP_BLK("pingpong_1", PINGPONG_1, 0x70800, PINGPONG_SDM845_TE2_MASK, 0, sdm845_pp_sblk_te, - DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 9), - DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 13)), -- PP_BLK("pingpong_2", PINGPONG_2, 0x71000, 0, sdm845_pp_sblk, -+ PP_BLK("pingpong_2", PINGPONG_2, 0x71000, PINGPONG_SDM845_MASK, 0, sdm845_pp_sblk, - DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 10), - DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 14)), -- PP_BLK("pingpong_3", PINGPONG_3, 0x71800, 0, sdm845_pp_sblk, -+ PP_BLK("pingpong_3", PINGPONG_3, 0x71800, PINGPONG_SDM845_MASK, 0, sdm845_pp_sblk, - DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 11), - DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 15)), - }; -diff --git a/drivers/gpu/drm/msm/disp/dpu1/catalog/dpu_4_0_sdm845.h b/drivers/gpu/drm/msm/disp/dpu1/catalog/dpu_4_0_sdm845.h -index ceca741e93c9b..5b9b3b99f1b5f 100644 ---- a/drivers/gpu/drm/msm/disp/dpu1/catalog/dpu_4_0_sdm845.h -+++ b/drivers/gpu/drm/msm/disp/dpu1/catalog/dpu_4_0_sdm845.h -@@ -110,16 +110,16 @@ static const struct dpu_lm_cfg sdm845_lm[] = { - }; - - static const struct dpu_pingpong_cfg sdm845_pp[] = { -- PP_BLK_TE("pingpong_0", PINGPONG_0, 0x70000, 0, sdm845_pp_sblk_te, -+ PP_BLK("pingpong_0", PINGPONG_0, 0x70000, PINGPONG_SDM845_TE2_MASK, 0, sdm845_pp_sblk_te, - DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 8), - DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 12)), -- PP_BLK_TE("pingpong_1", PINGPONG_1, 0x70800, 0, sdm845_pp_sblk_te, -+ PP_BLK("pingpong_1", PINGPONG_1, 0x70800, PINGPONG_SDM845_TE2_MASK, 0, sdm845_pp_sblk_te, - DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 9), - DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 13)), -- PP_BLK("pingpong_2", PINGPONG_2, 0x71000, 0, sdm845_pp_sblk, -+ PP_BLK("pingpong_2", PINGPONG_2, 0x71000, PINGPONG_SDM845_MASK, 0, sdm845_pp_sblk, - DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 10), - DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 14)), -- PP_BLK("pingpong_3", PINGPONG_3, 0x71800, 0, sdm845_pp_sblk, -+ PP_BLK("pingpong_3", PINGPONG_3, 0x71800, PINGPONG_SDM845_MASK, 0, sdm845_pp_sblk, - DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 11), - DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 15)), - }; -diff --git a/drivers/gpu/drm/msm/disp/dpu1/catalog/dpu_5_0_sm8150.h b/drivers/gpu/drm/msm/disp/dpu1/catalog/dpu_5_0_sm8150.h -index 42b0e58624d00..074ba54d420f4 100644 ---- a/drivers/gpu/drm/msm/disp/dpu1/catalog/dpu_5_0_sm8150.h -+++ b/drivers/gpu/drm/msm/disp/dpu1/catalog/dpu_5_0_sm8150.h -@@ -128,22 +128,22 @@ static const struct dpu_dspp_cfg sm8150_dspp[] = { - }; - - static const struct dpu_pingpong_cfg sm8150_pp[] = { -- PP_BLK("pingpong_0", PINGPONG_0, 0x70000, MERGE_3D_0, sdm845_pp_sblk, -+ PP_BLK("pingpong_0", PINGPONG_0, 0x70000, PINGPONG_SM8150_MASK, MERGE_3D_0, sdm845_pp_sblk, - DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 8), - DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 12)), -- PP_BLK("pingpong_1", PINGPONG_1, 0x70800, MERGE_3D_0, sdm845_pp_sblk, -+ PP_BLK("pingpong_1", PINGPONG_1, 0x70800, PINGPONG_SM8150_MASK, MERGE_3D_0, sdm845_pp_sblk, - DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 9), - DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 13)), -- PP_BLK("pingpong_2", PINGPONG_2, 0x71000, MERGE_3D_1, sdm845_pp_sblk, -+ PP_BLK("pingpong_2", PINGPONG_2, 0x71000, PINGPONG_SM8150_MASK, MERGE_3D_1, sdm845_pp_sblk, - DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 10), - DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 14)), -- PP_BLK("pingpong_3", PINGPONG_3, 0x71800, MERGE_3D_1, sdm845_pp_sblk, -+ PP_BLK("pingpong_3", PINGPONG_3, 0x71800, PINGPONG_SM8150_MASK, MERGE_3D_1, sdm845_pp_sblk, - DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 11), - DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 15)), -- PP_BLK("pingpong_4", PINGPONG_4, 0x72000, MERGE_3D_2, sdm845_pp_sblk, -+ PP_BLK("pingpong_4", PINGPONG_4, 0x72000, PINGPONG_SM8150_MASK, MERGE_3D_2, sdm845_pp_sblk, - DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 30), - -1), -- PP_BLK("pingpong_5", PINGPONG_5, 0x72800, MERGE_3D_2, sdm845_pp_sblk, -+ PP_BLK("pingpong_5", PINGPONG_5, 0x72800, PINGPONG_SM8150_MASK, MERGE_3D_2, sdm845_pp_sblk, - DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 31), - -1), - }; -diff --git a/drivers/gpu/drm/msm/disp/dpu1/catalog/dpu_5_1_sc8180x.h b/drivers/gpu/drm/msm/disp/dpu1/catalog/dpu_5_1_sc8180x.h -index e3bdfe7b30f1f..0540d21810857 100644 ---- a/drivers/gpu/drm/msm/disp/dpu1/catalog/dpu_5_1_sc8180x.h -+++ b/drivers/gpu/drm/msm/disp/dpu1/catalog/dpu_5_1_sc8180x.h -@@ -116,22 +116,22 @@ static const struct dpu_lm_cfg sc8180x_lm[] = { - }; - - static const struct dpu_pingpong_cfg sc8180x_pp[] = { -- PP_BLK("pingpong_0", PINGPONG_0, 0x70000, MERGE_3D_0, sdm845_pp_sblk, -+ PP_BLK("pingpong_0", PINGPONG_0, 0x70000, PINGPONG_SM8150_MASK, MERGE_3D_0, sdm845_pp_sblk, - DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 8), - DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 12)), -- PP_BLK("pingpong_1", PINGPONG_1, 0x70800, MERGE_3D_0, sdm845_pp_sblk, -+ PP_BLK("pingpong_1", PINGPONG_1, 0x70800, PINGPONG_SM8150_MASK, MERGE_3D_0, sdm845_pp_sblk, - DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 9), - DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 13)), -- PP_BLK("pingpong_2", PINGPONG_2, 0x71000, MERGE_3D_1, sdm845_pp_sblk, -+ PP_BLK("pingpong_2", PINGPONG_2, 0x71000, PINGPONG_SM8150_MASK, MERGE_3D_1, sdm845_pp_sblk, - DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 10), - DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 14)), -- PP_BLK("pingpong_3", PINGPONG_3, 0x71800, MERGE_3D_1, sdm845_pp_sblk, -+ PP_BLK("pingpong_3", PINGPONG_3, 0x71800, PINGPONG_SM8150_MASK, MERGE_3D_1, sdm845_pp_sblk, - DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 11), - DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 15)), -- PP_BLK("pingpong_4", PINGPONG_4, 0x72000, MERGE_3D_2, sdm845_pp_sblk, -+ PP_BLK("pingpong_4", PINGPONG_4, 0x72000, PINGPONG_SM8150_MASK, MERGE_3D_2, sdm845_pp_sblk, - DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 30), - -1), -- PP_BLK("pingpong_5", PINGPONG_5, 0x72800, MERGE_3D_2, sdm845_pp_sblk, -+ PP_BLK("pingpong_5", PINGPONG_5, 0x72800, PINGPONG_SM8150_MASK, MERGE_3D_2, sdm845_pp_sblk, - DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 31), - -1), - }; -diff --git a/drivers/gpu/drm/msm/disp/dpu1/catalog/dpu_6_0_sm8250.h b/drivers/gpu/drm/msm/disp/dpu1/catalog/dpu_6_0_sm8250.h -index ed130582873c7..b3284de35b8fa 100644 ---- a/drivers/gpu/drm/msm/disp/dpu1/catalog/dpu_6_0_sm8250.h -+++ b/drivers/gpu/drm/msm/disp/dpu1/catalog/dpu_6_0_sm8250.h -@@ -129,22 +129,22 @@ static const struct dpu_dspp_cfg sm8250_dspp[] = { - }; - - static const struct dpu_pingpong_cfg sm8250_pp[] = { -- PP_BLK("pingpong_0", PINGPONG_0, 0x70000, MERGE_3D_0, sdm845_pp_sblk, -+ PP_BLK("pingpong_0", PINGPONG_0, 0x70000, PINGPONG_SM8150_MASK, MERGE_3D_0, sdm845_pp_sblk, - DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 8), - DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 12)), -- PP_BLK("pingpong_1", PINGPONG_1, 0x70800, MERGE_3D_0, sdm845_pp_sblk, -+ PP_BLK("pingpong_1", PINGPONG_1, 0x70800, PINGPONG_SM8150_MASK, MERGE_3D_0, sdm845_pp_sblk, - DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 9), - DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 13)), -- PP_BLK("pingpong_2", PINGPONG_2, 0x71000, MERGE_3D_1, sdm845_pp_sblk, -+ PP_BLK("pingpong_2", PINGPONG_2, 0x71000, PINGPONG_SM8150_MASK, MERGE_3D_1, sdm845_pp_sblk, - DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 10), - DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 14)), -- PP_BLK("pingpong_3", PINGPONG_3, 0x71800, MERGE_3D_1, sdm845_pp_sblk, -+ PP_BLK("pingpong_3", PINGPONG_3, 0x71800, PINGPONG_SM8150_MASK, MERGE_3D_1, sdm845_pp_sblk, - DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 11), - DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 15)), -- PP_BLK("pingpong_4", PINGPONG_4, 0x72000, MERGE_3D_2, sdm845_pp_sblk, -+ PP_BLK("pingpong_4", PINGPONG_4, 0x72000, PINGPONG_SM8150_MASK, MERGE_3D_2, sdm845_pp_sblk, - DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 30), - -1), -- PP_BLK("pingpong_5", PINGPONG_5, 0x72800, MERGE_3D_2, sdm845_pp_sblk, -+ PP_BLK("pingpong_5", PINGPONG_5, 0x72800, PINGPONG_SM8150_MASK, MERGE_3D_2, sdm845_pp_sblk, - DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 31), - -1), - }; -diff --git a/drivers/gpu/drm/msm/disp/dpu1/catalog/dpu_6_2_sc7180.h b/drivers/gpu/drm/msm/disp/dpu1/catalog/dpu_6_2_sc7180.h -index b08b3e9237b3a..e905b0c6843a0 100644 ---- a/drivers/gpu/drm/msm/disp/dpu1/catalog/dpu_6_2_sc7180.h -+++ b/drivers/gpu/drm/msm/disp/dpu1/catalog/dpu_6_2_sc7180.h -@@ -80,8 +80,8 @@ static const struct dpu_dspp_cfg sc7180_dspp[] = { - }; - - static const struct dpu_pingpong_cfg sc7180_pp[] = { -- PP_BLK("pingpong_0", PINGPONG_0, 0x70000, 0, sdm845_pp_sblk, -1, -1), -- PP_BLK("pingpong_1", PINGPONG_1, 0x70800, 0, sdm845_pp_sblk, -1, -1), -+ PP_BLK("pingpong_0", PINGPONG_0, 0x70000, PINGPONG_SM8150_MASK, 0, sdm845_pp_sblk, -1, -1), -+ PP_BLK("pingpong_1", PINGPONG_1, 0x70800, PINGPONG_SM8150_MASK, 0, sdm845_pp_sblk, -1, -1), - }; - - static const struct dpu_intf_cfg sc7180_intf[] = { -diff --git a/drivers/gpu/drm/msm/disp/dpu1/catalog/dpu_6_3_sm6115.h b/drivers/gpu/drm/msm/disp/dpu1/catalog/dpu_6_3_sm6115.h -index 988d820f7ef2e..e15dc96f1286a 100644 ---- a/drivers/gpu/drm/msm/disp/dpu1/catalog/dpu_6_3_sm6115.h -+++ b/drivers/gpu/drm/msm/disp/dpu1/catalog/dpu_6_3_sm6115.h -@@ -60,7 +60,7 @@ static const struct dpu_dspp_cfg sm6115_dspp[] = { - }; - - static const struct dpu_pingpong_cfg sm6115_pp[] = { -- PP_BLK("pingpong_0", PINGPONG_0, 0x70000, 0, sdm845_pp_sblk, -+ PP_BLK("pingpong_0", PINGPONG_0, 0x70000, PINGPONG_SM8150_MASK, 0, sdm845_pp_sblk, - DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 8), - DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 12)), - }; -diff --git a/drivers/gpu/drm/msm/disp/dpu1/catalog/dpu_6_5_qcm2290.h b/drivers/gpu/drm/msm/disp/dpu1/catalog/dpu_6_5_qcm2290.h -index c9003dcc1a59b..2ff98ef6999fe 100644 ---- a/drivers/gpu/drm/msm/disp/dpu1/catalog/dpu_6_5_qcm2290.h -+++ b/drivers/gpu/drm/msm/disp/dpu1/catalog/dpu_6_5_qcm2290.h -@@ -57,7 +57,7 @@ static const struct dpu_dspp_cfg qcm2290_dspp[] = { - }; - - static const struct dpu_pingpong_cfg qcm2290_pp[] = { -- PP_BLK("pingpong_0", PINGPONG_0, 0x70000, 0, sdm845_pp_sblk, -+ PP_BLK("pingpong_0", PINGPONG_0, 0x70000, PINGPONG_SM8150_MASK, 0, sdm845_pp_sblk, - DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 8), - DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 12)), - }; -diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.c b/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.c -index 4624af5ef4570..d6fc605dc4446 100644 ---- a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.c -+++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.c -@@ -75,11 +75,15 @@ - #define MIXER_QCM2290_MASK \ - (BIT(DPU_DIM_LAYER) | BIT(DPU_MIXER_COMBINED_ALPHA)) - --#define PINGPONG_SDM845_MASK BIT(DPU_PINGPONG_DITHER) -+#define PINGPONG_SDM845_MASK \ -+ (BIT(DPU_PINGPONG_DITHER) | BIT(DPU_PINGPONG_TE)) - --#define PINGPONG_SDM845_SPLIT_MASK \ -+#define PINGPONG_SDM845_TE2_MASK \ - (PINGPONG_SDM845_MASK | BIT(DPU_PINGPONG_TE2)) - -+#define PINGPONG_SM8150_MASK \ -+ (BIT(DPU_PINGPONG_DITHER)) -+ - #define CTL_SC7280_MASK \ - (BIT(DPU_CTL_ACTIVE_CFG) | \ - BIT(DPU_CTL_FETCH_ACTIVE) | \ -@@ -499,21 +503,11 @@ static const struct dpu_pingpong_sub_blks sc7280_pp_sblk = { - .intr_done = _done, \ - .intr_rdptr = _rdptr, \ - } --#define PP_BLK_TE(_name, _id, _base, _merge_3d, _sblk, _done, _rdptr) \ -- {\ -- .name = _name, .id = _id, \ -- .base = _base, .len = 0xd4, \ -- .features = PINGPONG_SDM845_SPLIT_MASK, \ -- .merge_3d = _merge_3d, \ -- .sblk = &_sblk, \ -- .intr_done = _done, \ -- .intr_rdptr = _rdptr, \ -- } --#define PP_BLK(_name, _id, _base, _merge_3d, _sblk, _done, _rdptr) \ -+#define PP_BLK(_name, _id, _base, _features, _merge_3d, _sblk, _done, _rdptr) \ - {\ - .name = _name, .id = _id, \ - .base = _base, .len = 0xd4, \ -- .features = PINGPONG_SDM845_MASK, \ -+ .features = _features, \ - .merge_3d = _merge_3d, \ - .sblk = &_sblk, \ - .intr_done = _done, \ -diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_pingpong.c b/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_pingpong.c -index dea270c0936f4..4a20a5841f223 100644 ---- a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_pingpong.c -+++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_pingpong.c -@@ -300,11 +300,13 @@ static int dpu_hw_pp_setup_dsc(struct dpu_hw_pingpong *pp) - static void _setup_pingpong_ops(struct dpu_hw_pingpong *c, - unsigned long features) - { -- c->ops.setup_tearcheck = dpu_hw_pp_setup_te_config; -- c->ops.enable_tearcheck = dpu_hw_pp_enable_te; -- c->ops.connect_external_te = dpu_hw_pp_connect_external_te; -- c->ops.get_line_count = dpu_hw_pp_get_line_count; -- c->ops.disable_autorefresh = dpu_hw_pp_disable_autorefresh; -+ if (test_bit(DPU_PINGPONG_TE, &features)) { -+ c->ops.setup_tearcheck = dpu_hw_pp_setup_te_config; -+ c->ops.enable_tearcheck = dpu_hw_pp_enable_te; -+ c->ops.connect_external_te = dpu_hw_pp_connect_external_te; -+ c->ops.get_line_count = dpu_hw_pp_get_line_count; -+ c->ops.disable_autorefresh = dpu_hw_pp_disable_autorefresh; -+ } - c->ops.setup_dsc = dpu_hw_pp_setup_dsc; - c->ops.enable_dsc = dpu_hw_pp_dsc_enable; - c->ops.disable_dsc = dpu_hw_pp_dsc_disable; --- -2.39.2 - diff --git a/queue-6.4/drm-msm-dpu-do-not-enable-color-management-if-dspps-.patch b/queue-6.4/drm-msm-dpu-do-not-enable-color-management-if-dspps-.patch deleted file mode 100644 index 85af211f334..00000000000 --- a/queue-6.4/drm-msm-dpu-do-not-enable-color-management-if-dspps-.patch +++ /dev/null @@ -1,54 +0,0 @@ -From 0093daa9c87a5ef86e6eb8d387a3f7a757c46d3e Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Mon, 12 Jun 2023 21:25:33 +0300 -Subject: drm/msm/dpu: do not enable color-management if DSPPs are not - available - -From: Dmitry Baryshkov - -[ Upstream commit 3bcfc7b90465efd337d39b91b43972162f0d1908 ] - -We can not support color management without DSPP blocks being provided -in the HW catalog. Do not enable color management for CRTCs if num_dspps -is 0. - -Fixes: 4259ff7ae509 ("drm/msm/dpu: add support for pcc color block in dpu driver") -Reported-by: Yongqin Liu -Signed-off-by: Dmitry Baryshkov -Reviewed-by: Abhinav Kumar -Reviewed-by: Marijn Suijten -Reviewed-by: Sumit Semwal -Tested-by: Yongqin Liu -Patchwork: https://patchwork.freedesktop.org/patch/542141/ -Link: https://lore.kernel.org/r/20230612182534.3345805-1-dmitry.baryshkov@linaro.org -Signed-off-by: Sasha Levin ---- - drivers/gpu/drm/msm/disp/dpu1/dpu_crtc.c | 5 ++++- - 1 file changed, 4 insertions(+), 1 deletion(-) - -diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_crtc.c b/drivers/gpu/drm/msm/disp/dpu1/dpu_crtc.c -index cc66ddffe6723..eee48371126d8 100644 ---- a/drivers/gpu/drm/msm/disp/dpu1/dpu_crtc.c -+++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_crtc.c -@@ -1463,6 +1463,8 @@ static const struct drm_crtc_helper_funcs dpu_crtc_helper_funcs = { - struct drm_crtc *dpu_crtc_init(struct drm_device *dev, struct drm_plane *plane, - struct drm_plane *cursor) - { -+ struct msm_drm_private *priv = dev->dev_private; -+ struct dpu_kms *dpu_kms = to_dpu_kms(priv->kms); - struct drm_crtc *crtc = NULL; - struct dpu_crtc *dpu_crtc = NULL; - int i, ret; -@@ -1494,7 +1496,8 @@ struct drm_crtc *dpu_crtc_init(struct drm_device *dev, struct drm_plane *plane, - - drm_crtc_helper_add(crtc, &dpu_crtc_helper_funcs); - -- drm_crtc_enable_color_mgmt(crtc, 0, true, 0); -+ if (dpu_kms->catalog->dspp_count) -+ drm_crtc_enable_color_mgmt(crtc, 0, true, 0); - - /* save user friendly CRTC name for later */ - snprintf(dpu_crtc->name, DPU_CRTC_NAME_SIZE, "crtc%u", crtc->base.id); --- -2.39.2 - diff --git a/queue-6.4/drm-msm-dpu-drop-unused-poll_timeout_wr_ptr-pingpong.patch b/queue-6.4/drm-msm-dpu-drop-unused-poll_timeout_wr_ptr-pingpong.patch deleted file mode 100644 index 2c5de2a74dc..00000000000 --- a/queue-6.4/drm-msm-dpu-drop-unused-poll_timeout_wr_ptr-pingpong.patch +++ /dev/null @@ -1,83 +0,0 @@ -From d1381a6cc7bf3cde6c802507f4b2a15009a7c81c Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Thu, 27 Apr 2023 00:37:26 +0200 -Subject: drm/msm/dpu: Drop unused poll_timeout_wr_ptr PINGPONG callback - -From: Marijn Suijten - -[ Upstream commit a2623e72c52b2cf258b34675a8ff38c66e7d26fb ] - -This callback was migrated from downstream when DPU1 was first -introduced to mainline, but never used by any component. Drop it to -save some lines and unnecessary confusion. - -Suggested-by: Dmitry Baryshkov -Signed-off-by: Marijn Suijten -Reviewed-by: Konrad Dybcio -Reviewed-by: Dmitry Baryshkov -Patchwork: https://patchwork.freedesktop.org/patch/534215/ -Link: https://lore.kernel.org/r/20230411-dpu-intf-te-v4-12-27ce1a5ab5c6@somainline.org -Signed-off-by: Dmitry Baryshkov -Stable-dep-of: 0b78be614c50 ("drm/msm/dpu: fix sc7280 and sc7180 PINGPONG done interrupts") -Signed-off-by: Sasha Levin ---- - .../gpu/drm/msm/disp/dpu1/dpu_hw_pingpong.c | 18 ------------------ - .../gpu/drm/msm/disp/dpu1/dpu_hw_pingpong.h | 6 ------ - 2 files changed, 24 deletions(-) - -diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_pingpong.c b/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_pingpong.c -index 0fcad9760b6fc..b18efd640abd6 100644 ---- a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_pingpong.c -+++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_pingpong.c -@@ -144,23 +144,6 @@ static bool dpu_hw_pp_get_autorefresh_config(struct dpu_hw_pingpong *pp, - return !!((val & BIT(31)) >> 31); - } - --static int dpu_hw_pp_poll_timeout_wr_ptr(struct dpu_hw_pingpong *pp, -- u32 timeout_us) --{ -- struct dpu_hw_blk_reg_map *c; -- u32 val; -- int rc; -- -- if (!pp) -- return -EINVAL; -- -- c = &pp->hw; -- rc = readl_poll_timeout(c->blk_addr + PP_LINE_COUNT, -- val, (val & 0xffff) >= 1, 10, timeout_us); -- -- return rc; --} -- - static int dpu_hw_pp_enable_te(struct dpu_hw_pingpong *pp, bool enable) - { - struct dpu_hw_blk_reg_map *c; -@@ -280,7 +263,6 @@ static void _setup_pingpong_ops(struct dpu_hw_pingpong *c, - c->ops.get_vsync_info = dpu_hw_pp_get_vsync_info; - c->ops.setup_autorefresh = dpu_hw_pp_setup_autorefresh_config; - c->ops.get_autorefresh = dpu_hw_pp_get_autorefresh_config; -- c->ops.poll_timeout_wr_ptr = dpu_hw_pp_poll_timeout_wr_ptr; - c->ops.get_line_count = dpu_hw_pp_get_line_count; - c->ops.setup_dsc = dpu_hw_pp_setup_dsc; - c->ops.enable_dsc = dpu_hw_pp_dsc_enable; -diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_pingpong.h b/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_pingpong.h -index c00223441d990..cf94b4ab603b5 100644 ---- a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_pingpong.h -+++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_pingpong.h -@@ -107,12 +107,6 @@ struct dpu_hw_pingpong_ops { - bool (*get_autorefresh)(struct dpu_hw_pingpong *pp, - u32 *frame_count); - -- /** -- * poll until write pointer transmission starts -- * @Return: 0 on success, -ETIMEDOUT on timeout -- */ -- int (*poll_timeout_wr_ptr)(struct dpu_hw_pingpong *pp, u32 timeout_us); -- - /** - * Obtain current vertical line counter - */ --- -2.39.2 - diff --git a/queue-6.4/drm-msm-dpu-enable-dspp_2-3-for-lm_2-3-on-sm8450.patch b/queue-6.4/drm-msm-dpu-enable-dspp_2-3-for-lm_2-3-on-sm8450.patch deleted file mode 100644 index 99a469224f4..00000000000 --- a/queue-6.4/drm-msm-dpu-enable-dspp_2-3-for-lm_2-3-on-sm8450.patch +++ /dev/null @@ -1,41 +0,0 @@ -From bca4af020a06fe554f128c4cb2558d4973df2146 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Sat, 8 Apr 2023 03:27:48 +0300 -Subject: drm/msm/dpu: enable DSPP_2/3 for LM_2/3 on sm8450 - -From: Dmitry Baryshkov - -[ Upstream commit 800d28a4988d842d11e95d3dea491520ebf4991d ] - -Mark DSPP_2 and DSPP_3 as used for LM_2 and LM_3 - -Fixes: 100d7ef6995d ("drm/msm/dpu: add support for SM8450") -Signed-off-by: Dmitry Baryshkov -Reviewed-by: Abhinav Kumar -Patchwork: https://patchwork.freedesktop.org/patch/531491/ -Link: https://lore.kernel.org/r/20230408002750.2722304-3-dmitry.baryshkov@linaro.org -Signed-off-by: Dmitry Baryshkov -Signed-off-by: Sasha Levin ---- - drivers/gpu/drm/msm/disp/dpu1/catalog/dpu_8_1_sm8450.h | 4 ++-- - 1 file changed, 2 insertions(+), 2 deletions(-) - -diff --git a/drivers/gpu/drm/msm/disp/dpu1/catalog/dpu_8_1_sm8450.h b/drivers/gpu/drm/msm/disp/dpu1/catalog/dpu_8_1_sm8450.h -index 4ecb3df5cbc02..8bd4bb97e639c 100644 ---- a/drivers/gpu/drm/msm/disp/dpu1/catalog/dpu_8_1_sm8450.h -+++ b/drivers/gpu/drm/msm/disp/dpu1/catalog/dpu_8_1_sm8450.h -@@ -107,9 +107,9 @@ static const struct dpu_lm_cfg sm8450_lm[] = { - LM_BLK("lm_1", LM_1, 0x45000, MIXER_SDM845_MASK, - &sdm845_lm_sblk, PINGPONG_1, LM_0, DSPP_1), - LM_BLK("lm_2", LM_2, 0x46000, MIXER_SDM845_MASK, -- &sdm845_lm_sblk, PINGPONG_2, LM_3, 0), -+ &sdm845_lm_sblk, PINGPONG_2, LM_3, DSPP_2), - LM_BLK("lm_3", LM_3, 0x47000, MIXER_SDM845_MASK, -- &sdm845_lm_sblk, PINGPONG_3, LM_2, 0), -+ &sdm845_lm_sblk, PINGPONG_3, LM_2, DSPP_3), - LM_BLK("lm_4", LM_4, 0x48000, MIXER_SDM845_MASK, - &sdm845_lm_sblk, PINGPONG_4, LM_5, 0), - LM_BLK("lm_5", LM_5, 0x49000, MIXER_SDM845_MASK, --- -2.39.2 - diff --git a/queue-6.4/drm-msm-dpu-fix-cursor-block-register-bit-offset-in-.patch b/queue-6.4/drm-msm-dpu-fix-cursor-block-register-bit-offset-in-.patch deleted file mode 100644 index e8b43d6d26b..00000000000 --- a/queue-6.4/drm-msm-dpu-fix-cursor-block-register-bit-offset-in-.patch +++ /dev/null @@ -1,42 +0,0 @@ -From 9c9141bf0d60d0028666a133c97b2fd76eee3384 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Wed, 19 Apr 2023 16:41:15 +0200 -Subject: drm/msm/dpu: fix cursor block register bit offset in msm8998 hw - catalog - -From: Arnaud Vrac - -[ Upstream commit c95771905c494aa5c2abbb56b3e2f7d4aa3b34f9 ] - -This matches the value for both fbdev and sde implementations in the -downstream msm-4.4 repository. - -Signed-off-by: Arnaud Vrac -Fixes: 94391a14fc27 ("drm/msm/dpu1: Add MSM8998 to hw catalog") -Reviewed-by: Dmitry Baryshkov -Patchwork: https://patchwork.freedesktop.org/patch/532899/ -Link: https://lore.kernel.org/r/20230419-dpu-tweaks-v1-8-d1bac46db075@freebox.fr -Signed-off-by: Dmitry Baryshkov -Signed-off-by: Sasha Levin ---- - drivers/gpu/drm/msm/disp/dpu1/catalog/dpu_3_0_msm8998.h | 4 ++-- - 1 file changed, 2 insertions(+), 2 deletions(-) - -diff --git a/drivers/gpu/drm/msm/disp/dpu1/catalog/dpu_3_0_msm8998.h b/drivers/gpu/drm/msm/disp/dpu1/catalog/dpu_3_0_msm8998.h -index bdcd554fc8a80..9116129527797 100644 ---- a/drivers/gpu/drm/msm/disp/dpu1/catalog/dpu_3_0_msm8998.h -+++ b/drivers/gpu/drm/msm/disp/dpu1/catalog/dpu_3_0_msm8998.h -@@ -39,8 +39,8 @@ static const struct dpu_mdp_cfg msm8998_mdp[] = { - .clk_ctrls[DPU_CLK_CTRL_DMA1] = { .reg_off = 0x2b4, .bit_off = 8 }, - .clk_ctrls[DPU_CLK_CTRL_DMA2] = { .reg_off = 0x2c4, .bit_off = 8 }, - .clk_ctrls[DPU_CLK_CTRL_DMA3] = { .reg_off = 0x2c4, .bit_off = 12 }, -- .clk_ctrls[DPU_CLK_CTRL_CURSOR0] = { .reg_off = 0x3a8, .bit_off = 15 }, -- .clk_ctrls[DPU_CLK_CTRL_CURSOR1] = { .reg_off = 0x3b0, .bit_off = 15 }, -+ .clk_ctrls[DPU_CLK_CTRL_CURSOR0] = { .reg_off = 0x3a8, .bit_off = 16 }, -+ .clk_ctrls[DPU_CLK_CTRL_CURSOR1] = { .reg_off = 0x3b0, .bit_off = 16 }, - }, - }; - --- -2.39.2 - diff --git a/queue-6.4/drm-msm-dpu-fix-sc7280-and-sc7180-pingpong-done-inte.patch b/queue-6.4/drm-msm-dpu-fix-sc7280-and-sc7180-pingpong-done-inte.patch deleted file mode 100644 index 13655853feb..00000000000 --- a/queue-6.4/drm-msm-dpu-fix-sc7280-and-sc7180-pingpong-done-inte.patch +++ /dev/null @@ -1,74 +0,0 @@ -From a51b97eca8f77905efe7cbd93b8cc7fb1d393596 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Tue, 13 Jun 2023 03:09:40 +0300 -Subject: drm/msm/dpu: fix sc7280 and sc7180 PINGPONG done interrupts - -From: Dmitry Baryshkov - -[ Upstream commit 0b78be614c503ec03636f82cea52ad735c5085e7 ] - -During IRQ conversion we have lost the PP_DONE interrupts for sc7280 -platform. This was left unnoticed, because this interrupt is only used -for CMD outputs and probably no sc7[12]80 systems use DSI CMD panels. - -Fixes: 667e9985ee24 ("drm/msm/dpu: replace IRQ lookup with the data in hw catalog") -Signed-off-by: Dmitry Baryshkov -Reviewed-by: Abhinav Kumar -Reviewed-by: Marijn Suijten -Patchwork: https://patchwork.freedesktop.org/patch/542175/ -Link: https://lore.kernel.org/r/20230613001004.3426676-2-dmitry.baryshkov@linaro.org -Signed-off-by: Sasha Levin ---- - .../drm/msm/disp/dpu1/catalog/dpu_6_2_sc7180.h | 8 ++++++-- - .../drm/msm/disp/dpu1/catalog/dpu_7_2_sc7280.h | 16 ++++++++++++---- - 2 files changed, 18 insertions(+), 6 deletions(-) - -diff --git a/drivers/gpu/drm/msm/disp/dpu1/catalog/dpu_6_2_sc7180.h b/drivers/gpu/drm/msm/disp/dpu1/catalog/dpu_6_2_sc7180.h -index e905b0c6843a0..88c211876516a 100644 ---- a/drivers/gpu/drm/msm/disp/dpu1/catalog/dpu_6_2_sc7180.h -+++ b/drivers/gpu/drm/msm/disp/dpu1/catalog/dpu_6_2_sc7180.h -@@ -80,8 +80,12 @@ static const struct dpu_dspp_cfg sc7180_dspp[] = { - }; - - static const struct dpu_pingpong_cfg sc7180_pp[] = { -- PP_BLK("pingpong_0", PINGPONG_0, 0x70000, PINGPONG_SM8150_MASK, 0, sdm845_pp_sblk, -1, -1), -- PP_BLK("pingpong_1", PINGPONG_1, 0x70800, PINGPONG_SM8150_MASK, 0, sdm845_pp_sblk, -1, -1), -+ PP_BLK("pingpong_0", PINGPONG_0, 0x70000, PINGPONG_SM8150_MASK, 0, sdm845_pp_sblk, -+ DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 8), -+ -1), -+ PP_BLK("pingpong_1", PINGPONG_1, 0x70800, PINGPONG_SM8150_MASK, 0, sdm845_pp_sblk, -+ DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 9), -+ -1), - }; - - static const struct dpu_intf_cfg sc7180_intf[] = { -diff --git a/drivers/gpu/drm/msm/disp/dpu1/catalog/dpu_7_2_sc7280.h b/drivers/gpu/drm/msm/disp/dpu1/catalog/dpu_7_2_sc7280.h -index 9248479c60101..7de87185d5c0c 100644 ---- a/drivers/gpu/drm/msm/disp/dpu1/catalog/dpu_7_2_sc7280.h -+++ b/drivers/gpu/drm/msm/disp/dpu1/catalog/dpu_7_2_sc7280.h -@@ -87,10 +87,18 @@ static const struct dpu_dspp_cfg sc7280_dspp[] = { - }; - - static const struct dpu_pingpong_cfg sc7280_pp[] = { -- PP_BLK_DITHER("pingpong_0", PINGPONG_0, 0x69000, 0, sc7280_pp_sblk, -1, -1), -- PP_BLK_DITHER("pingpong_1", PINGPONG_1, 0x6a000, 0, sc7280_pp_sblk, -1, -1), -- PP_BLK_DITHER("pingpong_2", PINGPONG_2, 0x6b000, 0, sc7280_pp_sblk, -1, -1), -- PP_BLK_DITHER("pingpong_3", PINGPONG_3, 0x6c000, 0, sc7280_pp_sblk, -1, -1), -+ PP_BLK_DITHER("pingpong_0", PINGPONG_0, 0x69000, 0, sc7280_pp_sblk, -+ DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 8), -+ -1), -+ PP_BLK_DITHER("pingpong_1", PINGPONG_1, 0x6a000, 0, sc7280_pp_sblk, -+ DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 9), -+ -1), -+ PP_BLK_DITHER("pingpong_2", PINGPONG_2, 0x6b000, 0, sc7280_pp_sblk, -+ DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 10), -+ -1), -+ PP_BLK_DITHER("pingpong_3", PINGPONG_3, 0x6c000, 0, sc7280_pp_sblk, -+ DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 11), -+ -1), - }; - - static const struct dpu_intf_cfg sc7280_intf[] = { --- -2.39.2 - diff --git a/queue-6.4/drm-msm-dpu-fix-slice_last_group_size-calculation.patch b/queue-6.4/drm-msm-dpu-fix-slice_last_group_size-calculation.patch deleted file mode 100644 index 1d7f1dc15ad..00000000000 --- a/queue-6.4/drm-msm-dpu-fix-slice_last_group_size-calculation.patch +++ /dev/null @@ -1,44 +0,0 @@ -From e0f9dfbcf9658c1f0c473579575a595dfd94f73c Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Wed, 24 May 2023 10:45:20 -0700 -Subject: drm/msm/dpu: Fix slice_last_group_size calculation - -From: Jessica Zhang - -[ Upstream commit c223059e6f8340f7eac2319470984cbfc39c433b ] - -Correct the math for slice_last_group_size so that it matches the -calculations downstream. - -Fixes: c110cfd1753e ("drm/msm/disp/dpu1: Add support for DSC") -Reviewed-by: Dmitry Baryshkov -Reviewed-by: Marijn Suijten -Signed-off-by: Jessica Zhang -Patchwork: https://patchwork.freedesktop.org/patch/539269/ -Link: https://lore.kernel.org/r/20230329-rfc-msm-dsc-helper-v14-7-bafc7be95691@quicinc.com -Signed-off-by: Dmitry Baryshkov -Signed-off-by: Sasha Levin ---- - drivers/gpu/drm/msm/disp/dpu1/dpu_hw_dsc.c | 5 +++-- - 1 file changed, 3 insertions(+), 2 deletions(-) - -diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_dsc.c b/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_dsc.c -index 4e1396575e6aa..c3c70ba61c1c4 100644 ---- a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_dsc.c -+++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_dsc.c -@@ -54,9 +54,10 @@ static void dpu_hw_dsc_config(struct dpu_hw_dsc *hw_dsc, - if (is_cmd_mode) - initial_lines += 1; - -- slice_last_group_size = 3 - (dsc->slice_width % 3); -+ slice_last_group_size = (dsc->slice_width + 2) % 3; -+ - data = (initial_lines << 20); -- data |= ((slice_last_group_size - 1) << 18); -+ data |= (slice_last_group_size << 18); - /* bpp is 6.4 format, 4 LSBs bits are for fractional part */ - data |= (dsc->bits_per_pixel << 8); - data |= (dsc->block_pred_enable << 7); --- -2.39.2 - diff --git a/queue-6.4/drm-msm-dpu-move-autorefresh-disable-from-cmd-encode.patch b/queue-6.4/drm-msm-dpu-move-autorefresh-disable-from-cmd-encode.patch deleted file mode 100644 index 63d073c0881..00000000000 --- a/queue-6.4/drm-msm-dpu-move-autorefresh-disable-from-cmd-encode.patch +++ /dev/null @@ -1,254 +0,0 @@ -From 3db02ae7fa1caa9981fe9f13f7ecbdc252adeec7 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Thu, 27 Apr 2023 00:37:27 +0200 -Subject: drm/msm/dpu: Move autorefresh disable from CMD encoder to pingpong - -From: Marijn Suijten - -[ Upstream commit 4a7c38ec7d8efe96c4d8b4d5fc0efb5b06db58e9 ] - -This autorefresh disable logic in the physical command-mode encoder -consumes three callbacks to the pingpong block, and will explode in -unnecessary complexity when the same callbacks need to be called on the -interface block instead to accommodate INTF TE support. To clean this -up, move the logic into the pingpong block under a disable_autorefresh -callback, replacing the aforementioned three get_autorefresh, -setup_autorefresh and get_vsync_info callbacks. - -The same logic will have to be replicated to the interface block when it -receives INTF TE support, but it is less complex than constantly -switching on a "has_intf_te" boolean to choose a callback. - -Suggested-by: Dmitry Baryshkov -Signed-off-by: Marijn Suijten -Reviewed-by: Dmitry Baryshkov -Patchwork: https://patchwork.freedesktop.org/patch/534230/ -Link: https://lore.kernel.org/r/20230411-dpu-intf-te-v4-13-27ce1a5ab5c6@somainline.org -Signed-off-by: Dmitry Baryshkov -Stable-dep-of: 0b78be614c50 ("drm/msm/dpu: fix sc7280 and sc7180 PINGPONG done interrupts") -Signed-off-by: Sasha Levin ---- - .../drm/msm/disp/dpu1/dpu_encoder_phys_cmd.c | 60 ++----------------- - .../gpu/drm/msm/disp/dpu1/dpu_hw_pingpong.c | 47 ++++++++++++++- - .../gpu/drm/msm/disp/dpu1/dpu_hw_pingpong.h | 25 ++------ - drivers/gpu/drm/msm/disp/dpu1/dpu_kms.h | 4 ++ - 4 files changed, 57 insertions(+), 79 deletions(-) - -diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder_phys_cmd.c b/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder_phys_cmd.c -index 74470d068622e..a60fb8d3736b5 100644 ---- a/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder_phys_cmd.c -+++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder_phys_cmd.c -@@ -36,10 +36,6 @@ - #define DEFAULT_TEARCHECK_SYNC_THRESH_START 4 - #define DEFAULT_TEARCHECK_SYNC_THRESH_CONTINUE 4 - --#define DPU_ENC_WR_PTR_START_TIMEOUT_US 20000 -- --#define DPU_ENC_MAX_POLL_TIMEOUT_US 2000 -- - static void dpu_encoder_phys_cmd_enable_te(struct dpu_encoder_phys *phys_enc); - - static bool dpu_encoder_phys_cmd_is_master(struct dpu_encoder_phys *phys_enc) -@@ -574,28 +570,8 @@ static void dpu_encoder_phys_cmd_prepare_for_kickoff( - atomic_read(&phys_enc->pending_kickoff_cnt)); - } - --static bool dpu_encoder_phys_cmd_is_ongoing_pptx( -- struct dpu_encoder_phys *phys_enc) --{ -- struct dpu_hw_pp_vsync_info info; -- -- if (!phys_enc) -- return false; -- -- phys_enc->hw_pp->ops.get_vsync_info(phys_enc->hw_pp, &info); -- if (info.wr_ptr_line_count > 0 && -- info.wr_ptr_line_count < phys_enc->cached_mode.vdisplay) -- return true; -- -- return false; --} -- - static void dpu_encoder_phys_cmd_enable_te(struct dpu_encoder_phys *phys_enc) - { -- struct dpu_encoder_phys_cmd *cmd_enc = -- to_dpu_encoder_phys_cmd(phys_enc); -- int trial = 0; -- - if (!phys_enc) - return; - if (!phys_enc->hw_pp) -@@ -603,37 +579,11 @@ static void dpu_encoder_phys_cmd_enable_te(struct dpu_encoder_phys *phys_enc) - if (!dpu_encoder_phys_cmd_is_master(phys_enc)) - return; - -- /* If autorefresh is already disabled, we have nothing to do */ -- if (!phys_enc->hw_pp->ops.get_autorefresh(phys_enc->hw_pp, NULL)) -- return; -- -- /* -- * If autorefresh is enabled, disable it and make sure it is safe to -- * proceed with current frame commit/push. Sequence fallowed is, -- * 1. Disable TE -- * 2. Disable autorefresh config -- * 4. Poll for frame transfer ongoing to be false -- * 5. Enable TE back -- */ -- _dpu_encoder_phys_cmd_connect_te(phys_enc, false); -- phys_enc->hw_pp->ops.setup_autorefresh(phys_enc->hw_pp, 0, false); -- -- do { -- udelay(DPU_ENC_MAX_POLL_TIMEOUT_US); -- if ((trial * DPU_ENC_MAX_POLL_TIMEOUT_US) -- > (KICKOFF_TIMEOUT_MS * USEC_PER_MSEC)) { -- DPU_ERROR_CMDENC(cmd_enc, -- "disable autorefresh failed\n"); -- break; -- } -- -- trial++; -- } while (dpu_encoder_phys_cmd_is_ongoing_pptx(phys_enc)); -- -- _dpu_encoder_phys_cmd_connect_te(phys_enc, true); -- -- DPU_DEBUG_CMDENC(to_dpu_encoder_phys_cmd(phys_enc), -- "disabled autorefresh\n"); -+ if (phys_enc->hw_pp->ops.disable_autorefresh) { -+ phys_enc->hw_pp->ops.disable_autorefresh(phys_enc->hw_pp, -+ DRMID(phys_enc->parent), -+ phys_enc->cached_mode.vdisplay); -+ } - } - - static int _dpu_encoder_phys_cmd_wait_for_ctl_start( -diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_pingpong.c b/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_pingpong.c -index b18efd640abd6..dea270c0936f4 100644 ---- a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_pingpong.c -+++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_pingpong.c -@@ -228,6 +228,49 @@ static u32 dpu_hw_pp_get_line_count(struct dpu_hw_pingpong *pp) - return line; - } - -+static void dpu_hw_pp_disable_autorefresh(struct dpu_hw_pingpong *pp, -+ uint32_t encoder_id, u16 vdisplay) -+{ -+ struct dpu_hw_pp_vsync_info info; -+ int trial = 0; -+ -+ /* If autorefresh is already disabled, we have nothing to do */ -+ if (!dpu_hw_pp_get_autorefresh_config(pp, NULL)) -+ return; -+ -+ /* -+ * If autorefresh is enabled, disable it and make sure it is safe to -+ * proceed with current frame commit/push. Sequence followed is, -+ * 1. Disable TE -+ * 2. Disable autorefresh config -+ * 4. Poll for frame transfer ongoing to be false -+ * 5. Enable TE back -+ */ -+ -+ dpu_hw_pp_connect_external_te(pp, false); -+ dpu_hw_pp_setup_autorefresh_config(pp, 0, false); -+ -+ do { -+ udelay(DPU_ENC_MAX_POLL_TIMEOUT_US); -+ if ((trial * DPU_ENC_MAX_POLL_TIMEOUT_US) -+ > (KICKOFF_TIMEOUT_MS * USEC_PER_MSEC)) { -+ DPU_ERROR("enc%d pp%d disable autorefresh failed\n", -+ encoder_id, pp->idx - PINGPONG_0); -+ break; -+ } -+ -+ trial++; -+ -+ dpu_hw_pp_get_vsync_info(pp, &info); -+ } while (info.wr_ptr_line_count > 0 && -+ info.wr_ptr_line_count < vdisplay); -+ -+ dpu_hw_pp_connect_external_te(pp, true); -+ -+ DPU_DEBUG("enc%d pp%d disabled autorefresh\n", -+ encoder_id, pp->idx - PINGPONG_0); -+} -+ - static int dpu_hw_pp_dsc_enable(struct dpu_hw_pingpong *pp) - { - struct dpu_hw_blk_reg_map *c = &pp->hw; -@@ -260,10 +303,8 @@ static void _setup_pingpong_ops(struct dpu_hw_pingpong *c, - c->ops.setup_tearcheck = dpu_hw_pp_setup_te_config; - c->ops.enable_tearcheck = dpu_hw_pp_enable_te; - c->ops.connect_external_te = dpu_hw_pp_connect_external_te; -- c->ops.get_vsync_info = dpu_hw_pp_get_vsync_info; -- c->ops.setup_autorefresh = dpu_hw_pp_setup_autorefresh_config; -- c->ops.get_autorefresh = dpu_hw_pp_get_autorefresh_config; - c->ops.get_line_count = dpu_hw_pp_get_line_count; -+ c->ops.disable_autorefresh = dpu_hw_pp_disable_autorefresh; - c->ops.setup_dsc = dpu_hw_pp_setup_dsc; - c->ops.enable_dsc = dpu_hw_pp_dsc_enable; - c->ops.disable_dsc = dpu_hw_pp_dsc_disable; -diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_pingpong.h b/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_pingpong.h -index cf94b4ab603b5..851b013c4c4b6 100644 ---- a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_pingpong.h -+++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_pingpong.h -@@ -61,9 +61,6 @@ struct dpu_hw_dither_cfg { - * Assumption is these functions will be called after clocks are enabled - * @setup_tearcheck : program tear check values - * @enable_tearcheck : enables tear check -- * @get_vsync_info : retries timing info of the panel -- * @setup_autorefresh : configure and enable the autorefresh config -- * @get_autorefresh : retrieve autorefresh config from hardware - * @setup_dither : function to program the dither hw block - * @get_line_count: obtain current vertical line counter - */ -@@ -89,28 +86,14 @@ struct dpu_hw_pingpong_ops { - bool enable_external_te); - - /** -- * provides the programmed and current -- * line_count -- */ -- int (*get_vsync_info)(struct dpu_hw_pingpong *pp, -- struct dpu_hw_pp_vsync_info *info); -- -- /** -- * configure and enable the autorefresh config -- */ -- void (*setup_autorefresh)(struct dpu_hw_pingpong *pp, -- u32 frame_count, bool enable); -- -- /** -- * retrieve autorefresh config from hardware -+ * Obtain current vertical line counter - */ -- bool (*get_autorefresh)(struct dpu_hw_pingpong *pp, -- u32 *frame_count); -+ u32 (*get_line_count)(struct dpu_hw_pingpong *pp); - - /** -- * Obtain current vertical line counter -+ * Disable autorefresh if enabled - */ -- u32 (*get_line_count)(struct dpu_hw_pingpong *pp); -+ void (*disable_autorefresh)(struct dpu_hw_pingpong *pp, uint32_t encoder_id, u16 vdisplay); - - /** - * Setup dither matix for pingpong block -diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.h b/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.h -index aca39a4689f48..e7fc67381c2bd 100644 ---- a/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.h -+++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.h -@@ -118,6 +118,10 @@ struct vsync_info { - u32 line_count; - }; - -+#define DPU_ENC_WR_PTR_START_TIMEOUT_US 20000 -+ -+#define DPU_ENC_MAX_POLL_TIMEOUT_US 2000 -+ - #define to_dpu_kms(x) container_of(x, struct dpu_kms, base) - - #define to_dpu_global_state(x) container_of(x, struct dpu_global_state, base) --- -2.39.2 - diff --git a/queue-6.4/drm-msm-dpu-set-dpu_data_hctl_en-for-in-intf_sc7180_.patch b/queue-6.4/drm-msm-dpu-set-dpu_data_hctl_en-for-in-intf_sc7180_.patch deleted file mode 100644 index c959084b522..00000000000 --- a/queue-6.4/drm-msm-dpu-set-dpu_data_hctl_en-for-in-intf_sc7180_.patch +++ /dev/null @@ -1,48 +0,0 @@ -From dd7cf840124a4ccd4fbeb8278a25e5658df51fb2 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Fri, 19 May 2023 20:49:59 +0200 -Subject: drm/msm/dpu: Set DPU_DATA_HCTL_EN for in INTF_SC7180_MASK - -From: Konrad Dybcio - -[ Upstream commit a7129231edf329a00e92dbd2d741f6da728a4a06 ] - -DPU5 and newer targets enable this unconditionally. Move it from the -SC7280 mask to the SC7180 one. - -Fixes: 7e6ee55320f0 ("drm/msm/disp/dpu1: enable DATA_HCTL_EN for sc7280 target") -Reviewed-by: Dmitry Baryshkov -Reviewed-by: Marijn Suijten -Signed-off-by: Konrad Dybcio -Reviewed-by: Abhinav Kumar -Patchwork: https://patchwork.freedesktop.org/patch/538159/ -Link: https://lore.kernel.org/r/20230508-topic-hctl_en-v2-1-e7bea9f1f5dd@linaro.org -[DB: removed BIT(DPU_INTF_DATA_COMPRESS), which is not yet merged] -Signed-off-by: Dmitry Baryshkov -Signed-off-by: Sasha Levin ---- - drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.c | 7 +++++-- - 1 file changed, 5 insertions(+), 2 deletions(-) - -diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.c b/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.c -index 5369b1e61ba7f..4624af5ef4570 100644 ---- a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.c -+++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.c -@@ -98,9 +98,12 @@ - #define INTF_SDM845_MASK (0) - - #define INTF_SC7180_MASK \ -- (BIT(DPU_INTF_INPUT_CTRL) | BIT(DPU_INTF_TE) | BIT(DPU_INTF_STATUS_SUPPORTED)) -+ (BIT(DPU_INTF_INPUT_CTRL) | \ -+ BIT(DPU_INTF_TE) | \ -+ BIT(DPU_INTF_STATUS_SUPPORTED) | \ -+ BIT(DPU_DATA_HCTL_EN)) - --#define INTF_SC7280_MASK INTF_SC7180_MASK | BIT(DPU_DATA_HCTL_EN) -+#define INTF_SC7280_MASK (INTF_SC7180_MASK) - - #define WB_SM8250_MASK (BIT(DPU_WB_LINE_MODE) | \ - BIT(DPU_WB_UBWC) | \ --- -2.39.2 - diff --git a/queue-6.4/drm-msm-dpu-set-dsc-flush-bit-correctly-at-mdp-ctl-f.patch b/queue-6.4/drm-msm-dpu-set-dsc-flush-bit-correctly-at-mdp-ctl-f.patch deleted file mode 100644 index 050ca3a79b2..00000000000 --- a/queue-6.4/drm-msm-dpu-set-dsc-flush-bit-correctly-at-mdp-ctl-f.patch +++ /dev/null @@ -1,49 +0,0 @@ -From 03e005af0b94a0046d5fb798cc05c040bb061919 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Thu, 25 May 2023 10:40:49 -0700 -Subject: drm/msm/dpu: set DSC flush bit correctly at MDP CTL flush register - -From: Kuogee Hsieh - -[ Upstream commit 12cef323c903bd8b13d1f6ff24a9695c2cdc360b ] - -The CTL_FLUSH register should be programmed with the 22th bit -(DSC_IDX) to flush the DSC hardware blocks, not the literal value of -22 (which corresponds to flushing VIG1, VIG2 and RGB1 instead). - -Changes in V12: --- split this patch out of "separate DSC flush update out of interface" - -Changes in V13: --- rewording the commit text - -Changes in V14: --- drop 'DSC" from "The DSC CTL_FLUSH register" at commit text - -Fixes: 77f6da90487c ("drm/msm/disp/dpu1: Add DSC support in hw_ctl") -Signed-off-by: Kuogee Hsieh -Reviewed-by: Marijn Suijten -Patchwork: https://patchwork.freedesktop.org/patch/539496/ -Link: https://lore.kernel.org/r/1685036458-22683-2-git-send-email-quic_khsieh@quicinc.com -Signed-off-by: Dmitry Baryshkov -Signed-off-by: Sasha Levin ---- - drivers/gpu/drm/msm/disp/dpu1/dpu_hw_ctl.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_ctl.c b/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_ctl.c -index bbdc95ce374a7..e57faf5906a8b 100644 ---- a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_ctl.c -+++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_ctl.c -@@ -542,7 +542,7 @@ static void dpu_hw_ctl_intf_cfg_v1(struct dpu_hw_ctl *ctx, - DPU_REG_WRITE(c, CTL_MERGE_3D_ACTIVE, - BIT(cfg->merge_3d - MERGE_3D_0)); - if (cfg->dsc) { -- DPU_REG_WRITE(&ctx->hw, CTL_FLUSH, DSC_IDX); -+ DPU_REG_WRITE(&ctx->hw, CTL_FLUSH, BIT(DSC_IDX)); - DPU_REG_WRITE(c, CTL_DSC_ACTIVE, cfg->dsc); - } - } --- -2.39.2 - diff --git a/queue-6.4/drm-msm-dpu-use-v4.0-pcc-dspp-sub-block-in-sc7-12-80.patch b/queue-6.4/drm-msm-dpu-use-v4.0-pcc-dspp-sub-block-in-sc7-12-80.patch deleted file mode 100644 index 7b5dfdcaa56..00000000000 --- a/queue-6.4/drm-msm-dpu-use-v4.0-pcc-dspp-sub-block-in-sc7-12-80.patch +++ /dev/null @@ -1,74 +0,0 @@ -From bfc0b366189c863baf6b860fc9399ff0a652bf19 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Thu, 18 May 2023 23:29:08 +0200 -Subject: drm/msm/dpu: Use V4.0 PCC DSPP sub-block in SC7[12]80 - -From: Marijn Suijten - -[ Upstream commit 853b292b92d50d1b30628c92229e93d670304e51 ] - -According to various downstream sources the PCC sub-block inside DSPP is -version 4.0 since DPU 4.0 and higher, including SC7[12]80 at DPU version -6.2 and 7.2 respectively. After correcting the version this struct -becomes identical to sm8150_dspp_sblk which is used all across the -catalog: replace uses of sc7180_dspp_sblk with that and remove -the struct definition for sc7180_dspp_sblk entirely. - -Fixes: 4259ff7ae509e ("drm/msm/dpu: add support for pcc color block in dpu driver") -Signed-off-by: Marijn Suijten -Reviewed-by: Dmitry Baryshkov -Patchwork: https://patchwork.freedesktop.org/patch/537899/ -Link: https://lore.kernel.org/r/20230518-dpu-sc7180-pcc-version-v1-1-ec9ca4949e3e@somainline.org -Signed-off-by: Dmitry Baryshkov -Signed-off-by: Sasha Levin ---- - drivers/gpu/drm/msm/disp/dpu1/catalog/dpu_6_2_sc7180.h | 2 +- - drivers/gpu/drm/msm/disp/dpu1/catalog/dpu_7_2_sc7280.h | 2 +- - drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.c | 5 ----- - 3 files changed, 2 insertions(+), 7 deletions(-) - -diff --git a/drivers/gpu/drm/msm/disp/dpu1/catalog/dpu_6_2_sc7180.h b/drivers/gpu/drm/msm/disp/dpu1/catalog/dpu_6_2_sc7180.h -index a46b11730a4d4..b08b3e9237b3a 100644 ---- a/drivers/gpu/drm/msm/disp/dpu1/catalog/dpu_6_2_sc7180.h -+++ b/drivers/gpu/drm/msm/disp/dpu1/catalog/dpu_6_2_sc7180.h -@@ -76,7 +76,7 @@ static const struct dpu_lm_cfg sc7180_lm[] = { - - static const struct dpu_dspp_cfg sc7180_dspp[] = { - DSPP_BLK("dspp_0", DSPP_0, 0x54000, DSPP_SC7180_MASK, -- &sc7180_dspp_sblk), -+ &sm8150_dspp_sblk), - }; - - static const struct dpu_pingpong_cfg sc7180_pp[] = { -diff --git a/drivers/gpu/drm/msm/disp/dpu1/catalog/dpu_7_2_sc7280.h b/drivers/gpu/drm/msm/disp/dpu1/catalog/dpu_7_2_sc7280.h -index 6b2c7eae71d99..9248479c60101 100644 ---- a/drivers/gpu/drm/msm/disp/dpu1/catalog/dpu_7_2_sc7280.h -+++ b/drivers/gpu/drm/msm/disp/dpu1/catalog/dpu_7_2_sc7280.h -@@ -83,7 +83,7 @@ static const struct dpu_lm_cfg sc7280_lm[] = { - - static const struct dpu_dspp_cfg sc7280_dspp[] = { - DSPP_BLK("dspp_0", DSPP_0, 0x54000, DSPP_SC7180_MASK, -- &sc7180_dspp_sblk), -+ &sm8150_dspp_sblk), - }; - - static const struct dpu_pingpong_cfg sc7280_pp[] = { -diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.c b/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.c -index 5d994bce696f9..5369b1e61ba7f 100644 ---- a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.c -+++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.c -@@ -453,11 +453,6 @@ static const struct dpu_dspp_sub_blks msm8998_dspp_sblk = { - .len = 0x90, .version = 0x10007}, - }; - --static const struct dpu_dspp_sub_blks sc7180_dspp_sblk = { -- .pcc = {.id = DPU_DSPP_PCC, .base = 0x1700, -- .len = 0x90, .version = 0x10000}, --}; -- - static const struct dpu_dspp_sub_blks sm8150_dspp_sblk = { - .pcc = {.id = DPU_DSPP_PCC, .base = 0x1700, - .len = 0x90, .version = 0x40000}, --- -2.39.2 - diff --git a/queue-6.4/drm-msm-dsi-don-t-allow-enabling-14nm-vco-with-unpro.patch b/queue-6.4/drm-msm-dsi-don-t-allow-enabling-14nm-vco-with-unpro.patch deleted file mode 100644 index 5e7f924f6c1..00000000000 --- a/queue-6.4/drm-msm-dsi-don-t-allow-enabling-14nm-vco-with-unpro.patch +++ /dev/null @@ -1,45 +0,0 @@ -From 4ed7f162d7bf611d540bb9fc107afb9f9493b099 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Mon, 1 May 2023 04:12:57 +0300 -Subject: drm/msm/dsi: don't allow enabling 14nm VCO with unprogrammed rate - -From: Dmitry Baryshkov - -[ Upstream commit 1e0a97f84d73ea1182740f62069690c7f3271abb ] - -If the dispcc uses CLK_OPS_PARENT_ENABLE (e.g. on QCM2290), CCF can try -enabling VCO before the rate has been programmed. This can cause clock -lockups and/or other boot issues. Program the VCO to the minimal PLL -rate if the read rate is 0 Hz. - -Cc: Konrad Dybcio -Signed-off-by: Dmitry Baryshkov -Reported-by: Vladimir Zapolskiy -Reported-by: Konrad Dybcio -Reviewed-by: Konrad Dybcio -Fixes: f079f6d999cb ("drm/msm/dsi: Add PHY/PLL for 8x96") -Patchwork: https://patchwork.freedesktop.org/patch/534813/ -Link: https://lore.kernel.org/r/20230501011257.3460103-1-dmitry.baryshkov@linaro.org -Signed-off-by: Dmitry Baryshkov -Signed-off-by: Sasha Levin ---- - drivers/gpu/drm/msm/dsi/phy/dsi_phy_14nm.c | 3 +++ - 1 file changed, 3 insertions(+) - -diff --git a/drivers/gpu/drm/msm/dsi/phy/dsi_phy_14nm.c b/drivers/gpu/drm/msm/dsi/phy/dsi_phy_14nm.c -index 9f488adea7f54..3ce45b023e637 100644 ---- a/drivers/gpu/drm/msm/dsi/phy/dsi_phy_14nm.c -+++ b/drivers/gpu/drm/msm/dsi/phy/dsi_phy_14nm.c -@@ -539,6 +539,9 @@ static int dsi_pll_14nm_vco_prepare(struct clk_hw *hw) - if (unlikely(pll_14nm->phy->pll_on)) - return 0; - -+ if (dsi_pll_14nm_vco_recalc_rate(hw, VCO_REF_CLK_RATE) == 0) -+ dsi_pll_14nm_vco_set_rate(hw, pll_14nm->phy->cfg->min_pll_rate, VCO_REF_CLK_RATE); -+ - dsi_phy_write(base + REG_DSI_14nm_PHY_PLL_VREF_CFG1, 0x10); - dsi_phy_write(cmn_base + REG_DSI_14nm_PHY_CMN_PLL_CNTRL, 1); - --- -2.39.2 - diff --git a/queue-6.4/drm-msm-dsi-remove-incorrect-references-to-slice_cou.patch b/queue-6.4/drm-msm-dsi-remove-incorrect-references-to-slice_cou.patch deleted file mode 100644 index 1ed850f4a16..00000000000 --- a/queue-6.4/drm-msm-dsi-remove-incorrect-references-to-slice_cou.patch +++ /dev/null @@ -1,83 +0,0 @@ -From 3c4916285120208b89cbab9ba7272786cf6be5f9 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Fri, 9 Jun 2023 15:57:17 -0700 -Subject: drm/msm/dsi: Remove incorrect references to slice_count - -From: Jessica Zhang - -[ Upstream commit 155fa3a91d64221eb0885fd221cc8085dbef908f ] - -Currently, slice_count is being used to calculate word count and -pkt_per_line. Instead, these values should be calculated using slice per -packet, which is not the same as slice_count. - -Slice count represents the number of slices per interface, and its value -will not always match that of slice per packet. For example, it is possible -to have cases where there are multiple slices per interface but the panel -specifies only one slice per packet. - -Thus, use the default value of one slice per packet and remove slice_count -from the aforementioned calculations. - -Fixes: 08802f515c3c ("drm/msm/dsi: Add support for DSC configuration") -Fixes: bc6b6ff8135c ("drm/msm/dsi: Use DSC slice(s) packet size to compute word count") -Reviewed-by: Marijn Suijten -Signed-off-by: Jessica Zhang -Patchwork: https://patchwork.freedesktop.org/patch/541965/ -Link: https://lore.kernel.org/r/20230405-add-dsc-support-v6-5-95eab864d1b6@quicinc.com -Signed-off-by: Dmitry Baryshkov -Signed-off-by: Sasha Levin ---- - drivers/gpu/drm/msm/dsi/dsi_host.c | 26 ++++++++++++++++---------- - 1 file changed, 16 insertions(+), 10 deletions(-) - -diff --git a/drivers/gpu/drm/msm/dsi/dsi_host.c b/drivers/gpu/drm/msm/dsi/dsi_host.c -index 961689a255c47..735a7f6386df8 100644 ---- a/drivers/gpu/drm/msm/dsi/dsi_host.c -+++ b/drivers/gpu/drm/msm/dsi/dsi_host.c -@@ -850,18 +850,17 @@ static void dsi_update_dsc_timing(struct msm_dsi_host *msm_host, bool is_cmd_mod - */ - slice_per_intf = DIV_ROUND_UP(hdisplay, dsc->slice_width); - -- /* -- * If slice_count is greater than slice_per_intf -- * then default to 1. This can happen during partial -- * update. -- */ -- if (dsc->slice_count > slice_per_intf) -- dsc->slice_count = 1; -- - total_bytes_per_intf = dsc->slice_chunk_size * slice_per_intf; - - eol_byte_num = total_bytes_per_intf % 3; -- pkt_per_line = slice_per_intf / dsc->slice_count; -+ -+ /* -+ * Typically, pkt_per_line = slice_per_intf * slice_per_pkt. -+ * -+ * Since the current driver only supports slice_per_pkt = 1, -+ * pkt_per_line will be equal to slice per intf for now. -+ */ -+ pkt_per_line = slice_per_intf; - - if (is_cmd_mode) /* packet data type */ - reg = DSI_COMMAND_COMPRESSION_MODE_CTRL_STREAM0_DATATYPE(MIPI_DSI_DCS_LONG_WRITE); -@@ -985,7 +984,14 @@ static void dsi_timing_setup(struct msm_dsi_host *msm_host, bool is_bonded_dsi) - if (!msm_host->dsc) - wc = hdisplay * dsi_get_bpp(msm_host->format) / 8 + 1; - else -- wc = msm_host->dsc->slice_chunk_size * msm_host->dsc->slice_count + 1; -+ /* -+ * When DSC is enabled, WC = slice_chunk_size * slice_per_pkt + 1. -+ * Currently, the driver only supports default value of slice_per_pkt = 1 -+ * -+ * TODO: Expand mipi_dsi_device struct to hold slice_per_pkt info -+ * and adjust DSC math to account for slice_per_pkt. -+ */ -+ wc = msm_host->dsc->slice_chunk_size + 1; - - dsi_write(msm_host, REG_DSI_CMD_MDP_STREAM0_CTRL, - DSI_CMD_MDP_STREAM0_CTRL_WORD_COUNT(wc) | --- -2.39.2 - diff --git a/queue-6.4/drm-nouveau-dispnv50-fix-missing-prototypes-warning.patch b/queue-6.4/drm-nouveau-dispnv50-fix-missing-prototypes-warning.patch deleted file mode 100644 index cb2ba0f0b91..00000000000 --- a/queue-6.4/drm-nouveau-dispnv50-fix-missing-prototypes-warning.patch +++ /dev/null @@ -1,53 +0,0 @@ -From 758846a64900c58c2724ac45a5c4087ab2d96299 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Mon, 17 Apr 2023 23:03:23 +0200 -Subject: drm/nouveau: dispnv50: fix missing-prototypes warning - -From: Arnd Bergmann - -[ Upstream commit 504e72ed3a1b1c0d4450712a42ae6070d3a05a8e ] - -nv50_display_create() is declared in another header, along with -a couple of declarations that are now outdated: - -drivers/gpu/drm/nouveau/dispnv50/disp.c:2517:1: error: no previous prototype for 'nv50_display_create' - -Fixes: ba801ef068c1 ("drm/nouveau/kms: display destroy/init/fini hooks can be static") -Signed-off-by: Arnd Bergmann -Reviewed-by: Karol Herbst -Signed-off-by: Karol Herbst -Link: https://patchwork.freedesktop.org/patch/msgid/20230417210329.2469722-1-arnd@kernel.org -Signed-off-by: Sasha Levin ---- - drivers/gpu/drm/nouveau/dispnv50/disp.c | 1 + - drivers/gpu/drm/nouveau/nv50_display.h | 4 +--- - 2 files changed, 2 insertions(+), 3 deletions(-) - -diff --git a/drivers/gpu/drm/nouveau/dispnv50/disp.c b/drivers/gpu/drm/nouveau/dispnv50/disp.c -index 5bb777ff13130..9b6824f6b9e4b 100644 ---- a/drivers/gpu/drm/nouveau/dispnv50/disp.c -+++ b/drivers/gpu/drm/nouveau/dispnv50/disp.c -@@ -64,6 +64,7 @@ - #include "nouveau_connector.h" - #include "nouveau_encoder.h" - #include "nouveau_fence.h" -+#include "nv50_display.h" - - #include - -diff --git a/drivers/gpu/drm/nouveau/nv50_display.h b/drivers/gpu/drm/nouveau/nv50_display.h -index fbd3b15583bc8..60f77766766e9 100644 ---- a/drivers/gpu/drm/nouveau/nv50_display.h -+++ b/drivers/gpu/drm/nouveau/nv50_display.h -@@ -31,7 +31,5 @@ - #include "nouveau_reg.h" - - int nv50_display_create(struct drm_device *); --void nv50_display_destroy(struct drm_device *); --int nv50_display_init(struct drm_device *); --void nv50_display_fini(struct drm_device *); -+ - #endif /* __NV50_DISPLAY_H__ */ --- -2.39.2 - diff --git a/queue-6.4/drm-panel-sharp-ls043t1le01-adjust-mode-settings.patch b/queue-6.4/drm-panel-sharp-ls043t1le01-adjust-mode-settings.patch deleted file mode 100644 index 0360e12f58c..00000000000 --- a/queue-6.4/drm-panel-sharp-ls043t1le01-adjust-mode-settings.patch +++ /dev/null @@ -1,60 +0,0 @@ -From a181fd4628861d59d6b482c7790d0d86df5d329a Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Sun, 7 May 2023 20:26:38 +0300 -Subject: drm/panel: sharp-ls043t1le01: adjust mode settings - -From: Dmitry Baryshkov - -[ Upstream commit dee23b2c9e3ff46d59c5d45e1436eceb878e7c9a ] - -Using current settings causes panel flickering on APQ8074 dragonboard. -Adjust panel settings to follow the vendor-provided mode. This also -enables MIPI_DSI_MODE_VIDEO_SYNC_PULSE, which is also specified by the -vendor dtsi for the mentioned dragonboard. - -Fixes: ee0172383190 ("drm/panel: Add Sharp LS043T1LE01 MIPI DSI panel") -Signed-off-by: Dmitry Baryshkov -Reviewed-by: Neil Armstrong -Signed-off-by: Neil Armstrong -Link: https://patchwork.freedesktop.org/patch/msgid/20230507172639.2320934-1-dmitry.baryshkov@linaro.org -Signed-off-by: Sasha Levin ---- - drivers/gpu/drm/panel/panel-sharp-ls043t1le01.c | 11 ++++++----- - 1 file changed, 6 insertions(+), 5 deletions(-) - -diff --git a/drivers/gpu/drm/panel/panel-sharp-ls043t1le01.c b/drivers/gpu/drm/panel/panel-sharp-ls043t1le01.c -index d1ec80a3e3c72..ef148504cf24a 100644 ---- a/drivers/gpu/drm/panel/panel-sharp-ls043t1le01.c -+++ b/drivers/gpu/drm/panel/panel-sharp-ls043t1le01.c -@@ -192,15 +192,15 @@ static int sharp_nt_panel_enable(struct drm_panel *panel) - } - - static const struct drm_display_mode default_mode = { -- .clock = 41118, -+ .clock = (540 + 48 + 32 + 80) * (960 + 3 + 10 + 15) * 60 / 1000, - .hdisplay = 540, - .hsync_start = 540 + 48, -- .hsync_end = 540 + 48 + 80, -- .htotal = 540 + 48 + 80 + 32, -+ .hsync_end = 540 + 48 + 32, -+ .htotal = 540 + 48 + 32 + 80, - .vdisplay = 960, - .vsync_start = 960 + 3, -- .vsync_end = 960 + 3 + 15, -- .vtotal = 960 + 3 + 15 + 1, -+ .vsync_end = 960 + 3 + 10, -+ .vtotal = 960 + 3 + 10 + 15, - }; - - static int sharp_nt_panel_get_modes(struct drm_panel *panel, -@@ -280,6 +280,7 @@ static int sharp_nt_panel_probe(struct mipi_dsi_device *dsi) - dsi->lanes = 2; - dsi->format = MIPI_DSI_FMT_RGB888; - dsi->mode_flags = MIPI_DSI_MODE_VIDEO | -+ MIPI_DSI_MODE_VIDEO_SYNC_PULSE | - MIPI_DSI_MODE_VIDEO_HSE | - MIPI_DSI_CLOCK_NON_CONTINUOUS | - MIPI_DSI_MODE_NO_EOT_PACKET; --- -2.39.2 - diff --git a/queue-6.4/drm-panel-simple-fix-active-size-for-ampire-am-48027.patch b/queue-6.4/drm-panel-simple-fix-active-size-for-ampire-am-48027.patch deleted file mode 100644 index 74d33de1e00..00000000000 --- a/queue-6.4/drm-panel-simple-fix-active-size-for-ampire-am-48027.patch +++ /dev/null @@ -1,51 +0,0 @@ -From e5688df3d67044577e9662266d8ebf163ed48fcb Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Tue, 16 May 2023 10:50:39 +0200 -Subject: drm/panel: simple: fix active size for Ampire AM-480272H3TMQW-T01H - -From: Dario Binacchi - -[ Upstream commit f24b49550814fdee4a98b9552e35e243ccafd4a8 ] - -The previous setting was related to the overall dimension and not to the -active display area. -In the "PHYSICAL SPECIFICATIONS" section, the datasheet shows the -following parameters: - - ---------------------------------------------------------- -| Item | Specifications | unit | - ---------------------------------------------------------- -| Display area | 98.7 (W) x 57.5 (H) | mm | - ---------------------------------------------------------- -| Overall dimension | 105.5(W) x 67.2(H) x 4.96(D) | mm | - ---------------------------------------------------------- - -Fixes: 966fea78adf2 ("drm/panel: simple: Add support for Ampire AM-480272H3TMQW-T01H") -Signed-off-by: Dario Binacchi -Reviewed-by: Neil Armstrong -[narmstrong: fixed Fixes commit id length] -Signed-off-by: Neil Armstrong -Link: https://patchwork.freedesktop.org/patch/msgid/20230516085039.3797303-1-dario.binacchi@amarulasolutions.com -Signed-off-by: Sasha Levin ---- - drivers/gpu/drm/panel/panel-simple.c | 4 ++-- - 1 file changed, 2 insertions(+), 2 deletions(-) - -diff --git a/drivers/gpu/drm/panel/panel-simple.c b/drivers/gpu/drm/panel/panel-simple.c -index 065f378bba9d2..d8efbcee9bc12 100644 ---- a/drivers/gpu/drm/panel/panel-simple.c -+++ b/drivers/gpu/drm/panel/panel-simple.c -@@ -759,8 +759,8 @@ static const struct panel_desc ampire_am_480272h3tmqw_t01h = { - .num_modes = 1, - .bpc = 8, - .size = { -- .width = 105, -- .height = 67, -+ .width = 99, -+ .height = 58, - }, - .bus_format = MEDIA_BUS_FMT_RGB888_1X24, - }; --- -2.39.2 - diff --git a/queue-6.4/drm-radeon-fix-possible-division-by-zero-errors.patch b/queue-6.4/drm-radeon-fix-possible-division-by-zero-errors.patch deleted file mode 100644 index 589670d2a81..00000000000 --- a/queue-6.4/drm-radeon-fix-possible-division-by-zero-errors.patch +++ /dev/null @@ -1,94 +0,0 @@ -From c0447fe868a5d98b80b9f8d222cfed961eb9c391 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Fri, 19 May 2023 08:33:27 -0700 -Subject: drm/radeon: fix possible division-by-zero errors - -From: Nikita Zhandarovich - -[ Upstream commit 1becc57cd1a905e2aa0e1eca60d2a37744525c4a ] - -Function rv740_get_decoded_reference_divider() may return 0 due to -unpredictable reference divider value calculated in -radeon_atom_get_clock_dividers(). This will lead to -division-by-zero error once that value is used as a divider -in calculating 'clk_s'. -While unlikely, this issue should nonetheless be prevented so add a -sanity check for such cases by testing 'decoded_ref' value against 0. - -Found by Linux Verification Center (linuxtesting.org) with static -analysis tool SVACE. - -v2: minor coding style fixes (Alex) -In practice this should actually happen as the vbios should be -properly populated. - -Fixes: 66229b200598 ("drm/radeon/kms: add dpm support for rv7xx (v4)") -Signed-off-by: Nikita Zhandarovich -Signed-off-by: Alex Deucher -Signed-off-by: Sasha Levin ---- - drivers/gpu/drm/radeon/cypress_dpm.c | 8 ++++++-- - drivers/gpu/drm/radeon/ni_dpm.c | 8 ++++++-- - drivers/gpu/drm/radeon/rv740_dpm.c | 8 ++++++-- - 3 files changed, 18 insertions(+), 6 deletions(-) - -diff --git a/drivers/gpu/drm/radeon/cypress_dpm.c b/drivers/gpu/drm/radeon/cypress_dpm.c -index fdddbbaecbb74..72a0768df00f7 100644 ---- a/drivers/gpu/drm/radeon/cypress_dpm.c -+++ b/drivers/gpu/drm/radeon/cypress_dpm.c -@@ -557,8 +557,12 @@ static int cypress_populate_mclk_value(struct radeon_device *rdev, - ASIC_INTERNAL_MEMORY_SS, vco_freq)) { - u32 reference_clock = rdev->clock.mpll.reference_freq; - u32 decoded_ref = rv740_get_decoded_reference_divider(dividers.ref_div); -- u32 clk_s = reference_clock * 5 / (decoded_ref * ss.rate); -- u32 clk_v = ss.percentage * -+ u32 clk_s, clk_v; -+ -+ if (!decoded_ref) -+ return -EINVAL; -+ clk_s = reference_clock * 5 / (decoded_ref * ss.rate); -+ clk_v = ss.percentage * - (0x4000 * dividers.whole_fb_div + 0x800 * dividers.frac_fb_div) / (clk_s * 625); - - mpll_ss1 &= ~CLKV_MASK; -diff --git a/drivers/gpu/drm/radeon/ni_dpm.c b/drivers/gpu/drm/radeon/ni_dpm.c -index 672d2239293e0..3e1c1a392fb7b 100644 ---- a/drivers/gpu/drm/radeon/ni_dpm.c -+++ b/drivers/gpu/drm/radeon/ni_dpm.c -@@ -2241,8 +2241,12 @@ static int ni_populate_mclk_value(struct radeon_device *rdev, - ASIC_INTERNAL_MEMORY_SS, vco_freq)) { - u32 reference_clock = rdev->clock.mpll.reference_freq; - u32 decoded_ref = rv740_get_decoded_reference_divider(dividers.ref_div); -- u32 clk_s = reference_clock * 5 / (decoded_ref * ss.rate); -- u32 clk_v = ss.percentage * -+ u32 clk_s, clk_v; -+ -+ if (!decoded_ref) -+ return -EINVAL; -+ clk_s = reference_clock * 5 / (decoded_ref * ss.rate); -+ clk_v = ss.percentage * - (0x4000 * dividers.whole_fb_div + 0x800 * dividers.frac_fb_div) / (clk_s * 625); - - mpll_ss1 &= ~CLKV_MASK; -diff --git a/drivers/gpu/drm/radeon/rv740_dpm.c b/drivers/gpu/drm/radeon/rv740_dpm.c -index d57a3e1df8d63..4464fd21a3029 100644 ---- a/drivers/gpu/drm/radeon/rv740_dpm.c -+++ b/drivers/gpu/drm/radeon/rv740_dpm.c -@@ -249,8 +249,12 @@ int rv740_populate_mclk_value(struct radeon_device *rdev, - ASIC_INTERNAL_MEMORY_SS, vco_freq)) { - u32 reference_clock = rdev->clock.mpll.reference_freq; - u32 decoded_ref = rv740_get_decoded_reference_divider(dividers.ref_div); -- u32 clk_s = reference_clock * 5 / (decoded_ref * ss.rate); -- u32 clk_v = 0x40000 * ss.percentage * -+ u32 clk_s, clk_v; -+ -+ if (!decoded_ref) -+ return -EINVAL; -+ clk_s = reference_clock * 5 / (decoded_ref * ss.rate); -+ clk_v = 0x40000 * ss.percentage * - (dividers.whole_fb_div + (dividers.frac_fb_div / 8)) / (clk_s * 10000); - - mpll_ss1 &= ~CLKV_MASK; --- -2.39.2 - diff --git a/queue-6.4/drm-sun4i_tcon-use-devm_clk_get_enabled-in-sun4i_tco.patch b/queue-6.4/drm-sun4i_tcon-use-devm_clk_get_enabled-in-sun4i_tco.patch deleted file mode 100644 index f34012fbf97..00000000000 --- a/queue-6.4/drm-sun4i_tcon-use-devm_clk_get_enabled-in-sun4i_tco.patch +++ /dev/null @@ -1,116 +0,0 @@ -From 5a452c424435dce73576dc072f1a29307b6de55e Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Sun, 30 Apr 2023 19:23:46 +0800 -Subject: drm: sun4i_tcon: use devm_clk_get_enabled in `sun4i_tcon_init_clocks` - -From: XuDong Liu - -[ Upstream commit 123ee07ba5b7123e0ce0e0f9d64938026c16a2ce ] - -Smatch reports: -drivers/gpu/drm/sun4i/sun4i_tcon.c:805 sun4i_tcon_init_clocks() warn: -'tcon->clk' from clk_prepare_enable() not released on lines: 792,801. - -In the function sun4i_tcon_init_clocks(), tcon->clk and tcon->sclk0 are -not disabled in the error handling, which affects the release of -these variable. Although sun4i_tcon_bind(), which calls -sun4i_tcon_init_clocks(), use sun4i_tcon_free_clocks to disable the -variables mentioned, but the error handling branch of -sun4i_tcon_init_clocks() ignores the required disable process. - -To fix this issue, use the devm_clk_get_enabled to automatically -balance enable and disabled calls. As original implementation use -sun4i_tcon_free_clocks() to disable clk explicitly, we delete the -related calls and error handling that are no longer needed. - -Fixes: 9026e0d122ac ("drm: Add Allwinner A10 Display Engine support") -Fixes: b14e945bda8a ("drm/sun4i: tcon: Prepare and enable TCON channel 0 clock at init") -Fixes: 8e9240472522 ("drm/sun4i: support TCONs without channel 1") -Fixes: 34d698f6e349 ("drm/sun4i: Add has_channel_0 TCON quirk") -Signed-off-by: XuDong Liu -Reviewed-by: Dongliang Mu -Signed-off-by: Maxime Ripard -Link: https://patchwork.freedesktop.org/patch/msgid/20230430112347.4689-1-m202071377@hust.edu.cn -Signed-off-by: Sasha Levin ---- - drivers/gpu/drm/sun4i/sun4i_tcon.c | 19 ++++--------------- - 1 file changed, 4 insertions(+), 15 deletions(-) - -diff --git a/drivers/gpu/drm/sun4i/sun4i_tcon.c b/drivers/gpu/drm/sun4i/sun4i_tcon.c -index 523a6d7879210..936796851ffd3 100644 ---- a/drivers/gpu/drm/sun4i/sun4i_tcon.c -+++ b/drivers/gpu/drm/sun4i/sun4i_tcon.c -@@ -778,21 +778,19 @@ static irqreturn_t sun4i_tcon_handler(int irq, void *private) - static int sun4i_tcon_init_clocks(struct device *dev, - struct sun4i_tcon *tcon) - { -- tcon->clk = devm_clk_get(dev, "ahb"); -+ tcon->clk = devm_clk_get_enabled(dev, "ahb"); - if (IS_ERR(tcon->clk)) { - dev_err(dev, "Couldn't get the TCON bus clock\n"); - return PTR_ERR(tcon->clk); - } -- clk_prepare_enable(tcon->clk); - - if (tcon->quirks->has_channel_0) { -- tcon->sclk0 = devm_clk_get(dev, "tcon-ch0"); -+ tcon->sclk0 = devm_clk_get_enabled(dev, "tcon-ch0"); - if (IS_ERR(tcon->sclk0)) { - dev_err(dev, "Couldn't get the TCON channel 0 clock\n"); - return PTR_ERR(tcon->sclk0); - } - } -- clk_prepare_enable(tcon->sclk0); - - if (tcon->quirks->has_channel_1) { - tcon->sclk1 = devm_clk_get(dev, "tcon-ch1"); -@@ -805,12 +803,6 @@ static int sun4i_tcon_init_clocks(struct device *dev, - return 0; - } - --static void sun4i_tcon_free_clocks(struct sun4i_tcon *tcon) --{ -- clk_disable_unprepare(tcon->sclk0); -- clk_disable_unprepare(tcon->clk); --} -- - static int sun4i_tcon_init_irq(struct device *dev, - struct sun4i_tcon *tcon) - { -@@ -1223,14 +1215,14 @@ static int sun4i_tcon_bind(struct device *dev, struct device *master, - ret = sun4i_tcon_init_regmap(dev, tcon); - if (ret) { - dev_err(dev, "Couldn't init our TCON regmap\n"); -- goto err_free_clocks; -+ goto err_assert_reset; - } - - if (tcon->quirks->has_channel_0) { - ret = sun4i_dclk_create(dev, tcon); - if (ret) { - dev_err(dev, "Couldn't create our TCON dot clock\n"); -- goto err_free_clocks; -+ goto err_assert_reset; - } - } - -@@ -1293,8 +1285,6 @@ static int sun4i_tcon_bind(struct device *dev, struct device *master, - err_free_dotclock: - if (tcon->quirks->has_channel_0) - sun4i_dclk_free(tcon); --err_free_clocks: -- sun4i_tcon_free_clocks(tcon); - err_assert_reset: - reset_control_assert(tcon->lcd_rst); - return ret; -@@ -1308,7 +1298,6 @@ static void sun4i_tcon_unbind(struct device *dev, struct device *master, - list_del(&tcon->list); - if (tcon->quirks->has_channel_0) - sun4i_dclk_free(tcon); -- sun4i_tcon_free_clocks(tcon); - } - - static const struct component_ops sun4i_tcon_ops = { --- -2.39.2 - diff --git a/queue-6.4/drm-vkms-fix-rgb565-pixel-conversion.patch b/queue-6.4/drm-vkms-fix-rgb565-pixel-conversion.patch deleted file mode 100644 index 8b21f9f2f95..00000000000 --- a/queue-6.4/drm-vkms-fix-rgb565-pixel-conversion.patch +++ /dev/null @@ -1,66 +0,0 @@ -From df272c3468a777c60816aa05aca63a03d7e31af9 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Fri, 12 May 2023 07:40:45 -0300 -Subject: drm/vkms: Fix RGB565 pixel conversion -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -From: Maíra Canal - -[ Upstream commit ab87f558dcfb2562c3497e89600dec798a446665 ] - -Currently, the pixel conversion isn't rounding the fixed-point values -before assigning it to the RGB coefficients, which is causing the IGT -pixel-format tests to fail. So, use the drm_fixp2int_round() fixed-point -helper to round the values when assigning it to the RGB coefficients. - -Tested with igt@kms_plane@pixel-format and igt@kms_plane@pixel-format-source-clamping. - -[v2]: - * Use drm_fixp2int_round() to fix the pixel conversion instead of - casting the values to s32 (Melissa Wen). - -Fixes: 89b03aeaef16 ("drm/vkms: fix 32bit compilation error by replacing macros") -Signed-off-by: Maíra Canal -Reviewed-by: Arthur Grillo -Signed-off-by: Maíra Canal -Link: https://patchwork.freedesktop.org/patch/msgid/20230512104044.65034-2-mcanal@igalia.com -Signed-off-by: Sasha Levin ---- - drivers/gpu/drm/vkms/vkms_formats.c | 12 ++++++------ - 1 file changed, 6 insertions(+), 6 deletions(-) - -diff --git a/drivers/gpu/drm/vkms/vkms_formats.c b/drivers/gpu/drm/vkms/vkms_formats.c -index 8d948c73741ef..b11342026485f 100644 ---- a/drivers/gpu/drm/vkms/vkms_formats.c -+++ b/drivers/gpu/drm/vkms/vkms_formats.c -@@ -97,9 +97,9 @@ static void RGB565_to_argb_u16(u8 *src_pixels, struct pixel_argb_u16 *out_pixel) - s64 fp_b = drm_int2fixp(rgb_565 & 0x1f); - - out_pixel->a = (u16)0xffff; -- out_pixel->r = drm_fixp2int(drm_fixp_mul(fp_r, fp_rb_ratio)); -- out_pixel->g = drm_fixp2int(drm_fixp_mul(fp_g, fp_g_ratio)); -- out_pixel->b = drm_fixp2int(drm_fixp_mul(fp_b, fp_rb_ratio)); -+ out_pixel->r = drm_fixp2int_round(drm_fixp_mul(fp_r, fp_rb_ratio)); -+ out_pixel->g = drm_fixp2int_round(drm_fixp_mul(fp_g, fp_g_ratio)); -+ out_pixel->b = drm_fixp2int_round(drm_fixp_mul(fp_b, fp_rb_ratio)); - } - - void vkms_compose_row(struct line_buffer *stage_buffer, struct vkms_plane_state *plane, int y) -@@ -216,9 +216,9 @@ static void argb_u16_to_RGB565(struct vkms_frame_info *frame_info, - s64 fp_g = drm_int2fixp(in_pixels[x].g); - s64 fp_b = drm_int2fixp(in_pixels[x].b); - -- u16 r = drm_fixp2int(drm_fixp_div(fp_r, fp_rb_ratio)); -- u16 g = drm_fixp2int(drm_fixp_div(fp_g, fp_g_ratio)); -- u16 b = drm_fixp2int(drm_fixp_div(fp_b, fp_rb_ratio)); -+ u16 r = drm_fixp2int_round(drm_fixp_div(fp_r, fp_rb_ratio)); -+ u16 g = drm_fixp2int_round(drm_fixp_div(fp_g, fp_g_ratio)); -+ u16 b = drm_fixp2int_round(drm_fixp_div(fp_b, fp_rb_ratio)); - - *dst_pixels = cpu_to_le16(r << 11 | g << 5 | b); - } --- -2.39.2 - diff --git a/queue-6.4/drm-vkms-isolate-pixel-conversion-functionality.patch b/queue-6.4/drm-vkms-isolate-pixel-conversion-functionality.patch deleted file mode 100644 index b230f309d12..00000000000 --- a/queue-6.4/drm-vkms-isolate-pixel-conversion-functionality.patch +++ /dev/null @@ -1,268 +0,0 @@ -From 91d736263a1bd65f40247294a58df8821b1c2fc4 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Tue, 18 Apr 2023 10:05:21 -0300 -Subject: drm/vkms: isolate pixel conversion functionality -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -From: Maíra Canal - -[ Upstream commit 322d716a3e8a74fb75cd0f657647be4df253fd2f ] - -Currently, the pixel conversion functions repeat the same loop to -iterate the rows. Instead of repeating the same code for each pixel -format, create a function to wrap the loop and isolate the pixel -conversion functionality. - -Suggested-by: Arthur Grillo -Signed-off-by: Maíra Canal -Reviewed-by: Arthur Grillo -Signed-off-by: Maíra Canal -Link: https://patchwork.freedesktop.org/patch/msgid/20230418130525.128733-2-mcanal@igalia.com -Stable-dep-of: ab87f558dcfb ("drm/vkms: Fix RGB565 pixel conversion") -Signed-off-by: Sasha Levin ---- - drivers/gpu/drm/vkms/vkms_composer.c | 4 +- - drivers/gpu/drm/vkms/vkms_drv.h | 4 +- - drivers/gpu/drm/vkms/vkms_formats.c | 125 +++++++++++---------------- - drivers/gpu/drm/vkms/vkms_formats.h | 2 +- - drivers/gpu/drm/vkms/vkms_plane.c | 2 +- - 5 files changed, 56 insertions(+), 81 deletions(-) - -diff --git a/drivers/gpu/drm/vkms/vkms_composer.c b/drivers/gpu/drm/vkms/vkms_composer.c -index 8e53fa80742b2..80164e79af006 100644 ---- a/drivers/gpu/drm/vkms/vkms_composer.c -+++ b/drivers/gpu/drm/vkms/vkms_composer.c -@@ -99,7 +99,7 @@ static void blend(struct vkms_writeback_job *wb, - if (!check_y_limit(plane[i]->frame_info, y)) - continue; - -- plane[i]->plane_read(stage_buffer, plane[i]->frame_info, y); -+ vkms_compose_row(stage_buffer, plane[i], y); - pre_mul_alpha_blend(plane[i]->frame_info, stage_buffer, - output_buffer); - } -@@ -118,7 +118,7 @@ static int check_format_funcs(struct vkms_crtc_state *crtc_state, - u32 n_active_planes = crtc_state->num_active_planes; - - for (size_t i = 0; i < n_active_planes; i++) -- if (!planes[i]->plane_read) -+ if (!planes[i]->pixel_read) - return -1; - - if (active_wb && !active_wb->wb_write) -diff --git a/drivers/gpu/drm/vkms/vkms_drv.h b/drivers/gpu/drm/vkms/vkms_drv.h -index 4a248567efb26..f152d54baf769 100644 ---- a/drivers/gpu/drm/vkms/vkms_drv.h -+++ b/drivers/gpu/drm/vkms/vkms_drv.h -@@ -56,8 +56,7 @@ struct vkms_writeback_job { - struct vkms_plane_state { - struct drm_shadow_plane_state base; - struct vkms_frame_info *frame_info; -- void (*plane_read)(struct line_buffer *buffer, -- const struct vkms_frame_info *frame_info, int y); -+ void (*pixel_read)(u8 *src_buffer, struct pixel_argb_u16 *out_pixel); - }; - - struct vkms_plane { -@@ -155,6 +154,7 @@ int vkms_verify_crc_source(struct drm_crtc *crtc, const char *source_name, - /* Composer Support */ - void vkms_composer_worker(struct work_struct *work); - void vkms_set_composer(struct vkms_output *out, bool enabled); -+void vkms_compose_row(struct line_buffer *stage_buffer, struct vkms_plane_state *plane, int y); - - /* Writeback */ - int vkms_enable_writeback_connector(struct vkms_device *vkmsdev); -diff --git a/drivers/gpu/drm/vkms/vkms_formats.c b/drivers/gpu/drm/vkms/vkms_formats.c -index d4950688b3f17..8d948c73741ef 100644 ---- a/drivers/gpu/drm/vkms/vkms_formats.c -+++ b/drivers/gpu/drm/vkms/vkms_formats.c -@@ -42,100 +42,75 @@ static void *get_packed_src_addr(const struct vkms_frame_info *frame_info, int y - return packed_pixels_addr(frame_info, x_src, y_src); - } - --static void ARGB8888_to_argb_u16(struct line_buffer *stage_buffer, -- const struct vkms_frame_info *frame_info, int y) -+static void ARGB8888_to_argb_u16(u8 *src_pixels, struct pixel_argb_u16 *out_pixel) - { -- struct pixel_argb_u16 *out_pixels = stage_buffer->pixels; -- u8 *src_pixels = get_packed_src_addr(frame_info, y); -- int x_limit = min_t(size_t, drm_rect_width(&frame_info->dst), -- stage_buffer->n_pixels); -- -- for (size_t x = 0; x < x_limit; x++, src_pixels += 4) { -- /* -- * The 257 is the "conversion ratio". This number is obtained by the -- * (2^16 - 1) / (2^8 - 1) division. Which, in this case, tries to get -- * the best color value in a pixel format with more possibilities. -- * A similar idea applies to others RGB color conversions. -- */ -- out_pixels[x].a = (u16)src_pixels[3] * 257; -- out_pixels[x].r = (u16)src_pixels[2] * 257; -- out_pixels[x].g = (u16)src_pixels[1] * 257; -- out_pixels[x].b = (u16)src_pixels[0] * 257; -- } -+ /* -+ * The 257 is the "conversion ratio". This number is obtained by the -+ * (2^16 - 1) / (2^8 - 1) division. Which, in this case, tries to get -+ * the best color value in a pixel format with more possibilities. -+ * A similar idea applies to others RGB color conversions. -+ */ -+ out_pixel->a = (u16)src_pixels[3] * 257; -+ out_pixel->r = (u16)src_pixels[2] * 257; -+ out_pixel->g = (u16)src_pixels[1] * 257; -+ out_pixel->b = (u16)src_pixels[0] * 257; - } - --static void XRGB8888_to_argb_u16(struct line_buffer *stage_buffer, -- const struct vkms_frame_info *frame_info, int y) -+static void XRGB8888_to_argb_u16(u8 *src_pixels, struct pixel_argb_u16 *out_pixel) - { -- struct pixel_argb_u16 *out_pixels = stage_buffer->pixels; -- u8 *src_pixels = get_packed_src_addr(frame_info, y); -- int x_limit = min_t(size_t, drm_rect_width(&frame_info->dst), -- stage_buffer->n_pixels); -- -- for (size_t x = 0; x < x_limit; x++, src_pixels += 4) { -- out_pixels[x].a = (u16)0xffff; -- out_pixels[x].r = (u16)src_pixels[2] * 257; -- out_pixels[x].g = (u16)src_pixels[1] * 257; -- out_pixels[x].b = (u16)src_pixels[0] * 257; -- } -+ out_pixel->a = (u16)0xffff; -+ out_pixel->r = (u16)src_pixels[2] * 257; -+ out_pixel->g = (u16)src_pixels[1] * 257; -+ out_pixel->b = (u16)src_pixels[0] * 257; - } - --static void ARGB16161616_to_argb_u16(struct line_buffer *stage_buffer, -- const struct vkms_frame_info *frame_info, -- int y) -+static void ARGB16161616_to_argb_u16(u8 *src_pixels, struct pixel_argb_u16 *out_pixel) - { -- struct pixel_argb_u16 *out_pixels = stage_buffer->pixels; -- u16 *src_pixels = get_packed_src_addr(frame_info, y); -- int x_limit = min_t(size_t, drm_rect_width(&frame_info->dst), -- stage_buffer->n_pixels); -+ u16 *pixels = (u16 *)src_pixels; - -- for (size_t x = 0; x < x_limit; x++, src_pixels += 4) { -- out_pixels[x].a = le16_to_cpu(src_pixels[3]); -- out_pixels[x].r = le16_to_cpu(src_pixels[2]); -- out_pixels[x].g = le16_to_cpu(src_pixels[1]); -- out_pixels[x].b = le16_to_cpu(src_pixels[0]); -- } -+ out_pixel->a = le16_to_cpu(pixels[3]); -+ out_pixel->r = le16_to_cpu(pixels[2]); -+ out_pixel->g = le16_to_cpu(pixels[1]); -+ out_pixel->b = le16_to_cpu(pixels[0]); - } - --static void XRGB16161616_to_argb_u16(struct line_buffer *stage_buffer, -- const struct vkms_frame_info *frame_info, -- int y) -+static void XRGB16161616_to_argb_u16(u8 *src_pixels, struct pixel_argb_u16 *out_pixel) - { -- struct pixel_argb_u16 *out_pixels = stage_buffer->pixels; -- u16 *src_pixels = get_packed_src_addr(frame_info, y); -- int x_limit = min_t(size_t, drm_rect_width(&frame_info->dst), -- stage_buffer->n_pixels); -+ u16 *pixels = (u16 *)src_pixels; - -- for (size_t x = 0; x < x_limit; x++, src_pixels += 4) { -- out_pixels[x].a = (u16)0xffff; -- out_pixels[x].r = le16_to_cpu(src_pixels[2]); -- out_pixels[x].g = le16_to_cpu(src_pixels[1]); -- out_pixels[x].b = le16_to_cpu(src_pixels[0]); -- } -+ out_pixel->a = (u16)0xffff; -+ out_pixel->r = le16_to_cpu(pixels[2]); -+ out_pixel->g = le16_to_cpu(pixels[1]); -+ out_pixel->b = le16_to_cpu(pixels[0]); - } - --static void RGB565_to_argb_u16(struct line_buffer *stage_buffer, -- const struct vkms_frame_info *frame_info, int y) -+static void RGB565_to_argb_u16(u8 *src_pixels, struct pixel_argb_u16 *out_pixel) - { -- struct pixel_argb_u16 *out_pixels = stage_buffer->pixels; -- u16 *src_pixels = get_packed_src_addr(frame_info, y); -- int x_limit = min_t(size_t, drm_rect_width(&frame_info->dst), -- stage_buffer->n_pixels); -+ u16 *pixels = (u16 *)src_pixels; - - s64 fp_rb_ratio = drm_fixp_div(drm_int2fixp(65535), drm_int2fixp(31)); - s64 fp_g_ratio = drm_fixp_div(drm_int2fixp(65535), drm_int2fixp(63)); - -- for (size_t x = 0; x < x_limit; x++, src_pixels++) { -- u16 rgb_565 = le16_to_cpu(*src_pixels); -- s64 fp_r = drm_int2fixp((rgb_565 >> 11) & 0x1f); -- s64 fp_g = drm_int2fixp((rgb_565 >> 5) & 0x3f); -- s64 fp_b = drm_int2fixp(rgb_565 & 0x1f); -+ u16 rgb_565 = le16_to_cpu(*pixels); -+ s64 fp_r = drm_int2fixp((rgb_565 >> 11) & 0x1f); -+ s64 fp_g = drm_int2fixp((rgb_565 >> 5) & 0x3f); -+ s64 fp_b = drm_int2fixp(rgb_565 & 0x1f); - -- out_pixels[x].a = (u16)0xffff; -- out_pixels[x].r = drm_fixp2int(drm_fixp_mul(fp_r, fp_rb_ratio)); -- out_pixels[x].g = drm_fixp2int(drm_fixp_mul(fp_g, fp_g_ratio)); -- out_pixels[x].b = drm_fixp2int(drm_fixp_mul(fp_b, fp_rb_ratio)); -- } -+ out_pixel->a = (u16)0xffff; -+ out_pixel->r = drm_fixp2int(drm_fixp_mul(fp_r, fp_rb_ratio)); -+ out_pixel->g = drm_fixp2int(drm_fixp_mul(fp_g, fp_g_ratio)); -+ out_pixel->b = drm_fixp2int(drm_fixp_mul(fp_b, fp_rb_ratio)); -+} -+ -+void vkms_compose_row(struct line_buffer *stage_buffer, struct vkms_plane_state *plane, int y) -+{ -+ struct pixel_argb_u16 *out_pixels = stage_buffer->pixels; -+ struct vkms_frame_info *frame_info = plane->frame_info; -+ u8 *src_pixels = get_packed_src_addr(frame_info, y); -+ int limit = min_t(size_t, drm_rect_width(&frame_info->dst), stage_buffer->n_pixels); -+ -+ for (size_t x = 0; x < limit; x++, src_pixels += frame_info->cpp) -+ plane->pixel_read(src_pixels, &out_pixels[x]); - } - - /* -@@ -249,7 +224,7 @@ static void argb_u16_to_RGB565(struct vkms_frame_info *frame_info, - } - } - --void *get_frame_to_line_function(u32 format) -+void *get_pixel_conversion_function(u32 format) - { - switch (format) { - case DRM_FORMAT_ARGB8888: -diff --git a/drivers/gpu/drm/vkms/vkms_formats.h b/drivers/gpu/drm/vkms/vkms_formats.h -index 43b7c19790181..c5b113495d0c0 100644 ---- a/drivers/gpu/drm/vkms/vkms_formats.h -+++ b/drivers/gpu/drm/vkms/vkms_formats.h -@@ -5,7 +5,7 @@ - - #include "vkms_drv.h" - --void *get_frame_to_line_function(u32 format); -+void *get_pixel_conversion_function(u32 format); - - void *get_line_to_frame_function(u32 format); - -diff --git a/drivers/gpu/drm/vkms/vkms_plane.c b/drivers/gpu/drm/vkms/vkms_plane.c -index c41cec7dcb703..0a23875900ec5 100644 ---- a/drivers/gpu/drm/vkms/vkms_plane.c -+++ b/drivers/gpu/drm/vkms/vkms_plane.c -@@ -123,7 +123,7 @@ static void vkms_plane_atomic_update(struct drm_plane *plane, - frame_info->offset = fb->offsets[0]; - frame_info->pitch = fb->pitches[0]; - frame_info->cpp = fb->format->cpp[0]; -- vkms_plane_state->plane_read = get_frame_to_line_function(fmt); -+ vkms_plane_state->pixel_read = get_pixel_conversion_function(fmt); - } - - static int vkms_plane_atomic_check(struct drm_plane *plane, --- -2.39.2 - diff --git a/queue-6.4/drm-vram-helper-fix-function-names-in-vram-helper-do.patch b/queue-6.4/drm-vram-helper-fix-function-names-in-vram-helper-do.patch deleted file mode 100644 index 54b529656c6..00000000000 --- a/queue-6.4/drm-vram-helper-fix-function-names-in-vram-helper-do.patch +++ /dev/null @@ -1,56 +0,0 @@ -From 8247e66846d3451c82ae4f82a947efdadb5bb9cf Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Mon, 8 May 2023 08:09:16 +0800 -Subject: drm/vram-helper: fix function names in vram helper doc - -From: Luc Ma - -[ Upstream commit b8e392245105b50706f18418054821e71e637288 ] - -Refer to drmm_vram_helper_init() instead of the non-existent -drmm_vram_helper_alloc_mm(). - -Fixes: a5f23a72355d ("drm/vram-helper: Managed vram helpers") -Signed-off-by: Luc Ma -Reviewed-by: Thomas Zimmermann -Signed-off-by: Thomas Zimmermann -Link: https://patchwork.freedesktop.org/patch/msgid/64583db2.630a0220.eb75d.8f51@mx.google.com -Signed-off-by: Sasha Levin ---- - drivers/gpu/drm/drm_gem_vram_helper.c | 6 +++--- - 1 file changed, 3 insertions(+), 3 deletions(-) - -diff --git a/drivers/gpu/drm/drm_gem_vram_helper.c b/drivers/gpu/drm/drm_gem_vram_helper.c -index 0bea3df2a16dc..b67eafa557159 100644 ---- a/drivers/gpu/drm/drm_gem_vram_helper.c -+++ b/drivers/gpu/drm/drm_gem_vram_helper.c -@@ -45,7 +45,7 @@ static const struct drm_gem_object_funcs drm_gem_vram_object_funcs; - * the frame's scanout buffer or the cursor image. If there's no more space - * left in VRAM, inactive GEM objects can be moved to system memory. - * -- * To initialize the VRAM helper library call drmm_vram_helper_alloc_mm(). -+ * To initialize the VRAM helper library call drmm_vram_helper_init(). - * The function allocates and initializes an instance of &struct drm_vram_mm - * in &struct drm_device.vram_mm . Use &DRM_GEM_VRAM_DRIVER to initialize - * &struct drm_driver and &DRM_VRAM_MM_FILE_OPERATIONS to initialize -@@ -73,7 +73,7 @@ static const struct drm_gem_object_funcs drm_gem_vram_object_funcs; - * // setup device, vram base and size - * // ... - * -- * ret = drmm_vram_helper_alloc_mm(dev, vram_base, vram_size); -+ * ret = drmm_vram_helper_init(dev, vram_base, vram_size); - * if (ret) - * return ret; - * return 0; -@@ -86,7 +86,7 @@ static const struct drm_gem_object_funcs drm_gem_vram_object_funcs; - * to userspace. - * - * You don't have to clean up the instance of VRAM MM. -- * drmm_vram_helper_alloc_mm() is a managed interface that installs a -+ * drmm_vram_helper_init() is a managed interface that installs a - * clean-up handler to run during the DRM device's release. - * - * For drawing or scanout operations, rsp. buffer objects have to be pinned --- -2.39.2 - diff --git a/queue-6.4/dt-bindings-arm-smmu-fix-sc8280xp-adreno-binding.patch b/queue-6.4/dt-bindings-arm-smmu-fix-sc8280xp-adreno-binding.patch deleted file mode 100644 index a3171644977..00000000000 --- a/queue-6.4/dt-bindings-arm-smmu-fix-sc8280xp-adreno-binding.patch +++ /dev/null @@ -1,56 +0,0 @@ -From a196ead9c152e9edde4015e62484beb7bc97287e Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Mon, 22 May 2023 18:04:41 -0700 -Subject: dt-bindings: arm-smmu: Fix SC8280XP Adreno binding - -From: Bjorn Andersson - -[ Upstream commit 84b8a7fe29205016cffd4eff91b45830d318b53d ] - -The qcom,sc8280xp-smmu-500 Adreno SMMU binding has clocks, so fix up the -binding to allow this. - -Fixes: 38db6b41b2f4 ("dt-bindings: arm-smmu: Add compatible for Qualcomm SC8280XP") -Signed-off-by: Bjorn Andersson -Acked-by: Conor Dooley -Link: https://lore.kernel.org/r/20230523010441.63236-1-quic_bjorande@quicinc.com -Signed-off-by: Will Deacon -Signed-off-by: Sasha Levin ---- - Documentation/devicetree/bindings/iommu/arm,smmu.yaml | 6 ++++-- - 1 file changed, 4 insertions(+), 2 deletions(-) - -diff --git a/Documentation/devicetree/bindings/iommu/arm,smmu.yaml b/Documentation/devicetree/bindings/iommu/arm,smmu.yaml -index ba677d401e240..6cb04f35642aa 100644 ---- a/Documentation/devicetree/bindings/iommu/arm,smmu.yaml -+++ b/Documentation/devicetree/bindings/iommu/arm,smmu.yaml -@@ -80,6 +80,7 @@ properties: - items: - - enum: - - qcom,sc7280-smmu-500 -+ - qcom,sc8280xp-smmu-500 - - qcom,sm6115-smmu-500 - - qcom,sm6125-smmu-500 - - qcom,sm8150-smmu-500 -@@ -331,7 +332,9 @@ allOf: - properties: - compatible: - contains: -- const: qcom,sc7280-smmu-500 -+ enum: -+ - qcom,sc7280-smmu-500 -+ - qcom,sc8280xp-smmu-500 - then: - properties: - clock-names: -@@ -416,7 +419,6 @@ allOf: - - qcom,sa8775p-smmu-500 - - qcom,sc7180-smmu-500 - - qcom,sc8180x-smmu-500 -- - qcom,sc8280xp-smmu-500 - - qcom,sdm670-smmu-500 - - qcom,sdm845-smmu-500 - - qcom,sdx55-smmu-500 --- -2.39.2 - diff --git a/queue-6.4/dt-bindings-qcom-qce-fix-compatible-combinations-for.patch b/queue-6.4/dt-bindings-qcom-qce-fix-compatible-combinations-for.patch deleted file mode 100644 index dc4f17e25ab..00000000000 --- a/queue-6.4/dt-bindings-qcom-qce-fix-compatible-combinations-for.patch +++ /dev/null @@ -1,48 +0,0 @@ -From 64c0f2c3807738c8c426e59812a531bfd1b9dbc5 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Sat, 27 May 2023 00:52:04 +0530 -Subject: dt-bindings: qcom-qce: Fix compatible combinations for SM8150 and - IPQ4019 SoCs - -From: Bhupesh Sharma - -[ Upstream commit b3b266fa15552ba342831653f2b8b02c91451e73 ] - -Currently the compatible list available in 'qce' dt-bindings does not -support SM8150 and IPQ4019 SoCs directly which may lead to potential -'dtbs_check' error(s). - -Fix the same. - -Fixes: 00f3bc2db351 ("dt-bindings: qcom-qce: Add new SoC compatible strings for Qualcomm QCE IP") -Reviewed-by: Vladimir Zapolskiy -Acked-by: Rob Herring -Tested-by: Anders Roxell -Tested-by: Linux Kernel Functional Testing -Signed-off-by: Bhupesh Sharma -Signed-off-by: Herbert Xu -Signed-off-by: Sasha Levin ---- - Documentation/devicetree/bindings/crypto/qcom-qce.yaml | 6 ++++++ - 1 file changed, 6 insertions(+) - -diff --git a/Documentation/devicetree/bindings/crypto/qcom-qce.yaml b/Documentation/devicetree/bindings/crypto/qcom-qce.yaml -index e375bd9813009..90ddf98a6df92 100644 ---- a/Documentation/devicetree/bindings/crypto/qcom-qce.yaml -+++ b/Documentation/devicetree/bindings/crypto/qcom-qce.yaml -@@ -24,6 +24,12 @@ properties: - deprecated: true - description: Kept only for ABI backward compatibility - -+ - items: -+ - enum: -+ - qcom,ipq4019-qce -+ - qcom,sm8150-qce -+ - const: qcom,qce -+ - - items: - - enum: - - qcom,ipq6018-qce --- -2.39.2 - diff --git a/queue-6.4/efi-libstub-disable-pci-dma-before-grabbing-the-efi-.patch b/queue-6.4/efi-libstub-disable-pci-dma-before-grabbing-the-efi-.patch deleted file mode 100644 index bcb73671843..00000000000 --- a/queue-6.4/efi-libstub-disable-pci-dma-before-grabbing-the-efi-.patch +++ /dev/null @@ -1,63 +0,0 @@ -From 6038f59d2ebfc851efeb3ca7372ccf6a998f6a41 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Tue, 27 Jun 2023 09:33:09 +0200 -Subject: efi/libstub: Disable PCI DMA before grabbing the EFI memory map - -From: Ard Biesheuvel - -[ Upstream commit 2e28a798c3092ea42b968fa16ac835969d124898 ] - -Currently, the EFI stub will disable PCI DMA as the very last thing it -does before calling ExitBootServices(), to avoid interfering with the -firmware's normal operation as much as possible. - -However, the stub will invoke DisconnectController() on all endpoints -downstream of the PCI bridges it disables, and this may affect the -layout of the EFI memory map, making it substantially more likely that -ExitBootServices() will fail the first time around, and that the EFI -memory map needs to be reloaded. - -This, in turn, increases the likelihood that the slack space we -allocated is insufficient (and we can no longer allocate memory via boot -services after having called ExitBootServices() once), causing the -second call to GetMemoryMap (and therefore the boot) to fail. This makes -the PCI DMA disable feature a bit more fragile than it already is, so -let's make it more robust, by allocating the space for the EFI memory -map after disabling PCI DMA. - -Fixes: 4444f8541dad16fe ("efi: Allow disabling PCI busmastering on bridges during boot") -Reported-by: Glenn Washburn -Acked-by: Matthew Garrett -Signed-off-by: Ard Biesheuvel -Signed-off-by: Sasha Levin ---- - drivers/firmware/efi/libstub/efi-stub-helper.c | 6 +++--- - 1 file changed, 3 insertions(+), 3 deletions(-) - -diff --git a/drivers/firmware/efi/libstub/efi-stub-helper.c b/drivers/firmware/efi/libstub/efi-stub-helper.c -index 1e0203d74691f..732984295295f 100644 ---- a/drivers/firmware/efi/libstub/efi-stub-helper.c -+++ b/drivers/firmware/efi/libstub/efi-stub-helper.c -@@ -378,6 +378,9 @@ efi_status_t efi_exit_boot_services(void *handle, void *priv, - struct efi_boot_memmap *map; - efi_status_t status; - -+ if (efi_disable_pci_dma) -+ efi_pci_disable_bridge_busmaster(); -+ - status = efi_get_memory_map(&map, true); - if (status != EFI_SUCCESS) - return status; -@@ -388,9 +391,6 @@ efi_status_t efi_exit_boot_services(void *handle, void *priv, - return status; - } - -- if (efi_disable_pci_dma) -- efi_pci_disable_bridge_busmaster(); -- - status = efi_bs_call(exit_boot_services, handle, map->map_key); - - if (status == EFI_INVALID_PARAMETER) { --- -2.39.2 - diff --git a/queue-6.4/erofs-fix-compact-4b-support-for-16k-block-size.patch b/queue-6.4/erofs-fix-compact-4b-support-for-16k-block-size.patch deleted file mode 100644 index 963a38edf8b..00000000000 --- a/queue-6.4/erofs-fix-compact-4b-support-for-16k-block-size.patch +++ /dev/null @@ -1,71 +0,0 @@ -From b379fa6f0ece28a7747e5110658edfe1ca08fb1b Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Thu, 1 Jun 2023 19:23:41 +0800 -Subject: erofs: fix compact 4B support for 16k block size - -From: Gao Xiang - -[ Upstream commit 001b8ccd0650727e54ec16ef72bf1b8eeab7168e ] - -In compact 4B, two adjacent lclusters are packed together as a unit to -form on-disk indexes for effective random access, as below: - -(amortized = 4, vcnt = 2) - _____________________________________________ - |___@_____ encoded bits __________|_ blkaddr _| - 0 . amortized * vcnt = 8 - . . - . . amortized * vcnt - 4 = 4 - . . - .____________________________. - |_type (2 bits)_|_clusterofs_| - -Therefore, encoded bits for each pack are 32 bits (4 bytes). IOWs, -since each lcluster can get 16 bits for its type and clusterofs, the -maximum supported lclustersize for compact 4B format is 16k (14 bits). - -Fix this to enable compact 4B format for 16k lclusters (blocks), which -is tested on an arm64 server with 16k page size. - -Fixes: 152a333a5895 ("staging: erofs: add compacted compression indexes support") -Signed-off-by: Gao Xiang -Link: https://lore.kernel.org/r/20230601112341.56960-1-hsiangkao@linux.alibaba.com -Signed-off-by: Sasha Levin ---- - fs/erofs/zmap.c | 6 +----- - 1 file changed, 1 insertion(+), 5 deletions(-) - -diff --git a/fs/erofs/zmap.c b/fs/erofs/zmap.c -index d37c5c89c7287..920fb4dbc731c 100644 ---- a/fs/erofs/zmap.c -+++ b/fs/erofs/zmap.c -@@ -129,7 +129,7 @@ static int unpack_compacted_index(struct z_erofs_maprecorder *m, - u8 *in, type; - bool big_pcluster; - -- if (1 << amortizedshift == 4) -+ if (1 << amortizedshift == 4 && lclusterbits <= 14) - vcnt = 2; - else if (1 << amortizedshift == 2 && lclusterbits == 12) - vcnt = 16; -@@ -231,7 +231,6 @@ static int compacted_load_cluster_from_disk(struct z_erofs_maprecorder *m, - { - struct inode *const inode = m->inode; - struct erofs_inode *const vi = EROFS_I(inode); -- const unsigned int lclusterbits = vi->z_logical_clusterbits; - const erofs_off_t ebase = sizeof(struct z_erofs_map_header) + - ALIGN(erofs_iloc(inode) + vi->inode_isize + vi->xattr_isize, 8); - unsigned int totalidx = erofs_iblks(inode); -@@ -239,9 +238,6 @@ static int compacted_load_cluster_from_disk(struct z_erofs_maprecorder *m, - unsigned int amortizedshift; - erofs_off_t pos; - -- if (lclusterbits != 12) -- return -EOPNOTSUPP; -- - if (lcn >= totalidx) - return -EINVAL; - --- -2.39.2 - diff --git a/queue-6.4/erofs-kill-hooked-chains-to-avoid-loops-on-deduplica.patch b/queue-6.4/erofs-kill-hooked-chains-to-avoid-loops-on-deduplica.patch deleted file mode 100644 index 55ac317ad02..00000000000 --- a/queue-6.4/erofs-kill-hooked-chains-to-avoid-loops-on-deduplica.patch +++ /dev/null @@ -1,224 +0,0 @@ -From 258c5a19133b9103ee278ade0a3b74601c573c65 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Sat, 27 May 2023 04:14:56 +0800 -Subject: erofs: kill hooked chains to avoid loops on deduplicated compressed - images - -From: Gao Xiang - -[ Upstream commit 967c28b23f6c89bb8eef6a046ea88afe0d7c1029 ] - -After heavily stressing EROFS with several images which include a -hand-crafted image of repeated patterns for more than 46 days, I found -two chains could be linked with each other almost simultaneously and -form a loop so that the entire loop won't be submitted. As a -consequence, the corresponding file pages will remain locked forever. - -It can be _only_ observed on data-deduplicated compressed images. -For example, consider two chains with five pclusters in total: - Chain 1: 2->3->4->5 -- The tail pcluster is 5; - Chain 2: 5->1->2 -- The tail pcluster is 2. - -Chain 2 could link to Chain 1 with pcluster 5; and Chain 1 could link -to Chain 2 at the same time with pcluster 2. - -Since hooked chains are all linked locklessly now, I have no idea how -to simply avoid the race. Instead, let's avoid hooked chains completely -until I could work out a proper way to fix this and end users finally -tell us that it's needed to add it back. - -Actually, this optimization can be found with multi-threaded workloads -(especially even more often on deduplicated compressed images), yet I'm -not sure about the overall system impacts of not having this compared -with implementation complexity. - -Fixes: 267f2492c8f7 ("erofs: introduce multi-reference pclusters (fully-referenced)") -Signed-off-by: Gao Xiang -Reviewed-by: Yue Hu -Link: https://lore.kernel.org/r/20230526201459.128169-4-hsiangkao@linux.alibaba.com -Signed-off-by: Sasha Levin ---- - fs/erofs/zdata.c | 72 ++++++++---------------------------------------- - 1 file changed, 11 insertions(+), 61 deletions(-) - -diff --git a/fs/erofs/zdata.c b/fs/erofs/zdata.c -index 160b3da43aecd..502893e3da010 100644 ---- a/fs/erofs/zdata.c -+++ b/fs/erofs/zdata.c -@@ -94,11 +94,8 @@ struct z_erofs_pcluster { - - /* let's avoid the valid 32-bit kernel addresses */ - --/* the chained workgroup has't submitted io (still open) */ -+/* the end of a chain of pclusters */ - #define Z_EROFS_PCLUSTER_TAIL ((void *)0x5F0ECAFE) --/* the chained workgroup has already submitted io */ --#define Z_EROFS_PCLUSTER_TAIL_CLOSED ((void *)0x5F0EDEAD) -- - #define Z_EROFS_PCLUSTER_NIL (NULL) - - struct z_erofs_decompressqueue { -@@ -499,20 +496,6 @@ int __init z_erofs_init_zip_subsystem(void) - - enum z_erofs_pclustermode { - Z_EROFS_PCLUSTER_INFLIGHT, -- /* -- * The current pclusters was the tail of an exist chain, in addition -- * that the previous processed chained pclusters are all decided to -- * be hooked up to it. -- * A new chain will be created for the remaining pclusters which are -- * not processed yet, so different from Z_EROFS_PCLUSTER_FOLLOWED, -- * the next pcluster cannot reuse the whole page safely for inplace I/O -- * in the following scenario: -- * ________________________________________________________________ -- * | tail (partial) page | head (partial) page | -- * | (belongs to the next pcl) | (belongs to the current pcl) | -- * |_______PCLUSTER_FOLLOWED______|________PCLUSTER_HOOKED__________| -- */ -- Z_EROFS_PCLUSTER_HOOKED, - /* - * a weak form of Z_EROFS_PCLUSTER_FOLLOWED, the difference is that it - * could be dispatched into bypass queue later due to uptodated managed -@@ -530,8 +513,8 @@ enum z_erofs_pclustermode { - * ________________________________________________________________ - * | tail (partial) page | head (partial) page | - * | (of the current cl) | (of the previous collection) | -- * | PCLUSTER_FOLLOWED or | | -- * |_____PCLUSTER_HOOKED__|___________PCLUSTER_FOLLOWED____________| -+ * | | | -+ * |__PCLUSTER_FOLLOWED___|___________PCLUSTER_FOLLOWED____________| - * - * [ (*) the above page can be used as inplace I/O. ] - */ -@@ -544,7 +527,7 @@ struct z_erofs_decompress_frontend { - struct z_erofs_bvec_iter biter; - - struct page *candidate_bvpage; -- struct z_erofs_pcluster *pcl, *tailpcl; -+ struct z_erofs_pcluster *pcl; - z_erofs_next_pcluster_t owned_head; - enum z_erofs_pclustermode mode; - -@@ -750,19 +733,7 @@ static void z_erofs_try_to_claim_pcluster(struct z_erofs_decompress_frontend *f) - return; - } - -- /* -- * type 2, link to the end of an existing open chain, be careful -- * that its submission is controlled by the original attached chain. -- */ -- if (*owned_head != &pcl->next && pcl != f->tailpcl && -- cmpxchg(&pcl->next, Z_EROFS_PCLUSTER_TAIL, -- *owned_head) == Z_EROFS_PCLUSTER_TAIL) { -- *owned_head = Z_EROFS_PCLUSTER_TAIL; -- f->mode = Z_EROFS_PCLUSTER_HOOKED; -- f->tailpcl = NULL; -- return; -- } -- /* type 3, it belongs to a chain, but it isn't the end of the chain */ -+ /* type 2, it belongs to an ongoing chain */ - f->mode = Z_EROFS_PCLUSTER_INFLIGHT; - } - -@@ -823,9 +794,6 @@ static int z_erofs_register_pcluster(struct z_erofs_decompress_frontend *fe) - goto err_out; - } - } -- /* used to check tail merging loop due to corrupted images */ -- if (fe->owned_head == Z_EROFS_PCLUSTER_TAIL) -- fe->tailpcl = pcl; - fe->owned_head = &pcl->next; - fe->pcl = pcl; - return 0; -@@ -846,7 +814,6 @@ static int z_erofs_collector_begin(struct z_erofs_decompress_frontend *fe) - - /* must be Z_EROFS_PCLUSTER_TAIL or pointed to previous pcluster */ - DBG_BUGON(fe->owned_head == Z_EROFS_PCLUSTER_NIL); -- DBG_BUGON(fe->owned_head == Z_EROFS_PCLUSTER_TAIL_CLOSED); - - if (!(map->m_flags & EROFS_MAP_META)) { - grp = erofs_find_workgroup(fe->inode->i_sb, -@@ -865,10 +832,6 @@ static int z_erofs_collector_begin(struct z_erofs_decompress_frontend *fe) - - if (ret == -EEXIST) { - mutex_lock(&fe->pcl->lock); -- /* used to check tail merging loop due to corrupted images */ -- if (fe->owned_head == Z_EROFS_PCLUSTER_TAIL) -- fe->tailpcl = fe->pcl; -- - z_erofs_try_to_claim_pcluster(fe); - } else if (ret) { - return ret; -@@ -1025,8 +988,7 @@ static int z_erofs_do_read_page(struct z_erofs_decompress_frontend *fe, - * those chains are handled asynchronously thus the page cannot be used - * for inplace I/O or bvpage (should be processed in a strict order.) - */ -- tight &= (fe->mode >= Z_EROFS_PCLUSTER_HOOKED && -- fe->mode != Z_EROFS_PCLUSTER_FOLLOWED_NOINPLACE); -+ tight &= (fe->mode > Z_EROFS_PCLUSTER_FOLLOWED_NOINPLACE); - - cur = end - min_t(unsigned int, offset + end - map->m_la, end); - if (!(map->m_flags & EROFS_MAP_MAPPED)) { -@@ -1404,10 +1366,7 @@ static void z_erofs_decompress_queue(const struct z_erofs_decompressqueue *io, - }; - z_erofs_next_pcluster_t owned = io->head; - -- while (owned != Z_EROFS_PCLUSTER_TAIL_CLOSED) { -- /* impossible that 'owned' equals Z_EROFS_WORK_TPTR_TAIL */ -- DBG_BUGON(owned == Z_EROFS_PCLUSTER_TAIL); -- /* impossible that 'owned' equals Z_EROFS_PCLUSTER_NIL */ -+ while (owned != Z_EROFS_PCLUSTER_TAIL) { - DBG_BUGON(owned == Z_EROFS_PCLUSTER_NIL); - - be.pcl = container_of(owned, struct z_erofs_pcluster, next); -@@ -1424,7 +1383,7 @@ static void z_erofs_decompressqueue_work(struct work_struct *work) - container_of(work, struct z_erofs_decompressqueue, u.work); - struct page *pagepool = NULL; - -- DBG_BUGON(bgq->head == Z_EROFS_PCLUSTER_TAIL_CLOSED); -+ DBG_BUGON(bgq->head == Z_EROFS_PCLUSTER_TAIL); - z_erofs_decompress_queue(bgq, &pagepool); - erofs_release_pages(&pagepool); - kvfree(bgq); -@@ -1612,7 +1571,7 @@ static struct z_erofs_decompressqueue *jobqueue_init(struct super_block *sb, - q->sync = true; - } - q->sb = sb; -- q->head = Z_EROFS_PCLUSTER_TAIL_CLOSED; -+ q->head = Z_EROFS_PCLUSTER_TAIL; - return q; - } - -@@ -1630,11 +1589,7 @@ static void move_to_bypass_jobqueue(struct z_erofs_pcluster *pcl, - z_erofs_next_pcluster_t *const submit_qtail = qtail[JQ_SUBMIT]; - z_erofs_next_pcluster_t *const bypass_qtail = qtail[JQ_BYPASS]; - -- DBG_BUGON(owned_head == Z_EROFS_PCLUSTER_TAIL_CLOSED); -- if (owned_head == Z_EROFS_PCLUSTER_TAIL) -- owned_head = Z_EROFS_PCLUSTER_TAIL_CLOSED; -- -- WRITE_ONCE(pcl->next, Z_EROFS_PCLUSTER_TAIL_CLOSED); -+ WRITE_ONCE(pcl->next, Z_EROFS_PCLUSTER_TAIL); - - WRITE_ONCE(*submit_qtail, owned_head); - WRITE_ONCE(*bypass_qtail, &pcl->next); -@@ -1705,15 +1660,10 @@ static void z_erofs_submit_queue(struct z_erofs_decompress_frontend *f, - unsigned int i = 0; - bool bypass = true; - -- /* no possible 'owned_head' equals the following */ -- DBG_BUGON(owned_head == Z_EROFS_PCLUSTER_TAIL_CLOSED); - DBG_BUGON(owned_head == Z_EROFS_PCLUSTER_NIL); -- - pcl = container_of(owned_head, struct z_erofs_pcluster, next); -+ owned_head = READ_ONCE(pcl->next); - -- /* close the main owned chain at first */ -- owned_head = cmpxchg(&pcl->next, Z_EROFS_PCLUSTER_TAIL, -- Z_EROFS_PCLUSTER_TAIL_CLOSED); - if (z_erofs_is_inline_pcluster(pcl)) { - move_to_bypass_jobqueue(pcl, qtail, owned_head); - continue; --- -2.39.2 - diff --git a/queue-6.4/evm-complete-description-of-evm_inode_setattr.patch b/queue-6.4/evm-complete-description-of-evm_inode_setattr.patch deleted file mode 100644 index aa58686ef1c..00000000000 --- a/queue-6.4/evm-complete-description-of-evm_inode_setattr.patch +++ /dev/null @@ -1,39 +0,0 @@ -From ab38980564d83bcc8b287f3a1f4a2656a2cd87ae Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Mon, 6 Mar 2023 11:40:36 +0100 -Subject: evm: Complete description of evm_inode_setattr() - -From: Roberto Sassu - -[ Upstream commit b1de86d4248b273cb12c4cd7d20c08d459519f7d ] - -Add the description for missing parameters of evm_inode_setattr() to -avoid the warning arising with W=n compile option. - -Fixes: 817b54aa45db ("evm: add evm_inode_setattr to prevent updating an invalid security.evm") # v3.2+ -Fixes: c1632a0f1120 ("fs: port ->setattr() to pass mnt_idmap") # v6.3+ -Signed-off-by: Roberto Sassu -Reviewed-by: Stefan Berger -Signed-off-by: Mimi Zohar -Signed-off-by: Sasha Levin ---- - security/integrity/evm/evm_main.c | 2 ++ - 1 file changed, 2 insertions(+) - -diff --git a/security/integrity/evm/evm_main.c b/security/integrity/evm/evm_main.c -index cf24c5255583c..b1c2197473a21 100644 ---- a/security/integrity/evm/evm_main.c -+++ b/security/integrity/evm/evm_main.c -@@ -795,7 +795,9 @@ static int evm_attr_change(struct mnt_idmap *idmap, - - /** - * evm_inode_setattr - prevent updating an invalid EVM extended attribute -+ * @idmap: idmap of the mount - * @dentry: pointer to the affected dentry -+ * @attr: iattr structure containing the new file attributes - * - * Permit update of file attributes when files have a valid EVM signature, - * except in the case of them having an immutable portable signature. --- -2.39.2 - diff --git a/queue-6.4/evm-fix-build-warnings.patch b/queue-6.4/evm-fix-build-warnings.patch deleted file mode 100644 index d4d1101649c..00000000000 --- a/queue-6.4/evm-fix-build-warnings.patch +++ /dev/null @@ -1,59 +0,0 @@ -From 8e78b465633e3734cd4844c1d249e16e50df9070 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Tue, 6 Jun 2023 09:41:12 +0200 -Subject: evm: Fix build warnings - -From: Roberto Sassu - -[ Upstream commit 996e0a97ebd7b11cb785794e2a83c20c1add9d92 ] - -Fix build warnings (function parameters description) for -evm_read_protected_xattrs(), evm_set_key() and evm_verifyxattr(). - -Fixes: 7626676320f3 ("evm: provide a function to set the EVM key from the kernel") # v4.5+ -Fixes: 8314b6732ae4 ("ima: Define new template fields xattrnames, xattrlengths and xattrvalues") # v5.14+ -Fixes: 2960e6cb5f7c ("evm: additional parameter to pass integrity cache entry 'iint'") # v3.2+ -Signed-off-by: Roberto Sassu -Signed-off-by: Mimi Zohar -Signed-off-by: Sasha Levin ---- - security/integrity/evm/evm_crypto.c | 2 +- - security/integrity/evm/evm_main.c | 2 +- - 2 files changed, 2 insertions(+), 2 deletions(-) - -diff --git a/security/integrity/evm/evm_crypto.c b/security/integrity/evm/evm_crypto.c -index 033804f5a5f20..0dae649f3740c 100644 ---- a/security/integrity/evm/evm_crypto.c -+++ b/security/integrity/evm/evm_crypto.c -@@ -40,7 +40,7 @@ static const char evm_hmac[] = "hmac(sha1)"; - /** - * evm_set_key() - set EVM HMAC key from the kernel - * @key: pointer to a buffer with the key data -- * @size: length of the key data -+ * @keylen: length of the key data - * - * This function allows setting the EVM HMAC key from the kernel - * without using the "encrypted" key subsystem keys. It can be used -diff --git a/security/integrity/evm/evm_main.c b/security/integrity/evm/evm_main.c -index b1c2197473a21..c9b6e2a43478a 100644 ---- a/security/integrity/evm/evm_main.c -+++ b/security/integrity/evm/evm_main.c -@@ -318,7 +318,6 @@ int evm_protected_xattr_if_enabled(const char *req_xattr_name) - /** - * evm_read_protected_xattrs - read EVM protected xattr names, lengths, values - * @dentry: dentry of the read xattrs -- * @inode: inode of the read xattrs - * @buffer: buffer xattr names, lengths or values are copied to - * @buffer_size: size of buffer - * @type: n: names, l: lengths, v: values -@@ -390,6 +389,7 @@ int evm_read_protected_xattrs(struct dentry *dentry, u8 *buffer, - * @xattr_name: requested xattr - * @xattr_value: requested xattr value - * @xattr_value_len: requested xattr value length -+ * @iint: inode integrity metadata - * - * Calculate the HMAC for the given dentry and verify it against the stored - * security.evm xattr. For performance, use the xattr value and length --- -2.39.2 - diff --git a/queue-6.4/fbdev-omapfb-lcd_mipid-fix-an-error-handling-path-in.patch b/queue-6.4/fbdev-omapfb-lcd_mipid-fix-an-error-handling-path-in.patch deleted file mode 100644 index 0dc39c5dcfa..00000000000 --- a/queue-6.4/fbdev-omapfb-lcd_mipid-fix-an-error-handling-path-in.patch +++ /dev/null @@ -1,44 +0,0 @@ -From cd1d990b6b1cc14f3c4a364cc93df7406f8d5552 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Sun, 4 Jun 2023 17:42:28 +0200 -Subject: fbdev: omapfb: lcd_mipid: Fix an error handling path in - mipid_spi_probe() - -From: Christophe JAILLET - -[ Upstream commit 79a3908d1ea6c35157a6d907b1a9d8ec06015e7a ] - -If 'mipid_detect()' fails, we must free 'md' to avoid a memory leak. - -Fixes: 66d2f99d0bb5 ("omapfb: add support for MIPI-DCS compatible LCDs") -Signed-off-by: Christophe JAILLET -Signed-off-by: Helge Deller -Signed-off-by: Sasha Levin ---- - drivers/video/fbdev/omap/lcd_mipid.c | 6 +++++- - 1 file changed, 5 insertions(+), 1 deletion(-) - -diff --git a/drivers/video/fbdev/omap/lcd_mipid.c b/drivers/video/fbdev/omap/lcd_mipid.c -index e4a7f0b824ff4..a0fc4570403b8 100644 ---- a/drivers/video/fbdev/omap/lcd_mipid.c -+++ b/drivers/video/fbdev/omap/lcd_mipid.c -@@ -571,11 +571,15 @@ static int mipid_spi_probe(struct spi_device *spi) - - r = mipid_detect(md); - if (r < 0) -- return r; -+ goto free_md; - - omapfb_register_panel(&md->panel); - - return 0; -+ -+free_md: -+ kfree(md); -+ return r; - } - - static void mipid_spi_remove(struct spi_device *spi) --- -2.39.2 - diff --git a/queue-6.4/fs-pipe-reveal-missing-function-protoypes.patch b/queue-6.4/fs-pipe-reveal-missing-function-protoypes.patch deleted file mode 100644 index 3c42e66e74c..00000000000 --- a/queue-6.4/fs-pipe-reveal-missing-function-protoypes.patch +++ /dev/null @@ -1,56 +0,0 @@ -From 91e3c746703427ec5410daa874c3a731ff914d70 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Tue, 16 May 2023 21:56:12 +0200 -Subject: fs: pipe: reveal missing function protoypes - -From: Arnd Bergmann - -[ Upstream commit 247c8d2f9837a3e29e3b6b7a4aa9c36c37659dd4 ] - -A couple of functions from fs/pipe.c are used both internally -and for the watch queue code, but the declaration is only -visible when the latter is enabled: - -fs/pipe.c:1254:5: error: no previous prototype for 'pipe_resize_ring' -fs/pipe.c:758:15: error: no previous prototype for 'account_pipe_buffers' -fs/pipe.c:764:6: error: no previous prototype for 'too_many_pipe_buffers_soft' -fs/pipe.c:771:6: error: no previous prototype for 'too_many_pipe_buffers_hard' -fs/pipe.c:777:6: error: no previous prototype for 'pipe_is_unprivileged_user' - -Make the visible unconditionally to avoid these warnings. - -Fixes: c73be61cede5 ("pipe: Add general notification queue support") -Signed-off-by: Arnd Bergmann -Message-Id: <20230516195629.551602-1-arnd@kernel.org> -Signed-off-by: Christian Brauner -Signed-off-by: Sasha Levin ---- - include/linux/pipe_fs_i.h | 4 ---- - 1 file changed, 4 deletions(-) - -diff --git a/include/linux/pipe_fs_i.h b/include/linux/pipe_fs_i.h -index d2c3f16cf6b18..02e0086b10f6f 100644 ---- a/include/linux/pipe_fs_i.h -+++ b/include/linux/pipe_fs_i.h -@@ -261,18 +261,14 @@ void generic_pipe_buf_release(struct pipe_inode_info *, struct pipe_buffer *); - - extern const struct pipe_buf_operations nosteal_pipe_buf_ops; - --#ifdef CONFIG_WATCH_QUEUE - unsigned long account_pipe_buffers(struct user_struct *user, - unsigned long old, unsigned long new); - bool too_many_pipe_buffers_soft(unsigned long user_bufs); - bool too_many_pipe_buffers_hard(unsigned long user_bufs); - bool pipe_is_unprivileged_user(void); --#endif - - /* for F_SETPIPE_SZ and F_GETPIPE_SZ */ --#ifdef CONFIG_WATCH_QUEUE - int pipe_resize_ring(struct pipe_inode_info *pipe, unsigned int nr_slots); --#endif - long pipe_fcntl(struct file *, unsigned int, unsigned long arg); - struct pipe_inode_info *get_pipe_info(struct file *file, bool for_splice); - --- -2.39.2 - diff --git a/queue-6.4/fsverity-don-t-use-bio_first_page_all-in-fsverity_ve.patch b/queue-6.4/fsverity-don-t-use-bio_first_page_all-in-fsverity_ve.patch deleted file mode 100644 index 40bc36ec8da..00000000000 --- a/queue-6.4/fsverity-don-t-use-bio_first_page_all-in-fsverity_ve.patch +++ /dev/null @@ -1,75 +0,0 @@ -From 3625b362a8b6bb22d1d4c160a7b4b31f598ef019 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Sat, 3 Jun 2023 19:21:01 -0700 -Subject: fsverity: don't use bio_first_page_all() in fsverity_verify_bio() - -From: Eric Biggers - -[ Upstream commit d1f0c5ea04cd0a93309de0246278f0b22394692d ] - -bio_first_page_all(bio)->mapping->host is not compatible with large -folios, since the first page of the bio is not necessarily the head page -of the folio, and therefore it might not have the mapping pointer set. - -Therefore, move the dereference of ->mapping->host into -verify_data_blocks(), which works with a folio. - -(Like the commit that this Fixes, this hasn't actually been tested with -large folios yet, since the filesystems that use fs/verity/ don't -support that yet. But based on code review, I think this is needed.) - -Fixes: 5d0f0e57ed90 ("fsverity: support verifying data from large folios") -Link: https://lore.kernel.org/r/20230604022101.48342-1-ebiggers@kernel.org -Reviewed-by: Matthew Wilcox (Oracle) -Signed-off-by: Eric Biggers -Signed-off-by: Sasha Levin ---- - fs/verity/verify.c | 10 +++++----- - 1 file changed, 5 insertions(+), 5 deletions(-) - -diff --git a/fs/verity/verify.c b/fs/verity/verify.c -index e9ae1eef5f191..cf40e2fe6ace7 100644 ---- a/fs/verity/verify.c -+++ b/fs/verity/verify.c -@@ -256,9 +256,10 @@ verify_data_block(struct inode *inode, struct fsverity_info *vi, - } - - static bool --verify_data_blocks(struct inode *inode, struct folio *data_folio, -- size_t len, size_t offset, unsigned long max_ra_pages) -+verify_data_blocks(struct folio *data_folio, size_t len, size_t offset, -+ unsigned long max_ra_pages) - { -+ struct inode *inode = data_folio->mapping->host; - struct fsverity_info *vi = inode->i_verity_info; - const unsigned int block_size = vi->tree_params.block_size; - u64 pos = (u64)data_folio->index << PAGE_SHIFT; -@@ -298,7 +299,7 @@ verify_data_blocks(struct inode *inode, struct folio *data_folio, - */ - bool fsverity_verify_blocks(struct folio *folio, size_t len, size_t offset) - { -- return verify_data_blocks(folio->mapping->host, folio, len, offset, 0); -+ return verify_data_blocks(folio, len, offset, 0); - } - EXPORT_SYMBOL_GPL(fsverity_verify_blocks); - -@@ -319,7 +320,6 @@ EXPORT_SYMBOL_GPL(fsverity_verify_blocks); - */ - void fsverity_verify_bio(struct bio *bio) - { -- struct inode *inode = bio_first_page_all(bio)->mapping->host; - struct folio_iter fi; - unsigned long max_ra_pages = 0; - -@@ -337,7 +337,7 @@ void fsverity_verify_bio(struct bio *bio) - } - - bio_for_each_folio_all(fi, bio) { -- if (!verify_data_blocks(inode, fi.folio, fi.length, fi.offset, -+ if (!verify_data_blocks(fi.folio, fi.length, fi.offset, - max_ra_pages)) { - bio->bi_status = BLK_STS_IOERR; - break; --- -2.39.2 - diff --git a/queue-6.4/fsverity-use-shash-api-instead-of-ahash-api.patch b/queue-6.4/fsverity-use-shash-api-instead-of-ahash-api.patch deleted file mode 100644 index e07b6bb7aea..00000000000 --- a/queue-6.4/fsverity-use-shash-api-instead-of-ahash-api.patch +++ /dev/null @@ -1,680 +0,0 @@ -From eb563b52be20ad77e3edade16123b9b209ca2992 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Mon, 15 May 2023 22:12:16 -0700 -Subject: fsverity: use shash API instead of ahash API - -From: Eric Biggers - -[ Upstream commit 8fcd94add6c5c93ed3b9314456e8420914401530 ] - -The "ahash" API, like the other scatterlist-based crypto APIs such as -"skcipher", comes with some well-known limitations. First, it can't -easily be used with vmalloc addresses. Second, the request struct can't -be allocated on the stack. This adds complexity and a possible failure -point that needs to be worked around, e.g. using a mempool. - -The only benefit of ahash over "shash" is that ahash is needed to access -traditional memory-to-memory crypto accelerators, i.e. drivers/crypto/. -However, this style of crypto acceleration has largely fallen out of -favor and been superseded by CPU-based acceleration or inline crypto -engines. Also, ahash needs to be used asynchronously to take full -advantage of such hardware, but fs/verity/ has never done this. - -On all systems that aren't actually using one of these ahash-only crypto -accelerators, ahash just adds unnecessary overhead as it sits between -the user and the underlying shash algorithms. - -Also, XFS is planned to cache fsverity Merkle tree blocks in the -existing XFS buffer cache. As a result, it will be possible for a -single Merkle tree block to be split across discontiguous pages -(https://lore.kernel.org/r/20230405233753.GU3223426@dread.disaster.area). -This data will need to be hashed. It is easiest to work with a vmapped -address in this case. However, ahash is incompatible with this. - -Therefore, let's convert fs/verity/ from ahash to shash. This -simplifies the code, and it should also slightly improve performance for -everyone who wasn't actually using one of these ahash-only crypto -accelerators, i.e. almost everyone (or maybe even everyone)! - -Link: https://lore.kernel.org/r/20230516052306.99600-1-ebiggers@kernel.org -Reviewed-by: Christoph Hellwig -Acked-by: Ard Biesheuvel -Signed-off-by: Eric Biggers -Stable-dep-of: d1f0c5ea04cd ("fsverity: don't use bio_first_page_all() in fsverity_verify_bio()") -Signed-off-by: Sasha Levin ---- - fs/verity/enable.c | 19 ++--- - fs/verity/fsverity_private.h | 13 +--- - fs/verity/hash_algs.c | 131 ++++++----------------------------- - fs/verity/verify.c | 109 +++++++++++------------------ - 4 files changed, 71 insertions(+), 201 deletions(-) - -diff --git a/fs/verity/enable.c b/fs/verity/enable.c -index fc4c50e5219dc..bd86b25ac084b 100644 ---- a/fs/verity/enable.c -+++ b/fs/verity/enable.c -@@ -7,6 +7,7 @@ - - #include "fsverity_private.h" - -+#include - #include - #include - #include -@@ -20,7 +21,7 @@ struct block_buffer { - /* Hash a block, writing the result to the next level's pending block buffer. */ - static int hash_one_block(struct inode *inode, - const struct merkle_tree_params *params, -- struct ahash_request *req, struct block_buffer *cur) -+ struct block_buffer *cur) - { - struct block_buffer *next = cur + 1; - int err; -@@ -36,8 +37,7 @@ static int hash_one_block(struct inode *inode, - /* Zero-pad the block if it's shorter than the block size. */ - memset(&cur->data[cur->filled], 0, params->block_size - cur->filled); - -- err = fsverity_hash_block(params, inode, req, virt_to_page(cur->data), -- offset_in_page(cur->data), -+ err = fsverity_hash_block(params, inode, cur->data, - &next->data[next->filled]); - if (err) - return err; -@@ -76,7 +76,6 @@ static int build_merkle_tree(struct file *filp, - struct inode *inode = file_inode(filp); - const u64 data_size = inode->i_size; - const int num_levels = params->num_levels; -- struct ahash_request *req; - struct block_buffer _buffers[1 + FS_VERITY_MAX_LEVELS + 1] = {}; - struct block_buffer *buffers = &_buffers[1]; - unsigned long level_offset[FS_VERITY_MAX_LEVELS]; -@@ -90,9 +89,6 @@ static int build_merkle_tree(struct file *filp, - return 0; - } - -- /* This allocation never fails, since it's mempool-backed. */ -- req = fsverity_alloc_hash_request(params->hash_alg, GFP_KERNEL); -- - /* - * Allocate the block buffers. Buffer "-1" is for data blocks. - * Buffers 0 <= level < num_levels are for the actual tree levels. -@@ -130,7 +126,7 @@ static int build_merkle_tree(struct file *filp, - fsverity_err(inode, "Short read of file data"); - goto out; - } -- err = hash_one_block(inode, params, req, &buffers[-1]); -+ err = hash_one_block(inode, params, &buffers[-1]); - if (err) - goto out; - for (level = 0; level < num_levels; level++) { -@@ -141,8 +137,7 @@ static int build_merkle_tree(struct file *filp, - } - /* Next block at @level is full */ - -- err = hash_one_block(inode, params, req, -- &buffers[level]); -+ err = hash_one_block(inode, params, &buffers[level]); - if (err) - goto out; - err = write_merkle_tree_block(inode, -@@ -162,8 +157,7 @@ static int build_merkle_tree(struct file *filp, - /* Finish all nonempty pending tree blocks. */ - for (level = 0; level < num_levels; level++) { - if (buffers[level].filled != 0) { -- err = hash_one_block(inode, params, req, -- &buffers[level]); -+ err = hash_one_block(inode, params, &buffers[level]); - if (err) - goto out; - err = write_merkle_tree_block(inode, -@@ -183,7 +177,6 @@ static int build_merkle_tree(struct file *filp, - out: - for (level = -1; level < num_levels; level++) - kfree(buffers[level].data); -- fsverity_free_hash_request(params->hash_alg, req); - return err; - } - -diff --git a/fs/verity/fsverity_private.h b/fs/verity/fsverity_private.h -index d34dcc033d723..8527beca2a454 100644 ---- a/fs/verity/fsverity_private.h -+++ b/fs/verity/fsverity_private.h -@@ -11,9 +11,6 @@ - #define pr_fmt(fmt) "fs-verity: " fmt - - #include --#include -- --struct ahash_request; - - /* - * Implementation limit: maximum depth of the Merkle tree. For now 8 is plenty; -@@ -23,11 +20,10 @@ struct ahash_request; - - /* A hash algorithm supported by fs-verity */ - struct fsverity_hash_alg { -- struct crypto_ahash *tfm; /* hash tfm, allocated on demand */ -+ struct crypto_shash *tfm; /* hash tfm, allocated on demand */ - const char *name; /* crypto API name, e.g. sha256 */ - unsigned int digest_size; /* digest size in bytes, e.g. 32 for SHA-256 */ - unsigned int block_size; /* block size in bytes, e.g. 64 for SHA-256 */ -- mempool_t req_pool; /* mempool with a preallocated hash request */ - /* - * The HASH_ALGO_* constant for this algorithm. This is different from - * FS_VERITY_HASH_ALG_*, which uses a different numbering scheme. -@@ -85,15 +81,10 @@ extern struct fsverity_hash_alg fsverity_hash_algs[]; - - struct fsverity_hash_alg *fsverity_get_hash_alg(const struct inode *inode, - unsigned int num); --struct ahash_request *fsverity_alloc_hash_request(struct fsverity_hash_alg *alg, -- gfp_t gfp_flags); --void fsverity_free_hash_request(struct fsverity_hash_alg *alg, -- struct ahash_request *req); - const u8 *fsverity_prepare_hash_state(struct fsverity_hash_alg *alg, - const u8 *salt, size_t salt_size); - int fsverity_hash_block(const struct merkle_tree_params *params, -- const struct inode *inode, struct ahash_request *req, -- struct page *page, unsigned int offset, u8 *out); -+ const struct inode *inode, const void *data, u8 *out); - int fsverity_hash_buffer(struct fsverity_hash_alg *alg, - const void *data, size_t size, u8 *out); - void __init fsverity_check_hash_algs(void); -diff --git a/fs/verity/hash_algs.c b/fs/verity/hash_algs.c -index ea00dbedf756b..e7e982412e23a 100644 ---- a/fs/verity/hash_algs.c -+++ b/fs/verity/hash_algs.c -@@ -8,7 +8,6 @@ - #include "fsverity_private.h" - - #include --#include - - /* The hash algorithms supported by fs-verity */ - struct fsverity_hash_alg fsverity_hash_algs[] = { -@@ -44,7 +43,7 @@ struct fsverity_hash_alg *fsverity_get_hash_alg(const struct inode *inode, - unsigned int num) - { - struct fsverity_hash_alg *alg; -- struct crypto_ahash *tfm; -+ struct crypto_shash *tfm; - int err; - - if (num >= ARRAY_SIZE(fsverity_hash_algs) || -@@ -63,11 +62,7 @@ struct fsverity_hash_alg *fsverity_get_hash_alg(const struct inode *inode, - if (alg->tfm != NULL) - goto out_unlock; - -- /* -- * Using the shash API would make things a bit simpler, but the ahash -- * API is preferable as it allows the use of crypto accelerators. -- */ -- tfm = crypto_alloc_ahash(alg->name, 0, 0); -+ tfm = crypto_alloc_shash(alg->name, 0, 0); - if (IS_ERR(tfm)) { - if (PTR_ERR(tfm) == -ENOENT) { - fsverity_warn(inode, -@@ -84,68 +79,26 @@ struct fsverity_hash_alg *fsverity_get_hash_alg(const struct inode *inode, - } - - err = -EINVAL; -- if (WARN_ON_ONCE(alg->digest_size != crypto_ahash_digestsize(tfm))) -+ if (WARN_ON_ONCE(alg->digest_size != crypto_shash_digestsize(tfm))) - goto err_free_tfm; -- if (WARN_ON_ONCE(alg->block_size != crypto_ahash_blocksize(tfm))) -- goto err_free_tfm; -- -- err = mempool_init_kmalloc_pool(&alg->req_pool, 1, -- sizeof(struct ahash_request) + -- crypto_ahash_reqsize(tfm)); -- if (err) -+ if (WARN_ON_ONCE(alg->block_size != crypto_shash_blocksize(tfm))) - goto err_free_tfm; - - pr_info("%s using implementation \"%s\"\n", -- alg->name, crypto_ahash_driver_name(tfm)); -+ alg->name, crypto_shash_driver_name(tfm)); - - /* pairs with smp_load_acquire() above */ - smp_store_release(&alg->tfm, tfm); - goto out_unlock; - - err_free_tfm: -- crypto_free_ahash(tfm); -+ crypto_free_shash(tfm); - alg = ERR_PTR(err); - out_unlock: - mutex_unlock(&fsverity_hash_alg_init_mutex); - return alg; - } - --/** -- * fsverity_alloc_hash_request() - allocate a hash request object -- * @alg: the hash algorithm for which to allocate the request -- * @gfp_flags: memory allocation flags -- * -- * This is mempool-backed, so this never fails if __GFP_DIRECT_RECLAIM is set in -- * @gfp_flags. However, in that case this might need to wait for all -- * previously-allocated requests to be freed. So to avoid deadlocks, callers -- * must never need multiple requests at a time to make forward progress. -- * -- * Return: the request object on success; NULL on failure (but see above) -- */ --struct ahash_request *fsverity_alloc_hash_request(struct fsverity_hash_alg *alg, -- gfp_t gfp_flags) --{ -- struct ahash_request *req = mempool_alloc(&alg->req_pool, gfp_flags); -- -- if (req) -- ahash_request_set_tfm(req, alg->tfm); -- return req; --} -- --/** -- * fsverity_free_hash_request() - free a hash request object -- * @alg: the hash algorithm -- * @req: the hash request object to free -- */ --void fsverity_free_hash_request(struct fsverity_hash_alg *alg, -- struct ahash_request *req) --{ -- if (req) { -- ahash_request_zero(req); -- mempool_free(req, &alg->req_pool); -- } --} -- - /** - * fsverity_prepare_hash_state() - precompute the initial hash state - * @alg: hash algorithm -@@ -159,23 +112,20 @@ const u8 *fsverity_prepare_hash_state(struct fsverity_hash_alg *alg, - const u8 *salt, size_t salt_size) - { - u8 *hashstate = NULL; -- struct ahash_request *req = NULL; -+ SHASH_DESC_ON_STACK(desc, alg->tfm); - u8 *padded_salt = NULL; - size_t padded_salt_size; -- struct scatterlist sg; -- DECLARE_CRYPTO_WAIT(wait); - int err; - -+ desc->tfm = alg->tfm; -+ - if (salt_size == 0) - return NULL; - -- hashstate = kmalloc(crypto_ahash_statesize(alg->tfm), GFP_KERNEL); -+ hashstate = kmalloc(crypto_shash_statesize(alg->tfm), GFP_KERNEL); - if (!hashstate) - return ERR_PTR(-ENOMEM); - -- /* This allocation never fails, since it's mempool-backed. */ -- req = fsverity_alloc_hash_request(alg, GFP_KERNEL); -- - /* - * Zero-pad the salt to the next multiple of the input size of the hash - * algorithm's compression function, e.g. 64 bytes for SHA-256 or 128 -@@ -190,26 +140,18 @@ const u8 *fsverity_prepare_hash_state(struct fsverity_hash_alg *alg, - goto err_free; - } - memcpy(padded_salt, salt, salt_size); -- -- sg_init_one(&sg, padded_salt, padded_salt_size); -- ahash_request_set_callback(req, CRYPTO_TFM_REQ_MAY_SLEEP | -- CRYPTO_TFM_REQ_MAY_BACKLOG, -- crypto_req_done, &wait); -- ahash_request_set_crypt(req, &sg, NULL, padded_salt_size); -- -- err = crypto_wait_req(crypto_ahash_init(req), &wait); -+ err = crypto_shash_init(desc); - if (err) - goto err_free; - -- err = crypto_wait_req(crypto_ahash_update(req), &wait); -+ err = crypto_shash_update(desc, padded_salt, padded_salt_size); - if (err) - goto err_free; - -- err = crypto_ahash_export(req, hashstate); -+ err = crypto_shash_export(desc, hashstate); - if (err) - goto err_free; - out: -- fsverity_free_hash_request(alg, req); - kfree(padded_salt); - return hashstate; - -@@ -223,9 +165,7 @@ const u8 *fsverity_prepare_hash_state(struct fsverity_hash_alg *alg, - * fsverity_hash_block() - hash a single data or hash block - * @params: the Merkle tree's parameters - * @inode: inode for which the hashing is being done -- * @req: preallocated hash request -- * @page: the page containing the block to hash -- * @offset: the offset of the block within @page -+ * @data: virtual address of a buffer containing the block to hash - * @out: output digest, size 'params->digest_size' bytes - * - * Hash a single data or hash block. The hash is salted if a salt is specified -@@ -234,33 +174,24 @@ const u8 *fsverity_prepare_hash_state(struct fsverity_hash_alg *alg, - * Return: 0 on success, -errno on failure - */ - int fsverity_hash_block(const struct merkle_tree_params *params, -- const struct inode *inode, struct ahash_request *req, -- struct page *page, unsigned int offset, u8 *out) -+ const struct inode *inode, const void *data, u8 *out) - { -- struct scatterlist sg; -- DECLARE_CRYPTO_WAIT(wait); -+ SHASH_DESC_ON_STACK(desc, params->hash_alg->tfm); - int err; - -- sg_init_table(&sg, 1); -- sg_set_page(&sg, page, params->block_size, offset); -- ahash_request_set_callback(req, CRYPTO_TFM_REQ_MAY_SLEEP | -- CRYPTO_TFM_REQ_MAY_BACKLOG, -- crypto_req_done, &wait); -- ahash_request_set_crypt(req, &sg, out, params->block_size); -+ desc->tfm = params->hash_alg->tfm; - - if (params->hashstate) { -- err = crypto_ahash_import(req, params->hashstate); -+ err = crypto_shash_import(desc, params->hashstate); - if (err) { - fsverity_err(inode, - "Error %d importing hash state", err); - return err; - } -- err = crypto_ahash_finup(req); -+ err = crypto_shash_finup(desc, data, params->block_size, out); - } else { -- err = crypto_ahash_digest(req); -+ err = crypto_shash_digest(desc, data, params->block_size, out); - } -- -- err = crypto_wait_req(err, &wait); - if (err) - fsverity_err(inode, "Error %d computing block hash", err); - return err; -@@ -273,32 +204,12 @@ int fsverity_hash_block(const struct merkle_tree_params *params, - * @size: size of data to hash, in bytes - * @out: output digest, size 'alg->digest_size' bytes - * -- * Hash some data which is located in physically contiguous memory (i.e. memory -- * allocated by kmalloc(), not by vmalloc()). No salt is used. -- * - * Return: 0 on success, -errno on failure - */ - int fsverity_hash_buffer(struct fsverity_hash_alg *alg, - const void *data, size_t size, u8 *out) - { -- struct ahash_request *req; -- struct scatterlist sg; -- DECLARE_CRYPTO_WAIT(wait); -- int err; -- -- /* This allocation never fails, since it's mempool-backed. */ -- req = fsverity_alloc_hash_request(alg, GFP_KERNEL); -- -- sg_init_one(&sg, data, size); -- ahash_request_set_callback(req, CRYPTO_TFM_REQ_MAY_SLEEP | -- CRYPTO_TFM_REQ_MAY_BACKLOG, -- crypto_req_done, &wait); -- ahash_request_set_crypt(req, &sg, out, size); -- -- err = crypto_wait_req(crypto_ahash_digest(req), &wait); -- -- fsverity_free_hash_request(alg, req); -- return err; -+ return crypto_shash_tfm_digest(alg->tfm, data, size, out); - } - - void __init fsverity_check_hash_algs(void) -diff --git a/fs/verity/verify.c b/fs/verity/verify.c -index e2508222750b3..e9ae1eef5f191 100644 ---- a/fs/verity/verify.c -+++ b/fs/verity/verify.c -@@ -29,21 +29,6 @@ static inline int cmp_hashes(const struct fsverity_info *vi, - return -EBADMSG; - } - --static bool data_is_zeroed(struct inode *inode, struct page *page, -- unsigned int len, unsigned int offset) --{ -- void *virt = kmap_local_page(page); -- -- if (memchr_inv(virt + offset, 0, len)) { -- kunmap_local(virt); -- fsverity_err(inode, -- "FILE CORRUPTED! Data past EOF is not zeroed"); -- return false; -- } -- kunmap_local(virt); -- return true; --} -- - /* - * Returns true if the hash block with index @hblock_idx in the tree, located in - * @hpage, has already been verified. -@@ -122,9 +107,7 @@ static bool is_hash_block_verified(struct fsverity_info *vi, struct page *hpage, - */ - static bool - verify_data_block(struct inode *inode, struct fsverity_info *vi, -- struct ahash_request *req, struct page *data_page, -- u64 data_pos, unsigned int dblock_offset_in_page, -- unsigned long max_ra_pages) -+ const void *data, u64 data_pos, unsigned long max_ra_pages) - { - const struct merkle_tree_params *params = &vi->tree_params; - const unsigned int hsize = params->digest_size; -@@ -136,11 +119,11 @@ verify_data_block(struct inode *inode, struct fsverity_info *vi, - struct { - /* Page containing the hash block */ - struct page *page; -+ /* Mapped address of the hash block (will be within @page) */ -+ const void *addr; - /* Index of the hash block in the tree overall */ - unsigned long index; -- /* Byte offset of the hash block within @page */ -- unsigned int offset_in_page; -- /* Byte offset of the wanted hash within @page */ -+ /* Byte offset of the wanted hash relative to @addr */ - unsigned int hoffset; - } hblocks[FS_VERITY_MAX_LEVELS]; - /* -@@ -150,6 +133,9 @@ verify_data_block(struct inode *inode, struct fsverity_info *vi, - u64 hidx = data_pos >> params->log_blocksize; - int err; - -+ /* Up to 1 + FS_VERITY_MAX_LEVELS pages may be mapped at once */ -+ BUILD_BUG_ON(1 + FS_VERITY_MAX_LEVELS > KM_MAX_IDX); -+ - if (unlikely(data_pos >= inode->i_size)) { - /* - * This can happen in the data page spanning EOF when the Merkle -@@ -159,8 +145,12 @@ verify_data_block(struct inode *inode, struct fsverity_info *vi, - * any part past EOF should be all zeroes. Therefore, we need - * to verify that any data blocks fully past EOF are all zeroes. - */ -- return data_is_zeroed(inode, data_page, params->block_size, -- dblock_offset_in_page); -+ if (memchr_inv(data, 0, params->block_size)) { -+ fsverity_err(inode, -+ "FILE CORRUPTED! Data past EOF is not zeroed"); -+ return false; -+ } -+ return true; - } - - /* -@@ -175,6 +165,7 @@ verify_data_block(struct inode *inode, struct fsverity_info *vi, - unsigned int hblock_offset_in_page; - unsigned int hoffset; - struct page *hpage; -+ const void *haddr; - - /* - * The index of the block in the current level; also the index -@@ -192,10 +183,9 @@ verify_data_block(struct inode *inode, struct fsverity_info *vi, - hblock_offset_in_page = - (hblock_idx << params->log_blocksize) & ~PAGE_MASK; - -- /* Byte offset of the hash within the page */ -- hoffset = hblock_offset_in_page + -- ((hidx << params->log_digestsize) & -- (params->block_size - 1)); -+ /* Byte offset of the hash within the block */ -+ hoffset = (hidx << params->log_digestsize) & -+ (params->block_size - 1); - - hpage = inode->i_sb->s_vop->read_merkle_tree_page(inode, - hpage_idx, level == 0 ? min(max_ra_pages, -@@ -207,15 +197,17 @@ verify_data_block(struct inode *inode, struct fsverity_info *vi, - err, hpage_idx); - goto out; - } -+ haddr = kmap_local_page(hpage) + hblock_offset_in_page; - if (is_hash_block_verified(vi, hpage, hblock_idx)) { -- memcpy_from_page(_want_hash, hpage, hoffset, hsize); -+ memcpy(_want_hash, haddr + hoffset, hsize); - want_hash = _want_hash; -+ kunmap_local(haddr); - put_page(hpage); - goto descend; - } - hblocks[level].page = hpage; -+ hblocks[level].addr = haddr; - hblocks[level].index = hblock_idx; -- hblocks[level].offset_in_page = hblock_offset_in_page; - hblocks[level].hoffset = hoffset; - hidx = next_hidx; - } -@@ -225,13 +217,11 @@ verify_data_block(struct inode *inode, struct fsverity_info *vi, - /* Descend the tree verifying hash blocks. */ - for (; level > 0; level--) { - struct page *hpage = hblocks[level - 1].page; -+ const void *haddr = hblocks[level - 1].addr; - unsigned long hblock_idx = hblocks[level - 1].index; -- unsigned int hblock_offset_in_page = -- hblocks[level - 1].offset_in_page; - unsigned int hoffset = hblocks[level - 1].hoffset; - -- err = fsverity_hash_block(params, inode, req, hpage, -- hblock_offset_in_page, real_hash); -+ err = fsverity_hash_block(params, inode, haddr, real_hash); - if (err) - goto out; - err = cmp_hashes(vi, want_hash, real_hash, data_pos, level - 1); -@@ -246,29 +236,30 @@ verify_data_block(struct inode *inode, struct fsverity_info *vi, - set_bit(hblock_idx, vi->hash_block_verified); - else - SetPageChecked(hpage); -- memcpy_from_page(_want_hash, hpage, hoffset, hsize); -+ memcpy(_want_hash, haddr + hoffset, hsize); - want_hash = _want_hash; -+ kunmap_local(haddr); - put_page(hpage); - } - - /* Finally, verify the data block. */ -- err = fsverity_hash_block(params, inode, req, data_page, -- dblock_offset_in_page, real_hash); -+ err = fsverity_hash_block(params, inode, data, real_hash); - if (err) - goto out; - err = cmp_hashes(vi, want_hash, real_hash, data_pos, -1); - out: -- for (; level > 0; level--) -+ for (; level > 0; level--) { -+ kunmap_local(hblocks[level - 1].addr); - put_page(hblocks[level - 1].page); -- -+ } - return err == 0; - } - - static bool --verify_data_blocks(struct inode *inode, struct fsverity_info *vi, -- struct ahash_request *req, struct folio *data_folio, -+verify_data_blocks(struct inode *inode, struct folio *data_folio, - size_t len, size_t offset, unsigned long max_ra_pages) - { -+ struct fsverity_info *vi = inode->i_verity_info; - const unsigned int block_size = vi->tree_params.block_size; - u64 pos = (u64)data_folio->index << PAGE_SHIFT; - -@@ -278,11 +269,14 @@ verify_data_blocks(struct inode *inode, struct fsverity_info *vi, - folio_test_uptodate(data_folio))) - return false; - do { -- struct page *data_page = -- folio_page(data_folio, offset >> PAGE_SHIFT); -- -- if (!verify_data_block(inode, vi, req, data_page, pos + offset, -- offset & ~PAGE_MASK, max_ra_pages)) -+ void *data; -+ bool valid; -+ -+ data = kmap_local_folio(data_folio, offset); -+ valid = verify_data_block(inode, vi, data, pos + offset, -+ max_ra_pages); -+ kunmap_local(data); -+ if (!valid) - return false; - offset += block_size; - len -= block_size; -@@ -304,19 +298,7 @@ verify_data_blocks(struct inode *inode, struct fsverity_info *vi, - */ - bool fsverity_verify_blocks(struct folio *folio, size_t len, size_t offset) - { -- struct inode *inode = folio->mapping->host; -- struct fsverity_info *vi = inode->i_verity_info; -- struct ahash_request *req; -- bool valid; -- -- /* This allocation never fails, since it's mempool-backed. */ -- req = fsverity_alloc_hash_request(vi->tree_params.hash_alg, GFP_NOFS); -- -- valid = verify_data_blocks(inode, vi, req, folio, len, offset, 0); -- -- fsverity_free_hash_request(vi->tree_params.hash_alg, req); -- -- return valid; -+ return verify_data_blocks(folio->mapping->host, folio, len, offset, 0); - } - EXPORT_SYMBOL_GPL(fsverity_verify_blocks); - -@@ -338,14 +320,9 @@ EXPORT_SYMBOL_GPL(fsverity_verify_blocks); - void fsverity_verify_bio(struct bio *bio) - { - struct inode *inode = bio_first_page_all(bio)->mapping->host; -- struct fsverity_info *vi = inode->i_verity_info; -- struct ahash_request *req; - struct folio_iter fi; - unsigned long max_ra_pages = 0; - -- /* This allocation never fails, since it's mempool-backed. */ -- req = fsverity_alloc_hash_request(vi->tree_params.hash_alg, GFP_NOFS); -- - if (bio->bi_opf & REQ_RAHEAD) { - /* - * If this bio is for data readahead, then we also do readahead -@@ -360,14 +337,12 @@ void fsverity_verify_bio(struct bio *bio) - } - - bio_for_each_folio_all(fi, bio) { -- if (!verify_data_blocks(inode, vi, req, fi.folio, fi.length, -- fi.offset, max_ra_pages)) { -+ if (!verify_data_blocks(inode, fi.folio, fi.length, fi.offset, -+ max_ra_pages)) { - bio->bi_status = BLK_STS_IOERR; - break; - } - } -- -- fsverity_free_hash_request(vi->tree_params.hash_alg, req); - } - EXPORT_SYMBOL_GPL(fsverity_verify_bio); - #endif /* CONFIG_BLOCK */ --- -2.39.2 - diff --git a/queue-6.4/gtp-fix-use-after-free-in-__gtp_encap_destroy.patch b/queue-6.4/gtp-fix-use-after-free-in-__gtp_encap_destroy.patch deleted file mode 100644 index 70e8126aa90..00000000000 --- a/queue-6.4/gtp-fix-use-after-free-in-__gtp_encap_destroy.patch +++ /dev/null @@ -1,190 +0,0 @@ -From dc2fe8aca0e17c5bd209c6cd09180b169057463c Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Thu, 22 Jun 2023 14:32:31 -0700 -Subject: gtp: Fix use-after-free in __gtp_encap_destroy(). - -From: Kuniyuki Iwashima - -[ Upstream commit ce3aee7114c575fab32a5e9e939d4bbb3dcca79f ] - -syzkaller reported use-after-free in __gtp_encap_destroy(). [0] - -It shows the same process freed sk and touched it illegally. - -Commit e198987e7dd7 ("gtp: fix suspicious RCU usage") added lock_sock() -and release_sock() in __gtp_encap_destroy() to protect sk->sk_user_data, -but release_sock() is called after sock_put() releases the last refcnt. - -[0]: -BUG: KASAN: slab-use-after-free in instrument_atomic_read_write include/linux/instrumented.h:96 [inline] -BUG: KASAN: slab-use-after-free in atomic_try_cmpxchg_acquire include/linux/atomic/atomic-instrumented.h:541 [inline] -BUG: KASAN: slab-use-after-free in queued_spin_lock include/asm-generic/qspinlock.h:111 [inline] -BUG: KASAN: slab-use-after-free in do_raw_spin_lock include/linux/spinlock.h:186 [inline] -BUG: KASAN: slab-use-after-free in __raw_spin_lock_bh include/linux/spinlock_api_smp.h:127 [inline] -BUG: KASAN: slab-use-after-free in _raw_spin_lock_bh+0x75/0xe0 kernel/locking/spinlock.c:178 -Write of size 4 at addr ffff88800dbef398 by task syz-executor.2/2401 - -CPU: 1 PID: 2401 Comm: syz-executor.2 Not tainted 6.4.0-rc5-01219-gfa0e21fa4443 #2 -Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS rel-1.16.0-0-gd239552ce722-prebuilt.qemu.org 04/01/2014 -Call Trace: - - __dump_stack lib/dump_stack.c:88 [inline] - dump_stack_lvl+0x72/0xa0 lib/dump_stack.c:106 - print_address_description mm/kasan/report.c:351 [inline] - print_report+0xcc/0x620 mm/kasan/report.c:462 - kasan_report+0xb2/0xe0 mm/kasan/report.c:572 - check_region_inline mm/kasan/generic.c:181 [inline] - kasan_check_range+0x39/0x1c0 mm/kasan/generic.c:187 - instrument_atomic_read_write include/linux/instrumented.h:96 [inline] - atomic_try_cmpxchg_acquire include/linux/atomic/atomic-instrumented.h:541 [inline] - queued_spin_lock include/asm-generic/qspinlock.h:111 [inline] - do_raw_spin_lock include/linux/spinlock.h:186 [inline] - __raw_spin_lock_bh include/linux/spinlock_api_smp.h:127 [inline] - _raw_spin_lock_bh+0x75/0xe0 kernel/locking/spinlock.c:178 - spin_lock_bh include/linux/spinlock.h:355 [inline] - release_sock+0x1f/0x1a0 net/core/sock.c:3526 - gtp_encap_disable_sock drivers/net/gtp.c:651 [inline] - gtp_encap_disable+0xb9/0x220 drivers/net/gtp.c:664 - gtp_dev_uninit+0x19/0x50 drivers/net/gtp.c:728 - unregister_netdevice_many_notify+0x97e/0x1520 net/core/dev.c:10841 - rtnl_delete_link net/core/rtnetlink.c:3216 [inline] - rtnl_dellink+0x3c0/0xb30 net/core/rtnetlink.c:3268 - rtnetlink_rcv_msg+0x450/0xb10 net/core/rtnetlink.c:6423 - netlink_rcv_skb+0x15d/0x450 net/netlink/af_netlink.c:2548 - netlink_unicast_kernel net/netlink/af_netlink.c:1339 [inline] - netlink_unicast+0x700/0x930 net/netlink/af_netlink.c:1365 - netlink_sendmsg+0x91c/0xe30 net/netlink/af_netlink.c:1913 - sock_sendmsg_nosec net/socket.c:724 [inline] - sock_sendmsg+0x1b7/0x200 net/socket.c:747 - ____sys_sendmsg+0x75a/0x990 net/socket.c:2493 - ___sys_sendmsg+0x11d/0x1c0 net/socket.c:2547 - __sys_sendmsg+0xfe/0x1d0 net/socket.c:2576 - do_syscall_x64 arch/x86/entry/common.c:50 [inline] - do_syscall_64+0x3f/0x90 arch/x86/entry/common.c:80 - entry_SYSCALL_64_after_hwframe+0x72/0xdc -RIP: 0033:0x7f1168b1fe5d -Code: ff c3 66 2e 0f 1f 84 00 00 00 00 00 90 f3 0f 1e fa 48 89 f8 48 89 f7 48 89 d6 48 89 ca 4d 89 c2 4d 89 c8 4c 8b 4c 24 08 0f 05 <48> 3d 01 f0 ff ff 73 01 c3 48 8b 0d 73 9f 1b 00 f7 d8 64 89 01 48 -RSP: 002b:00007f1167edccc8 EFLAGS: 00000246 ORIG_RAX: 000000000000002e -RAX: ffffffffffffffda RBX: 00000000004bbf80 RCX: 00007f1168b1fe5d -RDX: 0000000000000000 RSI: 00000000200002c0 RDI: 0000000000000003 -RBP: 00000000004bbf80 R08: 0000000000000000 R09: 0000000000000000 -R10: 0000000000000000 R11: 0000000000000246 R12: 0000000000000000 -R13: 000000000000000b R14: 00007f1168b80530 R15: 0000000000000000 - - -Allocated by task 1483: - kasan_save_stack+0x22/0x50 mm/kasan/common.c:45 - kasan_set_track+0x25/0x30 mm/kasan/common.c:52 - __kasan_slab_alloc+0x59/0x70 mm/kasan/common.c:328 - kasan_slab_alloc include/linux/kasan.h:186 [inline] - slab_post_alloc_hook mm/slab.h:711 [inline] - slab_alloc_node mm/slub.c:3451 [inline] - slab_alloc mm/slub.c:3459 [inline] - __kmem_cache_alloc_lru mm/slub.c:3466 [inline] - kmem_cache_alloc+0x16d/0x340 mm/slub.c:3475 - sk_prot_alloc+0x5f/0x280 net/core/sock.c:2073 - sk_alloc+0x34/0x6c0 net/core/sock.c:2132 - inet6_create net/ipv6/af_inet6.c:192 [inline] - inet6_create+0x2c7/0xf20 net/ipv6/af_inet6.c:119 - __sock_create+0x2a1/0x530 net/socket.c:1535 - sock_create net/socket.c:1586 [inline] - __sys_socket_create net/socket.c:1623 [inline] - __sys_socket_create net/socket.c:1608 [inline] - __sys_socket+0x137/0x250 net/socket.c:1651 - __do_sys_socket net/socket.c:1664 [inline] - __se_sys_socket net/socket.c:1662 [inline] - __x64_sys_socket+0x72/0xb0 net/socket.c:1662 - do_syscall_x64 arch/x86/entry/common.c:50 [inline] - do_syscall_64+0x3f/0x90 arch/x86/entry/common.c:80 - entry_SYSCALL_64_after_hwframe+0x72/0xdc - -Freed by task 2401: - kasan_save_stack+0x22/0x50 mm/kasan/common.c:45 - kasan_set_track+0x25/0x30 mm/kasan/common.c:52 - kasan_save_free_info+0x2e/0x50 mm/kasan/generic.c:521 - ____kasan_slab_free mm/kasan/common.c:236 [inline] - ____kasan_slab_free mm/kasan/common.c:200 [inline] - __kasan_slab_free+0x10c/0x1b0 mm/kasan/common.c:244 - kasan_slab_free include/linux/kasan.h:162 [inline] - slab_free_hook mm/slub.c:1781 [inline] - slab_free_freelist_hook mm/slub.c:1807 [inline] - slab_free mm/slub.c:3786 [inline] - kmem_cache_free+0xb4/0x490 mm/slub.c:3808 - sk_prot_free net/core/sock.c:2113 [inline] - __sk_destruct+0x500/0x720 net/core/sock.c:2207 - sk_destruct+0xc1/0xe0 net/core/sock.c:2222 - __sk_free+0xed/0x3d0 net/core/sock.c:2233 - sk_free+0x7c/0xa0 net/core/sock.c:2244 - sock_put include/net/sock.h:1981 [inline] - __gtp_encap_destroy+0x165/0x1b0 drivers/net/gtp.c:634 - gtp_encap_disable_sock drivers/net/gtp.c:651 [inline] - gtp_encap_disable+0xb9/0x220 drivers/net/gtp.c:664 - gtp_dev_uninit+0x19/0x50 drivers/net/gtp.c:728 - unregister_netdevice_many_notify+0x97e/0x1520 net/core/dev.c:10841 - rtnl_delete_link net/core/rtnetlink.c:3216 [inline] - rtnl_dellink+0x3c0/0xb30 net/core/rtnetlink.c:3268 - rtnetlink_rcv_msg+0x450/0xb10 net/core/rtnetlink.c:6423 - netlink_rcv_skb+0x15d/0x450 net/netlink/af_netlink.c:2548 - netlink_unicast_kernel net/netlink/af_netlink.c:1339 [inline] - netlink_unicast+0x700/0x930 net/netlink/af_netlink.c:1365 - netlink_sendmsg+0x91c/0xe30 net/netlink/af_netlink.c:1913 - sock_sendmsg_nosec net/socket.c:724 [inline] - sock_sendmsg+0x1b7/0x200 net/socket.c:747 - ____sys_sendmsg+0x75a/0x990 net/socket.c:2493 - ___sys_sendmsg+0x11d/0x1c0 net/socket.c:2547 - __sys_sendmsg+0xfe/0x1d0 net/socket.c:2576 - do_syscall_x64 arch/x86/entry/common.c:50 [inline] - do_syscall_64+0x3f/0x90 arch/x86/entry/common.c:80 - entry_SYSCALL_64_after_hwframe+0x72/0xdc - -The buggy address belongs to the object at ffff88800dbef300 - which belongs to the cache UDPv6 of size 1344 -The buggy address is located 152 bytes inside of - freed 1344-byte region [ffff88800dbef300, ffff88800dbef840) - -The buggy address belongs to the physical page: -page:00000000d31bfed5 refcount:1 mapcount:0 mapping:0000000000000000 index:0xffff88800dbeed40 pfn:0xdbe8 -head:00000000d31bfed5 order:3 entire_mapcount:0 nr_pages_mapped:0 pincount:0 -memcg:ffff888008ee0801 -flags: 0x100000000010200(slab|head|node=0|zone=1) -page_type: 0xffffffff() -raw: 0100000000010200 ffff88800c7a3000 dead000000000122 0000000000000000 -raw: ffff88800dbeed40 0000000080160015 00000001ffffffff ffff888008ee0801 -page dumped because: kasan: bad access detected - -Memory state around the buggy address: - ffff88800dbef280: fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc - ffff88800dbef300: fa fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb ->ffff88800dbef380: fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb - ^ - ffff88800dbef400: fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb - ffff88800dbef480: fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb - -Fixes: e198987e7dd7 ("gtp: fix suspicious RCU usage") -Reported-by: syzkaller -Signed-off-by: Kuniyuki Iwashima -Reviewed-by: Pablo Neira Ayuso -Link: https://lore.kernel.org/r/20230622213231.24651-1-kuniyu@amazon.com -Signed-off-by: Jakub Kicinski -Signed-off-by: Sasha Levin ---- - drivers/net/gtp.c | 2 ++ - 1 file changed, 2 insertions(+) - -diff --git a/drivers/net/gtp.c b/drivers/net/gtp.c -index 15c7dc82107f4..acb20ad4e37eb 100644 ---- a/drivers/net/gtp.c -+++ b/drivers/net/gtp.c -@@ -631,7 +631,9 @@ static void __gtp_encap_destroy(struct sock *sk) - gtp->sk1u = NULL; - udp_sk(sk)->encap_type = 0; - rcu_assign_sk_user_data(sk, NULL); -+ release_sock(sk); - sock_put(sk); -+ return; - } - release_sock(sk); - } --- -2.39.2 - diff --git a/queue-6.4/hid-uclogic-modular-kunit-tests-should-not-depend-on.patch b/queue-6.4/hid-uclogic-modular-kunit-tests-should-not-depend-on.patch deleted file mode 100644 index 076c791279e..00000000000 --- a/queue-6.4/hid-uclogic-modular-kunit-tests-should-not-depend-on.patch +++ /dev/null @@ -1,44 +0,0 @@ -From 06e304eebd6fea70dac765b8b73ed755e285d79b Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Tue, 23 May 2023 17:10:59 +0200 -Subject: HID: uclogic: Modular KUnit tests should not depend on KUNIT=y -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -From: Geert Uytterhoeven - -[ Upstream commit 49904a0ebf23b15aad288a10f5354e7cd8193121 ] - -While KUnit tests that cannot be built as a loadable module must depend -on "KUNIT=y", this is not true for modular tests, where it adds an -unnecessary limitation. - -Fix this by relaxing the dependency to "KUNIT". - -Fixes: 08809e482a1c44d9 ("HID: uclogic: KUnit best practices and naming conventions") -Signed-off-by: Geert Uytterhoeven -Reviewed-by: David Gow -Reviewed-by: José Expósito -Signed-off-by: Jiri Kosina -Signed-off-by: Sasha Levin ---- - drivers/hid/Kconfig | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/drivers/hid/Kconfig b/drivers/hid/Kconfig -index 4ce012f83253e..b977450cac752 100644 ---- a/drivers/hid/Kconfig -+++ b/drivers/hid/Kconfig -@@ -1285,7 +1285,7 @@ config HID_MCP2221 - - config HID_KUNIT_TEST - tristate "KUnit tests for HID" if !KUNIT_ALL_TESTS -- depends on KUNIT=y -+ depends on KUNIT - depends on HID_BATTERY_STRENGTH - depends on HID_UCLOGIC - default KUNIT_ALL_TESTS --- -2.39.2 - diff --git a/queue-6.4/hwmon-f71882fg-prevent-possible-division-by-zero.patch b/queue-6.4/hwmon-f71882fg-prevent-possible-division-by-zero.patch deleted file mode 100644 index 4a0cec8fd0e..00000000000 --- a/queue-6.4/hwmon-f71882fg-prevent-possible-division-by-zero.patch +++ /dev/null @@ -1,51 +0,0 @@ -From 8cd21dbb56178108a3ec637c77027a18fe4d28a6 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Wed, 10 May 2023 07:35:37 -0700 -Subject: hwmon: (f71882fg) prevent possible division by zero - -From: Nikita Zhandarovich - -[ Upstream commit 0babf89c9cca7e074d6e59893e462e4886f481cc ] - -In the unlikely event that something goes wrong with the device and -its registers, the fan_from_reg() function may return 0. This value -will cause a division-by-zero error in the show_pwm() function. - -To prevent this, test the value of -fan_from_reg(data->fan_full_speed[nr]) against 0 before performing -the division. If the division-by-zero error is avoided, assign 0 to -the val variable. - -Found by Linux Verification Center (linuxtesting.org) with static -analysis tool SVACE. - -Fixes: df9ec2dae094 ("hwmon: (f71882fg) Reorder symbols to get rid of a few forward declarations") -Signed-off-by: Nikita Zhandarovich -Link: https://lore.kernel.org/r/20230510143537.145060-1-n.zhandarovich@fintech.ru -Signed-off-by: Guenter Roeck -Signed-off-by: Sasha Levin ---- - drivers/hwmon/f71882fg.c | 7 +++++-- - 1 file changed, 5 insertions(+), 2 deletions(-) - -diff --git a/drivers/hwmon/f71882fg.c b/drivers/hwmon/f71882fg.c -index 70121482a6173..27207ec6f7feb 100644 ---- a/drivers/hwmon/f71882fg.c -+++ b/drivers/hwmon/f71882fg.c -@@ -1096,8 +1096,11 @@ static ssize_t show_pwm(struct device *dev, - val = data->pwm[nr]; - else { - /* RPM mode */ -- val = 255 * fan_from_reg(data->fan_target[nr]) -- / fan_from_reg(data->fan_full_speed[nr]); -+ if (fan_from_reg(data->fan_full_speed[nr])) -+ val = 255 * fan_from_reg(data->fan_target[nr]) -+ / fan_from_reg(data->fan_full_speed[nr]); -+ else -+ val = 0; - } - mutex_unlock(&data->update_lock); - return sprintf(buf, "%d\n", val); --- -2.39.2 - diff --git a/queue-6.4/hwmon-gsc-hwmon-fix-fan-pwm-temperature-scaling.patch b/queue-6.4/hwmon-gsc-hwmon-fix-fan-pwm-temperature-scaling.patch deleted file mode 100644 index 2c8caea1675..00000000000 --- a/queue-6.4/hwmon-gsc-hwmon-fix-fan-pwm-temperature-scaling.patch +++ /dev/null @@ -1,48 +0,0 @@ -From 43289758e51536cbe3f9bddd9c2118017fb06fca Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Tue, 6 Jun 2023 08:30:04 -0700 -Subject: hwmon: (gsc-hwmon) fix fan pwm temperature scaling - -From: Tim Harvey - -[ Upstream commit a6d80df47ee2c69db99e4f2f8871aa4db154620b ] - -The GSC fan pwm temperature register is in centidegrees celcius but the -Linux hwmon convention is to use milidegrees celcius. Fix the scaling. - -Fixes: 3bce5377ef66 ("hwmon: Add Gateworks System Controller support") -Signed-off-by: Tim Harvey -Link: https://lore.kernel.org/r/20230606153004.1448086-1-tharvey@gateworks.com -Signed-off-by: Guenter Roeck -Signed-off-by: Sasha Levin ---- - drivers/hwmon/gsc-hwmon.c | 6 +++--- - 1 file changed, 3 insertions(+), 3 deletions(-) - -diff --git a/drivers/hwmon/gsc-hwmon.c b/drivers/hwmon/gsc-hwmon.c -index 73e5d92b200b0..1501ceb551e79 100644 ---- a/drivers/hwmon/gsc-hwmon.c -+++ b/drivers/hwmon/gsc-hwmon.c -@@ -82,8 +82,8 @@ static ssize_t pwm_auto_point_temp_store(struct device *dev, - if (kstrtol(buf, 10, &temp)) - return -EINVAL; - -- temp = clamp_val(temp, 0, 10000); -- temp = DIV_ROUND_CLOSEST(temp, 10); -+ temp = clamp_val(temp, 0, 100000); -+ temp = DIV_ROUND_CLOSEST(temp, 100); - - regs[0] = temp & 0xff; - regs[1] = (temp >> 8) & 0xff; -@@ -100,7 +100,7 @@ static ssize_t pwm_auto_point_pwm_show(struct device *dev, - { - struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr); - -- return sprintf(buf, "%d\n", 255 * (50 + (attr->index * 10)) / 100); -+ return sprintf(buf, "%d\n", 255 * (50 + (attr->index * 10))); - } - - static SENSOR_DEVICE_ATTR_RO(pwm1_auto_point1_pwm, pwm_auto_point_pwm, 0); --- -2.39.2 - diff --git a/queue-6.4/hwmon-pmbus-adm1275-fix-problems-with-temperature-mo.patch b/queue-6.4/hwmon-pmbus-adm1275-fix-problems-with-temperature-mo.patch deleted file mode 100644 index a64a02ba8e8..00000000000 --- a/queue-6.4/hwmon-pmbus-adm1275-fix-problems-with-temperature-mo.patch +++ /dev/null @@ -1,128 +0,0 @@ -From 4caaf4c11c16a1110146ffe849c93d98c56eaf65 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Fri, 2 Jun 2023 14:34:47 -0700 -Subject: hwmon: (pmbus/adm1275) Fix problems with temperature monitoring on - ADM1272 - -From: Guenter Roeck - -[ Upstream commit b153a0bb4199566abd337119207f82b59a8cd1ca ] - -The PMON_CONFIG register on ADM1272 is a 16 bit register. Writing a 8 bit -value into it clears the upper 8 bits of the register, resulting in -unexpected side effects. Fix by writing the 16 bit register value. - -Also, it has been reported that temperature readings are sometimes widely -inaccurate, to the point where readings may result in device shutdown due -to errant overtemperature faults. Improve by enabling temperature sampling. - -While at it, move the common code for ADM1272 and ADM1278 into a separate -function, and clarify in the error message that an attempt was made to -enable both VOUT and temperature monitoring. - -Last but not least, return the error code reported by the underlying I2C -controller and not -ENODEV if updating the PMON_CONFIG register fails. -After all, this does not indicate that the chip is not present, but an -error in the communication with the chip. - -Fixes: 4ff0ce227a1e ("hwmon: (pmbus/adm1275) Add support for ADM1272") -Fixes: 9da9c2dc57b2 ("hwmon: (adm1275) enable adm1272 temperature reporting") -Signed-off-by: Guenter Roeck -Link: https://lore.kernel.org/r/20230602213447.3557346-1-linux@roeck-us.net -Signed-off-by: Guenter Roeck -Signed-off-by: Sasha Levin ---- - drivers/hwmon/pmbus/adm1275.c | 52 +++++++++++++++++------------------ - 1 file changed, 26 insertions(+), 26 deletions(-) - -diff --git a/drivers/hwmon/pmbus/adm1275.c b/drivers/hwmon/pmbus/adm1275.c -index 3b07bfb43e937..b8543c06d022a 100644 ---- a/drivers/hwmon/pmbus/adm1275.c -+++ b/drivers/hwmon/pmbus/adm1275.c -@@ -37,10 +37,13 @@ enum chips { adm1075, adm1272, adm1275, adm1276, adm1278, adm1293, adm1294 }; - - #define ADM1272_IRANGE BIT(0) - -+#define ADM1278_TSFILT BIT(15) - #define ADM1278_TEMP1_EN BIT(3) - #define ADM1278_VIN_EN BIT(2) - #define ADM1278_VOUT_EN BIT(1) - -+#define ADM1278_PMON_DEFCONFIG (ADM1278_VOUT_EN | ADM1278_TEMP1_EN | ADM1278_TSFILT) -+ - #define ADM1293_IRANGE_25 0 - #define ADM1293_IRANGE_50 BIT(6) - #define ADM1293_IRANGE_100 BIT(7) -@@ -462,6 +465,22 @@ static const struct i2c_device_id adm1275_id[] = { - }; - MODULE_DEVICE_TABLE(i2c, adm1275_id); - -+/* Enable VOUT & TEMP1 if not enabled (disabled by default) */ -+static int adm1275_enable_vout_temp(struct i2c_client *client, int config) -+{ -+ int ret; -+ -+ if ((config & ADM1278_PMON_DEFCONFIG) != ADM1278_PMON_DEFCONFIG) { -+ config |= ADM1278_PMON_DEFCONFIG; -+ ret = i2c_smbus_write_word_data(client, ADM1275_PMON_CONFIG, config); -+ if (ret < 0) { -+ dev_err(&client->dev, "Failed to enable VOUT/TEMP1 monitoring\n"); -+ return ret; -+ } -+ } -+ return 0; -+} -+ - static int adm1275_probe(struct i2c_client *client) - { - s32 (*config_read_fn)(const struct i2c_client *client, u8 reg); -@@ -615,19 +634,10 @@ static int adm1275_probe(struct i2c_client *client) - PMBUS_HAVE_VOUT | PMBUS_HAVE_STATUS_VOUT | - PMBUS_HAVE_TEMP | PMBUS_HAVE_STATUS_TEMP; - -- /* Enable VOUT & TEMP1 if not enabled (disabled by default) */ -- if ((config & (ADM1278_VOUT_EN | ADM1278_TEMP1_EN)) != -- (ADM1278_VOUT_EN | ADM1278_TEMP1_EN)) { -- config |= ADM1278_VOUT_EN | ADM1278_TEMP1_EN; -- ret = i2c_smbus_write_byte_data(client, -- ADM1275_PMON_CONFIG, -- config); -- if (ret < 0) { -- dev_err(&client->dev, -- "Failed to enable VOUT monitoring\n"); -- return -ENODEV; -- } -- } -+ ret = adm1275_enable_vout_temp(client, config); -+ if (ret) -+ return ret; -+ - if (config & ADM1278_VIN_EN) - info->func[0] |= PMBUS_HAVE_VIN; - break; -@@ -684,19 +694,9 @@ static int adm1275_probe(struct i2c_client *client) - PMBUS_HAVE_VOUT | PMBUS_HAVE_STATUS_VOUT | - PMBUS_HAVE_TEMP | PMBUS_HAVE_STATUS_TEMP; - -- /* Enable VOUT & TEMP1 if not enabled (disabled by default) */ -- if ((config & (ADM1278_VOUT_EN | ADM1278_TEMP1_EN)) != -- (ADM1278_VOUT_EN | ADM1278_TEMP1_EN)) { -- config |= ADM1278_VOUT_EN | ADM1278_TEMP1_EN; -- ret = i2c_smbus_write_word_data(client, -- ADM1275_PMON_CONFIG, -- config); -- if (ret < 0) { -- dev_err(&client->dev, -- "Failed to enable VOUT monitoring\n"); -- return -ENODEV; -- } -- } -+ ret = adm1275_enable_vout_temp(client, config); -+ if (ret) -+ return ret; - - if (config & ADM1278_VIN_EN) - info->func[0] |= PMBUS_HAVE_VIN; --- -2.39.2 - diff --git a/queue-6.4/hwrng-st-keep-clock-enabled-while-hwrng-is-registere.patch b/queue-6.4/hwrng-st-keep-clock-enabled-while-hwrng-is-registere.patch deleted file mode 100644 index 9a19e718213..00000000000 --- a/queue-6.4/hwrng-st-keep-clock-enabled-while-hwrng-is-registere.patch +++ /dev/null @@ -1,96 +0,0 @@ -From 8de6d3f2fa578515a37374f1a0f100f2bbb936a0 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Fri, 16 Jun 2023 09:58:13 +0100 -Subject: hwrng: st - keep clock enabled while hwrng is registered - -From: Martin Kaiser - -[ Upstream commit 501e197a02d4aef157f53ba3a0b9049c3e52fedc ] - -The st-rng driver uses devres to register itself with the hwrng core, -the driver will be unregistered from hwrng when its device goes out of -scope. This happens after the driver's remove function is called. - -However, st-rng's clock is disabled in the remove function. There's a -short timeframe where st-rng is still registered with the hwrng core -although its clock is disabled. I suppose the clock must be active to -access the hardware and serve requests from the hwrng core. - -Switch to devm_clk_get_enabled and let devres disable the clock and -unregister the hwrng. This avoids the race condition. - -Fixes: 3e75241be808 ("hwrng: drivers - Use device-managed registration API") -Signed-off-by: Martin Kaiser -Signed-off-by: Herbert Xu -Signed-off-by: Sasha Levin ---- - drivers/char/hw_random/st-rng.c | 21 +-------------------- - 1 file changed, 1 insertion(+), 20 deletions(-) - -diff --git a/drivers/char/hw_random/st-rng.c b/drivers/char/hw_random/st-rng.c -index 15ba1e6fae4d2..6e9dfac9fc9f4 100644 ---- a/drivers/char/hw_random/st-rng.c -+++ b/drivers/char/hw_random/st-rng.c -@@ -42,7 +42,6 @@ - - struct st_rng_data { - void __iomem *base; -- struct clk *clk; - struct hwrng ops; - }; - -@@ -85,26 +84,18 @@ static int st_rng_probe(struct platform_device *pdev) - if (IS_ERR(base)) - return PTR_ERR(base); - -- clk = devm_clk_get(&pdev->dev, NULL); -+ clk = devm_clk_get_enabled(&pdev->dev, NULL); - if (IS_ERR(clk)) - return PTR_ERR(clk); - -- ret = clk_prepare_enable(clk); -- if (ret) -- return ret; -- - ddata->ops.priv = (unsigned long)ddata; - ddata->ops.read = st_rng_read; - ddata->ops.name = pdev->name; - ddata->base = base; -- ddata->clk = clk; -- -- dev_set_drvdata(&pdev->dev, ddata); - - ret = devm_hwrng_register(&pdev->dev, &ddata->ops); - if (ret) { - dev_err(&pdev->dev, "Failed to register HW RNG\n"); -- clk_disable_unprepare(clk); - return ret; - } - -@@ -113,15 +104,6 @@ static int st_rng_probe(struct platform_device *pdev) - return 0; - } - --static int st_rng_remove(struct platform_device *pdev) --{ -- struct st_rng_data *ddata = dev_get_drvdata(&pdev->dev); -- -- clk_disable_unprepare(ddata->clk); -- -- return 0; --} -- - static const struct of_device_id st_rng_match[] __maybe_unused = { - { .compatible = "st,rng" }, - {}, -@@ -134,7 +116,6 @@ static struct platform_driver st_rng_driver = { - .of_match_table = of_match_ptr(st_rng_match), - }, - .probe = st_rng_probe, -- .remove = st_rng_remove - }; - - module_platform_driver(st_rng_driver); --- -2.39.2 - diff --git a/queue-6.4/hwrng-virtio-fix-race-on-data_avail-and-actual-data.patch b/queue-6.4/hwrng-virtio-fix-race-on-data_avail-and-actual-data.patch deleted file mode 100644 index 58910de609a..00000000000 --- a/queue-6.4/hwrng-virtio-fix-race-on-data_avail-and-actual-data.patch +++ /dev/null @@ -1,86 +0,0 @@ -From dd1448a6bade380a53f7cee7bd2b29465dd0af10 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Thu, 4 May 2023 11:59:32 +0800 -Subject: hwrng: virtio - Fix race on data_avail and actual data - -From: Herbert Xu - -[ Upstream commit ac52578d6e8d300dd50f790f29a24169b1edd26c ] - -The virtio rng device kicks off a new entropy request whenever the -data available reaches zero. When a new request occurs at the end -of a read operation, that is, when the result of that request is -only needed by the next reader, then there is a race between the -writing of the new data and the next reader. - -This is because there is no synchronisation whatsoever between the -writer and the reader. - -Fix this by writing data_avail with smp_store_release and reading -it with smp_load_acquire when we first enter read. The subsequent -reads are safe because they're either protected by the first load -acquire, or by the completion mechanism. - -Also remove the redundant zeroing of data_idx in random_recv_done -(data_idx must already be zero at this point) and data_avail in -request_entropy (ditto). - -Reported-by: syzbot+726dc8c62c3536431ceb@syzkaller.appspotmail.com -Fixes: f7f510ec1957 ("virtio: An entropy device, as suggested by hpa.") -Signed-off-by: Herbert Xu -Acked-by: Michael S. Tsirkin -Signed-off-by: Herbert Xu -Signed-off-by: Sasha Levin ---- - drivers/char/hw_random/virtio-rng.c | 10 +++++----- - 1 file changed, 5 insertions(+), 5 deletions(-) - -diff --git a/drivers/char/hw_random/virtio-rng.c b/drivers/char/hw_random/virtio-rng.c -index f7690e0f92ede..e41a84e6b4b56 100644 ---- a/drivers/char/hw_random/virtio-rng.c -+++ b/drivers/char/hw_random/virtio-rng.c -@@ -4,6 +4,7 @@ - * Copyright (C) 2007, 2008 Rusty Russell IBM Corporation - */ - -+#include - #include - #include - #include -@@ -37,13 +38,13 @@ struct virtrng_info { - static void random_recv_done(struct virtqueue *vq) - { - struct virtrng_info *vi = vq->vdev->priv; -+ unsigned int len; - - /* We can get spurious callbacks, e.g. shared IRQs + virtio_pci. */ -- if (!virtqueue_get_buf(vi->vq, &vi->data_avail)) -+ if (!virtqueue_get_buf(vi->vq, &len)) - return; - -- vi->data_idx = 0; -- -+ smp_store_release(&vi->data_avail, len); - complete(&vi->have_data); - } - -@@ -52,7 +53,6 @@ static void request_entropy(struct virtrng_info *vi) - struct scatterlist sg; - - reinit_completion(&vi->have_data); -- vi->data_avail = 0; - vi->data_idx = 0; - - sg_init_one(&sg, vi->data, sizeof(vi->data)); -@@ -88,7 +88,7 @@ static int virtio_read(struct hwrng *rng, void *buf, size_t size, bool wait) - read = 0; - - /* copy available data */ -- if (vi->data_avail) { -+ if (smp_load_acquire(&vi->data_avail)) { - chunk = copy_data(vi, buf, size); - size -= chunk; - read += chunk; --- -2.39.2 - diff --git a/queue-6.4/i2c-convert-to-platform-remove-callback-returning-vo.patch b/queue-6.4/i2c-convert-to-platform-remove-callback-returning-vo.patch deleted file mode 100644 index e2b82f46b88..00000000000 --- a/queue-6.4/i2c-convert-to-platform-remove-callback-returning-vo.patch +++ /dev/null @@ -1,2748 +0,0 @@ -From cbe887280d2b7603830d97f5dcbe8769ba438a77 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Mon, 8 May 2023 22:51:38 +0200 -Subject: i2c: Convert to platform remove callback returning void -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -From: Uwe Kleine-König - -[ Upstream commit e190a0c389e60178fba3d532abf936dcae223e7d ] - -The .remove() callback for a platform driver returns an int which makes -many driver authors wrongly assume it's possible to do error handling by -returning an error code. However the value returned is (mostly) ignored -and this typically results in resource leaks. To improve here there is a -quest to make the remove callback return void. In the first step of this -quest all drivers are converted to .remove_new() which already returns -void. - -Signed-off-by: Uwe Kleine-König -Acked-by: Alain Volmat -Acked-by: Ard Biesheuvel -Acked-by: Baruch Siach -Acked-by: Florian Fainelli -Acked-by: Heiko Stuebner -Acked-by: Jarkko Nikula -Acked-by: Jernej Skrabec -Acked-by: Jochen Friedrich -Acked-by: Peter Rosin -Acked-by: Vadim Pasternak -Reviewed-by: Asmaa Mnebhi -Reviewed-by: Bartosz Golaszewski -Reviewed-by: Chris Packham -Reviewed-by: Chris Pringle -Reviewed-by: Claudiu Beznea -Reviewed-by: Conor Dooley -Reviewed-by: Geert Uytterhoeven -Reviewed-by: Hans de Goede -Reviewed-by: Jean Delvare -Reviewed-by: Konrad Dybcio -Reviewed-by: Krzysztof Kozlowski -Reviewed-by: Linus Walleij -Reviewed-by: Martin Blumenstingl -Reviewed-by: Matthias Brugger -Reviewed-by: Patrice Chotard -Reviewed-by: Tali Perry -Reviewed-by: Vignesh Raghavendra -Signed-off-by: Wolfram Sang -Stable-dep-of: 9e1a1ee93f6b ("i2c: ocores: use devm_ managed clks") -Signed-off-by: Sasha Levin ---- - drivers/i2c/busses/i2c-altera.c | 6 ++---- - drivers/i2c/busses/i2c-amd-mp2-plat.c | 5 ++--- - drivers/i2c/busses/i2c-aspeed.c | 6 ++---- - drivers/i2c/busses/i2c-at91-core.c | 6 ++---- - drivers/i2c/busses/i2c-au1550.c | 5 ++--- - drivers/i2c/busses/i2c-axxia.c | 6 ++---- - drivers/i2c/busses/i2c-bcm-iproc.c | 6 ++---- - drivers/i2c/busses/i2c-bcm-kona.c | 6 ++---- - drivers/i2c/busses/i2c-bcm2835.c | 6 ++---- - drivers/i2c/busses/i2c-brcmstb.c | 5 ++--- - drivers/i2c/busses/i2c-cadence.c | 6 ++---- - drivers/i2c/busses/i2c-cbus-gpio.c | 6 ++---- - drivers/i2c/busses/i2c-cht-wc.c | 6 ++---- - drivers/i2c/busses/i2c-cpm.c | 6 ++---- - drivers/i2c/busses/i2c-cros-ec-tunnel.c | 6 ++---- - drivers/i2c/busses/i2c-davinci.c | 14 ++++++-------- - drivers/i2c/busses/i2c-designware-platdrv.c | 6 ++---- - drivers/i2c/busses/i2c-digicolor.c | 6 ++---- - drivers/i2c/busses/i2c-dln2.c | 6 ++---- - drivers/i2c/busses/i2c-emev2.c | 6 ++---- - drivers/i2c/busses/i2c-exynos5.c | 6 ++---- - drivers/i2c/busses/i2c-gpio.c | 6 ++---- - drivers/i2c/busses/i2c-gxp.c | 6 ++---- - drivers/i2c/busses/i2c-highlander.c | 6 ++---- - drivers/i2c/busses/i2c-hix5hd2.c | 6 ++---- - drivers/i2c/busses/i2c-ibm_iic.c | 6 ++---- - drivers/i2c/busses/i2c-img-scb.c | 6 ++---- - drivers/i2c/busses/i2c-imx-lpi2c.c | 6 ++---- - drivers/i2c/busses/i2c-imx.c | 6 ++---- - drivers/i2c/busses/i2c-iop3xx.c | 6 ++---- - drivers/i2c/busses/i2c-isch.c | 6 ++---- - drivers/i2c/busses/i2c-jz4780.c | 5 ++--- - drivers/i2c/busses/i2c-kempld.c | 6 ++---- - drivers/i2c/busses/i2c-lpc2k.c | 6 ++---- - drivers/i2c/busses/i2c-meson.c | 6 ++---- - drivers/i2c/busses/i2c-microchip-corei2c.c | 6 ++---- - drivers/i2c/busses/i2c-mlxbf.c | 6 ++---- - drivers/i2c/busses/i2c-mlxcpld.c | 6 ++---- - drivers/i2c/busses/i2c-mpc.c | 6 ++---- - drivers/i2c/busses/i2c-mt65xx.c | 6 ++---- - drivers/i2c/busses/i2c-mt7621.c | 6 ++---- - drivers/i2c/busses/i2c-mv64xxx.c | 6 ++---- - drivers/i2c/busses/i2c-mxs.c | 6 ++---- - drivers/i2c/busses/i2c-npcm7xx.c | 5 ++--- - drivers/i2c/busses/i2c-ocores.c | 6 ++---- - drivers/i2c/busses/i2c-octeon-platdrv.c | 5 ++--- - drivers/i2c/busses/i2c-omap.c | 6 ++---- - drivers/i2c/busses/i2c-opal.c | 6 ++---- - drivers/i2c/busses/i2c-pasemi-platform.c | 5 ++--- - drivers/i2c/busses/i2c-pca-platform.c | 6 ++---- - drivers/i2c/busses/i2c-pnx.c | 6 ++---- - drivers/i2c/busses/i2c-powermac.c | 6 ++---- - drivers/i2c/busses/i2c-pxa.c | 6 ++---- - drivers/i2c/busses/i2c-qcom-cci.c | 6 ++---- - drivers/i2c/busses/i2c-qcom-geni.c | 5 ++--- - drivers/i2c/busses/i2c-qup.c | 5 ++--- - drivers/i2c/busses/i2c-rcar.c | 6 ++---- - drivers/i2c/busses/i2c-riic.c | 6 ++---- - drivers/i2c/busses/i2c-rk3x.c | 6 ++---- - drivers/i2c/busses/i2c-rzv2m.c | 6 ++---- - drivers/i2c/busses/i2c-s3c2410.c | 6 ++---- - drivers/i2c/busses/i2c-scmi.c | 6 ++---- - drivers/i2c/busses/i2c-sh7760.c | 6 ++---- - drivers/i2c/busses/i2c-sh_mobile.c | 5 ++--- - drivers/i2c/busses/i2c-simtec.c | 6 ++---- - drivers/i2c/busses/i2c-st.c | 6 ++---- - drivers/i2c/busses/i2c-stm32f4.c | 6 ++---- - drivers/i2c/busses/i2c-stm32f7.c | 6 ++---- - drivers/i2c/busses/i2c-sun6i-p2wi.c | 6 ++---- - drivers/i2c/busses/i2c-synquacer.c | 6 ++---- - drivers/i2c/busses/i2c-tegra-bpmp.c | 6 ++---- - drivers/i2c/busses/i2c-tegra.c | 6 ++---- - drivers/i2c/busses/i2c-uniphier-f.c | 6 ++---- - drivers/i2c/busses/i2c-uniphier.c | 6 ++---- - drivers/i2c/busses/i2c-versatile.c | 5 ++--- - drivers/i2c/busses/i2c-viperboard.c | 6 ++---- - drivers/i2c/busses/i2c-wmt.c | 6 ++---- - drivers/i2c/busses/i2c-xgene-slimpro.c | 6 ++---- - drivers/i2c/busses/i2c-xiic.c | 6 ++---- - drivers/i2c/busses/i2c-xlp9xx.c | 6 ++---- - drivers/i2c/busses/scx200_acb.c | 6 ++---- - drivers/i2c/muxes/i2c-arb-gpio-challenge.c | 5 ++--- - drivers/i2c/muxes/i2c-demux-pinctrl.c | 6 ++---- - drivers/i2c/muxes/i2c-mux-gpio.c | 6 ++---- - drivers/i2c/muxes/i2c-mux-gpmux.c | 6 ++---- - drivers/i2c/muxes/i2c-mux-mlxcpld.c | 5 ++--- - drivers/i2c/muxes/i2c-mux-pinctrl.c | 6 ++---- - drivers/i2c/muxes/i2c-mux-reg.c | 6 ++---- - 88 files changed, 180 insertions(+), 343 deletions(-) - -diff --git a/drivers/i2c/busses/i2c-altera.c b/drivers/i2c/busses/i2c-altera.c -index 50e7f3f670b6f..252fbd175fb1c 100644 ---- a/drivers/i2c/busses/i2c-altera.c -+++ b/drivers/i2c/busses/i2c-altera.c -@@ -465,14 +465,12 @@ static int altr_i2c_probe(struct platform_device *pdev) - return 0; - } - --static int altr_i2c_remove(struct platform_device *pdev) -+static void altr_i2c_remove(struct platform_device *pdev) - { - struct altr_i2c_dev *idev = platform_get_drvdata(pdev); - - clk_disable_unprepare(idev->i2c_clk); - i2c_del_adapter(&idev->adapter); -- -- return 0; - } - - /* Match table for of_platform binding */ -@@ -484,7 +482,7 @@ MODULE_DEVICE_TABLE(of, altr_i2c_of_match); - - static struct platform_driver altr_i2c_driver = { - .probe = altr_i2c_probe, -- .remove = altr_i2c_remove, -+ .remove_new = altr_i2c_remove, - .driver = { - .name = "altera-i2c", - .of_match_table = altr_i2c_of_match, -diff --git a/drivers/i2c/busses/i2c-amd-mp2-plat.c b/drivers/i2c/busses/i2c-amd-mp2-plat.c -index 423fe0c8a471e..112fe2bc5662b 100644 ---- a/drivers/i2c/busses/i2c-amd-mp2-plat.c -+++ b/drivers/i2c/busses/i2c-amd-mp2-plat.c -@@ -322,7 +322,7 @@ static int i2c_amd_probe(struct platform_device *pdev) - return ret; - } - --static int i2c_amd_remove(struct platform_device *pdev) -+static void i2c_amd_remove(struct platform_device *pdev) - { - struct amd_i2c_dev *i2c_dev = platform_get_drvdata(pdev); - struct amd_i2c_common *i2c_common = &i2c_dev->common; -@@ -336,7 +336,6 @@ static int i2c_amd_remove(struct platform_device *pdev) - i2c_unlock_bus(&i2c_dev->adap, I2C_LOCK_ROOT_ADAPTER); - - i2c_del_adapter(&i2c_dev->adap); -- return 0; - } - - static const struct acpi_device_id i2c_amd_acpi_match[] = { -@@ -347,7 +346,7 @@ MODULE_DEVICE_TABLE(acpi, i2c_amd_acpi_match); - - static struct platform_driver i2c_amd_plat_driver = { - .probe = i2c_amd_probe, -- .remove = i2c_amd_remove, -+ .remove_new = i2c_amd_remove, - .driver = { - .name = "i2c_amd_mp2", - .acpi_match_table = ACPI_PTR(i2c_amd_acpi_match), -diff --git a/drivers/i2c/busses/i2c-aspeed.c b/drivers/i2c/busses/i2c-aspeed.c -index d3c99c5b32478..2e5acfeb76c81 100644 ---- a/drivers/i2c/busses/i2c-aspeed.c -+++ b/drivers/i2c/busses/i2c-aspeed.c -@@ -1061,7 +1061,7 @@ static int aspeed_i2c_probe_bus(struct platform_device *pdev) - return 0; - } - --static int aspeed_i2c_remove_bus(struct platform_device *pdev) -+static void aspeed_i2c_remove_bus(struct platform_device *pdev) - { - struct aspeed_i2c_bus *bus = platform_get_drvdata(pdev); - unsigned long flags; -@@ -1077,13 +1077,11 @@ static int aspeed_i2c_remove_bus(struct platform_device *pdev) - reset_control_assert(bus->rst); - - i2c_del_adapter(&bus->adap); -- -- return 0; - } - - static struct platform_driver aspeed_i2c_bus_driver = { - .probe = aspeed_i2c_probe_bus, -- .remove = aspeed_i2c_remove_bus, -+ .remove_new = aspeed_i2c_remove_bus, - .driver = { - .name = "aspeed-i2c-bus", - .of_match_table = aspeed_i2c_bus_of_table, -diff --git a/drivers/i2c/busses/i2c-at91-core.c b/drivers/i2c/busses/i2c-at91-core.c -index 2df9df5851314..05ad3bc3578ac 100644 ---- a/drivers/i2c/busses/i2c-at91-core.c -+++ b/drivers/i2c/busses/i2c-at91-core.c -@@ -273,7 +273,7 @@ static int at91_twi_probe(struct platform_device *pdev) - return 0; - } - --static int at91_twi_remove(struct platform_device *pdev) -+static void at91_twi_remove(struct platform_device *pdev) - { - struct at91_twi_dev *dev = platform_get_drvdata(pdev); - -@@ -282,8 +282,6 @@ static int at91_twi_remove(struct platform_device *pdev) - - pm_runtime_disable(dev->dev); - pm_runtime_set_suspended(dev->dev); -- -- return 0; - } - - static int __maybe_unused at91_twi_runtime_suspend(struct device *dev) -@@ -342,7 +340,7 @@ static const struct dev_pm_ops __maybe_unused at91_twi_pm = { - - static struct platform_driver at91_twi_driver = { - .probe = at91_twi_probe, -- .remove = at91_twi_remove, -+ .remove_new = at91_twi_remove, - .id_table = at91_twi_devtypes, - .driver = { - .name = "at91_i2c", -diff --git a/drivers/i2c/busses/i2c-au1550.c b/drivers/i2c/busses/i2c-au1550.c -index 7b42d35b12942..e66c12ecf2706 100644 ---- a/drivers/i2c/busses/i2c-au1550.c -+++ b/drivers/i2c/busses/i2c-au1550.c -@@ -334,13 +334,12 @@ i2c_au1550_probe(struct platform_device *pdev) - return 0; - } - --static int i2c_au1550_remove(struct platform_device *pdev) -+static void i2c_au1550_remove(struct platform_device *pdev) - { - struct i2c_au1550_data *priv = platform_get_drvdata(pdev); - - i2c_del_adapter(&priv->adap); - i2c_au1550_disable(priv); -- return 0; - } - - #ifdef CONFIG_PM -@@ -379,7 +378,7 @@ static struct platform_driver au1xpsc_smbus_driver = { - .pm = AU1XPSC_SMBUS_PMOPS, - }, - .probe = i2c_au1550_probe, -- .remove = i2c_au1550_remove, -+ .remove_new = i2c_au1550_remove, - }; - - module_platform_driver(au1xpsc_smbus_driver); -diff --git a/drivers/i2c/busses/i2c-axxia.c b/drivers/i2c/busses/i2c-axxia.c -index c1c74ce084071..d7f1e98777ace 100644 ---- a/drivers/i2c/busses/i2c-axxia.c -+++ b/drivers/i2c/busses/i2c-axxia.c -@@ -804,14 +804,12 @@ static int axxia_i2c_probe(struct platform_device *pdev) - return ret; - } - --static int axxia_i2c_remove(struct platform_device *pdev) -+static void axxia_i2c_remove(struct platform_device *pdev) - { - struct axxia_i2c_dev *idev = platform_get_drvdata(pdev); - - clk_disable_unprepare(idev->i2c_clk); - i2c_del_adapter(&idev->adapter); -- -- return 0; - } - - /* Match table for of_platform binding */ -@@ -824,7 +822,7 @@ MODULE_DEVICE_TABLE(of, axxia_i2c_of_match); - - static struct platform_driver axxia_i2c_driver = { - .probe = axxia_i2c_probe, -- .remove = axxia_i2c_remove, -+ .remove_new = axxia_i2c_remove, - .driver = { - .name = "axxia-i2c", - .of_match_table = axxia_i2c_of_match, -diff --git a/drivers/i2c/busses/i2c-bcm-iproc.c b/drivers/i2c/busses/i2c-bcm-iproc.c -index 85d8a6b048856..2d8342fdc25de 100644 ---- a/drivers/i2c/busses/i2c-bcm-iproc.c -+++ b/drivers/i2c/busses/i2c-bcm-iproc.c -@@ -1107,7 +1107,7 @@ static int bcm_iproc_i2c_probe(struct platform_device *pdev) - return i2c_add_adapter(adap); - } - --static int bcm_iproc_i2c_remove(struct platform_device *pdev) -+static void bcm_iproc_i2c_remove(struct platform_device *pdev) - { - struct bcm_iproc_i2c_dev *iproc_i2c = platform_get_drvdata(pdev); - -@@ -1123,8 +1123,6 @@ static int bcm_iproc_i2c_remove(struct platform_device *pdev) - - i2c_del_adapter(&iproc_i2c->adapter); - bcm_iproc_i2c_enable_disable(iproc_i2c, false); -- -- return 0; - } - - #ifdef CONFIG_PM_SLEEP -@@ -1260,7 +1258,7 @@ static struct platform_driver bcm_iproc_i2c_driver = { - .pm = BCM_IPROC_I2C_PM_OPS, - }, - .probe = bcm_iproc_i2c_probe, -- .remove = bcm_iproc_i2c_remove, -+ .remove_new = bcm_iproc_i2c_remove, - }; - module_platform_driver(bcm_iproc_i2c_driver); - -diff --git a/drivers/i2c/busses/i2c-bcm-kona.c b/drivers/i2c/busses/i2c-bcm-kona.c -index f3e369f0fd402..a57088ec2b064 100644 ---- a/drivers/i2c/busses/i2c-bcm-kona.c -+++ b/drivers/i2c/busses/i2c-bcm-kona.c -@@ -859,13 +859,11 @@ static int bcm_kona_i2c_probe(struct platform_device *pdev) - return rc; - } - --static int bcm_kona_i2c_remove(struct platform_device *pdev) -+static void bcm_kona_i2c_remove(struct platform_device *pdev) - { - struct bcm_kona_i2c_dev *dev = platform_get_drvdata(pdev); - - i2c_del_adapter(&dev->adapter); -- -- return 0; - } - - static const struct of_device_id bcm_kona_i2c_of_match[] = { -@@ -880,7 +878,7 @@ static struct platform_driver bcm_kona_i2c_driver = { - .of_match_table = bcm_kona_i2c_of_match, - }, - .probe = bcm_kona_i2c_probe, -- .remove = bcm_kona_i2c_remove, -+ .remove_new = bcm_kona_i2c_remove, - }; - module_platform_driver(bcm_kona_i2c_driver); - -diff --git a/drivers/i2c/busses/i2c-bcm2835.c b/drivers/i2c/busses/i2c-bcm2835.c -index 09a077b31bfe1..8ce6d3f495516 100644 ---- a/drivers/i2c/busses/i2c-bcm2835.c -+++ b/drivers/i2c/busses/i2c-bcm2835.c -@@ -503,7 +503,7 @@ static int bcm2835_i2c_probe(struct platform_device *pdev) - return ret; - } - --static int bcm2835_i2c_remove(struct platform_device *pdev) -+static void bcm2835_i2c_remove(struct platform_device *pdev) - { - struct bcm2835_i2c_dev *i2c_dev = platform_get_drvdata(pdev); - -@@ -512,8 +512,6 @@ static int bcm2835_i2c_remove(struct platform_device *pdev) - - free_irq(i2c_dev->irq, i2c_dev); - i2c_del_adapter(&i2c_dev->adapter); -- -- return 0; - } - - static const struct of_device_id bcm2835_i2c_of_match[] = { -@@ -525,7 +523,7 @@ MODULE_DEVICE_TABLE(of, bcm2835_i2c_of_match); - - static struct platform_driver bcm2835_i2c_driver = { - .probe = bcm2835_i2c_probe, -- .remove = bcm2835_i2c_remove, -+ .remove_new = bcm2835_i2c_remove, - .driver = { - .name = "i2c-bcm2835", - .of_match_table = bcm2835_i2c_of_match, -diff --git a/drivers/i2c/busses/i2c-brcmstb.c b/drivers/i2c/busses/i2c-brcmstb.c -index ef942714642a7..cf92cbcb8c86b 100644 ---- a/drivers/i2c/busses/i2c-brcmstb.c -+++ b/drivers/i2c/busses/i2c-brcmstb.c -@@ -690,12 +690,11 @@ static int brcmstb_i2c_probe(struct platform_device *pdev) - return rc; - } - --static int brcmstb_i2c_remove(struct platform_device *pdev) -+static void brcmstb_i2c_remove(struct platform_device *pdev) - { - struct brcmstb_i2c_dev *dev = platform_get_drvdata(pdev); - - i2c_del_adapter(&dev->adapter); -- return 0; - } - - #ifdef CONFIG_PM_SLEEP -@@ -736,7 +735,7 @@ static struct platform_driver brcmstb_i2c_driver = { - .pm = &brcmstb_i2c_pm, - }, - .probe = brcmstb_i2c_probe, -- .remove = brcmstb_i2c_remove, -+ .remove_new = brcmstb_i2c_remove, - }; - module_platform_driver(brcmstb_i2c_driver); - -diff --git a/drivers/i2c/busses/i2c-cadence.c b/drivers/i2c/busses/i2c-cadence.c -index 3a4edf7e75f9f..9849f45025700 100644 ---- a/drivers/i2c/busses/i2c-cadence.c -+++ b/drivers/i2c/busses/i2c-cadence.c -@@ -1415,7 +1415,7 @@ static int cdns_i2c_probe(struct platform_device *pdev) - * - * Return: 0 always - */ --static int cdns_i2c_remove(struct platform_device *pdev) -+static void cdns_i2c_remove(struct platform_device *pdev) - { - struct cdns_i2c *id = platform_get_drvdata(pdev); - -@@ -1427,8 +1427,6 @@ static int cdns_i2c_remove(struct platform_device *pdev) - clk_notifier_unregister(id->clk, &id->clk_rate_change_nb); - reset_control_assert(id->reset); - clk_disable_unprepare(id->clk); -- -- return 0; - } - - static struct platform_driver cdns_i2c_drv = { -@@ -1438,7 +1436,7 @@ static struct platform_driver cdns_i2c_drv = { - .pm = &cdns_i2c_dev_pm_ops, - }, - .probe = cdns_i2c_probe, -- .remove = cdns_i2c_remove, -+ .remove_new = cdns_i2c_remove, - }; - - module_platform_driver(cdns_i2c_drv); -diff --git a/drivers/i2c/busses/i2c-cbus-gpio.c b/drivers/i2c/busses/i2c-cbus-gpio.c -index d97c61eec95c1..fdc1758a32756 100644 ---- a/drivers/i2c/busses/i2c-cbus-gpio.c -+++ b/drivers/i2c/busses/i2c-cbus-gpio.c -@@ -200,13 +200,11 @@ static const struct i2c_algorithm cbus_i2c_algo = { - .functionality = cbus_i2c_func, - }; - --static int cbus_i2c_remove(struct platform_device *pdev) -+static void cbus_i2c_remove(struct platform_device *pdev) - { - struct i2c_adapter *adapter = platform_get_drvdata(pdev); - - i2c_del_adapter(adapter); -- -- return 0; - } - - static int cbus_i2c_probe(struct platform_device *pdev) -@@ -266,7 +264,7 @@ MODULE_DEVICE_TABLE(of, i2c_cbus_dt_ids); - - static struct platform_driver cbus_i2c_driver = { - .probe = cbus_i2c_probe, -- .remove = cbus_i2c_remove, -+ .remove_new = cbus_i2c_remove, - .driver = { - .name = "i2c-cbus-gpio", - .of_match_table = of_match_ptr(i2c_cbus_dt_ids), -diff --git a/drivers/i2c/busses/i2c-cht-wc.c b/drivers/i2c/busses/i2c-cht-wc.c -index 2b2c3d090089e..0209933b9a847 100644 ---- a/drivers/i2c/busses/i2c-cht-wc.c -+++ b/drivers/i2c/busses/i2c-cht-wc.c -@@ -529,15 +529,13 @@ static int cht_wc_i2c_adap_i2c_probe(struct platform_device *pdev) - return ret; - } - --static int cht_wc_i2c_adap_i2c_remove(struct platform_device *pdev) -+static void cht_wc_i2c_adap_i2c_remove(struct platform_device *pdev) - { - struct cht_wc_i2c_adap *adap = platform_get_drvdata(pdev); - - i2c_unregister_device(adap->client); - i2c_del_adapter(&adap->adapter); - irq_domain_remove(adap->irq_domain); -- -- return 0; - } - - static const struct platform_device_id cht_wc_i2c_adap_id_table[] = { -@@ -548,7 +546,7 @@ MODULE_DEVICE_TABLE(platform, cht_wc_i2c_adap_id_table); - - static struct platform_driver cht_wc_i2c_adap_driver = { - .probe = cht_wc_i2c_adap_i2c_probe, -- .remove = cht_wc_i2c_adap_i2c_remove, -+ .remove_new = cht_wc_i2c_adap_i2c_remove, - .driver = { - .name = "cht_wcove_ext_chgr", - }, -diff --git a/drivers/i2c/busses/i2c-cpm.c b/drivers/i2c/busses/i2c-cpm.c -index 24d584a1c9a78..732daf6a932b3 100644 ---- a/drivers/i2c/busses/i2c-cpm.c -+++ b/drivers/i2c/busses/i2c-cpm.c -@@ -676,7 +676,7 @@ static int cpm_i2c_probe(struct platform_device *ofdev) - return result; - } - --static int cpm_i2c_remove(struct platform_device *ofdev) -+static void cpm_i2c_remove(struct platform_device *ofdev) - { - struct cpm_i2c *cpm = platform_get_drvdata(ofdev); - -@@ -685,8 +685,6 @@ static int cpm_i2c_remove(struct platform_device *ofdev) - cpm_i2c_shutdown(cpm); - - kfree(cpm); -- -- return 0; - } - - static const struct of_device_id cpm_i2c_match[] = { -@@ -703,7 +701,7 @@ MODULE_DEVICE_TABLE(of, cpm_i2c_match); - - static struct platform_driver cpm_i2c_driver = { - .probe = cpm_i2c_probe, -- .remove = cpm_i2c_remove, -+ .remove_new = cpm_i2c_remove, - .driver = { - .name = "fsl-i2c-cpm", - .of_match_table = cpm_i2c_match, -diff --git a/drivers/i2c/busses/i2c-cros-ec-tunnel.c b/drivers/i2c/busses/i2c-cros-ec-tunnel.c -index 8b3ff5bb14d8d..2737fd8abd324 100644 ---- a/drivers/i2c/busses/i2c-cros-ec-tunnel.c -+++ b/drivers/i2c/busses/i2c-cros-ec-tunnel.c -@@ -283,13 +283,11 @@ static int ec_i2c_probe(struct platform_device *pdev) - return err; - } - --static int ec_i2c_remove(struct platform_device *dev) -+static void ec_i2c_remove(struct platform_device *dev) - { - struct ec_i2c_device *bus = platform_get_drvdata(dev); - - i2c_del_adapter(&bus->adap); -- -- return 0; - } - - static const struct of_device_id cros_ec_i2c_of_match[] __maybe_unused = { -@@ -306,7 +304,7 @@ MODULE_DEVICE_TABLE(acpi, cros_ec_i2c_tunnel_acpi_id); - - static struct platform_driver ec_i2c_tunnel_driver = { - .probe = ec_i2c_probe, -- .remove = ec_i2c_remove, -+ .remove_new = ec_i2c_remove, - .driver = { - .name = "cros-ec-i2c-tunnel", - .acpi_match_table = ACPI_PTR(cros_ec_i2c_tunnel_acpi_id), -diff --git a/drivers/i2c/busses/i2c-davinci.c b/drivers/i2c/busses/i2c-davinci.c -index 9750310f2c961..b77f9288c0de6 100644 ---- a/drivers/i2c/busses/i2c-davinci.c -+++ b/drivers/i2c/busses/i2c-davinci.c -@@ -885,7 +885,7 @@ static int davinci_i2c_probe(struct platform_device *pdev) - return r; - } - --static int davinci_i2c_remove(struct platform_device *pdev) -+static void davinci_i2c_remove(struct platform_device *pdev) - { - struct davinci_i2c_dev *dev = platform_get_drvdata(pdev); - int ret; -@@ -894,17 +894,15 @@ static int davinci_i2c_remove(struct platform_device *pdev) - - i2c_del_adapter(&dev->adapter); - -- ret = pm_runtime_resume_and_get(&pdev->dev); -+ ret = pm_runtime_get_sync(&pdev->dev); - if (ret < 0) -- return ret; -- -- davinci_i2c_write_reg(dev, DAVINCI_I2C_MDR_REG, 0); -+ dev_err(&pdev->dev, "Failed to resume device\n"); -+ else -+ davinci_i2c_write_reg(dev, DAVINCI_I2C_MDR_REG, 0); - - pm_runtime_dont_use_autosuspend(dev->dev); - pm_runtime_put_sync(dev->dev); - pm_runtime_disable(dev->dev); -- -- return 0; - } - - #ifdef CONFIG_PM -@@ -945,7 +943,7 @@ MODULE_ALIAS("platform:i2c_davinci"); - - static struct platform_driver davinci_i2c_driver = { - .probe = davinci_i2c_probe, -- .remove = davinci_i2c_remove, -+ .remove_new = davinci_i2c_remove, - .driver = { - .name = "i2c_davinci", - .pm = davinci_i2c_pm_ops, -diff --git a/drivers/i2c/busses/i2c-designware-platdrv.c b/drivers/i2c/busses/i2c-designware-platdrv.c -index 89ad88c547544..b404dcd6a6469 100644 ---- a/drivers/i2c/busses/i2c-designware-platdrv.c -+++ b/drivers/i2c/busses/i2c-designware-platdrv.c -@@ -384,7 +384,7 @@ static int dw_i2c_plat_probe(struct platform_device *pdev) - return ret; - } - --static int dw_i2c_plat_remove(struct platform_device *pdev) -+static void dw_i2c_plat_remove(struct platform_device *pdev) - { - struct dw_i2c_dev *dev = platform_get_drvdata(pdev); - -@@ -401,8 +401,6 @@ static int dw_i2c_plat_remove(struct platform_device *pdev) - i2c_dw_remove_lock_support(dev); - - reset_control_assert(dev->rst); -- -- return 0; - } - - #ifdef CONFIG_PM_SLEEP -@@ -481,7 +479,7 @@ MODULE_ALIAS("platform:i2c_designware"); - - static struct platform_driver dw_i2c_driver = { - .probe = dw_i2c_plat_probe, -- .remove = dw_i2c_plat_remove, -+ .remove_new = dw_i2c_plat_remove, - .driver = { - .name = "i2c_designware", - .of_match_table = of_match_ptr(dw_i2c_of_match), -diff --git a/drivers/i2c/busses/i2c-digicolor.c b/drivers/i2c/busses/i2c-digicolor.c -index 50925d97fa429..3462f2bc0fa87 100644 ---- a/drivers/i2c/busses/i2c-digicolor.c -+++ b/drivers/i2c/busses/i2c-digicolor.c -@@ -347,14 +347,12 @@ static int dc_i2c_probe(struct platform_device *pdev) - return 0; - } - --static int dc_i2c_remove(struct platform_device *pdev) -+static void dc_i2c_remove(struct platform_device *pdev) - { - struct dc_i2c *i2c = platform_get_drvdata(pdev); - - i2c_del_adapter(&i2c->adap); - clk_disable_unprepare(i2c->clk); -- -- return 0; - } - - static const struct of_device_id dc_i2c_match[] = { -@@ -365,7 +363,7 @@ MODULE_DEVICE_TABLE(of, dc_i2c_match); - - static struct platform_driver dc_i2c_driver = { - .probe = dc_i2c_probe, -- .remove = dc_i2c_remove, -+ .remove_new = dc_i2c_remove, - .driver = { - .name = "digicolor-i2c", - .of_match_table = dc_i2c_match, -diff --git a/drivers/i2c/busses/i2c-dln2.c b/drivers/i2c/busses/i2c-dln2.c -index 2a2089db71a5e..4f02cc2fb5675 100644 ---- a/drivers/i2c/busses/i2c-dln2.c -+++ b/drivers/i2c/busses/i2c-dln2.c -@@ -236,20 +236,18 @@ static int dln2_i2c_probe(struct platform_device *pdev) - return ret; - } - --static int dln2_i2c_remove(struct platform_device *pdev) -+static void dln2_i2c_remove(struct platform_device *pdev) - { - struct dln2_i2c *dln2 = platform_get_drvdata(pdev); - - i2c_del_adapter(&dln2->adapter); - dln2_i2c_enable(dln2, false); -- -- return 0; - } - - static struct platform_driver dln2_i2c_driver = { - .driver.name = "dln2-i2c", - .probe = dln2_i2c_probe, -- .remove = dln2_i2c_remove, -+ .remove_new = dln2_i2c_remove, - }; - - module_platform_driver(dln2_i2c_driver); -diff --git a/drivers/i2c/busses/i2c-emev2.c b/drivers/i2c/busses/i2c-emev2.c -index f2e537b137b20..4ba93cd91c0f0 100644 ---- a/drivers/i2c/busses/i2c-emev2.c -+++ b/drivers/i2c/busses/i2c-emev2.c -@@ -419,14 +419,12 @@ static int em_i2c_probe(struct platform_device *pdev) - return ret; - } - --static int em_i2c_remove(struct platform_device *dev) -+static void em_i2c_remove(struct platform_device *dev) - { - struct em_i2c_device *priv = platform_get_drvdata(dev); - - i2c_del_adapter(&priv->adap); - clk_disable_unprepare(priv->sclk); -- -- return 0; - } - - static const struct of_device_id em_i2c_ids[] = { -@@ -436,7 +434,7 @@ static const struct of_device_id em_i2c_ids[] = { - - static struct platform_driver em_i2c_driver = { - .probe = em_i2c_probe, -- .remove = em_i2c_remove, -+ .remove_new = em_i2c_remove, - .driver = { - .name = "em-i2c", - .of_match_table = em_i2c_ids, -diff --git a/drivers/i2c/busses/i2c-exynos5.c b/drivers/i2c/busses/i2c-exynos5.c -index 4a6260d04db28..f378cd479e558 100644 ---- a/drivers/i2c/busses/i2c-exynos5.c -+++ b/drivers/i2c/busses/i2c-exynos5.c -@@ -882,7 +882,7 @@ static int exynos5_i2c_probe(struct platform_device *pdev) - return ret; - } - --static int exynos5_i2c_remove(struct platform_device *pdev) -+static void exynos5_i2c_remove(struct platform_device *pdev) - { - struct exynos5_i2c *i2c = platform_get_drvdata(pdev); - -@@ -890,8 +890,6 @@ static int exynos5_i2c_remove(struct platform_device *pdev) - - clk_unprepare(i2c->clk); - clk_unprepare(i2c->pclk); -- -- return 0; - } - - #ifdef CONFIG_PM_SLEEP -@@ -945,7 +943,7 @@ static const struct dev_pm_ops exynos5_i2c_dev_pm_ops = { - - static struct platform_driver exynos5_i2c_driver = { - .probe = exynos5_i2c_probe, -- .remove = exynos5_i2c_remove, -+ .remove_new = exynos5_i2c_remove, - .driver = { - .name = "exynos5-hsi2c", - .pm = &exynos5_i2c_dev_pm_ops, -diff --git a/drivers/i2c/busses/i2c-gpio.c b/drivers/i2c/busses/i2c-gpio.c -index 1794c0399f22d..e5a5b9e8bf2c7 100644 ---- a/drivers/i2c/busses/i2c-gpio.c -+++ b/drivers/i2c/busses/i2c-gpio.c -@@ -475,7 +475,7 @@ static int i2c_gpio_probe(struct platform_device *pdev) - return 0; - } - --static int i2c_gpio_remove(struct platform_device *pdev) -+static void i2c_gpio_remove(struct platform_device *pdev) - { - struct i2c_gpio_private_data *priv; - struct i2c_adapter *adap; -@@ -486,8 +486,6 @@ static int i2c_gpio_remove(struct platform_device *pdev) - adap = &priv->adap; - - i2c_del_adapter(adap); -- -- return 0; - } - - static const struct of_device_id i2c_gpio_dt_ids[] = { -@@ -510,7 +508,7 @@ static struct platform_driver i2c_gpio_driver = { - .acpi_match_table = i2c_gpio_acpi_match, - }, - .probe = i2c_gpio_probe, -- .remove = i2c_gpio_remove, -+ .remove_new = i2c_gpio_remove, - }; - - static int __init i2c_gpio_init(void) -diff --git a/drivers/i2c/busses/i2c-gxp.c b/drivers/i2c/busses/i2c-gxp.c -index 8ea3fb5e4c7f7..70b0de07ed99a 100644 ---- a/drivers/i2c/busses/i2c-gxp.c -+++ b/drivers/i2c/busses/i2c-gxp.c -@@ -577,15 +577,13 @@ static int gxp_i2c_probe(struct platform_device *pdev) - return 0; - } - --static int gxp_i2c_remove(struct platform_device *pdev) -+static void gxp_i2c_remove(struct platform_device *pdev) - { - struct gxp_i2c_drvdata *drvdata = platform_get_drvdata(pdev); - - /* Disable interrupt */ - regmap_update_bits(i2cg_map, GXP_I2CINTEN, BIT(drvdata->engine), 0); - i2c_del_adapter(&drvdata->adapter); -- -- return 0; - } - - static const struct of_device_id gxp_i2c_of_match[] = { -@@ -596,7 +594,7 @@ MODULE_DEVICE_TABLE(of, gxp_i2c_of_match); - - static struct platform_driver gxp_i2c_driver = { - .probe = gxp_i2c_probe, -- .remove = gxp_i2c_remove, -+ .remove_new = gxp_i2c_remove, - .driver = { - .name = "gxp-i2c", - .of_match_table = gxp_i2c_of_match, -diff --git a/drivers/i2c/busses/i2c-highlander.c b/drivers/i2c/busses/i2c-highlander.c -index 4374a86772717..7922bc917c33a 100644 ---- a/drivers/i2c/busses/i2c-highlander.c -+++ b/drivers/i2c/busses/i2c-highlander.c -@@ -435,7 +435,7 @@ static int highlander_i2c_probe(struct platform_device *pdev) - return ret; - } - --static int highlander_i2c_remove(struct platform_device *pdev) -+static void highlander_i2c_remove(struct platform_device *pdev) - { - struct highlander_i2c_dev *dev = platform_get_drvdata(pdev); - -@@ -446,8 +446,6 @@ static int highlander_i2c_remove(struct platform_device *pdev) - - iounmap(dev->base); - kfree(dev); -- -- return 0; - } - - static struct platform_driver highlander_i2c_driver = { -@@ -456,7 +454,7 @@ static struct platform_driver highlander_i2c_driver = { - }, - - .probe = highlander_i2c_probe, -- .remove = highlander_i2c_remove, -+ .remove_new = highlander_i2c_remove, - }; - - module_platform_driver(highlander_i2c_driver); -diff --git a/drivers/i2c/busses/i2c-hix5hd2.c b/drivers/i2c/busses/i2c-hix5hd2.c -index 0e34cbaca22dc..64feaa9dca619 100644 ---- a/drivers/i2c/busses/i2c-hix5hd2.c -+++ b/drivers/i2c/busses/i2c-hix5hd2.c -@@ -464,7 +464,7 @@ static int hix5hd2_i2c_probe(struct platform_device *pdev) - return ret; - } - --static int hix5hd2_i2c_remove(struct platform_device *pdev) -+static void hix5hd2_i2c_remove(struct platform_device *pdev) - { - struct hix5hd2_i2c_priv *priv = platform_get_drvdata(pdev); - -@@ -472,8 +472,6 @@ static int hix5hd2_i2c_remove(struct platform_device *pdev) - pm_runtime_disable(priv->dev); - pm_runtime_set_suspended(priv->dev); - clk_disable_unprepare(priv->clk); -- -- return 0; - } - - #ifdef CONFIG_PM -@@ -511,7 +509,7 @@ MODULE_DEVICE_TABLE(of, hix5hd2_i2c_match); - - static struct platform_driver hix5hd2_i2c_driver = { - .probe = hix5hd2_i2c_probe, -- .remove = hix5hd2_i2c_remove, -+ .remove_new = hix5hd2_i2c_remove, - .driver = { - .name = "hix5hd2-i2c", - .pm = &hix5hd2_i2c_pm_ops, -diff --git a/drivers/i2c/busses/i2c-ibm_iic.c b/drivers/i2c/busses/i2c-ibm_iic.c -index eeb80e34f9ad7..2d11577ded38a 100644 ---- a/drivers/i2c/busses/i2c-ibm_iic.c -+++ b/drivers/i2c/busses/i2c-ibm_iic.c -@@ -769,7 +769,7 @@ static int iic_probe(struct platform_device *ofdev) - /* - * Cleanup initialized IIC interface - */ --static int iic_remove(struct platform_device *ofdev) -+static void iic_remove(struct platform_device *ofdev) - { - struct ibm_iic_private *dev = platform_get_drvdata(ofdev); - -@@ -782,8 +782,6 @@ static int iic_remove(struct platform_device *ofdev) - - iounmap(dev->vaddr); - kfree(dev); -- -- return 0; - } - - static const struct of_device_id ibm_iic_match[] = { -@@ -798,7 +796,7 @@ static struct platform_driver ibm_iic_driver = { - .of_match_table = ibm_iic_match, - }, - .probe = iic_probe, -- .remove = iic_remove, -+ .remove_new = iic_remove, - }; - - module_platform_driver(ibm_iic_driver); -diff --git a/drivers/i2c/busses/i2c-img-scb.c b/drivers/i2c/busses/i2c-img-scb.c -index 39c479f96eb58..8e6320bc791a7 100644 ---- a/drivers/i2c/busses/i2c-img-scb.c -+++ b/drivers/i2c/busses/i2c-img-scb.c -@@ -1413,7 +1413,7 @@ static int img_i2c_probe(struct platform_device *pdev) - return ret; - } - --static int img_i2c_remove(struct platform_device *dev) -+static void img_i2c_remove(struct platform_device *dev) - { - struct img_i2c *i2c = platform_get_drvdata(dev); - -@@ -1421,8 +1421,6 @@ static int img_i2c_remove(struct platform_device *dev) - pm_runtime_disable(&dev->dev); - if (!pm_runtime_status_suspended(&dev->dev)) - img_i2c_runtime_suspend(&dev->dev); -- -- return 0; - } - - static int img_i2c_runtime_suspend(struct device *dev) -@@ -1506,7 +1504,7 @@ static struct platform_driver img_scb_i2c_driver = { - .pm = &img_i2c_pm, - }, - .probe = img_i2c_probe, -- .remove = img_i2c_remove, -+ .remove_new = img_i2c_remove, - }; - module_platform_driver(img_scb_i2c_driver); - -diff --git a/drivers/i2c/busses/i2c-imx-lpi2c.c b/drivers/i2c/busses/i2c-imx-lpi2c.c -index 4d24ceb57ee74..f1ec7c1596b34 100644 ---- a/drivers/i2c/busses/i2c-imx-lpi2c.c -+++ b/drivers/i2c/busses/i2c-imx-lpi2c.c -@@ -623,7 +623,7 @@ static int lpi2c_imx_probe(struct platform_device *pdev) - return ret; - } - --static int lpi2c_imx_remove(struct platform_device *pdev) -+static void lpi2c_imx_remove(struct platform_device *pdev) - { - struct lpi2c_imx_struct *lpi2c_imx = platform_get_drvdata(pdev); - -@@ -631,8 +631,6 @@ static int lpi2c_imx_remove(struct platform_device *pdev) - - pm_runtime_disable(&pdev->dev); - pm_runtime_dont_use_autosuspend(&pdev->dev); -- -- return 0; - } - - static int __maybe_unused lpi2c_runtime_suspend(struct device *dev) -@@ -669,7 +667,7 @@ static const struct dev_pm_ops lpi2c_pm_ops = { - - static struct platform_driver lpi2c_imx_driver = { - .probe = lpi2c_imx_probe, -- .remove = lpi2c_imx_remove, -+ .remove_new = lpi2c_imx_remove, - .driver = { - .name = DRIVER_NAME, - .of_match_table = lpi2c_imx_of_match, -diff --git a/drivers/i2c/busses/i2c-imx.c b/drivers/i2c/busses/i2c-imx.c -index 42189a5f29051..65128a73e8a32 100644 ---- a/drivers/i2c/busses/i2c-imx.c -+++ b/drivers/i2c/busses/i2c-imx.c -@@ -1561,7 +1561,7 @@ static int i2c_imx_probe(struct platform_device *pdev) - return ret; - } - --static int i2c_imx_remove(struct platform_device *pdev) -+static void i2c_imx_remove(struct platform_device *pdev) - { - struct imx_i2c_struct *i2c_imx = platform_get_drvdata(pdev); - int irq, ret; -@@ -1592,8 +1592,6 @@ static int i2c_imx_remove(struct platform_device *pdev) - - pm_runtime_put_noidle(&pdev->dev); - pm_runtime_disable(&pdev->dev); -- -- return 0; - } - - static int __maybe_unused i2c_imx_runtime_suspend(struct device *dev) -@@ -1624,7 +1622,7 @@ static const struct dev_pm_ops i2c_imx_pm_ops = { - - static struct platform_driver i2c_imx_driver = { - .probe = i2c_imx_probe, -- .remove = i2c_imx_remove, -+ .remove_new = i2c_imx_remove, - .driver = { - .name = DRIVER_NAME, - .pm = &i2c_imx_pm_ops, -diff --git a/drivers/i2c/busses/i2c-iop3xx.c b/drivers/i2c/busses/i2c-iop3xx.c -index 4a6ff54d87fe8..f2f7ebeeaecb0 100644 ---- a/drivers/i2c/busses/i2c-iop3xx.c -+++ b/drivers/i2c/busses/i2c-iop3xx.c -@@ -388,7 +388,7 @@ static const struct i2c_algorithm iop3xx_i2c_algo = { - .functionality = iop3xx_i2c_func, - }; - --static int -+static void - iop3xx_i2c_remove(struct platform_device *pdev) - { - struct i2c_adapter *padapter = platform_get_drvdata(pdev); -@@ -408,8 +408,6 @@ iop3xx_i2c_remove(struct platform_device *pdev) - release_mem_region(res->start, IOP3XX_I2C_IO_SIZE); - kfree(adapter_data); - kfree(padapter); -- -- return 0; - } - - static int -@@ -529,7 +527,7 @@ MODULE_DEVICE_TABLE(of, i2c_iop3xx_match); - - static struct platform_driver iop3xx_i2c_driver = { - .probe = iop3xx_i2c_probe, -- .remove = iop3xx_i2c_remove, -+ .remove_new = iop3xx_i2c_remove, - .driver = { - .name = "IOP3xx-I2C", - .of_match_table = i2c_iop3xx_match, -diff --git a/drivers/i2c/busses/i2c-isch.c b/drivers/i2c/busses/i2c-isch.c -index 2dc7ada06ac50..1dc1ceaa44439 100644 ---- a/drivers/i2c/busses/i2c-isch.c -+++ b/drivers/i2c/busses/i2c-isch.c -@@ -286,14 +286,12 @@ static int smbus_sch_probe(struct platform_device *dev) - return retval; - } - --static int smbus_sch_remove(struct platform_device *pdev) -+static void smbus_sch_remove(struct platform_device *pdev) - { - if (sch_smba) { - i2c_del_adapter(&sch_adapter); - sch_smba = 0; - } -- -- return 0; - } - - static struct platform_driver smbus_sch_driver = { -@@ -301,7 +299,7 @@ static struct platform_driver smbus_sch_driver = { - .name = "isch_smbus", - }, - .probe = smbus_sch_probe, -- .remove = smbus_sch_remove, -+ .remove_new = smbus_sch_remove, - }; - - module_platform_driver(smbus_sch_driver); -diff --git a/drivers/i2c/busses/i2c-jz4780.c b/drivers/i2c/busses/i2c-jz4780.c -index baa7319eee539..0dfe603995214 100644 ---- a/drivers/i2c/busses/i2c-jz4780.c -+++ b/drivers/i2c/busses/i2c-jz4780.c -@@ -845,18 +845,17 @@ static int jz4780_i2c_probe(struct platform_device *pdev) - return ret; - } - --static int jz4780_i2c_remove(struct platform_device *pdev) -+static void jz4780_i2c_remove(struct platform_device *pdev) - { - struct jz4780_i2c *i2c = platform_get_drvdata(pdev); - - clk_disable_unprepare(i2c->clk); - i2c_del_adapter(&i2c->adap); -- return 0; - } - - static struct platform_driver jz4780_i2c_driver = { - .probe = jz4780_i2c_probe, -- .remove = jz4780_i2c_remove, -+ .remove_new = jz4780_i2c_remove, - .driver = { - .name = "jz4780-i2c", - .of_match_table = jz4780_i2c_of_matches, -diff --git a/drivers/i2c/busses/i2c-kempld.c b/drivers/i2c/busses/i2c-kempld.c -index cf857cf225070..281058e3ea463 100644 ---- a/drivers/i2c/busses/i2c-kempld.c -+++ b/drivers/i2c/busses/i2c-kempld.c -@@ -329,7 +329,7 @@ static int kempld_i2c_probe(struct platform_device *pdev) - return 0; - } - --static int kempld_i2c_remove(struct platform_device *pdev) -+static void kempld_i2c_remove(struct platform_device *pdev) - { - struct kempld_i2c_data *i2c = platform_get_drvdata(pdev); - struct kempld_device_data *pld = i2c->pld; -@@ -348,8 +348,6 @@ static int kempld_i2c_remove(struct platform_device *pdev) - kempld_release_mutex(pld); - - i2c_del_adapter(&i2c->adap); -- -- return 0; - } - - #ifdef CONFIG_PM -@@ -389,7 +387,7 @@ static struct platform_driver kempld_i2c_driver = { - .name = "kempld-i2c", - }, - .probe = kempld_i2c_probe, -- .remove = kempld_i2c_remove, -+ .remove_new = kempld_i2c_remove, - .suspend = kempld_i2c_suspend, - .resume = kempld_i2c_resume, - }; -diff --git a/drivers/i2c/busses/i2c-lpc2k.c b/drivers/i2c/busses/i2c-lpc2k.c -index 8fff6fbb7065c..469fe907723e8 100644 ---- a/drivers/i2c/busses/i2c-lpc2k.c -+++ b/drivers/i2c/busses/i2c-lpc2k.c -@@ -435,14 +435,12 @@ static int i2c_lpc2k_probe(struct platform_device *pdev) - return ret; - } - --static int i2c_lpc2k_remove(struct platform_device *dev) -+static void i2c_lpc2k_remove(struct platform_device *dev) - { - struct lpc2k_i2c *i2c = platform_get_drvdata(dev); - - i2c_del_adapter(&i2c->adap); - clk_disable_unprepare(i2c->clk); -- -- return 0; - } - - #ifdef CONFIG_PM -@@ -483,7 +481,7 @@ MODULE_DEVICE_TABLE(of, lpc2k_i2c_match); - - static struct platform_driver i2c_lpc2k_driver = { - .probe = i2c_lpc2k_probe, -- .remove = i2c_lpc2k_remove, -+ .remove_new = i2c_lpc2k_remove, - .driver = { - .name = "lpc2k-i2c", - .pm = I2C_LPC2K_DEV_PM_OPS, -diff --git a/drivers/i2c/busses/i2c-meson.c b/drivers/i2c/busses/i2c-meson.c -index 889eff06b78f4..16026c895bb65 100644 ---- a/drivers/i2c/busses/i2c-meson.c -+++ b/drivers/i2c/busses/i2c-meson.c -@@ -535,14 +535,12 @@ static int meson_i2c_probe(struct platform_device *pdev) - return 0; - } - --static int meson_i2c_remove(struct platform_device *pdev) -+static void meson_i2c_remove(struct platform_device *pdev) - { - struct meson_i2c *i2c = platform_get_drvdata(pdev); - - i2c_del_adapter(&i2c->adap); - clk_disable_unprepare(i2c->clk); -- -- return 0; - } - - static const struct meson_i2c_data i2c_meson6_data = { -@@ -568,7 +566,7 @@ MODULE_DEVICE_TABLE(of, meson_i2c_match); - - static struct platform_driver meson_i2c_driver = { - .probe = meson_i2c_probe, -- .remove = meson_i2c_remove, -+ .remove_new = meson_i2c_remove, - .driver = { - .name = "meson-i2c", - .of_match_table = meson_i2c_match, -diff --git a/drivers/i2c/busses/i2c-microchip-corei2c.c b/drivers/i2c/busses/i2c-microchip-corei2c.c -index 4d7e9b25f018b..7f58f7eaabb63 100644 ---- a/drivers/i2c/busses/i2c-microchip-corei2c.c -+++ b/drivers/i2c/busses/i2c-microchip-corei2c.c -@@ -446,14 +446,12 @@ static int mchp_corei2c_probe(struct platform_device *pdev) - return 0; - } - --static int mchp_corei2c_remove(struct platform_device *pdev) -+static void mchp_corei2c_remove(struct platform_device *pdev) - { - struct mchp_corei2c_dev *idev = platform_get_drvdata(pdev); - - clk_disable_unprepare(idev->i2c_clk); - i2c_del_adapter(&idev->adapter); -- -- return 0; - } - - static const struct of_device_id mchp_corei2c_of_match[] = { -@@ -465,7 +463,7 @@ MODULE_DEVICE_TABLE(of, mchp_corei2c_of_match); - - static struct platform_driver mchp_corei2c_driver = { - .probe = mchp_corei2c_probe, -- .remove = mchp_corei2c_remove, -+ .remove_new = mchp_corei2c_remove, - .driver = { - .name = "microchip-corei2c", - .of_match_table = mchp_corei2c_of_match, -diff --git a/drivers/i2c/busses/i2c-mlxbf.c b/drivers/i2c/busses/i2c-mlxbf.c -index 1810d5791b3d7..ae66bdd1b7379 100644 ---- a/drivers/i2c/busses/i2c-mlxbf.c -+++ b/drivers/i2c/busses/i2c-mlxbf.c -@@ -2433,7 +2433,7 @@ static int mlxbf_i2c_probe(struct platform_device *pdev) - return 0; - } - --static int mlxbf_i2c_remove(struct platform_device *pdev) -+static void mlxbf_i2c_remove(struct platform_device *pdev) - { - struct mlxbf_i2c_priv *priv = platform_get_drvdata(pdev); - struct device *dev = &pdev->dev; -@@ -2474,13 +2474,11 @@ static int mlxbf_i2c_remove(struct platform_device *pdev) - devm_free_irq(dev, priv->irq, priv); - - i2c_del_adapter(&priv->adap); -- -- return 0; - } - - static struct platform_driver mlxbf_i2c_driver = { - .probe = mlxbf_i2c_probe, -- .remove = mlxbf_i2c_remove, -+ .remove_new = mlxbf_i2c_remove, - .driver = { - .name = "i2c-mlxbf", - .acpi_match_table = ACPI_PTR(mlxbf_i2c_acpi_ids), -diff --git a/drivers/i2c/busses/i2c-mlxcpld.c b/drivers/i2c/busses/i2c-mlxcpld.c -index 081f51ef0551b..c42fd4b329e4b 100644 ---- a/drivers/i2c/busses/i2c-mlxcpld.c -+++ b/drivers/i2c/busses/i2c-mlxcpld.c -@@ -571,19 +571,17 @@ static int mlxcpld_i2c_probe(struct platform_device *pdev) - return err; - } - --static int mlxcpld_i2c_remove(struct platform_device *pdev) -+static void mlxcpld_i2c_remove(struct platform_device *pdev) - { - struct mlxcpld_i2c_priv *priv = platform_get_drvdata(pdev); - - i2c_del_adapter(&priv->adap); - mutex_destroy(&priv->lock); -- -- return 0; - } - - static struct platform_driver mlxcpld_i2c_driver = { - .probe = mlxcpld_i2c_probe, -- .remove = mlxcpld_i2c_remove, -+ .remove_new = mlxcpld_i2c_remove, - .driver = { - .name = MLXCPLD_I2C_DEVICE_NAME, - }, -diff --git a/drivers/i2c/busses/i2c-mpc.c b/drivers/i2c/busses/i2c-mpc.c -index cfd074ee6d547..a308afb3cca51 100644 ---- a/drivers/i2c/busses/i2c-mpc.c -+++ b/drivers/i2c/busses/i2c-mpc.c -@@ -890,15 +890,13 @@ static int fsl_i2c_probe(struct platform_device *op) - return result; - }; - --static int fsl_i2c_remove(struct platform_device *op) -+static void fsl_i2c_remove(struct platform_device *op) - { - struct mpc_i2c *i2c = platform_get_drvdata(op); - - i2c_del_adapter(&i2c->adap); - - clk_disable_unprepare(i2c->clk_per); -- -- return 0; - }; - - static int __maybe_unused mpc_i2c_suspend(struct device *dev) -@@ -959,7 +957,7 @@ MODULE_DEVICE_TABLE(of, mpc_i2c_of_match); - /* Structure for a device driver */ - static struct platform_driver mpc_i2c_driver = { - .probe = fsl_i2c_probe, -- .remove = fsl_i2c_remove, -+ .remove_new = fsl_i2c_remove, - .driver = { - .name = DRV_NAME, - .of_match_table = mpc_i2c_of_match, -diff --git a/drivers/i2c/busses/i2c-mt65xx.c b/drivers/i2c/busses/i2c-mt65xx.c -index a43c4d77739ab..7ca3f2221ba69 100644 ---- a/drivers/i2c/busses/i2c-mt65xx.c -+++ b/drivers/i2c/busses/i2c-mt65xx.c -@@ -1505,15 +1505,13 @@ static int mtk_i2c_probe(struct platform_device *pdev) - return ret; - } - --static int mtk_i2c_remove(struct platform_device *pdev) -+static void mtk_i2c_remove(struct platform_device *pdev) - { - struct mtk_i2c *i2c = platform_get_drvdata(pdev); - - i2c_del_adapter(&i2c->adap); - - clk_bulk_unprepare(I2C_MT65XX_CLK_MAX, i2c->clocks); -- -- return 0; - } - - #ifdef CONFIG_PM_SLEEP -@@ -1555,7 +1553,7 @@ static const struct dev_pm_ops mtk_i2c_pm = { - - static struct platform_driver mtk_i2c_driver = { - .probe = mtk_i2c_probe, -- .remove = mtk_i2c_remove, -+ .remove_new = mtk_i2c_remove, - .driver = { - .name = I2C_DRV_NAME, - .pm = &mtk_i2c_pm, -diff --git a/drivers/i2c/busses/i2c-mt7621.c b/drivers/i2c/busses/i2c-mt7621.c -index 20eda5738ac49..f9c294e2bd3c5 100644 ---- a/drivers/i2c/busses/i2c-mt7621.c -+++ b/drivers/i2c/busses/i2c-mt7621.c -@@ -332,19 +332,17 @@ static int mtk_i2c_probe(struct platform_device *pdev) - return ret; - } - --static int mtk_i2c_remove(struct platform_device *pdev) -+static void mtk_i2c_remove(struct platform_device *pdev) - { - struct mtk_i2c *i2c = platform_get_drvdata(pdev); - - clk_disable_unprepare(i2c->clk); - i2c_del_adapter(&i2c->adap); -- -- return 0; - } - - static struct platform_driver mtk_i2c_driver = { - .probe = mtk_i2c_probe, -- .remove = mtk_i2c_remove, -+ .remove_new = mtk_i2c_remove, - .driver = { - .name = "i2c-mt7621", - .of_match_table = i2c_mtk_dt_ids, -diff --git a/drivers/i2c/busses/i2c-mv64xxx.c b/drivers/i2c/busses/i2c-mv64xxx.c -index 878c076ebdc6b..fd8403b07fa61 100644 ---- a/drivers/i2c/busses/i2c-mv64xxx.c -+++ b/drivers/i2c/busses/i2c-mv64xxx.c -@@ -1084,7 +1084,7 @@ mv64xxx_i2c_probe(struct platform_device *pd) - return rc; - } - --static int -+static void - mv64xxx_i2c_remove(struct platform_device *pd) - { - struct mv64xxx_i2c_data *drv_data = platform_get_drvdata(pd); -@@ -1094,8 +1094,6 @@ mv64xxx_i2c_remove(struct platform_device *pd) - pm_runtime_disable(&pd->dev); - if (!pm_runtime_status_suspended(&pd->dev)) - mv64xxx_i2c_runtime_suspend(&pd->dev); -- -- return 0; - } - - static const struct dev_pm_ops mv64xxx_i2c_pm_ops = { -@@ -1107,7 +1105,7 @@ static const struct dev_pm_ops mv64xxx_i2c_pm_ops = { - - static struct platform_driver mv64xxx_i2c_driver = { - .probe = mv64xxx_i2c_probe, -- .remove = mv64xxx_i2c_remove, -+ .remove_new = mv64xxx_i2c_remove, - .driver = { - .name = MV64XXX_I2C_CTLR_NAME, - .pm = &mv64xxx_i2c_pm_ops, -diff --git a/drivers/i2c/busses/i2c-mxs.c b/drivers/i2c/busses/i2c-mxs.c -index e0f3b3545cfe4..1d76f1c4dc06a 100644 ---- a/drivers/i2c/busses/i2c-mxs.c -+++ b/drivers/i2c/busses/i2c-mxs.c -@@ -864,7 +864,7 @@ static int mxs_i2c_probe(struct platform_device *pdev) - return 0; - } - --static int mxs_i2c_remove(struct platform_device *pdev) -+static void mxs_i2c_remove(struct platform_device *pdev) - { - struct mxs_i2c_dev *i2c = platform_get_drvdata(pdev); - -@@ -874,8 +874,6 @@ static int mxs_i2c_remove(struct platform_device *pdev) - dma_release_channel(i2c->dmach); - - writel(MXS_I2C_CTRL0_SFTRST, i2c->regs + MXS_I2C_CTRL0_SET); -- -- return 0; - } - - static struct platform_driver mxs_i2c_driver = { -@@ -884,7 +882,7 @@ static struct platform_driver mxs_i2c_driver = { - .of_match_table = mxs_i2c_dt_ids, - }, - .probe = mxs_i2c_probe, -- .remove = mxs_i2c_remove, -+ .remove_new = mxs_i2c_remove, - }; - - static int __init mxs_i2c_init(void) -diff --git a/drivers/i2c/busses/i2c-npcm7xx.c b/drivers/i2c/busses/i2c-npcm7xx.c -index 38d5864d0cb5b..53b65ffb6a647 100644 ---- a/drivers/i2c/busses/i2c-npcm7xx.c -+++ b/drivers/i2c/busses/i2c-npcm7xx.c -@@ -2361,7 +2361,7 @@ static int npcm_i2c_probe_bus(struct platform_device *pdev) - return 0; - } - --static int npcm_i2c_remove_bus(struct platform_device *pdev) -+static void npcm_i2c_remove_bus(struct platform_device *pdev) - { - unsigned long lock_flags; - struct npcm_i2c *bus = platform_get_drvdata(pdev); -@@ -2371,7 +2371,6 @@ static int npcm_i2c_remove_bus(struct platform_device *pdev) - npcm_i2c_disable(bus); - spin_unlock_irqrestore(&bus->lock, lock_flags); - i2c_del_adapter(&bus->adap); -- return 0; - } - - static const struct of_device_id npcm_i2c_bus_of_table[] = { -@@ -2383,7 +2382,7 @@ MODULE_DEVICE_TABLE(of, npcm_i2c_bus_of_table); - - static struct platform_driver npcm_i2c_bus_driver = { - .probe = npcm_i2c_probe_bus, -- .remove = npcm_i2c_remove_bus, -+ .remove_new = npcm_i2c_remove_bus, - .driver = { - .name = "nuvoton-i2c", - .of_match_table = npcm_i2c_bus_of_table, -diff --git a/drivers/i2c/busses/i2c-ocores.c b/drivers/i2c/busses/i2c-ocores.c -index 2e575856c5cd5..0742b84a11eb5 100644 ---- a/drivers/i2c/busses/i2c-ocores.c -+++ b/drivers/i2c/busses/i2c-ocores.c -@@ -743,7 +743,7 @@ static int ocores_i2c_probe(struct platform_device *pdev) - return ret; - } - --static int ocores_i2c_remove(struct platform_device *pdev) -+static void ocores_i2c_remove(struct platform_device *pdev) - { - struct ocores_i2c *i2c = platform_get_drvdata(pdev); - u8 ctrl = oc_getreg(i2c, OCI2C_CONTROL); -@@ -757,8 +757,6 @@ static int ocores_i2c_remove(struct platform_device *pdev) - - if (!IS_ERR(i2c->clk)) - clk_disable_unprepare(i2c->clk); -- -- return 0; - } - - #ifdef CONFIG_PM_SLEEP -@@ -804,7 +802,7 @@ static SIMPLE_DEV_PM_OPS(ocores_i2c_pm, ocores_i2c_suspend, ocores_i2c_resume); - - static struct platform_driver ocores_i2c_driver = { - .probe = ocores_i2c_probe, -- .remove = ocores_i2c_remove, -+ .remove_new = ocores_i2c_remove, - .driver = { - .name = "ocores-i2c", - .of_match_table = ocores_i2c_match, -diff --git a/drivers/i2c/busses/i2c-octeon-platdrv.c b/drivers/i2c/busses/i2c-octeon-platdrv.c -index 0c227963c8d69..7d54b3203f716 100644 ---- a/drivers/i2c/busses/i2c-octeon-platdrv.c -+++ b/drivers/i2c/busses/i2c-octeon-platdrv.c -@@ -253,12 +253,11 @@ static int octeon_i2c_probe(struct platform_device *pdev) - return result; - }; - --static int octeon_i2c_remove(struct platform_device *pdev) -+static void octeon_i2c_remove(struct platform_device *pdev) - { - struct octeon_i2c *i2c = platform_get_drvdata(pdev); - - i2c_del_adapter(&i2c->adap); -- return 0; - }; - - static const struct of_device_id octeon_i2c_match[] = { -@@ -270,7 +269,7 @@ MODULE_DEVICE_TABLE(of, octeon_i2c_match); - - static struct platform_driver octeon_i2c_driver = { - .probe = octeon_i2c_probe, -- .remove = octeon_i2c_remove, -+ .remove_new = octeon_i2c_remove, - .driver = { - .name = DRV_NAME, - .of_match_table = octeon_i2c_match, -diff --git a/drivers/i2c/busses/i2c-omap.c b/drivers/i2c/busses/i2c-omap.c -index 4199f57a6bf29..58fd6fa3edf14 100644 ---- a/drivers/i2c/busses/i2c-omap.c -+++ b/drivers/i2c/busses/i2c-omap.c -@@ -1519,7 +1519,7 @@ omap_i2c_probe(struct platform_device *pdev) - return r; - } - --static int omap_i2c_remove(struct platform_device *pdev) -+static void omap_i2c_remove(struct platform_device *pdev) - { - struct omap_i2c_dev *omap = platform_get_drvdata(pdev); - int ret; -@@ -1535,8 +1535,6 @@ static int omap_i2c_remove(struct platform_device *pdev) - pm_runtime_dont_use_autosuspend(&pdev->dev); - pm_runtime_put_sync(&pdev->dev); - pm_runtime_disable(&pdev->dev); -- -- return 0; - } - - static int __maybe_unused omap_i2c_runtime_suspend(struct device *dev) -@@ -1588,7 +1586,7 @@ static const struct dev_pm_ops omap_i2c_pm_ops = { - - static struct platform_driver omap_i2c_driver = { - .probe = omap_i2c_probe, -- .remove = omap_i2c_remove, -+ .remove_new = omap_i2c_remove, - .driver = { - .name = "omap_i2c", - .pm = &omap_i2c_pm_ops, -diff --git a/drivers/i2c/busses/i2c-opal.c b/drivers/i2c/busses/i2c-opal.c -index 9f773b4f5ed8e..17ef87d50f7c7 100644 ---- a/drivers/i2c/busses/i2c-opal.c -+++ b/drivers/i2c/busses/i2c-opal.c -@@ -232,13 +232,11 @@ static int i2c_opal_probe(struct platform_device *pdev) - return rc; - } - --static int i2c_opal_remove(struct platform_device *pdev) -+static void i2c_opal_remove(struct platform_device *pdev) - { - struct i2c_adapter *adapter = platform_get_drvdata(pdev); - - i2c_del_adapter(adapter); -- -- return 0; - } - - static const struct of_device_id i2c_opal_of_match[] = { -@@ -251,7 +249,7 @@ MODULE_DEVICE_TABLE(of, i2c_opal_of_match); - - static struct platform_driver i2c_opal_driver = { - .probe = i2c_opal_probe, -- .remove = i2c_opal_remove, -+ .remove_new = i2c_opal_remove, - .driver = { - .name = "i2c-opal", - .of_match_table = i2c_opal_of_match, -diff --git a/drivers/i2c/busses/i2c-pasemi-platform.c b/drivers/i2c/busses/i2c-pasemi-platform.c -index e35945a91dbef..0a44f64897c7a 100644 ---- a/drivers/i2c/busses/i2c-pasemi-platform.c -+++ b/drivers/i2c/busses/i2c-pasemi-platform.c -@@ -98,12 +98,11 @@ static int pasemi_platform_i2c_probe(struct platform_device *pdev) - return error; - } - --static int pasemi_platform_i2c_remove(struct platform_device *pdev) -+static void pasemi_platform_i2c_remove(struct platform_device *pdev) - { - struct pasemi_platform_i2c_data *data = platform_get_drvdata(pdev); - - clk_disable_unprepare(data->clk_ref); -- return 0; - } - - static const struct of_device_id pasemi_platform_i2c_of_match[] = { -@@ -119,7 +118,7 @@ static struct platform_driver pasemi_platform_i2c_driver = { - .of_match_table = pasemi_platform_i2c_of_match, - }, - .probe = pasemi_platform_i2c_probe, -- .remove = pasemi_platform_i2c_remove, -+ .remove_new = pasemi_platform_i2c_remove, - }; - module_platform_driver(pasemi_platform_i2c_driver); - -diff --git a/drivers/i2c/busses/i2c-pca-platform.c b/drivers/i2c/busses/i2c-pca-platform.c -index 86d4f75ef8d3f..d2a9e7b61c1ab 100644 ---- a/drivers/i2c/busses/i2c-pca-platform.c -+++ b/drivers/i2c/busses/i2c-pca-platform.c -@@ -221,13 +221,11 @@ static int i2c_pca_pf_probe(struct platform_device *pdev) - return 0; - } - --static int i2c_pca_pf_remove(struct platform_device *pdev) -+static void i2c_pca_pf_remove(struct platform_device *pdev) - { - struct i2c_pca_pf_data *i2c = platform_get_drvdata(pdev); - - i2c_del_adapter(&i2c->adap); -- -- return 0; - } - - #ifdef CONFIG_OF -@@ -241,7 +239,7 @@ MODULE_DEVICE_TABLE(of, i2c_pca_of_match_table); - - static struct platform_driver i2c_pca_pf_driver = { - .probe = i2c_pca_pf_probe, -- .remove = i2c_pca_pf_remove, -+ .remove_new = i2c_pca_pf_remove, - .driver = { - .name = "i2c-pca-platform", - .of_match_table = of_match_ptr(i2c_pca_of_match_table), -diff --git a/drivers/i2c/busses/i2c-pnx.c b/drivers/i2c/busses/i2c-pnx.c -index 50f21cdbe90d3..82400057f810a 100644 ---- a/drivers/i2c/busses/i2c-pnx.c -+++ b/drivers/i2c/busses/i2c-pnx.c -@@ -743,14 +743,12 @@ static int i2c_pnx_probe(struct platform_device *pdev) - return ret; - } - --static int i2c_pnx_remove(struct platform_device *pdev) -+static void i2c_pnx_remove(struct platform_device *pdev) - { - struct i2c_pnx_algo_data *alg_data = platform_get_drvdata(pdev); - - i2c_del_adapter(&alg_data->adapter); - clk_disable_unprepare(alg_data->clk); -- -- return 0; - } - - #ifdef CONFIG_OF -@@ -768,7 +766,7 @@ static struct platform_driver i2c_pnx_driver = { - .pm = PNX_I2C_PM, - }, - .probe = i2c_pnx_probe, -- .remove = i2c_pnx_remove, -+ .remove_new = i2c_pnx_remove, - }; - - static int __init i2c_adap_pnx_init(void) -diff --git a/drivers/i2c/busses/i2c-powermac.c b/drivers/i2c/busses/i2c-powermac.c -index ec706a3aba26c..4996a628fdae1 100644 ---- a/drivers/i2c/busses/i2c-powermac.c -+++ b/drivers/i2c/busses/i2c-powermac.c -@@ -188,14 +188,12 @@ static const struct i2c_adapter_quirks i2c_powermac_quirks = { - .max_num_msgs = 1, - }; - --static int i2c_powermac_remove(struct platform_device *dev) -+static void i2c_powermac_remove(struct platform_device *dev) - { - struct i2c_adapter *adapter = platform_get_drvdata(dev); - - i2c_del_adapter(adapter); - memset(adapter, 0, sizeof(*adapter)); -- -- return 0; - } - - static u32 i2c_powermac_get_addr(struct i2c_adapter *adap, -@@ -439,7 +437,7 @@ static int i2c_powermac_probe(struct platform_device *dev) - - static struct platform_driver i2c_powermac_driver = { - .probe = i2c_powermac_probe, -- .remove = i2c_powermac_remove, -+ .remove_new = i2c_powermac_remove, - .driver = { - .name = "i2c-powermac", - .bus = &platform_bus_type, -diff --git a/drivers/i2c/busses/i2c-pxa.c b/drivers/i2c/busses/i2c-pxa.c -index f9fa5308556b7..937f7eebe9067 100644 ---- a/drivers/i2c/busses/i2c-pxa.c -+++ b/drivers/i2c/busses/i2c-pxa.c -@@ -1482,15 +1482,13 @@ static int i2c_pxa_probe(struct platform_device *dev) - return ret; - } - --static int i2c_pxa_remove(struct platform_device *dev) -+static void i2c_pxa_remove(struct platform_device *dev) - { - struct pxa_i2c *i2c = platform_get_drvdata(dev); - - i2c_del_adapter(&i2c->adap); - - clk_disable_unprepare(i2c->clk); -- -- return 0; - } - - #ifdef CONFIG_PM -@@ -1525,7 +1523,7 @@ static const struct dev_pm_ops i2c_pxa_dev_pm_ops = { - - static struct platform_driver i2c_pxa_driver = { - .probe = i2c_pxa_probe, -- .remove = i2c_pxa_remove, -+ .remove_new = i2c_pxa_remove, - .driver = { - .name = "pxa2xx-i2c", - .pm = I2C_PXA_DEV_PM_OPS, -diff --git a/drivers/i2c/busses/i2c-qcom-cci.c b/drivers/i2c/busses/i2c-qcom-cci.c -index 01358472680c4..58860014e0681 100644 ---- a/drivers/i2c/busses/i2c-qcom-cci.c -+++ b/drivers/i2c/busses/i2c-qcom-cci.c -@@ -675,7 +675,7 @@ static int cci_probe(struct platform_device *pdev) - return ret; - } - --static int cci_remove(struct platform_device *pdev) -+static void cci_remove(struct platform_device *pdev) - { - struct cci *cci = platform_get_drvdata(pdev); - int i; -@@ -691,8 +691,6 @@ static int cci_remove(struct platform_device *pdev) - disable_irq(cci->irq); - pm_runtime_disable(&pdev->dev); - pm_runtime_set_suspended(&pdev->dev); -- -- return 0; - } - - static const struct cci_data cci_v1_data = { -@@ -829,7 +827,7 @@ MODULE_DEVICE_TABLE(of, cci_dt_match); - - static struct platform_driver qcom_cci_driver = { - .probe = cci_probe, -- .remove = cci_remove, -+ .remove_new = cci_remove, - .driver = { - .name = "i2c-qcom-cci", - .of_match_table = cci_dt_match, -diff --git a/drivers/i2c/busses/i2c-qcom-geni.c b/drivers/i2c/busses/i2c-qcom-geni.c -index 83909b02a03ee..b670a67c4fdd0 100644 ---- a/drivers/i2c/busses/i2c-qcom-geni.c -+++ b/drivers/i2c/busses/i2c-qcom-geni.c -@@ -936,14 +936,13 @@ static int geni_i2c_probe(struct platform_device *pdev) - return ret; - } - --static int geni_i2c_remove(struct platform_device *pdev) -+static void geni_i2c_remove(struct platform_device *pdev) - { - struct geni_i2c_dev *gi2c = platform_get_drvdata(pdev); - - i2c_del_adapter(&gi2c->adap); - release_gpi_dma(gi2c); - pm_runtime_disable(gi2c->se.dev); -- return 0; - } - - static void geni_i2c_shutdown(struct platform_device *pdev) -@@ -1041,7 +1040,7 @@ MODULE_DEVICE_TABLE(of, geni_i2c_dt_match); - - static struct platform_driver geni_i2c_driver = { - .probe = geni_i2c_probe, -- .remove = geni_i2c_remove, -+ .remove_new = geni_i2c_remove, - .shutdown = geni_i2c_shutdown, - .driver = { - .name = "geni_i2c", -diff --git a/drivers/i2c/busses/i2c-qup.c b/drivers/i2c/busses/i2c-qup.c -index 78682388e02ed..ae90170023b00 100644 ---- a/drivers/i2c/busses/i2c-qup.c -+++ b/drivers/i2c/busses/i2c-qup.c -@@ -1911,7 +1911,7 @@ static int qup_i2c_probe(struct platform_device *pdev) - return ret; - } - --static int qup_i2c_remove(struct platform_device *pdev) -+static void qup_i2c_remove(struct platform_device *pdev) - { - struct qup_i2c_dev *qup = platform_get_drvdata(pdev); - -@@ -1925,7 +1925,6 @@ static int qup_i2c_remove(struct platform_device *pdev) - i2c_del_adapter(&qup->adap); - pm_runtime_disable(qup->dev); - pm_runtime_set_suspended(qup->dev); -- return 0; - } - - #ifdef CONFIG_PM -@@ -1985,7 +1984,7 @@ MODULE_DEVICE_TABLE(of, qup_i2c_dt_match); - - static struct platform_driver qup_i2c_driver = { - .probe = qup_i2c_probe, -- .remove = qup_i2c_remove, -+ .remove_new = qup_i2c_remove, - .driver = { - .name = "i2c_qup", - .pm = &qup_i2c_qup_pm_ops, -diff --git a/drivers/i2c/busses/i2c-rcar.c b/drivers/i2c/busses/i2c-rcar.c -index cef82b205c261..2d9c37410ebd0 100644 ---- a/drivers/i2c/busses/i2c-rcar.c -+++ b/drivers/i2c/busses/i2c-rcar.c -@@ -1155,7 +1155,7 @@ static int rcar_i2c_probe(struct platform_device *pdev) - return ret; - } - --static int rcar_i2c_remove(struct platform_device *pdev) -+static void rcar_i2c_remove(struct platform_device *pdev) - { - struct rcar_i2c_priv *priv = platform_get_drvdata(pdev); - struct device *dev = &pdev->dev; -@@ -1167,8 +1167,6 @@ static int rcar_i2c_remove(struct platform_device *pdev) - if (priv->flags & ID_P_PM_BLOCKED) - pm_runtime_put(dev); - pm_runtime_disable(dev); -- -- return 0; - } - - #ifdef CONFIG_PM_SLEEP -@@ -1204,7 +1202,7 @@ static struct platform_driver rcar_i2c_driver = { - .pm = DEV_PM_OPS, - }, - .probe = rcar_i2c_probe, -- .remove = rcar_i2c_remove, -+ .remove_new = rcar_i2c_remove, - }; - - module_platform_driver(rcar_i2c_driver); -diff --git a/drivers/i2c/busses/i2c-riic.c b/drivers/i2c/busses/i2c-riic.c -index 849848ccb0802..5f8c0bd508d2f 100644 ---- a/drivers/i2c/busses/i2c-riic.c -+++ b/drivers/i2c/busses/i2c-riic.c -@@ -477,7 +477,7 @@ static int riic_i2c_probe(struct platform_device *pdev) - return ret; - } - --static int riic_i2c_remove(struct platform_device *pdev) -+static void riic_i2c_remove(struct platform_device *pdev) - { - struct riic_dev *riic = platform_get_drvdata(pdev); - -@@ -486,8 +486,6 @@ static int riic_i2c_remove(struct platform_device *pdev) - pm_runtime_put(&pdev->dev); - i2c_del_adapter(&riic->adapter); - pm_runtime_disable(&pdev->dev); -- -- return 0; - } - - static const struct of_device_id riic_i2c_dt_ids[] = { -@@ -497,7 +495,7 @@ static const struct of_device_id riic_i2c_dt_ids[] = { - - static struct platform_driver riic_i2c_driver = { - .probe = riic_i2c_probe, -- .remove = riic_i2c_remove, -+ .remove_new = riic_i2c_remove, - .driver = { - .name = "i2c-riic", - .of_match_table = riic_i2c_dt_ids, -diff --git a/drivers/i2c/busses/i2c-rk3x.c b/drivers/i2c/busses/i2c-rk3x.c -index b31cf4f18f854..a044ca0c35a19 100644 ---- a/drivers/i2c/busses/i2c-rk3x.c -+++ b/drivers/i2c/busses/i2c-rk3x.c -@@ -1372,7 +1372,7 @@ static int rk3x_i2c_probe(struct platform_device *pdev) - return ret; - } - --static int rk3x_i2c_remove(struct platform_device *pdev) -+static void rk3x_i2c_remove(struct platform_device *pdev) - { - struct rk3x_i2c *i2c = platform_get_drvdata(pdev); - -@@ -1381,15 +1381,13 @@ static int rk3x_i2c_remove(struct platform_device *pdev) - clk_notifier_unregister(i2c->clk, &i2c->clk_rate_nb); - clk_unprepare(i2c->pclk); - clk_unprepare(i2c->clk); -- -- return 0; - } - - static SIMPLE_DEV_PM_OPS(rk3x_i2c_pm_ops, NULL, rk3x_i2c_resume); - - static struct platform_driver rk3x_i2c_driver = { - .probe = rk3x_i2c_probe, -- .remove = rk3x_i2c_remove, -+ .remove_new = rk3x_i2c_remove, - .driver = { - .name = "rk3x-i2c", - .of_match_table = rk3x_i2c_match, -diff --git a/drivers/i2c/busses/i2c-rzv2m.c b/drivers/i2c/busses/i2c-rzv2m.c -index 56d0faee5c46e..dee9b6e655c56 100644 ---- a/drivers/i2c/busses/i2c-rzv2m.c -+++ b/drivers/i2c/busses/i2c-rzv2m.c -@@ -460,7 +460,7 @@ static int rzv2m_i2c_probe(struct platform_device *pdev) - return ret; - } - --static int rzv2m_i2c_remove(struct platform_device *pdev) -+static void rzv2m_i2c_remove(struct platform_device *pdev) - { - struct rzv2m_i2c_priv *priv = platform_get_drvdata(pdev); - struct device *dev = priv->adap.dev.parent; -@@ -468,8 +468,6 @@ static int rzv2m_i2c_remove(struct platform_device *pdev) - i2c_del_adapter(&priv->adap); - bit_clrl(priv->base + IICB0CTL0, IICB0IICE); - pm_runtime_disable(dev); -- -- return 0; - } - - static int rzv2m_i2c_suspend(struct device *dev) -@@ -523,7 +521,7 @@ static struct platform_driver rzv2m_i2c_driver = { - .pm = pm_sleep_ptr(&rzv2m_i2c_pm_ops), - }, - .probe = rzv2m_i2c_probe, -- .remove = rzv2m_i2c_remove, -+ .remove_new = rzv2m_i2c_remove, - }; - module_platform_driver(rzv2m_i2c_driver); - -diff --git a/drivers/i2c/busses/i2c-s3c2410.c b/drivers/i2c/busses/i2c-s3c2410.c -index 45e9df81345a1..28f0e5c64f32e 100644 ---- a/drivers/i2c/busses/i2c-s3c2410.c -+++ b/drivers/i2c/busses/i2c-s3c2410.c -@@ -1114,7 +1114,7 @@ static int s3c24xx_i2c_probe(struct platform_device *pdev) - return 0; - } - --static int s3c24xx_i2c_remove(struct platform_device *pdev) -+static void s3c24xx_i2c_remove(struct platform_device *pdev) - { - struct s3c24xx_i2c *i2c = platform_get_drvdata(pdev); - -@@ -1123,8 +1123,6 @@ static int s3c24xx_i2c_remove(struct platform_device *pdev) - pm_runtime_disable(&pdev->dev); - - i2c_del_adapter(&i2c->adap); -- -- return 0; - } - - #ifdef CONFIG_PM_SLEEP -@@ -1172,7 +1170,7 @@ static const struct dev_pm_ops s3c24xx_i2c_dev_pm_ops = { - - static struct platform_driver s3c24xx_i2c_driver = { - .probe = s3c24xx_i2c_probe, -- .remove = s3c24xx_i2c_remove, -+ .remove_new = s3c24xx_i2c_remove, - .id_table = s3c24xx_driver_ids, - .driver = { - .name = "s3c-i2c", -diff --git a/drivers/i2c/busses/i2c-scmi.c b/drivers/i2c/busses/i2c-scmi.c -index 0239e134b90f4..1045702922413 100644 ---- a/drivers/i2c/busses/i2c-scmi.c -+++ b/drivers/i2c/busses/i2c-scmi.c -@@ -404,19 +404,17 @@ static int smbus_cmi_probe(struct platform_device *device) - return ret; - } - --static int smbus_cmi_remove(struct platform_device *device) -+static void smbus_cmi_remove(struct platform_device *device) - { - struct acpi_smbus_cmi *smbus_cmi = platform_get_drvdata(device); - - i2c_del_adapter(&smbus_cmi->adapter); - kfree(smbus_cmi); -- -- return 0; - } - - static struct platform_driver smbus_cmi_driver = { - .probe = smbus_cmi_probe, -- .remove = smbus_cmi_remove, -+ .remove_new = smbus_cmi_remove, - .driver = { - .name = "smbus_cmi", - .acpi_match_table = acpi_smbus_cmi_ids, -diff --git a/drivers/i2c/busses/i2c-sh7760.c b/drivers/i2c/busses/i2c-sh7760.c -index 319d1fa617c88..60efa3a5e6756 100644 ---- a/drivers/i2c/busses/i2c-sh7760.c -+++ b/drivers/i2c/busses/i2c-sh7760.c -@@ -536,7 +536,7 @@ static int sh7760_i2c_probe(struct platform_device *pdev) - return ret; - } - --static int sh7760_i2c_remove(struct platform_device *pdev) -+static void sh7760_i2c_remove(struct platform_device *pdev) - { - struct cami2c *id = platform_get_drvdata(pdev); - -@@ -546,8 +546,6 @@ static int sh7760_i2c_remove(struct platform_device *pdev) - release_resource(id->ioarea); - kfree(id->ioarea); - kfree(id); -- -- return 0; - } - - static struct platform_driver sh7760_i2c_drv = { -@@ -555,7 +553,7 @@ static struct platform_driver sh7760_i2c_drv = { - .name = SH7760_I2C_DEVNAME, - }, - .probe = sh7760_i2c_probe, -- .remove = sh7760_i2c_remove, -+ .remove_new = sh7760_i2c_remove, - }; - - module_platform_driver(sh7760_i2c_drv); -diff --git a/drivers/i2c/busses/i2c-sh_mobile.c b/drivers/i2c/busses/i2c-sh_mobile.c -index 29330ee64c9c0..21717b943a9e0 100644 ---- a/drivers/i2c/busses/i2c-sh_mobile.c -+++ b/drivers/i2c/busses/i2c-sh_mobile.c -@@ -956,14 +956,13 @@ static int sh_mobile_i2c_probe(struct platform_device *dev) - return 0; - } - --static int sh_mobile_i2c_remove(struct platform_device *dev) -+static void sh_mobile_i2c_remove(struct platform_device *dev) - { - struct sh_mobile_i2c_data *pd = platform_get_drvdata(dev); - - i2c_del_adapter(&pd->adap); - sh_mobile_i2c_release_dma(pd); - pm_runtime_disable(&dev->dev); -- return 0; - } - - #ifdef CONFIG_PM_SLEEP -@@ -1000,7 +999,7 @@ static struct platform_driver sh_mobile_i2c_driver = { - .pm = DEV_PM_OPS, - }, - .probe = sh_mobile_i2c_probe, -- .remove = sh_mobile_i2c_remove, -+ .remove_new = sh_mobile_i2c_remove, - }; - - static int __init sh_mobile_i2c_adap_init(void) -diff --git a/drivers/i2c/busses/i2c-simtec.c b/drivers/i2c/busses/i2c-simtec.c -index 87701744752fb..18516bc64e046 100644 ---- a/drivers/i2c/busses/i2c-simtec.c -+++ b/drivers/i2c/busses/i2c-simtec.c -@@ -126,7 +126,7 @@ static int simtec_i2c_probe(struct platform_device *dev) - return ret; - } - --static int simtec_i2c_remove(struct platform_device *dev) -+static void simtec_i2c_remove(struct platform_device *dev) - { - struct simtec_i2c_data *pd = platform_get_drvdata(dev); - -@@ -135,8 +135,6 @@ static int simtec_i2c_remove(struct platform_device *dev) - iounmap(pd->reg); - release_mem_region(pd->ioarea->start, resource_size(pd->ioarea)); - kfree(pd); -- -- return 0; - } - - /* device driver */ -@@ -146,7 +144,7 @@ static struct platform_driver simtec_i2c_driver = { - .name = "simtec-i2c", - }, - .probe = simtec_i2c_probe, -- .remove = simtec_i2c_remove, -+ .remove_new = simtec_i2c_remove, - }; - - module_platform_driver(simtec_i2c_driver); -diff --git a/drivers/i2c/busses/i2c-st.c b/drivers/i2c/busses/i2c-st.c -index f823913b75a6f..25c3521cae0e3 100644 ---- a/drivers/i2c/busses/i2c-st.c -+++ b/drivers/i2c/busses/i2c-st.c -@@ -876,13 +876,11 @@ static int st_i2c_probe(struct platform_device *pdev) - return 0; - } - --static int st_i2c_remove(struct platform_device *pdev) -+static void st_i2c_remove(struct platform_device *pdev) - { - struct st_i2c_dev *i2c_dev = platform_get_drvdata(pdev); - - i2c_del_adapter(&i2c_dev->adap); -- -- return 0; - } - - static const struct of_device_id st_i2c_match[] = { -@@ -899,7 +897,7 @@ static struct platform_driver st_i2c_driver = { - .pm = pm_sleep_ptr(&st_i2c_pm), - }, - .probe = st_i2c_probe, -- .remove = st_i2c_remove, -+ .remove_new = st_i2c_remove, - }; - - module_platform_driver(st_i2c_driver); -diff --git a/drivers/i2c/busses/i2c-stm32f4.c b/drivers/i2c/busses/i2c-stm32f4.c -index eebce7ecef25b..6ad06a5a22b43 100644 ---- a/drivers/i2c/busses/i2c-stm32f4.c -+++ b/drivers/i2c/busses/i2c-stm32f4.c -@@ -861,15 +861,13 @@ static int stm32f4_i2c_probe(struct platform_device *pdev) - return ret; - } - --static int stm32f4_i2c_remove(struct platform_device *pdev) -+static void stm32f4_i2c_remove(struct platform_device *pdev) - { - struct stm32f4_i2c_dev *i2c_dev = platform_get_drvdata(pdev); - - i2c_del_adapter(&i2c_dev->adap); - - clk_unprepare(i2c_dev->clk); -- -- return 0; - } - - static const struct of_device_id stm32f4_i2c_match[] = { -@@ -884,7 +882,7 @@ static struct platform_driver stm32f4_i2c_driver = { - .of_match_table = stm32f4_i2c_match, - }, - .probe = stm32f4_i2c_probe, -- .remove = stm32f4_i2c_remove, -+ .remove_new = stm32f4_i2c_remove, - }; - - module_platform_driver(stm32f4_i2c_driver); -diff --git a/drivers/i2c/busses/i2c-stm32f7.c b/drivers/i2c/busses/i2c-stm32f7.c -index d1c59d83a65b9..e897d9101434d 100644 ---- a/drivers/i2c/busses/i2c-stm32f7.c -+++ b/drivers/i2c/busses/i2c-stm32f7.c -@@ -2309,7 +2309,7 @@ static int stm32f7_i2c_probe(struct platform_device *pdev) - return ret; - } - --static int stm32f7_i2c_remove(struct platform_device *pdev) -+static void stm32f7_i2c_remove(struct platform_device *pdev) - { - struct stm32f7_i2c_dev *i2c_dev = platform_get_drvdata(pdev); - -@@ -2341,8 +2341,6 @@ static int stm32f7_i2c_remove(struct platform_device *pdev) - stm32f7_i2c_write_fm_plus_bits(i2c_dev, false); - - clk_disable_unprepare(i2c_dev->clk); -- -- return 0; - } - - static int __maybe_unused stm32f7_i2c_runtime_suspend(struct device *dev) -@@ -2486,7 +2484,7 @@ static struct platform_driver stm32f7_i2c_driver = { - .pm = &stm32f7_i2c_pm_ops, - }, - .probe = stm32f7_i2c_probe, -- .remove = stm32f7_i2c_remove, -+ .remove_new = stm32f7_i2c_remove, - }; - - module_platform_driver(stm32f7_i2c_driver); -diff --git a/drivers/i2c/busses/i2c-sun6i-p2wi.c b/drivers/i2c/busses/i2c-sun6i-p2wi.c -index 9e3483f507ff5..3cff1afe0caa2 100644 ---- a/drivers/i2c/busses/i2c-sun6i-p2wi.c -+++ b/drivers/i2c/busses/i2c-sun6i-p2wi.c -@@ -313,20 +313,18 @@ static int p2wi_probe(struct platform_device *pdev) - return ret; - } - --static int p2wi_remove(struct platform_device *dev) -+static void p2wi_remove(struct platform_device *dev) - { - struct p2wi *p2wi = platform_get_drvdata(dev); - - reset_control_assert(p2wi->rstc); - clk_disable_unprepare(p2wi->clk); - i2c_del_adapter(&p2wi->adapter); -- -- return 0; - } - - static struct platform_driver p2wi_driver = { - .probe = p2wi_probe, -- .remove = p2wi_remove, -+ .remove_new = p2wi_remove, - .driver = { - .name = "i2c-sunxi-p2wi", - .of_match_table = p2wi_of_match_table, -diff --git a/drivers/i2c/busses/i2c-synquacer.c b/drivers/i2c/busses/i2c-synquacer.c -index 50d19cf99a03a..4cc196ca8f6dc 100644 ---- a/drivers/i2c/busses/i2c-synquacer.c -+++ b/drivers/i2c/busses/i2c-synquacer.c -@@ -618,15 +618,13 @@ static int synquacer_i2c_probe(struct platform_device *pdev) - return 0; - } - --static int synquacer_i2c_remove(struct platform_device *pdev) -+static void synquacer_i2c_remove(struct platform_device *pdev) - { - struct synquacer_i2c *i2c = platform_get_drvdata(pdev); - - i2c_del_adapter(&i2c->adapter); - if (!IS_ERR(i2c->pclk)) - clk_disable_unprepare(i2c->pclk); -- -- return 0; - }; - - static const struct of_device_id synquacer_i2c_dt_ids[] __maybe_unused = { -@@ -645,7 +643,7 @@ MODULE_DEVICE_TABLE(acpi, synquacer_i2c_acpi_ids); - - static struct platform_driver synquacer_i2c_driver = { - .probe = synquacer_i2c_probe, -- .remove = synquacer_i2c_remove, -+ .remove_new = synquacer_i2c_remove, - .driver = { - .name = "synquacer_i2c", - .of_match_table = of_match_ptr(synquacer_i2c_dt_ids), -diff --git a/drivers/i2c/busses/i2c-tegra-bpmp.c b/drivers/i2c/busses/i2c-tegra-bpmp.c -index 95139985b2d5e..bc3f94561746e 100644 ---- a/drivers/i2c/busses/i2c-tegra-bpmp.c -+++ b/drivers/i2c/busses/i2c-tegra-bpmp.c -@@ -316,13 +316,11 @@ static int tegra_bpmp_i2c_probe(struct platform_device *pdev) - return i2c_add_adapter(&i2c->adapter); - } - --static int tegra_bpmp_i2c_remove(struct platform_device *pdev) -+static void tegra_bpmp_i2c_remove(struct platform_device *pdev) - { - struct tegra_bpmp_i2c *i2c = platform_get_drvdata(pdev); - - i2c_del_adapter(&i2c->adapter); -- -- return 0; - } - - static const struct of_device_id tegra_bpmp_i2c_of_match[] = { -@@ -337,7 +335,7 @@ static struct platform_driver tegra_bpmp_i2c_driver = { - .of_match_table = tegra_bpmp_i2c_of_match, - }, - .probe = tegra_bpmp_i2c_probe, -- .remove = tegra_bpmp_i2c_remove, -+ .remove_new = tegra_bpmp_i2c_remove, - }; - module_platform_driver(tegra_bpmp_i2c_driver); - -diff --git a/drivers/i2c/busses/i2c-tegra.c b/drivers/i2c/busses/i2c-tegra.c -index 157066f06a32d..a82d264bf73df 100644 ---- a/drivers/i2c/busses/i2c-tegra.c -+++ b/drivers/i2c/busses/i2c-tegra.c -@@ -1868,7 +1868,7 @@ static int tegra_i2c_probe(struct platform_device *pdev) - return err; - } - --static int tegra_i2c_remove(struct platform_device *pdev) -+static void tegra_i2c_remove(struct platform_device *pdev) - { - struct tegra_i2c_dev *i2c_dev = platform_get_drvdata(pdev); - -@@ -1877,8 +1877,6 @@ static int tegra_i2c_remove(struct platform_device *pdev) - - tegra_i2c_release_dma(i2c_dev); - tegra_i2c_release_clocks(i2c_dev); -- -- return 0; - } - - static int __maybe_unused tegra_i2c_runtime_resume(struct device *dev) -@@ -1987,7 +1985,7 @@ MODULE_DEVICE_TABLE(acpi, tegra_i2c_acpi_match); - - static struct platform_driver tegra_i2c_driver = { - .probe = tegra_i2c_probe, -- .remove = tegra_i2c_remove, -+ .remove_new = tegra_i2c_remove, - .driver = { - .name = "tegra-i2c", - .of_match_table = tegra_i2c_of_match, -diff --git a/drivers/i2c/busses/i2c-uniphier-f.c b/drivers/i2c/busses/i2c-uniphier-f.c -index d7b622891e52d..54b1624ef87ea 100644 ---- a/drivers/i2c/busses/i2c-uniphier-f.c -+++ b/drivers/i2c/busses/i2c-uniphier-f.c -@@ -586,14 +586,12 @@ static int uniphier_fi2c_probe(struct platform_device *pdev) - return ret; - } - --static int uniphier_fi2c_remove(struct platform_device *pdev) -+static void uniphier_fi2c_remove(struct platform_device *pdev) - { - struct uniphier_fi2c_priv *priv = platform_get_drvdata(pdev); - - i2c_del_adapter(&priv->adap); - clk_disable_unprepare(priv->clk); -- -- return 0; - } - - static int __maybe_unused uniphier_fi2c_suspend(struct device *dev) -@@ -631,7 +629,7 @@ MODULE_DEVICE_TABLE(of, uniphier_fi2c_match); - - static struct platform_driver uniphier_fi2c_drv = { - .probe = uniphier_fi2c_probe, -- .remove = uniphier_fi2c_remove, -+ .remove_new = uniphier_fi2c_remove, - .driver = { - .name = "uniphier-fi2c", - .of_match_table = uniphier_fi2c_match, -diff --git a/drivers/i2c/busses/i2c-uniphier.c b/drivers/i2c/busses/i2c-uniphier.c -index e3ebae381f08a..96b1eb7489a3c 100644 ---- a/drivers/i2c/busses/i2c-uniphier.c -+++ b/drivers/i2c/busses/i2c-uniphier.c -@@ -380,14 +380,12 @@ static int uniphier_i2c_probe(struct platform_device *pdev) - return ret; - } - --static int uniphier_i2c_remove(struct platform_device *pdev) -+static void uniphier_i2c_remove(struct platform_device *pdev) - { - struct uniphier_i2c_priv *priv = platform_get_drvdata(pdev); - - i2c_del_adapter(&priv->adap); - clk_disable_unprepare(priv->clk); -- -- return 0; - } - - static int __maybe_unused uniphier_i2c_suspend(struct device *dev) -@@ -425,7 +423,7 @@ MODULE_DEVICE_TABLE(of, uniphier_i2c_match); - - static struct platform_driver uniphier_i2c_drv = { - .probe = uniphier_i2c_probe, -- .remove = uniphier_i2c_remove, -+ .remove_new = uniphier_i2c_remove, - .driver = { - .name = "uniphier-i2c", - .of_match_table = uniphier_i2c_match, -diff --git a/drivers/i2c/busses/i2c-versatile.c b/drivers/i2c/busses/i2c-versatile.c -index 1ab419f8fa527..0a866456db586 100644 ---- a/drivers/i2c/busses/i2c-versatile.c -+++ b/drivers/i2c/busses/i2c-versatile.c -@@ -96,12 +96,11 @@ static int i2c_versatile_probe(struct platform_device *dev) - return 0; - } - --static int i2c_versatile_remove(struct platform_device *dev) -+static void i2c_versatile_remove(struct platform_device *dev) - { - struct i2c_versatile *i2c = platform_get_drvdata(dev); - - i2c_del_adapter(&i2c->adap); -- return 0; - } - - static const struct of_device_id i2c_versatile_match[] = { -@@ -112,7 +111,7 @@ MODULE_DEVICE_TABLE(of, i2c_versatile_match); - - static struct platform_driver i2c_versatile_driver = { - .probe = i2c_versatile_probe, -- .remove = i2c_versatile_remove, -+ .remove_new = i2c_versatile_remove, - .driver = { - .name = "versatile-i2c", - .of_match_table = i2c_versatile_match, -diff --git a/drivers/i2c/busses/i2c-viperboard.c b/drivers/i2c/busses/i2c-viperboard.c -index 8b5322c3bce0e..9e153b5b0e8e4 100644 ---- a/drivers/i2c/busses/i2c-viperboard.c -+++ b/drivers/i2c/busses/i2c-viperboard.c -@@ -407,20 +407,18 @@ static int vprbrd_i2c_probe(struct platform_device *pdev) - return 0; - } - --static int vprbrd_i2c_remove(struct platform_device *pdev) -+static void vprbrd_i2c_remove(struct platform_device *pdev) - { - struct vprbrd_i2c *vb_i2c = platform_get_drvdata(pdev); - - i2c_del_adapter(&vb_i2c->i2c); -- -- return 0; - } - - static struct platform_driver vprbrd_i2c_driver = { - .driver.name = "viperboard-i2c", - .driver.owner = THIS_MODULE, - .probe = vprbrd_i2c_probe, -- .remove = vprbrd_i2c_remove, -+ .remove_new = vprbrd_i2c_remove, - }; - - static int __init vprbrd_i2c_init(void) -diff --git a/drivers/i2c/busses/i2c-wmt.c b/drivers/i2c/busses/i2c-wmt.c -index 7d4bc87360793..736acaa538d26 100644 ---- a/drivers/i2c/busses/i2c-wmt.c -+++ b/drivers/i2c/busses/i2c-wmt.c -@@ -436,7 +436,7 @@ static int wmt_i2c_probe(struct platform_device *pdev) - return 0; - } - --static int wmt_i2c_remove(struct platform_device *pdev) -+static void wmt_i2c_remove(struct platform_device *pdev) - { - struct wmt_i2c_dev *i2c_dev = platform_get_drvdata(pdev); - -@@ -444,8 +444,6 @@ static int wmt_i2c_remove(struct platform_device *pdev) - writew(0, i2c_dev->base + REG_IMR); - clk_disable_unprepare(i2c_dev->clk); - i2c_del_adapter(&i2c_dev->adapter); -- -- return 0; - } - - static const struct of_device_id wmt_i2c_dt_ids[] = { -@@ -455,7 +453,7 @@ static const struct of_device_id wmt_i2c_dt_ids[] = { - - static struct platform_driver wmt_i2c_driver = { - .probe = wmt_i2c_probe, -- .remove = wmt_i2c_remove, -+ .remove_new = wmt_i2c_remove, - .driver = { - .name = "wmt-i2c", - .of_match_table = wmt_i2c_dt_ids, -diff --git a/drivers/i2c/busses/i2c-xgene-slimpro.c b/drivers/i2c/busses/i2c-xgene-slimpro.c -index 3538d36368a90..fbc1ffbd2fa7d 100644 ---- a/drivers/i2c/busses/i2c-xgene-slimpro.c -+++ b/drivers/i2c/busses/i2c-xgene-slimpro.c -@@ -560,7 +560,7 @@ static int xgene_slimpro_i2c_probe(struct platform_device *pdev) - return rc; - } - --static int xgene_slimpro_i2c_remove(struct platform_device *pdev) -+static void xgene_slimpro_i2c_remove(struct platform_device *pdev) - { - struct slimpro_i2c_dev *ctx = platform_get_drvdata(pdev); - -@@ -570,8 +570,6 @@ static int xgene_slimpro_i2c_remove(struct platform_device *pdev) - mbox_free_channel(ctx->mbox_chan); - else - pcc_mbox_free_channel(ctx->pcc_chan); -- -- return 0; - } - - static const struct of_device_id xgene_slimpro_i2c_dt_ids[] = { -@@ -591,7 +589,7 @@ MODULE_DEVICE_TABLE(acpi, xgene_slimpro_i2c_acpi_ids); - - static struct platform_driver xgene_slimpro_i2c_driver = { - .probe = xgene_slimpro_i2c_probe, -- .remove = xgene_slimpro_i2c_remove, -+ .remove_new = xgene_slimpro_i2c_remove, - .driver = { - .name = "xgene-slimpro-i2c", - .of_match_table = of_match_ptr(xgene_slimpro_i2c_dt_ids), -diff --git a/drivers/i2c/busses/i2c-xiic.c b/drivers/i2c/busses/i2c-xiic.c -index 8a3d9817cb41c..61288f8dd0672 100644 ---- a/drivers/i2c/busses/i2c-xiic.c -+++ b/drivers/i2c/busses/i2c-xiic.c -@@ -1335,7 +1335,7 @@ static int xiic_i2c_probe(struct platform_device *pdev) - return ret; - } - --static int xiic_i2c_remove(struct platform_device *pdev) -+static void xiic_i2c_remove(struct platform_device *pdev) - { - struct xiic_i2c *i2c = platform_get_drvdata(pdev); - int ret; -@@ -1356,8 +1356,6 @@ static int xiic_i2c_remove(struct platform_device *pdev) - pm_runtime_disable(&pdev->dev); - pm_runtime_set_suspended(&pdev->dev); - pm_runtime_dont_use_autosuspend(&pdev->dev); -- -- return 0; - } - - static int __maybe_unused xiic_i2c_runtime_suspend(struct device *dev) -@@ -1390,7 +1388,7 @@ static const struct dev_pm_ops xiic_dev_pm_ops = { - - static struct platform_driver xiic_i2c_driver = { - .probe = xiic_i2c_probe, -- .remove = xiic_i2c_remove, -+ .remove_new = xiic_i2c_remove, - .driver = { - .name = DRIVER_NAME, - .of_match_table = of_match_ptr(xiic_of_match), -diff --git a/drivers/i2c/busses/i2c-xlp9xx.c b/drivers/i2c/busses/i2c-xlp9xx.c -index 4e3b11c0f7325..f59e8c544f366 100644 ---- a/drivers/i2c/busses/i2c-xlp9xx.c -+++ b/drivers/i2c/busses/i2c-xlp9xx.c -@@ -559,7 +559,7 @@ static int xlp9xx_i2c_probe(struct platform_device *pdev) - return 0; - } - --static int xlp9xx_i2c_remove(struct platform_device *pdev) -+static void xlp9xx_i2c_remove(struct platform_device *pdev) - { - struct xlp9xx_i2c_dev *priv; - -@@ -568,8 +568,6 @@ static int xlp9xx_i2c_remove(struct platform_device *pdev) - synchronize_irq(priv->irq); - i2c_del_adapter(&priv->adapter); - xlp9xx_write_i2c_reg(priv, XLP9XX_I2C_CTRL, 0); -- -- return 0; - } - - #ifdef CONFIG_ACPI -@@ -583,7 +581,7 @@ MODULE_DEVICE_TABLE(acpi, xlp9xx_i2c_acpi_ids); - - static struct platform_driver xlp9xx_i2c_driver = { - .probe = xlp9xx_i2c_probe, -- .remove = xlp9xx_i2c_remove, -+ .remove_new = xlp9xx_i2c_remove, - .driver = { - .name = "xlp9xx-i2c", - .acpi_match_table = ACPI_PTR(xlp9xx_i2c_acpi_ids), -diff --git a/drivers/i2c/busses/scx200_acb.c b/drivers/i2c/busses/scx200_acb.c -index 7b42a18bd05c2..83c1db610f54b 100644 ---- a/drivers/i2c/busses/scx200_acb.c -+++ b/drivers/i2c/busses/scx200_acb.c -@@ -523,14 +523,12 @@ static void scx200_cleanup_iface(struct scx200_acb_iface *iface) - kfree(iface); - } - --static int scx200_remove(struct platform_device *pdev) -+static void scx200_remove(struct platform_device *pdev) - { - struct scx200_acb_iface *iface; - - iface = platform_get_drvdata(pdev); - scx200_cleanup_iface(iface); -- -- return 0; - } - - static struct platform_driver scx200_pci_driver = { -@@ -538,7 +536,7 @@ static struct platform_driver scx200_pci_driver = { - .name = "cs5535-smb", - }, - .probe = scx200_probe, -- .remove = scx200_remove, -+ .remove_new = scx200_remove, - }; - - static const struct pci_device_id scx200_isa[] = { -diff --git a/drivers/i2c/muxes/i2c-arb-gpio-challenge.c b/drivers/i2c/muxes/i2c-arb-gpio-challenge.c -index 1c78657631f4f..24168e9f7df4c 100644 ---- a/drivers/i2c/muxes/i2c-arb-gpio-challenge.c -+++ b/drivers/i2c/muxes/i2c-arb-gpio-challenge.c -@@ -174,13 +174,12 @@ static int i2c_arbitrator_probe(struct platform_device *pdev) - return ret; - } - --static int i2c_arbitrator_remove(struct platform_device *pdev) -+static void i2c_arbitrator_remove(struct platform_device *pdev) - { - struct i2c_mux_core *muxc = platform_get_drvdata(pdev); - - i2c_mux_del_adapters(muxc); - i2c_put_adapter(muxc->parent); -- return 0; - } - - static const struct of_device_id i2c_arbitrator_of_match[] = { -@@ -191,7 +190,7 @@ MODULE_DEVICE_TABLE(of, i2c_arbitrator_of_match); - - static struct platform_driver i2c_arbitrator_driver = { - .probe = i2c_arbitrator_probe, -- .remove = i2c_arbitrator_remove, -+ .remove_new = i2c_arbitrator_remove, - .driver = { - .name = "i2c-arb-gpio-challenge", - .of_match_table = i2c_arbitrator_of_match, -diff --git a/drivers/i2c/muxes/i2c-demux-pinctrl.c b/drivers/i2c/muxes/i2c-demux-pinctrl.c -index f7a7405d4350a..a3a122fae71e0 100644 ---- a/drivers/i2c/muxes/i2c-demux-pinctrl.c -+++ b/drivers/i2c/muxes/i2c-demux-pinctrl.c -@@ -282,7 +282,7 @@ static int i2c_demux_pinctrl_probe(struct platform_device *pdev) - return err; - } - --static int i2c_demux_pinctrl_remove(struct platform_device *pdev) -+static void i2c_demux_pinctrl_remove(struct platform_device *pdev) - { - struct i2c_demux_pinctrl_priv *priv = platform_get_drvdata(pdev); - int i; -@@ -296,8 +296,6 @@ static int i2c_demux_pinctrl_remove(struct platform_device *pdev) - of_node_put(priv->chan[i].parent_np); - of_changeset_destroy(&priv->chan[i].chgset); - } -- -- return 0; - } - - static const struct of_device_id i2c_demux_pinctrl_of_match[] = { -@@ -312,7 +310,7 @@ static struct platform_driver i2c_demux_pinctrl_driver = { - .of_match_table = i2c_demux_pinctrl_of_match, - }, - .probe = i2c_demux_pinctrl_probe, -- .remove = i2c_demux_pinctrl_remove, -+ .remove_new = i2c_demux_pinctrl_remove, - }; - module_platform_driver(i2c_demux_pinctrl_driver); - -diff --git a/drivers/i2c/muxes/i2c-mux-gpio.c b/drivers/i2c/muxes/i2c-mux-gpio.c -index 73a23e117ebec..5d5cbe0130cdf 100644 ---- a/drivers/i2c/muxes/i2c-mux-gpio.c -+++ b/drivers/i2c/muxes/i2c-mux-gpio.c -@@ -225,14 +225,12 @@ static int i2c_mux_gpio_probe(struct platform_device *pdev) - return ret; - } - --static int i2c_mux_gpio_remove(struct platform_device *pdev) -+static void i2c_mux_gpio_remove(struct platform_device *pdev) - { - struct i2c_mux_core *muxc = platform_get_drvdata(pdev); - - i2c_mux_del_adapters(muxc); - i2c_put_adapter(muxc->parent); -- -- return 0; - } - - static const struct of_device_id i2c_mux_gpio_of_match[] = { -@@ -243,7 +241,7 @@ MODULE_DEVICE_TABLE(of, i2c_mux_gpio_of_match); - - static struct platform_driver i2c_mux_gpio_driver = { - .probe = i2c_mux_gpio_probe, -- .remove = i2c_mux_gpio_remove, -+ .remove_new = i2c_mux_gpio_remove, - .driver = { - .name = "i2c-mux-gpio", - .of_match_table = i2c_mux_gpio_of_match, -diff --git a/drivers/i2c/muxes/i2c-mux-gpmux.c b/drivers/i2c/muxes/i2c-mux-gpmux.c -index 33024acaac02b..0405af0e15104 100644 ---- a/drivers/i2c/muxes/i2c-mux-gpmux.c -+++ b/drivers/i2c/muxes/i2c-mux-gpmux.c -@@ -142,19 +142,17 @@ static int i2c_mux_probe(struct platform_device *pdev) - return ret; - } - --static int i2c_mux_remove(struct platform_device *pdev) -+static void i2c_mux_remove(struct platform_device *pdev) - { - struct i2c_mux_core *muxc = platform_get_drvdata(pdev); - - i2c_mux_del_adapters(muxc); - i2c_put_adapter(muxc->parent); -- -- return 0; - } - - static struct platform_driver i2c_mux_driver = { - .probe = i2c_mux_probe, -- .remove = i2c_mux_remove, -+ .remove_new = i2c_mux_remove, - .driver = { - .name = "i2c-mux-gpmux", - .of_match_table = i2c_mux_of_match, -diff --git a/drivers/i2c/muxes/i2c-mux-mlxcpld.c b/drivers/i2c/muxes/i2c-mux-mlxcpld.c -index 1a879f6a31efd..3dda00f1df78d 100644 ---- a/drivers/i2c/muxes/i2c-mux-mlxcpld.c -+++ b/drivers/i2c/muxes/i2c-mux-mlxcpld.c -@@ -170,12 +170,11 @@ static int mlxcpld_mux_probe(struct platform_device *pdev) - return err; - } - --static int mlxcpld_mux_remove(struct platform_device *pdev) -+static void mlxcpld_mux_remove(struct platform_device *pdev) - { - struct i2c_mux_core *muxc = platform_get_drvdata(pdev); - - i2c_mux_del_adapters(muxc); -- return 0; - } - - static struct platform_driver mlxcpld_mux_driver = { -@@ -183,7 +182,7 @@ static struct platform_driver mlxcpld_mux_driver = { - .name = "i2c-mux-mlxcpld", - }, - .probe = mlxcpld_mux_probe, -- .remove = mlxcpld_mux_remove, -+ .remove_new = mlxcpld_mux_remove, - }; - - module_platform_driver(mlxcpld_mux_driver); -diff --git a/drivers/i2c/muxes/i2c-mux-pinctrl.c b/drivers/i2c/muxes/i2c-mux-pinctrl.c -index d5ad904756fdf..18236b9fa14a9 100644 ---- a/drivers/i2c/muxes/i2c-mux-pinctrl.c -+++ b/drivers/i2c/muxes/i2c-mux-pinctrl.c -@@ -166,14 +166,12 @@ static int i2c_mux_pinctrl_probe(struct platform_device *pdev) - return ret; - } - --static int i2c_mux_pinctrl_remove(struct platform_device *pdev) -+static void i2c_mux_pinctrl_remove(struct platform_device *pdev) - { - struct i2c_mux_core *muxc = platform_get_drvdata(pdev); - - i2c_mux_del_adapters(muxc); - i2c_put_adapter(muxc->parent); -- -- return 0; - } - - static const struct of_device_id i2c_mux_pinctrl_of_match[] = { -@@ -188,7 +186,7 @@ static struct platform_driver i2c_mux_pinctrl_driver = { - .of_match_table = i2c_mux_pinctrl_of_match, - }, - .probe = i2c_mux_pinctrl_probe, -- .remove = i2c_mux_pinctrl_remove, -+ .remove_new = i2c_mux_pinctrl_remove, - }; - module_platform_driver(i2c_mux_pinctrl_driver); - -diff --git a/drivers/i2c/muxes/i2c-mux-reg.c b/drivers/i2c/muxes/i2c-mux-reg.c -index 30a6de1694e07..9efc1ed01577b 100644 ---- a/drivers/i2c/muxes/i2c-mux-reg.c -+++ b/drivers/i2c/muxes/i2c-mux-reg.c -@@ -233,14 +233,12 @@ static int i2c_mux_reg_probe(struct platform_device *pdev) - return ret; - } - --static int i2c_mux_reg_remove(struct platform_device *pdev) -+static void i2c_mux_reg_remove(struct platform_device *pdev) - { - struct i2c_mux_core *muxc = platform_get_drvdata(pdev); - - i2c_mux_del_adapters(muxc); - i2c_put_adapter(muxc->parent); -- -- return 0; - } - - static const struct of_device_id i2c_mux_reg_of_match[] = { -@@ -251,7 +249,7 @@ MODULE_DEVICE_TABLE(of, i2c_mux_reg_of_match); - - static struct platform_driver i2c_mux_reg_driver = { - .probe = i2c_mux_reg_probe, -- .remove = i2c_mux_reg_remove, -+ .remove_new = i2c_mux_reg_remove, - .driver = { - .name = "i2c-mux-reg", - .of_match_table = of_match_ptr(i2c_mux_reg_of_match), --- -2.39.2 - diff --git a/queue-6.4/i2c-ocores-use-devm_-managed-clks.patch b/queue-6.4/i2c-ocores-use-devm_-managed-clks.patch deleted file mode 100644 index 98eaf63e76f..00000000000 --- a/queue-6.4/i2c-ocores-use-devm_-managed-clks.patch +++ /dev/null @@ -1,168 +0,0 @@ -From 39e9498756c740a7c8414bb8880884e9ffac6287 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Fri, 26 May 2023 15:05:33 +0800 -Subject: i2c: ocores: use devm_ managed clks - -From: Wang Zhang - -[ Upstream commit 9e1a1ee93f6b08aad5ee645073f7c7b115f71e15 ] - -Smatch complains that: -drivers/i2c/busses/i2c-ocores.c:704 ocores_i2c_probe() -warn: missing unwind goto? - -If any wrong occurs in ocores_i2c_of_probe, the i2c->clk needs to be -released. But the function returns directly without freeing the clock. - -Fix this by updating the code to use devm_clk_get_optional_enabled() -instead. Use dev_err_probe() where appropriate as well since we are -changing those statements. - -Fixes: f5f35a92e44a ("i2c: ocores: Add irq support for sparc") -Signed-off-by: Wang Zhang -Reviewed-by: Andi Shyti -Reviewed-by: Andrew Lunn -Signed-off-by: Wolfram Sang -Signed-off-by: Sasha Levin ---- - drivers/i2c/busses/i2c-ocores.c | 64 +++++++++++---------------------- - 1 file changed, 21 insertions(+), 43 deletions(-) - -diff --git a/drivers/i2c/busses/i2c-ocores.c b/drivers/i2c/busses/i2c-ocores.c -index 0742b84a11eb5..4ac77e57bbbfe 100644 ---- a/drivers/i2c/busses/i2c-ocores.c -+++ b/drivers/i2c/busses/i2c-ocores.c -@@ -552,28 +552,20 @@ static int ocores_i2c_of_probe(struct platform_device *pdev, - &clock_frequency); - i2c->bus_clock_khz = 100; - -- i2c->clk = devm_clk_get(&pdev->dev, NULL); -- -- if (!IS_ERR(i2c->clk)) { -- int ret = clk_prepare_enable(i2c->clk); -- -- if (ret) { -- dev_err(&pdev->dev, -- "clk_prepare_enable failed: %d\n", ret); -- return ret; -- } -- i2c->ip_clock_khz = clk_get_rate(i2c->clk) / 1000; -- if (clock_frequency_present) -- i2c->bus_clock_khz = clock_frequency / 1000; -- } -- -+ i2c->clk = devm_clk_get_optional_enabled(&pdev->dev, NULL); -+ if (IS_ERR(i2c->clk)) -+ return dev_err_probe(&pdev->dev, PTR_ERR(i2c->clk), -+ "devm_clk_get_optional_enabled failed\n"); -+ -+ i2c->ip_clock_khz = clk_get_rate(i2c->clk) / 1000; -+ if (clock_frequency_present) -+ i2c->bus_clock_khz = clock_frequency / 1000; - if (i2c->ip_clock_khz == 0) { - if (of_property_read_u32(np, "opencores,ip-clock-frequency", - &val)) { - if (!clock_frequency_present) { - dev_err(&pdev->dev, - "Missing required parameter 'opencores,ip-clock-frequency'\n"); -- clk_disable_unprepare(i2c->clk); - return -ENODEV; - } - i2c->ip_clock_khz = clock_frequency / 1000; -@@ -678,8 +670,7 @@ static int ocores_i2c_probe(struct platform_device *pdev) - default: - dev_err(&pdev->dev, "Unsupported I/O width (%d)\n", - i2c->reg_io_width); -- ret = -EINVAL; -- goto err_clk; -+ return -EINVAL; - } - } - -@@ -710,13 +701,13 @@ static int ocores_i2c_probe(struct platform_device *pdev) - pdev->name, i2c); - if (ret) { - dev_err(&pdev->dev, "Cannot claim IRQ\n"); -- goto err_clk; -+ return ret; - } - } - - ret = ocores_init(&pdev->dev, i2c); - if (ret) -- goto err_clk; -+ return ret; - - /* hook up driver to tree */ - platform_set_drvdata(pdev, i2c); -@@ -728,7 +719,7 @@ static int ocores_i2c_probe(struct platform_device *pdev) - /* add i2c adapter to i2c tree */ - ret = i2c_add_adapter(&i2c->adap); - if (ret) -- goto err_clk; -+ return ret; - - /* add in known devices to the bus */ - if (pdata) { -@@ -737,10 +728,6 @@ static int ocores_i2c_probe(struct platform_device *pdev) - } - - return 0; -- --err_clk: -- clk_disable_unprepare(i2c->clk); -- return ret; - } - - static void ocores_i2c_remove(struct platform_device *pdev) -@@ -754,9 +741,6 @@ static void ocores_i2c_remove(struct platform_device *pdev) - - /* remove adapter & data */ - i2c_del_adapter(&i2c->adap); -- -- if (!IS_ERR(i2c->clk)) -- clk_disable_unprepare(i2c->clk); - } - - #ifdef CONFIG_PM_SLEEP -@@ -769,28 +753,22 @@ static int ocores_i2c_suspend(struct device *dev) - ctrl &= ~(OCI2C_CTRL_EN | OCI2C_CTRL_IEN); - oc_setreg(i2c, OCI2C_CONTROL, ctrl); - -- if (!IS_ERR(i2c->clk)) -- clk_disable_unprepare(i2c->clk); -+ clk_disable_unprepare(i2c->clk); - return 0; - } - - static int ocores_i2c_resume(struct device *dev) - { - struct ocores_i2c *i2c = dev_get_drvdata(dev); -+ unsigned long rate; -+ int ret; - -- if (!IS_ERR(i2c->clk)) { -- unsigned long rate; -- int ret = clk_prepare_enable(i2c->clk); -- -- if (ret) { -- dev_err(dev, -- "clk_prepare_enable failed: %d\n", ret); -- return ret; -- } -- rate = clk_get_rate(i2c->clk) / 1000; -- if (rate) -- i2c->ip_clock_khz = rate; -- } -+ ret = clk_prepare_enable(i2c->clk); -+ if (ret) -+ return dev_err_probe(dev, ret, "clk_prepare_enable failed\n"); -+ rate = clk_get_rate(i2c->clk) / 1000; -+ if (rate) -+ i2c->ip_clock_khz = rate; - return ocores_init(dev, i2c); - } - --- -2.39.2 - diff --git a/queue-6.4/ib-hfi1-fix-wrong-mmu_node-used-for-user-sdma-packet.patch b/queue-6.4/ib-hfi1-fix-wrong-mmu_node-used-for-user-sdma-packet.patch deleted file mode 100644 index 288e0940570..00000000000 --- a/queue-6.4/ib-hfi1-fix-wrong-mmu_node-used-for-user-sdma-packet.patch +++ /dev/null @@ -1,765 +0,0 @@ -From 6ce5d50096c89e03b3c6e6c0bb28eff0d4e37f58 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Fri, 19 May 2023 12:32:16 -0400 -Subject: IB/hfi1: Fix wrong mmu_node used for user SDMA packet after - invalidate - -From: Brendan Cunningham - -[ Upstream commit c9358de193ecfb360c3ce75f27ce839ca0b0bc8c ] - -The hfi1 user SDMA pinned-page cache will leave a stale cache entry when -the cache-entry's virtual address range is invalidated but that cache -entry is in-use by an outstanding SDMA request. - -Subsequent user SDMA requests with buffers in or spanning the virtual -address range of the stale cache entry will result in packets constructed -from the wrong memory, the physical pages pointed to by the stale cache -entry. - -To fix this, remove mmu_rb_node cache entries from the mmu_rb_handler -cache independent of the cache entry's refcount. Add 'struct kref -refcount' to struct mmu_rb_node and manage mmu_rb_node lifetime with -kref_get() and kref_put(). - -mmu_rb_node.refcount makes sdma_mmu_node.refcount redundant. Remove -'atomic_t refcount' from struct sdma_mmu_node and change sdma_mmu_node -code to use mmu_rb_node.refcount. - -Move the mmu_rb_handler destructor call after a -wait-for-SDMA-request-completion call so mmu_rb_nodes that need -mmu_rb_handler's workqueue to queue themselves up for destruction from an -interrupt context may do so. - -Fixes: f48ad614c100 ("IB/hfi1: Move driver out of staging") -Fixes: 00cbce5cbf88 ("IB/hfi1: Fix bugs with non-PAGE_SIZE-end multi-iovec user SDMA requests") -Link: https://lore.kernel.org/r/168451393605.3700681.13493776139032178861.stgit@awfm-02.cornelisnetworks.com -Reviewed-by: Dean Luick -Signed-off-by: Brendan Cunningham -Signed-off-by: Dennis Dalessandro -Signed-off-by: Jason Gunthorpe -Signed-off-by: Sasha Levin ---- - drivers/infiniband/hw/hfi1/ipoib_tx.c | 4 +- - drivers/infiniband/hw/hfi1/mmu_rb.c | 101 ++++++++++------- - drivers/infiniband/hw/hfi1/mmu_rb.h | 3 + - drivers/infiniband/hw/hfi1/sdma.c | 23 +++- - drivers/infiniband/hw/hfi1/sdma.h | 47 +++++--- - drivers/infiniband/hw/hfi1/sdma_txreq.h | 2 + - drivers/infiniband/hw/hfi1/user_sdma.c | 137 ++++++++++-------------- - drivers/infiniband/hw/hfi1/user_sdma.h | 1 - - drivers/infiniband/hw/hfi1/vnic_sdma.c | 4 +- - 9 files changed, 177 insertions(+), 145 deletions(-) - -diff --git a/drivers/infiniband/hw/hfi1/ipoib_tx.c b/drivers/infiniband/hw/hfi1/ipoib_tx.c -index 8973a081d641e..e7d831330278d 100644 ---- a/drivers/infiniband/hw/hfi1/ipoib_tx.c -+++ b/drivers/infiniband/hw/hfi1/ipoib_tx.c -@@ -215,11 +215,11 @@ static int hfi1_ipoib_build_ulp_payload(struct ipoib_txreq *tx, - const skb_frag_t *frag = &skb_shinfo(skb)->frags[i]; - - ret = sdma_txadd_page(dd, -- NULL, - txreq, - skb_frag_page(frag), - frag->bv_offset, -- skb_frag_size(frag)); -+ skb_frag_size(frag), -+ NULL, NULL, NULL); - if (unlikely(ret)) - break; - } -diff --git a/drivers/infiniband/hw/hfi1/mmu_rb.c b/drivers/infiniband/hw/hfi1/mmu_rb.c -index 1cea8b0c78e0f..a864423c256dd 100644 ---- a/drivers/infiniband/hw/hfi1/mmu_rb.c -+++ b/drivers/infiniband/hw/hfi1/mmu_rb.c -@@ -19,8 +19,7 @@ static int mmu_notifier_range_start(struct mmu_notifier *, - const struct mmu_notifier_range *); - static struct mmu_rb_node *__mmu_rb_search(struct mmu_rb_handler *, - unsigned long, unsigned long); --static void do_remove(struct mmu_rb_handler *handler, -- struct list_head *del_list); -+static void release_immediate(struct kref *refcount); - static void handle_remove(struct work_struct *work); - - static const struct mmu_notifier_ops mn_opts = { -@@ -106,7 +105,11 @@ void hfi1_mmu_rb_unregister(struct mmu_rb_handler *handler) - } - spin_unlock_irqrestore(&handler->lock, flags); - -- do_remove(handler, &del_list); -+ while (!list_empty(&del_list)) { -+ rbnode = list_first_entry(&del_list, struct mmu_rb_node, list); -+ list_del(&rbnode->list); -+ kref_put(&rbnode->refcount, release_immediate); -+ } - - /* Now the mm may be freed. */ - mmdrop(handler->mn.mm); -@@ -134,12 +137,6 @@ int hfi1_mmu_rb_insert(struct mmu_rb_handler *handler, - } - __mmu_int_rb_insert(mnode, &handler->root); - list_add_tail(&mnode->list, &handler->lru_list); -- -- ret = handler->ops->insert(handler->ops_arg, mnode); -- if (ret) { -- __mmu_int_rb_remove(mnode, &handler->root); -- list_del(&mnode->list); /* remove from LRU list */ -- } - mnode->handler = handler; - unlock: - spin_unlock_irqrestore(&handler->lock, flags); -@@ -183,6 +180,48 @@ static struct mmu_rb_node *__mmu_rb_search(struct mmu_rb_handler *handler, - return node; - } - -+/* -+ * Must NOT call while holding mnode->handler->lock. -+ * mnode->handler->ops->remove() may sleep and mnode->handler->lock is a -+ * spinlock. -+ */ -+static void release_immediate(struct kref *refcount) -+{ -+ struct mmu_rb_node *mnode = -+ container_of(refcount, struct mmu_rb_node, refcount); -+ mnode->handler->ops->remove(mnode->handler->ops_arg, mnode); -+} -+ -+/* Caller must hold mnode->handler->lock */ -+static void release_nolock(struct kref *refcount) -+{ -+ struct mmu_rb_node *mnode = -+ container_of(refcount, struct mmu_rb_node, refcount); -+ list_move(&mnode->list, &mnode->handler->del_list); -+ queue_work(mnode->handler->wq, &mnode->handler->del_work); -+} -+ -+/* -+ * struct mmu_rb_node->refcount kref_put() callback. -+ * Adds mmu_rb_node to mmu_rb_node->handler->del_list and queues -+ * handler->del_work on handler->wq. -+ * Does not remove mmu_rb_node from handler->lru_list or handler->rb_root. -+ * Acquires mmu_rb_node->handler->lock; do not call while already holding -+ * handler->lock. -+ */ -+void hfi1_mmu_rb_release(struct kref *refcount) -+{ -+ struct mmu_rb_node *mnode = -+ container_of(refcount, struct mmu_rb_node, refcount); -+ struct mmu_rb_handler *handler = mnode->handler; -+ unsigned long flags; -+ -+ spin_lock_irqsave(&handler->lock, flags); -+ list_move(&mnode->list, &mnode->handler->del_list); -+ spin_unlock_irqrestore(&handler->lock, flags); -+ queue_work(handler->wq, &handler->del_work); -+} -+ - void hfi1_mmu_rb_evict(struct mmu_rb_handler *handler, void *evict_arg) - { - struct mmu_rb_node *rbnode, *ptr; -@@ -197,6 +236,10 @@ void hfi1_mmu_rb_evict(struct mmu_rb_handler *handler, void *evict_arg) - - spin_lock_irqsave(&handler->lock, flags); - list_for_each_entry_safe(rbnode, ptr, &handler->lru_list, list) { -+ /* refcount == 1 implies mmu_rb_handler has only rbnode ref */ -+ if (kref_read(&rbnode->refcount) > 1) -+ continue; -+ - if (handler->ops->evict(handler->ops_arg, rbnode, evict_arg, - &stop)) { - __mmu_int_rb_remove(rbnode, &handler->root); -@@ -209,7 +252,7 @@ void hfi1_mmu_rb_evict(struct mmu_rb_handler *handler, void *evict_arg) - spin_unlock_irqrestore(&handler->lock, flags); - - list_for_each_entry_safe(rbnode, ptr, &del_list, list) { -- handler->ops->remove(handler->ops_arg, rbnode); -+ kref_put(&rbnode->refcount, release_immediate); - } - } - -@@ -221,7 +264,6 @@ static int mmu_notifier_range_start(struct mmu_notifier *mn, - struct rb_root_cached *root = &handler->root; - struct mmu_rb_node *node, *ptr = NULL; - unsigned long flags; -- bool added = false; - - spin_lock_irqsave(&handler->lock, flags); - for (node = __mmu_int_rb_iter_first(root, range->start, range->end-1); -@@ -230,38 +272,16 @@ static int mmu_notifier_range_start(struct mmu_notifier *mn, - ptr = __mmu_int_rb_iter_next(node, range->start, - range->end - 1); - trace_hfi1_mmu_mem_invalidate(node->addr, node->len); -- if (handler->ops->invalidate(handler->ops_arg, node)) { -- __mmu_int_rb_remove(node, root); -- /* move from LRU list to delete list */ -- list_move(&node->list, &handler->del_list); -- added = true; -- } -+ /* Remove from rb tree and lru_list. */ -+ __mmu_int_rb_remove(node, root); -+ list_del_init(&node->list); -+ kref_put(&node->refcount, release_nolock); - } - spin_unlock_irqrestore(&handler->lock, flags); - -- if (added) -- queue_work(handler->wq, &handler->del_work); -- - return 0; - } - --/* -- * Call the remove function for the given handler and the list. This -- * is expected to be called with a delete list extracted from handler. -- * The caller should not be holding the handler lock. -- */ --static void do_remove(struct mmu_rb_handler *handler, -- struct list_head *del_list) --{ -- struct mmu_rb_node *node; -- -- while (!list_empty(del_list)) { -- node = list_first_entry(del_list, struct mmu_rb_node, list); -- list_del(&node->list); -- handler->ops->remove(handler->ops_arg, node); -- } --} -- - /* - * Work queue function to remove all nodes that have been queued up to - * be removed. The key feature is that mm->mmap_lock is not being held -@@ -274,11 +294,16 @@ static void handle_remove(struct work_struct *work) - del_work); - struct list_head del_list; - unsigned long flags; -+ struct mmu_rb_node *node; - - /* remove anything that is queued to get removed */ - spin_lock_irqsave(&handler->lock, flags); - list_replace_init(&handler->del_list, &del_list); - spin_unlock_irqrestore(&handler->lock, flags); - -- do_remove(handler, &del_list); -+ while (!list_empty(&del_list)) { -+ node = list_first_entry(&del_list, struct mmu_rb_node, list); -+ list_del(&node->list); -+ handler->ops->remove(handler->ops_arg, node); -+ } - } -diff --git a/drivers/infiniband/hw/hfi1/mmu_rb.h b/drivers/infiniband/hw/hfi1/mmu_rb.h -index c4da064188c9d..82c505a04fc6d 100644 ---- a/drivers/infiniband/hw/hfi1/mmu_rb.h -+++ b/drivers/infiniband/hw/hfi1/mmu_rb.h -@@ -16,6 +16,7 @@ struct mmu_rb_node { - struct rb_node node; - struct mmu_rb_handler *handler; - struct list_head list; -+ struct kref refcount; - }; - - /* -@@ -61,6 +62,8 @@ int hfi1_mmu_rb_register(void *ops_arg, - void hfi1_mmu_rb_unregister(struct mmu_rb_handler *handler); - int hfi1_mmu_rb_insert(struct mmu_rb_handler *handler, - struct mmu_rb_node *mnode); -+void hfi1_mmu_rb_release(struct kref *refcount); -+ - void hfi1_mmu_rb_evict(struct mmu_rb_handler *handler, void *evict_arg); - struct mmu_rb_node *hfi1_mmu_rb_get_first(struct mmu_rb_handler *handler, - unsigned long addr, -diff --git a/drivers/infiniband/hw/hfi1/sdma.c b/drivers/infiniband/hw/hfi1/sdma.c -index bb2552dd29c1e..26c62162759ba 100644 ---- a/drivers/infiniband/hw/hfi1/sdma.c -+++ b/drivers/infiniband/hw/hfi1/sdma.c -@@ -1593,7 +1593,20 @@ static inline void sdma_unmap_desc( - struct hfi1_devdata *dd, - struct sdma_desc *descp) - { -- system_descriptor_complete(dd, descp); -+ switch (sdma_mapping_type(descp)) { -+ case SDMA_MAP_SINGLE: -+ dma_unmap_single(&dd->pcidev->dev, sdma_mapping_addr(descp), -+ sdma_mapping_len(descp), DMA_TO_DEVICE); -+ break; -+ case SDMA_MAP_PAGE: -+ dma_unmap_page(&dd->pcidev->dev, sdma_mapping_addr(descp), -+ sdma_mapping_len(descp), DMA_TO_DEVICE); -+ break; -+ } -+ -+ if (descp->pinning_ctx && descp->ctx_put) -+ descp->ctx_put(descp->pinning_ctx); -+ descp->pinning_ctx = NULL; - } - - /* -@@ -3113,8 +3126,8 @@ int ext_coal_sdma_tx_descs(struct hfi1_devdata *dd, struct sdma_txreq *tx, - - /* Add descriptor for coalesce buffer */ - tx->desc_limit = MAX_DESC; -- return _sdma_txadd_daddr(dd, SDMA_MAP_SINGLE, NULL, tx, -- addr, tx->tlen); -+ return _sdma_txadd_daddr(dd, SDMA_MAP_SINGLE, tx, -+ addr, tx->tlen, NULL, NULL, NULL); - } - - return 1; -@@ -3157,9 +3170,9 @@ int _pad_sdma_tx_descs(struct hfi1_devdata *dd, struct sdma_txreq *tx) - make_tx_sdma_desc( - tx, - SDMA_MAP_NONE, -- NULL, - dd->sdma_pad_phys, -- sizeof(u32) - (tx->packet_len & (sizeof(u32) - 1))); -+ sizeof(u32) - (tx->packet_len & (sizeof(u32) - 1)), -+ NULL, NULL, NULL); - tx->num_desc++; - _sdma_close_tx(dd, tx); - return rval; -diff --git a/drivers/infiniband/hw/hfi1/sdma.h b/drivers/infiniband/hw/hfi1/sdma.h -index 95aaec14c6c28..7fdebab202c4f 100644 ---- a/drivers/infiniband/hw/hfi1/sdma.h -+++ b/drivers/infiniband/hw/hfi1/sdma.h -@@ -594,9 +594,11 @@ static inline dma_addr_t sdma_mapping_addr(struct sdma_desc *d) - static inline void make_tx_sdma_desc( - struct sdma_txreq *tx, - int type, -- void *pinning_ctx, - dma_addr_t addr, -- size_t len) -+ size_t len, -+ void *pinning_ctx, -+ void (*ctx_get)(void *), -+ void (*ctx_put)(void *)) - { - struct sdma_desc *desc = &tx->descp[tx->num_desc]; - -@@ -613,7 +615,11 @@ static inline void make_tx_sdma_desc( - << SDMA_DESC0_PHY_ADDR_SHIFT) | - (((u64)len & SDMA_DESC0_BYTE_COUNT_MASK) - << SDMA_DESC0_BYTE_COUNT_SHIFT); -+ - desc->pinning_ctx = pinning_ctx; -+ desc->ctx_put = ctx_put; -+ if (pinning_ctx && ctx_get) -+ ctx_get(pinning_ctx); - } - - /* helper to extend txreq */ -@@ -645,18 +651,20 @@ static inline void _sdma_close_tx(struct hfi1_devdata *dd, - static inline int _sdma_txadd_daddr( - struct hfi1_devdata *dd, - int type, -- void *pinning_ctx, - struct sdma_txreq *tx, - dma_addr_t addr, -- u16 len) -+ u16 len, -+ void *pinning_ctx, -+ void (*ctx_get)(void *), -+ void (*ctx_put)(void *)) - { - int rval = 0; - - make_tx_sdma_desc( - tx, - type, -- pinning_ctx, -- addr, len); -+ addr, len, -+ pinning_ctx, ctx_get, ctx_put); - WARN_ON(len > tx->tlen); - tx->num_desc++; - tx->tlen -= len; -@@ -676,11 +684,18 @@ static inline int _sdma_txadd_daddr( - /** - * sdma_txadd_page() - add a page to the sdma_txreq - * @dd: the device to use for mapping -- * @pinning_ctx: context to be released at descriptor retirement - * @tx: tx request to which the page is added - * @page: page to map - * @offset: offset within the page - * @len: length in bytes -+ * @pinning_ctx: context to be stored on struct sdma_desc .pinning_ctx. Not -+ * added if coalesce buffer is used. E.g. pointer to pinned-page -+ * cache entry for the sdma_desc. -+ * @ctx_get: optional function to take reference to @pinning_ctx. Not called if -+ * @pinning_ctx is NULL. -+ * @ctx_put: optional function to release reference to @pinning_ctx after -+ * sdma_desc completes. May be called in interrupt context so must -+ * not sleep. Not called if @pinning_ctx is NULL. - * - * This is used to add a page/offset/length descriptor. - * -@@ -692,11 +707,13 @@ static inline int _sdma_txadd_daddr( - */ - static inline int sdma_txadd_page( - struct hfi1_devdata *dd, -- void *pinning_ctx, - struct sdma_txreq *tx, - struct page *page, - unsigned long offset, -- u16 len) -+ u16 len, -+ void *pinning_ctx, -+ void (*ctx_get)(void *), -+ void (*ctx_put)(void *)) - { - dma_addr_t addr; - int rval; -@@ -720,7 +737,8 @@ static inline int sdma_txadd_page( - return -ENOSPC; - } - -- return _sdma_txadd_daddr(dd, SDMA_MAP_PAGE, pinning_ctx, tx, addr, len); -+ return _sdma_txadd_daddr(dd, SDMA_MAP_PAGE, tx, addr, len, -+ pinning_ctx, ctx_get, ctx_put); - } - - /** -@@ -754,8 +772,8 @@ static inline int sdma_txadd_daddr( - return rval; - } - -- return _sdma_txadd_daddr(dd, SDMA_MAP_NONE, NULL, tx, -- addr, len); -+ return _sdma_txadd_daddr(dd, SDMA_MAP_NONE, tx, addr, len, -+ NULL, NULL, NULL); - } - - /** -@@ -801,7 +819,8 @@ static inline int sdma_txadd_kvaddr( - return -ENOSPC; - } - -- return _sdma_txadd_daddr(dd, SDMA_MAP_SINGLE, NULL, tx, addr, len); -+ return _sdma_txadd_daddr(dd, SDMA_MAP_SINGLE, tx, addr, len, -+ NULL, NULL, NULL); - } - - struct iowait_work; -@@ -1034,6 +1053,4 @@ u16 sdma_get_descq_cnt(void); - extern uint mod_num_sdma; - - void sdma_update_lmc(struct hfi1_devdata *dd, u64 mask, u32 lid); -- --void system_descriptor_complete(struct hfi1_devdata *dd, struct sdma_desc *descp); - #endif -diff --git a/drivers/infiniband/hw/hfi1/sdma_txreq.h b/drivers/infiniband/hw/hfi1/sdma_txreq.h -index fad946cb5e0d8..85ae7293c2741 100644 ---- a/drivers/infiniband/hw/hfi1/sdma_txreq.h -+++ b/drivers/infiniband/hw/hfi1/sdma_txreq.h -@@ -20,6 +20,8 @@ struct sdma_desc { - /* private: don't use directly */ - u64 qw[2]; - void *pinning_ctx; -+ /* Release reference to @pinning_ctx. May be called in interrupt context. Must not sleep. */ -+ void (*ctx_put)(void *ctx); - }; - - /** -diff --git a/drivers/infiniband/hw/hfi1/user_sdma.c b/drivers/infiniband/hw/hfi1/user_sdma.c -index ae58b48afe074..02bd62b857b75 100644 ---- a/drivers/infiniband/hw/hfi1/user_sdma.c -+++ b/drivers/infiniband/hw/hfi1/user_sdma.c -@@ -62,18 +62,14 @@ static int defer_packet_queue( - static void activate_packet_queue(struct iowait *wait, int reason); - static bool sdma_rb_filter(struct mmu_rb_node *node, unsigned long addr, - unsigned long len); --static int sdma_rb_insert(void *arg, struct mmu_rb_node *mnode); - static int sdma_rb_evict(void *arg, struct mmu_rb_node *mnode, - void *arg2, bool *stop); - static void sdma_rb_remove(void *arg, struct mmu_rb_node *mnode); --static int sdma_rb_invalidate(void *arg, struct mmu_rb_node *mnode); - - static struct mmu_rb_ops sdma_rb_ops = { - .filter = sdma_rb_filter, -- .insert = sdma_rb_insert, - .evict = sdma_rb_evict, - .remove = sdma_rb_remove, -- .invalidate = sdma_rb_invalidate - }; - - static int add_system_pages_to_sdma_packet(struct user_sdma_request *req, -@@ -247,14 +243,14 @@ int hfi1_user_sdma_free_queues(struct hfi1_filedata *fd, - spin_unlock(&fd->pq_rcu_lock); - synchronize_srcu(&fd->pq_srcu); - /* at this point there can be no more new requests */ -- if (pq->handler) -- hfi1_mmu_rb_unregister(pq->handler); - iowait_sdma_drain(&pq->busy); - /* Wait until all requests have been freed. */ - wait_event_interruptible( - pq->wait, - !atomic_read(&pq->n_reqs)); - kfree(pq->reqs); -+ if (pq->handler) -+ hfi1_mmu_rb_unregister(pq->handler); - bitmap_free(pq->req_in_use); - kmem_cache_destroy(pq->txreq_cache); - flush_pq_iowait(pq); -@@ -1275,25 +1271,17 @@ static void free_system_node(struct sdma_mmu_node *node) - kfree(node); - } - --static inline void acquire_node(struct sdma_mmu_node *node) --{ -- atomic_inc(&node->refcount); -- WARN_ON(atomic_read(&node->refcount) < 0); --} -- --static inline void release_node(struct mmu_rb_handler *handler, -- struct sdma_mmu_node *node) --{ -- atomic_dec(&node->refcount); -- WARN_ON(atomic_read(&node->refcount) < 0); --} -- -+/* -+ * kref_get()'s an additional kref on the returned rb_node to prevent rb_node -+ * from being released until after rb_node is assigned to an SDMA descriptor -+ * (struct sdma_desc) under add_system_iovec_to_sdma_packet(), even if the -+ * virtual address range for rb_node is invalidated between now and then. -+ */ - static struct sdma_mmu_node *find_system_node(struct mmu_rb_handler *handler, - unsigned long start, - unsigned long end) - { - struct mmu_rb_node *rb_node; -- struct sdma_mmu_node *node; - unsigned long flags; - - spin_lock_irqsave(&handler->lock, flags); -@@ -1302,11 +1290,12 @@ static struct sdma_mmu_node *find_system_node(struct mmu_rb_handler *handler, - spin_unlock_irqrestore(&handler->lock, flags); - return NULL; - } -- node = container_of(rb_node, struct sdma_mmu_node, rb); -- acquire_node(node); -+ -+ /* "safety" kref to prevent release before add_system_iovec_to_sdma_packet() */ -+ kref_get(&rb_node->refcount); - spin_unlock_irqrestore(&handler->lock, flags); - -- return node; -+ return container_of(rb_node, struct sdma_mmu_node, rb); - } - - static int pin_system_pages(struct user_sdma_request *req, -@@ -1355,6 +1344,13 @@ static int pin_system_pages(struct user_sdma_request *req, - return 0; - } - -+/* -+ * kref refcount on *node_p will be 2 on successful addition: one kref from -+ * kref_init() for mmu_rb_handler and one kref to prevent *node_p from being -+ * released until after *node_p is assigned to an SDMA descriptor (struct -+ * sdma_desc) under add_system_iovec_to_sdma_packet(), even if the virtual -+ * address range for *node_p is invalidated between now and then. -+ */ - static int add_system_pinning(struct user_sdma_request *req, - struct sdma_mmu_node **node_p, - unsigned long start, unsigned long len) -@@ -1368,6 +1364,12 @@ static int add_system_pinning(struct user_sdma_request *req, - if (!node) - return -ENOMEM; - -+ /* First kref "moves" to mmu_rb_handler */ -+ kref_init(&node->rb.refcount); -+ -+ /* "safety" kref to prevent release before add_system_iovec_to_sdma_packet() */ -+ kref_get(&node->rb.refcount); -+ - node->pq = pq; - ret = pin_system_pages(req, start, len, node, PFN_DOWN(len)); - if (ret == 0) { -@@ -1431,15 +1433,15 @@ static int get_system_cache_entry(struct user_sdma_request *req, - return 0; - } - -- SDMA_DBG(req, "prepend: node->rb.addr %lx, node->refcount %d", -- node->rb.addr, atomic_read(&node->refcount)); -+ SDMA_DBG(req, "prepend: node->rb.addr %lx, node->rb.refcount %d", -+ node->rb.addr, kref_read(&node->rb.refcount)); - prepend_len = node->rb.addr - start; - - /* - * This node will not be returned, instead a new node - * will be. So release the reference. - */ -- release_node(handler, node); -+ kref_put(&node->rb.refcount, hfi1_mmu_rb_release); - - /* Prepend a node to cover the beginning of the allocation */ - ret = add_system_pinning(req, node_p, start, prepend_len); -@@ -1451,6 +1453,20 @@ static int get_system_cache_entry(struct user_sdma_request *req, - } - } - -+static void sdma_mmu_rb_node_get(void *ctx) -+{ -+ struct mmu_rb_node *node = ctx; -+ -+ kref_get(&node->refcount); -+} -+ -+static void sdma_mmu_rb_node_put(void *ctx) -+{ -+ struct sdma_mmu_node *node = ctx; -+ -+ kref_put(&node->rb.refcount, hfi1_mmu_rb_release); -+} -+ - static int add_mapping_to_sdma_packet(struct user_sdma_request *req, - struct user_sdma_txreq *tx, - struct sdma_mmu_node *cache_entry, -@@ -1494,9 +1510,12 @@ static int add_mapping_to_sdma_packet(struct user_sdma_request *req, - ctx = cache_entry; - } - -- ret = sdma_txadd_page(pq->dd, ctx, &tx->txreq, -+ ret = sdma_txadd_page(pq->dd, &tx->txreq, - cache_entry->pages[page_index], -- page_offset, from_this_page); -+ page_offset, from_this_page, -+ ctx, -+ sdma_mmu_rb_node_get, -+ sdma_mmu_rb_node_put); - if (ret) { - /* - * When there's a failure, the entire request is freed by -@@ -1518,8 +1537,6 @@ static int add_system_iovec_to_sdma_packet(struct user_sdma_request *req, - struct user_sdma_iovec *iovec, - size_t from_this_iovec) - { -- struct mmu_rb_handler *handler = req->pq->handler; -- - while (from_this_iovec > 0) { - struct sdma_mmu_node *cache_entry; - size_t from_this_cache_entry; -@@ -1540,15 +1557,15 @@ static int add_system_iovec_to_sdma_packet(struct user_sdma_request *req, - - ret = add_mapping_to_sdma_packet(req, tx, cache_entry, start, - from_this_cache_entry); -+ -+ /* -+ * Done adding cache_entry to zero or more sdma_desc. Can -+ * kref_put() the "safety" kref taken under -+ * get_system_cache_entry(). -+ */ -+ kref_put(&cache_entry->rb.refcount, hfi1_mmu_rb_release); -+ - if (ret) { -- /* -- * We're guaranteed that there will be no descriptor -- * completion callback that releases this node -- * because only the last descriptor referencing it -- * has a context attached, and a failure means the -- * last descriptor was never added. -- */ -- release_node(handler, cache_entry); - SDMA_DBG(req, "add system segment failed %d", ret); - return ret; - } -@@ -1599,42 +1616,12 @@ static int add_system_pages_to_sdma_packet(struct user_sdma_request *req, - return 0; - } - --void system_descriptor_complete(struct hfi1_devdata *dd, -- struct sdma_desc *descp) --{ -- switch (sdma_mapping_type(descp)) { -- case SDMA_MAP_SINGLE: -- dma_unmap_single(&dd->pcidev->dev, sdma_mapping_addr(descp), -- sdma_mapping_len(descp), DMA_TO_DEVICE); -- break; -- case SDMA_MAP_PAGE: -- dma_unmap_page(&dd->pcidev->dev, sdma_mapping_addr(descp), -- sdma_mapping_len(descp), DMA_TO_DEVICE); -- break; -- } -- -- if (descp->pinning_ctx) { -- struct sdma_mmu_node *node = descp->pinning_ctx; -- -- release_node(node->rb.handler, node); -- } --} -- - static bool sdma_rb_filter(struct mmu_rb_node *node, unsigned long addr, - unsigned long len) - { - return (bool)(node->addr == addr); - } - --static int sdma_rb_insert(void *arg, struct mmu_rb_node *mnode) --{ -- struct sdma_mmu_node *node = -- container_of(mnode, struct sdma_mmu_node, rb); -- -- atomic_inc(&node->refcount); -- return 0; --} -- - /* - * Return 1 to remove the node from the rb tree and call the remove op. - * -@@ -1647,10 +1634,6 @@ static int sdma_rb_evict(void *arg, struct mmu_rb_node *mnode, - container_of(mnode, struct sdma_mmu_node, rb); - struct evict_data *evict_data = evict_arg; - -- /* is this node still being used? */ -- if (atomic_read(&node->refcount)) -- return 0; /* keep this node */ -- - /* this node will be evicted, add its pages to our count */ - evict_data->cleared += node->npages; - -@@ -1668,13 +1651,3 @@ static void sdma_rb_remove(void *arg, struct mmu_rb_node *mnode) - - free_system_node(node); - } -- --static int sdma_rb_invalidate(void *arg, struct mmu_rb_node *mnode) --{ -- struct sdma_mmu_node *node = -- container_of(mnode, struct sdma_mmu_node, rb); -- -- if (!atomic_read(&node->refcount)) -- return 1; -- return 0; --} -diff --git a/drivers/infiniband/hw/hfi1/user_sdma.h b/drivers/infiniband/hw/hfi1/user_sdma.h -index a241836371dc1..548347d4c5bc2 100644 ---- a/drivers/infiniband/hw/hfi1/user_sdma.h -+++ b/drivers/infiniband/hw/hfi1/user_sdma.h -@@ -104,7 +104,6 @@ struct hfi1_user_sdma_comp_q { - struct sdma_mmu_node { - struct mmu_rb_node rb; - struct hfi1_user_sdma_pkt_q *pq; -- atomic_t refcount; - struct page **pages; - unsigned int npages; - }; -diff --git a/drivers/infiniband/hw/hfi1/vnic_sdma.c b/drivers/infiniband/hw/hfi1/vnic_sdma.c -index 727eedfba332a..cc6324d2d1ddc 100644 ---- a/drivers/infiniband/hw/hfi1/vnic_sdma.c -+++ b/drivers/infiniband/hw/hfi1/vnic_sdma.c -@@ -64,11 +64,11 @@ static noinline int build_vnic_ulp_payload(struct sdma_engine *sde, - - /* combine physically continuous fragments later? */ - ret = sdma_txadd_page(sde->dd, -- NULL, - &tx->txreq, - skb_frag_page(frag), - skb_frag_off(frag), -- skb_frag_size(frag)); -+ skb_frag_size(frag), -+ NULL, NULL, NULL); - if (unlikely(ret)) - goto bail_txadd; - } --- -2.39.2 - diff --git a/queue-6.4/ice-handle-extts-in-the-miscellaneous-interrupt-thre.patch b/queue-6.4/ice-handle-extts-in-the-miscellaneous-interrupt-thre.patch deleted file mode 100644 index ae6f97ccf48..00000000000 --- a/queue-6.4/ice-handle-extts-in-the-miscellaneous-interrupt-thre.patch +++ /dev/null @@ -1,199 +0,0 @@ -From ae97a353c59eb5c40ba6e53e6108a8e3688a2bb8 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Thu, 1 Jun 2023 14:15:03 -0700 -Subject: ice: handle extts in the miscellaneous interrupt thread - -From: Karol Kolacinski - -[ Upstream commit 6e8b2c88fc8cf95ed09de25946b20b7536c88cd5 ] - -The ice_ptp_extts_work() and ice_ptp_periodic_work() functions are both -scheduled on the same kthread worker, pf.ptp.kworker. The -ice_ptp_periodic_work() function sends to the firmware to interact with the -PHY, and must block to wait for responses. - -This can cause delay in responding to the PFINT_OICR_TSYN_EVNT interrupt -cause, ultimately resulting in disruption to processing an input signal of -the frequency is high enough. In our testing, even 100 Hz signals get -disrupted. - -Fix this by instead processing the signal inside the miscellaneous -interrupt thread prior to handling Tx timestamps. - -Use atomic bits in a new pf->misc_thread bitmap in order to safely -communicate which tasks require processing within the -ice_misc_intr_thread_fn(). This ensures the communication of desired tasks -from the ice_misc_intr() are correctly processed without racing even in the -event that the interrupt triggers again before the thread function exits. - -Fixes: 172db5f91d5f ("ice: add support for auxiliary input/output pins") -Signed-off-by: Karol Kolacinski -Signed-off-by: Jacob Keller -Tested-by: Arpana Arland (A Contingent worker at Intel) -Signed-off-by: Tony Nguyen -Signed-off-by: Sasha Levin ---- - drivers/net/ethernet/intel/ice/ice.h | 7 ++++++ - drivers/net/ethernet/intel/ice/ice_main.c | 29 ++++++++++++++++------- - drivers/net/ethernet/intel/ice/ice_ptp.c | 12 +++------- - drivers/net/ethernet/intel/ice/ice_ptp.h | 4 ++-- - 4 files changed, 33 insertions(+), 19 deletions(-) - -diff --git a/drivers/net/ethernet/intel/ice/ice.h b/drivers/net/ethernet/intel/ice/ice.h -index aa32111afd6ed..50ccde7942f2d 100644 ---- a/drivers/net/ethernet/intel/ice/ice.h -+++ b/drivers/net/ethernet/intel/ice/ice.h -@@ -514,6 +514,12 @@ enum ice_pf_flags { - ICE_PF_FLAGS_NBITS /* must be last */ - }; - -+enum ice_misc_thread_tasks { -+ ICE_MISC_THREAD_EXTTS_EVENT, -+ ICE_MISC_THREAD_TX_TSTAMP, -+ ICE_MISC_THREAD_NBITS /* must be last */ -+}; -+ - struct ice_switchdev_info { - struct ice_vsi *control_vsi; - struct ice_vsi *uplink_vsi; -@@ -556,6 +562,7 @@ struct ice_pf { - DECLARE_BITMAP(features, ICE_F_MAX); - DECLARE_BITMAP(state, ICE_STATE_NBITS); - DECLARE_BITMAP(flags, ICE_PF_FLAGS_NBITS); -+ DECLARE_BITMAP(misc_thread, ICE_MISC_THREAD_NBITS); - unsigned long *avail_txqs; /* bitmap to track PF Tx queue usage */ - unsigned long *avail_rxqs; /* bitmap to track PF Rx queue usage */ - unsigned long serv_tmr_period; -diff --git a/drivers/net/ethernet/intel/ice/ice_main.c b/drivers/net/ethernet/intel/ice/ice_main.c -index 42c318ceff618..fcc027c938fda 100644 ---- a/drivers/net/ethernet/intel/ice/ice_main.c -+++ b/drivers/net/ethernet/intel/ice/ice_main.c -@@ -3141,20 +3141,28 @@ static irqreturn_t ice_misc_intr(int __always_unused irq, void *data) - - if (oicr & PFINT_OICR_TSYN_TX_M) { - ena_mask &= ~PFINT_OICR_TSYN_TX_M; -- if (!hw->reset_ongoing) -+ if (!hw->reset_ongoing) { -+ set_bit(ICE_MISC_THREAD_TX_TSTAMP, pf->misc_thread); - ret = IRQ_WAKE_THREAD; -+ } - } - - if (oicr & PFINT_OICR_TSYN_EVNT_M) { - u8 tmr_idx = hw->func_caps.ts_func_info.tmr_index_owned; - u32 gltsyn_stat = rd32(hw, GLTSYN_STAT(tmr_idx)); - -- /* Save EVENTs from GTSYN register */ -- pf->ptp.ext_ts_irq |= gltsyn_stat & (GLTSYN_STAT_EVENT0_M | -- GLTSYN_STAT_EVENT1_M | -- GLTSYN_STAT_EVENT2_M); - ena_mask &= ~PFINT_OICR_TSYN_EVNT_M; -- kthread_queue_work(pf->ptp.kworker, &pf->ptp.extts_work); -+ -+ if (hw->func_caps.ts_func_info.src_tmr_owned) { -+ /* Save EVENTs from GLTSYN register */ -+ pf->ptp.ext_ts_irq |= gltsyn_stat & -+ (GLTSYN_STAT_EVENT0_M | -+ GLTSYN_STAT_EVENT1_M | -+ GLTSYN_STAT_EVENT2_M); -+ -+ set_bit(ICE_MISC_THREAD_EXTTS_EVENT, pf->misc_thread); -+ ret = IRQ_WAKE_THREAD; -+ } - } - - #define ICE_AUX_CRIT_ERR (PFINT_OICR_PE_CRITERR_M | PFINT_OICR_HMC_ERR_M | PFINT_OICR_PE_PUSH_M) -@@ -3198,8 +3206,13 @@ static irqreturn_t ice_misc_intr_thread_fn(int __always_unused irq, void *data) - if (ice_is_reset_in_progress(pf->state)) - return IRQ_HANDLED; - -- while (!ice_ptp_process_ts(pf)) -- usleep_range(50, 100); -+ if (test_and_clear_bit(ICE_MISC_THREAD_EXTTS_EVENT, pf->misc_thread)) -+ ice_ptp_extts_event(pf); -+ -+ if (test_and_clear_bit(ICE_MISC_THREAD_TX_TSTAMP, pf->misc_thread)) { -+ while (!ice_ptp_process_ts(pf)) -+ usleep_range(50, 100); -+ } - - return IRQ_HANDLED; - } -diff --git a/drivers/net/ethernet/intel/ice/ice_ptp.c b/drivers/net/ethernet/intel/ice/ice_ptp.c -index ac6f06f9a2ed0..e8507d09b8488 100644 ---- a/drivers/net/ethernet/intel/ice/ice_ptp.c -+++ b/drivers/net/ethernet/intel/ice/ice_ptp.c -@@ -1458,15 +1458,11 @@ static int ice_ptp_adjfine(struct ptp_clock_info *info, long scaled_ppm) - } - - /** -- * ice_ptp_extts_work - Workqueue task function -- * @work: external timestamp work structure -- * -- * Service for PTP external clock event -+ * ice_ptp_extts_event - Process PTP external clock event -+ * @pf: Board private structure - */ --static void ice_ptp_extts_work(struct kthread_work *work) -+void ice_ptp_extts_event(struct ice_pf *pf) - { -- struct ice_ptp *ptp = container_of(work, struct ice_ptp, extts_work); -- struct ice_pf *pf = container_of(ptp, struct ice_pf, ptp); - struct ptp_clock_event event; - struct ice_hw *hw = &pf->hw; - u8 chan, tmr_idx; -@@ -2558,7 +2554,6 @@ void ice_ptp_prepare_for_reset(struct ice_pf *pf) - ice_ptp_cfg_timestamp(pf, false); - - kthread_cancel_delayed_work_sync(&ptp->work); -- kthread_cancel_work_sync(&ptp->extts_work); - - if (test_bit(ICE_PFR_REQ, pf->state)) - return; -@@ -2656,7 +2651,6 @@ static int ice_ptp_init_work(struct ice_pf *pf, struct ice_ptp *ptp) - - /* Initialize work functions */ - kthread_init_delayed_work(&ptp->work, ice_ptp_periodic_work); -- kthread_init_work(&ptp->extts_work, ice_ptp_extts_work); - - /* Allocate a kworker for handling work required for the ports - * connected to the PTP hardware clock. -diff --git a/drivers/net/ethernet/intel/ice/ice_ptp.h b/drivers/net/ethernet/intel/ice/ice_ptp.h -index 9cda2f43e0e56..9f8902c1e743d 100644 ---- a/drivers/net/ethernet/intel/ice/ice_ptp.h -+++ b/drivers/net/ethernet/intel/ice/ice_ptp.h -@@ -169,7 +169,6 @@ struct ice_ptp_port { - * struct ice_ptp - data used for integrating with CONFIG_PTP_1588_CLOCK - * @port: data for the PHY port initialization procedure - * @work: delayed work function for periodic tasks -- * @extts_work: work function for handling external Tx timestamps - * @cached_phc_time: a cached copy of the PHC time for timestamp extension - * @cached_phc_jiffies: jiffies when cached_phc_time was last updated - * @ext_ts_chan: the external timestamp channel in use -@@ -190,7 +189,6 @@ struct ice_ptp_port { - struct ice_ptp { - struct ice_ptp_port port; - struct kthread_delayed_work work; -- struct kthread_work extts_work; - u64 cached_phc_time; - unsigned long cached_phc_jiffies; - u8 ext_ts_chan; -@@ -256,6 +254,7 @@ int ice_ptp_get_ts_config(struct ice_pf *pf, struct ifreq *ifr); - void ice_ptp_cfg_timestamp(struct ice_pf *pf, bool ena); - int ice_get_ptp_clock_index(struct ice_pf *pf); - -+void ice_ptp_extts_event(struct ice_pf *pf); - s8 ice_ptp_request_ts(struct ice_ptp_tx *tx, struct sk_buff *skb); - bool ice_ptp_process_ts(struct ice_pf *pf); - -@@ -284,6 +283,7 @@ static inline int ice_get_ptp_clock_index(struct ice_pf *pf) - return -1; - } - -+static inline void ice_ptp_extts_event(struct ice_pf *pf) { } - static inline s8 - ice_ptp_request_ts(struct ice_ptp_tx *tx, struct sk_buff *skb) - { --- -2.39.2 - diff --git a/queue-6.4/igc-check-if-hardware-tx-timestamping-is-enabled-ear.patch b/queue-6.4/igc-check-if-hardware-tx-timestamping-is-enabled-ear.patch deleted file mode 100644 index 1d678c4ff15..00000000000 --- a/queue-6.4/igc-check-if-hardware-tx-timestamping-is-enabled-ear.patch +++ /dev/null @@ -1,152 +0,0 @@ -From 9b8b36e366cc30c5c451d648515440e2109679f8 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Wed, 7 Jun 2023 14:32:30 -0700 -Subject: igc: Check if hardware TX timestamping is enabled earlier - -From: Vinicius Costa Gomes - -[ Upstream commit ce58c7cc8b9910f2bc1d038d7ba60c3f011b2cb2 ] - -Before requesting a packet transmission to be hardware timestamped, -check if the user has TX timestamping enabled. Fixes an issue that if -a packet was internally forwarded to the NIC, and it had the -SKBTX_HW_TSTAMP flag set, the driver would mark that timestamp as -skipped. - -In reality, that timestamp was "not for us", as TX timestamp could -never be enabled in the NIC. - -Checking if the TX timestamping is enabled earlier has a secondary -effect that when TX timestamping is disabled, there's no need to check -for timestamp timeouts. - -We should only take care to free any pending timestamp when TX -timestamping is disabled, as that skb would never be released -otherwise. - -Fixes: 2c344ae24501 ("igc: Add support for TX timestamping") -Suggested-by: Vladimir Oltean -Signed-off-by: Vinicius Costa Gomes -Tested-by: Naama Meir -Signed-off-by: Tony Nguyen -Signed-off-by: Sasha Levin ---- - drivers/net/ethernet/intel/igc/igc.h | 1 + - drivers/net/ethernet/intel/igc/igc_main.c | 5 +-- - drivers/net/ethernet/intel/igc/igc_ptp.c | 42 +++++++++++++++++++++-- - 3 files changed, 43 insertions(+), 5 deletions(-) - -diff --git a/drivers/net/ethernet/intel/igc/igc.h b/drivers/net/ethernet/intel/igc/igc.h -index ef4d284634047..70de8b9bbe591 100644 ---- a/drivers/net/ethernet/intel/igc/igc.h -+++ b/drivers/net/ethernet/intel/igc/igc.h -@@ -609,6 +609,7 @@ enum igc_ring_flags_t { - IGC_RING_FLAG_TX_CTX_IDX, - IGC_RING_FLAG_TX_DETECT_HANG, - IGC_RING_FLAG_AF_XDP_ZC, -+ IGC_RING_FLAG_TX_HWTSTAMP, - }; - - #define ring_uses_large_buffer(ring) \ -diff --git a/drivers/net/ethernet/intel/igc/igc_main.c b/drivers/net/ethernet/intel/igc/igc_main.c -index fb4b543665f71..d0c067da7aac8 100644 ---- a/drivers/net/ethernet/intel/igc/igc_main.c -+++ b/drivers/net/ethernet/intel/igc/igc_main.c -@@ -1585,7 +1585,8 @@ static netdev_tx_t igc_xmit_frame_ring(struct sk_buff *skb, - } - } - -- if (unlikely(skb_shinfo(skb)->tx_flags & SKBTX_HW_TSTAMP)) { -+ if (unlikely(test_bit(IGC_RING_FLAG_TX_HWTSTAMP, &tx_ring->flags) && -+ skb_shinfo(skb)->tx_flags & SKBTX_HW_TSTAMP)) { - /* FIXME: add support for retrieving timestamps from - * the other timer registers before skipping the - * timestamping request. -@@ -1593,7 +1594,7 @@ static netdev_tx_t igc_xmit_frame_ring(struct sk_buff *skb, - unsigned long flags; - - spin_lock_irqsave(&adapter->ptp_tx_lock, flags); -- if (adapter->tstamp_config.tx_type == HWTSTAMP_TX_ON && !adapter->ptp_tx_skb) { -+ if (!adapter->ptp_tx_skb) { - skb_shinfo(skb)->tx_flags |= SKBTX_IN_PROGRESS; - tx_flags |= IGC_TX_FLAGS_TSTAMP; - -diff --git a/drivers/net/ethernet/intel/igc/igc_ptp.c b/drivers/net/ethernet/intel/igc/igc_ptp.c -index 56128e55f5c03..42f622ceb64bb 100644 ---- a/drivers/net/ethernet/intel/igc/igc_ptp.c -+++ b/drivers/net/ethernet/intel/igc/igc_ptp.c -@@ -536,9 +536,36 @@ static void igc_ptp_enable_rx_timestamp(struct igc_adapter *adapter) - wr32(IGC_TSYNCRXCTL, val); - } - -+static void igc_ptp_clear_tx_tstamp(struct igc_adapter *adapter) -+{ -+ unsigned long flags; -+ -+ cancel_work_sync(&adapter->ptp_tx_work); -+ -+ spin_lock_irqsave(&adapter->ptp_tx_lock, flags); -+ -+ dev_kfree_skb_any(adapter->ptp_tx_skb); -+ adapter->ptp_tx_skb = NULL; -+ -+ spin_unlock_irqrestore(&adapter->ptp_tx_lock, flags); -+} -+ - static void igc_ptp_disable_tx_timestamp(struct igc_adapter *adapter) - { - struct igc_hw *hw = &adapter->hw; -+ int i; -+ -+ /* Clear the flags first to avoid new packets to be enqueued -+ * for TX timestamping. -+ */ -+ for (i = 0; i < adapter->num_tx_queues; i++) { -+ struct igc_ring *tx_ring = adapter->tx_ring[i]; -+ -+ clear_bit(IGC_RING_FLAG_TX_HWTSTAMP, &tx_ring->flags); -+ } -+ -+ /* Now we can clean the pending TX timestamp requests. */ -+ igc_ptp_clear_tx_tstamp(adapter); - - wr32(IGC_TSYNCTXCTL, 0); - } -@@ -546,12 +573,23 @@ static void igc_ptp_disable_tx_timestamp(struct igc_adapter *adapter) - static void igc_ptp_enable_tx_timestamp(struct igc_adapter *adapter) - { - struct igc_hw *hw = &adapter->hw; -+ int i; - - wr32(IGC_TSYNCTXCTL, IGC_TSYNCTXCTL_ENABLED | IGC_TSYNCTXCTL_TXSYNSIG); - - /* Read TXSTMP registers to discard any timestamp previously stored. */ - rd32(IGC_TXSTMPL); - rd32(IGC_TXSTMPH); -+ -+ /* The hardware is ready to accept TX timestamp requests, -+ * notify the transmit path. -+ */ -+ for (i = 0; i < adapter->num_tx_queues; i++) { -+ struct igc_ring *tx_ring = adapter->tx_ring[i]; -+ -+ set_bit(IGC_RING_FLAG_TX_HWTSTAMP, &tx_ring->flags); -+ } -+ - } - - /** -@@ -1026,9 +1064,7 @@ void igc_ptp_suspend(struct igc_adapter *adapter) - if (!(adapter->ptp_flags & IGC_PTP_ENABLED)) - return; - -- cancel_work_sync(&adapter->ptp_tx_work); -- dev_kfree_skb_any(adapter->ptp_tx_skb); -- adapter->ptp_tx_skb = NULL; -+ igc_ptp_clear_tx_tstamp(adapter); - - if (pci_device_is_present(adapter->pdev)) { - igc_ptp_time_save(adapter); --- -2.39.2 - diff --git a/queue-6.4/igc-enable-and-fix-rx-hash-usage-by-netstack.patch b/queue-6.4/igc-enable-and-fix-rx-hash-usage-by-netstack.patch deleted file mode 100644 index a86f204cc8b..00000000000 --- a/queue-6.4/igc-enable-and-fix-rx-hash-usage-by-netstack.patch +++ /dev/null @@ -1,149 +0,0 @@ -From a25a5b1168d5b7c4e1fcacc779037572c10b6aa2 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Tue, 18 Apr 2023 15:30:42 +0200 -Subject: igc: Enable and fix RX hash usage by netstack - -From: Jesper Dangaard Brouer - -[ Upstream commit 84214ab4689f962b4bfc47fc9a5838d25ac4274d ] - -When function igc_rx_hash() was introduced in v4.20 via commit 0507ef8a0372 -("igc: Add transmit and receive fastpath and interrupt handlers"), the -hardware wasn't configured to provide RSS hash, thus it made sense to not -enable net_device NETIF_F_RXHASH feature bit. - -The NIC hardware was configured to enable RSS hash info in v5.2 via commit -2121c2712f82 ("igc: Add multiple receive queues control supporting"), but -forgot to set the NETIF_F_RXHASH feature bit. - -The original implementation of igc_rx_hash() didn't extract the associated -pkt_hash_type, but statically set PKT_HASH_TYPE_L3. The largest portions of -this patch are about extracting the RSS Type from the hardware and mapping -this to enum pkt_hash_types. This was based on Foxville i225 software user -manual rev-1.3.1 and tested on Intel Ethernet Controller I225-LM (rev 03). - -For UDP it's worth noting that RSS (type) hashing have been disabled both for -IPv4 and IPv6 (see IGC_MRQC_RSS_FIELD_IPV4_UDP + IGC_MRQC_RSS_FIELD_IPV6_UDP) -because hardware RSS doesn't handle fragmented pkts well when enabled (can -cause out-of-order). This results in PKT_HASH_TYPE_L3 for UDP packets, and -hash value doesn't include UDP port numbers. Not being PKT_HASH_TYPE_L4, have -the effect that netstack will do a software based hash calc calling into -flow_dissect, but only when code calls skb_get_hash(), which doesn't -necessary happen for local delivery. - -For QA verification testing I wrote a small bpftrace prog: - [0] https://github.com/xdp-project/xdp-project/blob/master/areas/hints/monitor_skb_hash_on_dev.bt - -Fixes: 2121c2712f82 ("igc: Add multiple receive queues control supporting") -Signed-off-by: Jesper Dangaard Brouer -Signed-off-by: Daniel Borkmann -Acked-by: Song Yoong Siang -Link: https://lore.kernel.org/bpf/168182464270.616355.11391652654430626584.stgit@firesoul -Signed-off-by: Sasha Levin ---- - drivers/net/ethernet/intel/igc/igc.h | 28 ++++++++++++++++++++ - drivers/net/ethernet/intel/igc/igc_main.c | 31 ++++++++++++++++++++--- - 2 files changed, 55 insertions(+), 4 deletions(-) - -diff --git a/drivers/net/ethernet/intel/igc/igc.h b/drivers/net/ethernet/intel/igc/igc.h -index 34aebf00a5123..f7f9e217e7b42 100644 ---- a/drivers/net/ethernet/intel/igc/igc.h -+++ b/drivers/net/ethernet/intel/igc/igc.h -@@ -13,6 +13,7 @@ - #include - #include - #include -+#include - - #include "igc_hw.h" - -@@ -311,6 +312,33 @@ extern char igc_driver_name[]; - #define IGC_MRQC_RSS_FIELD_IPV4_UDP 0x00400000 - #define IGC_MRQC_RSS_FIELD_IPV6_UDP 0x00800000 - -+/* RX-desc Write-Back format RSS Type's */ -+enum igc_rss_type_num { -+ IGC_RSS_TYPE_NO_HASH = 0, -+ IGC_RSS_TYPE_HASH_TCP_IPV4 = 1, -+ IGC_RSS_TYPE_HASH_IPV4 = 2, -+ IGC_RSS_TYPE_HASH_TCP_IPV6 = 3, -+ IGC_RSS_TYPE_HASH_IPV6_EX = 4, -+ IGC_RSS_TYPE_HASH_IPV6 = 5, -+ IGC_RSS_TYPE_HASH_TCP_IPV6_EX = 6, -+ IGC_RSS_TYPE_HASH_UDP_IPV4 = 7, -+ IGC_RSS_TYPE_HASH_UDP_IPV6 = 8, -+ IGC_RSS_TYPE_HASH_UDP_IPV6_EX = 9, -+ IGC_RSS_TYPE_MAX = 10, -+}; -+#define IGC_RSS_TYPE_MAX_TABLE 16 -+#define IGC_RSS_TYPE_MASK GENMASK(3,0) /* 4-bits (3:0) = mask 0x0F */ -+ -+/* igc_rss_type - Rx descriptor RSS type field */ -+static inline u32 igc_rss_type(const union igc_adv_rx_desc *rx_desc) -+{ -+ /* RSS Type 4-bits (3:0) number: 0-9 (above 9 is reserved) -+ * Accessing the same bits via u16 (wb.lower.lo_dword.hs_rss.pkt_info) -+ * is slightly slower than via u32 (wb.lower.lo_dword.data) -+ */ -+ return le32_get_bits(rx_desc->wb.lower.lo_dword.data, IGC_RSS_TYPE_MASK); -+} -+ - /* Interrupt defines */ - #define IGC_START_ITR 648 /* ~6000 ints/sec */ - #define IGC_4K_ITR 980 -diff --git a/drivers/net/ethernet/intel/igc/igc_main.c b/drivers/net/ethernet/intel/igc/igc_main.c -index fa764190f2705..60ce0fd5bc8bb 100644 ---- a/drivers/net/ethernet/intel/igc/igc_main.c -+++ b/drivers/net/ethernet/intel/igc/igc_main.c -@@ -1697,14 +1697,36 @@ static void igc_rx_checksum(struct igc_ring *ring, - le32_to_cpu(rx_desc->wb.upper.status_error)); - } - -+/* Mapping HW RSS Type to enum pkt_hash_types */ -+static const enum pkt_hash_types igc_rss_type_table[IGC_RSS_TYPE_MAX_TABLE] = { -+ [IGC_RSS_TYPE_NO_HASH] = PKT_HASH_TYPE_L2, -+ [IGC_RSS_TYPE_HASH_TCP_IPV4] = PKT_HASH_TYPE_L4, -+ [IGC_RSS_TYPE_HASH_IPV4] = PKT_HASH_TYPE_L3, -+ [IGC_RSS_TYPE_HASH_TCP_IPV6] = PKT_HASH_TYPE_L4, -+ [IGC_RSS_TYPE_HASH_IPV6_EX] = PKT_HASH_TYPE_L3, -+ [IGC_RSS_TYPE_HASH_IPV6] = PKT_HASH_TYPE_L3, -+ [IGC_RSS_TYPE_HASH_TCP_IPV6_EX] = PKT_HASH_TYPE_L4, -+ [IGC_RSS_TYPE_HASH_UDP_IPV4] = PKT_HASH_TYPE_L4, -+ [IGC_RSS_TYPE_HASH_UDP_IPV6] = PKT_HASH_TYPE_L4, -+ [IGC_RSS_TYPE_HASH_UDP_IPV6_EX] = PKT_HASH_TYPE_L4, -+ [10] = PKT_HASH_TYPE_NONE, /* RSS Type above 9 "Reserved" by HW */ -+ [11] = PKT_HASH_TYPE_NONE, /* keep array sized for SW bit-mask */ -+ [12] = PKT_HASH_TYPE_NONE, /* to handle future HW revisons */ -+ [13] = PKT_HASH_TYPE_NONE, -+ [14] = PKT_HASH_TYPE_NONE, -+ [15] = PKT_HASH_TYPE_NONE, -+}; -+ - static inline void igc_rx_hash(struct igc_ring *ring, - union igc_adv_rx_desc *rx_desc, - struct sk_buff *skb) - { -- if (ring->netdev->features & NETIF_F_RXHASH) -- skb_set_hash(skb, -- le32_to_cpu(rx_desc->wb.lower.hi_dword.rss), -- PKT_HASH_TYPE_L3); -+ if (ring->netdev->features & NETIF_F_RXHASH) { -+ u32 rss_hash = le32_to_cpu(rx_desc->wb.lower.hi_dword.rss); -+ u32 rss_type = igc_rss_type(rx_desc); -+ -+ skb_set_hash(skb, rss_hash, igc_rss_type_table[rss_type]); -+ } - } - - static void igc_rx_vlan(struct igc_ring *rx_ring, -@@ -6561,6 +6583,7 @@ static int igc_probe(struct pci_dev *pdev, - netdev->features |= NETIF_F_TSO; - netdev->features |= NETIF_F_TSO6; - netdev->features |= NETIF_F_TSO_ECN; -+ netdev->features |= NETIF_F_RXHASH; - netdev->features |= NETIF_F_RXCSUM; - netdev->features |= NETIF_F_HW_CSUM; - netdev->features |= NETIF_F_SCTP_CRC; --- -2.39.2 - diff --git a/queue-6.4/igc-fix-race-condition-in-ptp-tx-code.patch b/queue-6.4/igc-fix-race-condition-in-ptp-tx-code.patch deleted file mode 100644 index ffe80906519..00000000000 --- a/queue-6.4/igc-fix-race-condition-in-ptp-tx-code.patch +++ /dev/null @@ -1,237 +0,0 @@ -From 511124fd6e4d76163e6dd0b846e094d9a78101f6 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Wed, 7 Jun 2023 14:32:29 -0700 -Subject: igc: Fix race condition in PTP tx code - -From: Vinicius Costa Gomes - -[ Upstream commit 9c50e2b150c8ee0eee5f8154e2ad168cdd748877 ] - -Currently, the igc driver supports timestamping only one tx packet at a -time. During the transmission flow, the skb that requires hardware -timestamping is saved in adapter->ptp_tx_skb. Once hardware has the -timestamp, an interrupt is delivered, and adapter->ptp_tx_work is -scheduled. In igc_ptp_tx_work(), we read the timestamp register, update -adapter->ptp_tx_skb, and notify the network stack. - -While the thread executing the transmission flow (the user process -running in kernel mode) and the thread executing ptp_tx_work don't -access adapter->ptp_tx_skb concurrently, there are two other places -where adapter->ptp_tx_skb is accessed: igc_ptp_tx_hang() and -igc_ptp_suspend(). - -igc_ptp_tx_hang() is executed by the adapter->watchdog_task worker -thread which runs periodically so it is possible we have two threads -accessing ptp_tx_skb at the same time. Consider the following scenario: -right after __IGC_PTP_TX_IN_PROGRESS is set in igc_xmit_frame_ring(), -igc_ptp_tx_hang() is executed. Since adapter->ptp_tx_start hasn't been -written yet, this is considered a timeout and adapter->ptp_tx_skb is -cleaned up. - -This patch fixes the issue described above by adding the ptp_tx_lock to -protect access to ptp_tx_skb and ptp_tx_start fields from igc_adapter. -Since igc_xmit_frame_ring() called in atomic context by the networking -stack, ptp_tx_lock is defined as a spinlock, and the irq safe variants -of lock/unlock are used. - -With the introduction of the ptp_tx_lock, the __IGC_PTP_TX_IN_PROGRESS -flag doesn't provide much of a use anymore so this patch gets rid of it. - -Fixes: 2c344ae24501 ("igc: Add support for TX timestamping") -Signed-off-by: Andre Guedes -Signed-off-by: Vinicius Costa Gomes -Reviewed-by: Kurt Kanzenbach -Tested-by: Naama Meir -Signed-off-by: Tony Nguyen -Signed-off-by: Sasha Levin ---- - drivers/net/ethernet/intel/igc/igc.h | 5 +- - drivers/net/ethernet/intel/igc/igc_main.c | 9 ++-- - drivers/net/ethernet/intel/igc/igc_ptp.c | 57 ++++++++++++----------- - 3 files changed, 41 insertions(+), 30 deletions(-) - -diff --git a/drivers/net/ethernet/intel/igc/igc.h b/drivers/net/ethernet/intel/igc/igc.h -index f7f9e217e7b42..ef4d284634047 100644 ---- a/drivers/net/ethernet/intel/igc/igc.h -+++ b/drivers/net/ethernet/intel/igc/igc.h -@@ -230,6 +230,10 @@ struct igc_adapter { - struct ptp_clock *ptp_clock; - struct ptp_clock_info ptp_caps; - struct work_struct ptp_tx_work; -+ /* Access to ptp_tx_skb and ptp_tx_start are protected by the -+ * ptp_tx_lock. -+ */ -+ spinlock_t ptp_tx_lock; - struct sk_buff *ptp_tx_skb; - struct hwtstamp_config tstamp_config; - unsigned long ptp_tx_start; -@@ -429,7 +433,6 @@ enum igc_state_t { - __IGC_TESTING, - __IGC_RESETTING, - __IGC_DOWN, -- __IGC_PTP_TX_IN_PROGRESS, - }; - - enum igc_tx_flags { -diff --git a/drivers/net/ethernet/intel/igc/igc_main.c b/drivers/net/ethernet/intel/igc/igc_main.c -index 60ce0fd5bc8bb..fb4b543665f71 100644 ---- a/drivers/net/ethernet/intel/igc/igc_main.c -+++ b/drivers/net/ethernet/intel/igc/igc_main.c -@@ -1590,9 +1590,10 @@ static netdev_tx_t igc_xmit_frame_ring(struct sk_buff *skb, - * the other timer registers before skipping the - * timestamping request. - */ -- if (adapter->tstamp_config.tx_type == HWTSTAMP_TX_ON && -- !test_and_set_bit_lock(__IGC_PTP_TX_IN_PROGRESS, -- &adapter->state)) { -+ unsigned long flags; -+ -+ spin_lock_irqsave(&adapter->ptp_tx_lock, flags); -+ if (adapter->tstamp_config.tx_type == HWTSTAMP_TX_ON && !adapter->ptp_tx_skb) { - skb_shinfo(skb)->tx_flags |= SKBTX_IN_PROGRESS; - tx_flags |= IGC_TX_FLAGS_TSTAMP; - -@@ -1601,6 +1602,8 @@ static netdev_tx_t igc_xmit_frame_ring(struct sk_buff *skb, - } else { - adapter->tx_hwtstamp_skipped++; - } -+ -+ spin_unlock_irqrestore(&adapter->ptp_tx_lock, flags); - } - - if (skb_vlan_tag_present(skb)) { -diff --git a/drivers/net/ethernet/intel/igc/igc_ptp.c b/drivers/net/ethernet/intel/igc/igc_ptp.c -index 4e10ced736dbb..56128e55f5c03 100644 ---- a/drivers/net/ethernet/intel/igc/igc_ptp.c -+++ b/drivers/net/ethernet/intel/igc/igc_ptp.c -@@ -603,6 +603,7 @@ static int igc_ptp_set_timestamp_mode(struct igc_adapter *adapter, - return 0; - } - -+/* Requires adapter->ptp_tx_lock held by caller. */ - static void igc_ptp_tx_timeout(struct igc_adapter *adapter) - { - struct igc_hw *hw = &adapter->hw; -@@ -610,7 +611,6 @@ static void igc_ptp_tx_timeout(struct igc_adapter *adapter) - dev_kfree_skb_any(adapter->ptp_tx_skb); - adapter->ptp_tx_skb = NULL; - adapter->tx_hwtstamp_timeouts++; -- clear_bit_unlock(__IGC_PTP_TX_IN_PROGRESS, &adapter->state); - /* Clear the tx valid bit in TSYNCTXCTL register to enable interrupt. */ - rd32(IGC_TXSTMPH); - netdev_warn(adapter->netdev, "Tx timestamp timeout\n"); -@@ -618,20 +618,20 @@ static void igc_ptp_tx_timeout(struct igc_adapter *adapter) - - void igc_ptp_tx_hang(struct igc_adapter *adapter) - { -- bool timeout = time_is_before_jiffies(adapter->ptp_tx_start + -- IGC_PTP_TX_TIMEOUT); -+ unsigned long flags; - -- if (!test_bit(__IGC_PTP_TX_IN_PROGRESS, &adapter->state)) -- return; -+ spin_lock_irqsave(&adapter->ptp_tx_lock, flags); - -- /* If we haven't received a timestamp within the timeout, it is -- * reasonable to assume that it will never occur, so we can unlock the -- * timestamp bit when this occurs. -- */ -- if (timeout) { -- cancel_work_sync(&adapter->ptp_tx_work); -- igc_ptp_tx_timeout(adapter); -- } -+ if (!adapter->ptp_tx_skb) -+ goto unlock; -+ -+ if (time_is_after_jiffies(adapter->ptp_tx_start + IGC_PTP_TX_TIMEOUT)) -+ goto unlock; -+ -+ igc_ptp_tx_timeout(adapter); -+ -+unlock: -+ spin_unlock_irqrestore(&adapter->ptp_tx_lock, flags); - } - - /** -@@ -641,6 +641,8 @@ void igc_ptp_tx_hang(struct igc_adapter *adapter) - * If we were asked to do hardware stamping and such a time stamp is - * available, then it must have been for this skb here because we only - * allow only one such packet into the queue. -+ * -+ * Context: Expects adapter->ptp_tx_lock to be held by caller. - */ - static void igc_ptp_tx_hwtstamp(struct igc_adapter *adapter) - { -@@ -676,13 +678,7 @@ static void igc_ptp_tx_hwtstamp(struct igc_adapter *adapter) - shhwtstamps.hwtstamp = - ktime_add_ns(shhwtstamps.hwtstamp, adjust); - -- /* Clear the lock early before calling skb_tstamp_tx so that -- * applications are not woken up before the lock bit is clear. We use -- * a copy of the skb pointer to ensure other threads can't change it -- * while we're notifying the stack. -- */ - adapter->ptp_tx_skb = NULL; -- clear_bit_unlock(__IGC_PTP_TX_IN_PROGRESS, &adapter->state); - - /* Notify the stack and free the skb after we've unlocked */ - skb_tstamp_tx(skb, &shhwtstamps); -@@ -693,24 +689,33 @@ static void igc_ptp_tx_hwtstamp(struct igc_adapter *adapter) - * igc_ptp_tx_work - * @work: pointer to work struct - * -- * This work function polls the TSYNCTXCTL valid bit to determine when a -- * timestamp has been taken for the current stored skb. -+ * This work function checks the TSYNCTXCTL valid bit to determine when -+ * a timestamp has been taken for the current stored skb. - */ - static void igc_ptp_tx_work(struct work_struct *work) - { - struct igc_adapter *adapter = container_of(work, struct igc_adapter, - ptp_tx_work); - struct igc_hw *hw = &adapter->hw; -+ unsigned long flags; - u32 tsynctxctl; - -- if (!test_bit(__IGC_PTP_TX_IN_PROGRESS, &adapter->state)) -- return; -+ spin_lock_irqsave(&adapter->ptp_tx_lock, flags); -+ -+ if (!adapter->ptp_tx_skb) -+ goto unlock; - - tsynctxctl = rd32(IGC_TSYNCTXCTL); -- if (WARN_ON_ONCE(!(tsynctxctl & IGC_TSYNCTXCTL_TXTT_0))) -- return; -+ tsynctxctl &= IGC_TSYNCTXCTL_TXTT_0; -+ if (!tsynctxctl) { -+ WARN_ONCE(1, "Received a TSTAMP interrupt but no TSTAMP is ready.\n"); -+ goto unlock; -+ } - - igc_ptp_tx_hwtstamp(adapter); -+ -+unlock: -+ spin_unlock_irqrestore(&adapter->ptp_tx_lock, flags); - } - - /** -@@ -959,6 +964,7 @@ void igc_ptp_init(struct igc_adapter *adapter) - return; - } - -+ spin_lock_init(&adapter->ptp_tx_lock); - spin_lock_init(&adapter->tmreg_lock); - INIT_WORK(&adapter->ptp_tx_work, igc_ptp_tx_work); - -@@ -1023,7 +1029,6 @@ void igc_ptp_suspend(struct igc_adapter *adapter) - cancel_work_sync(&adapter->ptp_tx_work); - dev_kfree_skb_any(adapter->ptp_tx_skb); - adapter->ptp_tx_skb = NULL; -- clear_bit_unlock(__IGC_PTP_TX_IN_PROGRESS, &adapter->state); - - if (pci_device_is_present(adapter->pdev)) { - igc_ptp_time_save(adapter); --- -2.39.2 - diff --git a/queue-6.4/igc-retrieve-tx-timestamp-during-interrupt-handling.patch b/queue-6.4/igc-retrieve-tx-timestamp-during-interrupt-handling.patch deleted file mode 100644 index b391855c496..00000000000 --- a/queue-6.4/igc-retrieve-tx-timestamp-during-interrupt-handling.patch +++ /dev/null @@ -1,159 +0,0 @@ -From 0ffdf1e22295afe21f4aaedcc91f928e4479386c Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Wed, 7 Jun 2023 14:32:31 -0700 -Subject: igc: Retrieve TX timestamp during interrupt handling - -From: Vinicius Costa Gomes - -[ Upstream commit afa141583d82725f682b2fa762cb36a07f58b3f3 ] - -When the interrupt is handled, the TXTT_0 bit in the TSYNCTXCTL -register should already be set and the timestamp value already loaded -in the appropriate register. - -This simplifies the handling, and reduces the latency for retrieving -the TX timestamp, which increase the amount of TX timestamps that can -be handled in a given time period. - -As the "work" function doesn't run in a workqueue anymore, rename it -to something more sensible, a event handler. - -Using ntpperf[1] we can see the following performance improvements: - -Before: - -$ sudo ./ntpperf -i enp3s0 -m 10:22:22:22:22:21 -d 192.168.1.3 -s 172.18.0.0/16 -I -H -o -37 - | responses | TX timestamp offset (ns) -rate clients | lost invalid basic xleave | min mean max stddev -1000 100 0.00% 0.00% 0.00% 100.00% -56 +9 +52 19 -1500 150 0.00% 0.00% 0.00% 100.00% -40 +30 +75 22 -2250 225 0.00% 0.00% 0.00% 100.00% -11 +29 +72 15 -3375 337 0.00% 0.00% 0.00% 100.00% -18 +40 +88 22 -5062 506 0.00% 0.00% 0.00% 100.00% -19 +23 +77 15 -7593 759 0.00% 0.00% 0.00% 100.00% +7 +47 +5168 43 -11389 1138 0.00% 0.00% 0.00% 100.00% -11 +41 +5240 39 -17083 1708 0.00% 0.00% 0.00% 100.00% +19 +60 +5288 50 -25624 2562 0.00% 0.00% 0.00% 100.00% +1 +56 +5368 58 -38436 3843 0.00% 0.00% 0.00% 100.00% -84 +12 +8847 66 -57654 5765 0.00% 0.00% 100.00% 0.00% -86481 8648 0.00% 0.00% 100.00% 0.00% -129721 12972 0.00% 0.00% 100.00% 0.00% -194581 16384 0.00% 0.00% 100.00% 0.00% -291871 16384 27.35% 0.00% 72.65% 0.00% -437806 16384 50.05% 0.00% 49.95% 0.00% - -After: - -$ sudo ./ntpperf -i enp3s0 -m 10:22:22:22:22:21 -d 192.168.1.3 -s 172.18.0.0/16 -I -H -o -37 - | responses | TX timestamp offset (ns) -rate clients | lost invalid basic xleave | min mean max stddev -1000 100 0.00% 0.00% 0.00% 100.00% -44 +0 +61 19 -1500 150 0.00% 0.00% 0.00% 100.00% -6 +39 +81 16 -2250 225 0.00% 0.00% 0.00% 100.00% -22 +25 +69 15 -3375 337 0.00% 0.00% 0.00% 100.00% -28 +15 +56 14 -5062 506 0.00% 0.00% 0.00% 100.00% +7 +78 +143 27 -7593 759 0.00% 0.00% 0.00% 100.00% -54 +24 +144 47 -11389 1138 0.00% 0.00% 0.00% 100.00% -90 -33 +28 21 -17083 1708 0.00% 0.00% 0.00% 100.00% -50 -2 +35 14 -25624 2562 0.00% 0.00% 0.00% 100.00% -62 +7 +66 23 -38436 3843 0.00% 0.00% 0.00% 100.00% -33 +30 +5395 36 -57654 5765 0.00% 0.00% 100.00% 0.00% -86481 8648 0.00% 0.00% 100.00% 0.00% -129721 12972 0.00% 0.00% 100.00% 0.00% -194581 16384 19.50% 0.00% 80.50% 0.00% -291871 16384 35.81% 0.00% 64.19% 0.00% -437806 16384 55.40% 0.00% 44.60% 0.00% - -[1] https://github.com/mlichvar/ntpperf - -Signed-off-by: Vinicius Costa Gomes -Reviewed-by: Kurt Kanzenbach -Tested-by: Naama Meir -Signed-off-by: Tony Nguyen -Stable-dep-of: c789ad7cbebc ("igc: Work around HW bug causing missing timestamps") -Signed-off-by: Sasha Levin ---- - drivers/net/ethernet/intel/igc/igc.h | 2 +- - drivers/net/ethernet/intel/igc/igc_main.c | 2 +- - drivers/net/ethernet/intel/igc/igc_ptp.c | 15 +++++---------- - 3 files changed, 7 insertions(+), 12 deletions(-) - -diff --git a/drivers/net/ethernet/intel/igc/igc.h b/drivers/net/ethernet/intel/igc/igc.h -index 70de8b9bbe591..9dc9b982a7ea6 100644 ---- a/drivers/net/ethernet/intel/igc/igc.h -+++ b/drivers/net/ethernet/intel/igc/igc.h -@@ -229,7 +229,6 @@ struct igc_adapter { - - struct ptp_clock *ptp_clock; - struct ptp_clock_info ptp_caps; -- struct work_struct ptp_tx_work; - /* Access to ptp_tx_skb and ptp_tx_start are protected by the - * ptp_tx_lock. - */ -@@ -666,6 +665,7 @@ int igc_ptp_set_ts_config(struct net_device *netdev, struct ifreq *ifr); - int igc_ptp_get_ts_config(struct net_device *netdev, struct ifreq *ifr); - void igc_ptp_tx_hang(struct igc_adapter *adapter); - void igc_ptp_read(struct igc_adapter *adapter, struct timespec64 *ts); -+void igc_ptp_tx_tstamp_event(struct igc_adapter *adapter); - - #define igc_rx_pg_size(_ring) (PAGE_SIZE << igc_rx_pg_order(_ring)) - -diff --git a/drivers/net/ethernet/intel/igc/igc_main.c b/drivers/net/ethernet/intel/igc/igc_main.c -index d0c067da7aac8..5f2e8bcd75973 100644 ---- a/drivers/net/ethernet/intel/igc/igc_main.c -+++ b/drivers/net/ethernet/intel/igc/igc_main.c -@@ -5245,7 +5245,7 @@ static void igc_tsync_interrupt(struct igc_adapter *adapter) - - if (tsicr & IGC_TSICR_TXTS) { - /* retrieve hardware timestamp */ -- schedule_work(&adapter->ptp_tx_work); -+ igc_ptp_tx_tstamp_event(adapter); - ack |= IGC_TSICR_TXTS; - } - -diff --git a/drivers/net/ethernet/intel/igc/igc_ptp.c b/drivers/net/ethernet/intel/igc/igc_ptp.c -index 42f622ceb64bb..cf963a12a92fe 100644 ---- a/drivers/net/ethernet/intel/igc/igc_ptp.c -+++ b/drivers/net/ethernet/intel/igc/igc_ptp.c -@@ -540,8 +540,6 @@ static void igc_ptp_clear_tx_tstamp(struct igc_adapter *adapter) - { - unsigned long flags; - -- cancel_work_sync(&adapter->ptp_tx_work); -- - spin_lock_irqsave(&adapter->ptp_tx_lock, flags); - - dev_kfree_skb_any(adapter->ptp_tx_skb); -@@ -724,16 +722,14 @@ static void igc_ptp_tx_hwtstamp(struct igc_adapter *adapter) - } - - /** -- * igc_ptp_tx_work -- * @work: pointer to work struct -+ * igc_ptp_tx_tstamp_event -+ * @adapter: board private structure - * -- * This work function checks the TSYNCTXCTL valid bit to determine when -- * a timestamp has been taken for the current stored skb. -+ * Called when a TX timestamp interrupt happens to retrieve the -+ * timestamp and send it up to the socket. - */ --static void igc_ptp_tx_work(struct work_struct *work) -+void igc_ptp_tx_tstamp_event(struct igc_adapter *adapter) - { -- struct igc_adapter *adapter = container_of(work, struct igc_adapter, -- ptp_tx_work); - struct igc_hw *hw = &adapter->hw; - unsigned long flags; - u32 tsynctxctl; -@@ -1004,7 +1000,6 @@ void igc_ptp_init(struct igc_adapter *adapter) - - spin_lock_init(&adapter->ptp_tx_lock); - spin_lock_init(&adapter->tmreg_lock); -- INIT_WORK(&adapter->ptp_tx_work, igc_ptp_tx_work); - - adapter->tstamp_config.rx_filter = HWTSTAMP_FILTER_NONE; - adapter->tstamp_config.tx_type = HWTSTAMP_TX_OFF; --- -2.39.2 - diff --git a/queue-6.4/igc-work-around-hw-bug-causing-missing-timestamps.patch b/queue-6.4/igc-work-around-hw-bug-causing-missing-timestamps.patch deleted file mode 100644 index d149c1ee541..00000000000 --- a/queue-6.4/igc-work-around-hw-bug-causing-missing-timestamps.patch +++ /dev/null @@ -1,120 +0,0 @@ -From 595a7666b9657062ddeba3c5748d63633482d15a Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Wed, 7 Jun 2023 14:32:32 -0700 -Subject: igc: Work around HW bug causing missing timestamps - -From: Vinicius Costa Gomes - -[ Upstream commit c789ad7cbebcac5d5f417296c140a1252c689524 ] - -There's an hardware issue that can cause missing timestamps. The bug -is that the interrupt is only cleared if the IGC_TXSTMPH_0 register is -read. - -The bug can cause a race condition if a timestamp is captured at the -wrong time, and we will miss that timestamp. To reduce the time window -that the problem is able to happen, in case no timestamp was ready, we -read the "previous" value of the timestamp registers, and we compare -with the "current" one, if it didn't change we can be reasonably sure -that no timestamp was captured. If they are different, we use the new -value as the captured timestamp. - -The HW bug is not easy to reproduce, got to reproduce it when smashing -the NIC with timestamping requests from multiple applications (e.g. -multiple ntpperf instances + ptp4l), after 10s of minutes. - -This workaround has more impact when multiple timestamp registers are -used, and the IGC_TXSTMPH_0 register always need to be read, so the -interrupt is cleared. - -Fixes: 2c344ae24501 ("igc: Add support for TX timestamping") -Signed-off-by: Vinicius Costa Gomes -Tested-by: Naama Meir -Signed-off-by: Tony Nguyen -Signed-off-by: Sasha Levin ---- - drivers/net/ethernet/intel/igc/igc_ptp.c | 48 ++++++++++++++++++------ - 1 file changed, 37 insertions(+), 11 deletions(-) - -diff --git a/drivers/net/ethernet/intel/igc/igc_ptp.c b/drivers/net/ethernet/intel/igc/igc_ptp.c -index cf963a12a92fe..32ef112f8291a 100644 ---- a/drivers/net/ethernet/intel/igc/igc_ptp.c -+++ b/drivers/net/ethernet/intel/igc/igc_ptp.c -@@ -685,14 +685,49 @@ static void igc_ptp_tx_hwtstamp(struct igc_adapter *adapter) - struct sk_buff *skb = adapter->ptp_tx_skb; - struct skb_shared_hwtstamps shhwtstamps; - struct igc_hw *hw = &adapter->hw; -+ u32 tsynctxctl; - int adjust = 0; - u64 regval; - - if (WARN_ON_ONCE(!skb)) - return; - -- regval = rd32(IGC_TXSTMPL); -- regval |= (u64)rd32(IGC_TXSTMPH) << 32; -+ tsynctxctl = rd32(IGC_TSYNCTXCTL); -+ tsynctxctl &= IGC_TSYNCTXCTL_TXTT_0; -+ if (tsynctxctl) { -+ regval = rd32(IGC_TXSTMPL); -+ regval |= (u64)rd32(IGC_TXSTMPH) << 32; -+ } else { -+ /* There's a bug in the hardware that could cause -+ * missing interrupts for TX timestamping. The issue -+ * is that for new interrupts to be triggered, the -+ * IGC_TXSTMPH_0 register must be read. -+ * -+ * To avoid discarding a valid timestamp that just -+ * happened at the "wrong" time, we need to confirm -+ * that there was no timestamp captured, we do that by -+ * assuming that no two timestamps in sequence have -+ * the same nanosecond value. -+ * -+ * So, we read the "low" register, read the "high" -+ * register (to latch a new timestamp) and read the -+ * "low" register again, if "old" and "new" versions -+ * of the "low" register are different, a valid -+ * timestamp was captured, we can read the "high" -+ * register again. -+ */ -+ u32 txstmpl_old, txstmpl_new; -+ -+ txstmpl_old = rd32(IGC_TXSTMPL); -+ rd32(IGC_TXSTMPH); -+ txstmpl_new = rd32(IGC_TXSTMPL); -+ -+ if (txstmpl_old == txstmpl_new) -+ return; -+ -+ regval = txstmpl_new; -+ regval |= (u64)rd32(IGC_TXSTMPH) << 32; -+ } - if (igc_ptp_systim_to_hwtstamp(adapter, &shhwtstamps, regval)) - return; - -@@ -730,22 +765,13 @@ static void igc_ptp_tx_hwtstamp(struct igc_adapter *adapter) - */ - void igc_ptp_tx_tstamp_event(struct igc_adapter *adapter) - { -- struct igc_hw *hw = &adapter->hw; - unsigned long flags; -- u32 tsynctxctl; - - spin_lock_irqsave(&adapter->ptp_tx_lock, flags); - - if (!adapter->ptp_tx_skb) - goto unlock; - -- tsynctxctl = rd32(IGC_TSYNCTXCTL); -- tsynctxctl &= IGC_TSYNCTXCTL_TXTT_0; -- if (!tsynctxctl) { -- WARN_ONCE(1, "Received a TSTAMP interrupt but no TSTAMP is ready.\n"); -- goto unlock; -- } -- - igc_ptp_tx_hwtstamp(adapter); - - unlock: --- -2.39.2 - diff --git a/queue-6.4/ima-fix-build-warnings.patch b/queue-6.4/ima-fix-build-warnings.patch deleted file mode 100644 index 424506c0c81..00000000000 --- a/queue-6.4/ima-fix-build-warnings.patch +++ /dev/null @@ -1,61 +0,0 @@ -From 3822e2a612635f86bbb2b19070888e8859a15598 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Tue, 6 Jun 2023 09:41:13 +0200 -Subject: ima: Fix build warnings - -From: Roberto Sassu - -[ Upstream commit 95526d13038c2bbddd567a4d8e39fac42484e182 ] - -Fix build warnings (function parameters description) for -ima_collect_modsig(), ima_match_policy() and ima_parse_add_rule(). - -Fixes: 15588227e086 ("ima: Collect modsig") # v5.4+ -Fixes: 2fe5d6def167 ("ima: integrity appraisal extension") # v5.14+ -Fixes: 4af4662fa4a9 ("integrity: IMA policy") # v3.2+ -Signed-off-by: Roberto Sassu -Signed-off-by: Mimi Zohar -Signed-off-by: Sasha Levin ---- - security/integrity/ima/ima_modsig.c | 3 +++ - security/integrity/ima/ima_policy.c | 3 ++- - 2 files changed, 5 insertions(+), 1 deletion(-) - -diff --git a/security/integrity/ima/ima_modsig.c b/security/integrity/ima/ima_modsig.c -index fb25723c65bc4..3e7bee30080f2 100644 ---- a/security/integrity/ima/ima_modsig.c -+++ b/security/integrity/ima/ima_modsig.c -@@ -89,6 +89,9 @@ int ima_read_modsig(enum ima_hooks func, const void *buf, loff_t buf_len, - - /** - * ima_collect_modsig - Calculate the file hash without the appended signature. -+ * @modsig: parsed module signature -+ * @buf: data to verify the signature on -+ * @size: data size - * - * Since the modsig is part of the file contents, the hash used in its signature - * isn't the same one ordinarily calculated by IMA. Therefore PKCS7 code -diff --git a/security/integrity/ima/ima_policy.c b/security/integrity/ima/ima_policy.c -index 3ca8b7348c2e4..c9b3bd8f1bb9c 100644 ---- a/security/integrity/ima/ima_policy.c -+++ b/security/integrity/ima/ima_policy.c -@@ -721,6 +721,7 @@ static int get_subaction(struct ima_rule_entry *rule, enum ima_hooks func) - * @secid: LSM secid of the task to be validated - * @func: IMA hook identifier - * @mask: requested action (MAY_READ | MAY_WRITE | MAY_APPEND | MAY_EXEC) -+ * @flags: IMA actions to consider (e.g. IMA_MEASURE | IMA_APPRAISE) - * @pcr: set the pcr to extend - * @template_desc: the template that should be used for this rule - * @func_data: func specific data, may be NULL -@@ -1915,7 +1916,7 @@ static int ima_parse_rule(char *rule, struct ima_rule_entry *entry) - - /** - * ima_parse_add_rule - add a rule to ima_policy_rules -- * @rule - ima measurement policy rule -+ * @rule: ima measurement policy rule - * - * Avoid locking by allowing just one writer at a time in ima_write_policy() - * Returns the length of the rule parsed, an error code on failure --- -2.39.2 - diff --git a/queue-6.4/input-ads7846-convert-to-use-software-nodes.patch b/queue-6.4/input-ads7846-convert-to-use-software-nodes.patch deleted file mode 100644 index 0121c2d2a17..00000000000 --- a/queue-6.4/input-ads7846-convert-to-use-software-nodes.patch +++ /dev/null @@ -1,610 +0,0 @@ -From c294f981cacd5723b1e2c15377db3ebef7630716 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Mon, 8 May 2023 23:20:06 +0200 -Subject: Input: ads7846 - Convert to use software nodes - -From: Linus Walleij - -[ Upstream commit 767d83361aaa6a1ecb4d5b89eeb38a267239917a ] - -The Nokia 770 is using GPIOs from the global numberspace on the -CBUS node to pass down to the LCD controller. This regresses when we -let the OMAP GPIO driver use dynamic GPIO base. - -The Nokia 770 now has dynamic allocation of IRQ numbers, so this -needs to be fixed for it to work. - -As this is the only user of LCD MIPID we can easily augment the -driver to use a GPIO descriptor instead and resolve the issue. - -The platform data .shutdown() callback wasn't even used in the -code, but we encode a shutdown asserting RESET in the remove() -callback for completeness sake. - -The CBUS also has the ADS7846 touchscreen attached. - -Populate the devices on the Nokia 770 CBUS I2C using software -nodes instead of platform data quirks. This includes the LCD -and the ADS7846 touchscreen so the conversion just brings the LCD -along with it as software nodes is an all-or-nothing design -pattern. - -The ADS7846 has some limited support for using GPIO descriptors, -let's convert it over completely to using device properties and then -fix all remaining boardfile users to provide all platform data using -software nodes. - -Dump the of includes and of_match_ptr() in the ADS7846 driver as part -of the job. - -Since we have to move ADS7846 over to obtaining the GPIOs it is -using exclusively from descriptors, we provide descriptor tables -for the two remaining in-kernel boardfiles using ADS7846: - -- PXA Spitz -- MIPS Alchemy DB1000 development board - -It was too hard for me to include software node conversion of -these two remaining users at this time: the spitz is using a -hscync callback in the platform data that would require further -GPIO descriptor conversion of the Spitz, and moving the hsync -callback down into the driver: it will just become too big of -a job, but it can be done separately. - -The MIPS Alchemy DB1000 is simply something I cannot test, so take -the easier approach of just providing some GPIO descriptors in -this case as I don't want the patch to grow too intrusive. - -As we see that several device trees have incorrect polarity flags -and just expect to bypass the gpiolib polarity handling, fix up -all device trees too, in a separate patch. - -Suggested-by: Dmitry Torokhov -Fixes: 92bf78b33b0b ("gpio: omap: use dynamic allocation of base") -Acked-by: Dmitry Torokhov -Reviewed-by: Dmitry Torokhov -Signed-off-by: Linus Walleij -Signed-off-by: Sasha Levin ---- - arch/arm/mach-omap1/board-nokia770.c | 99 ++++++++++++++------- - arch/arm/mach-pxa/spitz.c | 11 ++- - arch/mips/alchemy/devboards/db1000.c | 11 ++- - drivers/input/touchscreen/ads7846.c | 113 +++++++++--------------- - drivers/video/fbdev/omap/lcd_mipid.c | 10 +++ - include/linux/platform_data/lcd-mipid.h | 2 - - include/linux/spi/ads7846.h | 2 - - 7 files changed, 136 insertions(+), 112 deletions(-) - -diff --git a/arch/arm/mach-omap1/board-nokia770.c b/arch/arm/mach-omap1/board-nokia770.c -index a501a473ffd68..dde74694cb4c0 100644 ---- a/arch/arm/mach-omap1/board-nokia770.c -+++ b/arch/arm/mach-omap1/board-nokia770.c -@@ -8,15 +8,16 @@ - #include - #include - #include -+#include - #include - #include - #include - #include -+#include - #include - #include - - #include --#include - #include - #include - -@@ -35,6 +36,25 @@ - #include "clock.h" - #include "mmc.h" - -+static const struct software_node nokia770_mpuio_gpiochip_node = { -+ .name = "mpuio", -+}; -+ -+static const struct software_node nokia770_gpiochip1_node = { -+ .name = "gpio-0-15", -+}; -+ -+static const struct software_node nokia770_gpiochip2_node = { -+ .name = "gpio-16-31", -+}; -+ -+static const struct software_node *nokia770_gpiochip_nodes[] = { -+ &nokia770_mpuio_gpiochip_node, -+ &nokia770_gpiochip1_node, -+ &nokia770_gpiochip2_node, -+ NULL -+}; -+ - #define ADS7846_PENDOWN_GPIO 15 - - static const unsigned int nokia770_keymap[] = { -@@ -85,40 +105,47 @@ static struct platform_device *nokia770_devices[] __initdata = { - &nokia770_kp_device, - }; - --static void mipid_shutdown(struct mipid_platform_data *pdata) --{ -- if (pdata->nreset_gpio != -1) { -- printk(KERN_INFO "shutdown LCD\n"); -- gpio_set_value(pdata->nreset_gpio, 0); -- msleep(120); -- } --} -- --static struct mipid_platform_data nokia770_mipid_platform_data = { -- .shutdown = mipid_shutdown, --}; -+static struct mipid_platform_data nokia770_mipid_platform_data = { }; - - static const struct omap_lcd_config nokia770_lcd_config __initconst = { - .ctrl_name = "hwa742", - }; - -+static const struct property_entry nokia770_mipid_props[] = { -+ PROPERTY_ENTRY_GPIO("reset-gpios", &nokia770_gpiochip1_node, -+ 13, GPIO_ACTIVE_LOW), -+ { } -+}; -+ -+static const struct software_node nokia770_mipid_swnode = { -+ .name = "lcd_mipid", -+ .properties = nokia770_mipid_props, -+}; -+ - static void __init mipid_dev_init(void) - { -- nokia770_mipid_platform_data.nreset_gpio = 13; - nokia770_mipid_platform_data.data_lines = 16; - - omapfb_set_lcd_config(&nokia770_lcd_config); - } - --static struct ads7846_platform_data nokia770_ads7846_platform_data __initdata = { -- .x_max = 0x0fff, -- .y_max = 0x0fff, -- .x_plate_ohms = 180, -- .pressure_max = 255, -- .debounce_max = 10, -- .debounce_tol = 3, -- .debounce_rep = 1, -- .gpio_pendown = ADS7846_PENDOWN_GPIO, -+static const struct property_entry nokia770_ads7846_props[] = { -+ PROPERTY_ENTRY_STRING("compatible", "ti,ads7846"), -+ PROPERTY_ENTRY_U32("touchscreen-size-x", 4096), -+ PROPERTY_ENTRY_U32("touchscreen-size-y", 4096), -+ PROPERTY_ENTRY_U32("touchscreen-max-pressure", 256), -+ PROPERTY_ENTRY_U32("touchscreen-average-samples", 10), -+ PROPERTY_ENTRY_U16("ti,x-plate-ohms", 180), -+ PROPERTY_ENTRY_U16("ti,debounce-tol", 3), -+ PROPERTY_ENTRY_U16("ti,debounce-rep", 1), -+ PROPERTY_ENTRY_GPIO("pendown-gpios", &nokia770_gpiochip1_node, -+ ADS7846_PENDOWN_GPIO, GPIO_ACTIVE_LOW), -+ { } -+}; -+ -+static const struct software_node nokia770_ads7846_swnode = { -+ .name = "ads7846", -+ .properties = nokia770_ads7846_props, - }; - - static struct spi_board_info nokia770_spi_board_info[] __initdata = { -@@ -128,13 +155,14 @@ static struct spi_board_info nokia770_spi_board_info[] __initdata = { - .chip_select = 3, - .max_speed_hz = 12000000, - .platform_data = &nokia770_mipid_platform_data, -+ .swnode = &nokia770_mipid_swnode, - }, - [1] = { - .modalias = "ads7846", - .bus_num = 2, - .chip_select = 0, - .max_speed_hz = 2500000, -- .platform_data = &nokia770_ads7846_platform_data, -+ .swnode = &nokia770_ads7846_swnode, - }, - }; - -@@ -212,14 +240,16 @@ static inline void nokia770_mmc_init(void) - #endif - - #if IS_ENABLED(CONFIG_I2C_CBUS_GPIO) --static struct gpiod_lookup_table nokia770_cbus_gpio_table = { -- .dev_id = "i2c-cbus-gpio.2", -- .table = { -- GPIO_LOOKUP_IDX("mpuio", 9, NULL, 0, 0), /* clk */ -- GPIO_LOOKUP_IDX("mpuio", 10, NULL, 1, 0), /* dat */ -- GPIO_LOOKUP_IDX("mpuio", 11, NULL, 2, 0), /* sel */ -- { }, -- }, -+ -+static const struct software_node_ref_args nokia770_cbus_gpio_refs[] = { -+ SOFTWARE_NODE_REFERENCE(&nokia770_mpuio_gpiochip_node, 9, 0), -+ SOFTWARE_NODE_REFERENCE(&nokia770_mpuio_gpiochip_node, 10, 0), -+ SOFTWARE_NODE_REFERENCE(&nokia770_mpuio_gpiochip_node, 11, 0), -+}; -+ -+static const struct property_entry nokia770_cbus_props[] = { -+ PROPERTY_ENTRY_REF_ARRAY("gpios", nokia770_cbus_gpio_refs), -+ { } - }; - - static struct platform_device nokia770_cbus_device = { -@@ -253,7 +283,8 @@ static void __init nokia770_cbus_init(void) - nokia770_i2c_board_info_2[1].irq = gpio_to_irq(tahvo_irq_gpio); - i2c_register_board_info(2, nokia770_i2c_board_info_2, - ARRAY_SIZE(nokia770_i2c_board_info_2)); -- gpiod_add_lookup_table(&nokia770_cbus_gpio_table); -+ device_create_managed_software_node(&nokia770_cbus_device.dev, -+ nokia770_cbus_props, NULL); - platform_device_register(&nokia770_cbus_device); - } - #else /* CONFIG_I2C_CBUS_GPIO */ -@@ -273,8 +304,8 @@ static void __init omap_nokia770_init(void) - /* Unmask SleepX signal */ - omap_writew((omap_readw(0xfffb5004) & ~2), 0xfffb5004); - -+ software_node_register_node_group(nokia770_gpiochip_nodes); - platform_add_devices(nokia770_devices, ARRAY_SIZE(nokia770_devices)); -- nokia770_spi_board_info[1].irq = gpio_to_irq(15); - spi_register_board_info(nokia770_spi_board_info, - ARRAY_SIZE(nokia770_spi_board_info)); - omap_serial_init(); -diff --git a/arch/arm/mach-pxa/spitz.c b/arch/arm/mach-pxa/spitz.c -index 4325bdc2b9ff8..28e376e06fdc8 100644 ---- a/arch/arm/mach-pxa/spitz.c -+++ b/arch/arm/mach-pxa/spitz.c -@@ -506,10 +506,18 @@ static struct ads7846_platform_data spitz_ads7846_info = { - .x_plate_ohms = 419, - .y_plate_ohms = 486, - .pressure_max = 1024, -- .gpio_pendown = SPITZ_GPIO_TP_INT, - .wait_for_sync = spitz_ads7846_wait_for_hsync, - }; - -+static struct gpiod_lookup_table spitz_ads7846_gpio_table = { -+ .dev_id = "spi2.0", -+ .table = { -+ GPIO_LOOKUP("gpio-pxa", SPITZ_GPIO_TP_INT, -+ "pendown", GPIO_ACTIVE_LOW), -+ { } -+ }, -+}; -+ - static void spitz_bl_kick_battery(void) - { - void (*kick_batt)(void); -@@ -594,6 +602,7 @@ static void __init spitz_spi_init(void) - else - gpiod_add_lookup_table(&spitz_lcdcon_gpio_table); - -+ gpiod_add_lookup_table(&spitz_ads7846_gpio_table); - gpiod_add_lookup_table(&spitz_spi_gpio_table); - pxa2xx_set_spi_info(2, &spitz_spi_info); - spi_register_board_info(ARRAY_AND_SIZE(spitz_spi_devices)); -diff --git a/arch/mips/alchemy/devboards/db1000.c b/arch/mips/alchemy/devboards/db1000.c -index 2c52ee27b4f25..79d66faa84828 100644 ---- a/arch/mips/alchemy/devboards/db1000.c -+++ b/arch/mips/alchemy/devboards/db1000.c -@@ -381,13 +381,21 @@ static struct platform_device db1100_mmc1_dev = { - static struct ads7846_platform_data db1100_touch_pd = { - .model = 7846, - .vref_mv = 3300, -- .gpio_pendown = 21, - }; - - static struct spi_gpio_platform_data db1100_spictl_pd = { - .num_chipselect = 1, - }; - -+static struct gpiod_lookup_table db1100_touch_gpio_table = { -+ .dev_id = "spi0.0", -+ .table = { -+ GPIO_LOOKUP("alchemy-gpio2", 21, -+ "pendown", GPIO_ACTIVE_LOW), -+ { } -+ }, -+}; -+ - static struct spi_board_info db1100_spi_info[] __initdata = { - [0] = { - .modalias = "ads7846", -@@ -474,6 +482,7 @@ int __init db1000_dev_setup(void) - pfc |= (1 << 0); /* SSI0 pins as GPIOs */ - alchemy_wrsys(pfc, AU1000_SYS_PINFUNC); - -+ gpiod_add_lookup_table(&db1100_touch_gpio_table); - spi_register_board_info(db1100_spi_info, - ARRAY_SIZE(db1100_spi_info)); - -diff --git a/drivers/input/touchscreen/ads7846.c b/drivers/input/touchscreen/ads7846.c -index bb1058b1e7fd4..40eb27f1b23f3 100644 ---- a/drivers/input/touchscreen/ads7846.c -+++ b/drivers/input/touchscreen/ads7846.c -@@ -24,11 +24,8 @@ - #include - #include - #include --#include --#include --#include -+#include - #include --#include - #include - #include - #include -@@ -140,7 +137,7 @@ struct ads7846 { - int (*filter)(void *data, int data_idx, int *val); - void *filter_data; - int (*get_pendown_state)(void); -- int gpio_pendown; -+ struct gpio_desc *gpio_pendown; - - void (*wait_for_sync)(void); - }; -@@ -223,7 +220,7 @@ static int get_pendown_state(struct ads7846 *ts) - if (ts->get_pendown_state) - return ts->get_pendown_state(); - -- return !gpio_get_value(ts->gpio_pendown); -+ return gpiod_get_value(ts->gpio_pendown); - } - - static void ads7846_report_pen_up(struct ads7846 *ts) -@@ -989,8 +986,6 @@ static int ads7846_setup_pendown(struct spi_device *spi, - struct ads7846 *ts, - const struct ads7846_platform_data *pdata) - { -- int err; -- - /* - * REVISIT when the irq can be triggered active-low, or if for some - * reason the touchscreen isn't hooked up, we don't need to access -@@ -999,25 +994,15 @@ static int ads7846_setup_pendown(struct spi_device *spi, - - if (pdata->get_pendown_state) { - ts->get_pendown_state = pdata->get_pendown_state; -- } else if (gpio_is_valid(pdata->gpio_pendown)) { -- -- err = devm_gpio_request_one(&spi->dev, pdata->gpio_pendown, -- GPIOF_IN, "ads7846_pendown"); -- if (err) { -- dev_err(&spi->dev, -- "failed to request/setup pendown GPIO%d: %d\n", -- pdata->gpio_pendown, err); -- return err; -+ } else { -+ ts->gpio_pendown = gpiod_get(&spi->dev, "pendown", GPIOD_IN); -+ if (IS_ERR(ts->gpio_pendown)) { -+ dev_err(&spi->dev, "failed to request pendown GPIO\n"); -+ return PTR_ERR(ts->gpio_pendown); - } -- -- ts->gpio_pendown = pdata->gpio_pendown; -- - if (pdata->gpio_pendown_debounce) -- gpiod_set_debounce(gpio_to_desc(ts->gpio_pendown), -+ gpiod_set_debounce(ts->gpio_pendown, - pdata->gpio_pendown_debounce); -- } else { -- dev_err(&spi->dev, "no get_pendown_state nor gpio_pendown?\n"); -- return -EINVAL; - } - - return 0; -@@ -1119,7 +1104,6 @@ static int ads7846_setup_spi_msg(struct ads7846 *ts, - return 0; - } - --#ifdef CONFIG_OF - static const struct of_device_id ads7846_dt_ids[] = { - { .compatible = "ti,tsc2046", .data = (void *) 7846 }, - { .compatible = "ti,ads7843", .data = (void *) 7843 }, -@@ -1130,20 +1114,14 @@ static const struct of_device_id ads7846_dt_ids[] = { - }; - MODULE_DEVICE_TABLE(of, ads7846_dt_ids); - --static const struct ads7846_platform_data *ads7846_probe_dt(struct device *dev) -+static const struct ads7846_platform_data *ads7846_get_props(struct device *dev) - { - struct ads7846_platform_data *pdata; -- struct device_node *node = dev->of_node; -- const struct of_device_id *match; -+ const struct platform_device_id *pdev_id; - u32 value; - -- if (!node) { -- dev_err(dev, "Device does not have associated DT data\n"); -- return ERR_PTR(-EINVAL); -- } -- -- match = of_match_device(ads7846_dt_ids, dev); -- if (!match) { -+ pdev_id = device_get_match_data(dev); -+ if (!pdev_id) { - dev_err(dev, "Unknown device model\n"); - return ERR_PTR(-EINVAL); - } -@@ -1152,60 +1130,51 @@ static const struct ads7846_platform_data *ads7846_probe_dt(struct device *dev) - if (!pdata) - return ERR_PTR(-ENOMEM); - -- pdata->model = (unsigned long)match->data; -+ pdata->model = (unsigned long)pdev_id->driver_data; - -- of_property_read_u16(node, "ti,vref-delay-usecs", -- &pdata->vref_delay_usecs); -- of_property_read_u16(node, "ti,vref-mv", &pdata->vref_mv); -- pdata->keep_vref_on = of_property_read_bool(node, "ti,keep-vref-on"); -+ device_property_read_u16(dev, "ti,vref-delay-usecs", -+ &pdata->vref_delay_usecs); -+ device_property_read_u16(dev, "ti,vref-mv", &pdata->vref_mv); -+ pdata->keep_vref_on = device_property_read_bool(dev, "ti,keep-vref-on"); - -- pdata->swap_xy = of_property_read_bool(node, "ti,swap-xy"); -+ pdata->swap_xy = device_property_read_bool(dev, "ti,swap-xy"); - -- of_property_read_u16(node, "ti,settle-delay-usec", -- &pdata->settle_delay_usecs); -- of_property_read_u16(node, "ti,penirq-recheck-delay-usecs", -- &pdata->penirq_recheck_delay_usecs); -+ device_property_read_u16(dev, "ti,settle-delay-usec", -+ &pdata->settle_delay_usecs); -+ device_property_read_u16(dev, "ti,penirq-recheck-delay-usecs", -+ &pdata->penirq_recheck_delay_usecs); - -- of_property_read_u16(node, "ti,x-plate-ohms", &pdata->x_plate_ohms); -- of_property_read_u16(node, "ti,y-plate-ohms", &pdata->y_plate_ohms); -+ device_property_read_u16(dev, "ti,x-plate-ohms", &pdata->x_plate_ohms); -+ device_property_read_u16(dev, "ti,y-plate-ohms", &pdata->y_plate_ohms); - -- of_property_read_u16(node, "ti,x-min", &pdata->x_min); -- of_property_read_u16(node, "ti,y-min", &pdata->y_min); -- of_property_read_u16(node, "ti,x-max", &pdata->x_max); -- of_property_read_u16(node, "ti,y-max", &pdata->y_max); -+ device_property_read_u16(dev, "ti,x-min", &pdata->x_min); -+ device_property_read_u16(dev, "ti,y-min", &pdata->y_min); -+ device_property_read_u16(dev, "ti,x-max", &pdata->x_max); -+ device_property_read_u16(dev, "ti,y-max", &pdata->y_max); - - /* - * touchscreen-max-pressure gets parsed during - * touchscreen_parse_properties() - */ -- of_property_read_u16(node, "ti,pressure-min", &pdata->pressure_min); -- if (!of_property_read_u32(node, "touchscreen-min-pressure", &value)) -+ device_property_read_u16(dev, "ti,pressure-min", &pdata->pressure_min); -+ if (!device_property_read_u32(dev, "touchscreen-min-pressure", &value)) - pdata->pressure_min = (u16) value; -- of_property_read_u16(node, "ti,pressure-max", &pdata->pressure_max); -+ device_property_read_u16(dev, "ti,pressure-max", &pdata->pressure_max); - -- of_property_read_u16(node, "ti,debounce-max", &pdata->debounce_max); -- if (!of_property_read_u32(node, "touchscreen-average-samples", &value)) -+ device_property_read_u16(dev, "ti,debounce-max", &pdata->debounce_max); -+ if (!device_property_read_u32(dev, "touchscreen-average-samples", &value)) - pdata->debounce_max = (u16) value; -- of_property_read_u16(node, "ti,debounce-tol", &pdata->debounce_tol); -- of_property_read_u16(node, "ti,debounce-rep", &pdata->debounce_rep); -+ device_property_read_u16(dev, "ti,debounce-tol", &pdata->debounce_tol); -+ device_property_read_u16(dev, "ti,debounce-rep", &pdata->debounce_rep); - -- of_property_read_u32(node, "ti,pendown-gpio-debounce", -+ device_property_read_u32(dev, "ti,pendown-gpio-debounce", - &pdata->gpio_pendown_debounce); - -- pdata->wakeup = of_property_read_bool(node, "wakeup-source") || -- of_property_read_bool(node, "linux,wakeup"); -- -- pdata->gpio_pendown = of_get_named_gpio(dev->of_node, "pendown-gpio", 0); -+ pdata->wakeup = device_property_read_bool(dev, "wakeup-source") || -+ device_property_read_bool(dev, "linux,wakeup"); - - return pdata; - } --#else --static const struct ads7846_platform_data *ads7846_probe_dt(struct device *dev) --{ -- dev_err(dev, "no platform data defined\n"); -- return ERR_PTR(-EINVAL); --} --#endif - - static void ads7846_regulator_disable(void *regulator) - { -@@ -1269,7 +1238,7 @@ static int ads7846_probe(struct spi_device *spi) - - pdata = dev_get_platdata(dev); - if (!pdata) { -- pdata = ads7846_probe_dt(dev); -+ pdata = ads7846_get_props(dev); - if (IS_ERR(pdata)) - return PTR_ERR(pdata); - } -@@ -1426,7 +1395,7 @@ static struct spi_driver ads7846_driver = { - .driver = { - .name = "ads7846", - .pm = pm_sleep_ptr(&ads7846_pm), -- .of_match_table = of_match_ptr(ads7846_dt_ids), -+ .of_match_table = ads7846_dt_ids, - }, - .probe = ads7846_probe, - .remove = ads7846_remove, -diff --git a/drivers/video/fbdev/omap/lcd_mipid.c b/drivers/video/fbdev/omap/lcd_mipid.c -index 03cff39d392db..e4a7f0b824ff4 100644 ---- a/drivers/video/fbdev/omap/lcd_mipid.c -+++ b/drivers/video/fbdev/omap/lcd_mipid.c -@@ -7,6 +7,7 @@ - */ - #include - #include -+#include - #include - #include - #include -@@ -41,6 +42,7 @@ struct mipid_device { - when we can issue the - next sleep in/out command */ - unsigned long hw_guard_wait; /* max guard time in jiffies */ -+ struct gpio_desc *reset; - - struct omapfb_device *fbdev; - struct spi_device *spi; -@@ -556,6 +558,12 @@ static int mipid_spi_probe(struct spi_device *spi) - return -ENOMEM; - } - -+ /* This will de-assert RESET if active */ -+ md->reset = gpiod_get(&spi->dev, "reset", GPIOD_OUT_LOW); -+ if (IS_ERR(md->reset)) -+ return dev_err_probe(&spi->dev, PTR_ERR(md->reset), -+ "no reset GPIO line\n"); -+ - spi->mode = SPI_MODE_0; - md->spi = spi; - dev_set_drvdata(&spi->dev, md); -@@ -574,6 +582,8 @@ static void mipid_spi_remove(struct spi_device *spi) - { - struct mipid_device *md = dev_get_drvdata(&spi->dev); - -+ /* Asserts RESET */ -+ gpiod_set_value(md->reset, 1); - mipid_disable(&md->panel); - kfree(md); - } -diff --git a/include/linux/platform_data/lcd-mipid.h b/include/linux/platform_data/lcd-mipid.h -index 63f05eb238274..4927cfc5158c6 100644 ---- a/include/linux/platform_data/lcd-mipid.h -+++ b/include/linux/platform_data/lcd-mipid.h -@@ -15,10 +15,8 @@ enum mipid_test_result { - #ifdef __KERNEL__ - - struct mipid_platform_data { -- int nreset_gpio; - int data_lines; - -- void (*shutdown)(struct mipid_platform_data *pdata); - void (*set_bklight_level)(struct mipid_platform_data *pdata, - int level); - int (*get_bklight_level)(struct mipid_platform_data *pdata); -diff --git a/include/linux/spi/ads7846.h b/include/linux/spi/ads7846.h -index d424c1aadf382..a04c1c34c3443 100644 ---- a/include/linux/spi/ads7846.h -+++ b/include/linux/spi/ads7846.h -@@ -35,8 +35,6 @@ struct ads7846_platform_data { - u16 debounce_tol; /* tolerance used for filtering */ - u16 debounce_rep; /* additional consecutive good readings - * required after the first two */ -- int gpio_pendown; /* the GPIO used to decide the pendown -- * state if get_pendown_state == NULL */ - int gpio_pendown_debounce; /* platform specific debounce time for - * the gpio_pendown */ - int (*get_pendown_state)(void); --- -2.39.2 - diff --git a/queue-6.4/input-adxl34x-do-not-hardcode-interrupt-trigger-type.patch b/queue-6.4/input-adxl34x-do-not-hardcode-interrupt-trigger-type.patch deleted file mode 100644 index 7ea02568805..00000000000 --- a/queue-6.4/input-adxl34x-do-not-hardcode-interrupt-trigger-type.patch +++ /dev/null @@ -1,39 +0,0 @@ -From c7f33396b3bede58e7431d7770292d114ed1b756 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Wed, 10 May 2023 17:27:55 -0700 -Subject: Input: adxl34x - do not hardcode interrupt trigger type - -From: Marek Vasut - -[ Upstream commit e96220bce5176ed2309f77f061dcc0430b82b25e ] - -Instead of hardcoding IRQ trigger type to IRQF_TRIGGER_HIGH, let's -respect the settings specified in the firmware description. - -Fixes: e27c729219ad ("Input: add driver for ADXL345/346 Digital Accelerometers") -Signed-off-by: Marek Vasut -Acked-by: Michael Hennerich -Link: https://lore.kernel.org/r/20230509203555.549158-1-marex@denx.de -Signed-off-by: Dmitry Torokhov -Signed-off-by: Sasha Levin ---- - drivers/input/misc/adxl34x.c | 3 +-- - 1 file changed, 1 insertion(+), 2 deletions(-) - -diff --git a/drivers/input/misc/adxl34x.c b/drivers/input/misc/adxl34x.c -index eecca671b5884..a3f45e0ee0c75 100644 ---- a/drivers/input/misc/adxl34x.c -+++ b/drivers/input/misc/adxl34x.c -@@ -817,8 +817,7 @@ struct adxl34x *adxl34x_probe(struct device *dev, int irq, - AC_WRITE(ac, POWER_CTL, 0); - - err = request_threaded_irq(ac->irq, NULL, adxl34x_irq, -- IRQF_TRIGGER_HIGH | IRQF_ONESHOT, -- dev_name(dev), ac); -+ IRQF_ONESHOT, dev_name(dev), ac); - if (err) { - dev_err(dev, "irq %d busy?\n", ac->irq); - goto err_free_mem; --- -2.39.2 - diff --git a/queue-6.4/input-cyttsp4_core-change-del_timer_sync-to-timer_sh.patch b/queue-6.4/input-cyttsp4_core-change-del_timer_sync-to-timer_sh.patch deleted file mode 100644 index cd421c2d485..00000000000 --- a/queue-6.4/input-cyttsp4_core-change-del_timer_sync-to-timer_sh.patch +++ /dev/null @@ -1,72 +0,0 @@ -From c08f573763e5947912d02ddf590766e4f1359205 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Mon, 1 May 2023 17:37:02 -0700 -Subject: Input: cyttsp4_core - change del_timer_sync() to - timer_shutdown_sync() - -From: Duoming Zhou - -[ Upstream commit dbe836576f12743a7d2d170ad4ad4fd324c4d47a ] - -The watchdog_timer can schedule tx_timeout_task and watchdog_work -can also arm watchdog_timer. The process is shown below: - ------------ timer schedules work ------------ -cyttsp4_watchdog_timer() //timer handler - schedule_work(&cd->watchdog_work) - ------------ work arms timer ------------ -cyttsp4_watchdog_work() //workqueue callback function - cyttsp4_start_wd_timer() - mod_timer(&cd->watchdog_timer, ...) - -Although del_timer_sync() and cancel_work_sync() are called in -cyttsp4_remove(), the timer and workqueue could still be rearmed. -As a result, the possible use after free bugs could happen. The -process is shown below: - - (cleanup routine) | (timer and workqueue routine) -cyttsp4_remove() | cyttsp4_watchdog_timer() //timer - cyttsp4_stop_wd_timer() | schedule_work() - del_timer_sync() | - | cyttsp4_watchdog_work() //worker - | cyttsp4_start_wd_timer() - | mod_timer() - cancel_work_sync() | - | cyttsp4_watchdog_timer() //timer - | schedule_work() - del_timer_sync() | - kfree(cd) //FREE | - | cyttsp4_watchdog_work() // reschedule! - | cd-> //USE - -This patch changes del_timer_sync() to timer_shutdown_sync(), -which could prevent rearming of the timer from the workqueue. - -Fixes: 17fb1563d69b ("Input: cyttsp4 - add core driver for Cypress TMA4XX touchscreen devices") -Signed-off-by: Duoming Zhou -Link: https://lore.kernel.org/r/20230421082919.8471-1-duoming@zju.edu.cn -Signed-off-by: Dmitry Torokhov -Signed-off-by: Sasha Levin ---- - drivers/input/touchscreen/cyttsp4_core.c | 3 +-- - 1 file changed, 1 insertion(+), 2 deletions(-) - -diff --git a/drivers/input/touchscreen/cyttsp4_core.c b/drivers/input/touchscreen/cyttsp4_core.c -index 0cd6f626adec5..7cb26929dc732 100644 ---- a/drivers/input/touchscreen/cyttsp4_core.c -+++ b/drivers/input/touchscreen/cyttsp4_core.c -@@ -1263,9 +1263,8 @@ static void cyttsp4_stop_wd_timer(struct cyttsp4 *cd) - * Ensure we wait until the watchdog timer - * running on a different CPU finishes - */ -- del_timer_sync(&cd->watchdog_timer); -+ timer_shutdown_sync(&cd->watchdog_timer); - cancel_work_sync(&cd->watchdog_work); -- del_timer_sync(&cd->watchdog_timer); - } - - static void cyttsp4_watchdog_timer(struct timer_list *t) --- -2.39.2 - diff --git a/queue-6.4/input-drv260x-sleep-between-polling-go-bit.patch b/queue-6.4/input-drv260x-sleep-between-polling-go-bit.patch deleted file mode 100644 index d929bf587e4..00000000000 --- a/queue-6.4/input-drv260x-sleep-between-polling-go-bit.patch +++ /dev/null @@ -1,39 +0,0 @@ -From 4a1635f11093fee9998062dd98eacd12e1c86842 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Mon, 1 May 2023 17:01:45 -0700 -Subject: Input: drv260x - sleep between polling GO bit - -From: Luca Weiss - -[ Upstream commit efef661dfa6bf8cbafe4cd6a97433fcef0118967 ] - -When doing the initial startup there's no need to poll without any -delay and spam the I2C bus. - -Let's sleep 15ms between each attempt, which is the same time as used -in the vendor driver. - -Fixes: 7132fe4f5687 ("Input: drv260x - add TI drv260x haptics driver") -Signed-off-by: Luca Weiss -Link: https://lore.kernel.org/r/20230430-drv260x-improvements-v1-2-1fb28b4cc698@z3ntu.xyz -Signed-off-by: Dmitry Torokhov -Signed-off-by: Sasha Levin ---- - drivers/input/misc/drv260x.c | 1 + - 1 file changed, 1 insertion(+) - -diff --git a/drivers/input/misc/drv260x.c b/drivers/input/misc/drv260x.c -index 8a9ebfc04a2d9..85371fa1a03ed 100644 ---- a/drivers/input/misc/drv260x.c -+++ b/drivers/input/misc/drv260x.c -@@ -435,6 +435,7 @@ static int drv260x_init(struct drv260x_data *haptics) - } - - do { -+ usleep_range(15000, 15500); - error = regmap_read(haptics->regmap, DRV260X_GO, &cal_buf); - if (error) { - dev_err(&haptics->client->dev, --- -2.39.2 - diff --git a/queue-6.4/input-pm8941-powerkey-fix-debounce-on-gen2-pmics.patch b/queue-6.4/input-pm8941-powerkey-fix-debounce-on-gen2-pmics.patch deleted file mode 100644 index a50f4dd76d3..00000000000 --- a/queue-6.4/input-pm8941-powerkey-fix-debounce-on-gen2-pmics.patch +++ /dev/null @@ -1,76 +0,0 @@ -From dacdde68965bf53c7ef05ec454db9856dcb6090a Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Tue, 6 Jun 2023 12:05:32 -0700 -Subject: Input: pm8941-powerkey - fix debounce on gen2+ PMICs - -From: Caleb Connolly - -[ Upstream commit 8c9cce9cb81b5fdc6e66bf3f129727b89e8daab7 ] - -Since PM8998/PM660, the power key debounce register was redefined to -support shorter debounce times. On PM8941 the shortest debounce time -(represented by register value 0) was 15625us, on PM8998 the shortest -debounce time is 62us, with the default being 2ms. - -Adjust the bit shift to correctly program debounce on PM8998 and newer. - -Fixes: 68c581d5e7d8 ("Input: add Qualcomm PM8941 power key driver") -Signed-off-by: Caleb Connolly -Link: https://lore.kernel.org/r/20230529-pm8941-pwrkey-debounce-v1-2-c043a6d5c814@linaro.org -Signed-off-by: Dmitry Torokhov -Signed-off-by: Sasha Levin ---- - drivers/input/misc/pm8941-pwrkey.c | 19 +++++++++++++++---- - 1 file changed, 15 insertions(+), 4 deletions(-) - -diff --git a/drivers/input/misc/pm8941-pwrkey.c b/drivers/input/misc/pm8941-pwrkey.c -index b6a27ebae977b..74d77d8aaeff2 100644 ---- a/drivers/input/misc/pm8941-pwrkey.c -+++ b/drivers/input/misc/pm8941-pwrkey.c -@@ -50,7 +50,10 @@ - #define PON_RESIN_PULL_UP BIT(0) - - #define PON_DBC_CTL 0x71 --#define PON_DBC_DELAY_MASK 0x7 -+#define PON_DBC_DELAY_MASK_GEN1 0x7 -+#define PON_DBC_DELAY_MASK_GEN2 0xf -+#define PON_DBC_SHIFT_GEN1 6 -+#define PON_DBC_SHIFT_GEN2 14 - - struct pm8941_data { - unsigned int pull_up_bit; -@@ -247,7 +250,7 @@ static int pm8941_pwrkey_probe(struct platform_device *pdev) - struct device *parent; - struct device_node *regmap_node; - const __be32 *addr; -- u32 req_delay; -+ u32 req_delay, mask, delay_shift; - int error; - - if (of_property_read_u32(pdev->dev.of_node, "debounce", &req_delay)) -@@ -336,12 +339,20 @@ static int pm8941_pwrkey_probe(struct platform_device *pdev) - pwrkey->input->phys = pwrkey->data->phys; - - if (pwrkey->data->supports_debounce_config) { -- req_delay = (req_delay << 6) / USEC_PER_SEC; -+ if (pwrkey->subtype >= PON_SUBTYPE_GEN2_PRIMARY) { -+ mask = PON_DBC_DELAY_MASK_GEN2; -+ delay_shift = PON_DBC_SHIFT_GEN2; -+ } else { -+ mask = PON_DBC_DELAY_MASK_GEN1; -+ delay_shift = PON_DBC_SHIFT_GEN1; -+ } -+ -+ req_delay = (req_delay << delay_shift) / USEC_PER_SEC; - req_delay = ilog2(req_delay); - - error = regmap_update_bits(pwrkey->regmap, - pwrkey->baseaddr + PON_DBC_CTL, -- PON_DBC_DELAY_MASK, -+ mask, - req_delay); - if (error) { - dev_err(&pdev->dev, "failed to set debounce: %d\n", --- -2.39.2 - diff --git a/queue-6.4/input-tests-fix-input_test_match_device_id-test.patch b/queue-6.4/input-tests-fix-input_test_match_device_id-test.patch deleted file mode 100644 index 327d4b9c21c..00000000000 --- a/queue-6.4/input-tests-fix-input_test_match_device_id-test.patch +++ /dev/null @@ -1,40 +0,0 @@ -From 5a548b9613cdbd5530530d4249671a4aac216bde Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Fri, 5 May 2023 11:16:29 -0700 -Subject: Input: tests - fix input_test_match_device_id test - -From: Dmitry Torokhov - -[ Upstream commit c73b4db076faf827d0656665ef5e97b76926b60f ] - -Properly initialize input_device_id structure in -input_test_match_device_id test to make sure it contains no garbage -causing the test to randomly fail. - -Fixes: fdefcbdd6f36 ("Input: Add KUnit tests for some of the input core helper functions") -Reported-by: Geert Uytterhoeven -Tested-by: Geert Uytterhoeven -Reviewed-by: Javier Martinez Canillas -Link: https://lore.kernel.org/r/ZFLI7T2qZTGJ1UUK@google.com -Signed-off-by: Dmitry Torokhov -Signed-off-by: Sasha Levin ---- - drivers/input/tests/input_test.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/drivers/input/tests/input_test.c b/drivers/input/tests/input_test.c -index 8b8ac3412a70d..0540225f02886 100644 ---- a/drivers/input/tests/input_test.c -+++ b/drivers/input/tests/input_test.c -@@ -87,7 +87,7 @@ static void input_test_timestamp(struct kunit *test) - static void input_test_match_device_id(struct kunit *test) - { - struct input_dev *input_dev = test->priv; -- struct input_device_id id; -+ struct input_device_id id = { 0 }; - - /* - * Must match when the input device bus, vendor, product, version --- -2.39.2 - diff --git a/queue-6.4/input-tests-fix-use-after-free-and-refcount-underflo.patch b/queue-6.4/input-tests-fix-use-after-free-and-refcount-underflo.patch deleted file mode 100644 index 50c1a93b75b..00000000000 --- a/queue-6.4/input-tests-fix-use-after-free-and-refcount-underflo.patch +++ /dev/null @@ -1,87 +0,0 @@ -From 67f831f6464dccc34ee31f8df0efa5b47b92e500 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Tue, 2 May 2023 09:41:46 -0700 -Subject: Input: tests - fix use-after-free and refcount underflow in - input_test_exit() - -From: Geert Uytterhoeven - -[ Upstream commit fd75f3694b1dd5070408ea4a58ca7f8e0a3fcbcd ] - -With CONFIG_DEBUG_SLAB=y: - - # Subtest: input_core - 1..3 - input: Test input device as /devices/virtual/input/input1 - 8<--- cut here --- - Unable to handle kernel paging request at virtual address 6b6b6dd7 when read - ... - __lock_acquire from lock_acquire+0x26c/0x300 - lock_acquire from _raw_spin_lock_irqsave+0x50/0x64 - _raw_spin_lock_irqsave from devres_remove+0x20/0x7c - devres_remove from devres_destroy+0x8/0x24 - devres_destroy from input_free_device+0x2c/0x60 - input_free_device from kunit_try_run_case+0x70/0x94 [kunit] - -Without CONFIG_DEBUG_SLAB=y: - - KTAP version 1 - # Subtest: input_core - 1..3 - input: Test input device as /devices/virtual/input/input1 - ------------[ cut here ]------------ - WARNING: CPU: 0 PID: 694 at lib/refcount.c:28 refcount_warn_saturate+0x54/0x100 - refcount_t: underflow; use-after-free. - ... - Call Trace: [<0037cad4>] dump_stack+0xc/0x10 - [<00377614>] __warn+0x7e/0xb4 - [<0037768c>] warn_slowpath_fmt+0x42/0x62 - [<001eee1c>] refcount_warn_saturate+0x54/0x100 - [<000b1d34>] kfree_const+0x0/0x20 - [<0036290a>] __kobject_del+0x0/0x6e - [<001eee1c>] refcount_warn_saturate+0x54/0x100 - [<00362a1a>] kobject_put+0xa2/0xb6 - [<11965770>] kunit_generic_run_threadfn_adapter+0x0/0x1c [kunit] - -As per the comments for input_allocate_device() and -input_register_device(), input_free_device() must be called only to free -devices that have not been registered. input_unregister_device() -already calls input_put_device(), thus leading to a use-after-free. - -Moreover, the kunit_suite.exit() method is called after every test case, -even on failures. As the test itself already does cleanups in its -failure paths, this may lead to a second use-after-free. - -Fix the first issue by dropping the call to input_allocate_device() from -input_test_exit(). -Fix the second issue by making the cleanup code conditional on a -successful test. - -Fixes: fdefcbdd6f361841 ("Input: Add KUnit tests for some of the input core helper functions") -Signed-off-by: Geert Uytterhoeven -Reviewed-by: Javier Martinez Canillas -Link: https://lore.kernel.org/r/957b3b309a44d39fb6e38b2a526b250f69ea3d2c.1683022164.git.geert+renesas@glider.be -Signed-off-by: Dmitry Torokhov -Signed-off-by: Sasha Levin ---- - drivers/input/tests/input_test.c | 4 ++-- - 1 file changed, 2 insertions(+), 2 deletions(-) - -diff --git a/drivers/input/tests/input_test.c b/drivers/input/tests/input_test.c -index e5a6c1ad2167c..8b8ac3412a70d 100644 ---- a/drivers/input/tests/input_test.c -+++ b/drivers/input/tests/input_test.c -@@ -43,8 +43,8 @@ static void input_test_exit(struct kunit *test) - { - struct input_dev *input_dev = test->priv; - -- input_unregister_device(input_dev); -- input_free_device(input_dev); -+ if (input_dev) -+ input_unregister_device(input_dev); - } - - static void input_test_poll(struct input_dev *input) { } --- -2.39.2 - diff --git a/queue-6.4/input-tests-modular-kunit-tests-should-not-depend-on.patch b/queue-6.4/input-tests-modular-kunit-tests-should-not-depend-on.patch deleted file mode 100644 index 9025f9d03af..00000000000 --- a/queue-6.4/input-tests-modular-kunit-tests-should-not-depend-on.patch +++ /dev/null @@ -1,41 +0,0 @@ -From 53ad4287558301c03770f8551bc39af228a04d87 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Tue, 2 May 2023 09:42:29 -0700 -Subject: Input: tests - modular KUnit tests should not depend on KUNIT=y - -From: Geert Uytterhoeven - -[ Upstream commit e0f41f836f5e861bdcaf4719f160b62dbb8e9485 ] - -While KUnit tests that cannot be built as a loadable module must depend -on "KUNIT=y", this is not true for modular tests, where it adds an -unnecessary limitation. - -Fix this by relaxing the dependency to "KUNIT". - -Fixes: fdefcbdd6f361841 ("Input: Add KUnit tests for some of the input core helper functions") -Signed-off-by: Geert Uytterhoeven -Reviewed-by: Javier Martinez Canillas -Link: https://lore.kernel.org/r/483c4f520e4acc6357ebba3e605977b4c56374df.1683022164.git.geert+renesas@glider.be -Signed-off-by: Dmitry Torokhov -Signed-off-by: Sasha Levin ---- - drivers/input/Kconfig | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/drivers/input/Kconfig b/drivers/input/Kconfig -index 735f90b74ee5a..3bdbd34314b34 100644 ---- a/drivers/input/Kconfig -+++ b/drivers/input/Kconfig -@@ -168,7 +168,7 @@ config INPUT_EVBUG - - config INPUT_KUNIT_TEST - tristate "KUnit tests for Input" if !KUNIT_ALL_TESTS -- depends on INPUT && KUNIT=y -+ depends on INPUT && KUNIT - default KUNIT_ALL_TESTS - help - Say Y here if you want to build the KUnit tests for the input --- -2.39.2 - diff --git a/queue-6.4/iommu-virtio-detach-domain-on-endpoint-release.patch b/queue-6.4/iommu-virtio-detach-domain-on-endpoint-release.patch deleted file mode 100644 index 2280730b25d..00000000000 --- a/queue-6.4/iommu-virtio-detach-domain-on-endpoint-release.patch +++ /dev/null @@ -1,70 +0,0 @@ -From ed0cc99a82518444e4579c309fb7d1e887d66c1d Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Mon, 15 May 2023 12:39:48 +0100 -Subject: iommu/virtio: Detach domain on endpoint release - -From: Jean-Philippe Brucker - -[ Upstream commit 809d0810e3520da669d231303608cdf5fe5c1a70 ] - -When an endpoint is released, for example a PCIe VF being destroyed or a -function hot-unplugged, it should be detached from its domain. Send a -DETACH request. - -Fixes: edcd69ab9a32 ("iommu: Add virtio-iommu driver") -Reported-by: Akihiko Odaki -Link: https://lore.kernel.org/all/15bf1b00-3aa0-973a-3a86-3fa5c4d41d2c@daynix.com/ -Signed-off-by: Jean-Philippe Brucker -Tested-by: Akihiko Odaki -Link: https://lore.kernel.org/r/20230515113946.1017624-2-jean-philippe@linaro.org -Signed-off-by: Joerg Roedel -Signed-off-by: Sasha Levin ---- - drivers/iommu/virtio-iommu.c | 24 ++++++++++++++++++++++++ - 1 file changed, 24 insertions(+) - -diff --git a/drivers/iommu/virtio-iommu.c b/drivers/iommu/virtio-iommu.c -index 5b8fe9bfa9a5b..fd316a37d7562 100644 ---- a/drivers/iommu/virtio-iommu.c -+++ b/drivers/iommu/virtio-iommu.c -@@ -788,6 +788,29 @@ static int viommu_attach_dev(struct iommu_domain *domain, struct device *dev) - return 0; - } - -+static void viommu_detach_dev(struct viommu_endpoint *vdev) -+{ -+ int i; -+ struct virtio_iommu_req_detach req; -+ struct viommu_domain *vdomain = vdev->vdomain; -+ struct iommu_fwspec *fwspec = dev_iommu_fwspec_get(vdev->dev); -+ -+ if (!vdomain) -+ return; -+ -+ req = (struct virtio_iommu_req_detach) { -+ .head.type = VIRTIO_IOMMU_T_DETACH, -+ .domain = cpu_to_le32(vdomain->id), -+ }; -+ -+ for (i = 0; i < fwspec->num_ids; i++) { -+ req.endpoint = cpu_to_le32(fwspec->ids[i]); -+ WARN_ON(viommu_send_req_sync(vdev->viommu, &req, sizeof(req))); -+ } -+ vdomain->nr_endpoints--; -+ vdev->vdomain = NULL; -+} -+ - static int viommu_map_pages(struct iommu_domain *domain, unsigned long iova, - phys_addr_t paddr, size_t pgsize, size_t pgcount, - int prot, gfp_t gfp, size_t *mapped) -@@ -990,6 +1013,7 @@ static void viommu_release_device(struct device *dev) - { - struct viommu_endpoint *vdev = dev_iommu_priv_get(dev); - -+ viommu_detach_dev(vdev); - iommu_put_resv_regions(dev, &vdev->resv_regions); - kfree(vdev); - } --- -2.39.2 - diff --git a/queue-6.4/iommu-virtio-return-size-mapped-for-a-detached-domai.patch b/queue-6.4/iommu-virtio-return-size-mapped-for-a-detached-domai.patch deleted file mode 100644 index c106e2d8125..00000000000 --- a/queue-6.4/iommu-virtio-return-size-mapped-for-a-detached-domai.patch +++ /dev/null @@ -1,75 +0,0 @@ -From e0eec9d885fc6b03bcd2fca434954ec6f8fbea03 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Mon, 15 May 2023 12:39:50 +0100 -Subject: iommu/virtio: Return size mapped for a detached domain - -From: Jean-Philippe Brucker - -[ Upstream commit 7061b6af34686e7e2364b7240cfb061293218f2d ] - -When map() is called on a detached domain, the domain does not exist in -the device so we do not send a MAP request, but we do update the -internal mapping tree, to be replayed on the next attach. Since this -constitutes a successful iommu_map() call, return *mapped in this case -too. - -Fixes: 7e62edd7a33a ("iommu/virtio: Add map/unmap_pages() callbacks implementation") -Signed-off-by: Jean-Philippe Brucker -Reviewed-by: Jason Gunthorpe -Link: https://lore.kernel.org/r/20230515113946.1017624-3-jean-philippe@linaro.org -Signed-off-by: Joerg Roedel -Signed-off-by: Sasha Levin ---- - drivers/iommu/virtio-iommu.c | 33 +++++++++++++++++---------------- - 1 file changed, 17 insertions(+), 16 deletions(-) - -diff --git a/drivers/iommu/virtio-iommu.c b/drivers/iommu/virtio-iommu.c -index fd316a37d7562..3551ed057774e 100644 ---- a/drivers/iommu/virtio-iommu.c -+++ b/drivers/iommu/virtio-iommu.c -@@ -833,25 +833,26 @@ static int viommu_map_pages(struct iommu_domain *domain, unsigned long iova, - if (ret) - return ret; - -- map = (struct virtio_iommu_req_map) { -- .head.type = VIRTIO_IOMMU_T_MAP, -- .domain = cpu_to_le32(vdomain->id), -- .virt_start = cpu_to_le64(iova), -- .phys_start = cpu_to_le64(paddr), -- .virt_end = cpu_to_le64(end), -- .flags = cpu_to_le32(flags), -- }; -- -- if (!vdomain->nr_endpoints) -- return 0; -+ if (vdomain->nr_endpoints) { -+ map = (struct virtio_iommu_req_map) { -+ .head.type = VIRTIO_IOMMU_T_MAP, -+ .domain = cpu_to_le32(vdomain->id), -+ .virt_start = cpu_to_le64(iova), -+ .phys_start = cpu_to_le64(paddr), -+ .virt_end = cpu_to_le64(end), -+ .flags = cpu_to_le32(flags), -+ }; - -- ret = viommu_send_req_sync(vdomain->viommu, &map, sizeof(map)); -- if (ret) -- viommu_del_mappings(vdomain, iova, end); -- else if (mapped) -+ ret = viommu_send_req_sync(vdomain->viommu, &map, sizeof(map)); -+ if (ret) { -+ viommu_del_mappings(vdomain, iova, end); -+ return ret; -+ } -+ } -+ if (mapped) - *mapped = size; - -- return ret; -+ return 0; - } - - static size_t viommu_unmap_pages(struct iommu_domain *domain, unsigned long iova, --- -2.39.2 - diff --git a/queue-6.4/iommufd-call-iopt_area_contig_done-under-the-lock.patch b/queue-6.4/iommufd-call-iopt_area_contig_done-under-the-lock.patch deleted file mode 100644 index 69e0327b8ef..00000000000 --- a/queue-6.4/iommufd-call-iopt_area_contig_done-under-the-lock.patch +++ /dev/null @@ -1,102 +0,0 @@ -From 2dbc43213e560623d2b200e764a892e11ac2e522 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Tue, 20 Jun 2023 11:11:24 -0300 -Subject: iommufd: Call iopt_area_contig_done() under the lock - -From: Jason Gunthorpe - -[ Upstream commit dbe245cdf5189e88d680379ed13901356628b650 ] - -The iter internally holds a pointer to the area and -iopt_area_contig_done() will dereference it. The pointer is not valid -outside the iova_rwsem. - -syzkaller reports: - - BUG: KASAN: slab-use-after-free in iommufd_access_unpin_pages+0x363/0x370 - Read of size 8 at addr ffff888022286e20 by task syz-executor669/5771 - - CPU: 0 PID: 5771 Comm: syz-executor669 Not tainted 6.4.0-rc5-syzkaller-00313-g4c605260bc60 #0 - Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 05/25/2023 - Call Trace: - - dump_stack_lvl+0xd9/0x150 - print_address_description.constprop.0+0x2c/0x3c0 - kasan_report+0x11c/0x130 - iommufd_access_unpin_pages+0x363/0x370 - iommufd_test_access_unmap+0x24b/0x390 - iommufd_access_notify_unmap+0x24c/0x3a0 - iopt_unmap_iova_range+0x4c4/0x5f0 - iopt_unmap_all+0x27/0x50 - iommufd_ioas_unmap+0x3d0/0x490 - iommufd_fops_ioctl+0x317/0x4b0 - __x64_sys_ioctl+0x197/0x210 - do_syscall_64+0x39/0xb0 - entry_SYSCALL_64_after_hwframe+0x63/0xcd - RIP: 0033:0x7fec1dae3b19 - Code: 28 00 00 00 75 05 48 83 c4 28 c3 e8 11 15 00 00 90 48 89 f8 48 89 f7 48 89 d6 48 89 ca 4d 89 c2 4d 89 c8 4c 8b 4c 24 08 0f 05 <48> 3d 01 f0 ff ff 73 01 c3 48 c7 c1 b8 ff ff ff f7 d8 64 89 01 48 - RSP: 002b:00007fec1da74308 EFLAGS: 00000246 ORIG_RAX: 0000000000000010 - RAX: ffffffffffffffda RBX: 00007fec1db6b438 RCX: 00007fec1dae3b19 - RDX: 0000000020000100 RSI: 0000000000003b86 RDI: 0000000000000003 - RBP: 00007fec1db6b430 R08: 00007fec1da74700 R09: 0000000000000000 - R10: 00007fec1da74700 R11: 0000000000000246 R12: 00007fec1db6b43c - R13: 00007fec1db39074 R14: 6d6f692f7665642f R15: 0000000000022000 - - - Allocated by task 5770: - kasan_save_stack+0x22/0x40 - kasan_set_track+0x25/0x30 - __kasan_kmalloc+0xa2/0xb0 - iopt_alloc_area_pages+0x94/0x560 - iopt_map_user_pages+0x205/0x4e0 - iommufd_ioas_map+0x329/0x5f0 - iommufd_fops_ioctl+0x317/0x4b0 - __x64_sys_ioctl+0x197/0x210 - do_syscall_64+0x39/0xb0 - entry_SYSCALL_64_after_hwframe+0x63/0xcd - - Freed by task 5770: - kasan_save_stack+0x22/0x40 - kasan_set_track+0x25/0x30 - kasan_save_free_info+0x2e/0x40 - ____kasan_slab_free+0x160/0x1c0 - slab_free_freelist_hook+0x8b/0x1c0 - __kmem_cache_free+0xaf/0x2d0 - iopt_unmap_iova_range+0x288/0x5f0 - iopt_unmap_all+0x27/0x50 - iommufd_ioas_unmap+0x3d0/0x490 - iommufd_fops_ioctl+0x317/0x4b0 - __x64_sys_ioctl+0x197/0x210 - do_syscall_64+0x39/0xb0 - entry_SYSCALL_64_after_hwframe+0x63/0xcd - -The parallel unmap free'd iter->area the instant the lock was released. - -Fixes: 51fe6141f0f6 ("iommufd: Data structure to provide IOVA to PFN mapping") -Link: https://lore.kernel.org/r/2-v2-9a03761d445d+54-iommufd_syz2_jgg@nvidia.com -Reviewed-by: Kevin Tian -Reported-by: syzbot+6c8d756f238a75fc3eb8@syzkaller.appspotmail.com -Closes: https://lore.kernel.org/r/000000000000905eba05fe38e9f2@google.com -Signed-off-by: Jason Gunthorpe -Signed-off-by: Sasha Levin ---- - drivers/iommu/iommufd/device.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/drivers/iommu/iommufd/device.c b/drivers/iommu/iommufd/device.c -index 4f9b2142274ce..29d05663d4d17 100644 ---- a/drivers/iommu/iommufd/device.c -+++ b/drivers/iommu/iommufd/device.c -@@ -553,8 +553,8 @@ void iommufd_access_unpin_pages(struct iommufd_access *access, - iopt_area_iova_to_index( - area, - min(last_iova, iopt_area_last_iova(area)))); -- up_read(&iopt->iova_rwsem); - WARN_ON(!iopt_area_contig_done(&iter)); -+ up_read(&iopt->iova_rwsem); - } - EXPORT_SYMBOL_NS_GPL(iommufd_access_unpin_pages, IOMMUFD); - --- -2.39.2 - diff --git a/queue-6.4/iommufd-do-not-access-the-area-pointer-after-unlocki.patch b/queue-6.4/iommufd-do-not-access-the-area-pointer-after-unlocki.patch deleted file mode 100644 index 18afc8001eb..00000000000 --- a/queue-6.4/iommufd-do-not-access-the-area-pointer-after-unlocki.patch +++ /dev/null @@ -1,175 +0,0 @@ -From 34afcb5e676e96e2c724c000b040918157ccf267 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Tue, 20 Jun 2023 11:11:23 -0300 -Subject: iommufd: Do not access the area pointer after unlocking - -From: Jason Gunthorpe - -[ Upstream commit 804ca14d04df09bf7924bacc5ad22a4bed80c94f ] - -A concurrent unmap can trigger freeing of the area pointers while we are -generating an unmapping notification for accesses. - -syzkaller reports: - - BUG: KASAN: slab-use-after-free in iopt_unmap_iova_range+0x5ba/0x5f0 - Read of size 4 at addr ffff888075996184 by task syz-executor.2/31160 - - CPU: 1 PID: 31160 Comm: syz-executor.2 Not tainted 6.4.0-rc5-syzkaller-00313-g4c605260bc60 #0 - Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 05/25/2023 - Call Trace: - - dump_stack_lvl+0xd9/0x150 - print_address_description.constprop.0+0x2c/0x3c0 - kasan_report+0x11c/0x130 - iopt_unmap_iova_range+0x5ba/0x5f0 - iopt_unmap_all+0x27/0x50 - iommufd_ioas_unmap+0x3d0/0x490 - iommufd_fops_ioctl+0x317/0x4b0 - __x64_sys_ioctl+0x197/0x210 - do_syscall_64+0x39/0xb0 - entry_SYSCALL_64_after_hwframe+0x63/0xcd - RIP: 0033:0x7f0812c8c169 - Code: 28 00 00 00 75 05 48 83 c4 28 c3 e8 f1 19 00 00 90 48 89 f8 48 89 f7 48 89 d6 48 89 ca 4d 89 c2 4d 89 c8 4c 8b 4c 24 08 0f 05 <48> 3d 01 f0 ff ff 73 01 c3 48 c7 c1 b8 ff ff ff f7 d8 64 89 01 48 - RSP: 002b:00007f0813914168 EFLAGS: 00000246 ORIG_RAX: 0000000000000010 - RAX: ffffffffffffffda RBX: 00007f0812dabf80 RCX: 00007f0812c8c169 - RDX: 0000000020000100 RSI: 0000000000003b86 RDI: 0000000000000005 - RBP: 00007f0812ce7ca1 R08: 0000000000000000 R09: 0000000000000000 - R10: 0000000000000000 R11: 0000000000000246 R12: 0000000000000000 - R13: 00007f0812ecfb1f R14: 00007f0813914300 R15: 0000000000022000 - - - Allocated by task 31160: - kasan_save_stack+0x22/0x40 - kasan_set_track+0x25/0x30 - __kasan_kmalloc+0xa2/0xb0 - iopt_alloc_area_pages+0x94/0x560 - iopt_map_user_pages+0x205/0x4e0 - iommufd_ioas_map+0x329/0x5f0 - iommufd_fops_ioctl+0x317/0x4b0 - __x64_sys_ioctl+0x197/0x210 - do_syscall_64+0x39/0xb0 - entry_SYSCALL_64_after_hwframe+0x63/0xcd - - Freed by task 31161: - kasan_save_stack+0x22/0x40 - kasan_set_track+0x25/0x30 - kasan_save_free_info+0x2e/0x40 - ____kasan_slab_free+0x160/0x1c0 - slab_free_freelist_hook+0x8b/0x1c0 - __kmem_cache_free+0xaf/0x2d0 - iopt_unmap_iova_range+0x288/0x5f0 - iopt_unmap_all+0x27/0x50 - iommufd_ioas_unmap+0x3d0/0x490 - iommufd_fops_ioctl+0x317/0x4b0 - __x64_sys_ioctl+0x197/0x210 - do_syscall_64+0x39/0xb0 - entry_SYSCALL_64_after_hwframe+0x63/0xcd - - The buggy address belongs to the object at ffff888075996100 - which belongs to the cache kmalloc-cg-192 of size 192 - The buggy address is located 132 bytes inside of - freed 192-byte region [ffff888075996100, ffff8880759961c0) - - The buggy address belongs to the physical page: - page:ffffea0001d66580 refcount:1 mapcount:0 mapping:0000000000000000 index:0x0 pfn:0x75996 - memcg:ffff88801f1c2701 - flags: 0xfff00000000200(slab|node=0|zone=1|lastcpupid=0x7ff) - page_type: 0xffffffff() - raw: 00fff00000000200 ffff88801244ddc0 dead000000000122 0000000000000000 - raw: 0000000000000000 0000000080100010 00000001ffffffff ffff88801f1c2701 - page dumped because: kasan: bad access detected - page_owner tracks the page as allocated - page last allocated via order 0, migratetype Unmovable, gfp_mask 0x112cc0(GFP_USER|__GFP_NOWARN|__GFP_NORETRY), pid 31157, tgid 31154 (syz-executor.0), ts 1984547323469, free_ts 1983933451331 - post_alloc_hook+0x2db/0x350 - get_page_from_freelist+0xf41/0x2c00 - __alloc_pages+0x1cb/0x4a0 - alloc_pages+0x1aa/0x270 - allocate_slab+0x25f/0x390 - ___slab_alloc+0xa91/0x1400 - __slab_alloc.constprop.0+0x56/0xa0 - __kmem_cache_alloc_node+0x136/0x320 - kmalloc_trace+0x26/0xe0 - iommufd_test+0x1328/0x2c20 - iommufd_fops_ioctl+0x317/0x4b0 - __x64_sys_ioctl+0x197/0x210 - do_syscall_64+0x39/0xb0 - entry_SYSCALL_64_after_hwframe+0x63/0xcd - page last free stack trace: - free_unref_page_prepare+0x62e/0xcb0 - free_unref_page_list+0xe3/0xa70 - release_pages+0xcd8/0x1380 - tlb_batch_pages_flush+0xa8/0x1a0 - tlb_finish_mmu+0x14b/0x7e0 - exit_mmap+0x2b2/0x930 - __mmput+0x128/0x4c0 - mmput+0x60/0x70 - do_exit+0x9b0/0x29b0 - do_group_exit+0xd4/0x2a0 - get_signal+0x2318/0x25b0 - arch_do_signal_or_restart+0x79/0x5c0 - exit_to_user_mode_prepare+0x11f/0x240 - syscall_exit_to_user_mode+0x1d/0x50 - do_syscall_64+0x46/0xb0 - entry_SYSCALL_64_after_hwframe+0x63/0xcd - -Precompute what is needed to call the access function and do not check the -area's num_accesses again as the pointer may not be valid anymore. Use a -counter instead. - -Fixes: 51fe6141f0f6 ("iommufd: Data structure to provide IOVA to PFN mapping") -Link: https://lore.kernel.org/r/1-v2-9a03761d445d+54-iommufd_syz2_jgg@nvidia.com -Reviewed-by: Kevin Tian -Reported-by: syzbot+1ad12d16afca0e7d2dde@syzkaller.appspotmail.com -Closes: https://lore.kernel.org/r/0000000000001d40fc05fe385332@google.com -Signed-off-by: Jason Gunthorpe -Signed-off-by: Sasha Levin ---- - drivers/iommu/iommufd/io_pagetable.c | 14 +++++++++++--- - 1 file changed, 11 insertions(+), 3 deletions(-) - -diff --git a/drivers/iommu/iommufd/io_pagetable.c b/drivers/iommu/iommufd/io_pagetable.c -index e0ae72b9e67f8..724c4c5742417 100644 ---- a/drivers/iommu/iommufd/io_pagetable.c -+++ b/drivers/iommu/iommufd/io_pagetable.c -@@ -458,6 +458,7 @@ static int iopt_unmap_iova_range(struct io_pagetable *iopt, unsigned long start, - { - struct iopt_area *area; - unsigned long unmapped_bytes = 0; -+ unsigned int tries = 0; - int rc = -ENOENT; - - /* -@@ -484,19 +485,26 @@ static int iopt_unmap_iova_range(struct io_pagetable *iopt, unsigned long start, - goto out_unlock_iova; - } - -+ if (area_first != start) -+ tries = 0; -+ - /* - * num_accesses writers must hold the iova_rwsem too, so we can - * safely read it under the write side of the iovam_rwsem - * without the pages->mutex. - */ - if (area->num_accesses) { -+ size_t length = iopt_area_length(area); -+ - start = area_first; - area->prevent_access = true; - up_write(&iopt->iova_rwsem); - up_read(&iopt->domains_rwsem); -- iommufd_access_notify_unmap(iopt, area_first, -- iopt_area_length(area)); -- if (WARN_ON(READ_ONCE(area->num_accesses))) -+ -+ iommufd_access_notify_unmap(iopt, area_first, length); -+ /* Something is not responding to unmap requests. */ -+ tries++; -+ if (WARN_ON(tries > 100)) - return -EDEADLOCK; - goto again; - } --- -2.39.2 - diff --git a/queue-6.4/ipvlan-fix-return-value-of-ipvlan_queue_xmit.patch b/queue-6.4/ipvlan-fix-return-value-of-ipvlan_queue_xmit.patch deleted file mode 100644 index f97e139cb79..00000000000 --- a/queue-6.4/ipvlan-fix-return-value-of-ipvlan_queue_xmit.patch +++ /dev/null @@ -1,66 +0,0 @@ -From 1639de30a570aa7de3f9f350e12a3d33db62cace Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Mon, 26 Jun 2023 17:33:47 +0800 -Subject: ipvlan: Fix return value of ipvlan_queue_xmit() - -From: Cambda Zhu - -[ Upstream commit 8a9922e7be6d042fa00f894c376473b17a162b66 ] - -ipvlan_queue_xmit() should return NET_XMIT_XXX, but -ipvlan_xmit_mode_l2/l3() returns rx_handler_result_t or NET_RX_XXX -in some cases. ipvlan_rcv_frame() will only return RX_HANDLER_CONSUMED -in ipvlan_xmit_mode_l2/l3() because 'local' is true. It's equal to -NET_XMIT_SUCCESS. But dev_forward_skb() can return NET_RX_SUCCESS or -NET_RX_DROP, and returning NET_RX_DROP(NET_XMIT_DROP) will increase -both ipvlan and ipvlan->phy_dev drops counter. - -The skb to forward can be treated as xmitted successfully. This patch -makes ipvlan_queue_xmit() return NET_XMIT_SUCCESS for forward skb. - -Fixes: 2ad7bf363841 ("ipvlan: Initial check-in of the IPVLAN driver.") -Signed-off-by: Cambda Zhu -Link: https://lore.kernel.org/r/20230626093347.7492-1-cambda@linux.alibaba.com -Signed-off-by: Paolo Abeni -Signed-off-by: Sasha Levin ---- - drivers/net/ipvlan/ipvlan_core.c | 9 ++++++--- - 1 file changed, 6 insertions(+), 3 deletions(-) - -diff --git a/drivers/net/ipvlan/ipvlan_core.c b/drivers/net/ipvlan/ipvlan_core.c -index ab5133eb1d517..e45817caaee8d 100644 ---- a/drivers/net/ipvlan/ipvlan_core.c -+++ b/drivers/net/ipvlan/ipvlan_core.c -@@ -585,7 +585,8 @@ static int ipvlan_xmit_mode_l3(struct sk_buff *skb, struct net_device *dev) - consume_skb(skb); - return NET_XMIT_DROP; - } -- return ipvlan_rcv_frame(addr, &skb, true); -+ ipvlan_rcv_frame(addr, &skb, true); -+ return NET_XMIT_SUCCESS; - } - } - out: -@@ -611,7 +612,8 @@ static int ipvlan_xmit_mode_l2(struct sk_buff *skb, struct net_device *dev) - consume_skb(skb); - return NET_XMIT_DROP; - } -- return ipvlan_rcv_frame(addr, &skb, true); -+ ipvlan_rcv_frame(addr, &skb, true); -+ return NET_XMIT_SUCCESS; - } - } - skb = skb_share_check(skb, GFP_ATOMIC); -@@ -623,7 +625,8 @@ static int ipvlan_xmit_mode_l2(struct sk_buff *skb, struct net_device *dev) - * the skb for the main-dev. At the RX side we just return - * RX_PASS for it to be processed further on the stack. - */ -- return dev_forward_skb(ipvlan->phy_dev, skb); -+ dev_forward_skb(ipvlan->phy_dev, skb); -+ return NET_XMIT_SUCCESS; - - } else if (is_multicast_ether_addr(eth->h_dest)) { - skb_reset_mac_header(skb); --- -2.39.2 - diff --git a/queue-6.4/irqchip-jcore-aic-fix-missing-allocation-of-irq-desc.patch b/queue-6.4/irqchip-jcore-aic-fix-missing-allocation-of-irq-desc.patch deleted file mode 100644 index c05c26e493f..00000000000 --- a/queue-6.4/irqchip-jcore-aic-fix-missing-allocation-of-irq-desc.patch +++ /dev/null @@ -1,53 +0,0 @@ -From 8dc44a63b97a78e13de2181730747fa64601e6a5 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Wed, 10 May 2023 18:33:42 +0200 -Subject: irqchip/jcore-aic: Fix missing allocation of IRQ descriptors - -From: John Paul Adrian Glaubitz - -[ Upstream commit 4848229494a323eeaab62eee5574ef9f7de80374 ] - -The initialization function for the J-Core AIC aic_irq_of_init() is -currently missing the call to irq_alloc_descs() which allocates and -initializes all the IRQ descriptors. Add missing function call and -return the error code from irq_alloc_descs() in case the allocation -fails. - -Fixes: 981b58f66cfc ("irqchip/jcore-aic: Add J-Core AIC driver") -Signed-off-by: John Paul Adrian Glaubitz -Tested-by: Rob Landley -Signed-off-by: Marc Zyngier -Link: https://lore.kernel.org/r/20230510163343.43090-1-glaubitz@physik.fu-berlin.de -Signed-off-by: Sasha Levin ---- - drivers/irqchip/irq-jcore-aic.c | 7 +++++++ - 1 file changed, 7 insertions(+) - -diff --git a/drivers/irqchip/irq-jcore-aic.c b/drivers/irqchip/irq-jcore-aic.c -index 5f47d8ee4ae39..b9dcc8e78c750 100644 ---- a/drivers/irqchip/irq-jcore-aic.c -+++ b/drivers/irqchip/irq-jcore-aic.c -@@ -68,6 +68,7 @@ static int __init aic_irq_of_init(struct device_node *node, - unsigned min_irq = JCORE_AIC2_MIN_HWIRQ; - unsigned dom_sz = JCORE_AIC_MAX_HWIRQ+1; - struct irq_domain *domain; -+ int ret; - - pr_info("Initializing J-Core AIC\n"); - -@@ -100,6 +101,12 @@ static int __init aic_irq_of_init(struct device_node *node, - jcore_aic.irq_unmask = noop; - jcore_aic.name = "AIC"; - -+ ret = irq_alloc_descs(-1, min_irq, dom_sz - min_irq, -+ of_node_to_nid(node)); -+ -+ if (ret < 0) -+ return ret; -+ - domain = irq_domain_add_legacy(node, dom_sz - min_irq, min_irq, min_irq, - &jcore_aic_irqdomain_ops, - &jcore_aic); --- -2.39.2 - diff --git a/queue-6.4/irqchip-loongson-eiointc-fix-irq-affinity-setting-du.patch b/queue-6.4/irqchip-loongson-eiointc-fix-irq-affinity-setting-du.patch deleted file mode 100644 index 49ca54c0025..00000000000 --- a/queue-6.4/irqchip-loongson-eiointc-fix-irq-affinity-setting-du.patch +++ /dev/null @@ -1,52 +0,0 @@ -From 41fba3fceacb1dd1b899a02c906467058cd904c9 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Wed, 14 Jun 2023 19:59:36 +0800 -Subject: irqchip/loongson-eiointc: Fix irq affinity setting during resume - -From: Jianmin Lv - -[ Upstream commit fb07b8f83441febeb0daf199b5f18c6de9bbab03 ] - -The hierarchy of PCH PIC, PCH PCI MSI and EIONTC is as following: - - PCH PIC ------->| - |---->EIOINTC - PCH PCI MSI --->| - -so the irq_data list of irq_desc for IRQs on PCH PIC and PCH PCI MSI -is like this: - -irq_desc->irq_data(domain: PCH PIC)->parent_data(domain: EIOINTC) -irq_desc->irq_data(domain: PCH PCI MSI)->parent_data(domain: EIOINTC) - -In eiointc_resume(), the irq_data passed into eiointc_set_irq_affinity() -should be matched to EIOINTC domain instead of PCH PIC or PCH PCI MSI -domain, so fix it. - -Fixes: a90335c2dfb4 ("irqchip/loongson-eiointc: Add suspend/resume support") - -Reported-by: yangqiming -Signed-off-by: Jianmin Lv -Signed-off-by: Marc Zyngier -Link: https://lore.kernel.org/r/20230614115936.5950-6-lvjianmin@loongson.cn -Signed-off-by: Sasha Levin ---- - drivers/irqchip/irq-loongson-eiointc.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/drivers/irqchip/irq-loongson-eiointc.c b/drivers/irqchip/irq-loongson-eiointc.c -index 71ef19f77a5a0..a7fcde3e3ecc7 100644 ---- a/drivers/irqchip/irq-loongson-eiointc.c -+++ b/drivers/irqchip/irq-loongson-eiointc.c -@@ -314,7 +314,7 @@ static void eiointc_resume(void) - desc = irq_resolve_mapping(eiointc_priv[i]->eiointc_domain, j); - if (desc && desc->handle_irq && desc->handle_irq != handle_bad_irq) { - raw_spin_lock(&desc->lock); -- irq_data = &desc->irq_data; -+ irq_data = irq_domain_get_irq_data(eiointc_priv[i]->eiointc_domain, irq_desc_get_irq(desc)); - eiointc_set_irq_affinity(irq_data, irq_data->common->affinity, 0); - raw_spin_unlock(&desc->lock); - } --- -2.39.2 - diff --git a/queue-6.4/irqchip-stm32-exti-fix-warning-on-initialized-field-.patch b/queue-6.4/irqchip-stm32-exti-fix-warning-on-initialized-field-.patch deleted file mode 100644 index 3ae2ec87e52..00000000000 --- a/queue-6.4/irqchip-stm32-exti-fix-warning-on-initialized-field-.patch +++ /dev/null @@ -1,62 +0,0 @@ -From 5f164428edf8fb98eb0999a5c698cf56899f10d6 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Thu, 1 Jun 2023 17:56:14 +0200 -Subject: irqchip/stm32-exti: Fix warning on initialized field overwritten - -From: Antonio Borneo - -[ Upstream commit 48f31e496488a25f443c0df52464da446fb1d10c ] - -While compiling with W=1, both gcc and clang complain about a -tricky way to initialize an array by filling it with a non-zero -value and then overrride some of the array elements. -In this case the override is intentional, so just disable the -specific warning for only this part of the code. - -Note: the flag "-Woverride-init" is recognized by both compilers, -but the warning msg from clang reports "-Winitializer-overrides". -The doc of clang clarifies that the two flags are synonyms, so use -here only the flag name common on both compilers. - -Signed-off-by: Antonio Borneo -Fixes: c297493336b7 ("irqchip/stm32-exti: Simplify irq description table") -Signed-off-by: Marc Zyngier -Link: https://lore.kernel.org/r/20230601155614.34490-1-antonio.borneo@foss.st.com -Signed-off-by: Sasha Levin ---- - drivers/irqchip/irq-stm32-exti.c | 12 ++++++++++++ - 1 file changed, 12 insertions(+) - -diff --git a/drivers/irqchip/irq-stm32-exti.c b/drivers/irqchip/irq-stm32-exti.c -index 6a3f7498ea8ea..8bbb2b114636c 100644 ---- a/drivers/irqchip/irq-stm32-exti.c -+++ b/drivers/irqchip/irq-stm32-exti.c -@@ -173,6 +173,16 @@ static struct irq_chip stm32_exti_h_chip_direct; - #define EXTI_INVALID_IRQ U8_MAX - #define STM32MP1_DESC_IRQ_SIZE (ARRAY_SIZE(stm32mp1_exti_banks) * IRQS_PER_BANK) - -+/* -+ * Use some intentionally tricky logic here to initialize the whole array to -+ * EXTI_INVALID_IRQ, but then override certain fields, requiring us to indicate -+ * that we "know" that there are overrides in this structure, and we'll need to -+ * disable that warning from W=1 builds. -+ */ -+__diag_push(); -+__diag_ignore_all("-Woverride-init", -+ "logic to initialize all and then override some is OK"); -+ - static const u8 stm32mp1_desc_irq[] = { - /* default value */ - [0 ... (STM32MP1_DESC_IRQ_SIZE - 1)] = EXTI_INVALID_IRQ, -@@ -266,6 +276,8 @@ static const u8 stm32mp13_desc_irq[] = { - [70] = 98, - }; - -+__diag_pop(); -+ - static const struct stm32_exti_drv_data stm32mp1_drv_data = { - .exti_banks = stm32mp1_exti_banks, - .bank_nr = ARRAY_SIZE(stm32mp1_exti_banks), --- -2.39.2 - diff --git a/queue-6.4/kbuild-builddeb-always-make-modules_install-to-insta.patch b/queue-6.4/kbuild-builddeb-always-make-modules_install-to-insta.patch deleted file mode 100644 index c10b8cde861..00000000000 --- a/queue-6.4/kbuild-builddeb-always-make-modules_install-to-insta.patch +++ /dev/null @@ -1,45 +0,0 @@ -From 7c1a8739fd3dfe3ec56fc4514a1c42ca27777f41 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Thu, 22 Jun 2023 12:19:53 -0700 -Subject: kbuild: builddeb: always make modules_install, to install - modules.builtin* - -From: Josh Triplett - -[ Upstream commit 4243afdb932677a03770753be8c54b3190a512e8 ] - -Even for a non-modular kernel, the kernel builds modules.builtin and -modules.builtin.modinfo, with information about the built-in modules. -Tools such as initramfs-tools need these files to build a working -initramfs on some systems, such as those requiring firmware. - -Now that `make modules_install` works even in non-modular kernels and -installs these files, unconditionally invoke it when building a Debian -package. - -Signed-off-by: Josh Triplett -Reviewed-by: Nicolas Schier -Signed-off-by: Masahiro Yamada -Stable-dep-of: 1240dabe8d58 ("kbuild: deb-pkg: remove the CONFIG_MODULES check in buildeb") -Signed-off-by: Sasha Levin ---- - scripts/package/builddeb | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/scripts/package/builddeb b/scripts/package/builddeb -index 252faaa5561cc..f500e39101581 100755 ---- a/scripts/package/builddeb -+++ b/scripts/package/builddeb -@@ -62,8 +62,8 @@ install_linux_image () { - ${MAKE} -f ${srctree}/Makefile INSTALL_DTBS_PATH="${pdir}/usr/lib/linux-image-${KERNELRELEASE}" dtbs_install - fi - -+ ${MAKE} -f ${srctree}/Makefile INSTALL_MOD_PATH="${pdir}" modules_install - if is_enabled CONFIG_MODULES; then -- ${MAKE} -f ${srctree}/Makefile INSTALL_MOD_PATH="${pdir}" modules_install - rm -f "${pdir}/lib/modules/${KERNELRELEASE}/build" - rm -f "${pdir}/lib/modules/${KERNELRELEASE}/source" - if [ "${SRCARCH}" = um ] ; then --- -2.39.2 - diff --git a/queue-6.4/kbuild-deb-pkg-remove-the-config_modules-check-in-bu.patch b/queue-6.4/kbuild-deb-pkg-remove-the-config_modules-check-in-bu.patch deleted file mode 100644 index c96af78bf88..00000000000 --- a/queue-6.4/kbuild-deb-pkg-remove-the-config_modules-check-in-bu.patch +++ /dev/null @@ -1,54 +0,0 @@ -From 167a77de4f9caaf73cd39aee7f3f9880d10c2a9c Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Mon, 26 Jun 2023 03:16:23 +0900 -Subject: kbuild: deb-pkg: remove the CONFIG_MODULES check in buildeb - -From: Masahiro Yamada - -[ Upstream commit 1240dabe8d58b4eff09e7edf1560da0360f997aa ] - -When CONFIG_MODULES is disabled for ARCH=um, 'make (bin)deb-pkg' fails -with an error like follows: - - cp: cannot create regular file 'debian/linux-image/usr/lib/uml/modules/6.4.0-rc2+/System.map': No such file or directory - -Remove the CONFIG_MODULES check completely so ${pdir}/usr/lib/uml/modules -will always be created and modules.builtin.(modinfo) will be installed -under it for ARCH=um. - -Fixes: b611daae5efc ("kbuild: deb-pkg: split image and debug objects staging out into functions") -Signed-off-by: Masahiro Yamada -Signed-off-by: Sasha Levin ---- - scripts/package/builddeb | 12 ++++-------- - 1 file changed, 4 insertions(+), 8 deletions(-) - -diff --git a/scripts/package/builddeb b/scripts/package/builddeb -index f500e39101581..032774eb061e1 100755 ---- a/scripts/package/builddeb -+++ b/scripts/package/builddeb -@@ -63,17 +63,13 @@ install_linux_image () { - fi - - ${MAKE} -f ${srctree}/Makefile INSTALL_MOD_PATH="${pdir}" modules_install -- if is_enabled CONFIG_MODULES; then -- rm -f "${pdir}/lib/modules/${KERNELRELEASE}/build" -- rm -f "${pdir}/lib/modules/${KERNELRELEASE}/source" -- if [ "${SRCARCH}" = um ] ; then -- mkdir -p "${pdir}/usr/lib/uml/modules" -- mv "${pdir}/lib/modules/${KERNELRELEASE}" "${pdir}/usr/lib/uml/modules/${KERNELRELEASE}" -- fi -- fi -+ rm -f "${pdir}/lib/modules/${KERNELRELEASE}/build" -+ rm -f "${pdir}/lib/modules/${KERNELRELEASE}/source" - - # Install the kernel - if [ "${ARCH}" = um ] ; then -+ mkdir -p "${pdir}/usr/lib/uml/modules" -+ mv "${pdir}/lib/modules/${KERNELRELEASE}" "${pdir}/usr/lib/uml/modules/${KERNELRELEASE}" - mkdir -p "${pdir}/usr/bin" "${pdir}/usr/share/doc/${pname}" - cp System.map "${pdir}/usr/lib/uml/modules/${KERNELRELEASE}/System.map" - cp ${KCONFIG_CONFIG} "${pdir}/usr/share/doc/${pname}/config" --- -2.39.2 - diff --git a/queue-6.4/kbuild-disable-gcov-for-.mod.o.patch b/queue-6.4/kbuild-disable-gcov-for-.mod.o.patch deleted file mode 100644 index f630ab77a6a..00000000000 --- a/queue-6.4/kbuild-disable-gcov-for-.mod.o.patch +++ /dev/null @@ -1,50 +0,0 @@ -From f05814b396b4499442946dd0b4ad61ba9931b7bc Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Fri, 23 Jun 2023 00:11:43 +0000 -Subject: kbuild: Disable GCOV for *.mod.o - -From: Sami Tolvanen - -[ Upstream commit 25a21fbb934a0d989e1858f83c2ddf4cfb2ebe30 ] - -With GCOV_PROFILE_ALL, Clang injects __llvm_gcov_* functions to each -object file, including the *.mod.o. As we filter out CC_FLAGS_CFI -for *.mod.o, the compiler won't generate type hashes for the -injected functions, and therefore indirectly calling them during -module loading trips indirect call checking. - -Enabling CFI for *.mod.o isn't sufficient to fix this issue after -commit 0c3e806ec0f9 ("x86/cfi: Add boot time hash randomization"), -as *.mod.o aren't processed by objtool, which means any hashes -emitted there won't be randomized. Therefore, in addition to -disabling CFI for *.mod.o, also disable GCOV, as the object files -don't otherwise contain any executable code. - -Fixes: cf68fffb66d6 ("add support for Clang CFI") -Reported-by: Joe Fradley -Signed-off-by: Sami Tolvanen -Acked-by: Peter Zijlstra (Intel) -Reviewed-by: Kees Cook -Reviewed-by: Nick Desaulniers -Signed-off-by: Masahiro Yamada -Signed-off-by: Sasha Levin ---- - scripts/Makefile.modfinal | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/scripts/Makefile.modfinal b/scripts/Makefile.modfinal -index 4703f652c0098..fc19f67039bda 100644 ---- a/scripts/Makefile.modfinal -+++ b/scripts/Makefile.modfinal -@@ -23,7 +23,7 @@ modname = $(notdir $(@:.mod.o=)) - part-of-module = y - - quiet_cmd_cc_o_c = CC [M] $@ -- cmd_cc_o_c = $(CC) $(filter-out $(CC_FLAGS_CFI), $(c_flags)) -c -o $@ $< -+ cmd_cc_o_c = $(CC) $(filter-out $(CC_FLAGS_CFI) $(CFLAGS_GCOV), $(c_flags)) -c -o $@ $< - - %.mod.o: %.mod.c FORCE - $(call if_changed_dep,cc_o_c) --- -2.39.2 - diff --git a/queue-6.4/kbuild-fix-cfi-failures-with-gcov.patch b/queue-6.4/kbuild-fix-cfi-failures-with-gcov.patch deleted file mode 100644 index 36a6472896c..00000000000 --- a/queue-6.4/kbuild-fix-cfi-failures-with-gcov.patch +++ /dev/null @@ -1,58 +0,0 @@ -From 3bf9a6ce80d32988d61f917d20fd71dd65b4551d Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Fri, 23 Jun 2023 00:11:42 +0000 -Subject: kbuild: Fix CFI failures with GCOV - -From: Sami Tolvanen - -[ Upstream commit ddf56288eebd1fe82c46fc9f693b5b18045cddb6 ] - -With GCOV_PROFILE_ALL, Clang injects __llvm_gcov_* functions to -each object file, and the functions are indirectly called during -boot. However, when code is injected to object files that are not -part of vmlinux.o, it's also not processed by objtool, which breaks -CFI hash randomization as the hashes in these files won't be -included in the .cfi_sites section and thus won't be randomized. - -Similarly to commit 42633ed852de ("kbuild: Fix CFI hash -randomization with KASAN"), disable GCOV for .vmlinux.export.o and -init/version-timestamp.o to avoid emitting unnecessary functions to -object files that don't otherwise have executable code. - -Fixes: 0c3e806ec0f9 ("x86/cfi: Add boot time hash randomization") -Reported-by: Joe Fradley -Signed-off-by: Sami Tolvanen -Acked-by: Peter Zijlstra (Intel) -Reviewed-by: Kees Cook -Reviewed-by: Nick Desaulniers -Signed-off-by: Masahiro Yamada -Signed-off-by: Sasha Levin ---- - init/Makefile | 1 + - scripts/Makefile.vmlinux | 1 + - 2 files changed, 2 insertions(+) - -diff --git a/init/Makefile b/init/Makefile -index 26de459006c4e..ec557ada3c12e 100644 ---- a/init/Makefile -+++ b/init/Makefile -@@ -60,3 +60,4 @@ include/generated/utsversion.h: FORCE - $(obj)/version-timestamp.o: include/generated/utsversion.h - CFLAGS_version-timestamp.o := -include include/generated/utsversion.h - KASAN_SANITIZE_version-timestamp.o := n -+GCOV_PROFILE_version-timestamp.o := n -diff --git a/scripts/Makefile.vmlinux b/scripts/Makefile.vmlinux -index 10176dec97eac..3cd6ca15f390d 100644 ---- a/scripts/Makefile.vmlinux -+++ b/scripts/Makefile.vmlinux -@@ -19,6 +19,7 @@ quiet_cmd_cc_o_c = CC $@ - - ifdef CONFIG_MODULES - KASAN_SANITIZE_.vmlinux.export.o := n -+GCOV_PROFILE_.vmlinux.export.o := n - targets += .vmlinux.export.o - vmlinux: .vmlinux.export.o - endif --- -2.39.2 - diff --git a/queue-6.4/kcsan-don-t-expect-64-bits-atomic-builtins-from-32-b.patch b/queue-6.4/kcsan-don-t-expect-64-bits-atomic-builtins-from-32-b.patch deleted file mode 100644 index 44e85b502a4..00000000000 --- a/queue-6.4/kcsan-don-t-expect-64-bits-atomic-builtins-from-32-b.patch +++ /dev/null @@ -1,71 +0,0 @@ -From f87518efc99b922a58a0f492d37e850738580a35 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Fri, 12 May 2023 17:31:17 +0200 -Subject: kcsan: Don't expect 64 bits atomic builtins from 32 bits - architectures - -From: Christophe Leroy - -[ Upstream commit 353e7300a1db928e427462f2745f9a2cd1625b3d ] - -Activating KCSAN on a 32 bits architecture leads to the following -link-time failure: - - LD .tmp_vmlinux.kallsyms1 - powerpc64-linux-ld: kernel/kcsan/core.o: in function `__tsan_atomic64_load': - kernel/kcsan/core.c:1273: undefined reference to `__atomic_load_8' - powerpc64-linux-ld: kernel/kcsan/core.o: in function `__tsan_atomic64_store': - kernel/kcsan/core.c:1273: undefined reference to `__atomic_store_8' - powerpc64-linux-ld: kernel/kcsan/core.o: in function `__tsan_atomic64_exchange': - kernel/kcsan/core.c:1273: undefined reference to `__atomic_exchange_8' - powerpc64-linux-ld: kernel/kcsan/core.o: in function `__tsan_atomic64_fetch_add': - kernel/kcsan/core.c:1273: undefined reference to `__atomic_fetch_add_8' - powerpc64-linux-ld: kernel/kcsan/core.o: in function `__tsan_atomic64_fetch_sub': - kernel/kcsan/core.c:1273: undefined reference to `__atomic_fetch_sub_8' - powerpc64-linux-ld: kernel/kcsan/core.o: in function `__tsan_atomic64_fetch_and': - kernel/kcsan/core.c:1273: undefined reference to `__atomic_fetch_and_8' - powerpc64-linux-ld: kernel/kcsan/core.o: in function `__tsan_atomic64_fetch_or': - kernel/kcsan/core.c:1273: undefined reference to `__atomic_fetch_or_8' - powerpc64-linux-ld: kernel/kcsan/core.o: in function `__tsan_atomic64_fetch_xor': - kernel/kcsan/core.c:1273: undefined reference to `__atomic_fetch_xor_8' - powerpc64-linux-ld: kernel/kcsan/core.o: in function `__tsan_atomic64_fetch_nand': - kernel/kcsan/core.c:1273: undefined reference to `__atomic_fetch_nand_8' - powerpc64-linux-ld: kernel/kcsan/core.o: in function `__tsan_atomic64_compare_exchange_strong': - kernel/kcsan/core.c:1273: undefined reference to `__atomic_compare_exchange_8' - powerpc64-linux-ld: kernel/kcsan/core.o: in function `__tsan_atomic64_compare_exchange_weak': - kernel/kcsan/core.c:1273: undefined reference to `__atomic_compare_exchange_8' - powerpc64-linux-ld: kernel/kcsan/core.o: in function `__tsan_atomic64_compare_exchange_val': - kernel/kcsan/core.c:1273: undefined reference to `__atomic_compare_exchange_8' - -32 bits architectures don't have 64 bits atomic builtins. Only -include DEFINE_TSAN_ATOMIC_OPS(64) on 64 bits architectures. - -Fixes: 0f8ad5f2e934 ("kcsan: Add support for atomic builtins") -Suggested-by: Marco Elver -Signed-off-by: Christophe Leroy -Reviewed-by: Marco Elver -Acked-by: Marco Elver -Signed-off-by: Michael Ellerman -Link: https://msgid.link/d9c6afc28d0855240171a4e0ad9ffcdb9d07fceb.1683892665.git.christophe.leroy@csgroup.eu -Signed-off-by: Sasha Levin ---- - kernel/kcsan/core.c | 2 ++ - 1 file changed, 2 insertions(+) - -diff --git a/kernel/kcsan/core.c b/kernel/kcsan/core.c -index 5a60cc52adc0c..8a7baf4e332e3 100644 ---- a/kernel/kcsan/core.c -+++ b/kernel/kcsan/core.c -@@ -1270,7 +1270,9 @@ static __always_inline void kcsan_atomic_builtin_memorder(int memorder) - DEFINE_TSAN_ATOMIC_OPS(8); - DEFINE_TSAN_ATOMIC_OPS(16); - DEFINE_TSAN_ATOMIC_OPS(32); -+#ifdef CONFIG_64BIT - DEFINE_TSAN_ATOMIC_OPS(64); -+#endif - - void __tsan_atomic_thread_fence(int memorder); - void __tsan_atomic_thread_fence(int memorder) --- -2.39.2 - diff --git a/queue-6.4/kexec-fix-a-memory-leak-in-crash_shrink_memory.patch b/queue-6.4/kexec-fix-a-memory-leak-in-crash_shrink_memory.patch deleted file mode 100644 index 3bb06fc396e..00000000000 --- a/queue-6.4/kexec-fix-a-memory-leak-in-crash_shrink_memory.patch +++ /dev/null @@ -1,93 +0,0 @@ -From d246c014609c01b9412f0bb59d2039c9761396eb Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Sat, 27 May 2023 20:34:34 +0800 -Subject: kexec: fix a memory leak in crash_shrink_memory() - -From: Zhen Lei - -[ Upstream commit 1cba6c4309f03de570202c46f03df3f73a0d4c82 ] - -Patch series "kexec: enable kexec_crash_size to support two crash kernel -regions". - -When crashkernel=X fails to reserve region under 4G, it will fall back to -reserve region above 4G and a region of the default size will also be -reserved under 4G. Unfortunately, /sys/kernel/kexec_crash_size only -supports one crash kernel region now, the user cannot sense the low memory -reserved by reading /sys/kernel/kexec_crash_size. Also, low memory cannot -be freed by writing this file. - -For example: -resource_size(crashk_res) = 512M -resource_size(crashk_low_res) = 256M - -The result of 'cat /sys/kernel/kexec_crash_size' is 512M, but it should be -768M. When we execute 'echo 0 > /sys/kernel/kexec_crash_size', the size -of crashk_res becomes 0 and resource_size(crashk_low_res) is still 256 MB, -which is incorrect. - -Since crashk_res manages the memory with high address and crashk_low_res -manages the memory with low address, crashk_low_res is shrunken only when -all crashk_res is shrunken. And because when there is only one crash -kernel region, crashk_res is always used. Therefore, if all crashk_res is -shrunken and crashk_low_res still exists, swap them. - -This patch (of 6): - -If the value of parameter 'new_size' is in the semi-open and semi-closed -interval (crashk_res.end - KEXEC_CRASH_MEM_ALIGN + 1, crashk_res.end], the -calculation result of ram_res is: - - ram_res->start = crashk_res.end + 1 - ram_res->end = crashk_res.end - -The operation of insert_resource() fails, and ram_res is not added to -iomem_resource. As a result, the memory of the control block ram_res is -leaked. - -In fact, on all architectures, the start address and size of crashk_res -are already aligned by KEXEC_CRASH_MEM_ALIGN. Therefore, we do not need -to round up crashk_res.start again. Instead, we should round up -'new_size' in advance. - -Link: https://lkml.kernel.org/r/20230527123439.772-1-thunder.leizhen@huawei.com -Link: https://lkml.kernel.org/r/20230527123439.772-2-thunder.leizhen@huawei.com -Fixes: 6480e5a09237 ("kdump: add missing RAM resource in crash_shrink_memory()") -Fixes: 06a7f711246b ("kexec: premit reduction of the reserved memory size") -Signed-off-by: Zhen Lei -Acked-by: Baoquan He -Cc: Cong Wang -Cc: Eric W. Biederman -Cc: Michael Holzheu -Signed-off-by: Andrew Morton -Signed-off-by: Sasha Levin ---- - kernel/kexec_core.c | 5 ++--- - 1 file changed, 2 insertions(+), 3 deletions(-) - -diff --git a/kernel/kexec_core.c b/kernel/kexec_core.c -index 3d578c6fefee3..22acee18195a5 100644 ---- a/kernel/kexec_core.c -+++ b/kernel/kexec_core.c -@@ -1122,6 +1122,7 @@ int crash_shrink_memory(unsigned long new_size) - start = crashk_res.start; - end = crashk_res.end; - old_size = (end == 0) ? 0 : end - start + 1; -+ new_size = roundup(new_size, KEXEC_CRASH_MEM_ALIGN); - if (new_size >= old_size) { - ret = (new_size == old_size) ? 0 : -EINVAL; - goto unlock; -@@ -1133,9 +1134,7 @@ int crash_shrink_memory(unsigned long new_size) - goto unlock; - } - -- start = roundup(start, KEXEC_CRASH_MEM_ALIGN); -- end = roundup(start + new_size, KEXEC_CRASH_MEM_ALIGN); -- -+ end = start + new_size; - crash_free_reserved_phys_range(end, crashk_res.end); - - if ((start == end) && (crashk_res.parent != NULL)) --- -2.39.2 - diff --git a/queue-6.4/kselftest-vdso-fix-accumulation-of-uninitialized-ret.patch b/queue-6.4/kselftest-vdso-fix-accumulation-of-uninitialized-ret.patch deleted file mode 100644 index b5b274c66e0..00000000000 --- a/queue-6.4/kselftest-vdso-fix-accumulation-of-uninitialized-ret.patch +++ /dev/null @@ -1,46 +0,0 @@ -From fcc322e65aeb6e9e19ee740f7c50bccc35f6a5e5 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Mon, 17 Apr 2023 11:47:43 +0100 -Subject: kselftest: vDSO: Fix accumulation of uninitialized ret when - CLOCK_REALTIME is undefined - -From: Colin Ian King - -[ Upstream commit 375b9ff53cb6f9c042817b75f2be0a650626dc4f ] - -In the unlikely case that CLOCK_REALTIME is not defined, variable ret is -not initialized and further accumulation of return values to ret can leave -ret in an undefined state. Fix this by initialized ret to zero and changing -the assignment of ret to an accumulation for the CLOCK_REALTIME case. - -Fixes: 03f55c7952c9 ("kselftest: Extend vDSO selftest to clock_getres") -Signed-off-by: Colin Ian King -Reviewed-by: Vincenzo Frascino -Signed-off-by: Shuah Khan -Signed-off-by: Sasha Levin ---- - tools/testing/selftests/vDSO/vdso_test_clock_getres.c | 4 ++-- - 1 file changed, 2 insertions(+), 2 deletions(-) - -diff --git a/tools/testing/selftests/vDSO/vdso_test_clock_getres.c b/tools/testing/selftests/vDSO/vdso_test_clock_getres.c -index 15dcee16ff726..38d46a8bf7cba 100644 ---- a/tools/testing/selftests/vDSO/vdso_test_clock_getres.c -+++ b/tools/testing/selftests/vDSO/vdso_test_clock_getres.c -@@ -84,12 +84,12 @@ static inline int vdso_test_clock(unsigned int clock_id) - - int main(int argc, char **argv) - { -- int ret; -+ int ret = 0; - - #if _POSIX_TIMERS > 0 - - #ifdef CLOCK_REALTIME -- ret = vdso_test_clock(CLOCK_REALTIME); -+ ret += vdso_test_clock(CLOCK_REALTIME); - #endif - - #ifdef CLOCK_BOOTTIME --- -2.39.2 - diff --git a/queue-6.4/ksmbd-avoid-field-overflow-warning.patch b/queue-6.4/ksmbd-avoid-field-overflow-warning.patch deleted file mode 100644 index 9c51ccce40e..00000000000 --- a/queue-6.4/ksmbd-avoid-field-overflow-warning.patch +++ /dev/null @@ -1,47 +0,0 @@ -From db08c10e7d669d2534b268cfc0875be8386abac0 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Mon, 19 Jun 2023 10:19:38 +0200 -Subject: ksmbd: avoid field overflow warning - -From: Arnd Bergmann - -[ Upstream commit 9cedc58bdbe9fff9aacd0ca19ee5777659f28fd7 ] - -clang warns about a possible field overflow in a memcpy: - -In file included from fs/smb/server/smb_common.c:7: -include/linux/fortify-string.h:583:4: error: call to '__write_overflow_field' declared with 'warning' attribute: detected write beyond size of field (1st parameter); maybe use struct_group()? [-Werror,-Wattribute-warning] - __write_overflow_field(p_size_field, size); - -It appears to interpret the "&out[baselen + 4]" as referring to a single -byte of the character array, while the equivalen "out + baselen + 4" is -seen as an offset into the array. - -I don't see that kind of warning elsewhere, so just go with the simple -rework. - -Fixes: e2f34481b24d ("cifsd: add server-side procedures for SMB3") -Signed-off-by: Arnd Bergmann -Acked-by: Namjae Jeon -Signed-off-by: Steve French -Signed-off-by: Sasha Levin ---- - fs/smb/server/smb_common.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/fs/smb/server/smb_common.c b/fs/smb/server/smb_common.c -index 569e5eecdf3db..3e391a7d5a3ab 100644 ---- a/fs/smb/server/smb_common.c -+++ b/fs/smb/server/smb_common.c -@@ -536,7 +536,7 @@ int ksmbd_extract_shortname(struct ksmbd_conn *conn, const char *longname, - out[baselen + 3] = PERIOD; - - if (dot_present) -- memcpy(&out[baselen + 4], extension, 4); -+ memcpy(out + baselen + 4, extension, 4); - else - out[baselen + 4] = '\0'; - smbConvertToUTF16((__le16 *)shortname, out, PATH_MAX, --- -2.39.2 - diff --git a/queue-6.4/kunit-tool-undo-type-subscripts-for-subprocess.popen.patch b/queue-6.4/kunit-tool-undo-type-subscripts-for-subprocess.popen.patch deleted file mode 100644 index c93f5a0ee81..00000000000 --- a/queue-6.4/kunit-tool-undo-type-subscripts-for-subprocess.popen.patch +++ /dev/null @@ -1,105 +0,0 @@ -From 0399222a25904870fe7e8593c2e1dade046286d1 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Mon, 1 May 2023 11:16:10 -0700 -Subject: kunit: tool: undo type subscripts for subprocess.Popen - -From: Daniel Latypov - -[ Upstream commit e30f65c4b3d671115bf2a9d9ef142285387f2aff ] - -Writing `subprocess.Popen[str]` requires python 3.9+. -kunit.py has an assertion that the python version is 3.7+, so we should -try to stay backwards compatible. - -This conflicts a bit with commit 1da2e6220e11 ("kunit: tool: fix -pre-existing `mypy --strict` errors and update run_checks.py"), since -mypy complains like so -> kunit_kernel.py:95: error: Missing type parameters for generic type "Popen" [type-arg] - -Note: `mypy --strict --python-version 3.7` does not work. - -We could annotate each file with comments like - `# mypy: disable-error-code="type-arg" -but then we might still get nudged to break back-compat in other files. - -This patch adds a `mypy.ini` file since it seems like the only way to -disable specific error codes for all our files. - -Note: run_checks.py doesn't need to specify `--config_file mypy.ini`, -but I think being explicit is better, particularly since most kernel -devs won't be familiar with how mypy works. - -Fixes: 695e26030858 ("kunit: tool: add subscripts for type annotations where appropriate") -Reported-by: SeongJae Park -Link: https://lore.kernel.org/linux-kselftest/20230501171520.138753-1-sj@kernel.org -Signed-off-by: Daniel Latypov -Tested-by: SeongJae Park -Reviewed-by: David Gow -Signed-off-by: Shuah Khan -Signed-off-by: Sasha Levin ---- - tools/testing/kunit/kunit_kernel.py | 6 +++--- - tools/testing/kunit/mypy.ini | 6 ++++++ - tools/testing/kunit/run_checks.py | 2 +- - 3 files changed, 10 insertions(+), 4 deletions(-) - create mode 100644 tools/testing/kunit/mypy.ini - -diff --git a/tools/testing/kunit/kunit_kernel.py b/tools/testing/kunit/kunit_kernel.py -index f01f941061296..7f648802caf6a 100644 ---- a/tools/testing/kunit/kunit_kernel.py -+++ b/tools/testing/kunit/kunit_kernel.py -@@ -92,7 +92,7 @@ class LinuxSourceTreeOperations: - if stderr: # likely only due to build warnings - print(stderr.decode()) - -- def start(self, params: List[str], build_dir: str) -> subprocess.Popen[str]: -+ def start(self, params: List[str], build_dir: str) -> subprocess.Popen: - raise RuntimeError('not implemented!') - - -@@ -113,7 +113,7 @@ class LinuxSourceTreeOperationsQemu(LinuxSourceTreeOperations): - kconfig.merge_in_entries(base_kunitconfig) - return kconfig - -- def start(self, params: List[str], build_dir: str) -> subprocess.Popen[str]: -+ def start(self, params: List[str], build_dir: str) -> subprocess.Popen: - kernel_path = os.path.join(build_dir, self._kernel_path) - qemu_command = ['qemu-system-' + self._qemu_arch, - '-nodefaults', -@@ -142,7 +142,7 @@ class LinuxSourceTreeOperationsUml(LinuxSourceTreeOperations): - kconfig.merge_in_entries(base_kunitconfig) - return kconfig - -- def start(self, params: List[str], build_dir: str) -> subprocess.Popen[str]: -+ def start(self, params: List[str], build_dir: str) -> subprocess.Popen: - """Runs the Linux UML binary. Must be named 'linux'.""" - linux_bin = os.path.join(build_dir, 'linux') - params.extend(['mem=1G', 'console=tty', 'kunit_shutdown=halt']) -diff --git a/tools/testing/kunit/mypy.ini b/tools/testing/kunit/mypy.ini -new file mode 100644 -index 0000000000000..ddd288309efaa ---- /dev/null -+++ b/tools/testing/kunit/mypy.ini -@@ -0,0 +1,6 @@ -+[mypy] -+strict = True -+ -+# E.g. we can't write subprocess.Popen[str] until Python 3.9+. -+# But kunit.py tries to support Python 3.7+, so let's disable it. -+disable_error_code = type-arg -diff --git a/tools/testing/kunit/run_checks.py b/tools/testing/kunit/run_checks.py -index 8208c3b3135ef..c6d494ea33739 100755 ---- a/tools/testing/kunit/run_checks.py -+++ b/tools/testing/kunit/run_checks.py -@@ -23,7 +23,7 @@ commands: Dict[str, Sequence[str]] = { - 'kunit_tool_test.py': ['./kunit_tool_test.py'], - 'kunit smoke test': ['./kunit.py', 'run', '--kunitconfig=lib/kunit', '--build_dir=kunit_run_checks'], - 'pytype': ['/bin/sh', '-c', 'pytype *.py'], -- 'mypy': ['mypy', '--strict', '--exclude', '_test.py$', '--exclude', 'qemu_configs/', '.'], -+ 'mypy': ['mypy', '--config-file', 'mypy.ini', '--exclude', '_test.py$', '--exclude', 'qemu_configs/', '.'], - } - - # The user might not have mypy or pytype installed, skip them if so. --- -2.39.2 - diff --git a/queue-6.4/lib-ts_bm-reset-initial-match-offset-for-every-block.patch b/queue-6.4/lib-ts_bm-reset-initial-match-offset-for-every-block.patch deleted file mode 100644 index 701383cd0c7..00000000000 --- a/queue-6.4/lib-ts_bm-reset-initial-match-offset-for-every-block.patch +++ /dev/null @@ -1,59 +0,0 @@ -From d83dc1f718306d0b13e6ff9546a458049329134f Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Mon, 19 Jun 2023 20:06:57 +0100 -Subject: lib/ts_bm: reset initial match offset for every block of text - -From: Jeremy Sowden - -[ Upstream commit 6f67fbf8192da80c4db01a1800c7fceaca9cf1f9 ] - -The `shift` variable which indicates the offset in the string at which -to start matching the pattern is initialized to `bm->patlen - 1`, but it -is not reset when a new block is retrieved. This means the implemen- -tation may start looking at later and later positions in each successive -block and miss occurrences of the pattern at the beginning. E.g., -consider a HTTP packet held in a non-linear skb, where the HTTP request -line occurs in the second block: - - [... 52 bytes of packet headers ...] - GET /bmtest HTTP/1.1\r\nHost: www.example.com\r\n\r\n - -and the pattern is "GET /bmtest". - -Once the first block comprising the packet headers has been examined, -`shift` will be pointing to somewhere near the end of the block, and so -when the second block is examined the request line at the beginning will -be missed. - -Reinitialize the variable for each new block. - -Fixes: 8082e4ed0a61 ("[LIB]: Boyer-Moore extension for textsearch infrastructure strike #2") -Link: https://bugzilla.netfilter.org/show_bug.cgi?id=1390 -Signed-off-by: Jeremy Sowden -Signed-off-by: Pablo Neira Ayuso -Signed-off-by: Sasha Levin ---- - lib/ts_bm.c | 4 +++- - 1 file changed, 3 insertions(+), 1 deletion(-) - -diff --git a/lib/ts_bm.c b/lib/ts_bm.c -index 1f2234221dd11..c8ecbf74ef295 100644 ---- a/lib/ts_bm.c -+++ b/lib/ts_bm.c -@@ -60,10 +60,12 @@ static unsigned int bm_find(struct ts_config *conf, struct ts_state *state) - struct ts_bm *bm = ts_config_priv(conf); - unsigned int i, text_len, consumed = state->offset; - const u8 *text; -- int shift = bm->patlen - 1, bs; -+ int bs; - const u8 icase = conf->flags & TS_IGNORECASE; - - for (;;) { -+ int shift = bm->patlen - 1; -+ - text_len = conf->get_next_block(consumed, &text, conf, state); - - if (unlikely(text_len == 0)) --- -2.39.2 - diff --git a/queue-6.4/libbpf-btf_dump_type_data_check_overflow-needs-to-co.patch b/queue-6.4/libbpf-btf_dump_type_data_check_overflow-needs-to-co.patch deleted file mode 100644 index b8eeee1ac15..00000000000 --- a/queue-6.4/libbpf-btf_dump_type_data_check_overflow-needs-to-co.patch +++ /dev/null @@ -1,120 +0,0 @@ -From 3c657d6935b1856234ed8962e6f1e4a48de8e9a4 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Thu, 27 Apr 2023 18:36:38 -0700 -Subject: libbpf: btf_dump_type_data_check_overflow needs to consider - BTF_MEMBER_BITFIELD_SIZE - -From: Martin KaFai Lau - -[ Upstream commit c39028b333f3a3a765c5c0b9726b8e38aedf0ba1 ] - -The btf_dump/struct_data selftest is failing with: - - [...] - test_btf_dump_struct_data:FAIL:unexpected return value dumping fs_context unexpected unexpected return value dumping fs_context: actual -7 != expected 264 - [...] - -The reason is in btf_dump_type_data_check_overflow(). It does not use -BTF_MEMBER_BITFIELD_SIZE from the struct's member (btf_member). Instead, -it is using the enum size which is 4. It had been working till the recent -commit 4e04143c869c ("fs_context: drop the unused lsm_flags member") -removed an integer member which also removed the 4 bytes padding at the -end of the fs_context. Missing this 4 bytes padding exposed this bug. In -particular, when btf_dump_type_data_check_overflow() reaches the member -'phase', -E2BIG is returned. - -The fix is to pass bit_sz to btf_dump_type_data_check_overflow(). In -btf_dump_type_data_check_overflow(), it does a different size check when -bit_sz is not zero. - -The current fs_context: - -[3600] ENUM 'fs_context_purpose' encoding=UNSIGNED size=4 vlen=3 - 'FS_CONTEXT_FOR_MOUNT' val=0 - 'FS_CONTEXT_FOR_SUBMOUNT' val=1 - 'FS_CONTEXT_FOR_RECONFIGURE' val=2 -[3601] ENUM 'fs_context_phase' encoding=UNSIGNED size=4 vlen=7 - 'FS_CONTEXT_CREATE_PARAMS' val=0 - 'FS_CONTEXT_CREATING' val=1 - 'FS_CONTEXT_AWAITING_MOUNT' val=2 - 'FS_CONTEXT_AWAITING_RECONF' val=3 - 'FS_CONTEXT_RECONF_PARAMS' val=4 - 'FS_CONTEXT_RECONFIGURING' val=5 - 'FS_CONTEXT_FAILED' val=6 -[3602] STRUCT 'fs_context' size=264 vlen=21 - 'ops' type_id=3603 bits_offset=0 - 'uapi_mutex' type_id=235 bits_offset=64 - 'fs_type' type_id=872 bits_offset=1216 - 'fs_private' type_id=21 bits_offset=1280 - 'sget_key' type_id=21 bits_offset=1344 - 'root' type_id=781 bits_offset=1408 - 'user_ns' type_id=251 bits_offset=1472 - 'net_ns' type_id=984 bits_offset=1536 - 'cred' type_id=1785 bits_offset=1600 - 'log' type_id=3621 bits_offset=1664 - 'source' type_id=42 bits_offset=1792 - 'security' type_id=21 bits_offset=1856 - 's_fs_info' type_id=21 bits_offset=1920 - 'sb_flags' type_id=20 bits_offset=1984 - 'sb_flags_mask' type_id=20 bits_offset=2016 - 's_iflags' type_id=20 bits_offset=2048 - 'purpose' type_id=3600 bits_offset=2080 bitfield_size=8 - 'phase' type_id=3601 bits_offset=2088 bitfield_size=8 - 'need_free' type_id=67 bits_offset=2096 bitfield_size=1 - 'global' type_id=67 bits_offset=2097 bitfield_size=1 - 'oldapi' type_id=67 bits_offset=2098 bitfield_size=1 - -Fixes: 920d16af9b42 ("libbpf: BTF dumper support for typed data") -Signed-off-by: Martin KaFai Lau -Signed-off-by: Daniel Borkmann -Acked-by: Yonghong Song -Link: https://lore.kernel.org/bpf/20230428013638.1581263-1-martin.lau@linux.dev -Signed-off-by: Sasha Levin ---- - tools/lib/bpf/btf_dump.c | 22 +++++++++++++++++++--- - 1 file changed, 19 insertions(+), 3 deletions(-) - -diff --git a/tools/lib/bpf/btf_dump.c b/tools/lib/bpf/btf_dump.c -index 580985ee55458..4d9f30bf7f014 100644 ---- a/tools/lib/bpf/btf_dump.c -+++ b/tools/lib/bpf/btf_dump.c -@@ -2250,9 +2250,25 @@ static int btf_dump_type_data_check_overflow(struct btf_dump *d, - const struct btf_type *t, - __u32 id, - const void *data, -- __u8 bits_offset) -+ __u8 bits_offset, -+ __u8 bit_sz) - { -- __s64 size = btf__resolve_size(d->btf, id); -+ __s64 size; -+ -+ if (bit_sz) { -+ /* bits_offset is at most 7. bit_sz is at most 128. */ -+ __u8 nr_bytes = (bits_offset + bit_sz + 7) / 8; -+ -+ /* When bit_sz is non zero, it is called from -+ * btf_dump_struct_data() where it only cares about -+ * negative error value. -+ * Return nr_bytes in success case to make it -+ * consistent as the regular integer case below. -+ */ -+ return data + nr_bytes > d->typed_dump->data_end ? -E2BIG : nr_bytes; -+ } -+ -+ size = btf__resolve_size(d->btf, id); - - if (size < 0 || size >= INT_MAX) { - pr_warn("unexpected size [%zu] for id [%u]\n", -@@ -2407,7 +2423,7 @@ static int btf_dump_dump_type_data(struct btf_dump *d, - { - int size, err = 0; - -- size = btf_dump_type_data_check_overflow(d, t, id, data, bits_offset); -+ size = btf_dump_type_data_check_overflow(d, t, id, data, bits_offset, bit_sz); - if (size < 0) - return size; - err = btf_dump_type_data_check_zero(d, t, id, data, bits_offset, bit_sz); --- -2.39.2 - diff --git a/queue-6.4/libbpf-fix-offsetof-and-container_of-to-work-with-co.patch b/queue-6.4/libbpf-fix-offsetof-and-container_of-to-work-with-co.patch deleted file mode 100644 index 735ed5fcc28..00000000000 --- a/queue-6.4/libbpf-fix-offsetof-and-container_of-to-work-with-co.patch +++ /dev/null @@ -1,62 +0,0 @@ -From eec860ea49769794b00a34b9946daf0fc95ef82b Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Mon, 8 May 2023 23:55:02 -0700 -Subject: libbpf: fix offsetof() and container_of() to work with CO-RE - -From: Andrii Nakryiko - -[ Upstream commit bdeeed3498c7871c17465bb4f11d1bc67f9098af ] - -It seems like __builtin_offset() doesn't preserve CO-RE field -relocations properly. So if offsetof() macro is defined through -__builtin_offset(), CO-RE-enabled BPF code using container_of() will be -subtly and silently broken. - -To avoid this problem, redefine offsetof() and container_of() in the -form that works with CO-RE relocations more reliably. - -Fixes: 5fbc220862fc ("tools/libpf: Add offsetof/container_of macro in bpf_helpers.h") -Reported-by: Lennart Poettering -Signed-off-by: Andrii Nakryiko -Acked-by: Yonghong Song -Link: https://lore.kernel.org/r/20230509065502.2306180-1-andrii@kernel.org -Signed-off-by: Alexei Starovoitov -Signed-off-by: Sasha Levin ---- - tools/lib/bpf/bpf_helpers.h | 15 ++++++++++----- - 1 file changed, 10 insertions(+), 5 deletions(-) - -diff --git a/tools/lib/bpf/bpf_helpers.h b/tools/lib/bpf/bpf_helpers.h -index 929a3baca8ef3..bbab9ad9dc5a7 100644 ---- a/tools/lib/bpf/bpf_helpers.h -+++ b/tools/lib/bpf/bpf_helpers.h -@@ -77,16 +77,21 @@ - /* - * Helper macros to manipulate data structures - */ --#ifndef offsetof --#define offsetof(TYPE, MEMBER) ((unsigned long)&((TYPE *)0)->MEMBER) --#endif --#ifndef container_of -+ -+/* offsetof() definition that uses __builtin_offset() might not preserve field -+ * offset CO-RE relocation properly, so force-redefine offsetof() using -+ * old-school approach which works with CO-RE correctly -+ */ -+#undef offsetof -+#define offsetof(type, member) ((unsigned long)&((type *)0)->member) -+ -+/* redefined container_of() to ensure we use the above offsetof() macro */ -+#undef container_of - #define container_of(ptr, type, member) \ - ({ \ - void *__mptr = (void *)(ptr); \ - ((type *)(__mptr - offsetof(type, member))); \ - }) --#endif - - /* - * Compiler (optimization) barrier. --- -2.39.2 - diff --git a/queue-6.4/lockd-drop-inappropriate-svc_get-from-locked_get.patch b/queue-6.4/lockd-drop-inappropriate-svc_get-from-locked_get.patch deleted file mode 100644 index f6fce524fbf..00000000000 --- a/queue-6.4/lockd-drop-inappropriate-svc_get-from-locked_get.patch +++ /dev/null @@ -1,57 +0,0 @@ -From f56aacc5d5d45cbe00b94fa2972e56eb2865d0be Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Sat, 3 Jun 2023 07:14:14 +1000 -Subject: lockd: drop inappropriate svc_get() from locked_get() - -From: NeilBrown - -[ Upstream commit 665e89ab7c5af1f2d260834c861a74b01a30f95f ] - -The below-mentioned patch was intended to simplify refcounting on the -svc_serv used by locked. The goal was to only ever have a single -reference from the single thread. To that end we dropped a call to -lockd_start_svc() (except when creating thread) which would take a -reference, and dropped the svc_put(serv) that would drop that reference. - -Unfortunately we didn't also remove the svc_get() from -lockd_create_svc() in the case where the svc_serv already existed. -So after the patch: - - on the first call the svc_serv was allocated and the one reference - was given to the thread, so there are no extra references - - on subsequent calls svc_get() was called so there is now an extra - reference. -This is clearly not consistent. - -The inconsistency is also clear in the current code in lockd_get() -takes *two* references, one on nlmsvc_serv and one by incrementing -nlmsvc_users. This clearly does not match lockd_put(). - -So: drop that svc_get() from lockd_get() (which used to be in -lockd_create_svc(). - -Reported-by: Ido Schimmel -Closes: https://lore.kernel.org/linux-nfs/ZHsI%2FH16VX9kJQX1@shredder/T/#u -Fixes: b73a2972041b ("lockd: move lockd_start_svc() call into lockd_create_svc()") -Signed-off-by: NeilBrown -Tested-by: Ido Schimmel -Signed-off-by: Chuck Lever -Signed-off-by: Sasha Levin ---- - fs/lockd/svc.c | 1 - - 1 file changed, 1 deletion(-) - -diff --git a/fs/lockd/svc.c b/fs/lockd/svc.c -index 04ba95b83d168..22d3ff3818f5f 100644 ---- a/fs/lockd/svc.c -+++ b/fs/lockd/svc.c -@@ -355,7 +355,6 @@ static int lockd_get(void) - int error; - - if (nlmsvc_serv) { -- svc_get(nlmsvc_serv); - nlmsvc_users++; - return 0; - } --- -2.39.2 - diff --git a/queue-6.4/locking-atomic-arm-fix-sync-ops.patch b/queue-6.4/locking-atomic-arm-fix-sync-ops.patch deleted file mode 100644 index 396acfa9afd..00000000000 --- a/queue-6.4/locking-atomic-arm-fix-sync-ops.patch +++ /dev/null @@ -1,191 +0,0 @@ -From da5c7452545c2d4e2f172d9ca72d2132cf142573 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Mon, 5 Jun 2023 08:00:58 +0100 -Subject: locking/atomic: arm: fix sync ops - -From: Mark Rutland - -[ Upstream commit dda5f312bb09e56e7a1c3e3851f2000eb2e9c879 ] - -The sync_*() ops on arch/arm are defined in terms of the regular bitops -with no special handling. This is not correct, as UP kernels elide -barriers for the fully-ordered operations, and so the required ordering -is lost when such UP kernels are run under a hypervsior on an SMP -system. - -Fix this by defining sync ops with the required barriers. - -Note: On 32-bit arm, the sync_*() ops are currently only used by Xen, -which requires ARMv7, but the semantics can be implemented for ARMv6+. - -Fixes: e54d2f61528165bb ("xen/arm: sync_bitops") -Signed-off-by: Mark Rutland -Signed-off-by: Peter Zijlstra (Intel) -Reviewed-by: Kees Cook -Link: https://lore.kernel.org/r/20230605070124.3741859-2-mark.rutland@arm.com -Signed-off-by: Sasha Levin ---- - arch/arm/include/asm/assembler.h | 17 +++++++++++++++++ - arch/arm/include/asm/sync_bitops.h | 29 +++++++++++++++++++++++++---- - arch/arm/lib/bitops.h | 14 +++++++++++--- - arch/arm/lib/testchangebit.S | 4 ++++ - arch/arm/lib/testclearbit.S | 4 ++++ - arch/arm/lib/testsetbit.S | 4 ++++ - 6 files changed, 65 insertions(+), 7 deletions(-) - -diff --git a/arch/arm/include/asm/assembler.h b/arch/arm/include/asm/assembler.h -index 505a306e0271a..aebe2c8f6a686 100644 ---- a/arch/arm/include/asm/assembler.h -+++ b/arch/arm/include/asm/assembler.h -@@ -394,6 +394,23 @@ ALT_UP_B(.L0_\@) - #endif - .endm - -+/* -+ * Raw SMP data memory barrier -+ */ -+ .macro __smp_dmb mode -+#if __LINUX_ARM_ARCH__ >= 7 -+ .ifeqs "\mode","arm" -+ dmb ish -+ .else -+ W(dmb) ish -+ .endif -+#elif __LINUX_ARM_ARCH__ == 6 -+ mcr p15, 0, r0, c7, c10, 5 @ dmb -+#else -+ .error "Incompatible SMP platform" -+#endif -+ .endm -+ - #if defined(CONFIG_CPU_V7M) - /* - * setmode is used to assert to be in svc mode during boot. For v7-M -diff --git a/arch/arm/include/asm/sync_bitops.h b/arch/arm/include/asm/sync_bitops.h -index 6f5d627c44a3c..f46b3c570f92e 100644 ---- a/arch/arm/include/asm/sync_bitops.h -+++ b/arch/arm/include/asm/sync_bitops.h -@@ -14,14 +14,35 @@ - * ops which are SMP safe even on a UP kernel. - */ - -+/* -+ * Unordered -+ */ -+ - #define sync_set_bit(nr, p) _set_bit(nr, p) - #define sync_clear_bit(nr, p) _clear_bit(nr, p) - #define sync_change_bit(nr, p) _change_bit(nr, p) --#define sync_test_and_set_bit(nr, p) _test_and_set_bit(nr, p) --#define sync_test_and_clear_bit(nr, p) _test_and_clear_bit(nr, p) --#define sync_test_and_change_bit(nr, p) _test_and_change_bit(nr, p) - #define sync_test_bit(nr, addr) test_bit(nr, addr) --#define arch_sync_cmpxchg arch_cmpxchg - -+/* -+ * Fully ordered -+ */ -+ -+int _sync_test_and_set_bit(int nr, volatile unsigned long * p); -+#define sync_test_and_set_bit(nr, p) _sync_test_and_set_bit(nr, p) -+ -+int _sync_test_and_clear_bit(int nr, volatile unsigned long * p); -+#define sync_test_and_clear_bit(nr, p) _sync_test_and_clear_bit(nr, p) -+ -+int _sync_test_and_change_bit(int nr, volatile unsigned long * p); -+#define sync_test_and_change_bit(nr, p) _sync_test_and_change_bit(nr, p) -+ -+#define arch_sync_cmpxchg(ptr, old, new) \ -+({ \ -+ __typeof__(*(ptr)) __ret; \ -+ __smp_mb__before_atomic(); \ -+ __ret = arch_cmpxchg_relaxed((ptr), (old), (new)); \ -+ __smp_mb__after_atomic(); \ -+ __ret; \ -+}) - - #endif -diff --git a/arch/arm/lib/bitops.h b/arch/arm/lib/bitops.h -index 95bd359912889..f069d1b2318e6 100644 ---- a/arch/arm/lib/bitops.h -+++ b/arch/arm/lib/bitops.h -@@ -28,7 +28,7 @@ UNWIND( .fnend ) - ENDPROC(\name ) - .endm - -- .macro testop, name, instr, store -+ .macro __testop, name, instr, store, barrier - ENTRY( \name ) - UNWIND( .fnstart ) - ands ip, r1, #3 -@@ -38,7 +38,7 @@ UNWIND( .fnstart ) - mov r0, r0, lsr #5 - add r1, r1, r0, lsl #2 @ Get word offset - mov r3, r2, lsl r3 @ create mask -- smp_dmb -+ \barrier - #if __LINUX_ARM_ARCH__ >= 7 && defined(CONFIG_SMP) - .arch_extension mp - ALT_SMP(W(pldw) [r1]) -@@ -50,13 +50,21 @@ UNWIND( .fnstart ) - strex ip, r2, [r1] - cmp ip, #0 - bne 1b -- smp_dmb -+ \barrier - cmp r0, #0 - movne r0, #1 - 2: bx lr - UNWIND( .fnend ) - ENDPROC(\name ) - .endm -+ -+ .macro testop, name, instr, store -+ __testop \name, \instr, \store, smp_dmb -+ .endm -+ -+ .macro sync_testop, name, instr, store -+ __testop \name, \instr, \store, __smp_dmb -+ .endm - #else - .macro bitop, name, instr - ENTRY( \name ) -diff --git a/arch/arm/lib/testchangebit.S b/arch/arm/lib/testchangebit.S -index 4ebecc67e6e04..f13fe9bc2399a 100644 ---- a/arch/arm/lib/testchangebit.S -+++ b/arch/arm/lib/testchangebit.S -@@ -10,3 +10,7 @@ - .text - - testop _test_and_change_bit, eor, str -+ -+#if __LINUX_ARM_ARCH__ >= 6 -+sync_testop _sync_test_and_change_bit, eor, str -+#endif -diff --git a/arch/arm/lib/testclearbit.S b/arch/arm/lib/testclearbit.S -index 009afa0f5b4a7..4d2c5ca620ebf 100644 ---- a/arch/arm/lib/testclearbit.S -+++ b/arch/arm/lib/testclearbit.S -@@ -10,3 +10,7 @@ - .text - - testop _test_and_clear_bit, bicne, strne -+ -+#if __LINUX_ARM_ARCH__ >= 6 -+sync_testop _sync_test_and_clear_bit, bicne, strne -+#endif -diff --git a/arch/arm/lib/testsetbit.S b/arch/arm/lib/testsetbit.S -index f3192e55acc87..649dbab65d8d0 100644 ---- a/arch/arm/lib/testsetbit.S -+++ b/arch/arm/lib/testsetbit.S -@@ -10,3 +10,7 @@ - .text - - testop _test_and_set_bit, orreq, streq -+ -+#if __LINUX_ARM_ARCH__ >= 6 -+sync_testop _sync_test_and_set_bit, orreq, streq -+#endif --- -2.39.2 - diff --git a/queue-6.4/md-raid1-10-factor-out-a-helper-to-add-bio-to-plug.patch b/queue-6.4/md-raid1-10-factor-out-a-helper-to-add-bio-to-plug.patch deleted file mode 100644 index a8f89bcf46d..00000000000 --- a/queue-6.4/md-raid1-10-factor-out-a-helper-to-add-bio-to-plug.patch +++ /dev/null @@ -1,109 +0,0 @@ -From e1b0b427651eb4dcd7ec3e5c0b2ae8cdc18a9c56 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Mon, 29 May 2023 21:11:01 +0800 -Subject: md/raid1-10: factor out a helper to add bio to plug - -From: Yu Kuai - -[ Upstream commit 5ec6ca140a034682e421e2e808ef5ddfdfd65242 ] - -The code in raid1 and raid10 is identical, prepare to limit the number -of plugged bios. - -Signed-off-by: Yu Kuai -Signed-off-by: Song Liu -Link: https://lore.kernel.org/r/20230529131106.2123367-3-yukuai1@huaweicloud.com -Stable-dep-of: 7db922bae3ab ("md/raid1-10: submit write io directly if bitmap is not enabled") -Signed-off-by: Sasha Levin ---- - drivers/md/raid1-10.c | 16 ++++++++++++++++ - drivers/md/raid1.c | 12 +----------- - drivers/md/raid10.c | 11 +---------- - 3 files changed, 18 insertions(+), 21 deletions(-) - -diff --git a/drivers/md/raid1-10.c b/drivers/md/raid1-10.c -index e61f6cad4e08e..9bf19a3409cef 100644 ---- a/drivers/md/raid1-10.c -+++ b/drivers/md/raid1-10.c -@@ -109,3 +109,19 @@ static void md_bio_reset_resync_pages(struct bio *bio, struct resync_pages *rp, - size -= len; - } while (idx++ < RESYNC_PAGES && size > 0); - } -+ -+static inline bool raid1_add_bio_to_plug(struct mddev *mddev, struct bio *bio, -+ blk_plug_cb_fn unplug) -+{ -+ struct raid1_plug_cb *plug = NULL; -+ struct blk_plug_cb *cb = blk_check_plugged(unplug, mddev, -+ sizeof(*plug)); -+ -+ if (!cb) -+ return false; -+ -+ plug = container_of(cb, struct raid1_plug_cb, cb); -+ bio_list_add(&plug->pending, bio); -+ -+ return true; -+} -diff --git a/drivers/md/raid1.c b/drivers/md/raid1.c -index 68a9e2d9985b2..131d8fd5ccaab 100644 ---- a/drivers/md/raid1.c -+++ b/drivers/md/raid1.c -@@ -1343,8 +1343,6 @@ static void raid1_write_request(struct mddev *mddev, struct bio *bio, - struct bitmap *bitmap = mddev->bitmap; - unsigned long flags; - struct md_rdev *blocked_rdev; -- struct blk_plug_cb *cb; -- struct raid1_plug_cb *plug = NULL; - int first_clone; - int max_sectors; - bool write_behind = false; -@@ -1573,15 +1571,7 @@ static void raid1_write_request(struct mddev *mddev, struct bio *bio, - r1_bio->sector); - /* flush_pending_writes() needs access to the rdev so...*/ - mbio->bi_bdev = (void *)rdev; -- -- cb = blk_check_plugged(raid1_unplug, mddev, sizeof(*plug)); -- if (cb) -- plug = container_of(cb, struct raid1_plug_cb, cb); -- else -- plug = NULL; -- if (plug) { -- bio_list_add(&plug->pending, mbio); -- } else { -+ if (!raid1_add_bio_to_plug(mddev, mbio, raid1_unplug)) { - spin_lock_irqsave(&conf->device_lock, flags); - bio_list_add(&conf->pending_bio_list, mbio); - spin_unlock_irqrestore(&conf->device_lock, flags); -diff --git a/drivers/md/raid10.c b/drivers/md/raid10.c -index c059533b890f9..eb0c1d019958e 100644 ---- a/drivers/md/raid10.c -+++ b/drivers/md/raid10.c -@@ -1290,8 +1290,6 @@ static void raid10_write_one_disk(struct mddev *mddev, struct r10bio *r10_bio, - const blk_opf_t do_sync = bio->bi_opf & REQ_SYNC; - const blk_opf_t do_fua = bio->bi_opf & REQ_FUA; - unsigned long flags; -- struct blk_plug_cb *cb; -- struct raid1_plug_cb *plug = NULL; - struct r10conf *conf = mddev->private; - struct md_rdev *rdev; - int devnum = r10_bio->devs[n_copy].devnum; -@@ -1331,14 +1329,7 @@ static void raid10_write_one_disk(struct mddev *mddev, struct r10bio *r10_bio, - - atomic_inc(&r10_bio->remaining); - -- cb = blk_check_plugged(raid10_unplug, mddev, sizeof(*plug)); -- if (cb) -- plug = container_of(cb, struct raid1_plug_cb, cb); -- else -- plug = NULL; -- if (plug) { -- bio_list_add(&plug->pending, mbio); -- } else { -+ if (!raid1_add_bio_to_plug(mddev, mbio, raid10_unplug)) { - spin_lock_irqsave(&conf->device_lock, flags); - bio_list_add(&conf->pending_bio_list, mbio); - spin_unlock_irqrestore(&conf->device_lock, flags); --- -2.39.2 - diff --git a/queue-6.4/md-raid1-10-factor-out-a-helper-to-submit-normal-wri.patch b/queue-6.4/md-raid1-10-factor-out-a-helper-to-submit-normal-wri.patch deleted file mode 100644 index ddd07da017d..00000000000 --- a/queue-6.4/md-raid1-10-factor-out-a-helper-to-submit-normal-wri.patch +++ /dev/null @@ -1,123 +0,0 @@ -From a5c769b43a2d48b2da7b5afde33ff33438b18667 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Mon, 29 May 2023 21:11:02 +0800 -Subject: md/raid1-10: factor out a helper to submit normal write - -From: Yu Kuai - -[ Upstream commit 8295efbe68c080047e98d9c0eb5cb933b238a8cb ] - -There are multiple places to do the same thing, factor out a helper to -prevent redundant code, and the helper will be used in following patch -as well. - -Signed-off-by: Yu Kuai -Signed-off-by: Song Liu -Link: https://lore.kernel.org/r/20230529131106.2123367-4-yukuai1@huaweicloud.com -Stable-dep-of: 7db922bae3ab ("md/raid1-10: submit write io directly if bitmap is not enabled") -Signed-off-by: Sasha Levin ---- - drivers/md/raid1-10.c | 17 +++++++++++++++++ - drivers/md/raid1.c | 13 ++----------- - drivers/md/raid10.c | 26 ++++---------------------- - 3 files changed, 23 insertions(+), 33 deletions(-) - -diff --git a/drivers/md/raid1-10.c b/drivers/md/raid1-10.c -index 9bf19a3409cef..506299bd55cb6 100644 ---- a/drivers/md/raid1-10.c -+++ b/drivers/md/raid1-10.c -@@ -110,6 +110,23 @@ static void md_bio_reset_resync_pages(struct bio *bio, struct resync_pages *rp, - } while (idx++ < RESYNC_PAGES && size > 0); - } - -+ -+static inline void raid1_submit_write(struct bio *bio) -+{ -+ struct md_rdev *rdev = (struct md_rdev *)bio->bi_bdev; -+ -+ bio->bi_next = NULL; -+ bio_set_dev(bio, rdev->bdev); -+ if (test_bit(Faulty, &rdev->flags)) -+ bio_io_error(bio); -+ else if (unlikely(bio_op(bio) == REQ_OP_DISCARD && -+ !bdev_max_discard_sectors(bio->bi_bdev))) -+ /* Just ignore it */ -+ bio_endio(bio); -+ else -+ submit_bio_noacct(bio); -+} -+ - static inline bool raid1_add_bio_to_plug(struct mddev *mddev, struct bio *bio, - blk_plug_cb_fn unplug) - { -diff --git a/drivers/md/raid1.c b/drivers/md/raid1.c -index 131d8fd5ccaab..e51b77a3a8397 100644 ---- a/drivers/md/raid1.c -+++ b/drivers/md/raid1.c -@@ -799,17 +799,8 @@ static void flush_bio_list(struct r1conf *conf, struct bio *bio) - - while (bio) { /* submit pending writes */ - struct bio *next = bio->bi_next; -- struct md_rdev *rdev = (void *)bio->bi_bdev; -- bio->bi_next = NULL; -- bio_set_dev(bio, rdev->bdev); -- if (test_bit(Faulty, &rdev->flags)) { -- bio_io_error(bio); -- } else if (unlikely((bio_op(bio) == REQ_OP_DISCARD) && -- !bdev_max_discard_sectors(bio->bi_bdev))) -- /* Just ignore it */ -- bio_endio(bio); -- else -- submit_bio_noacct(bio); -+ -+ raid1_submit_write(bio); - bio = next; - cond_resched(); - } -diff --git a/drivers/md/raid10.c b/drivers/md/raid10.c -index eb0c1d019958e..9d11a52367d17 100644 ---- a/drivers/md/raid10.c -+++ b/drivers/md/raid10.c -@@ -917,17 +917,8 @@ static void flush_pending_writes(struct r10conf *conf) - - while (bio) { /* submit pending writes */ - struct bio *next = bio->bi_next; -- struct md_rdev *rdev = (void*)bio->bi_bdev; -- bio->bi_next = NULL; -- bio_set_dev(bio, rdev->bdev); -- if (test_bit(Faulty, &rdev->flags)) { -- bio_io_error(bio); -- } else if (unlikely((bio_op(bio) == REQ_OP_DISCARD) && -- !bdev_max_discard_sectors(bio->bi_bdev))) -- /* Just ignore it */ -- bio_endio(bio); -- else -- submit_bio_noacct(bio); -+ -+ raid1_submit_write(bio); - bio = next; - } - blk_finish_plug(&plug); -@@ -1138,17 +1129,8 @@ static void raid10_unplug(struct blk_plug_cb *cb, bool from_schedule) - - while (bio) { /* submit pending writes */ - struct bio *next = bio->bi_next; -- struct md_rdev *rdev = (void*)bio->bi_bdev; -- bio->bi_next = NULL; -- bio_set_dev(bio, rdev->bdev); -- if (test_bit(Faulty, &rdev->flags)) { -- bio_io_error(bio); -- } else if (unlikely((bio_op(bio) == REQ_OP_DISCARD) && -- !bdev_max_discard_sectors(bio->bi_bdev))) -- /* Just ignore it */ -- bio_endio(bio); -- else -- submit_bio_noacct(bio); -+ -+ raid1_submit_write(bio); - bio = next; - } - kfree(plug); --- -2.39.2 - diff --git a/queue-6.4/md-raid1-10-submit-write-io-directly-if-bitmap-is-no.patch b/queue-6.4/md-raid1-10-submit-write-io-directly-if-bitmap-is-no.patch deleted file mode 100644 index d9e0f0132d9..00000000000 --- a/queue-6.4/md-raid1-10-submit-write-io-directly-if-bitmap-is-no.patch +++ /dev/null @@ -1,97 +0,0 @@ -From 584395e0b879607408dbce09ca35e96b3814c5b3 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Mon, 29 May 2023 21:11:03 +0800 -Subject: md/raid1-10: submit write io directly if bitmap is not enabled - -From: Yu Kuai - -[ Upstream commit 7db922bae3abdf0a1db81ef7228cc0b996a0c1e3 ] - -Commit 6cce3b23f6f8 ("[PATCH] md: write intent bitmap support for raid10") -add bitmap support, and it changed that write io is submitted through -daemon thread because bitmap need to be updated before write io. And -later, plug is used to fix performance regression because all the write io -will go to demon thread, which means io can't be issued concurrently. - -However, if bitmap is not enabled, the write io should not go to daemon -thread in the first place, and plug is not needed as well. - -Fixes: 6cce3b23f6f8 ("[PATCH] md: write intent bitmap support for raid10") -Signed-off-by: Yu Kuai -Signed-off-by: Song Liu -Link: https://lore.kernel.org/r/20230529131106.2123367-5-yukuai1@huaweicloud.com -Signed-off-by: Sasha Levin ---- - drivers/md/md-bitmap.c | 4 +--- - drivers/md/md-bitmap.h | 7 +++++++ - drivers/md/raid1-10.c | 13 +++++++++++-- - 3 files changed, 19 insertions(+), 5 deletions(-) - -diff --git a/drivers/md/md-bitmap.c b/drivers/md/md-bitmap.c -index 358a064959028..ea226a37b110a 100644 ---- a/drivers/md/md-bitmap.c -+++ b/drivers/md/md-bitmap.c -@@ -1016,7 +1016,6 @@ static int md_bitmap_file_test_bit(struct bitmap *bitmap, sector_t block) - return set; - } - -- - /* this gets called when the md device is ready to unplug its underlying - * (slave) device queues -- before we let any writes go down, we need to - * sync the dirty pages of the bitmap file to disk */ -@@ -1026,8 +1025,7 @@ void md_bitmap_unplug(struct bitmap *bitmap) - int dirty, need_write; - int writing = 0; - -- if (!bitmap || !bitmap->storage.filemap || -- test_bit(BITMAP_STALE, &bitmap->flags)) -+ if (!md_bitmap_enabled(bitmap)) - return; - - /* look at each page to see if there are any set bits that need to be -diff --git a/drivers/md/md-bitmap.h b/drivers/md/md-bitmap.h -index cfd7395de8fd3..3a4750952b3a7 100644 ---- a/drivers/md/md-bitmap.h -+++ b/drivers/md/md-bitmap.h -@@ -273,6 +273,13 @@ int md_bitmap_copy_from_slot(struct mddev *mddev, int slot, - sector_t *lo, sector_t *hi, bool clear_bits); - void md_bitmap_free(struct bitmap *bitmap); - void md_bitmap_wait_behind_writes(struct mddev *mddev); -+ -+static inline bool md_bitmap_enabled(struct bitmap *bitmap) -+{ -+ return bitmap && bitmap->storage.filemap && -+ !test_bit(BITMAP_STALE, &bitmap->flags); -+} -+ - #endif - - #endif -diff --git a/drivers/md/raid1-10.c b/drivers/md/raid1-10.c -index 506299bd55cb6..73cc3cb9154d8 100644 ---- a/drivers/md/raid1-10.c -+++ b/drivers/md/raid1-10.c -@@ -131,9 +131,18 @@ static inline bool raid1_add_bio_to_plug(struct mddev *mddev, struct bio *bio, - blk_plug_cb_fn unplug) - { - struct raid1_plug_cb *plug = NULL; -- struct blk_plug_cb *cb = blk_check_plugged(unplug, mddev, -- sizeof(*plug)); -+ struct blk_plug_cb *cb; -+ -+ /* -+ * If bitmap is not enabled, it's safe to submit the io directly, and -+ * this can get optimal performance. -+ */ -+ if (!md_bitmap_enabled(mddev->bitmap)) { -+ raid1_submit_write(bio); -+ return true; -+ } - -+ cb = blk_check_plugged(unplug, mddev, sizeof(*plug)); - if (!cb) - return false; - --- -2.39.2 - diff --git a/queue-6.4/md-raid10-check-slab-out-of-bounds-in-md_bitmap_get_.patch b/queue-6.4/md-raid10-check-slab-out-of-bounds-in-md_bitmap_get_.patch deleted file mode 100644 index 5ba01f1fc9e..00000000000 --- a/queue-6.4/md-raid10-check-slab-out-of-bounds-in-md_bitmap_get_.patch +++ /dev/null @@ -1,65 +0,0 @@ -From 1e3e674894de0ff1eca4a2ff547931cedd0ac5a2 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Mon, 15 May 2023 21:48:05 +0800 -Subject: md/raid10: check slab-out-of-bounds in md_bitmap_get_counter - -From: Li Nan - -[ Upstream commit 301867b1c16805aebbc306aafa6ecdc68b73c7e5 ] - -If we write a large number to md/bitmap_set_bits, md_bitmap_checkpage() -will return -EINVAL because 'page >= bitmap->pages', but the return value -was not checked immediately in md_bitmap_get_counter() in order to set -*blocks value and slab-out-of-bounds occurs. - -Move check of 'page >= bitmap->pages' to md_bitmap_get_counter() and -return directly if true. - -Fixes: ef4256733506 ("md/bitmap: optimise scanning of empty bitmaps.") -Signed-off-by: Li Nan -Reviewed-by: Yu Kuai -Signed-off-by: Song Liu -Link: https://lore.kernel.org/r/20230515134808.3936750-2-linan666@huaweicloud.com -Signed-off-by: Sasha Levin ---- - drivers/md/md-bitmap.c | 17 +++++++++-------- - 1 file changed, 9 insertions(+), 8 deletions(-) - -diff --git a/drivers/md/md-bitmap.c b/drivers/md/md-bitmap.c -index bc8d7565171d4..358a064959028 100644 ---- a/drivers/md/md-bitmap.c -+++ b/drivers/md/md-bitmap.c -@@ -54,14 +54,7 @@ __acquires(bitmap->lock) - { - unsigned char *mappage; - -- if (page >= bitmap->pages) { -- /* This can happen if bitmap_start_sync goes beyond -- * End-of-device while looking for a whole page. -- * It is harmless. -- */ -- return -EINVAL; -- } -- -+ WARN_ON_ONCE(page >= bitmap->pages); - if (bitmap->bp[page].hijacked) /* it's hijacked, don't try to alloc */ - return 0; - -@@ -1387,6 +1380,14 @@ __acquires(bitmap->lock) - sector_t csize; - int err; - -+ if (page >= bitmap->pages) { -+ /* -+ * This can happen if bitmap_start_sync goes beyond -+ * End-of-device while looking for a whole page or -+ * user set a huge number to sysfs bitmap_set_bits. -+ */ -+ return NULL; -+ } - err = md_bitmap_checkpage(bitmap, page, create, 0); - - if (bitmap->bp[page].hijacked || --- -2.39.2 - diff --git a/queue-6.4/md-raid10-fix-io-loss-while-replacement-replace-rdev.patch b/queue-6.4/md-raid10-fix-io-loss-while-replacement-replace-rdev.patch deleted file mode 100644 index 59da3bfca81..00000000000 --- a/queue-6.4/md-raid10-fix-io-loss-while-replacement-replace-rdev.patch +++ /dev/null @@ -1,79 +0,0 @@ -From c5bfdf73059343452f9f939b0d2f84058a54ec20 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Fri, 2 Jun 2023 17:18:39 +0800 -Subject: md/raid10: fix io loss while replacement replace rdev - -From: Li Nan - -[ Upstream commit 2ae6aaf76912bae53c74b191569d2ab484f24bf3 ] - -When removing a disk with replacement, the replacement will be used to -replace rdev. During this process, there is a brief window in which both -rdev and replacement are read as NULL in raid10_write_request(). This -will result in io not being submitted but it should be. - - //remove //write - raid10_remove_disk raid10_write_request - mirror->rdev = NULL - read rdev -> NULL - mirror->rdev = mirror->replacement - mirror->replacement = NULL - read replacement -> NULL - -Fix it by reading replacement first and rdev later, meanwhile, use smp_mb() -to prevent memory reordering. - -Fixes: 475b0321a4df ("md/raid10: writes should get directed to replacement as well as original.") -Signed-off-by: Li Nan -Reviewed-by: Yu Kuai -Signed-off-by: Song Liu -Link: https://lore.kernel.org/r/20230602091839.743798-3-linan666@huaweicloud.com -Signed-off-by: Sasha Levin ---- - drivers/md/raid10.c | 22 ++++++++++++++++++---- - 1 file changed, 18 insertions(+), 4 deletions(-) - -diff --git a/drivers/md/raid10.c b/drivers/md/raid10.c -index 0acb4c103c10e..c059533b890f9 100644 ---- a/drivers/md/raid10.c -+++ b/drivers/md/raid10.c -@@ -779,8 +779,16 @@ static struct md_rdev *read_balance(struct r10conf *conf, - disk = r10_bio->devs[slot].devnum; - rdev = rcu_dereference(conf->mirrors[disk].replacement); - if (rdev == NULL || test_bit(Faulty, &rdev->flags) || -- r10_bio->devs[slot].addr + sectors > rdev->recovery_offset) -+ r10_bio->devs[slot].addr + sectors > -+ rdev->recovery_offset) { -+ /* -+ * Read replacement first to prevent reading both rdev -+ * and replacement as NULL during replacement replace -+ * rdev. -+ */ -+ smp_mb(); - rdev = rcu_dereference(conf->mirrors[disk].rdev); -+ } - if (rdev == NULL || - test_bit(Faulty, &rdev->flags)) - continue; -@@ -1479,9 +1487,15 @@ static void raid10_write_request(struct mddev *mddev, struct bio *bio, - - for (i = 0; i < conf->copies; i++) { - int d = r10_bio->devs[i].devnum; -- struct md_rdev *rdev = rcu_dereference(conf->mirrors[d].rdev); -- struct md_rdev *rrdev = rcu_dereference( -- conf->mirrors[d].replacement); -+ struct md_rdev *rdev, *rrdev; -+ -+ rrdev = rcu_dereference(conf->mirrors[d].replacement); -+ /* -+ * Read replacement first to prevent reading both rdev and -+ * replacement as NULL during replacement replace rdev. -+ */ -+ smp_mb(); -+ rdev = rcu_dereference(conf->mirrors[d].rdev); - if (rdev == rrdev) - rrdev = NULL; - if (rdev && (test_bit(Faulty, &rdev->flags))) --- -2.39.2 - diff --git a/queue-6.4/md-raid10-fix-null-ptr-deref-of-mreplace-in-raid10_s.patch b/queue-6.4/md-raid10-fix-null-ptr-deref-of-mreplace-in-raid10_s.patch deleted file mode 100644 index cf82ba651d2..00000000000 --- a/queue-6.4/md-raid10-fix-null-ptr-deref-of-mreplace-in-raid10_s.patch +++ /dev/null @@ -1,81 +0,0 @@ -From 5a2040a8e648ae39e71fad1d69ec165e9336b487 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Sat, 27 May 2023 15:22:15 +0800 -Subject: md/raid10: fix null-ptr-deref of mreplace in raid10_sync_request - -From: Li Nan - -[ Upstream commit 34817a2441747b48e444cb0e05d84e14bc9443da ] - -There are two check of 'mreplace' in raid10_sync_request(). In the first -check, 'need_replace' will be set and 'mreplace' will be used later if -no-Faulty 'mreplace' exists, In the second check, 'mreplace' will be -set to NULL if it is Faulty, but 'need_replace' will not be changed -accordingly. null-ptr-deref occurs if Faulty is set between two check. - -Fix it by merging two checks into one. And replace 'need_replace' with -'mreplace' because their values are always the same. - -Fixes: ee37d7314a32 ("md/raid10: Fix raid10 replace hang when new added disk faulty") -Signed-off-by: Li Nan -Reviewed-by: Yu Kuai -Signed-off-by: Song Liu -Link: https://lore.kernel.org/r/20230527072218.2365857-2-linan666@huaweicloud.com -Signed-off-by: Sasha Levin ---- - drivers/md/raid10.c | 14 +++++--------- - 1 file changed, 5 insertions(+), 9 deletions(-) - -diff --git a/drivers/md/raid10.c b/drivers/md/raid10.c -index 4fcfcb350d2b4..0acb4c103c10e 100644 ---- a/drivers/md/raid10.c -+++ b/drivers/md/raid10.c -@@ -3438,7 +3438,6 @@ static sector_t raid10_sync_request(struct mddev *mddev, sector_t sector_nr, - int must_sync; - int any_working; - int need_recover = 0; -- int need_replace = 0; - struct raid10_info *mirror = &conf->mirrors[i]; - struct md_rdev *mrdev, *mreplace; - -@@ -3450,11 +3449,10 @@ static sector_t raid10_sync_request(struct mddev *mddev, sector_t sector_nr, - !test_bit(Faulty, &mrdev->flags) && - !test_bit(In_sync, &mrdev->flags)) - need_recover = 1; -- if (mreplace != NULL && -- !test_bit(Faulty, &mreplace->flags)) -- need_replace = 1; -+ if (mreplace && test_bit(Faulty, &mreplace->flags)) -+ mreplace = NULL; - -- if (!need_recover && !need_replace) { -+ if (!need_recover && !mreplace) { - rcu_read_unlock(); - continue; - } -@@ -3470,8 +3468,6 @@ static sector_t raid10_sync_request(struct mddev *mddev, sector_t sector_nr, - rcu_read_unlock(); - continue; - } -- if (mreplace && test_bit(Faulty, &mreplace->flags)) -- mreplace = NULL; - /* Unless we are doing a full sync, or a replacement - * we only need to recover the block if it is set in - * the bitmap -@@ -3594,11 +3590,11 @@ static sector_t raid10_sync_request(struct mddev *mddev, sector_t sector_nr, - bio = r10_bio->devs[1].repl_bio; - if (bio) - bio->bi_end_io = NULL; -- /* Note: if need_replace, then bio -+ /* Note: if replace is not NULL, then bio - * cannot be NULL as r10buf_pool_alloc will - * have allocated it. - */ -- if (!need_replace) -+ if (!mreplace) - break; - bio->bi_next = biolist; - biolist = bio; --- -2.39.2 - diff --git a/queue-6.4/md-raid10-fix-overflow-of-md-safe_mode_delay.patch b/queue-6.4/md-raid10-fix-overflow-of-md-safe_mode_delay.patch deleted file mode 100644 index a3b487ef898..00000000000 --- a/queue-6.4/md-raid10-fix-overflow-of-md-safe_mode_delay.patch +++ /dev/null @@ -1,51 +0,0 @@ -From cc41308a0c1ca574286b75fe7b8e428e5b18f278 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Mon, 22 May 2023 15:25:33 +0800 -Subject: md/raid10: fix overflow of md/safe_mode_delay - -From: Li Nan - -[ Upstream commit 6beb489b2eed25978523f379a605073f99240c50 ] - -There is no input check when echo md/safe_mode_delay in safe_delay_store(). -And msec might also overflow when HZ < 1000 in safe_delay_show(), Fix it by -checking overflow in safe_delay_store() and use unsigned long conversion in -safe_delay_show(). - -Fixes: 72e02075a33f ("md: factor out parsing of fixed-point numbers") -Signed-off-by: Li Nan -Signed-off-by: Song Liu -Link: https://lore.kernel.org/r/20230522072535.1523740-2-linan666@huaweicloud.com -Signed-off-by: Sasha Levin ---- - drivers/md/md.c | 7 ++++--- - 1 file changed, 4 insertions(+), 3 deletions(-) - -diff --git a/drivers/md/md.c b/drivers/md/md.c -index 8e344b4b34446..b2d69260b5b1c 100644 ---- a/drivers/md/md.c -+++ b/drivers/md/md.c -@@ -3794,8 +3794,9 @@ int strict_strtoul_scaled(const char *cp, unsigned long *res, int scale) - static ssize_t - safe_delay_show(struct mddev *mddev, char *page) - { -- int msec = (mddev->safemode_delay*1000)/HZ; -- return sprintf(page, "%d.%03d\n", msec/1000, msec%1000); -+ unsigned int msec = ((unsigned long)mddev->safemode_delay*1000)/HZ; -+ -+ return sprintf(page, "%u.%03u\n", msec/1000, msec%1000); - } - static ssize_t - safe_delay_store(struct mddev *mddev, const char *cbuf, size_t len) -@@ -3807,7 +3808,7 @@ safe_delay_store(struct mddev *mddev, const char *cbuf, size_t len) - return -EINVAL; - } - -- if (strict_strtoul_scaled(cbuf, &msec, 3) < 0) -+ if (strict_strtoul_scaled(cbuf, &msec, 3) < 0 || msec > UINT_MAX / HZ) - return -EINVAL; - if (msec == 0) - mddev->safemode_delay = 0; --- -2.39.2 - diff --git a/queue-6.4/md-raid10-fix-wrong-setting-of-max_corr_read_errors.patch b/queue-6.4/md-raid10-fix-wrong-setting-of-max_corr_read_errors.patch deleted file mode 100644 index e46714785fc..00000000000 --- a/queue-6.4/md-raid10-fix-wrong-setting-of-max_corr_read_errors.patch +++ /dev/null @@ -1,38 +0,0 @@ -From c74f89951b64e82c54cdc841bc692fcee4267267 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Mon, 22 May 2023 15:25:34 +0800 -Subject: md/raid10: fix wrong setting of max_corr_read_errors - -From: Li Nan - -[ Upstream commit f8b20a405428803bd9881881d8242c9d72c6b2b2 ] - -There is no input check when echo md/max_read_errors and overflow might -occur. Add check of input number. - -Fixes: 1e50915fe0bb ("raid: improve MD/raid10 handling of correctable read errors.") -Signed-off-by: Li Nan -Reviewed-by: Yu Kuai -Signed-off-by: Song Liu -Link: https://lore.kernel.org/r/20230522072535.1523740-3-linan666@huaweicloud.com -Signed-off-by: Sasha Levin ---- - drivers/md/md.c | 2 ++ - 1 file changed, 2 insertions(+) - -diff --git a/drivers/md/md.c b/drivers/md/md.c -index b2d69260b5b1c..350094f1cb09f 100644 ---- a/drivers/md/md.c -+++ b/drivers/md/md.c -@@ -4478,6 +4478,8 @@ max_corrected_read_errors_store(struct mddev *mddev, const char *buf, size_t len - rv = kstrtouint(buf, 10, &n); - if (rv < 0) - return rv; -+ if (n > INT_MAX) -+ return -EINVAL; - atomic_set(&mddev->max_corr_read_errors, n); - return len; - } --- -2.39.2 - diff --git a/queue-6.4/memory-brcmstb_dpfe-fix-testing-array-offset-after-u.patch b/queue-6.4/memory-brcmstb_dpfe-fix-testing-array-offset-after-u.patch deleted file mode 100644 index c45c61b4ed4..00000000000 --- a/queue-6.4/memory-brcmstb_dpfe-fix-testing-array-offset-after-u.patch +++ /dev/null @@ -1,50 +0,0 @@ -From 9a50c7ca93712e815093edbe4f0bcf6ac387b05b Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Sat, 13 May 2023 13:29:31 +0200 -Subject: memory: brcmstb_dpfe: fix testing array offset after use - -From: Krzysztof Kozlowski - -[ Upstream commit 1d9e93fad549bc38f593147479ee063f2872c170 ] - -Code should first check for valid value of array offset, then use it as -the index. Fixes smatch warning: - - drivers/memory/brcmstb_dpfe.c:443 __send_command() error: testing array offset 'cmd' after use. - -Fixes: 2f330caff577 ("memory: brcmstb: Add driver for DPFE") -Acked-by: Markus Mayer -Reviewed-by: Florian Fainelli -Link: https://lore.kernel.org/r/20230513112931.176066-1-krzysztof.kozlowski@linaro.org -Signed-off-by: Krzysztof Kozlowski -Signed-off-by: Sasha Levin ---- - drivers/memory/brcmstb_dpfe.c | 4 +++- - 1 file changed, 3 insertions(+), 1 deletion(-) - -diff --git a/drivers/memory/brcmstb_dpfe.c b/drivers/memory/brcmstb_dpfe.c -index 76c82e9c8fceb..9339f80b21c50 100644 ---- a/drivers/memory/brcmstb_dpfe.c -+++ b/drivers/memory/brcmstb_dpfe.c -@@ -434,15 +434,17 @@ static void __finalize_command(struct brcmstb_dpfe_priv *priv) - static int __send_command(struct brcmstb_dpfe_priv *priv, unsigned int cmd, - u32 result[]) - { -- const u32 *msg = priv->dpfe_api->command[cmd]; - void __iomem *regs = priv->regs; - unsigned int i, chksum, chksum_idx; -+ const u32 *msg; - int ret = 0; - u32 resp; - - if (cmd >= DPFE_CMD_MAX) - return -1; - -+ msg = priv->dpfe_api->command[cmd]; -+ - mutex_lock(&priv->lock); - - /* Wait for DCPU to become ready */ --- -2.39.2 - diff --git a/queue-6.4/memstick-r592-make-memstick_debug_get_tpc_name-stati.patch b/queue-6.4/memstick-r592-make-memstick_debug_get_tpc_name-stati.patch deleted file mode 100644 index d1e65a3fd7e..00000000000 --- a/queue-6.4/memstick-r592-make-memstick_debug_get_tpc_name-stati.patch +++ /dev/null @@ -1,49 +0,0 @@ -From 85bf3ba6aec9d06feef786481663dbe9c78c71c7 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Tue, 16 May 2023 22:27:04 +0200 -Subject: memstick r592: make memstick_debug_get_tpc_name() static - -From: Arnd Bergmann - -[ Upstream commit 434587df9f7fd68575f99a889cc5f2efc2eaee5e ] - -There are no other files referencing this function, apparently -it was left global to avoid an 'unused function' warning when -the only caller is left out. With a 'W=1' build, it causes -a 'missing prototype' warning though: - -drivers/memstick/host/r592.c:47:13: error: no previous prototype for 'memstick_debug_get_tpc_name' [-Werror=missing-prototypes] - -Annotate the function as 'static __maybe_unused' to avoid both -problems. - -Fixes: 926341250102 ("memstick: add driver for Ricoh R5C592 card reader") -Signed-off-by: Arnd Bergmann -Link: https://lore.kernel.org/r/20230516202714.560929-1-arnd@kernel.org -Signed-off-by: Ulf Hansson -Signed-off-by: Sasha Levin ---- - drivers/memstick/host/r592.c | 4 +--- - 1 file changed, 1 insertion(+), 3 deletions(-) - -diff --git a/drivers/memstick/host/r592.c b/drivers/memstick/host/r592.c -index 42bfc46842b82..461f5ffd02bc1 100644 ---- a/drivers/memstick/host/r592.c -+++ b/drivers/memstick/host/r592.c -@@ -44,12 +44,10 @@ static const char *tpc_names[] = { - * memstick_debug_get_tpc_name - debug helper that returns string for - * a TPC number - */ --const char *memstick_debug_get_tpc_name(int tpc) -+static __maybe_unused const char *memstick_debug_get_tpc_name(int tpc) - { - return tpc_names[tpc-1]; - } --EXPORT_SYMBOL(memstick_debug_get_tpc_name); -- - - /* Read a register*/ - static inline u32 r592_read_reg(struct r592_device *dev, int address) --- -2.39.2 - diff --git a/queue-6.4/mips-dts-ci20-add-parent-supplies-to-act8600-regulat.patch b/queue-6.4/mips-dts-ci20-add-parent-supplies-to-act8600-regulat.patch deleted file mode 100644 index 626fa327574..00000000000 --- a/queue-6.4/mips-dts-ci20-add-parent-supplies-to-act8600-regulat.patch +++ /dev/null @@ -1,72 +0,0 @@ -From 5f4b0b60828cb4c45c030bea9cd77c8bd14f497c Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Sun, 4 Jun 2023 16:56:36 +0200 -Subject: MIPS: DTS: CI20: Add parent supplies to ACT8600 regulators - -From: Paul Cercueil - -[ Upstream commit fbf1e42093f8d6346baf17079585fbcebb2ff284 ] - -Provide parent regulators to the ACT8600 regulators that need one. - -Signed-off-by: Paul Cercueil -Signed-off-by: Thomas Bogendoerfer -Stable-dep-of: 944520f85d5b ("MIPS: DTS: CI20: Raise VDDCORE voltage to 1.125 volts") -Signed-off-by: Sasha Levin ---- - arch/mips/boot/dts/ingenic/ci20.dts | 7 +++++++ - 1 file changed, 7 insertions(+) - -diff --git a/arch/mips/boot/dts/ingenic/ci20.dts b/arch/mips/boot/dts/ingenic/ci20.dts -index 2b1284c6c64a6..eac6b3411b5f7 100644 ---- a/arch/mips/boot/dts/ingenic/ci20.dts -+++ b/arch/mips/boot/dts/ingenic/ci20.dts -@@ -242,16 +242,19 @@ regulators { - vddcore: DCDC1 { - regulator-min-microvolt = <1100000>; - regulator-max-microvolt = <1100000>; -+ vp1-supply = <&vcc_33v>; - regulator-always-on; - }; - vddmem: DCDC2 { - regulator-min-microvolt = <1500000>; - regulator-max-microvolt = <1500000>; -+ vp2-supply = <&vcc_33v>; - regulator-always-on; - }; - vcc_33: DCDC3 { - regulator-min-microvolt = <3300000>; - regulator-max-microvolt = <3300000>; -+ vp3-supply = <&vcc_33v>; - regulator-always-on; - }; - vcc_50: SUDCDC_REG4 { -@@ -262,21 +265,25 @@ vcc_50: SUDCDC_REG4 { - vcc_25: LDO5 { - regulator-min-microvolt = <2500000>; - regulator-max-microvolt = <2500000>; -+ inl-supply = <&vcc_33v>; - regulator-always-on; - }; - wifi_io: LDO6 { - regulator-min-microvolt = <2500000>; - regulator-max-microvolt = <2500000>; -+ inl-supply = <&vcc_33v>; - regulator-always-on; - }; - cim_io_28: LDO7 { - regulator-min-microvolt = <2800000>; - regulator-max-microvolt = <2800000>; -+ inl-supply = <&vcc_33v>; - regulator-always-on; - }; - cim_io_15: LDO8 { - regulator-min-microvolt = <1500000>; - regulator-max-microvolt = <1500000>; -+ inl-supply = <&vcc_33v>; - regulator-always-on; - }; - vrtc_18: LDO_REG9 { --- -2.39.2 - diff --git a/queue-6.4/mips-dts-ci20-fix-act8600-regulator-node-names.patch b/queue-6.4/mips-dts-ci20-fix-act8600-regulator-node-names.patch deleted file mode 100644 index c9375b85b5d..00000000000 --- a/queue-6.4/mips-dts-ci20-fix-act8600-regulator-node-names.patch +++ /dev/null @@ -1,113 +0,0 @@ -From 991440c65040be03a3110520df89ac30940a378a Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Sun, 4 Jun 2023 16:56:35 +0200 -Subject: MIPS: DTS: CI20: Fix ACT8600 regulator node names - -From: Paul Cercueil - -[ Upstream commit 08384e80a70fb1942510ab5f0ce27bad134e634e ] - -The Device Tree was using invalid node names for the ACT8600 regulators. -To be fair, it is not the original committer's fault, as the -documentation did gives invalid names as well. - -In theory, the fix should have been to modify the driver to accept the -alternative names. However, even though the act8865 driver spits -warnings, the kernel seemed to work fine with what is currently -supported upstream. For that reason, I think it is okay to just update -the DTS. - -I removed the "regulator-name" too, since they really didn't bring any -information. The node names are enough. - -Fixes: 73f2b940474d ("MIPS: CI20: DTS: Add I2C nodes") -Signed-off-by: Paul Cercueil -Signed-off-by: Thomas Bogendoerfer -Signed-off-by: Sasha Levin ---- - arch/mips/boot/dts/ingenic/ci20.dts | 27 ++++++++------------------- - 1 file changed, 8 insertions(+), 19 deletions(-) - -diff --git a/arch/mips/boot/dts/ingenic/ci20.dts b/arch/mips/boot/dts/ingenic/ci20.dts -index 239c4537484d0..2b1284c6c64a6 100644 ---- a/arch/mips/boot/dts/ingenic/ci20.dts -+++ b/arch/mips/boot/dts/ingenic/ci20.dts -@@ -237,59 +237,49 @@ &i2c0 { - act8600: act8600@5a { - compatible = "active-semi,act8600"; - reg = <0x5a>; -- status = "okay"; - - regulators { -- vddcore: SUDCDC1 { -- regulator-name = "DCDC_REG1"; -+ vddcore: DCDC1 { - regulator-min-microvolt = <1100000>; - regulator-max-microvolt = <1100000>; - regulator-always-on; - }; -- vddmem: SUDCDC2 { -- regulator-name = "DCDC_REG2"; -+ vddmem: DCDC2 { - regulator-min-microvolt = <1500000>; - regulator-max-microvolt = <1500000>; - regulator-always-on; - }; -- vcc_33: SUDCDC3 { -- regulator-name = "DCDC_REG3"; -+ vcc_33: DCDC3 { - regulator-min-microvolt = <3300000>; - regulator-max-microvolt = <3300000>; - regulator-always-on; - }; -- vcc_50: SUDCDC4 { -- regulator-name = "SUDCDC_REG4"; -+ vcc_50: SUDCDC_REG4 { - regulator-min-microvolt = <5000000>; - regulator-max-microvolt = <5000000>; - regulator-always-on; - }; -- vcc_25: LDO_REG5 { -- regulator-name = "LDO_REG5"; -+ vcc_25: LDO5 { - regulator-min-microvolt = <2500000>; - regulator-max-microvolt = <2500000>; - regulator-always-on; - }; -- wifi_io: LDO_REG6 { -- regulator-name = "LDO_REG6"; -+ wifi_io: LDO6 { - regulator-min-microvolt = <2500000>; - regulator-max-microvolt = <2500000>; - regulator-always-on; - }; -- vcc_28: LDO_REG7 { -- regulator-name = "LDO_REG7"; -+ cim_io_28: LDO7 { - regulator-min-microvolt = <2800000>; - regulator-max-microvolt = <2800000>; - regulator-always-on; - }; -- vcc_15: LDO_REG8 { -- regulator-name = "LDO_REG8"; -+ cim_io_15: LDO8 { - regulator-min-microvolt = <1500000>; - regulator-max-microvolt = <1500000>; - regulator-always-on; - }; - vrtc_18: LDO_REG9 { -- regulator-name = "LDO_REG9"; - /* Despite the datasheet stating 3.3V - * for REG9 and the driver expecting that, - * REG9 outputs 1.8V. -@@ -303,7 +293,6 @@ vrtc_18: LDO_REG9 { - regulator-always-on; - }; - vcc_11: LDO_REG10 { -- regulator-name = "LDO_REG10"; - regulator-min-microvolt = <1200000>; - regulator-max-microvolt = <1200000>; - regulator-always-on; --- -2.39.2 - diff --git a/queue-6.4/mips-dts-ci20-raise-vddcore-voltage-to-1.125-volts.patch b/queue-6.4/mips-dts-ci20-raise-vddcore-voltage-to-1.125-volts.patch deleted file mode 100644 index d3787357ba3..00000000000 --- a/queue-6.4/mips-dts-ci20-raise-vddcore-voltage-to-1.125-volts.patch +++ /dev/null @@ -1,51 +0,0 @@ -From f8d838f450cd0d6491044f5a61457a129ac6d248 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Thu, 22 Jun 2023 19:59:34 +0200 -Subject: MIPS: DTS: CI20: Raise VDDCORE voltage to 1.125 volts - -From: Paul Cercueil - -[ Upstream commit 944520f85d5b1fb2f9ea243be41f9c9af3d4cef3 ] - -Commit 08384e80a70f ("MIPS: DTS: CI20: Fix ACT8600 regulator node -names") caused the VDDCORE power supply (regulated by the ACT8600's -DCDC1 output) to drop from a voltage of 1.2V configured by the -bootloader, to the 1.1V set in the Device Tree. - -According to the documentation, the VDDCORE supply should be between -0.99V and 1.21V; both values are therefore within the supported range. - -However, VDDCORE being 1.1V results in the CI20 being very unstable, -with corrupted memory, failures to boot, or reboots at random. The -reason might be succint drops of the voltage below the minimum required. - -Raising the minimum voltage to 1.125 volts seems to be enough to address -this issue, while still keeping a relatively low core voltage which -helps for power consumption and thermals. - -Fixes: 08384e80a70f ("MIPS: DTS: CI20: Fix ACT8600 regulator node names") -Signed-off-by: Paul Cercueil -Signed-off-by: Thomas Bogendoerfer -Signed-off-by: Sasha Levin ---- - arch/mips/boot/dts/ingenic/ci20.dts | 4 ++-- - 1 file changed, 2 insertions(+), 2 deletions(-) - -diff --git a/arch/mips/boot/dts/ingenic/ci20.dts b/arch/mips/boot/dts/ingenic/ci20.dts -index eac6b3411b5f7..c0f6c4d3618e1 100644 ---- a/arch/mips/boot/dts/ingenic/ci20.dts -+++ b/arch/mips/boot/dts/ingenic/ci20.dts -@@ -240,8 +240,8 @@ act8600: act8600@5a { - - regulators { - vddcore: DCDC1 { -- regulator-min-microvolt = <1100000>; -- regulator-max-microvolt = <1100000>; -+ regulator-min-microvolt = <1125000>; -+ regulator-max-microvolt = <1125000>; - vp1-supply = <&vcc_33v>; - regulator-always-on; - }; --- -2.39.2 - diff --git a/queue-6.4/mm-move-mm_count-into-its-own-cache-line.patch b/queue-6.4/mm-move-mm_count-into-its-own-cache-line.patch deleted file mode 100644 index a1e40295dd1..00000000000 --- a/queue-6.4/mm-move-mm_count-into-its-own-cache-line.patch +++ /dev/null @@ -1,119 +0,0 @@ -From acb3f98eac6eeab23066937ddd1e25a187e354ec Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Mon, 15 May 2023 10:35:36 -0400 -Subject: mm: move mm_count into its own cache line - -From: Mathieu Desnoyers - -[ Upstream commit c1753fd02a0058ea43cbb31ab26d25be2f6cfe08 ] - -The mm_struct mm_count field is frequently updated by mmgrab/mmdrop -performed by context switch. This causes false-sharing for surrounding -mm_struct fields which are read-mostly. - -This has been observed on a 2sockets/112core/224cpu Intel Sapphire Rapids -server running hackbench, and by the kernel test robot will-it-scale -testcase. - -Move the mm_count field into its own cache line to prevent false-sharing -with other mm_struct fields. - -Move mm_count to the first field of mm_struct to minimize the amount of -padding required: rather than adding padding before and after the mm_count -field, padding is only added after mm_count. - -Note that I noticed this odd comment in mm_struct: - -commit 2e3025434a6b ("mm: relocate 'write_protect_seq' in struct mm_struct") - - /* - * With some kernel config, the current mmap_lock's offset - * inside 'mm_struct' is at 0x120, which is very optimal, as - * its two hot fields 'count' and 'owner' sit in 2 different - * cachelines, and when mmap_lock is highly contended, both - * of the 2 fields will be accessed frequently, current layout - * will help to reduce cache bouncing. - * - * So please be careful with adding new fields before - * mmap_lock, which can easily push the 2 fields into one - * cacheline. - */ - struct rw_semaphore mmap_lock; - -This comment is rather odd for a few reasons: - -- It requires addition/removal of mm_struct fields to carefully consider - field alignment of _other_ fields, -- It expresses the wish to keep an "optimal" alignment for a specific - kernel config. - -I suspect that the author of this comment may want to revisit this topic -and perhaps introduce a split-struct approach for struct rw_semaphore, -if the need is to place various fields of this structure in different -cache lines. - -Link: https://lkml.kernel.org/r/20230515143536.114960-1-mathieu.desnoyers@efficios.com -Fixes: 223baf9d17f2 ("sched: Fix performance regression introduced by mm_cid") -Fixes: af7f588d8f73 ("sched: Introduce per-memory-map concurrency ID") -Link: https://lore.kernel.org/lkml/7a0c1db1-103d-d518-ed96-1584a28fbf32@efficios.com -Reported-by: kernel test robot -Link: https://lore.kernel.org/oe-lkp/202305151017.27581d75-yujie.liu@intel.com -Signed-off-by: Mathieu Desnoyers -Reviewed-by: Aaron Lu -Reviewed-by: John Hubbard -Cc: Peter Zijlstra -Cc: Olivier Dion -Cc: -Cc: Feng Tang -Cc: Jason Gunthorpe -Cc: Peter Xu -Signed-off-by: Andrew Morton -Signed-off-by: Sasha Levin ---- - include/linux/mm_types.h | 23 +++++++++++++++-------- - 1 file changed, 15 insertions(+), 8 deletions(-) - -diff --git a/include/linux/mm_types.h b/include/linux/mm_types.h -index 306a3d1a0fa65..de10fc797c8e9 100644 ---- a/include/linux/mm_types.h -+++ b/include/linux/mm_types.h -@@ -583,6 +583,21 @@ struct mm_cid { - struct kioctx_table; - struct mm_struct { - struct { -+ /* -+ * Fields which are often written to are placed in a separate -+ * cache line. -+ */ -+ struct { -+ /** -+ * @mm_count: The number of references to &struct -+ * mm_struct (@mm_users count as 1). -+ * -+ * Use mmgrab()/mmdrop() to modify. When this drops to -+ * 0, the &struct mm_struct is freed. -+ */ -+ atomic_t mm_count; -+ } ____cacheline_aligned_in_smp; -+ - struct maple_tree mm_mt; - #ifdef CONFIG_MMU - unsigned long (*get_unmapped_area) (struct file *filp, -@@ -620,14 +635,6 @@ struct mm_struct { - */ - atomic_t mm_users; - -- /** -- * @mm_count: The number of references to &struct mm_struct -- * (@mm_users count as 1). -- * -- * Use mmgrab()/mmdrop() to modify. When this drops to 0, the -- * &struct mm_struct is freed. -- */ -- atomic_t mm_count; - #ifdef CONFIG_SCHED_MM_CID - /** - * @pcpu_cid: Per-cpu current cid. --- -2.39.2 - diff --git a/queue-6.4/mmc-add-mmc_quirk_broken_sd_cache-for-kingston-canva.patch b/queue-6.4/mmc-add-mmc_quirk_broken_sd_cache-for-kingston-canva.patch deleted file mode 100644 index facab0b7a4c..00000000000 --- a/queue-6.4/mmc-add-mmc_quirk_broken_sd_cache-for-kingston-canva.patch +++ /dev/null @@ -1,169 +0,0 @@ -From 6736dbfb525cc553d051bde44332272d2d17df18 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Tue, 20 Jun 2023 12:27:13 +0200 -Subject: mmc: Add MMC_QUIRK_BROKEN_SD_CACHE for Kingston Canvas Go Plus from - 11/2019 - -From: Marek Vasut - -[ Upstream commit c467c8f081859d4f4ca4eee4fba54bb5d85d6c97 ] - -This microSD card never clears Flush Cache bit after cache flush has -been started in sd_flush_cache(). This leads e.g. to failure to mount -file system. Add a quirk which disables the SD cache for this specific -card from specific manufacturing date of 11/2019, since on newer dated -cards from 05/2023 the cache flush works correctly. - -Fixes: 08ebf903af57 ("mmc: core: Fixup support for writeback-cache for eMMC and SD") -Signed-off-by: Marek Vasut -Link: https://lore.kernel.org/r/20230620102713.7701-1-marex@denx.de -Signed-off-by: Ulf Hansson -Signed-off-by: Sasha Levin ---- - drivers/mmc/core/card.h | 30 +++++++++++++++++++++++------- - drivers/mmc/core/quirks.h | 13 +++++++++++++ - drivers/mmc/core/sd.c | 2 +- - include/linux/mmc/card.h | 1 + - 4 files changed, 38 insertions(+), 8 deletions(-) - -diff --git a/drivers/mmc/core/card.h b/drivers/mmc/core/card.h -index cfdd1ff40b865..4edf9057fa79d 100644 ---- a/drivers/mmc/core/card.h -+++ b/drivers/mmc/core/card.h -@@ -53,6 +53,10 @@ struct mmc_fixup { - unsigned int manfid; - unsigned short oemid; - -+ /* Manufacturing date */ -+ unsigned short year; -+ unsigned char month; -+ - /* SDIO-specific fields. You can use SDIO_ANY_ID here of course */ - u16 cis_vendor, cis_device; - -@@ -68,6 +72,8 @@ struct mmc_fixup { - - #define CID_MANFID_ANY (-1u) - #define CID_OEMID_ANY ((unsigned short) -1) -+#define CID_YEAR_ANY ((unsigned short) -1) -+#define CID_MONTH_ANY ((unsigned char) -1) - #define CID_NAME_ANY (NULL) - - #define EXT_CSD_REV_ANY (-1u) -@@ -81,17 +87,21 @@ struct mmc_fixup { - #define CID_MANFID_APACER 0x27 - #define CID_MANFID_KINGSTON 0x70 - #define CID_MANFID_HYNIX 0x90 -+#define CID_MANFID_KINGSTON_SD 0x9F - #define CID_MANFID_NUMONYX 0xFE - - #define END_FIXUP { NULL } - --#define _FIXUP_EXT(_name, _manfid, _oemid, _rev_start, _rev_end, \ -- _cis_vendor, _cis_device, \ -- _fixup, _data, _ext_csd_rev) \ -+#define _FIXUP_EXT(_name, _manfid, _oemid, _year, _month, \ -+ _rev_start, _rev_end, \ -+ _cis_vendor, _cis_device, \ -+ _fixup, _data, _ext_csd_rev) \ - { \ - .name = (_name), \ - .manfid = (_manfid), \ - .oemid = (_oemid), \ -+ .year = (_year), \ -+ .month = (_month), \ - .rev_start = (_rev_start), \ - .rev_end = (_rev_end), \ - .cis_vendor = (_cis_vendor), \ -@@ -103,8 +113,8 @@ struct mmc_fixup { - - #define MMC_FIXUP_REV(_name, _manfid, _oemid, _rev_start, _rev_end, \ - _fixup, _data, _ext_csd_rev) \ -- _FIXUP_EXT(_name, _manfid, \ -- _oemid, _rev_start, _rev_end, \ -+ _FIXUP_EXT(_name, _manfid, _oemid, CID_YEAR_ANY, CID_MONTH_ANY, \ -+ _rev_start, _rev_end, \ - SDIO_ANY_ID, SDIO_ANY_ID, \ - _fixup, _data, _ext_csd_rev) \ - -@@ -118,8 +128,9 @@ struct mmc_fixup { - _ext_csd_rev) - - #define SDIO_FIXUP(_vendor, _device, _fixup, _data) \ -- _FIXUP_EXT(CID_NAME_ANY, CID_MANFID_ANY, \ -- CID_OEMID_ANY, 0, -1ull, \ -+ _FIXUP_EXT(CID_NAME_ANY, CID_MANFID_ANY, CID_OEMID_ANY, \ -+ CID_YEAR_ANY, CID_MONTH_ANY, \ -+ 0, -1ull, \ - _vendor, _device, \ - _fixup, _data, EXT_CSD_REV_ANY) \ - -@@ -264,4 +275,9 @@ static inline int mmc_card_broken_sd_discard(const struct mmc_card *c) - return c->quirks & MMC_QUIRK_BROKEN_SD_DISCARD; - } - -+static inline int mmc_card_broken_sd_cache(const struct mmc_card *c) -+{ -+ return c->quirks & MMC_QUIRK_BROKEN_SD_CACHE; -+} -+ - #endif -diff --git a/drivers/mmc/core/quirks.h b/drivers/mmc/core/quirks.h -index 29b9497936df9..a7ffbc930ea9d 100644 ---- a/drivers/mmc/core/quirks.h -+++ b/drivers/mmc/core/quirks.h -@@ -53,6 +53,15 @@ static const struct mmc_fixup __maybe_unused mmc_blk_fixups[] = { - MMC_FIXUP("MMC32G", CID_MANFID_TOSHIBA, CID_OEMID_ANY, add_quirk_mmc, - MMC_QUIRK_BLK_NO_CMD23), - -+ /* -+ * Kingston Canvas Go! Plus microSD cards never finish SD cache flush. -+ * This has so far only been observed on cards from 11/2019, while new -+ * cards from 2023/05 do not exhibit this behavior. -+ */ -+ _FIXUP_EXT("SD64G", CID_MANFID_KINGSTON_SD, 0x5449, 2019, 11, -+ 0, -1ull, SDIO_ANY_ID, SDIO_ANY_ID, add_quirk_sd, -+ MMC_QUIRK_BROKEN_SD_CACHE, EXT_CSD_REV_ANY), -+ - /* - * Some SD cards lockup while using CMD23 multiblock transfers. - */ -@@ -209,6 +218,10 @@ static inline void mmc_fixup_device(struct mmc_card *card, - if (f->of_compatible && - !mmc_fixup_of_compatible_match(card, f->of_compatible)) - continue; -+ if (f->year != CID_YEAR_ANY && f->year != card->cid.year) -+ continue; -+ if (f->month != CID_MONTH_ANY && f->month != card->cid.month) -+ continue; - - dev_dbg(&card->dev, "calling %ps\n", f->vendor_fixup); - f->vendor_fixup(card, f->data); -diff --git a/drivers/mmc/core/sd.c b/drivers/mmc/core/sd.c -index 72b664ed90cf6..246ce027ae0aa 100644 ---- a/drivers/mmc/core/sd.c -+++ b/drivers/mmc/core/sd.c -@@ -1170,7 +1170,7 @@ static int sd_parse_ext_reg_perf(struct mmc_card *card, u8 fno, u8 page, - card->ext_perf.feature_support |= SD_EXT_PERF_HOST_MAINT; - - /* Cache support at bit 0. */ -- if (reg_buf[4] & BIT(0)) -+ if ((reg_buf[4] & BIT(0)) && !mmc_card_broken_sd_cache(card)) - card->ext_perf.feature_support |= SD_EXT_PERF_CACHE; - - /* Command queue support indicated via queue depth bits (0 to 4). */ -diff --git a/include/linux/mmc/card.h b/include/linux/mmc/card.h -index c726ea7812552..daa2f40d9ce65 100644 ---- a/include/linux/mmc/card.h -+++ b/include/linux/mmc/card.h -@@ -294,6 +294,7 @@ struct mmc_card { - #define MMC_QUIRK_TRIM_BROKEN (1<<12) /* Skip trim */ - #define MMC_QUIRK_BROKEN_HPI (1<<13) /* Disable broken HPI support */ - #define MMC_QUIRK_BROKEN_SD_DISCARD (1<<14) /* Disable broken SD discard support */ -+#define MMC_QUIRK_BROKEN_SD_CACHE (1<<15) /* Disable broken SD cache support */ - - bool reenable_cmdq; /* Re-enable Command Queue */ - --- -2.39.2 - diff --git a/queue-6.4/mmc-mediatek-avoid-ugly-error-message-when-sdio-wake.patch b/queue-6.4/mmc-mediatek-avoid-ugly-error-message-when-sdio-wake.patch deleted file mode 100644 index e6fc08470f1..00000000000 --- a/queue-6.4/mmc-mediatek-avoid-ugly-error-message-when-sdio-wake.patch +++ /dev/null @@ -1,44 +0,0 @@ -From 6b1d60962475aa36f5b4f0400b71e9b01b71b381 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Wed, 10 May 2023 06:44:54 -0700 -Subject: mmc: mediatek: Avoid ugly error message when SDIO wakeup IRQ isn't - used - -From: Douglas Anderson - -[ Upstream commit a3332b7aad346b14770797e03ddd02ebdb14db41 ] - -When I boot a kukui-kodama board, I see an ugly warning in my kernel -log: - mtk-msdc 11240000.mmc: error -ENXIO: IRQ sdio_wakeup not found - -It's pretty normal not to have an "sdio_wakeup" IRQ defined. In fact, -no device trees in mainline seem to have it. Let's use the -platform_get_irq_byname_optional() to avoid the error message. - -Fixes: 527f36f5efa4 ("mmc: mediatek: add support for SDIO eint wakup IRQ") -Signed-off-by: Douglas Anderson -Reviewed-by: Matthias Brugger -Link: https://lore.kernel.org/r/20230510064434.1.I935404c5396e6bf952e99bb7ffb744c6f7fd430b@changeid -Signed-off-by: Ulf Hansson -Signed-off-by: Sasha Levin ---- - drivers/mmc/host/mtk-sd.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/drivers/mmc/host/mtk-sd.c b/drivers/mmc/host/mtk-sd.c -index 9785ec91654f7..97c42aacaf346 100644 ---- a/drivers/mmc/host/mtk-sd.c -+++ b/drivers/mmc/host/mtk-sd.c -@@ -2707,7 +2707,7 @@ static int msdc_drv_probe(struct platform_device *pdev) - - /* Support for SDIO eint irq ? */ - if ((mmc->pm_caps & MMC_PM_WAKE_SDIO_IRQ) && (mmc->pm_caps & MMC_PM_KEEP_POWER)) { -- host->eint_irq = platform_get_irq_byname(pdev, "sdio_wakeup"); -+ host->eint_irq = platform_get_irq_byname_optional(pdev, "sdio_wakeup"); - if (host->eint_irq > 0) { - host->pins_eint = pinctrl_lookup_state(host->pinctrl, "state_eint"); - if (IS_ERR(host->pins_eint)) { --- -2.39.2 - diff --git a/queue-6.4/modpost-fix-off-by-one-in-is_executable_section.patch b/queue-6.4/modpost-fix-off-by-one-in-is_executable_section.patch deleted file mode 100644 index 7b6d5c560b8..00000000000 --- a/queue-6.4/modpost-fix-off-by-one-in-is_executable_section.patch +++ /dev/null @@ -1,36 +0,0 @@ -From 12001e763da76b53a772cd83f5b7f4d330d195ae Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Thu, 8 Jun 2023 11:23:40 +0300 -Subject: modpost: fix off by one in is_executable_section() - -From: Dan Carpenter - -[ Upstream commit 3a3f1e573a105328a2cca45a7cfbebabbf5e3192 ] - -The > comparison should be >= to prevent an out of bounds array -access. - -Fixes: 52dc0595d540 ("modpost: handle relocations mismatch in __ex_table.") -Signed-off-by: Dan Carpenter -Signed-off-by: Masahiro Yamada -Signed-off-by: Sasha Levin ---- - scripts/mod/modpost.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/scripts/mod/modpost.c b/scripts/mod/modpost.c -index d97cbd753d2c3..d8baa9b9ae6d8 100644 ---- a/scripts/mod/modpost.c -+++ b/scripts/mod/modpost.c -@@ -1290,7 +1290,7 @@ static void default_mismatch_handler(const char *modname, struct elf_info *elf, - - static int is_executable_section(struct elf_info* elf, unsigned int section_index) - { -- if (section_index > elf->num_sections) -+ if (section_index >= elf->num_sections) - fatal("section_index is outside elf->num_sections!\n"); - - return ((elf->sechdrs[section_index].sh_flags & SHF_EXECINSTR) == SHF_EXECINSTR); --- -2.39.2 - diff --git a/queue-6.4/modpost-fix-section-mismatch-message-for-r_arm_-pc24.patch b/queue-6.4/modpost-fix-section-mismatch-message-for-r_arm_-pc24.patch deleted file mode 100644 index fc7efd5ba2d..00000000000 --- a/queue-6.4/modpost-fix-section-mismatch-message-for-r_arm_-pc24.patch +++ /dev/null @@ -1,106 +0,0 @@ -From 2f870688b6237cf722a66b2a82ba3992423cfce5 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Thu, 1 Jun 2023 21:09:56 +0900 -Subject: modpost: fix section mismatch message for R_ARM_{PC24,CALL,JUMP24} - -From: Masahiro Yamada - -[ Upstream commit 56a24b8ce6a7f9c4a21b2276a8644f6f3d8fc14d ] - -addend_arm_rel() processes R_ARM_PC24, R_ARM_CALL, R_ARM_JUMP24 in a -wrong way. - -Here, test code. - -[test code for R_ARM_JUMP24] - - .section .init.text,"ax" - bar: - bx lr - - .section .text,"ax" - .globl foo - foo: - b bar - -[test code for R_ARM_CALL] - - .section .init.text,"ax" - bar: - bx lr - - .section .text,"ax" - .globl foo - foo: - push {lr} - bl bar - pop {pc} - -If you compile it with ARM multi_v7_defconfig, modpost will show the -symbol name, (unknown). - - WARNING: modpost: vmlinux.o: section mismatch in reference: foo (section: .text) -> (unknown) (section: .init.text) - -(You need to use GNU linker instead of LLD to reproduce it.) - -Fix the code to make modpost show the correct symbol name. - -I imported (with adjustment) sign_extend32() from include/linux/bitops.h. - -The '+8' is the compensation for pc-relative instruction. It is -documented in "ELF for the Arm Architecture" [1]. - - "If the relocation is pc-relative then compensation for the PC bias - (the PC value is 8 bytes ahead of the executing instruction in Arm - state and 4 bytes in Thumb state) must be encoded in the relocation - by the object producer." - -[1]: https://github.com/ARM-software/abi-aa/blob/main/aaelf32/aaelf32.rst - -Fixes: 56a974fa2d59 ("kbuild: make better section mismatch reports on arm") -Fixes: 6e2e340b59d2 ("ARM: 7324/1: modpost: Fix section warnings for ARM for many compilers") -Signed-off-by: Masahiro Yamada -Signed-off-by: Sasha Levin ---- - scripts/mod/modpost.c | 12 ++++++++++++ - 1 file changed, 12 insertions(+) - -diff --git a/scripts/mod/modpost.c b/scripts/mod/modpost.c -index 6c2371f684a94..d97cbd753d2c3 100644 ---- a/scripts/mod/modpost.c -+++ b/scripts/mod/modpost.c -@@ -1411,12 +1411,20 @@ static int addend_386_rel(struct elf_info *elf, Elf_Shdr *sechdr, Elf_Rela *r) - #define R_ARM_THM_JUMP19 51 - #endif - -+static int32_t sign_extend32(int32_t value, int index) -+{ -+ uint8_t shift = 31 - index; -+ -+ return (int32_t)(value << shift) >> shift; -+} -+ - static int addend_arm_rel(struct elf_info *elf, Elf_Shdr *sechdr, Elf_Rela *r) - { - unsigned int r_typ = ELF_R_TYPE(r->r_info); - Elf_Sym *sym = elf->symtab_start + ELF_R_SYM(r->r_info); - void *loc = reloc_location(elf, sechdr, r); - uint32_t inst; -+ int32_t offset; - - switch (r_typ) { - case R_ARM_ABS32: -@@ -1426,6 +1434,10 @@ static int addend_arm_rel(struct elf_info *elf, Elf_Shdr *sechdr, Elf_Rela *r) - case R_ARM_PC24: - case R_ARM_CALL: - case R_ARM_JUMP24: -+ inst = TO_NATIVE(*(uint32_t *)loc); -+ offset = sign_extend32((inst & 0x00ffffff) << 2, 25); -+ r->r_addend = offset + sym->st_value + 8; -+ break; - case R_ARM_THM_CALL: - case R_ARM_THM_JUMP24: - case R_ARM_THM_JUMP19: --- -2.39.2 - diff --git a/queue-6.4/modpost-fix-section-mismatch-message-for-r_arm_abs32.patch b/queue-6.4/modpost-fix-section-mismatch-message-for-r_arm_abs32.patch deleted file mode 100644 index 4af488aed62..00000000000 --- a/queue-6.4/modpost-fix-section-mismatch-message-for-r_arm_abs32.patch +++ /dev/null @@ -1,133 +0,0 @@ -From f3073ecde4c3f5cff592b55be59b7b3f1d962762 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Thu, 1 Jun 2023 21:09:55 +0900 -Subject: modpost: fix section mismatch message for R_ARM_ABS32 - -From: Masahiro Yamada - -[ Upstream commit b7c63520f6703a25eebb4f8138fed764fcae1c6f ] - -addend_arm_rel() processes R_ARM_ABS32 in a wrong way. - -Here, test code. - - [test code 1] - - #include - - int __initdata foo; - int get_foo(void) { return foo; } - -If you compile it with ARM versatile_defconfig, modpost will show the -symbol name, (unknown). - - WARNING: modpost: vmlinux.o: section mismatch in reference: get_foo (section: .text) -> (unknown) (section: .init.data) - -(You need to use GNU linker instead of LLD to reproduce it.) - -If you compile it for other architectures, modpost will show the correct -symbol name. - - WARNING: modpost: vmlinux.o: section mismatch in reference: get_foo (section: .text) -> foo (section: .init.data) - -For R_ARM_ABS32, addend_arm_rel() sets r->r_addend to a wrong value. - -I just mimicked the code in arch/arm/kernel/module.c. - -However, there is more difficulty for ARM. - -Here, test code. - - [test code 2] - - #include - - int __initdata foo; - int get_foo(void) { return foo; } - - int __initdata bar; - int get_bar(void) { return bar; } - -With this commit applied, modpost will show the following messages -for ARM versatile_defconfig: - - WARNING: modpost: vmlinux.o: section mismatch in reference: get_foo (section: .text) -> foo (section: .init.data) - WARNING: modpost: vmlinux.o: section mismatch in reference: get_bar (section: .text) -> foo (section: .init.data) - -The reference from 'get_bar' to 'foo' seems wrong. - -I have no solution for this because it is true in assembly level. - -In the following output, relocation at 0x1c is no longer associated -with 'bar'. The two relocation entries point to the same symbol, and -the offset to 'bar' is encoded in the instruction 'r0, [r3, #4]'. - - Disassembly of section .text: - - 00000000 : - 0: e59f3004 ldr r3, [pc, #4] @ c - 4: e5930000 ldr r0, [r3] - 8: e12fff1e bx lr - c: 00000000 .word 0x00000000 - - 00000010 : - 10: e59f3004 ldr r3, [pc, #4] @ 1c - 14: e5930004 ldr r0, [r3, #4] - 18: e12fff1e bx lr - 1c: 00000000 .word 0x00000000 - - Relocation section '.rel.text' at offset 0x244 contains 2 entries: - Offset Info Type Sym.Value Sym. Name - 0000000c 00000c02 R_ARM_ABS32 00000000 .init.data - 0000001c 00000c02 R_ARM_ABS32 00000000 .init.data - -When find_elf_symbol() gets into a situation where relsym->st_name is -zero, there is no guarantee to get the symbol name as written in C. - -I am keeping the current logic because it is useful in many architectures, -but the symbol name is not always correct depending on the optimization. -I left some comments in find_tosym(). - -Fixes: 56a974fa2d59 ("kbuild: make better section mismatch reports on arm") -Signed-off-by: Masahiro Yamada -Signed-off-by: Sasha Levin ---- - scripts/mod/modpost.c | 12 +++++++++--- - 1 file changed, 9 insertions(+), 3 deletions(-) - -diff --git a/scripts/mod/modpost.c b/scripts/mod/modpost.c -index 9b6e8109af83f..6c2371f684a94 100644 ---- a/scripts/mod/modpost.c -+++ b/scripts/mod/modpost.c -@@ -1150,6 +1150,10 @@ static Elf_Sym *find_elf_symbol(struct elf_info *elf, Elf64_Sword addr, - if (relsym->st_name != 0) - return relsym; - -+ /* -+ * Strive to find a better symbol name, but the resulting name may not -+ * match the symbol referenced in the original code. -+ */ - relsym_secindex = get_secindex(elf, relsym); - for (sym = elf->symtab_start; sym < elf->symtab_stop; sym++) { - if (get_secindex(elf, sym) != relsym_secindex) -@@ -1410,12 +1414,14 @@ static int addend_386_rel(struct elf_info *elf, Elf_Shdr *sechdr, Elf_Rela *r) - static int addend_arm_rel(struct elf_info *elf, Elf_Shdr *sechdr, Elf_Rela *r) - { - unsigned int r_typ = ELF_R_TYPE(r->r_info); -+ Elf_Sym *sym = elf->symtab_start + ELF_R_SYM(r->r_info); -+ void *loc = reloc_location(elf, sechdr, r); -+ uint32_t inst; - - switch (r_typ) { - case R_ARM_ABS32: -- /* From ARM ABI: (S + A) | T */ -- r->r_addend = (int)(long) -- (elf->symtab_start + ELF_R_SYM(r->r_info)); -+ inst = TO_NATIVE(*(uint32_t *)loc); -+ r->r_addend = inst + sym->st_value; - break; - case R_ARM_PC24: - case R_ARM_CALL: --- -2.39.2 - diff --git a/queue-6.4/modpost-remove-broken-calculation-of-exception_table.patch b/queue-6.4/modpost-remove-broken-calculation-of-exception_table.patch deleted file mode 100644 index 11ca06f8390..00000000000 --- a/queue-6.4/modpost-remove-broken-calculation-of-exception_table.patch +++ /dev/null @@ -1,161 +0,0 @@ -From 176c5a26e427beb5c142771537940276d81b21e7 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Mon, 15 May 2023 00:27:19 +0900 -Subject: modpost: remove broken calculation of exception_table_entry size - -From: Masahiro Yamada - -[ Upstream commit d0acc76a49aa917c1a455d11d32d34a01e8b2835 ] - -find_extable_entry_size() is completely broken. It has awesome comments -about how to calculate sizeof(struct exception_table_entry). - -It was based on these assumptions: - - - struct exception_table_entry has two fields - - both of the fields have the same size - -Then, we came up with this equation: - - (offset of the second field) * 2 == (size of struct) - -It was true for all architectures when commit 52dc0595d540 ("modpost: -handle relocations mismatch in __ex_table.") was applied. - -Our mathematics broke when commit 548acf19234d ("x86/mm: Expand the -exception table logic to allow new handling options") introduced the -third field. - -Now, the definition of exception_table_entry is highly arch-dependent. - -For x86, sizeof(struct exception_table_entry) is apparently 12, but -find_extable_entry_size() sets extable_entry_size to 8. - -I could fix it, but I do not see much value in this code. - -extable_entry_size is used just for selecting a slightly different -error message. - -If the first field ("insn") references to a non-executable section, - - The relocation at %s+0x%lx references - section "%s" which is not executable, IOW - it is not possible for the kernel to fault - at that address. Something is seriously wrong - and should be fixed. - -If the second field ("fixup") references to a non-executable section, - - The relocation at %s+0x%lx references - section "%s" which is not executable, IOW - the kernel will fault if it ever tries to - jump to it. Something is seriously wrong - and should be fixed. - -Merge the two error messages rather than adding even more complexity. - -Change fatal() to error() to make it continue running and catch more -possible errors. - -Fixes: 548acf19234d ("x86/mm: Expand the exception table logic to allow new handling options") -Signed-off-by: Masahiro Yamada -Signed-off-by: Sasha Levin ---- - scripts/mod/modpost.c | 60 +++---------------------------------------- - 1 file changed, 3 insertions(+), 57 deletions(-) - -diff --git a/scripts/mod/modpost.c b/scripts/mod/modpost.c -index c12150f96b884..9b6e8109af83f 100644 ---- a/scripts/mod/modpost.c -+++ b/scripts/mod/modpost.c -@@ -1292,43 +1292,6 @@ static int is_executable_section(struct elf_info* elf, unsigned int section_inde - return ((elf->sechdrs[section_index].sh_flags & SHF_EXECINSTR) == SHF_EXECINSTR); - } - --/* -- * We rely on a gross hack in section_rel[a]() calling find_extable_entry_size() -- * to know the sizeof(struct exception_table_entry) for the target architecture. -- */ --static unsigned int extable_entry_size = 0; --static void find_extable_entry_size(const char* const sec, const Elf_Rela* r) --{ -- /* -- * If we're currently checking the second relocation within __ex_table, -- * that relocation offset tells us the offsetof(struct -- * exception_table_entry, fixup) which is equal to sizeof(struct -- * exception_table_entry) divided by two. We use that to our advantage -- * since there's no portable way to get that size as every architecture -- * seems to go with different sized types. Not pretty but better than -- * hard-coding the size for every architecture.. -- */ -- if (!extable_entry_size) -- extable_entry_size = r->r_offset * 2; --} -- --static inline bool is_extable_fault_address(Elf_Rela *r) --{ -- /* -- * extable_entry_size is only discovered after we've handled the -- * _second_ relocation in __ex_table, so only abort when we're not -- * handling the first reloc and extable_entry_size is zero. -- */ -- if (r->r_offset && extable_entry_size == 0) -- fatal("extable_entry size hasn't been discovered!\n"); -- -- return ((r->r_offset == 0) || -- (r->r_offset % extable_entry_size == 0)); --} -- --#define is_second_extable_reloc(Start, Cur, Sec) \ -- (((Cur) == (Start) + 1) && (strcmp("__ex_table", (Sec)) == 0)) -- - static void report_extable_warnings(const char* modname, struct elf_info* elf, - const struct sectioncheck* const mismatch, - Elf_Rela* r, Elf_Sym* sym, -@@ -1384,22 +1347,9 @@ static void extable_mismatch_handler(const char* modname, struct elf_info *elf, - "You might get more information about where this is\n" - "coming from by using scripts/check_extable.sh %s\n", - fromsec, (long)r->r_offset, tosec, modname); -- else if (!is_executable_section(elf, get_secindex(elf, sym))) { -- if (is_extable_fault_address(r)) -- fatal("The relocation at %s+0x%lx references\n" -- "section \"%s\" which is not executable, IOW\n" -- "it is not possible for the kernel to fault\n" -- "at that address. Something is seriously wrong\n" -- "and should be fixed.\n", -- fromsec, (long)r->r_offset, tosec); -- else -- fatal("The relocation at %s+0x%lx references\n" -- "section \"%s\" which is not executable, IOW\n" -- "the kernel will fault if it ever tries to\n" -- "jump to it. Something is seriously wrong\n" -- "and should be fixed.\n", -- fromsec, (long)r->r_offset, tosec); -- } -+ else if (!is_executable_section(elf, get_secindex(elf, sym))) -+ error("%s+0x%lx references non-executable section '%s'\n", -+ fromsec, (long)r->r_offset, tosec); - } - - static void check_section_mismatch(const char *modname, struct elf_info *elf, -@@ -1574,8 +1524,6 @@ static void section_rela(const char *modname, struct elf_info *elf, - /* Skip special sections */ - if (is_shndx_special(sym->st_shndx)) - continue; -- if (is_second_extable_reloc(start, rela, fromsec)) -- find_extable_entry_size(fromsec, &r); - check_section_mismatch(modname, elf, &r, sym, fromsec); - } - } -@@ -1633,8 +1581,6 @@ static void section_rel(const char *modname, struct elf_info *elf, - /* Skip special sections */ - if (is_shndx_special(sym->st_shndx)) - continue; -- if (is_second_extable_reloc(start, rel, fromsec)) -- find_extable_entry_size(fromsec, &r); - check_section_mismatch(modname, elf, &r, sym, fromsec); - } - } --- -2.39.2 - diff --git a/queue-6.4/net-axienet-move-reset-before-64-bit-dma-detection.patch b/queue-6.4/net-axienet-move-reset-before-64-bit-dma-detection.patch deleted file mode 100644 index 33d08bdf0cf..00000000000 --- a/queue-6.4/net-axienet-move-reset-before-64-bit-dma-detection.patch +++ /dev/null @@ -1,60 +0,0 @@ -From 9a5d8065172b54a54ee7f417fbba772c7c8bff92 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Thu, 22 Jun 2023 22:22:45 +0300 -Subject: net: axienet: Move reset before 64-bit DMA detection - -From: Maxim Kochetkov - -[ Upstream commit f1bc9fc4a06de0108e0dca2a9a7e99ba1fc632f9 ] - -64-bit DMA detection will fail if axienet was started before (by boot -loader, boot ROM, etc). In this state axienet will not start properly. -XAXIDMA_TX_CDESC_OFFSET + 4 register (MM2S_CURDESC_MSB) is used to detect -64-bit DMA capability here. But datasheet says: When DMACR.RS is 1 -(axienet is in enabled state), CURDESC_PTR becomes Read Only (RO) and -is used to fetch the first descriptor. So iowrite32()/ioread32() trick -to this register to detect 64-bit DMA will not work. -So move axienet reset before 64-bit DMA detection. - -Fixes: f735c40ed93c ("net: axienet: Autodetect 64-bit DMA capability") -Signed-off-by: Maxim Kochetkov -Reviewed-by: Robert Hancock -Reviewed-by: Radhey Shyam Pandey -Link: https://lore.kernel.org/r/20230622192245.116864-1-fido_max@inbox.ru -Signed-off-by: Jakub Kicinski -Signed-off-by: Sasha Levin ---- - drivers/net/ethernet/xilinx/xilinx_axienet_main.c | 10 +++++----- - 1 file changed, 5 insertions(+), 5 deletions(-) - -diff --git a/drivers/net/ethernet/xilinx/xilinx_axienet_main.c b/drivers/net/ethernet/xilinx/xilinx_axienet_main.c -index 3e310b55bce2b..734822321e0ab 100644 ---- a/drivers/net/ethernet/xilinx/xilinx_axienet_main.c -+++ b/drivers/net/ethernet/xilinx/xilinx_axienet_main.c -@@ -2042,6 +2042,11 @@ static int axienet_probe(struct platform_device *pdev) - goto cleanup_clk; - } - -+ /* Reset core now that clocks are enabled, prior to accessing MDIO */ -+ ret = __axienet_device_reset(lp); -+ if (ret) -+ goto cleanup_clk; -+ - /* Autodetect the need for 64-bit DMA pointers. - * When the IP is configured for a bus width bigger than 32 bits, - * writing the MSB registers is mandatory, even if they are all 0. -@@ -2096,11 +2101,6 @@ static int axienet_probe(struct platform_device *pdev) - lp->coalesce_count_tx = XAXIDMA_DFT_TX_THRESHOLD; - lp->coalesce_usec_tx = XAXIDMA_DFT_TX_USEC; - -- /* Reset core now that clocks are enabled, prior to accessing MDIO */ -- ret = __axienet_device_reset(lp); -- if (ret) -- goto cleanup_clk; -- - ret = axienet_mdio_setup(lp); - if (ret) - dev_warn(&pdev->dev, --- -2.39.2 - diff --git a/queue-6.4/net-dsa-avoid-suspicious-rcu-usage-for-synced-vlan-a.patch b/queue-6.4/net-dsa-avoid-suspicious-rcu-usage-for-synced-vlan-a.patch deleted file mode 100644 index eefdc2fb627..00000000000 --- a/queue-6.4/net-dsa-avoid-suspicious-rcu-usage-for-synced-vlan-a.patch +++ /dev/null @@ -1,349 +0,0 @@ -From 17f26456f8fdfa322ba59058a07922615545040f Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Mon, 26 Jun 2023 18:44:02 +0300 -Subject: net: dsa: avoid suspicious RCU usage for synced VLAN-aware MAC - addresses - -From: Vladimir Oltean - -[ Upstream commit d06f925f13976ab82167c93467c70a337a0a3cda ] - -When using the felix driver (the only one which supports UC filtering -and MC filtering) as a DSA master for a random other DSA switch, one can -see the following stack trace when the downstream switch ports join a -VLAN-aware bridge: - -============================= -WARNING: suspicious RCU usage ------------------------------ -net/8021q/vlan_core.c:238 suspicious rcu_dereference_protected() usage! - -stack backtrace: -Workqueue: dsa_ordered dsa_slave_switchdev_event_work -Call trace: - lockdep_rcu_suspicious+0x170/0x210 - vlan_for_each+0x8c/0x188 - dsa_slave_sync_uc+0x128/0x178 - __hw_addr_sync_dev+0x138/0x158 - dsa_slave_set_rx_mode+0x58/0x70 - __dev_set_rx_mode+0x88/0xa8 - dev_uc_add+0x74/0xa0 - dsa_port_bridge_host_fdb_add+0xec/0x180 - dsa_slave_switchdev_event_work+0x7c/0x1c8 - process_one_work+0x290/0x568 - -What it's saying is that vlan_for_each() expects rtnl_lock() context and -it's not getting it, when it's called from the DSA master's ndo_set_rx_mode(). - -The caller of that - dsa_slave_set_rx_mode() - is the slave DSA -interface's dsa_port_bridge_host_fdb_add() which comes from the deferred -dsa_slave_switchdev_event_work(). - -We went to great lengths to avoid the rtnl_lock() context in that call -path in commit 0faf890fc519 ("net: dsa: drop rtnl_lock from -dsa_slave_switchdev_event_work"), and calling rtnl_lock() is simply not -an option due to the possibility of deadlocking when calling -dsa_flush_workqueue() from the call paths that do hold rtnl_lock() - -basically all of them. - -So, when the DSA master calls vlan_for_each() from its ndo_set_rx_mode(), -the state of the 8021q driver on this device is really not protected -from concurrent access by anything. - -Looking at net/8021q/, I don't think that vlan_info->vid_list was -particularly designed with RCU traversal in mind, so introducing an RCU -read-side form of vlan_for_each() - vlan_for_each_rcu() - won't be so -easy, and it also wouldn't be exactly what we need anyway. - -In general I believe that the solution isn't in net/8021q/ anyway; -vlan_for_each() is not cut out for this task. DSA doesn't need rtnl_lock() -to be held per se - since it's not a netdev state change that we're -blocking, but rather, just concurrent additions/removals to a VLAN list. -We don't even need sleepable context - the callback of vlan_for_each() -just schedules deferred work. - -The proposed escape is to remove the dependency on vlan_for_each() and -to open-code a non-sleepable, rtnl-free alternative to that, based on -copies of the VLAN list modified from .ndo_vlan_rx_add_vid() and -.ndo_vlan_rx_kill_vid(). - -Fixes: 64fdc5f341db ("net: dsa: sync unicast and multicast addresses for VLAN filters too") -Signed-off-by: Vladimir Oltean -Link: https://lore.kernel.org/r/20230626154402.3154454-1-vladimir.oltean@nxp.com -Signed-off-by: Jakub Kicinski -Signed-off-by: Sasha Levin ---- - include/net/dsa.h | 12 +++++-- - net/dsa/dsa.c | 2 +- - net/dsa/slave.c | 84 ++++++++++++++++++++++++++++++++--------------- - net/dsa/switch.c | 4 +-- - net/dsa/switch.h | 3 ++ - 5 files changed, 74 insertions(+), 31 deletions(-) - -diff --git a/include/net/dsa.h b/include/net/dsa.h -index ab0f0a5b08602..197c5a6ca8f7f 100644 ---- a/include/net/dsa.h -+++ b/include/net/dsa.h -@@ -314,9 +314,17 @@ struct dsa_port { - struct list_head fdbs; - struct list_head mdbs; - -- /* List of VLANs that CPU and DSA ports are members of. */ - struct mutex vlans_lock; -- struct list_head vlans; -+ union { -+ /* List of VLANs that CPU and DSA ports are members of. -+ * Access to this is serialized by the sleepable @vlans_lock. -+ */ -+ struct list_head vlans; -+ /* List of VLANs that user ports are members of. -+ * Access to this is serialized by netif_addr_lock_bh(). -+ */ -+ struct list_head user_vlans; -+ }; - }; - - /* TODO: ideally DSA ports would have a single dp->link_dp member, -diff --git a/net/dsa/dsa.c b/net/dsa/dsa.c -index 1afed89e03c00..ccbdb98109f80 100644 ---- a/net/dsa/dsa.c -+++ b/net/dsa/dsa.c -@@ -1106,7 +1106,7 @@ static struct dsa_port *dsa_port_touch(struct dsa_switch *ds, int index) - mutex_init(&dp->vlans_lock); - INIT_LIST_HEAD(&dp->fdbs); - INIT_LIST_HEAD(&dp->mdbs); -- INIT_LIST_HEAD(&dp->vlans); -+ INIT_LIST_HEAD(&dp->vlans); /* also initializes &dp->user_vlans */ - INIT_LIST_HEAD(&dp->list); - list_add_tail(&dp->list, &dst->ports); - -diff --git a/net/dsa/slave.c b/net/dsa/slave.c -index 165bb2cb84316..527b1d576460f 100644 ---- a/net/dsa/slave.c -+++ b/net/dsa/slave.c -@@ -27,6 +27,7 @@ - #include "master.h" - #include "netlink.h" - #include "slave.h" -+#include "switch.h" - #include "tag.h" - - struct dsa_switchdev_event_work { -@@ -161,8 +162,7 @@ static int dsa_slave_schedule_standalone_work(struct net_device *dev, - return 0; - } - --static int dsa_slave_host_vlan_rx_filtering(struct net_device *vdev, int vid, -- void *arg) -+static int dsa_slave_host_vlan_rx_filtering(void *arg, int vid) - { - struct dsa_host_vlan_rx_filtering_ctx *ctx = arg; - -@@ -170,6 +170,28 @@ static int dsa_slave_host_vlan_rx_filtering(struct net_device *vdev, int vid, - ctx->addr, vid); - } - -+static int dsa_slave_vlan_for_each(struct net_device *dev, -+ int (*cb)(void *arg, int vid), void *arg) -+{ -+ struct dsa_port *dp = dsa_slave_to_port(dev); -+ struct dsa_vlan *v; -+ int err; -+ -+ lockdep_assert_held(&dev->addr_list_lock); -+ -+ err = cb(arg, 0); -+ if (err) -+ return err; -+ -+ list_for_each_entry(v, &dp->user_vlans, list) { -+ err = cb(arg, v->vid); -+ if (err) -+ return err; -+ } -+ -+ return 0; -+} -+ - static int dsa_slave_sync_uc(struct net_device *dev, - const unsigned char *addr) - { -@@ -180,18 +202,14 @@ static int dsa_slave_sync_uc(struct net_device *dev, - .addr = addr, - .event = DSA_UC_ADD, - }; -- int err; - - dev_uc_add(master, addr); - - if (!dsa_switch_supports_uc_filtering(dp->ds)) - return 0; - -- err = dsa_slave_schedule_standalone_work(dev, DSA_UC_ADD, addr, 0); -- if (err) -- return err; -- -- return vlan_for_each(dev, dsa_slave_host_vlan_rx_filtering, &ctx); -+ return dsa_slave_vlan_for_each(dev, dsa_slave_host_vlan_rx_filtering, -+ &ctx); - } - - static int dsa_slave_unsync_uc(struct net_device *dev, -@@ -204,18 +222,14 @@ static int dsa_slave_unsync_uc(struct net_device *dev, - .addr = addr, - .event = DSA_UC_DEL, - }; -- int err; - - dev_uc_del(master, addr); - - if (!dsa_switch_supports_uc_filtering(dp->ds)) - return 0; - -- err = dsa_slave_schedule_standalone_work(dev, DSA_UC_DEL, addr, 0); -- if (err) -- return err; -- -- return vlan_for_each(dev, dsa_slave_host_vlan_rx_filtering, &ctx); -+ return dsa_slave_vlan_for_each(dev, dsa_slave_host_vlan_rx_filtering, -+ &ctx); - } - - static int dsa_slave_sync_mc(struct net_device *dev, -@@ -228,18 +242,14 @@ static int dsa_slave_sync_mc(struct net_device *dev, - .addr = addr, - .event = DSA_MC_ADD, - }; -- int err; - - dev_mc_add(master, addr); - - if (!dsa_switch_supports_mc_filtering(dp->ds)) - return 0; - -- err = dsa_slave_schedule_standalone_work(dev, DSA_MC_ADD, addr, 0); -- if (err) -- return err; -- -- return vlan_for_each(dev, dsa_slave_host_vlan_rx_filtering, &ctx); -+ return dsa_slave_vlan_for_each(dev, dsa_slave_host_vlan_rx_filtering, -+ &ctx); - } - - static int dsa_slave_unsync_mc(struct net_device *dev, -@@ -252,18 +262,14 @@ static int dsa_slave_unsync_mc(struct net_device *dev, - .addr = addr, - .event = DSA_MC_DEL, - }; -- int err; - - dev_mc_del(master, addr); - - if (!dsa_switch_supports_mc_filtering(dp->ds)) - return 0; - -- err = dsa_slave_schedule_standalone_work(dev, DSA_MC_DEL, addr, 0); -- if (err) -- return err; -- -- return vlan_for_each(dev, dsa_slave_host_vlan_rx_filtering, &ctx); -+ return dsa_slave_vlan_for_each(dev, dsa_slave_host_vlan_rx_filtering, -+ &ctx); - } - - void dsa_slave_sync_ha(struct net_device *dev) -@@ -1759,6 +1765,7 @@ static int dsa_slave_vlan_rx_add_vid(struct net_device *dev, __be16 proto, - struct netlink_ext_ack extack = {0}; - struct dsa_switch *ds = dp->ds; - struct netdev_hw_addr *ha; -+ struct dsa_vlan *v; - int ret; - - /* User port... */ -@@ -1782,8 +1789,17 @@ static int dsa_slave_vlan_rx_add_vid(struct net_device *dev, __be16 proto, - !dsa_switch_supports_mc_filtering(ds)) - return 0; - -+ v = kzalloc(sizeof(*v), GFP_KERNEL); -+ if (!v) { -+ ret = -ENOMEM; -+ goto rollback; -+ } -+ - netif_addr_lock_bh(dev); - -+ v->vid = vid; -+ list_add_tail(&v->list, &dp->user_vlans); -+ - if (dsa_switch_supports_mc_filtering(ds)) { - netdev_for_each_synced_mc_addr(ha, dev) { - dsa_slave_schedule_standalone_work(dev, DSA_MC_ADD, -@@ -1803,6 +1819,12 @@ static int dsa_slave_vlan_rx_add_vid(struct net_device *dev, __be16 proto, - dsa_flush_workqueue(); - - return 0; -+ -+rollback: -+ dsa_port_host_vlan_del(dp, &vlan); -+ dsa_port_vlan_del(dp, &vlan); -+ -+ return ret; - } - - static int dsa_slave_vlan_rx_kill_vid(struct net_device *dev, __be16 proto, -@@ -1816,6 +1838,7 @@ static int dsa_slave_vlan_rx_kill_vid(struct net_device *dev, __be16 proto, - }; - struct dsa_switch *ds = dp->ds; - struct netdev_hw_addr *ha; -+ struct dsa_vlan *v; - int err; - - err = dsa_port_vlan_del(dp, &vlan); -@@ -1832,6 +1855,15 @@ static int dsa_slave_vlan_rx_kill_vid(struct net_device *dev, __be16 proto, - - netif_addr_lock_bh(dev); - -+ v = dsa_vlan_find(&dp->user_vlans, &vlan); -+ if (!v) { -+ netif_addr_unlock_bh(dev); -+ return -ENOENT; -+ } -+ -+ list_del(&v->list); -+ kfree(v); -+ - if (dsa_switch_supports_mc_filtering(ds)) { - netdev_for_each_synced_mc_addr(ha, dev) { - dsa_slave_schedule_standalone_work(dev, DSA_MC_DEL, -diff --git a/net/dsa/switch.c b/net/dsa/switch.c -index 8c9a9f94b756a..1a42f93173345 100644 ---- a/net/dsa/switch.c -+++ b/net/dsa/switch.c -@@ -673,8 +673,8 @@ static bool dsa_port_host_vlan_match(struct dsa_port *dp, - return false; - } - --static struct dsa_vlan *dsa_vlan_find(struct list_head *vlan_list, -- const struct switchdev_obj_port_vlan *vlan) -+struct dsa_vlan *dsa_vlan_find(struct list_head *vlan_list, -+ const struct switchdev_obj_port_vlan *vlan) - { - struct dsa_vlan *v; - -diff --git a/net/dsa/switch.h b/net/dsa/switch.h -index 15e67b95eb6e1..ea034677da153 100644 ---- a/net/dsa/switch.h -+++ b/net/dsa/switch.h -@@ -111,6 +111,9 @@ struct dsa_notifier_master_state_info { - bool operational; - }; - -+struct dsa_vlan *dsa_vlan_find(struct list_head *vlan_list, -+ const struct switchdev_obj_port_vlan *vlan); -+ - int dsa_tree_notify(struct dsa_switch_tree *dst, unsigned long e, void *v); - int dsa_broadcast(unsigned long e, void *v); - --- -2.39.2 - diff --git a/queue-6.4/net-handshake-unpin-sock-file-if-a-handshake-is-canc.patch b/queue-6.4/net-handshake-unpin-sock-file-if-a-handshake-is-canc.patch deleted file mode 100644 index 7cf87ac3fe5..00000000000 --- a/queue-6.4/net-handshake-unpin-sock-file-if-a-handshake-is-canc.patch +++ /dev/null @@ -1,59 +0,0 @@ -From 98161e706afb453d29111787f4365b1e6d7b3d4f Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Thu, 11 May 2023 11:49:17 -0400 -Subject: net/handshake: Unpin sock->file if a handshake is cancelled - -From: Chuck Lever - -[ Upstream commit f921bd41001ccff2249f5f443f2917f7ef937daf ] - -If user space never calls DONE, sock->file's reference count remains -elevated. Enable sock->file to be freed eventually in this case. - -Reported-by: Jakub Kacinski -Fixes: 3b3009ea8abb ("net/handshake: Create a NETLINK service for handling handshake requests") -Signed-off-by: Chuck Lever -Signed-off-by: David S. Miller -Signed-off-by: Sasha Levin ---- - net/handshake/handshake.h | 1 + - net/handshake/request.c | 4 ++++ - 2 files changed, 5 insertions(+) - -diff --git a/net/handshake/handshake.h b/net/handshake/handshake.h -index 4dac965c99df0..8aeaadca844fd 100644 ---- a/net/handshake/handshake.h -+++ b/net/handshake/handshake.h -@@ -31,6 +31,7 @@ struct handshake_req { - struct list_head hr_list; - struct rhash_head hr_rhash; - unsigned long hr_flags; -+ struct file *hr_file; - const struct handshake_proto *hr_proto; - struct sock *hr_sk; - void (*hr_odestruct)(struct sock *sk); -diff --git a/net/handshake/request.c b/net/handshake/request.c -index 94d5cef3e048b..d78d41abb3d99 100644 ---- a/net/handshake/request.c -+++ b/net/handshake/request.c -@@ -239,6 +239,7 @@ int handshake_req_submit(struct socket *sock, struct handshake_req *req, - } - req->hr_odestruct = req->hr_sk->sk_destruct; - req->hr_sk->sk_destruct = handshake_sk_destruct; -+ req->hr_file = sock->file; - - ret = -EOPNOTSUPP; - net = sock_net(req->hr_sk); -@@ -334,6 +335,9 @@ bool handshake_req_cancel(struct sock *sk) - return false; - } - -+ /* Request accepted and waiting for DONE */ -+ fput(req->hr_file); -+ - out_true: - trace_handshake_cancel(net, req, sk); - --- -2.39.2 - diff --git a/queue-6.4/net-nfc-fix-use-after-free-caused-by-nfc_llcp_find_l.patch b/queue-6.4/net-nfc-fix-use-after-free-caused-by-nfc_llcp_find_l.patch deleted file mode 100644 index d9b1e3631cf..00000000000 --- a/queue-6.4/net-nfc-fix-use-after-free-caused-by-nfc_llcp_find_l.patch +++ /dev/null @@ -1,558 +0,0 @@ -From cf69eb7d49b2c5a3758051af031f1fce41cb7a3c Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Sun, 25 Jun 2023 17:10:07 +0800 -Subject: net: nfc: Fix use-after-free caused by nfc_llcp_find_local - -From: Lin Ma - -[ Upstream commit 6709d4b7bc2e079241fdef15d1160581c5261c10 ] - -This commit fixes several use-after-free that caused by function -nfc_llcp_find_local(). For example, one UAF can happen when below buggy -time window occurs. - -// nfc_genl_llc_get_params | // nfc_unregister_device - | -dev = nfc_get_device(idx); | device_lock(...) -if (!dev) | dev->shutting_down = true; - return -ENODEV; | device_unlock(...); - | -device_lock(...); | // nfc_llcp_unregister_device - | nfc_llcp_find_local() -nfc_llcp_find_local(...); | - | local_cleanup() -if (!local) { | - rc = -ENODEV; | // nfc_llcp_local_put - goto exit; | kref_put(.., local_release) -} | - | // local_release - | list_del(&local->list) - // nfc_genl_send_params | kfree() - local->dev->idx !!!UAF!!! | - | - -and the crash trace for the one of the discussed UAF like: - -BUG: KASAN: slab-use-after-free in nfc_genl_llc_get_params+0x72f/0x780 net/nfc/netlink.c:1045 -Read of size 8 at addr ffff888105b0e410 by task 20114 - -Call Trace: - - __dump_stack lib/dump_stack.c:88 [inline] - dump_stack_lvl+0x72/0xa0 lib/dump_stack.c:106 - print_address_description mm/kasan/report.c:319 [inline] - print_report+0xcc/0x620 mm/kasan/report.c:430 - kasan_report+0xb2/0xe0 mm/kasan/report.c:536 - nfc_genl_send_params net/nfc/netlink.c:999 [inline] - nfc_genl_llc_get_params+0x72f/0x780 net/nfc/netlink.c:1045 - genl_family_rcv_msg_doit.isra.0+0x1ee/0x2e0 net/netlink/genetlink.c:968 - genl_family_rcv_msg net/netlink/genetlink.c:1048 [inline] - genl_rcv_msg+0x503/0x7d0 net/netlink/genetlink.c:1065 - netlink_rcv_skb+0x161/0x430 net/netlink/af_netlink.c:2548 - genl_rcv+0x28/0x40 net/netlink/genetlink.c:1076 - netlink_unicast_kernel net/netlink/af_netlink.c:1339 [inline] - netlink_unicast+0x644/0x900 net/netlink/af_netlink.c:1365 - netlink_sendmsg+0x934/0xe70 net/netlink/af_netlink.c:1913 - sock_sendmsg_nosec net/socket.c:724 [inline] - sock_sendmsg+0x1b6/0x200 net/socket.c:747 - ____sys_sendmsg+0x6e9/0x890 net/socket.c:2501 - ___sys_sendmsg+0x110/0x1b0 net/socket.c:2555 - __sys_sendmsg+0xf7/0x1d0 net/socket.c:2584 - do_syscall_x64 arch/x86/entry/common.c:50 [inline] - do_syscall_64+0x3f/0x90 arch/x86/entry/common.c:80 - entry_SYSCALL_64_after_hwframe+0x72/0xdc -RIP: 0033:0x7f34640a2389 -RSP: 002b:00007f3463415168 EFLAGS: 00000246 ORIG_RAX: 000000000000002e -RAX: ffffffffffffffda RBX: 00007f34641c1f80 RCX: 00007f34640a2389 -RDX: 0000000000000000 RSI: 0000000020000240 RDI: 0000000000000006 -RBP: 00007f34640ed493 R08: 0000000000000000 R09: 0000000000000000 -R10: 0000000000000000 R11: 0000000000000246 R12: 0000000000000000 -R13: 00007ffe38449ecf R14: 00007f3463415300 R15: 0000000000022000 - - -Allocated by task 20116: - kasan_save_stack+0x22/0x50 mm/kasan/common.c:45 - kasan_set_track+0x25/0x30 mm/kasan/common.c:52 - ____kasan_kmalloc mm/kasan/common.c:374 [inline] - __kasan_kmalloc+0x7f/0x90 mm/kasan/common.c:383 - kmalloc include/linux/slab.h:580 [inline] - kzalloc include/linux/slab.h:720 [inline] - nfc_llcp_register_device+0x49/0xa40 net/nfc/llcp_core.c:1567 - nfc_register_device+0x61/0x260 net/nfc/core.c:1124 - nci_register_device+0x776/0xb20 net/nfc/nci/core.c:1257 - virtual_ncidev_open+0x147/0x230 drivers/nfc/virtual_ncidev.c:148 - misc_open+0x379/0x4a0 drivers/char/misc.c:165 - chrdev_open+0x26c/0x780 fs/char_dev.c:414 - do_dentry_open+0x6c4/0x12a0 fs/open.c:920 - do_open fs/namei.c:3560 [inline] - path_openat+0x24fe/0x37e0 fs/namei.c:3715 - do_filp_open+0x1ba/0x410 fs/namei.c:3742 - do_sys_openat2+0x171/0x4c0 fs/open.c:1356 - do_sys_open fs/open.c:1372 [inline] - __do_sys_openat fs/open.c:1388 [inline] - __se_sys_openat fs/open.c:1383 [inline] - __x64_sys_openat+0x143/0x200 fs/open.c:1383 - do_syscall_x64 arch/x86/entry/common.c:50 [inline] - do_syscall_64+0x3f/0x90 arch/x86/entry/common.c:80 - entry_SYSCALL_64_after_hwframe+0x72/0xdc - -Freed by task 20115: - kasan_save_stack+0x22/0x50 mm/kasan/common.c:45 - kasan_set_track+0x25/0x30 mm/kasan/common.c:52 - kasan_save_free_info+0x2e/0x50 mm/kasan/generic.c:521 - ____kasan_slab_free mm/kasan/common.c:236 [inline] - ____kasan_slab_free mm/kasan/common.c:200 [inline] - __kasan_slab_free+0x10a/0x190 mm/kasan/common.c:244 - kasan_slab_free include/linux/kasan.h:162 [inline] - slab_free_hook mm/slub.c:1781 [inline] - slab_free_freelist_hook mm/slub.c:1807 [inline] - slab_free mm/slub.c:3787 [inline] - __kmem_cache_free+0x7a/0x190 mm/slub.c:3800 - local_release net/nfc/llcp_core.c:174 [inline] - kref_put include/linux/kref.h:65 [inline] - nfc_llcp_local_put net/nfc/llcp_core.c:182 [inline] - nfc_llcp_local_put net/nfc/llcp_core.c:177 [inline] - nfc_llcp_unregister_device+0x206/0x290 net/nfc/llcp_core.c:1620 - nfc_unregister_device+0x160/0x1d0 net/nfc/core.c:1179 - virtual_ncidev_close+0x52/0xa0 drivers/nfc/virtual_ncidev.c:163 - __fput+0x252/0xa20 fs/file_table.c:321 - task_work_run+0x174/0x270 kernel/task_work.c:179 - resume_user_mode_work include/linux/resume_user_mode.h:49 [inline] - exit_to_user_mode_loop kernel/entry/common.c:171 [inline] - exit_to_user_mode_prepare+0x108/0x110 kernel/entry/common.c:204 - __syscall_exit_to_user_mode_work kernel/entry/common.c:286 [inline] - syscall_exit_to_user_mode+0x21/0x50 kernel/entry/common.c:297 - do_syscall_64+0x4c/0x90 arch/x86/entry/common.c:86 - entry_SYSCALL_64_after_hwframe+0x72/0xdc - -Last potentially related work creation: - kasan_save_stack+0x22/0x50 mm/kasan/common.c:45 - __kasan_record_aux_stack+0x95/0xb0 mm/kasan/generic.c:491 - kvfree_call_rcu+0x29/0xa80 kernel/rcu/tree.c:3328 - drop_sysctl_table+0x3be/0x4e0 fs/proc/proc_sysctl.c:1735 - unregister_sysctl_table.part.0+0x9c/0x190 fs/proc/proc_sysctl.c:1773 - unregister_sysctl_table+0x24/0x30 fs/proc/proc_sysctl.c:1753 - neigh_sysctl_unregister+0x5f/0x80 net/core/neighbour.c:3895 - addrconf_notify+0x140/0x17b0 net/ipv6/addrconf.c:3684 - notifier_call_chain+0xbe/0x210 kernel/notifier.c:87 - call_netdevice_notifiers_info+0xb5/0x150 net/core/dev.c:1937 - call_netdevice_notifiers_extack net/core/dev.c:1975 [inline] - call_netdevice_notifiers net/core/dev.c:1989 [inline] - dev_change_name+0x3c3/0x870 net/core/dev.c:1211 - dev_ifsioc+0x800/0xf70 net/core/dev_ioctl.c:376 - dev_ioctl+0x3d9/0xf80 net/core/dev_ioctl.c:542 - sock_do_ioctl+0x160/0x260 net/socket.c:1213 - sock_ioctl+0x3f9/0x670 net/socket.c:1316 - vfs_ioctl fs/ioctl.c:51 [inline] - __do_sys_ioctl fs/ioctl.c:870 [inline] - __se_sys_ioctl fs/ioctl.c:856 [inline] - __x64_sys_ioctl+0x19e/0x210 fs/ioctl.c:856 - do_syscall_x64 arch/x86/entry/common.c:50 [inline] - do_syscall_64+0x3f/0x90 arch/x86/entry/common.c:80 - entry_SYSCALL_64_after_hwframe+0x72/0xdc - -The buggy address belongs to the object at ffff888105b0e400 - which belongs to the cache kmalloc-1k of size 1024 -The buggy address is located 16 bytes inside of - freed 1024-byte region [ffff888105b0e400, ffff888105b0e800) - -The buggy address belongs to the physical page: -head:ffffea000416c200 order:3 entire_mapcount:0 nr_pages_mapped:0 pincount:0 -flags: 0x200000000010200(slab|head|node=0|zone=2) -raw: 0200000000010200 ffff8881000430c0 ffffea00044c7010 ffffea0004510e10 -raw: 0000000000000000 00000000000a000a 00000001ffffffff 0000000000000000 -page dumped because: kasan: bad access detected - -Memory state around the buggy address: - ffff888105b0e300: fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc - ffff888105b0e380: fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc ->ffff888105b0e400: fa fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb - ^ - ffff888105b0e480: fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb - ffff888105b0e500: fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb - -In summary, this patch solves those use-after-free by - -1. Re-implement the nfc_llcp_find_local(). The current version does not -grab the reference when getting the local from the linked list. For -example, the llcp_sock_bind() gets the reference like below: - -// llcp_sock_bind() - - local = nfc_llcp_find_local(dev); // A - ..... \ - | raceable - ..... / - llcp_sock->local = nfc_llcp_local_get(local); // B - -There is an apparent race window that one can drop the reference -and free the local object fetched in (A) before (B) gets the reference. - -2. Some callers of the nfc_llcp_find_local() do not grab the reference -at all. For example, the nfc_genl_llc_{{get/set}_params/sdreq} functions. -We add the nfc_llcp_local_put() for them. Moreover, we add the necessary -error handling function to put the reference. - -3. Add the nfc_llcp_remove_local() helper. The local object is removed -from the linked list in local_release() when all reference is gone. This -patch removes it when nfc_llcp_unregister_device() is called. - -Therefore, every caller of nfc_llcp_find_local() will get a reference -even when the nfc_llcp_unregister_device() is called. This promises no -use-after-free for the local object is ever possible. - -Fixes: 52feb444a903 ("NFC: Extend netlink interface for LTO, RW, and MIUX parameters support") -Fixes: c7aa12252f51 ("NFC: Take a reference on the LLCP local pointer when creating a socket") -Signed-off-by: Lin Ma -Reviewed-by: Simon Horman -Signed-off-by: David S. Miller -Signed-off-by: Sasha Levin ---- - net/nfc/llcp.h | 1 - - net/nfc/llcp_commands.c | 12 +++++++--- - net/nfc/llcp_core.c | 49 +++++++++++++++++++++++++++++++++++------ - net/nfc/llcp_sock.c | 18 ++++++++------- - net/nfc/netlink.c | 20 ++++++++++++----- - net/nfc/nfc.h | 1 + - 6 files changed, 77 insertions(+), 24 deletions(-) - -diff --git a/net/nfc/llcp.h b/net/nfc/llcp.h -index c1d9be636933c..d8345ed57c954 100644 ---- a/net/nfc/llcp.h -+++ b/net/nfc/llcp.h -@@ -201,7 +201,6 @@ void nfc_llcp_sock_link(struct llcp_sock_list *l, struct sock *s); - void nfc_llcp_sock_unlink(struct llcp_sock_list *l, struct sock *s); - void nfc_llcp_socket_remote_param_init(struct nfc_llcp_sock *sock); - struct nfc_llcp_local *nfc_llcp_find_local(struct nfc_dev *dev); --struct nfc_llcp_local *nfc_llcp_local_get(struct nfc_llcp_local *local); - int nfc_llcp_local_put(struct nfc_llcp_local *local); - u8 nfc_llcp_get_sdp_ssap(struct nfc_llcp_local *local, - struct nfc_llcp_sock *sock); -diff --git a/net/nfc/llcp_commands.c b/net/nfc/llcp_commands.c -index cdb001de06928..e2680a3bef799 100644 ---- a/net/nfc/llcp_commands.c -+++ b/net/nfc/llcp_commands.c -@@ -359,6 +359,7 @@ int nfc_llcp_send_symm(struct nfc_dev *dev) - struct sk_buff *skb; - struct nfc_llcp_local *local; - u16 size = 0; -+ int err; - - local = nfc_llcp_find_local(dev); - if (local == NULL) -@@ -368,8 +369,10 @@ int nfc_llcp_send_symm(struct nfc_dev *dev) - size += dev->tx_headroom + dev->tx_tailroom + NFC_HEADER_SIZE; - - skb = alloc_skb(size, GFP_KERNEL); -- if (skb == NULL) -- return -ENOMEM; -+ if (skb == NULL) { -+ err = -ENOMEM; -+ goto out; -+ } - - skb_reserve(skb, dev->tx_headroom + NFC_HEADER_SIZE); - -@@ -379,8 +382,11 @@ int nfc_llcp_send_symm(struct nfc_dev *dev) - - nfc_llcp_send_to_raw_sock(local, skb, NFC_DIRECTION_TX); - -- return nfc_data_exchange(dev, local->target_idx, skb, -+ err = nfc_data_exchange(dev, local->target_idx, skb, - nfc_llcp_recv, local); -+out: -+ nfc_llcp_local_put(local); -+ return err; - } - - int nfc_llcp_send_connect(struct nfc_llcp_sock *sock) -diff --git a/net/nfc/llcp_core.c b/net/nfc/llcp_core.c -index a27e1842b2a09..f60e424e06076 100644 ---- a/net/nfc/llcp_core.c -+++ b/net/nfc/llcp_core.c -@@ -17,6 +17,8 @@ - static u8 llcp_magic[3] = {0x46, 0x66, 0x6d}; - - static LIST_HEAD(llcp_devices); -+/* Protects llcp_devices list */ -+static DEFINE_SPINLOCK(llcp_devices_lock); - - static void nfc_llcp_rx_skb(struct nfc_llcp_local *local, struct sk_buff *skb); - -@@ -141,7 +143,7 @@ static void nfc_llcp_socket_release(struct nfc_llcp_local *local, bool device, - write_unlock(&local->raw_sockets.lock); - } - --struct nfc_llcp_local *nfc_llcp_local_get(struct nfc_llcp_local *local) -+static struct nfc_llcp_local *nfc_llcp_local_get(struct nfc_llcp_local *local) - { - kref_get(&local->ref); - -@@ -169,7 +171,6 @@ static void local_release(struct kref *ref) - - local = container_of(ref, struct nfc_llcp_local, ref); - -- list_del(&local->list); - local_cleanup(local); - kfree(local); - } -@@ -282,12 +283,33 @@ static void nfc_llcp_sdreq_timer(struct timer_list *t) - struct nfc_llcp_local *nfc_llcp_find_local(struct nfc_dev *dev) - { - struct nfc_llcp_local *local; -+ struct nfc_llcp_local *res = NULL; - -+ spin_lock(&llcp_devices_lock); - list_for_each_entry(local, &llcp_devices, list) -- if (local->dev == dev) -+ if (local->dev == dev) { -+ res = nfc_llcp_local_get(local); -+ break; -+ } -+ spin_unlock(&llcp_devices_lock); -+ -+ return res; -+} -+ -+static struct nfc_llcp_local *nfc_llcp_remove_local(struct nfc_dev *dev) -+{ -+ struct nfc_llcp_local *local, *tmp; -+ -+ spin_lock(&llcp_devices_lock); -+ list_for_each_entry_safe(local, tmp, &llcp_devices, list) -+ if (local->dev == dev) { -+ list_del(&local->list); -+ spin_unlock(&llcp_devices_lock); - return local; -+ } -+ spin_unlock(&llcp_devices_lock); - -- pr_debug("No device found\n"); -+ pr_warn("Shutting down device not found\n"); - - return NULL; - } -@@ -608,12 +630,15 @@ u8 *nfc_llcp_general_bytes(struct nfc_dev *dev, size_t *general_bytes_len) - - *general_bytes_len = local->gb_len; - -+ nfc_llcp_local_put(local); -+ - return local->gb; - } - - int nfc_llcp_set_remote_gb(struct nfc_dev *dev, const u8 *gb, u8 gb_len) - { - struct nfc_llcp_local *local; -+ int err; - - if (gb_len < 3 || gb_len > NFC_MAX_GT_LEN) - return -EINVAL; -@@ -630,12 +655,16 @@ int nfc_llcp_set_remote_gb(struct nfc_dev *dev, const u8 *gb, u8 gb_len) - - if (memcmp(local->remote_gb, llcp_magic, 3)) { - pr_err("MAC does not support LLCP\n"); -- return -EINVAL; -+ err = -EINVAL; -+ goto out; - } - -- return nfc_llcp_parse_gb_tlv(local, -+ err = nfc_llcp_parse_gb_tlv(local, - &local->remote_gb[3], - local->remote_gb_len - 3); -+out: -+ nfc_llcp_local_put(local); -+ return err; - } - - static u8 nfc_llcp_dsap(const struct sk_buff *pdu) -@@ -1517,6 +1546,8 @@ int nfc_llcp_data_received(struct nfc_dev *dev, struct sk_buff *skb) - - __nfc_llcp_recv(local, skb); - -+ nfc_llcp_local_put(local); -+ - return 0; - } - -@@ -1533,6 +1564,8 @@ void nfc_llcp_mac_is_down(struct nfc_dev *dev) - - /* Close and purge all existing sockets */ - nfc_llcp_socket_release(local, true, 0); -+ -+ nfc_llcp_local_put(local); - } - - void nfc_llcp_mac_is_up(struct nfc_dev *dev, u32 target_idx, -@@ -1558,6 +1591,8 @@ void nfc_llcp_mac_is_up(struct nfc_dev *dev, u32 target_idx, - mod_timer(&local->link_timer, - jiffies + msecs_to_jiffies(local->remote_lto)); - } -+ -+ nfc_llcp_local_put(local); - } - - int nfc_llcp_register_device(struct nfc_dev *ndev) -@@ -1608,7 +1643,7 @@ int nfc_llcp_register_device(struct nfc_dev *ndev) - - void nfc_llcp_unregister_device(struct nfc_dev *dev) - { -- struct nfc_llcp_local *local = nfc_llcp_find_local(dev); -+ struct nfc_llcp_local *local = nfc_llcp_remove_local(dev); - - if (local == NULL) { - pr_debug("No such device\n"); -diff --git a/net/nfc/llcp_sock.c b/net/nfc/llcp_sock.c -index 77642d18a3b43..645677f84dba2 100644 ---- a/net/nfc/llcp_sock.c -+++ b/net/nfc/llcp_sock.c -@@ -99,7 +99,7 @@ static int llcp_sock_bind(struct socket *sock, struct sockaddr *addr, int alen) - } - - llcp_sock->dev = dev; -- llcp_sock->local = nfc_llcp_local_get(local); -+ llcp_sock->local = local; - llcp_sock->nfc_protocol = llcp_addr.nfc_protocol; - llcp_sock->service_name_len = min_t(unsigned int, - llcp_addr.service_name_len, -@@ -186,7 +186,7 @@ static int llcp_raw_sock_bind(struct socket *sock, struct sockaddr *addr, - } - - llcp_sock->dev = dev; -- llcp_sock->local = nfc_llcp_local_get(local); -+ llcp_sock->local = local; - llcp_sock->nfc_protocol = llcp_addr.nfc_protocol; - - nfc_llcp_sock_link(&local->raw_sockets, sk); -@@ -696,22 +696,22 @@ static int llcp_sock_connect(struct socket *sock, struct sockaddr *_addr, - if (dev->dep_link_up == false) { - ret = -ENOLINK; - device_unlock(&dev->dev); -- goto put_dev; -+ goto sock_llcp_put_local; - } - device_unlock(&dev->dev); - - if (local->rf_mode == NFC_RF_INITIATOR && - addr->target_idx != local->target_idx) { - ret = -ENOLINK; -- goto put_dev; -+ goto sock_llcp_put_local; - } - - llcp_sock->dev = dev; -- llcp_sock->local = nfc_llcp_local_get(local); -+ llcp_sock->local = local; - llcp_sock->ssap = nfc_llcp_get_local_ssap(local); - if (llcp_sock->ssap == LLCP_SAP_MAX) { - ret = -ENOMEM; -- goto sock_llcp_put_local; -+ goto sock_llcp_nullify; - } - - llcp_sock->reserved_ssap = llcp_sock->ssap; -@@ -757,11 +757,13 @@ static int llcp_sock_connect(struct socket *sock, struct sockaddr *_addr, - sock_llcp_release: - nfc_llcp_put_ssap(local, llcp_sock->ssap); - --sock_llcp_put_local: -- nfc_llcp_local_put(llcp_sock->local); -+sock_llcp_nullify: - llcp_sock->local = NULL; - llcp_sock->dev = NULL; - -+sock_llcp_put_local: -+ nfc_llcp_local_put(local); -+ - put_dev: - nfc_put_device(dev); - -diff --git a/net/nfc/netlink.c b/net/nfc/netlink.c -index b9264e730fd93..e9ac6a6f934e7 100644 ---- a/net/nfc/netlink.c -+++ b/net/nfc/netlink.c -@@ -1039,11 +1039,14 @@ static int nfc_genl_llc_get_params(struct sk_buff *skb, struct genl_info *info) - msg = nlmsg_new(NLMSG_DEFAULT_SIZE, GFP_KERNEL); - if (!msg) { - rc = -ENOMEM; -- goto exit; -+ goto put_local; - } - - rc = nfc_genl_send_params(msg, local, info->snd_portid, info->snd_seq); - -+put_local: -+ nfc_llcp_local_put(local); -+ - exit: - device_unlock(&dev->dev); - -@@ -1105,7 +1108,7 @@ static int nfc_genl_llc_set_params(struct sk_buff *skb, struct genl_info *info) - if (info->attrs[NFC_ATTR_LLC_PARAM_LTO]) { - if (dev->dep_link_up) { - rc = -EINPROGRESS; -- goto exit; -+ goto put_local; - } - - local->lto = nla_get_u8(info->attrs[NFC_ATTR_LLC_PARAM_LTO]); -@@ -1117,6 +1120,9 @@ static int nfc_genl_llc_set_params(struct sk_buff *skb, struct genl_info *info) - if (info->attrs[NFC_ATTR_LLC_PARAM_MIUX]) - local->miux = cpu_to_be16(miux); - -+put_local: -+ nfc_llcp_local_put(local); -+ - exit: - device_unlock(&dev->dev); - -@@ -1172,7 +1178,7 @@ static int nfc_genl_llc_sdreq(struct sk_buff *skb, struct genl_info *info) - - if (rc != 0) { - rc = -EINVAL; -- goto exit; -+ goto put_local; - } - - if (!sdp_attrs[NFC_SDP_ATTR_URI]) -@@ -1191,7 +1197,7 @@ static int nfc_genl_llc_sdreq(struct sk_buff *skb, struct genl_info *info) - sdreq = nfc_llcp_build_sdreq_tlv(tid, uri, uri_len); - if (sdreq == NULL) { - rc = -ENOMEM; -- goto exit; -+ goto put_local; - } - - tlvs_len += sdreq->tlv_len; -@@ -1201,10 +1207,14 @@ static int nfc_genl_llc_sdreq(struct sk_buff *skb, struct genl_info *info) - - if (hlist_empty(&sdreq_list)) { - rc = -EINVAL; -- goto exit; -+ goto put_local; - } - - rc = nfc_llcp_send_snl_sdreq(local, &sdreq_list, tlvs_len); -+ -+put_local: -+ nfc_llcp_local_put(local); -+ - exit: - device_unlock(&dev->dev); - -diff --git a/net/nfc/nfc.h b/net/nfc/nfc.h -index de2ec66d7e83a..0b1e6466f4fbf 100644 ---- a/net/nfc/nfc.h -+++ b/net/nfc/nfc.h -@@ -52,6 +52,7 @@ int nfc_llcp_set_remote_gb(struct nfc_dev *dev, const u8 *gb, u8 gb_len); - u8 *nfc_llcp_general_bytes(struct nfc_dev *dev, size_t *general_bytes_len); - int nfc_llcp_data_received(struct nfc_dev *dev, struct sk_buff *skb); - struct nfc_llcp_local *nfc_llcp_find_local(struct nfc_dev *dev); -+int nfc_llcp_local_put(struct nfc_llcp_local *local); - int __init nfc_llcp_init(void); - void nfc_llcp_exit(void); - void nfc_llcp_free_sdp_tlv(struct nfc_llcp_sdp_tlv *sdp); --- -2.39.2 - diff --git a/queue-6.4/net-stmmac-fix-double-serdes-powerdown.patch b/queue-6.4/net-stmmac-fix-double-serdes-powerdown.patch deleted file mode 100644 index 3e755a7fa54..00000000000 --- a/queue-6.4/net-stmmac-fix-double-serdes-powerdown.patch +++ /dev/null @@ -1,50 +0,0 @@ -From 97429b02c10a40133392850c8e8ecc172605a220 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Wed, 21 Jun 2023 15:55:37 +0200 -Subject: net: stmmac: fix double serdes powerdown - -From: Bartosz Golaszewski - -[ Upstream commit c4fc88ad2a765224a648db8ab35f125e120fe41b ] - -Commit 49725ffc15fc ("net: stmmac: power up/down serdes in -stmmac_open/release") correctly added a call to the serdes_powerdown() -callback to stmmac_release() but did not remove the one from -stmmac_remove() which leads to a doubled call to serdes_powerdown(). - -This can lead to all kinds of problems: in the case of the qcom ethqos -driver, it caused an unbalanced regulator disable splat. - -Fixes: 49725ffc15fc ("net: stmmac: power up/down serdes in stmmac_open/release") -Signed-off-by: Bartosz Golaszewski -Reviewed-by: Jiri Pirko -Acked-by: Junxiao Chang -Reviewed-by: Andrew Halaney -Tested-by: Andrew Halaney -Link: https://lore.kernel.org/r/20230621135537.376649-1-brgl@bgdev.pl -Signed-off-by: Jakub Kicinski -Signed-off-by: Sasha Levin ---- - drivers/net/ethernet/stmicro/stmmac/stmmac_main.c | 6 ------ - 1 file changed, 6 deletions(-) - -diff --git a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c -index 87510951f4e80..b74946bbee3c3 100644 ---- a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c -+++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c -@@ -7457,12 +7457,6 @@ void stmmac_dvr_remove(struct device *dev) - netif_carrier_off(ndev); - unregister_netdev(ndev); - -- /* Serdes power down needs to happen after VLAN filter -- * is deleted that is triggered by unregister_netdev(). -- */ -- if (priv->plat->serdes_powerdown) -- priv->plat->serdes_powerdown(ndev, priv->plat->bsp_priv); -- - #ifdef CONFIG_DEBUG_FS - stmmac_exit_fs(ndev); - #endif --- -2.39.2 - diff --git a/queue-6.4/netfilter-conntrack-dccp-copy-entire-header-to-stack.patch b/queue-6.4/netfilter-conntrack-dccp-copy-entire-header-to-stack.patch deleted file mode 100644 index 0d7f619c22a..00000000000 --- a/queue-6.4/netfilter-conntrack-dccp-copy-entire-header-to-stack.patch +++ /dev/null @@ -1,148 +0,0 @@ -From 96efe5519e03b38c3eed4e23790f1b3b518bc5c7 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Wed, 21 Jun 2023 17:56:53 +0200 -Subject: netfilter: conntrack: dccp: copy entire header to stack buffer, not - just basic one - -From: Florian Westphal - -[ Upstream commit ff0a3a7d52ff7282dbd183e7fc29a1fe386b0c30 ] - -Eric Dumazet says: - nf_conntrack_dccp_packet() has an unique: - - dh = skb_header_pointer(skb, dataoff, sizeof(_dh), &_dh); - - And nothing more is 'pulled' from the packet, depending on the content. - dh->dccph_doff, and/or dh->dccph_x ...) - So dccp_ack_seq() is happily reading stuff past the _dh buffer. - -BUG: KASAN: stack-out-of-bounds in nf_conntrack_dccp_packet+0x1134/0x11c0 -Read of size 4 at addr ffff000128f66e0c by task syz-executor.2/29371 -[..] - -Fix this by increasing the stack buffer to also include room for -the extra sequence numbers and all the known dccp packet type headers, -then pull again after the initial validation of the basic header. - -While at it, mark packets invalid that lack 48bit sequence bit but -where RFC says the type MUST use them. - -Compile tested only. - -v2: first skb_header_pointer() now needs to adjust the size to - only pull the generic header. (Eric) - -Heads-up: I intend to remove dccp conntrack support later this year. - -Fixes: 2bc780499aa3 ("[NETFILTER]: nf_conntrack: add DCCP protocol support") -Reported-by: Eric Dumazet -Signed-off-by: Florian Westphal -Reviewed-by: Eric Dumazet -Signed-off-by: Pablo Neira Ayuso -Signed-off-by: Sasha Levin ---- - net/netfilter/nf_conntrack_proto_dccp.c | 52 +++++++++++++++++++++++-- - 1 file changed, 49 insertions(+), 3 deletions(-) - -diff --git a/net/netfilter/nf_conntrack_proto_dccp.c b/net/netfilter/nf_conntrack_proto_dccp.c -index c1557d47ccd1e..d4fd626d2b8c3 100644 ---- a/net/netfilter/nf_conntrack_proto_dccp.c -+++ b/net/netfilter/nf_conntrack_proto_dccp.c -@@ -432,9 +432,19 @@ static bool dccp_error(const struct dccp_hdr *dh, - struct sk_buff *skb, unsigned int dataoff, - const struct nf_hook_state *state) - { -+ static const unsigned long require_seq48 = 1 << DCCP_PKT_REQUEST | -+ 1 << DCCP_PKT_RESPONSE | -+ 1 << DCCP_PKT_CLOSEREQ | -+ 1 << DCCP_PKT_CLOSE | -+ 1 << DCCP_PKT_RESET | -+ 1 << DCCP_PKT_SYNC | -+ 1 << DCCP_PKT_SYNCACK; - unsigned int dccp_len = skb->len - dataoff; - unsigned int cscov; - const char *msg; -+ u8 type; -+ -+ BUILD_BUG_ON(DCCP_PKT_INVALID >= BITS_PER_LONG); - - if (dh->dccph_doff * 4 < sizeof(struct dccp_hdr) || - dh->dccph_doff * 4 > dccp_len) { -@@ -459,34 +469,70 @@ static bool dccp_error(const struct dccp_hdr *dh, - goto out_invalid; - } - -- if (dh->dccph_type >= DCCP_PKT_INVALID) { -+ type = dh->dccph_type; -+ if (type >= DCCP_PKT_INVALID) { - msg = "nf_ct_dccp: reserved packet type "; - goto out_invalid; - } -+ -+ if (test_bit(type, &require_seq48) && !dh->dccph_x) { -+ msg = "nf_ct_dccp: type lacks 48bit sequence numbers"; -+ goto out_invalid; -+ } -+ - return false; - out_invalid: - nf_l4proto_log_invalid(skb, state, IPPROTO_DCCP, "%s", msg); - return true; - } - -+struct nf_conntrack_dccp_buf { -+ struct dccp_hdr dh; /* generic header part */ -+ struct dccp_hdr_ext ext; /* optional depending dh->dccph_x */ -+ union { /* depends on header type */ -+ struct dccp_hdr_ack_bits ack; -+ struct dccp_hdr_request req; -+ struct dccp_hdr_response response; -+ struct dccp_hdr_reset rst; -+ } u; -+}; -+ -+static struct dccp_hdr * -+dccp_header_pointer(const struct sk_buff *skb, int offset, const struct dccp_hdr *dh, -+ struct nf_conntrack_dccp_buf *buf) -+{ -+ unsigned int hdrlen = __dccp_hdr_len(dh); -+ -+ if (hdrlen > sizeof(*buf)) -+ return NULL; -+ -+ return skb_header_pointer(skb, offset, hdrlen, buf); -+} -+ - int nf_conntrack_dccp_packet(struct nf_conn *ct, struct sk_buff *skb, - unsigned int dataoff, - enum ip_conntrack_info ctinfo, - const struct nf_hook_state *state) - { - enum ip_conntrack_dir dir = CTINFO2DIR(ctinfo); -- struct dccp_hdr _dh, *dh; -+ struct nf_conntrack_dccp_buf _dh; - u_int8_t type, old_state, new_state; - enum ct_dccp_roles role; - unsigned int *timeouts; -+ struct dccp_hdr *dh; - -- dh = skb_header_pointer(skb, dataoff, sizeof(_dh), &_dh); -+ dh = skb_header_pointer(skb, dataoff, sizeof(*dh), &_dh.dh); - if (!dh) - return NF_DROP; - - if (dccp_error(dh, skb, dataoff, state)) - return -NF_ACCEPT; - -+ /* pull again, including possible 48 bit sequences and subtype header */ -+ dh = dccp_header_pointer(skb, dataoff, dh, &_dh); -+ if (!dh) -+ return NF_DROP; -+ - type = dh->dccph_type; - if (!nf_ct_is_confirmed(ct) && !dccp_new(ct, skb, dh, state)) - return -NF_ACCEPT; --- -2.39.2 - diff --git a/queue-6.4/netfilter-nf_conntrack_sip-fix-the-ct_sip_parse_nume.patch b/queue-6.4/netfilter-nf_conntrack_sip-fix-the-ct_sip_parse_nume.patch deleted file mode 100644 index 152975e20db..00000000000 --- a/queue-6.4/netfilter-nf_conntrack_sip-fix-the-ct_sip_parse_nume.patch +++ /dev/null @@ -1,53 +0,0 @@ -From b6f1623d8d091aa339bd89fad66e2f8dabb07920 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Fri, 23 Jun 2023 11:23:46 +0000 -Subject: netfilter: nf_conntrack_sip: fix the ct_sip_parse_numerical_param() - return value. - -From: Ilia.Gavrilov - -[ Upstream commit f188d30087480eab421cd8ca552fb15f55d57f4d ] - -ct_sip_parse_numerical_param() returns only 0 or 1 now. -But process_register_request() and process_register_response() imply -checking for a negative value if parsing of a numerical header parameter -failed. -The invocation in nf_nat_sip() looks correct: - if (ct_sip_parse_numerical_param(...) > 0 && - ...) { ... } - -Make the return value of the function ct_sip_parse_numerical_param() -a tristate to fix all the cases -a) return 1 if value is found; *val is set -b) return 0 if value is not found; *val is unchanged -c) return -1 on error; *val is undefined - -Found by InfoTeCS on behalf of Linux Verification Center -(linuxtesting.org) with SVACE. - -Fixes: 0f32a40fc91a ("[NETFILTER]: nf_conntrack_sip: create signalling expectations") -Signed-off-by: Ilia.Gavrilov -Reviewed-by: Simon Horman -Reviewed-by: Florian Westphal -Signed-off-by: Pablo Neira Ayuso -Signed-off-by: Sasha Levin ---- - net/netfilter/nf_conntrack_sip.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/net/netfilter/nf_conntrack_sip.c b/net/netfilter/nf_conntrack_sip.c -index 77f5e82d8e3fe..d0eac27f6ba03 100644 ---- a/net/netfilter/nf_conntrack_sip.c -+++ b/net/netfilter/nf_conntrack_sip.c -@@ -611,7 +611,7 @@ int ct_sip_parse_numerical_param(const struct nf_conn *ct, const char *dptr, - start += strlen(name); - *val = simple_strtoul(start, &end, 0); - if (start == end) -- return 0; -+ return -1; - if (matchoff && matchlen) { - *matchoff = start - dptr; - *matchlen = end - start; --- -2.39.2 - diff --git a/queue-6.4/netfilter-nf_tables-fix-underflow-in-chain-reference.patch b/queue-6.4/netfilter-nf_tables-fix-underflow-in-chain-reference.patch deleted file mode 100644 index 8da28fb9c0b..00000000000 --- a/queue-6.4/netfilter-nf_tables-fix-underflow-in-chain-reference.patch +++ /dev/null @@ -1,47 +0,0 @@ -From 0bc1294878d0808046105ebab188a10ca29ed44c Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Mon, 26 Jun 2023 00:42:19 +0200 -Subject: netfilter: nf_tables: fix underflow in chain reference counter - -From: Pablo Neira Ayuso - -[ Upstream commit b389139f12f287b8ed2e2628b72df89a081f0b59 ] - -Set element addition error path decrements reference counter on chains -twice: once on element release and again via nft_data_release(). - -Then, d6b478666ffa ("netfilter: nf_tables: fix underflow in object -reference counter") incorrectly fixed this by removing the stateful -object reference count decrement. - -Restore the stateful object decrement as in b91d90368837 ("netfilter: -nf_tables: fix leaking object reference count") and let -nft_data_release() decrement the chain reference counter, so this is -done only once. - -Fixes: d6b478666ffa ("netfilter: nf_tables: fix underflow in object reference counter") -Fixes: 628bd3e49cba ("netfilter: nf_tables: drop map element references from preparation phase") -Signed-off-by: Pablo Neira Ayuso -Signed-off-by: Sasha Levin ---- - net/netfilter/nf_tables_api.c | 4 +++- - 1 file changed, 3 insertions(+), 1 deletion(-) - -diff --git a/net/netfilter/nf_tables_api.c b/net/netfilter/nf_tables_api.c -index 1d64c163076a1..c742918f22a4a 100644 ---- a/net/netfilter/nf_tables_api.c -+++ b/net/netfilter/nf_tables_api.c -@@ -6771,7 +6771,9 @@ static int nft_add_set_elem(struct nft_ctx *ctx, struct nft_set *set, - err_element_clash: - kfree(trans); - err_elem_free: -- nft_set_elem_destroy(set, elem.priv, true); -+ nf_tables_set_elem_destroy(ctx, set, elem.priv); -+ if (obj) -+ obj->use--; - err_parse_data: - if (nla[NFTA_SET_ELEM_DATA] != NULL) - nft_data_release(&elem.data.val, desc.type); --- -2.39.2 - diff --git a/queue-6.4/netfilter-nf_tables-unbind-non-anonymous-set-if-rule.patch b/queue-6.4/netfilter-nf_tables-unbind-non-anonymous-set-if-rule.patch deleted file mode 100644 index 5e2093e7b07..00000000000 --- a/queue-6.4/netfilter-nf_tables-unbind-non-anonymous-set-if-rule.patch +++ /dev/null @@ -1,36 +0,0 @@ -From 13aee69d537137175d0b17385227e4f613ce3e54 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Mon, 26 Jun 2023 00:42:18 +0200 -Subject: netfilter: nf_tables: unbind non-anonymous set if rule construction - fails - -From: Pablo Neira Ayuso - -[ Upstream commit 3e70489721b6c870252c9082c496703677240f53 ] - -Otherwise a dangling reference to a rule object that is gone remains -in the set binding list. - -Fixes: 26b5a5712eb8 ("netfilter: nf_tables: add NFT_TRANS_PREPARE_ERROR to deal with bound set/chain") -Signed-off-by: Pablo Neira Ayuso -Signed-off-by: Sasha Levin ---- - net/netfilter/nf_tables_api.c | 2 ++ - 1 file changed, 2 insertions(+) - -diff --git a/net/netfilter/nf_tables_api.c b/net/netfilter/nf_tables_api.c -index 4c7937fd803f9..1d64c163076a1 100644 ---- a/net/netfilter/nf_tables_api.c -+++ b/net/netfilter/nf_tables_api.c -@@ -5343,6 +5343,8 @@ void nf_tables_deactivate_set(const struct nft_ctx *ctx, struct nft_set *set, - nft_set_trans_unbind(ctx, set); - if (nft_set_is_anonymous(set)) - nft_deactivate_next(ctx->net, set); -+ else -+ list_del_rcu(&binding->list); - - set->use--; - break; --- -2.39.2 - diff --git a/queue-6.4/netlink-add-__sock_i_ino-for-__netlink_diag_dump.patch b/queue-6.4/netlink-add-__sock_i_ino-for-__netlink_diag_dump.patch deleted file mode 100644 index ef45cf36133..00000000000 --- a/queue-6.4/netlink-add-__sock_i_ino-for-__netlink_diag_dump.patch +++ /dev/null @@ -1,152 +0,0 @@ -From 5bbd785e827e51fc80ee7859d7b456dc8c6ad9a9 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Mon, 26 Jun 2023 09:43:13 -0700 -Subject: netlink: Add __sock_i_ino() for __netlink_diag_dump(). - -From: Kuniyuki Iwashima - -[ Upstream commit 25a9c8a4431c364f97f75558cb346d2ad3f53fbb ] - -syzbot reported a warning in __local_bh_enable_ip(). [0] - -Commit 8d61f926d420 ("netlink: fix potential deadlock in -netlink_set_err()") converted read_lock(&nl_table_lock) to -read_lock_irqsave() in __netlink_diag_dump() to prevent a deadlock. - -However, __netlink_diag_dump() calls sock_i_ino() that uses -read_lock_bh() and read_unlock_bh(). If CONFIG_TRACE_IRQFLAGS=y, -read_unlock_bh() finally enables IRQ even though it should stay -disabled until the following read_unlock_irqrestore(). - -Using read_lock() in sock_i_ino() would trigger a lockdep splat -in another place that was fixed in commit f064af1e500a ("net: fix -a lockdep splat"), so let's add __sock_i_ino() that would be safe -to use under BH disabled. - -[0]: -WARNING: CPU: 0 PID: 5012 at kernel/softirq.c:376 __local_bh_enable_ip+0xbe/0x130 kernel/softirq.c:376 -Modules linked in: -CPU: 0 PID: 5012 Comm: syz-executor487 Not tainted 6.4.0-rc7-syzkaller-00202-g6f68fc395f49 #0 -Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 05/27/2023 -RIP: 0010:__local_bh_enable_ip+0xbe/0x130 kernel/softirq.c:376 -Code: 45 bf 01 00 00 00 e8 91 5b 0a 00 e8 3c 15 3d 00 fb 65 8b 05 ec e9 b5 7e 85 c0 74 58 5b 5d c3 65 8b 05 b2 b6 b4 7e 85 c0 75 a2 <0f> 0b eb 9e e8 89 15 3d 00 eb 9f 48 89 ef e8 6f 49 18 00 eb a8 0f -RSP: 0018:ffffc90003a1f3d0 EFLAGS: 00010046 -RAX: 0000000000000000 RBX: 0000000000000201 RCX: 1ffffffff1cf5996 -RDX: 0000000000000000 RSI: 0000000000000201 RDI: ffffffff8805c6f3 -RBP: ffffffff8805c6f3 R08: 0000000000000001 R09: ffff8880152b03a3 -R10: ffffed1002a56074 R11: 0000000000000005 R12: 00000000000073e4 -R13: dffffc0000000000 R14: 0000000000000002 R15: 0000000000000000 -FS: 0000555556726300(0000) GS:ffff8880b9800000(0000) knlGS:0000000000000000 -CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033 -CR2: 000000000045ad50 CR3: 000000007c646000 CR4: 00000000003506f0 -DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000 -DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400 -Call Trace: - - sock_i_ino+0x83/0xa0 net/core/sock.c:2559 - __netlink_diag_dump+0x45c/0x790 net/netlink/diag.c:171 - netlink_diag_dump+0xd6/0x230 net/netlink/diag.c:207 - netlink_dump+0x570/0xc50 net/netlink/af_netlink.c:2269 - __netlink_dump_start+0x64b/0x910 net/netlink/af_netlink.c:2374 - netlink_dump_start include/linux/netlink.h:329 [inline] - netlink_diag_handler_dump+0x1ae/0x250 net/netlink/diag.c:238 - __sock_diag_cmd net/core/sock_diag.c:238 [inline] - sock_diag_rcv_msg+0x31e/0x440 net/core/sock_diag.c:269 - netlink_rcv_skb+0x165/0x440 net/netlink/af_netlink.c:2547 - sock_diag_rcv+0x2a/0x40 net/core/sock_diag.c:280 - netlink_unicast_kernel net/netlink/af_netlink.c:1339 [inline] - netlink_unicast+0x547/0x7f0 net/netlink/af_netlink.c:1365 - netlink_sendmsg+0x925/0xe30 net/netlink/af_netlink.c:1914 - sock_sendmsg_nosec net/socket.c:724 [inline] - sock_sendmsg+0xde/0x190 net/socket.c:747 - ____sys_sendmsg+0x71c/0x900 net/socket.c:2503 - ___sys_sendmsg+0x110/0x1b0 net/socket.c:2557 - __sys_sendmsg+0xf7/0x1c0 net/socket.c:2586 - do_syscall_x64 arch/x86/entry/common.c:50 [inline] - do_syscall_64+0x39/0xb0 arch/x86/entry/common.c:80 - entry_SYSCALL_64_after_hwframe+0x63/0xcd -RIP: 0033:0x7f5303aaabb9 -Code: 28 c3 e8 2a 14 00 00 66 2e 0f 1f 84 00 00 00 00 00 48 89 f8 48 89 f7 48 89 d6 48 89 ca 4d 89 c2 4d 89 c8 4c 8b 4c 24 08 0f 05 <48> 3d 01 f0 ff ff 73 01 c3 48 c7 c1 c0 ff ff ff f7 d8 64 89 01 48 -RSP: 002b:00007ffc7506e548 EFLAGS: 00000246 ORIG_RAX: 000000000000002e -RAX: ffffffffffffffda RBX: 0000000000000000 RCX: 00007f5303aaabb9 -RDX: 0000000000000000 RSI: 0000000020000180 RDI: 0000000000000003 -RBP: 00007f5303a6ed60 R08: 0000000000000000 R09: 0000000000000000 -R10: 0000000000000000 R11: 0000000000000246 R12: 00007f5303a6edf0 -R13: 0000000000000000 R14: 0000000000000000 R15: 0000000000000000 - - -Fixes: 8d61f926d420 ("netlink: fix potential deadlock in netlink_set_err()") -Reported-by: syzbot+5da61cf6a9bc1902d422@syzkaller.appspotmail.com -Link: https://syzkaller.appspot.com/bug?extid=5da61cf6a9bc1902d422 -Suggested-by: Eric Dumazet -Signed-off-by: Kuniyuki Iwashima -Reviewed-by: Eric Dumazet -Link: https://lore.kernel.org/r/20230626164313.52528-1-kuniyu@amazon.com -Signed-off-by: Jakub Kicinski -Signed-off-by: Sasha Levin ---- - include/net/sock.h | 1 + - net/core/sock.c | 17 ++++++++++++++--- - net/netlink/diag.c | 2 +- - 3 files changed, 16 insertions(+), 4 deletions(-) - -diff --git a/include/net/sock.h b/include/net/sock.h -index 6f428a7f35675..ad468fe71413a 100644 ---- a/include/net/sock.h -+++ b/include/net/sock.h -@@ -2100,6 +2100,7 @@ static inline void sock_graft(struct sock *sk, struct socket *parent) - } - - kuid_t sock_i_uid(struct sock *sk); -+unsigned long __sock_i_ino(struct sock *sk); - unsigned long sock_i_ino(struct sock *sk); - - static inline kuid_t sock_net_uid(const struct net *net, const struct sock *sk) -diff --git a/net/core/sock.c b/net/core/sock.c -index 6e5662ca00fe5..4a0edccf86066 100644 ---- a/net/core/sock.c -+++ b/net/core/sock.c -@@ -2550,13 +2550,24 @@ kuid_t sock_i_uid(struct sock *sk) - } - EXPORT_SYMBOL(sock_i_uid); - --unsigned long sock_i_ino(struct sock *sk) -+unsigned long __sock_i_ino(struct sock *sk) - { - unsigned long ino; - -- read_lock_bh(&sk->sk_callback_lock); -+ read_lock(&sk->sk_callback_lock); - ino = sk->sk_socket ? SOCK_INODE(sk->sk_socket)->i_ino : 0; -- read_unlock_bh(&sk->sk_callback_lock); -+ read_unlock(&sk->sk_callback_lock); -+ return ino; -+} -+EXPORT_SYMBOL(__sock_i_ino); -+ -+unsigned long sock_i_ino(struct sock *sk) -+{ -+ unsigned long ino; -+ -+ local_bh_disable(); -+ ino = __sock_i_ino(sk); -+ local_bh_enable(); - return ino; - } - EXPORT_SYMBOL(sock_i_ino); -diff --git a/net/netlink/diag.c b/net/netlink/diag.c -index 4143b2ea4195a..e4f21b1067bcc 100644 ---- a/net/netlink/diag.c -+++ b/net/netlink/diag.c -@@ -168,7 +168,7 @@ static int __netlink_diag_dump(struct sk_buff *skb, struct netlink_callback *cb, - NETLINK_CB(cb->skb).portid, - cb->nlh->nlmsg_seq, - NLM_F_MULTI, -- sock_i_ino(sk)) < 0) { -+ __sock_i_ino(sk)) < 0) { - ret = 1; - break; - } --- -2.39.2 - diff --git a/queue-6.4/netlink-do-not-hard-code-device-address-lenth-in-fdb.patch b/queue-6.4/netlink-do-not-hard-code-device-address-lenth-in-fdb.patch deleted file mode 100644 index 76db7aa7101..00000000000 --- a/queue-6.4/netlink-do-not-hard-code-device-address-lenth-in-fdb.patch +++ /dev/null @@ -1,157 +0,0 @@ -From 626f54929966d4421da6ce1eb6964aab30c0a600 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Wed, 21 Jun 2023 17:47:20 +0000 -Subject: netlink: do not hard code device address lenth in fdb dumps - -From: Eric Dumazet - -[ Upstream commit aa5406950726e336c5c9585b09799a734b6e77bf ] - -syzbot reports that some netdev devices do not have a six bytes -address [1] - -Replace ETH_ALEN by dev->addr_len. - -[1] (Case of a device where dev->addr_len = 4) - -BUG: KMSAN: kernel-infoleak in instrument_copy_to_user include/linux/instrumented.h:114 [inline] -BUG: KMSAN: kernel-infoleak in copyout+0xb8/0x100 lib/iov_iter.c:169 -instrument_copy_to_user include/linux/instrumented.h:114 [inline] -copyout+0xb8/0x100 lib/iov_iter.c:169 -_copy_to_iter+0x6d8/0x1d00 lib/iov_iter.c:536 -copy_to_iter include/linux/uio.h:206 [inline] -simple_copy_to_iter+0x68/0xa0 net/core/datagram.c:513 -__skb_datagram_iter+0x123/0xdc0 net/core/datagram.c:419 -skb_copy_datagram_iter+0x5c/0x200 net/core/datagram.c:527 -skb_copy_datagram_msg include/linux/skbuff.h:3960 [inline] -netlink_recvmsg+0x4ae/0x15a0 net/netlink/af_netlink.c:1970 -sock_recvmsg_nosec net/socket.c:1019 [inline] -sock_recvmsg net/socket.c:1040 [inline] -____sys_recvmsg+0x283/0x7f0 net/socket.c:2722 -___sys_recvmsg+0x223/0x840 net/socket.c:2764 -do_recvmmsg+0x4f9/0xfd0 net/socket.c:2858 -__sys_recvmmsg net/socket.c:2937 [inline] -__do_sys_recvmmsg net/socket.c:2960 [inline] -__se_sys_recvmmsg net/socket.c:2953 [inline] -__x64_sys_recvmmsg+0x397/0x490 net/socket.c:2953 -do_syscall_x64 arch/x86/entry/common.c:50 [inline] -do_syscall_64+0x41/0xc0 arch/x86/entry/common.c:80 -entry_SYSCALL_64_after_hwframe+0x63/0xcd - -Uninit was stored to memory at: -__nla_put lib/nlattr.c:1009 [inline] -nla_put+0x1c6/0x230 lib/nlattr.c:1067 -nlmsg_populate_fdb_fill+0x2b8/0x600 net/core/rtnetlink.c:4071 -nlmsg_populate_fdb net/core/rtnetlink.c:4418 [inline] -ndo_dflt_fdb_dump+0x616/0x840 net/core/rtnetlink.c:4456 -rtnl_fdb_dump+0x14ff/0x1fc0 net/core/rtnetlink.c:4629 -netlink_dump+0x9d1/0x1310 net/netlink/af_netlink.c:2268 -netlink_recvmsg+0xc5c/0x15a0 net/netlink/af_netlink.c:1995 -sock_recvmsg_nosec+0x7a/0x120 net/socket.c:1019 -____sys_recvmsg+0x664/0x7f0 net/socket.c:2720 -___sys_recvmsg+0x223/0x840 net/socket.c:2764 -do_recvmmsg+0x4f9/0xfd0 net/socket.c:2858 -__sys_recvmmsg net/socket.c:2937 [inline] -__do_sys_recvmmsg net/socket.c:2960 [inline] -__se_sys_recvmmsg net/socket.c:2953 [inline] -__x64_sys_recvmmsg+0x397/0x490 net/socket.c:2953 -do_syscall_x64 arch/x86/entry/common.c:50 [inline] -do_syscall_64+0x41/0xc0 arch/x86/entry/common.c:80 -entry_SYSCALL_64_after_hwframe+0x63/0xcd - -Uninit was created at: -slab_post_alloc_hook+0x12d/0xb60 mm/slab.h:716 -slab_alloc_node mm/slub.c:3451 [inline] -__kmem_cache_alloc_node+0x4ff/0x8b0 mm/slub.c:3490 -kmalloc_trace+0x51/0x200 mm/slab_common.c:1057 -kmalloc include/linux/slab.h:559 [inline] -__hw_addr_create net/core/dev_addr_lists.c:60 [inline] -__hw_addr_add_ex+0x2e5/0x9e0 net/core/dev_addr_lists.c:118 -__dev_mc_add net/core/dev_addr_lists.c:867 [inline] -dev_mc_add+0x9a/0x130 net/core/dev_addr_lists.c:885 -igmp6_group_added+0x267/0xbc0 net/ipv6/mcast.c:680 -ipv6_mc_up+0x296/0x3b0 net/ipv6/mcast.c:2754 -ipv6_mc_remap+0x1e/0x30 net/ipv6/mcast.c:2708 -addrconf_type_change net/ipv6/addrconf.c:3731 [inline] -addrconf_notify+0x4d3/0x1d90 net/ipv6/addrconf.c:3699 -notifier_call_chain kernel/notifier.c:93 [inline] -raw_notifier_call_chain+0xe4/0x430 kernel/notifier.c:461 -call_netdevice_notifiers_info net/core/dev.c:1935 [inline] -call_netdevice_notifiers_extack net/core/dev.c:1973 [inline] -call_netdevice_notifiers+0x1ee/0x2d0 net/core/dev.c:1987 -bond_enslave+0xccd/0x53f0 drivers/net/bonding/bond_main.c:1906 -do_set_master net/core/rtnetlink.c:2626 [inline] -rtnl_newlink_create net/core/rtnetlink.c:3460 [inline] -__rtnl_newlink net/core/rtnetlink.c:3660 [inline] -rtnl_newlink+0x378c/0x40e0 net/core/rtnetlink.c:3673 -rtnetlink_rcv_msg+0x16a6/0x1840 net/core/rtnetlink.c:6395 -netlink_rcv_skb+0x371/0x650 net/netlink/af_netlink.c:2546 -rtnetlink_rcv+0x34/0x40 net/core/rtnetlink.c:6413 -netlink_unicast_kernel net/netlink/af_netlink.c:1339 [inline] -netlink_unicast+0xf28/0x1230 net/netlink/af_netlink.c:1365 -netlink_sendmsg+0x122f/0x13d0 net/netlink/af_netlink.c:1913 -sock_sendmsg_nosec net/socket.c:724 [inline] -sock_sendmsg net/socket.c:747 [inline] -____sys_sendmsg+0x999/0xd50 net/socket.c:2503 -___sys_sendmsg+0x28d/0x3c0 net/socket.c:2557 -__sys_sendmsg net/socket.c:2586 [inline] -__do_sys_sendmsg net/socket.c:2595 [inline] -__se_sys_sendmsg net/socket.c:2593 [inline] -__x64_sys_sendmsg+0x304/0x490 net/socket.c:2593 -do_syscall_x64 arch/x86/entry/common.c:50 [inline] -do_syscall_64+0x41/0xc0 arch/x86/entry/common.c:80 -entry_SYSCALL_64_after_hwframe+0x63/0xcd - -Bytes 2856-2857 of 3500 are uninitialized -Memory access of size 3500 starts at ffff888018d99104 -Data copied to user address 0000000020000480 - -Fixes: d83b06036048 ("net: add fdb generic dump routine") -Reported-by: syzbot -Signed-off-by: Eric Dumazet -Reviewed-by: Jiri Pirko -Link: https://lore.kernel.org/r/20230621174720.1845040-1-edumazet@google.com -Signed-off-by: Jakub Kicinski -Signed-off-by: Sasha Levin ---- - net/core/rtnetlink.c | 8 ++++---- - 1 file changed, 4 insertions(+), 4 deletions(-) - -diff --git a/net/core/rtnetlink.c b/net/core/rtnetlink.c -index d1815122298d5..2fe6a3379aaed 100644 ---- a/net/core/rtnetlink.c -+++ b/net/core/rtnetlink.c -@@ -4096,7 +4096,7 @@ static int nlmsg_populate_fdb_fill(struct sk_buff *skb, - ndm->ndm_ifindex = dev->ifindex; - ndm->ndm_state = ndm_state; - -- if (nla_put(skb, NDA_LLADDR, ETH_ALEN, addr)) -+ if (nla_put(skb, NDA_LLADDR, dev->addr_len, addr)) - goto nla_put_failure; - if (vid) - if (nla_put(skb, NDA_VLAN, sizeof(u16), &vid)) -@@ -4110,10 +4110,10 @@ static int nlmsg_populate_fdb_fill(struct sk_buff *skb, - return -EMSGSIZE; - } - --static inline size_t rtnl_fdb_nlmsg_size(void) -+static inline size_t rtnl_fdb_nlmsg_size(const struct net_device *dev) - { - return NLMSG_ALIGN(sizeof(struct ndmsg)) + -- nla_total_size(ETH_ALEN) + /* NDA_LLADDR */ -+ nla_total_size(dev->addr_len) + /* NDA_LLADDR */ - nla_total_size(sizeof(u16)) + /* NDA_VLAN */ - 0; - } -@@ -4125,7 +4125,7 @@ static void rtnl_fdb_notify(struct net_device *dev, u8 *addr, u16 vid, int type, - struct sk_buff *skb; - int err = -ENOBUFS; - -- skb = nlmsg_new(rtnl_fdb_nlmsg_size(), GFP_ATOMIC); -+ skb = nlmsg_new(rtnl_fdb_nlmsg_size(dev), GFP_ATOMIC); - if (!skb) - goto errout; - --- -2.39.2 - diff --git a/queue-6.4/netlink-fix-potential-deadlock-in-netlink_set_err.patch b/queue-6.4/netlink-fix-potential-deadlock-in-netlink_set_err.patch deleted file mode 100644 index ce02db951e6..00000000000 --- a/queue-6.4/netlink-fix-potential-deadlock-in-netlink_set_err.patch +++ /dev/null @@ -1,117 +0,0 @@ -From bed52f17ffcef7611a9e01de2a617e9c309f7558 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Wed, 21 Jun 2023 15:43:37 +0000 -Subject: netlink: fix potential deadlock in netlink_set_err() - -From: Eric Dumazet - -[ Upstream commit 8d61f926d42045961e6b65191c09e3678d86a9cf ] - -syzbot reported a possible deadlock in netlink_set_err() [1] - -A similar issue was fixed in commit 1d482e666b8e ("netlink: disable IRQs -for netlink_lock_table()") in netlink_lock_table() - -This patch adds IRQ safety to netlink_set_err() and __netlink_diag_dump() -which were not covered by cited commit. - -[1] - -WARNING: possible irq lock inversion dependency detected -6.4.0-rc6-syzkaller-00240-g4e9f0ec38852 #0 Not tainted - -syz-executor.2/23011 just changed the state of lock: -ffffffff8e1a7a58 (nl_table_lock){.+.?}-{2:2}, at: netlink_set_err+0x2e/0x3a0 net/netlink/af_netlink.c:1612 -but this lock was taken by another, SOFTIRQ-safe lock in the past: - (&local->queue_stop_reason_lock){..-.}-{2:2} - -and interrupts could create inverse lock ordering between them. - -other info that might help us debug this: - Possible interrupt unsafe locking scenario: - - CPU0 CPU1 - ---- ---- - lock(nl_table_lock); - local_irq_disable(); - lock(&local->queue_stop_reason_lock); - lock(nl_table_lock); - - lock(&local->queue_stop_reason_lock); - - *** DEADLOCK *** - -Fixes: 1d482e666b8e ("netlink: disable IRQs for netlink_lock_table()") -Reported-by: syzbot+a7d200a347f912723e5c@syzkaller.appspotmail.com -Link: https://syzkaller.appspot.com/bug?extid=a7d200a347f912723e5c -Link: https://lore.kernel.org/netdev/000000000000e38d1605fea5747e@google.com/T/#u -Signed-off-by: Eric Dumazet -Cc: Johannes Berg -Link: https://lore.kernel.org/r/20230621154337.1668594-1-edumazet@google.com -Signed-off-by: Jakub Kicinski -Signed-off-by: Sasha Levin ---- - net/netlink/af_netlink.c | 5 +++-- - net/netlink/diag.c | 5 +++-- - 2 files changed, 6 insertions(+), 4 deletions(-) - -diff --git a/net/netlink/af_netlink.c b/net/netlink/af_netlink.c -index 3a1e0fd5bf149..5968b6450d828 100644 ---- a/net/netlink/af_netlink.c -+++ b/net/netlink/af_netlink.c -@@ -1600,6 +1600,7 @@ static int do_one_set_err(struct sock *sk, struct netlink_set_err_data *p) - int netlink_set_err(struct sock *ssk, u32 portid, u32 group, int code) - { - struct netlink_set_err_data info; -+ unsigned long flags; - struct sock *sk; - int ret = 0; - -@@ -1609,12 +1610,12 @@ int netlink_set_err(struct sock *ssk, u32 portid, u32 group, int code) - /* sk->sk_err wants a positive error value */ - info.code = -code; - -- read_lock(&nl_table_lock); -+ read_lock_irqsave(&nl_table_lock, flags); - - sk_for_each_bound(sk, &nl_table[ssk->sk_protocol].mc_list) - ret += do_one_set_err(sk, &info); - -- read_unlock(&nl_table_lock); -+ read_unlock_irqrestore(&nl_table_lock, flags); - return ret; - } - EXPORT_SYMBOL(netlink_set_err); -diff --git a/net/netlink/diag.c b/net/netlink/diag.c -index c6255eac305c7..4143b2ea4195a 100644 ---- a/net/netlink/diag.c -+++ b/net/netlink/diag.c -@@ -94,6 +94,7 @@ static int __netlink_diag_dump(struct sk_buff *skb, struct netlink_callback *cb, - struct net *net = sock_net(skb->sk); - struct netlink_diag_req *req; - struct netlink_sock *nlsk; -+ unsigned long flags; - struct sock *sk; - int num = 2; - int ret = 0; -@@ -152,7 +153,7 @@ static int __netlink_diag_dump(struct sk_buff *skb, struct netlink_callback *cb, - num++; - - mc_list: -- read_lock(&nl_table_lock); -+ read_lock_irqsave(&nl_table_lock, flags); - sk_for_each_bound(sk, &tbl->mc_list) { - if (sk_hashed(sk)) - continue; -@@ -173,7 +174,7 @@ static int __netlink_diag_dump(struct sk_buff *skb, struct netlink_callback *cb, - } - num++; - } -- read_unlock(&nl_table_lock); -+ read_unlock_irqrestore(&nl_table_lock, flags); - - done: - cb->args[0] = num; --- -2.39.2 - diff --git a/queue-6.4/nfc-llcp-fix-possible-use-of-uninitialized-variable-.patch b/queue-6.4/nfc-llcp-fix-possible-use-of-uninitialized-variable-.patch deleted file mode 100644 index 7b6d979e18d..00000000000 --- a/queue-6.4/nfc-llcp-fix-possible-use-of-uninitialized-variable-.patch +++ /dev/null @@ -1,41 +0,0 @@ -From 59f9ef4b9412533c0db1675b0672106251ac3cfa Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Sat, 13 May 2023 13:52:04 +0200 -Subject: nfc: llcp: fix possible use of uninitialized variable in - nfc_llcp_send_connect() - -From: Krzysztof Kozlowski - -[ Upstream commit 0d9b41daa5907756a31772d8af8ac5ff25cf17c1 ] - -If sock->service_name is NULL, the local variable -service_name_tlv_length will not be assigned by nfc_llcp_build_tlv(), -later leading to using value frmo the stack. Smatch warning: - - net/nfc/llcp_commands.c:442 nfc_llcp_send_connect() error: uninitialized symbol 'service_name_tlv_length'. - -Fixes: de9e5aeb4f40 ("NFC: llcp: Fix usage of llcp_add_tlv()") -Signed-off-by: Krzysztof Kozlowski -Signed-off-by: David S. Miller -Signed-off-by: Sasha Levin ---- - net/nfc/llcp_commands.c | 3 ++- - 1 file changed, 2 insertions(+), 1 deletion(-) - -diff --git a/net/nfc/llcp_commands.c b/net/nfc/llcp_commands.c -index 41e3a20c89355..cdb001de06928 100644 ---- a/net/nfc/llcp_commands.c -+++ b/net/nfc/llcp_commands.c -@@ -390,7 +390,8 @@ int nfc_llcp_send_connect(struct nfc_llcp_sock *sock) - const u8 *service_name_tlv = NULL; - const u8 *miux_tlv = NULL; - const u8 *rw_tlv = NULL; -- u8 service_name_tlv_length, miux_tlv_length, rw_tlv_length, rw; -+ u8 service_name_tlv_length = 0; -+ u8 miux_tlv_length, rw_tlv_length, rw; - int err; - u16 size = 0; - __be16 miux; --- -2.39.2 - diff --git a/queue-6.4/nfsv4.1-freeze-the-session-table-upon-receiving-nfs4.patch b/queue-6.4/nfsv4.1-freeze-the-session-table-upon-receiving-nfs4.patch deleted file mode 100644 index 4eade9189f2..00000000000 --- a/queue-6.4/nfsv4.1-freeze-the-session-table-upon-receiving-nfs4.patch +++ /dev/null @@ -1,41 +0,0 @@ -From 8803b59f8685aa73e6aa3b13ac79b0ea4300b4b5 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Sun, 18 Jun 2023 17:32:25 -0400 -Subject: NFSv4.1: freeze the session table upon receiving NFS4ERR_BADSESSION - -From: Olga Kornievskaia - -[ Upstream commit c907e72f58ed979a24a9fdcadfbc447c51d5e509 ] - -When the client received NFS4ERR_BADSESSION, it schedules recovery -and start the state manager thread which in turn freezes the -session table and does not allow for any new requests to use the -no-longer valid session. However, it is possible that before -the state manager thread runs, a new operation would use the -released slot that received BADSESSION and was therefore not -updated its sequence number. Such re-use of the slot can lead -the application errors. - -Fixes: 5c441544f045 ("NFSv4.x: Handle bad/dead sessions correctly in nfs41_sequence_process()") -Signed-off-by: Olga Kornievskaia -Signed-off-by: Trond Myklebust -Signed-off-by: Sasha Levin ---- - fs/nfs/nfs4proc.c | 1 + - 1 file changed, 1 insertion(+) - -diff --git a/fs/nfs/nfs4proc.c b/fs/nfs/nfs4proc.c -index d3665390c4cb8..9faba2dac11dd 100644 ---- a/fs/nfs/nfs4proc.c -+++ b/fs/nfs/nfs4proc.c -@@ -921,6 +921,7 @@ static int nfs41_sequence_process(struct rpc_task *task, - out_noaction: - return ret; - session_recover: -+ set_bit(NFS4_SLOT_TBL_DRAINING, &session->fc_slot_table.slot_tbl_state); - nfs4_schedule_session_recovery(session, status); - dprintk("%s ERROR: %d Reset session\n", __func__, status); - nfs41_sequence_free_slot(res); --- -2.39.2 - diff --git a/queue-6.4/nfsv4.2-fix-wrong-shrinker_id.patch b/queue-6.4/nfsv4.2-fix-wrong-shrinker_id.patch deleted file mode 100644 index 025a723d617..00000000000 --- a/queue-6.4/nfsv4.2-fix-wrong-shrinker_id.patch +++ /dev/null @@ -1,170 +0,0 @@ -From 1fecfe6e06fd159b0d6875239e437a51ec82be8e Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Thu, 15 Jun 2023 11:19:46 +0000 -Subject: NFSv4.2: fix wrong shrinker_id - -From: Qi Zheng - -[ Upstream commit 7f7ab336898f281e58540ef781a8fb375acc32a9 ] - -Currently, the list_lru::shrinker_id corresponding to the nfs4_xattr -shrinkers is wrong: - ->>> prog["nfs4_xattr_cache_lru"].shrinker_id -(int)0 ->>> prog["nfs4_xattr_entry_lru"].shrinker_id -(int)0 ->>> prog["nfs4_xattr_large_entry_lru"].shrinker_id -(int)0 ->>> prog["nfs4_xattr_cache_shrinker"].id -(int)18 ->>> prog["nfs4_xattr_entry_shrinker"].id -(int)19 ->>> prog["nfs4_xattr_large_entry_shrinker"].id -(int)20 - -This is not what we expect, which will cause these shrinkers -not to be found in shrink_slab_memcg(). - -We should assign shrinker::id before calling list_lru_init_memcg(), -so that the corresponding list_lru::shrinker_id will be assigned -the correct value like below: - ->>> prog["nfs4_xattr_cache_lru"].shrinker_id -(int)16 ->>> prog["nfs4_xattr_entry_lru"].shrinker_id -(int)17 ->>> prog["nfs4_xattr_large_entry_lru"].shrinker_id -(int)18 ->>> prog["nfs4_xattr_cache_shrinker"].id -(int)16 ->>> prog["nfs4_xattr_entry_shrinker"].id -(int)17 ->>> prog["nfs4_xattr_large_entry_shrinker"].id -(int)18 - -So just do it. - -Fixes: 95ad37f90c33 ("NFSv4.2: add client side xattr caching.") -Signed-off-by: Qi Zheng -Signed-off-by: Trond Myklebust -Signed-off-by: Sasha Levin ---- - fs/nfs/nfs42xattr.c | 79 +++++++++++++++++++++++++-------------------- - 1 file changed, 44 insertions(+), 35 deletions(-) - -diff --git a/fs/nfs/nfs42xattr.c b/fs/nfs/nfs42xattr.c -index 76ae118342066..911f634ba3da7 100644 ---- a/fs/nfs/nfs42xattr.c -+++ b/fs/nfs/nfs42xattr.c -@@ -991,6 +991,29 @@ static void nfs4_xattr_cache_init_once(void *p) - INIT_LIST_HEAD(&cache->dispose); - } - -+static int nfs4_xattr_shrinker_init(struct shrinker *shrinker, -+ struct list_lru *lru, const char *name) -+{ -+ int ret = 0; -+ -+ ret = register_shrinker(shrinker, name); -+ if (ret) -+ return ret; -+ -+ ret = list_lru_init_memcg(lru, shrinker); -+ if (ret) -+ unregister_shrinker(shrinker); -+ -+ return ret; -+} -+ -+static void nfs4_xattr_shrinker_destroy(struct shrinker *shrinker, -+ struct list_lru *lru) -+{ -+ unregister_shrinker(shrinker); -+ list_lru_destroy(lru); -+} -+ - int __init nfs4_xattr_cache_init(void) - { - int ret = 0; -@@ -1002,44 +1025,30 @@ int __init nfs4_xattr_cache_init(void) - if (nfs4_xattr_cache_cachep == NULL) - return -ENOMEM; - -- ret = list_lru_init_memcg(&nfs4_xattr_large_entry_lru, -- &nfs4_xattr_large_entry_shrinker); -- if (ret) -- goto out4; -- -- ret = list_lru_init_memcg(&nfs4_xattr_entry_lru, -- &nfs4_xattr_entry_shrinker); -- if (ret) -- goto out3; -- -- ret = list_lru_init_memcg(&nfs4_xattr_cache_lru, -- &nfs4_xattr_cache_shrinker); -- if (ret) -- goto out2; -- -- ret = register_shrinker(&nfs4_xattr_cache_shrinker, "nfs-xattr_cache"); -+ ret = nfs4_xattr_shrinker_init(&nfs4_xattr_cache_shrinker, -+ &nfs4_xattr_cache_lru, -+ "nfs-xattr_cache"); - if (ret) - goto out1; - -- ret = register_shrinker(&nfs4_xattr_entry_shrinker, "nfs-xattr_entry"); -+ ret = nfs4_xattr_shrinker_init(&nfs4_xattr_entry_shrinker, -+ &nfs4_xattr_entry_lru, -+ "nfs-xattr_entry"); - if (ret) -- goto out; -+ goto out2; - -- ret = register_shrinker(&nfs4_xattr_large_entry_shrinker, -- "nfs-xattr_large_entry"); -+ ret = nfs4_xattr_shrinker_init(&nfs4_xattr_large_entry_shrinker, -+ &nfs4_xattr_large_entry_lru, -+ "nfs-xattr_large_entry"); - if (!ret) - return 0; - -- unregister_shrinker(&nfs4_xattr_entry_shrinker); --out: -- unregister_shrinker(&nfs4_xattr_cache_shrinker); --out1: -- list_lru_destroy(&nfs4_xattr_cache_lru); -+ nfs4_xattr_shrinker_destroy(&nfs4_xattr_entry_shrinker, -+ &nfs4_xattr_entry_lru); - out2: -- list_lru_destroy(&nfs4_xattr_entry_lru); --out3: -- list_lru_destroy(&nfs4_xattr_large_entry_lru); --out4: -+ nfs4_xattr_shrinker_destroy(&nfs4_xattr_cache_shrinker, -+ &nfs4_xattr_cache_lru); -+out1: - kmem_cache_destroy(nfs4_xattr_cache_cachep); - - return ret; -@@ -1047,11 +1056,11 @@ int __init nfs4_xattr_cache_init(void) - - void nfs4_xattr_cache_exit(void) - { -- unregister_shrinker(&nfs4_xattr_large_entry_shrinker); -- unregister_shrinker(&nfs4_xattr_entry_shrinker); -- unregister_shrinker(&nfs4_xattr_cache_shrinker); -- list_lru_destroy(&nfs4_xattr_large_entry_lru); -- list_lru_destroy(&nfs4_xattr_entry_lru); -- list_lru_destroy(&nfs4_xattr_cache_lru); -+ nfs4_xattr_shrinker_destroy(&nfs4_xattr_large_entry_shrinker, -+ &nfs4_xattr_large_entry_lru); -+ nfs4_xattr_shrinker_destroy(&nfs4_xattr_entry_shrinker, -+ &nfs4_xattr_entry_lru); -+ nfs4_xattr_shrinker_destroy(&nfs4_xattr_cache_shrinker, -+ &nfs4_xattr_cache_lru); - kmem_cache_destroy(nfs4_xattr_cache_cachep); - } --- -2.39.2 - diff --git a/queue-6.4/nvme-core-add-missing-fault-injection-cleanup.patch b/queue-6.4/nvme-core-add-missing-fault-injection-cleanup.patch deleted file mode 100644 index 72f7a2969db..00000000000 --- a/queue-6.4/nvme-core-add-missing-fault-injection-cleanup.patch +++ /dev/null @@ -1,48 +0,0 @@ -From f3efcb16b00b2354c1147809543786c4b032d30e Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Fri, 28 Apr 2023 00:31:14 -0700 -Subject: nvme-core: add missing fault-injection cleanup - -From: Chaitanya Kulkarni - -[ Upstream commit 3a12a0b868a512fcada564699d00f5e652c0998c ] - -Add missing fault-injection cleanup in nvme_init_ctrl() in the error -unwind path that also fixes following message for blktests:- - -linux-block (for-next) # grep debugfs debugfs-err.log -[ 147.853464] debugfs: Directory 'nvme1' with parent '/' already present! -[ 147.853973] nvme1: failed to create debugfs attr -[ 148.802490] debugfs: Directory 'nvme1' with parent '/' already present! -[ 148.803244] nvme1: failed to create debugfs attr -[ 148.877304] debugfs: Directory 'nvme1' with parent '/' already present! -[ 148.877775] nvme1: failed to create debugfs attr -[ 149.816652] debugfs: Directory 'nvme1' with parent '/' already present! -[ 149.818011] nvme1: failed to create debugfs attr - -Signed-off-by: Chaitanya Kulkarni -Tested-by: Yi Zhang -Reviewed-by: Christoph Hellwig -Reviewed-by: Sagi Grimberg -Signed-off-by: Keith Busch -Stable-dep-of: 7ed5cf8e6d9b ("nvme-core: fix dev_pm_qos memleak") -Signed-off-by: Sasha Levin ---- - drivers/nvme/host/core.c | 1 + - 1 file changed, 1 insertion(+) - -diff --git a/drivers/nvme/host/core.c b/drivers/nvme/host/core.c -index a275e7e2969e9..43bb5071b222c 100644 ---- a/drivers/nvme/host/core.c -+++ b/drivers/nvme/host/core.c -@@ -5249,6 +5249,7 @@ int nvme_init_ctrl(struct nvme_ctrl *ctrl, struct device *dev, - - return 0; - out_free_cdev: -+ nvme_fault_inject_fini(&ctrl->fault_inject); - cdev_device_del(&ctrl->cdev, ctrl->device); - out_free_name: - nvme_put_ctrl(ctrl); --- -2.39.2 - diff --git a/queue-6.4/nvme-core-fix-dev_pm_qos-memleak.patch b/queue-6.4/nvme-core-fix-dev_pm_qos-memleak.patch deleted file mode 100644 index 9b13dcac456..00000000000 --- a/queue-6.4/nvme-core-fix-dev_pm_qos-memleak.patch +++ /dev/null @@ -1,59 +0,0 @@ -From 6d47f0665eebfa6a228ad8f760bbb56c5e3791da Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Fri, 28 Apr 2023 00:31:15 -0700 -Subject: nvme-core: fix dev_pm_qos memleak - -From: Chaitanya Kulkarni - -[ Upstream commit 7ed5cf8e6d9bfb6a78d0471317edff14f0f2b4dd ] - -Call dev_pm_qos_hide_latency_tolerance() in the error unwind patch to -avoid following kmemleak:- - -blktests (master) # kmemleak-clear; ./check nvme/044; -blktests (master) # kmemleak-scan ; kmemleak-show -nvme/044 (Test bi-directional authentication) [passed] - runtime 2.111s ... 2.124s -unreferenced object 0xffff888110c46240 (size 96): - comm "nvme", pid 33461, jiffies 4345365353 (age 75.586s) - hex dump (first 32 bytes): - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ - backtrace: - [<0000000069ac2cec>] kmalloc_trace+0x25/0x90 - [<000000006acc66d5>] dev_pm_qos_update_user_latency_tolerance+0x6f/0x100 - [<00000000cc376ea7>] nvme_init_ctrl+0x38e/0x410 [nvme_core] - [<000000007df61b4b>] 0xffffffffc05e88b3 - [<00000000d152b985>] 0xffffffffc05744cb - [<00000000f04a4041>] vfs_write+0xc5/0x3c0 - [<00000000f9491baf>] ksys_write+0x5f/0xe0 - [<000000001c46513d>] do_syscall_64+0x3b/0x90 - [<00000000ecf348fe>] entry_SYSCALL_64_after_hwframe+0x72/0xdc - -Link: https://lore.kernel.org/linux-nvme/CAHj4cs-nDaKzMx2txO4dbE+Mz9ePwLtU0e3egz+StmzOUgWUrA@mail.gmail.com/ -Fixes: f50fff73d620 ("nvme: implement In-Band authentication") -Signed-off-by: Chaitanya Kulkarni -Tested-by: Yi Zhang -Reviewed-by: Christoph Hellwig -Reviewed-by: Sagi Grimberg -Signed-off-by: Keith Busch -Signed-off-by: Sasha Levin ---- - drivers/nvme/host/core.c | 1 + - 1 file changed, 1 insertion(+) - -diff --git a/drivers/nvme/host/core.c b/drivers/nvme/host/core.c -index 43bb5071b222c..3395e27438393 100644 ---- a/drivers/nvme/host/core.c -+++ b/drivers/nvme/host/core.c -@@ -5250,6 +5250,7 @@ int nvme_init_ctrl(struct nvme_ctrl *ctrl, struct device *dev, - return 0; - out_free_cdev: - nvme_fault_inject_fini(&ctrl->fault_inject); -+ dev_pm_qos_hide_latency_tolerance(ctrl->device); - cdev_device_del(&ctrl->cdev, ctrl->device); - out_free_name: - nvme_put_ctrl(ctrl); --- -2.39.2 - diff --git a/queue-6.4/nvme-core-fix-memory-leak-in-dhchap_ctrl_secret.patch b/queue-6.4/nvme-core-fix-memory-leak-in-dhchap_ctrl_secret.patch deleted file mode 100644 index 913f05cae7b..00000000000 --- a/queue-6.4/nvme-core-fix-memory-leak-in-dhchap_ctrl_secret.patch +++ /dev/null @@ -1,51 +0,0 @@ -From 6486744b99f8f53746346556b73e855d9fd2b469 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Fri, 28 Apr 2023 00:31:13 -0700 -Subject: nvme-core: fix memory leak in dhchap_ctrl_secret - -From: Chaitanya Kulkarni - -[ Upstream commit 99c2dcc8ffc24e210a3aa05c204d92f3ef460b05 ] - -Free dhchap_secret in nvme_ctrl_dhchap_ctrl_secret_store() before we -return when nvme_auth_generate_key() returns error. - -Fixes: f50fff73d620 ("nvme: implement In-Band authentication") -Signed-off-by: Chaitanya Kulkarni -Reviewed-by: Christoph Hellwig -Reviewed-by: Sagi Grimberg -Signed-off-by: Keith Busch -Signed-off-by: Sasha Levin ---- - drivers/nvme/host/core.c | 7 +++++-- - 1 file changed, 5 insertions(+), 2 deletions(-) - -diff --git a/drivers/nvme/host/core.c b/drivers/nvme/host/core.c -index c2096f0d50537..a275e7e2969e9 100644 ---- a/drivers/nvme/host/core.c -+++ b/drivers/nvme/host/core.c -@@ -3929,8 +3929,10 @@ static ssize_t nvme_ctrl_dhchap_ctrl_secret_store(struct device *dev, - int ret; - - ret = nvme_auth_generate_key(dhchap_secret, &key); -- if (ret) -+ if (ret) { -+ kfree(dhchap_secret); - return ret; -+ } - kfree(opts->dhchap_ctrl_secret); - opts->dhchap_ctrl_secret = dhchap_secret; - ctrl_key = ctrl->ctrl_key; -@@ -3938,7 +3940,8 @@ static ssize_t nvme_ctrl_dhchap_ctrl_secret_store(struct device *dev, - ctrl->ctrl_key = key; - mutex_unlock(&ctrl->dhchap_auth_mutex); - nvme_auth_free_key(ctrl_key); -- } -+ } else -+ kfree(dhchap_secret); - /* Start re-authentication */ - dev_info(ctrl->device, "re-authenticating controller\n"); - queue_work(nvme_wq, &ctrl->dhchap_auth_work); --- -2.39.2 - diff --git a/queue-6.4/nvme-core-fix-memory-leak-in-dhchap_secret_store.patch b/queue-6.4/nvme-core-fix-memory-leak-in-dhchap_secret_store.patch deleted file mode 100644 index 74c911e13c3..00000000000 --- a/queue-6.4/nvme-core-fix-memory-leak-in-dhchap_secret_store.patch +++ /dev/null @@ -1,79 +0,0 @@ -From 896136bce2d9b1561fa1ab3372acf579775f9dd4 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Fri, 28 Apr 2023 00:31:12 -0700 -Subject: nvme-core: fix memory leak in dhchap_secret_store - -From: Chaitanya Kulkarni - -[ Upstream commit a836ca33c5b07d34dd5347af9f64d25651d12674 ] - -Free dhchap_secret in nvme_ctrl_dhchap_secret_store() before we return -fix following kmemleack:- - -unreferenced object 0xffff8886376ea800 (size 64): - comm "check", pid 22048, jiffies 4344316705 (age 92.199s) - hex dump (first 32 bytes): - 44 48 48 43 2d 31 3a 30 30 3a 6e 78 72 35 4b 67 DHHC-1:00:nxr5Kg - 75 58 34 75 6f 41 78 73 4a 61 34 63 2f 68 75 4c uX4uoAxsJa4c/huL - backtrace: - [<0000000030ce5d4b>] __kmalloc+0x4b/0x130 - [<000000009be1cdc1>] nvme_ctrl_dhchap_secret_store+0x8f/0x160 [nvme_core] - [<00000000ac06c96a>] kernfs_fop_write_iter+0x12b/0x1c0 - [<00000000437e7ced>] vfs_write+0x2ba/0x3c0 - [<00000000f9491baf>] ksys_write+0x5f/0xe0 - [<000000001c46513d>] do_syscall_64+0x3b/0x90 - [<00000000ecf348fe>] entry_SYSCALL_64_after_hwframe+0x72/0xdc -unreferenced object 0xffff8886376eaf00 (size 64): - comm "check", pid 22048, jiffies 4344316736 (age 92.168s) - hex dump (first 32 bytes): - 44 48 48 43 2d 31 3a 30 30 3a 6e 78 72 35 4b 67 DHHC-1:00:nxr5Kg - 75 58 34 75 6f 41 78 73 4a 61 34 63 2f 68 75 4c uX4uoAxsJa4c/huL - backtrace: - [<0000000030ce5d4b>] __kmalloc+0x4b/0x130 - [<000000009be1cdc1>] nvme_ctrl_dhchap_secret_store+0x8f/0x160 [nvme_core] - [<00000000ac06c96a>] kernfs_fop_write_iter+0x12b/0x1c0 - [<00000000437e7ced>] vfs_write+0x2ba/0x3c0 - [<00000000f9491baf>] ksys_write+0x5f/0xe0 - [<000000001c46513d>] do_syscall_64+0x3b/0x90 - [<00000000ecf348fe>] entry_SYSCALL_64_after_hwframe+0x72/0xdc - -Fixes: f50fff73d620 ("nvme: implement In-Band authentication") -Signed-off-by: Chaitanya Kulkarni -Tested-by: Yi Zhang -Reviewed-by: Christoph Hellwig -Reviewed-by: Sagi Grimberg -Signed-off-by: Keith Busch -Signed-off-by: Sasha Levin ---- - drivers/nvme/host/core.c | 7 +++++-- - 1 file changed, 5 insertions(+), 2 deletions(-) - -diff --git a/drivers/nvme/host/core.c b/drivers/nvme/host/core.c -index 3ec38e2b91732..c2096f0d50537 100644 ---- a/drivers/nvme/host/core.c -+++ b/drivers/nvme/host/core.c -@@ -3872,8 +3872,10 @@ static ssize_t nvme_ctrl_dhchap_secret_store(struct device *dev, - int ret; - - ret = nvme_auth_generate_key(dhchap_secret, &key); -- if (ret) -+ if (ret) { -+ kfree(dhchap_secret); - return ret; -+ } - kfree(opts->dhchap_secret); - opts->dhchap_secret = dhchap_secret; - host_key = ctrl->host_key; -@@ -3881,7 +3883,8 @@ static ssize_t nvme_ctrl_dhchap_secret_store(struct device *dev, - ctrl->host_key = key; - mutex_unlock(&ctrl->dhchap_auth_mutex); - nvme_auth_free_key(host_key); -- } -+ } else -+ kfree(dhchap_secret); - /* Start re-authentication */ - dev_info(ctrl->device, "re-authenticating controller\n"); - queue_work(nvme_wq, &ctrl->dhchap_auth_work); --- -2.39.2 - diff --git a/queue-6.4/ocfs2-fix-use-of-slab-data-with-sendpage.patch b/queue-6.4/ocfs2-fix-use-of-slab-data-with-sendpage.patch deleted file mode 100644 index dc706d56d56..00000000000 --- a/queue-6.4/ocfs2-fix-use-of-slab-data-with-sendpage.patch +++ /dev/null @@ -1,89 +0,0 @@ -From 69074108621c294f220b9c1e5ea026045f5567ed Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Fri, 23 Jun 2023 23:55:10 +0100 -Subject: ocfs2: Fix use of slab data with sendpage - -From: David Howells - -[ Upstream commit 86d7bd6e66e9925f0f04a7bcf3c92c05fdfefb5a ] - -ocfs2 uses kzalloc() to allocate buffers for o2net_hand, o2net_keep_req and -o2net_keep_resp and then passes these to sendpage. This isn't really -allowed as the lifetime of slab objects is not controlled by page ref - -though in this case it will probably work. sendmsg() with MSG_SPLICE_PAGES -will, however, print a warning and give an error. - -Fix it to use folio_alloc() instead to allocate a buffer for the handshake -message, keepalive request and reply messages. - -Fixes: 98211489d414 ("[PATCH] OCFS2: The Second Oracle Cluster Filesystem") -Signed-off-by: David Howells -cc: Mark Fasheh -cc: Kurt Hackel -cc: Joel Becker -cc: Joseph Qi -cc: ocfs2-devel@oss.oracle.com -Link: https://lore.kernel.org/r/20230623225513.2732256-14-dhowells@redhat.com -Signed-off-by: Jakub Kicinski -Signed-off-by: Sasha Levin ---- - fs/ocfs2/cluster/tcp.c | 23 ++++++++++++----------- - 1 file changed, 12 insertions(+), 11 deletions(-) - -diff --git a/fs/ocfs2/cluster/tcp.c b/fs/ocfs2/cluster/tcp.c -index aecbd712a00cf..929a1133bc180 100644 ---- a/fs/ocfs2/cluster/tcp.c -+++ b/fs/ocfs2/cluster/tcp.c -@@ -2087,18 +2087,24 @@ void o2net_stop_listening(struct o2nm_node *node) - - int o2net_init(void) - { -+ struct folio *folio; -+ void *p; - unsigned long i; - - o2quo_init(); -- - o2net_debugfs_init(); - -- o2net_hand = kzalloc(sizeof(struct o2net_handshake), GFP_KERNEL); -- o2net_keep_req = kzalloc(sizeof(struct o2net_msg), GFP_KERNEL); -- o2net_keep_resp = kzalloc(sizeof(struct o2net_msg), GFP_KERNEL); -- if (!o2net_hand || !o2net_keep_req || !o2net_keep_resp) -+ folio = folio_alloc(GFP_KERNEL | __GFP_ZERO, 0); -+ if (!folio) - goto out; - -+ p = folio_address(folio); -+ o2net_hand = p; -+ p += sizeof(struct o2net_handshake); -+ o2net_keep_req = p; -+ p += sizeof(struct o2net_msg); -+ o2net_keep_resp = p; -+ - o2net_hand->protocol_version = cpu_to_be64(O2NET_PROTOCOL_VERSION); - o2net_hand->connector_id = cpu_to_be64(1); - -@@ -2124,9 +2130,6 @@ int o2net_init(void) - return 0; - - out: -- kfree(o2net_hand); -- kfree(o2net_keep_req); -- kfree(o2net_keep_resp); - o2net_debugfs_exit(); - o2quo_exit(); - return -ENOMEM; -@@ -2135,8 +2138,6 @@ int o2net_init(void) - void o2net_exit(void) - { - o2quo_exit(); -- kfree(o2net_hand); -- kfree(o2net_keep_req); -- kfree(o2net_keep_resp); - o2net_debugfs_exit(); -+ folio_put(virt_to_folio(o2net_hand)); - } --- -2.39.2 - diff --git a/queue-6.4/ovl-update-of-dentry-revalidate-flags-after-copy-up.patch b/queue-6.4/ovl-update-of-dentry-revalidate-flags-after-copy-up.patch deleted file mode 100644 index 10f7483afd2..00000000000 --- a/queue-6.4/ovl-update-of-dentry-revalidate-flags-after-copy-up.patch +++ /dev/null @@ -1,163 +0,0 @@ -From 71bd66ef9fd994ee49c7baa5084b4c848da71abd Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Mon, 3 Apr 2023 11:29:59 +0300 -Subject: ovl: update of dentry revalidate flags after copy up - -From: Amir Goldstein - -[ Upstream commit b07d5cc93e1b28df47a72c519d09d0a836043613 ] - -After copy up, we may need to update d_flags if upper dentry is on a -remote fs and lower dentries are not. - -Add helpers to allow incremental update of the revalidate flags. - -Fixes: bccece1ead36 ("ovl: allow remote upper") -Reviewed-by: Gao Xiang -Signed-off-by: Amir Goldstein -Signed-off-by: Miklos Szeredi -Signed-off-by: Sasha Levin ---- - fs/overlayfs/copy_up.c | 2 ++ - fs/overlayfs/dir.c | 3 +-- - fs/overlayfs/export.c | 3 +-- - fs/overlayfs/namei.c | 3 +-- - fs/overlayfs/overlayfs.h | 6 ++++-- - fs/overlayfs/super.c | 2 +- - fs/overlayfs/util.c | 24 ++++++++++++++++++++---- - 7 files changed, 30 insertions(+), 13 deletions(-) - -diff --git a/fs/overlayfs/copy_up.c b/fs/overlayfs/copy_up.c -index f658cc8ea4920..95dce240ba17a 100644 ---- a/fs/overlayfs/copy_up.c -+++ b/fs/overlayfs/copy_up.c -@@ -575,6 +575,7 @@ static int ovl_link_up(struct ovl_copy_up_ctx *c) - /* Restore timestamps on parent (best effort) */ - ovl_set_timestamps(ofs, upperdir, &c->pstat); - ovl_dentry_set_upper_alias(c->dentry); -+ ovl_dentry_update_reval(c->dentry, upper); - } - } - inode_unlock(udir); -@@ -894,6 +895,7 @@ static int ovl_do_copy_up(struct ovl_copy_up_ctx *c) - inode_unlock(udir); - - ovl_dentry_set_upper_alias(c->dentry); -+ ovl_dentry_update_reval(c->dentry, ovl_dentry_upper(c->dentry)); - } - - out: -diff --git a/fs/overlayfs/dir.c b/fs/overlayfs/dir.c -index fc25fb95d5fc0..9be52d8013c83 100644 ---- a/fs/overlayfs/dir.c -+++ b/fs/overlayfs/dir.c -@@ -269,8 +269,7 @@ static int ovl_instantiate(struct dentry *dentry, struct inode *inode, - - ovl_dir_modified(dentry->d_parent, false); - ovl_dentry_set_upper_alias(dentry); -- ovl_dentry_update_reval(dentry, newdentry, -- DCACHE_OP_REVALIDATE | DCACHE_OP_WEAK_REVALIDATE); -+ ovl_dentry_init_reval(dentry, newdentry); - - if (!hardlink) { - /* -diff --git a/fs/overlayfs/export.c b/fs/overlayfs/export.c -index defd4e231ad2c..5c36fb3a7bab1 100644 ---- a/fs/overlayfs/export.c -+++ b/fs/overlayfs/export.c -@@ -326,8 +326,7 @@ static struct dentry *ovl_obtain_alias(struct super_block *sb, - if (upper_alias) - ovl_dentry_set_upper_alias(dentry); - -- ovl_dentry_update_reval(dentry, upper, -- DCACHE_OP_REVALIDATE | DCACHE_OP_WEAK_REVALIDATE); -+ ovl_dentry_init_reval(dentry, upper); - - return d_instantiate_anon(dentry, inode); - -diff --git a/fs/overlayfs/namei.c b/fs/overlayfs/namei.c -index cfb3420b7df0e..100a492d2b2a6 100644 ---- a/fs/overlayfs/namei.c -+++ b/fs/overlayfs/namei.c -@@ -1122,8 +1122,7 @@ struct dentry *ovl_lookup(struct inode *dir, struct dentry *dentry, - ovl_set_flag(OVL_UPPERDATA, inode); - } - -- ovl_dentry_update_reval(dentry, upperdentry, -- DCACHE_OP_REVALIDATE | DCACHE_OP_WEAK_REVALIDATE); -+ ovl_dentry_init_reval(dentry, upperdentry); - - revert_creds(old_cred); - if (origin_path) { -diff --git a/fs/overlayfs/overlayfs.h b/fs/overlayfs/overlayfs.h -index 4d0b278f5630e..e100c55bb924a 100644 ---- a/fs/overlayfs/overlayfs.h -+++ b/fs/overlayfs/overlayfs.h -@@ -375,8 +375,10 @@ bool ovl_index_all(struct super_block *sb); - bool ovl_verify_lower(struct super_block *sb); - struct ovl_entry *ovl_alloc_entry(unsigned int numlower); - bool ovl_dentry_remote(struct dentry *dentry); --void ovl_dentry_update_reval(struct dentry *dentry, struct dentry *upperdentry, -- unsigned int mask); -+void ovl_dentry_update_reval(struct dentry *dentry, struct dentry *realdentry); -+void ovl_dentry_init_reval(struct dentry *dentry, struct dentry *upperdentry); -+void ovl_dentry_init_flags(struct dentry *dentry, struct dentry *upperdentry, -+ unsigned int mask); - bool ovl_dentry_weird(struct dentry *dentry); - enum ovl_path_type ovl_path_type(struct dentry *dentry); - void ovl_path_upper(struct dentry *dentry, struct path *path); -diff --git a/fs/overlayfs/super.c b/fs/overlayfs/super.c -index f97ad8b40dbbd..ae1058fbfb5b2 100644 ---- a/fs/overlayfs/super.c -+++ b/fs/overlayfs/super.c -@@ -1877,7 +1877,7 @@ static struct dentry *ovl_get_root(struct super_block *sb, - ovl_dentry_set_flag(OVL_E_CONNECTED, root); - ovl_set_upperdata(d_inode(root)); - ovl_inode_init(d_inode(root), &oip, ino, fsid); -- ovl_dentry_update_reval(root, upperdentry, DCACHE_OP_WEAK_REVALIDATE); -+ ovl_dentry_init_flags(root, upperdentry, DCACHE_OP_WEAK_REVALIDATE); - - return root; - } -diff --git a/fs/overlayfs/util.c b/fs/overlayfs/util.c -index 923d66d131c16..6a0652bd51f24 100644 ---- a/fs/overlayfs/util.c -+++ b/fs/overlayfs/util.c -@@ -94,14 +94,30 @@ struct ovl_entry *ovl_alloc_entry(unsigned int numlower) - return oe; - } - -+#define OVL_D_REVALIDATE (DCACHE_OP_REVALIDATE | DCACHE_OP_WEAK_REVALIDATE) -+ - bool ovl_dentry_remote(struct dentry *dentry) - { -- return dentry->d_flags & -- (DCACHE_OP_REVALIDATE | DCACHE_OP_WEAK_REVALIDATE); -+ return dentry->d_flags & OVL_D_REVALIDATE; -+} -+ -+void ovl_dentry_update_reval(struct dentry *dentry, struct dentry *realdentry) -+{ -+ if (!ovl_dentry_remote(realdentry)) -+ return; -+ -+ spin_lock(&dentry->d_lock); -+ dentry->d_flags |= realdentry->d_flags & OVL_D_REVALIDATE; -+ spin_unlock(&dentry->d_lock); -+} -+ -+void ovl_dentry_init_reval(struct dentry *dentry, struct dentry *upperdentry) -+{ -+ return ovl_dentry_init_flags(dentry, upperdentry, OVL_D_REVALIDATE); - } - --void ovl_dentry_update_reval(struct dentry *dentry, struct dentry *upperdentry, -- unsigned int mask) -+void ovl_dentry_init_flags(struct dentry *dentry, struct dentry *upperdentry, -+ unsigned int mask) - { - struct ovl_entry *oe = OVL_E(dentry); - unsigned int i, flags = 0; --- -2.39.2 - diff --git a/queue-6.4/pci-add-pci_clear_master-stub-for-non-config_pci.patch b/queue-6.4/pci-add-pci_clear_master-stub-for-non-config_pci.patch deleted file mode 100644 index 4042fbf719a..00000000000 --- a/queue-6.4/pci-add-pci_clear_master-stub-for-non-config_pci.patch +++ /dev/null @@ -1,39 +0,0 @@ -From 5e6c7c9511defb165a585c67029249173e5cf881 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Wed, 31 May 2023 18:27:44 +0800 -Subject: PCI: Add pci_clear_master() stub for non-CONFIG_PCI - -From: Sui Jingfeng - -[ Upstream commit 2aa5ac633259843f656eb6ecff4cf01e8e810c5e ] - -Add a pci_clear_master() stub when CONFIG_PCI is not set so drivers that -support both PCI and platform devices don't need #ifdefs or extra Kconfig -symbols for the PCI parts. - -[bhelgaas: commit log] -Fixes: 6a479079c072 ("PCI: Add pci_clear_master() as opposite of pci_set_master()") -Link: https://lore.kernel.org/r/20230531102744.2354313-1-suijingfeng@loongson.cn -Signed-off-by: Sui Jingfeng -Signed-off-by: Bjorn Helgaas -Reviewed-by: Geert Uytterhoeven -Signed-off-by: Sasha Levin ---- - include/linux/pci.h | 1 + - 1 file changed, 1 insertion(+) - -diff --git a/include/linux/pci.h b/include/linux/pci.h -index 60b8772b5bd45..c69a2cc1f4123 100644 ---- a/include/linux/pci.h -+++ b/include/linux/pci.h -@@ -1903,6 +1903,7 @@ static inline int pci_dev_present(const struct pci_device_id *ids) - #define pci_dev_put(dev) do { } while (0) - - static inline void pci_set_master(struct pci_dev *dev) { } -+static inline void pci_clear_master(struct pci_dev *dev) { } - static inline int pci_enable_device(struct pci_dev *dev) { return -EIO; } - static inline void pci_disable_device(struct pci_dev *dev) { } - static inline int pcim_enable_device(struct pci_dev *pdev) { return -EIO; } --- -2.39.2 - diff --git a/queue-6.4/pci-aspm-disable-aspm-on-mfd-function-removal-to-avo.patch b/queue-6.4/pci-aspm-disable-aspm-on-mfd-function-removal-to-avo.patch deleted file mode 100644 index 85a29f6621e..00000000000 --- a/queue-6.4/pci-aspm-disable-aspm-on-mfd-function-removal-to-avo.patch +++ /dev/null @@ -1,94 +0,0 @@ -From 5dd02418f30729d55033c53f20cd451b45fc1208 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Sun, 7 May 2023 11:40:57 +0800 -Subject: PCI/ASPM: Disable ASPM on MFD function removal to avoid - use-after-free - -From: Ding Hui - -[ Upstream commit 456d8aa37d0f56fc9e985e812496e861dcd6f2f2 ] - -Struct pcie_link_state->downstream is a pointer to the pci_dev of function -0. Previously we retained that pointer when removing function 0, and -subsequent ASPM policy changes dereferenced it, resulting in a -use-after-free warning from KASAN, e.g.: - - # echo 1 > /sys/bus/pci/devices/0000:03:00.0/remove - # echo powersave > /sys/module/pcie_aspm/parameters/policy - - BUG: KASAN: slab-use-after-free in pcie_config_aspm_link+0x42d/0x500 - Call Trace: - kasan_report+0xae/0xe0 - pcie_config_aspm_link+0x42d/0x500 - pcie_aspm_set_policy+0x8e/0x1a0 - param_attr_store+0x162/0x2c0 - module_attr_store+0x3e/0x80 - -PCIe spec r6.0, sec 7.5.3.7, recommends that software program the same ASPM -Control value in all functions of multi-function devices. - -Disable ASPM and free the pcie_link_state when any child function is -removed so we can discard the dangling pcie_link_state->downstream pointer -and maintain the same ASPM Control configuration for all functions. - -[bhelgaas: commit log and comment] -Debugged-by: Zongquan Qin -Suggested-by: Bjorn Helgaas -Fixes: b5a0a9b59c81 ("PCI/ASPM: Read and set up L1 substate capabilities") -Link: https://lore.kernel.org/r/20230507034057.20970-1-dinghui@sangfor.com.cn -Signed-off-by: Ding Hui -Signed-off-by: Bjorn Helgaas -Signed-off-by: Sasha Levin ---- - drivers/pci/pcie/aspm.c | 21 ++++++++++++--------- - 1 file changed, 12 insertions(+), 9 deletions(-) - -diff --git a/drivers/pci/pcie/aspm.c b/drivers/pci/pcie/aspm.c -index 66d7514ca111b..db32335039d61 100644 ---- a/drivers/pci/pcie/aspm.c -+++ b/drivers/pci/pcie/aspm.c -@@ -1010,21 +1010,24 @@ void pcie_aspm_exit_link_state(struct pci_dev *pdev) - - down_read(&pci_bus_sem); - mutex_lock(&aspm_lock); -- /* -- * All PCIe functions are in one slot, remove one function will remove -- * the whole slot, so just wait until we are the last function left. -- */ -- if (!list_empty(&parent->subordinate->devices)) -- goto out; - - link = parent->link_state; - root = link->root; - parent_link = link->parent; - -- /* All functions are removed, so just disable ASPM for the link */ -+ /* -+ * link->downstream is a pointer to the pci_dev of function 0. If -+ * we remove that function, the pci_dev is about to be deallocated, -+ * so we can't use link->downstream again. Free the link state to -+ * avoid this. -+ * -+ * If we're removing a non-0 function, it's possible we could -+ * retain the link state, but PCIe r6.0, sec 7.5.3.7, recommends -+ * programming the same ASPM Control value for all functions of -+ * multi-function devices, so disable ASPM for all of them. -+ */ - pcie_config_aspm_link(link, 0); - list_del(&link->sibling); -- /* Clock PM is for endpoint device */ - free_link_state(link); - - /* Recheck latencies and configure upstream links */ -@@ -1032,7 +1035,7 @@ void pcie_aspm_exit_link_state(struct pci_dev *pdev) - pcie_update_aspm_capable(root); - pcie_config_aspm_path(parent_link); - } --out: -+ - mutex_unlock(&aspm_lock); - up_read(&pci_bus_sem); - } --- -2.39.2 - diff --git a/queue-6.4/pci-cadence-fix-gen2-link-retraining-process.patch b/queue-6.4/pci-cadence-fix-gen2-link-retraining-process.patch deleted file mode 100644 index 28b34810064..00000000000 --- a/queue-6.4/pci-cadence-fix-gen2-link-retraining-process.patch +++ /dev/null @@ -1,88 +0,0 @@ -From a648405e565e1e7439eb47f3694f9632a8738855 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Wed, 15 Mar 2023 12:38:00 +0530 -Subject: PCI: cadence: Fix Gen2 Link Retraining process - -From: Siddharth Vadapalli - -[ Upstream commit 0e12f830236928b6fadf40d917a7527f0a048d2f ] - -The Link Retraining process is initiated to account for the Gen2 defect in -the Cadence PCIe controller in J721E SoC. The errata corresponding to this -is i2085, documented at: -https://www.ti.com/lit/er/sprz455c/sprz455c.pdf - -The existing workaround implemented for the errata waits for the Data Link -initialization to complete and assumes that the link retraining process -at the Physical Layer has completed. However, it is possible that the -Physical Layer training might be ongoing as indicated by the -PCI_EXP_LNKSTA_LT bit in the PCI_EXP_LNKSTA register. - -Fix the existing workaround, to ensure that the Physical Layer training -has also completed, in addition to the Data Link initialization. - -Link: https://lore.kernel.org/r/20230315070800.1615527-1-s-vadapalli@ti.com -Fixes: 4740b969aaf5 ("PCI: cadence: Retrain Link to work around Gen2 training defect") -Signed-off-by: Siddharth Vadapalli -Signed-off-by: Lorenzo Pieralisi -Reviewed-by: Vignesh Raghavendra -Signed-off-by: Sasha Levin ---- - .../controller/cadence/pcie-cadence-host.c | 27 +++++++++++++++++++ - 1 file changed, 27 insertions(+) - -diff --git a/drivers/pci/controller/cadence/pcie-cadence-host.c b/drivers/pci/controller/cadence/pcie-cadence-host.c -index 940c7dd701d68..5b14f7ee3c798 100644 ---- a/drivers/pci/controller/cadence/pcie-cadence-host.c -+++ b/drivers/pci/controller/cadence/pcie-cadence-host.c -@@ -12,6 +12,8 @@ - - #include "pcie-cadence.h" - -+#define LINK_RETRAIN_TIMEOUT HZ -+ - static u64 bar_max_size[] = { - [RP_BAR0] = _ULL(128 * SZ_2G), - [RP_BAR1] = SZ_2G, -@@ -77,6 +79,27 @@ static struct pci_ops cdns_pcie_host_ops = { - .write = pci_generic_config_write, - }; - -+static int cdns_pcie_host_training_complete(struct cdns_pcie *pcie) -+{ -+ u32 pcie_cap_off = CDNS_PCIE_RP_CAP_OFFSET; -+ unsigned long end_jiffies; -+ u16 lnk_stat; -+ -+ /* Wait for link training to complete. Exit after timeout. */ -+ end_jiffies = jiffies + LINK_RETRAIN_TIMEOUT; -+ do { -+ lnk_stat = cdns_pcie_rp_readw(pcie, pcie_cap_off + PCI_EXP_LNKSTA); -+ if (!(lnk_stat & PCI_EXP_LNKSTA_LT)) -+ break; -+ usleep_range(0, 1000); -+ } while (time_before(jiffies, end_jiffies)); -+ -+ if (!(lnk_stat & PCI_EXP_LNKSTA_LT)) -+ return 0; -+ -+ return -ETIMEDOUT; -+} -+ - static int cdns_pcie_host_wait_for_link(struct cdns_pcie *pcie) - { - struct device *dev = pcie->dev; -@@ -118,6 +141,10 @@ static int cdns_pcie_retrain(struct cdns_pcie *pcie) - cdns_pcie_rp_writew(pcie, pcie_cap_off + PCI_EXP_LNKCTL, - lnk_ctl); - -+ ret = cdns_pcie_host_training_complete(pcie); -+ if (ret) -+ return ret; -+ - ret = cdns_pcie_host_wait_for_link(pcie); - } - return ret; --- -2.39.2 - diff --git a/queue-6.4/pci-endpoint-fix-a-kconfig-prompt-of-vntb-driver.patch b/queue-6.4/pci-endpoint-fix-a-kconfig-prompt-of-vntb-driver.patch deleted file mode 100644 index 0e4ab1cbf5e..00000000000 --- a/queue-6.4/pci-endpoint-fix-a-kconfig-prompt-of-vntb-driver.patch +++ /dev/null @@ -1,39 +0,0 @@ -From 66e8dc66550847285ff078928678399442c925a5 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Thu, 2 Feb 2023 19:38:32 +0900 -Subject: PCI: endpoint: Fix a Kconfig prompt of vNTB driver - -From: Shunsuke Mie - -[ Upstream commit 37587673cda963ec950e4983db5023802f9b5ff2 ] - -vNTB driver and NTB driver have same Kconfig prompt. Changed to make it -distinguishable. - -Link: https://lore.kernel.org/r/20230202103832.2038286-1-mie@igel.co.jp -Fixes: e35f56bb0330 ("PCI: endpoint: Support NTB transfer between RC and EP") -Signed-off-by: Shunsuke Mie -Signed-off-by: Lorenzo Pieralisi -Signed-off-by: Bjorn Helgaas -Reviewed-by: Manivannan Sadhasivam -Signed-off-by: Sasha Levin ---- - drivers/pci/endpoint/functions/Kconfig | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/drivers/pci/endpoint/functions/Kconfig b/drivers/pci/endpoint/functions/Kconfig -index 9fd5608868718..8efb6a869e7ce 100644 ---- a/drivers/pci/endpoint/functions/Kconfig -+++ b/drivers/pci/endpoint/functions/Kconfig -@@ -27,7 +27,7 @@ config PCI_EPF_NTB - If in doubt, say "N" to disable Endpoint NTB driver. - - config PCI_EPF_VNTB -- tristate "PCI Endpoint NTB driver" -+ tristate "PCI Endpoint Virtual NTB driver" - depends on PCI_ENDPOINT - depends on NTB - select CONFIGFS_FS --- -2.39.2 - diff --git a/queue-6.4/pci-endpoint-functions-pci-epf-test-fix-dma_chan-dir.patch b/queue-6.4/pci-endpoint-functions-pci-epf-test-fix-dma_chan-dir.patch deleted file mode 100644 index 0a296b0dbec..00000000000 --- a/queue-6.4/pci-endpoint-functions-pci-epf-test-fix-dma_chan-dir.patch +++ /dev/null @@ -1,46 +0,0 @@ -From 847a6fb2b9da4117d687f2ad0f59cd44aced7a84 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Wed, 12 Apr 2023 15:34:47 +0900 -Subject: PCI: endpoint: functions/pci-epf-test: Fix dma_chan direction - -From: Yoshihiro Shimoda - -[ Upstream commit 880d51c729a3fa944794feb19f605eefe55916fc ] - -In pci_epf_test_init_dma_chan() epf_test->dma_chan_rx is assigned from -dma_request_channel() with DMA_DEV_TO_MEM as filter.dma_mask. - -However, in pci_epf_test_data_transfer() if the dir is DMA_DEV_TO_MEM, -epf->dma_chan_rx should be used but instead we are using -epf_test->dma_chan_tx. - -Fix it. - -Link: https://lore.kernel.org/r/20230412063447.2841177-1-yoshihiro.shimoda.uh@renesas.com -Fixes: 8353813c88ef ("PCI: endpoint: Enable DMA tests for endpoints with DMA capabilities") -Tested-by: Kunihiko Hayashi -Signed-off-by: Yoshihiro Shimoda -Signed-off-by: Lorenzo Pieralisi -Signed-off-by: Bjorn Helgaas -Reviewed-by: Frank Li -Signed-off-by: Sasha Levin ---- - drivers/pci/endpoint/functions/pci-epf-test.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/drivers/pci/endpoint/functions/pci-epf-test.c b/drivers/pci/endpoint/functions/pci-epf-test.c -index 0f9d2ec822ac6..172e5ac0bd96c 100644 ---- a/drivers/pci/endpoint/functions/pci-epf-test.c -+++ b/drivers/pci/endpoint/functions/pci-epf-test.c -@@ -112,7 +112,7 @@ static int pci_epf_test_data_transfer(struct pci_epf_test *epf_test, - size_t len, dma_addr_t dma_remote, - enum dma_transfer_direction dir) - { -- struct dma_chan *chan = (dir == DMA_DEV_TO_MEM) ? -+ struct dma_chan *chan = (dir == DMA_MEM_TO_DEV) ? - epf_test->dma_chan_tx : epf_test->dma_chan_rx; - dma_addr_t dma_local = (dir == DMA_MEM_TO_DEV) ? dma_src : dma_dst; - enum dma_ctrl_flags flags = DMA_CTRL_ACK | DMA_PREP_INTERRUPT; --- -2.39.2 - diff --git a/queue-6.4/pci-ftpci100-release-the-clock-resources.patch b/queue-6.4/pci-ftpci100-release-the-clock-resources.patch deleted file mode 100644 index aa34c5540bd..00000000000 --- a/queue-6.4/pci-ftpci100-release-the-clock-resources.patch +++ /dev/null @@ -1,75 +0,0 @@ -From cdedd4ffc9606e4216796fa4f027c0702d80259a Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Mon, 8 May 2023 12:36:41 +0800 -Subject: PCI: ftpci100: Release the clock resources - -From: Junyan Ye - -[ Upstream commit c60738de85f40b0b9f5cb23c21f9246e5a47908c ] - -Smatch reported: -1. drivers/pci/controller/pci-ftpci100.c:526 faraday_pci_probe() warn: -'clk' from clk_prepare_enable() not released on lines: 442,451,462,478,512,517. -2. drivers/pci/controller/pci-ftpci100.c:526 faraday_pci_probe() warn: -'p->bus_clk' from clk_prepare_enable() not released on lines: 451,462,478,512,517. - -The clock resource is obtained by devm_clk_get(), and then -clk_prepare_enable() makes the clock resource ready for use. After that, -clk_disable_unprepare() should be called to release the clock resource -when it is no longer needed. However, while doing some error handling -in faraday_pci_probe(), clk_disable_unprepare() is not called to release -clk and p->bus_clk before returning. These return lines are exactly 442, -451, 462, 478, 512, 517. - -Fix this warning by replacing devm_clk_get() with devm_clk_get_enabled(), -which is equivalent to devm_clk_get() + clk_prepare_enable(). And with -devm_clk_get_enabled(), the clock will automatically be disabled, -unprepared and freed when the device is unbound from the bus. - -Link: https://lore.kernel.org/r/20230508043641.23807-1-yejunyan@hust.edu.cn -Fixes: b3c433efb8a3 ("PCI: faraday: Fix wrong pointer passed to PTR_ERR()") -Fixes: 2eeb02b28579 ("PCI: faraday: Add clock handling") -Fixes: 783a862563f7 ("PCI: faraday: Use pci_parse_request_of_pci_ranges()") -Fixes: d3c68e0a7e34 ("PCI: faraday: Add Faraday Technology FTPCI100 PCI Host Bridge driver") -Fixes: f1e8bd21e39e ("PCI: faraday: Convert IRQ masking to raw PCI config accessors") -Signed-off-by: Junyan Ye -Signed-off-by: Lorenzo Pieralisi -Reviewed-by: Dongliang Mu -Reviewed-by: Linus Walleij -Signed-off-by: Sasha Levin ---- - drivers/pci/controller/pci-ftpci100.c | 14 ++------------ - 1 file changed, 2 insertions(+), 12 deletions(-) - -diff --git a/drivers/pci/controller/pci-ftpci100.c b/drivers/pci/controller/pci-ftpci100.c -index ecd3009df586d..6e7981d2ed5e1 100644 ---- a/drivers/pci/controller/pci-ftpci100.c -+++ b/drivers/pci/controller/pci-ftpci100.c -@@ -429,22 +429,12 @@ static int faraday_pci_probe(struct platform_device *pdev) - p->dev = dev; - - /* Retrieve and enable optional clocks */ -- clk = devm_clk_get(dev, "PCLK"); -+ clk = devm_clk_get_enabled(dev, "PCLK"); - if (IS_ERR(clk)) - return PTR_ERR(clk); -- ret = clk_prepare_enable(clk); -- if (ret) { -- dev_err(dev, "could not prepare PCLK\n"); -- return ret; -- } -- p->bus_clk = devm_clk_get(dev, "PCICLK"); -+ p->bus_clk = devm_clk_get_enabled(dev, "PCICLK"); - if (IS_ERR(p->bus_clk)) - return PTR_ERR(p->bus_clk); -- ret = clk_prepare_enable(p->bus_clk); -- if (ret) { -- dev_err(dev, "could not prepare PCICLK\n"); -- return ret; -- } - - p->base = devm_platform_ioremap_resource(pdev, 0); - if (IS_ERR(p->base)) --- -2.39.2 - diff --git a/queue-6.4/pci-pciehp-cancel-bringup-sequence-if-card-is-not-pr.patch b/queue-6.4/pci-pciehp-cancel-bringup-sequence-if-card-is-not-pr.patch deleted file mode 100644 index eee0b323306..00000000000 --- a/queue-6.4/pci-pciehp-cancel-bringup-sequence-if-card-is-not-pr.patch +++ /dev/null @@ -1,74 +0,0 @@ -From bbaa56bfacc1beae1b9efd42a53786a4190b837e Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Fri, 12 May 2023 10:15:18 +0800 -Subject: PCI: pciehp: Cancel bringup sequence if card is not present - -From: Rongguang Wei - -[ Upstream commit e8afd0d9fccc27c8ad263db5cf5952cfcf72d6fe ] - -If a PCIe hotplug slot has an Attention Button, the normal hot-add flow is: - - - Slot is empty and slot power is off - - User inserts card in slot and presses Attention Button - - OS blinks Power Indicator for 5 seconds - - After 5 seconds, OS turns on Power Indicator, turns on slot power, and - enumerates the device - -Previously, if a user pressed the Attention Button on an *empty* slot, -pciehp logged the following messages and blinked the Power Indicator -until a second button press: - - [0.000] pciehp: Button press: will power on in 5 sec - [0.001] # Power Indicator starts blinking - [5.001] # 5 second timeout; slot is empty, so we should cancel the - request to power on and turn off Power Indicator - - [7.000] # Power Indicator still blinking - [8.000] # possible card insertion - [9.000] pciehp: Button press: canceling request to power on - -The first button press incorrectly left the slot in BLINKINGON_STATE, so -the second was interpreted as a "cancel power on" event regardless of -whether a card was present. - -If the slot is empty, turn off the Power Indicator and return from -BLINKINGON_STATE to OFF_STATE after 5 seconds, effectively canceling the -request to power on. Putting the slot in OFF_STATE also means the second -button press will correctly request a slot power on if the slot is -occupied. - -[bhelgaas: commit log] -Link: https://lore.kernel.org/r/20230512021518.336460-1-clementwei90@163.com -Fixes: d331710ea78f ("PCI: pciehp: Become resilient to missed events") -Suggested-by: Lukas Wunner -Signed-off-by: Rongguang Wei -Signed-off-by: Bjorn Helgaas -Reviewed-by: Lukas Wunner -Signed-off-by: Sasha Levin ---- - drivers/pci/hotplug/pciehp_ctrl.c | 8 ++++++++ - 1 file changed, 8 insertions(+) - -diff --git a/drivers/pci/hotplug/pciehp_ctrl.c b/drivers/pci/hotplug/pciehp_ctrl.c -index 529c348084401..32baba1b7f131 100644 ---- a/drivers/pci/hotplug/pciehp_ctrl.c -+++ b/drivers/pci/hotplug/pciehp_ctrl.c -@@ -256,6 +256,14 @@ void pciehp_handle_presence_or_link_change(struct controller *ctrl, u32 events) - present = pciehp_card_present(ctrl); - link_active = pciehp_check_link_active(ctrl); - if (present <= 0 && link_active <= 0) { -+ if (ctrl->state == BLINKINGON_STATE) { -+ ctrl->state = OFF_STATE; -+ cancel_delayed_work(&ctrl->button_work); -+ pciehp_set_indicators(ctrl, PCI_EXP_SLTCTL_PWR_IND_OFF, -+ INDICATOR_NOOP); -+ ctrl_info(ctrl, "Slot(%s): Card not present\n", -+ slot_name(ctrl)); -+ } - mutex_unlock(&ctrl->state_lock); - return; - } --- -2.39.2 - diff --git a/queue-6.4/pci-qcom-disable-write-access-to-read-only-registers.patch b/queue-6.4/pci-qcom-disable-write-access-to-read-only-registers.patch deleted file mode 100644 index 647b819ef12..00000000000 --- a/queue-6.4/pci-qcom-disable-write-access-to-read-only-registers.patch +++ /dev/null @@ -1,50 +0,0 @@ -From db5313ca165a774f102e224ee818b0a5e91349c8 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Mon, 19 Jun 2023 20:34:02 +0530 -Subject: PCI: qcom: Disable write access to read only registers for IP v2.9.0 - -From: Manivannan Sadhasivam - -[ Upstream commit 200b8f85f2021362adcc8efb575652a2aa44c099 ] - -In the post init sequence of v2.9.0, write access to read only registers -are not disabled after updating the registers. Fix it by disabling the -access after register update. - -While at it, let's also add a newline after existing dw_pcie_dbi_ro_wr_en() -guard function to align with rest of the driver. - -Link: https://lore.kernel.org/r/20230619150408.8468-4-manivannan.sadhasivam@linaro.org -Fixes: 0cf7c2efe8ac ("PCI: qcom: Add IPQ60xx support") -Signed-off-by: Manivannan Sadhasivam -Signed-off-by: Lorenzo Pieralisi -Reviewed-by: Dmitry Baryshkov -Signed-off-by: Sasha Levin ---- - drivers/pci/controller/dwc/pcie-qcom.c | 3 +++ - 1 file changed, 3 insertions(+) - -diff --git a/drivers/pci/controller/dwc/pcie-qcom.c b/drivers/pci/controller/dwc/pcie-qcom.c -index 8185db887c9db..2783e9c3ef1ba 100644 ---- a/drivers/pci/controller/dwc/pcie-qcom.c -+++ b/drivers/pci/controller/dwc/pcie-qcom.c -@@ -1134,6 +1134,7 @@ static int qcom_pcie_post_init_2_9_0(struct qcom_pcie *pcie) - writel(0, pcie->parf + PARF_Q2A_FLUSH); - - dw_pcie_dbi_ro_wr_en(pci); -+ - writel(PCIE_CAP_SLOT_VAL, pci->dbi_base + offset + PCI_EXP_SLTCAP); - - val = readl(pci->dbi_base + offset + PCI_EXP_LNKCAP); -@@ -1143,6 +1144,8 @@ static int qcom_pcie_post_init_2_9_0(struct qcom_pcie *pcie) - writel(PCI_EXP_DEVCTL2_COMP_TMOUT_DIS, pci->dbi_base + offset + - PCI_EXP_DEVCTL2); - -+ dw_pcie_dbi_ro_wr_dis(pci); -+ - for (i = 0; i < 256; i++) - writel(0, pcie->parf + PARF_BDF_TO_SID_TABLE_N + (4 * i)); - --- -2.39.2 - diff --git a/queue-6.4/pci-qcom-use-dwc-helpers-for-modifying-the-read-only.patch b/queue-6.4/pci-qcom-use-dwc-helpers-for-modifying-the-read-only.patch deleted file mode 100644 index e58f4a7b88c..00000000000 --- a/queue-6.4/pci-qcom-use-dwc-helpers-for-modifying-the-read-only.patch +++ /dev/null @@ -1,62 +0,0 @@ -From 458b20543bc4aa39c006d56602d6587368630a11 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Mon, 19 Jun 2023 20:34:01 +0530 -Subject: PCI: qcom: Use DWC helpers for modifying the read-only DBI registers - -From: Manivannan Sadhasivam - -[ Upstream commit 60f0072d7fb7996b9a524ef0d152e21205473192 ] - -DWC core already exposes dw_pcie_dbi_ro_wr_{en/dis} helper APIs for -enabling and disabling the write access to read only DBI registers. So -let's use them instead of doing it manually. - -Also, the existing code doesn't disable the write access when it's done. -This is also fixed now. - -Link: https://lore.kernel.org/r/20230619150408.8468-3-manivannan.sadhasivam@linaro.org -Fixes: 5d76117f070d ("PCI: qcom: Add support for IPQ8074 PCIe controller") -Signed-off-by: Manivannan Sadhasivam -Signed-off-by: Lorenzo Pieralisi -Reviewed-by: Dmitry Baryshkov -Signed-off-by: Sasha Levin ---- - drivers/pci/controller/dwc/pcie-qcom.c | 8 +++----- - 1 file changed, 3 insertions(+), 5 deletions(-) - -diff --git a/drivers/pci/controller/dwc/pcie-qcom.c b/drivers/pci/controller/dwc/pcie-qcom.c -index 4ab30892f6efb..8185db887c9db 100644 ---- a/drivers/pci/controller/dwc/pcie-qcom.c -+++ b/drivers/pci/controller/dwc/pcie-qcom.c -@@ -61,7 +61,6 @@ - /* DBI registers */ - #define AXI_MSTR_RESP_COMP_CTRL0 0x818 - #define AXI_MSTR_RESP_COMP_CTRL1 0x81c --#define MISC_CONTROL_1_REG 0x8bc - - /* MHI registers */ - #define PARF_DEBUG_CNT_PM_LINKST_IN_L2 0xc04 -@@ -132,9 +131,6 @@ - /* AXI_MSTR_RESP_COMP_CTRL1 register fields */ - #define CFG_BRIDGE_SB_INIT BIT(0) - --/* MISC_CONTROL_1_REG register fields */ --#define DBI_RO_WR_EN 1 -- - /* PCI_EXP_SLTCAP register fields */ - #define PCIE_CAP_SLOT_POWER_LIMIT_VAL FIELD_PREP(PCI_EXP_SLTCAP_SPLV, 250) - #define PCIE_CAP_SLOT_POWER_LIMIT_SCALE FIELD_PREP(PCI_EXP_SLTCAP_SPLS, 1) -@@ -826,7 +822,9 @@ static int qcom_pcie_post_init_2_3_3(struct qcom_pcie *pcie) - writel(0, pcie->parf + PARF_Q2A_FLUSH); - - writel(PCI_COMMAND_MASTER, pci->dbi_base + PCI_COMMAND); -- writel(DBI_RO_WR_EN, pci->dbi_base + MISC_CONTROL_1_REG); -+ -+ dw_pcie_dbi_ro_wr_en(pci); -+ - writel(PCIE_CAP_SLOT_VAL, pci->dbi_base + offset + PCI_EXP_SLTCAP); - - val = readl(pci->dbi_base + offset + PCI_EXP_LNKCAP); --- -2.39.2 - diff --git a/queue-6.4/pci-vmd-fix-uninitialized-variable-usage-in-vmd_enab.patch b/queue-6.4/pci-vmd-fix-uninitialized-variable-usage-in-vmd_enab.patch deleted file mode 100644 index e88b58b84fd..00000000000 --- a/queue-6.4/pci-vmd-fix-uninitialized-variable-usage-in-vmd_enab.patch +++ /dev/null @@ -1,55 +0,0 @@ -From e4950a7b8150ef59786359f18647391fc69c0d8b Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Thu, 20 Apr 2023 17:43:31 +0800 -Subject: PCI: vmd: Fix uninitialized variable usage in vmd_enable_domain() -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -From: Xinghui Li - -[ Upstream commit 0c0206dc4f5ba2d18b15e24d2047487d6f73916b ] - -The ret variable in the vmd_enable_domain() function was used -uninitialized when printing a warning message upon failure of -the pci_reset_bus() function. - -Thus, fix the issue by assigning ret with the value returned from -pci_reset_bus() before referencing it in the warning message. - -This was detected by Smatch: - - drivers/pci/controller/vmd.c:931 vmd_enable_domain() error: uninitialized symbol 'ret'. - -[kwilczynski: drop the second patch from the series, add missing reported -by tag, commit log] -Fixes: 0a584655ef89 ("PCI: vmd: Fix secondary bus reset for Intel bridges") -Link: https://lore.kernel.org/all/202305270219.B96IiIfv-lkp@intel.com -Link: https://lore.kernel.org/linux-pci/20230420094332.1507900-2-korantwork@gmail.com -Reported-by: kernel test robot -Reported-by: Dan Carpenter -Signed-off-by: Xinghui Li -Signed-off-by: Krzysztof Wilczyński -Reviewed-by: Nirmal Patel -Signed-off-by: Sasha Levin ---- - drivers/pci/controller/vmd.c | 3 ++- - 1 file changed, 2 insertions(+), 1 deletion(-) - -diff --git a/drivers/pci/controller/vmd.c b/drivers/pci/controller/vmd.c -index 30ec18283aaf4..e718a816d4814 100644 ---- a/drivers/pci/controller/vmd.c -+++ b/drivers/pci/controller/vmd.c -@@ -927,7 +927,8 @@ static int vmd_enable_domain(struct vmd_dev *vmd, unsigned long features) - if (!list_empty(&child->devices)) { - dev = list_first_entry(&child->devices, - struct pci_dev, bus_list); -- if (pci_reset_bus(dev)) -+ ret = pci_reset_bus(dev); -+ if (ret) - pci_warn(dev, "can't reset device: %d\n", ret); - - break; --- -2.39.2 - diff --git a/queue-6.4/pci-vmd-reset-vmd-config-register-between-soft-reboo.patch b/queue-6.4/pci-vmd-reset-vmd-config-register-between-soft-reboo.patch deleted file mode 100644 index 90c53cf66de..00000000000 --- a/queue-6.4/pci-vmd-reset-vmd-config-register-between-soft-reboo.patch +++ /dev/null @@ -1,57 +0,0 @@ -From 2326ba4dd1a7b8c6b3c4922cdd940fcd5db2ee2f Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Fri, 24 Feb 2023 13:28:11 -0700 -Subject: PCI: vmd: Reset VMD config register between soft reboots - -From: Nirmal Patel - -[ Upstream commit b61cf04c49c3dfa70a0d6725d3eb40bf9b35cf71 ] - -VMD driver can disable or enable MSI remapping by changing -VMCONFIG_MSI_REMAP register. This register needs to be set to the -default value during soft reboots. Drives failed to enumerate -when Windows boots after performing a soft reboot from Linux. -Windows doesn't support MSI remapping disable feature and stale -register value hinders Windows VMD driver initialization process. -Adding vmd_shutdown function to make sure to set the VMCONFIG -register to the default value. - -Link: https://lore.kernel.org/r/20230224202811.644370-1-nirmal.patel@linux.intel.com -Fixes: ee81ee84f873 ("PCI: vmd: Disable MSI-X remapping when possible") -Signed-off-by: Nirmal Patel -Signed-off-by: Lorenzo Pieralisi -Reviewed-by: Jon Derrick -Signed-off-by: Sasha Levin ---- - drivers/pci/controller/vmd.c | 8 ++++++++ - 1 file changed, 8 insertions(+) - -diff --git a/drivers/pci/controller/vmd.c b/drivers/pci/controller/vmd.c -index 990630ec57c6a..30ec18283aaf4 100644 ---- a/drivers/pci/controller/vmd.c -+++ b/drivers/pci/controller/vmd.c -@@ -1036,6 +1036,13 @@ static void vmd_remove(struct pci_dev *dev) - ida_simple_remove(&vmd_instance_ida, vmd->instance); - } - -+static void vmd_shutdown(struct pci_dev *dev) -+{ -+ struct vmd_dev *vmd = pci_get_drvdata(dev); -+ -+ vmd_remove_irq_domain(vmd); -+} -+ - #ifdef CONFIG_PM_SLEEP - static int vmd_suspend(struct device *dev) - { -@@ -1101,6 +1108,7 @@ static struct pci_driver vmd_drv = { - .id_table = vmd_ids, - .probe = vmd_probe, - .remove = vmd_remove, -+ .shutdown = vmd_shutdown, - .driver = { - .pm = &vmd_dev_pm_ops, - }, --- -2.39.2 - diff --git a/queue-6.4/perf-arm-cmn-fix-dtc-reset.patch b/queue-6.4/perf-arm-cmn-fix-dtc-reset.patch deleted file mode 100644 index bb018e35dc3..00000000000 --- a/queue-6.4/perf-arm-cmn-fix-dtc-reset.patch +++ /dev/null @@ -1,58 +0,0 @@ -From 045ab03290fc00193faffb9ec965edcceda93748 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Wed, 24 May 2023 17:44:32 +0100 -Subject: perf/arm-cmn: Fix DTC reset - -From: Robin Murphy - -[ Upstream commit 71746c995cac92fcf6a65661b51211cf2009d7f0 ] - -It turns out that my naive DTC reset logic fails to work as intended, -since, after checking with the hardware designers, the PMU actually -needs to be fully enabled in order to correctly clear any pending -overflows. Therefore, invert the sequence to start with turning on both -enables so that we can reliably get the DTCs into a known state, then -moving to our normal counters-stopped state from there. Since all the -DTM counters have already been unpaired during the initial discovery -pass, we just need to additionally reset the cycle counters to ensure -that no other unexpected overflows occur during this period. - -Fixes: 0ba64770a2f2 ("perf: Add Arm CMN-600 PMU driver") -Reported-by: Geoff Blake -Signed-off-by: Robin Murphy -Link: https://lore.kernel.org/r/0ea4559261ea394f827c9aee5168c77a60aaee03.1684946389.git.robin.murphy@arm.com -Signed-off-by: Will Deacon -Signed-off-by: Sasha Levin ---- - drivers/perf/arm-cmn.c | 7 ++++--- - 1 file changed, 4 insertions(+), 3 deletions(-) - -diff --git a/drivers/perf/arm-cmn.c b/drivers/perf/arm-cmn.c -index 47d359f729579..89a685a09d848 100644 ---- a/drivers/perf/arm-cmn.c -+++ b/drivers/perf/arm-cmn.c -@@ -1899,9 +1899,10 @@ static int arm_cmn_init_dtc(struct arm_cmn *cmn, struct arm_cmn_node *dn, int id - if (dtc->irq < 0) - return dtc->irq; - -- writel_relaxed(0, dtc->base + CMN_DT_PMCR); -+ writel_relaxed(CMN_DT_DTC_CTL_DT_EN, dtc->base + CMN_DT_DTC_CTL); -+ writel_relaxed(CMN_DT_PMCR_PMU_EN | CMN_DT_PMCR_OVFL_INTR_EN, dtc->base + CMN_DT_PMCR); -+ writeq_relaxed(0, dtc->base + CMN_DT_PMCCNTR); - writel_relaxed(0x1ff, dtc->base + CMN_DT_PMOVSR_CLR); -- writel_relaxed(CMN_DT_PMCR_OVFL_INTR_EN, dtc->base + CMN_DT_PMCR); - - return 0; - } -@@ -1961,7 +1962,7 @@ static int arm_cmn_init_dtcs(struct arm_cmn *cmn) - dn->type = CMN_TYPE_CCLA; - } - -- writel_relaxed(CMN_DT_DTC_CTL_DT_EN, cmn->dtc[0].base + CMN_DT_DTC_CTL); -+ arm_cmn_set_state(cmn, CMN_STATE_DISABLED); - - return 0; - } --- -2.39.2 - diff --git a/queue-6.4/perf-arm_cspmu-fix-event-attribute-type.patch b/queue-6.4/perf-arm_cspmu-fix-event-attribute-type.patch deleted file mode 100644 index b1faa6501c5..00000000000 --- a/queue-6.4/perf-arm_cspmu-fix-event-attribute-type.patch +++ /dev/null @@ -1,46 +0,0 @@ -From 0b15c9f373b08721f2b43c632a8db8613106ebb2 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Mon, 5 Jun 2023 18:01:31 +0100 -Subject: perf/arm_cspmu: Fix event attribute type - -From: Robin Murphy - -[ Upstream commit 71e0cb32d5fc61468e83ed962379af71bba8237e ] - -ARM_CSPMU_EVENT_ATTR() defines a struct perf_pmu_events_attr, so -arm_cspmu_sysfs_event_show() should not be interpreting it as struct -dev_ext_attribute. - -Fixes: e37dfd65731d ("perf: arm_cspmu: Add support for ARM CoreSight PMU driver") -Reviewed-by: Suzuki K Poulose -Reviewed-and-tested-by: Ilkka Koskinen -Signed-off-by: Robin Murphy -Link: https://lore.kernel.org/r/27c0804af64007b2400abbc40278f642ee6a0a29.1685983270.git.robin.murphy@arm.com -Signed-off-by: Will Deacon -Signed-off-by: Sasha Levin ---- - drivers/perf/arm_cspmu/arm_cspmu.c | 8 ++++---- - 1 file changed, 4 insertions(+), 4 deletions(-) - -diff --git a/drivers/perf/arm_cspmu/arm_cspmu.c b/drivers/perf/arm_cspmu/arm_cspmu.c -index d0572162f0632..e8bc8fc1fb9c0 100644 ---- a/drivers/perf/arm_cspmu/arm_cspmu.c -+++ b/drivers/perf/arm_cspmu/arm_cspmu.c -@@ -189,10 +189,10 @@ static inline bool use_64b_counter_reg(const struct arm_cspmu *cspmu) - ssize_t arm_cspmu_sysfs_event_show(struct device *dev, - struct device_attribute *attr, char *buf) - { -- struct dev_ext_attribute *eattr = -- container_of(attr, struct dev_ext_attribute, attr); -- return sysfs_emit(buf, "event=0x%llx\n", -- (unsigned long long)eattr->var); -+ struct perf_pmu_events_attr *pmu_attr; -+ -+ pmu_attr = container_of(attr, typeof(*pmu_attr), attr); -+ return sysfs_emit(buf, "event=0x%llx\n", pmu_attr->id); - } - EXPORT_SYMBOL_GPL(arm_cspmu_sysfs_event_show); - --- -2.39.2 - diff --git a/queue-6.4/perf-arm_cspmu-set-irq-affinitiy-only-if-overflow-in.patch b/queue-6.4/perf-arm_cspmu-set-irq-affinitiy-only-if-overflow-in.patch deleted file mode 100644 index 2d01ac22dea..00000000000 --- a/queue-6.4/perf-arm_cspmu-set-irq-affinitiy-only-if-overflow-in.patch +++ /dev/null @@ -1,37 +0,0 @@ -From 09c58e364d77f2d83fbd2b418e55e3204769faaa Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Thu, 8 Jun 2023 13:37:42 -0700 -Subject: perf: arm_cspmu: Set irq affinitiy only if overflow interrupt is used - -From: Ilkka Koskinen - -[ Upstream commit 225d757012e0afa673d8c862e6fb39ed2f429b4d ] - -Don't try to set irq affinity if PMU doesn't have an overflow interrupt. - -Fixes: e37dfd65731d ("perf: arm_cspmu: Add support for ARM CoreSight PMU driver") -Signed-off-by: Ilkka Koskinen -Link: https://lore.kernel.org/r/20230608203742.3503486-1-ilkka@os.amperecomputing.com -Signed-off-by: Will Deacon -Signed-off-by: Sasha Levin ---- - drivers/perf/arm_cspmu/arm_cspmu.c | 3 ++- - 1 file changed, 2 insertions(+), 1 deletion(-) - -diff --git a/drivers/perf/arm_cspmu/arm_cspmu.c b/drivers/perf/arm_cspmu/arm_cspmu.c -index a3f1c410b4173..d0572162f0632 100644 ---- a/drivers/perf/arm_cspmu/arm_cspmu.c -+++ b/drivers/perf/arm_cspmu/arm_cspmu.c -@@ -1232,7 +1232,8 @@ static struct platform_driver arm_cspmu_driver = { - static void arm_cspmu_set_active_cpu(int cpu, struct arm_cspmu *cspmu) - { - cpumask_set_cpu(cpu, &cspmu->active_cpu); -- WARN_ON(irq_set_affinity(cspmu->irq, &cspmu->active_cpu)); -+ if (cspmu->irq) -+ WARN_ON(irq_set_affinity(cspmu->irq, &cspmu->active_cpu)); - } - - static int arm_cspmu_cpu_online(unsigned int cpu, struct hlist_node *node) --- -2.39.2 - diff --git a/queue-6.4/perf-bench-add-missing-setlocale-call-to-allow-usage.patch b/queue-6.4/perf-bench-add-missing-setlocale-call-to-allow-usage.patch deleted file mode 100644 index d35b6f6dd53..00000000000 --- a/queue-6.4/perf-bench-add-missing-setlocale-call-to-allow-usage.patch +++ /dev/null @@ -1,79 +0,0 @@ -From a15cea95189388fa92d86c07ab5f68174fcbc0af Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Fri, 2 Jun 2023 15:38:25 -0300 -Subject: perf bench: Add missing setlocale() call to allow usage of %'d style - formatting - -From: Arnaldo Carvalho de Melo - -[ Upstream commit 16203e9cd01896b4244100a8e3fb9f6e612ab2b1 ] - -Without this we were not getting the thousands separator for big -numbers. - -Noticed while developing 'perf bench uprobe', but the use of %' predates -that, for instance 'perf bench syscall' uses it. - -Before: - - # perf bench uprobe all - # Running uprobe/baseline benchmark... - # Executed 1000 usleep(1000) calls - Total time: 1054082243ns - - 1054082.243000 nsecs/op - - # - -After: - - # perf bench uprobe all - # Running uprobe/baseline benchmark... - # Executed 1,000 usleep(1000) calls - Total time: 1,053,715,144ns - - 1,053,715.144000 nsecs/op - - # - -Fixes: c2a08203052f8975 ("perf bench: Add basic syscall benchmark") -Cc: Adrian Hunter -Cc: Andre Fredette -Cc: Clark Williams -Cc: Dave Tucker -Cc: Davidlohr Bueso -Cc: Derek Barbosa -Cc: Ian Rogers -Cc: Jiri Olsa -Cc: Namhyung Kim -Cc: Tiezhu Yang -Link: https://lore.kernel.org/lkml/ZH3lcepZ4tBYr1jv@kernel.org -Signed-off-by: Arnaldo Carvalho de Melo -Signed-off-by: Sasha Levin ---- - tools/perf/builtin-bench.c | 2 ++ - 1 file changed, 2 insertions(+) - -diff --git a/tools/perf/builtin-bench.c b/tools/perf/builtin-bench.c -index 58f1cfe1eb34b..db435b791a09b 100644 ---- a/tools/perf/builtin-bench.c -+++ b/tools/perf/builtin-bench.c -@@ -21,6 +21,7 @@ - #include "builtin.h" - #include "bench/bench.h" - -+#include - #include - #include - #include -@@ -260,6 +261,7 @@ int cmd_bench(int argc, const char **argv) - - /* Unbuffered output */ - setvbuf(stdout, NULL, _IONBF, 0); -+ setlocale(LC_ALL, ""); - - if (argc < 2) { - /* No collection specified. */ --- -2.39.2 - diff --git a/queue-6.4/perf-dwarf-aux-fix-off-by-one-in-die_get_varname.patch b/queue-6.4/perf-dwarf-aux-fix-off-by-one-in-die_get_varname.patch deleted file mode 100644 index f51498716e1..00000000000 --- a/queue-6.4/perf-dwarf-aux-fix-off-by-one-in-die_get_varname.patch +++ /dev/null @@ -1,45 +0,0 @@ -From 123415be789003f4a653aea15e8fd69eedf8ae57 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Mon, 12 Jun 2023 16:41:01 -0700 -Subject: perf dwarf-aux: Fix off-by-one in die_get_varname() - -From: Namhyung Kim - -[ Upstream commit 3abfcfd847717d232e36963f31a361747c388fe7 ] - -The die_get_varname() returns "(unknown_type)" string if it failed to -find a type for the variable. But it had a space before the opening -parenthesis and it made the closing parenthesis cut off due to the -off-by-one in the string length (14). - -Signed-off-by: Namhyung Kim -Fixes: 88fd633cdfa19060 ("perf probe: No need to use formatting strbuf method") -Cc: Adrian Hunter -Cc: Ian Rogers -Cc: Ingo Molnar -Cc: Jiri Olsa -Cc: Masami Hiramatsu -Cc: Peter Zijlstra -Link: https://lore.kernel.org/r/20230612234102.3909116-1-namhyung@kernel.org -Signed-off-by: Arnaldo Carvalho de Melo -Signed-off-by: Sasha Levin ---- - tools/perf/util/dwarf-aux.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/tools/perf/util/dwarf-aux.c b/tools/perf/util/dwarf-aux.c -index b074144097710..3bff678745635 100644 ---- a/tools/perf/util/dwarf-aux.c -+++ b/tools/perf/util/dwarf-aux.c -@@ -1103,7 +1103,7 @@ int die_get_varname(Dwarf_Die *vr_die, struct strbuf *buf) - ret = die_get_typename(vr_die, buf); - if (ret < 0) { - pr_debug("Failed to get type, make it unknown.\n"); -- ret = strbuf_add(buf, " (unknown_type)", 14); -+ ret = strbuf_add(buf, "(unknown_type)", 14); - } - - return ret < 0 ? ret : strbuf_addf(buf, "\t%s", dwarf_diename(vr_die)); --- -2.39.2 - diff --git a/queue-6.4/perf-evsel-don-t-let-for_each_group-treat-the-head-o.patch b/queue-6.4/perf-evsel-don-t-let-for_each_group-treat-the-head-o.patch deleted file mode 100644 index b1d304d297b..00000000000 --- a/queue-6.4/perf-evsel-don-t-let-for_each_group-treat-the-head-o.patch +++ /dev/null @@ -1,96 +0,0 @@ -From 317b02278c1adfcfb10247913dd6bc6f84348d1c Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Fri, 26 May 2023 12:44:42 -0700 -Subject: perf evsel: Don't let for_each_group() treat the head of the list as - one of its nodes - -From: Ian Rogers - -[ Upstream commit 797b9ec8c4bc9ec89f633a9b2c710b7b64753ca4 ] - -Address/memory sanitizer was reporting issues in evsel__group_pmu_name -because the for_each_group_evsel loop didn't terminate when the head -was reached, the head would then be cast and accessed as an evsel -leading to invalid memory accesses. - -Fix for_each_group_member and for_each_group_evsel to terminate at the -list head. Note, evsel__group_pmu_name no longer iterates the group, but -the problem is present regardless. - -Fixes: 717e263fc354d53d ("perf report: Show group description when event group is enabled") -Signed-off-by: Ian Rogers -Cc: Adrian Hunter -Cc: Alexander Shishkin -Cc: Changbin Du -Cc: Dmitrii Dolgov <9erthalion6@gmail.com> -Cc: Ingo Molnar -Cc: James Clark -Cc: Jiri Olsa -Cc: Kan Liang -Cc: Mark Rutland -Cc: Namhyung Kim -Cc: Namhyung Kim -Cc: Peter Zijlstra -Cc: Rob Herring -Cc: Sandipan Das -Cc: Xing Zhengjun -Link: https://lore.kernel.org/r/20230526194442.2355872-3-irogers@google.com -Signed-off-by: Arnaldo Carvalho de Melo -Signed-off-by: Sasha Levin ---- - tools/perf/util/evsel.h | 24 ++++++++++++++++-------- - tools/perf/util/evsel_fprintf.c | 1 + - 2 files changed, 17 insertions(+), 8 deletions(-) - -diff --git a/tools/perf/util/evsel.h b/tools/perf/util/evsel.h -index 0f54f28a69c25..5a488803d368f 100644 ---- a/tools/perf/util/evsel.h -+++ b/tools/perf/util/evsel.h -@@ -460,16 +460,24 @@ static inline int evsel__group_idx(struct evsel *evsel) - } - - /* Iterates group WITHOUT the leader. */ --#define for_each_group_member(_evsel, _leader) \ --for ((_evsel) = list_entry((_leader)->core.node.next, struct evsel, core.node); \ -- (_evsel) && (_evsel)->core.leader == (&_leader->core); \ -- (_evsel) = list_entry((_evsel)->core.node.next, struct evsel, core.node)) -+#define for_each_group_member_head(_evsel, _leader, _head) \ -+for ((_evsel) = list_entry((_leader)->core.node.next, struct evsel, core.node); \ -+ (_evsel) && &(_evsel)->core.node != (_head) && \ -+ (_evsel)->core.leader == &(_leader)->core; \ -+ (_evsel) = list_entry((_evsel)->core.node.next, struct evsel, core.node)) -+ -+#define for_each_group_member(_evsel, _leader) \ -+ for_each_group_member_head(_evsel, _leader, &(_leader)->evlist->core.entries) - - /* Iterates group WITH the leader. */ --#define for_each_group_evsel(_evsel, _leader) \ --for ((_evsel) = _leader; \ -- (_evsel) && (_evsel)->core.leader == (&_leader->core); \ -- (_evsel) = list_entry((_evsel)->core.node.next, struct evsel, core.node)) -+#define for_each_group_evsel_head(_evsel, _leader, _head) \ -+for ((_evsel) = _leader; \ -+ (_evsel) && &(_evsel)->core.node != (_head) && \ -+ (_evsel)->core.leader == &(_leader)->core; \ -+ (_evsel) = list_entry((_evsel)->core.node.next, struct evsel, core.node)) -+ -+#define for_each_group_evsel(_evsel, _leader) \ -+ for_each_group_evsel_head(_evsel, _leader, &(_leader)->evlist->core.entries) - - static inline bool evsel__has_branch_callstack(const struct evsel *evsel) - { -diff --git a/tools/perf/util/evsel_fprintf.c b/tools/perf/util/evsel_fprintf.c -index cc80ec554c0a9..036a2171dc1c5 100644 ---- a/tools/perf/util/evsel_fprintf.c -+++ b/tools/perf/util/evsel_fprintf.c -@@ -2,6 +2,7 @@ - #include - #include - #include -+#include "util/evlist.h" - #include "evsel.h" - #include "util/evsel_fprintf.h" - #include "util/event.h" --- -2.39.2 - diff --git a/queue-6.4/perf-ibs-fix-interface-via-core-pmu-events.patch b/queue-6.4/perf-ibs-fix-interface-via-core-pmu-events.patch deleted file mode 100644 index 65ec6f41d77..00000000000 --- a/queue-6.4/perf-ibs-fix-interface-via-core-pmu-events.patch +++ /dev/null @@ -1,164 +0,0 @@ -From 8d90f4e87a32d0cdc3a25937bd126895e2ea8c7b Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Thu, 4 May 2023 16:30:01 +0530 -Subject: perf/ibs: Fix interface via core pmu events - -From: Ravi Bangoria - -[ Upstream commit 2fad201fe38ff9a692acedb1990ece2c52a29f95 ] - -Although, IBS pmus can be invoked via their own interface, indirect -IBS invocation via core pmu events is also supported with fixed set -of events: cpu-cycles:p, r076:p (same as cpu-cycles:p) and r0C1:p -(micro-ops) for user convenience. - -This indirect IBS invocation is broken since commit 66d258c5b048 -("perf/core: Optimize perf_init_event()"), which added RAW pmu under -'pmu_idr' list and thus if event_init() fails with RAW pmu, it started -returning error instead of trying other pmus. - -Forward precise events from core pmu to IBS by overwriting 'type' and -'config' in the kernel copy of perf_event_attr. Overwriting will cause -perf_init_event() to retry with updated 'type' and 'config', which will -automatically forward event to IBS pmu. - -Without patch: - $ sudo ./perf record -C 0 -e r076:p -- sleep 1 - Error: - The r076:p event is not supported. - -With patch: - $ sudo ./perf record -C 0 -e r076:p -- sleep 1 - [ perf record: Woken up 1 times to write data ] - [ perf record: Captured and wrote 0.341 MB perf.data (37 samples) ] - -Fixes: 66d258c5b048 ("perf/core: Optimize perf_init_event()") -Reported-by: Stephane Eranian -Signed-off-by: Ravi Bangoria -Signed-off-by: Peter Zijlstra (Intel) -Link: https://lkml.kernel.org/r/20230504110003.2548-3-ravi.bangoria@amd.com -Signed-off-by: Sasha Levin ---- - arch/x86/events/amd/core.c | 2 +- - arch/x86/events/amd/ibs.c | 53 +++++++++++++++---------------- - arch/x86/include/asm/perf_event.h | 2 ++ - 3 files changed, 29 insertions(+), 28 deletions(-) - -diff --git a/arch/x86/events/amd/core.c b/arch/x86/events/amd/core.c -index bccea57dee81e..abadd5f234254 100644 ---- a/arch/x86/events/amd/core.c -+++ b/arch/x86/events/amd/core.c -@@ -374,7 +374,7 @@ static int amd_pmu_hw_config(struct perf_event *event) - - /* pass precise event sampling to ibs: */ - if (event->attr.precise_ip && get_ibs_caps()) -- return -ENOENT; -+ return forward_event_to_ibs(event); - - if (has_branch_stack(event) && !x86_pmu.lbr_nr) - return -EOPNOTSUPP; -diff --git a/arch/x86/events/amd/ibs.c b/arch/x86/events/amd/ibs.c -index 64582954b5f67..3710148021916 100644 ---- a/arch/x86/events/amd/ibs.c -+++ b/arch/x86/events/amd/ibs.c -@@ -190,7 +190,7 @@ static struct perf_ibs *get_ibs_pmu(int type) - } - - /* -- * Use IBS for precise event sampling: -+ * core pmu config -> IBS config - * - * perf record -a -e cpu-cycles:p ... # use ibs op counting cycle count - * perf record -a -e r076:p ... # same as -e cpu-cycles:p -@@ -199,25 +199,9 @@ static struct perf_ibs *get_ibs_pmu(int type) - * IbsOpCntCtl (bit 19) of IBS Execution Control Register (IbsOpCtl, - * MSRC001_1033) is used to select either cycle or micro-ops counting - * mode. -- * -- * The rip of IBS samples has skid 0. Thus, IBS supports precise -- * levels 1 and 2 and the PERF_EFLAGS_EXACT is set. In rare cases the -- * rip is invalid when IBS was not able to record the rip correctly. -- * We clear PERF_EFLAGS_EXACT and take the rip from pt_regs then. -- * - */ --static int perf_ibs_precise_event(struct perf_event *event, u64 *config) -+static int core_pmu_ibs_config(struct perf_event *event, u64 *config) - { -- switch (event->attr.precise_ip) { -- case 0: -- return -ENOENT; -- case 1: -- case 2: -- break; -- default: -- return -EOPNOTSUPP; -- } -- - switch (event->attr.type) { - case PERF_TYPE_HARDWARE: - switch (event->attr.config) { -@@ -243,22 +227,37 @@ static int perf_ibs_precise_event(struct perf_event *event, u64 *config) - return -EOPNOTSUPP; - } - -+/* -+ * The rip of IBS samples has skid 0. Thus, IBS supports precise -+ * levels 1 and 2 and the PERF_EFLAGS_EXACT is set. In rare cases the -+ * rip is invalid when IBS was not able to record the rip correctly. -+ * We clear PERF_EFLAGS_EXACT and take the rip from pt_regs then. -+ */ -+int forward_event_to_ibs(struct perf_event *event) -+{ -+ u64 config = 0; -+ -+ if (!event->attr.precise_ip || event->attr.precise_ip > 2) -+ return -EOPNOTSUPP; -+ -+ if (!core_pmu_ibs_config(event, &config)) { -+ event->attr.type = perf_ibs_op.pmu.type; -+ event->attr.config = config; -+ } -+ return -ENOENT; -+} -+ - static int perf_ibs_init(struct perf_event *event) - { - struct hw_perf_event *hwc = &event->hw; - struct perf_ibs *perf_ibs; - u64 max_cnt, config; -- int ret; - - perf_ibs = get_ibs_pmu(event->attr.type); -- if (perf_ibs) { -- config = event->attr.config; -- } else { -- perf_ibs = &perf_ibs_op; -- ret = perf_ibs_precise_event(event, &config); -- if (ret) -- return ret; -- } -+ if (!perf_ibs) -+ return -ENOENT; -+ -+ config = event->attr.config; - - if (event->pmu != &perf_ibs->pmu) - return -ENOENT; -diff --git a/arch/x86/include/asm/perf_event.h b/arch/x86/include/asm/perf_event.h -index abf09882f58b6..f1a46500a2753 100644 ---- a/arch/x86/include/asm/perf_event.h -+++ b/arch/x86/include/asm/perf_event.h -@@ -478,8 +478,10 @@ struct pebs_xmm { - - #ifdef CONFIG_X86_LOCAL_APIC - extern u32 get_ibs_caps(void); -+extern int forward_event_to_ibs(struct perf_event *event); - #else - static inline u32 get_ibs_caps(void) { return 0; } -+static inline int forward_event_to_ibs(struct perf_event *event) { return -ENOENT; } - #endif - - #ifdef CONFIG_PERF_EVENTS --- -2.39.2 - diff --git a/queue-6.4/perf-metric-fix-no-group-check.patch b/queue-6.4/perf-metric-fix-no-group-check.patch deleted file mode 100644 index 3378e403090..00000000000 --- a/queue-6.4/perf-metric-fix-no-group-check.patch +++ /dev/null @@ -1,50 +0,0 @@ -From 163f034e63801208d0cb9667ac23da5ee18995f1 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Wed, 7 Jun 2023 09:26:53 -0700 -Subject: perf metric: Fix no group check - -From: Kan Liang - -[ Upstream commit e4c4e8a538a0db071d291bc2dca487e1882a7d4f ] - -The no group check fails if there is more than one meticgroup in the -metricgroup_no_group. - -The first parameter of the match_metric() should be the string, while -the substring should be the second parameter. - -Fixes: ccc66c6092802d68 ("perf metric: JSON flag to not group events if gathering a metric group") -Signed-off-by: Kan Liang -Acked-by: Ian Rogers -Cc: Adrian Hunter -Cc: Ahmad Yasin -Cc: Andi Kleen -Cc: Ian Rogers -Cc: Ingo Molnar -Cc: Jiri Olsa -Cc: Namhyung Kim -Cc: Peter Zijlstra -Cc: Stephane Eranian -Link: https://lore.kernel.org/r/20230607162700.3234712-2-kan.liang@linux.intel.com -Signed-off-by: Arnaldo Carvalho de Melo -Signed-off-by: Sasha Levin ---- - tools/perf/util/metricgroup.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/tools/perf/util/metricgroup.c b/tools/perf/util/metricgroup.c -index 5e9c657dd3f7a..b659b149e5b41 100644 ---- a/tools/perf/util/metricgroup.c -+++ b/tools/perf/util/metricgroup.c -@@ -1146,7 +1146,7 @@ static int metricgroup__add_metric_callback(const struct pmu_metric *pm, - - if (pm->metric_expr && match_pm_metric(pm, data->metric_name)) { - bool metric_no_group = data->metric_no_group || -- match_metric(data->metric_name, pm->metricgroup_no_group); -+ match_metric(pm->metricgroup_no_group, data->metric_name); - - data->has_match = true; - ret = add_metric(data->list, pm, data->modifier, metric_no_group, --- -2.39.2 - diff --git a/queue-6.4/perf-script-fix-allocation-of-evsel-priv-related-to-.patch b/queue-6.4/perf-script-fix-allocation-of-evsel-priv-related-to-.patch deleted file mode 100644 index c1769f79064..00000000000 --- a/queue-6.4/perf-script-fix-allocation-of-evsel-priv-related-to-.patch +++ /dev/null @@ -1,100 +0,0 @@ -From 9e8455ff49dcde25900b5d7d01f9b8beae77fda9 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Tue, 6 Jun 2023 16:11:10 -0300 -Subject: perf script: Fix allocation of evsel->priv related to per-event dump - files - -From: Arnaldo Carvalho de Melo - -[ Upstream commit 36d3e4138e1b6cc9ab179f3f397b5548f8b1eaae ] - -When printing output we may want to generate per event files, where the ---per-event-dump option should be used, creating perf.data.EVENT.dump -files instead of printing to stdout. - -The callback thar processes event thus expects that evsel->priv->fp -should point to either the per-event FILE descriptor or to stdout. - -The a3af66f51bd0bca7 ("perf script: Fix crash because of missing -evsel->priv") changeset fixed a case where evsel->priv wasn't setup, -thus set to NULL, causing a segfault when trying to access -evsel->priv->fp. - -But it did it for the non --per-event-dump case by allocating a 'struct -perf_evsel_script' just to set its ->fp to stdout. - -Since evsel->priv is only freed when --per-event-dump is used, we ended -up with a memory leak, detected using ASAN. - -Fix it by using the same method as perf_script__setup_per_event_dump(), -and reuse that static 'struct perf_evsel_script'. - -Also check if evsel_script__new() failed. - -Fixes: a3af66f51bd0bca7 ("perf script: Fix crash because of missing evsel->priv") -Reported-by: Ian Rogers -Tested-by: Ian Rogers -Cc: Adrian Hunter -Cc: Jiri Olsa -Cc: Namhyung Kim -Cc: Ravi Bangoria -Link: https://lore.kernel.org/lkml/ZH+F0wGAWV14zvMP@kernel.org -Signed-off-by: Arnaldo Carvalho de Melo -Signed-off-by: Sasha Levin ---- - tools/perf/builtin-script.c | 16 ++++++++-------- - 1 file changed, 8 insertions(+), 8 deletions(-) - -diff --git a/tools/perf/builtin-script.c b/tools/perf/builtin-script.c -index c57be48d65bb0..2ecfca0fccda0 100644 ---- a/tools/perf/builtin-script.c -+++ b/tools/perf/builtin-script.c -@@ -2422,6 +2422,9 @@ static int process_sample_event(struct perf_tool *tool, - return ret; - } - -+// Used when scr->per_event_dump is not set -+static struct evsel_script es_stdout; -+ - static int process_attr(struct perf_tool *tool, union perf_event *event, - struct evlist **pevlist) - { -@@ -2430,7 +2433,6 @@ static int process_attr(struct perf_tool *tool, union perf_event *event, - struct evsel *evsel, *pos; - u64 sample_type; - int err; -- static struct evsel_script *es; - - err = perf_event__process_attr(tool, event, pevlist); - if (err) -@@ -2440,14 +2442,13 @@ static int process_attr(struct perf_tool *tool, union perf_event *event, - evsel = evlist__last(*pevlist); - - if (!evsel->priv) { -- if (scr->per_event_dump) { -+ if (scr->per_event_dump) { - evsel->priv = evsel_script__new(evsel, scr->session->data); -- } else { -- es = zalloc(sizeof(*es)); -- if (!es) -+ if (!evsel->priv) - return -ENOMEM; -- es->fp = stdout; -- evsel->priv = es; -+ } else { // Replicate what is done in perf_script__setup_per_event_dump() -+ es_stdout.fp = stdout; -+ evsel->priv = &es_stdout; - } - } - -@@ -2753,7 +2754,6 @@ static int perf_script__fopen_per_event_dump(struct perf_script *script) - static int perf_script__setup_per_event_dump(struct perf_script *script) - { - struct evsel *evsel; -- static struct evsel_script es_stdout; - - if (script->per_event_dump) - return perf_script__fopen_per_event_dump(script); --- -2.39.2 - diff --git a/queue-6.4/perf-stat-reset-aggr-stats-for-each-run.patch b/queue-6.4/perf-stat-reset-aggr-stats-for-each-run.patch deleted file mode 100644 index 56af26a35df..00000000000 --- a/queue-6.4/perf-stat-reset-aggr-stats-for-each-run.patch +++ /dev/null @@ -1,48 +0,0 @@ -From 604de040e0f4f4218832d65e49af24e33bf5ab68 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Fri, 16 Jun 2023 00:32:10 -0700 -Subject: perf stat: Reset aggr stats for each run - -From: Namhyung Kim - -[ Upstream commit ed4090a22c123b9b33368741253edddc6ff8d18f ] - -When it runs multiple times with -r option, it missed to reset the -aggregation counters and the values were added up. The aggregation -count has the values to be printed in the end. It should reset the -counters at the beginning of each run. But the current code does that -only when -I/--interval-print option is given. - -Fixes: 91f85f98da7ab8c3 ("perf stat: Display event stats using aggr counts") -Reported-by: Jiri Olsa -Signed-off-by: Namhyung Kim -Cc: Adrian Hunter -Cc: Andi Kleen -Cc: Ian Rogers -Cc: Ingo Molnar -Cc: Kan Liang -Cc: Namhyung Kim -Cc: Peter Zijlstra -Link: https://lore.kernel.org/r/20230616073211.1057936-1-namhyung@kernel.org -Signed-off-by: Arnaldo Carvalho de Melo -Signed-off-by: Sasha Levin ---- - tools/perf/builtin-stat.c | 2 ++ - 1 file changed, 2 insertions(+) - -diff --git a/tools/perf/builtin-stat.c b/tools/perf/builtin-stat.c -index b9ad32f21e575..463643cda0d5f 100644 ---- a/tools/perf/builtin-stat.c -+++ b/tools/perf/builtin-stat.c -@@ -723,6 +723,8 @@ static int __run_perf_stat(int argc, const char **argv, int run_idx) - all_counters_use_bpf = false; - } - -+ evlist__reset_aggr_stats(evsel_list); -+ - evlist__for_each_cpu(evlist_cpu_itr, evsel_list, affinity) { - counter = evlist_cpu_itr.evsel; - --- -2.39.2 - diff --git a/queue-6.4/perf-test-set-perf_exec_path-for-script-execution.patch b/queue-6.4/perf-test-set-perf_exec_path-for-script-execution.patch deleted file mode 100644 index f038450d1ba..00000000000 --- a/queue-6.4/perf-test-set-perf_exec_path-for-script-execution.patch +++ /dev/null @@ -1,53 +0,0 @@ -From e767821e53dfbe8ee93199d32ebea7ed56b6518f Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Thu, 22 Jun 2023 16:53:57 -0700 -Subject: perf test: Set PERF_EXEC_PATH for script execution - -From: Namhyung Kim - -[ Upstream commit e4ef3ef1bc0a3d2535427da78b8095ef657eb474 ] - -The task-analyzer.py script (actually every other scripts too) requires -PERF_EXEC_PATH env to find dependent libraries and scripts. For scripts -test to run correctly, it needs to set PERF_EXEC_PATH to the perf tool -source directory. - -Instead of blindly update the env, let's check the directory structure -to make sure it points to the correct location. - -Fixes: e8478b84d6ba ("perf test: add new task-analyzer tests") -Cc: Petar Gligoric -Cc: Hagen Paul Pfeifer -Cc: Aditya Gupta -Cc: Peter Zijlstra -Cc: Adrian Hunter -Cc: Arnaldo Carvalho de Melo -Cc: Jiri Olsa -Cc: Ingo Molnar -Acked-by: Ian Rogers -Signed-off-by: Namhyung Kim -Signed-off-by: Sasha Levin ---- - tools/perf/tests/shell/test_task_analyzer.sh | 6 ++++++ - 1 file changed, 6 insertions(+) - -diff --git a/tools/perf/tests/shell/test_task_analyzer.sh b/tools/perf/tests/shell/test_task_analyzer.sh -index 1b7f3c1ec218b..365b61aea519a 100755 ---- a/tools/perf/tests/shell/test_task_analyzer.sh -+++ b/tools/perf/tests/shell/test_task_analyzer.sh -@@ -5,6 +5,12 @@ - tmpdir=$(mktemp -d /tmp/perf-script-task-analyzer-XXXXX) - err=0 - -+# set PERF_EXEC_PATH to find scripts in the source directory -+perfdir=$(dirname "$0")/../.. -+if [ -e "$perfdir/scripts/python/Perf-Trace-Util" ]; then -+ export PERF_EXEC_PATH=$perfdir -+fi -+ - cleanup() { - rm -f perf.data - rm -f perf.data.old --- -2.39.2 - diff --git a/queue-6.4/perf-tests-task_analyzer-fix-bad-substitution-1.patch b/queue-6.4/perf-tests-task_analyzer-fix-bad-substitution-1.patch deleted file mode 100644 index 0c30ca103c8..00000000000 --- a/queue-6.4/perf-tests-task_analyzer-fix-bad-substitution-1.patch +++ /dev/null @@ -1,56 +0,0 @@ -From 5e8eef0856efac32e1bb6589b7f7ed4aebdcf642 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Tue, 13 Jun 2023 22:11:43 +0530 -Subject: perf tests task_analyzer: Fix bad substitution ${$1} - -From: Aditya Gupta - -[ Upstream commit 5c4396efb53ef07d046a2e9456b240880e0c3076 ] - -${$1} gives bad substitution error on sh, bash, and zsh. This seems like -a typo, and this patch modifies it to $1, since that is what it's usage -looks like from wherever `check_exec_0` is called. - -This issue due to ${$1} caused all function calls to give error in -`find_str_or_fail` line, and so no test runs completely. But -'perf test "perf script task-analyzer tests"' wrongly reports -that tests passed with the status OK, which is wrong considering -the tests didn't even run completely - -Fixes: e8478b84d6ba9ccf ("perf test: add new task-analyzer tests") -Signed-off-by: Aditya Gupta -Signed-off-by: Athira Rajeev -Signed-off-by: Kajol Jain -Cc: Disha Goel -Cc: Hagen Paul Pfeifer -Cc: Ian Rogers -Cc: Jiri Olsa -Cc: John Garry -Cc: Madhavan Srinivasan -Cc: Namhyung Kim -Cc: Petar Gligoric -Cc: Ravi Bangoria -Cc: linuxppc-dev@lists.ozlabs.org -Link: https://lore.kernel.org/r/20230613164145.50488-16-atrajeev@linux.vnet.ibm.com -Signed-off-by: Arnaldo Carvalho de Melo -Signed-off-by: Sasha Levin ---- - tools/perf/tests/shell/test_task_analyzer.sh | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/tools/perf/tests/shell/test_task_analyzer.sh b/tools/perf/tests/shell/test_task_analyzer.sh -index a98e4ab66040e..6b3343234a6b2 100755 ---- a/tools/perf/tests/shell/test_task_analyzer.sh -+++ b/tools/perf/tests/shell/test_task_analyzer.sh -@@ -31,7 +31,7 @@ report() { - - check_exec_0() { - if [ $? != 0 ]; then -- report 1 "invokation of ${$1} command failed" -+ report 1 "invocation of $1 command failed" - fi - } - --- -2.39.2 - diff --git a/queue-6.4/perf-tests-task_analyzer-skip-tests-if-no-libtraceev.patch b/queue-6.4/perf-tests-task_analyzer-skip-tests-if-no-libtraceev.patch deleted file mode 100644 index 3c7e75fa00d..00000000000 --- a/queue-6.4/perf-tests-task_analyzer-skip-tests-if-no-libtraceev.patch +++ /dev/null @@ -1,106 +0,0 @@ -From bfc0d55f714d91f78349b120dd77f113a15487fe Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Tue, 13 Jun 2023 22:11:45 +0530 -Subject: perf tests task_analyzer: Skip tests if no libtraceevent support - -From: Aditya Gupta - -[ Upstream commit c3ac3b0779770acd3ad7eecb5099ab4419ef2e2e ] - -Test "perf script task-analyzer tests" fails in environment with missing -libtraceevent support, as perf record fails to create the perf.data -file, which further tests depend on. - -Instead, when perf is not compiled with libtraceevent support, skip -those tests instead of failing them, by checking the output of `perf -record --dry-run` to see if it prints the error "libtraceevent is -necessary for tracepoint support" - -For the following output, perf compiled with: `make NO_LIBTRACEEVENT=1` - -Before the patch: - -108: perf script task-analyzer tests : -test child forked, pid 24105 -failed to open perf.data: No such file or directory (try 'perf record' first) -FAIL: "invokation of perf script report task-analyzer command failed" Error message: "" -FAIL: "test_basic" Error message: "Failed to find required string:'Comm'." -failed to open perf.data: No such file or directory (try 'perf record' first) -FAIL: "invokation of perf script report task-analyzer --ns --rename-comms-by-tids 0:random command failed" Error message: "" -FAIL: "test_ns_rename" Error message: "Failed to find required string:'Comm'." -failed to open perf.data: No such file or directory (try 'perf record' first) -<...> -perf script task-analyzer tests: FAILED! - -With this patch, the script instead returns 2 signifying SKIP, and after -the patch: - -108: perf script task-analyzer tests : -test child forked, pid 26010 -libtraceevent is necessary for tracepoint support -WARN: Skipping tests. No libtraceevent support -test child finished with -2 -perf script task-analyzer tests: Skip - -Fixes: e8478b84d6ba9ccf ("perf test: Add new task-analyzer tests") -Signed-off-by: Aditya Gupta -Cc: Disha Goel -Cc: Ian Rogers -Cc: Jiri Olsa -Cc: John Garry -Cc: Madhavan Srinivasan -Cc: Namhyung Kim -Cc: Petar Gligoric -Cc: Ravi Bangoria -Cc: linuxppc-dev@lists.ozlabs.org -Link: https://lore.kernel.org/r/20230613164145.50488-18-atrajeev@linux.vnet.ibm.com -Signed-off-by: Athira Rajeev -Signed-off-by: Kajol Jain -Signed-off-by: Arnaldo Carvalho de Melo -Signed-off-by: Sasha Levin ---- - tools/perf/tests/shell/test_task_analyzer.sh | 18 ++++++++++++++++++ - 1 file changed, 18 insertions(+) - -diff --git a/tools/perf/tests/shell/test_task_analyzer.sh b/tools/perf/tests/shell/test_task_analyzer.sh -index 6b3343234a6b2..1b7f3c1ec218b 100755 ---- a/tools/perf/tests/shell/test_task_analyzer.sh -+++ b/tools/perf/tests/shell/test_task_analyzer.sh -@@ -44,9 +44,20 @@ find_str_or_fail() { - fi - } - -+# check if perf is compiled with libtraceevent support -+skip_no_probe_record_support() { -+ perf record -e "sched:sched_switch" -a -- sleep 1 2>&1 | grep "libtraceevent is necessary for tracepoint support" && return 2 -+ return 0 -+} -+ - prepare_perf_data() { - # 1s should be sufficient to catch at least some switches - perf record -e sched:sched_switch -a -- sleep 1 > /dev/null 2>&1 -+ # check if perf data file got created in above step. -+ if [ ! -e "perf.data" ]; then -+ printf "FAIL: perf record failed to create \"perf.data\" \n" -+ return 1 -+ fi - } - - # check standard inkvokation with no arguments -@@ -134,6 +145,13 @@ test_csvsummary_extended() { - find_str_or_fail "Out-Out;" csvsummary ${FUNCNAME[0]} - } - -+skip_no_probe_record_support -+err=$? -+if [ $err -ne 0 ]; then -+ echo "WARN: Skipping tests. No libtraceevent support" -+ cleanup -+ exit $err -+fi - prepare_perf_data - test_basic - test_ns_rename --- -2.39.2 - diff --git a/queue-6.4/perf-tool-x86-consolidate-is_amd-check-into-single-f.patch b/queue-6.4/perf-tool-x86-consolidate-is_amd-check-into-single-f.patch deleted file mode 100644 index 1c7a69478d3..00000000000 --- a/queue-6.4/perf-tool-x86-consolidate-is_amd-check-into-single-f.patch +++ /dev/null @@ -1,174 +0,0 @@ -From 333892aeb04170aacd0714d1e550c90198004f25 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Tue, 13 Jun 2023 15:25:04 +0530 -Subject: perf tool x86: Consolidate is_amd check into single function - -From: Ravi Bangoria - -[ Upstream commit 0cd1ca4650c9cf5f318110f67d39cbebae3693b3 ] - -There are multiple places where x86 specific code determines AMD vs -Intel arch and acts based on that. Consolidate those checks into a -single function. - -Signed-off-by: Ravi Bangoria -Acked-by: Ian Rogers -Cc: Adrian Hunter -Cc: Ali Saidi -Cc: Ananth Narayan -Cc: James Clark -Cc: Jiri Olsa -Cc: Kan Liang -Cc: Leo Yan -Cc: Madhavan Srinivasan -Cc: Mark Rutland -Cc: Namhyung Kim -Cc: Peter Zijlstra -Cc: Sandipan Das -Cc: Santosh Shukla -Link: https://lore.kernel.org/r/20230613095506.547-3-ravi.bangoria@amd.com -Signed-off-by: Arnaldo Carvalho de Melo -Stable-dep-of: 99d4850062a8 ("perf tool x86: Fix perf_env memory leak") -Signed-off-by: Sasha Levin ---- - tools/perf/arch/x86/util/Build | 1 + - tools/perf/arch/x86/util/env.c | 19 +++++++++++++++++++ - tools/perf/arch/x86/util/env.h | 7 +++++++ - tools/perf/arch/x86/util/evsel.c | 16 ++-------------- - tools/perf/arch/x86/util/mem-events.c | 19 ++----------------- - 5 files changed, 31 insertions(+), 31 deletions(-) - create mode 100644 tools/perf/arch/x86/util/env.c - create mode 100644 tools/perf/arch/x86/util/env.h - -diff --git a/tools/perf/arch/x86/util/Build b/tools/perf/arch/x86/util/Build -index 195ccfdef7aa1..005907cb97d8c 100644 ---- a/tools/perf/arch/x86/util/Build -+++ b/tools/perf/arch/x86/util/Build -@@ -10,6 +10,7 @@ perf-y += evlist.o - perf-y += mem-events.o - perf-y += evsel.o - perf-y += iostat.o -+perf-y += env.o - - perf-$(CONFIG_DWARF) += dwarf-regs.o - perf-$(CONFIG_BPF_PROLOGUE) += dwarf-regs.o -diff --git a/tools/perf/arch/x86/util/env.c b/tools/perf/arch/x86/util/env.c -new file mode 100644 -index 0000000000000..33b87f8ac1cc1 ---- /dev/null -+++ b/tools/perf/arch/x86/util/env.c -@@ -0,0 +1,19 @@ -+// SPDX-License-Identifier: GPL-2.0 -+#include "linux/string.h" -+#include "util/env.h" -+#include "env.h" -+ -+bool x86__is_amd_cpu(void) -+{ -+ struct perf_env env = { .total_mem = 0, }; -+ static int is_amd; /* 0: Uninitialized, 1: Yes, -1: No */ -+ -+ if (is_amd) -+ goto ret; -+ -+ perf_env__cpuid(&env); -+ is_amd = env.cpuid && strstarts(env.cpuid, "AuthenticAMD") ? 1 : -1; -+ -+ret: -+ return is_amd >= 1 ? true : false; -+} -diff --git a/tools/perf/arch/x86/util/env.h b/tools/perf/arch/x86/util/env.h -new file mode 100644 -index 0000000000000..d78f080b6b3f8 ---- /dev/null -+++ b/tools/perf/arch/x86/util/env.h -@@ -0,0 +1,7 @@ -+/* SPDX-License-Identifier: GPL-2.0 */ -+#ifndef _X86_ENV_H -+#define _X86_ENV_H -+ -+bool x86__is_amd_cpu(void); -+ -+#endif /* _X86_ENV_H */ -diff --git a/tools/perf/arch/x86/util/evsel.c b/tools/perf/arch/x86/util/evsel.c -index ea3972d785d10..d72390cdf391d 100644 ---- a/tools/perf/arch/x86/util/evsel.c -+++ b/tools/perf/arch/x86/util/evsel.c -@@ -7,6 +7,7 @@ - #include "linux/string.h" - #include "evsel.h" - #include "util/debug.h" -+#include "env.h" - - #define IBS_FETCH_L3MISSONLY (1ULL << 59) - #define IBS_OP_L3MISSONLY (1ULL << 16) -@@ -97,23 +98,10 @@ void arch__post_evsel_config(struct evsel *evsel, struct perf_event_attr *attr) - { - struct perf_pmu *evsel_pmu, *ibs_fetch_pmu, *ibs_op_pmu; - static int warned_once; -- /* 0: Uninitialized, 1: Yes, -1: No */ -- static int is_amd; - -- if (warned_once || is_amd == -1) -+ if (warned_once || !x86__is_amd_cpu()) - return; - -- if (!is_amd) { -- struct perf_env *env = evsel__env(evsel); -- -- if (!perf_env__cpuid(env) || !env->cpuid || -- !strstarts(env->cpuid, "AuthenticAMD")) { -- is_amd = -1; -- return; -- } -- is_amd = 1; -- } -- - evsel_pmu = evsel__find_pmu(evsel); - if (!evsel_pmu) - return; -diff --git a/tools/perf/arch/x86/util/mem-events.c b/tools/perf/arch/x86/util/mem-events.c -index f683ac702247c..efc0fae9ed0a7 100644 ---- a/tools/perf/arch/x86/util/mem-events.c -+++ b/tools/perf/arch/x86/util/mem-events.c -@@ -4,6 +4,7 @@ - #include "map_symbol.h" - #include "mem-events.h" - #include "linux/string.h" -+#include "env.h" - - static char mem_loads_name[100]; - static bool mem_loads_name__init; -@@ -26,28 +27,12 @@ static struct perf_mem_event perf_mem_events_amd[PERF_MEM_EVENTS__MAX] = { - E("mem-ldst", "ibs_op//", "ibs_op"), - }; - --static int perf_mem_is_amd_cpu(void) --{ -- struct perf_env env = { .total_mem = 0, }; -- -- perf_env__cpuid(&env); -- if (env.cpuid && strstarts(env.cpuid, "AuthenticAMD")) -- return 1; -- return -1; --} -- - struct perf_mem_event *perf_mem_events__ptr(int i) - { -- /* 0: Uninitialized, 1: Yes, -1: No */ -- static int is_amd; -- - if (i >= PERF_MEM_EVENTS__MAX) - return NULL; - -- if (!is_amd) -- is_amd = perf_mem_is_amd_cpu(); -- -- if (is_amd == 1) -+ if (x86__is_amd_cpu()) - return &perf_mem_events_amd[i]; - - return &perf_mem_events_intel[i]; --- -2.39.2 - diff --git a/queue-6.4/perf-tool-x86-fix-perf_env-memory-leak.patch b/queue-6.4/perf-tool-x86-fix-perf_env-memory-leak.patch deleted file mode 100644 index f62e3bcfa07..00000000000 --- a/queue-6.4/perf-tool-x86-fix-perf_env-memory-leak.patch +++ /dev/null @@ -1,70 +0,0 @@ -From fcabdb3f8cd234121c8e5e468a13496a2fffc1ce Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Tue, 13 Jun 2023 16:54:16 -0700 -Subject: perf tool x86: Fix perf_env memory leak - -From: Ian Rogers - -[ Upstream commit 99d4850062a84564f36923764bb93935ef2ed108 ] - -Found by leak sanitizer: -``` -==1632594==ERROR: LeakSanitizer: detected memory leaks - -Direct leak of 21 byte(s) in 1 object(s) allocated from: - #0 0x7f2953a7077b in __interceptor_strdup ../../../../src/libsanitizer/asan/asan_interceptors.cpp:439 - #1 0x556701d6fbbf in perf_env__read_cpuid util/env.c:369 - #2 0x556701d70589 in perf_env__cpuid util/env.c:465 - #3 0x55670204bba2 in x86__is_amd_cpu arch/x86/util/env.c:14 - #4 0x5567020487a2 in arch__post_evsel_config arch/x86/util/evsel.c:83 - #5 0x556701d8f78b in evsel__config util/evsel.c:1366 - #6 0x556701ef5872 in evlist__config util/record.c:108 - #7 0x556701cd6bcd in test__PERF_RECORD tests/perf-record.c:112 - #8 0x556701cacd07 in run_test tests/builtin-test.c:236 - #9 0x556701cacfac in test_and_print tests/builtin-test.c:265 - #10 0x556701cadddb in __cmd_test tests/builtin-test.c:402 - #11 0x556701caf2aa in cmd_test tests/builtin-test.c:559 - #12 0x556701d3b557 in run_builtin tools/perf/perf.c:323 - #13 0x556701d3bac8 in handle_internal_command tools/perf/perf.c:377 - #14 0x556701d3be90 in run_argv tools/perf/perf.c:421 - #15 0x556701d3c3f8 in main tools/perf/perf.c:537 - #16 0x7f2952a46189 in __libc_start_call_main ../sysdeps/nptl/libc_start_call_main.h:58 - -SUMMARY: AddressSanitizer: 21 byte(s) leaked in 1 allocation(s). -``` - -Fixes: f7b58cbdb3ff36eb ("perf mem/c2c: Add load store event mappings for AMD") -Signed-off-by: Ian Rogers -Acked-by: Ravi Bangoria -Tested-by: Arnaldo Carvalho de Melo -Cc: Adrian Hunter -Cc: Alexander Shishkin -Cc: Ingo Molnar -Cc: Jiri Olsa -Cc: Mark Rutland -Cc: Namhyung Kim -Cc: Peter Zijlstra -Cc: Ravi Bangoria -Link: https://lore.kernel.org/r/20230613235416.1650755-1-irogers@google.com -Signed-off-by: Arnaldo Carvalho de Melo -Signed-off-by: Sasha Levin ---- - tools/perf/arch/x86/util/env.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/tools/perf/arch/x86/util/env.c b/tools/perf/arch/x86/util/env.c -index 33b87f8ac1cc1..3e537ffb1353a 100644 ---- a/tools/perf/arch/x86/util/env.c -+++ b/tools/perf/arch/x86/util/env.c -@@ -13,7 +13,7 @@ bool x86__is_amd_cpu(void) - - perf_env__cpuid(&env); - is_amd = env.cpuid && strstarts(env.cpuid, "AuthenticAMD") ? 1 : -1; -- -+ perf_env__exit(&env); - ret: - return is_amd >= 1 ? true : false; - } --- -2.39.2 - diff --git a/queue-6.4/pinctrl-at91-fix-a-couple-null-vs-is_err-checks.patch b/queue-6.4/pinctrl-at91-fix-a-couple-null-vs-is_err-checks.patch deleted file mode 100644 index 5a0a3520d6b..00000000000 --- a/queue-6.4/pinctrl-at91-fix-a-couple-null-vs-is_err-checks.patch +++ /dev/null @@ -1,53 +0,0 @@ -From 9ec63944ae8ae79454d103fb346e41bccfa7ea8e Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Mon, 22 May 2023 10:44:54 +0300 -Subject: pinctrl: at91: fix a couple NULL vs IS_ERR() checks - -From: Dan Carpenter - -[ Upstream commit 35216718c9ac2aef934ea9cd229572d4996807b2 ] - -The devm_kasprintf_strarray() function doesn't return NULL on error, -it returns error pointers. Update the checks accordingly. - -Fixes: f494c1913cbb ("pinctrl: at91: use devm_kasprintf() to avoid potential leaks (part 2)") -Signed-off-by: Dan Carpenter -Reviewed-by: Claudiu Beznea -Reviewed-by: Andy Shevchenko -Acked-by: Ryan Wanner -Link: https://lore.kernel.org/r/5697980e-f687-47a7-9db8-2af34ae464bd@kili.mountain -Signed-off-by: Linus Walleij -Signed-off-by: Sasha Levin ---- - drivers/pinctrl/pinctrl-at91.c | 8 ++++---- - 1 file changed, 4 insertions(+), 4 deletions(-) - -diff --git a/drivers/pinctrl/pinctrl-at91.c b/drivers/pinctrl/pinctrl-at91.c -index 871209c241532..39956d821ad75 100644 ---- a/drivers/pinctrl/pinctrl-at91.c -+++ b/drivers/pinctrl/pinctrl-at91.c -@@ -1389,8 +1389,8 @@ static int at91_pinctrl_probe(struct platform_device *pdev) - char **names; - - names = devm_kasprintf_strarray(dev, "pio", MAX_NB_GPIO_PER_BANK); -- if (!names) -- return -ENOMEM; -+ if (IS_ERR(names)) -+ return PTR_ERR(names); - - for (j = 0; j < MAX_NB_GPIO_PER_BANK; j++, k++) { - char *name = names[j]; -@@ -1870,8 +1870,8 @@ static int at91_gpio_probe(struct platform_device *pdev) - } - - names = devm_kasprintf_strarray(dev, "pio", chip->ngpio); -- if (!names) -- return -ENOMEM; -+ if (IS_ERR(names)) -+ return PTR_ERR(names); - - for (i = 0; i < chip->ngpio; i++) - strreplace(names[i], '-', alias_idx + 'A'); --- -2.39.2 - diff --git a/queue-6.4/pinctrl-at91-pio4-check-return-value-of-devm_kasprin.patch b/queue-6.4/pinctrl-at91-pio4-check-return-value-of-devm_kasprin.patch deleted file mode 100644 index 2e5b006bef4..00000000000 --- a/queue-6.4/pinctrl-at91-pio4-check-return-value-of-devm_kasprin.patch +++ /dev/null @@ -1,41 +0,0 @@ -From d84e3b17d125be9246d971b86ab1c01a3ca90cb7 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Thu, 15 Jun 2023 13:53:33 +0300 -Subject: pinctrl: at91-pio4: check return value of devm_kasprintf() - -From: Claudiu Beznea - -[ Upstream commit f6fd5d4ff8ca0b24cee1af4130bcb1fa96b61aa0 ] - -devm_kasprintf() returns a pointer to dynamically allocated memory. -Pointer could be NULL in case allocation fails. Check pointer validity. -Identified with coccinelle (kmerr.cocci script). - -Fixes: 776180848b57 ("pinctrl: introduce driver for Atmel PIO4 controller") -Depends-on: 1c4e5c470a56 ("pinctrl: at91: use devm_kasprintf() to avoid potential leaks") -Depends-on: 5a8f9cf269e8 ("pinctrl: at91-pio4: use proper format specifier for unsigned int") -Signed-off-by: Claudiu Beznea -Reviewed-by: Andy Shevchenko -Link: https://lore.kernel.org/r/20230615105333.585304-4-claudiu.beznea@microchip.com -Signed-off-by: Linus Walleij -Signed-off-by: Sasha Levin ---- - drivers/pinctrl/pinctrl-at91-pio4.c | 2 ++ - 1 file changed, 2 insertions(+) - -diff --git a/drivers/pinctrl/pinctrl-at91-pio4.c b/drivers/pinctrl/pinctrl-at91-pio4.c -index 2fe40acb6a3e5..98c2122817264 100644 ---- a/drivers/pinctrl/pinctrl-at91-pio4.c -+++ b/drivers/pinctrl/pinctrl-at91-pio4.c -@@ -1146,6 +1146,8 @@ static int atmel_pinctrl_probe(struct platform_device *pdev) - /* Pin naming convention: P(bank_name)(bank_pin_number). */ - pin_desc[i].name = devm_kasprintf(&pdev->dev, GFP_KERNEL, "P%c%u", - bank + 'A', line); -+ if (!pin_desc[i].name) -+ return -ENOMEM; - - group->name = group_names[i] = pin_desc[i].name; - group->pin = pin_desc[i].number; --- -2.39.2 - diff --git a/queue-6.4/pinctrl-bcm2835-handle-gpiochip_add_pin_range-errors.patch b/queue-6.4/pinctrl-bcm2835-handle-gpiochip_add_pin_range-errors.patch deleted file mode 100644 index ade77212f04..00000000000 --- a/queue-6.4/pinctrl-bcm2835-handle-gpiochip_add_pin_range-errors.patch +++ /dev/null @@ -1,41 +0,0 @@ -From 2f2cb64afc5e5297fca597c33bc228cdb0aa5673 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Sun, 16 Apr 2023 23:43:41 +0200 -Subject: pinctrl: bcm2835: Handle gpiochip_add_pin_range() errors - -From: Christophe JAILLET - -[ Upstream commit cdf7e616120065007687fe1df0412154f259daec ] - -gpiochip_add_pin_range() can fail, so better return its error code than -a hard coded '0'. - -Fixes: d2b67744fd99 ("pinctrl: bcm2835: implement hook for missing gpio-ranges") -Signed-off-by: Christophe JAILLET -Link: https://lore.kernel.org/r/98c3b5890bb72415145c9fe4e1d974711edae376.1681681402.git.christophe.jaillet@wanadoo.fr -Signed-off-by: Linus Walleij -Signed-off-by: Sasha Levin ---- - drivers/pinctrl/bcm/pinctrl-bcm2835.c | 6 ++---- - 1 file changed, 2 insertions(+), 4 deletions(-) - -diff --git a/drivers/pinctrl/bcm/pinctrl-bcm2835.c b/drivers/pinctrl/bcm/pinctrl-bcm2835.c -index 7435173e10f43..1489191a213fe 100644 ---- a/drivers/pinctrl/bcm/pinctrl-bcm2835.c -+++ b/drivers/pinctrl/bcm/pinctrl-bcm2835.c -@@ -376,10 +376,8 @@ static int bcm2835_add_pin_ranges_fallback(struct gpio_chip *gc) - if (!pctldev) - return 0; - -- gpiochip_add_pin_range(gc, pinctrl_dev_get_devname(pctldev), 0, 0, -- gc->ngpio); -- -- return 0; -+ return gpiochip_add_pin_range(gc, pinctrl_dev_get_devname(pctldev), 0, 0, -+ gc->ngpio); - } - - static const struct gpio_chip bcm2835_gpio_chip = { --- -2.39.2 - diff --git a/queue-6.4/pinctrl-cherryview-return-correct-value-if-pin-in-pu.patch b/queue-6.4/pinctrl-cherryview-return-correct-value-if-pin-in-pu.patch deleted file mode 100644 index c96088b2c65..00000000000 --- a/queue-6.4/pinctrl-cherryview-return-correct-value-if-pin-in-pu.patch +++ /dev/null @@ -1,57 +0,0 @@ -From 8c5b7d72f4a4ae3e821e95d1f66a2ca62ce3615f Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Mon, 5 Jun 2023 17:37:34 +0300 -Subject: pinctrl: cherryview: Return correct value if pin in push-pull mode - -From: Andy Shevchenko - -[ Upstream commit 5835196a17be5cfdcad0b617f90cf4abe16951a4 ] - -Currently the getter returns ENOTSUPP on pin configured in -the push-pull mode. Fix this by adding the missed switch case. - -Fixes: ccdf81d08dbe ("pinctrl: cherryview: add option to set open-drain pin config") -Fixes: 6e08d6bbebeb ("pinctrl: Add Intel Cherryview/Braswell pin controller support") -Acked-by: Mika Westerberg -Signed-off-by: Andy Shevchenko -Signed-off-by: Sasha Levin ---- - drivers/pinctrl/intel/pinctrl-cherryview.c | 15 ++++++++++----- - 1 file changed, 10 insertions(+), 5 deletions(-) - -diff --git a/drivers/pinctrl/intel/pinctrl-cherryview.c b/drivers/pinctrl/intel/pinctrl-cherryview.c -index 722990e278361..87cf1e7403979 100644 ---- a/drivers/pinctrl/intel/pinctrl-cherryview.c -+++ b/drivers/pinctrl/intel/pinctrl-cherryview.c -@@ -949,11 +949,6 @@ static int chv_config_get(struct pinctrl_dev *pctldev, unsigned int pin, - - break; - -- case PIN_CONFIG_DRIVE_OPEN_DRAIN: -- if (!(ctrl1 & CHV_PADCTRL1_ODEN)) -- return -EINVAL; -- break; -- - case PIN_CONFIG_BIAS_HIGH_IMPEDANCE: { - u32 cfg; - -@@ -963,6 +958,16 @@ static int chv_config_get(struct pinctrl_dev *pctldev, unsigned int pin, - return -EINVAL; - - break; -+ -+ case PIN_CONFIG_DRIVE_PUSH_PULL: -+ if (ctrl1 & CHV_PADCTRL1_ODEN) -+ return -EINVAL; -+ break; -+ -+ case PIN_CONFIG_DRIVE_OPEN_DRAIN: -+ if (!(ctrl1 & CHV_PADCTRL1_ODEN)) -+ return -EINVAL; -+ break; - } - - default: --- -2.39.2 - diff --git a/queue-6.4/pinctrl-freescale-fix-a-memory-out-of-bounds-when-nu.patch b/queue-6.4/pinctrl-freescale-fix-a-memory-out-of-bounds-when-nu.patch deleted file mode 100644 index 7e91b5e3d6c..00000000000 --- a/queue-6.4/pinctrl-freescale-fix-a-memory-out-of-bounds-when-nu.patch +++ /dev/null @@ -1,48 +0,0 @@ -From e114e1ca7e3b46cfd6caa90bab6e85772a72d273 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Fri, 5 May 2023 07:37:36 +0800 -Subject: pinctrl: freescale: Fix a memory out of bounds when num_configs is 1 - -From: Xiaolei Wang - -[ Upstream commit 9063777ca1e2e895c5fdd493ee0c3f18fa710ed4 ] - -The config passed in by pad wakeup is 1, when num_configs is 1, -Configuration [1] should not be fetched, which will be detected -by KASAN as a memory out of bounds condition. Modify to get -configs[1] when num_configs is 2. - -Fixes: f60c9eac54af ("gpio: mxc: enable pad wakeup on i.MX8x platforms") -Signed-off-by: Xiaolei Wang -Reviewed-by: Peng Fan -Link: https://lore.kernel.org/r/20230504233736.3766296-1-xiaolei.wang@windriver.com -Signed-off-by: Linus Walleij -Signed-off-by: Sasha Levin ---- - drivers/pinctrl/freescale/pinctrl-scu.c | 3 ++- - 1 file changed, 2 insertions(+), 1 deletion(-) - -diff --git a/drivers/pinctrl/freescale/pinctrl-scu.c b/drivers/pinctrl/freescale/pinctrl-scu.c -index ea261b6e74581..3b252d684d723 100644 ---- a/drivers/pinctrl/freescale/pinctrl-scu.c -+++ b/drivers/pinctrl/freescale/pinctrl-scu.c -@@ -90,7 +90,7 @@ int imx_pinconf_set_scu(struct pinctrl_dev *pctldev, unsigned pin_id, - struct imx_sc_msg_req_pad_set msg; - struct imx_sc_rpc_msg *hdr = &msg.hdr; - unsigned int mux = configs[0]; -- unsigned int conf = configs[1]; -+ unsigned int conf; - unsigned int val; - int ret; - -@@ -115,6 +115,7 @@ int imx_pinconf_set_scu(struct pinctrl_dev *pctldev, unsigned pin_id, - * Set mux and conf together in one IPC call - */ - WARN_ON(num_configs != 2); -+ conf = configs[1]; - - val = conf | BM_PAD_CTL_IFMUX_ENABLE | BM_PAD_CTL_GP_ENABLE; - val |= mux << BP_PAD_CTL_IFMUX; --- -2.39.2 - diff --git a/queue-6.4/pinctrl-microchip-sgpio-check-return-value-of-devm_k.patch b/queue-6.4/pinctrl-microchip-sgpio-check-return-value-of-devm_k.patch deleted file mode 100644 index f95fc8d1057..00000000000 --- a/queue-6.4/pinctrl-microchip-sgpio-check-return-value-of-devm_k.patch +++ /dev/null @@ -1,40 +0,0 @@ -From 7e98894c7d696e22619f36291556062a3a7c9b0c Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Thu, 15 Jun 2023 13:53:32 +0300 -Subject: pinctrl: microchip-sgpio: check return value of devm_kasprintf() - -From: Claudiu Beznea - -[ Upstream commit 310cd4c206cd04696ccbfd1927b5ab6973e8cc8e ] - -devm_kasprintf() returns a pointer to dynamically allocated memory. -Pointer could be NULL in case allocation fails. Check pointer validity. -Identified with coccinelle (kmerr.cocci script). - -Fixes: 7e5ea974e61c ("pinctrl: pinctrl-microchip-sgpio: Add pinctrl driver for Microsemi Serial GPIO") -Signed-off-by: Claudiu Beznea -Reviewed-by: Andy Shevchenko -Link: https://lore.kernel.org/r/20230615105333.585304-3-claudiu.beznea@microchip.com -Signed-off-by: Linus Walleij -Signed-off-by: Sasha Levin ---- - drivers/pinctrl/pinctrl-microchip-sgpio.c | 3 +++ - 1 file changed, 3 insertions(+) - -diff --git a/drivers/pinctrl/pinctrl-microchip-sgpio.c b/drivers/pinctrl/pinctrl-microchip-sgpio.c -index 4794602316e7d..666d8b7cdbad3 100644 ---- a/drivers/pinctrl/pinctrl-microchip-sgpio.c -+++ b/drivers/pinctrl/pinctrl-microchip-sgpio.c -@@ -818,6 +818,9 @@ static int microchip_sgpio_register_bank(struct device *dev, - pctl_desc->name = devm_kasprintf(dev, GFP_KERNEL, "%s-%sput", - dev_name(dev), - bank->is_input ? "in" : "out"); -+ if (!pctl_desc->name) -+ return -ENOMEM; -+ - pctl_desc->pctlops = &sgpio_pctl_ops; - pctl_desc->pmxops = &sgpio_pmx_ops; - pctl_desc->confops = &sgpio_confops; --- -2.39.2 - diff --git a/queue-6.4/pinctrl-npcm7xx-add-missing-check-for-ioremap.patch b/queue-6.4/pinctrl-npcm7xx-add-missing-check-for-ioremap.patch deleted file mode 100644 index 069ffef1d21..00000000000 --- a/queue-6.4/pinctrl-npcm7xx-add-missing-check-for-ioremap.patch +++ /dev/null @@ -1,38 +0,0 @@ -From 577b0c529b2de101403177bfa5ccb7b8f73e5da8 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Wed, 7 Jun 2023 17:58:29 +0800 -Subject: pinctrl: npcm7xx: Add missing check for ioremap - -From: Jiasheng Jiang - -[ Upstream commit ad64639417161e90b30dda00486570eb150aeee5 ] - -Add check for ioremap() and return the error if it fails in order to -guarantee the success of ioremap(). - -Fixes: 3b588e43ee5c ("pinctrl: nuvoton: add NPCM7xx pinctrl and GPIO driver") -Signed-off-by: Jiasheng Jiang -Reviewed-by: Andy Shevchenko -Link: https://lore.kernel.org/r/20230607095829.1345-1-jiasheng@iscas.ac.cn -Signed-off-by: Linus Walleij -Signed-off-by: Sasha Levin ---- - drivers/pinctrl/nuvoton/pinctrl-npcm7xx.c | 2 ++ - 1 file changed, 2 insertions(+) - -diff --git a/drivers/pinctrl/nuvoton/pinctrl-npcm7xx.c b/drivers/pinctrl/nuvoton/pinctrl-npcm7xx.c -index 21e61c2a37988..843ffcd968774 100644 ---- a/drivers/pinctrl/nuvoton/pinctrl-npcm7xx.c -+++ b/drivers/pinctrl/nuvoton/pinctrl-npcm7xx.c -@@ -1884,6 +1884,8 @@ static int npcm7xx_gpio_of(struct npcm7xx_pinctrl *pctrl) - } - - pctrl->gpio_bank[id].base = ioremap(res.start, resource_size(&res)); -+ if (!pctrl->gpio_bank[id].base) -+ return -EINVAL; - - ret = bgpio_init(&pctrl->gpio_bank[id].gc, dev, 4, - pctrl->gpio_bank[id].base + NPCM7XX_GP_N_DIN, --- -2.39.2 - diff --git a/queue-6.4/pinctrl-sunplus-add-check-for-kmalloc.patch b/queue-6.4/pinctrl-sunplus-add-check-for-kmalloc.patch deleted file mode 100644 index 6cfd3925745..00000000000 --- a/queue-6.4/pinctrl-sunplus-add-check-for-kmalloc.patch +++ /dev/null @@ -1,91 +0,0 @@ -From ff6b9a0acf7b0ca0f69b1d7013e2d00f72825cdd Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Sun, 28 May 2023 20:34:37 +0800 -Subject: pinctrl: sunplus: Add check for kmalloc - -From: Wells Lu - -[ Upstream commit a5961bed5429cf1134d7f539b4ed60317012f84d ] - -Fix Smatch static checker warning: -potential null dereference 'configs'. (kmalloc returns null) - -Fixes: aa74c44be19c ("pinctrl: Add driver for Sunplus SP7021") -Signed-off-by: Wells Lu -Reviewed-by: Andy Shevchenko -Link: https://lore.kernel.org/r/1685277277-12209-1-git-send-email-wellslutw@gmail.com -Signed-off-by: Linus Walleij -Signed-off-by: Sasha Levin ---- - drivers/pinctrl/sunplus/sppctl.c | 24 ++++++++++++++++++------ - 1 file changed, 18 insertions(+), 6 deletions(-) - -diff --git a/drivers/pinctrl/sunplus/sppctl.c b/drivers/pinctrl/sunplus/sppctl.c -index 6bbbab3a6fdf3..e91ce5b5d5598 100644 ---- a/drivers/pinctrl/sunplus/sppctl.c -+++ b/drivers/pinctrl/sunplus/sppctl.c -@@ -834,11 +834,6 @@ static int sppctl_dt_node_to_map(struct pinctrl_dev *pctldev, struct device_node - int i, size = 0; - - list = of_get_property(np_config, "sunplus,pins", &size); -- -- if (nmG <= 0) -- nmG = 0; -- -- parent = of_get_parent(np_config); - *num_maps = size / sizeof(*list); - - /* -@@ -866,10 +861,14 @@ static int sppctl_dt_node_to_map(struct pinctrl_dev *pctldev, struct device_node - } - } - -+ if (nmG <= 0) -+ nmG = 0; -+ - *map = kcalloc(*num_maps + nmG, sizeof(**map), GFP_KERNEL); -- if (*map == NULL) -+ if (!(*map)) - return -ENOMEM; - -+ parent = of_get_parent(np_config); - for (i = 0; i < (*num_maps); i++) { - dt_pin = be32_to_cpu(list[i]); - pin_num = FIELD_GET(GENMASK(31, 24), dt_pin); -@@ -883,6 +882,8 @@ static int sppctl_dt_node_to_map(struct pinctrl_dev *pctldev, struct device_node - (*map)[i].data.configs.num_configs = 1; - (*map)[i].data.configs.group_or_pin = pin_get_name(pctldev, pin_num); - configs = kmalloc(sizeof(*configs), GFP_KERNEL); -+ if (!configs) -+ goto sppctl_map_err; - *configs = FIELD_GET(GENMASK(7, 0), dt_pin); - (*map)[i].data.configs.configs = configs; - -@@ -896,6 +897,8 @@ static int sppctl_dt_node_to_map(struct pinctrl_dev *pctldev, struct device_node - (*map)[i].data.configs.num_configs = 1; - (*map)[i].data.configs.group_or_pin = pin_get_name(pctldev, pin_num); - configs = kmalloc(sizeof(*configs), GFP_KERNEL); -+ if (!configs) -+ goto sppctl_map_err; - *configs = SPPCTL_IOP_CONFIGS; - (*map)[i].data.configs.configs = configs; - -@@ -965,6 +968,15 @@ static int sppctl_dt_node_to_map(struct pinctrl_dev *pctldev, struct device_node - of_node_put(parent); - dev_dbg(pctldev->dev, "%d pins mapped\n", *num_maps); - return 0; -+ -+sppctl_map_err: -+ for (i = 0; i < (*num_maps); i++) -+ if (((*map)[i].type == PIN_MAP_TYPE_CONFIGS_PIN) && -+ (*map)[i].data.configs.configs) -+ kfree((*map)[i].data.configs.configs); -+ kfree(*map); -+ of_node_put(parent); -+ return -ENOMEM; - } - - static const struct pinctrl_ops sppctl_pctl_ops = { --- -2.39.2 - diff --git a/queue-6.4/pinctrl-sunplus-add-check-for-kmalloc.patch-3132 b/queue-6.4/pinctrl-sunplus-add-check-for-kmalloc.patch-3132 deleted file mode 100644 index 586c634434d..00000000000 --- a/queue-6.4/pinctrl-sunplus-add-check-for-kmalloc.patch-3132 +++ /dev/null @@ -1,44 +0,0 @@ -From d515b3bd11ab67c34bd6e187f2da8dbd78df3154 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Sun, 28 May 2023 20:34:37 +0800 -Subject: pinctrl:sunplus: Add check for kmalloc - -From: Wells Lu - -[ Upstream commit 73f8ce7f961afcb3be49352efeb7c26cc1c00cc4 ] - -Fix Smatch static checker warning: -potential null dereference 'configs'. (kmalloc returns null) - -Changes in v2: -1. Add free allocated memory before returned -ENOMEM. -2. Add call of_node_put() before returned -ENOMEM. - -Fixes: aa74c44be19c ("pinctrl: Add driver for Sunplus SP7021") -Signed-off-by: Wells Lu -Reviewed-by: Andy Shevchenko -Link: https://lore.kernel.org/r/1685277277-12209-1-git-send-email-wellslutw@gmail.com -[Rebased on the patch from Lu Hongfei] -Signed-off-by: Linus Walleij -Signed-off-by: Sasha Levin ---- - drivers/pinctrl/sunplus/sppctl.c | 3 +-- - 1 file changed, 1 insertion(+), 2 deletions(-) - -diff --git a/drivers/pinctrl/sunplus/sppctl.c b/drivers/pinctrl/sunplus/sppctl.c -index e91ce5b5d5598..150996949ede7 100644 ---- a/drivers/pinctrl/sunplus/sppctl.c -+++ b/drivers/pinctrl/sunplus/sppctl.c -@@ -971,8 +971,7 @@ static int sppctl_dt_node_to_map(struct pinctrl_dev *pctldev, struct device_node - - sppctl_map_err: - for (i = 0; i < (*num_maps); i++) -- if (((*map)[i].type == PIN_MAP_TYPE_CONFIGS_PIN) && -- (*map)[i].data.configs.configs) -+ if ((*map)[i].type == PIN_MAP_TYPE_CONFIGS_PIN) - kfree((*map)[i].data.configs.configs); - kfree(*map); - of_node_put(parent); --- -2.39.2 - diff --git a/queue-6.4/pinctrl-tegra-duplicate-pinmux-functions-table.patch b/queue-6.4/pinctrl-tegra-duplicate-pinmux-functions-table.patch deleted file mode 100644 index 7f2ce6f1a83..00000000000 --- a/queue-6.4/pinctrl-tegra-duplicate-pinmux-functions-table.patch +++ /dev/null @@ -1,214 +0,0 @@ -From 6ef5a5d5bc1db1d5deaab60f4ee4ef6be027f01b Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Tue, 30 May 2023 12:53:07 +0200 -Subject: pinctrl: tegra: Duplicate pinmux functions table - -From: Thierry Reding - -[ Upstream commit fad57233501beb5bd25f037cb9128a533e710600 ] - -The function table is filled with group information based on other -instance-specific data at runtime. However, the function table can be -shared between multiple instances, causing the ->probe() function for -one instance to overwrite the table of a previously probed instance. - -Fix this by sharing only the function names and allocating a separate -function table for each instance. - -Fixes: 5a0047360743 ("pinctrl: tegra: Separate Tegra194 instances") -Signed-off-by: Thierry Reding -Link: https://lore.kernel.org/r/20230530105308.1292852-1-thierry.reding@gmail.com -Signed-off-by: Linus Walleij -Signed-off-by: Sasha Levin ---- - drivers/pinctrl/tegra/pinctrl-tegra.c | 15 +++++++++++---- - drivers/pinctrl/tegra/pinctrl-tegra.h | 3 ++- - drivers/pinctrl/tegra/pinctrl-tegra114.c | 7 ++----- - drivers/pinctrl/tegra/pinctrl-tegra124.c | 7 ++----- - drivers/pinctrl/tegra/pinctrl-tegra194.c | 7 ++----- - drivers/pinctrl/tegra/pinctrl-tegra20.c | 7 ++----- - drivers/pinctrl/tegra/pinctrl-tegra210.c | 7 ++----- - drivers/pinctrl/tegra/pinctrl-tegra30.c | 7 ++----- - 8 files changed, 25 insertions(+), 35 deletions(-) - -diff --git a/drivers/pinctrl/tegra/pinctrl-tegra.c b/drivers/pinctrl/tegra/pinctrl-tegra.c -index 1729b7ddfa946..21e08fbd1df0e 100644 ---- a/drivers/pinctrl/tegra/pinctrl-tegra.c -+++ b/drivers/pinctrl/tegra/pinctrl-tegra.c -@@ -232,7 +232,7 @@ static const char *tegra_pinctrl_get_func_name(struct pinctrl_dev *pctldev, - { - struct tegra_pmx *pmx = pinctrl_dev_get_drvdata(pctldev); - -- return pmx->soc->functions[function].name; -+ return pmx->functions[function].name; - } - - static int tegra_pinctrl_get_func_groups(struct pinctrl_dev *pctldev, -@@ -242,8 +242,8 @@ static int tegra_pinctrl_get_func_groups(struct pinctrl_dev *pctldev, - { - struct tegra_pmx *pmx = pinctrl_dev_get_drvdata(pctldev); - -- *groups = pmx->soc->functions[function].groups; -- *num_groups = pmx->soc->functions[function].ngroups; -+ *groups = pmx->functions[function].groups; -+ *num_groups = pmx->functions[function].ngroups; - - return 0; - } -@@ -795,10 +795,17 @@ int tegra_pinctrl_probe(struct platform_device *pdev, - if (!pmx->group_pins) - return -ENOMEM; - -+ pmx->functions = devm_kcalloc(&pdev->dev, pmx->soc->nfunctions, -+ sizeof(*pmx->functions), GFP_KERNEL); -+ if (!pmx->functions) -+ return -ENOMEM; -+ - group_pins = pmx->group_pins; -+ - for (fn = 0; fn < soc_data->nfunctions; fn++) { -- struct tegra_function *func = &soc_data->functions[fn]; -+ struct tegra_function *func = &pmx->functions[fn]; - -+ func->name = pmx->soc->functions[fn]; - func->groups = group_pins; - - for (gn = 0; gn < soc_data->ngroups; gn++) { -diff --git a/drivers/pinctrl/tegra/pinctrl-tegra.h b/drivers/pinctrl/tegra/pinctrl-tegra.h -index 6130cba7cce54..b3289bdf727d8 100644 ---- a/drivers/pinctrl/tegra/pinctrl-tegra.h -+++ b/drivers/pinctrl/tegra/pinctrl-tegra.h -@@ -13,6 +13,7 @@ struct tegra_pmx { - struct pinctrl_dev *pctl; - - const struct tegra_pinctrl_soc_data *soc; -+ struct tegra_function *functions; - const char **group_pins; - - struct pinctrl_gpio_range gpio_range; -@@ -191,7 +192,7 @@ struct tegra_pinctrl_soc_data { - const char *gpio_compatible; - const struct pinctrl_pin_desc *pins; - unsigned npins; -- struct tegra_function *functions; -+ const char * const *functions; - unsigned nfunctions; - const struct tegra_pingroup *groups; - unsigned ngroups; -diff --git a/drivers/pinctrl/tegra/pinctrl-tegra114.c b/drivers/pinctrl/tegra/pinctrl-tegra114.c -index e72ab1eb23983..3d425b2018e78 100644 ---- a/drivers/pinctrl/tegra/pinctrl-tegra114.c -+++ b/drivers/pinctrl/tegra/pinctrl-tegra114.c -@@ -1452,12 +1452,9 @@ enum tegra_mux { - TEGRA_MUX_VI_ALT3, - }; - --#define FUNCTION(fname) \ -- { \ -- .name = #fname, \ -- } -+#define FUNCTION(fname) #fname - --static struct tegra_function tegra114_functions[] = { -+static const char * const tegra114_functions[] = { - FUNCTION(blink), - FUNCTION(cec), - FUNCTION(cldvfs), -diff --git a/drivers/pinctrl/tegra/pinctrl-tegra124.c b/drivers/pinctrl/tegra/pinctrl-tegra124.c -index 26096c6b967e2..2a50c5c7516c3 100644 ---- a/drivers/pinctrl/tegra/pinctrl-tegra124.c -+++ b/drivers/pinctrl/tegra/pinctrl-tegra124.c -@@ -1611,12 +1611,9 @@ enum tegra_mux { - TEGRA_MUX_VIMCLK2_ALT, - }; - --#define FUNCTION(fname) \ -- { \ -- .name = #fname, \ -- } -+#define FUNCTION(fname) #fname - --static struct tegra_function tegra124_functions[] = { -+static const char * const tegra124_functions[] = { - FUNCTION(blink), - FUNCTION(ccla), - FUNCTION(cec), -diff --git a/drivers/pinctrl/tegra/pinctrl-tegra194.c b/drivers/pinctrl/tegra/pinctrl-tegra194.c -index 277973c884344..69f58df628977 100644 ---- a/drivers/pinctrl/tegra/pinctrl-tegra194.c -+++ b/drivers/pinctrl/tegra/pinctrl-tegra194.c -@@ -1189,12 +1189,9 @@ enum tegra_mux_dt { - }; - - /* Make list of each function name */ --#define TEGRA_PIN_FUNCTION(lid) \ -- { \ -- .name = #lid, \ -- } -+#define TEGRA_PIN_FUNCTION(lid) #lid - --static struct tegra_function tegra194_functions[] = { -+static const char * const tegra194_functions[] = { - TEGRA_PIN_FUNCTION(rsvd0), - TEGRA_PIN_FUNCTION(rsvd1), - TEGRA_PIN_FUNCTION(rsvd2), -diff --git a/drivers/pinctrl/tegra/pinctrl-tegra20.c b/drivers/pinctrl/tegra/pinctrl-tegra20.c -index 0dc2cf0d05b1e..737fc2000f66b 100644 ---- a/drivers/pinctrl/tegra/pinctrl-tegra20.c -+++ b/drivers/pinctrl/tegra/pinctrl-tegra20.c -@@ -1889,12 +1889,9 @@ enum tegra_mux { - TEGRA_MUX_XIO, - }; - --#define FUNCTION(fname) \ -- { \ -- .name = #fname, \ -- } -+#define FUNCTION(fname) #fname - --static struct tegra_function tegra20_functions[] = { -+static const char * const tegra20_functions[] = { - FUNCTION(ahb_clk), - FUNCTION(apb_clk), - FUNCTION(audio_sync), -diff --git a/drivers/pinctrl/tegra/pinctrl-tegra210.c b/drivers/pinctrl/tegra/pinctrl-tegra210.c -index b480f607fa16f..9bb29146dfff7 100644 ---- a/drivers/pinctrl/tegra/pinctrl-tegra210.c -+++ b/drivers/pinctrl/tegra/pinctrl-tegra210.c -@@ -1185,12 +1185,9 @@ enum tegra_mux { - TEGRA_MUX_VIMCLK2, - }; - --#define FUNCTION(fname) \ -- { \ -- .name = #fname, \ -- } -+#define FUNCTION(fname) #fname - --static struct tegra_function tegra210_functions[] = { -+static const char * const tegra210_functions[] = { - FUNCTION(aud), - FUNCTION(bcl), - FUNCTION(blink), -diff --git a/drivers/pinctrl/tegra/pinctrl-tegra30.c b/drivers/pinctrl/tegra/pinctrl-tegra30.c -index 7299a371827f1..de5aa2d4d28d3 100644 ---- a/drivers/pinctrl/tegra/pinctrl-tegra30.c -+++ b/drivers/pinctrl/tegra/pinctrl-tegra30.c -@@ -2010,12 +2010,9 @@ enum tegra_mux { - TEGRA_MUX_VI_ALT3, - }; - --#define FUNCTION(fname) \ -- { \ -- .name = #fname, \ -- } -+#define FUNCTION(fname) #fname - --static struct tegra_function tegra30_functions[] = { -+static const char * const tegra30_functions[] = { - FUNCTION(blink), - FUNCTION(cec), - FUNCTION(clk_12m_out), --- -2.39.2 - diff --git a/queue-6.4/platform-x86-dell-dell-rbtn-fix-resources-leaking-on.patch b/queue-6.4/platform-x86-dell-dell-rbtn-fix-resources-leaking-on.patch deleted file mode 100644 index 9814b9c4802..00000000000 --- a/queue-6.4/platform-x86-dell-dell-rbtn-fix-resources-leaking-on.patch +++ /dev/null @@ -1,83 +0,0 @@ -From 3766a5f24dee1b3b317684aa6220914221e61d21 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Tue, 13 Jun 2023 11:43:10 +0300 -Subject: platform/x86/dell/dell-rbtn: Fix resources leaking on error path -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -From: Michal Wilczynski - -[ Upstream commit 966cca72ab20289083521a385fa56035d85a222d ] - -Currently rbtn_add() in case of failure is leaking resources. Fix this -by adding a proper rollback. Move devm_kzalloc() before rbtn_acquire(), -so it doesn't require rollback in case of failure. While at it, remove -unnecessary assignment of NULL to device->driver_data and unnecessary -whitespace, plus add a break for the default case in a switch. - -Suggested-by: Ilpo Järvinen -Suggested-by: Pali Rohár -Fixes: 817a5cdb40c8 ("dell-rbtn: Dell Airplane Mode Switch driver") -Signed-off-by: Michal Wilczynski -Reviewed-by: Andy Shevchenko -Acked-by: Rafael J. Wysocki -Reviewed-by: Pali Rohár -Link: https://lore.kernel.org/r/20230613084310.2775896-1-michal.wilczynski@intel.com -Reviewed-by: Hans de Goede -Signed-off-by: Hans de Goede -Signed-off-by: Sasha Levin ---- - drivers/platform/x86/dell/dell-rbtn.c | 13 +++++++------ - 1 file changed, 7 insertions(+), 6 deletions(-) - -diff --git a/drivers/platform/x86/dell/dell-rbtn.c b/drivers/platform/x86/dell/dell-rbtn.c -index aa0e6c9074942..c8fcb537fd65d 100644 ---- a/drivers/platform/x86/dell/dell-rbtn.c -+++ b/drivers/platform/x86/dell/dell-rbtn.c -@@ -395,16 +395,16 @@ static int rbtn_add(struct acpi_device *device) - return -EINVAL; - } - -+ rbtn_data = devm_kzalloc(&device->dev, sizeof(*rbtn_data), GFP_KERNEL); -+ if (!rbtn_data) -+ return -ENOMEM; -+ - ret = rbtn_acquire(device, true); - if (ret < 0) { - dev_err(&device->dev, "Cannot enable device\n"); - return ret; - } - -- rbtn_data = devm_kzalloc(&device->dev, sizeof(*rbtn_data), GFP_KERNEL); -- if (!rbtn_data) -- return -ENOMEM; -- - rbtn_data->type = type; - device->driver_data = rbtn_data; - -@@ -420,10 +420,12 @@ static int rbtn_add(struct acpi_device *device) - break; - default: - ret = -EINVAL; -+ break; - } -+ if (ret) -+ rbtn_acquire(device, false); - - return ret; -- - } - - static void rbtn_remove(struct acpi_device *device) -@@ -442,7 +444,6 @@ static void rbtn_remove(struct acpi_device *device) - } - - rbtn_acquire(device, false); -- device->driver_data = NULL; - } - - static void rbtn_notify(struct acpi_device *device, u32 event) --- -2.39.2 - diff --git a/queue-6.4/platform-x86-intel-pmc-add-resume-callback.patch b/queue-6.4/platform-x86-intel-pmc-add-resume-callback.patch deleted file mode 100644 index 05a12381ae5..00000000000 --- a/queue-6.4/platform-x86-intel-pmc-add-resume-callback.patch +++ /dev/null @@ -1,93 +0,0 @@ -From bfbeb0ecd0ef30ea918d561ff55b2c16007e9764 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Wed, 7 Jun 2023 16:38:48 -0700 -Subject: platform/x86/intel/pmc: Add resume callback -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -From: David E. Box - -[ Upstream commit 801e5dc9853fcc36164c502456078145d72b23c5 ] - -Add a resume callback to perform platform specific functions during resume -from suspend. - -Signed-off-by: David E. Box -Link: https://lore.kernel.org/r/20230607233849.239047-1-david.e.box@linux.intel.com -Reviewed-by: Ilpo Järvinen -Reviewed-by: Hans de Goede -Signed-off-by: Hans de Goede -Stable-dep-of: f2b689ab2f8c ("platform/x86/intel/pmc/mtl: Put devices in D3 during resume") -Signed-off-by: Sasha Levin ---- - drivers/platform/x86/intel/pmc/core.c | 14 ++++++++++++-- - drivers/platform/x86/intel/pmc/core.h | 3 +++ - 2 files changed, 15 insertions(+), 2 deletions(-) - -diff --git a/drivers/platform/x86/intel/pmc/core.c b/drivers/platform/x86/intel/pmc/core.c -index b8711330e4112..ed91ef9d1cf6c 100644 ---- a/drivers/platform/x86/intel/pmc/core.c -+++ b/drivers/platform/x86/intel/pmc/core.c -@@ -1222,11 +1222,11 @@ static inline bool pmc_core_is_s0ix_failed(struct pmc_dev *pmcdev) - return false; - } - --static __maybe_unused int pmc_core_resume(struct device *dev) -+int pmc_core_resume_common(struct pmc_dev *pmcdev) - { -- struct pmc_dev *pmcdev = dev_get_drvdata(dev); - const struct pmc_bit_map **maps = pmcdev->map->lpm_sts; - int offset = pmcdev->map->lpm_status_offset; -+ struct device *dev = &pmcdev->pdev->dev; - - /* Check if the syspend used S0ix */ - if (pm_suspend_via_firmware()) -@@ -1256,6 +1256,16 @@ static __maybe_unused int pmc_core_resume(struct device *dev) - return 0; - } - -+static __maybe_unused int pmc_core_resume(struct device *dev) -+{ -+ struct pmc_dev *pmcdev = dev_get_drvdata(dev); -+ -+ if (pmcdev->resume) -+ return pmcdev->resume(pmcdev); -+ -+ return pmc_core_resume_common(pmcdev); -+} -+ - static const struct dev_pm_ops pmc_core_pm_ops = { - SET_LATE_SYSTEM_SLEEP_PM_OPS(pmc_core_suspend, pmc_core_resume) - }; -diff --git a/drivers/platform/x86/intel/pmc/core.h b/drivers/platform/x86/intel/pmc/core.h -index 9ca9b97467193..7c95586e742be 100644 ---- a/drivers/platform/x86/intel/pmc/core.h -+++ b/drivers/platform/x86/intel/pmc/core.h -@@ -327,6 +327,7 @@ struct pmc_reg_map { - * @lpm_en_modes: Array of enabled modes from lowest to highest priority - * @lpm_req_regs: List of substate requirements - * @core_configure: Function pointer to configure the platform -+ * @resume: Function to perform platform specific resume - * - * pmc_dev contains info about power management controller device. - */ -@@ -345,6 +346,7 @@ struct pmc_dev { - int lpm_en_modes[LPM_MAX_NUM_MODES]; - u32 *lpm_req_regs; - void (*core_configure)(struct pmc_dev *pmcdev); -+ int (*resume)(struct pmc_dev *pmcdev); - }; - - extern const struct pmc_bit_map msr_map[]; -@@ -398,6 +400,7 @@ extern const struct pmc_reg_map mtl_reg_map; - extern void pmc_core_get_tgl_lpm_reqs(struct platform_device *pdev); - extern int pmc_core_send_ltr_ignore(struct pmc_dev *pmcdev, u32 value); - -+int pmc_core_resume_common(struct pmc_dev *pmcdev); - void spt_core_init(struct pmc_dev *pmcdev); - void cnp_core_init(struct pmc_dev *pmcdev); - void icl_core_init(struct pmc_dev *pmcdev); --- -2.39.2 - diff --git a/queue-6.4/platform-x86-intel-pmc-mtl-put-devices-in-d3-during-.patch b/queue-6.4/platform-x86-intel-pmc-mtl-put-devices-in-d3-during-.patch deleted file mode 100644 index 76b3dbd77c7..00000000000 --- a/queue-6.4/platform-x86-intel-pmc-mtl-put-devices-in-d3-during-.patch +++ /dev/null @@ -1,71 +0,0 @@ -From 1fe80b7c543a857383b7fa8d8ae4b20e1cb1368a Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Wed, 7 Jun 2023 16:38:49 -0700 -Subject: platform/x86/intel/pmc/mtl: Put devices in D3 during resume -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -From: David E. Box - -[ Upstream commit f2b689ab2f8cc089cc7659c323f282e6a1fb6d64 ] - -An earlier commit placed some driverless devices in D3 during boot so that -they don't block package cstate entry on Meteor Lake. Also place these -devices in D3 after resume from suspend. - -Fixes: 336ba968d3e3 ("platform/x86/intel/pmc/mtl: Put GNA/IPU/VPU devices in D3") -Signed-off-by: David E. Box -Link: https://lore.kernel.org/r/20230607233849.239047-2-david.e.box@linux.intel.com -Reviewed-by: Ilpo Järvinen -Reviewed-by: Hans de Goede -Signed-off-by: Hans de Goede -Signed-off-by: Sasha Levin ---- - drivers/platform/x86/intel/pmc/mtl.c | 27 ++++++++++++++++++++------- - 1 file changed, 20 insertions(+), 7 deletions(-) - -diff --git a/drivers/platform/x86/intel/pmc/mtl.c b/drivers/platform/x86/intel/pmc/mtl.c -index e8cc156412ce5..2b00ad9da621b 100644 ---- a/drivers/platform/x86/intel/pmc/mtl.c -+++ b/drivers/platform/x86/intel/pmc/mtl.c -@@ -68,16 +68,29 @@ static void mtl_set_device_d3(unsigned int device) - } - } - -+/* -+ * Set power state of select devices that do not have drivers to D3 -+ * so that they do not block Package C entry. -+ */ -+static void mtl_d3_fixup(void) -+{ -+ mtl_set_device_d3(MTL_GNA_PCI_DEV); -+ mtl_set_device_d3(MTL_IPU_PCI_DEV); -+ mtl_set_device_d3(MTL_VPU_PCI_DEV); -+} -+ -+static int mtl_resume(struct pmc_dev *pmcdev) -+{ -+ mtl_d3_fixup(); -+ return pmc_core_resume_common(pmcdev); -+} -+ - void mtl_core_init(struct pmc_dev *pmcdev) - { - pmcdev->map = &mtl_reg_map; - pmcdev->core_configure = mtl_core_configure; - -- /* -- * Set power state of select devices that do not have drivers to D3 -- * so that they do not block Package C entry. -- */ -- mtl_set_device_d3(MTL_GNA_PCI_DEV); -- mtl_set_device_d3(MTL_IPU_PCI_DEV); -- mtl_set_device_d3(MTL_VPU_PCI_DEV); -+ mtl_d3_fixup(); -+ -+ pmcdev->resume = mtl_resume; - } --- -2.39.2 - diff --git a/queue-6.4/platform-x86-intel-pmc-remove-meteor-lake-s-platform.patch b/queue-6.4/platform-x86-intel-pmc-remove-meteor-lake-s-platform.patch deleted file mode 100644 index 5c4b8439fc9..00000000000 --- a/queue-6.4/platform-x86-intel-pmc-remove-meteor-lake-s-platform.patch +++ /dev/null @@ -1,40 +0,0 @@ -From 7525f8bcd4e91447ff10c1e16bee64b73063c9a5 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Wed, 31 May 2023 17:47:06 -0700 -Subject: platform/x86:intel/pmc: Remove Meteor Lake S platform support - -From: Xi Pardee - -[ Upstream commit 416a87c972b978d71ab828442d1d48e3bd194855 ] - -commit c5ad454a12c6 ("platform/x86: intel/pmc/core: Add Meteor Lake -support to pmc core driver") was supposed to add support for Meter -Lake P/M and mistakenly added support for Meteor Lake S instead. Meteor -Lake P/M support was added later and MTL-S support needs to be removed -since its currently assigned to the wrong register maps. - -Fixes: c5ad454a12c6 ("platform/x86: intel/pmc/core: Add Meteor Lake support to pmc core driver") -Signed-off-by: Xi Pardee -Signed-off-by: David E. Box -Link: https://lore.kernel.org/r/20230601004706.871528-1-xi.pardee@intel.com -Signed-off-by: Hans de Goede -Signed-off-by: Sasha Levin ---- - drivers/platform/x86/intel/pmc/core.c | 1 - - 1 file changed, 1 deletion(-) - -diff --git a/drivers/platform/x86/intel/pmc/core.c b/drivers/platform/x86/intel/pmc/core.c -index da6e7206d38b5..b8711330e4112 100644 ---- a/drivers/platform/x86/intel/pmc/core.c -+++ b/drivers/platform/x86/intel/pmc/core.c -@@ -1039,7 +1039,6 @@ static const struct x86_cpu_id intel_pmc_core_ids[] = { - X86_MATCH_INTEL_FAM6_MODEL(RAPTORLAKE_P, tgl_core_init), - X86_MATCH_INTEL_FAM6_MODEL(RAPTORLAKE, adl_core_init), - X86_MATCH_INTEL_FAM6_MODEL(RAPTORLAKE_S, adl_core_init), -- X86_MATCH_INTEL_FAM6_MODEL(METEORLAKE, mtl_core_init), - X86_MATCH_INTEL_FAM6_MODEL(METEORLAKE_L, mtl_core_init), - {} - }; --- -2.39.2 - diff --git a/queue-6.4/platform-x86-intel-pmc-update-maps-for-meteor-lake-p.patch b/queue-6.4/platform-x86-intel-pmc-update-maps-for-meteor-lake-p.patch deleted file mode 100644 index 985928f152a..00000000000 --- a/queue-6.4/platform-x86-intel-pmc-update-maps-for-meteor-lake-p.patch +++ /dev/null @@ -1,560 +0,0 @@ -From d04675cc30997b99054cdcc42868a210cb235340 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Tue, 13 Jun 2023 15:53:40 -0700 -Subject: platform/x86:intel/pmc: Update maps for Meteor Lake P/M platforms -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -From: Xi Pardee - -[ Upstream commit 9682cfd1973d01e43c2764c662e6d3291ddf770d ] - -Fix the IP name errors in the register maps used by the following -debugfs attributes in the Meteor Lake SOC-M PMC. - -pfear_sts -lpm_sts -ltr_show - -Fixes: c5ad454a12c6 ("platform/x86: intel/pmc/core: Add Meteor Lake support to pmc core driver") -Signed-off-by: Xi Pardee -Signed-off-by: Rajvi Jingar -Reviewed-by: Ilpo Järvinen -Link: https://lore.kernel.org/r/20230613225347.2720665-2-rajvi.jingar@linux.intel.com -Signed-off-by: Hans de Goede -Signed-off-by: Sasha Levin ---- - drivers/platform/x86/intel/pmc/core.h | 28 +- - drivers/platform/x86/intel/pmc/mtl.c | 448 +++++++++++++++++++++++++- - 2 files changed, 466 insertions(+), 10 deletions(-) - -diff --git a/drivers/platform/x86/intel/pmc/core.h b/drivers/platform/x86/intel/pmc/core.h -index 7c95586e742be..86d38270000a7 100644 ---- a/drivers/platform/x86/intel/pmc/core.h -+++ b/drivers/platform/x86/intel/pmc/core.h -@@ -249,6 +249,14 @@ enum ppfear_regs { - #define MTL_LPM_STATUS_LATCH_EN_OFFSET 0x16F8 - #define MTL_LPM_STATUS_OFFSET 0x1700 - #define MTL_LPM_LIVE_STATUS_OFFSET 0x175C -+#define MTL_PMC_LTR_IOE_PMC 0x1C0C -+#define MTL_PMC_LTR_ESE 0x1BAC -+#define MTL_SOCM_NUM_IP_IGN_ALLOWED 25 -+#define MTL_SOC_PMC_MMIO_REG_LEN 0x2708 -+#define MTL_PMC_LTR_SPG 0x1B74 -+ -+/* Meteor Lake PGD PFET Enable Ack Status */ -+#define MTL_SOCM_PPFEAR_NUM_ENTRIES 8 - - extern const char *pmc_lpm_modes[]; - -@@ -395,7 +403,25 @@ extern const struct pmc_bit_map adl_vnn_req_status_3_map[]; - extern const struct pmc_bit_map adl_vnn_misc_status_map[]; - extern const struct pmc_bit_map *adl_lpm_maps[]; - extern const struct pmc_reg_map adl_reg_map; --extern const struct pmc_reg_map mtl_reg_map; -+extern const struct pmc_bit_map mtl_socm_pfear_map[]; -+extern const struct pmc_bit_map *ext_mtl_socm_pfear_map[]; -+extern const struct pmc_bit_map mtl_socm_ltr_show_map[]; -+extern const struct pmc_bit_map mtl_socm_clocksource_status_map[]; -+extern const struct pmc_bit_map mtl_socm_power_gating_status_0_map[]; -+extern const struct pmc_bit_map mtl_socm_power_gating_status_1_map[]; -+extern const struct pmc_bit_map mtl_socm_power_gating_status_2_map[]; -+extern const struct pmc_bit_map mtl_socm_d3_status_0_map[]; -+extern const struct pmc_bit_map mtl_socm_d3_status_1_map[]; -+extern const struct pmc_bit_map mtl_socm_d3_status_2_map[]; -+extern const struct pmc_bit_map mtl_socm_d3_status_3_map[]; -+extern const struct pmc_bit_map mtl_socm_vnn_req_status_0_map[]; -+extern const struct pmc_bit_map mtl_socm_vnn_req_status_1_map[]; -+extern const struct pmc_bit_map mtl_socm_vnn_req_status_2_map[]; -+extern const struct pmc_bit_map mtl_socm_vnn_req_status_3_map[]; -+extern const struct pmc_bit_map mtl_socm_vnn_misc_status_map[]; -+extern const struct pmc_bit_map mtl_socm_signal_status_map[]; -+extern const struct pmc_bit_map *mtl_socm_lpm_maps[]; -+extern const struct pmc_reg_map mtl_socm_reg_map; - - extern void pmc_core_get_tgl_lpm_reqs(struct platform_device *pdev); - extern int pmc_core_send_ltr_ignore(struct pmc_dev *pmcdev, u32 value); -diff --git a/drivers/platform/x86/intel/pmc/mtl.c b/drivers/platform/x86/intel/pmc/mtl.c -index 2b00ad9da621b..cdcf743b5e2c7 100644 ---- a/drivers/platform/x86/intel/pmc/mtl.c -+++ b/drivers/platform/x86/intel/pmc/mtl.c -@@ -11,28 +11,458 @@ - #include - #include "core.h" - --const struct pmc_reg_map mtl_reg_map = { -- .pfear_sts = ext_tgl_pfear_map, -+/* -+ * Die Mapping to Product. -+ * Product SOCDie IOEDie PCHDie -+ * MTL-M SOC-M IOE-M None -+ * MTL-P SOC-M IOE-P None -+ * MTL-S SOC-S IOE-P PCH-S -+ */ -+ -+const struct pmc_bit_map mtl_socm_pfear_map[] = { -+ {"PMC", BIT(0)}, -+ {"OPI", BIT(1)}, -+ {"SPI", BIT(2)}, -+ {"XHCI", BIT(3)}, -+ {"SPA", BIT(4)}, -+ {"SPB", BIT(5)}, -+ {"SPC", BIT(6)}, -+ {"GBE", BIT(7)}, -+ -+ {"SATA", BIT(0)}, -+ {"DSP0", BIT(1)}, -+ {"DSP1", BIT(2)}, -+ {"DSP2", BIT(3)}, -+ {"DSP3", BIT(4)}, -+ {"SPD", BIT(5)}, -+ {"LPSS", BIT(6)}, -+ {"LPC", BIT(7)}, -+ -+ {"SMB", BIT(0)}, -+ {"ISH", BIT(1)}, -+ {"P2SB", BIT(2)}, -+ {"NPK_VNN", BIT(3)}, -+ {"SDX", BIT(4)}, -+ {"SPE", BIT(5)}, -+ {"FUSE", BIT(6)}, -+ {"SBR8", BIT(7)}, -+ -+ {"RSVD24", BIT(0)}, -+ {"OTG", BIT(1)}, -+ {"EXI", BIT(2)}, -+ {"CSE", BIT(3)}, -+ {"CSME_KVM", BIT(4)}, -+ {"CSME_PMT", BIT(5)}, -+ {"CSME_CLINK", BIT(6)}, -+ {"CSME_PTIO", BIT(7)}, -+ -+ {"CSME_USBR", BIT(0)}, -+ {"CSME_SUSRAM", BIT(1)}, -+ {"CSME_SMT1", BIT(2)}, -+ {"RSVD35", BIT(3)}, -+ {"CSME_SMS2", BIT(4)}, -+ {"CSME_SMS", BIT(5)}, -+ {"CSME_RTC", BIT(6)}, -+ {"CSME_PSF", BIT(7)}, -+ -+ {"SBR0", BIT(0)}, -+ {"SBR1", BIT(1)}, -+ {"SBR2", BIT(2)}, -+ {"SBR3", BIT(3)}, -+ {"SBR4", BIT(4)}, -+ {"SBR5", BIT(5)}, -+ {"RSVD46", BIT(6)}, -+ {"PSF1", BIT(7)}, -+ -+ {"PSF2", BIT(0)}, -+ {"PSF3", BIT(1)}, -+ {"PSF4", BIT(2)}, -+ {"CNVI", BIT(3)}, -+ {"UFSX2", BIT(4)}, -+ {"EMMC", BIT(5)}, -+ {"SPF", BIT(6)}, -+ {"SBR6", BIT(7)}, -+ -+ {"SBR7", BIT(0)}, -+ {"NPK_AON", BIT(1)}, -+ {"HDA4", BIT(2)}, -+ {"HDA5", BIT(3)}, -+ {"HDA6", BIT(4)}, -+ {"PSF6", BIT(5)}, -+ {"RSVD62", BIT(6)}, -+ {"RSVD63", BIT(7)}, -+ {} -+}; -+ -+const struct pmc_bit_map *ext_mtl_socm_pfear_map[] = { -+ mtl_socm_pfear_map, -+ NULL -+}; -+ -+const struct pmc_bit_map mtl_socm_ltr_show_map[] = { -+ {"SOUTHPORT_A", CNP_PMC_LTR_SPA}, -+ {"SOUTHPORT_B", CNP_PMC_LTR_SPB}, -+ {"SATA", CNP_PMC_LTR_SATA}, -+ {"GIGABIT_ETHERNET", CNP_PMC_LTR_GBE}, -+ {"XHCI", CNP_PMC_LTR_XHCI}, -+ {"SOUTHPORT_F", ADL_PMC_LTR_SPF}, -+ {"ME", CNP_PMC_LTR_ME}, -+ {"SATA1", CNP_PMC_LTR_EVA}, -+ {"SOUTHPORT_C", CNP_PMC_LTR_SPC}, -+ {"HD_AUDIO", CNP_PMC_LTR_AZ}, -+ {"CNV", CNP_PMC_LTR_CNV}, -+ {"LPSS", CNP_PMC_LTR_LPSS}, -+ {"SOUTHPORT_D", CNP_PMC_LTR_SPD}, -+ {"SOUTHPORT_E", CNP_PMC_LTR_SPE}, -+ {"SATA2", CNP_PMC_LTR_CAM}, -+ {"ESPI", CNP_PMC_LTR_ESPI}, -+ {"SCC", CNP_PMC_LTR_SCC}, -+ {"ISH", CNP_PMC_LTR_ISH}, -+ {"UFSX2", CNP_PMC_LTR_UFSX2}, -+ {"EMMC", CNP_PMC_LTR_EMMC}, -+ {"WIGIG", ICL_PMC_LTR_WIGIG}, -+ {"THC0", TGL_PMC_LTR_THC0}, -+ {"THC1", TGL_PMC_LTR_THC1}, -+ {"SOUTHPORT_G", MTL_PMC_LTR_SPG}, -+ {"ESE", MTL_PMC_LTR_ESE}, -+ {"IOE_PMC", MTL_PMC_LTR_IOE_PMC}, -+ -+ /* Below two cannot be used for LTR_IGNORE */ -+ {"CURRENT_PLATFORM", CNP_PMC_LTR_CUR_PLT}, -+ {"AGGREGATED_SYSTEM", CNP_PMC_LTR_CUR_ASLT}, -+ {} -+}; -+ -+const struct pmc_bit_map mtl_socm_clocksource_status_map[] = { -+ {"AON2_OFF_STS", BIT(0)}, -+ {"AON3_OFF_STS", BIT(1)}, -+ {"AON4_OFF_STS", BIT(2)}, -+ {"AON5_OFF_STS", BIT(3)}, -+ {"AON1_OFF_STS", BIT(4)}, -+ {"XTAL_LVM_OFF_STS", BIT(5)}, -+ {"MPFPW1_0_PLL_OFF_STS", BIT(6)}, -+ {"MPFPW1_1_PLL_OFF_STS", BIT(7)}, -+ {"USB3_PLL_OFF_STS", BIT(8)}, -+ {"AON3_SPL_OFF_STS", BIT(9)}, -+ {"MPFPW2_0_PLL_OFF_STS", BIT(12)}, -+ {"MPFPW3_0_PLL_OFF_STS", BIT(13)}, -+ {"XTAL_AGGR_OFF_STS", BIT(17)}, -+ {"USB2_PLL_OFF_STS", BIT(18)}, -+ {"FILTER_PLL_OFF_STS", BIT(22)}, -+ {"ACE_PLL_OFF_STS", BIT(24)}, -+ {"FABRIC_PLL_OFF_STS", BIT(25)}, -+ {"SOC_PLL_OFF_STS", BIT(26)}, -+ {"PCIFAB_PLL_OFF_STS", BIT(27)}, -+ {"REF_PLL_OFF_STS", BIT(28)}, -+ {"IMG_PLL_OFF_STS", BIT(29)}, -+ {"RTC_PLL_OFF_STS", BIT(31)}, -+ {} -+}; -+ -+const struct pmc_bit_map mtl_socm_power_gating_status_0_map[] = { -+ {"PMC_PGD0_PG_STS", BIT(0)}, -+ {"DMI_PGD0_PG_STS", BIT(1)}, -+ {"ESPISPI_PGD0_PG_STS", BIT(2)}, -+ {"XHCI_PGD0_PG_STS", BIT(3)}, -+ {"SPA_PGD0_PG_STS", BIT(4)}, -+ {"SPB_PGD0_PG_STS", BIT(5)}, -+ {"SPC_PGD0_PG_STS", BIT(6)}, -+ {"GBE_PGD0_PG_STS", BIT(7)}, -+ {"SATA_PGD0_PG_STS", BIT(8)}, -+ {"PSF13_PGD0_PG_STS", BIT(9)}, -+ {"SOC_D2D_PGD3_PG_STS", BIT(10)}, -+ {"MPFPW3_PGD0_PG_STS", BIT(11)}, -+ {"ESE_PGD0_PG_STS", BIT(12)}, -+ {"SPD_PGD0_PG_STS", BIT(13)}, -+ {"LPSS_PGD0_PG_STS", BIT(14)}, -+ {"LPC_PGD0_PG_STS", BIT(15)}, -+ {"SMB_PGD0_PG_STS", BIT(16)}, -+ {"ISH_PGD0_PG_STS", BIT(17)}, -+ {"P2S_PGD0_PG_STS", BIT(18)}, -+ {"NPK_PGD0_PG_STS", BIT(19)}, -+ {"DBG_SBR_PGD0_PG_STS", BIT(20)}, -+ {"SBRG_PGD0_PG_STS", BIT(21)}, -+ {"FUSE_PGD0_PG_STS", BIT(22)}, -+ {"SBR8_PGD0_PG_STS", BIT(23)}, -+ {"SOC_D2D_PGD2_PG_STS", BIT(24)}, -+ {"XDCI_PGD0_PG_STS", BIT(25)}, -+ {"EXI_PGD0_PG_STS", BIT(26)}, -+ {"CSE_PGD0_PG_STS", BIT(27)}, -+ {"KVMCC_PGD0_PG_STS", BIT(28)}, -+ {"PMT_PGD0_PG_STS", BIT(29)}, -+ {"CLINK_PGD0_PG_STS", BIT(30)}, -+ {"PTIO_PGD0_PG_STS", BIT(31)}, -+ {} -+}; -+ -+const struct pmc_bit_map mtl_socm_power_gating_status_1_map[] = { -+ {"USBR0_PGD0_PG_STS", BIT(0)}, -+ {"SUSRAM_PGD0_PG_STS", BIT(1)}, -+ {"SMT1_PGD0_PG_STS", BIT(2)}, -+ {"FIACPCB_U_PGD0_PG_STS", BIT(3)}, -+ {"SMS2_PGD0_PG_STS", BIT(4)}, -+ {"SMS1_PGD0_PG_STS", BIT(5)}, -+ {"CSMERTC_PGD0_PG_STS", BIT(6)}, -+ {"CSMEPSF_PGD0_PG_STS", BIT(7)}, -+ {"SBR0_PGD0_PG_STS", BIT(8)}, -+ {"SBR1_PGD0_PG_STS", BIT(9)}, -+ {"SBR2_PGD0_PG_STS", BIT(10)}, -+ {"SBR3_PGD0_PG_STS", BIT(11)}, -+ {"U3FPW1_PGD0_PG_STS", BIT(12)}, -+ {"SBR5_PGD0_PG_STS", BIT(13)}, -+ {"MPFPW1_PGD0_PG_STS", BIT(14)}, -+ {"UFSPW1_PGD0_PG_STS", BIT(15)}, -+ {"FIA_X_PGD0_PG_STS", BIT(16)}, -+ {"SOC_D2D_PGD0_PG_STS", BIT(17)}, -+ {"MPFPW2_PGD0_PG_STS", BIT(18)}, -+ {"CNVI_PGD0_PG_STS", BIT(19)}, -+ {"UFSX2_PGD0_PG_STS", BIT(20)}, -+ {"ENDBG_PGD0_PG_STS", BIT(21)}, -+ {"DBG_PSF_PGD0_PG_STS", BIT(22)}, -+ {"SBR6_PGD0_PG_STS", BIT(23)}, -+ {"SBR7_PGD0_PG_STS", BIT(24)}, -+ {"NPK_PGD1_PG_STS", BIT(25)}, -+ {"FIACPCB_X_PGD0_PG_STS", BIT(26)}, -+ {"DBC_PGD0_PG_STS", BIT(27)}, -+ {"FUSEGPSB_PGD0_PG_STS", BIT(28)}, -+ {"PSF6_PGD0_PG_STS", BIT(29)}, -+ {"PSF7_PGD0_PG_STS", BIT(30)}, -+ {"GBETSN1_PGD0_PG_STS", BIT(31)}, -+ {} -+}; -+ -+const struct pmc_bit_map mtl_socm_power_gating_status_2_map[] = { -+ {"PSF8_PGD0_PG_STS", BIT(0)}, -+ {"FIA_PGD0_PG_STS", BIT(1)}, -+ {"SOC_D2D_PGD1_PG_STS", BIT(2)}, -+ {"FIA_U_PGD0_PG_STS", BIT(3)}, -+ {"TAM_PGD0_PG_STS", BIT(4)}, -+ {"GBETSN_PGD0_PG_STS", BIT(5)}, -+ {"TBTLSX_PGD0_PG_STS", BIT(6)}, -+ {"THC0_PGD0_PG_STS", BIT(7)}, -+ {"THC1_PGD0_PG_STS", BIT(8)}, -+ {"PMC_PGD1_PG_STS", BIT(9)}, -+ {"GNA_PGD0_PG_STS", BIT(10)}, -+ {"ACE_PGD0_PG_STS", BIT(11)}, -+ {"ACE_PGD1_PG_STS", BIT(12)}, -+ {"ACE_PGD2_PG_STS", BIT(13)}, -+ {"ACE_PGD3_PG_STS", BIT(14)}, -+ {"ACE_PGD4_PG_STS", BIT(15)}, -+ {"ACE_PGD5_PG_STS", BIT(16)}, -+ {"ACE_PGD6_PG_STS", BIT(17)}, -+ {"ACE_PGD7_PG_STS", BIT(18)}, -+ {"ACE_PGD8_PG_STS", BIT(19)}, -+ {"FIA_PGS_PGD0_PG_STS", BIT(20)}, -+ {"FIACPCB_PGS_PGD0_PG_STS", BIT(21)}, -+ {"FUSEPMSB_PGD0_PG_STS", BIT(22)}, -+ {} -+}; -+ -+const struct pmc_bit_map mtl_socm_d3_status_0_map[] = { -+ {"LPSS_D3_STS", BIT(3)}, -+ {"XDCI_D3_STS", BIT(4)}, -+ {"XHCI_D3_STS", BIT(5)}, -+ {"SPA_D3_STS", BIT(12)}, -+ {"SPB_D3_STS", BIT(13)}, -+ {"SPC_D3_STS", BIT(14)}, -+ {"SPD_D3_STS", BIT(15)}, -+ {"ESPISPI_D3_STS", BIT(18)}, -+ {"SATA_D3_STS", BIT(20)}, -+ {"PSTH_D3_STS", BIT(21)}, -+ {"DMI_D3_STS", BIT(22)}, -+ {} -+}; -+ -+const struct pmc_bit_map mtl_socm_d3_status_1_map[] = { -+ {"GBETSN1_D3_STS", BIT(14)}, -+ {"GBE_D3_STS", BIT(19)}, -+ {"ITSS_D3_STS", BIT(23)}, -+ {"P2S_D3_STS", BIT(24)}, -+ {"CNVI_D3_STS", BIT(27)}, -+ {"UFSX2_D3_STS", BIT(28)}, -+ {} -+}; -+ -+const struct pmc_bit_map mtl_socm_d3_status_2_map[] = { -+ {"GNA_D3_STS", BIT(0)}, -+ {"CSMERTC_D3_STS", BIT(1)}, -+ {"SUSRAM_D3_STS", BIT(2)}, -+ {"CSE_D3_STS", BIT(4)}, -+ {"KVMCC_D3_STS", BIT(5)}, -+ {"USBR0_D3_STS", BIT(6)}, -+ {"ISH_D3_STS", BIT(7)}, -+ {"SMT1_D3_STS", BIT(8)}, -+ {"SMT2_D3_STS", BIT(9)}, -+ {"SMT3_D3_STS", BIT(10)}, -+ {"CLINK_D3_STS", BIT(14)}, -+ {"PTIO_D3_STS", BIT(16)}, -+ {"PMT_D3_STS", BIT(17)}, -+ {"SMS1_D3_STS", BIT(18)}, -+ {"SMS2_D3_STS", BIT(19)}, -+ {} -+}; -+ -+const struct pmc_bit_map mtl_socm_d3_status_3_map[] = { -+ {"ESE_D3_STS", BIT(2)}, -+ {"GBETSN_D3_STS", BIT(13)}, -+ {"THC0_D3_STS", BIT(14)}, -+ {"THC1_D3_STS", BIT(15)}, -+ {"ACE_D3_STS", BIT(23)}, -+ {} -+}; -+ -+const struct pmc_bit_map mtl_socm_vnn_req_status_0_map[] = { -+ {"LPSS_VNN_REQ_STS", BIT(3)}, -+ {"FIA_VNN_REQ_STS", BIT(17)}, -+ {"ESPISPI_VNN_REQ_STS", BIT(18)}, -+ {} -+}; -+ -+const struct pmc_bit_map mtl_socm_vnn_req_status_1_map[] = { -+ {"NPK_VNN_REQ_STS", BIT(4)}, -+ {"DFXAGG_VNN_REQ_STS", BIT(8)}, -+ {"EXI_VNN_REQ_STS", BIT(9)}, -+ {"P2D_VNN_REQ_STS", BIT(18)}, -+ {"GBE_VNN_REQ_STS", BIT(19)}, -+ {"SMB_VNN_REQ_STS", BIT(25)}, -+ {"LPC_VNN_REQ_STS", BIT(26)}, -+ {} -+}; -+ -+const struct pmc_bit_map mtl_socm_vnn_req_status_2_map[] = { -+ {"CSMERTC_VNN_REQ_STS", BIT(1)}, -+ {"CSE_VNN_REQ_STS", BIT(4)}, -+ {"ISH_VNN_REQ_STS", BIT(7)}, -+ {"SMT1_VNN_REQ_STS", BIT(8)}, -+ {"CLINK_VNN_REQ_STS", BIT(14)}, -+ {"SMS1_VNN_REQ_STS", BIT(18)}, -+ {"SMS2_VNN_REQ_STS", BIT(19)}, -+ {"GPIOCOM4_VNN_REQ_STS", BIT(20)}, -+ {"GPIOCOM3_VNN_REQ_STS", BIT(21)}, -+ {"GPIOCOM2_VNN_REQ_STS", BIT(22)}, -+ {"GPIOCOM1_VNN_REQ_STS", BIT(23)}, -+ {"GPIOCOM0_VNN_REQ_STS", BIT(24)}, -+ {} -+}; -+ -+const struct pmc_bit_map mtl_socm_vnn_req_status_3_map[] = { -+ {"ESE_VNN_REQ_STS", BIT(2)}, -+ {"DTS0_VNN_REQ_STS", BIT(7)}, -+ {"GPIOCOM5_VNN_REQ_STS", BIT(11)}, -+ {} -+}; -+ -+const struct pmc_bit_map mtl_socm_vnn_misc_status_map[] = { -+ {"CPU_C10_REQ_STS", BIT(0)}, -+ {"TS_OFF_REQ_STS", BIT(1)}, -+ {"PNDE_MET_REQ_STS", BIT(2)}, -+ {"PCIE_DEEP_PM_REQ_STS", BIT(3)}, -+ {"PMC_CLK_THROTTLE_EN_REQ_STS", BIT(4)}, -+ {"NPK_VNNAON_REQ_STS", BIT(5)}, -+ {"VNN_SOC_REQ_STS", BIT(6)}, -+ {"ISH_VNNAON_REQ_STS", BIT(7)}, -+ {"IOE_COND_MET_S02I2_0_REQ_STS", BIT(8)}, -+ {"IOE_COND_MET_S02I2_1_REQ_STS", BIT(9)}, -+ {"IOE_COND_MET_S02I2_2_REQ_STS", BIT(10)}, -+ {"PLT_GREATER_REQ_STS", BIT(11)}, -+ {"PCIE_CLKREQ_REQ_STS", BIT(12)}, -+ {"PMC_IDLE_FB_OCP_REQ_STS", BIT(13)}, -+ {"PM_SYNC_STATES_REQ_STS", BIT(14)}, -+ {"EA_REQ_STS", BIT(15)}, -+ {"MPHY_CORE_OFF_REQ_STS", BIT(16)}, -+ {"BRK_EV_EN_REQ_STS", BIT(17)}, -+ {"AUTO_DEMO_EN_REQ_STS", BIT(18)}, -+ {"ITSS_CLK_SRC_REQ_STS", BIT(19)}, -+ {"LPC_CLK_SRC_REQ_STS", BIT(20)}, -+ {"ARC_IDLE_REQ_STS", BIT(21)}, -+ {"MPHY_SUS_REQ_STS", BIT(22)}, -+ {"FIA_DEEP_PM_REQ_STS", BIT(23)}, -+ {"UXD_CONNECTED_REQ_STS", BIT(24)}, -+ {"ARC_INTERRUPT_WAKE_REQ_STS", BIT(25)}, -+ {"USB2_VNNAON_ACT_REQ_STS", BIT(26)}, -+ {"PRE_WAKE0_REQ_STS", BIT(27)}, -+ {"PRE_WAKE1_REQ_STS", BIT(28)}, -+ {"PRE_WAKE2_EN_REQ_STS", BIT(29)}, -+ {"WOV_REQ_STS", BIT(30)}, -+ {"CNVI_V1P05_REQ_STS", BIT(31)}, -+ {} -+}; -+ -+const struct pmc_bit_map mtl_socm_signal_status_map[] = { -+ {"LSX_Wake0_En_STS", BIT(0)}, -+ {"LSX_Wake0_Pol_STS", BIT(1)}, -+ {"LSX_Wake1_En_STS", BIT(2)}, -+ {"LSX_Wake1_Pol_STS", BIT(3)}, -+ {"LSX_Wake2_En_STS", BIT(4)}, -+ {"LSX_Wake2_Pol_STS", BIT(5)}, -+ {"LSX_Wake3_En_STS", BIT(6)}, -+ {"LSX_Wake3_Pol_STS", BIT(7)}, -+ {"LSX_Wake4_En_STS", BIT(8)}, -+ {"LSX_Wake4_Pol_STS", BIT(9)}, -+ {"LSX_Wake5_En_STS", BIT(10)}, -+ {"LSX_Wake5_Pol_STS", BIT(11)}, -+ {"LSX_Wake6_En_STS", BIT(12)}, -+ {"LSX_Wake6_Pol_STS", BIT(13)}, -+ {"LSX_Wake7_En_STS", BIT(14)}, -+ {"LSX_Wake7_Pol_STS", BIT(15)}, -+ {"LPSS_Wake0_En_STS", BIT(16)}, -+ {"LPSS_Wake0_Pol_STS", BIT(17)}, -+ {"LPSS_Wake1_En_STS", BIT(18)}, -+ {"LPSS_Wake1_Pol_STS", BIT(19)}, -+ {"Int_Timer_SS_Wake0_En_STS", BIT(20)}, -+ {"Int_Timer_SS_Wake0_Pol_STS", BIT(21)}, -+ {"Int_Timer_SS_Wake1_En_STS", BIT(22)}, -+ {"Int_Timer_SS_Wake1_Pol_STS", BIT(23)}, -+ {"Int_Timer_SS_Wake2_En_STS", BIT(24)}, -+ {"Int_Timer_SS_Wake2_Pol_STS", BIT(25)}, -+ {"Int_Timer_SS_Wake3_En_STS", BIT(26)}, -+ {"Int_Timer_SS_Wake3_Pol_STS", BIT(27)}, -+ {"Int_Timer_SS_Wake4_En_STS", BIT(28)}, -+ {"Int_Timer_SS_Wake4_Pol_STS", BIT(29)}, -+ {"Int_Timer_SS_Wake5_En_STS", BIT(30)}, -+ {"Int_Timer_SS_Wake5_Pol_STS", BIT(31)}, -+ {} -+}; -+ -+const struct pmc_bit_map *mtl_socm_lpm_maps[] = { -+ mtl_socm_clocksource_status_map, -+ mtl_socm_power_gating_status_0_map, -+ mtl_socm_power_gating_status_1_map, -+ mtl_socm_power_gating_status_2_map, -+ mtl_socm_d3_status_0_map, -+ mtl_socm_d3_status_1_map, -+ mtl_socm_d3_status_2_map, -+ mtl_socm_d3_status_3_map, -+ mtl_socm_vnn_req_status_0_map, -+ mtl_socm_vnn_req_status_1_map, -+ mtl_socm_vnn_req_status_2_map, -+ mtl_socm_vnn_req_status_3_map, -+ mtl_socm_vnn_misc_status_map, -+ mtl_socm_signal_status_map, -+ NULL -+}; -+ -+const struct pmc_reg_map mtl_socm_reg_map = { -+ .pfear_sts = ext_mtl_socm_pfear_map, - .slp_s0_offset = CNP_PMC_SLP_S0_RES_COUNTER_OFFSET, - .slp_s0_res_counter_step = TGL_PMC_SLP_S0_RES_COUNTER_STEP, -- .ltr_show_sts = adl_ltr_show_map, -+ .ltr_show_sts = mtl_socm_ltr_show_map, - .msr_sts = msr_map, - .ltr_ignore_offset = CNP_PMC_LTR_IGNORE_OFFSET, -- .regmap_length = CNP_PMC_MMIO_REG_LEN, -+ .regmap_length = MTL_SOC_PMC_MMIO_REG_LEN, - .ppfear0_offset = CNP_PMC_HOST_PPFEAR0A, -- .ppfear_buckets = ICL_PPFEAR_NUM_ENTRIES, -+ .ppfear_buckets = MTL_SOCM_PPFEAR_NUM_ENTRIES, - .pm_cfg_offset = CNP_PMC_PM_CFG_OFFSET, - .pm_read_disable_bit = CNP_PMC_READ_DISABLE_BIT, -- .ltr_ignore_max = ADL_NUM_IP_IGN_ALLOWED, -- .lpm_num_modes = ADL_LPM_NUM_MODES, - .lpm_num_maps = ADL_LPM_NUM_MAPS, -+ .ltr_ignore_max = MTL_SOCM_NUM_IP_IGN_ALLOWED, - .lpm_res_counter_step_x2 = TGL_PMC_LPM_RES_COUNTER_STEP_X2, - .etr3_offset = ETR3_OFFSET, - .lpm_sts_latch_en_offset = MTL_LPM_STATUS_LATCH_EN_OFFSET, - .lpm_priority_offset = MTL_LPM_PRI_OFFSET, - .lpm_en_offset = MTL_LPM_EN_OFFSET, - .lpm_residency_offset = MTL_LPM_RESIDENCY_OFFSET, -- .lpm_sts = adl_lpm_maps, -+ .lpm_sts = mtl_socm_lpm_maps, - .lpm_status_offset = MTL_LPM_STATUS_OFFSET, - .lpm_live_status_offset = MTL_LPM_LIVE_STATUS_OFFSET, - }; -@@ -87,7 +517,7 @@ static int mtl_resume(struct pmc_dev *pmcdev) - - void mtl_core_init(struct pmc_dev *pmcdev) - { -- pmcdev->map = &mtl_reg_map; -+ pmcdev->map = &mtl_socm_reg_map; - pmcdev->core_configure = mtl_core_configure; - - mtl_d3_fixup(); --- -2.39.2 - diff --git a/queue-6.4/platform-x86-lenovo-yogabook-fix-work-race-on-remove.patch b/queue-6.4/platform-x86-lenovo-yogabook-fix-work-race-on-remove.patch deleted file mode 100644 index 26e6f2ca7ba..00000000000 --- a/queue-6.4/platform-x86-lenovo-yogabook-fix-work-race-on-remove.patch +++ /dev/null @@ -1,93 +0,0 @@ -From 0b78afaf775d4ade456485108fb5a4bf3b3057b5 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Sun, 30 Apr 2023 18:57:50 +0200 -Subject: platform/x86: lenovo-yogabook: Fix work race on remove() - -From: Hans de Goede - -[ Upstream commit 9148cd2eb4450a8e9c49c8a14201fb82f651128f ] - -When yogabook_wmi_remove() runs yogabook_wmi_work might still be running -and using the devices which yogabook_wmi_remove() puts. - -To avoid this move to explicitly cancelling the work rather then using -devm_work_autocancel(). - -This requires also making the yogabook_backside_hall_irq handler non -devm managed, so that it cannot re-queue the work while -yogabook_wmi_remove() runs. - -Fixes: c0549b72d99d ("platform/x86: lenovo-yogabook-wmi: Add driver for Lenovo Yoga Book") -Signed-off-by: Hans de Goede -Link: https://lore.kernel.org/r/20230430165807.472798-3-hdegoede@redhat.com -Signed-off-by: Sasha Levin ---- - drivers/platform/x86/lenovo-yogabook-wmi.c | 20 ++++++++++---------- - 1 file changed, 10 insertions(+), 10 deletions(-) - -diff --git a/drivers/platform/x86/lenovo-yogabook-wmi.c b/drivers/platform/x86/lenovo-yogabook-wmi.c -index 5f4bd1eec38a9..3a6de4ab74a41 100644 ---- a/drivers/platform/x86/lenovo-yogabook-wmi.c -+++ b/drivers/platform/x86/lenovo-yogabook-wmi.c -@@ -2,7 +2,6 @@ - /* WMI driver for Lenovo Yoga Book YB1-X90* / -X91* tablets */ - - #include --#include - #include - #include - #include -@@ -248,10 +247,7 @@ static int yogabook_wmi_probe(struct wmi_device *wdev, const void *context) - data->brightness = YB_KBD_BL_DEFAULT; - set_bit(YB_KBD_IS_ON, &data->flags); - set_bit(YB_DIGITIZER_IS_ON, &data->flags); -- -- r = devm_work_autocancel(&wdev->dev, &data->work, yogabook_wmi_work); -- if (r) -- return r; -+ INIT_WORK(&data->work, yogabook_wmi_work); - - data->kbd_adev = acpi_dev_get_first_match_dev("GDIX1001", NULL, -1); - if (!data->kbd_adev) { -@@ -299,10 +295,9 @@ static int yogabook_wmi_probe(struct wmi_device *wdev, const void *context) - } - data->backside_hall_irq = r; - -- r = devm_request_irq(&wdev->dev, data->backside_hall_irq, -- yogabook_backside_hall_irq, -- IRQF_TRIGGER_RISING | IRQF_TRIGGER_FALLING, -- "backside_hall_sw", data); -+ r = request_irq(data->backside_hall_irq, yogabook_backside_hall_irq, -+ IRQF_TRIGGER_RISING | IRQF_TRIGGER_FALLING, -+ "backside_hall_sw", data); - if (r) { - dev_err_probe(&wdev->dev, r, "Requesting backside_hall_sw IRQ\n"); - goto error_put_devs; -@@ -318,11 +313,14 @@ static int yogabook_wmi_probe(struct wmi_device *wdev, const void *context) - r = devm_led_classdev_register(&wdev->dev, &data->kbd_bl_led); - if (r < 0) { - dev_err_probe(&wdev->dev, r, "Registering backlight LED device\n"); -- goto error_put_devs; -+ goto error_free_irq; - } - - return 0; - -+error_free_irq: -+ free_irq(data->backside_hall_irq, data); -+ cancel_work_sync(&data->work); - error_put_devs: - put_device(data->dig_dev); - put_device(data->kbd_dev); -@@ -335,6 +333,8 @@ static void yogabook_wmi_remove(struct wmi_device *wdev) - { - struct yogabook_wmi *data = dev_get_drvdata(&wdev->dev); - -+ free_irq(data->backside_hall_irq, data); -+ cancel_work_sync(&data->work); - put_device(data->dig_dev); - put_device(data->kbd_dev); - acpi_dev_put(data->dig_adev); --- -2.39.2 - diff --git a/queue-6.4/platform-x86-lenovo-yogabook-reprobe-devices-on-remo.patch b/queue-6.4/platform-x86-lenovo-yogabook-reprobe-devices-on-remo.patch deleted file mode 100644 index 98cdcc28a60..00000000000 --- a/queue-6.4/platform-x86-lenovo-yogabook-reprobe-devices-on-remo.patch +++ /dev/null @@ -1,50 +0,0 @@ -From 71ab5e54328557d34c971db113a758f5d8a939af Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Sun, 30 Apr 2023 18:57:51 +0200 -Subject: platform/x86: lenovo-yogabook: Reprobe devices on remove() - -From: Hans de Goede - -[ Upstream commit 711bcc0cb34e96a60e88d7b0260862781de3e530 ] - -Ensure that both the keyboard touchscreen and the digitizer have their -driver bound after remove(). Without this modprobing lenovo-yogabook-wmi -after a rmmod fails because lenovo-yogabook-wmi defers probing until -both devices have their driver bound. - -Fixes: c0549b72d99d ("platform/x86: lenovo-yogabook-wmi: Add driver for Lenovo Yoga Book") -Signed-off-by: Hans de Goede -Link: https://lore.kernel.org/r/20230430165807.472798-4-hdegoede@redhat.com -Signed-off-by: Sasha Levin ---- - drivers/platform/x86/lenovo-yogabook-wmi.c | 11 +++++++++++ - 1 file changed, 11 insertions(+) - -diff --git a/drivers/platform/x86/lenovo-yogabook-wmi.c b/drivers/platform/x86/lenovo-yogabook-wmi.c -index 3a6de4ab74a41..5948ffa74acd5 100644 ---- a/drivers/platform/x86/lenovo-yogabook-wmi.c -+++ b/drivers/platform/x86/lenovo-yogabook-wmi.c -@@ -332,9 +332,20 @@ static int yogabook_wmi_probe(struct wmi_device *wdev, const void *context) - static void yogabook_wmi_remove(struct wmi_device *wdev) - { - struct yogabook_wmi *data = dev_get_drvdata(&wdev->dev); -+ int r = 0; - - free_irq(data->backside_hall_irq, data); - cancel_work_sync(&data->work); -+ -+ if (!test_bit(YB_KBD_IS_ON, &data->flags)) -+ r |= device_reprobe(data->kbd_dev); -+ -+ if (!test_bit(YB_DIGITIZER_IS_ON, &data->flags)) -+ r |= device_reprobe(data->dig_dev); -+ -+ if (r) -+ dev_warn(&wdev->dev, "Reprobe of devices failed\n"); -+ - put_device(data->dig_dev); - put_device(data->kbd_dev); - acpi_dev_put(data->dig_adev); --- -2.39.2 - diff --git a/queue-6.4/platform-x86-lenovo-yogabook-set-default-keyboard-ba.patch b/queue-6.4/platform-x86-lenovo-yogabook-set-default-keyboard-ba.patch deleted file mode 100644 index 1a12462ba24..00000000000 --- a/queue-6.4/platform-x86-lenovo-yogabook-set-default-keyboard-ba.patch +++ /dev/null @@ -1,38 +0,0 @@ -From 016ea185fc63faf83c1cd1d7d5e1bdd802183c49 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Sun, 30 Apr 2023 18:57:52 +0200 -Subject: platform/x86: lenovo-yogabook: Set default keyboard backligh - brightness on probe() - -From: Hans de Goede - -[ Upstream commit 9e6380d6573181c555ca1b5019b08d19a9ee581c ] - -Set default keyboard backlight brightness on probe(), this fixes -the backlight being off after a rmmod + modprobe. - -Fixes: c0549b72d99d ("platform/x86: lenovo-yogabook-wmi: Add driver for Lenovo Yoga Book") -Signed-off-by: Hans de Goede -Link: https://lore.kernel.org/r/20230430165807.472798-5-hdegoede@redhat.com -Signed-off-by: Sasha Levin ---- - drivers/platform/x86/lenovo-yogabook-wmi.c | 3 +++ - 1 file changed, 3 insertions(+) - -diff --git a/drivers/platform/x86/lenovo-yogabook-wmi.c b/drivers/platform/x86/lenovo-yogabook-wmi.c -index 5948ffa74acd5..d57fcc8388519 100644 ---- a/drivers/platform/x86/lenovo-yogabook-wmi.c -+++ b/drivers/platform/x86/lenovo-yogabook-wmi.c -@@ -295,6 +295,9 @@ static int yogabook_wmi_probe(struct wmi_device *wdev, const void *context) - } - data->backside_hall_irq = r; - -+ /* Set default brightness before enabling the IRQ */ -+ yogabook_wmi_set_kbd_backlight(data->wdev, YB_KBD_BL_DEFAULT); -+ - r = request_irq(data->backside_hall_irq, yogabook_backside_hall_irq, - IRQF_TRIGGER_RISING | IRQF_TRIGGER_FALLING, - "backside_hall_sw", data); --- -2.39.2 - diff --git a/queue-6.4/platform-x86-think-lmi-correct-nvme-password-handlin.patch b/queue-6.4/platform-x86-think-lmi-correct-nvme-password-handlin.patch deleted file mode 100644 index 304b08098d7..00000000000 --- a/queue-6.4/platform-x86-think-lmi-correct-nvme-password-handlin.patch +++ /dev/null @@ -1,48 +0,0 @@ -From c06fe8072f4b1417829889257adfc1c1240bfe8f Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Thu, 1 Jun 2023 16:05:50 -0400 -Subject: platform/x86: think-lmi: Correct NVME password handling -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -From: Mark Pearson - -[ Upstream commit 4cebb42412248d28df6de01420cfac5654428d41 ] - -NVME passwords identifier have been standardised across the Lenovo -systems and now use udrp and adrp (user and admin level) instead of -unvp and mnvp. - -This should apparently be backwards compatible. - -Fixes: 640a5fa50a42 ("platform/x86: think-lmi: Opcode support") -Signed-off-by: Mark Pearson -Reviewed-by: Ilpo Järvinen -Reviewed-by: Hans de Goede -Link: https://lore.kernel.org/r/20230601200552.4396-6-mpearson-lenovo@squebb.ca -Signed-off-by: Hans de Goede -Signed-off-by: Sasha Levin ---- - drivers/platform/x86/think-lmi.c | 4 ++-- - 1 file changed, 2 insertions(+), 2 deletions(-) - -diff --git a/drivers/platform/x86/think-lmi.c b/drivers/platform/x86/think-lmi.c -index e6060aa2f7953..e4047ee0a7546 100644 ---- a/drivers/platform/x86/think-lmi.c -+++ b/drivers/platform/x86/think-lmi.c -@@ -461,9 +461,9 @@ static ssize_t new_password_store(struct kobject *kobj, - sprintf(pwd_type, "mhdp%d", setting->index); - } else if (setting == tlmi_priv.pwd_nvme) { - if (setting->level == TLMI_LEVEL_USER) -- sprintf(pwd_type, "unvp%d", setting->index); -+ sprintf(pwd_type, "udrp%d", setting->index); - else -- sprintf(pwd_type, "mnvp%d", setting->index); -+ sprintf(pwd_type, "adrp%d", setting->index); - } else { - sprintf(pwd_type, "%s", setting->pwd_type); - } --- -2.39.2 - diff --git a/queue-6.4/platform-x86-think-lmi-correct-system-password-inter.patch b/queue-6.4/platform-x86-think-lmi-correct-system-password-inter.patch deleted file mode 100644 index b175e749d9e..00000000000 --- a/queue-6.4/platform-x86-think-lmi-correct-system-password-inter.patch +++ /dev/null @@ -1,59 +0,0 @@ -From 7fea74619c8917f2426714152f5c5d521a12b493 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Thu, 1 Jun 2023 16:05:47 -0400 -Subject: platform/x86: think-lmi: Correct System password interface -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -From: Mark Pearson - -[ Upstream commit 97eef5983372d7aee6549d644d788fd0c10d2b6e ] - -The system password identification was incorrect. This means that if -the password was enabled it wouldn't be detected correctly; and setting -it would not work. -Also updated code to use TLMI_SMP_PWD instead of TLMI_SYS_PWD to be in -sync with Lenovo documentation. - -Fixes: 640a5fa50a42 ("platform/x86: think-lmi: Opcode support") -Signed-off-by: Mark Pearson -Reviewed-by: Ilpo Järvinen -Reviewed-by: Hans de Goede -Link: https://lore.kernel.org/r/20230601200552.4396-3-mpearson-lenovo@squebb.ca -Signed-off-by: Hans de Goede -Signed-off-by: Sasha Levin ---- - drivers/platform/x86/think-lmi.c | 6 +++--- - 1 file changed, 3 insertions(+), 3 deletions(-) - -diff --git a/drivers/platform/x86/think-lmi.c b/drivers/platform/x86/think-lmi.c -index 6cf77bc26b05b..e6060aa2f7953 100644 ---- a/drivers/platform/x86/think-lmi.c -+++ b/drivers/platform/x86/think-lmi.c -@@ -172,7 +172,7 @@ MODULE_PARM_DESC(debug_support, "Enable debug command support"); - #define TLMI_POP_PWD (1 << 0) - #define TLMI_PAP_PWD (1 << 1) - #define TLMI_HDD_PWD (1 << 2) --#define TLMI_SYS_PWD (1 << 3) -+#define TLMI_SMP_PWD (1 << 6) /* System Management */ - #define TLMI_CERT (1 << 7) - - #define to_tlmi_pwd_setting(kobj) container_of(kobj, struct tlmi_pwd_setting, kobj) -@@ -1493,11 +1493,11 @@ static int tlmi_analyze(void) - tlmi_priv.pwd_power->valid = true; - - if (tlmi_priv.opcode_support) { -- tlmi_priv.pwd_system = tlmi_create_auth("sys", "system"); -+ tlmi_priv.pwd_system = tlmi_create_auth("smp", "system"); - if (!tlmi_priv.pwd_system) - goto fail_clear_attr; - -- if (tlmi_priv.pwdcfg.core.password_state & TLMI_SYS_PWD) -+ if (tlmi_priv.pwdcfg.core.password_state & TLMI_SMP_PWD) - tlmi_priv.pwd_system->valid = true; - - tlmi_priv.pwd_hdd = tlmi_create_auth("hdd", "hdd"); --- -2.39.2 - diff --git a/queue-6.4/platform-x86-think-lmi-mutex-protection-around-multi.patch b/queue-6.4/platform-x86-think-lmi-mutex-protection-around-multi.patch deleted file mode 100644 index 46c7bcc50c4..00000000000 --- a/queue-6.4/platform-x86-think-lmi-mutex-protection-around-multi.patch +++ /dev/null @@ -1,86 +0,0 @@ -From 733b0b0670cbea89ceaf75d7b209f47d5cd61265 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Thu, 1 Jun 2023 16:05:45 -0400 -Subject: platform/x86: think-lmi: mutex protection around multiple WMI calls -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -From: Mark Pearson - -[ Upstream commit c41e0121a1221894a1a9c4666156db9e1def4d6c ] - -When an attribute is being changed if the Admin account is enabled, or if -a password is being updated then multiple WMI calls are needed. -Add mutex protection to ensure no race conditions are introduced. - -Fixes: b49f72e7f96d ("platform/x86: think-lmi: Certificate authentication support") -Signed-off-by: Mark Pearson -Reviewed-by: Ilpo Järvinen -Reviewed-by: Hans de Goede -Link: https://lore.kernel.org/r/20230601200552.4396-1-mpearson-lenovo@squebb.ca -Signed-off-by: Hans de Goede -Signed-off-by: Sasha Levin ---- - drivers/platform/x86/think-lmi.c | 10 ++++++++++ - 1 file changed, 10 insertions(+) - -diff --git a/drivers/platform/x86/think-lmi.c b/drivers/platform/x86/think-lmi.c -index 1138f770149d9..6cf77bc26b05b 100644 ---- a/drivers/platform/x86/think-lmi.c -+++ b/drivers/platform/x86/think-lmi.c -@@ -14,6 +14,7 @@ - #include - #include - #include -+#include - #include - #include - #include -@@ -195,6 +196,7 @@ static const char * const level_options[] = { - }; - static struct think_lmi tlmi_priv; - static struct class *fw_attr_class; -+static DEFINE_MUTEX(tlmi_mutex); - - /* ------ Utility functions ------------*/ - /* Strip out CR if one is present */ -@@ -437,6 +439,9 @@ static ssize_t new_password_store(struct kobject *kobj, - /* Strip out CR if one is present, setting password won't work if it is present */ - strip_cr(new_pwd); - -+ /* Use lock in case multiple WMI operations needed */ -+ mutex_lock(&tlmi_mutex); -+ - pwdlen = strlen(new_pwd); - /* pwdlen == 0 is allowed to clear the password */ - if (pwdlen && ((pwdlen < setting->minlen) || (pwdlen > setting->maxlen))) { -@@ -493,6 +498,7 @@ static ssize_t new_password_store(struct kobject *kobj, - kfree(auth_str); - } - out: -+ mutex_unlock(&tlmi_mutex); - kfree(new_pwd); - return ret ?: count; - } -@@ -981,6 +987,9 @@ static ssize_t current_value_store(struct kobject *kobj, - /* Strip out CR if one is present */ - strip_cr(new_setting); - -+ /* Use lock in case multiple WMI operations needed */ -+ mutex_lock(&tlmi_mutex); -+ - /* Check if certificate authentication is enabled and active */ - if (tlmi_priv.certificate_support && tlmi_priv.pwd_admin->cert_installed) { - if (!tlmi_priv.pwd_admin->signature || !tlmi_priv.pwd_admin->save_signature) { -@@ -1039,6 +1048,7 @@ static ssize_t current_value_store(struct kobject *kobj, - kobject_uevent(&tlmi_priv.class_dev->kobj, KOBJ_CHANGE); - } - out: -+ mutex_unlock(&tlmi_mutex); - kfree(auth_str); - kfree(set_str); - kfree(new_setting); --- -2.39.2 - diff --git a/queue-6.4/platform-x86-thinkpad_acpi-fix-lkp-tests-warnings-fo.patch b/queue-6.4/platform-x86-thinkpad_acpi-fix-lkp-tests-warnings-fo.patch deleted file mode 100644 index d1ba614de2c..00000000000 --- a/queue-6.4/platform-x86-thinkpad_acpi-fix-lkp-tests-warnings-fo.patch +++ /dev/null @@ -1,63 +0,0 @@ -From c6b2868903badc79494ce5239b546a9e6a9b9b82 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Tue, 6 Jun 2023 11:18:04 -0400 -Subject: platform/x86: thinkpad_acpi: Fix lkp-tests warnings for platform - profiles - -From: Mark Pearson - -[ Upstream commit f999e23ce66c1555d7b653fba171a88ecee53704 ] - -Fix issues identified in dytc_profile_refresh identified by lkp-tests. -drivers/platform/x86/thinkpad_acpi.c:10538 - dytc_profile_refresh() error: uninitialized symbol 'funcmode'. -drivers/platform/x86/thinkpad_acpi.c:10531 - dytc_profile_refresh() error: uninitialized symbol 'output'. -drivers/platform/x86/thinkpad_acpi.c:10537 - dytc_profile_refresh() error: uninitialized symbol 'output'. - -These issues should not lead to real problems in the field as the refresh -function should only be called if MMC or PSC mode enabled. But good to fix. - -Thanks to Dan Carpenter and the lkp-tests project for flagging these. - -Reported-by: kernel test robot -Reported-by: Dan Carpenter -Closes: https://lore.kernel.org/r/202306011202.1hbgLRD4-lkp@intel.com/ -Fixes: 1bc5d819f0b9 ("platform/x86: thinkpad_acpi: Fix profile modes on Intel platforms") -Signed-off-by: Mark Pearson -Link: https://lore.kernel.org/r/20230606151804.8819-1-mpearson-lenovo@squebb.ca -Reviewed-by: Hans de Goede -Signed-off-by: Hans de Goede -Signed-off-by: Sasha Levin ---- - drivers/platform/x86/thinkpad_acpi.c | 6 ++++-- - 1 file changed, 4 insertions(+), 2 deletions(-) - -diff --git a/drivers/platform/x86/thinkpad_acpi.c b/drivers/platform/x86/thinkpad_acpi.c -index b3808ad77278d..187018ffb0686 100644 ---- a/drivers/platform/x86/thinkpad_acpi.c -+++ b/drivers/platform/x86/thinkpad_acpi.c -@@ -10524,8 +10524,8 @@ static int dytc_profile_set(struct platform_profile_handler *pprof, - static void dytc_profile_refresh(void) - { - enum platform_profile_option profile; -- int output, err = 0; -- int perfmode, funcmode; -+ int output = 0, err = 0; -+ int perfmode, funcmode = 0; - - mutex_lock(&dytc_mutex); - if (dytc_capabilities & BIT(DYTC_FC_MMC)) { -@@ -10538,6 +10538,8 @@ static void dytc_profile_refresh(void) - err = dytc_command(DYTC_CMD_GET, &output); - /* Check if we are PSC mode, or have AMT enabled */ - funcmode = (output >> DYTC_GET_FUNCTION_BIT) & 0xF; -+ } else { /* Unknown profile mode */ -+ err = -ENODEV; - } - mutex_unlock(&dytc_mutex); - if (err) --- -2.39.2 - diff --git a/queue-6.4/pm-domains-fix-integer-overflow-issues-in-genpd_pars.patch b/queue-6.4/pm-domains-fix-integer-overflow-issues-in-genpd_pars.patch deleted file mode 100644 index adc440f1566..00000000000 --- a/queue-6.4/pm-domains-fix-integer-overflow-issues-in-genpd_pars.patch +++ /dev/null @@ -1,48 +0,0 @@ -From e028f8c247a283272667dd02e53cba429596f4ec Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Tue, 18 Apr 2023 06:07:43 -0700 -Subject: PM: domains: fix integer overflow issues in genpd_parse_state() - -From: Nikita Zhandarovich - -[ Upstream commit e5d1c8722083f0332dcd3c85fa1273d85fb6bed8 ] - -Currently, while calculating residency and latency values, right -operands may overflow if resulting values are big enough. - -To prevent this, albeit unlikely case, play it safe and convert -right operands to left ones' type s64. - -Found by Linux Verification Center (linuxtesting.org) with static -analysis tool SVACE. - -Fixes: 30f604283e05 ("PM / Domains: Allow domain power states to be read from DT") -Signed-off-by: Nikita Zhandarovich -Acked-by: Ulf Hansson -Signed-off-by: Rafael J. Wysocki -Signed-off-by: Sasha Levin ---- - drivers/base/power/domain.c | 6 +++--- - 1 file changed, 3 insertions(+), 3 deletions(-) - -diff --git a/drivers/base/power/domain.c b/drivers/base/power/domain.c -index 32084e38b73d0..51b9d4eaab5ea 100644 ---- a/drivers/base/power/domain.c -+++ b/drivers/base/power/domain.c -@@ -2939,10 +2939,10 @@ static int genpd_parse_state(struct genpd_power_state *genpd_state, - - err = of_property_read_u32(state_node, "min-residency-us", &residency); - if (!err) -- genpd_state->residency_ns = 1000 * residency; -+ genpd_state->residency_ns = 1000LL * residency; - -- genpd_state->power_on_latency_ns = 1000 * exit_latency; -- genpd_state->power_off_latency_ns = 1000 * entry_latency; -+ genpd_state->power_on_latency_ns = 1000LL * exit_latency; -+ genpd_state->power_off_latency_ns = 1000LL * entry_latency; - genpd_state->fwnode = &state_node->fwnode; - - return 0; --- -2.39.2 - diff --git a/queue-6.4/pm-domains-move-the-verification-of-in-params-from-g.patch b/queue-6.4/pm-domains-move-the-verification-of-in-params-from-g.patch deleted file mode 100644 index 3712e79c47a..00000000000 --- a/queue-6.4/pm-domains-move-the-verification-of-in-params-from-g.patch +++ /dev/null @@ -1,65 +0,0 @@ -From 8100699271b5fa7d10c82aee5897802818cfe2fc Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Tue, 30 May 2023 11:55:36 +0200 -Subject: PM: domains: Move the verification of in-params from - genpd_add_device() - -From: Ulf Hansson - -[ Upstream commit 4384a70c8813e8573d1841fd94eee873f80a7e1a ] - -Commit f38d1a6d0025 ("PM: domains: Allocate governor data dynamically -based on a genpd governor") started to use the in-parameters in -genpd_add_device(), without first doing a verification of them. - -This isn't really a big problem, as most callers do a verification already. - -Therefore, let's drop the verification from genpd_add_device() and make -sure all the callers take care of it instead. - -Reported-by: Dan Carpenter -Fixes: f38d1a6d0025 ("PM: domains: Allocate governor data dynamically based on a genpd governor") -Signed-off-by: Ulf Hansson -Signed-off-by: Rafael J. Wysocki -Signed-off-by: Sasha Levin ---- - drivers/base/power/domain.c | 9 ++++++--- - 1 file changed, 6 insertions(+), 3 deletions(-) - -diff --git a/drivers/base/power/domain.c b/drivers/base/power/domain.c -index 51b9d4eaab5ea..5cb2023581d4d 100644 ---- a/drivers/base/power/domain.c -+++ b/drivers/base/power/domain.c -@@ -1632,9 +1632,6 @@ static int genpd_add_device(struct generic_pm_domain *genpd, struct device *dev, - - dev_dbg(dev, "%s()\n", __func__); - -- if (IS_ERR_OR_NULL(genpd) || IS_ERR_OR_NULL(dev)) -- return -EINVAL; -- - gpd_data = genpd_alloc_dev_data(dev, gd); - if (IS_ERR(gpd_data)) - return PTR_ERR(gpd_data); -@@ -1676,6 +1673,9 @@ int pm_genpd_add_device(struct generic_pm_domain *genpd, struct device *dev) - { - int ret; - -+ if (!genpd || !dev) -+ return -EINVAL; -+ - mutex_lock(&gpd_list_lock); - ret = genpd_add_device(genpd, dev, dev); - mutex_unlock(&gpd_list_lock); -@@ -2523,6 +2523,9 @@ int of_genpd_add_device(struct of_phandle_args *genpdspec, struct device *dev) - struct generic_pm_domain *genpd; - int ret; - -+ if (!dev) -+ return -EINVAL; -+ - mutex_lock(&gpd_list_lock); - - genpd = genpd_get_from_provider(genpdspec); --- -2.39.2 - diff --git a/queue-6.4/posix-timers-prevent-rt-livelock-in-itimer_delete.patch b/queue-6.4/posix-timers-prevent-rt-livelock-in-itimer_delete.patch deleted file mode 100644 index b8ed51146fd..00000000000 --- a/queue-6.4/posix-timers-prevent-rt-livelock-in-itimer_delete.patch +++ /dev/null @@ -1,110 +0,0 @@ -From af2b796d15b888dc5e76bb75350f63db38939e1f Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Thu, 1 Jun 2023 22:16:34 +0200 -Subject: posix-timers: Prevent RT livelock in itimer_delete() - -From: Thomas Gleixner - -[ Upstream commit 9d9e522010eb5685d8b53e8a24320653d9d4cbbf ] - -itimer_delete() has a retry loop when the timer is concurrently expired. On -non-RT kernels this just spin-waits until the timer callback has completed, -except for posix CPU timers which have HAVE_POSIX_CPU_TIMERS_TASK_WORK -enabled. - -In that case and on RT kernels the existing task could live lock when -preempting the task which does the timer delivery. - -Replace spin_unlock() with an invocation of timer_wait_running() to handle -it the same way as the other retry loops in the posix timer code. - -Fixes: ec8f954a40da ("posix-timers: Use a callback for cancel synchronization on PREEMPT_RT") -Signed-off-by: Thomas Gleixner -Reviewed-by: Frederic Weisbecker -Link: https://lore.kernel.org/r/87v8g7c50d.ffs@tglx -Signed-off-by: Sasha Levin ---- - kernel/time/posix-timers.c | 43 +++++++++++++++++++++++++++++++------- - 1 file changed, 35 insertions(+), 8 deletions(-) - -diff --git a/kernel/time/posix-timers.c b/kernel/time/posix-timers.c -index 808a247205a9a..ed3c4a9543982 100644 ---- a/kernel/time/posix-timers.c -+++ b/kernel/time/posix-timers.c -@@ -1037,27 +1037,52 @@ SYSCALL_DEFINE1(timer_delete, timer_t, timer_id) - } - - /* -- * return timer owned by the process, used by exit_itimers -+ * Delete a timer if it is armed, remove it from the hash and schedule it -+ * for RCU freeing. - */ - static void itimer_delete(struct k_itimer *timer) - { --retry_delete: -- spin_lock_irq(&timer->it_lock); -+ unsigned long flags; -+ -+ /* -+ * irqsave is required to make timer_wait_running() work. -+ */ -+ spin_lock_irqsave(&timer->it_lock, flags); - -+retry_delete: -+ /* -+ * Even if the timer is not longer accessible from other tasks -+ * it still might be armed and queued in the underlying timer -+ * mechanism. Worse, that timer mechanism might run the expiry -+ * function concurrently. -+ */ - if (timer_delete_hook(timer) == TIMER_RETRY) { -- spin_unlock_irq(&timer->it_lock); -+ /* -+ * Timer is expired concurrently, prevent livelocks -+ * and pointless spinning on RT. -+ * -+ * timer_wait_running() drops timer::it_lock, which opens -+ * the possibility for another task to delete the timer. -+ * -+ * That's not possible here because this is invoked from -+ * do_exit() only for the last thread of the thread group. -+ * So no other task can access and delete that timer. -+ */ -+ if (WARN_ON_ONCE(timer_wait_running(timer, &flags) != timer)) -+ return; -+ - goto retry_delete; - } - list_del(&timer->list); - -- spin_unlock_irq(&timer->it_lock); -+ spin_unlock_irqrestore(&timer->it_lock, flags); - release_posix_timer(timer, IT_ID_SET); - } - - /* -- * This is called by do_exit or de_thread, only when nobody else can -- * modify the signal->posix_timers list. Yet we need sighand->siglock -- * to prevent the race with /proc/pid/timers. -+ * Invoked from do_exit() when the last thread of a thread group exits. -+ * At that point no other task can access the timers of the dying -+ * task anymore. - */ - void exit_itimers(struct task_struct *tsk) - { -@@ -1067,10 +1092,12 @@ void exit_itimers(struct task_struct *tsk) - if (list_empty(&tsk->signal->posix_timers)) - return; - -+ /* Protect against concurrent read via /proc/$PID/timers */ - spin_lock_irq(&tsk->sighand->siglock); - list_replace_init(&tsk->signal->posix_timers, &timers); - spin_unlock_irq(&tsk->sighand->siglock); - -+ /* The timers are not longer accessible via tsk::signal */ - while (!list_empty(&timers)) { - tmr = list_first_entry(&timers, struct k_itimer, list); - itimer_delete(tmr); --- -2.39.2 - diff --git a/queue-6.4/powercap-rapl-fix-config_iosf_mbi-dependency.patch b/queue-6.4/powercap-rapl-fix-config_iosf_mbi-dependency.patch deleted file mode 100644 index 1db242a1f6f..00000000000 --- a/queue-6.4/powercap-rapl-fix-config_iosf_mbi-dependency.patch +++ /dev/null @@ -1,73 +0,0 @@ -From 536fc54647ea9e0eb58f4f004ce0390d8a626baa Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Tue, 6 Jun 2023 22:00:00 +0800 -Subject: powercap: RAPL: Fix CONFIG_IOSF_MBI dependency - -From: Zhang Rui - -[ Upstream commit 4658fe81b3f8afe8adf37734ec5fe595d90415c6 ] - -After commit 3382388d7148 ("intel_rapl: abstract RAPL common code"), -accessing to IOSF_MBI interface is done in the RAPL common code. - -Thus it is the CONFIG_INTEL_RAPL_CORE that has dependency of -CONFIG_IOSF_MBI, while CONFIG_INTEL_RAPL_MSR does not. - -This problem was not exposed previously because all the previous RAPL -common code users, aka, the RAPL MSR and MMIO I/F drivers, have -CONFIG_IOSF_MBI selected. - -Fix the CONFIG_IOSF_MBI dependency in RAPL code. This also fixes a build -time failure when the RAPL TPMI I/F driver is introduced without -selecting CONFIG_IOSF_MBI. - -x86_64-linux-ld: vmlinux.o: in function `set_floor_freq_atom': -intel_rapl_common.c:(.text+0x2dac9b8): undefined reference to `iosf_mbi_write' -x86_64-linux-ld: intel_rapl_common.c:(.text+0x2daca66): undefined reference to `iosf_mbi_read' - -Reference to iosf_mbi.h is also removed from the RAPL MSR I/F driver. - -Fixes: 3382388d7148 ("intel_rapl: abstract RAPL common code") -Reported-by: Arnd Bergmann -Link: https://lore.kernel.org/all/20230601213246.3271412-1-arnd@kernel.org -Signed-off-by: Zhang Rui -Signed-off-by: Rafael J. Wysocki -Signed-off-by: Sasha Levin ---- - drivers/powercap/Kconfig | 4 +++- - drivers/powercap/intel_rapl_msr.c | 1 - - 2 files changed, 3 insertions(+), 2 deletions(-) - -diff --git a/drivers/powercap/Kconfig b/drivers/powercap/Kconfig -index 90d33cd1b670a..b063f75117738 100644 ---- a/drivers/powercap/Kconfig -+++ b/drivers/powercap/Kconfig -@@ -18,10 +18,12 @@ if POWERCAP - # Client driver configurations go here. - config INTEL_RAPL_CORE - tristate -+ depends on PCI -+ select IOSF_MBI - - config INTEL_RAPL - tristate "Intel RAPL Support via MSR Interface" -- depends on X86 && IOSF_MBI -+ depends on X86 && PCI - select INTEL_RAPL_CORE - help - This enables support for the Intel Running Average Power Limit (RAPL) -diff --git a/drivers/powercap/intel_rapl_msr.c b/drivers/powercap/intel_rapl_msr.c -index 7be7561f5ad64..9ea4797d70b44 100644 ---- a/drivers/powercap/intel_rapl_msr.c -+++ b/drivers/powercap/intel_rapl_msr.c -@@ -22,7 +22,6 @@ - #include - #include - --#include - #include - #include - --- -2.39.2 - diff --git a/queue-6.4/powercap-rapl-fix-invalid-initialization-for-pl4_sup.patch b/queue-6.4/powercap-rapl-fix-invalid-initialization-for-pl4_sup.patch deleted file mode 100644 index fc4f06d19db..00000000000 --- a/queue-6.4/powercap-rapl-fix-invalid-initialization-for-pl4_sup.patch +++ /dev/null @@ -1,63 +0,0 @@ -From 8f146df7dcee288167a6d976a05e171ef174603f Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Thu, 8 Jun 2023 08:00:06 +0530 -Subject: powercap: RAPL: fix invalid initialization for pl4_supported field - -From: Sumeet Pawnikar - -[ Upstream commit d05b5e0baf424c8c4b4709ac11f66ab726c8deaf ] - -The current initialization of the struct x86_cpu_id via -pl4_support_ids[] is partial and wrong. It is initializing -"stepping" field with "X86_FEATURE_ANY" instead of "feature" field. - -Use X86_MATCH_INTEL_FAM6_MODEL macro instead of initializing -each field of the struct x86_cpu_id for pl4_supported list of CPUs. -This X86_MATCH_INTEL_FAM6_MODEL macro internally uses another macro -X86_MATCH_VENDOR_FAM_MODEL_FEATURE for X86 based CPU matching with -appropriate initialized values. - -Reported-by: Dave Hansen -Link: https://lore.kernel.org/lkml/28ead36b-2d9e-1a36-6f4e-04684e420260@intel.com -Fixes: eb52bc2ae5b8 ("powercap: RAPL: Add Power Limit4 support for Meteor Lake SoC") -Fixes: b08b95cf30f5 ("powercap: RAPL: Add Power Limit4 support for Alder Lake-N and Raptor Lake-P") -Fixes: 515755906921 ("powercap: RAPL: Add Power Limit4 support for RaptorLake") -Fixes: 1cc5b9a411e4 ("powercap: Add Power Limit4 support for Alder Lake SoC") -Fixes: 8365a898fe53 ("powercap: Add Power Limit4 support") -Signed-off-by: Sumeet Pawnikar -Signed-off-by: Rafael J. Wysocki -Signed-off-by: Sasha Levin ---- - drivers/powercap/intel_rapl_msr.c | 16 ++++++++-------- - 1 file changed, 8 insertions(+), 8 deletions(-) - -diff --git a/drivers/powercap/intel_rapl_msr.c b/drivers/powercap/intel_rapl_msr.c -index a27673706c3d6..7be7561f5ad64 100644 ---- a/drivers/powercap/intel_rapl_msr.c -+++ b/drivers/powercap/intel_rapl_msr.c -@@ -137,14 +137,14 @@ static int rapl_msr_write_raw(int cpu, struct reg_action *ra) - - /* List of verified CPUs. */ - static const struct x86_cpu_id pl4_support_ids[] = { -- { X86_VENDOR_INTEL, 6, INTEL_FAM6_TIGERLAKE_L, X86_FEATURE_ANY }, -- { X86_VENDOR_INTEL, 6, INTEL_FAM6_ALDERLAKE, X86_FEATURE_ANY }, -- { X86_VENDOR_INTEL, 6, INTEL_FAM6_ALDERLAKE_L, X86_FEATURE_ANY }, -- { X86_VENDOR_INTEL, 6, INTEL_FAM6_ALDERLAKE_N, X86_FEATURE_ANY }, -- { X86_VENDOR_INTEL, 6, INTEL_FAM6_RAPTORLAKE, X86_FEATURE_ANY }, -- { X86_VENDOR_INTEL, 6, INTEL_FAM6_RAPTORLAKE_P, X86_FEATURE_ANY }, -- { X86_VENDOR_INTEL, 6, INTEL_FAM6_METEORLAKE, X86_FEATURE_ANY }, -- { X86_VENDOR_INTEL, 6, INTEL_FAM6_METEORLAKE_L, X86_FEATURE_ANY }, -+ X86_MATCH_INTEL_FAM6_MODEL(TIGERLAKE_L, NULL), -+ X86_MATCH_INTEL_FAM6_MODEL(ALDERLAKE, NULL), -+ X86_MATCH_INTEL_FAM6_MODEL(ALDERLAKE_L, NULL), -+ X86_MATCH_INTEL_FAM6_MODEL(ALDERLAKE_N, NULL), -+ X86_MATCH_INTEL_FAM6_MODEL(RAPTORLAKE, NULL), -+ X86_MATCH_INTEL_FAM6_MODEL(RAPTORLAKE_P, NULL), -+ X86_MATCH_INTEL_FAM6_MODEL(METEORLAKE, NULL), -+ X86_MATCH_INTEL_FAM6_MODEL(METEORLAKE_L, NULL), - {} - }; - --- -2.39.2 - diff --git a/queue-6.4/powerpc-64s-fix-vas-mm-use-after-free.patch b/queue-6.4/powerpc-64s-fix-vas-mm-use-after-free.patch deleted file mode 100644 index 25f1d89c62b..00000000000 --- a/queue-6.4/powerpc-64s-fix-vas-mm-use-after-free.patch +++ /dev/null @@ -1,55 +0,0 @@ -From faa5853af94456882f6c21b63e588067681fad93 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Wed, 7 Jun 2023 20:10:24 +1000 -Subject: powerpc/64s: Fix VAS mm use after free - -From: Nicholas Piggin - -[ Upstream commit b4bda59b47879cce38a6ec5a01cd3cac702b5331 ] - -The refcount on mm is dropped before the coprocessor is detached. - -Reported-by: Sachin Sant -Fixes: 7bc6f71bdff5f ("powerpc/vas: Define and use common vas_window struct") -Fixes: b22f2d88e435c ("powerpc/pseries/vas: Integrate API with open/close windows") -Signed-off-by: Nicholas Piggin -Tested-by: Sachin Sant -Signed-off-by: Michael Ellerman -Link: https://msgid.link/20230607101024.14559-1-npiggin@gmail.com -Signed-off-by: Sasha Levin ---- - arch/powerpc/platforms/powernv/vas-window.c | 2 +- - arch/powerpc/platforms/pseries/vas.c | 2 +- - 2 files changed, 2 insertions(+), 2 deletions(-) - -diff --git a/arch/powerpc/platforms/powernv/vas-window.c b/arch/powerpc/platforms/powernv/vas-window.c -index 0072682531d80..b664838008c12 100644 ---- a/arch/powerpc/platforms/powernv/vas-window.c -+++ b/arch/powerpc/platforms/powernv/vas-window.c -@@ -1310,8 +1310,8 @@ int vas_win_close(struct vas_window *vwin) - /* if send window, drop reference to matching receive window */ - if (window->tx_win) { - if (window->user_win) { -- put_vas_user_win_ref(&vwin->task_ref); - mm_context_remove_vas_window(vwin->task_ref.mm); -+ put_vas_user_win_ref(&vwin->task_ref); - } - put_rx_win(window->rxwin); - } -diff --git a/arch/powerpc/platforms/pseries/vas.c b/arch/powerpc/platforms/pseries/vas.c -index 513180467562b..9a44a98ba3420 100644 ---- a/arch/powerpc/platforms/pseries/vas.c -+++ b/arch/powerpc/platforms/pseries/vas.c -@@ -507,8 +507,8 @@ static int vas_deallocate_window(struct vas_window *vwin) - vascaps[win->win_type].nr_open_windows--; - mutex_unlock(&vas_pseries_mutex); - -- put_vas_user_win_ref(&vwin->task_ref); - mm_context_remove_vas_window(vwin->task_ref.mm); -+ put_vas_user_win_ref(&vwin->task_ref); - - kfree(win); - return 0; --- -2.39.2 - diff --git a/queue-6.4/powerpc-book3s64-mm-fix-directmap-stats-in-proc-memi.patch b/queue-6.4/powerpc-book3s64-mm-fix-directmap-stats-in-proc-memi.patch deleted file mode 100644 index b4800be7a34..00000000000 --- a/queue-6.4/powerpc-book3s64-mm-fix-directmap-stats-in-proc-memi.patch +++ /dev/null @@ -1,158 +0,0 @@ -From 078b9ddf0cbb42eb48b0c228ccd01eb41fc27de4 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Fri, 16 Jun 2023 16:38:13 +0530 -Subject: powerpc/book3s64/mm: Fix DirectMap stats in /proc/meminfo - -From: Aneesh Kumar K.V - -[ Upstream commit 0da90af431abc3f497a38ec9ef6e43b0d0dabe80 ] - -On memory unplug reduce DirectMap page count correctly. -root@ubuntu-guest:# grep Direct /proc/meminfo -DirectMap4k: 0 kB -DirectMap64k: 0 kB -DirectMap2M: 115343360 kB -DirectMap1G: 0 kB - -Before fix: -root@ubuntu-guest:# ndctl disable-namespace all -disabled 1 namespace -root@ubuntu-guest:# grep Direct /proc/meminfo -DirectMap4k: 0 kB -DirectMap64k: 0 kB -DirectMap2M: 115343360 kB -DirectMap1G: 0 kB - -After fix: -root@ubuntu-guest:# ndctl disable-namespace all -disabled 1 namespace -root@ubuntu-guest:# grep Direct /proc/meminfo -DirectMap4k: 0 kB -DirectMap64k: 0 kB -DirectMap2M: 104857600 kB -DirectMap1G: 0 kB - -Fixes: a2dc009afa9a ("powerpc/mm/book3s/radix: Add mapping statistics") -Signed-off-by: Aneesh Kumar K.V -Tested-by: Sachin Sant > -Signed-off-by: Michael Ellerman -Link: https://msgid.link/20230616110826.344417-4-aneesh.kumar@linux.ibm.com -Signed-off-by: Sasha Levin ---- - arch/powerpc/mm/book3s64/radix_pgtable.c | 34 +++++++++++++++--------- - 1 file changed, 22 insertions(+), 12 deletions(-) - -diff --git a/arch/powerpc/mm/book3s64/radix_pgtable.c b/arch/powerpc/mm/book3s64/radix_pgtable.c -index 2297aa764ecdb..e8db8c8efe359 100644 ---- a/arch/powerpc/mm/book3s64/radix_pgtable.c -+++ b/arch/powerpc/mm/book3s64/radix_pgtable.c -@@ -745,9 +745,9 @@ static void free_pud_table(pud_t *pud_start, p4d_t *p4d) - } - - static void remove_pte_table(pte_t *pte_start, unsigned long addr, -- unsigned long end) -+ unsigned long end, bool direct) - { -- unsigned long next; -+ unsigned long next, pages = 0; - pte_t *pte; - - pte = pte_start + pte_index(addr); -@@ -769,13 +769,16 @@ static void remove_pte_table(pte_t *pte_start, unsigned long addr, - } - - pte_clear(&init_mm, addr, pte); -+ pages++; - } -+ if (direct) -+ update_page_count(mmu_virtual_psize, -pages); - } - - static void __meminit remove_pmd_table(pmd_t *pmd_start, unsigned long addr, -- unsigned long end) -+ unsigned long end, bool direct) - { -- unsigned long next; -+ unsigned long next, pages = 0; - pte_t *pte_base; - pmd_t *pmd; - -@@ -793,19 +796,22 @@ static void __meminit remove_pmd_table(pmd_t *pmd_start, unsigned long addr, - continue; - } - pte_clear(&init_mm, addr, (pte_t *)pmd); -+ pages++; - continue; - } - - pte_base = (pte_t *)pmd_page_vaddr(*pmd); -- remove_pte_table(pte_base, addr, next); -+ remove_pte_table(pte_base, addr, next, direct); - free_pte_table(pte_base, pmd); - } -+ if (direct) -+ update_page_count(MMU_PAGE_2M, -pages); - } - - static void __meminit remove_pud_table(pud_t *pud_start, unsigned long addr, -- unsigned long end) -+ unsigned long end, bool direct) - { -- unsigned long next; -+ unsigned long next, pages = 0; - pmd_t *pmd_base; - pud_t *pud; - -@@ -823,16 +829,20 @@ static void __meminit remove_pud_table(pud_t *pud_start, unsigned long addr, - continue; - } - pte_clear(&init_mm, addr, (pte_t *)pud); -+ pages++; - continue; - } - - pmd_base = pud_pgtable(*pud); -- remove_pmd_table(pmd_base, addr, next); -+ remove_pmd_table(pmd_base, addr, next, direct); - free_pmd_table(pmd_base, pud); - } -+ if (direct) -+ update_page_count(MMU_PAGE_1G, -pages); - } - --static void __meminit remove_pagetable(unsigned long start, unsigned long end) -+static void __meminit remove_pagetable(unsigned long start, unsigned long end, -+ bool direct) - { - unsigned long addr, next; - pud_t *pud_base; -@@ -861,7 +871,7 @@ static void __meminit remove_pagetable(unsigned long start, unsigned long end) - } - - pud_base = p4d_pgtable(*p4d); -- remove_pud_table(pud_base, addr, next); -+ remove_pud_table(pud_base, addr, next, direct); - free_pud_table(pud_base, p4d); - } - -@@ -884,7 +894,7 @@ int __meminit radix__create_section_mapping(unsigned long start, - - int __meminit radix__remove_section_mapping(unsigned long start, unsigned long end) - { -- remove_pagetable(start, end); -+ remove_pagetable(start, end, true); - return 0; - } - #endif /* CONFIG_MEMORY_HOTPLUG */ -@@ -920,7 +930,7 @@ int __meminit radix__vmemmap_create_mapping(unsigned long start, - #ifdef CONFIG_MEMORY_HOTPLUG - void __meminit radix__vmemmap_remove_mapping(unsigned long start, unsigned long page_size) - { -- remove_pagetable(start, start + page_size); -+ remove_pagetable(start, start + page_size, false); - } - #endif - #endif --- -2.39.2 - diff --git a/queue-6.4/powerpc-interrupt-don-t-read-msr-from-interrupt_exit.patch b/queue-6.4/powerpc-interrupt-don-t-read-msr-from-interrupt_exit.patch deleted file mode 100644 index 1796bfdfa46..00000000000 --- a/queue-6.4/powerpc-interrupt-don-t-read-msr-from-interrupt_exit.patch +++ /dev/null @@ -1,58 +0,0 @@ -From 727a986b542156a343eaaf6906855370f389918d Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Mon, 5 Jun 2023 10:55:26 +0200 -Subject: powerpc/interrupt: Don't read MSR from - interrupt_exit_kernel_prepare() - -From: Christophe Leroy - -[ Upstream commit 0eb089a72fda3f7969e6277804bde75dc1474a14 ] - -A disassembly of interrupt_exit_kernel_prepare() shows a useless read -of MSR register. This is shown by r9 being re-used immediately without -doing anything with the value read. - - c000e0e0: 60 00 00 00 nop - c000e0e4: 7d 3a c2 a6 mfmd_ap r9 - c000e0e8: 7d 20 00 a6 mfmsr r9 - c000e0ec: 7c 51 13 a6 mtspr 81,r2 - c000e0f0: 81 3f 00 84 lwz r9,132(r31) - c000e0f4: 71 29 80 00 andi. r9,r9,32768 - -This is due to the use of local_irq_save(). The flags read by -local_irq_save() are never used, use local_irq_disable() instead. - -Fixes: 13799748b957 ("powerpc/64: use interrupt restart table to speed up return from interrupt") -Signed-off-by: Christophe Leroy -Reviewed-by: Nicholas Piggin -Signed-off-by: Michael Ellerman -Link: https://msgid.link/df36c6205ab64326fb1b991993c82057e92ace2f.1685955214.git.christophe.leroy@csgroup.eu -Signed-off-by: Sasha Levin ---- - arch/powerpc/kernel/interrupt.c | 3 +-- - 1 file changed, 1 insertion(+), 2 deletions(-) - -diff --git a/arch/powerpc/kernel/interrupt.c b/arch/powerpc/kernel/interrupt.c -index e34c72285b4e9..f3fc5fe919d96 100644 ---- a/arch/powerpc/kernel/interrupt.c -+++ b/arch/powerpc/kernel/interrupt.c -@@ -368,7 +368,6 @@ void preempt_schedule_irq(void); - - notrace unsigned long interrupt_exit_kernel_prepare(struct pt_regs *regs) - { -- unsigned long flags; - unsigned long ret = 0; - unsigned long kuap; - bool stack_store = read_thread_flags() & _TIF_EMULATE_STACK_STORE; -@@ -392,7 +391,7 @@ notrace unsigned long interrupt_exit_kernel_prepare(struct pt_regs *regs) - - kuap = kuap_get_and_assert_locked(); - -- local_irq_save(flags); -+ local_irq_disable(); - - if (!arch_irq_disabled_regs(regs)) { - /* Returning to a kernel context with local irqs enabled. */ --- -2.39.2 - diff --git a/queue-6.4/powerpc-mm-dax-fix-the-condition-when-checking-if-al.patch b/queue-6.4/powerpc-mm-dax-fix-the-condition-when-checking-if-al.patch deleted file mode 100644 index 8adf2fdae85..00000000000 --- a/queue-6.4/powerpc-mm-dax-fix-the-condition-when-checking-if-al.patch +++ /dev/null @@ -1,40 +0,0 @@ -From 39eab7a9994bc042a811b027df07df9e524679ca Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Fri, 16 Jun 2023 16:38:15 +0530 -Subject: powerpc/mm/dax: Fix the condition when checking if altmap vmemap can - cross-boundary - -From: Aneesh Kumar K.V - -[ Upstream commit c8eebc4a99f15280654f23e914e746c40a516e50 ] - -Without this fix, the last subsection vmemmap can end up in memory even if -the namespace is created with -M mem and has sufficient space in the altmap -area. - -Fixes: cf387d9644d8 ("libnvdimm/altmap: Track namespace boundaries in altmap") -Signed-off-by: Aneesh Kumar K.V -Tested-by: Sachin Sant > -Signed-off-by: Michael Ellerman -Link: https://msgid.link/20230616110826.344417-6-aneesh.kumar@linux.ibm.com -Signed-off-by: Sasha Levin ---- - arch/powerpc/mm/init_64.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/arch/powerpc/mm/init_64.c b/arch/powerpc/mm/init_64.c -index 05b0d584e50b8..fe1b83020e0df 100644 ---- a/arch/powerpc/mm/init_64.c -+++ b/arch/powerpc/mm/init_64.c -@@ -189,7 +189,7 @@ static bool altmap_cross_boundary(struct vmem_altmap *altmap, unsigned long star - unsigned long nr_pfn = page_size / sizeof(struct page); - unsigned long start_pfn = page_to_pfn((struct page *)start); - -- if ((start_pfn + nr_pfn) > altmap->end_pfn) -+ if ((start_pfn + nr_pfn - 1) > altmap->end_pfn) - return true; - - if (start_pfn < altmap->base_pfn) --- -2.39.2 - diff --git a/queue-6.4/powerpc-powernv-sriov-perform-null-check-on-iov-befo.patch b/queue-6.4/powerpc-powernv-sriov-perform-null-check-on-iov-befo.patch deleted file mode 100644 index b125f69486f..00000000000 --- a/queue-6.4/powerpc-powernv-sriov-perform-null-check-on-iov-befo.patch +++ /dev/null @@ -1,53 +0,0 @@ -From 26e82020d2231e671cf0c6360aee134ef19669c8 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Thu, 8 Jun 2023 10:58:49 +0100 -Subject: powerpc/powernv/sriov: perform null check on iov before dereferencing - iov - -From: Colin Ian King - -[ Upstream commit f4f913c980bc6abe0ccfe88fe3909c125afe4a2d ] - -Currently pointer iov is being dereferenced before the null check of iov -which can lead to null pointer dereference errors. Fix this by moving the -iov null check before the dereferencing. - -Detected using cppcheck static analysis: -linux/arch/powerpc/platforms/powernv/pci-sriov.c:597:12: warning: Either -the condition '!iov' is redundant or there is possible null pointer -dereference: iov. [nullPointerRedundantCheck] - num_vfs = iov->num_vfs; - ^ - -Fixes: 052da31d45fc ("powerpc/powernv/sriov: De-indent setup and teardown") -Signed-off-by: Colin Ian King -Signed-off-by: Michael Ellerman -Link: https://msgid.link/20230608095849.1147969-1-colin.i.king@gmail.com -Signed-off-by: Sasha Levin ---- - arch/powerpc/platforms/powernv/pci-sriov.c | 6 +++--- - 1 file changed, 3 insertions(+), 3 deletions(-) - -diff --git a/arch/powerpc/platforms/powernv/pci-sriov.c b/arch/powerpc/platforms/powernv/pci-sriov.c -index 7195133b26bb9..59882da3e7425 100644 ---- a/arch/powerpc/platforms/powernv/pci-sriov.c -+++ b/arch/powerpc/platforms/powernv/pci-sriov.c -@@ -594,12 +594,12 @@ static void pnv_pci_sriov_disable(struct pci_dev *pdev) - struct pnv_iov_data *iov; - - iov = pnv_iov_get(pdev); -- num_vfs = iov->num_vfs; -- base_pe = iov->vf_pe_arr[0].pe_number; -- - if (WARN_ON(!iov)) - return; - -+ num_vfs = iov->num_vfs; -+ base_pe = iov->vf_pe_arr[0].pe_number; -+ - /* Release VF PEs */ - pnv_ioda_release_vf_PE(pdev); - --- -2.39.2 - diff --git a/queue-6.4/powerpc-signal32-force-inlining-of-__unsafe_save_use.patch b/queue-6.4/powerpc-signal32-force-inlining-of-__unsafe_save_use.patch deleted file mode 100644 index ea50351dee4..00000000000 --- a/queue-6.4/powerpc-signal32-force-inlining-of-__unsafe_save_use.patch +++ /dev/null @@ -1,79 +0,0 @@ -From d5ce0a073b77dcd763c78aff204f392d081857fc Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Mon, 5 Jun 2023 10:58:35 +0200 -Subject: powerpc/signal32: Force inlining of __unsafe_save_user_regs() and - save_tm_user_regs_unsafe() - -From: Christophe Leroy - -[ Upstream commit a03b1a0b19398a47489fdcef02ec19c2ba05a15d ] - -Looking at generated code for handle_signal32() shows calls to a -function called __unsafe_save_user_regs.constprop.0 while user access -is open. - -And that __unsafe_save_user_regs.constprop.0 function has two nops at -the begining, allowing it to be traced, which is unexpected during -user access open window. - -The solution could be to mark __unsafe_save_user_regs() no trace, but -to be on the safe side the most efficient is to flag it __always_inline -as already done for function __unsafe_restore_general_regs(). The -function is relatively small and only called twice, so the size -increase will remain in the noise. - -Do the same with save_tm_user_regs_unsafe() as it may suffer the -same issue. - -Fixes: ef75e7318294 ("powerpc/signal32: Transform save_user_regs() and save_tm_user_regs() in 'unsafe' version") -Signed-off-by: Christophe Leroy -Signed-off-by: Michael Ellerman -Link: https://msgid.link/7e469c8f01860a69c1ada3ca6a5e2aa65f0f74b2.1685955220.git.christophe.leroy@csgroup.eu -Signed-off-by: Sasha Levin ---- - arch/powerpc/kernel/signal_32.c | 15 +++++++++------ - 1 file changed, 9 insertions(+), 6 deletions(-) - -diff --git a/arch/powerpc/kernel/signal_32.c b/arch/powerpc/kernel/signal_32.c -index c114c7f25645c..7a718ed32b277 100644 ---- a/arch/powerpc/kernel/signal_32.c -+++ b/arch/powerpc/kernel/signal_32.c -@@ -264,8 +264,9 @@ static void prepare_save_user_regs(int ctx_has_vsx_region) - #endif - } - --static int __unsafe_save_user_regs(struct pt_regs *regs, struct mcontext __user *frame, -- struct mcontext __user *tm_frame, int ctx_has_vsx_region) -+static __always_inline int -+__unsafe_save_user_regs(struct pt_regs *regs, struct mcontext __user *frame, -+ struct mcontext __user *tm_frame, int ctx_has_vsx_region) - { - unsigned long msr = regs->msr; - -@@ -364,8 +365,9 @@ static void prepare_save_tm_user_regs(void) - current->thread.ckvrsave = mfspr(SPRN_VRSAVE); - } - --static int save_tm_user_regs_unsafe(struct pt_regs *regs, struct mcontext __user *frame, -- struct mcontext __user *tm_frame, unsigned long msr) -+static __always_inline int -+save_tm_user_regs_unsafe(struct pt_regs *regs, struct mcontext __user *frame, -+ struct mcontext __user *tm_frame, unsigned long msr) - { - /* Save both sets of general registers */ - unsafe_save_general_regs(¤t->thread.ckpt_regs, frame, failed); -@@ -444,8 +446,9 @@ static int save_tm_user_regs_unsafe(struct pt_regs *regs, struct mcontext __user - #else - static void prepare_save_tm_user_regs(void) { } - --static int save_tm_user_regs_unsafe(struct pt_regs *regs, struct mcontext __user *frame, -- struct mcontext __user *tm_frame, unsigned long msr) -+static __always_inline int -+save_tm_user_regs_unsafe(struct pt_regs *regs, struct mcontext __user *frame, -+ struct mcontext __user *tm_frame, unsigned long msr) - { - return 0; - } --- -2.39.2 - diff --git a/queue-6.4/powerpc-update-ppc_save_regs-to-save-current-r1-in-p.patch b/queue-6.4/powerpc-update-ppc_save_regs-to-save-current-r1-in-p.patch deleted file mode 100644 index 0ecf127fcac..00000000000 --- a/queue-6.4/powerpc-update-ppc_save_regs-to-save-current-r1-in-p.patch +++ /dev/null @@ -1,104 +0,0 @@ -From 69dc89f187acd8f0105ae84c15762785f0837ade Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Thu, 15 Jun 2023 14:40:47 +0530 -Subject: powerpc: update ppc_save_regs to save current r1 in pt_regs - -From: Aditya Gupta - -[ Upstream commit b684c09f09e7a6af3794d4233ef785819e72db79 ] - -ppc_save_regs() skips one stack frame while saving the CPU register states. -Instead of saving current R1, it pulls the previous stack frame pointer. - -When vmcores caused by direct panic call (such as `echo c > -/proc/sysrq-trigger`), are debugged with gdb, gdb fails to show the -backtrace correctly. On further analysis, it was found that it was because -of mismatch between r1 and NIP. - -GDB uses NIP to get current function symbol and uses corresponding debug -info of that function to unwind previous frames, but due to the -mismatching r1 and NIP, the unwinding does not work, and it fails to -unwind to the 2nd frame and hence does not show the backtrace. - -GDB backtrace with vmcore of kernel without this patch: - ---------- -(gdb) bt - #0 0xc0000000002a53e8 in crash_setup_regs (oldregs=, - newregs=0xc000000004f8f8d8) at ./arch/powerpc/include/asm/kexec.h:69 - #1 __crash_kexec (regs=) at kernel/kexec_core.c:974 - #2 0x0000000000000063 in ?? () - #3 0xc000000003579320 in ?? () ---------- - -Further analysis revealed that the mismatch occurred because -"ppc_save_regs" was saving the previous stack's SP instead of the current -r1. This patch fixes this by storing current r1 in the saved pt_regs. - -GDB backtrace with vmcore of patched kernel: - --------- -(gdb) bt - #0 0xc0000000002a53e8 in crash_setup_regs (oldregs=0x0, newregs=0xc00000000670b8d8) - at ./arch/powerpc/include/asm/kexec.h:69 - #1 __crash_kexec (regs=regs@entry=0x0) at kernel/kexec_core.c:974 - #2 0xc000000000168918 in panic (fmt=fmt@entry=0xc000000001654a60 "sysrq triggered crash\n") - at kernel/panic.c:358 - #3 0xc000000000b735f8 in sysrq_handle_crash (key=) at drivers/tty/sysrq.c:155 - #4 0xc000000000b742cc in __handle_sysrq (key=key@entry=99, check_mask=check_mask@entry=false) - at drivers/tty/sysrq.c:602 - #5 0xc000000000b7506c in write_sysrq_trigger (file=, buf=, - count=2, ppos=) at drivers/tty/sysrq.c:1163 - #6 0xc00000000069a7bc in pde_write (ppos=, count=, - buf=, file=, pde=0xc00000000362cb40) at fs/proc/inode.c:340 - #7 proc_reg_write (file=, buf=, count=, - ppos=) at fs/proc/inode.c:352 - #8 0xc0000000005b3bbc in vfs_write (file=file@entry=0xc000000006aa6b00, - buf=buf@entry=0x61f498b4f60 , - count=count@entry=2, pos=pos@entry=0xc00000000670bda0) at fs/read_write.c:582 - #9 0xc0000000005b4264 in ksys_write (fd=, - buf=0x61f498b4f60 , count=2) - at fs/read_write.c:637 - #10 0xc00000000002ea2c in system_call_exception (regs=0xc00000000670be80, r0=) - at arch/powerpc/kernel/syscall.c:171 - #11 0xc00000000000c270 in system_call_vectored_common () - at arch/powerpc/kernel/interrupt_64.S:192 --------- - -Nick adds: - So this now saves regs as though it was an interrupt taken in the - caller, at the instruction after the call to ppc_save_regs, whereas - previously the NIP was there, but R1 came from the caller's caller and - that mismatch is what causes gdb's dwarf unwinder to go haywire. - -Signed-off-by: Aditya Gupta -Fixes: d16a58f8854b1 ("powerpc: Improve ppc_save_regs()") -Reivewed-by: Nicholas Piggin -Signed-off-by: Michael Ellerman -Link: https://msgid.link/20230615091047.90433-1-adityag@linux.ibm.com -Signed-off-by: Sasha Levin ---- - arch/powerpc/kernel/ppc_save_regs.S | 6 +++--- - 1 file changed, 3 insertions(+), 3 deletions(-) - -diff --git a/arch/powerpc/kernel/ppc_save_regs.S b/arch/powerpc/kernel/ppc_save_regs.S -index 49813f9824681..a9b9c32d0c1ff 100644 ---- a/arch/powerpc/kernel/ppc_save_regs.S -+++ b/arch/powerpc/kernel/ppc_save_regs.S -@@ -31,10 +31,10 @@ _GLOBAL(ppc_save_regs) - lbz r0,PACAIRQSOFTMASK(r13) - PPC_STL r0,SOFTE(r3) - #endif -- /* go up one stack frame for SP */ -- PPC_LL r4,0(r1) -- PPC_STL r4,GPR1(r3) -+ /* store current SP */ -+ PPC_STL r1,GPR1(r3) - /* get caller's LR */ -+ PPC_LL r4,0(r1) - PPC_LL r0,LRSAVE(r4) - PPC_STL r0,_LINK(r3) - mflr r0 --- -2.39.2 - diff --git a/queue-6.4/pstore-ram-add-check-for-kstrdup.patch b/queue-6.4/pstore-ram-add-check-for-kstrdup.patch deleted file mode 100644 index 131b29ef4cc..00000000000 --- a/queue-6.4/pstore-ram-add-check-for-kstrdup.patch +++ /dev/null @@ -1,37 +0,0 @@ -From 4d37fcb7bdd3c36c5c5f4a2c4aa780e90f80a875 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Wed, 14 Jun 2023 17:37:33 +0800 -Subject: pstore/ram: Add check for kstrdup - -From: Jiasheng Jiang - -[ Upstream commit d97038d5ec2062733c1e016caf9baaf68cf64ea1 ] - -Add check for the return value of kstrdup() and return the error -if it fails in order to avoid NULL pointer dereference. - -Fixes: e163fdb3f7f8 ("pstore/ram: Regularize prz label allocation lifetime") -Signed-off-by: Jiasheng Jiang -Signed-off-by: Kees Cook -Link: https://lore.kernel.org/r/20230614093733.36048-1-jiasheng@iscas.ac.cn -Signed-off-by: Sasha Levin ---- - fs/pstore/ram_core.c | 2 ++ - 1 file changed, 2 insertions(+) - -diff --git a/fs/pstore/ram_core.c b/fs/pstore/ram_core.c -index 966191d3a5ba2..85aaf0fc6d7d1 100644 ---- a/fs/pstore/ram_core.c -+++ b/fs/pstore/ram_core.c -@@ -599,6 +599,8 @@ struct persistent_ram_zone *persistent_ram_new(phys_addr_t start, size_t size, - raw_spin_lock_init(&prz->buffer_lock); - prz->flags = flags; - prz->label = kstrdup(label, GFP_KERNEL); -+ if (!prz->label) -+ goto err; - - ret = persistent_ram_buffer_map(start, size, prz, memtype); - if (ret) --- -2.39.2 - diff --git a/queue-6.4/radeon-avoid-double-free-in-ci_dpm_init.patch b/queue-6.4/radeon-avoid-double-free-in-ci_dpm_init.patch deleted file mode 100644 index 439f9129ee8..00000000000 --- a/queue-6.4/radeon-avoid-double-free-in-ci_dpm_init.patch +++ /dev/null @@ -1,110 +0,0 @@ -From 73533b390b3697cfa3c57f7ee5f28c26ffa3c7fc Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Thu, 13 Apr 2023 08:12:28 -0700 -Subject: radeon: avoid double free in ci_dpm_init() - -From: Nikita Zhandarovich - -[ Upstream commit 20c3dffdccbd494e0dd631d1660aeecbff6775f2 ] - -Several calls to ci_dpm_fini() will attempt to free resources that -either have been freed before or haven't been allocated yet. This -may lead to undefined or dangerous behaviour. - -For instance, if r600_parse_extended_power_table() fails, it might -call r600_free_extended_power_table() as will ci_dpm_fini() later -during error handling. - -Fix this by only freeing pointers to objects previously allocated. - -Found by Linux Verification Center (linuxtesting.org) with static -analysis tool SVACE. - -Fixes: cc8dbbb4f62a ("drm/radeon: add dpm support for CI dGPUs (v2)") -Co-developed-by: Natalia Petrova -Signed-off-by: Nikita Zhandarovich -Signed-off-by: Alex Deucher -Signed-off-by: Sasha Levin ---- - drivers/gpu/drm/radeon/ci_dpm.c | 28 ++++++++++++++++++++-------- - 1 file changed, 20 insertions(+), 8 deletions(-) - -diff --git a/drivers/gpu/drm/radeon/ci_dpm.c b/drivers/gpu/drm/radeon/ci_dpm.c -index 8ef25ab305ae7..b8f4dac68d850 100644 ---- a/drivers/gpu/drm/radeon/ci_dpm.c -+++ b/drivers/gpu/drm/radeon/ci_dpm.c -@@ -5517,6 +5517,7 @@ static int ci_parse_power_table(struct radeon_device *rdev) - u8 frev, crev; - u8 *power_state_offset; - struct ci_ps *ps; -+ int ret; - - if (!atom_parse_data_header(mode_info->atom_context, index, NULL, - &frev, &crev, &data_offset)) -@@ -5546,11 +5547,15 @@ static int ci_parse_power_table(struct radeon_device *rdev) - 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]; -- if (!rdev->pm.power_state[i].clock_info) -- return -EINVAL; -+ if (!rdev->pm.power_state[i].clock_info) { -+ ret = -EINVAL; -+ goto err_free_ps; -+ } - ps = kzalloc(sizeof(struct ci_ps), GFP_KERNEL); -- if (ps == NULL) -- return -ENOMEM; -+ if (ps == NULL) { -+ ret = -ENOMEM; -+ goto err_free_ps; -+ } - rdev->pm.dpm.ps[i].ps_priv = ps; - ci_parse_pplib_non_clock_info(rdev, &rdev->pm.dpm.ps[i], - non_clock_info, -@@ -5590,6 +5595,12 @@ static int ci_parse_power_table(struct radeon_device *rdev) - } - - return 0; -+ -+err_free_ps: -+ for (i = 0; i < rdev->pm.dpm.num_ps; i++) -+ kfree(rdev->pm.dpm.ps[i].ps_priv); -+ kfree(rdev->pm.dpm.ps); -+ return ret; - } - - static int ci_get_vbios_boot_values(struct radeon_device *rdev, -@@ -5678,25 +5689,26 @@ int ci_dpm_init(struct radeon_device *rdev) - - ret = ci_get_vbios_boot_values(rdev, &pi->vbios_boot_state); - if (ret) { -- ci_dpm_fini(rdev); -+ kfree(rdev->pm.dpm.priv); - return ret; - } - - ret = r600_get_platform_caps(rdev); - if (ret) { -- ci_dpm_fini(rdev); -+ kfree(rdev->pm.dpm.priv); - return ret; - } - - ret = r600_parse_extended_power_table(rdev); - if (ret) { -- ci_dpm_fini(rdev); -+ kfree(rdev->pm.dpm.priv); - return ret; - } - - ret = ci_parse_power_table(rdev); - if (ret) { -- ci_dpm_fini(rdev); -+ kfree(rdev->pm.dpm.priv); -+ r600_free_extended_power_table(rdev); - return ret; - } - --- -2.39.2 - diff --git a/queue-6.4/rcu-make-rcu_cpu_starting-rely-on-interrupts-being-d.patch b/queue-6.4/rcu-make-rcu_cpu_starting-rely-on-interrupts-being-d.patch deleted file mode 100644 index a0ab696f543..00000000000 --- a/queue-6.4/rcu-make-rcu_cpu_starting-rely-on-interrupts-being-d.patch +++ /dev/null @@ -1,85 +0,0 @@ -From ef97b5299775d9f6d0e1b87c4b9cea693613bd32 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Thu, 27 Apr 2023 10:50:47 -0700 -Subject: rcu: Make rcu_cpu_starting() rely on interrupts being disabled - -From: Paul E. McKenney - -[ Upstream commit 15d44dfa40305da1648de4bf001e91cc63148725 ] - -Currently, rcu_cpu_starting() is written so that it might be invoked -with interrupts enabled. However, it is always called when interrupts -are disabled, either by rcu_init(), notify_cpu_starting(), or from a -call point prior to the call to notify_cpu_starting(). - -But why bother requiring that interrupts be disabled? The purpose is -to allow the rcu_data structure's ->beenonline flag to be set after all -early processing has completed for the incoming CPU, thus allowing this -flag to be used to determine when workqueues have been set up for the -incoming CPU, while still allowing this flag to be used as a diagnostic -within rcu_core(). - -This commit therefore makes rcu_cpu_starting() rely on interrupts being -disabled. - -Signed-off-by: Paul E. McKenney -Stable-dep-of: 401b0de3ae4f ("rcu-tasks: Stop rcu_tasks_invoke_cbs() from using never-onlined CPUs") -Signed-off-by: Sasha Levin ---- - kernel/rcu/tree.c | 11 +++++------ - 1 file changed, 5 insertions(+), 6 deletions(-) - -diff --git a/kernel/rcu/tree.c b/kernel/rcu/tree.c -index f52ff72410416..d5c9afa8adfbd 100644 ---- a/kernel/rcu/tree.c -+++ b/kernel/rcu/tree.c -@@ -4368,15 +4368,16 @@ int rcutree_offline_cpu(unsigned int cpu) - * Note that this function is special in that it is invoked directly - * from the incoming CPU rather than from the cpuhp_step mechanism. - * This is because this function must be invoked at a precise location. -+ * This incoming CPU must not have enabled interrupts yet. - */ - void rcu_cpu_starting(unsigned int cpu) - { -- unsigned long flags; - unsigned long mask; - struct rcu_data *rdp; - struct rcu_node *rnp; - bool newcpu; - -+ lockdep_assert_irqs_disabled(); - rdp = per_cpu_ptr(&rcu_data, cpu); - if (rdp->cpu_started) - return; -@@ -4384,7 +4385,6 @@ void rcu_cpu_starting(unsigned int cpu) - - rnp = rdp->mynode; - mask = rdp->grpmask; -- local_irq_save(flags); - arch_spin_lock(&rcu_state.ofl_lock); - rcu_dynticks_eqs_online(); - raw_spin_lock(&rcu_state.barrier_lock); -@@ -4403,17 +4403,16 @@ void rcu_cpu_starting(unsigned int cpu) - /* An incoming CPU should never be blocking a grace period. */ - if (WARN_ON_ONCE(rnp->qsmask & mask)) { /* RCU waiting on incoming CPU? */ - /* rcu_report_qs_rnp() *really* wants some flags to restore */ -- unsigned long flags2; -+ unsigned long flags; - -- local_irq_save(flags2); -+ local_irq_save(flags); - rcu_disable_urgency_upon_qs(rdp); - /* Report QS -after- changing ->qsmaskinitnext! */ -- rcu_report_qs_rnp(mask, rnp, rnp->gp_seq, flags2); -+ rcu_report_qs_rnp(mask, rnp, rnp->gp_seq, flags); - } else { - raw_spin_unlock_rcu_node(rnp); - } - arch_spin_unlock(&rcu_state.ofl_lock); -- local_irq_restore(flags); - smp_mb(); /* Ensure RCU read-side usage follows above initialization. */ - } - --- -2.39.2 - diff --git a/queue-6.4/rcu-rcuscale-move-rcu_scale_-after-kfree_scale_clean.patch b/queue-6.4/rcu-rcuscale-move-rcu_scale_-after-kfree_scale_clean.patch deleted file mode 100644 index f8e34b9399e..00000000000 --- a/queue-6.4/rcu-rcuscale-move-rcu_scale_-after-kfree_scale_clean.patch +++ /dev/null @@ -1,245 +0,0 @@ -From 5206fc8ce29b10c1da84d5965fa5a9da1a8679f7 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Wed, 22 Mar 2023 19:42:40 +0800 -Subject: rcu/rcuscale: Move rcu_scale_*() after kfree_scale_cleanup() - -From: Qiuxu Zhuo - -[ Upstream commit bf5ddd736509a7d9077c0b6793e6f0852214dbea ] - -This code-movement-only commit moves the rcu_scale_cleanup() and -rcu_scale_shutdown() functions to follow kfree_scale_cleanup(). -This is code movement is in preparation for a bug-fix patch that invokes -kfree_scale_cleanup() from rcu_scale_cleanup(). - -Signed-off-by: Qiuxu Zhuo -Signed-off-by: Paul E. McKenney -Reviewed-by: Joel Fernandes (Google) -Stable-dep-of: 23fc8df26dea ("rcu/rcuscale: Stop kfree_scale_thread thread(s) after unloading rcuscale") -Signed-off-by: Sasha Levin ---- - kernel/rcu/rcuscale.c | 194 +++++++++++++++++++++--------------------- - 1 file changed, 97 insertions(+), 97 deletions(-) - -diff --git a/kernel/rcu/rcuscale.c b/kernel/rcu/rcuscale.c -index e82ec9f9a5d80..7e8965b0827a9 100644 ---- a/kernel/rcu/rcuscale.c -+++ b/kernel/rcu/rcuscale.c -@@ -522,89 +522,6 @@ rcu_scale_print_module_parms(struct rcu_scale_ops *cur_ops, const char *tag) - scale_type, tag, nrealreaders, nrealwriters, verbose, shutdown); - } - --static void --rcu_scale_cleanup(void) --{ -- int i; -- int j; -- int ngps = 0; -- u64 *wdp; -- u64 *wdpp; -- -- /* -- * Would like warning at start, but everything is expedited -- * during the mid-boot phase, so have to wait till the end. -- */ -- if (rcu_gp_is_expedited() && !rcu_gp_is_normal() && !gp_exp) -- SCALEOUT_ERRSTRING("All grace periods expedited, no normal ones to measure!"); -- if (rcu_gp_is_normal() && gp_exp) -- SCALEOUT_ERRSTRING("All grace periods normal, no expedited ones to measure!"); -- if (gp_exp && gp_async) -- SCALEOUT_ERRSTRING("No expedited async GPs, so went with async!"); -- -- if (torture_cleanup_begin()) -- return; -- if (!cur_ops) { -- torture_cleanup_end(); -- return; -- } -- -- if (reader_tasks) { -- for (i = 0; i < nrealreaders; i++) -- torture_stop_kthread(rcu_scale_reader, -- reader_tasks[i]); -- kfree(reader_tasks); -- } -- -- if (writer_tasks) { -- for (i = 0; i < nrealwriters; i++) { -- torture_stop_kthread(rcu_scale_writer, -- writer_tasks[i]); -- if (!writer_n_durations) -- continue; -- j = writer_n_durations[i]; -- pr_alert("%s%s writer %d gps: %d\n", -- scale_type, SCALE_FLAG, i, j); -- ngps += j; -- } -- pr_alert("%s%s start: %llu end: %llu duration: %llu gps: %d batches: %ld\n", -- scale_type, SCALE_FLAG, -- t_rcu_scale_writer_started, t_rcu_scale_writer_finished, -- t_rcu_scale_writer_finished - -- t_rcu_scale_writer_started, -- ngps, -- rcuscale_seq_diff(b_rcu_gp_test_finished, -- b_rcu_gp_test_started)); -- for (i = 0; i < nrealwriters; i++) { -- if (!writer_durations) -- break; -- if (!writer_n_durations) -- continue; -- wdpp = writer_durations[i]; -- if (!wdpp) -- continue; -- for (j = 0; j < writer_n_durations[i]; j++) { -- wdp = &wdpp[j]; -- pr_alert("%s%s %4d writer-duration: %5d %llu\n", -- scale_type, SCALE_FLAG, -- i, j, *wdp); -- if (j % 100 == 0) -- schedule_timeout_uninterruptible(1); -- } -- kfree(writer_durations[i]); -- } -- kfree(writer_tasks); -- kfree(writer_durations); -- kfree(writer_n_durations); -- } -- -- /* Do torture-type-specific cleanup operations. */ -- if (cur_ops->cleanup != NULL) -- cur_ops->cleanup(); -- -- torture_cleanup_end(); --} -- - /* - * Return the number if non-negative. If -1, the number of CPUs. - * If less than -1, that much less than the number of CPUs, but -@@ -624,20 +541,6 @@ static int compute_real(int n) - return nr; - } - --/* -- * RCU scalability shutdown kthread. Just waits to be awakened, then shuts -- * down system. -- */ --static int --rcu_scale_shutdown(void *arg) --{ -- wait_event_idle(shutdown_wq, atomic_read(&n_rcu_scale_writer_finished) >= nrealwriters); -- smp_mb(); /* Wake before output. */ -- rcu_scale_cleanup(); -- kernel_power_off(); -- return -EINVAL; --} -- - /* - * kfree_rcu() scalability tests: Start a kfree_rcu() loop on all CPUs for number - * of iterations and measure total time and number of GP for all iterations to complete. -@@ -874,6 +777,103 @@ kfree_scale_init(void) - return firsterr; - } - -+static void -+rcu_scale_cleanup(void) -+{ -+ int i; -+ int j; -+ int ngps = 0; -+ u64 *wdp; -+ u64 *wdpp; -+ -+ /* -+ * Would like warning at start, but everything is expedited -+ * during the mid-boot phase, so have to wait till the end. -+ */ -+ if (rcu_gp_is_expedited() && !rcu_gp_is_normal() && !gp_exp) -+ SCALEOUT_ERRSTRING("All grace periods expedited, no normal ones to measure!"); -+ if (rcu_gp_is_normal() && gp_exp) -+ SCALEOUT_ERRSTRING("All grace periods normal, no expedited ones to measure!"); -+ if (gp_exp && gp_async) -+ SCALEOUT_ERRSTRING("No expedited async GPs, so went with async!"); -+ -+ if (torture_cleanup_begin()) -+ return; -+ if (!cur_ops) { -+ torture_cleanup_end(); -+ return; -+ } -+ -+ if (reader_tasks) { -+ for (i = 0; i < nrealreaders; i++) -+ torture_stop_kthread(rcu_scale_reader, -+ reader_tasks[i]); -+ kfree(reader_tasks); -+ } -+ -+ if (writer_tasks) { -+ for (i = 0; i < nrealwriters; i++) { -+ torture_stop_kthread(rcu_scale_writer, -+ writer_tasks[i]); -+ if (!writer_n_durations) -+ continue; -+ j = writer_n_durations[i]; -+ pr_alert("%s%s writer %d gps: %d\n", -+ scale_type, SCALE_FLAG, i, j); -+ ngps += j; -+ } -+ pr_alert("%s%s start: %llu end: %llu duration: %llu gps: %d batches: %ld\n", -+ scale_type, SCALE_FLAG, -+ t_rcu_scale_writer_started, t_rcu_scale_writer_finished, -+ t_rcu_scale_writer_finished - -+ t_rcu_scale_writer_started, -+ ngps, -+ rcuscale_seq_diff(b_rcu_gp_test_finished, -+ b_rcu_gp_test_started)); -+ for (i = 0; i < nrealwriters; i++) { -+ if (!writer_durations) -+ break; -+ if (!writer_n_durations) -+ continue; -+ wdpp = writer_durations[i]; -+ if (!wdpp) -+ continue; -+ for (j = 0; j < writer_n_durations[i]; j++) { -+ wdp = &wdpp[j]; -+ pr_alert("%s%s %4d writer-duration: %5d %llu\n", -+ scale_type, SCALE_FLAG, -+ i, j, *wdp); -+ if (j % 100 == 0) -+ schedule_timeout_uninterruptible(1); -+ } -+ kfree(writer_durations[i]); -+ } -+ kfree(writer_tasks); -+ kfree(writer_durations); -+ kfree(writer_n_durations); -+ } -+ -+ /* Do torture-type-specific cleanup operations. */ -+ if (cur_ops->cleanup != NULL) -+ cur_ops->cleanup(); -+ -+ torture_cleanup_end(); -+} -+ -+/* -+ * RCU scalability shutdown kthread. Just waits to be awakened, then shuts -+ * down system. -+ */ -+static int -+rcu_scale_shutdown(void *arg) -+{ -+ wait_event_idle(shutdown_wq, atomic_read(&n_rcu_scale_writer_finished) >= nrealwriters); -+ smp_mb(); /* Wake before output. */ -+ rcu_scale_cleanup(); -+ kernel_power_off(); -+ return -EINVAL; -+} -+ - static int __init - rcu_scale_init(void) - { --- -2.39.2 - diff --git a/queue-6.4/rcu-rcuscale-stop-kfree_scale_thread-thread-s-after-.patch b/queue-6.4/rcu-rcuscale-stop-kfree_scale_thread-thread-s-after-.patch deleted file mode 100644 index 033c3210b1a..00000000000 --- a/queue-6.4/rcu-rcuscale-stop-kfree_scale_thread-thread-s-after-.patch +++ /dev/null @@ -1,81 +0,0 @@ -From 73d1c979cdd166bcb1ee18a638b0b087ab386069 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Wed, 22 Mar 2023 19:42:41 +0800 -Subject: rcu/rcuscale: Stop kfree_scale_thread thread(s) after unloading - rcuscale - -From: Qiuxu Zhuo - -[ Upstream commit 23fc8df26dead16687ae6eb47b0561a4a832e2f6 ] - -Running the 'kfree_rcu_test' test case [1] results in a splat [2]. -The root cause is the kfree_scale_thread thread(s) continue running -after unloading the rcuscale module. This commit fixes that isue by -invoking kfree_scale_cleanup() from rcu_scale_cleanup() when removing -the rcuscale module. - -[1] modprobe rcuscale kfree_rcu_test=1 - // After some time - rmmod rcuscale - rmmod torture - -[2] BUG: unable to handle page fault for address: ffffffffc0601a87 - #PF: supervisor instruction fetch in kernel mode - #PF: error_code(0x0010) - not-present page - PGD 11de4f067 P4D 11de4f067 PUD 11de51067 PMD 112f4d067 PTE 0 - Oops: 0010 [#1] PREEMPT SMP NOPTI - CPU: 1 PID: 1798 Comm: kfree_scale_thr Not tainted 6.3.0-rc1-rcu+ #1 - Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 0.0.0 02/06/2015 - RIP: 0010:0xffffffffc0601a87 - Code: Unable to access opcode bytes at 0xffffffffc0601a5d. - RSP: 0018:ffffb25bc2e57e18 EFLAGS: 00010297 - RAX: 0000000000000000 RBX: ffffffffc061f0b6 RCX: 0000000000000000 - RDX: 0000000000000000 RSI: ffffffff962fd0de RDI: ffffffff962fd0de - RBP: ffffb25bc2e57ea8 R08: 0000000000000000 R09: 0000000000000000 - R10: 0000000000000001 R11: 0000000000000001 R12: 0000000000000000 - R13: 0000000000000000 R14: 000000000000000a R15: 00000000001c1dbe - FS: 0000000000000000(0000) GS:ffff921fa2200000(0000) knlGS:0000000000000000 - CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033 - CR2: ffffffffc0601a5d CR3: 000000011de4c006 CR4: 0000000000370ee0 - DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000 - DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400 - Call Trace: - - ? kvfree_call_rcu+0xf0/0x3a0 - ? kthread+0xf3/0x120 - ? kthread_complete_and_exit+0x20/0x20 - ? ret_from_fork+0x1f/0x30 - - Modules linked in: rfkill sunrpc ... [last unloaded: torture] - CR2: ffffffffc0601a87 - ---[ end trace 0000000000000000 ]--- - -Fixes: e6e78b004fa7 ("rcuperf: Add kfree_rcu() performance Tests") -Reviewed-by: Davidlohr Bueso -Reviewed-by: Joel Fernandes (Google) -Signed-off-by: Qiuxu Zhuo -Signed-off-by: Paul E. McKenney -Signed-off-by: Sasha Levin ---- - kernel/rcu/rcuscale.c | 5 +++++ - 1 file changed, 5 insertions(+) - -diff --git a/kernel/rcu/rcuscale.c b/kernel/rcu/rcuscale.c -index 7e8965b0827a9..d1221731c7cfd 100644 ---- a/kernel/rcu/rcuscale.c -+++ b/kernel/rcu/rcuscale.c -@@ -797,6 +797,11 @@ rcu_scale_cleanup(void) - if (gp_exp && gp_async) - SCALEOUT_ERRSTRING("No expedited async GPs, so went with async!"); - -+ if (kfree_rcu_test) { -+ kfree_scale_cleanup(); -+ return; -+ } -+ - if (torture_cleanup_begin()) - return; - if (!cur_ops) { --- -2.39.2 - diff --git a/queue-6.4/rcu-tasks-stop-rcu_tasks_invoke_cbs-from-using-never.patch b/queue-6.4/rcu-tasks-stop-rcu_tasks_invoke_cbs-from-using-never.patch deleted file mode 100644 index 0942b3f3a23..00000000000 --- a/queue-6.4/rcu-tasks-stop-rcu_tasks_invoke_cbs-from-using-never.patch +++ /dev/null @@ -1,125 +0,0 @@ -From 3950d9af6dd63f589e6ce19bd6934a41f791f7e6 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Wed, 26 Apr 2023 11:11:29 -0700 -Subject: rcu-tasks: Stop rcu_tasks_invoke_cbs() from using never-onlined CPUs - -From: Paul E. McKenney - -[ Upstream commit 401b0de3ae4fa49d1014c8941e26d9a25f37e7cf ] - -The rcu_tasks_invoke_cbs() function relies on queue_work_on() to silently -fall back to WORK_CPU_UNBOUND when the specified CPU is offline. However, -the queue_work_on() function's silent fallback mechanism relies on that -CPU having been online at some time in the past. When queue_work_on() -is passed a CPU that has never been online, workqueue lockups ensue, -which can be bad for your kernel's general health and well-being. - -This commit therefore checks whether a given CPU has ever been online, -and, if not substitutes WORK_CPU_UNBOUND in the subsequent call to -queue_work_on(). Why not simply omit the queue_work_on() call entirely? -Because this function is flooding callback-invocation notifications -to all CPUs, and must deal with possibilities that include a sparse -cpu_possible_mask. - -This commit also moves the setting of the rcu_data structure's -->beenonline field to rcu_cpu_starting(), which executes on the -incoming CPU before that CPU has ever enabled interrupts. This ensures -that the required workqueues are present. In addition, because the -incoming CPU has not yet enabled its interrupts, there cannot yet have -been any softirq handlers running on this CPU, which means that the -WARN_ON_ONCE(!rdp->beenonline) within the RCU_SOFTIRQ handler cannot -have triggered yet. - -Fixes: d363f833c6d88 ("rcu-tasks: Use workqueues for multiple rcu_tasks_invoke_cbs() invocations") -Reported-by: Tejun Heo -Signed-off-by: Paul E. McKenney -Signed-off-by: Sasha Levin ---- - kernel/rcu/rcu.h | 6 ++++++ - kernel/rcu/tasks.h | 7 +++++-- - kernel/rcu/tree.c | 12 +++++++++++- - 3 files changed, 22 insertions(+), 3 deletions(-) - -diff --git a/kernel/rcu/rcu.h b/kernel/rcu/rcu.h -index 4a1b9622598be..98c1544cf572b 100644 ---- a/kernel/rcu/rcu.h -+++ b/kernel/rcu/rcu.h -@@ -642,4 +642,10 @@ void show_rcu_tasks_trace_gp_kthread(void); - static inline void show_rcu_tasks_trace_gp_kthread(void) {} - #endif - -+#ifdef CONFIG_TINY_RCU -+static inline bool rcu_cpu_beenfullyonline(int cpu) { return true; } -+#else -+bool rcu_cpu_beenfullyonline(int cpu); -+#endif -+ - #endif /* __LINUX_RCU_H */ -diff --git a/kernel/rcu/tasks.h b/kernel/rcu/tasks.h -index 5f4fc8184dd0b..8f08c087142b0 100644 ---- a/kernel/rcu/tasks.h -+++ b/kernel/rcu/tasks.h -@@ -463,6 +463,7 @@ static void rcu_tasks_invoke_cbs(struct rcu_tasks *rtp, struct rcu_tasks_percpu - { - int cpu; - int cpunext; -+ int cpuwq; - unsigned long flags; - int len; - struct rcu_head *rhp; -@@ -473,11 +474,13 @@ static void rcu_tasks_invoke_cbs(struct rcu_tasks *rtp, struct rcu_tasks_percpu - cpunext = cpu * 2 + 1; - if (cpunext < smp_load_acquire(&rtp->percpu_dequeue_lim)) { - rtpcp_next = per_cpu_ptr(rtp->rtpcpu, cpunext); -- queue_work_on(cpunext, system_wq, &rtpcp_next->rtp_work); -+ cpuwq = rcu_cpu_beenfullyonline(cpunext) ? cpunext : WORK_CPU_UNBOUND; -+ queue_work_on(cpuwq, system_wq, &rtpcp_next->rtp_work); - cpunext++; - if (cpunext < smp_load_acquire(&rtp->percpu_dequeue_lim)) { - rtpcp_next = per_cpu_ptr(rtp->rtpcpu, cpunext); -- queue_work_on(cpunext, system_wq, &rtpcp_next->rtp_work); -+ cpuwq = rcu_cpu_beenfullyonline(cpunext) ? cpunext : WORK_CPU_UNBOUND; -+ queue_work_on(cpuwq, system_wq, &rtpcp_next->rtp_work); - } - } - -diff --git a/kernel/rcu/tree.c b/kernel/rcu/tree.c -index d5c9afa8adfbd..ce51f85f0d5e4 100644 ---- a/kernel/rcu/tree.c -+++ b/kernel/rcu/tree.c -@@ -4283,7 +4283,6 @@ int rcutree_prepare_cpu(unsigned int cpu) - */ - rnp = rdp->mynode; - raw_spin_lock_rcu_node(rnp); /* irqs already disabled. */ -- rdp->beenonline = true; /* We have now been online. */ - rdp->gp_seq = READ_ONCE(rnp->gp_seq); - rdp->gp_seq_needed = rdp->gp_seq; - rdp->cpu_no_qs.b.norm = true; -@@ -4310,6 +4309,16 @@ static void rcutree_affinity_setting(unsigned int cpu, int outgoing) - rcu_boost_kthread_setaffinity(rdp->mynode, outgoing); - } - -+/* -+ * Has the specified (known valid) CPU ever been fully online? -+ */ -+bool rcu_cpu_beenfullyonline(int cpu) -+{ -+ struct rcu_data *rdp = per_cpu_ptr(&rcu_data, cpu); -+ -+ return smp_load_acquire(&rdp->beenonline); -+} -+ - /* - * Near the end of the CPU-online process. Pretty much all services - * enabled, and the CPU is now very much alive. -@@ -4413,6 +4422,7 @@ void rcu_cpu_starting(unsigned int cpu) - raw_spin_unlock_rcu_node(rnp); - } - arch_spin_unlock(&rcu_state.ofl_lock); -+ smp_store_release(&rdp->beenonline, true); - smp_mb(); /* Ensure RCU read-side usage follows above initialization. */ - } - --- -2.39.2 - diff --git a/queue-6.4/rcutorture-correct-name-of-use_softirq-module-parame.patch b/queue-6.4/rcutorture-correct-name-of-use_softirq-module-parame.patch deleted file mode 100644 index dd5c475b9f7..00000000000 --- a/queue-6.4/rcutorture-correct-name-of-use_softirq-module-parame.patch +++ /dev/null @@ -1,45 +0,0 @@ -From 006d9419ff64d2e1cd8b2cfacb97f614315cc404 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Tue, 21 Mar 2023 16:40:08 -0700 -Subject: rcutorture: Correct name of use_softirq module parameter - -From: Paul E. McKenney - -[ Upstream commit b409afe0268faeb77267f028ea85f2d93438fced ] - -The BUSTED-BOOST and TREE03 scenarios specify a mythical tree.use_softirq -module parameter, which means a failure to get full test coverage. This -commit therefore corrects the name to rcutree.use_softirq. - -Fixes: e2b949d54392 ("rcutorture: Make TREE03 use real-time tree.use_softirq setting") -Signed-off-by: Paul E. McKenney -Reviewed-by: Joel Fernandes (Google) -Signed-off-by: Sasha Levin ---- - .../testing/selftests/rcutorture/configs/rcu/BUSTED-BOOST.boot | 2 +- - tools/testing/selftests/rcutorture/configs/rcu/TREE03.boot | 2 +- - 2 files changed, 2 insertions(+), 2 deletions(-) - -diff --git a/tools/testing/selftests/rcutorture/configs/rcu/BUSTED-BOOST.boot b/tools/testing/selftests/rcutorture/configs/rcu/BUSTED-BOOST.boot -index f57720c52c0f9..84f6bb98ce993 100644 ---- a/tools/testing/selftests/rcutorture/configs/rcu/BUSTED-BOOST.boot -+++ b/tools/testing/selftests/rcutorture/configs/rcu/BUSTED-BOOST.boot -@@ -5,4 +5,4 @@ rcutree.gp_init_delay=3 - rcutree.gp_cleanup_delay=3 - rcutree.kthread_prio=2 - threadirqs --tree.use_softirq=0 -+rcutree.use_softirq=0 -diff --git a/tools/testing/selftests/rcutorture/configs/rcu/TREE03.boot b/tools/testing/selftests/rcutorture/configs/rcu/TREE03.boot -index 64f864f1f361f..8e50bfd4b710d 100644 ---- a/tools/testing/selftests/rcutorture/configs/rcu/TREE03.boot -+++ b/tools/testing/selftests/rcutorture/configs/rcu/TREE03.boot -@@ -4,4 +4,4 @@ rcutree.gp_init_delay=3 - rcutree.gp_cleanup_delay=3 - rcutree.kthread_prio=2 - threadirqs --tree.use_softirq=0 -+rcutree.use_softirq=0 --- -2.39.2 - diff --git a/queue-6.4/rdma-bnxt_re-avoid-calling-wake_up-threads-from-spin.patch b/queue-6.4/rdma-bnxt_re-avoid-calling-wake_up-threads-from-spin.patch deleted file mode 100644 index bf20c2e7f96..00000000000 --- a/queue-6.4/rdma-bnxt_re-avoid-calling-wake_up-threads-from-spin.patch +++ /dev/null @@ -1,99 +0,0 @@ -From b57ac7cc24aef6a612ddfbe61aaa7eba2aa1f211 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Fri, 9 Jun 2023 04:01:39 -0700 -Subject: RDMA/bnxt_re: Avoid calling wake_up threads from spin_lock context - -From: Kashyap Desai - -[ Upstream commit 3099bcdc19b701f732f638ee45679858c08559bb ] - -bnxt_qplib_service_creq can be called from interrupt or tasklet or -process context. So the function take irq variant of spin_lock. -But when wake_up is invoked with the lock held, it is putting the -calling context to sleep. - -[exception RIP: __wake_up_common+190] -RIP: ffffffffb7539d7e RSP: ffffa73300207ad8 RFLAGS: 00000083 -RAX: 0000000000000001 RBX: ffff91fa295f69b8 RCX: dead000000000200 -RDX: ffffa733344af940 RSI: ffffa73336527940 RDI: ffffa73336527940 -RBP: 000000000000001c R8: 0000000000000002 R9: 00000000000299c0 -R10: 0000017230de82c5 R11: 0000000000000002 R12: ffffa73300207b28 -R13: 0000000000000000 R14: ffffa733341bf928 R15: 0000000000000000 -ORIG_RAX: ffffffffffffffff CS: 0010 SS: 0018 - -Call the wakeup after releasing the lock. - -Fixes: 1ac5a4047975 ("RDMA/bnxt_re: Add bnxt_re RoCE driver") -Signed-off-by: Kashyap Desai -Signed-off-by: Selvin Xavier -Link: https://lore.kernel.org/r/1686308514-11996-3-git-send-email-selvin.xavier@broadcom.com -Signed-off-by: Leon Romanovsky -Signed-off-by: Sasha Levin ---- - drivers/infiniband/hw/bnxt_re/qplib_rcfw.c | 13 ++++++++++--- - 1 file changed, 10 insertions(+), 3 deletions(-) - -diff --git a/drivers/infiniband/hw/bnxt_re/qplib_rcfw.c b/drivers/infiniband/hw/bnxt_re/qplib_rcfw.c -index d4ce82bebb0a5..c11b8e708844c 100644 ---- a/drivers/infiniband/hw/bnxt_re/qplib_rcfw.c -+++ b/drivers/infiniband/hw/bnxt_re/qplib_rcfw.c -@@ -295,7 +295,8 @@ static int bnxt_qplib_process_func_event(struct bnxt_qplib_rcfw *rcfw, - } - - static int bnxt_qplib_process_qp_event(struct bnxt_qplib_rcfw *rcfw, -- struct creq_qp_event *qp_event) -+ struct creq_qp_event *qp_event, -+ u32 *num_wait) - { - struct creq_qp_error_notification *err_event; - struct bnxt_qplib_hwq *hwq = &rcfw->cmdq.hwq; -@@ -304,6 +305,7 @@ static int bnxt_qplib_process_qp_event(struct bnxt_qplib_rcfw *rcfw, - u16 cbit, blocked = 0; - struct pci_dev *pdev; - unsigned long flags; -+ u32 wait_cmds = 0; - __le16 mcookie; - u16 cookie; - int rc = 0; -@@ -363,9 +365,10 @@ static int bnxt_qplib_process_qp_event(struct bnxt_qplib_rcfw *rcfw, - crsqe->req_size = 0; - - if (!blocked) -- wake_up(&rcfw->cmdq.waitq); -+ wait_cmds++; - spin_unlock_irqrestore(&hwq->lock, flags); - } -+ *num_wait += wait_cmds; - return rc; - } - -@@ -379,6 +382,7 @@ static void bnxt_qplib_service_creq(struct tasklet_struct *t) - struct creq_base *creqe; - u32 sw_cons, raw_cons; - unsigned long flags; -+ u32 num_wakeup = 0; - - /* Service the CREQ until budget is over */ - spin_lock_irqsave(&hwq->lock, flags); -@@ -397,7 +401,8 @@ static void bnxt_qplib_service_creq(struct tasklet_struct *t) - switch (type) { - case CREQ_BASE_TYPE_QP_EVENT: - bnxt_qplib_process_qp_event -- (rcfw, (struct creq_qp_event *)creqe); -+ (rcfw, (struct creq_qp_event *)creqe, -+ &num_wakeup); - creq->stats.creq_qp_event_processed++; - break; - case CREQ_BASE_TYPE_FUNC_EVENT: -@@ -425,6 +430,8 @@ static void bnxt_qplib_service_creq(struct tasklet_struct *t) - rcfw->res->cctx, true); - } - spin_unlock_irqrestore(&hwq->lock, flags); -+ if (num_wakeup) -+ wake_up_nr(&rcfw->cmdq.waitq, num_wakeup); - } - - static irqreturn_t bnxt_qplib_creq_irq(int irq, void *dev_instance) --- -2.39.2 - diff --git a/queue-6.4/rdma-bnxt_re-disable-kill-tasklet-only-if-it-is-enab.patch b/queue-6.4/rdma-bnxt_re-disable-kill-tasklet-only-if-it-is-enab.patch deleted file mode 100644 index e6024a0fd78..00000000000 --- a/queue-6.4/rdma-bnxt_re-disable-kill-tasklet-only-if-it-is-enab.patch +++ /dev/null @@ -1,150 +0,0 @@ -From b4b5a32e709ed0e0fd42e4a33cd0eb431f06acb2 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Thu, 18 May 2023 23:48:11 -0700 -Subject: RDMA/bnxt_re: Disable/kill tasklet only if it is enabled - -From: Selvin Xavier - -[ Upstream commit ab112ee7899d6171da5acd77a7ed7ae103f488de ] - -When the ulp hook to start the IRQ fails because the rings are not -available, tasklets are not enabled. In this case when the driver is -unloaded, driver calls CREQ tasklet_kill. This causes an indefinite hang -as the tasklet is not enabled. - -Driver shouldn't call tasklet_kill if it is not enabled. So using the -creq->requested and nq->requested flags to identify if both tasklets/irqs -are registered. Checking this flag while scheduling the tasklet from -ISR. Also, added a cleanup for disabling tasklet, in case request_irq -fails during start_irq. - -Check for return value for bnxt_qplib_rcfw_start_irq and in case the -bnxt_qplib_rcfw_start_irq fails, return bnxt_re_start_irq without -attempting to start NQ IRQs. - -Fixes: 1ac5a4047975 ("RDMA/bnxt_re: Add bnxt_re RoCE driver") -Link: https://lore.kernel.org/r/1684478897-12247-2-git-send-email-selvin.xavier@broadcom.com -Signed-off-by: Kalesh AP -Signed-off-by: Selvin Xavier -Signed-off-by: Jason Gunthorpe -Signed-off-by: Sasha Levin ---- - drivers/infiniband/hw/bnxt_re/main.c | 12 +++++++++--- - drivers/infiniband/hw/bnxt_re/qplib_fp.c | 16 ++++++++++------ - drivers/infiniband/hw/bnxt_re/qplib_rcfw.c | 14 +++++++++----- - 3 files changed, 28 insertions(+), 14 deletions(-) - -diff --git a/drivers/infiniband/hw/bnxt_re/main.c b/drivers/infiniband/hw/bnxt_re/main.c -index 3073398a21834..cb4465b0792b9 100644 ---- a/drivers/infiniband/hw/bnxt_re/main.c -+++ b/drivers/infiniband/hw/bnxt_re/main.c -@@ -283,15 +283,21 @@ static void bnxt_re_start_irq(void *handle, struct bnxt_msix_entry *ent) - for (indx = 0; indx < rdev->num_msix; indx++) - rdev->en_dev->msix_entries[indx].vector = ent[indx].vector; - -- bnxt_qplib_rcfw_start_irq(rcfw, msix_ent[BNXT_RE_AEQ_IDX].vector, -- false); -+ rc = bnxt_qplib_rcfw_start_irq(rcfw, msix_ent[BNXT_RE_AEQ_IDX].vector, -+ false); -+ if (rc) { -+ ibdev_warn(&rdev->ibdev, "Failed to reinit CREQ\n"); -+ return; -+ } - for (indx = BNXT_RE_NQ_IDX ; indx < rdev->num_msix; indx++) { - nq = &rdev->nq[indx - 1]; - rc = bnxt_qplib_nq_start_irq(nq, indx - 1, - msix_ent[indx].vector, false); -- if (rc) -+ if (rc) { - ibdev_warn(&rdev->ibdev, "Failed to reinit NQ index %d\n", - indx - 1); -+ return; -+ } - } - } - -diff --git a/drivers/infiniband/hw/bnxt_re/qplib_fp.c b/drivers/infiniband/hw/bnxt_re/qplib_fp.c -index 8974f6235cfaa..b922181525035 100644 ---- a/drivers/infiniband/hw/bnxt_re/qplib_fp.c -+++ b/drivers/infiniband/hw/bnxt_re/qplib_fp.c -@@ -399,6 +399,9 @@ static irqreturn_t bnxt_qplib_nq_irq(int irq, void *dev_instance) - - void bnxt_qplib_nq_stop_irq(struct bnxt_qplib_nq *nq, bool kill) - { -+ if (!nq->requested) -+ return; -+ - tasklet_disable(&nq->nq_tasklet); - /* Mask h/w interrupt */ - bnxt_qplib_ring_nq_db(&nq->nq_db.dbinfo, nq->res->cctx, false); -@@ -406,11 +409,10 @@ void bnxt_qplib_nq_stop_irq(struct bnxt_qplib_nq *nq, bool kill) - synchronize_irq(nq->msix_vec); - if (kill) - tasklet_kill(&nq->nq_tasklet); -- if (nq->requested) { -- irq_set_affinity_hint(nq->msix_vec, NULL); -- free_irq(nq->msix_vec, nq); -- nq->requested = false; -- } -+ -+ irq_set_affinity_hint(nq->msix_vec, NULL); -+ free_irq(nq->msix_vec, nq); -+ nq->requested = false; - } - - void bnxt_qplib_disable_nq(struct bnxt_qplib_nq *nq) -@@ -449,8 +451,10 @@ int bnxt_qplib_nq_start_irq(struct bnxt_qplib_nq *nq, int nq_indx, - - snprintf(nq->name, sizeof(nq->name), "bnxt_qplib_nq-%d", nq_indx); - rc = request_irq(nq->msix_vec, bnxt_qplib_nq_irq, 0, nq->name, nq); -- if (rc) -+ if (rc) { -+ tasklet_disable(&nq->nq_tasklet); - return rc; -+ } - - cpumask_clear(&nq->mask); - cpumask_set_cpu(nq_indx, &nq->mask); -diff --git a/drivers/infiniband/hw/bnxt_re/qplib_rcfw.c b/drivers/infiniband/hw/bnxt_re/qplib_rcfw.c -index de90691031773..a668f877a7bf7 100644 ---- a/drivers/infiniband/hw/bnxt_re/qplib_rcfw.c -+++ b/drivers/infiniband/hw/bnxt_re/qplib_rcfw.c -@@ -636,6 +636,10 @@ void bnxt_qplib_rcfw_stop_irq(struct bnxt_qplib_rcfw *rcfw, bool kill) - struct bnxt_qplib_creq_ctx *creq; - - creq = &rcfw->creq; -+ -+ if (!creq->requested) -+ return; -+ - tasklet_disable(&creq->creq_tasklet); - /* Mask h/w interrupts */ - bnxt_qplib_ring_nq_db(&creq->creq_db.dbinfo, rcfw->res->cctx, false); -@@ -644,10 +648,8 @@ void bnxt_qplib_rcfw_stop_irq(struct bnxt_qplib_rcfw *rcfw, bool kill) - if (kill) - tasklet_kill(&creq->creq_tasklet); - -- if (creq->requested) { -- free_irq(creq->msix_vec, rcfw); -- creq->requested = false; -- } -+ free_irq(creq->msix_vec, rcfw); -+ creq->requested = false; - } - - void bnxt_qplib_disable_rcfw_channel(struct bnxt_qplib_rcfw *rcfw) -@@ -693,8 +695,10 @@ int bnxt_qplib_rcfw_start_irq(struct bnxt_qplib_rcfw *rcfw, int msix_vector, - tasklet_enable(&creq->creq_tasklet); - rc = request_irq(creq->msix_vec, bnxt_qplib_creq_irq, 0, - "bnxt_qplib_creq", rcfw); -- if (rc) -+ if (rc) { -+ tasklet_disable(&creq->creq_tasklet); - return rc; -+ } - creq->requested = true; - - bnxt_qplib_ring_nq_db(&creq->creq_db.dbinfo, rcfw->res->cctx, true); --- -2.39.2 - diff --git a/queue-6.4/rdma-bnxt_re-fix-to-remove-an-unnecessary-log.patch b/queue-6.4/rdma-bnxt_re-fix-to-remove-an-unnecessary-log.patch deleted file mode 100644 index 045270298f6..00000000000 --- a/queue-6.4/rdma-bnxt_re-fix-to-remove-an-unnecessary-log.patch +++ /dev/null @@ -1,44 +0,0 @@ -From 122f22fce96158bcfc372d5803f1b90fbae7e60d Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Thu, 18 May 2023 23:48:15 -0700 -Subject: RDMA/bnxt_re: Fix to remove an unnecessary log - -From: Kalesh AP - -[ Upstream commit 43774bc156614346fe5dacabc8e8c229167f2536 ] - -During destroy_qp, driver sets the qp handle in the existing CQEs -belonging to the QP being destroyed to NULL. As a result, a poll_cq after -destroy_qp can report unnecessary messages. Remove this noise from system -logs. - -Fixes: 1ac5a4047975 ("RDMA/bnxt_re: Add bnxt_re RoCE driver") -Link: https://lore.kernel.org/r/1684478897-12247-6-git-send-email-selvin.xavier@broadcom.com -Signed-off-by: Kalesh AP -Signed-off-by: Selvin Xavier -Signed-off-by: Jason Gunthorpe -Signed-off-by: Sasha Levin ---- - drivers/infiniband/hw/bnxt_re/qplib_fp.c | 5 +---- - 1 file changed, 1 insertion(+), 4 deletions(-) - -diff --git a/drivers/infiniband/hw/bnxt_re/qplib_fp.c b/drivers/infiniband/hw/bnxt_re/qplib_fp.c -index 607ed69386b45..55f092c2c8a88 100644 ---- a/drivers/infiniband/hw/bnxt_re/qplib_fp.c -+++ b/drivers/infiniband/hw/bnxt_re/qplib_fp.c -@@ -2799,11 +2799,8 @@ static int bnxt_qplib_cq_process_terminal(struct bnxt_qplib_cq *cq, - - qp = (struct bnxt_qplib_qp *)((unsigned long) - le64_to_cpu(hwcqe->qp_handle)); -- if (!qp) { -- dev_err(&cq->hwq.pdev->dev, -- "FP: CQ Process terminal qp is NULL\n"); -+ if (!qp) - return -EINVAL; -- } - - /* Must block new posting of SQ and RQ */ - qp->state = CMDQ_MODIFY_QP_NEW_STATE_ERR; --- -2.39.2 - diff --git a/queue-6.4/rdma-bnxt_re-fix-to-remove-unnecessary-return-labels.patch b/queue-6.4/rdma-bnxt_re-fix-to-remove-unnecessary-return-labels.patch deleted file mode 100644 index 9a843be6d58..00000000000 --- a/queue-6.4/rdma-bnxt_re-fix-to-remove-unnecessary-return-labels.patch +++ /dev/null @@ -1,66 +0,0 @@ -From 8e1b0095fd1dec4405ddc4e57cffd78dd279fa33 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Thu, 18 May 2023 23:48:12 -0700 -Subject: RDMA/bnxt_re: Fix to remove unnecessary return labels - -From: Kalesh AP - -[ Upstream commit 9b3ee47796f529e5bc31a355d6cb756d68a7079a ] - -If there is no cleanup needed then just return directly. This cleans up -the code and improve readability. - -Fixes: 1ac5a4047975 ("RDMA/bnxt_re: Add bnxt_re RoCE driver") -Link: https://lore.kernel.org/r/1684478897-12247-3-git-send-email-selvin.xavier@broadcom.com -Reviewed-by: Kashyap Desai -Reviewed-by: Saravanan Vajravel -Signed-off-by: Kalesh AP -Signed-off-by: Selvin Xavier -Signed-off-by: Jason Gunthorpe -Signed-off-by: Sasha Levin ---- - drivers/infiniband/hw/bnxt_re/qplib_fp.c | 7 ++----- - 1 file changed, 2 insertions(+), 5 deletions(-) - -diff --git a/drivers/infiniband/hw/bnxt_re/qplib_fp.c b/drivers/infiniband/hw/bnxt_re/qplib_fp.c -index b922181525035..3c4a3bb1010e0 100644 ---- a/drivers/infiniband/hw/bnxt_re/qplib_fp.c -+++ b/drivers/infiniband/hw/bnxt_re/qplib_fp.c -@@ -1618,7 +1618,7 @@ static int bnxt_qplib_put_inline(struct bnxt_qplib_qp *qp, - il_src = (void *)wqe->sg_list[indx].addr; - t_len += len; - if (t_len > qp->max_inline_data) -- goto bad; -+ return -ENOMEM; - while (len) { - if (pull_dst) { - pull_dst = false; -@@ -1642,8 +1642,6 @@ static int bnxt_qplib_put_inline(struct bnxt_qplib_qp *qp, - } - - return t_len; --bad: -- return -ENOMEM; - } - - static u32 bnxt_qplib_put_sges(struct bnxt_qplib_hwq *hwq, -@@ -2073,7 +2071,7 @@ int bnxt_qplib_create_cq(struct bnxt_qplib_res *res, struct bnxt_qplib_cq *cq) - hwq_attr.sginfo = &cq->sg_info; - rc = bnxt_qplib_alloc_init_hwq(&cq->hwq, &hwq_attr); - if (rc) -- goto exit; -+ return rc; - - bnxt_qplib_rcfw_cmd_prep((struct cmdq_base *)&req, - CMDQ_BASE_OPCODE_CREATE_CQ, -@@ -2116,7 +2114,6 @@ int bnxt_qplib_create_cq(struct bnxt_qplib_res *res, struct bnxt_qplib_cq *cq) - - fail: - bnxt_qplib_free_hwq(res, &cq->hwq); --exit: - return rc; - } - --- -2.39.2 - diff --git a/queue-6.4/rdma-bnxt_re-remove-a-redundant-check-inside-bnxt_re.patch b/queue-6.4/rdma-bnxt_re-remove-a-redundant-check-inside-bnxt_re.patch deleted file mode 100644 index 8903d4ce8a2..00000000000 --- a/queue-6.4/rdma-bnxt_re-remove-a-redundant-check-inside-bnxt_re.patch +++ /dev/null @@ -1,54 +0,0 @@ -From 40da6ca47d9f34446b4d7a623e60a24d6da25690 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Thu, 18 May 2023 23:48:14 -0700 -Subject: RDMA/bnxt_re: Remove a redundant check inside bnxt_re_update_gid - -From: Kalesh AP - -[ Upstream commit b989f90cef0af48aa5679b6a75476371705ec53c ] - -The NULL check inside bnxt_re_update_gid() always return false. If -sgid_tbl->tbl is not allocated, then dev_init would have failed. - -Fixes: 5fac5b1b297f ("RDMA/bnxt_re: Add vlan tag for untagged RoCE traffic when PFC is configured") -Link: https://lore.kernel.org/r/1684478897-12247-5-git-send-email-selvin.xavier@broadcom.com -Reviewed-by: Saravanan Vajravel -Reviewed-by: Damodharam Ammepalli -Reviewed-by: Ajit Khaparde -Signed-off-by: Selvin Xavier -Signed-off-by: Kalesh AP -Signed-off-by: Jason Gunthorpe -Signed-off-by: Sasha Levin ---- - drivers/infiniband/hw/bnxt_re/main.c | 8 +------- - 1 file changed, 1 insertion(+), 7 deletions(-) - -diff --git a/drivers/infiniband/hw/bnxt_re/main.c b/drivers/infiniband/hw/bnxt_re/main.c -index cb4465b0792b9..1936f4b4002a7 100644 ---- a/drivers/infiniband/hw/bnxt_re/main.c -+++ b/drivers/infiniband/hw/bnxt_re/main.c -@@ -969,12 +969,6 @@ static int bnxt_re_update_gid(struct bnxt_re_dev *rdev) - if (!ib_device_try_get(&rdev->ibdev)) - return 0; - -- if (!sgid_tbl) { -- ibdev_err(&rdev->ibdev, "QPLIB: SGID table not allocated"); -- rc = -EINVAL; -- goto out; -- } -- - for (index = 0; index < sgid_tbl->active; index++) { - gid_idx = sgid_tbl->hw_id[index]; - -@@ -992,7 +986,7 @@ static int bnxt_re_update_gid(struct bnxt_re_dev *rdev) - rc = bnxt_qplib_update_sgid(sgid_tbl, &gid, gid_idx, - rdev->qplib_res.netdev->dev_addr); - } --out: -+ - ib_device_put(&rdev->ibdev); - return rc; - } --- -2.39.2 - diff --git a/queue-6.4/rdma-bnxt_re-use-unique-names-while-registering-inte.patch b/queue-6.4/rdma-bnxt_re-use-unique-names-while-registering-inte.patch deleted file mode 100644 index 00ae590a4cc..00000000000 --- a/queue-6.4/rdma-bnxt_re-use-unique-names-while-registering-inte.patch +++ /dev/null @@ -1,157 +0,0 @@ -From 8ec5cf16e10129c840512c9e8dc95b3d6e3dfba0 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Thu, 18 May 2023 23:48:13 -0700 -Subject: RDMA/bnxt_re: Use unique names while registering interrupts - -From: Kalesh AP - -[ Upstream commit ff2e4bfd162cf66a112a81509e419805add44d64 ] - -bnxt_re currently uses the names "bnxt_qplib_creq" and "bnxt_qplib_nq-0" -while registering IRQs. There is no way to distinguish the IRQs of -different device ports when there are multiple IB devices registered. -This could make the scenarios worse where one want to pin IRQs of a device -port to certain CPUs. - -Fixed the code to use unique names which has PCI BDF information while -registering interrupts like: "bnxt_re-nq-0@pci:0000:65:00.0" and -"bnxt_re-creq@pci:0000:65:00.1". - -Fixes: 1ac5a4047975 ("RDMA/bnxt_re: Add bnxt_re RoCE driver") -Link: https://lore.kernel.org/r/1684478897-12247-4-git-send-email-selvin.xavier@broadcom.com -Reviewed-by: Bhargava Chenna Marreddy -Signed-off-by: Kalesh AP -Signed-off-by: Selvin Xavier -Signed-off-by: Jason Gunthorpe -Signed-off-by: Sasha Levin ---- - drivers/infiniband/hw/bnxt_re/qplib_fp.c | 12 ++++++++++-- - drivers/infiniband/hw/bnxt_re/qplib_fp.h | 2 +- - drivers/infiniband/hw/bnxt_re/qplib_rcfw.c | 15 +++++++++++++-- - drivers/infiniband/hw/bnxt_re/qplib_rcfw.h | 1 + - 4 files changed, 25 insertions(+), 5 deletions(-) - -diff --git a/drivers/infiniband/hw/bnxt_re/qplib_fp.c b/drivers/infiniband/hw/bnxt_re/qplib_fp.c -index 3c4a3bb1010e0..607ed69386b45 100644 ---- a/drivers/infiniband/hw/bnxt_re/qplib_fp.c -+++ b/drivers/infiniband/hw/bnxt_re/qplib_fp.c -@@ -412,6 +412,8 @@ void bnxt_qplib_nq_stop_irq(struct bnxt_qplib_nq *nq, bool kill) - - irq_set_affinity_hint(nq->msix_vec, NULL); - free_irq(nq->msix_vec, nq); -+ kfree(nq->name); -+ nq->name = NULL; - nq->requested = false; - } - -@@ -438,6 +440,7 @@ void bnxt_qplib_disable_nq(struct bnxt_qplib_nq *nq) - int bnxt_qplib_nq_start_irq(struct bnxt_qplib_nq *nq, int nq_indx, - int msix_vector, bool need_init) - { -+ struct bnxt_qplib_res *res = nq->res; - int rc; - - if (nq->requested) -@@ -449,9 +452,14 @@ int bnxt_qplib_nq_start_irq(struct bnxt_qplib_nq *nq, int nq_indx, - else - tasklet_enable(&nq->nq_tasklet); - -- snprintf(nq->name, sizeof(nq->name), "bnxt_qplib_nq-%d", nq_indx); -+ nq->name = kasprintf(GFP_KERNEL, "bnxt_re-nq-%d@pci:%s", -+ nq_indx, pci_name(res->pdev)); -+ if (!nq->name) -+ return -ENOMEM; - rc = request_irq(nq->msix_vec, bnxt_qplib_nq_irq, 0, nq->name, nq); - if (rc) { -+ kfree(nq->name); -+ nq->name = NULL; - tasklet_disable(&nq->nq_tasklet); - return rc; - } -@@ -465,7 +473,7 @@ int bnxt_qplib_nq_start_irq(struct bnxt_qplib_nq *nq, int nq_indx, - nq->msix_vec, nq_indx); - } - nq->requested = true; -- bnxt_qplib_ring_nq_db(&nq->nq_db.dbinfo, nq->res->cctx, true); -+ bnxt_qplib_ring_nq_db(&nq->nq_db.dbinfo, res->cctx, true); - - return rc; - } -diff --git a/drivers/infiniband/hw/bnxt_re/qplib_fp.h b/drivers/infiniband/hw/bnxt_re/qplib_fp.h -index d74d5ead2e32a..a42820821c473 100644 ---- a/drivers/infiniband/hw/bnxt_re/qplib_fp.h -+++ b/drivers/infiniband/hw/bnxt_re/qplib_fp.h -@@ -472,7 +472,7 @@ typedef int (*srqn_handler_t)(struct bnxt_qplib_nq *nq, - struct bnxt_qplib_nq { - struct pci_dev *pdev; - struct bnxt_qplib_res *res; -- char name[32]; -+ char *name; - struct bnxt_qplib_hwq hwq; - struct bnxt_qplib_nq_db nq_db; - u16 ring_id; -diff --git a/drivers/infiniband/hw/bnxt_re/qplib_rcfw.c b/drivers/infiniband/hw/bnxt_re/qplib_rcfw.c -index a668f877a7bf7..688eaa01db649 100644 ---- a/drivers/infiniband/hw/bnxt_re/qplib_rcfw.c -+++ b/drivers/infiniband/hw/bnxt_re/qplib_rcfw.c -@@ -649,6 +649,8 @@ void bnxt_qplib_rcfw_stop_irq(struct bnxt_qplib_rcfw *rcfw, bool kill) - tasklet_kill(&creq->creq_tasklet); - - free_irq(creq->msix_vec, rcfw); -+ kfree(creq->irq_name); -+ creq->irq_name = NULL; - creq->requested = false; - } - -@@ -681,9 +683,11 @@ int bnxt_qplib_rcfw_start_irq(struct bnxt_qplib_rcfw *rcfw, int msix_vector, - bool need_init) - { - struct bnxt_qplib_creq_ctx *creq; -+ struct bnxt_qplib_res *res; - int rc; - - creq = &rcfw->creq; -+ res = rcfw->res; - - if (creq->requested) - return -EFAULT; -@@ -693,15 +697,22 @@ int bnxt_qplib_rcfw_start_irq(struct bnxt_qplib_rcfw *rcfw, int msix_vector, - tasklet_setup(&creq->creq_tasklet, bnxt_qplib_service_creq); - else - tasklet_enable(&creq->creq_tasklet); -+ -+ creq->irq_name = kasprintf(GFP_KERNEL, "bnxt_re-creq@pci:%s", -+ pci_name(res->pdev)); -+ if (!creq->irq_name) -+ return -ENOMEM; - rc = request_irq(creq->msix_vec, bnxt_qplib_creq_irq, 0, -- "bnxt_qplib_creq", rcfw); -+ creq->irq_name, rcfw); - if (rc) { -+ kfree(creq->irq_name); -+ creq->irq_name = NULL; - tasklet_disable(&creq->creq_tasklet); - return rc; - } - creq->requested = true; - -- bnxt_qplib_ring_nq_db(&creq->creq_db.dbinfo, rcfw->res->cctx, true); -+ bnxt_qplib_ring_nq_db(&creq->creq_db.dbinfo, res->cctx, true); - - return 0; - } -diff --git a/drivers/infiniband/hw/bnxt_re/qplib_rcfw.h b/drivers/infiniband/hw/bnxt_re/qplib_rcfw.h -index dd5651478bbb7..92f7a25533d3b 100644 ---- a/drivers/infiniband/hw/bnxt_re/qplib_rcfw.h -+++ b/drivers/infiniband/hw/bnxt_re/qplib_rcfw.h -@@ -186,6 +186,7 @@ struct bnxt_qplib_creq_ctx { - u16 ring_id; - int msix_vec; - bool requested; /*irq handler installed */ -+ char *irq_name; - }; - - /* RCFW Communication Channels */ --- -2.39.2 - diff --git a/queue-6.4/rdma-bnxt_re-wraparound-mbox-producer-index.patch b/queue-6.4/rdma-bnxt_re-wraparound-mbox-producer-index.patch deleted file mode 100644 index 2197e7e09e1..00000000000 --- a/queue-6.4/rdma-bnxt_re-wraparound-mbox-producer-index.patch +++ /dev/null @@ -1,55 +0,0 @@ -From 8488f2c417f85bf5376534247427bd872ae5ebd0 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Fri, 9 Jun 2023 04:01:38 -0700 -Subject: RDMA/bnxt_re: wraparound mbox producer index - -From: Kashyap Desai - -[ Upstream commit 0af91306e17ef3d18e5f100aa58aa787869118af ] - -Driver is not handling the wraparound of the mbox producer index correctly. -Currently the wraparound happens once u32 max is reached. - -Bit 31 of the producer index register is special and should be set -only once for the first command. Because the producer index overflow -setting bit31 after a long time, FW goes to initialization sequence -and this causes FW hang. - -Fix is to wraparound the mbox producer index once it reaches u16 max. - -Fixes: cee0c7bba486 ("RDMA/bnxt_re: Refactor command queue management code") -Fixes: 1ac5a4047975 ("RDMA/bnxt_re: Add bnxt_re RoCE driver") -Signed-off-by: Kashyap Desai -Signed-off-by: Selvin Xavier -Link: https://lore.kernel.org/r/1686308514-11996-2-git-send-email-selvin.xavier@broadcom.com -Signed-off-by: Leon Romanovsky -Signed-off-by: Sasha Levin ---- - drivers/infiniband/hw/bnxt_re/qplib_rcfw.c | 4 ++-- - 1 file changed, 2 insertions(+), 2 deletions(-) - -diff --git a/drivers/infiniband/hw/bnxt_re/qplib_rcfw.c b/drivers/infiniband/hw/bnxt_re/qplib_rcfw.c -index 688eaa01db649..d4ce82bebb0a5 100644 ---- a/drivers/infiniband/hw/bnxt_re/qplib_rcfw.c -+++ b/drivers/infiniband/hw/bnxt_re/qplib_rcfw.c -@@ -180,7 +180,7 @@ static int __send_message(struct bnxt_qplib_rcfw *rcfw, - } while (bsize > 0); - cmdq->seq_num++; - -- cmdq_prod = hwq->prod; -+ cmdq_prod = hwq->prod & 0xFFFF; - if (test_bit(FIRMWARE_FIRST_FLAG, &cmdq->flags)) { - /* The very first doorbell write - * is required to set this flag -@@ -599,7 +599,7 @@ int bnxt_qplib_alloc_rcfw_channel(struct bnxt_qplib_res *res, - rcfw->cmdq_depth = BNXT_QPLIB_CMDQE_MAX_CNT_8192; - - sginfo.pgsize = bnxt_qplib_cmdqe_page_size(rcfw->cmdq_depth); -- hwq_attr.depth = rcfw->cmdq_depth; -+ hwq_attr.depth = rcfw->cmdq_depth & 0x7FFFFFFF; - hwq_attr.stride = BNXT_QPLIB_CMDQE_UNITS; - hwq_attr.type = HWQ_TYPE_CTX; - if (bnxt_qplib_alloc_init_hwq(&cmdq->hwq, &hwq_attr)) { --- -2.39.2 - diff --git a/queue-6.4/rdma-hns-fix-hns_roce_table_get-return-value.patch b/queue-6.4/rdma-hns-fix-hns_roce_table_get-return-value.patch deleted file mode 100644 index 58cc90e7803..00000000000 --- a/queue-6.4/rdma-hns-fix-hns_roce_table_get-return-value.patch +++ /dev/null @@ -1,45 +0,0 @@ -From eba38ddec985f7c4640c420b7ba6b1457c9a0e7d Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Tue, 23 May 2023 20:16:40 +0800 -Subject: RDMA/hns: Fix hns_roce_table_get return value - -From: Chengchang Tang - -[ Upstream commit cf5b608fb0e369c473a8303cad6ddb386505e5b8 ] - -The return value of set_hem has been fixed to ENODEV, which will lead a -diagnostic information missing. - -Fixes: 9a4435375cd1 ("IB/hns: Add driver files for hns RoCE driver") -Link: https://lore.kernel.org/r/20230523121641.3132102-3-huangjunxian6@hisilicon.com -Signed-off-by: Chengchang Tang -Signed-off-by: Junxian Huang -Signed-off-by: Jason Gunthorpe -Signed-off-by: Sasha Levin ---- - drivers/infiniband/hw/hns/hns_roce_hem.c | 7 ++++--- - 1 file changed, 4 insertions(+), 3 deletions(-) - -diff --git a/drivers/infiniband/hw/hns/hns_roce_hem.c b/drivers/infiniband/hw/hns/hns_roce_hem.c -index aa8a08d1c0145..f30274986c0da 100644 ---- a/drivers/infiniband/hw/hns/hns_roce_hem.c -+++ b/drivers/infiniband/hw/hns/hns_roce_hem.c -@@ -595,11 +595,12 @@ int hns_roce_table_get(struct hns_roce_dev *hr_dev, - } - - /* Set HEM base address(128K/page, pa) to Hardware */ -- if (hr_dev->hw->set_hem(hr_dev, table, obj, HEM_HOP_STEP_DIRECT)) { -+ ret = hr_dev->hw->set_hem(hr_dev, table, obj, HEM_HOP_STEP_DIRECT); -+ if (ret) { - hns_roce_free_hem(hr_dev, table->hem[i]); - table->hem[i] = NULL; -- ret = -ENODEV; -- dev_err(dev, "set HEM base address to HW failed.\n"); -+ dev_err(dev, "set HEM base address to HW failed, ret = %d.\n", -+ ret); - goto out; - } - --- -2.39.2 - diff --git a/queue-6.4/rdma-irdma-avoid-fortify-string-warning-in-irdma_clr.patch b/queue-6.4/rdma-irdma-avoid-fortify-string-warning-in-irdma_clr.patch deleted file mode 100644 index e22b1896998..00000000000 --- a/queue-6.4/rdma-irdma-avoid-fortify-string-warning-in-irdma_clr.patch +++ /dev/null @@ -1,64 +0,0 @@ -From 4257c2d488fd8d3a0180160db6f9cd8793d0433c Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Tue, 23 May 2023 13:18:45 +0200 -Subject: RDMA/irdma: avoid fortify-string warning in irdma_clr_wqes - -From: Arnd Bergmann - -[ Upstream commit b002760f877c0d91ecd3c78565b52f4bbac379dd ] - -Commit df8fc4e934c1 ("kbuild: Enable -fstrict-flex-arrays=3") triggers a -warning for fortified memset(): - -In function 'fortify_memset_chk', - inlined from 'irdma_clr_wqes' at drivers/infiniband/hw/irdma/uk.c:103:4: -include/linux/fortify-string.h:493:25: error: call to '__write_overflow_field' declared with attribute warning: detected write beyond size of field (1st parameter); maybe use struct_group()? [-Werror=attribute-warning] - 493 | __write_overflow_field(p_size_field, size); - | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -The problem here isthat the inner array only has four 8-byte elements, so -clearing 4096 bytes overflows that. As this structure is part of an outer -array, change the code to pass a pointer to the irdma_qp_quanta instead, -and change the size argument for readability, matching the comment above -it. - -Fixes: 551c46edc769 ("RDMA/irdma: Add user/kernel shared libraries") -Link: https://lore.kernel.org/r/20230523111859.2197825-1-arnd@kernel.org -Signed-off-by: Arnd Bergmann -Acked-by: Shiraz Saleem -Signed-off-by: Jason Gunthorpe -Signed-off-by: Sasha Levin ---- - drivers/infiniband/hw/irdma/uk.c | 10 ++++++---- - 1 file changed, 6 insertions(+), 4 deletions(-) - -diff --git a/drivers/infiniband/hw/irdma/uk.c b/drivers/infiniband/hw/irdma/uk.c -index 16183e894da77..dd428d915c175 100644 ---- a/drivers/infiniband/hw/irdma/uk.c -+++ b/drivers/infiniband/hw/irdma/uk.c -@@ -93,16 +93,18 @@ static int irdma_nop_1(struct irdma_qp_uk *qp) - */ - void irdma_clr_wqes(struct irdma_qp_uk *qp, u32 qp_wqe_idx) - { -- __le64 *wqe; -+ struct irdma_qp_quanta *sq; - u32 wqe_idx; - - if (!(qp_wqe_idx & 0x7F)) { - wqe_idx = (qp_wqe_idx + 128) % qp->sq_ring.size; -- wqe = qp->sq_base[wqe_idx].elem; -+ sq = qp->sq_base + wqe_idx; - if (wqe_idx) -- memset(wqe, qp->swqe_polarity ? 0 : 0xFF, 0x1000); -+ memset(sq, qp->swqe_polarity ? 0 : 0xFF, -+ 128 * sizeof(*sq)); - else -- memset(wqe, qp->swqe_polarity ? 0xFF : 0, 0x1000); -+ memset(sq, qp->swqe_polarity ? 0xFF : 0, -+ 128 * sizeof(*sq)); - } - } - --- -2.39.2 - diff --git a/queue-6.4/rdma-rxe-fix-access-checks-in-rxe_check_bind_mw.patch b/queue-6.4/rdma-rxe-fix-access-checks-in-rxe_check_bind_mw.patch deleted file mode 100644 index fc229656b98..00000000000 --- a/queue-6.4/rdma-rxe-fix-access-checks-in-rxe_check_bind_mw.patch +++ /dev/null @@ -1,102 +0,0 @@ -From 1089da49e792a816d89052c827be72c406c5c26b Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Tue, 30 May 2023 17:13:32 -0500 -Subject: RDMA/rxe: Fix access checks in rxe_check_bind_mw - -From: Bob Pearson - -[ Upstream commit 425e1c9018fdf25cb4531606cc92d9d01a55534f ] - -The subroutine rxe_check_bind_mw() in rxe_mw.c performs checks on the mw -access flags before they are set so they always succeed. This patch -instead checks the access flags passed in the send wqe. - -Fixes: 32a577b4c3a9 ("RDMA/rxe: Add support for bind MW work requests") -Link: https://lore.kernel.org/r/20230530221334.89432-4-rpearsonhpe@gmail.com -Signed-off-by: Bob Pearson -Signed-off-by: Jason Gunthorpe -Signed-off-by: Sasha Levin ---- - drivers/infiniband/sw/rxe/rxe_mw.c | 17 +++++++++-------- - 1 file changed, 9 insertions(+), 8 deletions(-) - -diff --git a/drivers/infiniband/sw/rxe/rxe_mw.c b/drivers/infiniband/sw/rxe/rxe_mw.c -index afa5ce1a71166..a7ec57ab8fadd 100644 ---- a/drivers/infiniband/sw/rxe/rxe_mw.c -+++ b/drivers/infiniband/sw/rxe/rxe_mw.c -@@ -48,7 +48,7 @@ int rxe_dealloc_mw(struct ib_mw *ibmw) - } - - static int rxe_check_bind_mw(struct rxe_qp *qp, struct rxe_send_wqe *wqe, -- struct rxe_mw *mw, struct rxe_mr *mr) -+ struct rxe_mw *mw, struct rxe_mr *mr, int access) - { - if (mw->ibmw.type == IB_MW_TYPE_1) { - if (unlikely(mw->state != RXE_MW_STATE_VALID)) { -@@ -58,7 +58,7 @@ static int rxe_check_bind_mw(struct rxe_qp *qp, struct rxe_send_wqe *wqe, - } - - /* o10-36.2.2 */ -- if (unlikely((mw->access & IB_ZERO_BASED))) { -+ if (unlikely((access & IB_ZERO_BASED))) { - rxe_dbg_mw(mw, "attempt to bind a zero based type 1 MW\n"); - return -EINVAL; - } -@@ -104,7 +104,7 @@ static int rxe_check_bind_mw(struct rxe_qp *qp, struct rxe_send_wqe *wqe, - } - - /* C10-74 */ -- if (unlikely((mw->access & -+ if (unlikely((access & - (IB_ACCESS_REMOTE_WRITE | IB_ACCESS_REMOTE_ATOMIC)) && - !(mr->access & IB_ACCESS_LOCAL_WRITE))) { - rxe_dbg_mw(mw, -@@ -113,7 +113,7 @@ static int rxe_check_bind_mw(struct rxe_qp *qp, struct rxe_send_wqe *wqe, - } - - /* C10-75 */ -- if (mw->access & IB_ZERO_BASED) { -+ if (access & IB_ZERO_BASED) { - if (unlikely(wqe->wr.wr.mw.length > mr->ibmr.length)) { - rxe_dbg_mw(mw, - "attempt to bind a ZB MW outside of the MR\n"); -@@ -133,12 +133,12 @@ static int rxe_check_bind_mw(struct rxe_qp *qp, struct rxe_send_wqe *wqe, - } - - static void rxe_do_bind_mw(struct rxe_qp *qp, struct rxe_send_wqe *wqe, -- struct rxe_mw *mw, struct rxe_mr *mr) -+ struct rxe_mw *mw, struct rxe_mr *mr, int access) - { - u32 key = wqe->wr.wr.mw.rkey & 0xff; - - mw->rkey = (mw->rkey & ~0xff) | key; -- mw->access = wqe->wr.wr.mw.access; -+ mw->access = access; - mw->state = RXE_MW_STATE_VALID; - mw->addr = wqe->wr.wr.mw.addr; - mw->length = wqe->wr.wr.mw.length; -@@ -169,6 +169,7 @@ int rxe_bind_mw(struct rxe_qp *qp, struct rxe_send_wqe *wqe) - struct rxe_dev *rxe = to_rdev(qp->ibqp.device); - u32 mw_rkey = wqe->wr.wr.mw.mw_rkey; - u32 mr_lkey = wqe->wr.wr.mw.mr_lkey; -+ int access = wqe->wr.wr.mw.access; - - mw = rxe_pool_get_index(&rxe->mw_pool, mw_rkey >> 8); - if (unlikely(!mw)) { -@@ -198,11 +199,11 @@ int rxe_bind_mw(struct rxe_qp *qp, struct rxe_send_wqe *wqe) - - spin_lock_bh(&mw->lock); - -- ret = rxe_check_bind_mw(qp, wqe, mw, mr); -+ ret = rxe_check_bind_mw(qp, wqe, mw, mr, access); - if (ret) - goto err_unlock; - -- rxe_do_bind_mw(qp, wqe, mw, mr); -+ rxe_do_bind_mw(qp, wqe, mw, mr, access); - err_unlock: - spin_unlock_bh(&mw->lock); - err_drop_mr: --- -2.39.2 - diff --git a/queue-6.4/regulator-core-fix-more-error-checking-for-debugfs_c.patch b/queue-6.4/regulator-core-fix-more-error-checking-for-debugfs_c.patch deleted file mode 100644 index 6eda64b3f9f..00000000000 --- a/queue-6.4/regulator-core-fix-more-error-checking-for-debugfs_c.patch +++ /dev/null @@ -1,40 +0,0 @@ -From 64ed18360c39e6307158db86daa8ec4c42a0fa42 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Thu, 25 May 2023 13:13:58 +0200 -Subject: regulator: core: Fix more error checking for debugfs_create_dir() - -From: Geert Uytterhoeven - -[ Upstream commit 2715bb11cfff964aa33946847f9527cfbd4874f5 ] - -In case of failure, debugfs_create_dir() does not return NULL, but an -error pointer. Most incorrect error checks were fixed, but the one in -create_regulator() was forgotten. - -Fix the remaining error check. - -Fixes: 2bf1c45be3b8f3a3 ("regulator: Fix error checking for debugfs_create_dir") -Signed-off-by: Geert Uytterhoeven -Link: https://lore.kernel.org/r/ee980a108b5854dd8ce3630f8f673e784e057d17.1685013051.git.geert+renesas@glider.be -Signed-off-by: Mark Brown -Signed-off-by: Sasha Levin ---- - drivers/regulator/core.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/drivers/regulator/core.c b/drivers/regulator/core.c -index 698ab7f5004bf..c1bc4729301d5 100644 ---- a/drivers/regulator/core.c -+++ b/drivers/regulator/core.c -@@ -1911,7 +1911,7 @@ static struct regulator *create_regulator(struct regulator_dev *rdev, - - if (err != -EEXIST) - regulator->debugfs = debugfs_create_dir(supply_name, rdev->debugfs); -- if (!regulator->debugfs) { -+ if (IS_ERR(regulator->debugfs)) { - rdev_dbg(rdev, "Failed to create debugfs directory\n"); - } else { - debugfs_create_u32("uA_load", 0444, regulator->debugfs, --- -2.39.2 - diff --git a/queue-6.4/regulator-core-streamline-debugfs-operations.patch b/queue-6.4/regulator-core-streamline-debugfs-operations.patch deleted file mode 100644 index 039ef0dc378..00000000000 --- a/queue-6.4/regulator-core-streamline-debugfs-operations.patch +++ /dev/null @@ -1,100 +0,0 @@ -From bac6e68d2309f3d36af92fab9112d73c8bb796e2 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Thu, 25 May 2023 13:13:59 +0200 -Subject: regulator: core: Streamline debugfs operations - -From: Geert Uytterhoeven - -[ Upstream commit 08880713ceec023dd94d634f1e8902728c385939 ] - -If CONFIG_DEBUG_FS is not set: - - regulator: Failed to create debugfs directory - ... - regulator-dummy: Failed to create debugfs directory - -As per the comments for debugfs_create_dir(), errors returned by this -function should be expected, and ignored: - - * If debugfs is not enabled in the kernel, the value -%ENODEV will be - * returned. - * - * NOTE: it's expected that most callers should _ignore_ the errors returned - * by this function. Other debugfs functions handle the fact that the "dentry" - * passed to them could be an error and they don't crash in that case. - * Drivers should generally work fine even if debugfs fails to init anyway. - -Adhere to the debugfs spirit, and streamline all operations by: - 1. Demoting the importance of the printed error messages to debug - level, like is already done in create_regulator(), - 2. Further ignoring any returned errors, as by design, all debugfs - functions are no-ops when passed an error pointer. - -Fixes: 2bf1c45be3b8f3a3 ("regulator: Fix error checking for debugfs_create_dir") -Signed-off-by: Geert Uytterhoeven -Link: https://lore.kernel.org/r/2f8bb6e113359ddfab7b59e4d4274bd4c06d6d0a.1685013051.git.geert+renesas@glider.be -Signed-off-by: Mark Brown -Signed-off-by: Sasha Levin ---- - drivers/regulator/core.c | 30 +++++++++++++----------------- - 1 file changed, 13 insertions(+), 17 deletions(-) - -diff --git a/drivers/regulator/core.c b/drivers/regulator/core.c -index c1bc4729301d5..d8e1caaf207e1 100644 ---- a/drivers/regulator/core.c -+++ b/drivers/regulator/core.c -@@ -1911,19 +1911,17 @@ static struct regulator *create_regulator(struct regulator_dev *rdev, - - if (err != -EEXIST) - regulator->debugfs = debugfs_create_dir(supply_name, rdev->debugfs); -- if (IS_ERR(regulator->debugfs)) { -+ if (IS_ERR(regulator->debugfs)) - rdev_dbg(rdev, "Failed to create debugfs directory\n"); -- } else { -- debugfs_create_u32("uA_load", 0444, regulator->debugfs, -- ®ulator->uA_load); -- debugfs_create_u32("min_uV", 0444, regulator->debugfs, -- ®ulator->voltage[PM_SUSPEND_ON].min_uV); -- debugfs_create_u32("max_uV", 0444, regulator->debugfs, -- ®ulator->voltage[PM_SUSPEND_ON].max_uV); -- debugfs_create_file("constraint_flags", 0444, -- regulator->debugfs, regulator, -- &constraint_flags_fops); -- } -+ -+ debugfs_create_u32("uA_load", 0444, regulator->debugfs, -+ ®ulator->uA_load); -+ debugfs_create_u32("min_uV", 0444, regulator->debugfs, -+ ®ulator->voltage[PM_SUSPEND_ON].min_uV); -+ debugfs_create_u32("max_uV", 0444, regulator->debugfs, -+ ®ulator->voltage[PM_SUSPEND_ON].max_uV); -+ debugfs_create_file("constraint_flags", 0444, regulator->debugfs, -+ regulator, &constraint_flags_fops); - - /* - * Check now if the regulator is an always on regulator - if -@@ -5256,10 +5254,8 @@ static void rdev_init_debugfs(struct regulator_dev *rdev) - } - - rdev->debugfs = debugfs_create_dir(rname, debugfs_root); -- if (IS_ERR(rdev->debugfs)) { -- rdev_warn(rdev, "Failed to create debugfs directory\n"); -- return; -- } -+ if (IS_ERR(rdev->debugfs)) -+ rdev_dbg(rdev, "Failed to create debugfs directory\n"); - - debugfs_create_u32("use_count", 0444, rdev->debugfs, - &rdev->use_count); -@@ -6179,7 +6175,7 @@ static int __init regulator_init(void) - - debugfs_root = debugfs_create_dir("regulator", NULL); - if (IS_ERR(debugfs_root)) -- pr_warn("regulator: Failed to create debugfs directory\n"); -+ pr_debug("regulator: Failed to create debugfs directory\n"); - - #ifdef CONFIG_DEBUG_FS - debugfs_create_file("supply_map", 0444, debugfs_root, NULL, --- -2.39.2 - diff --git a/queue-6.4/regulator-rk808-fix-asynchronous-probing.patch b/queue-6.4/regulator-rk808-fix-asynchronous-probing.patch deleted file mode 100644 index d87d90672fd..00000000000 --- a/queue-6.4/regulator-rk808-fix-asynchronous-probing.patch +++ /dev/null @@ -1,41 +0,0 @@ -From 3d640bf6561270d9adee39d1368bac800456f678 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Thu, 4 May 2023 19:36:15 +0200 -Subject: regulator: rk808: fix asynchronous probing - -From: Sebastian Reichel - -[ Upstream commit 1b9e86d445a0f5c6d8dcbaf11508cb5dfb5848a8 ] - -If the probe routine fails with -EPROBE_DEFER after taking over the -OF node from its parent driver, reprobing triggers pinctrl_bind_pins() -and that will fail. Fix this by setting of_node_reused, so that the -device does not try to setup pin muxing. - -For me this always happens once the driver is marked to prefer async -probing and never happens without that flag. - -Fixes: 259b93b21a9f ("regulator: Set PROBE_PREFER_ASYNCHRONOUS for drivers that existed in 4.14") -Signed-off-by: Sebastian Reichel -Link: https://lore.kernel.org/r/20230504173618.142075-12-sebastian.reichel@collabora.com -Signed-off-by: Mark Brown -Signed-off-by: Sasha Levin ---- - drivers/regulator/rk808-regulator.c | 1 + - 1 file changed, 1 insertion(+) - -diff --git a/drivers/regulator/rk808-regulator.c b/drivers/regulator/rk808-regulator.c -index 3637e81654a8e..80ba782d89239 100644 ---- a/drivers/regulator/rk808-regulator.c -+++ b/drivers/regulator/rk808-regulator.c -@@ -1336,6 +1336,7 @@ static int rk808_regulator_probe(struct platform_device *pdev) - - config.dev = &pdev->dev; - config.dev->of_node = pdev->dev.parent->of_node; -+ config.dev->of_node_reused = true; - config.driver_data = pdata; - config.regmap = regmap; - --- -2.39.2 - diff --git a/queue-6.4/reiserfs-initialize-sec-length-in-reiserfs_security_.patch b/queue-6.4/reiserfs-initialize-sec-length-in-reiserfs_security_.patch deleted file mode 100644 index 89c61027cb2..00000000000 --- a/queue-6.4/reiserfs-initialize-sec-length-in-reiserfs_security_.patch +++ /dev/null @@ -1,40 +0,0 @@ -From e66e22ef07ba647933465ff4ccc2a16ec886f64c Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Thu, 11 May 2023 23:48:45 +0900 -Subject: reiserfs: Initialize sec->length in reiserfs_security_init(). - -From: Tetsuo Handa - -[ Upstream commit d031f4e8b493df299123fbb4ec13db870584ed28 ] - -syzbot is reporting that sec->length is not initialized. - -Since security_inode_init_security() returns 0 when initxattrs is provided -but call_int_hook(inode_init_security) returned -EOPNOTSUPP, control will -reach to "if (sec->length && ...) {" without initializing sec->length. - -Reported-by: syzbot -Closes: https://syzkaller.appspot.com/bug?extid=00a3779539a23cbee38c -Signed-off-by: Tetsuo Handa -Fixes: 52ca4b6435a4 ("reiserfs: Switch to security_inode_init_security()") -Signed-off-by: Paul Moore -Signed-off-by: Sasha Levin ---- - fs/reiserfs/xattr_security.c | 1 + - 1 file changed, 1 insertion(+) - -diff --git a/fs/reiserfs/xattr_security.c b/fs/reiserfs/xattr_security.c -index 6e0a099dd7886..078dd8cc312fc 100644 ---- a/fs/reiserfs/xattr_security.c -+++ b/fs/reiserfs/xattr_security.c -@@ -67,6 +67,7 @@ int reiserfs_security_init(struct inode *dir, struct inode *inode, - - sec->name = NULL; - sec->value = NULL; -+ sec->length = 0; - - /* Don't add selinux attributes on xattrs - they'll never get used */ - if (IS_PRIVATE(dir)) --- -2.39.2 - diff --git a/queue-6.4/riscv-hibernate-remove-warn_on-in-save_processor_sta.patch b/queue-6.4/riscv-hibernate-remove-warn_on-in-save_processor_sta.patch deleted file mode 100644 index 330a96f0932..00000000000 --- a/queue-6.4/riscv-hibernate-remove-warn_on-in-save_processor_sta.patch +++ /dev/null @@ -1,45 +0,0 @@ -From 3fd07da56c1c867e2b5578a66ae2101cee0385d1 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Fri, 9 Jun 2023 15:50:48 +0800 -Subject: riscv: hibernate: remove WARN_ON in save_processor_state - -From: Song Shuai - -[ Upstream commit 91afbaafd6b1f1846520efd2b158066a25a1a316 ] - -During hibernation or restoration, freeze_secondary_cpus -checks num_online_cpus via BUG_ON, and the subsequent -save_processor_state also does the checking with WARN_ON. - -In the case of CONFIG_PM_SLEEP_SMP=n, freeze_secondary_cpus -is not defined, but the sole possible condition to disable -CONFIG_PM_SLEEP_SMP is !SMP where num_online_cpus is always 1. -We also don't have to check it in save_processor_state. - -So remove the unnecessary checking in save_processor_state. - -Fixes: c0317210012e ("RISC-V: Add arch functions to support hibernation/suspend-to-disk") -Signed-off-by: Song Shuai -Reviewed-by: Conor Dooley -Link: https://lore.kernel.org/r/20230609075049.2651723-4-songshuaishuai@tinylab.org -Signed-off-by: Palmer Dabbelt -Signed-off-by: Sasha Levin ---- - arch/riscv/kernel/hibernate.c | 1 - - 1 file changed, 1 deletion(-) - -diff --git a/arch/riscv/kernel/hibernate.c b/arch/riscv/kernel/hibernate.c -index 264b2dcdd67e3..671b686c01587 100644 ---- a/arch/riscv/kernel/hibernate.c -+++ b/arch/riscv/kernel/hibernate.c -@@ -80,7 +80,6 @@ int pfn_is_nosave(unsigned long pfn) - - void notrace save_processor_state(void) - { -- WARN_ON(num_online_cpus() != 1); - } - - void notrace restore_processor_state(void) --- -2.39.2 - diff --git a/queue-6.4/riscv-hibernation-remove-duplicate-call-of-suspend_r.patch b/queue-6.4/riscv-hibernation-remove-duplicate-call-of-suspend_r.patch deleted file mode 100644 index c65512bfa5e..00000000000 --- a/queue-6.4/riscv-hibernation-remove-duplicate-call-of-suspend_r.patch +++ /dev/null @@ -1,41 +0,0 @@ -From 6c9dffd11ba36d3314fc8c63d106ac67df6e3f68 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Mon, 22 May 2023 10:50:20 +0800 -Subject: riscv: hibernation: Remove duplicate call of suspend_restore_csrs - -From: Song Shuai - -[ Upstream commit c6399b893043a5bb634de8677362f96684f1c0c8 ] - -The suspend_restore_csrs is called in both __hibernate_cpu_resume -and the `else` of subsequent swsusp_arch_suspend. - -Removing the first call makes both suspend_{save,restore}_csrs -left in swsusp_arch_suspend for clean code. - -Fixes: c0317210012e ("RISC-V: Add arch functions to support hibernation/suspend-to-disk") -Reviewed-by: Conor Dooley -Reviewed-by: JeeHeng Sia -Signed-off-by: Song Shuai -Link: https://lore.kernel.org/r/20230522025020.285042-1-songshuaishuai@tinylab.org -Signed-off-by: Palmer Dabbelt -Signed-off-by: Sasha Levin ---- - arch/riscv/kernel/hibernate-asm.S | 1 - - 1 file changed, 1 deletion(-) - -diff --git a/arch/riscv/kernel/hibernate-asm.S b/arch/riscv/kernel/hibernate-asm.S -index effaf5ca5da0e..f3e62e766cb29 100644 ---- a/arch/riscv/kernel/hibernate-asm.S -+++ b/arch/riscv/kernel/hibernate-asm.S -@@ -28,7 +28,6 @@ ENTRY(__hibernate_cpu_resume) - - REG_L a0, hibernate_cpu_context - -- suspend_restore_csrs - suspend_restore_regs - - /* Return zero value. */ --- -2.39.2 - diff --git a/queue-6.4/riscv-uprobes-restore-thread.bad_cause.patch b/queue-6.4/riscv-uprobes-restore-thread.bad_cause.patch deleted file mode 100644 index 5acdad3231a..00000000000 --- a/queue-6.4/riscv-uprobes-restore-thread.bad_cause.patch +++ /dev/null @@ -1,47 +0,0 @@ -From dd5b40c3cbecc03a5c36b80523956b947202fa30 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Sun, 23 Apr 2023 09:42:26 +0800 -Subject: riscv: uprobes: Restore thread.bad_cause - -From: Tiezhu Yang - -[ Upstream commit 58b1294dd1d65bb62f08dddbf418f954210c2057 ] - -thread.bad_cause is saved in arch_uprobe_pre_xol(), it should be restored -in arch_uprobe_{post,abort}_xol() accordingly, otherwise the save operation -is meaningless, this change is similar with x86 and powerpc. - -Signed-off-by: Tiezhu Yang -Acked-by: Oleg Nesterov -Reviewed-by: Guo Ren -Fixes: 74784081aac8 ("riscv: Add uprobes supported") -Link: https://lore.kernel.org/r/1682214146-3756-1-git-send-email-yangtiezhu@loongson.cn -Signed-off-by: Palmer Dabbelt -Signed-off-by: Sasha Levin ---- - arch/riscv/kernel/probes/uprobes.c | 2 ++ - 1 file changed, 2 insertions(+) - -diff --git a/arch/riscv/kernel/probes/uprobes.c b/arch/riscv/kernel/probes/uprobes.c -index c976a21cd4bd5..194f166b2cc40 100644 ---- a/arch/riscv/kernel/probes/uprobes.c -+++ b/arch/riscv/kernel/probes/uprobes.c -@@ -67,6 +67,7 @@ int arch_uprobe_post_xol(struct arch_uprobe *auprobe, struct pt_regs *regs) - struct uprobe_task *utask = current->utask; - - WARN_ON_ONCE(current->thread.bad_cause != UPROBE_TRAP_NR); -+ current->thread.bad_cause = utask->autask.saved_cause; - - instruction_pointer_set(regs, utask->vaddr + auprobe->insn_size); - -@@ -102,6 +103,7 @@ void arch_uprobe_abort_xol(struct arch_uprobe *auprobe, struct pt_regs *regs) - { - struct uprobe_task *utask = current->utask; - -+ current->thread.bad_cause = utask->autask.saved_cause; - /* - * Task has received a fatal signal, so reset back to probbed - * address. --- -2.39.2 - diff --git a/queue-6.4/rtnetlink-extend-rtext_filter_skip_stats-to-ifla_vf_.patch b/queue-6.4/rtnetlink-extend-rtext_filter_skip_stats-to-ifla_vf_.patch deleted file mode 100644 index e039cd6f254..00000000000 --- a/queue-6.4/rtnetlink-extend-rtext_filter_skip_stats-to-ifla_vf_.patch +++ /dev/null @@ -1,167 +0,0 @@ -From 51ffbd5d03edf7f97318f6f8fe041ba471aded8b Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Sun, 11 Jun 2023 13:51:08 +0300 -Subject: rtnetlink: extend RTEXT_FILTER_SKIP_STATS to IFLA_VF_INFO - -From: Edwin Peer - -[ Upstream commit fa0e21fa44438a0e856d42224bfa24641d37b979 ] - -This filter already exists for excluding IPv6 SNMP stats. Extend its -definition to also exclude IFLA_VF_INFO stats in RTM_GETLINK. - -This patch constitutes a partial fix for a netlink attribute nesting -overflow bug in IFLA_VFINFO_LIST. By excluding the stats when the -requester doesn't need them, the truncation of the VF list is avoided. - -While it was technically only the stats added in commit c5a9f6f0ab40 -("net/core: Add drop counters to VF statistics") breaking the camel's -back, the appreciable size of the stats data should never have been -included without due consideration for the maximum number of VFs -supported by PCI. - -Fixes: 3b766cd83232 ("net/core: Add reading VF statistics through the PF netdevice") -Fixes: c5a9f6f0ab40 ("net/core: Add drop counters to VF statistics") -Signed-off-by: Edwin Peer -Cc: Edwin Peer -Signed-off-by: Gal Pressman -Link: https://lore.kernel.org/r/20230611105108.122586-1-gal@nvidia.com -Signed-off-by: Paolo Abeni -Signed-off-by: Sasha Levin ---- - net/core/rtnetlink.c | 96 +++++++++++++++++++++++--------------------- - 1 file changed, 51 insertions(+), 45 deletions(-) - -diff --git a/net/core/rtnetlink.c b/net/core/rtnetlink.c -index 41de3a2f29e15..d1815122298d5 100644 ---- a/net/core/rtnetlink.c -+++ b/net/core/rtnetlink.c -@@ -961,24 +961,27 @@ static inline int rtnl_vfinfo_size(const struct net_device *dev, - nla_total_size(sizeof(struct ifla_vf_rate)) + - nla_total_size(sizeof(struct ifla_vf_link_state)) + - nla_total_size(sizeof(struct ifla_vf_rss_query_en)) + -- nla_total_size(0) + /* nest IFLA_VF_STATS */ -- /* IFLA_VF_STATS_RX_PACKETS */ -- nla_total_size_64bit(sizeof(__u64)) + -- /* IFLA_VF_STATS_TX_PACKETS */ -- nla_total_size_64bit(sizeof(__u64)) + -- /* IFLA_VF_STATS_RX_BYTES */ -- nla_total_size_64bit(sizeof(__u64)) + -- /* IFLA_VF_STATS_TX_BYTES */ -- nla_total_size_64bit(sizeof(__u64)) + -- /* IFLA_VF_STATS_BROADCAST */ -- nla_total_size_64bit(sizeof(__u64)) + -- /* IFLA_VF_STATS_MULTICAST */ -- nla_total_size_64bit(sizeof(__u64)) + -- /* IFLA_VF_STATS_RX_DROPPED */ -- nla_total_size_64bit(sizeof(__u64)) + -- /* IFLA_VF_STATS_TX_DROPPED */ -- nla_total_size_64bit(sizeof(__u64)) + - nla_total_size(sizeof(struct ifla_vf_trust))); -+ if (~ext_filter_mask & RTEXT_FILTER_SKIP_STATS) { -+ size += num_vfs * -+ (nla_total_size(0) + /* nest IFLA_VF_STATS */ -+ /* IFLA_VF_STATS_RX_PACKETS */ -+ nla_total_size_64bit(sizeof(__u64)) + -+ /* IFLA_VF_STATS_TX_PACKETS */ -+ nla_total_size_64bit(sizeof(__u64)) + -+ /* IFLA_VF_STATS_RX_BYTES */ -+ nla_total_size_64bit(sizeof(__u64)) + -+ /* IFLA_VF_STATS_TX_BYTES */ -+ nla_total_size_64bit(sizeof(__u64)) + -+ /* IFLA_VF_STATS_BROADCAST */ -+ nla_total_size_64bit(sizeof(__u64)) + -+ /* IFLA_VF_STATS_MULTICAST */ -+ nla_total_size_64bit(sizeof(__u64)) + -+ /* IFLA_VF_STATS_RX_DROPPED */ -+ nla_total_size_64bit(sizeof(__u64)) + -+ /* IFLA_VF_STATS_TX_DROPPED */ -+ nla_total_size_64bit(sizeof(__u64))); -+ } - return size; - } else - return 0; -@@ -1270,7 +1273,8 @@ static noinline_for_stack int rtnl_fill_stats(struct sk_buff *skb, - static noinline_for_stack int rtnl_fill_vfinfo(struct sk_buff *skb, - struct net_device *dev, - int vfs_num, -- struct nlattr *vfinfo) -+ struct nlattr *vfinfo, -+ u32 ext_filter_mask) - { - struct ifla_vf_rss_query_en vf_rss_query_en; - struct nlattr *vf, *vfstats, *vfvlanlist; -@@ -1376,33 +1380,35 @@ static noinline_for_stack int rtnl_fill_vfinfo(struct sk_buff *skb, - goto nla_put_vf_failure; - } - nla_nest_end(skb, vfvlanlist); -- memset(&vf_stats, 0, sizeof(vf_stats)); -- if (dev->netdev_ops->ndo_get_vf_stats) -- dev->netdev_ops->ndo_get_vf_stats(dev, vfs_num, -- &vf_stats); -- vfstats = nla_nest_start_noflag(skb, IFLA_VF_STATS); -- if (!vfstats) -- goto nla_put_vf_failure; -- if (nla_put_u64_64bit(skb, IFLA_VF_STATS_RX_PACKETS, -- vf_stats.rx_packets, IFLA_VF_STATS_PAD) || -- nla_put_u64_64bit(skb, IFLA_VF_STATS_TX_PACKETS, -- vf_stats.tx_packets, IFLA_VF_STATS_PAD) || -- nla_put_u64_64bit(skb, IFLA_VF_STATS_RX_BYTES, -- vf_stats.rx_bytes, IFLA_VF_STATS_PAD) || -- nla_put_u64_64bit(skb, IFLA_VF_STATS_TX_BYTES, -- vf_stats.tx_bytes, IFLA_VF_STATS_PAD) || -- nla_put_u64_64bit(skb, IFLA_VF_STATS_BROADCAST, -- vf_stats.broadcast, IFLA_VF_STATS_PAD) || -- nla_put_u64_64bit(skb, IFLA_VF_STATS_MULTICAST, -- vf_stats.multicast, IFLA_VF_STATS_PAD) || -- nla_put_u64_64bit(skb, IFLA_VF_STATS_RX_DROPPED, -- vf_stats.rx_dropped, IFLA_VF_STATS_PAD) || -- nla_put_u64_64bit(skb, IFLA_VF_STATS_TX_DROPPED, -- vf_stats.tx_dropped, IFLA_VF_STATS_PAD)) { -- nla_nest_cancel(skb, vfstats); -- goto nla_put_vf_failure; -+ if (~ext_filter_mask & RTEXT_FILTER_SKIP_STATS) { -+ memset(&vf_stats, 0, sizeof(vf_stats)); -+ if (dev->netdev_ops->ndo_get_vf_stats) -+ dev->netdev_ops->ndo_get_vf_stats(dev, vfs_num, -+ &vf_stats); -+ vfstats = nla_nest_start_noflag(skb, IFLA_VF_STATS); -+ if (!vfstats) -+ goto nla_put_vf_failure; -+ if (nla_put_u64_64bit(skb, IFLA_VF_STATS_RX_PACKETS, -+ vf_stats.rx_packets, IFLA_VF_STATS_PAD) || -+ nla_put_u64_64bit(skb, IFLA_VF_STATS_TX_PACKETS, -+ vf_stats.tx_packets, IFLA_VF_STATS_PAD) || -+ nla_put_u64_64bit(skb, IFLA_VF_STATS_RX_BYTES, -+ vf_stats.rx_bytes, IFLA_VF_STATS_PAD) || -+ nla_put_u64_64bit(skb, IFLA_VF_STATS_TX_BYTES, -+ vf_stats.tx_bytes, IFLA_VF_STATS_PAD) || -+ nla_put_u64_64bit(skb, IFLA_VF_STATS_BROADCAST, -+ vf_stats.broadcast, IFLA_VF_STATS_PAD) || -+ nla_put_u64_64bit(skb, IFLA_VF_STATS_MULTICAST, -+ vf_stats.multicast, IFLA_VF_STATS_PAD) || -+ nla_put_u64_64bit(skb, IFLA_VF_STATS_RX_DROPPED, -+ vf_stats.rx_dropped, IFLA_VF_STATS_PAD) || -+ nla_put_u64_64bit(skb, IFLA_VF_STATS_TX_DROPPED, -+ vf_stats.tx_dropped, IFLA_VF_STATS_PAD)) { -+ nla_nest_cancel(skb, vfstats); -+ goto nla_put_vf_failure; -+ } -+ nla_nest_end(skb, vfstats); - } -- nla_nest_end(skb, vfstats); - nla_nest_end(skb, vf); - return 0; - -@@ -1435,7 +1441,7 @@ static noinline_for_stack int rtnl_fill_vf(struct sk_buff *skb, - return -EMSGSIZE; - - for (i = 0; i < num_vfs; i++) { -- if (rtnl_fill_vfinfo(skb, dev, i, vfinfo)) -+ if (rtnl_fill_vfinfo(skb, dev, i, vfinfo, ext_filter_mask)) - return -EMSGSIZE; - } - --- -2.39.2 - diff --git a/queue-6.4/s390-kasan-fix-insecure-w-x-mapping-warning.patch b/queue-6.4/s390-kasan-fix-insecure-w-x-mapping-warning.patch deleted file mode 100644 index 1a988bab27f..00000000000 --- a/queue-6.4/s390-kasan-fix-insecure-w-x-mapping-warning.patch +++ /dev/null @@ -1,65 +0,0 @@ -From 875a5fdc92e728209fdb0de537f0e2ae9eccf7fd Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Fri, 26 May 2023 14:30:29 +0200 -Subject: s390/kasan: fix insecure W+X mapping warning - -From: Alexander Gordeev - -[ Upstream commit 2ed8b509753a0454b52b2d72e982265472c8d861 ] - -Since commit 3b5c3f000c2e ("s390/kasan: move shadow mapping -to decompressor") the decompressor establishes mappings for -the shadow memory and sets initial protection attributes to -RWX. The decompressed kernel resets protection to RW+NX -later on. - -In case a shadow memory range is not aligned on page boundary -(e.g. as result of mem= kernel command line parameter use), -the "Checked W+X mappings: FAILED, 1 W+X pages found" warning -hits. - -Reported-by: Vasily Gorbik -Fixes: 557b19709da9 ("s390/kasan: move shadow mapping to decompressor") -Reviewed-by: Vasily Gorbik -Signed-off-by: Alexander Gordeev -Signed-off-by: Sasha Levin ---- - arch/s390/mm/vmem.c | 14 ++++++++++---- - 1 file changed, 10 insertions(+), 4 deletions(-) - -diff --git a/arch/s390/mm/vmem.c b/arch/s390/mm/vmem.c -index 5b22c6e24528a..b9dcb4ae6c59a 100644 ---- a/arch/s390/mm/vmem.c -+++ b/arch/s390/mm/vmem.c -@@ -667,7 +667,15 @@ static void __init memblock_region_swap(void *a, void *b, int size) - - #ifdef CONFIG_KASAN - #define __sha(x) ((unsigned long)kasan_mem_to_shadow((void *)x)) -+ -+static inline int set_memory_kasan(unsigned long start, unsigned long end) -+{ -+ start = PAGE_ALIGN_DOWN(__sha(start)); -+ end = PAGE_ALIGN(__sha(end)); -+ return set_memory_rwnx(start, (end - start) >> PAGE_SHIFT); -+} - #endif -+ - /* - * map whole physical memory to virtual memory (identity mapping) - * we reserve enough space in the vmalloc area for vmemmap to hotplug -@@ -737,10 +745,8 @@ void __init vmem_map_init(void) - } - - #ifdef CONFIG_KASAN -- for_each_mem_range(i, &base, &end) { -- set_memory_rwnx(__sha(base), -- (__sha(end) - __sha(base)) >> PAGE_SHIFT); -- } -+ for_each_mem_range(i, &base, &end) -+ set_memory_kasan(base, end); - #endif - set_memory_rox((unsigned long)_stext, - (unsigned long)(_etext - _stext) >> PAGE_SHIFT); --- -2.39.2 - diff --git a/queue-6.4/samples-bpf-fix-buffer-overflow-in-tcp_basertt.patch b/queue-6.4/samples-bpf-fix-buffer-overflow-in-tcp_basertt.patch deleted file mode 100644 index d8b9e9c7960..00000000000 --- a/queue-6.4/samples-bpf-fix-buffer-overflow-in-tcp_basertt.patch +++ /dev/null @@ -1,36 +0,0 @@ -From bb8674620e365c74e0d0456bca7cbefcd0b851a0 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Fri, 5 May 2023 16:50:58 +0800 -Subject: samples/bpf: Fix buffer overflow in tcp_basertt - -From: Pengcheng Yang - -[ Upstream commit f4dea9689c5fea3d07170c2cb0703e216f1a0922 ] - -Using sizeof(nv) or strlen(nv)+1 is correct. - -Fixes: c890063e4404 ("bpf: sample BPF_SOCKET_OPS_BASE_RTT program") -Signed-off-by: Pengcheng Yang -Link: https://lore.kernel.org/r/1683276658-2860-1-git-send-email-yangpc@wangsu.com -Signed-off-by: Alexei Starovoitov -Signed-off-by: Sasha Levin ---- - samples/bpf/tcp_basertt_kern.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/samples/bpf/tcp_basertt_kern.c b/samples/bpf/tcp_basertt_kern.c -index 8dfe09a92feca..822b0742b8154 100644 ---- a/samples/bpf/tcp_basertt_kern.c -+++ b/samples/bpf/tcp_basertt_kern.c -@@ -47,7 +47,7 @@ int bpf_basertt(struct bpf_sock_ops *skops) - case BPF_SOCK_OPS_BASE_RTT: - n = bpf_getsockopt(skops, SOL_TCP, TCP_CONGESTION, - cong, sizeof(cong)); -- if (!n && !__builtin_memcmp(cong, nv, sizeof(nv)+1)) { -+ if (!n && !__builtin_memcmp(cong, nv, sizeof(nv))) { - /* Set base_rtt to 80us */ - rv = 80; - } else if (n) { --- -2.39.2 - diff --git a/queue-6.4/samples-bpf-xdp1-and-xdp2-reduce-xdpbufsize-to-60.patch b/queue-6.4/samples-bpf-xdp1-and-xdp2-reduce-xdpbufsize-to-60.patch deleted file mode 100644 index 01cb274ed29..00000000000 --- a/queue-6.4/samples-bpf-xdp1-and-xdp2-reduce-xdpbufsize-to-60.patch +++ /dev/null @@ -1,58 +0,0 @@ -From 82e19d1a3127e7e25ce68f4372ae2dcf4dfb559a Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Tue, 30 May 2023 16:30:41 +0200 -Subject: samples/bpf: xdp1 and xdp2 reduce XDPBUFSIZE to 60 - -From: Jesper Dangaard Brouer - -[ Upstream commit 60548b825b082cedf89b275c21c28b1e1d030e50 ] - -Default samples/pktgen scripts send 60 byte packets as hardware adds -4-bytes FCS checksum, which fulfils minimum Ethernet 64 bytes frame -size. - -XDP layer will not necessary have access to the 4-bytes FCS checksum. - -This leads to bpf_xdp_load_bytes() failing as it tries to copy 64-bytes -from an XDP packet that only have 60-bytes available. - -Fixes: 772251742262 ("samples/bpf: fixup some tools to be able to support xdp multibuffer") -Signed-off-by: Jesper Dangaard Brouer -Signed-off-by: Daniel Borkmann -Reviewed-by: Tariq Toukan -Link: https://lore.kernel.org/bpf/168545704139.2996228.2516528552939485216.stgit@firesoul -Signed-off-by: Sasha Levin ---- - samples/bpf/xdp1_kern.c | 2 +- - samples/bpf/xdp2_kern.c | 2 +- - 2 files changed, 2 insertions(+), 2 deletions(-) - -diff --git a/samples/bpf/xdp1_kern.c b/samples/bpf/xdp1_kern.c -index 0a5c704badd00..d91f27cbcfa99 100644 ---- a/samples/bpf/xdp1_kern.c -+++ b/samples/bpf/xdp1_kern.c -@@ -39,7 +39,7 @@ static int parse_ipv6(void *data, u64 nh_off, void *data_end) - return ip6h->nexthdr; - } - --#define XDPBUFSIZE 64 -+#define XDPBUFSIZE 60 - SEC("xdp.frags") - int xdp_prog1(struct xdp_md *ctx) - { -diff --git a/samples/bpf/xdp2_kern.c b/samples/bpf/xdp2_kern.c -index 67804ecf7ce37..8bca674451ed1 100644 ---- a/samples/bpf/xdp2_kern.c -+++ b/samples/bpf/xdp2_kern.c -@@ -55,7 +55,7 @@ static int parse_ipv6(void *data, u64 nh_off, void *data_end) - return ip6h->nexthdr; - } - --#define XDPBUFSIZE 64 -+#define XDPBUFSIZE 60 - SEC("xdp.frags") - int xdp_prog1(struct xdp_md *ctx) - { --- -2.39.2 - diff --git a/queue-6.4/sch_netem-fix-issues-in-netem_change-vs-get_dist_tab.patch b/queue-6.4/sch_netem-fix-issues-in-netem_change-vs-get_dist_tab.patch deleted file mode 100644 index a4ec9458eaa..00000000000 --- a/queue-6.4/sch_netem-fix-issues-in-netem_change-vs-get_dist_tab.patch +++ /dev/null @@ -1,152 +0,0 @@ -From e8bb80cff7a75aa08ba4a5d03e71f67f94368c00 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Thu, 22 Jun 2023 18:15:03 +0000 -Subject: sch_netem: fix issues in netem_change() vs get_dist_table() - -From: Eric Dumazet - -[ Upstream commit 11b73313c12403f617b47752db0ab3deef201af7 ] - -In blamed commit, I missed that get_dist_table() was allocating -memory using GFP_KERNEL, and acquiring qdisc lock to perform -the swap of newly allocated table with current one. - -In this patch, get_dist_table() is allocating memory and -copy user data before we acquire the qdisc lock. - -Then we perform swap operations while being protected by the lock. - -Note that after this patch netem_change() no longer can do partial changes. -If an error is returned, qdisc conf is left unchanged. - -Fixes: 2174a08db80d ("sch_netem: acquire qdisc lock in netem_change()") -Reported-by: syzbot -Signed-off-by: Eric Dumazet -Cc: Stephen Hemminger -Acked-by: Jamal Hadi Salim -Reviewed-by: Simon Horman -Link: https://lore.kernel.org/r/20230622181503.2327695-1-edumazet@google.com -Signed-off-by: Jakub Kicinski -Signed-off-by: Sasha Levin ---- - net/sched/sch_netem.c | 59 ++++++++++++++++++------------------------- - 1 file changed, 25 insertions(+), 34 deletions(-) - -diff --git a/net/sched/sch_netem.c b/net/sched/sch_netem.c -index e79be1b3e74da..b93ec2a3454eb 100644 ---- a/net/sched/sch_netem.c -+++ b/net/sched/sch_netem.c -@@ -773,12 +773,10 @@ static void dist_free(struct disttable *d) - * signed 16 bit values. - */ - --static int get_dist_table(struct Qdisc *sch, struct disttable **tbl, -- const struct nlattr *attr) -+static int get_dist_table(struct disttable **tbl, const struct nlattr *attr) - { - size_t n = nla_len(attr)/sizeof(__s16); - const __s16 *data = nla_data(attr); -- spinlock_t *root_lock; - struct disttable *d; - int i; - -@@ -793,13 +791,7 @@ static int get_dist_table(struct Qdisc *sch, struct disttable **tbl, - for (i = 0; i < n; i++) - d->table[i] = data[i]; - -- root_lock = qdisc_root_sleeping_lock(sch); -- -- spin_lock_bh(root_lock); -- swap(*tbl, d); -- spin_unlock_bh(root_lock); -- -- dist_free(d); -+ *tbl = d; - return 0; - } - -@@ -956,6 +948,8 @@ static int netem_change(struct Qdisc *sch, struct nlattr *opt, - { - struct netem_sched_data *q = qdisc_priv(sch); - struct nlattr *tb[TCA_NETEM_MAX + 1]; -+ struct disttable *delay_dist = NULL; -+ struct disttable *slot_dist = NULL; - struct tc_netem_qopt *qopt; - struct clgstate old_clg; - int old_loss_model = CLG_RANDOM; -@@ -966,6 +960,18 @@ static int netem_change(struct Qdisc *sch, struct nlattr *opt, - if (ret < 0) - return ret; - -+ if (tb[TCA_NETEM_DELAY_DIST]) { -+ ret = get_dist_table(&delay_dist, tb[TCA_NETEM_DELAY_DIST]); -+ if (ret) -+ goto table_free; -+ } -+ -+ if (tb[TCA_NETEM_SLOT_DIST]) { -+ ret = get_dist_table(&slot_dist, tb[TCA_NETEM_SLOT_DIST]); -+ if (ret) -+ goto table_free; -+ } -+ - sch_tree_lock(sch); - /* backup q->clg and q->loss_model */ - old_clg = q->clg; -@@ -975,26 +981,17 @@ static int netem_change(struct Qdisc *sch, struct nlattr *opt, - ret = get_loss_clg(q, tb[TCA_NETEM_LOSS]); - if (ret) { - q->loss_model = old_loss_model; -+ q->clg = old_clg; - goto unlock; - } - } else { - q->loss_model = CLG_RANDOM; - } - -- if (tb[TCA_NETEM_DELAY_DIST]) { -- ret = get_dist_table(sch, &q->delay_dist, -- tb[TCA_NETEM_DELAY_DIST]); -- if (ret) -- goto get_table_failure; -- } -- -- if (tb[TCA_NETEM_SLOT_DIST]) { -- ret = get_dist_table(sch, &q->slot_dist, -- tb[TCA_NETEM_SLOT_DIST]); -- if (ret) -- goto get_table_failure; -- } -- -+ if (delay_dist) -+ swap(q->delay_dist, delay_dist); -+ if (slot_dist) -+ swap(q->slot_dist, slot_dist); - sch->limit = qopt->limit; - - q->latency = PSCHED_TICKS2NS(qopt->latency); -@@ -1044,17 +1041,11 @@ static int netem_change(struct Qdisc *sch, struct nlattr *opt, - - unlock: - sch_tree_unlock(sch); -- return ret; - --get_table_failure: -- /* recover clg and loss_model, in case of -- * q->clg and q->loss_model were modified -- * in get_loss_clg() -- */ -- q->clg = old_clg; -- q->loss_model = old_loss_model; -- -- goto unlock; -+table_free: -+ dist_free(delay_dist); -+ dist_free(slot_dist); -+ return ret; - } - - static int netem_init(struct Qdisc *sch, struct nlattr *opt, --- -2.39.2 - diff --git a/queue-6.4/sched-core-avoid-multiple-calling-update_rq_clock-in.patch b/queue-6.4/sched-core-avoid-multiple-calling-update_rq_clock-in.patch deleted file mode 100644 index acff7ceced3..00000000000 --- a/queue-6.4/sched-core-avoid-multiple-calling-update_rq_clock-in.patch +++ /dev/null @@ -1,121 +0,0 @@ -From f1610ca683018c1384c428597bf20567ef7e4404 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Tue, 13 Jun 2023 16:20:11 +0800 -Subject: sched/core: Avoid multiple calling update_rq_clock() in - __cfsb_csd_unthrottle() - -From: Hao Jia - -[ Upstream commit ebb83d84e49b54369b0db67136a5fe1087124dcc ] - -After commit 8ad075c2eb1f ("sched: Async unthrottling for cfs -bandwidth"), we may update the rq clock multiple times in the loop of -__cfsb_csd_unthrottle(). - -A prior (although less common) instance of this problem exists in -unthrottle_offline_cfs_rqs(). - -Cure both by ensuring update_rq_clock() is called before the loop and -setting RQCF_ACT_SKIP during the loop, to supress further updates. -The alternative would be pulling update_rq_clock() out of -unthrottle_cfs_rq(), but that gives an even bigger mess. - -Fixes: 8ad075c2eb1f ("sched: Async unthrottling for cfs bandwidth") -Reviewed-By: Ben Segall -Suggested-by: Vincent Guittot -Signed-off-by: Hao Jia -Signed-off-by: Peter Zijlstra (Intel) -Reviewed-by: Vincent Guittot -Link: https://lkml.kernel.org/r/20230613082012.49615-4-jiahao.os@bytedance.com -Signed-off-by: Sasha Levin ---- - kernel/sched/fair.c | 18 ++++++++++++++++++ - kernel/sched/sched.h | 22 ++++++++++++++++++++++ - 2 files changed, 40 insertions(+) - -diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c -index 373ff5f558844..4da5f35417626 100644 ---- a/kernel/sched/fair.c -+++ b/kernel/sched/fair.c -@@ -5576,6 +5576,14 @@ static void __cfsb_csd_unthrottle(void *arg) - - rq_lock(rq, &rf); - -+ /* -+ * Iterating over the list can trigger several call to -+ * update_rq_clock() in unthrottle_cfs_rq(). -+ * Do it once and skip the potential next ones. -+ */ -+ update_rq_clock(rq); -+ rq_clock_start_loop_update(rq); -+ - /* - * Since we hold rq lock we're safe from concurrent manipulation of - * the CSD list. However, this RCU critical section annotates the -@@ -5595,6 +5603,7 @@ static void __cfsb_csd_unthrottle(void *arg) - - rcu_read_unlock(); - -+ rq_clock_stop_loop_update(rq); - rq_unlock(rq, &rf); - } - -@@ -6115,6 +6124,13 @@ static void __maybe_unused unthrottle_offline_cfs_rqs(struct rq *rq) - - lockdep_assert_rq_held(rq); - -+ /* -+ * The rq clock has already been updated in the -+ * set_rq_offline(), so we should skip updating -+ * the rq clock again in unthrottle_cfs_rq(). -+ */ -+ rq_clock_start_loop_update(rq); -+ - rcu_read_lock(); - list_for_each_entry_rcu(tg, &task_groups, list) { - struct cfs_rq *cfs_rq = tg->cfs_rq[cpu_of(rq)]; -@@ -6137,6 +6153,8 @@ static void __maybe_unused unthrottle_offline_cfs_rqs(struct rq *rq) - unthrottle_cfs_rq(cfs_rq); - } - rcu_read_unlock(); -+ -+ rq_clock_stop_loop_update(rq); - } - - #else /* CONFIG_CFS_BANDWIDTH */ -diff --git a/kernel/sched/sched.h b/kernel/sched/sched.h -index ec7b3e0a2b207..81ac605b9cd5c 100644 ---- a/kernel/sched/sched.h -+++ b/kernel/sched/sched.h -@@ -1546,6 +1546,28 @@ static inline void rq_clock_cancel_skipupdate(struct rq *rq) - rq->clock_update_flags &= ~RQCF_REQ_SKIP; - } - -+/* -+ * During cpu offlining and rq wide unthrottling, we can trigger -+ * an update_rq_clock() for several cfs and rt runqueues (Typically -+ * when using list_for_each_entry_*) -+ * rq_clock_start_loop_update() can be called after updating the clock -+ * once and before iterating over the list to prevent multiple update. -+ * After the iterative traversal, we need to call rq_clock_stop_loop_update() -+ * to clear RQCF_ACT_SKIP of rq->clock_update_flags. -+ */ -+static inline void rq_clock_start_loop_update(struct rq *rq) -+{ -+ lockdep_assert_rq_held(rq); -+ SCHED_WARN_ON(rq->clock_update_flags & RQCF_ACT_SKIP); -+ rq->clock_update_flags |= RQCF_ACT_SKIP; -+} -+ -+static inline void rq_clock_stop_loop_update(struct rq *rq) -+{ -+ lockdep_assert_rq_held(rq); -+ rq->clock_update_flags &= ~RQCF_ACT_SKIP; -+} -+ - struct rq_flags { - unsigned long flags; - struct pin_cookie cookie; --- -2.39.2 - diff --git a/queue-6.4/scripts-mksysmap-fix-badly-escaped.patch b/queue-6.4/scripts-mksysmap-fix-badly-escaped.patch deleted file mode 100644 index d1ca44422a7..00000000000 --- a/queue-6.4/scripts-mksysmap-fix-badly-escaped.patch +++ /dev/null @@ -1,64 +0,0 @@ -From 3005fea783ea6f6375397382903e15109cb9f079 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Tue, 6 Jun 2023 17:35:53 +0000 -Subject: scripts/mksysmap: Fix badly escaped '$' -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -From: Pierre-Clément Tosi - -[ Upstream commit ec336aa83162fe0f3d554baed2d4e2589b69ec6e ] - -The backslash characters escaping '$' in the command to sed (intended to -prevent it from interpreting '$' as "end-of-line") are currently being -consumed by the Shell (where they mean that sh should not evaluate what -follows '$' as a variable name). This means that - - sed -e "/ \$/d" - -executes the script - - / $/d - -instead of the intended - - / \$/d - -So escape twice in mksysmap any '$' that actually needs to reach sed -escaped so that the backslash survives the Shell. - -Fixes: c4802044a0a7 ("scripts/mksysmap: use sed with in-line comments") -Fixes: 320e7c9d4494 ("scripts/kallsyms: move compiler-generated symbol patterns to mksysmap") -Signed-off-by: Pierre-Clément Tosi -Signed-off-by: Masahiro Yamada -Signed-off-by: Sasha Levin ---- - scripts/mksysmap | 4 ++-- - 1 file changed, 2 insertions(+), 2 deletions(-) - -diff --git a/scripts/mksysmap b/scripts/mksysmap -index cb3b1fff3eee8..ec33385261022 100755 ---- a/scripts/mksysmap -+++ b/scripts/mksysmap -@@ -32,7 +32,7 @@ ${NM} -n ${1} | sed >${2} -e " - # (do not forget a space before each pattern) - - # local symbols for ARM, MIPS, etc. --/ \$/d -+/ \\$/d - - # local labels, .LBB, .Ltmpxxx, .L__unnamed_xx, .LASANPC, etc. - / \.L/d -@@ -41,7 +41,7 @@ ${NM} -n ${1} | sed >${2} -e " - / __efistub_/d - - # arm64 local symbols in non-VHE KVM namespace --/ __kvm_nvhe_\$/d -+/ __kvm_nvhe_\\$/d - / __kvm_nvhe_\.L/d - - # arm64 lld --- -2.39.2 - diff --git a/queue-6.4/scsi-3w-xxxx-add-error-handling-for-initialization-f.patch b/queue-6.4/scsi-3w-xxxx-add-error-handling-for-initialization-f.patch deleted file mode 100644 index c7d430a59ad..00000000000 --- a/queue-6.4/scsi-3w-xxxx-add-error-handling-for-initialization-f.patch +++ /dev/null @@ -1,47 +0,0 @@ -From 7ae32fb1f1a1f8b096d86e9cd14b258b81127bc0 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Fri, 5 May 2023 22:12:55 +0800 -Subject: scsi: 3w-xxxx: Add error handling for initialization failure in - tw_probe() - -From: Yuchen Yang - -[ Upstream commit 2e2fe5ac695a00ab03cab4db1f4d6be07168ed9d ] - -Smatch complains that: - -tw_probe() warn: missing error code 'retval' - -This patch adds error checking to tw_probe() to handle initialization -failure. If tw_reset_sequence() function returns a non-zero value, the -function will return -EINVAL to indicate initialization failure. - -Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2") -Signed-off-by: Yuchen Yang -Link: https://lore.kernel.org/r/20230505141259.7730-1-u202114568@hust.edu.cn -Reviewed-by: Dan Carpenter -Signed-off-by: Martin K. Petersen -Signed-off-by: Sasha Levin ---- - drivers/scsi/3w-xxxx.c | 4 +++- - 1 file changed, 3 insertions(+), 1 deletion(-) - -diff --git a/drivers/scsi/3w-xxxx.c b/drivers/scsi/3w-xxxx.c -index 36c34ced0cc18..f39c9ec2e7810 100644 ---- a/drivers/scsi/3w-xxxx.c -+++ b/drivers/scsi/3w-xxxx.c -@@ -2305,8 +2305,10 @@ static int tw_probe(struct pci_dev *pdev, const struct pci_device_id *dev_id) - TW_DISABLE_INTERRUPTS(tw_dev); - - /* Initialize the card */ -- if (tw_reset_sequence(tw_dev)) -+ if (tw_reset_sequence(tw_dev)) { -+ retval = -EINVAL; - goto out_release_mem_region; -+ } - - /* Set host specific parameters */ - host->max_id = TW_MAX_UNITS; --- -2.39.2 - diff --git a/queue-6.4/scsi-lpfc-revise-npiv-els-unsol-rcv-cmpl-logic-to-dr.patch b/queue-6.4/scsi-lpfc-revise-npiv-els-unsol-rcv-cmpl-logic-to-dr.patch deleted file mode 100644 index 7caeec85c97..00000000000 --- a/queue-6.4/scsi-lpfc-revise-npiv-els-unsol-rcv-cmpl-logic-to-dr.patch +++ /dev/null @@ -1,59 +0,0 @@ -From c905412862c7704454d5a5b4080b7ae55512f654 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Tue, 23 May 2023 11:32:01 -0700 -Subject: scsi: lpfc: Revise NPIV ELS unsol rcv cmpl logic to drop ndlp based - on nlp_state - -From: Justin Tee - -[ Upstream commit 9914a3d033d3e1d836a43e93e9738e7dd44a096a ] - -When NPIV ports are zoned to devices that support both initiator and target -mode, a remote device's initiated PRLI results in unintended final kref -clean up of the device's ndlp structure. This disrupts NPIV ports' -discovery for target devices that support both initiator and target mode. - -Modify the NPIV lpfc_drop_node clause such that we allow the ndlp to live -so long as it was in NLP_STE_PLOGI_ISSUE, NLP_STE_REG_LOGIN_ISSUE, or -NLP_STE_PRLI_ISSUE nlp_state. This allows lpfc's issued PRLI completion -routine to determine if the final kref clean up should execute rather than -a remote device's issued PRLI. - -Fixes: db651ec22524 ("scsi: lpfc: Correct used_rpi count when devloss tmo fires with no recovery") -Signed-off-by: Justin Tee -Link: https://lore.kernel.org/r/20230523183206.7728-5-justintee8345@gmail.com -Signed-off-by: Martin K. Petersen -Signed-off-by: Sasha Levin ---- - drivers/scsi/lpfc/lpfc_els.c | 14 ++++++++++++-- - 1 file changed, 12 insertions(+), 2 deletions(-) - -diff --git a/drivers/scsi/lpfc/lpfc_els.c b/drivers/scsi/lpfc/lpfc_els.c -index 6a15f879e5173..a5e5b7bff59b4 100644 ---- a/drivers/scsi/lpfc/lpfc_els.c -+++ b/drivers/scsi/lpfc/lpfc_els.c -@@ -5468,9 +5468,19 @@ lpfc_cmpl_els_rsp(struct lpfc_hba *phba, struct lpfc_iocbq *cmdiocb, - ndlp->nlp_flag &= ~NLP_RELEASE_RPI; - spin_unlock_irq(&ndlp->lock); - } -+ lpfc_drop_node(vport, ndlp); -+ } else if (ndlp->nlp_state != NLP_STE_PLOGI_ISSUE && -+ ndlp->nlp_state != NLP_STE_REG_LOGIN_ISSUE && -+ ndlp->nlp_state != NLP_STE_PRLI_ISSUE) { -+ /* Drop ndlp if there is no planned or outstanding -+ * issued PRLI. -+ * -+ * In cases when the ndlp is acting as both an initiator -+ * and target function, let our issued PRLI determine -+ * the final ndlp kref drop. -+ */ -+ lpfc_drop_node(vport, ndlp); - } -- -- lpfc_drop_node(vport, ndlp); - } - - /* Release the originating I/O reference. */ --- -2.39.2 - diff --git a/queue-6.4/scsi-qedf-fix-null-dereference-in-error-handling.patch b/queue-6.4/scsi-qedf-fix-null-dereference-in-error-handling.patch deleted file mode 100644 index 4709dbab560..00000000000 --- a/queue-6.4/scsi-qedf-fix-null-dereference-in-error-handling.patch +++ /dev/null @@ -1,47 +0,0 @@ -From 7883c86243f9fbbcc090df18a860c5721d124f37 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Tue, 2 May 2023 22:00:21 +0800 -Subject: scsi: qedf: Fix NULL dereference in error handling - -From: Jinhong Zhu - -[ Upstream commit f025312b089474a54e4859f3453771314d9e3d4f ] - -Smatch reported: - -drivers/scsi/qedf/qedf_main.c:3056 qedf_alloc_global_queues() -warn: missing unwind goto? - -At this point in the function, nothing has been allocated so we can return -directly. In particular the "qedf->global_queues" have not been allocated -so calling qedf_free_global_queues() will lead to a NULL dereference when -we check if (!gl[i]) and "gl" is NULL. - -Fixes: 61d8658b4a43 ("scsi: qedf: Add QLogic FastLinQ offload FCoE driver framework.") -Signed-off-by: Jinhong Zhu -Link: https://lore.kernel.org/r/20230502140022.2852-1-jinhongzhu@hust.edu.cn -Reviewed-by: Dan Carpenter -Signed-off-by: Martin K. Petersen -Signed-off-by: Sasha Levin ---- - drivers/scsi/qedf/qedf_main.c | 3 +-- - 1 file changed, 1 insertion(+), 2 deletions(-) - -diff --git a/drivers/scsi/qedf/qedf_main.c b/drivers/scsi/qedf/qedf_main.c -index 3b64de81ea0d3..2a31ddc99dde5 100644 ---- a/drivers/scsi/qedf/qedf_main.c -+++ b/drivers/scsi/qedf/qedf_main.c -@@ -3041,9 +3041,8 @@ static int qedf_alloc_global_queues(struct qedf_ctx *qedf) - * addresses of our queues - */ - if (!qedf->p_cpuq) { -- status = -EINVAL; - QEDF_ERR(&qedf->dbg_ctx, "p_cpuq is NULL.\n"); -- goto mem_alloc_failure; -+ return -EINVAL; - } - - qedf->global_queues = kzalloc((sizeof(struct global_queue *) --- -2.39.2 - diff --git a/queue-6.4/scsi-ufs-core-fix-handling-of-lrbp-cmd.patch b/queue-6.4/scsi-ufs-core-fix-handling-of-lrbp-cmd.patch deleted file mode 100644 index f8bed721c0a..00000000000 --- a/queue-6.4/scsi-ufs-core-fix-handling-of-lrbp-cmd.patch +++ /dev/null @@ -1,96 +0,0 @@ -From ebf3e5e997ae62931ddf5639026dce226f43dcf0 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Wed, 24 May 2023 13:36:20 -0700 -Subject: scsi: ufs: core: Fix handling of lrbp->cmd - -From: Bart Van Assche - -[ Upstream commit 549e91a9bbaa0ee480f59357868421a61d369770 ] - -ufshcd_queuecommand() may be called two times in a row for a SCSI command -before it is completed. Hence make the following changes: - - - In the functions that submit a command, do not check the old value of - lrbp->cmd nor clear lrbp->cmd in error paths. - - - In ufshcd_release_scsi_cmd(), do not clear lrbp->cmd. - -See also scsi_send_eh_cmnd(). - -This commit prevents that the following appears if a command times out: - -WARNING: at drivers/ufs/core/ufshcd.c:2965 ufshcd_queuecommand+0x6f8/0x9a8 -Call trace: - ufshcd_queuecommand+0x6f8/0x9a8 - scsi_send_eh_cmnd+0x2c0/0x960 - scsi_eh_test_devices+0x100/0x314 - scsi_eh_ready_devs+0xd90/0x114c - scsi_error_handler+0x2b4/0xb70 - kthread+0x16c/0x1e0 - -Fixes: 5a0b0cb9bee7 ("[SCSI] ufs: Add support for sending NOP OUT UPIU") -Signed-off-by: Bart Van Assche -Link: https://lore.kernel.org/r/20230524203659.1394307-3-bvanassche@acm.org -Acked-by: Adrian Hunter -Signed-off-by: Martin K. Petersen -Signed-off-by: Sasha Levin ---- - drivers/ufs/core/ufshcd.c | 7 +------ - 1 file changed, 1 insertion(+), 6 deletions(-) - -diff --git a/drivers/ufs/core/ufshcd.c b/drivers/ufs/core/ufshcd.c -index c36812401ef05..7c133852dc8a4 100644 ---- a/drivers/ufs/core/ufshcd.c -+++ b/drivers/ufs/core/ufshcd.c -@@ -2945,7 +2945,6 @@ static int ufshcd_queuecommand(struct Scsi_Host *host, struct scsi_cmnd *cmd) - (hba->clk_gating.state != CLKS_ON)); - - lrbp = &hba->lrb[tag]; -- WARN_ON(lrbp->cmd); - lrbp->cmd = cmd; - lrbp->task_tag = tag; - lrbp->lun = ufshcd_scsi_to_upiu_lun(cmd->device->lun); -@@ -2961,7 +2960,6 @@ static int ufshcd_queuecommand(struct Scsi_Host *host, struct scsi_cmnd *cmd) - - err = ufshcd_map_sg(hba, lrbp); - if (err) { -- lrbp->cmd = NULL; - ufshcd_release(hba); - goto out; - } -@@ -3180,7 +3178,7 @@ static int ufshcd_exec_dev_cmd(struct ufs_hba *hba, - down_read(&hba->clk_scaling_lock); - - lrbp = &hba->lrb[tag]; -- WARN_ON(lrbp->cmd); -+ lrbp->cmd = NULL; - err = ufshcd_compose_dev_cmd(hba, lrbp, cmd_type, tag); - if (unlikely(err)) - goto out; -@@ -5422,7 +5420,6 @@ static void ufshcd_release_scsi_cmd(struct ufs_hba *hba, - struct scsi_cmnd *cmd = lrbp->cmd; - - scsi_dma_unmap(cmd); -- lrbp->cmd = NULL; /* Mark the command as completed. */ - ufshcd_release(hba); - ufshcd_clk_scaling_update_busy(hba); - } -@@ -7037,7 +7034,6 @@ static int ufshcd_issue_devman_upiu_cmd(struct ufs_hba *hba, - down_read(&hba->clk_scaling_lock); - - lrbp = &hba->lrb[tag]; -- WARN_ON(lrbp->cmd); - lrbp->cmd = NULL; - lrbp->task_tag = tag; - lrbp->lun = 0; -@@ -7209,7 +7205,6 @@ int ufshcd_advanced_rpmb_req_handler(struct ufs_hba *hba, struct utp_upiu_req *r - down_read(&hba->clk_scaling_lock); - - lrbp = &hba->lrb[tag]; -- WARN_ON(lrbp->cmd); - lrbp->cmd = NULL; - lrbp->task_tag = tag; - lrbp->lun = UFS_UPIU_RPMB_WLUN; --- -2.39.2 - diff --git a/queue-6.4/scsi-ufs-core-increase-the-start-stop-unit-timeout-f.patch b/queue-6.4/scsi-ufs-core-increase-the-start-stop-unit-timeout-f.patch deleted file mode 100644 index f9d17e93410..00000000000 --- a/queue-6.4/scsi-ufs-core-increase-the-start-stop-unit-timeout-f.patch +++ /dev/null @@ -1,47 +0,0 @@ -From 216a47c4b9ef0080e543a85208ed330cb0904a99 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Wed, 24 May 2023 13:36:19 -0700 -Subject: scsi: ufs: core: Increase the START STOP UNIT timeout from one to ten - seconds - -From: Bart Van Assche - -[ Upstream commit fe8637f7708c16765ecf4035813efbfdd2c9be10 ] - -One UFS vendor asked to increase the UFS timeout from 1 s to 3 s. Another -UFS vendor asked to increase the UFS timeout from 1 s to 10 s. Hence this -patch that increases the UFS timeout to 10 s. This patch can cause the -total timeout to exceed 20 s, the Android shutdown timeout. This is fine -since the loop around ufshcd_execute_start_stop() exists to deal with unit -attentions and because unit attentions are reported quickly. - -Fixes: dcd5b7637c6d ("scsi: ufs: Reduce the START STOP UNIT timeout") -Fixes: 8f2c96420c6e ("scsi: ufs: core: Reduce the power mode change timeout") -Acked-by: Adrian Hunter -Reviewed-by: Stanley Chu -Reviewed-by: Bean Huo -Signed-off-by: Bart Van Assche -Link: https://lore.kernel.org/r/20230524203659.1394307-2-bvanassche@acm.org -Signed-off-by: Martin K. Petersen -Signed-off-by: Sasha Levin ---- - drivers/ufs/core/ufshcd.c | 3 ++- - 1 file changed, 2 insertions(+), 1 deletion(-) - -diff --git a/drivers/ufs/core/ufshcd.c b/drivers/ufs/core/ufshcd.c -index e7e79f515e141..c36812401ef05 100644 ---- a/drivers/ufs/core/ufshcd.c -+++ b/drivers/ufs/core/ufshcd.c -@@ -9184,7 +9184,8 @@ static int ufshcd_execute_start_stop(struct scsi_device *sdev, - }; - - return scsi_execute_cmd(sdev, cdb, REQ_OP_DRV_IN, /*buffer=*/NULL, -- /*bufflen=*/0, /*timeout=*/HZ, /*retries=*/0, &args); -+ /*bufflen=*/0, /*timeout=*/10 * HZ, /*retries=*/0, -+ &args); - } - - /** --- -2.39.2 - diff --git a/queue-6.4/scsi-ufs-core-mcq-fix-the-incorrect-ocs-value-for-th.patch b/queue-6.4/scsi-ufs-core-mcq-fix-the-incorrect-ocs-value-for-th.patch deleted file mode 100644 index 1ad27199140..00000000000 --- a/queue-6.4/scsi-ufs-core-mcq-fix-the-incorrect-ocs-value-for-th.patch +++ /dev/null @@ -1,99 +0,0 @@ -From d83a8d22264f18cf4f71ecf4336edf9991493fbf Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Sat, 10 Jun 2023 10:15:51 +0800 -Subject: scsi: ufs: core: mcq: Fix the incorrect OCS value for the device - command - -From: Stanley Chu - -[ Upstream commit 0fef6bb730c490fcdc4347dbd21646d3ffe62cf5 ] - -In MCQ mode, when a device command uses a hardware queue shared with other -commands, a race condition may occur in the following scenario: - - 1. A device command is completed in CQx with CQE entry "e". - - 2. The interrupt handler copies the "cqe" pointer to "hba->dev_cmd.cqe" - and completes "hba->dev_cmd.complete". - - 3. The "ufshcd_wait_for_dev_cmd()" function is awakened and retrieves the - OCS value from "hba->dev_cmd.cqe". - -However, there is a possibility that the CQE entry "e" will be overwritten -by newly completed commands in CQx, resulting in an incorrect OCS value -being received by "ufshcd_wait_for_dev_cmd()". - -To avoid this race condition, the OCS value should be immediately copied to -the struct "lrb" of the device command. Then "ufshcd_wait_for_dev_cmd()" -can retrieve the OCS value from the struct "lrb". - -Fixes: 57b1c0ef89ac ("scsi: ufs: core: mcq: Add support to allocate multiple queues") -Suggested-by: Can Guo -Signed-off-by: Stanley Chu -Link: https://lore.kernel.org/r/20230610021553.1213-2-powen.kao@mediatek.com -Tested-by: Po-Wen Kao -Reviewed-by: Bart Van Assche -Signed-off-by: Martin K. Petersen -Signed-off-by: Sasha Levin ---- - drivers/ufs/core/ufshcd.c | 10 +++++++--- - include/ufs/ufshcd.h | 1 - - 2 files changed, 7 insertions(+), 4 deletions(-) - -diff --git a/drivers/ufs/core/ufshcd.c b/drivers/ufs/core/ufshcd.c -index 41f383b588865..6d8ef80d9cbc4 100644 ---- a/drivers/ufs/core/ufshcd.c -+++ b/drivers/ufs/core/ufshcd.c -@@ -3097,7 +3097,7 @@ static int ufshcd_wait_for_dev_cmd(struct ufs_hba *hba, - * not trigger any race conditions. - */ - hba->dev_cmd.complete = NULL; -- err = ufshcd_get_tr_ocs(lrbp, hba->dev_cmd.cqe); -+ err = ufshcd_get_tr_ocs(lrbp, NULL); - if (!err) - err = ufshcd_dev_cmd_completion(hba, lrbp); - } else { -@@ -3184,7 +3184,6 @@ static int ufshcd_exec_dev_cmd(struct ufs_hba *hba, - goto out; - - hba->dev_cmd.complete = &wait; -- hba->dev_cmd.cqe = NULL; - - ufshcd_add_query_upiu_trace(hba, UFS_QUERY_SEND, lrbp->ucd_req_ptr); - -@@ -5435,6 +5434,7 @@ void ufshcd_compl_one_cqe(struct ufs_hba *hba, int task_tag, - { - struct ufshcd_lrb *lrbp; - struct scsi_cmnd *cmd; -+ enum utp_ocs ocs; - - lrbp = &hba->lrb[task_tag]; - lrbp->compl_time_stamp = ktime_get(); -@@ -5450,7 +5450,11 @@ void ufshcd_compl_one_cqe(struct ufs_hba *hba, int task_tag, - } else if (lrbp->command_type == UTP_CMD_TYPE_DEV_MANAGE || - lrbp->command_type == UTP_CMD_TYPE_UFS_STORAGE) { - if (hba->dev_cmd.complete) { -- hba->dev_cmd.cqe = cqe; -+ if (cqe) { -+ ocs = le32_to_cpu(cqe->status) & MASK_OCS; -+ lrbp->utr_descriptor_ptr->header.dword_2 = -+ cpu_to_le32(ocs); -+ } - complete(hba->dev_cmd.complete); - ufshcd_clk_scaling_update_busy(hba); - } -diff --git a/include/ufs/ufshcd.h b/include/ufs/ufshcd.h -index df1d04f7a5424..8eecbb3766158 100644 ---- a/include/ufs/ufshcd.h -+++ b/include/ufs/ufshcd.h -@@ -225,7 +225,6 @@ struct ufs_dev_cmd { - struct mutex lock; - struct completion *complete; - struct ufs_query query; -- struct cq_entry *cqe; - }; - - /** --- -2.39.2 - diff --git a/queue-6.4/scsi-ufs-core-remove-a-ufshcd_add_command_trace-call.patch b/queue-6.4/scsi-ufs-core-remove-a-ufshcd_add_command_trace-call.patch deleted file mode 100644 index 0f6e10318b9..00000000000 --- a/queue-6.4/scsi-ufs-core-remove-a-ufshcd_add_command_trace-call.patch +++ /dev/null @@ -1,39 +0,0 @@ -From 5828e5608a0beead8611725373c69552791e82b3 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Wed, 31 May 2023 15:40:47 -0700 -Subject: scsi: ufs: core: Remove a ufshcd_add_command_trace() call - -From: Bart Van Assche - -[ Upstream commit 72554035b9797e00e68cd866e6cefa7f0b2c6f76 ] - -ufshcd_add_command_trace() traces SCSI commands. Remove a -ufshcd_add_command_trace() call from a code path that is not related to -SCSI commands. - -Signed-off-by: Bart Van Assche -Link: https://lore.kernel.org/r/20230531224050.25554-1-bvanassche@acm.org -Reviewed-by: Avri Altman -Reviewed-by: Bean Huo -Signed-off-by: Martin K. Petersen -Stable-dep-of: 0fef6bb730c4 ("scsi: ufs: core: mcq: Fix the incorrect OCS value for the device command") -Signed-off-by: Sasha Levin ---- - drivers/ufs/core/ufshcd.c | 1 - - 1 file changed, 1 deletion(-) - -diff --git a/drivers/ufs/core/ufshcd.c b/drivers/ufs/core/ufshcd.c -index 7c133852dc8a4..41f383b588865 100644 ---- a/drivers/ufs/core/ufshcd.c -+++ b/drivers/ufs/core/ufshcd.c -@@ -5451,7 +5451,6 @@ void ufshcd_compl_one_cqe(struct ufs_hba *hba, int task_tag, - lrbp->command_type == UTP_CMD_TYPE_UFS_STORAGE) { - if (hba->dev_cmd.complete) { - hba->dev_cmd.cqe = cqe; -- ufshcd_add_command_trace(hba, task_tag, UFS_DEV_COMP); - complete(hba->dev_cmd.complete); - ufshcd_clk_scaling_update_busy(hba); - } --- -2.39.2 - diff --git a/queue-6.4/scsi-ufs-declare-ufshcd_-hold-release-once.patch b/queue-6.4/scsi-ufs-declare-ufshcd_-hold-release-once.patch deleted file mode 100644 index 344851cad4d..00000000000 --- a/queue-6.4/scsi-ufs-declare-ufshcd_-hold-release-once.patch +++ /dev/null @@ -1,41 +0,0 @@ -From b9aecd430d728635c360954106046417a8738a70 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Mon, 29 May 2023 13:26:39 -0700 -Subject: scsi: ufs: Declare ufshcd_{hold,release}() once - -From: Bart Van Assche - -[ Upstream commit 4b68b7f9c46d90c541d39c8b397a86ac0ca4c765 ] - -ufshcd_hold() and ufshcd_release are declared twice: once in -drivers/ufs/core/ufshcd-priv.h and a second time in include/ufs/ufshcd.h. -Remove the declarations from ufshcd-priv.h. - -Fixes: dd11376b9f1b ("scsi: ufs: Split the drivers/scsi/ufs directory") -Signed-off-by: Bart Van Assche -Link: https://lore.kernel.org/r/20230529202640.11883-5-bvanassche@acm.org -Reviewed-by: Adrian Hunter -Reviewed-by: Keoseong Park -Signed-off-by: Martin K. Petersen -Signed-off-by: Sasha Levin ---- - drivers/ufs/core/ufshcd-priv.h | 3 --- - 1 file changed, 3 deletions(-) - -diff --git a/drivers/ufs/core/ufshcd-priv.h b/drivers/ufs/core/ufshcd-priv.h -index d53b93c21a0c6..8f58c21693985 100644 ---- a/drivers/ufs/core/ufshcd-priv.h -+++ b/drivers/ufs/core/ufshcd-priv.h -@@ -84,9 +84,6 @@ unsigned long ufshcd_mcq_poll_cqe_lock(struct ufs_hba *hba, - int ufshcd_read_string_desc(struct ufs_hba *hba, u8 desc_index, - u8 **buf, bool ascii); - --int ufshcd_hold(struct ufs_hba *hba, bool async); --void ufshcd_release(struct ufs_hba *hba); -- - int ufshcd_send_uic_cmd(struct ufs_hba *hba, struct uic_command *uic_cmd); - - int ufshcd_exec_raw_upiu_cmd(struct ufs_hba *hba, --- -2.39.2 - diff --git a/queue-6.4/sctp-add-bpf_bypass_getsockopt-proto-callback.patch b/queue-6.4/sctp-add-bpf_bypass_getsockopt-proto-callback.patch deleted file mode 100644 index 2d3186eb4cf..00000000000 --- a/queue-6.4/sctp-add-bpf_bypass_getsockopt-proto-callback.patch +++ /dev/null @@ -1,93 +0,0 @@ -From a296ced5f73f60d3d57225bb5d3d2e4e8e997bc1 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Thu, 11 May 2023 15:25:06 +0200 -Subject: sctp: add bpf_bypass_getsockopt proto callback - -From: Alexander Mikhalitsyn - -[ Upstream commit 2598619e012cee5273a2821441b9a051ad931249 ] - -Implement ->bpf_bypass_getsockopt proto callback and filter out -SCTP_SOCKOPT_PEELOFF, SCTP_SOCKOPT_PEELOFF_FLAGS and SCTP_SOCKOPT_CONNECTX3 -socket options from running eBPF hook on them. - -SCTP_SOCKOPT_PEELOFF and SCTP_SOCKOPT_PEELOFF_FLAGS options do fd_install(), -and if BPF_CGROUP_RUN_PROG_GETSOCKOPT hook returns an error after success of -the original handler sctp_getsockopt(...), userspace will receive an error -from getsockopt syscall and will be not aware that fd was successfully -installed into a fdtable. - -As pointed by Marcelo Ricardo Leitner it seems reasonable to skip -bpf getsockopt hook for SCTP_SOCKOPT_CONNECTX3 sockopt too. -Because internaly, it triggers connect() and if error is masked -then userspace will be confused. - -This patch was born as a result of discussion around a new SCM_PIDFD interface: -https://lore.kernel.org/all/20230413133355.350571-3-aleksandr.mikhalitsyn@canonical.com/ - -Fixes: 0d01da6afc54 ("bpf: implement getsockopt and setsockopt hooks") -Cc: Daniel Borkmann -Cc: Christian Brauner -Cc: Stanislav Fomichev -Cc: Neil Horman -Cc: Marcelo Ricardo Leitner -Cc: Xin Long -Cc: linux-sctp@vger.kernel.org -Cc: linux-kernel@vger.kernel.org -Cc: netdev@vger.kernel.org -Suggested-by: Stanislav Fomichev -Acked-by: Stanislav Fomichev -Signed-off-by: Alexander Mikhalitsyn -Acked-by: Xin Long -Signed-off-by: David S. Miller -Signed-off-by: Sasha Levin ---- - net/sctp/socket.c | 18 ++++++++++++++++++ - 1 file changed, 18 insertions(+) - -diff --git a/net/sctp/socket.c b/net/sctp/socket.c -index cda8c2874691d..a68e1d541b128 100644 ---- a/net/sctp/socket.c -+++ b/net/sctp/socket.c -@@ -8281,6 +8281,22 @@ static int sctp_getsockopt(struct sock *sk, int level, int optname, - return retval; - } - -+static bool sctp_bpf_bypass_getsockopt(int level, int optname) -+{ -+ if (level == SOL_SCTP) { -+ switch (optname) { -+ case SCTP_SOCKOPT_PEELOFF: -+ case SCTP_SOCKOPT_PEELOFF_FLAGS: -+ case SCTP_SOCKOPT_CONNECTX3: -+ return true; -+ default: -+ return false; -+ } -+ } -+ -+ return false; -+} -+ - static int sctp_hash(struct sock *sk) - { - /* STUB */ -@@ -9650,6 +9666,7 @@ struct proto sctp_prot = { - .shutdown = sctp_shutdown, - .setsockopt = sctp_setsockopt, - .getsockopt = sctp_getsockopt, -+ .bpf_bypass_getsockopt = sctp_bpf_bypass_getsockopt, - .sendmsg = sctp_sendmsg, - .recvmsg = sctp_recvmsg, - .bind = sctp_bind, -@@ -9705,6 +9722,7 @@ struct proto sctpv6_prot = { - .shutdown = sctp_shutdown, - .setsockopt = sctp_setsockopt, - .getsockopt = sctp_getsockopt, -+ .bpf_bypass_getsockopt = sctp_bpf_bypass_getsockopt, - .sendmsg = sctp_sendmsg, - .recvmsg = sctp_recvmsg, - .bind = sctp_bind, --- -2.39.2 - diff --git a/queue-6.4/selftests-bpf-do-not-use-sign-file-as-testcase.patch b/queue-6.4/selftests-bpf-do-not-use-sign-file-as-testcase.patch deleted file mode 100644 index 9eeb5511e1d..00000000000 --- a/queue-6.4/selftests-bpf-do-not-use-sign-file-as-testcase.patch +++ /dev/null @@ -1,52 +0,0 @@ -From d55ec8be908a9c9fce45eb1ce26af32f202991ba Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Wed, 17 May 2023 11:49:46 +0200 -Subject: selftests/bpf: Do not use sign-file as testcase - -From: Alexey Gladkov - -[ Upstream commit f04a32b2c5b539e3c097cb5c7c1df12a8f4a0cf0 ] - -The sign-file utility (from scripts/) is used in prog_tests/verify_pkcs7_sig.c, -but the utility should not be called as a test. Executing this utility produces -the following error: - - selftests: /linux/tools/testing/selftests/bpf: urandom_read - ok 16 selftests: /linux/tools/testing/selftests/bpf: urandom_read - - selftests: /linux/tools/testing/selftests/bpf: sign-file - not ok 17 selftests: /linux/tools/testing/selftests/bpf: sign-file # exit=2 - -Also, urandom_read is mistakenly used as a test. It does not lead to an error, -but should be moved over to TEST_GEN_FILES as well. The empty TEST_CUSTOM_PROGS -can then be removed. - -Fixes: fc97590668ae ("selftests/bpf: Add test for bpf_verify_pkcs7_signature() kfunc") -Signed-off-by: Alexey Gladkov -Signed-off-by: Daniel Borkmann -Reviewed-by: Roberto Sassu -Acked-by: Stanislav Fomichev -Link: https://lore.kernel.org/bpf/ZEuWFk3QyML9y5QQ@example.org -Link: https://lore.kernel.org/bpf/88e3ab23029d726a2703adcf6af8356f7a2d3483.1684316821.git.legion@kernel.org -Signed-off-by: Sasha Levin ---- - tools/testing/selftests/bpf/Makefile | 3 +-- - 1 file changed, 1 insertion(+), 2 deletions(-) - -diff --git a/tools/testing/selftests/bpf/Makefile b/tools/testing/selftests/bpf/Makefile -index 28d2c77262bed..538df8fb8c42b 100644 ---- a/tools/testing/selftests/bpf/Makefile -+++ b/tools/testing/selftests/bpf/Makefile -@@ -88,8 +88,7 @@ TEST_GEN_PROGS_EXTENDED = test_sock_addr test_skb_cgroup_id_user \ - xskxceiver xdp_redirect_multi xdp_synproxy veristat xdp_hw_metadata \ - xdp_features - --TEST_CUSTOM_PROGS = $(OUTPUT)/urandom_read $(OUTPUT)/sign-file --TEST_GEN_FILES += liburandom_read.so -+TEST_GEN_FILES += liburandom_read.so urandom_read sign-file - - # Emit succinct information message describing current building step - # $1 - generic step name (e.g., CC, LINK, etc); --- -2.39.2 - diff --git a/queue-6.4/selftests-bpf-fix-check_mtu-using-wrong-variable-typ.patch b/queue-6.4/selftests-bpf-fix-check_mtu-using-wrong-variable-typ.patch deleted file mode 100644 index cff7c9fb60c..00000000000 --- a/queue-6.4/selftests-bpf-fix-check_mtu-using-wrong-variable-typ.patch +++ /dev/null @@ -1,42 +0,0 @@ -From e5d661c3a6d78581d856b42b62455eec7d9293cb Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Tue, 6 Jun 2023 13:30:47 +0200 -Subject: selftests/bpf: Fix check_mtu using wrong variable type - -From: Jesper Dangaard Brouer - -[ Upstream commit 095641817e1bf6aa2560e025e47575188ee3edaf ] - -Dan Carpenter found via Smatch static checker, that unsigned 'mtu_lo' is -never less than zero. - -Variable mtu_lo should have been an 'int', because read_mtu_device_lo() -uses minus as error indications. - -Fixes: b62eba563229 ("selftests/bpf: Tests using bpf_check_mtu BPF-helper") -Reported-by: Dan Carpenter -Signed-off-by: Jesper Dangaard Brouer -Signed-off-by: Daniel Borkmann -Reviewed-by: Simon Horman -Link: https://lore.kernel.org/bpf/168605104733.3636467.17945947801753092590.stgit@firesoul -Signed-off-by: Sasha Levin ---- - tools/testing/selftests/bpf/prog_tests/check_mtu.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/tools/testing/selftests/bpf/prog_tests/check_mtu.c b/tools/testing/selftests/bpf/prog_tests/check_mtu.c -index 5338d2ea04603..2a9a30650350e 100644 ---- a/tools/testing/selftests/bpf/prog_tests/check_mtu.c -+++ b/tools/testing/selftests/bpf/prog_tests/check_mtu.c -@@ -183,7 +183,7 @@ static void test_check_mtu_tc(__u32 mtu, __u32 ifindex) - - void serial_test_check_mtu(void) - { -- __u32 mtu_lo; -+ int mtu_lo; - - if (test__start_subtest("bpf_check_mtu XDP-attach")) - test_check_mtu_xdp_attach(); --- -2.39.2 - diff --git a/queue-6.4/selftests-bpf-fix-invalid-pointer-check-in-get_xlate.patch b/queue-6.4/selftests-bpf-fix-invalid-pointer-check-in-get_xlate.patch deleted file mode 100644 index d72ad25938f..00000000000 --- a/queue-6.4/selftests-bpf-fix-invalid-pointer-check-in-get_xlate.patch +++ /dev/null @@ -1,113 +0,0 @@ -From e22c5c9cc0e2fa5260a0cced26490379b687bbd5 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Sat, 10 Jun 2023 01:16:37 +0300 -Subject: selftests/bpf: Fix invalid pointer check in get_xlated_program() - -From: Eduard Zingerman - -[ Upstream commit b23ed4d74c4d583b5f621ee4c776699442833554 ] - -Dan Carpenter reported invalid check for calloc() result in -test_verifier.c:get_xlated_program(): - - ./tools/testing/selftests/bpf/test_verifier.c:1365 get_xlated_program() - warn: variable dereferenced before check 'buf' (see line 1364) - - ./tools/testing/selftests/bpf/test_verifier.c - 1363 *cnt = xlated_prog_len / buf_element_size; - 1364 *buf = calloc(*cnt, buf_element_size); - 1365 if (!buf) { - - This should be if (!*buf) { - - 1366 perror("can't allocate xlated program buffer"); - 1367 return -ENOMEM; - -This commit refactors the get_xlated_program() to avoid using double -pointer type. - -Fixes: 933ff53191eb ("selftests/bpf: specify expected instructions in test_verifier tests") -Reported-by: Dan Carpenter -Signed-off-by: Eduard Zingerman -Signed-off-by: Daniel Borkmann -Closes: https://lore.kernel.org/bpf/ZH7u0hEGVB4MjGZq@moroto/ -Link: https://lore.kernel.org/bpf/20230609221637.2631800-1-eddyz87@gmail.com -Signed-off-by: Sasha Levin ---- - tools/testing/selftests/bpf/test_verifier.c | 24 +++++++++++---------- - 1 file changed, 13 insertions(+), 11 deletions(-) - -diff --git a/tools/testing/selftests/bpf/test_verifier.c b/tools/testing/selftests/bpf/test_verifier.c -index e4657c5bc3f12..4683ff84044d6 100644 ---- a/tools/testing/selftests/bpf/test_verifier.c -+++ b/tools/testing/selftests/bpf/test_verifier.c -@@ -1227,45 +1227,46 @@ static bool cmp_str_seq(const char *log, const char *exp) - return true; - } - --static int get_xlated_program(int fd_prog, struct bpf_insn **buf, int *cnt) -+static struct bpf_insn *get_xlated_program(int fd_prog, int *cnt) - { -+ __u32 buf_element_size = sizeof(struct bpf_insn); - struct bpf_prog_info info = {}; - __u32 info_len = sizeof(info); - __u32 xlated_prog_len; -- __u32 buf_element_size = sizeof(struct bpf_insn); -+ struct bpf_insn *buf; - - if (bpf_prog_get_info_by_fd(fd_prog, &info, &info_len)) { - perror("bpf_prog_get_info_by_fd failed"); -- return -1; -+ return NULL; - } - - xlated_prog_len = info.xlated_prog_len; - if (xlated_prog_len % buf_element_size) { - printf("Program length %d is not multiple of %d\n", - xlated_prog_len, buf_element_size); -- return -1; -+ return NULL; - } - - *cnt = xlated_prog_len / buf_element_size; -- *buf = calloc(*cnt, buf_element_size); -+ buf = calloc(*cnt, buf_element_size); - if (!buf) { - perror("can't allocate xlated program buffer"); -- return -ENOMEM; -+ return NULL; - } - - bzero(&info, sizeof(info)); - info.xlated_prog_len = xlated_prog_len; -- info.xlated_prog_insns = (__u64)(unsigned long)*buf; -+ info.xlated_prog_insns = (__u64)(unsigned long)buf; - if (bpf_prog_get_info_by_fd(fd_prog, &info, &info_len)) { - perror("second bpf_prog_get_info_by_fd failed"); - goto out_free_buf; - } - -- return 0; -+ return buf; - - out_free_buf: -- free(*buf); -- return -1; -+ free(buf); -+ return NULL; - } - - static bool is_null_insn(struct bpf_insn *insn) -@@ -1398,7 +1399,8 @@ static bool check_xlated_program(struct bpf_test *test, int fd_prog) - if (!check_expected && !check_unexpected) - goto out; - -- if (get_xlated_program(fd_prog, &buf, &cnt)) { -+ buf = get_xlated_program(fd_prog, &cnt); -+ if (!buf) { - printf("FAIL: can't get xlated program\n"); - result = false; - goto out; --- -2.39.2 - diff --git a/queue-6.4/selftests-cgroup-fix-unexpected-failure-on-test_memc.patch b/queue-6.4/selftests-cgroup-fix-unexpected-failure-on-test_memc.patch deleted file mode 100644 index 14e9ea5110c..00000000000 --- a/queue-6.4/selftests-cgroup-fix-unexpected-failure-on-test_memc.patch +++ /dev/null @@ -1,53 +0,0 @@ -From f0e5c36e8af3183b84a69bb024b4a21bae675ba7 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Mon, 22 May 2023 09:52:33 +0000 -Subject: selftests: cgroup: fix unexpected failure on test_memcg_low - -From: Haifeng Xu - -[ Upstream commit 19ab365762c6cc39dfdee9e13ab0d12fe4b5540d ] - -Since commit f079a020ba95 ("selftests: memcg: factor out common parts of -memory.{low,min} tests"), the value used in second alloc_anon has changed -from 148M to 170M. Because memory.low allows reclaiming page cache in -child cgroups, so the memory.current is close to 30M instead of 50M. -Therefore, adjust the expected value of parent cgroup. - -Link: https://lkml.kernel.org/r/20230522095233.4246-2-haifeng.xu@shopee.com -Fixes: f079a020ba95 ("selftests: memcg: factor out common parts of memory.{low,min} tests") -Signed-off-by: Haifeng Xu -Cc: Johannes Weiner -Cc: Michal Hocko -Cc: Roman Gushchin -Cc: Shakeel Butt -Signed-off-by: Andrew Morton -Signed-off-by: Sasha Levin ---- - tools/testing/selftests/cgroup/test_memcontrol.c | 4 +++- - 1 file changed, 3 insertions(+), 1 deletion(-) - -diff --git a/tools/testing/selftests/cgroup/test_memcontrol.c b/tools/testing/selftests/cgroup/test_memcontrol.c -index f4f7c0aef702b..a2a90f4bfe9fe 100644 ---- a/tools/testing/selftests/cgroup/test_memcontrol.c -+++ b/tools/testing/selftests/cgroup/test_memcontrol.c -@@ -292,6 +292,7 @@ static int test_memcg_protection(const char *root, bool min) - char *children[4] = {NULL}; - const char *attribute = min ? "memory.min" : "memory.low"; - long c[4]; -+ long current; - int i, attempts; - int fd; - -@@ -400,7 +401,8 @@ static int test_memcg_protection(const char *root, bool min) - goto cleanup; - } - -- if (!values_close(cg_read_long(parent[1], "memory.current"), MB(50), 3)) -+ current = min ? MB(50) : MB(30); -+ if (!values_close(cg_read_long(parent[1], "memory.current"), current, 3)) - goto cleanup; - - if (!reclaim_until(children[0], MB(10))) --- -2.39.2 - diff --git a/queue-6.4/selftests-ftace-fix-ktap-output-ordering.patch b/queue-6.4/selftests-ftace-fix-ktap-output-ordering.patch deleted file mode 100644 index 57ea20ba2fc..00000000000 --- a/queue-6.4/selftests-ftace-fix-ktap-output-ordering.patch +++ /dev/null @@ -1,39 +0,0 @@ -From 4731c8137c43992b9377a3cadf8c4bab4ca59285 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Sat, 10 Jun 2023 15:27:55 +0100 -Subject: selftests/ftace: Fix KTAP output ordering - -From: Mark Brown - -[ Upstream commit 8cd0d8633e2de4e6dd9ddae7980432e726220fdb ] - -The KTAP parser I used to test the KTAP output for ftracetest was overly -robust and did not notice that the test number and pass/fail result were -reversed. Fix this. - -Fixes: dbcf76390eb9 ("selftests/ftrace: Improve integration with kselftest runner") -Signed-off-by: Mark Brown -Acked-by: Masami Hiramatsu (Google) -Acked-by: Steven Rostedt (Google) -Signed-off-by: Shuah Khan -Signed-off-by: Sasha Levin ---- - tools/testing/selftests/ftrace/ftracetest | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/tools/testing/selftests/ftrace/ftracetest b/tools/testing/selftests/ftrace/ftracetest -index 2506621e75dfb..cb5f18c06593d 100755 ---- a/tools/testing/selftests/ftrace/ftracetest -+++ b/tools/testing/selftests/ftrace/ftracetest -@@ -301,7 +301,7 @@ ktaptest() { # result comment - comment="# $comment" - fi - -- echo $CASENO $result $INSTANCE$CASENAME $comment -+ echo $result $CASENO $INSTANCE$CASENAME $comment - } - - eval_result() { # sigval --- -2.39.2 - diff --git a/queue-6.4/selftests-rtnetlink-remove-netdevsim-device-after-ip.patch b/queue-6.4/selftests-rtnetlink-remove-netdevsim-device-after-ip.patch deleted file mode 100644 index 1bb931dd464..00000000000 --- a/queue-6.4/selftests-rtnetlink-remove-netdevsim-device-after-ip.patch +++ /dev/null @@ -1,40 +0,0 @@ -From 9eeedb32009113c33462050a7a13bb22bb40f282 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Thu, 22 Jun 2023 23:03:34 +0200 -Subject: selftests: rtnetlink: remove netdevsim device after ipsec offload - test - -From: Sabrina Dubroca - -[ Upstream commit 5f789f103671fec3733ebe756e56adf15c90c21d ] - -On systems where netdevsim is built-in or loaded before the test -starts, kci_test_ipsec_offload doesn't remove the netdevsim device it -created during the test. - -Fixes: e05b2d141fef ("netdevsim: move netdev creation/destruction to dev probe") -Signed-off-by: Sabrina Dubroca -Reviewed-by: Simon Horman -Reviewed-by: Jiri Pirko -Link: https://lore.kernel.org/r/e1cb94f4f82f4eca4a444feec4488a1323396357.1687466906.git.sd@queasysnail.net -Signed-off-by: Jakub Kicinski -Signed-off-by: Sasha Levin ---- - tools/testing/selftests/net/rtnetlink.sh | 1 + - 1 file changed, 1 insertion(+) - -diff --git a/tools/testing/selftests/net/rtnetlink.sh b/tools/testing/selftests/net/rtnetlink.sh -index 383ac6fc037d0..ba286d680fd9a 100755 ---- a/tools/testing/selftests/net/rtnetlink.sh -+++ b/tools/testing/selftests/net/rtnetlink.sh -@@ -860,6 +860,7 @@ EOF - fi - - # clean up any leftovers -+ echo 0 > /sys/bus/netdevsim/del_device - $probed && rmmod netdevsim - - if [ $ret -ne 0 ]; then --- -2.39.2 - diff --git a/queue-6.4/series b/queue-6.4/series deleted file mode 100644 index d06298f3d0a..00000000000 --- a/queue-6.4/series +++ /dev/null @@ -1,524 +0,0 @@ -fs-pipe-reveal-missing-function-protoypes.patch -s390-kasan-fix-insecure-w-x-mapping-warning.patch -blk-mq-don-t-queue-plugged-passthrough-requests-into.patch -block-fix-the-type-of-the-second-bdev_op_is_zoned_wr.patch -block-rq_qos-protect-rq_qos-apis-with-a-new-lock.patch -splice-fix-filemap_splice_read-to-use-the-correct-in.patch -erofs-kill-hooked-chains-to-avoid-loops-on-deduplica.patch -x86-resctrl-only-show-tasks-pid-in-current-pid-names.patch -fsverity-use-shash-api-instead-of-ahash-api.patch -fsverity-don-t-use-bio_first_page_all-in-fsverity_ve.patch -blk-iocost-use-spin_lock_irqsave-in-adjust_inuse_and.patch -x86-sev-fix-calculation-of-end-address-based-on-numb.patch -blk-cgroup-reinit-blkg_iostat_set-after-clearing-in-.patch -virt-sevguest-add-config_crypto-dependency.patch -blk-mq-fix-potential-io-hang-by-wrong-wake_batch.patch -lockd-drop-inappropriate-svc_get-from-locked_get.patch -nvme-core-fix-memory-leak-in-dhchap_secret_store.patch -nvme-core-fix-memory-leak-in-dhchap_ctrl_secret.patch -nvme-core-add-missing-fault-injection-cleanup.patch -nvme-core-fix-dev_pm_qos-memleak.patch -md-raid10-check-slab-out-of-bounds-in-md_bitmap_get_.patch -md-raid10-fix-overflow-of-md-safe_mode_delay.patch -md-raid10-fix-wrong-setting-of-max_corr_read_errors.patch -md-raid10-fix-null-ptr-deref-of-mreplace-in-raid10_s.patch -md-raid10-fix-io-loss-while-replacement-replace-rdev.patch -md-raid1-10-factor-out-a-helper-to-add-bio-to-plug.patch -md-raid1-10-factor-out-a-helper-to-submit-normal-wri.patch -md-raid1-10-submit-write-io-directly-if-bitmap-is-no.patch -block-fix-blktrace-debugfs-entries-leakage.patch -irqchip-loongson-eiointc-fix-irq-affinity-setting-du.patch -splice-don-t-call-file_accessed-in-copy_splice_read.patch -irqchip-stm32-exti-fix-warning-on-initialized-field-.patch -irqchip-jcore-aic-fix-missing-allocation-of-irq-desc.patch -svcrdma-prevent-page-release-when-nothing-was-receiv.patch -erofs-fix-compact-4b-support-for-16k-block-size.patch -posix-timers-prevent-rt-livelock-in-itimer_delete.patch -tick-rcu-fix-bogus-ratelimit-condition.patch -tracing-timer-add-missing-hrtimer-modes-to-decode_hr.patch -btrfs-always-read-the-entire-extent_buffer.patch -btrfs-don-t-use-btrfs_bio_ctrl-for-extent-buffer-rea.patch -btrfs-return-bool-from-lock_extent_buffer_for_io.patch -btrfs-submit-a-writeback-bio-per-extent_buffer.patch -btrfs-fix-range_end-calculation-in-extent_write_lock.patch -btrfs-don-t-fail-writeback-when-allocating-the-compr.patch -btrfs-only-call-__extent_writepage_io-from-extent_wr.patch -btrfs-don-t-treat-zoned-writeback-as-being-from-an-a.patch -btrfs-fix-file_offset-for-req_btrfs_one_ordered-bios.patch -blk-mq-don-t-insert-passthrough-request-into-sw-queu.patch -clocksource-drivers-cadence-ttc-fix-memory-leak-in-t.patch -pm-domains-fix-integer-overflow-issues-in-genpd_pars.patch -perf-arm-cmn-fix-dtc-reset.patch -drivers-perf-apple_m1-force-63bit-counters-for-m2-cp.patch -x86-mm-allow-guest.enc_status_change_prepare-to-fail.patch -x86-tdx-fix-race-between-set_memory_encrypted-and-lo.patch -drivers-perf-hisi-don-t-migrate-perf-to-the-cpu-goin.patch -perf-arm_cspmu-set-irq-affinitiy-only-if-overflow-in.patch -perf-arm_cspmu-fix-event-attribute-type.patch -apei-ghes-correctly-return-null-for-ghes_get_devices.patch -powercap-rapl-fix-invalid-initialization-for-pl4_sup.patch -powercap-rapl-fix-config_iosf_mbi-dependency.patch -pm-domains-move-the-verification-of-in-params-from-g.patch -arm-9303-1-kprobes-avoid-missing-declaration-warning.patch -cpufreq-intel_pstate-fix-energy_performance_preferen.patch -thermal-drivers-qcom-tsens-v0_1-add-support-for-msm8.patch -thermal-drivers-qcom-tsens-v0_1-fix-mdm9607-slope-va.patch -thermal-drivers-qcom-tsens-v0_1-add-mdm9607-correcti.patch -thermal-drivers-sun8i-fix-some-error-handling-paths-.patch -thermal-drivers-qoriq-only-enable-supported-sensors.patch -kunit-tool-undo-type-subscripts-for-subprocess.popen.patch -rcu-make-rcu_cpu_starting-rely-on-interrupts-being-d.patch -rcu-tasks-stop-rcu_tasks_invoke_cbs-from-using-never.patch -rcutorture-correct-name-of-use_softirq-module-parame.patch -rcu-rcuscale-move-rcu_scale_-after-kfree_scale_clean.patch -rcu-rcuscale-stop-kfree_scale_thread-thread-s-after-.patch -x86-mtrr-remove-physical-address-size-calculation.patch -x86-mtrr-support-setting-mtrr-state-for-software-def.patch -x86-hyperv-set-mtrr-state-when-running-as-sev-snp-hy.patch -x86-mtrr-replace-size_or_mask-and-size_and_mask-with.patch -x86-xen-set-mtrr-state-when-running-as-xen-pv-initia.patch -tools-nolibc-ensure-fast64-integer-types-have-64-bit.patch -kselftest-vdso-fix-accumulation-of-uninitialized-ret.patch -selftests-ftace-fix-ktap-output-ordering.patch -perf-ibs-fix-interface-via-core-pmu-events.patch -x86-mm-fix-__swp_entry_to_pte-for-xen-pv-guests.patch -reiserfs-initialize-sec-length-in-reiserfs_security_.patch -locking-atomic-arm-fix-sync-ops.patch -evm-complete-description-of-evm_inode_setattr.patch -evm-fix-build-warnings.patch -ima-fix-build-warnings.patch -pstore-ram-add-check-for-kstrdup.patch -sched-core-avoid-multiple-calling-update_rq_clock-in.patch -igc-enable-and-fix-rx-hash-usage-by-netstack.patch -wifi-ath9k-fix-ar9003-mac-hardware-hang-check-regist.patch -wifi-ath9k-avoid-referencing-uninit-memory-in-ath9k_.patch -libbpf-btf_dump_type_data_check_overflow-needs-to-co.patch -bpf-encapsulate-precision-backtracking-bookkeeping.patch -bpf-improve-precision-backtrack-logging.patch -bpf-maintain-bitmasks-across-all-active-frames-in-__.patch -bpf-fix-propagate_precision-logic-for-inner-frames.patch -wifi-rtw89-fix-rtw89_read_chip_ver-for-rtl8852b-and-.patch -samples-bpf-fix-buffer-overflow-in-tcp_basertt.patch -spi-spi-geni-qcom-correct-cs_toggle-bit-in-spi_trans.patch -wifi-wilc1000-fix-for-absent-rsn-capabilities-wfa-te.patch -wifi-rtw88-unlock-on-error-path-in-rtw_ops_add_inter.patch -wifi-mwifiex-fix-the-size-of-a-memory-allocation-in-.patch -net-handshake-unpin-sock-file-if-a-handshake-is-canc.patch -sctp-add-bpf_bypass_getsockopt-proto-callback.patch -sfc-release-encap-match-in-efx_tc_flow_free.patch -libbpf-fix-offsetof-and-container_of-to-work-with-co.patch -bpf-don-t-efault-for-g-s-setsockopt-with-wrong-optle.patch -spi-dw-round-of-n_bytes-to-power-of-2.patch -nfc-llcp-fix-possible-use-of-uninitialized-variable-.patch -bpftool-jit-limited-misreported-as-negative-value-on.patch -bpf-remove-bpf-trampoline-selector.patch -bpf-fix-memleak-due-to-fentry-attach-failure.patch -selftests-bpf-do-not-use-sign-file-as-testcase.patch -regulator-rk808-fix-asynchronous-probing.patch -regulator-core-fix-more-error-checking-for-debugfs_c.patch -regulator-core-streamline-debugfs-operations.patch -wifi-orinoco-fix-an-error-handling-path-in-spectrum_.patch -wifi-orinoco-fix-an-error-handling-path-in-orinoco_c.patch -wifi-atmel-fix-an-error-handling-path-in-atmel_probe.patch -wifi-wl3501_cs-fix-an-error-handling-path-in-wl3501_.patch -wifi-ray_cs-fix-an-error-handling-path-in-ray_probe.patch -wifi-ath9k-don-t-allow-to-overwrite-endpoint0-attrib.patch -wifi-rtw88-usb-silence-log-flooding-error-message.patch -samples-bpf-xdp1-and-xdp2-reduce-xdpbufsize-to-60.patch -wifi-ath10k-trigger-sta-disconnect-after-reconfig-co.patch -bpf-remove-anonymous-union-in-bpf_kfunc_call_arg_met.patch -bpf-set-kptr_struct_meta-for-node-param-to-list-and-.patch -bpf-fix-__bpf_-list-rbtree-_add-s-beginning-of-node-.patch -bpf-make-bpf_refcount_acquire-fallible-for-non-ownin.patch -tools-resolve_btfids-fix-setting-hostcflags.patch -wifi-iwlwifi-mvm-send-time-sync-only-if-needed.patch -wifi-mac80211-recalc-min-chandef-for-new-sta-links.patch -selftests-bpf-fix-check_mtu-using-wrong-variable-typ.patch -soc-qcom-geni-se-add-interfaces-geni_se_tx_init_dma-.patch -spi-spi-geni-qcom-do-not-do-dma-map-unmap-inside-dri.patch -wifi-rsi-do-not-configure-wowlan-in-shutdown-hook-if.patch -wifi-rsi-do-not-set-mmc_pm_keep_power-in-shutdown.patch -ice-handle-extts-in-the-miscellaneous-interrupt-thre.patch -selftests-cgroup-fix-unexpected-failure-on-test_memc.patch -watchdog-perf-define-dummy-watchdog_update_hrtimer_t.patch -watchdog-perf-more-properly-prevent-false-positives-.patch -kexec-fix-a-memory-leak-in-crash_shrink_memory.patch -mmc-mediatek-avoid-ugly-error-message-when-sdio-wake.patch -memstick-r592-make-memstick_debug_get_tpc_name-stati.patch -selftests-bpf-fix-invalid-pointer-check-in-get_xlate.patch -wifi-ath9k-fix-possible-stall-on-ath9k_txq_list_has_.patch -bpf-use-scalar-ids-in-mark_chain_precision.patch -bpf-verify-scalar-ids-mapping-in-regsafe-using-check.patch -wifi-mac80211-fix-permissions-for-valid_links-debugf.patch -wifi-iwlwifi-mvm-handle-return-value-for-iwl_mvm_sta.patch -wifi-iwlwifi-fw-print-pc-register-value-instead-of-a.patch -rtnetlink-extend-rtext_filter_skip_stats-to-ifla_vf_.patch -wifi-ath11k-add-missing-check-for-ioremap.patch -wifi-ath11k-add-missing-ops-config-for-ipq5018-in-at.patch -wifi-ath11k-restart-firmware-after-cold-boot-calibra.patch -wifi-ath11k-add-missing-hw_ops-get_ring_selector-for.patch -wifi-mac80211-add-helpers-to-access-sband-iftype-dat.patch -wifi-iwlwifi-mvm-add-support-for-extra-eht-ltf.patch -wifi-iwlwifi-mvm-correctly-access-he-eht-sband-capa.patch -wifi-iwlwifi-pull-from-txqs-with-softirqs-disabled.patch -wifi-iwlwifi-pcie-fix-null-pointer-dereference-in-iw.patch -wifi-mac80211-remove-missing-iftype-sband-data-eht-c.patch -wifi-cfg80211-rewrite-merging-of-inherited-elements.patch -wifi-cfg80211-drop-incorrect-nontransmitted-bss-upda.patch -wifi-cfg80211-fix-regulatory-disconnect-with-ocb-nan.patch -wifi-ieee80211-fix-the-common-size-calculation-for-r.patch -mm-move-mm_count-into-its-own-cache-line.patch -watchdog-remove-watchdog_default.patch -watchdog-hardlockup-change-watchdog_nmi_enable-to-vo.patch -watchdog-hardlockup-move-perf-hardlockup-checking-pa.patch -watchdog-hardlockup-rename-some-nmi-watchdog-constan.patch -watchdog-perf-adapt-the-watchdog_perf-interface-for-.patch -watchdog-hardlockup-keep-kernel.nmi_watchdog-sysctl-.patch -mmc-add-mmc_quirk_broken_sd_cache-for-kingston-canva.patch -wifi-iwlwifi-mvm-indicate-hw-decrypt-for-beacon-prot.patch -wifi-iwlwifi-mvm-check-only-affected-links.patch -wifi-ath9k-convert-msecs-to-jiffies-where-needed.patch -bpf-factor-out-socket-lookup-functions-for-the-tc-ho.patch -bpf-call-__bpf_sk_lookup-__bpf_skc_lookup-directly-v.patch -bpf-fix-bpf-socket-lookup-from-tc-xdp-to-respect-soc.patch -can-length-fix-bitstuffing-count.patch -can-kvaser_pciefd-add-function-to-set-skb-hwtstamps.patch -can-kvaser_pciefd-set-hardware-timestamp-on-transmit.patch -igc-fix-race-condition-in-ptp-tx-code.patch -igc-check-if-hardware-tx-timestamping-is-enabled-ear.patch -igc-retrieve-tx-timestamp-during-interrupt-handling.patch -igc-work-around-hw-bug-causing-missing-timestamps.patch -net-stmmac-fix-double-serdes-powerdown.patch -netlink-fix-potential-deadlock-in-netlink_set_err.patch -netlink-do-not-hard-code-device-address-lenth-in-fdb.patch -bonding-do-not-assume-skb-mac_header-is-set.patch -sch_netem-fix-issues-in-netem_change-vs-get_dist_tab.patch -selftests-rtnetlink-remove-netdevsim-device-after-ip.patch -gtp-fix-use-after-free-in-__gtp_encap_destroy.patch -net-axienet-move-reset-before-64-bit-dma-detection.patch -ocfs2-fix-use-of-slab-data-with-sendpage.patch -sfc-fix-crash-when-reading-stats-while-nic-is-resett.patch -net-nfc-fix-use-after-free-caused-by-nfc_llcp_find_l.patch -lib-ts_bm-reset-initial-match-offset-for-every-block.patch -netfilter-conntrack-dccp-copy-entire-header-to-stack.patch -netfilter-nf_conntrack_sip-fix-the-ct_sip_parse_nume.patch -netfilter-nf_tables-unbind-non-anonymous-set-if-rule.patch -netfilter-nf_tables-fix-underflow-in-chain-reference.patch -ipvlan-fix-return-value-of-ipvlan_queue_xmit.patch -net-dsa-avoid-suspicious-rcu-usage-for-synced-vlan-a.patch -netlink-add-__sock_i_ino-for-__netlink_diag_dump.patch -drm-imx-lcdc-fix-a-null-vs-is_err-bug-in-probe.patch -drm-amd-display-unconditionally-print-when-dp-sink-p.patch -drm-amd-display-add-logging-for-display-mall-refresh.patch -drm-amd-display-fix-is_timing_changed-prototype.patch -radeon-avoid-double-free-in-ci_dpm_init.patch -drm-amd-display-explicitly-specify-update-type-per-p.patch -drm-i915-guc-slpc-provide-sysfs-for-efficient-freq.patch -drm-bridge-it6505-move-a-variable-assignment-behind-.patch -input-drv260x-sleep-between-polling-go-bit.patch -input-cyttsp4_core-change-del_timer_sync-to-timer_sh.patch -input-tests-fix-use-after-free-and-refcount-underflo.patch -input-tests-modular-kunit-tests-should-not-depend-on.patch -drm-bridge-ti-sn65dsi83-fix-enable-error-path.patch -drm-bridge-tc358768-always-enable-hs-video-mode.patch -drm-bridge-tc358768-fix-pll-parameters-computation.patch -drm-bridge-tc358768-fix-pll-target-frequency.patch -drm-bridge-tc358768-fix-tclk_zerocnt-computation.patch -drm-bridge-tc358768-add-atomic_get_input_bus_fmts-im.patch -drm-bridge-tc358768-fix-tclk_trailcnt-computation.patch -drm-bridge-tc358768-fix-ths_zerocnt-computation.patch -drm-bridge-tc358768-fix-txtagocnt-computation.patch -drm-bridge-tc358768-fix-ths_trailcnt-computation.patch -input-tests-fix-input_test_match_device_id-test.patch -drm-vram-helper-fix-function-names-in-vram-helper-do.patch -arm-dts-bcm5301x-drop-clock-names-from-the-spi-node.patch -arm-dts-meson8b-correct-uart_b-and-uart_c-clock-refe.patch -clk-vc5-fix-.driver_data-content-in-i2c_device_id.patch -clk-vc7-fix-.driver_data-content-in-i2c_device_id.patch -clk-rs9-fix-.driver_data-content-in-i2c_device_id.patch -input-adxl34x-do-not-hardcode-interrupt-trigger-type.patch -drm-sun4i_tcon-use-devm_clk_get_enabled-in-sun4i_tco.patch -drm-panel-sharp-ls043t1le01-adjust-mode-settings.patch -driver-soc-xilinx-use-_safe-loop-iterator-to-avoid-a.patch -asoc-dt-bindings-mediatek-mt8188-afe-correct-clock-n.patch -asoc-intel-sof_sdw-remove-sof_sdw_tgl_hdmi-for-meteo.patch -asoc-intel-sof_sdw-start-set-codec-init-function-wit.patch -drm-vkms-isolate-pixel-conversion-functionality.patch -drm-add-fixed-point-helper-to-get-rounded-integer-va.patch -drm-vkms-fix-rgb565-pixel-conversion.patch -arm-dts-stm32-move-ethernet-mac-eeprom-from-som-to-c.patch -bus-ti-sysc-fix-dispc-quirk-masking-bool-variables.patch -arm64-dts-microchip-sparx5-do-not-use-psci-on-refere.patch -drm-bridge-tc358767-switch-to-devm-mipi-dsi-helpers.patch -arm64-dts-qcom-ipq9574-update-the-size-of-gicc-gicv-.patch -clk-imx-scu-use-_safe-list-iterator-to-avoid-a-use-a.patch -hwmon-f71882fg-prevent-possible-division-by-zero.patch -rdma-bnxt_re-disable-kill-tasklet-only-if-it-is-enab.patch -rdma-bnxt_re-fix-to-remove-unnecessary-return-labels.patch -rdma-bnxt_re-use-unique-names-while-registering-inte.patch -rdma-bnxt_re-remove-a-redundant-check-inside-bnxt_re.patch -rdma-bnxt_re-fix-to-remove-an-unnecessary-log.patch -drm-msm-dpu-enable-dspp_2-3-for-lm_2-3-on-sm8450.patch -drm-msm-dsi-don-t-allow-enabling-14nm-vco-with-unpro.patch -drm-msm-dpu-fix-cursor-block-register-bit-offset-in-.patch -drm-msm-dpu-use-v4.0-pcc-dspp-sub-block-in-sc7-12-80.patch -drm-msm-dpu-set-dpu_data_hctl_en-for-in-intf_sc7180_.patch -drm-nouveau-dispnv50-fix-missing-prototypes-warning.patch -iommu-virtio-detach-domain-on-endpoint-release.patch -iommu-virtio-return-size-mapped-for-a-detached-domai.patch -clk-renesas-rzg2l-fix-cpg_sipll5_clk1-register-write.patch -arm-dts-gta04-move-model-property-out-of-pinctrl-nod.patch -arm64-dts-qcom-qrb4210-rb2-fix-cd-gpio-for-sdhc2.patch -drm-bridge-anx7625-prevent-endless-probe-loop.patch -arm-mfd-gpio-fixup-tps65010-regression-on-omap1-osk1.patch -arm-omap1-drop-header-on-ams-delta.patch -arm-omap1-remove-reliance-on-gpio-numbers-from-palmt.patch -arm-omap1-remove-reliance-on-gpio-numbers-from-sx1.patch -input-ads7846-convert-to-use-software-nodes.patch -arm-mmc-convert-old-mmci-omap-to-gpio-descriptors.patch -arm-omap1-fix-up-the-nokia-770-board-device-irqs.patch -arm-omap1-make-serial-wakeup-gpios-use-descriptors.patch -arm-omap1-exorcise-the-legacy-gpio-header.patch -arm-gpio-push-omap2-quirk-down-into-twl4030-driver.patch -arm-omap2-get-usb-hub-reset-gpio-from-descriptor.patch -arm-omap2-rewrite-wlan-quirk-to-use-gpio-descriptors.patch -arm-musb-omap2-remove-global-gpio-numbers-from-tusb6.patch -arm-dts-qcom-msm8974-do-not-use-underscore-in-node-n.patch -arm64-dts-qcom-pm8998-don-t-use-gic_spi-for-spmi-int.patch -arm64-dts-qcom-ipq6018-correct-qrng-unit-address.patch -arm64-dts-qcom-msm8916-correct-camss-unit-address.patch -arm64-dts-qcom-msm8916-correct-mmc-unit-address.patch -arm64-dts-qcom-msm8916-correct-wcnss-unit-address.patch -arm64-dts-qcom-msm8953-correct-iommu-unit-address.patch -arm64-dts-qcom-msm8953-correct-wcnss-unit-address.patch -arm64-dts-qcom-msm8976-correct-mmc-unit-address.patch -arm64-dts-qcom-msm8994-correct-spmi-unit-address.patch -arm64-dts-qcom-msm8996-correct-camss-unit-address.patch -arm64-dts-qcom-sdm630-correct-camss-unit-address.patch -arm64-dts-qcom-sdm845-correct-camss-unit-address.patch -arm64-dts-qcom-sm6115-correct-thermal-sensor-unit-ad.patch -arm64-dts-qcom-sm8350-correct-dma-controller-unit-ad.patch -arm64-dts-qcom-sm8350-correct-pci-phy-unit-address.patch -arm64-dts-qcom-sm8350-correct-usb-phy-unit-address.patch -arm64-dts-qcom-sm8550-correct-crypto-unit-address.patch -arm64-dts-qcom-sm8550-correct-pinctrl-unit-address.patch -arm64-dts-qcom-sdm845-polaris-add-missing-touchscree.patch -arm64-dts-qcom-apq8016-sbc-fix-regulator-constraints.patch -arm64-dts-qcom-apq8016-sbc-fix-1.8v-power-rail-on-ls.patch -drm-bridge-ti-sn65dsi83-fix-enable-disable-flow-to-m.patch -drm-bridge-samsung-dsim-fix-pms-calculator-on-imx8m-.patch -drm-panel-simple-fix-active-size-for-ampire-am-48027.patch -arm-ep93xx-fix-missing-prototype-warnings.patch -arm-omap2-fix-missing-tick_broadcast-prototype.patch -arm64-dts-qcom-pm7250b-add-missing-spmi-vadc-include.patch -arm64-dts-qcom-apq8096-fix-fixed-regulator-name-prop.patch -arm64-dts-mediatek-mt8183-add-mediatek-broken-save-r.patch -arm64-dts-mediatek-mt8192-add-mediatek-broken-save-r.patch -arm64-dts-mediatek-mt8195-add-mediatek-broken-save-r.patch -arm-dts-stm32-shorten-the-av96-hdmi-sound-card-name.patch -memory-brcmstb_dpfe-fix-testing-array-offset-after-u.patch -arm-dts-qcom-apq8074-dragonboard-set-dma-as-remotely.patch -asoc-es8316-increment-max-value-for-alc-capture-targ.patch -asoc-es8316-do-not-set-rate-constraints-for-unsuppor.patch -arm-dts-meson8-correct-uart_b-and-uart_c-clock-refer.patch -soc-fsl-qe-fix-usb.c-build-errors.patch -rdma-irdma-avoid-fortify-string-warning-in-irdma_clr.patch -ib-hfi1-fix-wrong-mmu_node-used-for-user-sdma-packet.patch -rdma-hns-fix-hns_roce_table_get-return-value.patch -arm-dts-iwg20d-q7-common-fix-backlight-pwm-specifier.patch -arm64-dts-renesas-ulcb-kf-remove-flow-control-for-sc.patch -drm-msm-dpu-set-dsc-flush-bit-correctly-at-mdp-ctl-f.patch -drm-msm-dpu-always-clear-every-individual-pending-fl.patch -fbdev-omapfb-lcd_mipid-fix-an-error-handling-path-in.patch -dt-bindings-arm-smmu-fix-sc8280xp-adreno-binding.patch -drm-i915-fix-limited-range-csc-matrix.patch -drm-i915-hide-mkwrite_device_info-better.patch -drm-i915-display-move-display-device-info-to-header-.patch -drm-i915-convert-intel_info-display-to-a-pointer.patch -drm-i915-display-move-display-runtime-info-to-displa.patch -drm-i915-display-make-display-responsible-for-probin.patch -drm-i915-no-10bit-gamma-on-desktop-gen3-parts.patch -arm64-dts-rockchip-assign-es8316-mclk-rate-on-rk3588.patch -arm64-dts-ti-k3-j7200-fix-physical-address-of-pin.patch -input-pm8941-powerkey-fix-debounce-on-gen2-pmics.patch -arm64-dts-rockchip-fix-compatible-for-bluetooth-on-r.patch -arm-dts-stm32-fix-audio-routing-on-stm32mp15xx-dhcom.patch -accel-habanalabs-fix-gaudi2_get_tpc_idle_status-retu.patch -arm-dts-stm32-fix-i2s-endpoint-format-property-for-s.patch -hwmon-gsc-hwmon-fix-fan-pwm-temperature-scaling.patch -hwmon-pmbus-adm1275-fix-problems-with-temperature-mo.patch -arm-dts-bcm5301x-fix-duplex-full-full-duplex.patch -clk-export-clk_hw_forward_rate_request.patch -mips-dts-ci20-fix-act8600-regulator-node-names.patch -drm-amd-display-fix-a-test-calculateprefetchschedule.patch -drm-amd-display-fix-a-test-dml32_rq_dlg_get_rq_reg.patch -drm-amdkfd-fix-potential-deallocation-of-previously-.patch -soc-mediatek-svs-fix-mt8192-gpu-node-name.patch -drm-amd-display-fix-artifacting-on-edp-panels-when-e.patch -drm-radeon-fix-possible-division-by-zero-errors.patch -hid-uclogic-modular-kunit-tests-should-not-depend-on.patch -rdma-rxe-fix-access-checks-in-rxe_check_bind_mw.patch -amdgpu-validate-offset_in_bo-of-drm_amdgpu_gem_va.patch -drm-msm-a6xx-don-t-set-io_pgtable_quirk_arm_outer_wb.patch -drm-msm-a5xx-really-check-for-a510-in-a5xx_gpu_init.patch -rdma-bnxt_re-wraparound-mbox-producer-index.patch -rdma-bnxt_re-avoid-calling-wake_up-threads-from-spin.patch -clk-imx-composite-8m-add-imx8m_divider_determine_rat.patch -clk-imx-clk-imxrt1050-fix-memory-leak-in-imxrt1050_c.patch -clk-imx-clk-imx8mn-fix-memory-leak-in-imx8mn_clocks_.patch -clk-imx93-fix-memory-leak-and-missing-unwind-goto-in.patch -clk-imx-clk-imx8mp-improve-error-handling-in-imx8mp_.patch -clk-mediatek-fix-of_iomap-memory-leak.patch -arm64-dts-qcom-qdu1000-flush-rsc-sleep-wake-votes.patch -arm64-dts-qcom-sdm670-flush-rsc-sleep-wake-votes.patch -arm64-dts-qcom-sdm845-flush-rsc-sleep-wake-votes.patch -arm64-dts-qcom-sm8550-flush-rsc-sleep-wake-votes.patch -arm64-dts-qcom-sm8250-edo-panel-framebuffer-is-2.5k-.patch -arm64-dts-qcom-sm8550-add-missing-interconnect-path-.patch -clk-bcm-rpi-fix-off-by-one-in-raspberrypi_discover_c.patch -clk-clocking-wizard-fix-oops-in-clk_wzrd_register_di.patch -clk-tegra-tegra124-emc-fix-potential-memory-leak.patch -arm64-dts-ti-k3-j721e-beagleboneai64-fix-mailbox-nod.patch -arm64-dts-ti-k3-j784s4-evm-fix-main_i2c0-alias.patch -arm64-dts-ti-k3-j784s4-fix-wakeup-pinmux-range-and-p.patch -arm64-dts-ti-k3-am69-sk-fix-main_i2c0-alias.patch -alsa-ac97-fix-possible-null-dereference-in-snd_ac97_.patch -drm-msm-dpu-do-not-enable-color-management-if-dspps-.patch -drm-msm-dpu-fix-slice_last_group_size-calculation.patch -drm-msm-dsi-remove-incorrect-references-to-slice_cou.patch -drm-msm-dp-drop-aux-devices-together-with-dp-control.patch -drm-msm-dp-free-resources-after-unregistering-them.patch -arm64-dts-mediatek-add-cpufreq-nodes-for-mt8192.patch -arm64-dts-mediatek-mt8192-fix-cpus-capacity-dmips-mh.patch -arm64-dts-mt7986-increase-bl2-partition-on-nand-of-b.patch -drm-amdgpu-fix-memcpy-in-sienna_cichlid_append_power.patch -drm-amdgpu-fix-usage-of-umc-fill-record-in-ras.patch -drm-msm-dpu-drop-unused-poll_timeout_wr_ptr-pingpong.patch -drm-msm-dpu-move-autorefresh-disable-from-cmd-encode.patch -drm-msm-dpu-disable-pingpong-te-on-dpu-5.0.0-and-abo.patch -drm-msm-dpu-fix-sc7280-and-sc7180-pingpong-done-inte.patch -drm-msm-dpu-correct-merge_3d-length.patch -clk-mediatek-clk-mtk-grab-iomem-pointer-for-divider-.patch -clk-mediatek-clk-mt8173-apmixedsys-fix-return-value-.patch -clk-mediatek-clk-mt8173-apmixedsys-fix-iomap-not-rel.patch -clk-vc5-check-memory-returned-by-kasprintf.patch -clk-cdce925-check-return-value-of-kasprintf.patch -clk-si5341-return-error-if-one-synth-clock-registrat.patch -clk-si5341-check-return-value-of-devm_-kasprintf.patch -clk-si5341-free-unused-memory-on-probe-failure.patch -clk-keystone-sci-clk-check-return-value-of-kasprintf.patch -clk-ti-clkctrl-check-return-value-of-kasprintf.patch -clk-clocking-wizard-check-return-value-of-devm_kaspr.patch -drivers-meson-secure-pwrc-always-enable-dma-domain.patch -ovl-update-of-dentry-revalidate-flags-after-copy-up.patch -asoc-imx-audmix-check-return-value-of-devm_kasprintf.patch -clk-fix-memory-leak-in-devm_clk_notifier_register.patch -arm-dts-lan966x-kontron-d10-fix-board-reset.patch -arm-dts-lan966x-kontron-d10-fix-spi-cs.patch -asoc-amd-acp-clear-pdm-dma-interrupt-mask.patch -mips-dts-ci20-add-parent-supplies-to-act8600-regulat.patch -mips-dts-ci20-raise-vddcore-voltage-to-1.125-volts.patch -iommufd-do-not-access-the-area-pointer-after-unlocki.patch -iommufd-call-iopt_area_contig_done-under-the-lock.patch -pci-cadence-fix-gen2-link-retraining-process.patch -pci-vmd-reset-vmd-config-register-between-soft-reboo.patch -scsi-qedf-fix-null-dereference-in-error-handling.patch -pinctrl-bcm2835-handle-gpiochip_add_pin_range-errors.patch -platform-x86-lenovo-yogabook-fix-work-race-on-remove.patch -platform-x86-lenovo-yogabook-reprobe-devices-on-remo.patch -platform-x86-lenovo-yogabook-set-default-keyboard-ba.patch -pci-aspm-disable-aspm-on-mfd-function-removal-to-avo.patch -scsi-3w-xxxx-add-error-handling-for-initialization-f.patch -pinctrl-at91-fix-a-couple-null-vs-is_err-checks.patch -pci-pciehp-cancel-bringup-sequence-if-card-is-not-pr.patch -perf-evsel-don-t-let-for_each_group-treat-the-head-o.patch -pci-ftpci100-release-the-clock-resources.patch -pinctrl-sunplus-add-check-for-kmalloc.patch -scsi-ufs-declare-ufshcd_-hold-release-once.patch -pci-add-pci_clear_master-stub-for-non-config_pci.patch -scsi-lpfc-revise-npiv-els-unsol-rcv-cmpl-logic-to-dr.patch -scsi-ufs-core-increase-the-start-stop-unit-timeout-f.patch -scsi-ufs-core-fix-handling-of-lrbp-cmd.patch -pinctrl-tegra-duplicate-pinmux-functions-table.patch -perf-bench-add-missing-setlocale-call-to-allow-usage.patch -pinctrl-cherryview-return-correct-value-if-pin-in-pu.patch -platform-x86-intel-pmc-remove-meteor-lake-s-platform.patch -platform-x86-think-lmi-mutex-protection-around-multi.patch -platform-x86-think-lmi-correct-system-password-inter.patch -platform-x86-think-lmi-correct-nvme-password-handlin.patch -pinctrl-sunplus-add-check-for-kmalloc.patch-3132 -pinctrl-npcm7xx-add-missing-check-for-ioremap.patch -kcsan-don-t-expect-64-bits-atomic-builtins-from-32-b.patch -powerpc-interrupt-don-t-read-msr-from-interrupt_exit.patch -powerpc-signal32-force-inlining-of-__unsafe_save_use.patch -perf-script-fix-allocation-of-evsel-priv-related-to-.patch -platform-x86-thinkpad_acpi-fix-lkp-tests-warnings-fo.patch -platform-x86-intel-pmc-add-resume-callback.patch -platform-x86-intel-pmc-mtl-put-devices-in-d3-during-.patch -perf-dwarf-aux-fix-off-by-one-in-die_get_varname.patch -perf-metric-fix-no-group-check.patch -perf-tests-task_analyzer-fix-bad-substitution-1.patch -perf-tests-task_analyzer-skip-tests-if-no-libtraceev.patch -platform-x86-dell-dell-rbtn-fix-resources-leaking-on.patch -perf-tool-x86-consolidate-is_amd-check-into-single-f.patch -perf-tool-x86-fix-perf_env-memory-leak.patch -powerpc-64s-fix-vas-mm-use-after-free.patch -pinctrl-freescale-fix-a-memory-out-of-bounds-when-nu.patch -pinctrl-microchip-sgpio-check-return-value-of-devm_k.patch -pinctrl-at91-pio4-check-return-value-of-devm_kasprin.patch -perf-stat-reset-aggr-stats-for-each-run.patch -scsi-ufs-core-remove-a-ufshcd_add_command_trace-call.patch -scsi-ufs-core-mcq-fix-the-incorrect-ocs-value-for-th.patch -powerpc-powernv-sriov-perform-null-check-on-iov-befo.patch -powerpc-update-ppc_save_regs-to-save-current-r1-in-p.patch -riscv-hibernation-remove-duplicate-call-of-suspend_r.patch -pci-qcom-use-dwc-helpers-for-modifying-the-read-only.patch -pci-qcom-disable-write-access-to-read-only-registers.patch -platform-x86-intel-pmc-update-maps-for-meteor-lake-p.patch -riscv-uprobes-restore-thread.bad_cause.patch -powerpc-book3s64-mm-fix-directmap-stats-in-proc-memi.patch -powerpc-mm-dax-fix-the-condition-when-checking-if-al.patch -perf-test-set-perf_exec_path-for-script-execution.patch -riscv-hibernate-remove-warn_on-in-save_processor_sta.patch -pci-endpoint-fix-a-kconfig-prompt-of-vntb-driver.patch -pci-endpoint-functions-pci-epf-test-fix-dma_chan-dir.patch -pci-vmd-fix-uninitialized-variable-usage-in-vmd_enab.patch -vfio-mdev-move-the-compat_class-initialization-to-mo.patch -hwrng-virtio-fix-race-on-data_avail-and-actual-data.patch -modpost-remove-broken-calculation-of-exception_table.patch -crypto-nx-fix-build-warnings-when-debug_fs-is-not-en.patch -modpost-fix-section-mismatch-message-for-r_arm_abs32.patch -modpost-fix-section-mismatch-message-for-r_arm_-pc24.patch -crypto-marvell-cesa-fix-type-mismatch-warning.patch -crypto-jitter-correct-health-test-during-initializat.patch -dt-bindings-qcom-qce-fix-compatible-combinations-for.patch -scripts-mksysmap-fix-badly-escaped.patch -modpost-fix-off-by-one-in-is_executable_section.patch -arc-define-asm_nl-and-__align-_str-outside-ifdef-__a.patch -crypto-qat-unmap-buffer-before-free-for-dh.patch -crypto-qat-unmap-buffers-before-free-for-rsa.patch -nfsv4.2-fix-wrong-shrinker_id.patch -nfsv4.1-freeze-the-session-table-upon-receiving-nfs4.patch -smb3-do-not-send-lease-break-acknowledgment-if-all-f.patch -dax-fix-dax_mapping_release-use-after-free.patch -dax-introduce-alloc_dev_dax_id.patch -dax-kmem-pass-valid-argument-to-memory_group_registe.patch -hwrng-st-keep-clock-enabled-while-hwrng-is-registere.patch -i2c-convert-to-platform-remove-callback-returning-vo.patch -i2c-ocores-use-devm_-managed-clks.patch -kbuild-fix-cfi-failures-with-gcov.patch -kbuild-disable-gcov-for-.mod.o.patch -cxl-region-move-cache-invalidation-before-region-tea.patch -cxl-region-flag-partially-torn-down-regions-as-unusa.patch -cxl-region-fix-state-transitions-after-reset-failure.patch -tools-testing-cxl-fix-command-effects-for-inject-cle.patch -kbuild-builddeb-always-make-modules_install-to-insta.patch -kbuild-deb-pkg-remove-the-config_modules-check-in-bu.patch -efi-libstub-disable-pci-dma-before-grabbing-the-efi-.patch -cifs-prevent-use-after-free-by-freeing-the-cfile-lat.patch -cifs-do-all-necessary-checks-for-credits-within-or-b.patch -smb-client-fix-broken-file-attrs-with-nodfs-mounts.patch -smb-client-fix-shared-dfs-root-mounts-with-different.patch -ksmbd-avoid-field-overflow-warning.patch -arm64-sme-use-str-p-to-clear-ffr-context-field-in-st.patch -x86-efi-make-efi_set_virtual_address_map-ibt-safe.patch diff --git a/queue-6.4/sfc-fix-crash-when-reading-stats-while-nic-is-resett.patch b/queue-6.4/sfc-fix-crash-when-reading-stats-while-nic-is-resett.patch deleted file mode 100644 index 71f5cf01862..00000000000 --- a/queue-6.4/sfc-fix-crash-when-reading-stats-while-nic-is-resett.patch +++ /dev/null @@ -1,70 +0,0 @@ -From edc756602f45448edbb0d641dc28c40c2f42464c Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Fri, 23 Jun 2023 15:34:48 +0100 -Subject: sfc: fix crash when reading stats while NIC is resetting - -From: Edward Cree - -[ Upstream commit d1b355438b8325a486f087e506d412c4e852f37b ] - -efx_net_stats() (.ndo_get_stats64) can be called during an ethtool - selftest, during which time nic_data->mc_stats is NULL as the NIC has - been fini'd. In this case do not attempt to fetch the latest stats - from the hardware, else we will crash on a NULL dereference: - BUG: kernel NULL pointer dereference, address: 0000000000000038 - RIP efx_nic_update_stats - abridged calltrace: - efx_ef10_update_stats_pf - efx_net_stats - dev_get_stats - dev_seq_printf_stats -Skipping the read is safe, we will simply give out stale stats. -To ensure that the free in efx_ef10_fini_nic() does not race against - efx_ef10_update_stats_pf(), which could cause a TOCTTOU bug, take the - efx->stats_lock in fini_nic (it is already held across update_stats). - -Fixes: d3142c193dca ("sfc: refactor EF10 stats handling") -Reviewed-by: Pieter Jansen van Vuuren -Signed-off-by: Edward Cree -Signed-off-by: David S. Miller -Signed-off-by: Sasha Levin ---- - drivers/net/ethernet/sfc/ef10.c | 13 ++++++++++--- - 1 file changed, 10 insertions(+), 3 deletions(-) - -diff --git a/drivers/net/ethernet/sfc/ef10.c b/drivers/net/ethernet/sfc/ef10.c -index b63e47af63655..8c019f382a7f3 100644 ---- a/drivers/net/ethernet/sfc/ef10.c -+++ b/drivers/net/ethernet/sfc/ef10.c -@@ -1297,8 +1297,10 @@ static void efx_ef10_fini_nic(struct efx_nic *efx) - { - struct efx_ef10_nic_data *nic_data = efx->nic_data; - -+ spin_lock_bh(&efx->stats_lock); - kfree(nic_data->mc_stats); - nic_data->mc_stats = NULL; -+ spin_unlock_bh(&efx->stats_lock); - } - - static int efx_ef10_init_nic(struct efx_nic *efx) -@@ -1852,9 +1854,14 @@ static size_t efx_ef10_update_stats_pf(struct efx_nic *efx, u64 *full_stats, - - efx_ef10_get_stat_mask(efx, mask); - -- efx_nic_copy_stats(efx, nic_data->mc_stats); -- efx_nic_update_stats(efx_ef10_stat_desc, EF10_STAT_COUNT, -- mask, stats, nic_data->mc_stats, false); -+ /* If NIC was fini'd (probably resetting), then we can't read -+ * updated stats right now. -+ */ -+ if (nic_data->mc_stats) { -+ efx_nic_copy_stats(efx, nic_data->mc_stats); -+ efx_nic_update_stats(efx_ef10_stat_desc, EF10_STAT_COUNT, -+ mask, stats, nic_data->mc_stats, false); -+ } - - /* Update derived statistics */ - efx_nic_fix_nodesc_drop_stat(efx, --- -2.39.2 - diff --git a/queue-6.4/sfc-release-encap-match-in-efx_tc_flow_free.patch b/queue-6.4/sfc-release-encap-match-in-efx_tc_flow_free.patch deleted file mode 100644 index 210f5466421..00000000000 --- a/queue-6.4/sfc-release-encap-match-in-efx_tc_flow_free.patch +++ /dev/null @@ -1,80 +0,0 @@ -From 676970059808b958f59e770b46c24236147a433d Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Thu, 11 May 2023 20:47:28 +0100 -Subject: sfc: release encap match in efx_tc_flow_free() - -From: Edward Cree - -[ Upstream commit 28fa3ac487c6d30aaa10570481c27b6adfc492b3 ] - -When force-freeing leftover entries from our match_action_ht, call - efx_tc_delete_rule(), which releases all the rule's resources, rather - than open-coding it. The open-coded version was missing a call to - release the rule's encap match (if any). -It probably doesn't matter as everything's being torn down anyway, but - it's cleaner this way and prevents further error messages potentially - being logged by efx_tc_encap_match_free() later on. -Move efx_tc_flow_free() further down the file to avoid introducing a - forward declaration of efx_tc_delete_rule(). - -Fixes: 17654d84b47c ("sfc: add offloading of 'foreign' TC (decap) rules") -Signed-off-by: Edward Cree -Signed-off-by: David S. Miller -Signed-off-by: Sasha Levin ---- - drivers/net/ethernet/sfc/tc.c | 32 +++++++++++++++----------------- - 1 file changed, 15 insertions(+), 17 deletions(-) - -diff --git a/drivers/net/ethernet/sfc/tc.c b/drivers/net/ethernet/sfc/tc.c -index c004443c1d58c..d7827ab3761f9 100644 ---- a/drivers/net/ethernet/sfc/tc.c -+++ b/drivers/net/ethernet/sfc/tc.c -@@ -132,23 +132,6 @@ static void efx_tc_free_action_set_list(struct efx_nic *efx, - /* Don't kfree, as acts is embedded inside a struct efx_tc_flow_rule */ - } - --static void efx_tc_flow_free(void *ptr, void *arg) --{ -- struct efx_tc_flow_rule *rule = ptr; -- struct efx_nic *efx = arg; -- -- netif_err(efx, drv, efx->net_dev, -- "tc rule %lx still present at teardown, removing\n", -- rule->cookie); -- -- efx_mae_delete_rule(efx, rule->fw_id); -- -- /* Release entries in subsidiary tables */ -- efx_tc_free_action_set_list(efx, &rule->acts, true); -- -- kfree(rule); --} -- - /* Boilerplate for the simple 'copy a field' cases */ - #define _MAP_KEY_AND_MASK(_name, _type, _tcget, _tcfield, _field) \ - if (flow_rule_match_key(rule, FLOW_DISSECTOR_KEY_##_name)) { \ -@@ -1451,6 +1434,21 @@ static void efx_tc_encap_match_free(void *ptr, void *__unused) - kfree(encap); - } - -+static void efx_tc_flow_free(void *ptr, void *arg) -+{ -+ struct efx_tc_flow_rule *rule = ptr; -+ struct efx_nic *efx = arg; -+ -+ netif_err(efx, drv, efx->net_dev, -+ "tc rule %lx still present at teardown, removing\n", -+ rule->cookie); -+ -+ /* Also releases entries in subsidiary tables */ -+ efx_tc_delete_rule(efx, rule); -+ -+ kfree(rule); -+} -+ - int efx_init_struct_tc(struct efx_nic *efx) - { - int rc; --- -2.39.2 - diff --git a/queue-6.4/smb-client-fix-broken-file-attrs-with-nodfs-mounts.patch b/queue-6.4/smb-client-fix-broken-file-attrs-with-nodfs-mounts.patch deleted file mode 100644 index 2afcc79965a..00000000000 --- a/queue-6.4/smb-client-fix-broken-file-attrs-with-nodfs-mounts.patch +++ /dev/null @@ -1,58 +0,0 @@ -From d6f4f042e346e3387730cb678b49cff9332b8510 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Tue, 27 Jun 2023 21:24:49 -0300 -Subject: smb: client: fix broken file attrs with nodfs mounts - -From: Paulo Alcantara - -[ Upstream commit d439b29057e26464120fc6c18f97433aa003b5fe ] - -*_get_inode_info() functions expect -EREMOTE when query path info -calls find a DFS link, regardless whether !CONFIG_CIFS_DFS_UPCALL or -'nodfs' mount option. Otherwise, those files will miss the fake DFS -file attributes. - -Before patch - - $ mount.cifs //srv/dfs /mnt/1 -o ...,nodfs - $ ls -l /mnt/1 - ls: cannot access '/mnt/1/link': Operation not supported - total 0 - -rwxr-xr-x 1 root root 0 Jul 26 2022 dfstest2_file1.txt - drwxr-xr-x 2 root root 0 Aug 8 2022 dir1 - d????????? ? ? ? ? ? link - -After patch - - $ mount.cifs //srv/dfs /mnt/1 -o ...,nodfs - $ ls -l /mnt/1 - total 0 - -rwxr-xr-x 1 root root 0 Jul 26 2022 dfstest2_file1.txt - drwxr-xr-x 2 root root 0 Aug 8 2022 dir1 - drwx--x--x 2 root root 0 Jun 26 20:29 link - -Fixes: c877ce47e137 ("cifs: reduce roundtrips on create/qinfo requests") -Signed-off-by: Paulo Alcantara (SUSE) -Signed-off-by: Steve French -Signed-off-by: Sasha Levin ---- - fs/smb/client/smb2inode.c | 3 --- - 1 file changed, 3 deletions(-) - -diff --git a/fs/smb/client/smb2inode.c b/fs/smb/client/smb2inode.c -index 7e3ac4cb4efa6..8e696fbd72fa8 100644 ---- a/fs/smb/client/smb2inode.c -+++ b/fs/smb/client/smb2inode.c -@@ -609,9 +609,6 @@ int smb2_query_path_info(const unsigned int xid, struct cifs_tcon *tcon, - if (islink) - rc = -EREMOTE; - } -- if (rc == -EREMOTE && IS_ENABLED(CONFIG_CIFS_DFS_UPCALL) && cifs_sb && -- (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_NO_DFS)) -- rc = -EOPNOTSUPP; - } - - out: --- -2.39.2 - diff --git a/queue-6.4/smb-client-fix-shared-dfs-root-mounts-with-different.patch b/queue-6.4/smb-client-fix-shared-dfs-root-mounts-with-different.patch deleted file mode 100644 index acd702106d2..00000000000 --- a/queue-6.4/smb-client-fix-shared-dfs-root-mounts-with-different.patch +++ /dev/null @@ -1,581 +0,0 @@ -From 245ee395cab4985cbc190678b798b55a74c5a11d Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Mon, 26 Jun 2023 16:04:17 -0300 -Subject: smb: client: fix shared DFS root mounts with different prefixes - -From: Paulo Alcantara - -[ Upstream commit 3ae872de410751fe5e629e04da491a632d95201c ] - -When having two DFS root mounts that are connected to same namespace, -same mount options but different prefix paths, we can't really use the -shared @server->origin_fullpath when chasing DFS links in them. - -Move the origin_fullpath field to cifs_tcon structure so when having -shared DFS root mounts with different prefix paths, and we need to -chase any DFS links, dfs_get_automount_devname() will pick up the -correct full path out of the @tcon that will be used for the new -mount. - -Before patch - - mount.cifs //dom/dfs/dir /mnt/1 -o ... - mount.cifs //dom/dfs /mnt/2 -o ... - # shared server, ses, tcon - # server: origin_fullpath=//dom/dfs/dir - - # @server->origin_fullpath + '/dir/link1' - $ ls /mnt/2/dir/link1 - ls: cannot open directory '/mnt/2/dir/link1': No such file or directory - -After patch - - mount.cifs //dom/dfs/dir /mnt/1 -o ... - mount.cifs //dom/dfs /mnt/2 -o ... - # shared server & ses - # tcon_1: origin_fullpath=//dom/dfs/dir - # tcon_2: origin_fullpath=//dom/dfs - - # @tcon_2->origin_fullpath + '/dir/link1' - $ ls /mnt/2/dir/link1 - dir0 dir1 dir10 dir3 dir5 dir6 dir7 dir9 target2_file.txt tsub - -Fixes: 8e3554150d6c ("cifs: fix sharing of DFS connections") -Signed-off-by: Paulo Alcantara (SUSE) -Signed-off-by: Steve French -Signed-off-by: Sasha Levin ---- - fs/smb/client/cifs_debug.c | 16 +++++---- - fs/smb/client/cifsglob.h | 10 +++--- - fs/smb/client/cifsproto.h | 2 +- - fs/smb/client/connect.c | 70 ++++++++++++++++++++++---------------- - fs/smb/client/dfs.c | 55 ++++++++++++------------------ - fs/smb/client/dfs.h | 19 +++++------ - fs/smb/client/dfs_cache.c | 8 +++-- - fs/smb/client/misc.c | 38 ++++++++++++++++----- - 8 files changed, 118 insertions(+), 100 deletions(-) - -diff --git a/fs/smb/client/cifs_debug.c b/fs/smb/client/cifs_debug.c -index b279f745466e4..ed0f71137584f 100644 ---- a/fs/smb/client/cifs_debug.c -+++ b/fs/smb/client/cifs_debug.c -@@ -122,6 +122,12 @@ static void cifs_debug_tcon(struct seq_file *m, struct cifs_tcon *tcon) - seq_puts(m, " nosparse"); - if (tcon->need_reconnect) - seq_puts(m, "\tDISCONNECTED "); -+ spin_lock(&tcon->tc_lock); -+ if (tcon->origin_fullpath) { -+ seq_printf(m, "\n\tDFS origin fullpath: %s", -+ tcon->origin_fullpath); -+ } -+ spin_unlock(&tcon->tc_lock); - seq_putc(m, '\n'); - } - -@@ -427,13 +433,9 @@ static int cifs_debug_data_proc_show(struct seq_file *m, void *v) - seq_printf(m, "\nIn Send: %d In MaxReq Wait: %d", - atomic_read(&server->in_send), - atomic_read(&server->num_waiters)); -- if (IS_ENABLED(CONFIG_CIFS_DFS_UPCALL)) { -- if (server->origin_fullpath) -- seq_printf(m, "\nDFS origin full path: %s", -- server->origin_fullpath); -- if (server->leaf_fullpath) -- seq_printf(m, "\nDFS leaf full path: %s", -- server->leaf_fullpath); -+ if (server->leaf_fullpath) { -+ seq_printf(m, "\nDFS leaf full path: %s", -+ server->leaf_fullpath); - } - - seq_printf(m, "\n\n\tSessions: "); -diff --git a/fs/smb/client/cifsglob.h b/fs/smb/client/cifsglob.h -index b212a4e16b39b..ca2da713c5fe9 100644 ---- a/fs/smb/client/cifsglob.h -+++ b/fs/smb/client/cifsglob.h -@@ -736,23 +736,20 @@ struct TCP_Server_Info { - #endif - struct mutex refpath_lock; /* protects leaf_fullpath */ - /* -- * origin_fullpath: Canonical copy of smb3_fs_context::source. -- * It is used for matching existing DFS tcons. -- * - * leaf_fullpath: Canonical DFS referral path related to this - * connection. - * It is used in DFS cache refresher, reconnect and may - * change due to nested DFS links. - * -- * Both protected by @refpath_lock and @srv_lock. The @refpath_lock is -- * mosly used for not requiring a copy of @leaf_fullpath when getting -+ * Protected by @refpath_lock and @srv_lock. The @refpath_lock is -+ * mostly used for not requiring a copy of @leaf_fullpath when getting - * cached or new DFS referrals (which might also sleep during I/O). - * While @srv_lock is held for making string and NULL comparions against - * both fields as in mount(2) and cache refresh. - * - * format: \\HOST\SHARE[\OPTIONAL PATH] - */ -- char *origin_fullpath, *leaf_fullpath; -+ char *leaf_fullpath; - }; - - static inline bool is_smb1(struct TCP_Server_Info *server) -@@ -1205,6 +1202,7 @@ struct cifs_tcon { - struct delayed_work dfs_cache_work; - #endif - struct delayed_work query_interfaces; /* query interfaces workqueue job */ -+ char *origin_fullpath; /* canonical copy of smb3_fs_context::source */ - }; - - /* -diff --git a/fs/smb/client/cifsproto.h b/fs/smb/client/cifsproto.h -index d127aded2f287..94ab6402965c5 100644 ---- a/fs/smb/client/cifsproto.h -+++ b/fs/smb/client/cifsproto.h -@@ -650,7 +650,7 @@ int smb2_parse_query_directory(struct cifs_tcon *tcon, struct kvec *rsp_iov, - int resp_buftype, - struct cifs_search_info *srch_inf); - --struct super_block *cifs_get_tcp_super(struct TCP_Server_Info *server); -+struct super_block *cifs_get_dfs_tcon_super(struct cifs_tcon *tcon); - void cifs_put_tcp_super(struct super_block *sb); - int cifs_update_super_prepath(struct cifs_sb_info *cifs_sb, char *prefix); - char *extract_hostname(const char *unc); -diff --git a/fs/smb/client/connect.c b/fs/smb/client/connect.c -index 9d16626e7a669..d9f0b3b94f007 100644 ---- a/fs/smb/client/connect.c -+++ b/fs/smb/client/connect.c -@@ -996,7 +996,6 @@ static void clean_demultiplex_info(struct TCP_Server_Info *server) - */ - } - -- kfree(server->origin_fullpath); - kfree(server->leaf_fullpath); - kfree(server); - -@@ -1436,7 +1435,9 @@ match_security(struct TCP_Server_Info *server, struct smb3_fs_context *ctx) - } - - /* this function must be called with srv_lock held */ --static int match_server(struct TCP_Server_Info *server, struct smb3_fs_context *ctx) -+static int match_server(struct TCP_Server_Info *server, -+ struct smb3_fs_context *ctx, -+ bool match_super) - { - struct sockaddr *addr = (struct sockaddr *)&ctx->dstaddr; - -@@ -1467,36 +1468,38 @@ static int match_server(struct TCP_Server_Info *server, struct smb3_fs_context * - (struct sockaddr *)&server->srcaddr)) - return 0; - /* -- * - Match for an DFS tcon (@server->origin_fullpath). -- * - Match for an DFS root server connection (@server->leaf_fullpath). -- * - If none of the above and @ctx->leaf_fullpath is set, then -- * it is a new DFS connection. -- * - If 'nodfs' mount option was passed, then match only connections -- * that have no DFS referrals set -- * (e.g. can't failover to other targets). -+ * When matching cifs.ko superblocks (@match_super == true), we can't -+ * really match either @server->leaf_fullpath or @server->dstaddr -+ * directly since this @server might belong to a completely different -+ * server -- in case of domain-based DFS referrals or DFS links -- as -+ * provided earlier by mount(2) through 'source' and 'ip' options. -+ * -+ * Otherwise, match the DFS referral in @server->leaf_fullpath or the -+ * destination address in @server->dstaddr. -+ * -+ * When using 'nodfs' mount option, we avoid sharing it with DFS -+ * connections as they might failover. - */ -- if (!ctx->nodfs) { -- if (ctx->source && server->origin_fullpath) { -- if (!dfs_src_pathname_equal(ctx->source, -- server->origin_fullpath)) -+ if (!match_super) { -+ if (!ctx->nodfs) { -+ if (server->leaf_fullpath) { -+ if (!ctx->leaf_fullpath || -+ strcasecmp(server->leaf_fullpath, -+ ctx->leaf_fullpath)) -+ return 0; -+ } else if (ctx->leaf_fullpath) { - return 0; -+ } - } else if (server->leaf_fullpath) { -- if (!ctx->leaf_fullpath || -- strcasecmp(server->leaf_fullpath, -- ctx->leaf_fullpath)) -- return 0; -- } else if (ctx->leaf_fullpath) { - return 0; - } -- } else if (server->origin_fullpath || server->leaf_fullpath) { -- return 0; - } - - /* - * Match for a regular connection (address/hostname/port) which has no - * DFS referrals set. - */ -- if (!server->origin_fullpath && !server->leaf_fullpath && -+ if (!server->leaf_fullpath && - (strcasecmp(server->hostname, ctx->server_hostname) || - !match_server_address(server, addr) || - !match_port(server, addr))) -@@ -1532,7 +1535,8 @@ cifs_find_tcp_session(struct smb3_fs_context *ctx) - * Skip ses channels since they're only handled in lower layers - * (e.g. cifs_send_recv). - */ -- if (CIFS_SERVER_IS_CHAN(server) || !match_server(server, ctx)) { -+ if (CIFS_SERVER_IS_CHAN(server) || -+ !match_server(server, ctx, false)) { - spin_unlock(&server->srv_lock); - continue; - } -@@ -2320,10 +2324,16 @@ static int match_tcon(struct cifs_tcon *tcon, struct smb3_fs_context *ctx) - - if (tcon->status == TID_EXITING) - return 0; -- /* Skip UNC validation when matching DFS connections or superblocks */ -- if (!server->origin_fullpath && !server->leaf_fullpath && -- strncmp(tcon->tree_name, ctx->UNC, MAX_TREE_SIZE)) -+ -+ if (tcon->origin_fullpath) { -+ if (!ctx->source || -+ !dfs_src_pathname_equal(ctx->source, -+ tcon->origin_fullpath)) -+ return 0; -+ } else if (!server->leaf_fullpath && -+ strncmp(tcon->tree_name, ctx->UNC, MAX_TREE_SIZE)) { - return 0; -+ } - if (tcon->seal != ctx->seal) - return 0; - if (tcon->snapshot_time != ctx->snapshot_time) -@@ -2722,7 +2732,7 @@ compare_mount_options(struct super_block *sb, struct cifs_mnt_data *mnt_data) - } - - static int match_prepath(struct super_block *sb, -- struct TCP_Server_Info *server, -+ struct cifs_tcon *tcon, - struct cifs_mnt_data *mnt_data) - { - struct smb3_fs_context *ctx = mnt_data->ctx; -@@ -2733,8 +2743,8 @@ static int match_prepath(struct super_block *sb, - bool new_set = (new->mnt_cifs_flags & CIFS_MOUNT_USE_PREFIX_PATH) && - new->prepath; - -- if (server->origin_fullpath && -- dfs_src_pathname_equal(server->origin_fullpath, ctx->source)) -+ if (tcon->origin_fullpath && -+ dfs_src_pathname_equal(tcon->origin_fullpath, ctx->source)) - return 1; - - if (old_set && new_set && !strcmp(new->prepath, old->prepath)) -@@ -2782,10 +2792,10 @@ cifs_match_super(struct super_block *sb, void *data) - spin_lock(&ses->ses_lock); - spin_lock(&ses->chan_lock); - spin_lock(&tcon->tc_lock); -- if (!match_server(tcp_srv, ctx) || -+ if (!match_server(tcp_srv, ctx, true) || - !match_session(ses, ctx) || - !match_tcon(tcon, ctx) || -- !match_prepath(sb, tcp_srv, mnt_data)) { -+ !match_prepath(sb, tcon, mnt_data)) { - rc = 0; - goto out; - } -diff --git a/fs/smb/client/dfs.c b/fs/smb/client/dfs.c -index 2390b2fedd6a3..267536a7531df 100644 ---- a/fs/smb/client/dfs.c -+++ b/fs/smb/client/dfs.c -@@ -249,14 +249,12 @@ static int __dfs_mount_share(struct cifs_mount_ctx *mnt_ctx) - server = mnt_ctx->server; - tcon = mnt_ctx->tcon; - -- mutex_lock(&server->refpath_lock); -- spin_lock(&server->srv_lock); -- if (!server->origin_fullpath) { -- server->origin_fullpath = origin_fullpath; -+ spin_lock(&tcon->tc_lock); -+ if (!tcon->origin_fullpath) { -+ tcon->origin_fullpath = origin_fullpath; - origin_fullpath = NULL; - } -- spin_unlock(&server->srv_lock); -- mutex_unlock(&server->refpath_lock); -+ spin_unlock(&tcon->tc_lock); - - if (list_empty(&tcon->dfs_ses_list)) { - list_replace_init(&mnt_ctx->dfs_ses_list, -@@ -279,18 +277,13 @@ int dfs_mount_share(struct cifs_mount_ctx *mnt_ctx, bool *isdfs) - { - struct smb3_fs_context *ctx = mnt_ctx->fs_ctx; - struct cifs_ses *ses; -- char *source = ctx->source; - bool nodfs = ctx->nodfs; - int rc; - - *isdfs = false; -- /* Temporarily set @ctx->source to NULL as we're not matching DFS -- * superblocks yet. See cifs_match_super() and match_server(). -- */ -- ctx->source = NULL; - rc = get_session(mnt_ctx, NULL); - if (rc) -- goto out; -+ return rc; - - ctx->dfs_root_ses = mnt_ctx->ses; - /* -@@ -304,7 +297,7 @@ int dfs_mount_share(struct cifs_mount_ctx *mnt_ctx, bool *isdfs) - rc = dfs_get_referral(mnt_ctx, ctx->UNC + 1, NULL, NULL); - if (rc) { - if (rc != -ENOENT && rc != -EOPNOTSUPP && rc != -EIO) -- goto out; -+ return rc; - nodfs = true; - } - } -@@ -312,7 +305,7 @@ int dfs_mount_share(struct cifs_mount_ctx *mnt_ctx, bool *isdfs) - rc = cifs_mount_get_tcon(mnt_ctx); - if (!rc) - rc = cifs_is_path_remote(mnt_ctx); -- goto out; -+ return rc; - } - - *isdfs = true; -@@ -328,12 +321,7 @@ int dfs_mount_share(struct cifs_mount_ctx *mnt_ctx, bool *isdfs) - rc = __dfs_mount_share(mnt_ctx); - if (ses == ctx->dfs_root_ses) - cifs_put_smb_ses(ses); --out: -- /* -- * Restore previous value of @ctx->source so DFS superblock can be -- * matched in cifs_match_super(). -- */ -- ctx->source = source; -+ - return rc; - } - -@@ -567,11 +555,11 @@ int cifs_tree_connect(const unsigned int xid, struct cifs_tcon *tcon, const stru - int rc; - struct TCP_Server_Info *server = tcon->ses->server; - const struct smb_version_operations *ops = server->ops; -- struct super_block *sb = NULL; -- struct cifs_sb_info *cifs_sb; - struct dfs_cache_tgt_list tl = DFS_CACHE_TGT_LIST_INIT(tl); -- char *tree; -+ struct cifs_sb_info *cifs_sb = NULL; -+ struct super_block *sb = NULL; - struct dfs_info3_param ref = {0}; -+ char *tree; - - /* only send once per connect */ - spin_lock(&tcon->tc_lock); -@@ -603,19 +591,18 @@ int cifs_tree_connect(const unsigned int xid, struct cifs_tcon *tcon, const stru - goto out; - } - -- sb = cifs_get_tcp_super(server); -- if (IS_ERR(sb)) { -- rc = PTR_ERR(sb); -- cifs_dbg(VFS, "%s: could not find superblock: %d\n", __func__, rc); -- goto out; -- } -- -- cifs_sb = CIFS_SB(sb); -+ sb = cifs_get_dfs_tcon_super(tcon); -+ if (!IS_ERR(sb)) -+ cifs_sb = CIFS_SB(sb); - -- /* If it is not dfs or there was no cached dfs referral, then reconnect to same share */ -- if (!server->leaf_fullpath || -+ /* -+ * Tree connect to last share in @tcon->tree_name whether dfs super or -+ * cached dfs referral was not found. -+ */ -+ if (!cifs_sb || !server->leaf_fullpath || - dfs_cache_noreq_find(server->leaf_fullpath + 1, &ref, &tl)) { -- rc = ops->tree_connect(xid, tcon->ses, tcon->tree_name, tcon, cifs_sb->local_nls); -+ rc = ops->tree_connect(xid, tcon->ses, tcon->tree_name, tcon, -+ cifs_sb ? cifs_sb->local_nls : nlsc); - goto out; - } - -diff --git a/fs/smb/client/dfs.h b/fs/smb/client/dfs.h -index 1c90df5ecfbda..98e9d2aca6a7a 100644 ---- a/fs/smb/client/dfs.h -+++ b/fs/smb/client/dfs.h -@@ -39,16 +39,15 @@ static inline char *dfs_get_automount_devname(struct dentry *dentry, void *page) - { - struct cifs_sb_info *cifs_sb = CIFS_SB(dentry->d_sb); - struct cifs_tcon *tcon = cifs_sb_master_tcon(cifs_sb); -- struct TCP_Server_Info *server = tcon->ses->server; - size_t len; - char *s; - -- spin_lock(&server->srv_lock); -- if (unlikely(!server->origin_fullpath)) { -- spin_unlock(&server->srv_lock); -+ spin_lock(&tcon->tc_lock); -+ if (unlikely(!tcon->origin_fullpath)) { -+ spin_unlock(&tcon->tc_lock); - return ERR_PTR(-EREMOTE); - } -- spin_unlock(&server->srv_lock); -+ spin_unlock(&tcon->tc_lock); - - s = dentry_path_raw(dentry, page, PATH_MAX); - if (IS_ERR(s)) -@@ -57,16 +56,16 @@ static inline char *dfs_get_automount_devname(struct dentry *dentry, void *page) - if (!s[1]) - s++; - -- spin_lock(&server->srv_lock); -- len = strlen(server->origin_fullpath); -+ spin_lock(&tcon->tc_lock); -+ len = strlen(tcon->origin_fullpath); - if (s < (char *)page + len) { -- spin_unlock(&server->srv_lock); -+ spin_unlock(&tcon->tc_lock); - return ERR_PTR(-ENAMETOOLONG); - } - - s -= len; -- memcpy(s, server->origin_fullpath, len); -- spin_unlock(&server->srv_lock); -+ memcpy(s, tcon->origin_fullpath, len); -+ spin_unlock(&tcon->tc_lock); - convert_delimiter(s, '/'); - - return s; -diff --git a/fs/smb/client/dfs_cache.c b/fs/smb/client/dfs_cache.c -index 1513b2709889b..33adf43a01f1d 100644 ---- a/fs/smb/client/dfs_cache.c -+++ b/fs/smb/client/dfs_cache.c -@@ -1248,18 +1248,20 @@ static int refresh_tcon(struct cifs_tcon *tcon, bool force_refresh) - int dfs_cache_remount_fs(struct cifs_sb_info *cifs_sb) - { - struct cifs_tcon *tcon; -- struct TCP_Server_Info *server; - - if (!cifs_sb || !cifs_sb->master_tlink) - return -EINVAL; - - tcon = cifs_sb_master_tcon(cifs_sb); -- server = tcon->ses->server; - -- if (!server->origin_fullpath) { -+ spin_lock(&tcon->tc_lock); -+ if (!tcon->origin_fullpath) { -+ spin_unlock(&tcon->tc_lock); - cifs_dbg(FYI, "%s: not a dfs mount\n", __func__); - return 0; - } -+ spin_unlock(&tcon->tc_lock); -+ - /* - * After reconnecting to a different server, unique ids won't match anymore, so we disable - * serverino. This prevents dentry revalidation to think the dentry are stale (ESTALE). -diff --git a/fs/smb/client/misc.c b/fs/smb/client/misc.c -index cd914be905b24..b0dedc26643b6 100644 ---- a/fs/smb/client/misc.c -+++ b/fs/smb/client/misc.c -@@ -156,6 +156,7 @@ tconInfoFree(struct cifs_tcon *tcon) - #ifdef CONFIG_CIFS_DFS_UPCALL - dfs_put_root_smb_sessions(&tcon->dfs_ses_list); - #endif -+ kfree(tcon->origin_fullpath); - kfree(tcon); - } - -@@ -1106,20 +1107,25 @@ struct super_cb_data { - struct super_block *sb; - }; - --static void tcp_super_cb(struct super_block *sb, void *arg) -+static void tcon_super_cb(struct super_block *sb, void *arg) - { - struct super_cb_data *sd = arg; -- struct TCP_Server_Info *server = sd->data; - struct cifs_sb_info *cifs_sb; -- struct cifs_tcon *tcon; -+ struct cifs_tcon *t1 = sd->data, *t2; - - if (sd->sb) - return; - - cifs_sb = CIFS_SB(sb); -- tcon = cifs_sb_master_tcon(cifs_sb); -- if (tcon->ses->server == server) -+ t2 = cifs_sb_master_tcon(cifs_sb); -+ -+ spin_lock(&t2->tc_lock); -+ if (t1->ses == t2->ses && -+ t1->ses->server == t2->ses->server && -+ t2->origin_fullpath && -+ dfs_src_pathname_equal(t2->origin_fullpath, t1->origin_fullpath)) - sd->sb = sb; -+ spin_unlock(&t2->tc_lock); - } - - static struct super_block *__cifs_get_super(void (*f)(struct super_block *, void *), -@@ -1145,6 +1151,7 @@ static struct super_block *__cifs_get_super(void (*f)(struct super_block *, void - return sd.sb; - } - } -+ pr_warn_once("%s: could not find dfs superblock\n", __func__); - return ERR_PTR(-EINVAL); - } - -@@ -1154,9 +1161,15 @@ static void __cifs_put_super(struct super_block *sb) - cifs_sb_deactive(sb); - } - --struct super_block *cifs_get_tcp_super(struct TCP_Server_Info *server) -+struct super_block *cifs_get_dfs_tcon_super(struct cifs_tcon *tcon) - { -- return __cifs_get_super(tcp_super_cb, server); -+ spin_lock(&tcon->tc_lock); -+ if (!tcon->origin_fullpath) { -+ spin_unlock(&tcon->tc_lock); -+ return ERR_PTR(-ENOENT); -+ } -+ spin_unlock(&tcon->tc_lock); -+ return __cifs_get_super(tcon_super_cb, tcon); - } - - void cifs_put_tcp_super(struct super_block *sb) -@@ -1238,9 +1251,16 @@ int cifs_inval_name_dfs_link_error(const unsigned int xid, - */ - if (strlen(full_path) < 2 || !cifs_sb || - (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_NO_DFS) || -- !is_tcon_dfs(tcon) || !ses->server->origin_fullpath) -+ !is_tcon_dfs(tcon)) - return 0; - -+ spin_lock(&tcon->tc_lock); -+ if (!tcon->origin_fullpath) { -+ spin_unlock(&tcon->tc_lock); -+ return 0; -+ } -+ spin_unlock(&tcon->tc_lock); -+ - /* - * Slow path - tcon is DFS and @full_path has prefix path, so attempt - * to get a referral to figure out whether it is an DFS link. -@@ -1264,7 +1284,7 @@ int cifs_inval_name_dfs_link_error(const unsigned int xid, - - /* - * XXX: we are not using dfs_cache_find() here because we might -- * end filling all the DFS cache and thus potentially -+ * end up filling all the DFS cache and thus potentially - * removing cached DFS targets that the client would eventually - * need during failover. - */ --- -2.39.2 - diff --git a/queue-6.4/smb3-do-not-send-lease-break-acknowledgment-if-all-f.patch b/queue-6.4/smb3-do-not-send-lease-break-acknowledgment-if-all-f.patch deleted file mode 100644 index 4cb9cdd9f74..00000000000 --- a/queue-6.4/smb3-do-not-send-lease-break-acknowledgment-if-all-f.patch +++ /dev/null @@ -1,66 +0,0 @@ -From a94eb2e45651f5c0e0cd9daa6674950176d05c22 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Sun, 18 Jun 2023 19:02:24 +0000 -Subject: SMB3: Do not send lease break acknowledgment if all file handles have - been closed - -From: Bharath SM - -[ Upstream commit da787d5b74983f7525d1eb4b9c0b4aff2821511a ] - -In case if all existing file handles are deferred handles and if all of -them gets closed due to handle lease break then we dont need to send -lease break acknowledgment to server, because last handle close will be -considered as lease break ack. -After closing deferred handels, we check for openfile list of inode, -if its empty then we skip sending lease break ack. - -Fixes: 59a556aebc43 ("SMB3: drop reference to cfile before sending oplock break") -Reviewed-by: Tom Talpey -Signed-off-by: Bharath SM -Signed-off-by: Steve French -Signed-off-by: Sasha Levin ---- - fs/smb/client/file.c | 25 ++++++++++++------------- - 1 file changed, 12 insertions(+), 13 deletions(-) - -diff --git a/fs/smb/client/file.c b/fs/smb/client/file.c -index 051283386e229..1a854dc204823 100644 ---- a/fs/smb/client/file.c -+++ b/fs/smb/client/file.c -@@ -4936,20 +4936,19 @@ void cifs_oplock_break(struct work_struct *work) - - _cifsFileInfo_put(cfile, false /* do not wait for ourself */, false); - /* -- * releasing stale oplock after recent reconnect of smb session using -- * a now incorrect file handle is not a data integrity issue but do -- * not bother sending an oplock release if session to server still is -- * disconnected since oplock already released by the server -+ * MS-SMB2 3.2.5.19.1 and 3.2.5.19.2 (and MS-CIFS 3.2.5.42) do not require -+ * an acknowledgment to be sent when the file has already been closed. -+ * check for server null, since can race with kill_sb calling tree disconnect. - */ -- if (!oplock_break_cancelled) { -- /* check for server null since can race with kill_sb calling tree disconnect */ -- if (tcon->ses && tcon->ses->server) { -- rc = tcon->ses->server->ops->oplock_response(tcon, persistent_fid, -- volatile_fid, net_fid, cinode); -- cifs_dbg(FYI, "Oplock release rc = %d\n", rc); -- } else -- pr_warn_once("lease break not sent for unmounted share\n"); -- } -+ spin_lock(&cinode->open_file_lock); -+ if (tcon->ses && tcon->ses->server && !oplock_break_cancelled && -+ !list_empty(&cinode->openFileList)) { -+ spin_unlock(&cinode->open_file_lock); -+ rc = tcon->ses->server->ops->oplock_response(tcon, persistent_fid, -+ volatile_fid, net_fid, cinode); -+ cifs_dbg(FYI, "Oplock release rc = %d\n", rc); -+ } else -+ spin_unlock(&cinode->open_file_lock); - - cifs_done_oplock_break(cinode); - } --- -2.39.2 - diff --git a/queue-6.4/soc-fsl-qe-fix-usb.c-build-errors.patch b/queue-6.4/soc-fsl-qe-fix-usb.c-build-errors.patch deleted file mode 100644 index f3573d0c558..00000000000 --- a/queue-6.4/soc-fsl-qe-fix-usb.c-build-errors.patch +++ /dev/null @@ -1,60 +0,0 @@ -From d5b8ae432043084a88186da7604b1d9bada17a08 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Sun, 21 May 2023 15:52:16 -0700 -Subject: soc/fsl/qe: fix usb.c build errors - -From: Randy Dunlap - -[ Upstream commit 7b1a78babd0d2cd27aa07255dee0c2d7ac0f31e3 ] - -Fix build errors in soc/fsl/qe/usb.c when QUICC_ENGINE is not set. -This happens when PPC_EP88XC is set, which selects CPM1 & CPM. -When CPM is set, USB_FSL_QE can be set without QUICC_ENGINE -being set. When USB_FSL_QE is set, QE_USB deafults to y, which -causes build errors when QUICC_ENGINE is not set. Making -QE_USB depend on QUICC_ENGINE prevents QE_USB from defaulting to y. - -Fixes these build errors: - -drivers/soc/fsl/qe/usb.o: in function `qe_usb_clock_set': -usb.c:(.text+0x1e): undefined reference to `qe_immr' -powerpc-linux-ld: usb.c:(.text+0x2a): undefined reference to `qe_immr' -powerpc-linux-ld: usb.c:(.text+0xbc): undefined reference to `qe_setbrg' -powerpc-linux-ld: usb.c:(.text+0xca): undefined reference to `cmxgcr_lock' -powerpc-linux-ld: usb.c:(.text+0xce): undefined reference to `cmxgcr_lock' - -Fixes: 5e41486c408e ("powerpc/QE: add support for QE USB clocks routing") -Signed-off-by: Randy Dunlap -Reported-by: kernel test robot -Link: https://lore.kernel.org/all/202301101500.pillNv6R-lkp@intel.com/ -Suggested-by: Michael Ellerman -Cc: Christophe Leroy -Cc: Leo Li -Cc: Masahiro Yamada -Cc: Nicolas Schier -Cc: Qiang Zhao -Cc: linuxppc-dev -Cc: linux-arm-kernel@lists.infradead.org -Cc: Kumar Gala -Acked-by: Nicolas Schier -Signed-off-by: Li Yang -Signed-off-by: Sasha Levin ---- - drivers/soc/fsl/qe/Kconfig | 1 + - 1 file changed, 1 insertion(+) - -diff --git a/drivers/soc/fsl/qe/Kconfig b/drivers/soc/fsl/qe/Kconfig -index e0d096607fefb..fa9ffbed0e929 100644 ---- a/drivers/soc/fsl/qe/Kconfig -+++ b/drivers/soc/fsl/qe/Kconfig -@@ -62,6 +62,7 @@ config QE_TDM - - config QE_USB - bool -+ depends on QUICC_ENGINE - default y if USB_FSL_QE - help - QE USB Controller support --- -2.39.2 - diff --git a/queue-6.4/soc-mediatek-svs-fix-mt8192-gpu-node-name.patch b/queue-6.4/soc-mediatek-svs-fix-mt8192-gpu-node-name.patch deleted file mode 100644 index 5ef2933ef94..00000000000 --- a/queue-6.4/soc-mediatek-svs-fix-mt8192-gpu-node-name.patch +++ /dev/null @@ -1,45 +0,0 @@ -From 7368b56ed49f38eb1565b5dcae2def61b9faa7ac Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Wed, 31 May 2023 14:35:30 +0800 -Subject: soc: mediatek: SVS: Fix MT8192 GPU node name - -From: Chen-Yu Tsai - -[ Upstream commit 95094495401bdf6a0649d220dfd095e6079b5e39 ] - -Device tree node names should be generic. The planned device node name -for the GPU, according to the bindings and posted DT changes, is "gpu", -not "mali". - -Fix the GPU node name in the SVS driver to follow. - -Fixes: 0bbb09b2af9d ("soc: mediatek: SVS: add mt8192 SVS GPU driver") -Signed-off-by: Chen-Yu Tsai -Reviewed-by: AngeloGioacchino Del Regno -Reviewed-by: Alexandre Mergnat -Link: https://lore.kernel.org/r/20230531063532.2240038-1-wenst@chromium.org -Signed-off-by: Matthias Brugger -Signed-off-by: Sasha Levin ---- - drivers/soc/mediatek/mtk-svs.c | 4 ++-- - 1 file changed, 2 insertions(+), 2 deletions(-) - -diff --git a/drivers/soc/mediatek/mtk-svs.c b/drivers/soc/mediatek/mtk-svs.c -index 81585733c8a99..3a2f97cd52720 100644 ---- a/drivers/soc/mediatek/mtk-svs.c -+++ b/drivers/soc/mediatek/mtk-svs.c -@@ -2061,9 +2061,9 @@ static int svs_mt8192_platform_probe(struct svs_platform *svsp) - svsb = &svsp->banks[idx]; - - if (svsb->type == SVSB_HIGH) -- svsb->opp_dev = svs_add_device_link(svsp, "mali"); -+ svsb->opp_dev = svs_add_device_link(svsp, "gpu"); - else if (svsb->type == SVSB_LOW) -- svsb->opp_dev = svs_get_subsys_device(svsp, "mali"); -+ svsb->opp_dev = svs_get_subsys_device(svsp, "gpu"); - - if (IS_ERR(svsb->opp_dev)) - return dev_err_probe(svsp->dev, PTR_ERR(svsb->opp_dev), --- -2.39.2 - diff --git a/queue-6.4/soc-qcom-geni-se-add-interfaces-geni_se_tx_init_dma-.patch b/queue-6.4/soc-qcom-geni-se-add-interfaces-geni_se_tx_init_dma-.patch deleted file mode 100644 index 1d39b79d387..00000000000 --- a/queue-6.4/soc-qcom-geni-se-add-interfaces-geni_se_tx_init_dma-.patch +++ /dev/null @@ -1,159 +0,0 @@ -From ff040c8b75f6d73c2ab1c6f46f5eba99f61454b9 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Wed, 17 May 2023 17:48:13 +0530 -Subject: soc: qcom: geni-se: Add interfaces geni_se_tx_init_dma() and - geni_se_rx_init_dma() - -From: Vijaya Krishna Nivarthi - -[ Upstream commit 6d6e57594957ee9131bc3802dfc8657ca6f78fee ] - -The geni_se_xx_dma_prep() interfaces necessarily do DMA mapping before -initiating DMA transfers. This is not suitable for spi where framework -is expected to handle map/unmap. - -Expose new interfaces geni_se_xx_init_dma() which do only DMA transfer. - -Signed-off-by: Vijaya Krishna Nivarthi -Reviewed-by: Douglas Anderson -Reviewed-by: Konrad Dybcio -Link: https://lore.kernel.org/r/1684325894-30252-2-git-send-email-quic_vnivarth@quicinc.com -Signed-off-by: Mark Brown -Stable-dep-of: 3a76c7ca9e77 ("spi: spi-geni-qcom: Do not do DMA map/unmap inside driver, use framework instead") -Signed-off-by: Sasha Levin ---- - drivers/soc/qcom/qcom-geni-se.c | 67 +++++++++++++++++++++++--------- - include/linux/soc/qcom/geni-se.h | 4 ++ - 2 files changed, 53 insertions(+), 18 deletions(-) - -diff --git a/drivers/soc/qcom/qcom-geni-se.c b/drivers/soc/qcom/qcom-geni-se.c -index 795a2e1d59b3a..dd50a255fa6cb 100644 ---- a/drivers/soc/qcom/qcom-geni-se.c -+++ b/drivers/soc/qcom/qcom-geni-se.c -@@ -682,6 +682,30 @@ EXPORT_SYMBOL(geni_se_clk_freq_match); - #define GENI_SE_DMA_EOT_EN BIT(1) - #define GENI_SE_DMA_AHB_ERR_EN BIT(2) - #define GENI_SE_DMA_EOT_BUF BIT(0) -+ -+/** -+ * geni_se_tx_init_dma() - Initiate TX DMA transfer on the serial engine -+ * @se: Pointer to the concerned serial engine. -+ * @iova: Mapped DMA address. -+ * @len: Length of the TX buffer. -+ * -+ * This function is used to initiate DMA TX transfer. -+ */ -+void geni_se_tx_init_dma(struct geni_se *se, dma_addr_t iova, size_t len) -+{ -+ u32 val; -+ -+ val = GENI_SE_DMA_DONE_EN; -+ val |= GENI_SE_DMA_EOT_EN; -+ val |= GENI_SE_DMA_AHB_ERR_EN; -+ writel_relaxed(val, se->base + SE_DMA_TX_IRQ_EN_SET); -+ writel_relaxed(lower_32_bits(iova), se->base + SE_DMA_TX_PTR_L); -+ writel_relaxed(upper_32_bits(iova), se->base + SE_DMA_TX_PTR_H); -+ writel_relaxed(GENI_SE_DMA_EOT_BUF, se->base + SE_DMA_TX_ATTR); -+ writel(len, se->base + SE_DMA_TX_LEN); -+} -+EXPORT_SYMBOL(geni_se_tx_init_dma); -+ - /** - * geni_se_tx_dma_prep() - Prepare the serial engine for TX DMA transfer - * @se: Pointer to the concerned serial engine. -@@ -697,7 +721,6 @@ int geni_se_tx_dma_prep(struct geni_se *se, void *buf, size_t len, - dma_addr_t *iova) - { - struct geni_wrapper *wrapper = se->wrapper; -- u32 val; - - if (!wrapper) - return -EINVAL; -@@ -706,17 +729,34 @@ int geni_se_tx_dma_prep(struct geni_se *se, void *buf, size_t len, - if (dma_mapping_error(wrapper->dev, *iova)) - return -EIO; - -+ geni_se_tx_init_dma(se, *iova, len); -+ return 0; -+} -+EXPORT_SYMBOL(geni_se_tx_dma_prep); -+ -+/** -+ * geni_se_rx_init_dma() - Initiate RX DMA transfer on the serial engine -+ * @se: Pointer to the concerned serial engine. -+ * @iova: Mapped DMA address. -+ * @len: Length of the RX buffer. -+ * -+ * This function is used to initiate DMA RX transfer. -+ */ -+void geni_se_rx_init_dma(struct geni_se *se, dma_addr_t iova, size_t len) -+{ -+ u32 val; -+ - val = GENI_SE_DMA_DONE_EN; - val |= GENI_SE_DMA_EOT_EN; - val |= GENI_SE_DMA_AHB_ERR_EN; -- writel_relaxed(val, se->base + SE_DMA_TX_IRQ_EN_SET); -- writel_relaxed(lower_32_bits(*iova), se->base + SE_DMA_TX_PTR_L); -- writel_relaxed(upper_32_bits(*iova), se->base + SE_DMA_TX_PTR_H); -- writel_relaxed(GENI_SE_DMA_EOT_BUF, se->base + SE_DMA_TX_ATTR); -- writel(len, se->base + SE_DMA_TX_LEN); -- return 0; -+ writel_relaxed(val, se->base + SE_DMA_RX_IRQ_EN_SET); -+ writel_relaxed(lower_32_bits(iova), se->base + SE_DMA_RX_PTR_L); -+ writel_relaxed(upper_32_bits(iova), se->base + SE_DMA_RX_PTR_H); -+ /* RX does not have EOT buffer type bit. So just reset RX_ATTR */ -+ writel_relaxed(0, se->base + SE_DMA_RX_ATTR); -+ writel(len, se->base + SE_DMA_RX_LEN); - } --EXPORT_SYMBOL(geni_se_tx_dma_prep); -+EXPORT_SYMBOL(geni_se_rx_init_dma); - - /** - * geni_se_rx_dma_prep() - Prepare the serial engine for RX DMA transfer -@@ -733,7 +773,6 @@ int geni_se_rx_dma_prep(struct geni_se *se, void *buf, size_t len, - dma_addr_t *iova) - { - struct geni_wrapper *wrapper = se->wrapper; -- u32 val; - - if (!wrapper) - return -EINVAL; -@@ -742,15 +781,7 @@ int geni_se_rx_dma_prep(struct geni_se *se, void *buf, size_t len, - if (dma_mapping_error(wrapper->dev, *iova)) - return -EIO; - -- val = GENI_SE_DMA_DONE_EN; -- val |= GENI_SE_DMA_EOT_EN; -- val |= GENI_SE_DMA_AHB_ERR_EN; -- writel_relaxed(val, se->base + SE_DMA_RX_IRQ_EN_SET); -- writel_relaxed(lower_32_bits(*iova), se->base + SE_DMA_RX_PTR_L); -- writel_relaxed(upper_32_bits(*iova), se->base + SE_DMA_RX_PTR_H); -- /* RX does not have EOT buffer type bit. So just reset RX_ATTR */ -- writel_relaxed(0, se->base + SE_DMA_RX_ATTR); -- writel(len, se->base + SE_DMA_RX_LEN); -+ geni_se_rx_init_dma(se, *iova, len); - return 0; - } - EXPORT_SYMBOL(geni_se_rx_dma_prep); -diff --git a/include/linux/soc/qcom/geni-se.h b/include/linux/soc/qcom/geni-se.h -index c55a0bc8cb0e9..821a19135bb66 100644 ---- a/include/linux/soc/qcom/geni-se.h -+++ b/include/linux/soc/qcom/geni-se.h -@@ -490,9 +490,13 @@ int geni_se_clk_freq_match(struct geni_se *se, unsigned long req_freq, - unsigned int *index, unsigned long *res_freq, - bool exact); - -+void geni_se_tx_init_dma(struct geni_se *se, dma_addr_t iova, size_t len); -+ - int geni_se_tx_dma_prep(struct geni_se *se, void *buf, size_t len, - dma_addr_t *iova); - -+void geni_se_rx_init_dma(struct geni_se *se, dma_addr_t iova, size_t len); -+ - int geni_se_rx_dma_prep(struct geni_se *se, void *buf, size_t len, - dma_addr_t *iova); - --- -2.39.2 - diff --git a/queue-6.4/spi-dw-round-of-n_bytes-to-power-of-2.patch b/queue-6.4/spi-dw-round-of-n_bytes-to-power-of-2.patch deleted file mode 100644 index e04adcbab84..00000000000 --- a/queue-6.4/spi-dw-round-of-n_bytes-to-power-of-2.patch +++ /dev/null @@ -1,59 +0,0 @@ -From 2b3caccea90249654cf75c3ce19b780f1a7294b3 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Fri, 12 May 2023 10:47:45 +0000 -Subject: spi: dw: Round of n_bytes to power of 2 - -From: Joy Chakraborty - -[ Upstream commit 9f34baf67e4d08908fd94ff29c825bb673295336 ] - -n_bytes variable in the driver represents the number of bytes per word -that needs to be sent/copied to fifo. Bits/word can be between 8 and 32 -bits from the client but in memory they are a power of 2, same is mentioned -in spi.h header: -" - * @bits_per_word: Data transfers involve one or more words; word sizes - * like eight or 12 bits are common. In-memory wordsizes are - * powers of two bytes (e.g. 20 bit samples use 32 bits). - * This may be changed by the device's driver, or left at the - * default (0) indicating protocol words are eight bit bytes. - * The spi_transfer.bits_per_word can override this for each transfer. -" - -Hence, round of n_bytes to a power of 2 to avoid values like 3 which -would generate unalligned/odd accesses to memory/fifo. - -* tested on Baikal-T1 based system with DW SPI-looped back interface -transferring a chunk of data with DFS:8,12,16. - -Fixes: a51acc2400d4 ("spi: dw: Add support for 32-bits max xfer size") -Suggested-by: Andy Shevchenko ---- - drivers/spi/spi-dw-core.c | 5 ++++- - 1 file changed, 4 insertions(+), 1 deletion(-) - -diff --git a/drivers/spi/spi-dw-core.c b/drivers/spi/spi-dw-core.c -index ae3108c70f508..7778b19bcb6c6 100644 ---- a/drivers/spi/spi-dw-core.c -+++ b/drivers/spi/spi-dw-core.c -@@ -426,7 +426,10 @@ static int dw_spi_transfer_one(struct spi_controller *master, - int ret; - - dws->dma_mapped = 0; -- dws->n_bytes = DIV_ROUND_UP(transfer->bits_per_word, BITS_PER_BYTE); -+ dws->n_bytes = -+ roundup_pow_of_two(DIV_ROUND_UP(transfer->bits_per_word, -+ BITS_PER_BYTE)); -+ - dws->tx = (void *)transfer->tx_buf; - dws->tx_len = transfer->len / dws->n_bytes; - dws->rx = transfer->rx_buf; --- -2.39.2 - diff --git a/queue-6.4/spi-spi-geni-qcom-correct-cs_toggle-bit-in-spi_trans.patch b/queue-6.4/spi-spi-geni-qcom-correct-cs_toggle-bit-in-spi_trans.patch deleted file mode 100644 index 0c92c17c12d..00000000000 --- a/queue-6.4/spi-spi-geni-qcom-correct-cs_toggle-bit-in-spi_trans.patch +++ /dev/null @@ -1,44 +0,0 @@ -From 06a295616df20ece6effd59ed7240231822e4cfb Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Tue, 25 Apr 2023 14:12:08 +0530 -Subject: spi: spi-geni-qcom: Correct CS_TOGGLE bit in SPI_TRANS_CFG - -From: Vijaya Krishna Nivarthi - -[ Upstream commit 5fd7c99ecf45c8ee8a9b1268f0ffc91cc6271da2 ] - -The CS_TOGGLE bit when set is supposed to instruct FW to -toggle CS line between words. The driver with intent of -disabling this behaviour has been unsetting BIT(0). This has -not caused any trouble so far because the original BIT(1) -is untouched and BIT(0) likely wasn't being used. - -Correct this to prevent a potential future bug. - -Signed-off-by: Vijaya Krishna Nivarthi ---- - drivers/spi/spi-geni-qcom.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/drivers/spi/spi-geni-qcom.c b/drivers/spi/spi-geni-qcom.c -index b293428760bc6..08672a961fbbe 100644 ---- a/drivers/spi/spi-geni-qcom.c -+++ b/drivers/spi/spi-geni-qcom.c -@@ -35,7 +35,7 @@ - #define CS_DEMUX_OUTPUT_SEL GENMASK(3, 0) - - #define SE_SPI_TRANS_CFG 0x25c --#define CS_TOGGLE BIT(0) -+#define CS_TOGGLE BIT(1) - - #define SE_SPI_WORD_LEN 0x268 - #define WORD_LEN_MSK GENMASK(9, 0) --- -2.39.2 - diff --git a/queue-6.4/spi-spi-geni-qcom-do-not-do-dma-map-unmap-inside-dri.patch b/queue-6.4/spi-spi-geni-qcom-do-not-do-dma-map-unmap-inside-dri.patch deleted file mode 100644 index 17bbc23d372..00000000000 --- a/queue-6.4/spi-spi-geni-qcom-do-not-do-dma-map-unmap-inside-dri.patch +++ /dev/null @@ -1,229 +0,0 @@ -From c5dd8cf14883591aed2373e9974b5e1038950039 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Wed, 17 May 2023 17:48:14 +0530 -Subject: spi: spi-geni-qcom: Do not do DMA map/unmap inside driver, use - framework instead - -From: Vijaya Krishna Nivarthi - -[ Upstream commit 3a76c7ca9e77269dd10cf21465a055274cfa40c6 ] - -The spi geni driver in SE DMA mode, unlike GSI DMA, is not making use of -DMA mapping functionality available in the framework. -The driver does mapping internally which makes dma buffer fields available -in spi_transfer struct superfluous while requiring additional members in -spi_geni_master struct. - -Conform to the design by having framework handle map/unmap and do only -DMA transfer in the driver; this also simplifies code a bit. - -Fixes: e5f0dfa78ac7 ("spi: spi-geni-qcom: Add support for SE DMA mode") -Suggested-by: Douglas Anderson -Signed-off-by: Vijaya Krishna Nivarthi -Reviewed-by: Douglas Anderson -Acked-by: Konrad Dybcio -Link: https://lore.kernel.org/r/1684325894-30252-3-git-send-email-quic_vnivarth@quicinc.com -Signed-off-by: Mark Brown -Signed-off-by: Sasha Levin ---- - drivers/spi/spi-geni-qcom.c | 103 +++++++++++++++++------------------- - 1 file changed, 50 insertions(+), 53 deletions(-) - -diff --git a/drivers/spi/spi-geni-qcom.c b/drivers/spi/spi-geni-qcom.c -index 08672a961fbbe..26ce959d98dfa 100644 ---- a/drivers/spi/spi-geni-qcom.c -+++ b/drivers/spi/spi-geni-qcom.c -@@ -97,8 +97,6 @@ struct spi_geni_master { - struct dma_chan *tx; - struct dma_chan *rx; - int cur_xfer_mode; -- dma_addr_t tx_se_dma; -- dma_addr_t rx_se_dma; - }; - - static int get_spi_clk_cfg(unsigned int speed_hz, -@@ -174,7 +172,7 @@ static void handle_se_timeout(struct spi_master *spi, - unmap_if_dma: - if (mas->cur_xfer_mode == GENI_SE_DMA) { - if (xfer) { -- if (xfer->tx_buf && mas->tx_se_dma) { -+ if (xfer->tx_buf) { - spin_lock_irq(&mas->lock); - reinit_completion(&mas->tx_reset_done); - writel(1, se->base + SE_DMA_TX_FSM_RST); -@@ -182,9 +180,8 @@ static void handle_se_timeout(struct spi_master *spi, - time_left = wait_for_completion_timeout(&mas->tx_reset_done, HZ); - if (!time_left) - dev_err(mas->dev, "DMA TX RESET failed\n"); -- geni_se_tx_dma_unprep(se, mas->tx_se_dma, xfer->len); - } -- if (xfer->rx_buf && mas->rx_se_dma) { -+ if (xfer->rx_buf) { - spin_lock_irq(&mas->lock); - reinit_completion(&mas->rx_reset_done); - writel(1, se->base + SE_DMA_RX_FSM_RST); -@@ -192,7 +189,6 @@ static void handle_se_timeout(struct spi_master *spi, - time_left = wait_for_completion_timeout(&mas->rx_reset_done, HZ); - if (!time_left) - dev_err(mas->dev, "DMA RX RESET failed\n"); -- geni_se_rx_dma_unprep(se, mas->rx_se_dma, xfer->len); - } - } else { - /* -@@ -523,17 +519,36 @@ static int setup_gsi_xfer(struct spi_transfer *xfer, struct spi_geni_master *mas - return 1; - } - -+static u32 get_xfer_len_in_words(struct spi_transfer *xfer, -+ struct spi_geni_master *mas) -+{ -+ u32 len; -+ -+ if (!(mas->cur_bits_per_word % MIN_WORD_LEN)) -+ len = xfer->len * BITS_PER_BYTE / mas->cur_bits_per_word; -+ else -+ len = xfer->len / (mas->cur_bits_per_word / BITS_PER_BYTE + 1); -+ len &= TRANS_LEN_MSK; -+ -+ return len; -+} -+ - static bool geni_can_dma(struct spi_controller *ctlr, - struct spi_device *slv, struct spi_transfer *xfer) - { - struct spi_geni_master *mas = spi_master_get_devdata(slv->master); -+ u32 len, fifo_size; - -- /* -- * Return true if transfer needs to be mapped prior to -- * calling transfer_one which is the case only for GPI_DMA. -- * For SE_DMA mode, map/unmap is done in geni_se_*x_dma_prep. -- */ -- return mas->cur_xfer_mode == GENI_GPI_DMA; -+ if (mas->cur_xfer_mode == GENI_GPI_DMA) -+ return true; -+ -+ len = get_xfer_len_in_words(xfer, mas); -+ fifo_size = mas->tx_fifo_depth * mas->fifo_width_bits / mas->cur_bits_per_word; -+ -+ if (len > fifo_size) -+ return true; -+ else -+ return false; - } - - static int spi_geni_prepare_message(struct spi_master *spi, -@@ -774,7 +789,7 @@ static int setup_se_xfer(struct spi_transfer *xfer, - u16 mode, struct spi_master *spi) - { - u32 m_cmd = 0; -- u32 len, fifo_size; -+ u32 len; - struct geni_se *se = &mas->se; - int ret; - -@@ -806,11 +821,7 @@ static int setup_se_xfer(struct spi_transfer *xfer, - mas->tx_rem_bytes = 0; - mas->rx_rem_bytes = 0; - -- if (!(mas->cur_bits_per_word % MIN_WORD_LEN)) -- len = xfer->len * BITS_PER_BYTE / mas->cur_bits_per_word; -- else -- len = xfer->len / (mas->cur_bits_per_word / BITS_PER_BYTE + 1); -- len &= TRANS_LEN_MSK; -+ len = get_xfer_len_in_words(xfer, mas); - - mas->cur_xfer = xfer; - if (xfer->tx_buf) { -@@ -825,9 +836,20 @@ static int setup_se_xfer(struct spi_transfer *xfer, - mas->rx_rem_bytes = xfer->len; - } - -- /* Select transfer mode based on transfer length */ -- fifo_size = mas->tx_fifo_depth * mas->fifo_width_bits / mas->cur_bits_per_word; -- mas->cur_xfer_mode = (len <= fifo_size) ? GENI_SE_FIFO : GENI_SE_DMA; -+ /* -+ * Select DMA mode if sgt are present; and with only 1 entry -+ * This is not a serious limitation because the xfer buffers are -+ * expected to fit into in 1 entry almost always, and if any -+ * doesn't for any reason we fall back to FIFO mode anyway -+ */ -+ if (!xfer->tx_sg.nents && !xfer->rx_sg.nents) -+ mas->cur_xfer_mode = GENI_SE_FIFO; -+ else if (xfer->tx_sg.nents > 1 || xfer->rx_sg.nents > 1) { -+ dev_warn_once(mas->dev, "Doing FIFO, cannot handle tx_nents-%d, rx_nents-%d\n", -+ xfer->tx_sg.nents, xfer->rx_sg.nents); -+ mas->cur_xfer_mode = GENI_SE_FIFO; -+ } else -+ mas->cur_xfer_mode = GENI_SE_DMA; - geni_se_select_mode(se, mas->cur_xfer_mode); - - /* -@@ -838,35 +860,17 @@ static int setup_se_xfer(struct spi_transfer *xfer, - geni_se_setup_m_cmd(se, m_cmd, FRAGMENTATION); - - if (mas->cur_xfer_mode == GENI_SE_DMA) { -- if (m_cmd & SPI_RX_ONLY) { -- ret = geni_se_rx_dma_prep(se, xfer->rx_buf, -- xfer->len, &mas->rx_se_dma); -- if (ret) { -- dev_err(mas->dev, "Failed to setup Rx dma %d\n", ret); -- mas->rx_se_dma = 0; -- goto unlock_and_return; -- } -- } -- if (m_cmd & SPI_TX_ONLY) { -- ret = geni_se_tx_dma_prep(se, (void *)xfer->tx_buf, -- xfer->len, &mas->tx_se_dma); -- if (ret) { -- dev_err(mas->dev, "Failed to setup Tx dma %d\n", ret); -- mas->tx_se_dma = 0; -- if (m_cmd & SPI_RX_ONLY) { -- /* Unmap rx buffer if duplex transfer */ -- geni_se_rx_dma_unprep(se, mas->rx_se_dma, xfer->len); -- mas->rx_se_dma = 0; -- } -- goto unlock_and_return; -- } -- } -+ if (m_cmd & SPI_RX_ONLY) -+ geni_se_rx_init_dma(se, sg_dma_address(xfer->rx_sg.sgl), -+ sg_dma_len(xfer->rx_sg.sgl)); -+ if (m_cmd & SPI_TX_ONLY) -+ geni_se_tx_init_dma(se, sg_dma_address(xfer->tx_sg.sgl), -+ sg_dma_len(xfer->tx_sg.sgl)); - } else if (m_cmd & SPI_TX_ONLY) { - if (geni_spi_handle_tx(mas)) - writel(mas->tx_wm, se->base + SE_GENI_TX_WATERMARK_REG); - } - --unlock_and_return: - spin_unlock_irq(&mas->lock); - return ret; - } -@@ -967,14 +971,6 @@ static irqreturn_t geni_spi_isr(int irq, void *data) - if (dma_rx_status & RX_RESET_DONE) - complete(&mas->rx_reset_done); - if (!mas->tx_rem_bytes && !mas->rx_rem_bytes && xfer) { -- if (xfer->tx_buf && mas->tx_se_dma) { -- geni_se_tx_dma_unprep(se, mas->tx_se_dma, xfer->len); -- mas->tx_se_dma = 0; -- } -- if (xfer->rx_buf && mas->rx_se_dma) { -- geni_se_rx_dma_unprep(se, mas->rx_se_dma, xfer->len); -- mas->rx_se_dma = 0; -- } - spi_finalize_current_transfer(spi); - mas->cur_xfer = NULL; - } -@@ -1059,6 +1055,7 @@ static int spi_geni_probe(struct platform_device *pdev) - spi->bits_per_word_mask = SPI_BPW_RANGE_MASK(4, 32); - spi->num_chipselect = 4; - spi->max_speed_hz = 50000000; -+ spi->max_dma_len = 0xffff0; /* 24 bits for tx/rx dma length */ - spi->prepare_message = spi_geni_prepare_message; - spi->transfer_one = spi_geni_transfer_one; - spi->can_dma = geni_can_dma; --- -2.39.2 - diff --git a/queue-6.4/splice-don-t-call-file_accessed-in-copy_splice_read.patch b/queue-6.4/splice-don-t-call-file_accessed-in-copy_splice_read.patch deleted file mode 100644 index 3c9898e30ff..00000000000 --- a/queue-6.4/splice-don-t-call-file_accessed-in-copy_splice_read.patch +++ /dev/null @@ -1,39 +0,0 @@ -From 5261ba4375ba1c706a3075fce5020f0626fc3a61 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Wed, 14 Jun 2023 16:03:38 +0200 -Subject: splice: don't call file_accessed in copy_splice_read - -From: Christoph Hellwig - -[ Upstream commit 0b24be4691c9e6ea13ca70050d42a9f9032fa788 ] - -copy_splice_read calls into ->read_iter to read the data, which already -calls file_accessed. - -Fixes: 33b3b041543e ("splice: Add a func to do a splice from an O_DIRECT file without ITER_PIPE") -Signed-off-by: Christoph Hellwig -Reviewed-by: Johannes Thumshirn -Reviewed-by: Christian Brauner -Reviewed-by: David Howells -Link: https://lore.kernel.org/r/20230614140341.521331-2-hch@lst.de -Signed-off-by: Jens Axboe -Signed-off-by: Sasha Levin ---- - fs/splice.c | 1 - - 1 file changed, 1 deletion(-) - -diff --git a/fs/splice.c b/fs/splice.c -index 3e06611d19ae5..030e162985b5d 100644 ---- a/fs/splice.c -+++ b/fs/splice.c -@@ -355,7 +355,6 @@ ssize_t direct_splice_read(struct file *in, loff_t *ppos, - reclaim -= ret; - remain = ret; - *ppos = kiocb.ki_pos; -- file_accessed(in); - } else if (ret < 0) { - /* - * callers of ->splice_read() expect -EAGAIN on --- -2.39.2 - diff --git a/queue-6.4/splice-fix-filemap_splice_read-to-use-the-correct-in.patch b/queue-6.4/splice-fix-filemap_splice_read-to-use-the-correct-in.patch deleted file mode 100644 index ee5670b9abe..00000000000 --- a/queue-6.4/splice-fix-filemap_splice_read-to-use-the-correct-in.patch +++ /dev/null @@ -1,58 +0,0 @@ -From 05e74515e4592d1a531df9f02877b130c49e309f Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Mon, 22 May 2023 14:49:48 +0100 -Subject: splice: Fix filemap_splice_read() to use the correct inode - -From: David Howells - -[ Upstream commit c37222082f23c456664d1c3182a714670ab8f9a4 ] - -Fix filemap_splice_read() to use file->f_mapping->host, not file->f_inode, -as the source of the file size because in the case of a block device, -file->f_inode points to the block-special file (which is typically 0 -length) and not the backing store. - -Fixes: 07073eb01c5f ("splice: Add a func to do a splice from a buffered file without ITER_PIPE") -Signed-off-by: David Howells -Reviewed-by: Christoph Hellwig -Reviewed-by: Christian Brauner -cc: Steve French -cc: Jens Axboe -cc: Al Viro -cc: David Hildenbrand -cc: John Hubbard -cc: linux-mm@kvack.org -cc: linux-block@vger.kernel.org -cc: linux-fsdevel@vger.kernel.org -Link: https://lore.kernel.org/r/20230522135018.2742245-2-dhowells@redhat.com -Signed-off-by: Jens Axboe -Signed-off-by: Sasha Levin ---- - mm/filemap.c | 4 ++-- - 1 file changed, 2 insertions(+), 2 deletions(-) - -diff --git a/mm/filemap.c b/mm/filemap.c -index 83dda76d1fc36..8abce63b259c9 100644 ---- a/mm/filemap.c -+++ b/mm/filemap.c -@@ -2906,7 +2906,7 @@ ssize_t filemap_splice_read(struct file *in, loff_t *ppos, - do { - cond_resched(); - -- if (*ppos >= i_size_read(file_inode(in))) -+ if (*ppos >= i_size_read(in->f_mapping->host)) - break; - - iocb.ki_pos = *ppos; -@@ -2922,7 +2922,7 @@ ssize_t filemap_splice_read(struct file *in, loff_t *ppos, - * part of the page is not copied back to userspace (unless - * another truncate extends the file - this is desired though). - */ -- isize = i_size_read(file_inode(in)); -+ isize = i_size_read(in->f_mapping->host); - if (unlikely(*ppos >= isize)) - break; - end_offset = min_t(loff_t, isize, *ppos + len); --- -2.39.2 - diff --git a/queue-6.4/svcrdma-prevent-page-release-when-nothing-was-receiv.patch b/queue-6.4/svcrdma-prevent-page-release-when-nothing-was-receiv.patch deleted file mode 100644 index 7c03c2d93dd..00000000000 --- a/queue-6.4/svcrdma-prevent-page-release-when-nothing-was-receiv.patch +++ /dev/null @@ -1,53 +0,0 @@ -From 6c05d6b0e5e0732bc33a99c73cd4c28debfe77f7 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Mon, 12 Jun 2023 10:10:20 -0400 -Subject: svcrdma: Prevent page release when nothing was received - -From: Chuck Lever - -[ Upstream commit baf6d18b116b7dc84ed5e212c3a89f17cdc3f28c ] - -I noticed that svc_rqst_release_pages() was still unnecessarily -releasing a page when svc_rdma_recvfrom() returns zero. - -Fixes: a53d5cb0646a ("svcrdma: Avoid releasing a page in svc_xprt_release()") -Reviewed-by: Jeff Layton -Signed-off-by: Chuck Lever -Signed-off-by: Sasha Levin ---- - net/sunrpc/xprtrdma/svc_rdma_recvfrom.c | 12 ++++++------ - 1 file changed, 6 insertions(+), 6 deletions(-) - -diff --git a/net/sunrpc/xprtrdma/svc_rdma_recvfrom.c b/net/sunrpc/xprtrdma/svc_rdma_recvfrom.c -index a22fe7587fa6f..70207d8a318a4 100644 ---- a/net/sunrpc/xprtrdma/svc_rdma_recvfrom.c -+++ b/net/sunrpc/xprtrdma/svc_rdma_recvfrom.c -@@ -796,6 +796,12 @@ int svc_rdma_recvfrom(struct svc_rqst *rqstp) - struct svc_rdma_recv_ctxt *ctxt; - int ret; - -+ /* Prevent svc_xprt_release() from releasing pages in rq_pages -+ * when returning 0 or an error. -+ */ -+ rqstp->rq_respages = rqstp->rq_pages; -+ rqstp->rq_next_page = rqstp->rq_respages; -+ - rqstp->rq_xprt_ctxt = NULL; - - ctxt = NULL; -@@ -819,12 +825,6 @@ int svc_rdma_recvfrom(struct svc_rqst *rqstp) - DMA_FROM_DEVICE); - svc_rdma_build_arg_xdr(rqstp, ctxt); - -- /* Prevent svc_xprt_release from releasing pages in rq_pages -- * if we return 0 or an error. -- */ -- rqstp->rq_respages = rqstp->rq_pages; -- rqstp->rq_next_page = rqstp->rq_respages; -- - ret = svc_rdma_xdr_decode_req(&rqstp->rq_arg, ctxt); - if (ret < 0) - goto out_err; --- -2.39.2 - diff --git a/queue-6.4/thermal-drivers-qcom-tsens-v0_1-add-mdm9607-correcti.patch b/queue-6.4/thermal-drivers-qcom-tsens-v0_1-add-mdm9607-correcti.patch deleted file mode 100644 index d2112d0773f..00000000000 --- a/queue-6.4/thermal-drivers-qcom-tsens-v0_1-add-mdm9607-correcti.patch +++ /dev/null @@ -1,133 +0,0 @@ -From ab99761f8e4522d0a2ffeb7111bc200fdff6dd90 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Wed, 7 Jun 2023 12:47:46 +0200 -Subject: thermal/drivers/qcom/tsens-v0_1: Add mdm9607 correction offsets - -From: Stephan Gerhold - -[ Upstream commit b6f739da0070c36655118618a173a59fa14c7adc ] - -According to the msm-3.18 vendor kernel from Qualcomm, mdm9607 needs -"correction factors" to adjust for additional offsets observed after the -factory calibration values in the fuses [1, 2]. - -The fixed offsets should be applied unless there is a special -calibration mode value that indicates that no offsets are needed [3]. - -Note that the new calibration mode values are called differently in this -patch compared to the vendor kernel: - - TSENS_TWO_POINT_CALIB_N_WA -> ONE_PT_CALIB2_NO_OFFSET - - TSENS_TWO_POINT_CALIB_N_OFFSET_WA -> TWO_PT_CALIB_NO_OFFSET -This is because close inspection of the calibration function [3] reveals -that TSENS_TWO_POINT_CALIB_N_WA is actually a "one point" calibration -because the if statements skip all "point2" related code for it. - -[1]: https://git.codelinaro.org/clo/la/kernel/msm-3.18/-/commit/d9d2db1b82bf3f72f5de0803d55e6849eb5b671e -[2]: https://git.codelinaro.org/clo/la/kernel/msm-3.18/-/commit/d75aef53a760e8ff7bac54049d00c8b2ee1b193e -[3]: https://git.codelinaro.org/clo/la/kernel/msm-3.18/-/blob/LE.UM.4.3.2.r1-04200-9x07/drivers/thermal/msm-tsens.c#L2987-3136 - -Fixes: a2149ab815fc ("thermal/drivers/qcom/tsens-v0_1: Add support for MDM9607") -Reviewed-by: Konrad Dybcio -Reviewed-by: Dmitry Baryshkov -Signed-off-by: Stephan Gerhold -Signed-off-by: Daniel Lezcano -Link: https://lore.kernel.org/r/20230508-msm8909-tsens-v5-3-5eb632235ba7@kernkonzept.com -Signed-off-by: Sasha Levin ---- - drivers/thermal/qcom/tsens-v0_1.c | 11 +++++++++++ - drivers/thermal/qcom/tsens.c | 16 +++++++++++++++- - drivers/thermal/qcom/tsens.h | 4 ++++ - 3 files changed, 30 insertions(+), 1 deletion(-) - -diff --git a/drivers/thermal/qcom/tsens-v0_1.c b/drivers/thermal/qcom/tsens-v0_1.c -index e89a0da4b4e14..e9ce7b62b3818 100644 ---- a/drivers/thermal/qcom/tsens-v0_1.c -+++ b/drivers/thermal/qcom/tsens-v0_1.c -@@ -277,6 +277,17 @@ static int __init init_9607(struct tsens_priv *priv) - for (i = 0; i < priv->num_sensors; ++i) - priv->sensor[i].slope = 3000; - -+ priv->sensor[0].p1_calib_offset = 1; -+ priv->sensor[0].p2_calib_offset = 1; -+ priv->sensor[1].p1_calib_offset = -4; -+ priv->sensor[1].p2_calib_offset = -2; -+ priv->sensor[2].p1_calib_offset = 4; -+ priv->sensor[2].p2_calib_offset = 8; -+ priv->sensor[3].p1_calib_offset = -3; -+ priv->sensor[3].p2_calib_offset = -5; -+ priv->sensor[4].p1_calib_offset = -4; -+ priv->sensor[4].p2_calib_offset = -4; -+ - return init_common(priv); - } - -diff --git a/drivers/thermal/qcom/tsens.c b/drivers/thermal/qcom/tsens.c -index 1c457b55efb39..9dd5e4b709117 100644 ---- a/drivers/thermal/qcom/tsens.c -+++ b/drivers/thermal/qcom/tsens.c -@@ -134,10 +134,12 @@ int tsens_read_calibration(struct tsens_priv *priv, int shift, u32 *p1, u32 *p2, - p1[i] = p1[i] + (base1 << shift); - break; - case TWO_PT_CALIB: -+ case TWO_PT_CALIB_NO_OFFSET: - for (i = 0; i < priv->num_sensors; i++) - p2[i] = (p2[i] + base2) << shift; - fallthrough; - case ONE_PT_CALIB2: -+ case ONE_PT_CALIB2_NO_OFFSET: - for (i = 0; i < priv->num_sensors; i++) - p1[i] = (p1[i] + base1) << shift; - break; -@@ -149,6 +151,18 @@ int tsens_read_calibration(struct tsens_priv *priv, int shift, u32 *p1, u32 *p2, - } - } - -+ /* Apply calibration offset workaround except for _NO_OFFSET modes */ -+ switch (mode) { -+ case TWO_PT_CALIB: -+ for (i = 0; i < priv->num_sensors; i++) -+ p2[i] += priv->sensor[i].p2_calib_offset; -+ fallthrough; -+ case ONE_PT_CALIB2: -+ for (i = 0; i < priv->num_sensors; i++) -+ p1[i] += priv->sensor[i].p1_calib_offset; -+ break; -+ } -+ - return mode; - } - -@@ -254,7 +268,7 @@ void compute_intercept_slope(struct tsens_priv *priv, u32 *p1, - - if (!priv->sensor[i].slope) - priv->sensor[i].slope = SLOPE_DEFAULT; -- if (mode == TWO_PT_CALIB) { -+ if (mode == TWO_PT_CALIB || mode == TWO_PT_CALIB_NO_OFFSET) { - /* - * slope (m) = adc_code2 - adc_code1 (y2 - y1)/ - * temp_120_degc - temp_30_degc (x2 - x1) -diff --git a/drivers/thermal/qcom/tsens.h b/drivers/thermal/qcom/tsens.h -index 433eba370998c..1cd8f4fe0971f 100644 ---- a/drivers/thermal/qcom/tsens.h -+++ b/drivers/thermal/qcom/tsens.h -@@ -10,6 +10,8 @@ - #define ONE_PT_CALIB 0x1 - #define ONE_PT_CALIB2 0x2 - #define TWO_PT_CALIB 0x3 -+#define ONE_PT_CALIB2_NO_OFFSET 0x6 -+#define TWO_PT_CALIB_NO_OFFSET 0x7 - #define CAL_DEGC_PT1 30 - #define CAL_DEGC_PT2 120 - #define SLOPE_FACTOR 1000 -@@ -57,6 +59,8 @@ struct tsens_sensor { - unsigned int hw_id; - int slope; - u32 status; -+ int p1_calib_offset; -+ int p2_calib_offset; - }; - - /** --- -2.39.2 - diff --git a/queue-6.4/thermal-drivers-qcom-tsens-v0_1-add-support-for-msm8.patch b/queue-6.4/thermal-drivers-qcom-tsens-v0_1-add-support-for-msm8.patch deleted file mode 100644 index 416e9df12dd..00000000000 --- a/queue-6.4/thermal-drivers-qcom-tsens-v0_1-add-support-for-msm8.patch +++ /dev/null @@ -1,110 +0,0 @@ -From 80878468ef2495a7989c255314758673ec8f7f46 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Sun, 7 May 2023 23:12:21 +0300 -Subject: thermal/drivers/qcom/tsens-v0_1: Add support for MSM8226 -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -From: Matti Lehtimäki - -[ Upstream commit 598e1afca47fdbb302ce8d288b06bcc8728efc6c ] - -The MSM8226 TSENS IP has 6 thermal sensors in a TSENS v0.1 block. -The thermal sensors use non-standard slope values. - -Signed-off-by: Matti Lehtimäki -Reviewed-by: Dmitry Baryshkov -Reviewed-by: Luca Weiss -Signed-off-by: Daniel Lezcano -Link: https://lore.kernel.org/r/20230507201225.89694-4-matti.lehtimaki@gmail.com -Stable-dep-of: 6812d1dfbca9 ("thermal/drivers/qcom/tsens-v0_1: Fix mdm9607 slope values") -Signed-off-by: Sasha Levin ---- - drivers/thermal/qcom/tsens-v0_1.c | 27 ++++++++++++++++++++++++++- - drivers/thermal/qcom/tsens.c | 3 +++ - drivers/thermal/qcom/tsens.h | 2 +- - 3 files changed, 30 insertions(+), 2 deletions(-) - -diff --git a/drivers/thermal/qcom/tsens-v0_1.c b/drivers/thermal/qcom/tsens-v0_1.c -index e89c6f39a3aea..ad57ab94546b0 100644 ---- a/drivers/thermal/qcom/tsens-v0_1.c -+++ b/drivers/thermal/qcom/tsens-v0_1.c -@@ -243,6 +243,18 @@ static int calibrate_8974(struct tsens_priv *priv) - return 0; - } - -+static int __init init_8226(struct tsens_priv *priv) -+{ -+ priv->sensor[0].slope = 2901; -+ priv->sensor[1].slope = 2846; -+ priv->sensor[2].slope = 3038; -+ priv->sensor[3].slope = 2955; -+ priv->sensor[4].slope = 2901; -+ priv->sensor[5].slope = 2846; -+ -+ return init_common(priv); -+} -+ - static int __init init_8939(struct tsens_priv *priv) { - priv->sensor[0].slope = 2911; - priv->sensor[1].slope = 2789; -@@ -258,7 +270,7 @@ static int __init init_8939(struct tsens_priv *priv) { - return init_common(priv); - } - --/* v0.1: 8916, 8939, 8974, 9607 */ -+/* v0.1: 8226, 8916, 8939, 8974, 9607 */ - - static struct tsens_features tsens_v0_1_feat = { - .ver_major = VER_0_1, -@@ -313,6 +325,19 @@ static const struct tsens_ops ops_v0_1 = { - .get_temp = get_temp_common, - }; - -+static const struct tsens_ops ops_8226 = { -+ .init = init_8226, -+ .calibrate = tsens_calibrate_common, -+ .get_temp = get_temp_common, -+}; -+ -+struct tsens_plat_data data_8226 = { -+ .num_sensors = 6, -+ .ops = &ops_8226, -+ .feat = &tsens_v0_1_feat, -+ .fields = tsens_v0_1_regfields, -+}; -+ - static const struct tsens_ops ops_8916 = { - .init = init_common, - .calibrate = calibrate_8916, -diff --git a/drivers/thermal/qcom/tsens.c b/drivers/thermal/qcom/tsens.c -index d3218127e617d..1c457b55efb39 100644 ---- a/drivers/thermal/qcom/tsens.c -+++ b/drivers/thermal/qcom/tsens.c -@@ -1095,6 +1095,9 @@ static const struct of_device_id tsens_table[] = { - }, { - .compatible = "qcom,mdm9607-tsens", - .data = &data_9607, -+ }, { -+ .compatible = "qcom,msm8226-tsens", -+ .data = &data_8226, - }, { - .compatible = "qcom,msm8916-tsens", - .data = &data_8916, -diff --git a/drivers/thermal/qcom/tsens.h b/drivers/thermal/qcom/tsens.h -index dba9cd38f637c..433eba370998c 100644 ---- a/drivers/thermal/qcom/tsens.h -+++ b/drivers/thermal/qcom/tsens.h -@@ -635,7 +635,7 @@ int get_temp_common(const struct tsens_sensor *s, int *temp); - extern struct tsens_plat_data data_8960; - - /* TSENS v0.1 targets */ --extern struct tsens_plat_data data_8916, data_8939, data_8974, data_9607; -+extern struct tsens_plat_data data_8226, data_8916, data_8939, data_8974, data_9607; - - /* TSENS v1 targets */ - extern struct tsens_plat_data data_tsens_v1, data_8976, data_8956; --- -2.39.2 - diff --git a/queue-6.4/thermal-drivers-qcom-tsens-v0_1-fix-mdm9607-slope-va.patch b/queue-6.4/thermal-drivers-qcom-tsens-v0_1-fix-mdm9607-slope-va.patch deleted file mode 100644 index 7b346b0e507..00000000000 --- a/queue-6.4/thermal-drivers-qcom-tsens-v0_1-fix-mdm9607-slope-va.patch +++ /dev/null @@ -1,67 +0,0 @@ -From 5b5190f387a9f7de0335563cb2aa3b048a3892ae Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Wed, 7 Jun 2023 12:47:45 +0200 -Subject: thermal/drivers/qcom/tsens-v0_1: Fix mdm9607 slope values - -From: Stephan Gerhold - -[ Upstream commit 6812d1dfbca99cd5032683354bf50e0002b2aa02 ] - -According to the msm-3.18 vendor kernel from Qualcomm [1], mdm9607 uses -a non-standard slope value of 3000 (instead of 3200) for all sensors. -Fill it properly similar to the 8939 code added recently. - -[1]: https://git.codelinaro.org/clo/la/kernel/msm-3.18/-/blob/LE.UM.4.3.2.r1-04200-9x07/arch/arm/boot/dts/qcom/mdm9607.dtsi#L875 - -Fixes: a2149ab815fc ("thermal/drivers/qcom/tsens-v0_1: Add support for MDM9607") -Reviewed-by: Konrad Dybcio -Reviewed-by: Dmitry Baryshkov -Signed-off-by: Stephan Gerhold -Signed-off-by: Daniel Lezcano -Link: https://lore.kernel.org/r/20230508-msm8909-tsens-v5-2-5eb632235ba7@kernkonzept.com -Signed-off-by: Sasha Levin ---- - drivers/thermal/qcom/tsens-v0_1.c | 18 +++++++++++++++++- - 1 file changed, 17 insertions(+), 1 deletion(-) - -diff --git a/drivers/thermal/qcom/tsens-v0_1.c b/drivers/thermal/qcom/tsens-v0_1.c -index ad57ab94546b0..e89a0da4b4e14 100644 ---- a/drivers/thermal/qcom/tsens-v0_1.c -+++ b/drivers/thermal/qcom/tsens-v0_1.c -@@ -270,6 +270,16 @@ static int __init init_8939(struct tsens_priv *priv) { - return init_common(priv); - } - -+static int __init init_9607(struct tsens_priv *priv) -+{ -+ int i; -+ -+ for (i = 0; i < priv->num_sensors; ++i) -+ priv->sensor[i].slope = 3000; -+ -+ return init_common(priv); -+} -+ - /* v0.1: 8226, 8916, 8939, 8974, 9607 */ - - static struct tsens_features tsens_v0_1_feat = { -@@ -381,9 +391,15 @@ struct tsens_plat_data data_8974 = { - .fields = tsens_v0_1_regfields, - }; - -+static const struct tsens_ops ops_9607 = { -+ .init = init_9607, -+ .calibrate = tsens_calibrate_common, -+ .get_temp = get_temp_common, -+}; -+ - struct tsens_plat_data data_9607 = { - .num_sensors = 5, -- .ops = &ops_v0_1, -+ .ops = &ops_9607, - .feat = &tsens_v0_1_feat, - .fields = tsens_v0_1_regfields, - }; --- -2.39.2 - diff --git a/queue-6.4/thermal-drivers-qoriq-only-enable-supported-sensors.patch b/queue-6.4/thermal-drivers-qoriq-only-enable-supported-sensors.patch deleted file mode 100644 index 2f01779cc4d..00000000000 --- a/queue-6.4/thermal-drivers-qoriq-only-enable-supported-sensors.patch +++ /dev/null @@ -1,95 +0,0 @@ -From 75a84b21d94d064ebf360858d107a073e68acf4d Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Tue, 16 May 2023 16:37:45 +0800 -Subject: thermal/drivers/qoriq: Only enable supported sensors - -From: Peng Fan - -[ Upstream commit 9301575df2509ecf8bd66f601046afaff606b1d5 ] - -There are MAX 16 sensors, but not all of them supported. Such as -i.MX8MQ, there are only 3 sensors. Enabling all 16 sensors will -touch reserved bits from i.MX8MQ reference mannual, and TMU will stuck, -temperature will not update anymore. - -Fixes: 45038e03d633 ("thermal: qoriq: Enable all sensors before registering them") -Signed-off-by: Peng Fan -Signed-off-by: Daniel Lezcano -Link: https://lore.kernel.org/r/20230516083746.63436-3-peng.fan@oss.nxp.com -Signed-off-by: Sasha Levin ---- - drivers/thermal/qoriq_thermal.c | 30 +++++++++++++++++++----------- - 1 file changed, 19 insertions(+), 11 deletions(-) - -diff --git a/drivers/thermal/qoriq_thermal.c b/drivers/thermal/qoriq_thermal.c -index e58756323457e..3eca7085d9efe 100644 ---- a/drivers/thermal/qoriq_thermal.c -+++ b/drivers/thermal/qoriq_thermal.c -@@ -31,7 +31,6 @@ - #define TMR_DISABLE 0x0 - #define TMR_ME 0x80000000 - #define TMR_ALPF 0x0c000000 --#define TMR_MSITE_ALL GENMASK(15, 0) - - #define REGS_TMTMIR 0x008 /* Temperature measurement interval Register */ - #define TMTMIR_DEFAULT 0x0000000f -@@ -105,6 +104,11 @@ static int tmu_get_temp(struct thermal_zone_device *tz, int *temp) - * within sensor range. TEMP is an 9 bit value representing - * temperature in KelVin. - */ -+ -+ regmap_read(qdata->regmap, REGS_TMR, &val); -+ if (!(val & TMR_ME)) -+ return -EAGAIN; -+ - if (regmap_read_poll_timeout(qdata->regmap, - REGS_TRITSR(qsensor->id), - val, -@@ -128,15 +132,7 @@ static const struct thermal_zone_device_ops tmu_tz_ops = { - static int qoriq_tmu_register_tmu_zone(struct device *dev, - struct qoriq_tmu_data *qdata) - { -- int id; -- -- if (qdata->ver == TMU_VER1) { -- regmap_write(qdata->regmap, REGS_TMR, -- TMR_MSITE_ALL | TMR_ME | TMR_ALPF); -- } else { -- regmap_write(qdata->regmap, REGS_V2_TMSR, TMR_MSITE_ALL); -- regmap_write(qdata->regmap, REGS_TMR, TMR_ME | TMR_ALPF_V2); -- } -+ int id, sites = 0; - - for (id = 0; id < SITES_MAX; id++) { - struct thermal_zone_device *tzd; -@@ -153,14 +149,26 @@ static int qoriq_tmu_register_tmu_zone(struct device *dev, - if (ret == -ENODEV) - continue; - -- regmap_write(qdata->regmap, REGS_TMR, TMR_DISABLE); - return ret; - } - -+ if (qdata->ver == TMU_VER1) -+ sites |= 0x1 << (15 - id); -+ else -+ sites |= 0x1 << id; -+ - if (devm_thermal_add_hwmon_sysfs(dev, tzd)) - dev_warn(dev, - "Failed to add hwmon sysfs attributes\n"); -+ } - -+ if (sites) { -+ if (qdata->ver == TMU_VER1) { -+ regmap_write(qdata->regmap, REGS_TMR, TMR_ME | TMR_ALPF | sites); -+ } else { -+ regmap_write(qdata->regmap, REGS_V2_TMSR, sites); -+ regmap_write(qdata->regmap, REGS_TMR, TMR_ME | TMR_ALPF_V2); -+ } - } - - return 0; --- -2.39.2 - diff --git a/queue-6.4/thermal-drivers-sun8i-fix-some-error-handling-paths-.patch b/queue-6.4/thermal-drivers-sun8i-fix-some-error-handling-paths-.patch deleted file mode 100644 index 63ac2be5781..00000000000 --- a/queue-6.4/thermal-drivers-sun8i-fix-some-error-handling-paths-.patch +++ /dev/null @@ -1,144 +0,0 @@ -From 573fc6433e63ca4c12114df3ddfbe99906bcba2d Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Sun, 14 May 2023 20:46:05 +0200 -Subject: thermal/drivers/sun8i: Fix some error handling paths in - sun8i_ths_probe() - -From: Christophe JAILLET - -[ Upstream commit 89382022b370dfd34eaae9c863baa123fcd4d132 ] - -Should an error occur after calling sun8i_ths_resource_init() in the probe -function, some resources need to be released, as already done in the -.remove() function. - -Switch to the devm_clk_get_enabled() helper and add a new devm_action to -turn sun8i_ths_resource_init() into a fully managed function. - -Move the place where reset_control_deassert() is called so that the -recommended order of reset release/clock enable steps is kept. -A64 manual states that: - - 3.3.6.4. Gating and reset - - Make sure that the reset signal has been released before the release of - module clock gating; - -This fixes the issue and removes some LoC at the same time. - -Fixes: dccc5c3b6f30 ("thermal/drivers/sun8i: Add thermal driver for H6/H5/H3/A64/A83T/R40") -Signed-off-by: Christophe JAILLET -Acked-by: Maxime Ripard -Signed-off-by: Daniel Lezcano -Link: https://lore.kernel.org/r/a8ae84bd2dc4b55fe428f8e20f31438bf8bb6762.1684089931.git.christophe.jaillet@wanadoo.fr -Signed-off-by: Sasha Levin ---- - drivers/thermal/sun8i_thermal.c | 55 +++++++++++---------------------- - 1 file changed, 18 insertions(+), 37 deletions(-) - -diff --git a/drivers/thermal/sun8i_thermal.c b/drivers/thermal/sun8i_thermal.c -index 793ddce72132f..d4d241686c810 100644 ---- a/drivers/thermal/sun8i_thermal.c -+++ b/drivers/thermal/sun8i_thermal.c -@@ -319,6 +319,11 @@ static int sun8i_ths_calibrate(struct ths_device *tmdev) - return ret; - } - -+static void sun8i_ths_reset_control_assert(void *data) -+{ -+ reset_control_assert(data); -+} -+ - static int sun8i_ths_resource_init(struct ths_device *tmdev) - { - struct device *dev = tmdev->dev; -@@ -339,47 +344,35 @@ static int sun8i_ths_resource_init(struct ths_device *tmdev) - if (IS_ERR(tmdev->reset)) - return PTR_ERR(tmdev->reset); - -- tmdev->bus_clk = devm_clk_get(&pdev->dev, "bus"); -+ ret = reset_control_deassert(tmdev->reset); -+ if (ret) -+ return ret; -+ -+ ret = devm_add_action_or_reset(dev, sun8i_ths_reset_control_assert, -+ tmdev->reset); -+ if (ret) -+ return ret; -+ -+ tmdev->bus_clk = devm_clk_get_enabled(&pdev->dev, "bus"); - if (IS_ERR(tmdev->bus_clk)) - return PTR_ERR(tmdev->bus_clk); - } - - if (tmdev->chip->has_mod_clk) { -- tmdev->mod_clk = devm_clk_get(&pdev->dev, "mod"); -+ tmdev->mod_clk = devm_clk_get_enabled(&pdev->dev, "mod"); - if (IS_ERR(tmdev->mod_clk)) - return PTR_ERR(tmdev->mod_clk); - } - -- ret = reset_control_deassert(tmdev->reset); -- if (ret) -- return ret; -- -- ret = clk_prepare_enable(tmdev->bus_clk); -- if (ret) -- goto assert_reset; -- - ret = clk_set_rate(tmdev->mod_clk, 24000000); - if (ret) -- goto bus_disable; -- -- ret = clk_prepare_enable(tmdev->mod_clk); -- if (ret) -- goto bus_disable; -+ return ret; - - ret = sun8i_ths_calibrate(tmdev); - if (ret) -- goto mod_disable; -+ return ret; - - return 0; -- --mod_disable: -- clk_disable_unprepare(tmdev->mod_clk); --bus_disable: -- clk_disable_unprepare(tmdev->bus_clk); --assert_reset: -- reset_control_assert(tmdev->reset); -- -- return ret; - } - - static int sun8i_h3_thermal_init(struct ths_device *tmdev) -@@ -530,17 +523,6 @@ static int sun8i_ths_probe(struct platform_device *pdev) - return 0; - } - --static int sun8i_ths_remove(struct platform_device *pdev) --{ -- struct ths_device *tmdev = platform_get_drvdata(pdev); -- -- clk_disable_unprepare(tmdev->mod_clk); -- clk_disable_unprepare(tmdev->bus_clk); -- reset_control_assert(tmdev->reset); -- -- return 0; --} -- - static const struct ths_thermal_chip sun8i_a83t_ths = { - .sensor_num = 3, - .scale = 705, -@@ -642,7 +624,6 @@ MODULE_DEVICE_TABLE(of, of_ths_match); - - static struct platform_driver ths_driver = { - .probe = sun8i_ths_probe, -- .remove = sun8i_ths_remove, - .driver = { - .name = "sun8i-thermal", - .of_match_table = of_ths_match, --- -2.39.2 - diff --git a/queue-6.4/tick-rcu-fix-bogus-ratelimit-condition.patch b/queue-6.4/tick-rcu-fix-bogus-ratelimit-condition.patch deleted file mode 100644 index 08ddf8c7fc4..00000000000 --- a/queue-6.4/tick-rcu-fix-bogus-ratelimit-condition.patch +++ /dev/null @@ -1,46 +0,0 @@ -From 3ffc888825b112e0db8f61a93c6629aaf13da7b1 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Fri, 5 May 2023 00:12:53 +0800 -Subject: tick/rcu: Fix bogus ratelimit condition - -From: Wen Yang - -[ Upstream commit a7e282c77785c7eabf98836431b1f029481085ad ] - -The ratelimit logic in report_idle_softirq() is broken because the -exit condition is always true: - - static int ratelimit; - - if (ratelimit < 10) - return false; ---> always returns here - - ratelimit++; ---> no chance to run - -Make it check for >= 10 instead. - -Fixes: 0345691b24c0 ("tick/rcu: Stop allowing RCU_SOFTIRQ in idle") -Signed-off-by: Wen Yang -Signed-off-by: Thomas Gleixner -Link: https://lore.kernel.org/r/tencent_5AAA3EEAB42095C9B7740BE62FBF9A67E007@qq.com -Signed-off-by: Sasha Levin ---- - kernel/time/tick-sched.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/kernel/time/tick-sched.c b/kernel/time/tick-sched.c -index 42c0be3080bde..4df14db4da490 100644 ---- a/kernel/time/tick-sched.c -+++ b/kernel/time/tick-sched.c -@@ -1041,7 +1041,7 @@ static bool report_idle_softirq(void) - return false; - } - -- if (ratelimit < 10) -+ if (ratelimit >= 10) - return false; - - /* On RT, softirqs handling may be waiting on some lock */ --- -2.39.2 - diff --git a/queue-6.4/tools-nolibc-ensure-fast64-integer-types-have-64-bit.patch b/queue-6.4/tools-nolibc-ensure-fast64-integer-types-have-64-bit.patch deleted file mode 100644 index ee4f5cbde5e..00000000000 --- a/queue-6.4/tools-nolibc-ensure-fast64-integer-types-have-64-bit.patch +++ /dev/null @@ -1,79 +0,0 @@ -From 2204f8a878e0a62374cf3ce592f3a5610ba383a0 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Tue, 30 May 2023 11:18:00 +0200 -Subject: tools/nolibc: ensure fast64 integer types have 64 bits -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -From: Thomas Weißschuh - -[ Upstream commit f9bf5944d37b75b8238349d4fb5b7a97bbecfc9d ] - -On 32bit platforms size_t is not enough to represent [u]int_fast64_t. - -Fixes: 3e9fd4e9a1d5 ("tools/nolibc: add integer types and integer limit macros") -Signed-off-by: Thomas Weißschuh -Signed-off-by: Willy Tarreau -Signed-off-by: Paul E. McKenney -Signed-off-by: Sasha Levin ---- - tools/include/nolibc/stdint.h | 10 +++++----- - tools/testing/selftests/nolibc/nolibc-test.c | 6 +++--- - 2 files changed, 8 insertions(+), 8 deletions(-) - -diff --git a/tools/include/nolibc/stdint.h b/tools/include/nolibc/stdint.h -index c1ce4f5e06034..661d942862c0b 100644 ---- a/tools/include/nolibc/stdint.h -+++ b/tools/include/nolibc/stdint.h -@@ -36,8 +36,8 @@ typedef ssize_t int_fast16_t; - typedef size_t uint_fast16_t; - typedef ssize_t int_fast32_t; - typedef size_t uint_fast32_t; --typedef ssize_t int_fast64_t; --typedef size_t uint_fast64_t; -+typedef int64_t int_fast64_t; -+typedef uint64_t uint_fast64_t; - - typedef int64_t intmax_t; - typedef uint64_t uintmax_t; -@@ -84,16 +84,16 @@ typedef uint64_t uintmax_t; - #define INT_FAST8_MIN INT8_MIN - #define INT_FAST16_MIN INTPTR_MIN - #define INT_FAST32_MIN INTPTR_MIN --#define INT_FAST64_MIN INTPTR_MIN -+#define INT_FAST64_MIN INT64_MIN - - #define INT_FAST8_MAX INT8_MAX - #define INT_FAST16_MAX INTPTR_MAX - #define INT_FAST32_MAX INTPTR_MAX --#define INT_FAST64_MAX INTPTR_MAX -+#define INT_FAST64_MAX INT64_MAX - - #define UINT_FAST8_MAX UINT8_MAX - #define UINT_FAST16_MAX SIZE_MAX - #define UINT_FAST32_MAX SIZE_MAX --#define UINT_FAST64_MAX SIZE_MAX -+#define UINT_FAST64_MAX UINT64_MAX - - #endif /* _NOLIBC_STDINT_H */ -diff --git a/tools/testing/selftests/nolibc/nolibc-test.c b/tools/testing/selftests/nolibc/nolibc-test.c -index 21bacc928bf7b..d37d036876ea9 100644 ---- a/tools/testing/selftests/nolibc/nolibc-test.c -+++ b/tools/testing/selftests/nolibc/nolibc-test.c -@@ -639,9 +639,9 @@ int run_stdlib(int min, int max) - CASE_TEST(limit_int_fast32_min); EXPECT_EQ(1, INT_FAST32_MIN, (int_fast32_t) INTPTR_MIN); break; - CASE_TEST(limit_int_fast32_max); EXPECT_EQ(1, INT_FAST32_MAX, (int_fast32_t) INTPTR_MAX); break; - CASE_TEST(limit_uint_fast32_max); EXPECT_EQ(1, UINT_FAST32_MAX, (uint_fast32_t) UINTPTR_MAX); break; -- CASE_TEST(limit_int_fast64_min); EXPECT_EQ(1, INT_FAST64_MIN, (int_fast64_t) INTPTR_MIN); break; -- CASE_TEST(limit_int_fast64_max); EXPECT_EQ(1, INT_FAST64_MAX, (int_fast64_t) INTPTR_MAX); break; -- CASE_TEST(limit_uint_fast64_max); EXPECT_EQ(1, UINT_FAST64_MAX, (uint_fast64_t) UINTPTR_MAX); break; -+ CASE_TEST(limit_int_fast64_min); EXPECT_EQ(1, INT_FAST64_MIN, (int_fast64_t) INT64_MIN); break; -+ CASE_TEST(limit_int_fast64_max); EXPECT_EQ(1, INT_FAST64_MAX, (int_fast64_t) INT64_MAX); break; -+ CASE_TEST(limit_uint_fast64_max); EXPECT_EQ(1, UINT_FAST64_MAX, (uint_fast64_t) UINT64_MAX); break; - #if __SIZEOF_LONG__ == 8 - CASE_TEST(limit_intptr_min); EXPECT_EQ(1, INTPTR_MIN, (intptr_t) 0x8000000000000000LL); break; - CASE_TEST(limit_intptr_max); EXPECT_EQ(1, INTPTR_MAX, (intptr_t) 0x7fffffffffffffffLL); break; --- -2.39.2 - diff --git a/queue-6.4/tools-resolve_btfids-fix-setting-hostcflags.patch b/queue-6.4/tools-resolve_btfids-fix-setting-hostcflags.patch deleted file mode 100644 index 2a776ae2def..00000000000 --- a/queue-6.4/tools-resolve_btfids-fix-setting-hostcflags.patch +++ /dev/null @@ -1,63 +0,0 @@ -From d6f2581eafa0f5b86059f343eaab5ee570884bc9 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Tue, 30 May 2023 14:33:52 +0200 -Subject: tools/resolve_btfids: Fix setting HOSTCFLAGS - -From: Viktor Malik - -[ Upstream commit edd75c802855271c8610f58a2fc9e54aefc49ce5 ] - -Building BPF selftests with custom HOSTCFLAGS yields an error: - - # make HOSTCFLAGS="-O2" - [...] - HOSTCC ./tools/testing/selftests/bpf/tools/build/resolve_btfids/main.o - main.c:73:10: fatal error: linux/rbtree.h: No such file or directory - 73 | #include - | ^~~~~~~~~~~~~~~~ - -The reason is that tools/bpf/resolve_btfids/Makefile passes header -include paths by extending HOSTCFLAGS which is overridden by setting -HOSTCFLAGS in the make command (because of Makefile rules [1]). - -This patch fixes the above problem by passing the include paths via -`HOSTCFLAGS_resolve_btfids` which is used by tools/build/Build.include -and can be combined with overridding HOSTCFLAGS. - -[1] https://www.gnu.org/software/make/manual/html_node/Overriding.html - -Fixes: 56a2df7615fa ("tools/resolve_btfids: Compile resolve_btfids as host program") -Signed-off-by: Viktor Malik -Signed-off-by: Andrii Nakryiko -Acked-by: Jiri Olsa -Link: https://lore.kernel.org/bpf/20230530123352.1308488-1-vmalik@redhat.com -Signed-off-by: Sasha Levin ---- - tools/bpf/resolve_btfids/Makefile | 4 ++-- - 1 file changed, 2 insertions(+), 2 deletions(-) - -diff --git a/tools/bpf/resolve_btfids/Makefile b/tools/bpf/resolve_btfids/Makefile -index ac548a7baa73e..4b8079f294f65 100644 ---- a/tools/bpf/resolve_btfids/Makefile -+++ b/tools/bpf/resolve_btfids/Makefile -@@ -67,7 +67,7 @@ $(BPFOBJ): $(wildcard $(LIBBPF_SRC)/*.[ch] $(LIBBPF_SRC)/Makefile) | $(LIBBPF_OU - LIBELF_FLAGS := $(shell $(HOSTPKG_CONFIG) libelf --cflags 2>/dev/null) - LIBELF_LIBS := $(shell $(HOSTPKG_CONFIG) libelf --libs 2>/dev/null || echo -lelf) - --HOSTCFLAGS += -g \ -+HOSTCFLAGS_resolve_btfids += -g \ - -I$(srctree)/tools/include \ - -I$(srctree)/tools/include/uapi \ - -I$(LIBBPF_INCLUDE) \ -@@ -76,7 +76,7 @@ HOSTCFLAGS += -g \ - - LIBS = $(LIBELF_LIBS) -lz - --export srctree OUTPUT HOSTCFLAGS Q HOSTCC HOSTLD HOSTAR -+export srctree OUTPUT HOSTCFLAGS_resolve_btfids Q HOSTCC HOSTLD HOSTAR - include $(srctree)/tools/build/Makefile.include - - $(BINARY_IN): fixdep FORCE prepare | $(OUTPUT) --- -2.39.2 - diff --git a/queue-6.4/tools-testing-cxl-fix-command-effects-for-inject-cle.patch b/queue-6.4/tools-testing-cxl-fix-command-effects-for-inject-cle.patch deleted file mode 100644 index e9511b30e84..00000000000 --- a/queue-6.4/tools-testing-cxl-fix-command-effects-for-inject-cle.patch +++ /dev/null @@ -1,48 +0,0 @@ -From d6ea0ae20305ba451df31cedddad7c6eb3baa5d5 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Wed, 14 Jun 2023 11:17:41 -0600 -Subject: tools/testing/cxl: Fix command effects for inject/clear poison - -From: Vishal Verma - -[ Upstream commit b46c5fa57cc60692412f616ac66ab624a941fdb3 ] - -The CXL spec (3.0, section 8.2.9.8.4) Lists Inject Poison and Clear -Poison as having the effects of "Immediate Data Change". Fix this in the -mock driver so that the command effect log is populated correctly. - -Fixes: 371c16101ee8 ("tools/testing/cxl: Mock the Inject Poison mailbox command") -Cc: Alison Schofield -Cc: Dan Williams -Reviewed-by: Alison Schofield -Reviewed-by: Jonathan Cameron -Reviewed-by: Dave Jiang -Signed-off-by: Vishal Verma -Link: https://lore.kernel.org/r/20230602-vv-fw_update-v4-2-c6265bd7343b@intel.com -Signed-off-by: Dan Williams -Signed-off-by: Sasha Levin ---- - tools/testing/cxl/test/mem.c | 4 ++-- - 1 file changed, 2 insertions(+), 2 deletions(-) - -diff --git a/tools/testing/cxl/test/mem.c b/tools/testing/cxl/test/mem.c -index 34b48027b3def..403cd36087726 100644 ---- a/tools/testing/cxl/test/mem.c -+++ b/tools/testing/cxl/test/mem.c -@@ -52,11 +52,11 @@ static struct cxl_cel_entry mock_cel[] = { - }, - { - .opcode = cpu_to_le16(CXL_MBOX_OP_INJECT_POISON), -- .effect = cpu_to_le16(0), -+ .effect = cpu_to_le16(EFFECT(2)), - }, - { - .opcode = cpu_to_le16(CXL_MBOX_OP_CLEAR_POISON), -- .effect = cpu_to_le16(0), -+ .effect = cpu_to_le16(EFFECT(2)), - }, - }; - --- -2.39.2 - diff --git a/queue-6.4/tracing-timer-add-missing-hrtimer-modes-to-decode_hr.patch b/queue-6.4/tracing-timer-add-missing-hrtimer-modes-to-decode_hr.patch deleted file mode 100644 index 62167f52c88..00000000000 --- a/queue-6.4/tracing-timer-add-missing-hrtimer-modes-to-decode_hr.patch +++ /dev/null @@ -1,47 +0,0 @@ -From bc38bdd9797c5a65b7eb07b652d20987958fe848 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Tue, 18 Apr 2023 16:38:54 +0200 -Subject: tracing/timer: Add missing hrtimer modes to decode_hrtimer_mode(). - -From: Sebastian Andrzej Siewior - -[ Upstream commit 2951580ba6adb082bb6b7154a5ecb24e7c1f7569 ] - -The trace output for the HRTIMER_MODE_.*_HARD modes is seen as a number -since these modes are not decoded. The author was not aware of the fancy -decoding function which makes the life easier. - -Extend decode_hrtimer_mode() with the additional HRTIMER_MODE_.*_HARD -modes. - -Fixes: ae6683d815895 ("hrtimer: Introduce HARD expiry mode") -Signed-off-by: Sebastian Andrzej Siewior -Signed-off-by: Thomas Gleixner -Reviewed-by: Mukesh Ojha -Acked-by: Steven Rostedt (Google) -Link: https://lore.kernel.org/r/20230418143854.8vHWQKLM@linutronix.de -Signed-off-by: Sasha Levin ---- - include/trace/events/timer.h | 6 +++++- - 1 file changed, 5 insertions(+), 1 deletion(-) - -diff --git a/include/trace/events/timer.h b/include/trace/events/timer.h -index 3e8619c72f774..b4bc2828fa09f 100644 ---- a/include/trace/events/timer.h -+++ b/include/trace/events/timer.h -@@ -158,7 +158,11 @@ DEFINE_EVENT(timer_class, timer_cancel, - { HRTIMER_MODE_ABS_SOFT, "ABS|SOFT" }, \ - { HRTIMER_MODE_REL_SOFT, "REL|SOFT" }, \ - { HRTIMER_MODE_ABS_PINNED_SOFT, "ABS|PINNED|SOFT" }, \ -- { HRTIMER_MODE_REL_PINNED_SOFT, "REL|PINNED|SOFT" }) -+ { HRTIMER_MODE_REL_PINNED_SOFT, "REL|PINNED|SOFT" }, \ -+ { HRTIMER_MODE_ABS_HARD, "ABS|HARD" }, \ -+ { HRTIMER_MODE_REL_HARD, "REL|HARD" }, \ -+ { HRTIMER_MODE_ABS_PINNED_HARD, "ABS|PINNED|HARD" }, \ -+ { HRTIMER_MODE_REL_PINNED_HARD, "REL|PINNED|HARD" }) - - /** - * hrtimer_init - called when the hrtimer is initialized --- -2.39.2 - diff --git a/queue-6.4/vfio-mdev-move-the-compat_class-initialization-to-mo.patch b/queue-6.4/vfio-mdev-move-the-compat_class-initialization-to-mo.patch deleted file mode 100644 index 3302e65383f..00000000000 --- a/queue-6.4/vfio-mdev-move-the-compat_class-initialization-to-mo.patch +++ /dev/null @@ -1,116 +0,0 @@ -From 38571d7f4f0d69adb3f01ea4cdccad553db3c605 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Mon, 26 Jun 2023 15:36:42 +0200 -Subject: vfio/mdev: Move the compat_class initialization to module init - -From: Eric Farman - -[ Upstream commit ff598081e5b9d0bdd6874bfe340811bbb75b35e4 ] - -The pointer to mdev_bus_compat_class is statically defined at the top -of mdev_core, and was originally (commit 7b96953bc640 ("vfio: Mediated -device Core driver") serialized by the parent_list_lock. The blamed -commit removed this mutex, leaving the pointer initialization -unserialized. As a result, the creation of multiple MDEVs in parallel -(such as during boot) can encounter errors during the creation of the -sysfs entries, such as: - - [ 8.337509] sysfs: cannot create duplicate filename '/class/mdev_bus' - [ 8.337514] vfio_ccw 0.0.01d8: MDEV: Registered - [ 8.337516] CPU: 13 PID: 946 Comm: driverctl Not tainted 6.4.0-rc7 #20 - [ 8.337522] Hardware name: IBM 3906 M05 780 (LPAR) - [ 8.337525] Call Trace: - [ 8.337528] [<0000000162b0145a>] dump_stack_lvl+0x62/0x80 - [ 8.337540] [<00000001622aeb30>] sysfs_warn_dup+0x78/0x88 - [ 8.337549] [<00000001622aeca6>] sysfs_create_dir_ns+0xe6/0xf8 - [ 8.337552] [<0000000162b04504>] kobject_add_internal+0xf4/0x340 - [ 8.337557] [<0000000162b04d48>] kobject_add+0x78/0xd0 - [ 8.337561] [<0000000162b04e0a>] kobject_create_and_add+0x6a/0xb8 - [ 8.337565] [<00000001627a110e>] class_compat_register+0x5e/0x90 - [ 8.337572] [<000003ff7fd815da>] mdev_register_parent+0x102/0x130 [mdev] - [ 8.337581] [<000003ff7fdc7f2c>] vfio_ccw_sch_probe+0xe4/0x178 [vfio_ccw] - [ 8.337588] [<0000000162a7833c>] css_probe+0x44/0x80 - [ 8.337599] [<000000016279f4da>] really_probe+0xd2/0x460 - [ 8.337603] [<000000016279fa08>] driver_probe_device+0x40/0xf0 - [ 8.337606] [<000000016279fb78>] __device_attach_driver+0xc0/0x140 - [ 8.337610] [<000000016279cbe0>] bus_for_each_drv+0x90/0xd8 - [ 8.337618] [<00000001627a00b0>] __device_attach+0x110/0x190 - [ 8.337621] [<000000016279c7c8>] bus_rescan_devices_helper+0x60/0xb0 - [ 8.337626] [<000000016279cd48>] drivers_probe_store+0x48/0x80 - [ 8.337632] [<00000001622ac9b0>] kernfs_fop_write_iter+0x138/0x1f0 - [ 8.337635] [<00000001621e5e14>] vfs_write+0x1ac/0x2f8 - [ 8.337645] [<00000001621e61d8>] ksys_write+0x70/0x100 - [ 8.337650] [<0000000162b2bdc4>] __do_syscall+0x1d4/0x200 - [ 8.337656] [<0000000162b3c828>] system_call+0x70/0x98 - [ 8.337664] kobject: kobject_add_internal failed for mdev_bus with -EEXIST, don't try to register things with the same name in the same directory. - [ 8.337668] kobject: kobject_create_and_add: kobject_add error: -17 - [ 8.337674] vfio_ccw: probe of 0.0.01d9 failed with error -12 - [ 8.342941] vfio_ccw_mdev aeb9ca91-10c6-42bc-a168-320023570aea: Adding to iommu group 2 - -Move the initialization of the mdev_bus_compat_class pointer to the -init path, to match the cleanup in module exit. This way the code -in mdev_register_parent() can simply link the new parent to it, -rather than determining whether initialization is required first. - -Fixes: 89345d5177aa ("vfio/mdev: embedd struct mdev_parent in the parent data structure") -Reported-by: Alexander Egorenkov -Signed-off-by: Eric Farman -Reviewed-by: Kevin Tian -Reviewed-by: Christoph Hellwig -Reviewed-by: Tony Krowiak -Reviewed-by: Jason Gunthorpe -Link: https://lore.kernel.org/r/20230626133642.2939168-1-farman@linux.ibm.com -Signed-off-by: Alex Williamson -Signed-off-by: Sasha Levin ---- - drivers/vfio/mdev/mdev_core.c | 23 ++++++++++++++--------- - 1 file changed, 14 insertions(+), 9 deletions(-) - -diff --git a/drivers/vfio/mdev/mdev_core.c b/drivers/vfio/mdev/mdev_core.c -index 58f91b3bd670c..ed4737de45289 100644 ---- a/drivers/vfio/mdev/mdev_core.c -+++ b/drivers/vfio/mdev/mdev_core.c -@@ -72,12 +72,6 @@ int mdev_register_parent(struct mdev_parent *parent, struct device *dev, - parent->nr_types = nr_types; - atomic_set(&parent->available_instances, mdev_driver->max_instances); - -- if (!mdev_bus_compat_class) { -- mdev_bus_compat_class = class_compat_register("mdev_bus"); -- if (!mdev_bus_compat_class) -- return -ENOMEM; -- } -- - ret = parent_create_sysfs_files(parent); - if (ret) - return ret; -@@ -251,13 +245,24 @@ int mdev_device_remove(struct mdev_device *mdev) - - static int __init mdev_init(void) - { -- return bus_register(&mdev_bus_type); -+ int ret; -+ -+ ret = bus_register(&mdev_bus_type); -+ if (ret) -+ return ret; -+ -+ mdev_bus_compat_class = class_compat_register("mdev_bus"); -+ if (!mdev_bus_compat_class) { -+ bus_unregister(&mdev_bus_type); -+ return -ENOMEM; -+ } -+ -+ return 0; - } - - static void __exit mdev_exit(void) - { -- if (mdev_bus_compat_class) -- class_compat_unregister(mdev_bus_compat_class); -+ class_compat_unregister(mdev_bus_compat_class); - bus_unregister(&mdev_bus_type); - } - --- -2.39.2 - diff --git a/queue-6.4/virt-sevguest-add-config_crypto-dependency.patch b/queue-6.4/virt-sevguest-add-config_crypto-dependency.patch deleted file mode 100644 index 8eec3acc276..00000000000 --- a/queue-6.4/virt-sevguest-add-config_crypto-dependency.patch +++ /dev/null @@ -1,44 +0,0 @@ -From 774dafbfed356f4e07e669d6821fc5c8e9c798cd Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Tue, 17 Jan 2023 18:13:56 +0100 -Subject: virt: sevguest: Add CONFIG_CRYPTO dependency - -From: Arnd Bergmann - -[ Upstream commit 84b9b44b99780d35fe72ac63c4724f158771e898 ] - -This driver fails to link when CRYPTO is disabled, or in a loadable -module: - - WARNING: unmet direct dependencies detected for CRYPTO_GCM - WARNING: unmet direct dependencies detected for CRYPTO_AEAD2 - Depends on [m]: CRYPTO [=m] - Selected by [y]: - - SEV_GUEST [=y] && VIRT_DRIVERS [=y] && AMD_MEM_ENCRYPT [=y] - -x86_64-linux-ld: crypto/aead.o: in function `crypto_register_aeads': - -Fixes: fce96cf04430 ("virt: Add SEV-SNP guest driver") -Signed-off-by: Arnd Bergmann -Signed-off-by: Borislav Petkov (AMD) -Link: https://lore.kernel.org/r/20230117171416.2715125-1-arnd@kernel.org -Signed-off-by: Sasha Levin ---- - drivers/virt/coco/sev-guest/Kconfig | 1 + - 1 file changed, 1 insertion(+) - -diff --git a/drivers/virt/coco/sev-guest/Kconfig b/drivers/virt/coco/sev-guest/Kconfig -index f9db0799ae67c..da2d7ca531f0f 100644 ---- a/drivers/virt/coco/sev-guest/Kconfig -+++ b/drivers/virt/coco/sev-guest/Kconfig -@@ -2,6 +2,7 @@ config SEV_GUEST - tristate "AMD SEV Guest driver" - default m - depends on AMD_MEM_ENCRYPT -+ select CRYPTO - select CRYPTO_AEAD2 - select CRYPTO_GCM - help --- -2.39.2 - diff --git a/queue-6.4/watchdog-hardlockup-change-watchdog_nmi_enable-to-vo.patch b/queue-6.4/watchdog-hardlockup-change-watchdog_nmi_enable-to-vo.patch deleted file mode 100644 index eeee4ccc9ad..00000000000 --- a/queue-6.4/watchdog-hardlockup-change-watchdog_nmi_enable-to-vo.patch +++ /dev/null @@ -1,112 +0,0 @@ -From 5b06de23caedb57a350dd471b52c8850bbe21191 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Fri, 19 May 2023 10:18:28 -0700 -Subject: watchdog/hardlockup: change watchdog_nmi_enable() to void - -From: Lecopzer Chen - -[ Upstream commit 730211182ed083898fa5feb4b28459ffac4c9615 ] - -Nobody cares about the return value of watchdog_nmi_enable(), changing its -prototype to void. - -Link: https://lkml.kernel.org/r/20230519101840.v5.4.Ic3a19b592eb1ac4c6f6eade44ffd943e8637b6e5@changeid -Signed-off-by: Pingfan Liu -Signed-off-by: Lecopzer Chen -Signed-off-by: Douglas Anderson -Reviewed-by: Petr Mladek -Acked-by: Nicholas Piggin -Cc: Andi Kleen -Cc: Catalin Marinas -Cc: Chen-Yu Tsai -Cc: Christophe Leroy -Cc: Colin Cross -Cc: Daniel Thompson -Cc: "David S. Miller" -Cc: Guenter Roeck -Cc: Ian Rogers -Cc: Marc Zyngier -Cc: Mark Rutland -Cc: Masayoshi Mizuma -Cc: Matthias Kaehlcke -Cc: Michael Ellerman -Cc: Randy Dunlap -Cc: "Ravi V. Shankar" -Cc: Ricardo Neri -Cc: Stephane Eranian -Cc: Stephen Boyd -Cc: Sumit Garg -Cc: Tzung-Bi Shih -Cc: Will Deacon -Signed-off-by: Andrew Morton -Stable-dep-of: 9ec272c586b0 ("watchdog/hardlockup: keep kernel.nmi_watchdog sysctl as 0444 if probe fails") -Signed-off-by: Sasha Levin ---- - arch/sparc/kernel/nmi.c | 8 +++----- - include/linux/nmi.h | 2 +- - kernel/watchdog.c | 3 +-- - 3 files changed, 5 insertions(+), 8 deletions(-) - -diff --git a/arch/sparc/kernel/nmi.c b/arch/sparc/kernel/nmi.c -index 060fff95a305c..5dcf31f7e81f1 100644 ---- a/arch/sparc/kernel/nmi.c -+++ b/arch/sparc/kernel/nmi.c -@@ -282,11 +282,11 @@ __setup("nmi_watchdog=", setup_nmi_watchdog); - * sparc specific NMI watchdog enable function. - * Enables watchdog if it is not enabled already. - */ --int watchdog_nmi_enable(unsigned int cpu) -+void watchdog_nmi_enable(unsigned int cpu) - { - if (atomic_read(&nmi_active) == -1) { - pr_warn("NMI watchdog cannot be enabled or disabled\n"); -- return -1; -+ return; - } - - /* -@@ -295,11 +295,9 @@ int watchdog_nmi_enable(unsigned int cpu) - * process first. - */ - if (!nmi_init_done) -- return 0; -+ return; - - smp_call_function_single(cpu, start_nmi_watchdog, NULL, 1); -- -- return 0; - } - /* - * sparc specific NMI watchdog disable function. -diff --git a/include/linux/nmi.h b/include/linux/nmi.h -index 771d77b62bc10..454fe99c48747 100644 ---- a/include/linux/nmi.h -+++ b/include/linux/nmi.h -@@ -119,7 +119,7 @@ static inline int hardlockup_detector_perf_init(void) { return 0; } - void watchdog_nmi_stop(void); - void watchdog_nmi_start(void); - int watchdog_nmi_probe(void); --int watchdog_nmi_enable(unsigned int cpu); -+void watchdog_nmi_enable(unsigned int cpu); - void watchdog_nmi_disable(unsigned int cpu); - - void lockup_detector_reconfigure(void); -diff --git a/kernel/watchdog.c b/kernel/watchdog.c -index 582d572e13797..c705a18b26bf1 100644 ---- a/kernel/watchdog.c -+++ b/kernel/watchdog.c -@@ -93,10 +93,9 @@ __setup("nmi_watchdog=", hardlockup_panic_setup); - * softlockup watchdog start and stop. The arch must select the - * SOFTLOCKUP_DETECTOR Kconfig. - */ --int __weak watchdog_nmi_enable(unsigned int cpu) -+void __weak watchdog_nmi_enable(unsigned int cpu) - { - hardlockup_detector_perf_enable(); -- return 0; - } - - void __weak watchdog_nmi_disable(unsigned int cpu) --- -2.39.2 - diff --git a/queue-6.4/watchdog-hardlockup-keep-kernel.nmi_watchdog-sysctl-.patch b/queue-6.4/watchdog-hardlockup-keep-kernel.nmi_watchdog-sysctl-.patch deleted file mode 100644 index 67d84575d43..00000000000 --- a/queue-6.4/watchdog-hardlockup-keep-kernel.nmi_watchdog-sysctl-.patch +++ /dev/null @@ -1,133 +0,0 @@ -From ab3280c471400a2e65b990182c7ba6c93b823352 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Fri, 26 May 2023 18:41:31 -0700 -Subject: watchdog/hardlockup: keep kernel.nmi_watchdog sysctl as 0444 if probe - fails - -From: Douglas Anderson - -[ Upstream commit 9ec272c586b07d1abf73438524bd12b1df9c5f9b ] - -Patch series "watchdog: Cleanup / fixes after buddy series v5 reviews". - -This patch series attempts to finish resolving the feedback received -from Petr Mladek on the v5 series I posted. - -Probably the only thing that wasn't fully as clean as Petr requested was -the Kconfig stuff. I couldn't find a better way to express it without a -more major overhaul. In the very least, I renamed "NON_ARCH" to -"PERF_OR_BUDDY" in the hopes that will make it marginally better. - -Nothing in this series is terribly critical and even the bugfixes are -small. However, it does cleanup a few things that were pointed out in -review. - -This patch (of 10): - -The permissions for the kernel.nmi_watchdog sysctl have always been set at -compile time despite the fact that a watchdog can fail to probe. Let's -fix this and set the permissions based on whether the hardlockup detector -actually probed. - -Link: https://lkml.kernel.org/r/20230527014153.2793931-1-dianders@chromium.org -Link: https://lkml.kernel.org/r/20230526184139.1.I0d75971cc52a7283f495aac0bd5c3041aadc734e@changeid -Fixes: a994a3147e4c ("watchdog/hardlockup/perf: Implement init time detection of perf") -Signed-off-by: Douglas Anderson -Reported-by: Petr Mladek -Closes: https://lore.kernel.org/r/ZHCn4hNxFpY5-9Ki@alley -Reviewed-by: Petr Mladek -Cc: Christophe Leroy -Cc: "David S. Miller" -Cc: Michael Ellerman -Cc: Nicholas Piggin -Signed-off-by: Andrew Morton -Signed-off-by: Sasha Levin ---- - include/linux/nmi.h | 6 ------ - kernel/watchdog.c | 30 ++++++++++++++++++++---------- - 2 files changed, 20 insertions(+), 16 deletions(-) - -diff --git a/include/linux/nmi.h b/include/linux/nmi.h -index c4f58baf7ccb2..d54b9ba9c8247 100644 ---- a/include/linux/nmi.h -+++ b/include/linux/nmi.h -@@ -91,12 +91,6 @@ static inline void hardlockup_detector_disable(void) {} - void watchdog_hardlockup_check(struct pt_regs *regs); - #endif - --#if defined(CONFIG_HAVE_NMI_WATCHDOG) || defined(CONFIG_HARDLOCKUP_DETECTOR) --# define NMI_WATCHDOG_SYSCTL_PERM 0644 --#else --# define NMI_WATCHDOG_SYSCTL_PERM 0444 --#endif -- - #if defined(CONFIG_HARDLOCKUP_DETECTOR_PERF) - extern void arch_touch_nmi_watchdog(void); - extern void hardlockup_detector_perf_stop(void); -diff --git a/kernel/watchdog.c b/kernel/watchdog.c -index f2e991894af62..6b1754e8b6e96 100644 ---- a/kernel/watchdog.c -+++ b/kernel/watchdog.c -@@ -830,15 +830,6 @@ static struct ctl_table watchdog_sysctls[] = { - .extra1 = SYSCTL_ZERO, - .extra2 = (void *)&sixty, - }, -- { -- .procname = "nmi_watchdog", -- .data = &watchdog_hardlockup_user_enabled, -- .maxlen = sizeof(int), -- .mode = NMI_WATCHDOG_SYSCTL_PERM, -- .proc_handler = proc_nmi_watchdog, -- .extra1 = SYSCTL_ZERO, -- .extra2 = SYSCTL_ONE, -- }, - { - .procname = "watchdog_cpumask", - .data = &watchdog_cpumask_bits, -@@ -902,10 +893,28 @@ static struct ctl_table watchdog_sysctls[] = { - {} - }; - -+static struct ctl_table watchdog_hardlockup_sysctl[] = { -+ { -+ .procname = "nmi_watchdog", -+ .data = &watchdog_hardlockup_user_enabled, -+ .maxlen = sizeof(int), -+ .mode = 0444, -+ .proc_handler = proc_nmi_watchdog, -+ .extra1 = SYSCTL_ZERO, -+ .extra2 = SYSCTL_ONE, -+ }, -+ {} -+}; -+ - static void __init watchdog_sysctl_init(void) - { - register_sysctl_init("kernel", watchdog_sysctls); -+ -+ if (watchdog_hardlockup_available) -+ watchdog_hardlockup_sysctl[0].mode = 0644; -+ register_sysctl_init("kernel", watchdog_hardlockup_sysctl); - } -+ - #else - #define watchdog_sysctl_init() do { } while (0) - #endif /* CONFIG_SYSCTL */ -@@ -961,6 +970,8 @@ static int __init lockup_detector_check(void) - /* Make sure no work is pending. */ - flush_work(&detector_work); - -+ watchdog_sysctl_init(); -+ - return 0; - - } -@@ -980,5 +991,4 @@ void __init lockup_detector_init(void) - allow_lockup_detector_init_retry = true; - - lockup_detector_setup(); -- watchdog_sysctl_init(); - } --- -2.39.2 - diff --git a/queue-6.4/watchdog-hardlockup-move-perf-hardlockup-checking-pa.patch b/queue-6.4/watchdog-hardlockup-move-perf-hardlockup-checking-pa.patch deleted file mode 100644 index a151548d283..00000000000 --- a/queue-6.4/watchdog-hardlockup-move-perf-hardlockup-checking-pa.patch +++ /dev/null @@ -1,296 +0,0 @@ -From 33340800b0573e9740ebce8a2af08e054dee43cc Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Fri, 19 May 2023 10:18:32 -0700 -Subject: watchdog/hardlockup: move perf hardlockup checking/panic to common - watchdog.c - -From: Douglas Anderson - -[ Upstream commit 81972551df9d168a8183b786ff4de06008469c2e ] - -The perf hardlockup detector works by looking at interrupt counts and -seeing if they change from run to run. The interrupt counts are managed -by the common watchdog code via its watchdog_timer_fn(). - -Currently the API between the perf detector and the common code is a -function: is_hardlockup(). When the hard lockup detector sees that -function return true then it handles printing out debug info and inducing -a panic if necessary. - -Let's change the API a little bit in preparation for the buddy hardlockup -detector. The buddy hardlockup detector wants to print nearly the same -debug info and have nearly the same panic behavior. That means we want to -move all that code to the common file. For now, the code in the common -file will only be there if the perf hardlockup detector is enabled, but -eventually it will be selected by a common config. - -Right now, this _just_ moves the code from the perf detector file to the -common file and changes the names. It doesn't make the changes that the -buddy hardlockup detector will need and doesn't do any style cleanups. A -future patch will do cleanup to make it more obvious what changed. - -With the above, we no longer have any callers of is_hardlockup() outside -of the "watchdog.c" file, so we can remove it from the header, make it -static, and move it to the same "#ifdef" block as our new -watchdog_hardlockup_check(). While doing this, it can be noted that even -if no hardlockup detectors were configured the existing code used to still -have the code for counting/checking "hrtimer_interrupts" even if the perf -hardlockup detector wasn't configured. We didn't need to do that, so move -all the "hrtimer_interrupts" counting to only be there if the perf -hardlockup detector is configured as well. - -This change is expected to be a no-op. - -Link: https://lkml.kernel.org/r/20230519101840.v5.8.Id4133d3183e798122dc3b6205e7852601f289071@changeid -Signed-off-by: Douglas Anderson -Reviewed-by: Petr Mladek -Cc: Andi Kleen -Cc: Catalin Marinas -Cc: Chen-Yu Tsai -Cc: Christophe Leroy -Cc: Colin Cross -Cc: Daniel Thompson -Cc: "David S. Miller" -Cc: Guenter Roeck -Cc: Ian Rogers -Cc: Lecopzer Chen -Cc: Marc Zyngier -Cc: Mark Rutland -Cc: Masayoshi Mizuma -Cc: Matthias Kaehlcke -Cc: Michael Ellerman -Cc: Nicholas Piggin -Cc: Pingfan Liu -Cc: Randy Dunlap -Cc: "Ravi V. Shankar" -Cc: Ricardo Neri -Cc: Stephane Eranian -Cc: Stephen Boyd -Cc: Sumit Garg -Cc: Tzung-Bi Shih -Cc: Will Deacon -Signed-off-by: Andrew Morton -Stable-dep-of: 9ec272c586b0 ("watchdog/hardlockup: keep kernel.nmi_watchdog sysctl as 0444 if probe fails") -Signed-off-by: Sasha Levin ---- - include/linux/nmi.h | 5 ++- - kernel/watchdog.c | 93 +++++++++++++++++++++++++++++++++---------- - kernel/watchdog_hld.c | 42 +------------------ - 3 files changed, 78 insertions(+), 62 deletions(-) - -diff --git a/include/linux/nmi.h b/include/linux/nmi.h -index 454fe99c48747..97ba114bc21e7 100644 ---- a/include/linux/nmi.h -+++ b/include/linux/nmi.h -@@ -15,7 +15,6 @@ - void lockup_detector_init(void); - void lockup_detector_soft_poweroff(void); - void lockup_detector_cleanup(void); --bool is_hardlockup(void); - - extern int watchdog_user_enabled; - extern int nmi_watchdog_user_enabled; -@@ -88,6 +87,10 @@ extern unsigned int hardlockup_panic; - static inline void hardlockup_detector_disable(void) {} - #endif - -+#if defined(CONFIG_HARDLOCKUP_DETECTOR_PERF) -+void watchdog_hardlockup_check(struct pt_regs *regs); -+#endif -+ - #if defined(CONFIG_HAVE_NMI_WATCHDOG) || defined(CONFIG_HARDLOCKUP_DETECTOR) - # define NMI_WATCHDOG_SYSCTL_PERM 0644 - #else -diff --git a/kernel/watchdog.c b/kernel/watchdog.c -index c705a18b26bf1..12ce37d76e7d2 100644 ---- a/kernel/watchdog.c -+++ b/kernel/watchdog.c -@@ -85,6 +85,78 @@ __setup("nmi_watchdog=", hardlockup_panic_setup); - - #endif /* CONFIG_HARDLOCKUP_DETECTOR */ - -+#if defined(CONFIG_HARDLOCKUP_DETECTOR_PERF) -+ -+static DEFINE_PER_CPU(unsigned long, hrtimer_interrupts); -+static DEFINE_PER_CPU(unsigned long, hrtimer_interrupts_saved); -+static DEFINE_PER_CPU(bool, hard_watchdog_warn); -+static unsigned long hardlockup_allcpu_dumped; -+ -+static bool is_hardlockup(void) -+{ -+ unsigned long hrint = __this_cpu_read(hrtimer_interrupts); -+ -+ if (__this_cpu_read(hrtimer_interrupts_saved) == hrint) -+ return true; -+ -+ __this_cpu_write(hrtimer_interrupts_saved, hrint); -+ return false; -+} -+ -+static void watchdog_hardlockup_kick(void) -+{ -+ __this_cpu_inc(hrtimer_interrupts); -+} -+ -+void watchdog_hardlockup_check(struct pt_regs *regs) -+{ -+ /* check for a hardlockup -+ * This is done by making sure our timer interrupt -+ * is incrementing. The timer interrupt should have -+ * fired multiple times before we overflow'd. If it hasn't -+ * then this is a good indication the cpu is stuck -+ */ -+ if (is_hardlockup()) { -+ int this_cpu = smp_processor_id(); -+ -+ /* only print hardlockups once */ -+ if (__this_cpu_read(hard_watchdog_warn) == true) -+ return; -+ -+ pr_emerg("Watchdog detected hard LOCKUP on cpu %d\n", -+ this_cpu); -+ print_modules(); -+ print_irqtrace_events(current); -+ if (regs) -+ show_regs(regs); -+ else -+ dump_stack(); -+ -+ /* -+ * Perform all-CPU dump only once to avoid multiple hardlockups -+ * generating interleaving traces -+ */ -+ if (sysctl_hardlockup_all_cpu_backtrace && -+ !test_and_set_bit(0, &hardlockup_allcpu_dumped)) -+ trigger_allbutself_cpu_backtrace(); -+ -+ if (hardlockup_panic) -+ nmi_panic(regs, "Hard LOCKUP"); -+ -+ __this_cpu_write(hard_watchdog_warn, true); -+ return; -+ } -+ -+ __this_cpu_write(hard_watchdog_warn, false); -+ return; -+} -+ -+#else /* CONFIG_HARDLOCKUP_DETECTOR_PERF */ -+ -+static inline void watchdog_hardlockup_kick(void) { } -+ -+#endif /* !CONFIG_HARDLOCKUP_DETECTOR_PERF */ -+ - /* - * These functions can be overridden if an architecture implements its - * own hardlockup detector. -@@ -176,8 +248,6 @@ static DEFINE_PER_CPU(unsigned long, watchdog_touch_ts); - static DEFINE_PER_CPU(unsigned long, watchdog_report_ts); - static DEFINE_PER_CPU(struct hrtimer, watchdog_hrtimer); - static DEFINE_PER_CPU(bool, softlockup_touch_sync); --static DEFINE_PER_CPU(unsigned long, hrtimer_interrupts); --static DEFINE_PER_CPU(unsigned long, hrtimer_interrupts_saved); - static unsigned long soft_lockup_nmi_warn; - - static int __init nowatchdog_setup(char *str) -@@ -312,22 +382,6 @@ static int is_softlockup(unsigned long touch_ts, - } - - /* watchdog detector functions */ --bool is_hardlockup(void) --{ -- unsigned long hrint = __this_cpu_read(hrtimer_interrupts); -- -- if (__this_cpu_read(hrtimer_interrupts_saved) == hrint) -- return true; -- -- __this_cpu_write(hrtimer_interrupts_saved, hrint); -- return false; --} -- --static void watchdog_interrupt_count(void) --{ -- __this_cpu_inc(hrtimer_interrupts); --} -- - static DEFINE_PER_CPU(struct completion, softlockup_completion); - static DEFINE_PER_CPU(struct cpu_stop_work, softlockup_stop_work); - -@@ -358,8 +412,7 @@ static enum hrtimer_restart watchdog_timer_fn(struct hrtimer *hrtimer) - if (!watchdog_enabled) - return HRTIMER_NORESTART; - -- /* kick the hardlockup detector */ -- watchdog_interrupt_count(); -+ watchdog_hardlockup_kick(); - - /* kick the softlockup detector */ - if (completion_done(this_cpu_ptr(&softlockup_completion))) { -diff --git a/kernel/watchdog_hld.c b/kernel/watchdog_hld.c -index 1e8a49dc956e2..2e0e1e11227c5 100644 ---- a/kernel/watchdog_hld.c -+++ b/kernel/watchdog_hld.c -@@ -20,13 +20,11 @@ - #include - #include - --static DEFINE_PER_CPU(bool, hard_watchdog_warn); - static DEFINE_PER_CPU(bool, watchdog_nmi_touch); - static DEFINE_PER_CPU(struct perf_event *, watchdog_ev); - static DEFINE_PER_CPU(struct perf_event *, dead_event); - static struct cpumask dead_events_mask; - --static unsigned long hardlockup_allcpu_dumped; - static atomic_t watchdog_cpus = ATOMIC_INIT(0); - - notrace void arch_touch_nmi_watchdog(void) -@@ -122,45 +120,7 @@ static void watchdog_overflow_callback(struct perf_event *event, - return; - } - -- /* check for a hardlockup -- * This is done by making sure our timer interrupt -- * is incrementing. The timer interrupt should have -- * fired multiple times before we overflow'd. If it hasn't -- * then this is a good indication the cpu is stuck -- */ -- if (is_hardlockup()) { -- int this_cpu = smp_processor_id(); -- -- /* only print hardlockups once */ -- if (__this_cpu_read(hard_watchdog_warn) == true) -- return; -- -- pr_emerg("Watchdog detected hard LOCKUP on cpu %d\n", -- this_cpu); -- print_modules(); -- print_irqtrace_events(current); -- if (regs) -- show_regs(regs); -- else -- dump_stack(); -- -- /* -- * Perform all-CPU dump only once to avoid multiple hardlockups -- * generating interleaving traces -- */ -- if (sysctl_hardlockup_all_cpu_backtrace && -- !test_and_set_bit(0, &hardlockup_allcpu_dumped)) -- trigger_allbutself_cpu_backtrace(); -- -- if (hardlockup_panic) -- nmi_panic(regs, "Hard LOCKUP"); -- -- __this_cpu_write(hard_watchdog_warn, true); -- return; -- } -- -- __this_cpu_write(hard_watchdog_warn, false); -- return; -+ watchdog_hardlockup_check(regs); - } - - static int hardlockup_detector_event_create(void) --- -2.39.2 - diff --git a/queue-6.4/watchdog-hardlockup-rename-some-nmi-watchdog-constan.patch b/queue-6.4/watchdog-hardlockup-rename-some-nmi-watchdog-constan.patch deleted file mode 100644 index db5fd3c7ce8..00000000000 --- a/queue-6.4/watchdog-hardlockup-rename-some-nmi-watchdog-constan.patch +++ /dev/null @@ -1,558 +0,0 @@ -From 6c054cc4e98152b7b8ccaf5957843d93bcf75374 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Fri, 19 May 2023 10:18:36 -0700 -Subject: watchdog/hardlockup: rename some "NMI watchdog" constants/function - -From: Douglas Anderson - -[ Upstream commit df95d3085caa5b99a60eb033d7ad6c2ff2b43dbf ] - -Do a search and replace of: -- NMI_WATCHDOG_ENABLED => WATCHDOG_HARDLOCKUP_ENABLED -- SOFT_WATCHDOG_ENABLED => WATCHDOG_SOFTOCKUP_ENABLED -- watchdog_nmi_ => watchdog_hardlockup_ -- nmi_watchdog_available => watchdog_hardlockup_available -- nmi_watchdog_user_enabled => watchdog_hardlockup_user_enabled -- soft_watchdog_user_enabled => watchdog_softlockup_user_enabled -- NMI_WATCHDOG_DEFAULT => WATCHDOG_HARDLOCKUP_DEFAULT - -Then update a few comments near where names were changed. - -This is specifically to make it less confusing when we want to introduce -the buddy hardlockup detector, which isn't using NMIs. As part of this, -we sanitized a few names for consistency. - -[trix@redhat.com: make variables static] - Link: https://lkml.kernel.org/r/20230525162822.1.I0fb41d138d158c9230573eaa37dc56afa2fb14ee@changeid -Link: https://lkml.kernel.org/r/20230519101840.v5.12.I91f7277bab4bf8c0cb238732ed92e7ce7bbd71a6@changeid -Signed-off-by: Douglas Anderson -Signed-off-by: Tom Rix -Reviewed-by: Tom Rix -Cc: Andi Kleen -Cc: Catalin Marinas -Cc: Chen-Yu Tsai -Cc: Christophe Leroy -Cc: Colin Cross -Cc: Daniel Thompson -Cc: "David S. Miller" -Cc: Guenter Roeck -Cc: Ian Rogers -Cc: Lecopzer Chen -Cc: Marc Zyngier -Cc: Mark Rutland -Cc: Masayoshi Mizuma -Cc: Matthias Kaehlcke -Cc: Michael Ellerman -Cc: Nicholas Piggin -Cc: Petr Mladek -Cc: Pingfan Liu -Cc: Randy Dunlap -Cc: "Ravi V. Shankar" -Cc: Ricardo Neri -Cc: Stephane Eranian -Cc: Stephen Boyd -Cc: Sumit Garg -Cc: Tzung-Bi Shih -Cc: Will Deacon -Signed-off-by: Andrew Morton -Stable-dep-of: 9ec272c586b0 ("watchdog/hardlockup: keep kernel.nmi_watchdog sysctl as 0444 if probe fails") -Signed-off-by: Sasha Levin ---- - arch/powerpc/include/asm/nmi.h | 4 +- - arch/powerpc/kernel/watchdog.c | 12 +-- - arch/powerpc/platforms/pseries/mobility.c | 4 +- - arch/sparc/kernel/nmi.c | 4 +- - include/linux/nmi.h | 24 +++-- - kernel/watchdog.c | 113 +++++++++++----------- - kernel/watchdog_hld.c | 2 +- - 7 files changed, 81 insertions(+), 82 deletions(-) - -diff --git a/arch/powerpc/include/asm/nmi.h b/arch/powerpc/include/asm/nmi.h -index c3c7adef74de0..43bfd4de868f8 100644 ---- a/arch/powerpc/include/asm/nmi.h -+++ b/arch/powerpc/include/asm/nmi.h -@@ -5,10 +5,10 @@ - #ifdef CONFIG_PPC_WATCHDOG - extern void arch_touch_nmi_watchdog(void); - long soft_nmi_interrupt(struct pt_regs *regs); --void watchdog_nmi_set_timeout_pct(u64 pct); -+void watchdog_hardlockup_set_timeout_pct(u64 pct); - #else - static inline void arch_touch_nmi_watchdog(void) {} --static inline void watchdog_nmi_set_timeout_pct(u64 pct) {} -+static inline void watchdog_hardlockup_set_timeout_pct(u64 pct) {} - #endif - - #ifdef CONFIG_NMI_IPI -diff --git a/arch/powerpc/kernel/watchdog.c b/arch/powerpc/kernel/watchdog.c -index dbcc4a793f0b9..edb2dd1f53ebc 100644 ---- a/arch/powerpc/kernel/watchdog.c -+++ b/arch/powerpc/kernel/watchdog.c -@@ -438,7 +438,7 @@ static enum hrtimer_restart watchdog_timer_fn(struct hrtimer *hrtimer) - { - int cpu = smp_processor_id(); - -- if (!(watchdog_enabled & NMI_WATCHDOG_ENABLED)) -+ if (!(watchdog_enabled & WATCHDOG_HARDLOCKUP_ENABLED)) - return HRTIMER_NORESTART; - - if (!cpumask_test_cpu(cpu, &watchdog_cpumask)) -@@ -479,7 +479,7 @@ static void start_watchdog(void *arg) - return; - } - -- if (!(watchdog_enabled & NMI_WATCHDOG_ENABLED)) -+ if (!(watchdog_enabled & WATCHDOG_HARDLOCKUP_ENABLED)) - return; - - if (!cpumask_test_cpu(cpu, &watchdog_cpumask)) -@@ -546,7 +546,7 @@ static void watchdog_calc_timeouts(void) - wd_timer_period_ms = watchdog_thresh * 1000 * 2 / 5; - } - --void watchdog_nmi_stop(void) -+void watchdog_hardlockup_stop(void) - { - int cpu; - -@@ -554,7 +554,7 @@ void watchdog_nmi_stop(void) - stop_watchdog_on_cpu(cpu); - } - --void watchdog_nmi_start(void) -+void watchdog_hardlockup_start(void) - { - int cpu; - -@@ -566,7 +566,7 @@ void watchdog_nmi_start(void) - /* - * Invoked from core watchdog init. - */ --int __init watchdog_nmi_probe(void) -+int __init watchdog_hardlockup_probe(void) - { - int err; - -@@ -582,7 +582,7 @@ int __init watchdog_nmi_probe(void) - } - - #ifdef CONFIG_PPC_PSERIES --void watchdog_nmi_set_timeout_pct(u64 pct) -+void watchdog_hardlockup_set_timeout_pct(u64 pct) - { - pr_info("Set the NMI watchdog timeout factor to %llu%%\n", pct); - WRITE_ONCE(wd_timeout_pct, pct); -diff --git a/arch/powerpc/platforms/pseries/mobility.c b/arch/powerpc/platforms/pseries/mobility.c -index 6f30113b5468e..cd632ba9ebfff 100644 ---- a/arch/powerpc/platforms/pseries/mobility.c -+++ b/arch/powerpc/platforms/pseries/mobility.c -@@ -750,7 +750,7 @@ static int pseries_migrate_partition(u64 handle) - goto out; - - if (factor) -- watchdog_nmi_set_timeout_pct(factor); -+ watchdog_hardlockup_set_timeout_pct(factor); - - ret = pseries_suspend(handle); - if (ret == 0) { -@@ -766,7 +766,7 @@ static int pseries_migrate_partition(u64 handle) - pseries_cancel_migration(handle, ret); - - if (factor) -- watchdog_nmi_set_timeout_pct(0); -+ watchdog_hardlockup_set_timeout_pct(0); - - out: - vas_migration_handler(VAS_RESUME); -diff --git a/arch/sparc/kernel/nmi.c b/arch/sparc/kernel/nmi.c -index 5dcf31f7e81f1..9d9e29b75c43a 100644 ---- a/arch/sparc/kernel/nmi.c -+++ b/arch/sparc/kernel/nmi.c -@@ -282,7 +282,7 @@ __setup("nmi_watchdog=", setup_nmi_watchdog); - * sparc specific NMI watchdog enable function. - * Enables watchdog if it is not enabled already. - */ --void watchdog_nmi_enable(unsigned int cpu) -+void watchdog_hardlockup_enable(unsigned int cpu) - { - if (atomic_read(&nmi_active) == -1) { - pr_warn("NMI watchdog cannot be enabled or disabled\n"); -@@ -303,7 +303,7 @@ void watchdog_nmi_enable(unsigned int cpu) - * sparc specific NMI watchdog disable function. - * Disables watchdog if it is not disabled already. - */ --void watchdog_nmi_disable(unsigned int cpu) -+void watchdog_hardlockup_disable(unsigned int cpu) - { - if (atomic_read(&nmi_active) == -1) - pr_warn_once("NMI watchdog cannot be enabled or disabled\n"); -diff --git a/include/linux/nmi.h b/include/linux/nmi.h -index 97ba114bc21e7..600a61c65a9a9 100644 ---- a/include/linux/nmi.h -+++ b/include/linux/nmi.h -@@ -17,8 +17,6 @@ void lockup_detector_soft_poweroff(void); - void lockup_detector_cleanup(void); - - extern int watchdog_user_enabled; --extern int nmi_watchdog_user_enabled; --extern int soft_watchdog_user_enabled; - extern int watchdog_thresh; - extern unsigned long watchdog_enabled; - -@@ -68,17 +66,17 @@ static inline void reset_hung_task_detector(void) { } - * 'watchdog_enabled' variable. Each lockup detector has its dedicated bit - - * bit 0 for the hard lockup detector and bit 1 for the soft lockup detector. - * -- * 'watchdog_user_enabled', 'nmi_watchdog_user_enabled' and -- * 'soft_watchdog_user_enabled' are variables that are only used as an -+ * 'watchdog_user_enabled', 'watchdog_hardlockup_user_enabled' and -+ * 'watchdog_softlockup_user_enabled' are variables that are only used as an - * 'interface' between the parameters in /proc/sys/kernel and the internal - * state bits in 'watchdog_enabled'. The 'watchdog_thresh' variable is - * handled differently because its value is not boolean, and the lockup - * detectors are 'suspended' while 'watchdog_thresh' is equal zero. - */ --#define NMI_WATCHDOG_ENABLED_BIT 0 --#define SOFT_WATCHDOG_ENABLED_BIT 1 --#define NMI_WATCHDOG_ENABLED (1 << NMI_WATCHDOG_ENABLED_BIT) --#define SOFT_WATCHDOG_ENABLED (1 << SOFT_WATCHDOG_ENABLED_BIT) -+#define WATCHDOG_HARDLOCKUP_ENABLED_BIT 0 -+#define WATCHDOG_SOFTOCKUP_ENABLED_BIT 1 -+#define WATCHDOG_HARDLOCKUP_ENABLED (1 << WATCHDOG_HARDLOCKUP_ENABLED_BIT) -+#define WATCHDOG_SOFTOCKUP_ENABLED (1 << WATCHDOG_SOFTOCKUP_ENABLED_BIT) - - #if defined(CONFIG_HARDLOCKUP_DETECTOR) - extern void hardlockup_detector_disable(void); -@@ -119,11 +117,11 @@ static inline int hardlockup_detector_perf_init(void) { return 0; } - # endif - #endif - --void watchdog_nmi_stop(void); --void watchdog_nmi_start(void); --int watchdog_nmi_probe(void); --void watchdog_nmi_enable(unsigned int cpu); --void watchdog_nmi_disable(unsigned int cpu); -+void watchdog_hardlockup_stop(void); -+void watchdog_hardlockup_start(void); -+int watchdog_hardlockup_probe(void); -+void watchdog_hardlockup_enable(unsigned int cpu); -+void watchdog_hardlockup_disable(unsigned int cpu); - - void lockup_detector_reconfigure(void); - -diff --git a/kernel/watchdog.c b/kernel/watchdog.c -index 12ce37d76e7d2..06ea59c05ee94 100644 ---- a/kernel/watchdog.c -+++ b/kernel/watchdog.c -@@ -30,17 +30,17 @@ - static DEFINE_MUTEX(watchdog_mutex); - - #if defined(CONFIG_HARDLOCKUP_DETECTOR) || defined(CONFIG_HAVE_NMI_WATCHDOG) --# define NMI_WATCHDOG_DEFAULT 1 -+# define WATCHDOG_HARDLOCKUP_DEFAULT 1 - #else --# define NMI_WATCHDOG_DEFAULT 0 -+# define WATCHDOG_HARDLOCKUP_DEFAULT 0 - #endif - - unsigned long __read_mostly watchdog_enabled; - int __read_mostly watchdog_user_enabled = 1; --int __read_mostly nmi_watchdog_user_enabled = NMI_WATCHDOG_DEFAULT; --int __read_mostly soft_watchdog_user_enabled = 1; -+static int __read_mostly watchdog_hardlockup_user_enabled = WATCHDOG_HARDLOCKUP_DEFAULT; -+static int __read_mostly watchdog_softlockup_user_enabled = 1; - int __read_mostly watchdog_thresh = 10; --static int __read_mostly nmi_watchdog_available; -+static int __read_mostly watchdog_hardlockup_available; - - struct cpumask watchdog_cpumask __read_mostly; - unsigned long *watchdog_cpumask_bits = cpumask_bits(&watchdog_cpumask); -@@ -66,7 +66,7 @@ unsigned int __read_mostly hardlockup_panic = - */ - void __init hardlockup_detector_disable(void) - { -- nmi_watchdog_user_enabled = 0; -+ watchdog_hardlockup_user_enabled = 0; - } - - static int __init hardlockup_panic_setup(char *str) -@@ -76,9 +76,9 @@ static int __init hardlockup_panic_setup(char *str) - else if (!strncmp(str, "nopanic", 7)) - hardlockup_panic = 0; - else if (!strncmp(str, "0", 1)) -- nmi_watchdog_user_enabled = 0; -+ watchdog_hardlockup_user_enabled = 0; - else if (!strncmp(str, "1", 1)) -- nmi_watchdog_user_enabled = 1; -+ watchdog_hardlockup_user_enabled = 1; - return 1; - } - __setup("nmi_watchdog=", hardlockup_panic_setup); -@@ -161,40 +161,40 @@ static inline void watchdog_hardlockup_kick(void) { } - * These functions can be overridden if an architecture implements its - * own hardlockup detector. - * -- * watchdog_nmi_enable/disable can be implemented to start and stop when -+ * watchdog_hardlockup_enable/disable can be implemented to start and stop when - * softlockup watchdog start and stop. The arch must select the - * SOFTLOCKUP_DETECTOR Kconfig. - */ --void __weak watchdog_nmi_enable(unsigned int cpu) -+void __weak watchdog_hardlockup_enable(unsigned int cpu) - { - hardlockup_detector_perf_enable(); - } - --void __weak watchdog_nmi_disable(unsigned int cpu) -+void __weak watchdog_hardlockup_disable(unsigned int cpu) - { - hardlockup_detector_perf_disable(); - } - --/* Return 0, if a NMI watchdog is available. Error code otherwise */ --int __weak __init watchdog_nmi_probe(void) -+/* Return 0, if a hardlockup watchdog is available. Error code otherwise */ -+int __weak __init watchdog_hardlockup_probe(void) - { - return hardlockup_detector_perf_init(); - } - - /** -- * watchdog_nmi_stop - Stop the watchdog for reconfiguration -+ * watchdog_hardlockup_stop - Stop the watchdog for reconfiguration - * - * The reconfiguration steps are: -- * watchdog_nmi_stop(); -+ * watchdog_hardlockup_stop(); - * update_variables(); -- * watchdog_nmi_start(); -+ * watchdog_hardlockup_start(); - */ --void __weak watchdog_nmi_stop(void) { } -+void __weak watchdog_hardlockup_stop(void) { } - - /** -- * watchdog_nmi_start - Start the watchdog after reconfiguration -+ * watchdog_hardlockup_start - Start the watchdog after reconfiguration - * -- * Counterpart to watchdog_nmi_stop(). -+ * Counterpart to watchdog_hardlockup_stop(). - * - * The following variables have been updated in update_variables() and - * contain the currently valid configuration: -@@ -202,23 +202,23 @@ void __weak watchdog_nmi_stop(void) { } - * - watchdog_thresh - * - watchdog_cpumask - */ --void __weak watchdog_nmi_start(void) { } -+void __weak watchdog_hardlockup_start(void) { } - - /** - * lockup_detector_update_enable - Update the sysctl enable bit - * -- * Caller needs to make sure that the NMI/perf watchdogs are off, so this -- * can't race with watchdog_nmi_disable(). -+ * Caller needs to make sure that the hard watchdogs are off, so this -+ * can't race with watchdog_hardlockup_disable(). - */ - static void lockup_detector_update_enable(void) - { - watchdog_enabled = 0; - if (!watchdog_user_enabled) - return; -- if (nmi_watchdog_available && nmi_watchdog_user_enabled) -- watchdog_enabled |= NMI_WATCHDOG_ENABLED; -- if (soft_watchdog_user_enabled) -- watchdog_enabled |= SOFT_WATCHDOG_ENABLED; -+ if (watchdog_hardlockup_available && watchdog_hardlockup_user_enabled) -+ watchdog_enabled |= WATCHDOG_HARDLOCKUP_ENABLED; -+ if (watchdog_softlockup_user_enabled) -+ watchdog_enabled |= WATCHDOG_SOFTOCKUP_ENABLED; - } - - #ifdef CONFIG_SOFTLOCKUP_DETECTOR -@@ -259,7 +259,7 @@ __setup("nowatchdog", nowatchdog_setup); - - static int __init nosoftlockup_setup(char *str) - { -- soft_watchdog_user_enabled = 0; -+ watchdog_softlockup_user_enabled = 0; - return 1; - } - __setup("nosoftlockup", nosoftlockup_setup); -@@ -373,7 +373,7 @@ static int is_softlockup(unsigned long touch_ts, - unsigned long period_ts, - unsigned long now) - { -- if ((watchdog_enabled & SOFT_WATCHDOG_ENABLED) && watchdog_thresh){ -+ if ((watchdog_enabled & WATCHDOG_SOFTOCKUP_ENABLED) && watchdog_thresh) { - /* Warn about unreasonable delays. */ - if (time_after(now, period_ts + get_softlockup_thresh())) - return now - touch_ts; -@@ -508,7 +508,7 @@ static void watchdog_enable(unsigned int cpu) - complete(done); - - /* -- * Start the timer first to prevent the NMI watchdog triggering -+ * Start the timer first to prevent the hardlockup watchdog triggering - * before the timer has a chance to fire. - */ - hrtimer_init(hrtimer, CLOCK_MONOTONIC, HRTIMER_MODE_REL_HARD); -@@ -518,9 +518,9 @@ static void watchdog_enable(unsigned int cpu) - - /* Initialize timestamp */ - update_touch_ts(); -- /* Enable the perf event */ -- if (watchdog_enabled & NMI_WATCHDOG_ENABLED) -- watchdog_nmi_enable(cpu); -+ /* Enable the hardlockup detector */ -+ if (watchdog_enabled & WATCHDOG_HARDLOCKUP_ENABLED) -+ watchdog_hardlockup_enable(cpu); - } - - static void watchdog_disable(unsigned int cpu) -@@ -530,11 +530,11 @@ static void watchdog_disable(unsigned int cpu) - WARN_ON_ONCE(cpu != smp_processor_id()); - - /* -- * Disable the perf event first. That prevents that a large delay -- * between disabling the timer and disabling the perf event causes -- * the perf NMI to detect a false positive. -+ * Disable the hardlockup detector first. That prevents that a large -+ * delay between disabling the timer and disabling the hardlockup -+ * detector causes a false positive. - */ -- watchdog_nmi_disable(cpu); -+ watchdog_hardlockup_disable(cpu); - hrtimer_cancel(hrtimer); - wait_for_completion(this_cpu_ptr(&softlockup_completion)); - } -@@ -590,7 +590,7 @@ int lockup_detector_offline_cpu(unsigned int cpu) - static void __lockup_detector_reconfigure(void) - { - cpus_read_lock(); -- watchdog_nmi_stop(); -+ watchdog_hardlockup_stop(); - - softlockup_stop_all(); - set_sample_period(); -@@ -598,7 +598,7 @@ static void __lockup_detector_reconfigure(void) - if (watchdog_enabled && watchdog_thresh) - softlockup_start_all(); - -- watchdog_nmi_start(); -+ watchdog_hardlockup_start(); - cpus_read_unlock(); - /* - * Must be called outside the cpus locked section to prevent -@@ -639,9 +639,9 @@ static __init void lockup_detector_setup(void) - static void __lockup_detector_reconfigure(void) - { - cpus_read_lock(); -- watchdog_nmi_stop(); -+ watchdog_hardlockup_stop(); - lockup_detector_update_enable(); -- watchdog_nmi_start(); -+ watchdog_hardlockup_start(); - cpus_read_unlock(); - } - void lockup_detector_reconfigure(void) -@@ -696,14 +696,14 @@ static void proc_watchdog_update(void) - /* - * common function for watchdog, nmi_watchdog and soft_watchdog parameter - * -- * caller | table->data points to | 'which' -- * -------------------|----------------------------|-------------------------- -- * proc_watchdog | watchdog_user_enabled | NMI_WATCHDOG_ENABLED | -- * | | SOFT_WATCHDOG_ENABLED -- * -------------------|----------------------------|-------------------------- -- * proc_nmi_watchdog | nmi_watchdog_user_enabled | NMI_WATCHDOG_ENABLED -- * -------------------|----------------------------|-------------------------- -- * proc_soft_watchdog | soft_watchdog_user_enabled | SOFT_WATCHDOG_ENABLED -+ * caller | table->data points to | 'which' -+ * -------------------|----------------------------------|------------------------------- -+ * proc_watchdog | watchdog_user_enabled | WATCHDOG_HARDLOCKUP_ENABLED | -+ * | | WATCHDOG_SOFTOCKUP_ENABLED -+ * -------------------|----------------------------------|------------------------------- -+ * proc_nmi_watchdog | watchdog_hardlockup_user_enabled | WATCHDOG_HARDLOCKUP_ENABLED -+ * -------------------|----------------------------------|------------------------------- -+ * proc_soft_watchdog | watchdog_softlockup_user_enabled | WATCHDOG_SOFTOCKUP_ENABLED - */ - static int proc_watchdog_common(int which, struct ctl_table *table, int write, - void *buffer, size_t *lenp, loff_t *ppos) -@@ -735,7 +735,8 @@ static int proc_watchdog_common(int which, struct ctl_table *table, int write, - int proc_watchdog(struct ctl_table *table, int write, - void *buffer, size_t *lenp, loff_t *ppos) - { -- return proc_watchdog_common(NMI_WATCHDOG_ENABLED|SOFT_WATCHDOG_ENABLED, -+ return proc_watchdog_common(WATCHDOG_HARDLOCKUP_ENABLED | -+ WATCHDOG_SOFTOCKUP_ENABLED, - table, write, buffer, lenp, ppos); - } - -@@ -745,9 +746,9 @@ int proc_watchdog(struct ctl_table *table, int write, - int proc_nmi_watchdog(struct ctl_table *table, int write, - void *buffer, size_t *lenp, loff_t *ppos) - { -- if (!nmi_watchdog_available && write) -+ if (!watchdog_hardlockup_available && write) - return -ENOTSUPP; -- return proc_watchdog_common(NMI_WATCHDOG_ENABLED, -+ return proc_watchdog_common(WATCHDOG_HARDLOCKUP_ENABLED, - table, write, buffer, lenp, ppos); - } - -@@ -757,7 +758,7 @@ int proc_nmi_watchdog(struct ctl_table *table, int write, - int proc_soft_watchdog(struct ctl_table *table, int write, - void *buffer, size_t *lenp, loff_t *ppos) - { -- return proc_watchdog_common(SOFT_WATCHDOG_ENABLED, -+ return proc_watchdog_common(WATCHDOG_SOFTOCKUP_ENABLED, - table, write, buffer, lenp, ppos); - } - -@@ -825,7 +826,7 @@ static struct ctl_table watchdog_sysctls[] = { - }, - { - .procname = "nmi_watchdog", -- .data = &nmi_watchdog_user_enabled, -+ .data = &watchdog_hardlockup_user_enabled, - .maxlen = sizeof(int), - .mode = NMI_WATCHDOG_SYSCTL_PERM, - .proc_handler = proc_nmi_watchdog, -@@ -842,7 +843,7 @@ static struct ctl_table watchdog_sysctls[] = { - #ifdef CONFIG_SOFTLOCKUP_DETECTOR - { - .procname = "soft_watchdog", -- .data = &soft_watchdog_user_enabled, -+ .data = &watchdog_softlockup_user_enabled, - .maxlen = sizeof(int), - .mode = 0644, - .proc_handler = proc_soft_watchdog, -@@ -911,8 +912,8 @@ void __init lockup_detector_init(void) - cpumask_copy(&watchdog_cpumask, - housekeeping_cpumask(HK_TYPE_TIMER)); - -- if (!watchdog_nmi_probe()) -- nmi_watchdog_available = true; -+ if (!watchdog_hardlockup_probe()) -+ watchdog_hardlockup_available = true; - lockup_detector_setup(); - watchdog_sysctl_init(); - } -diff --git a/kernel/watchdog_hld.c b/kernel/watchdog_hld.c -index 2e0e1e11227c5..6e66e0938bbc1 100644 ---- a/kernel/watchdog_hld.c -+++ b/kernel/watchdog_hld.c -@@ -228,7 +228,7 @@ void __init hardlockup_detector_perf_restart(void) - - lockdep_assert_cpus_held(); - -- if (!(watchdog_enabled & NMI_WATCHDOG_ENABLED)) -+ if (!(watchdog_enabled & WATCHDOG_HARDLOCKUP_ENABLED)) - return; - - for_each_online_cpu(cpu) { --- -2.39.2 - diff --git a/queue-6.4/watchdog-perf-adapt-the-watchdog_perf-interface-for-.patch b/queue-6.4/watchdog-perf-adapt-the-watchdog_perf-interface-for-.patch deleted file mode 100644 index 7e5f60bdab8..00000000000 --- a/queue-6.4/watchdog-perf-adapt-the-watchdog_perf-interface-for-.patch +++ /dev/null @@ -1,183 +0,0 @@ -From ac2cc3f08048bd88f1829aa7a4abd3076ee9f4ba Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Fri, 19 May 2023 10:18:40 -0700 -Subject: watchdog/perf: adapt the watchdog_perf interface for async model - -From: Lecopzer Chen - -[ Upstream commit 930d8f8dbab97cb05dba30e67a2dfa0c6dbf4bc7 ] - -When lockup_detector_init()->watchdog_hardlockup_probe(), PMU may be not -ready yet. E.g. on arm64, PMU is not ready until -device_initcall(armv8_pmu_driver_init). And it is deeply integrated with -the driver model and cpuhp. Hence it is hard to push this initialization -before smp_init(). - -But it is easy to take an opposite approach and try to initialize the -watchdog once again later. The delayed probe is called using workqueues. -It need to allocate memory and must be proceed in a normal context. The -delayed probe is able to use if watchdog_hardlockup_probe() returns -non-zero which means the return code returned when PMU is not ready yet. - -Provide an API - lockup_detector_retry_init() for anyone who needs to -delayed init lockup detector if they had ever failed at -lockup_detector_init(). - -The original assumption is: nobody should use delayed probe after -lockup_detector_check() which has __init attribute. That is, anyone uses -this API must call between lockup_detector_init() and -lockup_detector_check(), and the caller must have __init attribute - -Link: https://lkml.kernel.org/r/20230519101840.v5.16.If4ad5dd5d09fb1309cebf8bcead4b6a5a7758ca7@changeid -Reviewed-by: Petr Mladek -Co-developed-by: Pingfan Liu -Signed-off-by: Pingfan Liu -Signed-off-by: Lecopzer Chen -Signed-off-by: Douglas Anderson -Suggested-by: Petr Mladek -Cc: Andi Kleen -Cc: Catalin Marinas -Cc: Chen-Yu Tsai -Cc: Christophe Leroy -Cc: Colin Cross -Cc: Daniel Thompson -Cc: "David S. Miller" -Cc: Guenter Roeck -Cc: Ian Rogers -Cc: Marc Zyngier -Cc: Mark Rutland -Cc: Masayoshi Mizuma -Cc: Matthias Kaehlcke -Cc: Michael Ellerman -Cc: Nicholas Piggin -Cc: Randy Dunlap -Cc: "Ravi V. Shankar" -Cc: Ricardo Neri -Cc: Stephane Eranian -Cc: Stephen Boyd -Cc: Sumit Garg -Cc: Tzung-Bi Shih -Cc: Will Deacon -Signed-off-by: Andrew Morton -Stable-dep-of: 9ec272c586b0 ("watchdog/hardlockup: keep kernel.nmi_watchdog sysctl as 0444 if probe fails") -Signed-off-by: Sasha Levin ---- - include/linux/nmi.h | 2 ++ - kernel/watchdog.c | 67 ++++++++++++++++++++++++++++++++++++++++++++- - 2 files changed, 68 insertions(+), 1 deletion(-) - -diff --git a/include/linux/nmi.h b/include/linux/nmi.h -index 600a61c65a9a9..c4f58baf7ccb2 100644 ---- a/include/linux/nmi.h -+++ b/include/linux/nmi.h -@@ -13,6 +13,7 @@ - - #ifdef CONFIG_LOCKUP_DETECTOR - void lockup_detector_init(void); -+void lockup_detector_retry_init(void); - void lockup_detector_soft_poweroff(void); - void lockup_detector_cleanup(void); - -@@ -32,6 +33,7 @@ extern int sysctl_hardlockup_all_cpu_backtrace; - - #else /* CONFIG_LOCKUP_DETECTOR */ - static inline void lockup_detector_init(void) { } -+static inline void lockup_detector_retry_init(void) { } - static inline void lockup_detector_soft_poweroff(void) { } - static inline void lockup_detector_cleanup(void) { } - #endif /* !CONFIG_LOCKUP_DETECTOR */ -diff --git a/kernel/watchdog.c b/kernel/watchdog.c -index 06ea59c05ee94..f2e991894af62 100644 ---- a/kernel/watchdog.c -+++ b/kernel/watchdog.c -@@ -175,7 +175,13 @@ void __weak watchdog_hardlockup_disable(unsigned int cpu) - hardlockup_detector_perf_disable(); - } - --/* Return 0, if a hardlockup watchdog is available. Error code otherwise */ -+/* -+ * Watchdog-detector specific API. -+ * -+ * Return 0 when hardlockup watchdog is available, negative value otherwise. -+ * Note that the negative value means that a delayed probe might -+ * succeed later. -+ */ - int __weak __init watchdog_hardlockup_probe(void) - { - return hardlockup_detector_perf_init(); -@@ -904,6 +910,62 @@ static void __init watchdog_sysctl_init(void) - #define watchdog_sysctl_init() do { } while (0) - #endif /* CONFIG_SYSCTL */ - -+static void __init lockup_detector_delay_init(struct work_struct *work); -+static bool allow_lockup_detector_init_retry __initdata; -+ -+static struct work_struct detector_work __initdata = -+ __WORK_INITIALIZER(detector_work, lockup_detector_delay_init); -+ -+static void __init lockup_detector_delay_init(struct work_struct *work) -+{ -+ int ret; -+ -+ ret = watchdog_hardlockup_probe(); -+ if (ret) { -+ pr_info("Delayed init of the lockup detector failed: %d\n", ret); -+ pr_info("Hard watchdog permanently disabled\n"); -+ return; -+ } -+ -+ allow_lockup_detector_init_retry = false; -+ -+ watchdog_hardlockup_available = true; -+ lockup_detector_setup(); -+} -+ -+/* -+ * lockup_detector_retry_init - retry init lockup detector if possible. -+ * -+ * Retry hardlockup detector init. It is useful when it requires some -+ * functionality that has to be initialized later on a particular -+ * platform. -+ */ -+void __init lockup_detector_retry_init(void) -+{ -+ /* Must be called before late init calls */ -+ if (!allow_lockup_detector_init_retry) -+ return; -+ -+ schedule_work(&detector_work); -+} -+ -+/* -+ * Ensure that optional delayed hardlockup init is proceed before -+ * the init code and memory is freed. -+ */ -+static int __init lockup_detector_check(void) -+{ -+ /* Prevent any later retry. */ -+ allow_lockup_detector_init_retry = false; -+ -+ /* Make sure no work is pending. */ -+ flush_work(&detector_work); -+ -+ return 0; -+ -+} -+late_initcall_sync(lockup_detector_check); -+ - void __init lockup_detector_init(void) - { - if (tick_nohz_full_enabled()) -@@ -914,6 +976,9 @@ void __init lockup_detector_init(void) - - if (!watchdog_hardlockup_probe()) - watchdog_hardlockup_available = true; -+ else -+ allow_lockup_detector_init_retry = true; -+ - lockup_detector_setup(); - watchdog_sysctl_init(); - } --- -2.39.2 - diff --git a/queue-6.4/watchdog-perf-define-dummy-watchdog_update_hrtimer_t.patch b/queue-6.4/watchdog-perf-define-dummy-watchdog_update_hrtimer_t.patch deleted file mode 100644 index 817ee4878a4..00000000000 --- a/queue-6.4/watchdog-perf-define-dummy-watchdog_update_hrtimer_t.patch +++ /dev/null @@ -1,89 +0,0 @@ -From dd1df958258f4f81cfcac25cdf592072f9237405 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Fri, 19 May 2023 10:18:25 -0700 -Subject: watchdog/perf: define dummy watchdog_update_hrtimer_threshold() on - correct config - -From: Douglas Anderson - -[ Upstream commit 5e008df11c55228a86a1bae692cc2002503572c9 ] - -Patch series "watchdog/hardlockup: Add the buddy hardlockup detector", v5. - -This patch series adds the "buddy" hardlockup detector. In brief, the -buddy hardlockup detector can detect hardlockups without arch-level -support by having CPUs checkup on a "buddy" CPU periodically. - -Given the new design of this patch series, testing all combinations is -fairly difficult. I've attempted to make sure that all combinations of -CONFIG_ options are good, but it wouldn't surprise me if I missed -something. I apologize in advance and I'll do my best to fix any -problems that are found. - -This patch (of 18): - -The real watchdog_update_hrtimer_threshold() is defined in -kernel/watchdog_hld.c. That file is included if -CONFIG_HARDLOCKUP_DETECTOR_PERF and the function is defined in that file -if CONFIG_HARDLOCKUP_CHECK_TIMESTAMP. - -The dummy version of the function in "nmi.h" didn't get that quite right. -While this doesn't appear to be a huge deal, it's nice to make it -consistent. - -It doesn't break builds because CHECK_TIMESTAMP is only defined by x86 so -others don't get a double definition, and x86 uses perf lockup detector, -so it gets the out of line version. - -Link: https://lkml.kernel.org/r/20230519101840.v5.18.Ia44852044cdcb074f387e80df6b45e892965d4a1@changeid -Link: https://lkml.kernel.org/r/20230519101840.v5.1.I8cbb2f4fa740528fcfade4f5439b6cdcdd059251@changeid -Fixes: 7edaeb6841df ("kernel/watchdog: Prevent false positives with turbo modes") -Signed-off-by: Douglas Anderson -Reviewed-by: Nicholas Piggin -Reviewed-by: Petr Mladek -Cc: Andi Kleen -Cc: Catalin Marinas -Cc: Chen-Yu Tsai -Cc: Christophe Leroy -Cc: Daniel Thompson -Cc: "David S. Miller" -Cc: Guenter Roeck -Cc: Ian Rogers -Cc: Lecopzer Chen -Cc: Marc Zyngier -Cc: Mark Rutland -Cc: Masayoshi Mizuma -Cc: Matthias Kaehlcke -Cc: Michael Ellerman -Cc: Pingfan Liu -Cc: Randy Dunlap -Cc: "Ravi V. Shankar" -Cc: Ricardo Neri -Cc: Stephane Eranian -Cc: Stephen Boyd -Cc: Sumit Garg -Cc: Tzung-Bi Shih -Cc: Will Deacon -Cc: Colin Cross -Signed-off-by: Andrew Morton -Signed-off-by: Sasha Levin ---- - include/linux/nmi.h | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/include/linux/nmi.h b/include/linux/nmi.h -index 048c0b9aa623d..771d77b62bc10 100644 ---- a/include/linux/nmi.h -+++ b/include/linux/nmi.h -@@ -197,7 +197,7 @@ u64 hw_nmi_get_sample_period(int watchdog_thresh); - #endif - - #if defined(CONFIG_HARDLOCKUP_CHECK_TIMESTAMP) && \ -- defined(CONFIG_HARDLOCKUP_DETECTOR) -+ defined(CONFIG_HARDLOCKUP_DETECTOR_PERF) - void watchdog_update_hrtimer_threshold(u64 period); - #else - static inline void watchdog_update_hrtimer_threshold(u64 period) { } --- -2.39.2 - diff --git a/queue-6.4/watchdog-perf-more-properly-prevent-false-positives-.patch b/queue-6.4/watchdog-perf-more-properly-prevent-false-positives-.patch deleted file mode 100644 index ae6bcf7663c..00000000000 --- a/queue-6.4/watchdog-perf-more-properly-prevent-false-positives-.patch +++ /dev/null @@ -1,84 +0,0 @@ -From bed11ab0658002bdb1016315425093a43e9b7fc5 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Fri, 19 May 2023 10:18:26 -0700 -Subject: watchdog/perf: more properly prevent false positives with turbo modes - -From: Douglas Anderson - -[ Upstream commit 4379e59fe5665cfda737e45b8bf2f05321ef049c ] - -Currently, in the watchdog_overflow_callback() we first check to see if -the watchdog had been touched and _then_ we handle the workaround for -turbo mode. This order should be reversed. - -Specifically, "touching" the hardlockup detector's watchdog should avoid -lockups being detected for one period that should be roughly the same -regardless of whether we're running turbo or not. That means that we -should do the extra accounting for turbo _before_ we look at (and clear) -the global indicating that we've been touched. - -NOTE: this fix is made based on code inspection. I am not aware of any -reports where the old code would have generated false positives. That -being said, this order seems more correct and also makes it easier down -the line to share code with the "buddy" hardlockup detector. - -Link: https://lkml.kernel.org/r/20230519101840.v5.2.I843b0d1de3e096ba111a179f3adb16d576bef5c7@changeid -Fixes: 7edaeb6841df ("kernel/watchdog: Prevent false positives with turbo modes") -Signed-off-by: Douglas Anderson -Cc: Andi Kleen -Cc: Catalin Marinas -Cc: Chen-Yu Tsai -Cc: Christophe Leroy -Cc: Colin Cross -Cc: Daniel Thompson -Cc: "David S. Miller" -Cc: Guenter Roeck -Cc: Ian Rogers -Cc: Lecopzer Chen -Cc: Marc Zyngier -Cc: Mark Rutland -Cc: Masayoshi Mizuma -Cc: Matthias Kaehlcke -Cc: Michael Ellerman -Cc: Nicholas Piggin -Cc: Petr Mladek -Cc: Pingfan Liu -Cc: Randy Dunlap -Cc: "Ravi V. Shankar" -Cc: Ricardo Neri -Cc: Stephane Eranian -Cc: Stephen Boyd -Cc: Sumit Garg -Cc: Tzung-Bi Shih -Cc: Will Deacon -Signed-off-by: Andrew Morton -Signed-off-by: Sasha Levin ---- - kernel/watchdog_hld.c | 6 +++--- - 1 file changed, 3 insertions(+), 3 deletions(-) - -diff --git a/kernel/watchdog_hld.c b/kernel/watchdog_hld.c -index 247bf0b1582ca..1e8a49dc956e2 100644 ---- a/kernel/watchdog_hld.c -+++ b/kernel/watchdog_hld.c -@@ -114,14 +114,14 @@ static void watchdog_overflow_callback(struct perf_event *event, - /* Ensure the watchdog never gets throttled */ - event->hw.interrupts = 0; - -+ if (!watchdog_check_timestamp()) -+ return; -+ - if (__this_cpu_read(watchdog_nmi_touch) == true) { - __this_cpu_write(watchdog_nmi_touch, false); - return; - } - -- if (!watchdog_check_timestamp()) -- return; -- - /* check for a hardlockup - * This is done by making sure our timer interrupt - * is incrementing. The timer interrupt should have --- -2.39.2 - diff --git a/queue-6.4/watchdog-remove-watchdog_default.patch b/queue-6.4/watchdog-remove-watchdog_default.patch deleted file mode 100644 index dd60fb0d6ff..00000000000 --- a/queue-6.4/watchdog-remove-watchdog_default.patch +++ /dev/null @@ -1,64 +0,0 @@ -From 9c3756bebd7189c47e26ee95e20b4c7561300fab Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Fri, 19 May 2023 10:18:27 -0700 -Subject: watchdog: remove WATCHDOG_DEFAULT - -From: Lecopzer Chen - -[ Upstream commit 810b560e8985725dbd57bbb3f188c231365eb5ae ] - -No reference to WATCHDOG_DEFAULT, remove it. - -Link: https://lkml.kernel.org/r/20230519101840.v5.3.I6a729209a1320e0ad212176e250ff945b8f91b2a@changeid -Signed-off-by: Pingfan Liu -Signed-off-by: Lecopzer Chen -Signed-off-by: Douglas Anderson -Reviewed-by: Petr Mladek -Cc: Andi Kleen -Cc: Catalin Marinas -Cc: Chen-Yu Tsai -Cc: Christophe Leroy -Cc: Colin Cross -Cc: Daniel Thompson -Cc: "David S. Miller" -Cc: Guenter Roeck -Cc: Ian Rogers -Cc: Marc Zyngier -Cc: Mark Rutland -Cc: Masayoshi Mizuma -Cc: Matthias Kaehlcke -Cc: Michael Ellerman -Cc: Nicholas Piggin -Cc: Randy Dunlap -Cc: "Ravi V. Shankar" -Cc: Ricardo Neri -Cc: Stephane Eranian -Cc: Stephen Boyd -Cc: Sumit Garg -Cc: Tzung-Bi Shih -Cc: Will Deacon -Signed-off-by: Andrew Morton -Stable-dep-of: 9ec272c586b0 ("watchdog/hardlockup: keep kernel.nmi_watchdog sysctl as 0444 if probe fails") -Signed-off-by: Sasha Levin ---- - kernel/watchdog.c | 2 -- - 1 file changed, 2 deletions(-) - -diff --git a/kernel/watchdog.c b/kernel/watchdog.c -index 8e61f21e7e33e..582d572e13797 100644 ---- a/kernel/watchdog.c -+++ b/kernel/watchdog.c -@@ -30,10 +30,8 @@ - static DEFINE_MUTEX(watchdog_mutex); - - #if defined(CONFIG_HARDLOCKUP_DETECTOR) || defined(CONFIG_HAVE_NMI_WATCHDOG) --# define WATCHDOG_DEFAULT (SOFT_WATCHDOG_ENABLED | NMI_WATCHDOG_ENABLED) - # define NMI_WATCHDOG_DEFAULT 1 - #else --# define WATCHDOG_DEFAULT (SOFT_WATCHDOG_ENABLED) - # define NMI_WATCHDOG_DEFAULT 0 - #endif - --- -2.39.2 - diff --git a/queue-6.4/wifi-ath10k-trigger-sta-disconnect-after-reconfig-co.patch b/queue-6.4/wifi-ath10k-trigger-sta-disconnect-after-reconfig-co.patch deleted file mode 100644 index a4f89495e52..00000000000 --- a/queue-6.4/wifi-ath10k-trigger-sta-disconnect-after-reconfig-co.patch +++ /dev/null @@ -1,90 +0,0 @@ -From 876f14661427523b02b31d040828fde68a4ee503 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Fri, 26 May 2023 12:41:08 +0300 -Subject: wifi: ath10k: Trigger STA disconnect after reconfig complete on - hardware restart - -From: Youghandhar Chintala - -[ Upstream commit 75bd32f5ce94bc365ba0b9b68bcf9de84a391d37 ] - -Currently, on WCN3990, the station disconnect after hardware recovery is -not working as expected. This is because of setting the -IEEE80211_SDATA_DISCONNECT_HW_RESTART flag very early in the hardware -recovery process even before the driver invokes ieee80211_hw_restart(). -On the contrary, mac80211 expects this flag to be set after -ieee80211_hw_restart() is invoked for it to trigger station disconnect. - -Set the IEEE80211_SDATA_DISCONNECT_HW_RESTART flag in -ath10k_reconfig_complete() instead to fix this. - -The other targets are not affected by this change, since the hardware -params flag is not set. - -Tested-on: WCN3990 hw1.0 SNOC WLAN.HL.3.2.2.c10-00754-QCAHLSWMTPL-1 - -Fixes: 2c3fc50591ff ("ath10k: Trigger sta disconnect on hardware restart") -Signed-off-by: Youghandhar Chintala -Signed-off-by: Kalle Valo -Link: https://lore.kernel.org/r/20230518101515.3820-1-quic_youghand@quicinc.com -Signed-off-by: Sasha Levin ---- - drivers/net/wireless/ath/ath10k/core.c | 9 --------- - drivers/net/wireless/ath/ath10k/mac.c | 7 +++++++ - 2 files changed, 7 insertions(+), 9 deletions(-) - -diff --git a/drivers/net/wireless/ath/ath10k/core.c b/drivers/net/wireless/ath/ath10k/core.c -index 5eb131ab916fd..b6052dcc45ebf 100644 ---- a/drivers/net/wireless/ath/ath10k/core.c -+++ b/drivers/net/wireless/ath/ath10k/core.c -@@ -2504,7 +2504,6 @@ EXPORT_SYMBOL(ath10k_core_napi_sync_disable); - static void ath10k_core_restart(struct work_struct *work) - { - struct ath10k *ar = container_of(work, struct ath10k, restart_work); -- struct ath10k_vif *arvif; - int ret; - - set_bit(ATH10K_FLAG_CRASH_FLUSH, &ar->dev_flags); -@@ -2543,14 +2542,6 @@ static void ath10k_core_restart(struct work_struct *work) - ar->state = ATH10K_STATE_RESTARTING; - ath10k_halt(ar); - ath10k_scan_finish(ar); -- if (ar->hw_params.hw_restart_disconnect) { -- list_for_each_entry(arvif, &ar->arvifs, list) { -- if (arvif->is_up && -- arvif->vdev_type == WMI_VDEV_TYPE_STA) -- ieee80211_hw_restart_disconnect(arvif->vif); -- } -- } -- - ieee80211_restart_hw(ar->hw); - break; - case ATH10K_STATE_OFF: -diff --git a/drivers/net/wireless/ath/ath10k/mac.c b/drivers/net/wireless/ath/ath10k/mac.c -index 7675858f069bd..8c59d7ac92873 100644 ---- a/drivers/net/wireless/ath/ath10k/mac.c -+++ b/drivers/net/wireless/ath/ath10k/mac.c -@@ -8107,6 +8107,7 @@ static void ath10k_reconfig_complete(struct ieee80211_hw *hw, - enum ieee80211_reconfig_type reconfig_type) - { - struct ath10k *ar = hw->priv; -+ struct ath10k_vif *arvif; - - if (reconfig_type != IEEE80211_RECONFIG_TYPE_RESTART) - return; -@@ -8121,6 +8122,12 @@ static void ath10k_reconfig_complete(struct ieee80211_hw *hw, - ar->state = ATH10K_STATE_ON; - ieee80211_wake_queues(ar->hw); - clear_bit(ATH10K_FLAG_RESTARTING, &ar->dev_flags); -+ if (ar->hw_params.hw_restart_disconnect) { -+ list_for_each_entry(arvif, &ar->arvifs, list) { -+ if (arvif->is_up && arvif->vdev_type == WMI_VDEV_TYPE_STA) -+ ieee80211_hw_restart_disconnect(arvif->vif); -+ } -+ } - } - - mutex_unlock(&ar->conf_mutex); --- -2.39.2 - diff --git a/queue-6.4/wifi-ath11k-add-missing-check-for-ioremap.patch b/queue-6.4/wifi-ath11k-add-missing-check-for-ioremap.patch deleted file mode 100644 index 1d2fd9166cd..00000000000 --- a/queue-6.4/wifi-ath11k-add-missing-check-for-ioremap.patch +++ /dev/null @@ -1,48 +0,0 @@ -From 6d7d094a3d9180e30de31426561402d0255cd43f Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Tue, 13 Jun 2023 12:19:40 +0300 -Subject: wifi: ath11k: Add missing check for ioremap - -From: Jiasheng Jiang - -[ Upstream commit 16e0077e14a73866e9b0f4a6bf4ad3d4a5cb0f2a ] - -Add check for ioremap() and return the error if it fails in order to -guarantee the success of ioremap(), same as in -ath11k_qmi_load_file_target_mem(). - -Fixes: 6ac04bdc5edb ("ath11k: Use reserved host DDR addresses from DT for PCI devices") -Signed-off-by: Jiasheng Jiang -Signed-off-by: Kalle Valo -Link: https://lore.kernel.org/r/20230608022858.27405-1-jiasheng@iscas.ac.cn -Signed-off-by: Sasha Levin ---- - drivers/net/wireless/ath/ath11k/qmi.c | 5 +++++ - 1 file changed, 5 insertions(+) - -diff --git a/drivers/net/wireless/ath/ath11k/qmi.c b/drivers/net/wireless/ath/ath11k/qmi.c -index ab923e24b0a9c..2328b9447cf1b 100644 ---- a/drivers/net/wireless/ath/ath11k/qmi.c -+++ b/drivers/net/wireless/ath/ath11k/qmi.c -@@ -2058,6 +2058,9 @@ static int ath11k_qmi_assign_target_mem_chunk(struct ath11k_base *ab) - ab->qmi.target_mem[idx].iaddr = - ioremap(ab->qmi.target_mem[idx].paddr, - ab->qmi.target_mem[i].size); -+ if (!ab->qmi.target_mem[idx].iaddr) -+ return -EIO; -+ - ab->qmi.target_mem[idx].size = ab->qmi.target_mem[i].size; - host_ddr_sz = ab->qmi.target_mem[i].size; - ab->qmi.target_mem[idx].type = ab->qmi.target_mem[i].type; -@@ -2083,6 +2086,8 @@ static int ath11k_qmi_assign_target_mem_chunk(struct ath11k_base *ab) - ab->qmi.target_mem[idx].iaddr = - ioremap(ab->qmi.target_mem[idx].paddr, - ab->qmi.target_mem[i].size); -+ if (!ab->qmi.target_mem[idx].iaddr) -+ return -EIO; - } else { - ab->qmi.target_mem[idx].paddr = - ATH11K_QMI_CALDB_ADDRESS; --- -2.39.2 - diff --git a/queue-6.4/wifi-ath11k-add-missing-hw_ops-get_ring_selector-for.patch b/queue-6.4/wifi-ath11k-add-missing-hw_ops-get_ring_selector-for.patch deleted file mode 100644 index a789197f9b6..00000000000 --- a/queue-6.4/wifi-ath11k-add-missing-hw_ops-get_ring_selector-for.patch +++ /dev/null @@ -1,67 +0,0 @@ -From 8b074b654ed01d0be670409b870a5c99553f0f26 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Thu, 15 Jun 2023 14:41:48 +0300 -Subject: wifi: ath11k: Add missing hw_ops->get_ring_selector() for IPQ5018 - -From: Ziyang Huang - -[ Upstream commit ce282d8de71f07f0056ea319541141152c65f552 ] - -During sending data after clients connected, hw_ops->get_ring_selector() -will be called. But for IPQ5018, this member isn't set, and the -following NULL pointer exception will be occurred: - - [ 38.840478] 8<--- cut here --- - [ 38.840517] Unable to handle kernel NULL pointer dereference at virtual address 00000000 - ... - [ 38.923161] PC is at 0x0 - [ 38.927930] LR is at ath11k_dp_tx+0x70/0x730 [ath11k] - ... - [ 39.063264] Process hostapd (pid: 1034, stack limit = 0x801ceb3d) - [ 39.068994] Stack: (0x856a9a68 to 0x856aa000) - ... - [ 39.438467] [<7f323804>] (ath11k_dp_tx [ath11k]) from [<7f314e6c>] (ath11k_mac_op_tx+0x80/0x190 [ath11k]) - [ 39.446607] [<7f314e6c>] (ath11k_mac_op_tx [ath11k]) from [<7f17dbe0>] (ieee80211_handle_wake_tx_queue+0x7c/0xc0 [mac80211]) - [ 39.456162] [<7f17dbe0>] (ieee80211_handle_wake_tx_queue [mac80211]) from [<7f174450>] (ieee80211_probereq_get+0x584/0x704 [mac80211]) - [ 39.467443] [<7f174450>] (ieee80211_probereq_get [mac80211]) from [<7f178c40>] (ieee80211_tx_prepare_skb+0x1f8/0x248 [mac80211]) - [ 39.479334] [<7f178c40>] (ieee80211_tx_prepare_skb [mac80211]) from [<7f179e28>] (__ieee80211_subif_start_xmit+0x32c/0x3d4 [mac80211]) - [ 39.491053] [<7f179e28>] (__ieee80211_subif_start_xmit [mac80211]) from [<7f17af08>] (ieee80211_tx_control_port+0x19c/0x288 [mac80211]) - [ 39.502946] [<7f17af08>] (ieee80211_tx_control_port [mac80211]) from [<7f0fc704>] (nl80211_tx_control_port+0x174/0x1d4 [cfg80211]) - [ 39.515017] [<7f0fc704>] (nl80211_tx_control_port [cfg80211]) from [<808ceac4>] (genl_rcv_msg+0x154/0x340) - [ 39.526814] [<808ceac4>] (genl_rcv_msg) from [<808cdb74>] (netlink_rcv_skb+0xb8/0x11c) - [ 39.536446] [<808cdb74>] (netlink_rcv_skb) from [<808ce1d0>] (genl_rcv+0x28/0x34) - [ 39.544344] [<808ce1d0>] (genl_rcv) from [<808cd234>] (netlink_unicast+0x174/0x274) - [ 39.551895] [<808cd234>] (netlink_unicast) from [<808cd510>] (netlink_sendmsg+0x1dc/0x440) - [ 39.559362] [<808cd510>] (netlink_sendmsg) from [<808596e0>] (____sys_sendmsg+0x1a8/0x1fc) - [ 39.567697] [<808596e0>] (____sys_sendmsg) from [<8085b1a8>] (___sys_sendmsg+0xa4/0xdc) - [ 39.575941] [<8085b1a8>] (___sys_sendmsg) from [<8085b310>] (sys_sendmsg+0x44/0x74) - [ 39.583841] [<8085b310>] (sys_sendmsg) from [<80300060>] (ret_fast_syscall+0x0/0x40) - ... - [ 39.620734] Code: bad PC value - [ 39.625869] ---[ end trace 8aef983ad3cbc032 ]--- - -Fixes: ba60f2793d3a ("wifi: ath11k: initialize hw_ops for IPQ5018") -Signed-off-by: Ziyang Huang -Signed-off-by: Kalle Valo -Link: https://lore.kernel.org/r/TYZPR01MB5556D6E3F63EAB5129D11420C953A@TYZPR01MB5556.apcprd01.prod.exchangelabs.com -Signed-off-by: Sasha Levin ---- - drivers/net/wireless/ath/ath11k/hw.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/drivers/net/wireless/ath/ath11k/hw.c b/drivers/net/wireless/ath/ath11k/hw.c -index eb995f9cf0fa1..72797289b33e2 100644 ---- a/drivers/net/wireless/ath/ath11k/hw.c -+++ b/drivers/net/wireless/ath/ath11k/hw.c -@@ -1175,7 +1175,7 @@ const struct ath11k_hw_ops ipq5018_ops = { - .mpdu_info_get_peerid = ath11k_hw_ipq8074_mpdu_info_get_peerid, - .rx_desc_mac_addr2_valid = ath11k_hw_ipq9074_rx_desc_mac_addr2_valid, - .rx_desc_mpdu_start_addr2 = ath11k_hw_ipq9074_rx_desc_mpdu_start_addr2, -- -+ .get_ring_selector = ath11k_hw_ipq8074_get_tcl_ring_selector, - }; - - #define ATH11K_TX_RING_MASK_0 BIT(0) --- -2.39.2 - diff --git a/queue-6.4/wifi-ath11k-add-missing-ops-config-for-ipq5018-in-at.patch b/queue-6.4/wifi-ath11k-add-missing-ops-config-for-ipq5018-in-at.patch deleted file mode 100644 index 0e62831718a..00000000000 --- a/queue-6.4/wifi-ath11k-add-missing-ops-config-for-ipq5018-in-at.patch +++ /dev/null @@ -1,40 +0,0 @@ -From b4feed7e5a90871e160befedcd5c0ca0ff1aa100 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Thu, 15 Jun 2023 14:41:47 +0300 -Subject: wifi: ath11k: Add missing ops config for IPQ5018 in - ath11k_ahb_probe() - -From: Ziyang Huang - -[ Upstream commit 469ddb20cae61cad9c4f208a4c8682305905a511 ] - -Without this patch, the IPQ5018 WiFi will fail and print the following -logs: - - [ 11.033179] ath11k c000000.wifi: unsupported device type 7 - [ 11.033223] ath11k: probe of c000000.wifi failed with error -95 - -Fixes: 25edca7bb18a ("wifi: ath11k: add ipq5018 device support") -Signed-off-by: Ziyang Huang -Signed-off-by: Kalle Valo -Link: https://lore.kernel.org/r/TYZPR01MB5556D7AA10ABEDDDD2D8F39EC953A@TYZPR01MB5556.apcprd01.prod.exchangelabs.com -Signed-off-by: Sasha Levin ---- - drivers/net/wireless/ath/ath11k/ahb.c | 1 + - 1 file changed, 1 insertion(+) - -diff --git a/drivers/net/wireless/ath/ath11k/ahb.c b/drivers/net/wireless/ath/ath11k/ahb.c -index 5cbba9a8b6ba9..396548e57022f 100644 ---- a/drivers/net/wireless/ath/ath11k/ahb.c -+++ b/drivers/net/wireless/ath/ath11k/ahb.c -@@ -1127,6 +1127,7 @@ static int ath11k_ahb_probe(struct platform_device *pdev) - switch (hw_rev) { - case ATH11K_HW_IPQ8074: - case ATH11K_HW_IPQ6018_HW10: -+ case ATH11K_HW_IPQ5018_HW10: - hif_ops = &ath11k_ahb_hif_ops_ipq8074; - pci_ops = NULL; - break; --- -2.39.2 - diff --git a/queue-6.4/wifi-ath11k-restart-firmware-after-cold-boot-calibra.patch b/queue-6.4/wifi-ath11k-restart-firmware-after-cold-boot-calibra.patch deleted file mode 100644 index dabf46d24a7..00000000000 --- a/queue-6.4/wifi-ath11k-restart-firmware-after-cold-boot-calibra.patch +++ /dev/null @@ -1,57 +0,0 @@ -From b4573dc08df1b5f840765de3f72fe2c877e9c7f3 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Thu, 15 Jun 2023 14:41:48 +0300 -Subject: wifi: ath11k: Restart firmware after cold boot calibration for - IPQ5018 - -From: Ziyang Huang - -[ Upstream commit 80c5390e1f5e5b16d820512265530ef26073d8e0 ] - -Restart is required after cold boot calibration on IPQ5018. Otherwise, -we get the following exception: - - [ 14.412829] qcom-q6-mpd cd00000.remoteproc: fatal error received: err_smem_ver.2.1: - [ 14.412829] QC Image Version : QC_IMAGE_VERSION_STRING=WLAN.HK.2.6.0.1-00974-QCAHKSWPL_SILICONZ-1 - [ 14.412829] Image Variant : IMAGE_VARIANT_STRING=5018.wlanfw2.map_spr_spr_evalQ - [ 14.412829] DALSysLogEvent.c:174 Assertion 0 failed param0 :zero,param1 :zero,param2 :zero - [ 14.412829] Thread ID : 0x00000048 Thread name : WLAN RT0 Process ID : 0x00000001 Process name :wlan0 - [ 14.412829] - [ 14.412829] Registers: - [ 14.412829] SP : 0x4c81c120 - [ 14.412829] FP : 0x4c81c138 - [ 14.412829] PC : 0xb022c590 - [ 14.412829] SSR : 0x00000000 - [ 14.412829] BADVA : 0x00000000 - [ 14.412829] LR : 0xb0008490 - [ 14.412829] - [ 14.412829] StackDump - [ 14.412829] from:0x4c81c120 - [ 14.412829] to: 0x00000000: - [ 14.412829] - [ 14.463006] remoteproc remoteproc0: crash detected in cd00000.remoteproc: type fatal error - -Fixes: 8dfe875aa24a ("wifi: ath11k: update hw params for IPQ5018") -Signed-off-by: Ziyang Huang -Signed-off-by: Kalle Valo -Link: https://lore.kernel.org/r/TYZPR01MB55566969818BD4B49E770445C953A@TYZPR01MB5556.apcprd01.prod.exchangelabs.com -Signed-off-by: Sasha Levin ---- - drivers/net/wireless/ath/ath11k/core.c | 1 + - 1 file changed, 1 insertion(+) - -diff --git a/drivers/net/wireless/ath/ath11k/core.c b/drivers/net/wireless/ath/ath11k/core.c -index b1b90bd34d67e..9de23c11e18bb 100644 ---- a/drivers/net/wireless/ath/ath11k/core.c -+++ b/drivers/net/wireless/ath/ath11k/core.c -@@ -664,6 +664,7 @@ static const struct ath11k_hw_params ath11k_hw_params[] = { - .hal_params = &ath11k_hw_hal_params_ipq8074, - .single_pdev_only = false, - .cold_boot_calib = true, -+ .cbcal_restart_fw = true, - .fix_l1ss = true, - .supports_dynamic_smps_6ghz = false, - .alloc_cacheable_memory = true, --- -2.39.2 - diff --git a/queue-6.4/wifi-ath9k-avoid-referencing-uninit-memory-in-ath9k_.patch b/queue-6.4/wifi-ath9k-avoid-referencing-uninit-memory-in-ath9k_.patch deleted file mode 100644 index a533c2ccb88..00000000000 --- a/queue-6.4/wifi-ath9k-avoid-referencing-uninit-memory-in-ath9k_.patch +++ /dev/null @@ -1,58 +0,0 @@ -From f3ac7448e9d82e248f95cae6fbaa98fadb3ff26c Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Wed, 26 Apr 2023 17:35:01 +0300 -Subject: wifi: ath9k: avoid referencing uninit memory in ath9k_wmi_ctrl_rx -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -From: Fedor Pchelkin - -[ Upstream commit f24292e827088bba8de7158501ac25a59b064953 ] - -For the reasons also described in commit b383e8abed41 ("wifi: ath9k: avoid -uninit memory read in ath9k_htc_rx_msg()"), ath9k_htc_rx_msg() should -validate pkt_len before accessing the SKB. - -For example, the obtained SKB may have been badly constructed with -pkt_len = 8. In this case, the SKB can only contain a valid htc_frame_hdr -but after being processed in ath9k_htc_rx_msg() and passed to -ath9k_wmi_ctrl_rx() endpoint RX handler, it is expected to have a WMI -command header which should be located inside its data payload. - -Implement sanity checking inside ath9k_wmi_ctrl_rx(). Otherwise, uninit -memory can be referenced. - -Tested on Qualcomm Atheros Communications AR9271 802.11n . - -Found by Linux Verification Center (linuxtesting.org) with Syzkaller. - -Fixes: fb9987d0f748 ("ath9k_htc: Support for AR9271 chipset.") -Reported-and-tested-by: syzbot+f2cb6e0ffdb961921e4d@syzkaller.appspotmail.com -Signed-off-by: Fedor Pchelkin -Acked-by: Toke Høiland-Jørgensen -Signed-off-by: Kalle Valo -Link: https://lore.kernel.org/r/20230424183348.111355-1-pchelkin@ispras.ru -Signed-off-by: Sasha Levin ---- - drivers/net/wireless/ath/ath9k/wmi.c | 4 ++++ - 1 file changed, 4 insertions(+) - -diff --git a/drivers/net/wireless/ath/ath9k/wmi.c b/drivers/net/wireless/ath/ath9k/wmi.c -index 19345b8f7bfd5..d652c647d56b5 100644 ---- a/drivers/net/wireless/ath/ath9k/wmi.c -+++ b/drivers/net/wireless/ath/ath9k/wmi.c -@@ -221,6 +221,10 @@ static void ath9k_wmi_ctrl_rx(void *priv, struct sk_buff *skb, - if (unlikely(wmi->stopped)) - goto free_skb; - -+ /* Validate the obtained SKB. */ -+ if (unlikely(skb->len < sizeof(struct wmi_cmd_hdr))) -+ goto free_skb; -+ - hdr = (struct wmi_cmd_hdr *) skb->data; - cmd_id = be16_to_cpu(hdr->command_id); - --- -2.39.2 - diff --git a/queue-6.4/wifi-ath9k-convert-msecs-to-jiffies-where-needed.patch b/queue-6.4/wifi-ath9k-convert-msecs-to-jiffies-where-needed.patch deleted file mode 100644 index b6676d6cb42..00000000000 --- a/queue-6.4/wifi-ath9k-convert-msecs-to-jiffies-where-needed.patch +++ /dev/null @@ -1,51 +0,0 @@ -From b155adaad457494c0fac5b8beb341d47809f0c94 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Tue, 13 Jun 2023 16:46:55 +0300 -Subject: wifi: ath9k: convert msecs to jiffies where needed -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -From: Dmitry Antipov - -[ Upstream commit 2aa083acea9f61be3280184384551178f510ff51 ] - -Since 'ieee80211_queue_delayed_work()' expects timeout in -jiffies and not milliseconds, 'msecs_to_jiffies()' should -be used in 'ath_restart_work()' and '__ath9k_flush()'. - -Fixes: d63ffc45c5d3 ("ath9k: rename tx_complete_work to hw_check_work") -Signed-off-by: Dmitry Antipov -Acked-by: Toke Høiland-Jørgensen -Signed-off-by: Kalle Valo -Link: https://lore.kernel.org/r/20230613134655.248728-1-dmantipov@yandex.ru -Signed-off-by: Sasha Levin ---- - drivers/net/wireless/ath/ath9k/main.c | 4 ++-- - 1 file changed, 2 insertions(+), 2 deletions(-) - -diff --git a/drivers/net/wireless/ath/ath9k/main.c b/drivers/net/wireless/ath/ath9k/main.c -index 7f9f06ea8a05f..6360d3356e256 100644 ---- a/drivers/net/wireless/ath/ath9k/main.c -+++ b/drivers/net/wireless/ath/ath9k/main.c -@@ -203,7 +203,7 @@ void ath_cancel_work(struct ath_softc *sc) - void ath_restart_work(struct ath_softc *sc) - { - ieee80211_queue_delayed_work(sc->hw, &sc->hw_check_work, -- ATH_HW_CHECK_POLL_INT); -+ msecs_to_jiffies(ATH_HW_CHECK_POLL_INT)); - - if (AR_SREV_9340(sc->sc_ah) || AR_SREV_9330(sc->sc_ah)) - ieee80211_queue_delayed_work(sc->hw, &sc->hw_pll_work, -@@ -2240,7 +2240,7 @@ void __ath9k_flush(struct ieee80211_hw *hw, u32 queues, bool drop, - } - - ieee80211_queue_delayed_work(hw, &sc->hw_check_work, -- ATH_HW_CHECK_POLL_INT); -+ msecs_to_jiffies(ATH_HW_CHECK_POLL_INT)); - } - - static bool ath9k_tx_frames_pending(struct ieee80211_hw *hw) --- -2.39.2 - diff --git a/queue-6.4/wifi-ath9k-don-t-allow-to-overwrite-endpoint0-attrib.patch b/queue-6.4/wifi-ath9k-don-t-allow-to-overwrite-endpoint0-attrib.patch deleted file mode 100644 index 4b37efac2b7..00000000000 --- a/queue-6.4/wifi-ath9k-don-t-allow-to-overwrite-endpoint0-attrib.patch +++ /dev/null @@ -1,54 +0,0 @@ -From a1d35872c69183668f21042f3420c175097d0f94 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Wed, 17 May 2023 18:03:17 +0300 -Subject: wifi: ath9k: don't allow to overwrite ENDPOINT0 attributes -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -From: Fedor Pchelkin - -[ Upstream commit 061b0cb9327b80d7a0f63a33e7c3e2a91a71f142 ] - -A bad USB device is able to construct a service connection response -message with target endpoint being ENDPOINT0 which is reserved for -HTC_CTRL_RSVD_SVC and should not be modified to be used for any other -services. - -Reject such service connection responses. - -Found by Linux Verification Center (linuxtesting.org) with Syzkaller. - -Fixes: fb9987d0f748 ("ath9k_htc: Support for AR9271 chipset.") -Reported-by: syzbot+b68fbebe56d8362907e8@syzkaller.appspotmail.com -Signed-off-by: Fedor Pchelkin -Acked-by: Toke Høiland-Jørgensen -Signed-off-by: Kalle Valo -Link: https://lore.kernel.org/r/20230516150427.79469-1-pchelkin@ispras.ru -Signed-off-by: Sasha Levin ---- - drivers/net/wireless/ath/ath9k/htc_hst.c | 8 +++++++- - 1 file changed, 7 insertions(+), 1 deletion(-) - -diff --git a/drivers/net/wireless/ath/ath9k/htc_hst.c b/drivers/net/wireless/ath/ath9k/htc_hst.c -index fe62ff668f757..99667aba289df 100644 ---- a/drivers/net/wireless/ath/ath9k/htc_hst.c -+++ b/drivers/net/wireless/ath/ath9k/htc_hst.c -@@ -114,7 +114,13 @@ static void htc_process_conn_rsp(struct htc_target *target, - - if (svc_rspmsg->status == HTC_SERVICE_SUCCESS) { - epid = svc_rspmsg->endpoint_id; -- if (epid < 0 || epid >= ENDPOINT_MAX) -+ -+ /* Check that the received epid for the endpoint to attach -+ * a new service is valid. ENDPOINT0 can't be used here as it -+ * is already reserved for HTC_CTRL_RSVD_SVC service and thus -+ * should not be modified. -+ */ -+ if (epid <= ENDPOINT0 || epid >= ENDPOINT_MAX) - return; - - service_id = be16_to_cpu(svc_rspmsg->service_id); --- -2.39.2 - diff --git a/queue-6.4/wifi-ath9k-fix-ar9003-mac-hardware-hang-check-regist.patch b/queue-6.4/wifi-ath9k-fix-ar9003-mac-hardware-hang-check-regist.patch deleted file mode 100644 index 51ba24a978c..00000000000 --- a/queue-6.4/wifi-ath9k-fix-ar9003-mac-hardware-hang-check-regist.patch +++ /dev/null @@ -1,95 +0,0 @@ -From 45f20e14e983fc543a3b727cd7532072c2792e94 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Wed, 26 Apr 2023 17:35:00 +0300 -Subject: wifi: ath9k: fix AR9003 mac hardware hang check register offset - calculation -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -From: Peter Seiderer - -[ Upstream commit 3e56c80931c7615250fe4bf83f93b57881969266 ] - -Fix ath9k_hw_verify_hang()/ar9003_hw_detect_mac_hang() register offset -calculation (do not overflow the shift for the second register/queues -above five, use the register layout described in the comments above -ath9k_hw_verify_hang() instead). - -Fixes: 222e04830ff0 ("ath9k: Fix MAC HW hang check for AR9003") - -Reported-by: Gregg Wonderly -Link: https://lore.kernel.org/linux-wireless/E3A9C354-0CB7-420C-ADEF-F0177FB722F4@seqtechllc.com/ -Signed-off-by: Peter Seiderer -Acked-by: Toke Høiland-Jørgensen -Reviewed-by: Simon Horman -Signed-off-by: Kalle Valo -Link: https://lore.kernel.org/r/20230422212423.26065-1-ps.report@gmx.net -Signed-off-by: Sasha Levin ---- - drivers/net/wireless/ath/ath9k/ar9003_hw.c | 27 ++++++++++++++-------- - 1 file changed, 18 insertions(+), 9 deletions(-) - -diff --git a/drivers/net/wireless/ath/ath9k/ar9003_hw.c b/drivers/net/wireless/ath/ath9k/ar9003_hw.c -index 4f27a9fb1482b..e9bd13eeee92f 100644 ---- a/drivers/net/wireless/ath/ath9k/ar9003_hw.c -+++ b/drivers/net/wireless/ath/ath9k/ar9003_hw.c -@@ -1099,17 +1099,22 @@ static bool ath9k_hw_verify_hang(struct ath_hw *ah, unsigned int queue) - { - u32 dma_dbg_chain, dma_dbg_complete; - u8 dcu_chain_state, dcu_complete_state; -+ unsigned int dbg_reg, reg_offset; - int i; - -- for (i = 0; i < NUM_STATUS_READS; i++) { -- if (queue < 6) -- dma_dbg_chain = REG_READ(ah, AR_DMADBG_4); -- else -- dma_dbg_chain = REG_READ(ah, AR_DMADBG_5); -+ if (queue < 6) { -+ dbg_reg = AR_DMADBG_4; -+ reg_offset = queue * 5; -+ } else { -+ dbg_reg = AR_DMADBG_5; -+ reg_offset = (queue - 6) * 5; -+ } - -+ for (i = 0; i < NUM_STATUS_READS; i++) { -+ dma_dbg_chain = REG_READ(ah, dbg_reg); - dma_dbg_complete = REG_READ(ah, AR_DMADBG_6); - -- dcu_chain_state = (dma_dbg_chain >> (5 * queue)) & 0x1f; -+ dcu_chain_state = (dma_dbg_chain >> reg_offset) & 0x1f; - dcu_complete_state = dma_dbg_complete & 0x3; - - if ((dcu_chain_state != 0x6) || (dcu_complete_state != 0x1)) -@@ -1128,6 +1133,7 @@ static bool ar9003_hw_detect_mac_hang(struct ath_hw *ah) - u8 dcu_chain_state, dcu_complete_state; - bool dcu_wait_frdone = false; - unsigned long chk_dcu = 0; -+ unsigned int reg_offset; - unsigned int i = 0; - - dma_dbg_4 = REG_READ(ah, AR_DMADBG_4); -@@ -1139,12 +1145,15 @@ static bool ar9003_hw_detect_mac_hang(struct ath_hw *ah) - goto exit; - - for (i = 0; i < ATH9K_NUM_TX_QUEUES; i++) { -- if (i < 6) -+ if (i < 6) { - chk_dbg = dma_dbg_4; -- else -+ reg_offset = i * 5; -+ } else { - chk_dbg = dma_dbg_5; -+ reg_offset = (i - 6) * 5; -+ } - -- dcu_chain_state = (chk_dbg >> (5 * i)) & 0x1f; -+ dcu_chain_state = (chk_dbg >> reg_offset) & 0x1f; - if (dcu_chain_state == 0x6) { - dcu_wait_frdone = true; - chk_dcu |= BIT(i); --- -2.39.2 - diff --git a/queue-6.4/wifi-ath9k-fix-possible-stall-on-ath9k_txq_list_has_.patch b/queue-6.4/wifi-ath9k-fix-possible-stall-on-ath9k_txq_list_has_.patch deleted file mode 100644 index 5cf5be6995e..00000000000 --- a/queue-6.4/wifi-ath9k-fix-possible-stall-on-ath9k_txq_list_has_.patch +++ /dev/null @@ -1,111 +0,0 @@ -From 6ba9cab6d72e6598b76ace0ed4a9ec09f62ebf76 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Fri, 9 Jun 2023 11:37:44 +0200 -Subject: wifi: ath9k: Fix possible stall on ath9k_txq_list_has_key() -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -From: Remi Pommarel - -[ Upstream commit 75086cc6dee046e3fbb3dba148b376d8802f83bc ] - -On EDMA capable hardware, ath9k_txq_list_has_key() can enter infinite -loop if it is called while all txq_fifos have packets that use different -key that the one we are looking for. Fix it by exiting the loop if all -txq_fifos have been checked already. - -Because this loop is called under spin_lock_bh() (see ath_txq_lock) it -causes the following rcu stall: - -rcu: INFO: rcu_sched self-detected stall on CPU -ath10k_pci 0000:01:00.0: failed to read temperature -11 -rcu: 1-....: (5254 ticks this GP) idle=189/1/0x4000000000000002 softirq=8442983/8442984 fqs=2579 - (t=5257 jiffies g=17983297 q=334) -Task dump for CPU 1: -task:hostapd state:R running task stack: 0 pid: 297 ppid: 289 flags:0x0000000a -Call trace: - dump_backtrace+0x0/0x170 - show_stack+0x1c/0x24 - sched_show_task+0x140/0x170 - dump_cpu_task+0x48/0x54 - rcu_dump_cpu_stacks+0xf0/0x134 - rcu_sched_clock_irq+0x8d8/0x9fc - update_process_times+0xa0/0xec - tick_sched_timer+0x5c/0xd0 - __hrtimer_run_queues+0x154/0x320 - hrtimer_interrupt+0x120/0x2f0 - arch_timer_handler_virt+0x38/0x44 - handle_percpu_devid_irq+0x9c/0x1e0 - handle_domain_irq+0x64/0x90 - gic_handle_irq+0x78/0xb0 - call_on_irq_stack+0x28/0x38 - do_interrupt_handler+0x54/0x5c - el1_interrupt+0x2c/0x4c - el1h_64_irq_handler+0x14/0x1c - el1h_64_irq+0x74/0x78 - ath9k_txq_has_key+0x1bc/0x250 [ath9k] - ath9k_set_key+0x1cc/0x3dc [ath9k] - drv_set_key+0x78/0x170 - ieee80211_key_replace+0x564/0x6cc - ieee80211_key_link+0x174/0x220 - ieee80211_add_key+0x11c/0x300 - nl80211_new_key+0x12c/0x330 - genl_family_rcv_msg_doit+0xbc/0x11c - genl_rcv_msg+0xd8/0x1c4 - netlink_rcv_skb+0x40/0x100 - genl_rcv+0x3c/0x50 - netlink_unicast+0x1ec/0x2c0 - netlink_sendmsg+0x198/0x3c0 - ____sys_sendmsg+0x210/0x250 - ___sys_sendmsg+0x78/0xc4 - __sys_sendmsg+0x4c/0x90 - __arm64_sys_sendmsg+0x28/0x30 - invoke_syscall.constprop.0+0x60/0x100 - do_el0_svc+0x48/0xd0 - el0_svc+0x14/0x50 - el0t_64_sync_handler+0xa8/0xb0 - el0t_64_sync+0x158/0x15c - -This rcu stall is hard to reproduce as is, but changing ATH_TXFIFO_DEPTH -from 8 to 2 makes it reasonably easy to reproduce. - -Fixes: ca2848022c12 ("ath9k: Postpone key cache entry deletion for TXQ frames reference it") -Signed-off-by: Remi Pommarel -Tested-by: Nicolas Escande -Acked-by: Toke Høiland-Jørgensen -Signed-off-by: Kalle Valo -Link: https://lore.kernel.org/r/20230609093744.1985-1-repk@triplefau.lt -Signed-off-by: Sasha Levin ---- - drivers/net/wireless/ath/ath9k/main.c | 7 ++++--- - 1 file changed, 4 insertions(+), 3 deletions(-) - -diff --git a/drivers/net/wireless/ath/ath9k/main.c b/drivers/net/wireless/ath/ath9k/main.c -index a4197c14f0a92..7f9f06ea8a05f 100644 ---- a/drivers/net/wireless/ath/ath9k/main.c -+++ b/drivers/net/wireless/ath/ath9k/main.c -@@ -850,7 +850,7 @@ static bool ath9k_txq_list_has_key(struct list_head *txq_list, u32 keyix) - static bool ath9k_txq_has_key(struct ath_softc *sc, u32 keyix) - { - struct ath_hw *ah = sc->sc_ah; -- int i; -+ int i, j; - struct ath_txq *txq; - bool key_in_use = false; - -@@ -868,8 +868,9 @@ static bool ath9k_txq_has_key(struct ath_softc *sc, u32 keyix) - if (sc->sc_ah->caps.hw_caps & ATH9K_HW_CAP_EDMA) { - int idx = txq->txq_tailidx; - -- while (!key_in_use && -- !list_empty(&txq->txq_fifo[idx])) { -+ for (j = 0; !key_in_use && -+ !list_empty(&txq->txq_fifo[idx]) && -+ j < ATH_TXFIFO_DEPTH; j++) { - key_in_use = ath9k_txq_list_has_key( - &txq->txq_fifo[idx], keyix); - INCR(idx, ATH_TXFIFO_DEPTH); --- -2.39.2 - diff --git a/queue-6.4/wifi-atmel-fix-an-error-handling-path-in-atmel_probe.patch b/queue-6.4/wifi-atmel-fix-an-error-handling-path-in-atmel_probe.patch deleted file mode 100644 index e93b06daec6..00000000000 --- a/queue-6.4/wifi-atmel-fix-an-error-handling-path-in-atmel_probe.patch +++ /dev/null @@ -1,59 +0,0 @@ -From ca3db8b12bf1c56fcab0979d8dfffdfac15c50f5 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Sat, 20 May 2023 09:53:14 +0200 -Subject: wifi: atmel: Fix an error handling path in atmel_probe() - -From: Christophe JAILLET - -[ Upstream commit 6b92e4351a29af52c285fe235e6e4d1a75de04b2 ] - -Should atmel_config() fail, some resources need to be released as already -done in the remove function. - -While at it, remove a useless and erroneous comment. The probe is -atmel_probe(), not atmel_attach(). - -Fixes: 15b99ac17295 ("[PATCH] pcmcia: add return value to _config() functions") -Signed-off-by: Christophe JAILLET -Reviewed-by: Simon Horman -Signed-off-by: Kalle Valo -Link: https://lore.kernel.org/r/1e65f174607a83348034197fa7d603bab10ba4a9.1684569156.git.christophe.jaillet@wanadoo.fr -Signed-off-by: Sasha Levin ---- - drivers/net/wireless/atmel/atmel_cs.c | 13 +++++++++++-- - 1 file changed, 11 insertions(+), 2 deletions(-) - -diff --git a/drivers/net/wireless/atmel/atmel_cs.c b/drivers/net/wireless/atmel/atmel_cs.c -index 453bb84cb3386..58bba9875d366 100644 ---- a/drivers/net/wireless/atmel/atmel_cs.c -+++ b/drivers/net/wireless/atmel/atmel_cs.c -@@ -72,6 +72,7 @@ struct local_info { - static int atmel_probe(struct pcmcia_device *p_dev) - { - struct local_info *local; -+ int ret; - - dev_dbg(&p_dev->dev, "atmel_attach()\n"); - -@@ -82,8 +83,16 @@ static int atmel_probe(struct pcmcia_device *p_dev) - - p_dev->priv = local; - -- return atmel_config(p_dev); --} /* atmel_attach */ -+ ret = atmel_config(p_dev); -+ if (ret) -+ goto err_free_priv; -+ -+ return 0; -+ -+err_free_priv: -+ kfree(p_dev->priv); -+ return ret; -+} - - static void atmel_detach(struct pcmcia_device *link) - { --- -2.39.2 - diff --git a/queue-6.4/wifi-cfg80211-drop-incorrect-nontransmitted-bss-upda.patch b/queue-6.4/wifi-cfg80211-drop-incorrect-nontransmitted-bss-upda.patch deleted file mode 100644 index d120ac38f88..00000000000 --- a/queue-6.4/wifi-cfg80211-drop-incorrect-nontransmitted-bss-upda.patch +++ /dev/null @@ -1,218 +0,0 @@ -From 01358f3e194633e86208a901291d23e8c52223ee Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Fri, 16 Jun 2023 09:54:04 +0300 -Subject: wifi: cfg80211: drop incorrect nontransmitted BSS update code - -From: Benjamin Berg - -[ Upstream commit 39432f8a3752a87a53fd8d5e51824a43aaae5cab ] - -The removed code ran for any BSS that was not included in the MBSSID -element in order to update it. However, instead of using the correct -inheritance rules, it would simply copy the elements from the -transmitting AP. The result is that we would report incorrect elements -in this case. - -After some discussions, it seems that there are likely not even APs -actually using this feature. Either way, removing the code decreases -complexity and makes the cfg80211 behaviour more correct. - -Fixes: 0b8fb8235be8 ("cfg80211: Parsing of Multiple BSSID information in scanning") -Signed-off-by: Benjamin Berg -Signed-off-by: Gregory Greenman -Link: https://lore.kernel.org/r/20230616094949.cfd6d8db1f26.Ia1044902b86cd7d366400a4bfb93691b8f05d68c@changeid -Signed-off-by: Johannes Berg -Signed-off-by: Sasha Levin ---- - net/wireless/scan.c | 154 ++++---------------------------------------- - 1 file changed, 11 insertions(+), 143 deletions(-) - -diff --git a/net/wireless/scan.c b/net/wireless/scan.c -index ae1f249d04ab3..396c63431e1f3 100644 ---- a/net/wireless/scan.c -+++ b/net/wireless/scan.c -@@ -2296,118 +2296,6 @@ cfg80211_inform_bss_data(struct wiphy *wiphy, - } - EXPORT_SYMBOL(cfg80211_inform_bss_data); - --static void --cfg80211_parse_mbssid_frame_data(struct wiphy *wiphy, -- struct cfg80211_inform_bss *data, -- struct ieee80211_mgmt *mgmt, size_t len, -- struct cfg80211_non_tx_bss *non_tx_data, -- gfp_t gfp) --{ -- enum cfg80211_bss_frame_type ftype; -- const u8 *ie = mgmt->u.probe_resp.variable; -- size_t ielen = len - offsetof(struct ieee80211_mgmt, -- u.probe_resp.variable); -- -- ftype = ieee80211_is_beacon(mgmt->frame_control) ? -- CFG80211_BSS_FTYPE_BEACON : CFG80211_BSS_FTYPE_PRESP; -- -- cfg80211_parse_mbssid_data(wiphy, data, ftype, mgmt->bssid, -- le64_to_cpu(mgmt->u.probe_resp.timestamp), -- le16_to_cpu(mgmt->u.probe_resp.beacon_int), -- ie, ielen, non_tx_data, gfp); --} -- --static void --cfg80211_update_notlisted_nontrans(struct wiphy *wiphy, -- struct cfg80211_bss *nontrans_bss, -- struct ieee80211_mgmt *mgmt, size_t len) --{ -- u8 *ie, *new_ie, *pos; -- const struct element *nontrans_ssid; -- const u8 *trans_ssid, *mbssid; -- size_t ielen = len - offsetof(struct ieee80211_mgmt, -- u.probe_resp.variable); -- size_t new_ie_len; -- struct cfg80211_bss_ies *new_ies; -- const struct cfg80211_bss_ies *old; -- size_t cpy_len; -- -- lockdep_assert_held(&wiphy_to_rdev(wiphy)->bss_lock); -- -- ie = mgmt->u.probe_resp.variable; -- -- new_ie_len = ielen; -- trans_ssid = cfg80211_find_ie(WLAN_EID_SSID, ie, ielen); -- if (!trans_ssid) -- return; -- new_ie_len -= trans_ssid[1]; -- mbssid = cfg80211_find_ie(WLAN_EID_MULTIPLE_BSSID, ie, ielen); -- /* -- * It's not valid to have the MBSSID element before SSID -- * ignore if that happens - the code below assumes it is -- * after (while copying things inbetween). -- */ -- if (!mbssid || mbssid < trans_ssid) -- return; -- new_ie_len -= mbssid[1]; -- -- nontrans_ssid = ieee80211_bss_get_elem(nontrans_bss, WLAN_EID_SSID); -- if (!nontrans_ssid) -- return; -- -- new_ie_len += nontrans_ssid->datalen; -- -- /* generate new ie for nontrans BSS -- * 1. replace SSID with nontrans BSS' SSID -- * 2. skip MBSSID IE -- */ -- new_ie = kzalloc(new_ie_len, GFP_ATOMIC); -- if (!new_ie) -- return; -- -- new_ies = kzalloc(sizeof(*new_ies) + new_ie_len, GFP_ATOMIC); -- if (!new_ies) -- goto out_free; -- -- pos = new_ie; -- -- /* copy the nontransmitted SSID */ -- cpy_len = nontrans_ssid->datalen + 2; -- memcpy(pos, nontrans_ssid, cpy_len); -- pos += cpy_len; -- /* copy the IEs between SSID and MBSSID */ -- cpy_len = trans_ssid[1] + 2; -- memcpy(pos, (trans_ssid + cpy_len), (mbssid - (trans_ssid + cpy_len))); -- pos += (mbssid - (trans_ssid + cpy_len)); -- /* copy the IEs after MBSSID */ -- cpy_len = mbssid[1] + 2; -- memcpy(pos, mbssid + cpy_len, ((ie + ielen) - (mbssid + cpy_len))); -- -- /* update ie */ -- new_ies->len = new_ie_len; -- new_ies->tsf = le64_to_cpu(mgmt->u.probe_resp.timestamp); -- new_ies->from_beacon = ieee80211_is_beacon(mgmt->frame_control); -- memcpy(new_ies->data, new_ie, new_ie_len); -- if (ieee80211_is_probe_resp(mgmt->frame_control)) { -- old = rcu_access_pointer(nontrans_bss->proberesp_ies); -- rcu_assign_pointer(nontrans_bss->proberesp_ies, new_ies); -- rcu_assign_pointer(nontrans_bss->ies, new_ies); -- if (old) -- kfree_rcu((struct cfg80211_bss_ies *)old, rcu_head); -- } else { -- old = rcu_access_pointer(nontrans_bss->beacon_ies); -- rcu_assign_pointer(nontrans_bss->beacon_ies, new_ies); -- cfg80211_update_hidden_bsses(bss_from_pub(nontrans_bss), -- new_ies, old); -- rcu_assign_pointer(nontrans_bss->ies, new_ies); -- if (old) -- kfree_rcu((struct cfg80211_bss_ies *)old, rcu_head); -- } -- --out_free: -- kfree(new_ie); --} -- - /* cfg80211_inform_bss_width_frame helper */ - static struct cfg80211_bss * - cfg80211_inform_single_bss_frame_data(struct wiphy *wiphy, -@@ -2540,51 +2428,31 @@ cfg80211_inform_bss_frame_data(struct wiphy *wiphy, - struct ieee80211_mgmt *mgmt, size_t len, - gfp_t gfp) - { -- struct cfg80211_bss *res, *tmp_bss; -+ struct cfg80211_bss *res; - const u8 *ie = mgmt->u.probe_resp.variable; -- const struct cfg80211_bss_ies *ies1, *ies2; - size_t ielen = len - offsetof(struct ieee80211_mgmt, - u.probe_resp.variable); -+ enum cfg80211_bss_frame_type ftype; - struct cfg80211_non_tx_bss non_tx_data = {}; - - res = cfg80211_inform_single_bss_frame_data(wiphy, data, mgmt, - len, gfp); -+ if (!res) -+ return NULL; - - /* don't do any further MBSSID handling for S1G */ - if (ieee80211_is_s1g_beacon(mgmt->frame_control)) - return res; - -- if (!res || !wiphy->support_mbssid || -- !cfg80211_find_elem(WLAN_EID_MULTIPLE_BSSID, ie, ielen)) -- return res; -- if (wiphy->support_only_he_mbssid && -- !cfg80211_find_ext_elem(WLAN_EID_EXT_HE_CAPABILITY, ie, ielen)) -- return res; -- -+ ftype = ieee80211_is_beacon(mgmt->frame_control) ? -+ CFG80211_BSS_FTYPE_BEACON : CFG80211_BSS_FTYPE_PRESP; - non_tx_data.tx_bss = res; -- /* process each non-transmitting bss */ -- cfg80211_parse_mbssid_frame_data(wiphy, data, mgmt, len, -- &non_tx_data, gfp); -- -- spin_lock_bh(&wiphy_to_rdev(wiphy)->bss_lock); - -- /* check if the res has other nontransmitting bss which is not -- * in MBSSID IE -- */ -- ies1 = rcu_access_pointer(res->ies); -- -- /* go through nontrans_list, if the timestamp of the BSS is -- * earlier than the timestamp of the transmitting BSS then -- * update it -- */ -- list_for_each_entry(tmp_bss, &res->nontrans_list, -- nontrans_list) { -- ies2 = rcu_access_pointer(tmp_bss->ies); -- if (ies2->tsf < ies1->tsf) -- cfg80211_update_notlisted_nontrans(wiphy, tmp_bss, -- mgmt, len); -- } -- spin_unlock_bh(&wiphy_to_rdev(wiphy)->bss_lock); -+ /* process each non-transmitting bss */ -+ cfg80211_parse_mbssid_data(wiphy, data, ftype, mgmt->bssid, -+ le64_to_cpu(mgmt->u.probe_resp.timestamp), -+ le16_to_cpu(mgmt->u.probe_resp.beacon_int), -+ ie, ielen, &non_tx_data, gfp); - - return res; - } --- -2.39.2 - diff --git a/queue-6.4/wifi-cfg80211-fix-regulatory-disconnect-with-ocb-nan.patch b/queue-6.4/wifi-cfg80211-fix-regulatory-disconnect-with-ocb-nan.patch deleted file mode 100644 index 9d0f64f6596..00000000000 --- a/queue-6.4/wifi-cfg80211-fix-regulatory-disconnect-with-ocb-nan.patch +++ /dev/null @@ -1,123 +0,0 @@ -From 52043f73b237c1ef5f92f55979fe0c473fd6647c Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Fri, 16 Jun 2023 22:28:45 +0200 -Subject: wifi: cfg80211: fix regulatory disconnect with OCB/NAN - -From: Johannes Berg - -[ Upstream commit e8c2af660ba0790afd14d5cbc2fd05c6dc85e207 ] - -Since regulatory disconnect was added, OCB and NAN interface -types were added, which made it completely unusable for any -driver that allowed OCB/NAN. Add OCB/NAN (though NAN doesn't -do anything, we don't have any info) and also remove all the -logic that opts out, so it won't be broken again if/when new -interface types are added. - -Fixes: 6e0bd6c35b02 ("cfg80211: 802.11p OCB mode handling") -Fixes: cb3b7d87652a ("cfg80211: add start / stop NAN commands") -Signed-off-by: Johannes Berg -Link: https://lore.kernel.org/r/20230616222844.2794d1625a26.I8e78a3789a29e6149447b3139df724a6f1b46fc3@changeid -Signed-off-by: Johannes Berg -Signed-off-by: Sasha Levin ---- - include/net/regulatory.h | 13 +------------ - net/wireless/core.c | 16 ---------------- - net/wireless/reg.c | 14 ++++++++++---- - 3 files changed, 11 insertions(+), 32 deletions(-) - -diff --git a/include/net/regulatory.h b/include/net/regulatory.h -index 896191f420d50..b2cb4a9eb04dc 100644 ---- a/include/net/regulatory.h -+++ b/include/net/regulatory.h -@@ -140,17 +140,6 @@ struct regulatory_request { - * otherwise initiating radiation is not allowed. This will enable the - * relaxations enabled under the CFG80211_REG_RELAX_NO_IR configuration - * option -- * @REGULATORY_IGNORE_STALE_KICKOFF: the regulatory core will _not_ make sure -- * all interfaces on this wiphy reside on allowed channels. If this flag -- * is not set, upon a regdomain change, the interfaces are given a grace -- * period (currently 60 seconds) to disconnect or move to an allowed -- * channel. Interfaces on forbidden channels are forcibly disconnected. -- * Currently these types of interfaces are supported for enforcement: -- * NL80211_IFTYPE_ADHOC, NL80211_IFTYPE_STATION, NL80211_IFTYPE_AP, -- * NL80211_IFTYPE_AP_VLAN, NL80211_IFTYPE_MONITOR, -- * NL80211_IFTYPE_P2P_CLIENT, NL80211_IFTYPE_P2P_GO, -- * NL80211_IFTYPE_P2P_DEVICE. The flag will be set by default if a device -- * includes any modes unsupported for enforcement checking. - * @REGULATORY_WIPHY_SELF_MANAGED: for devices that employ wiphy-specific - * regdom management. These devices will ignore all regdom changes not - * originating from their own wiphy. -@@ -177,7 +166,7 @@ enum ieee80211_regulatory_flags { - REGULATORY_COUNTRY_IE_FOLLOW_POWER = BIT(3), - REGULATORY_COUNTRY_IE_IGNORE = BIT(4), - REGULATORY_ENABLE_RELAX_NO_IR = BIT(5), -- REGULATORY_IGNORE_STALE_KICKOFF = BIT(6), -+ /* reuse bit 6 next time */ - REGULATORY_WIPHY_SELF_MANAGED = BIT(7), - }; - -diff --git a/net/wireless/core.c b/net/wireless/core.c -index b3ec9eaec36b3..609b79fe4a748 100644 ---- a/net/wireless/core.c -+++ b/net/wireless/core.c -@@ -721,22 +721,6 @@ int wiphy_register(struct wiphy *wiphy) - return -EINVAL; - } - -- /* -- * if a wiphy has unsupported modes for regulatory channel enforcement, -- * opt-out of enforcement checking -- */ -- if (wiphy->interface_modes & ~(BIT(NL80211_IFTYPE_STATION) | -- BIT(NL80211_IFTYPE_P2P_CLIENT) | -- BIT(NL80211_IFTYPE_AP) | -- BIT(NL80211_IFTYPE_MESH_POINT) | -- BIT(NL80211_IFTYPE_P2P_GO) | -- BIT(NL80211_IFTYPE_ADHOC) | -- BIT(NL80211_IFTYPE_P2P_DEVICE) | -- BIT(NL80211_IFTYPE_NAN) | -- BIT(NL80211_IFTYPE_AP_VLAN) | -- BIT(NL80211_IFTYPE_MONITOR))) -- wiphy->regulatory_flags |= REGULATORY_IGNORE_STALE_KICKOFF; -- - if (WARN_ON((wiphy->regulatory_flags & REGULATORY_WIPHY_SELF_MANAGED) && - (wiphy->regulatory_flags & - (REGULATORY_CUSTOM_REG | -diff --git a/net/wireless/reg.c b/net/wireless/reg.c -index 26f11e4746c05..c8a1b925413b3 100644 ---- a/net/wireless/reg.c -+++ b/net/wireless/reg.c -@@ -2391,9 +2391,17 @@ static bool reg_wdev_chan_valid(struct wiphy *wiphy, struct wireless_dev *wdev) - case NL80211_IFTYPE_P2P_DEVICE: - /* no enforcement required */ - break; -+ case NL80211_IFTYPE_OCB: -+ if (!wdev->u.ocb.chandef.chan) -+ continue; -+ chandef = wdev->u.ocb.chandef; -+ break; -+ case NL80211_IFTYPE_NAN: -+ /* we have no info, but NAN is also pretty universal */ -+ continue; - default: - /* others not implemented for now */ -- WARN_ON(1); -+ WARN_ON_ONCE(1); - break; - } - -@@ -2452,9 +2460,7 @@ static void reg_check_chans_work(struct work_struct *work) - rtnl_lock(); - - list_for_each_entry(rdev, &cfg80211_rdev_list, list) -- if (!(rdev->wiphy.regulatory_flags & -- REGULATORY_IGNORE_STALE_KICKOFF)) -- reg_leave_invalid_chans(&rdev->wiphy); -+ reg_leave_invalid_chans(&rdev->wiphy); - - rtnl_unlock(); - } --- -2.39.2 - diff --git a/queue-6.4/wifi-cfg80211-rewrite-merging-of-inherited-elements.patch b/queue-6.4/wifi-cfg80211-rewrite-merging-of-inherited-elements.patch deleted file mode 100644 index 6552c1073fd..00000000000 --- a/queue-6.4/wifi-cfg80211-rewrite-merging-of-inherited-elements.patch +++ /dev/null @@ -1,290 +0,0 @@ -From f9c119e8dc85640dcbd074170e3dafe38f4f856e Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Fri, 16 Jun 2023 09:54:03 +0300 -Subject: wifi: cfg80211: rewrite merging of inherited elements - -From: Benjamin Berg - -[ Upstream commit dfd9aa3e7a456d57b18021d66472ab7ff8373ab7 ] - -The cfg80211_gen_new_ie function merges the IEs using inheritance rules. -Rewrite this function to fix issues around inheritance rules. In -particular, vendor elements do not require any special handling, as they -are either all inherited or overridden by the subprofile. -Also, add fragmentation handling as this may be needed in some cases. - -This also changes the function to not require making a copy. The new -version could be optimized a bit by explicitly tracking which IEs have -been handled already rather than looking that up again every time. - -Note that a small behavioural change is the removal of the SSID special -handling. This should be fine for the MBSSID element, as the SSID must -be included in the subelement. - -Fixes: 0b8fb8235be8 ("cfg80211: Parsing of Multiple BSSID information in scanning") -Signed-off-by: Benjamin Berg -Signed-off-by: Gregory Greenman -Link: https://lore.kernel.org/r/20230616094949.bc6152e146db.I2b5f3bc45085e1901e5b5192a674436adaf94748@changeid -Signed-off-by: Johannes Berg -Signed-off-by: Sasha Levin ---- - net/wireless/scan.c | 213 ++++++++++++++++++++++++++------------------ - 1 file changed, 124 insertions(+), 89 deletions(-) - -diff --git a/net/wireless/scan.c b/net/wireless/scan.c -index c501db7bbdb3d..ae1f249d04ab3 100644 ---- a/net/wireless/scan.c -+++ b/net/wireless/scan.c -@@ -259,117 +259,152 @@ bool cfg80211_is_element_inherited(const struct element *elem, - } - EXPORT_SYMBOL(cfg80211_is_element_inherited); - --static size_t cfg80211_gen_new_ie(const u8 *ie, size_t ielen, -- const u8 *subelement, size_t subie_len, -- u8 *new_ie, gfp_t gfp) -+static size_t cfg80211_copy_elem_with_frags(const struct element *elem, -+ const u8 *ie, size_t ie_len, -+ u8 **pos, u8 *buf, size_t buf_len) - { -- u8 *pos, *tmp; -- const u8 *tmp_old, *tmp_new; -- const struct element *non_inherit_elem; -- u8 *sub_copy; -+ if (WARN_ON((u8 *)elem < ie || elem->data > ie + ie_len || -+ elem->data + elem->datalen > ie + ie_len)) -+ return 0; - -- /* copy subelement as we need to change its content to -- * mark an ie after it is processed. -- */ -- sub_copy = kmemdup(subelement, subie_len, gfp); -- if (!sub_copy) -+ if (elem->datalen + 2 > buf + buf_len - *pos) - return 0; - -- pos = &new_ie[0]; -+ memcpy(*pos, elem, elem->datalen + 2); -+ *pos += elem->datalen + 2; - -- /* set new ssid */ -- tmp_new = cfg80211_find_ie(WLAN_EID_SSID, sub_copy, subie_len); -- if (tmp_new) { -- memcpy(pos, tmp_new, tmp_new[1] + 2); -- pos += (tmp_new[1] + 2); -+ /* Finish if it is not fragmented */ -+ if (elem->datalen != 255) -+ return *pos - buf; -+ -+ ie_len = ie + ie_len - elem->data - elem->datalen; -+ ie = (const u8 *)elem->data + elem->datalen; -+ -+ for_each_element(elem, ie, ie_len) { -+ if (elem->id != WLAN_EID_FRAGMENT) -+ break; -+ -+ if (elem->datalen + 2 > buf + buf_len - *pos) -+ return 0; -+ -+ memcpy(*pos, elem, elem->datalen + 2); -+ *pos += elem->datalen + 2; -+ -+ if (elem->datalen != 255) -+ break; - } - -- /* get non inheritance list if exists */ -- non_inherit_elem = -- cfg80211_find_ext_elem(WLAN_EID_EXT_NON_INHERITANCE, -- sub_copy, subie_len); -+ return *pos - buf; -+} - -- /* go through IEs in ie (skip SSID) and subelement, -- * merge them into new_ie -+static size_t cfg80211_gen_new_ie(const u8 *ie, size_t ielen, -+ const u8 *subie, size_t subie_len, -+ u8 *new_ie, size_t new_ie_len) -+{ -+ const struct element *non_inherit_elem, *parent, *sub; -+ u8 *pos = new_ie; -+ u8 id, ext_id; -+ unsigned int match_len; -+ -+ non_inherit_elem = cfg80211_find_ext_elem(WLAN_EID_EXT_NON_INHERITANCE, -+ subie, subie_len); -+ -+ /* We copy the elements one by one from the parent to the generated -+ * elements. -+ * If they are not inherited (included in subie or in the non -+ * inheritance element), then we copy all occurrences the first time -+ * we see this element type. - */ -- tmp_old = cfg80211_find_ie(WLAN_EID_SSID, ie, ielen); -- tmp_old = (tmp_old) ? tmp_old + tmp_old[1] + 2 : ie; -- -- while (tmp_old + 2 - ie <= ielen && -- tmp_old + tmp_old[1] + 2 - ie <= ielen) { -- if (tmp_old[0] == 0) { -- tmp_old++; -+ for_each_element(parent, ie, ielen) { -+ if (parent->id == WLAN_EID_FRAGMENT) - continue; -+ -+ if (parent->id == WLAN_EID_EXTENSION) { -+ if (parent->datalen < 1) -+ continue; -+ -+ id = WLAN_EID_EXTENSION; -+ ext_id = parent->data[0]; -+ match_len = 1; -+ } else { -+ id = parent->id; -+ match_len = 0; - } - -- if (tmp_old[0] == WLAN_EID_EXTENSION) -- tmp = (u8 *)cfg80211_find_ext_ie(tmp_old[2], sub_copy, -- subie_len); -- else -- tmp = (u8 *)cfg80211_find_ie(tmp_old[0], sub_copy, -- subie_len); -+ /* Find first occurrence in subie */ -+ sub = cfg80211_find_elem_match(id, subie, subie_len, -+ &ext_id, match_len, 0); - -- if (!tmp) { -- const struct element *old_elem = (void *)tmp_old; -+ /* Copy from parent if not in subie and inherited */ -+ if (!sub && -+ cfg80211_is_element_inherited(parent, non_inherit_elem)) { -+ if (!cfg80211_copy_elem_with_frags(parent, -+ ie, ielen, -+ &pos, new_ie, -+ new_ie_len)) -+ return 0; - -- /* ie in old ie but not in subelement */ -- if (cfg80211_is_element_inherited(old_elem, -- non_inherit_elem)) { -- memcpy(pos, tmp_old, tmp_old[1] + 2); -- pos += tmp_old[1] + 2; -- } -- } else { -- /* ie in transmitting ie also in subelement, -- * copy from subelement and flag the ie in subelement -- * as copied (by setting eid field to WLAN_EID_SSID, -- * which is skipped anyway). -- * For vendor ie, compare OUI + type + subType to -- * determine if they are the same ie. -- */ -- if (tmp_old[0] == WLAN_EID_VENDOR_SPECIFIC) { -- if (tmp_old[1] >= 5 && tmp[1] >= 5 && -- !memcmp(tmp_old + 2, tmp + 2, 5)) { -- /* same vendor ie, copy from -- * subelement -- */ -- memcpy(pos, tmp, tmp[1] + 2); -- pos += tmp[1] + 2; -- tmp[0] = WLAN_EID_SSID; -- } else { -- memcpy(pos, tmp_old, tmp_old[1] + 2); -- pos += tmp_old[1] + 2; -- } -- } else { -- /* copy ie from subelement into new ie */ -- memcpy(pos, tmp, tmp[1] + 2); -- pos += tmp[1] + 2; -- tmp[0] = WLAN_EID_SSID; -- } -+ continue; - } - -- if (tmp_old + tmp_old[1] + 2 - ie == ielen) -- break; -+ /* Already copied if an earlier element had the same type */ -+ if (cfg80211_find_elem_match(id, ie, (u8 *)parent - ie, -+ &ext_id, match_len, 0)) -+ continue; - -- tmp_old += tmp_old[1] + 2; -+ /* Not inheriting, copy all similar elements from subie */ -+ while (sub) { -+ if (!cfg80211_copy_elem_with_frags(sub, -+ subie, subie_len, -+ &pos, new_ie, -+ new_ie_len)) -+ return 0; -+ -+ sub = cfg80211_find_elem_match(id, -+ sub->data + sub->datalen, -+ subie_len + subie - -+ (sub->data + -+ sub->datalen), -+ &ext_id, match_len, 0); -+ } - } - -- /* go through subelement again to check if there is any ie not -- * copied to new ie, skip ssid, capability, bssid-index ie -+ /* The above misses elements that are included in subie but not in the -+ * parent, so do a pass over subie and append those. -+ * Skip the non-tx BSSID caps and non-inheritance element. - */ -- tmp_new = sub_copy; -- while (tmp_new + 2 - sub_copy <= subie_len && -- tmp_new + tmp_new[1] + 2 - sub_copy <= subie_len) { -- if (!(tmp_new[0] == WLAN_EID_NON_TX_BSSID_CAP || -- tmp_new[0] == WLAN_EID_SSID)) { -- memcpy(pos, tmp_new, tmp_new[1] + 2); -- pos += tmp_new[1] + 2; -+ for_each_element(sub, subie, subie_len) { -+ if (sub->id == WLAN_EID_NON_TX_BSSID_CAP) -+ continue; -+ -+ if (sub->id == WLAN_EID_FRAGMENT) -+ continue; -+ -+ if (sub->id == WLAN_EID_EXTENSION) { -+ if (sub->datalen < 1) -+ continue; -+ -+ id = WLAN_EID_EXTENSION; -+ ext_id = sub->data[0]; -+ match_len = 1; -+ -+ if (ext_id == WLAN_EID_EXT_NON_INHERITANCE) -+ continue; -+ } else { -+ id = sub->id; -+ match_len = 0; - } -- if (tmp_new + tmp_new[1] + 2 - sub_copy == subie_len) -- break; -- tmp_new += tmp_new[1] + 2; -+ -+ /* Processed if one was included in the parent */ -+ if (cfg80211_find_elem_match(id, ie, ielen, -+ &ext_id, match_len, 0)) -+ continue; -+ -+ if (!cfg80211_copy_elem_with_frags(sub, subie, subie_len, -+ &pos, new_ie, new_ie_len)) -+ return 0; - } - -- kfree(sub_copy); - return pos - new_ie; - } - -@@ -2212,7 +2247,7 @@ static void cfg80211_parse_mbssid_data(struct wiphy *wiphy, - new_ie_len = cfg80211_gen_new_ie(ie, ielen, - profile, - profile_len, new_ie, -- gfp); -+ IEEE80211_MAX_DATA_LEN); - if (!new_ie_len) - continue; - --- -2.39.2 - diff --git a/queue-6.4/wifi-ieee80211-fix-the-common-size-calculation-for-r.patch b/queue-6.4/wifi-ieee80211-fix-the-common-size-calculation-for-r.patch deleted file mode 100644 index 5b50b09f70f..00000000000 --- a/queue-6.4/wifi-ieee80211-fix-the-common-size-calculation-for-r.patch +++ /dev/null @@ -1,47 +0,0 @@ -From d7670752c0abf8b84a6bf56515aac5d507985979 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Sun, 18 Jun 2023 21:49:45 +0300 -Subject: wifi: ieee80211: Fix the common size calculation for reconfiguration - ML - -From: Ilan Peer - -[ Upstream commit ce6e1f600b0cfc563a7d607de702262a58cd835d ] - -The common information length is found in the first octet of the common -information. - -Fixes: 0f48b8b88aa9 ("wifi: ieee80211: add definitions for multi-link element") -Signed-off-by: Ilan Peer -Signed-off-by: Gregory Greenman -Link: https://lore.kernel.org/r/20230618214435.3c7ed4817338.I42ef706cb827b4dade6e4ffbb6e7f341eaccd398@changeid -Signed-off-by: Johannes Berg -Signed-off-by: Sasha Levin ---- - include/linux/ieee80211.h | 5 +---- - 1 file changed, 1 insertion(+), 4 deletions(-) - -diff --git a/include/linux/ieee80211.h b/include/linux/ieee80211.h -index 141c0cf65f2d9..4cda32ac3116a 100644 ---- a/include/linux/ieee80211.h -+++ b/include/linux/ieee80211.h -@@ -4612,15 +4612,12 @@ static inline u8 ieee80211_mle_common_size(const u8 *data) - case IEEE80211_ML_CONTROL_TYPE_BASIC: - case IEEE80211_ML_CONTROL_TYPE_PREQ: - case IEEE80211_ML_CONTROL_TYPE_TDLS: -+ case IEEE80211_ML_CONTROL_TYPE_RECONF: - /* - * The length is the first octet pointed by mle->variable so no - * need to add anything - */ - break; -- case IEEE80211_ML_CONTROL_TYPE_RECONF: -- if (control & IEEE80211_MLC_RECONF_PRES_MLD_MAC_ADDR) -- common += ETH_ALEN; -- return common; - case IEEE80211_ML_CONTROL_TYPE_PRIO_ACCESS: - if (control & IEEE80211_MLC_PRIO_ACCESS_PRES_AP_MLD_MAC_ADDR) - common += ETH_ALEN; --- -2.39.2 - diff --git a/queue-6.4/wifi-iwlwifi-fw-print-pc-register-value-instead-of-a.patch b/queue-6.4/wifi-iwlwifi-fw-print-pc-register-value-instead-of-a.patch deleted file mode 100644 index 0e434e40cb4..00000000000 --- a/queue-6.4/wifi-iwlwifi-fw-print-pc-register-value-instead-of-a.patch +++ /dev/null @@ -1,49 +0,0 @@ -From 3dbb4f768dcd6458ff57fe26db4d64ff1b9d9f97 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Mon, 12 Jun 2023 18:51:11 +0300 -Subject: wifi: iwlwifi: fw: print PC register value instead of address - -From: Mukesh Sisodiya - -[ Upstream commit 2b69d242e29b891b11f1190201f4a08abb0c8342 ] - -The program counter address is read from the TLV and -PC address is printed in debug messages. -Read the value at PC address and print the value -instead of the register address. - -Fixes: 5e31b3df86ec ("wifi: iwlwifi: dbg: print pc register data once fw dump occurred") -Signed-off-by: Mukesh Sisodiya -Signed-off-by: Gregory Greenman -Link: https://lore.kernel.org/r/20230612184434.e5a5f18f1b2c.Ib6117a4e7f66a075913241cc81477c0059953d5d@changeid -Signed-off-by: Johannes Berg -Signed-off-by: Sasha Levin ---- - drivers/net/wireless/intel/iwlwifi/fw/dump.c | 7 ++++++- - 1 file changed, 6 insertions(+), 1 deletion(-) - -diff --git a/drivers/net/wireless/intel/iwlwifi/fw/dump.c b/drivers/net/wireless/intel/iwlwifi/fw/dump.c -index f86f7b4baa181..f61f1ce7fe795 100644 ---- a/drivers/net/wireless/intel/iwlwifi/fw/dump.c -+++ b/drivers/net/wireless/intel/iwlwifi/fw/dump.c -@@ -507,11 +507,16 @@ void iwl_fwrt_dump_error_logs(struct iwl_fw_runtime *fwrt) - iwl_fwrt_dump_fseq_regs(fwrt); - if (fwrt->trans->trans_cfg->device_family >= IWL_DEVICE_FAMILY_22000) { - pc_data = fwrt->trans->dbg.pc_data; -+ -+ if (!iwl_trans_grab_nic_access(fwrt->trans)) -+ return; - for (count = 0; count < fwrt->trans->dbg.num_pc; - count++, pc_data++) - IWL_ERR(fwrt, "%s: 0x%x\n", - pc_data->pc_name, -- pc_data->pc_address); -+ iwl_read_prph_no_grab(fwrt->trans, -+ pc_data->pc_address)); -+ iwl_trans_release_nic_access(fwrt->trans); - } - - if (fwrt->trans->trans_cfg->device_family >= IWL_DEVICE_FAMILY_BZ) { --- -2.39.2 - diff --git a/queue-6.4/wifi-iwlwifi-mvm-add-support-for-extra-eht-ltf.patch b/queue-6.4/wifi-iwlwifi-mvm-add-support-for-extra-eht-ltf.patch deleted file mode 100644 index 0dafc650af8..00000000000 --- a/queue-6.4/wifi-iwlwifi-mvm-add-support-for-extra-eht-ltf.patch +++ /dev/null @@ -1,98 +0,0 @@ -From 119a2f7b886e2a916cd26780b18526248344ff9c Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Tue, 13 Jun 2023 15:57:19 +0300 -Subject: wifi: iwlwifi: mvm: add support for Extra EHT LTF - -From: Gregory Greenman - -[ Upstream commit 18c0ffb404db2093b6afdc8ae15f18ba3975e1ed ] - -Add support for Extra EHT LTF defined in 9.4.2.313 -EHT Capabilities element. - -Signed-off-by: Gregory Greenman -Link: https://lore.kernel.org/r/20230613155501.de019d7cc174.I806f0f6042b89274192701a60b4f7900822db666@changeid -Signed-off-by: Johannes Berg -Stable-dep-of: f91295987576 ("wifi: iwlwifi: mvm: correctly access HE/EHT sband capa") -Signed-off-by: Sasha Levin ---- - drivers/net/wireless/intel/iwlwifi/fw/api/rs.h | 2 ++ - .../net/wireless/intel/iwlwifi/iwl-nvm-parse.c | 2 ++ - drivers/net/wireless/intel/iwlwifi/mvm/rs-fw.c | 15 +++++++++++++++ - include/linux/ieee80211.h | 1 + - 4 files changed, 20 insertions(+) - -diff --git a/drivers/net/wireless/intel/iwlwifi/fw/api/rs.h b/drivers/net/wireless/intel/iwlwifi/fw/api/rs.h -index c9a48fc5fac88..a1a272433b09b 100644 ---- a/drivers/net/wireless/intel/iwlwifi/fw/api/rs.h -+++ b/drivers/net/wireless/intel/iwlwifi/fw/api/rs.h -@@ -21,6 +21,7 @@ - * @IWL_TLC_MNG_CFG_FLAGS_HE_DCM_NSS_2_MSK: enable HE Dual Carrier Modulation - * for BPSK (MCS 0) with 2 spatial - * streams -+ * @IWL_TLC_MNG_CFG_FLAGS_EHT_EXTRA_LTF_MSK: enable support for EHT extra LTF - */ - enum iwl_tlc_mng_cfg_flags { - IWL_TLC_MNG_CFG_FLAGS_STBC_MSK = BIT(0), -@@ -28,6 +29,7 @@ enum iwl_tlc_mng_cfg_flags { - IWL_TLC_MNG_CFG_FLAGS_HE_STBC_160MHZ_MSK = BIT(2), - IWL_TLC_MNG_CFG_FLAGS_HE_DCM_NSS_1_MSK = BIT(3), - IWL_TLC_MNG_CFG_FLAGS_HE_DCM_NSS_2_MSK = BIT(4), -+ IWL_TLC_MNG_CFG_FLAGS_EHT_EXTRA_LTF_MSK = BIT(6), - }; - - /** -diff --git a/drivers/net/wireless/intel/iwlwifi/iwl-nvm-parse.c b/drivers/net/wireless/intel/iwlwifi/iwl-nvm-parse.c -index 7dcb1c3ab7282..be0eb69f2248a 100644 ---- a/drivers/net/wireless/intel/iwlwifi/iwl-nvm-parse.c -+++ b/drivers/net/wireless/intel/iwlwifi/iwl-nvm-parse.c -@@ -975,6 +975,8 @@ iwl_nvm_fixup_sband_iftd(struct iwl_trans *trans, - iftype_data->eht_cap.eht_cap_elem.phy_cap_info[6] &= - ~(IEEE80211_EHT_PHY_CAP6_MCS15_SUPP_MASK | - IEEE80211_EHT_PHY_CAP6_EHT_DUP_6GHZ_SUPP); -+ iftype_data->eht_cap.eht_cap_elem.phy_cap_info[5] |= -+ IEEE80211_EHT_PHY_CAP5_SUPP_EXTRA_EHT_LTF; - } - - if (fw_has_capa(&fw->ucode_capa, IWL_UCODE_TLV_CAPA_BROADCAST_TWT)) -diff --git a/drivers/net/wireless/intel/iwlwifi/mvm/rs-fw.c b/drivers/net/wireless/intel/iwlwifi/mvm/rs-fw.c -index f72d1ca3cfedc..8a5341c37aa21 100644 ---- a/drivers/net/wireless/intel/iwlwifi/mvm/rs-fw.c -+++ b/drivers/net/wireless/intel/iwlwifi/mvm/rs-fw.c -@@ -591,6 +591,21 @@ void iwl_mvm_rs_fw_rate_init(struct iwl_mvm *mvm, - int cmd_ver; - int ret; - -+ /* Enable external EHT LTF only for GL device and if there's -+ * mutual support by AP and client -+ */ -+ if (CSR_HW_REV_TYPE(mvm->trans->hw_rev) == IWL_CFG_MAC_TYPE_GL && -+ sband->iftype_data->eht_cap.has_eht && -+ sband->iftype_data->eht_cap.eht_cap_elem.phy_cap_info[5] & -+ IEEE80211_EHT_PHY_CAP5_SUPP_EXTRA_EHT_LTF && -+ link_sta->eht_cap.has_eht && -+ link_sta->eht_cap.eht_cap_elem.phy_cap_info[5] & -+ IEEE80211_EHT_PHY_CAP5_SUPP_EXTRA_EHT_LTF) { -+ IWL_DEBUG_RATE(mvm, "Set support for Extra EHT LTF\n"); -+ cfg_cmd.flags |= -+ cpu_to_le16(IWL_TLC_MNG_CFG_FLAGS_EHT_EXTRA_LTF_MSK); -+ } -+ - rcu_read_lock(); - mvm_link_sta = rcu_dereference(mvmsta->link[link_id]); - if (WARN_ON_ONCE(!mvm_link_sta)) { -diff --git a/include/linux/ieee80211.h b/include/linux/ieee80211.h -index c4cf296e7eafe..141c0cf65f2d9 100644 ---- a/include/linux/ieee80211.h -+++ b/include/linux/ieee80211.h -@@ -2856,6 +2856,7 @@ ieee80211_he_spr_size(const u8 *he_spr_ie) - - /* Maximum number of supported EHT LTF is split */ - #define IEEE80211_EHT_PHY_CAP5_MAX_NUM_SUPP_EHT_LTF_MASK 0xc0 -+#define IEEE80211_EHT_PHY_CAP5_SUPP_EXTRA_EHT_LTF 0x40 - #define IEEE80211_EHT_PHY_CAP6_MAX_NUM_SUPP_EHT_LTF_MASK 0x07 - - #define IEEE80211_EHT_PHY_CAP6_MCS15_SUPP_MASK 0x78 --- -2.39.2 - diff --git a/queue-6.4/wifi-iwlwifi-mvm-check-only-affected-links.patch b/queue-6.4/wifi-iwlwifi-mvm-check-only-affected-links.patch deleted file mode 100644 index 7b86bb13f65..00000000000 --- a/queue-6.4/wifi-iwlwifi-mvm-check-only-affected-links.patch +++ /dev/null @@ -1,51 +0,0 @@ -From 62d36e4518d64d054324b2075605b4cec2480b33 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Tue, 20 Jun 2023 13:04:03 +0300 -Subject: wifi: iwlwifi: mvm: check only affected links - -From: Johannes Berg - -[ Upstream commit de1076008148460fe273e6d39158faffcc954991 ] - -When hostapd starts up, it may start up with only one link -while the other is still scanning for overlapping BSSes. A -station might start to connect at this point, but we run -into this warning instead. Since there's no need to check -for _all_ links, restrict the check to just the affected -links that the STA will be using. - -Fixes: 57974a55d995 ("wifi: iwlwifi: mvm: refactor iwl_mvm_mac_sta_state_common()") -Reported-by: Miri Korenblit -Signed-off-by: Johannes Berg -Signed-off-by: Gregory Greenman -Link: https://lore.kernel.org/r/20230620125813.c3d5a006ec21.Ib4715381f598f4c18d67cd9598ebd5cdbe7d2b09@changeid -Signed-off-by: Johannes Berg -Signed-off-by: Sasha Levin ---- - drivers/net/wireless/intel/iwlwifi/mvm/mac80211.c | 3 ++- - 1 file changed, 2 insertions(+), 1 deletion(-) - -diff --git a/drivers/net/wireless/intel/iwlwifi/mvm/mac80211.c b/drivers/net/wireless/intel/iwlwifi/mvm/mac80211.c -index 6c70ca1b524c4..f23cd100cf252 100644 ---- a/drivers/net/wireless/intel/iwlwifi/mvm/mac80211.c -+++ b/drivers/net/wireless/intel/iwlwifi/mvm/mac80211.c -@@ -3846,6 +3846,7 @@ int iwl_mvm_mac_sta_state_common(struct ieee80211_hw *hw, - struct iwl_mvm *mvm = IWL_MAC80211_GET_MVM(hw); - struct iwl_mvm_vif *mvmvif = iwl_mvm_vif_from_mac80211(vif); - struct iwl_mvm_sta *mvm_sta = iwl_mvm_sta_from_mac80211(sta); -+ struct ieee80211_link_sta *link_sta; - unsigned int link_id; - int ret; - -@@ -3887,7 +3888,7 @@ int iwl_mvm_mac_sta_state_common(struct ieee80211_hw *hw, - mutex_lock(&mvm->mutex); - - /* this would be a mac80211 bug ... but don't crash */ -- for_each_mvm_vif_valid_link(mvmvif, link_id) { -+ for_each_sta_active_link(vif, sta, link_sta, link_id) { - if (WARN_ON_ONCE(!mvmvif->link[link_id]->phy_ctxt)) { - mutex_unlock(&mvm->mutex); - return test_bit(IWL_MVM_STATUS_HW_RESTART_REQUESTED, --- -2.39.2 - diff --git a/queue-6.4/wifi-iwlwifi-mvm-correctly-access-he-eht-sband-capa.patch b/queue-6.4/wifi-iwlwifi-mvm-correctly-access-he-eht-sband-capa.patch deleted file mode 100644 index 2b347e058a0..00000000000 --- a/queue-6.4/wifi-iwlwifi-mvm-correctly-access-he-eht-sband-capa.patch +++ /dev/null @@ -1,174 +0,0 @@ -From dc4243e8c7f343d1c6737e07a619dfd61f5e3efc Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Wed, 14 Jun 2023 12:41:18 +0300 -Subject: wifi: iwlwifi: mvm: correctly access HE/EHT sband capa - -From: Johannes Berg - -[ Upstream commit f912959875761084fda351e1257dcfa9d1fa3037 ] - -We can't just dereference the sband->iftype_data pointer, -that's an array so we need to access the right entry. Use -the previously introduced helper functions to do that. - -There are also cases, e.g. when loading with disable_11ax=1, -where the pointer might be NULL but we still attempt to use -it, causing a crash. - -Fixes: 529281bdf0fc ("iwlwifi: mvm: limit TLC according to our HE capabilities") -Signed-off-by: Johannes Berg -Signed-off-by: Gregory Greenman -Link: https://lore.kernel.org/r/20230614123446.a1f2b17ee39b.I8808120be744be8804815ce9e3e24ce6d2b424e3@changeid -Signed-off-by: Johannes Berg -Signed-off-by: Sasha Levin ---- - .../net/wireless/intel/iwlwifi/mvm/rs-fw.c | 46 +++++++++++-------- - 1 file changed, 26 insertions(+), 20 deletions(-) - -diff --git a/drivers/net/wireless/intel/iwlwifi/mvm/rs-fw.c b/drivers/net/wireless/intel/iwlwifi/mvm/rs-fw.c -index 8a5341c37aa21..680180b894794 100644 ---- a/drivers/net/wireless/intel/iwlwifi/mvm/rs-fw.c -+++ b/drivers/net/wireless/intel/iwlwifi/mvm/rs-fw.c -@@ -63,12 +63,11 @@ static u8 rs_fw_sgi_cw_support(struct ieee80211_link_sta *link_sta) - static u16 rs_fw_get_config_flags(struct iwl_mvm *mvm, - struct ieee80211_vif *vif, - struct ieee80211_link_sta *link_sta, -- struct ieee80211_supported_band *sband) -+ const struct ieee80211_sta_he_cap *sband_he_cap) - { - struct ieee80211_sta_ht_cap *ht_cap = &link_sta->ht_cap; - struct ieee80211_sta_vht_cap *vht_cap = &link_sta->vht_cap; - struct ieee80211_sta_he_cap *he_cap = &link_sta->he_cap; -- const struct ieee80211_sta_he_cap *sband_he_cap; - bool vht_ena = vht_cap->vht_supported; - u16 flags = 0; - -@@ -94,7 +93,6 @@ static u16 rs_fw_get_config_flags(struct iwl_mvm *mvm, - IEEE80211_HE_PHY_CAP1_LDPC_CODING_IN_PAYLOAD)) - flags |= IWL_TLC_MNG_CFG_FLAGS_LDPC_MSK; - -- sband_he_cap = ieee80211_get_he_iftype_cap_vif(sband, vif); - if (sband_he_cap && - !(sband_he_cap->he_cap_elem.phy_cap_info[1] & - IEEE80211_HE_PHY_CAP1_LDPC_CODING_IN_PAYLOAD)) -@@ -196,16 +194,14 @@ static u16 rs_fw_he_ieee80211_mcs_to_rs_mcs(u16 mcs) - - static void - rs_fw_he_set_enabled_rates(const struct ieee80211_link_sta *link_sta, -- struct ieee80211_supported_band *sband, -+ const struct ieee80211_sta_he_cap *sband_he_cap, - struct iwl_tlc_config_cmd_v4 *cmd) - { - const struct ieee80211_sta_he_cap *he_cap = &link_sta->he_cap; - u16 mcs_160 = le16_to_cpu(he_cap->he_mcs_nss_supp.rx_mcs_160); - u16 mcs_80 = le16_to_cpu(he_cap->he_mcs_nss_supp.rx_mcs_80); -- u16 tx_mcs_80 = -- le16_to_cpu(sband->iftype_data->he_cap.he_mcs_nss_supp.tx_mcs_80); -- u16 tx_mcs_160 = -- le16_to_cpu(sband->iftype_data->he_cap.he_mcs_nss_supp.tx_mcs_160); -+ u16 tx_mcs_80 = le16_to_cpu(sband_he_cap->he_mcs_nss_supp.tx_mcs_80); -+ u16 tx_mcs_160 = le16_to_cpu(sband_he_cap->he_mcs_nss_supp.tx_mcs_160); - int i; - u8 nss = link_sta->rx_nss; - -@@ -288,7 +284,8 @@ rs_fw_rs_mcs2eht_mcs(enum IWL_TLC_MCS_PER_BW bw, - static void - rs_fw_eht_set_enabled_rates(struct ieee80211_vif *vif, - const struct ieee80211_link_sta *link_sta, -- struct ieee80211_supported_band *sband, -+ const struct ieee80211_sta_he_cap *sband_he_cap, -+ const struct ieee80211_sta_eht_cap *sband_eht_cap, - struct iwl_tlc_config_cmd_v4 *cmd) - { - /* peer RX mcs capa */ -@@ -296,7 +293,7 @@ rs_fw_eht_set_enabled_rates(struct ieee80211_vif *vif, - &link_sta->eht_cap.eht_mcs_nss_supp; - /* our TX mcs capa */ - const struct ieee80211_eht_mcs_nss_supp *eht_tx_mcs = -- &sband->iftype_data->eht_cap.eht_mcs_nss_supp; -+ &sband_eht_cap->eht_mcs_nss_supp; - - enum IWL_TLC_MCS_PER_BW bw; - struct ieee80211_eht_mcs_nss_supp_20mhz_only mcs_rx_20; -@@ -315,7 +312,7 @@ rs_fw_eht_set_enabled_rates(struct ieee80211_vif *vif, - } - - /* nic is 20Mhz only */ -- if (!(sband->iftype_data->he_cap.he_cap_elem.phy_cap_info[0] & -+ if (!(sband_he_cap->he_cap_elem.phy_cap_info[0] & - IEEE80211_HE_PHY_CAP0_CHANNEL_WIDTH_SET_MASK_ALL)) { - mcs_tx_20 = eht_tx_mcs->only_20mhz; - } else { -@@ -369,6 +366,8 @@ rs_fw_eht_set_enabled_rates(struct ieee80211_vif *vif, - static void rs_fw_set_supp_rates(struct ieee80211_vif *vif, - struct ieee80211_link_sta *link_sta, - struct ieee80211_supported_band *sband, -+ const struct ieee80211_sta_he_cap *sband_he_cap, -+ const struct ieee80211_sta_eht_cap *sband_eht_cap, - struct iwl_tlc_config_cmd_v4 *cmd) - { - int i; -@@ -387,12 +386,13 @@ static void rs_fw_set_supp_rates(struct ieee80211_vif *vif, - cmd->mode = IWL_TLC_MNG_MODE_NON_HT; - - /* HT/VHT rates */ -- if (link_sta->eht_cap.has_eht) { -+ if (link_sta->eht_cap.has_eht && sband_he_cap && sband_eht_cap) { - cmd->mode = IWL_TLC_MNG_MODE_EHT; -- rs_fw_eht_set_enabled_rates(vif, link_sta, sband, cmd); -- } else if (he_cap->has_he) { -+ rs_fw_eht_set_enabled_rates(vif, link_sta, sband_he_cap, -+ sband_eht_cap, cmd); -+ } else if (he_cap->has_he && sband_he_cap) { - cmd->mode = IWL_TLC_MNG_MODE_HE; -- rs_fw_he_set_enabled_rates(link_sta, sband, cmd); -+ rs_fw_he_set_enabled_rates(link_sta, sband_he_cap, cmd); - } else if (vht_cap->vht_supported) { - cmd->mode = IWL_TLC_MNG_MODE_VHT; - rs_fw_vht_set_enabled_rates(link_sta, vht_cap, cmd); -@@ -575,13 +575,17 @@ void iwl_mvm_rs_fw_rate_init(struct iwl_mvm *mvm, - u32 cmd_id = WIDE_ID(DATA_PATH_GROUP, TLC_MNG_CONFIG_CMD); - struct ieee80211_supported_band *sband = hw->wiphy->bands[band]; - u16 max_amsdu_len = rs_fw_get_max_amsdu_len(sta, link_conf, link_sta); -+ const struct ieee80211_sta_he_cap *sband_he_cap = -+ ieee80211_get_he_iftype_cap_vif(sband, vif); -+ const struct ieee80211_sta_eht_cap *sband_eht_cap = -+ ieee80211_get_eht_iftype_cap_vif(sband, vif); - struct iwl_mvm_link_sta *mvm_link_sta; - struct iwl_lq_sta_rs_fw *lq_sta; - struct iwl_tlc_config_cmd_v4 cfg_cmd = { - .max_ch_width = mvmsta->authorized ? - rs_fw_bw_from_sta_bw(link_sta) : IWL_TLC_MNG_CH_WIDTH_20MHZ, - .flags = cpu_to_le16(rs_fw_get_config_flags(mvm, vif, link_sta, -- sband)), -+ sband_he_cap)), - .chains = rs_fw_set_active_chains(iwl_mvm_get_valid_tx_ant(mvm)), - .sgi_ch_width_supp = rs_fw_sgi_cw_support(link_sta), - .max_mpdu_len = iwl_mvm_is_csum_supported(mvm) ? -@@ -595,9 +599,9 @@ void iwl_mvm_rs_fw_rate_init(struct iwl_mvm *mvm, - * mutual support by AP and client - */ - if (CSR_HW_REV_TYPE(mvm->trans->hw_rev) == IWL_CFG_MAC_TYPE_GL && -- sband->iftype_data->eht_cap.has_eht && -- sband->iftype_data->eht_cap.eht_cap_elem.phy_cap_info[5] & -- IEEE80211_EHT_PHY_CAP5_SUPP_EXTRA_EHT_LTF && -+ sband_eht_cap && -+ sband_eht_cap->eht_cap_elem.phy_cap_info[5] & -+ IEEE80211_EHT_PHY_CAP5_SUPP_EXTRA_EHT_LTF && - link_sta->eht_cap.has_eht && - link_sta->eht_cap.eht_cap_elem.phy_cap_info[5] & - IEEE80211_EHT_PHY_CAP5_SUPP_EXTRA_EHT_LTF) { -@@ -623,7 +627,9 @@ void iwl_mvm_rs_fw_rate_init(struct iwl_mvm *mvm, - #ifdef CONFIG_IWLWIFI_DEBUGFS - iwl_mvm_reset_frame_stats(mvm); - #endif -- rs_fw_set_supp_rates(vif, link_sta, sband, &cfg_cmd); -+ rs_fw_set_supp_rates(vif, link_sta, sband, -+ sband_he_cap, sband_eht_cap, -+ &cfg_cmd); - - /* - * since TLC offload works with one mode we can assume --- -2.39.2 - diff --git a/queue-6.4/wifi-iwlwifi-mvm-handle-return-value-for-iwl_mvm_sta.patch b/queue-6.4/wifi-iwlwifi-mvm-handle-return-value-for-iwl_mvm_sta.patch deleted file mode 100644 index 2f6de6ebbc6..00000000000 --- a/queue-6.4/wifi-iwlwifi-mvm-handle-return-value-for-iwl_mvm_sta.patch +++ /dev/null @@ -1,38 +0,0 @@ -From 69b6ee11f0ba44d921278438b74b662ecdc2893a Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Mon, 12 Jun 2023 18:51:04 +0300 -Subject: wifi: iwlwifi: mvm: Handle return value for iwl_mvm_sta_init - -From: Mukesh Sisodiya - -[ Upstream commit 8d507812cb4bb3c3b05404a7dda70b32a1fc1324 ] - -sta_init function can fail and if it returns an error then -driver should not send the request to fw to add a station. - -Fixes: 69aef848052b ("wifi: iwlwifi: mvm: refactor iwl_mvm_add_sta(), iwl_mvm_rm_sta()") -Signed-off-by: Mukesh Sisodiya -Signed-off-by: Gregory Greenman -Link: https://lore.kernel.org/r/20230612184434.1ecd293539e8.I5ec6aab387bb2fe743a7402581beaeb9c801d31f@changeid -Signed-off-by: Johannes Berg -Signed-off-by: Sasha Levin ---- - drivers/net/wireless/intel/iwlwifi/mvm/sta.c | 2 ++ - 1 file changed, 2 insertions(+) - -diff --git a/drivers/net/wireless/intel/iwlwifi/mvm/sta.c b/drivers/net/wireless/intel/iwlwifi/mvm/sta.c -index 05a54a69c1357..b85e363544f8b 100644 ---- a/drivers/net/wireless/intel/iwlwifi/mvm/sta.c -+++ b/drivers/net/wireless/intel/iwlwifi/mvm/sta.c -@@ -1859,6 +1859,8 @@ int iwl_mvm_add_sta(struct iwl_mvm *mvm, - - ret = iwl_mvm_sta_init(mvm, vif, sta, sta_id, - sta->tdls ? IWL_STA_TDLS_LINK : IWL_STA_LINK); -+ if (ret) -+ goto err; - - update_fw: - ret = iwl_mvm_sta_send_to_fw(mvm, sta, sta_update, sta_flags); --- -2.39.2 - diff --git a/queue-6.4/wifi-iwlwifi-mvm-indicate-hw-decrypt-for-beacon-prot.patch b/queue-6.4/wifi-iwlwifi-mvm-indicate-hw-decrypt-for-beacon-prot.patch deleted file mode 100644 index a263c631adf..00000000000 --- a/queue-6.4/wifi-iwlwifi-mvm-indicate-hw-decrypt-for-beacon-prot.patch +++ /dev/null @@ -1,60 +0,0 @@ -From e7b0a890a61b5dc8b2dbc0c8c1e7baa58614a81d Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Tue, 20 Jun 2023 13:04:01 +0300 -Subject: wifi: iwlwifi: mvm: indicate HW decrypt for beacon protection - -From: Johannes Berg - -[ Upstream commit 2db72b8a700943aa54dce0aabe6ff1b72b615162 ] - -We've already done the 'decryption' here, so tell -mac80211 it need not do it again. - -Fixes: b1fdc2505abc ("iwlwifi: mvm: advertise BIGTK client support if available") -Signed-off-by: Johannes Berg -Signed-off-by: Gregory Greenman -Link: https://lore.kernel.org/r/20230620125813.a50cf68fbf2e.Ieceacbe3789d81ea02ae085ad8d1f8813a33c31b@changeid -Signed-off-by: Johannes Berg -Signed-off-by: Sasha Levin ---- - drivers/net/wireless/intel/iwlwifi/mvm/rxmq.c | 9 ++++++--- - 1 file changed, 6 insertions(+), 3 deletions(-) - -diff --git a/drivers/net/wireless/intel/iwlwifi/mvm/rxmq.c b/drivers/net/wireless/intel/iwlwifi/mvm/rxmq.c -index 6226e4e54a51d..38f8d19f718ee 100644 ---- a/drivers/net/wireless/intel/iwlwifi/mvm/rxmq.c -+++ b/drivers/net/wireless/intel/iwlwifi/mvm/rxmq.c -@@ -279,7 +279,8 @@ static void iwl_mvm_get_signal_strength(struct iwl_mvm *mvm, - static int iwl_mvm_rx_mgmt_prot(struct ieee80211_sta *sta, - struct ieee80211_hdr *hdr, - struct iwl_rx_mpdu_desc *desc, -- u32 status) -+ u32 status, -+ struct ieee80211_rx_status *stats) - { - struct iwl_mvm_sta *mvmsta; - struct iwl_mvm_vif *mvmvif; -@@ -308,8 +309,10 @@ static int iwl_mvm_rx_mgmt_prot(struct ieee80211_sta *sta, - - /* good cases */ - if (likely(status & IWL_RX_MPDU_STATUS_MIC_OK && -- !(status & IWL_RX_MPDU_STATUS_REPLAY_ERROR))) -+ !(status & IWL_RX_MPDU_STATUS_REPLAY_ERROR))) { -+ stats->flag |= RX_FLAG_DECRYPTED; - return 0; -+ } - - if (!sta) - return -1; -@@ -378,7 +381,7 @@ static int iwl_mvm_rx_crypto(struct iwl_mvm *mvm, struct ieee80211_sta *sta, - - if (unlikely(ieee80211_is_mgmt(hdr->frame_control) && - !ieee80211_has_protected(hdr->frame_control))) -- return iwl_mvm_rx_mgmt_prot(sta, hdr, desc, status); -+ return iwl_mvm_rx_mgmt_prot(sta, hdr, desc, status, stats); - - if (!ieee80211_has_protected(hdr->frame_control) || - (status & IWL_RX_MPDU_STATUS_SEC_MASK) == --- -2.39.2 - diff --git a/queue-6.4/wifi-iwlwifi-mvm-send-time-sync-only-if-needed.patch b/queue-6.4/wifi-iwlwifi-mvm-send-time-sync-only-if-needed.patch deleted file mode 100644 index 9b240e66650..00000000000 --- a/queue-6.4/wifi-iwlwifi-mvm-send-time-sync-only-if-needed.patch +++ /dev/null @@ -1,44 +0,0 @@ -From 375477aa68df1bac2c1d5886886c5b1114fd786b Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Wed, 31 May 2023 19:50:06 +0300 -Subject: wifi: iwlwifi: mvm: send time sync only if needed - -From: Johannes Berg - -[ Upstream commit ead65aa2d5155728baec90f6404cd02618ef29d0 ] - -If there's no peer configured then there's no point in sending -the command down to the firmware with an invalid peer address. - -Fixes: cf85123a210f ("wifi: iwlwifi: mvm: support enabling and disabling HW timestamping") -Signed-off-by: Johannes Berg -Signed-off-by: Gregory Greenman -Link: https://lore.kernel.org/r/20230531194630.0fb9f81f1852.Idcc41b67d1fbb421e5ed9bac2177b948b7b4d1c9@changeid -Signed-off-by: Johannes Berg -Signed-off-by: Sasha Levin ---- - drivers/net/wireless/intel/iwlwifi/mvm/fw.c | 8 +++++--- - 1 file changed, 5 insertions(+), 3 deletions(-) - -diff --git a/drivers/net/wireless/intel/iwlwifi/mvm/fw.c b/drivers/net/wireless/intel/iwlwifi/mvm/fw.c -index 205c09bc98634..a6367909d7fe4 100644 ---- a/drivers/net/wireless/intel/iwlwifi/mvm/fw.c -+++ b/drivers/net/wireless/intel/iwlwifi/mvm/fw.c -@@ -1699,9 +1699,11 @@ int iwl_mvm_up(struct iwl_mvm *mvm) - - if (test_bit(IWL_MVM_STATUS_IN_HW_RESTART, &mvm->status)) { - iwl_mvm_send_recovery_cmd(mvm, ERROR_RECOVERY_UPDATE_DB); -- iwl_mvm_time_sync_config(mvm, mvm->time_sync.peer_addr, -- IWL_TIME_SYNC_PROTOCOL_TM | -- IWL_TIME_SYNC_PROTOCOL_FTM); -+ -+ if (mvm->time_sync.active) -+ iwl_mvm_time_sync_config(mvm, mvm->time_sync.peer_addr, -+ IWL_TIME_SYNC_PROTOCOL_TM | -+ IWL_TIME_SYNC_PROTOCOL_FTM); - } - - if (!mvm->ptp_data.ptp_clock) --- -2.39.2 - diff --git a/queue-6.4/wifi-iwlwifi-pcie-fix-null-pointer-dereference-in-iw.patch b/queue-6.4/wifi-iwlwifi-pcie-fix-null-pointer-dereference-in-iw.patch deleted file mode 100644 index 480cdfbf5bf..00000000000 --- a/queue-6.4/wifi-iwlwifi-pcie-fix-null-pointer-dereference-in-iw.patch +++ /dev/null @@ -1,57 +0,0 @@ -From b81f2fb74a745025b456d0f542830f46d8bd58ed Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Wed, 14 Jun 2023 12:41:32 +0300 -Subject: wifi: iwlwifi: pcie: fix NULL pointer dereference in - iwl_pcie_irq_rx_msix_handler() - -From: Anjaneyulu - -[ Upstream commit 1902f1953b8ba100ee8705cb8a6f1a9795550eca ] - -rxq can be NULL only when trans_pcie->rxq is NULL and entry->entry -is zero. For the case when entry->entry is not equal to 0, rxq -won't be NULL even if trans_pcie->rxq is NULL. Modify checker to -check for trans_pcie->rxq. - -Fixes: abc599efa67b ("iwlwifi: pcie: don't crash when rx queues aren't allocated in interrupt") -Signed-off-by: Anjaneyulu -Signed-off-by: Gregory Greenman -Link: https://lore.kernel.org/r/20230614123446.5a5eb3889a4a.I375a1d58f16b48cd2044e7b7caddae512d7c86fd@changeid -Signed-off-by: Johannes Berg -Signed-off-by: Sasha Levin ---- - drivers/net/wireless/intel/iwlwifi/pcie/rx.c | 5 +++-- - 1 file changed, 3 insertions(+), 2 deletions(-) - -diff --git a/drivers/net/wireless/intel/iwlwifi/pcie/rx.c b/drivers/net/wireless/intel/iwlwifi/pcie/rx.c -index 0d7890f99a5fb..90a46faaaffdf 100644 ---- a/drivers/net/wireless/intel/iwlwifi/pcie/rx.c -+++ b/drivers/net/wireless/intel/iwlwifi/pcie/rx.c -@@ -1636,14 +1636,14 @@ irqreturn_t iwl_pcie_irq_rx_msix_handler(int irq, void *dev_id) - struct msix_entry *entry = dev_id; - struct iwl_trans_pcie *trans_pcie = iwl_pcie_get_trans_pcie(entry); - struct iwl_trans *trans = trans_pcie->trans; -- struct iwl_rxq *rxq = &trans_pcie->rxq[entry->entry]; -+ struct iwl_rxq *rxq; - - trace_iwlwifi_dev_irq_msix(trans->dev, entry, false, 0, 0); - - if (WARN_ON(entry->entry >= trans->num_rx_queues)) - return IRQ_NONE; - -- if (!rxq) { -+ if (!trans_pcie->rxq) { - if (net_ratelimit()) - IWL_ERR(trans, - "[%d] Got MSI-X interrupt before we have Rx queues\n", -@@ -1651,6 +1651,7 @@ irqreturn_t iwl_pcie_irq_rx_msix_handler(int irq, void *dev_id) - return IRQ_NONE; - } - -+ rxq = &trans_pcie->rxq[entry->entry]; - lock_map_acquire(&trans->sync_cmd_lockdep_map); - IWL_DEBUG_ISR(trans, "[%d] Got interrupt\n", entry->entry); - --- -2.39.2 - diff --git a/queue-6.4/wifi-iwlwifi-pull-from-txqs-with-softirqs-disabled.patch b/queue-6.4/wifi-iwlwifi-pull-from-txqs-with-softirqs-disabled.patch deleted file mode 100644 index e7742376f96..00000000000 --- a/queue-6.4/wifi-iwlwifi-pull-from-txqs-with-softirqs-disabled.patch +++ /dev/null @@ -1,47 +0,0 @@ -From 353ce28b1ee2f04342f0083f783382fe2e1a73ea Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Wed, 14 Jun 2023 12:41:22 +0300 -Subject: wifi: iwlwifi: pull from TXQs with softirqs disabled - -From: Johannes Berg - -[ Upstream commit 96fb6f47db24a712d650b0a9b9074873f273fb0e ] - -In mac80211, it's required that we pull from TXQs by calling -ieee80211_tx_dequeue() only with softirqs disabled. However, -in iwl_mvm_queue_state_change() we're often called with them -enabled, e.g. from flush if anything was flushed, triggering -a mac80211 warning. - -Fix that by disabling the softirqs across the TX call. - -Fixes: cfbc6c4c5b91 ("iwlwifi: mvm: support mac80211 TXQs model") -Signed-off-by: Johannes Berg -Signed-off-by: Gregory Greenman -Link: https://lore.kernel.org/r/20230614123446.0feef7fa81db.I4dd62542d955b40dd8f0af34fa4accb9d0d17c7e@changeid -Signed-off-by: Johannes Berg -Signed-off-by: Sasha Levin ---- - drivers/net/wireless/intel/iwlwifi/mvm/ops.c | 5 ++++- - 1 file changed, 4 insertions(+), 1 deletion(-) - -diff --git a/drivers/net/wireless/intel/iwlwifi/mvm/ops.c b/drivers/net/wireless/intel/iwlwifi/mvm/ops.c -index 6ba4ad6b1380b..8a4415ef540d1 100644 ---- a/drivers/net/wireless/intel/iwlwifi/mvm/ops.c -+++ b/drivers/net/wireless/intel/iwlwifi/mvm/ops.c -@@ -1742,8 +1742,11 @@ static void iwl_mvm_queue_state_change(struct iwl_op_mode *op_mode, - else - set_bit(IWL_MVM_TXQ_STATE_STOP_FULL, &mvmtxq->state); - -- if (start && mvmsta->sta_state != IEEE80211_STA_NOTEXIST) -+ if (start && mvmsta->sta_state != IEEE80211_STA_NOTEXIST) { -+ local_bh_disable(); - iwl_mvm_mac_itxq_xmit(mvm->hw, txq); -+ local_bh_enable(); -+ } - } - - out: --- -2.39.2 - diff --git a/queue-6.4/wifi-mac80211-add-helpers-to-access-sband-iftype-dat.patch b/queue-6.4/wifi-mac80211-add-helpers-to-access-sband-iftype-dat.patch deleted file mode 100644 index e407240f320..00000000000 --- a/queue-6.4/wifi-mac80211-add-helpers-to-access-sband-iftype-dat.patch +++ /dev/null @@ -1,360 +0,0 @@ -From c56c1ff1aac23051d68cf64d55ed7196259cc1fa Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Sun, 4 Jun 2023 12:11:24 +0300 -Subject: wifi: mac80211: add helpers to access sband iftype data - -From: Johannes Berg - -[ Upstream commit 1ec7291e247055fab3a088e1a333a31e7c06e2dd ] - -There's quite a bit of code accessing sband iftype data -(HE, HE 6 GHz, EHT) and we always need to remember to use -the ieee80211_vif_type_p2p() helper. Add new helpers to -directly get it from the sband/vif rather than having to -call ieee80211_vif_type_p2p(). - -Convert most code with the following spatch: - - @@ - expression vif, sband; - @@ - -ieee80211_get_he_iftype_cap(sband, ieee80211_vif_type_p2p(vif)) - +ieee80211_get_he_iftype_cap_vif(sband, vif) - - @@ - expression vif, sband; - @@ - -ieee80211_get_eht_iftype_cap(sband, ieee80211_vif_type_p2p(vif)) - +ieee80211_get_eht_iftype_cap_vif(sband, vif) - - @@ - expression vif, sband; - @@ - -ieee80211_get_he_6ghz_capa(sband, ieee80211_vif_type_p2p(vif)) - +ieee80211_get_he_6ghz_capa_vif(sband, vif) - -Signed-off-by: Johannes Berg -Signed-off-by: Gregory Greenman -Link: https://lore.kernel.org/r/20230604120651.db099f49e764.Ie892966c49e22c7b7ee1073bc684f142debfdc84@changeid -Signed-off-by: Johannes Berg -Stable-dep-of: f91295987576 ("wifi: iwlwifi: mvm: correctly access HE/EHT sband capa") -Signed-off-by: Sasha Levin ---- - .../net/wireless/intel/iwlwifi/mvm/mac80211.c | 6 +-- - drivers/net/wireless/intel/iwlwifi/mvm/ops.c | 5 +-- - .../net/wireless/intel/iwlwifi/mvm/rs-fw.c | 5 +-- - include/net/mac80211.h | 44 ++++++++++++++++++- - net/mac80211/eht.c | 5 +-- - net/mac80211/he.c | 3 +- - net/mac80211/mlme.c | 30 +++++-------- - net/mac80211/util.c | 11 ++--- - 8 files changed, 66 insertions(+), 43 deletions(-) - -diff --git a/drivers/net/wireless/intel/iwlwifi/mvm/mac80211.c b/drivers/net/wireless/intel/iwlwifi/mvm/mac80211.c -index 17f788a5ff6ba..6c70ca1b524c4 100644 ---- a/drivers/net/wireless/intel/iwlwifi/mvm/mac80211.c -+++ b/drivers/net/wireless/intel/iwlwifi/mvm/mac80211.c -@@ -2285,8 +2285,7 @@ bool iwl_mvm_is_nic_ack_enabled(struct iwl_mvm *mvm, struct ieee80211_vif *vif) - * so take it from one of them. - */ - sband = mvm->hw->wiphy->bands[NL80211_BAND_2GHZ]; -- own_he_cap = ieee80211_get_he_iftype_cap(sband, -- ieee80211_vif_type_p2p(vif)); -+ own_he_cap = ieee80211_get_he_iftype_cap_vif(sband, vif); - - return (own_he_cap && (own_he_cap->he_cap_elem.mac_cap_info[2] & - IEEE80211_HE_MAC_CAP2_ACK_EN)); -@@ -3468,8 +3467,7 @@ static void iwl_mvm_reset_cca_40mhz_workaround(struct iwl_mvm *mvm, - - sband->ht_cap.cap |= IEEE80211_HT_CAP_SUP_WIDTH_20_40; - -- he_cap = ieee80211_get_he_iftype_cap(sband, -- ieee80211_vif_type_p2p(vif)); -+ he_cap = ieee80211_get_he_iftype_cap_vif(sband, vif); - - if (he_cap) { - /* we know that ours is writable */ -diff --git a/drivers/net/wireless/intel/iwlwifi/mvm/ops.c b/drivers/net/wireless/intel/iwlwifi/mvm/ops.c -index 32625bfacaaef..6ba4ad6b1380b 100644 ---- a/drivers/net/wireless/intel/iwlwifi/mvm/ops.c -+++ b/drivers/net/wireless/intel/iwlwifi/mvm/ops.c -@@ -1,6 +1,6 @@ - // SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause - /* -- * Copyright (C) 2012-2014, 2018-2020 Intel Corporation -+ * Copyright (C) 2012-2014, 2018-2023 Intel Corporation - * Copyright (C) 2013-2015 Intel Mobile Communications GmbH - * Copyright (C) 2016-2017 Intel Deutschland GmbH - */ -@@ -192,8 +192,7 @@ static void iwl_mvm_rx_monitor_notif(struct iwl_mvm *mvm, - WARN_ON(!(sband->ht_cap.cap & IEEE80211_HT_CAP_SUP_WIDTH_20_40)); - sband->ht_cap.cap &= ~IEEE80211_HT_CAP_SUP_WIDTH_20_40; - -- he_cap = ieee80211_get_he_iftype_cap(sband, -- ieee80211_vif_type_p2p(vif)); -+ he_cap = ieee80211_get_he_iftype_cap_vif(sband, vif); - - if (he_cap) { - /* we know that ours is writable */ -diff --git a/drivers/net/wireless/intel/iwlwifi/mvm/rs-fw.c b/drivers/net/wireless/intel/iwlwifi/mvm/rs-fw.c -index c3a00bfbeef2c..f72d1ca3cfedc 100644 ---- a/drivers/net/wireless/intel/iwlwifi/mvm/rs-fw.c -+++ b/drivers/net/wireless/intel/iwlwifi/mvm/rs-fw.c -@@ -1,7 +1,7 @@ - // SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause - /* - * Copyright (C) 2017 Intel Deutschland GmbH -- * Copyright (C) 2018-2022 Intel Corporation -+ * Copyright (C) 2018-2023 Intel Corporation - */ - #include "rs.h" - #include "fw-api.h" -@@ -94,8 +94,7 @@ static u16 rs_fw_get_config_flags(struct iwl_mvm *mvm, - IEEE80211_HE_PHY_CAP1_LDPC_CODING_IN_PAYLOAD)) - flags |= IWL_TLC_MNG_CFG_FLAGS_LDPC_MSK; - -- sband_he_cap = ieee80211_get_he_iftype_cap(sband, -- ieee80211_vif_type_p2p(vif)); -+ sband_he_cap = ieee80211_get_he_iftype_cap_vif(sband, vif); - if (sband_he_cap && - !(sband_he_cap->he_cap_elem.phy_cap_info[1] & - IEEE80211_HE_PHY_CAP1_LDPC_CODING_IN_PAYLOAD)) -diff --git a/include/net/mac80211.h b/include/net/mac80211.h -index ac0370e768749..65510cfda37af 100644 ---- a/include/net/mac80211.h -+++ b/include/net/mac80211.h -@@ -7,7 +7,7 @@ - * Copyright 2007-2010 Johannes Berg - * Copyright 2013-2014 Intel Mobile Communications GmbH - * Copyright (C) 2015 - 2017 Intel Deutschland GmbH -- * Copyright (C) 2018 - 2022 Intel Corporation -+ * Copyright (C) 2018 - 2023 Intel Corporation - */ - - #ifndef MAC80211_H -@@ -6861,6 +6861,48 @@ ieee80211_vif_type_p2p(struct ieee80211_vif *vif) - return ieee80211_iftype_p2p(vif->type, vif->p2p); - } - -+/** -+ * ieee80211_get_he_iftype_cap_vif - return HE capabilities for sband/vif -+ * @sband: the sband to search for the iftype on -+ * @vif: the vif to get the iftype from -+ * -+ * Return: pointer to the struct ieee80211_sta_he_cap, or %NULL is none found -+ */ -+static inline const struct ieee80211_sta_he_cap * -+ieee80211_get_he_iftype_cap_vif(const struct ieee80211_supported_band *sband, -+ struct ieee80211_vif *vif) -+{ -+ return ieee80211_get_he_iftype_cap(sband, ieee80211_vif_type_p2p(vif)); -+} -+ -+/** -+ * ieee80211_get_he_6ghz_capa_vif - return HE 6 GHz capabilities -+ * @sband: the sband to search for the STA on -+ * @vif: the vif to get the iftype from -+ * -+ * Return: the 6GHz capabilities -+ */ -+static inline __le16 -+ieee80211_get_he_6ghz_capa_vif(const struct ieee80211_supported_band *sband, -+ struct ieee80211_vif *vif) -+{ -+ return ieee80211_get_he_6ghz_capa(sband, ieee80211_vif_type_p2p(vif)); -+} -+ -+/** -+ * ieee80211_get_eht_iftype_cap_vif - return ETH capabilities for sband/vif -+ * @sband: the sband to search for the iftype on -+ * @vif: the vif to get the iftype from -+ * -+ * Return: pointer to the struct ieee80211_sta_eht_cap, or %NULL is none found -+ */ -+static inline const struct ieee80211_sta_eht_cap * -+ieee80211_get_eht_iftype_cap_vif(const struct ieee80211_supported_band *sband, -+ struct ieee80211_vif *vif) -+{ -+ return ieee80211_get_eht_iftype_cap(sband, ieee80211_vif_type_p2p(vif)); -+} -+ - /** - * ieee80211_update_mu_groups - set the VHT MU-MIMO groud data - * -diff --git a/net/mac80211/eht.c b/net/mac80211/eht.c -index 18bc6b78b2679..ddc7acc68335a 100644 ---- a/net/mac80211/eht.c -+++ b/net/mac80211/eht.c -@@ -2,7 +2,7 @@ - /* - * EHT handling - * -- * Copyright(c) 2021-2022 Intel Corporation -+ * Copyright(c) 2021-2023 Intel Corporation - */ - - #include "ieee80211_i.h" -@@ -25,8 +25,7 @@ ieee80211_eht_cap_ie_to_sta_eht_cap(struct ieee80211_sub_if_data *sdata, - memset(eht_cap, 0, sizeof(*eht_cap)); - - if (!eht_cap_ie_elem || -- !ieee80211_get_eht_iftype_cap(sband, -- ieee80211_vif_type_p2p(&sdata->vif))) -+ !ieee80211_get_eht_iftype_cap_vif(sband, &sdata->vif)) - return; - - mcs_nss_size = ieee80211_eht_mcs_nss_size(he_cap_ie_elem, -diff --git a/net/mac80211/he.c b/net/mac80211/he.c -index 0322abae08250..9f5ffdc9db284 100644 ---- a/net/mac80211/he.c -+++ b/net/mac80211/he.c -@@ -128,8 +128,7 @@ ieee80211_he_cap_ie_to_sta_he_cap(struct ieee80211_sub_if_data *sdata, - return; - - own_he_cap_ptr = -- ieee80211_get_he_iftype_cap(sband, -- ieee80211_vif_type_p2p(&sdata->vif)); -+ ieee80211_get_he_iftype_cap_vif(sband, &sdata->vif); - if (!own_he_cap_ptr) - return; - -diff --git a/net/mac80211/mlme.c b/net/mac80211/mlme.c -index 5a4303130ef22..93da8373583be 100644 ---- a/net/mac80211/mlme.c -+++ b/net/mac80211/mlme.c -@@ -511,16 +511,14 @@ static int ieee80211_config_bw(struct ieee80211_link_data *link, - - /* don't check HE if we associated as non-HE station */ - if (link->u.mgd.conn_flags & IEEE80211_CONN_DISABLE_HE || -- !ieee80211_get_he_iftype_cap(sband, -- ieee80211_vif_type_p2p(&sdata->vif))) { -+ !ieee80211_get_he_iftype_cap_vif(sband, &sdata->vif)) { - he_oper = NULL; - eht_oper = NULL; - } - - /* don't check EHT if we associated as non-EHT station */ - if (link->u.mgd.conn_flags & IEEE80211_CONN_DISABLE_EHT || -- !ieee80211_get_eht_iftype_cap(sband, -- ieee80211_vif_type_p2p(&sdata->vif))) -+ !ieee80211_get_eht_iftype_cap_vif(sband, &sdata->vif)) - eht_oper = NULL; - - /* -@@ -776,8 +774,7 @@ static void ieee80211_add_he_ie(struct ieee80211_sub_if_data *sdata, - const struct ieee80211_sta_he_cap *he_cap; - u8 he_cap_size; - -- he_cap = ieee80211_get_he_iftype_cap(sband, -- ieee80211_vif_type_p2p(&sdata->vif)); -+ he_cap = ieee80211_get_he_iftype_cap_vif(sband, &sdata->vif); - if (WARN_ON(!he_cap)) - return; - -@@ -806,10 +803,8 @@ static void ieee80211_add_eht_ie(struct ieee80211_sub_if_data *sdata, - const struct ieee80211_sta_eht_cap *eht_cap; - u8 eht_cap_size; - -- he_cap = ieee80211_get_he_iftype_cap(sband, -- ieee80211_vif_type_p2p(&sdata->vif)); -- eht_cap = ieee80211_get_eht_iftype_cap(sband, -- ieee80211_vif_type_p2p(&sdata->vif)); -+ he_cap = ieee80211_get_he_iftype_cap_vif(sband, &sdata->vif); -+ eht_cap = ieee80211_get_eht_iftype_cap_vif(sband, &sdata->vif); - - /* - * EHT capabilities element is only added if the HE capabilities element -@@ -3949,8 +3944,7 @@ static bool ieee80211_twt_req_supported(struct ieee80211_sub_if_data *sdata, - const struct ieee802_11_elems *elems) - { - const struct ieee80211_sta_he_cap *own_he_cap = -- ieee80211_get_he_iftype_cap(sband, -- ieee80211_vif_type_p2p(&sdata->vif)); -+ ieee80211_get_he_iftype_cap_vif(sband, &sdata->vif); - - if (elems->ext_capab_len < 10) - return false; -@@ -3986,8 +3980,7 @@ static bool ieee80211_twt_bcast_support(struct ieee80211_sub_if_data *sdata, - struct link_sta_info *link_sta) - { - const struct ieee80211_sta_he_cap *own_he_cap = -- ieee80211_get_he_iftype_cap(sband, -- ieee80211_vif_type_p2p(&sdata->vif)); -+ ieee80211_get_he_iftype_cap_vif(sband, &sdata->vif); - - return bss_conf->he_support && - (link_sta->pub->he_cap.he_cap_elem.mac_cap_info[2] & -@@ -4624,8 +4617,7 @@ ieee80211_verify_sta_he_mcs_support(struct ieee80211_sub_if_data *sdata, - const struct ieee80211_he_operation *he_op) - { - const struct ieee80211_sta_he_cap *sta_he_cap = -- ieee80211_get_he_iftype_cap(sband, -- ieee80211_vif_type_p2p(&sdata->vif)); -+ ieee80211_get_he_iftype_cap_vif(sband, &sdata->vif); - u16 ap_min_req_set; - int i; - -@@ -4759,15 +4751,13 @@ static int ieee80211_prep_channel(struct ieee80211_sub_if_data *sdata, - *conn_flags |= IEEE80211_CONN_DISABLE_EHT; - } - -- if (!ieee80211_get_he_iftype_cap(sband, -- ieee80211_vif_type_p2p(&sdata->vif))) { -+ if (!ieee80211_get_he_iftype_cap_vif(sband, &sdata->vif)) { - mlme_dbg(sdata, "HE not supported, disabling HE and EHT\n"); - *conn_flags |= IEEE80211_CONN_DISABLE_HE; - *conn_flags |= IEEE80211_CONN_DISABLE_EHT; - } - -- if (!ieee80211_get_eht_iftype_cap(sband, -- ieee80211_vif_type_p2p(&sdata->vif))) { -+ if (!ieee80211_get_eht_iftype_cap_vif(sband, &sdata->vif)) { - mlme_dbg(sdata, "EHT not supported, disabling EHT\n"); - *conn_flags |= IEEE80211_CONN_DISABLE_EHT; - } -diff --git a/net/mac80211/util.c b/net/mac80211/util.c -index 3bd07a0a782f7..74bcc9590c759 100644 ---- a/net/mac80211/util.c -+++ b/net/mac80211/util.c -@@ -6,7 +6,7 @@ - * Copyright 2007 Johannes Berg - * Copyright 2013-2014 Intel Mobile Communications GmbH - * Copyright (C) 2015-2017 Intel Deutschland GmbH -- * Copyright (C) 2018-2022 Intel Corporation -+ * Copyright (C) 2018-2023 Intel Corporation - * - * utilities for mac80211 - */ -@@ -2121,8 +2121,7 @@ static int ieee80211_build_preq_ies_band(struct ieee80211_sub_if_data *sdata, - *offset = noffset; - } - -- he_cap = ieee80211_get_he_iftype_cap(sband, -- ieee80211_vif_type_p2p(&sdata->vif)); -+ he_cap = ieee80211_get_he_iftype_cap_vif(sband, &sdata->vif); - if (he_cap && - cfg80211_any_usable_channels(local->hw.wiphy, BIT(sband->band), - IEEE80211_CHAN_NO_HE)) { -@@ -2131,8 +2130,7 @@ static int ieee80211_build_preq_ies_band(struct ieee80211_sub_if_data *sdata, - goto out_err; - } - -- eht_cap = ieee80211_get_eht_iftype_cap(sband, -- ieee80211_vif_type_p2p(&sdata->vif)); -+ eht_cap = ieee80211_get_eht_iftype_cap_vif(sband, &sdata->vif); - - if (eht_cap && - cfg80211_any_usable_channels(local->hw.wiphy, BIT(sband->band), -@@ -2150,8 +2148,7 @@ static int ieee80211_build_preq_ies_band(struct ieee80211_sub_if_data *sdata, - struct ieee80211_supported_band *sband6; - - sband6 = local->hw.wiphy->bands[NL80211_BAND_6GHZ]; -- he_cap = ieee80211_get_he_iftype_cap(sband6, -- ieee80211_vif_type_p2p(&sdata->vif)); -+ he_cap = ieee80211_get_he_iftype_cap_vif(sband6, &sdata->vif); - - if (he_cap) { - enum nl80211_iftype iftype = --- -2.39.2 - diff --git a/queue-6.4/wifi-mac80211-fix-permissions-for-valid_links-debugf.patch b/queue-6.4/wifi-mac80211-fix-permissions-for-valid_links-debugf.patch deleted file mode 100644 index c2ad9354abb..00000000000 --- a/queue-6.4/wifi-mac80211-fix-permissions-for-valid_links-debugf.patch +++ /dev/null @@ -1,38 +0,0 @@ -From 0055b6ec8b9efa317deca97658172b2e73e70586 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Sun, 11 Jun 2023 12:14:28 +0300 -Subject: wifi: mac80211: Fix permissions for valid_links debugfs entry - -From: Ilan Peer - -[ Upstream commit 4cacadc0dbd8013e6161aa8843d8e9d8ad435b47 ] - -The entry should be a read only one and not a write only one. Fix it. - -Fixes: 3d9011029227 ("wifi: mac80211: implement link switching") -Signed-off-by: Ilan Peer -Signed-off-by: Gregory Greenman -Link: https://lore.kernel.org/r/20230611121219.c75316990411.I1565a7fcba8a37f83efffb0cc6b71c572b896e94@changeid -[remove x16 change since it doesn't work yet] -Signed-off-by: Johannes Berg -Signed-off-by: Sasha Levin ---- - net/mac80211/debugfs_netdev.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/net/mac80211/debugfs_netdev.c b/net/mac80211/debugfs_netdev.c -index b0cef37eb3948..03374eb8b7cb9 100644 ---- a/net/mac80211/debugfs_netdev.c -+++ b/net/mac80211/debugfs_netdev.c -@@ -717,7 +717,7 @@ static void add_sta_files(struct ieee80211_sub_if_data *sdata) - DEBUGFS_ADD_MODE(uapsd_queues, 0600); - DEBUGFS_ADD_MODE(uapsd_max_sp_len, 0600); - DEBUGFS_ADD_MODE(tdls_wider_bw, 0600); -- DEBUGFS_ADD_MODE(valid_links, 0200); -+ DEBUGFS_ADD_MODE(valid_links, 0400); - DEBUGFS_ADD_MODE(active_links, 0600); - } - --- -2.39.2 - diff --git a/queue-6.4/wifi-mac80211-recalc-min-chandef-for-new-sta-links.patch b/queue-6.4/wifi-mac80211-recalc-min-chandef-for-new-sta-links.patch deleted file mode 100644 index ef304f13c52..00000000000 --- a/queue-6.4/wifi-mac80211-recalc-min-chandef-for-new-sta-links.patch +++ /dev/null @@ -1,40 +0,0 @@ -From 04f3bd7cb7c1bb3212f2121c8ec940f82d48aca7 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Sun, 4 Jun 2023 12:11:20 +0300 -Subject: wifi: mac80211: recalc min chandef for new STA links - -From: Johannes Berg - -[ Upstream commit ba7af2654e3b7b810c750b3c6106f6f20b81cc88 ] - -When adding a new link to a station, this needs to cause a -recalculation of the minimum chandef since otherwise we can -have a higher bandwidth station connected on that link than -the link is operating at. Do the appropriate recalc. - -Fixes: cb71f1d136a6 ("wifi: mac80211: add sta link addition/removal") -Signed-off-by: Johannes Berg -Signed-off-by: Gregory Greenman -Link: https://lore.kernel.org/r/20230604120651.377adf3c789a.I91bf28f399e16e6ac1f83bacd1029a698b4e6685@changeid -Signed-off-by: Johannes Berg -Signed-off-by: Sasha Levin ---- - net/mac80211/sta_info.c | 2 ++ - 1 file changed, 2 insertions(+) - -diff --git a/net/mac80211/sta_info.c b/net/mac80211/sta_info.c -index 1400512e0dde5..a1cd5c234f47e 100644 ---- a/net/mac80211/sta_info.c -+++ b/net/mac80211/sta_info.c -@@ -2913,6 +2913,8 @@ int ieee80211_sta_activate_link(struct sta_info *sta, unsigned int link_id) - if (!test_sta_flag(sta, WLAN_STA_INSERTED)) - goto hash; - -+ ieee80211_recalc_min_chandef(sdata, link_id); -+ - /* Ensure the values are updated for the driver, - * redone by sta_remove_link on failure. - */ --- -2.39.2 - diff --git a/queue-6.4/wifi-mac80211-remove-missing-iftype-sband-data-eht-c.patch b/queue-6.4/wifi-mac80211-remove-missing-iftype-sband-data-eht-c.patch deleted file mode 100644 index c242addc915..00000000000 --- a/queue-6.4/wifi-mac80211-remove-missing-iftype-sband-data-eht-c.patch +++ /dev/null @@ -1,49 +0,0 @@ -From f64e4678a498078ab1163518a819871848ece247 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Wed, 14 Jun 2023 15:26:48 +0200 -Subject: wifi: mac80211: Remove "Missing iftype sband data/EHT cap" spam - -From: Nicolas Cavallari - -[ Upstream commit 6e21e7b8cd897193cee3c2649640efceb3004ba5 ] - -In mesh mode, ieee80211_chandef_he_6ghz_oper() is called by -mesh_matches_local() for every received mesh beacon. - -On a 6 GHz mesh of a HE-only phy, this spams that the hardware does not -have EHT capabilities, even if the received mesh beacon does not have an -EHT element. - -Unlike HE, not supporting EHT in the 6 GHz band is not an error so do -not print anything in this case. - -Fixes: 5dca295dd767 ("mac80211: Add initial support for EHT and 320 MHz channels") - -Signed-off-by: Nicolas Cavallari -Reviewed-by: Simon Horman -Link: https://lore.kernel.org/r/20230614132648.28995-1-nicolas.cavallari@green-communications.fr -Signed-off-by: Johannes Berg -Signed-off-by: Sasha Levin ---- - net/mac80211/util.c | 4 +--- - 1 file changed, 1 insertion(+), 3 deletions(-) - -diff --git a/net/mac80211/util.c b/net/mac80211/util.c -index 74bcc9590c759..4cfd6b9b705cb 100644 ---- a/net/mac80211/util.c -+++ b/net/mac80211/util.c -@@ -3798,10 +3798,8 @@ bool ieee80211_chandef_he_6ghz_oper(struct ieee80211_sub_if_data *sdata, - } - - eht_cap = ieee80211_get_eht_iftype_cap(sband, iftype); -- if (!eht_cap) { -- sdata_info(sdata, "Missing iftype sband data/EHT cap"); -+ if (!eht_cap) - eht_oper = NULL; -- } - - he_6ghz_oper = ieee80211_he_6ghz_oper(he_oper); - --- -2.39.2 - diff --git a/queue-6.4/wifi-mwifiex-fix-the-size-of-a-memory-allocation-in-.patch b/queue-6.4/wifi-mwifiex-fix-the-size-of-a-memory-allocation-in-.patch deleted file mode 100644 index f8319f4d5c5..00000000000 --- a/queue-6.4/wifi-mwifiex-fix-the-size-of-a-memory-allocation-in-.patch +++ /dev/null @@ -1,48 +0,0 @@ -From ebd5f619974bf47cafb5384351d4dc5bf45342a1 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Sat, 6 May 2023 15:53:15 +0200 -Subject: wifi: mwifiex: Fix the size of a memory allocation in - mwifiex_ret_802_11_scan() - -From: Christophe JAILLET - -[ Upstream commit d9aef04fcfa81ee4fb2804a21a3712b7bbd936af ] - -The type of "mwifiex_adapter->nd_info" is "struct cfg80211_wowlan_nd_info", -not "struct cfg80211_wowlan_nd_match". - -Use struct_size() to ease the computation of the needed size. - -The current code over-allocates some memory, so is safe. -But it wastes 32 bytes. - -Fixes: 7d7f07d8c5d3 ("mwifiex: add wowlan net-detect support") -Signed-off-by: Christophe JAILLET -Reviewed-by: Simon Horman -Signed-off-by: Kalle Valo -Link: https://lore.kernel.org/r/7a6074fb056d2181e058a3cc6048d8155c20aec7.1683371982.git.christophe.jaillet@wanadoo.fr -Signed-off-by: Sasha Levin ---- - drivers/net/wireless/marvell/mwifiex/scan.c | 6 +++--- - 1 file changed, 3 insertions(+), 3 deletions(-) - -diff --git a/drivers/net/wireless/marvell/mwifiex/scan.c b/drivers/net/wireless/marvell/mwifiex/scan.c -index ac8001c842935..644b1e134b01c 100644 ---- a/drivers/net/wireless/marvell/mwifiex/scan.c -+++ b/drivers/net/wireless/marvell/mwifiex/scan.c -@@ -2187,9 +2187,9 @@ int mwifiex_ret_802_11_scan(struct mwifiex_private *priv, - - if (nd_config) { - adapter->nd_info = -- kzalloc(sizeof(struct cfg80211_wowlan_nd_match) + -- sizeof(struct cfg80211_wowlan_nd_match *) * -- scan_rsp->number_of_sets, GFP_ATOMIC); -+ kzalloc(struct_size(adapter->nd_info, matches, -+ scan_rsp->number_of_sets), -+ GFP_ATOMIC); - - if (adapter->nd_info) - adapter->nd_info->n_matches = scan_rsp->number_of_sets; --- -2.39.2 - diff --git a/queue-6.4/wifi-orinoco-fix-an-error-handling-path-in-orinoco_c.patch b/queue-6.4/wifi-orinoco-fix-an-error-handling-path-in-orinoco_c.patch deleted file mode 100644 index 2f2f65907d7..00000000000 --- a/queue-6.4/wifi-orinoco-fix-an-error-handling-path-in-orinoco_c.patch +++ /dev/null @@ -1,58 +0,0 @@ -From 22de1afdffcdab93d0aae98af0189bc2dc804dfe Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Sat, 20 May 2023 09:38:22 +0200 -Subject: wifi: orinoco: Fix an error handling path in orinoco_cs_probe() - -From: Christophe JAILLET - -[ Upstream commit 67a81d911c01225f426cc6bee2373df044c1a9b7 ] - -Should orinoco_cs_config() fail, some resources need to be released as -already done in the remove function. - -While at it, remove a useless and erroneous comment. The probe is -orinoco_cs_probe(), not orinoco_cs_attach(). - -Fixes: 15b99ac17295 ("[PATCH] pcmcia: add return value to _config() functions") -Signed-off-by: Christophe JAILLET -Signed-off-by: Kalle Valo -Link: https://lore.kernel.org/r/e24735ce4d82901d5f7ea08419eea53bfdde3d65.1684568286.git.christophe.jaillet@wanadoo.fr -Signed-off-by: Sasha Levin ---- - drivers/net/wireless/intersil/orinoco/orinoco_cs.c | 13 +++++++++++-- - 1 file changed, 11 insertions(+), 2 deletions(-) - -diff --git a/drivers/net/wireless/intersil/orinoco/orinoco_cs.c b/drivers/net/wireless/intersil/orinoco/orinoco_cs.c -index a956f965a1e5e..03bfd2482656c 100644 ---- a/drivers/net/wireless/intersil/orinoco/orinoco_cs.c -+++ b/drivers/net/wireless/intersil/orinoco/orinoco_cs.c -@@ -96,6 +96,7 @@ orinoco_cs_probe(struct pcmcia_device *link) - { - struct orinoco_private *priv; - struct orinoco_pccard *card; -+ int ret; - - priv = alloc_orinocodev(sizeof(*card), &link->dev, - orinoco_cs_hard_reset, NULL); -@@ -107,8 +108,16 @@ orinoco_cs_probe(struct pcmcia_device *link) - card->p_dev = link; - link->priv = priv; - -- return orinoco_cs_config(link); --} /* orinoco_cs_attach */ -+ ret = orinoco_cs_config(link); -+ if (ret) -+ goto err_free_orinocodev; -+ -+ return 0; -+ -+err_free_orinocodev: -+ free_orinocodev(priv); -+ return ret; -+} - - static void orinoco_cs_detach(struct pcmcia_device *link) - { --- -2.39.2 - diff --git a/queue-6.4/wifi-orinoco-fix-an-error-handling-path-in-spectrum_.patch b/queue-6.4/wifi-orinoco-fix-an-error-handling-path-in-spectrum_.patch deleted file mode 100644 index 1b0417c0654..00000000000 --- a/queue-6.4/wifi-orinoco-fix-an-error-handling-path-in-spectrum_.patch +++ /dev/null @@ -1,59 +0,0 @@ -From 12d7ea03491284281e510b004238a68b0b8ebf09 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Sat, 20 May 2023 09:29:46 +0200 -Subject: wifi: orinoco: Fix an error handling path in spectrum_cs_probe() - -From: Christophe JAILLET - -[ Upstream commit 925244325159824385209e3e0e3f91fa6bf0646c ] - -Should spectrum_cs_config() fail, some resources need to be released as -already done in the remove function. - -While at it, remove a useless and erroneous comment. The probe is -spectrum_cs_probe(), not spectrum_cs_attach(). - -Fixes: 15b99ac17295 ("[PATCH] pcmcia: add return value to _config() functions") -Signed-off-by: Christophe JAILLET -Reviewed-by: Simon Horman -Signed-off-by: Kalle Valo -Link: https://lore.kernel.org/r/c0bc0c21c58ca477fc5521607615bafbf2aef8eb.1684567733.git.christophe.jaillet@wanadoo.fr -Signed-off-by: Sasha Levin ---- - drivers/net/wireless/intersil/orinoco/spectrum_cs.c | 13 +++++++++++-- - 1 file changed, 11 insertions(+), 2 deletions(-) - -diff --git a/drivers/net/wireless/intersil/orinoco/spectrum_cs.c b/drivers/net/wireless/intersil/orinoco/spectrum_cs.c -index 291ef97ed45ec..841d623c621ac 100644 ---- a/drivers/net/wireless/intersil/orinoco/spectrum_cs.c -+++ b/drivers/net/wireless/intersil/orinoco/spectrum_cs.c -@@ -157,6 +157,7 @@ spectrum_cs_probe(struct pcmcia_device *link) - { - struct orinoco_private *priv; - struct orinoco_pccard *card; -+ int ret; - - priv = alloc_orinocodev(sizeof(*card), &link->dev, - spectrum_cs_hard_reset, -@@ -169,8 +170,16 @@ spectrum_cs_probe(struct pcmcia_device *link) - card->p_dev = link; - link->priv = priv; - -- return spectrum_cs_config(link); --} /* spectrum_cs_attach */ -+ ret = spectrum_cs_config(link); -+ if (ret) -+ goto err_free_orinocodev; -+ -+ return 0; -+ -+err_free_orinocodev: -+ free_orinocodev(priv); -+ return ret; -+} - - static void spectrum_cs_detach(struct pcmcia_device *link) - { --- -2.39.2 - diff --git a/queue-6.4/wifi-ray_cs-fix-an-error-handling-path-in-ray_probe.patch b/queue-6.4/wifi-ray_cs-fix-an-error-handling-path-in-ray_probe.patch deleted file mode 100644 index f8e48298521..00000000000 --- a/queue-6.4/wifi-ray_cs-fix-an-error-handling-path-in-ray_probe.patch +++ /dev/null @@ -1,69 +0,0 @@ -From f9161d7b9e4d92cdac36481b07fdde65a2552b72 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Sat, 20 May 2023 10:13:22 +0200 -Subject: wifi: ray_cs: Fix an error handling path in ray_probe() - -From: Christophe JAILLET - -[ Upstream commit 4f8d66a9fb2edcd05c1e563456a55a08910bfb37 ] - -Should ray_config() fail, some resources need to be released as already -done in the remove function. - -While at it, remove a useless and erroneous comment. The probe is -ray_probe(), not ray_attach(). - -Fixes: 15b99ac17295 ("[PATCH] pcmcia: add return value to _config() functions") -Signed-off-by: Christophe JAILLET -Reviewed-by: Simon Horman -Signed-off-by: Kalle Valo -Link: https://lore.kernel.org/r/8c544d18084f8b37dd108e844f7e79e85ff708ff.1684570373.git.christophe.jaillet@wanadoo.fr -Signed-off-by: Sasha Levin ---- - drivers/net/wireless/legacy/ray_cs.c | 16 +++++++++++----- - 1 file changed, 11 insertions(+), 5 deletions(-) - -diff --git a/drivers/net/wireless/legacy/ray_cs.c b/drivers/net/wireless/legacy/ray_cs.c -index 1f57a0055bbd8..38782d4c4694a 100644 ---- a/drivers/net/wireless/legacy/ray_cs.c -+++ b/drivers/net/wireless/legacy/ray_cs.c -@@ -270,13 +270,14 @@ static int ray_probe(struct pcmcia_device *p_dev) - { - ray_dev_t *local; - struct net_device *dev; -+ int ret; - - dev_dbg(&p_dev->dev, "ray_attach()\n"); - - /* Allocate space for private device-specific data */ - dev = alloc_etherdev(sizeof(ray_dev_t)); - if (!dev) -- goto fail_alloc_dev; -+ return -ENOMEM; - - local = netdev_priv(dev); - local->finder = p_dev; -@@ -313,11 +314,16 @@ static int ray_probe(struct pcmcia_device *p_dev) - timer_setup(&local->timer, NULL, 0); - - this_device = p_dev; -- return ray_config(p_dev); -+ ret = ray_config(p_dev); -+ if (ret) -+ goto err_free_dev; -+ -+ return 0; - --fail_alloc_dev: -- return -ENOMEM; --} /* ray_attach */ -+err_free_dev: -+ free_netdev(dev); -+ return ret; -+} - - static void ray_detach(struct pcmcia_device *link) - { --- -2.39.2 - diff --git a/queue-6.4/wifi-rsi-do-not-configure-wowlan-in-shutdown-hook-if.patch b/queue-6.4/wifi-rsi-do-not-configure-wowlan-in-shutdown-hook-if.patch deleted file mode 100644 index 68fae8d4e6d..00000000000 --- a/queue-6.4/wifi-rsi-do-not-configure-wowlan-in-shutdown-hook-if.patch +++ /dev/null @@ -1,52 +0,0 @@ -From 07c76c4d19bde072147ad3d1d43e05446fea47dc Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Sun, 28 May 2023 00:28:33 +0200 -Subject: wifi: rsi: Do not configure WoWlan in shutdown hook if not enabled - -From: Marek Vasut - -[ Upstream commit b241e260820b68c09586e8a0ae0fc23c0e3215bd ] - -In case WoWlan was never configured during the operation of the system, -the hw->wiphy->wowlan_config will be NULL. rsi_config_wowlan() checks -whether wowlan_config is non-NULL and if it is not, then WARNs about it. -The warning is valid, as during normal operation the rsi_config_wowlan() -should only ever be called with non-NULL wowlan_config. In shutdown this -rsi_config_wowlan() should only ever be called if WoWlan was configured -before by the user. - -Add checks for non-NULL wowlan_config into the shutdown hook. While at it, -check whether the wiphy is also non-NULL before accessing wowlan_config . -Drop the single-use wowlan_config variable, just inline it into function -call. - -Fixes: 16bbc3eb8372 ("rsi: fix null pointer dereference during rsi_shutdown()") -Signed-off-by: Marek Vasut -Reviewed-by: Simon Horman -Signed-off-by: Kalle Valo -Link: https://lore.kernel.org/r/20230527222833.273741-1-marex@denx.de -Signed-off-by: Sasha Levin ---- - drivers/net/wireless/rsi/rsi_91x_sdio.c | 6 ++---- - 1 file changed, 2 insertions(+), 4 deletions(-) - -diff --git a/drivers/net/wireless/rsi/rsi_91x_sdio.c b/drivers/net/wireless/rsi/rsi_91x_sdio.c -index d09998796ac08..6e33a2563fdbd 100644 ---- a/drivers/net/wireless/rsi/rsi_91x_sdio.c -+++ b/drivers/net/wireless/rsi/rsi_91x_sdio.c -@@ -1463,10 +1463,8 @@ static void rsi_shutdown(struct device *dev) - - rsi_dbg(ERR_ZONE, "SDIO Bus shutdown =====>\n"); - -- if (hw) { -- struct cfg80211_wowlan *wowlan = hw->wiphy->wowlan_config; -- -- if (rsi_config_wowlan(adapter, wowlan)) -+ if (hw && hw->wiphy && hw->wiphy->wowlan_config) { -+ if (rsi_config_wowlan(adapter, hw->wiphy->wowlan_config)) - rsi_dbg(ERR_ZONE, "Failed to configure WoWLAN\n"); - } - --- -2.39.2 - diff --git a/queue-6.4/wifi-rsi-do-not-set-mmc_pm_keep_power-in-shutdown.patch b/queue-6.4/wifi-rsi-do-not-set-mmc_pm_keep_power-in-shutdown.patch deleted file mode 100644 index 2dc1d8ddca4..00000000000 --- a/queue-6.4/wifi-rsi-do-not-set-mmc_pm_keep_power-in-shutdown.patch +++ /dev/null @@ -1,41 +0,0 @@ -From 00b3df9c030794d6fa339448ff50543e87fec960 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Sun, 28 May 2023 00:28:59 +0200 -Subject: wifi: rsi: Do not set MMC_PM_KEEP_POWER in shutdown - -From: Marek Vasut - -[ Upstream commit e74f562328b03fbe9cf438f958464dff3a644dfc ] - -It makes no sense to set MMC_PM_KEEP_POWER in shutdown. The flag -indicates to the MMC subsystem to keep the slot powered on during -suspend, but in shutdown the slot should actually be powered off. -Drop this call. - -Fixes: 063848c3e155 ("rsi: sdio: Add WOWLAN support for S5 shutdown state") -Signed-off-by: Marek Vasut -Reviewed-by: Simon Horman -Signed-off-by: Kalle Valo -Link: https://lore.kernel.org/r/20230527222859.273768-1-marex@denx.de -Signed-off-by: Sasha Levin ---- - drivers/net/wireless/rsi/rsi_91x_sdio.c | 3 --- - 1 file changed, 3 deletions(-) - -diff --git a/drivers/net/wireless/rsi/rsi_91x_sdio.c b/drivers/net/wireless/rsi/rsi_91x_sdio.c -index 6e33a2563fdbd..1911fef3bbad6 100644 ---- a/drivers/net/wireless/rsi/rsi_91x_sdio.c -+++ b/drivers/net/wireless/rsi/rsi_91x_sdio.c -@@ -1479,9 +1479,6 @@ static void rsi_shutdown(struct device *dev) - if (sdev->write_fail) - rsi_dbg(INFO_ZONE, "###### Device is not ready #######\n"); - -- if (rsi_set_sdio_pm_caps(adapter)) -- rsi_dbg(INFO_ZONE, "Setting power management caps failed\n"); -- - rsi_dbg(INFO_ZONE, "***** RSI module shut down *****\n"); - } - --- -2.39.2 - diff --git a/queue-6.4/wifi-rtw88-unlock-on-error-path-in-rtw_ops_add_inter.patch b/queue-6.4/wifi-rtw88-unlock-on-error-path-in-rtw_ops_add_inter.patch deleted file mode 100644 index 5a16bb30073..00000000000 --- a/queue-6.4/wifi-rtw88-unlock-on-error-path-in-rtw_ops_add_inter.patch +++ /dev/null @@ -1,40 +0,0 @@ -From f27a08b3c734ad18b295be924f6d7b334f0de5a0 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Wed, 3 May 2023 18:09:55 +0300 -Subject: wifi: rtw88: unlock on error path in rtw_ops_add_interface() - -From: Dan Carpenter - -[ Upstream commit e2ff1181b3d48257aab26bfd2165f3c7d271499f ] - -Call mutex_unlock(&rtwdev->mutex); before returning on this error path. - -Fixes: f0e741e4ddbc ("wifi: rtw88: add bitmap for dynamic port settings") -Signed-off-by: Dan Carpenter -Reviewed-by: Ping-Ke Shih -Signed-off-by: Kalle Valo -Link: https://lore.kernel.org/r/ddd10a74-5982-4f65-8c59-c1cca558d239@kili.mountain -Signed-off-by: Sasha Levin ---- - drivers/net/wireless/realtek/rtw88/mac80211.c | 4 +++- - 1 file changed, 3 insertions(+), 1 deletion(-) - -diff --git a/drivers/net/wireless/realtek/rtw88/mac80211.c b/drivers/net/wireless/realtek/rtw88/mac80211.c -index 144618bb94c86..09bcc2345bb05 100644 ---- a/drivers/net/wireless/realtek/rtw88/mac80211.c -+++ b/drivers/net/wireless/realtek/rtw88/mac80211.c -@@ -164,8 +164,10 @@ static int rtw_ops_add_interface(struct ieee80211_hw *hw, - mutex_lock(&rtwdev->mutex); - - port = find_first_zero_bit(rtwdev->hw_port, RTW_PORT_NUM); -- if (port >= RTW_PORT_NUM) -+ if (port >= RTW_PORT_NUM) { -+ mutex_unlock(&rtwdev->mutex); - return -EINVAL; -+ } - set_bit(port, rtwdev->hw_port); - - rtwvif->port = port; --- -2.39.2 - diff --git a/queue-6.4/wifi-rtw88-usb-silence-log-flooding-error-message.patch b/queue-6.4/wifi-rtw88-usb-silence-log-flooding-error-message.patch deleted file mode 100644 index 6091f4c68b6..00000000000 --- a/queue-6.4/wifi-rtw88-usb-silence-log-flooding-error-message.patch +++ /dev/null @@ -1,51 +0,0 @@ -From 91145d6d4d9944d6573d27816995fb9655cec4b9 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Wed, 24 May 2023 12:39:34 +0200 -Subject: wifi: rtw88: usb: silence log flooding error message - -From: Sascha Hauer - -[ Upstream commit 1f1784a59caf3eefd127908a1a3cf224017ff9c7 ] - -When receiving more rx packets than the kernel can handle the driver -drops the packets and issues an error message. This is bad for two -reasons. The logs are flooded with myriads of messages, but then time -consumed for printing messages in that critical code path brings down -the device. After some time of excessive rx load the driver responds -with: - -rtw_8822cu 1-1:1.2: failed to get tx report from firmware -rtw_8822cu 1-1:1.2: firmware failed to report density after scan -rtw_8822cu 1-1:1.2: firmware failed to report density after scan - -The device stops working until being replugged. - -Fix this by lowering the priority to debug level and also by -ratelimiting it. - -Fixes: a82dfd33d1237 ("wifi: rtw88: Add common USB chip support") -Signed-off-by: Sascha Hauer -Reviewed-by: Ping-Ke Shih -Signed-off-by: Kalle Valo -Link: https://lore.kernel.org/r/20230524103934.1019096-1-s.hauer@pengutronix.de -Signed-off-by: Sasha Levin ---- - drivers/net/wireless/realtek/rtw88/usb.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/drivers/net/wireless/realtek/rtw88/usb.c b/drivers/net/wireless/realtek/rtw88/usb.c -index 44a5fafb99055..976eafa739a2d 100644 ---- a/drivers/net/wireless/realtek/rtw88/usb.c -+++ b/drivers/net/wireless/realtek/rtw88/usb.c -@@ -535,7 +535,7 @@ static void rtw_usb_rx_handler(struct work_struct *work) - } - - if (skb_queue_len(&rtwusb->rx_queue) >= RTW_USB_MAX_RXQ_LEN) { -- rtw_err(rtwdev, "failed to get rx_queue, overflow\n"); -+ dev_dbg_ratelimited(rtwdev->dev, "failed to get rx_queue, overflow\n"); - dev_kfree_skb_any(skb); - continue; - } --- -2.39.2 - diff --git a/queue-6.4/wifi-rtw89-fix-rtw89_read_chip_ver-for-rtl8852b-and-.patch b/queue-6.4/wifi-rtw89-fix-rtw89_read_chip_ver-for-rtl8852b-and-.patch deleted file mode 100644 index 77187736032..00000000000 --- a/queue-6.4/wifi-rtw89-fix-rtw89_read_chip_ver-for-rtl8852b-and-.patch +++ /dev/null @@ -1,41 +0,0 @@ -From 2a43cea28309bffa34373054bc0f845fe464dc48 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Fri, 21 Apr 2023 13:44:04 +0300 -Subject: wifi: rtw89: fix rtw89_read_chip_ver() for RTL8852B and RTL8851B - -From: Dan Carpenter - -[ Upstream commit 9d4f491b860ea6d04471c3342093b86a46eee63e ] - -The if statement is reversed so it will not record the chip version. -This was detected using Smatch: - - drivers/net/wireless/realtek/rtw89/core.c:3593 rtw89_read_chip_ver() - error: uninitialized symbol 'val'. - -Fixes: a6fb2bb84654 ("wifi: rtw89: read version of analog hardware") -Signed-off-by: Dan Carpenter -Acked-by: Ping-Ke Shih -Signed-off-by: Kalle Valo -Link: https://lore.kernel.org/r/e4d912a2-37f8-4068-8861-7b9494ae731b@kili.mountain -Signed-off-by: Sasha Levin ---- - drivers/net/wireless/realtek/rtw89/core.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/drivers/net/wireless/realtek/rtw89/core.c b/drivers/net/wireless/realtek/rtw89/core.c -index bad864d56bd5c..5423f8ae187f1 100644 ---- a/drivers/net/wireless/realtek/rtw89/core.c -+++ b/drivers/net/wireless/realtek/rtw89/core.c -@@ -3584,7 +3584,7 @@ static void rtw89_read_chip_ver(struct rtw89_dev *rtwdev) - - if (chip->chip_id == RTL8852B || chip->chip_id == RTL8851B) { - ret = rtw89_mac_read_xtal_si(rtwdev, XTAL_SI_CV, &val); -- if (!ret) -+ if (ret) - return; - - rtwdev->hal.acv = u8_get_bits(val, XTAL_SI_ACV_MASK); --- -2.39.2 - diff --git a/queue-6.4/wifi-wilc1000-fix-for-absent-rsn-capabilities-wfa-te.patch b/queue-6.4/wifi-wilc1000-fix-for-absent-rsn-capabilities-wfa-te.patch deleted file mode 100644 index 0cdbce4d75e..00000000000 --- a/queue-6.4/wifi-wilc1000-fix-for-absent-rsn-capabilities-wfa-te.patch +++ /dev/null @@ -1,55 +0,0 @@ -From 855c5a52ef45f223455932db2408fd55df95bd74 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Fri, 21 Apr 2023 18:10:20 +0000 -Subject: wifi: wilc1000: fix for absent RSN capabilities WFA testcase - -From: Amisha Patel - -[ Upstream commit 9ce4bb09123e9754996e358bd808d39f5d112899 ] - -Mandatory WFA testcase -CT_Security_WPA2Personal_STA_RSNEBoundsVerification-AbsentRSNCap, -performs bounds verfication on Beacon and/or Probe response frames. It -failed and observed the reason to be absence of cipher suite and AKM -suite in RSN information. To fix this, enable the RSN flag before extracting RSN -capabilities. - -Fixes: cd21d99e595e ("wifi: wilc1000: validate pairwise and authentication suite offsets") -Signed-off-by: Amisha Patel -Signed-off-by: Kalle Valo -Link: https://lore.kernel.org/r/20230421181005.4865-1-amisha.patel@microchip.com -Signed-off-by: Sasha Levin ---- - drivers/net/wireless/microchip/wilc1000/hif.c | 8 ++++---- - 1 file changed, 4 insertions(+), 4 deletions(-) - -diff --git a/drivers/net/wireless/microchip/wilc1000/hif.c b/drivers/net/wireless/microchip/wilc1000/hif.c -index 5adc69d5bcae3..a28da59384813 100644 ---- a/drivers/net/wireless/microchip/wilc1000/hif.c -+++ b/drivers/net/wireless/microchip/wilc1000/hif.c -@@ -485,6 +485,9 @@ void *wilc_parse_join_bss_param(struct cfg80211_bss *bss, - int rsn_ie_len = sizeof(struct element) + rsn_ie[1]; - int offset = 8; - -+ param->mode_802_11i = 2; -+ param->rsn_found = true; -+ - /* extract RSN capabilities */ - if (offset < rsn_ie_len) { - /* skip over pairwise suites */ -@@ -494,11 +497,8 @@ void *wilc_parse_join_bss_param(struct cfg80211_bss *bss, - /* skip over authentication suites */ - offset += (rsn_ie[offset] * 4) + 2; - -- if (offset + 1 < rsn_ie_len) { -- param->mode_802_11i = 2; -- param->rsn_found = true; -+ if (offset + 1 < rsn_ie_len) - memcpy(param->rsn_cap, &rsn_ie[offset], 2); -- } - } - } - } --- -2.39.2 - diff --git a/queue-6.4/wifi-wl3501_cs-fix-an-error-handling-path-in-wl3501_.patch b/queue-6.4/wifi-wl3501_cs-fix-an-error-handling-path-in-wl3501_.patch deleted file mode 100644 index ed718841cb7..00000000000 --- a/queue-6.4/wifi-wl3501_cs-fix-an-error-handling-path-in-wl3501_.patch +++ /dev/null @@ -1,66 +0,0 @@ -From a1933cc4c526540821ee54e244a9b31afbb6c443 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Sat, 20 May 2023 10:05:08 +0200 -Subject: wifi: wl3501_cs: Fix an error handling path in wl3501_probe() - -From: Christophe JAILLET - -[ Upstream commit 391af06a02e7642039ac5f6c4b2c034ab0992b5d ] - -Should wl3501_config() fail, some resources need to be released as already -done in the remove function. - -Fixes: 15b99ac17295 ("[PATCH] pcmcia: add return value to _config() functions") -Signed-off-by: Christophe JAILLET -Reviewed-by: Simon Horman -Signed-off-by: Kalle Valo -Link: https://lore.kernel.org/r/7cc9c9316489b7d69b36aeb0edd3123538500b41.1684569865.git.christophe.jaillet@wanadoo.fr -Signed-off-by: Sasha Levin ---- - drivers/net/wireless/legacy/wl3501_cs.c | 16 +++++++++++----- - 1 file changed, 11 insertions(+), 5 deletions(-) - -diff --git a/drivers/net/wireless/legacy/wl3501_cs.c b/drivers/net/wireless/legacy/wl3501_cs.c -index 7fb2f95134760..c45c4b7cbbaf1 100644 ---- a/drivers/net/wireless/legacy/wl3501_cs.c -+++ b/drivers/net/wireless/legacy/wl3501_cs.c -@@ -1862,6 +1862,7 @@ static int wl3501_probe(struct pcmcia_device *p_dev) - { - struct net_device *dev; - struct wl3501_card *this; -+ int ret; - - /* The io structure describes IO port mapping */ - p_dev->resource[0]->end = 16; -@@ -1873,8 +1874,7 @@ static int wl3501_probe(struct pcmcia_device *p_dev) - - dev = alloc_etherdev(sizeof(struct wl3501_card)); - if (!dev) -- goto out_link; -- -+ return -ENOMEM; - - dev->netdev_ops = &wl3501_netdev_ops; - dev->watchdog_timeo = 5 * HZ; -@@ -1887,9 +1887,15 @@ static int wl3501_probe(struct pcmcia_device *p_dev) - netif_stop_queue(dev); - p_dev->priv = dev; - -- return wl3501_config(p_dev); --out_link: -- return -ENOMEM; -+ ret = wl3501_config(p_dev); -+ if (ret) -+ goto out_free_etherdev; -+ -+ return 0; -+ -+out_free_etherdev: -+ free_netdev(dev); -+ return ret; - } - - static int wl3501_config(struct pcmcia_device *link) --- -2.39.2 - diff --git a/queue-6.4/x86-efi-make-efi_set_virtual_address_map-ibt-safe.patch b/queue-6.4/x86-efi-make-efi_set_virtual_address_map-ibt-safe.patch deleted file mode 100644 index ceddade8e5b..00000000000 --- a/queue-6.4/x86-efi-make-efi_set_virtual_address_map-ibt-safe.patch +++ /dev/null @@ -1,65 +0,0 @@ -From 47cec453190f43849ade4cffa72bc6d30c09bd26 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Thu, 29 Jun 2023 21:35:19 +0200 -Subject: x86/efi: Make efi_set_virtual_address_map IBT safe -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -From: Thomas Gleixner - -[ Upstream commit 0303c9729afc4094ef53e552b7b8cff7436028d6 ] - -Niklāvs reported a boot regression on an Alderlake machine and bisected it -to commit 9df9d2f0471b ("init: Invoke arch_cpu_finalize_init() earlier"). - -By moving the invocation of arch_cpu_finalize_init() further down he -identified that efi_enter_virtual_mode() is the function which causes the -boot hang. - -The main difference of the earlier invocation is that the boot CPU is -already fully initialized and mitigations and alternatives are applied. - -But the only really interesting change turned out to be IBT, which is now -enabled before efi_enter_virtual_mode(). "ibt=off" on the kernel command -line cured the problem. - -Inspection of the involved calls in efi_enter_virtual_mode() unearthed that -efi_set_virtual_address_map() is the only place in the kernel which invokes -an EFI call without the IBT safe wrapper. This went obviously unnoticed so -far as IBT was enabled later. - -Use arch_efi_call_virt() instead of efi_call() to cure that. - -Fixes: fe379fa4d199 ("x86/ibt: Disable IBT around firmware") -Fixes: 9df9d2f0471b ("init: Invoke arch_cpu_finalize_init() earlier") -Reported-by: Niklāvs Koļesņikovs -Signed-off-by: Thomas Gleixner -Reviewed-by: Ard Biesheuvel -Link: https://bugzilla.kernel.org/show_bug.cgi?id=217602 -Link: https://lore.kernel.org/r/87jzvm12q0.ffs@tglx -Signed-off-by: Sasha Levin ---- - arch/x86/platform/efi/efi_64.c | 6 +++--- - 1 file changed, 3 insertions(+), 3 deletions(-) - -diff --git a/arch/x86/platform/efi/efi_64.c b/arch/x86/platform/efi/efi_64.c -index 232acf418cfbe..77f7ac3668cb4 100644 ---- a/arch/x86/platform/efi/efi_64.c -+++ b/arch/x86/platform/efi/efi_64.c -@@ -853,9 +853,9 @@ efi_set_virtual_address_map(unsigned long memory_map_size, - - /* Disable interrupts around EFI calls: */ - local_irq_save(flags); -- status = efi_call(efi.runtime->set_virtual_address_map, -- memory_map_size, descriptor_size, -- descriptor_version, virtual_map); -+ status = arch_efi_call_virt(efi.runtime, set_virtual_address_map, -+ memory_map_size, descriptor_size, -+ descriptor_version, virtual_map); - local_irq_restore(flags); - - efi_fpu_end(); --- -2.39.2 - diff --git a/queue-6.4/x86-hyperv-set-mtrr-state-when-running-as-sev-snp-hy.patch b/queue-6.4/x86-hyperv-set-mtrr-state-when-running-as-sev-snp-hy.patch deleted file mode 100644 index 07b023f0feb..00000000000 --- a/queue-6.4/x86-hyperv-set-mtrr-state-when-running-as-sev-snp-hy.patch +++ /dev/null @@ -1,51 +0,0 @@ -From cc68b87b85dd8f166deb638fa0c7efc477943bba Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Tue, 2 May 2023 14:09:19 +0200 -Subject: x86/hyperv: Set MTRR state when running as SEV-SNP Hyper-V guest - -From: Juergen Gross - -[ Upstream commit c957f1f3c498bcce85c04e92e60afbae1fd10cde ] - -In order to avoid mappings using the UC- cache attribute, set the -MTRR state to use WB caching as the default. - -This is needed in order to cope with the fact that PAT is enabled, -while MTRRs are not supported by the hypervisor. - -Fixes: 90b926e68f50 ("x86/pat: Fix pat_x_mtrr_type() for MTRR disabled case") -Signed-off-by: Juergen Gross -Signed-off-by: Borislav Petkov (AMD) -Tested-by: Michael Kelley -Link: https://lore.kernel.org/r/20230502120931.20719-5-jgross@suse.com -Signed-off-by: Borislav Petkov (AMD) -Signed-off-by: Sasha Levin ---- - arch/x86/hyperv/ivm.c | 4 ++++ - 1 file changed, 4 insertions(+) - -diff --git a/arch/x86/hyperv/ivm.c b/arch/x86/hyperv/ivm.c -index cc92388b7a999..6f7c1b5606ad4 100644 ---- a/arch/x86/hyperv/ivm.c -+++ b/arch/x86/hyperv/ivm.c -@@ -17,6 +17,7 @@ - #include - #include - #include -+#include - - #ifdef CONFIG_AMD_MEM_ENCRYPT - -@@ -372,6 +373,9 @@ void __init hv_vtom_init(void) - x86_platform.guest.enc_cache_flush_required = hv_vtom_cache_flush_required; - x86_platform.guest.enc_tlb_flush_required = hv_vtom_tlb_flush_required; - x86_platform.guest.enc_status_change_finish = hv_vtom_set_host_visibility; -+ -+ /* Set WB as the default cache mode. */ -+ mtrr_overwrite_state(NULL, 0, MTRR_TYPE_WRBACK); - } - - #endif /* CONFIG_AMD_MEM_ENCRYPT */ --- -2.39.2 - diff --git a/queue-6.4/x86-mm-allow-guest.enc_status_change_prepare-to-fail.patch b/queue-6.4/x86-mm-allow-guest.enc_status_change_prepare-to-fail.patch deleted file mode 100644 index f80dd4750ab..00000000000 --- a/queue-6.4/x86-mm-allow-guest.enc_status_change_prepare-to-fail.patch +++ /dev/null @@ -1,93 +0,0 @@ -From cfafdf137a3442e8b89266d37a0b4d04b9a8d1a2 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Tue, 6 Jun 2023 12:56:20 +0300 -Subject: x86/mm: Allow guest.enc_status_change_prepare() to fail - -From: Kirill A. Shutemov - -[ Upstream commit 3f6819dd192ef4f0c568ec3e9d6d408b3fa1ad3d ] - -TDX code is going to provide guest.enc_status_change_prepare() that is -able to fail. TDX will use the call to convert the GPA range from shared -to private. This operation can fail. - -Add a way to return an error from the callback. - -Signed-off-by: Kirill A. Shutemov -Signed-off-by: Dave Hansen -Reviewed-by: Kuppuswamy Sathyanarayanan -Link: https://lore.kernel.org/all/20230606095622.1939-2-kirill.shutemov%40linux.intel.com -Stable-dep-of: 195edce08b63 ("x86/tdx: Fix race between set_memory_encrypted() and load_unaligned_zeropad()") -Signed-off-by: Sasha Levin ---- - arch/x86/include/asm/x86_init.h | 2 +- - arch/x86/kernel/x86_init.c | 2 +- - arch/x86/mm/mem_encrypt_amd.c | 4 +++- - arch/x86/mm/pat/set_memory.c | 3 ++- - 4 files changed, 7 insertions(+), 4 deletions(-) - -diff --git a/arch/x86/include/asm/x86_init.h b/arch/x86/include/asm/x86_init.h -index 88085f369ff6f..1ca9701917c55 100644 ---- a/arch/x86/include/asm/x86_init.h -+++ b/arch/x86/include/asm/x86_init.h -@@ -150,7 +150,7 @@ struct x86_init_acpi { - * @enc_cache_flush_required Returns true if a cache flush is needed before changing page encryption status - */ - struct x86_guest { -- void (*enc_status_change_prepare)(unsigned long vaddr, int npages, bool enc); -+ bool (*enc_status_change_prepare)(unsigned long vaddr, int npages, bool enc); - bool (*enc_status_change_finish)(unsigned long vaddr, int npages, bool enc); - bool (*enc_tlb_flush_required)(bool enc); - bool (*enc_cache_flush_required)(void); -diff --git a/arch/x86/kernel/x86_init.c b/arch/x86/kernel/x86_init.c -index d82f4fa2f1bfe..f230d4d7d8eb4 100644 ---- a/arch/x86/kernel/x86_init.c -+++ b/arch/x86/kernel/x86_init.c -@@ -130,7 +130,7 @@ struct x86_cpuinit_ops x86_cpuinit = { - - static void default_nmi_init(void) { }; - --static void enc_status_change_prepare_noop(unsigned long vaddr, int npages, bool enc) { } -+static bool enc_status_change_prepare_noop(unsigned long vaddr, int npages, bool enc) { return true; } - static bool enc_status_change_finish_noop(unsigned long vaddr, int npages, bool enc) { return false; } - static bool enc_tlb_flush_required_noop(bool enc) { return false; } - static bool enc_cache_flush_required_noop(void) { return false; } -diff --git a/arch/x86/mm/mem_encrypt_amd.c b/arch/x86/mm/mem_encrypt_amd.c -index e0b51c09109f6..4f95c449a406e 100644 ---- a/arch/x86/mm/mem_encrypt_amd.c -+++ b/arch/x86/mm/mem_encrypt_amd.c -@@ -319,7 +319,7 @@ static void enc_dec_hypercall(unsigned long vaddr, int npages, bool enc) - #endif - } - --static void amd_enc_status_change_prepare(unsigned long vaddr, int npages, bool enc) -+static bool amd_enc_status_change_prepare(unsigned long vaddr, int npages, bool enc) - { - /* - * To maintain the security guarantees of SEV-SNP guests, make sure -@@ -327,6 +327,8 @@ static void amd_enc_status_change_prepare(unsigned long vaddr, int npages, bool - */ - if (cc_platform_has(CC_ATTR_GUEST_SEV_SNP) && !enc) - snp_set_memory_shared(vaddr, npages); -+ -+ return true; - } - - /* Return true unconditionally: return value doesn't matter for the SEV side */ -diff --git a/arch/x86/mm/pat/set_memory.c b/arch/x86/mm/pat/set_memory.c -index 7159cf7876130..b8f48ebe753c7 100644 ---- a/arch/x86/mm/pat/set_memory.c -+++ b/arch/x86/mm/pat/set_memory.c -@@ -2151,7 +2151,8 @@ static int __set_memory_enc_pgtable(unsigned long addr, int numpages, bool enc) - cpa_flush(&cpa, x86_platform.guest.enc_cache_flush_required()); - - /* Notify hypervisor that we are about to set/clr encryption attribute. */ -- x86_platform.guest.enc_status_change_prepare(addr, numpages, enc); -+ if (!x86_platform.guest.enc_status_change_prepare(addr, numpages, enc)) -+ return -EIO; - - ret = __change_page_attr_set_clr(&cpa, 1); - --- -2.39.2 - diff --git a/queue-6.4/x86-mm-fix-__swp_entry_to_pte-for-xen-pv-guests.patch b/queue-6.4/x86-mm-fix-__swp_entry_to_pte-for-xen-pv-guests.patch deleted file mode 100644 index ca61677597b..00000000000 --- a/queue-6.4/x86-mm-fix-__swp_entry_to_pte-for-xen-pv-guests.patch +++ /dev/null @@ -1,47 +0,0 @@ -From 886ad36bb384026e58889acb84a9cacd201e34a8 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Mon, 6 Mar 2023 13:32:59 +0100 -Subject: x86/mm: Fix __swp_entry_to_pte() for Xen PV guests - -From: Juergen Gross - -[ Upstream commit 0f88130e8a6fd185b0aeb5d8e286083735f2585a ] - -Normally __swp_entry_to_pte() is never called with a value translating -to a valid PTE. The only known exception is pte_swap_tests(), resulting -in a WARN splat in Xen PV guests, as __pte_to_swp_entry() did -translate the PFN of the valid PTE to a guest local PFN, while -__swp_entry_to_pte() doesn't do the opposite translation. - -Fix that by using __pte() in __swp_entry_to_pte() instead of open -coding the native variant of it. - -For correctness do the similar conversion for __swp_entry_to_pmd(). - -Fixes: 05289402d717 ("mm/debug_vm_pgtable: add tests validating arch helpers for core MM features") -Signed-off-by: Juergen Gross -Signed-off-by: Borislav Petkov (AMD) -Link: https://lore.kernel.org/r/20230306123259.12461-1-jgross@suse.com -Signed-off-by: Sasha Levin ---- - arch/x86/include/asm/pgtable_64.h | 4 ++-- - 1 file changed, 2 insertions(+), 2 deletions(-) - -diff --git a/arch/x86/include/asm/pgtable_64.h b/arch/x86/include/asm/pgtable_64.h -index 7929327abe009..a629b1b9f65a6 100644 ---- a/arch/x86/include/asm/pgtable_64.h -+++ b/arch/x86/include/asm/pgtable_64.h -@@ -237,8 +237,8 @@ static inline void native_pgd_clear(pgd_t *pgd) - - #define __pte_to_swp_entry(pte) ((swp_entry_t) { pte_val((pte)) }) - #define __pmd_to_swp_entry(pmd) ((swp_entry_t) { pmd_val((pmd)) }) --#define __swp_entry_to_pte(x) ((pte_t) { .pte = (x).val }) --#define __swp_entry_to_pmd(x) ((pmd_t) { .pmd = (x).val }) -+#define __swp_entry_to_pte(x) (__pte((x).val)) -+#define __swp_entry_to_pmd(x) (__pmd((x).val)) - - extern void cleanup_highmap(void); - --- -2.39.2 - diff --git a/queue-6.4/x86-mtrr-remove-physical-address-size-calculation.patch b/queue-6.4/x86-mtrr-remove-physical-address-size-calculation.patch deleted file mode 100644 index 96cfa3a260e..00000000000 --- a/queue-6.4/x86-mtrr-remove-physical-address-size-calculation.patch +++ /dev/null @@ -1,279 +0,0 @@ -From 9c7056a153bb6a0436d8b318597926a1967fbcdc Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Tue, 2 May 2023 14:09:16 +0200 -Subject: x86/mtrr: Remove physical address size calculation - -From: Juergen Gross - -[ Upstream commit f6b980646b93a8c585b4ed991b8a34e8fc6ef847 ] - -The physical address width calculation in mtrr_bp_init() can easily be -replaced with using the already available value x86_phys_bits from -struct cpuinfo_x86. - -The same information source can be used in mtrr/cleanup.c, removing the -need to pass that value on to mtrr_cleanup(). - -In print_mtrr_state() use x86_phys_bits instead of recalculating it -from size_or_mask. - -Move setting of size_or_mask and size_and_mask into a dedicated new -function in mtrr/generic.c, enabling to make those 2 variables static, -as they are used in generic.c only now. - -Signed-off-by: Juergen Gross -Signed-off-by: Borislav Petkov (AMD) -Tested-by: Michael Kelley -Link: https://lore.kernel.org/r/20230502120931.20719-2-jgross@suse.com -Signed-off-by: Borislav Petkov (AMD) -Stable-dep-of: c957f1f3c498 ("x86/hyperv: Set MTRR state when running as SEV-SNP Hyper-V guest") -Signed-off-by: Sasha Levin ---- - arch/x86/kernel/cpu/mtrr/cleanup.c | 16 ++++---- - arch/x86/kernel/cpu/mtrr/generic.c | 12 +++++- - arch/x86/kernel/cpu/mtrr/mtrr.c | 61 ++++-------------------------- - arch/x86/kernel/cpu/mtrr/mtrr.h | 4 +- - 4 files changed, 29 insertions(+), 64 deletions(-) - -diff --git a/arch/x86/kernel/cpu/mtrr/cleanup.c b/arch/x86/kernel/cpu/mtrr/cleanup.c -index b5f43049fa5f7..70314093bb9b5 100644 ---- a/arch/x86/kernel/cpu/mtrr/cleanup.c -+++ b/arch/x86/kernel/cpu/mtrr/cleanup.c -@@ -173,7 +173,7 @@ early_param("mtrr_cleanup_debug", mtrr_cleanup_debug_setup); - - static void __init - set_var_mtrr(unsigned int reg, unsigned long basek, unsigned long sizek, -- unsigned char type, unsigned int address_bits) -+ unsigned char type) - { - u32 base_lo, base_hi, mask_lo, mask_hi; - u64 base, mask; -@@ -183,7 +183,7 @@ set_var_mtrr(unsigned int reg, unsigned long basek, unsigned long sizek, - return; - } - -- mask = (1ULL << address_bits) - 1; -+ mask = (1ULL << boot_cpu_data.x86_phys_bits) - 1; - mask &= ~((((u64)sizek) << 10) - 1); - - base = ((u64)basek) << 10; -@@ -209,7 +209,7 @@ save_var_mtrr(unsigned int reg, unsigned long basek, unsigned long sizek, - range_state[reg].type = type; - } - --static void __init set_var_mtrr_all(unsigned int address_bits) -+static void __init set_var_mtrr_all(void) - { - unsigned long basek, sizek; - unsigned char type; -@@ -220,7 +220,7 @@ static void __init set_var_mtrr_all(unsigned int address_bits) - sizek = range_state[reg].size_pfn << (PAGE_SHIFT - 10); - type = range_state[reg].type; - -- set_var_mtrr(reg, basek, sizek, type, address_bits); -+ set_var_mtrr(reg, basek, sizek, type); - } - } - -@@ -680,7 +680,7 @@ static int __init mtrr_search_optimal_index(void) - return index_good; - } - --int __init mtrr_cleanup(unsigned address_bits) -+int __init mtrr_cleanup(void) - { - unsigned long x_remove_base, x_remove_size; - unsigned long base, size, def, dummy; -@@ -742,7 +742,7 @@ int __init mtrr_cleanup(unsigned address_bits) - mtrr_print_out_one_result(i); - - if (!result[i].bad) { -- set_var_mtrr_all(address_bits); -+ set_var_mtrr_all(); - pr_debug("New variable MTRRs\n"); - print_out_mtrr_range_state(); - return 1; -@@ -786,7 +786,7 @@ int __init mtrr_cleanup(unsigned address_bits) - gran_size = result[i].gran_sizek; - gran_size <<= 10; - x86_setup_var_mtrrs(range, nr_range, chunk_size, gran_size); -- set_var_mtrr_all(address_bits); -+ set_var_mtrr_all(); - pr_debug("New variable MTRRs\n"); - print_out_mtrr_range_state(); - return 1; -@@ -802,7 +802,7 @@ int __init mtrr_cleanup(unsigned address_bits) - return 0; - } - #else --int __init mtrr_cleanup(unsigned address_bits) -+int __init mtrr_cleanup(void) - { - return 0; - } -diff --git a/arch/x86/kernel/cpu/mtrr/generic.c b/arch/x86/kernel/cpu/mtrr/generic.c -index ee09d359e08f0..3922552340b13 100644 ---- a/arch/x86/kernel/cpu/mtrr/generic.c -+++ b/arch/x86/kernel/cpu/mtrr/generic.c -@@ -38,6 +38,16 @@ u64 mtrr_tom2; - struct mtrr_state_type mtrr_state; - EXPORT_SYMBOL_GPL(mtrr_state); - -+static u64 size_or_mask, size_and_mask; -+ -+void __init mtrr_set_mask(void) -+{ -+ unsigned int phys_addr = boot_cpu_data.x86_phys_bits; -+ -+ size_or_mask = ~GENMASK_ULL(phys_addr - PAGE_SHIFT - 1, 0); -+ size_and_mask = ~size_or_mask & GENMASK_ULL(39, 20); -+} -+ - /* - * BIOS is expected to clear MtrrFixDramModEn bit, see for example - * "BIOS and Kernel Developer's Guide for the AMD Athlon 64 and AMD -@@ -422,7 +432,7 @@ static void __init print_mtrr_state(void) - } - pr_debug("MTRR variable ranges %sabled:\n", - mtrr_state.enabled & MTRR_STATE_MTRR_ENABLED ? "en" : "dis"); -- high_width = (__ffs64(size_or_mask) - (32 - PAGE_SHIFT) + 3) / 4; -+ high_width = (boot_cpu_data.x86_phys_bits - (32 - PAGE_SHIFT) + 3) / 4; - - for (i = 0; i < num_var_ranges; ++i) { - if (mtrr_state.var_ranges[i].mask_lo & (1 << 11)) -diff --git a/arch/x86/kernel/cpu/mtrr/mtrr.c b/arch/x86/kernel/cpu/mtrr/mtrr.c -index 783f3210d5827..1bdab16f16bdc 100644 ---- a/arch/x86/kernel/cpu/mtrr/mtrr.c -+++ b/arch/x86/kernel/cpu/mtrr/mtrr.c -@@ -67,8 +67,6 @@ static bool mtrr_enabled(void) - unsigned int mtrr_usage_table[MTRR_MAX_VAR_RANGES]; - static DEFINE_MUTEX(mtrr_mutex); - --u64 size_or_mask, size_and_mask; -- - const struct mtrr_ops *mtrr_if; - - /* Returns non-zero if we have the write-combining memory type */ -@@ -619,77 +617,34 @@ static struct syscore_ops mtrr_syscore_ops = { - - int __initdata changed_by_mtrr_cleanup; - --#define SIZE_OR_MASK_BITS(n) (~((1ULL << ((n) - PAGE_SHIFT)) - 1)) - /** -- * mtrr_bp_init - initialize mtrrs on the boot CPU -+ * mtrr_bp_init - initialize MTRRs on the boot CPU - * - * This needs to be called early; before any of the other CPUs are - * initialized (i.e. before smp_init()). -- * - */ - void __init mtrr_bp_init(void) - { - const char *why = "(not available)"; -- u32 phys_addr; - -- phys_addr = 32; -+ mtrr_set_mask(); - -- if (boot_cpu_has(X86_FEATURE_MTRR)) { -+ if (cpu_feature_enabled(X86_FEATURE_MTRR)) { - mtrr_if = &generic_mtrr_ops; -- size_or_mask = SIZE_OR_MASK_BITS(36); -- size_and_mask = 0x00f00000; -- phys_addr = 36; -- -- /* -- * This is an AMD specific MSR, but we assume(hope?) that -- * Intel will implement it too when they extend the address -- * bus of the Xeon. -- */ -- if (cpuid_eax(0x80000000) >= 0x80000008) { -- phys_addr = cpuid_eax(0x80000008) & 0xff; -- /* CPUID workaround for Intel 0F33/0F34 CPU */ -- if (boot_cpu_data.x86_vendor == X86_VENDOR_INTEL && -- boot_cpu_data.x86 == 0xF && -- boot_cpu_data.x86_model == 0x3 && -- (boot_cpu_data.x86_stepping == 0x3 || -- boot_cpu_data.x86_stepping == 0x4)) -- phys_addr = 36; -- -- size_or_mask = SIZE_OR_MASK_BITS(phys_addr); -- size_and_mask = ~size_or_mask & 0xfffff00000ULL; -- } else if (boot_cpu_data.x86_vendor == X86_VENDOR_CENTAUR && -- boot_cpu_data.x86 == 6) { -- /* -- * VIA C* family have Intel style MTRRs, -- * but don't support PAE -- */ -- size_or_mask = SIZE_OR_MASK_BITS(32); -- size_and_mask = 0; -- phys_addr = 32; -- } - } else { - switch (boot_cpu_data.x86_vendor) { - case X86_VENDOR_AMD: -- if (cpu_feature_enabled(X86_FEATURE_K6_MTRR)) { -- /* Pre-Athlon (K6) AMD CPU MTRRs */ -+ /* Pre-Athlon (K6) AMD CPU MTRRs */ -+ if (cpu_feature_enabled(X86_FEATURE_K6_MTRR)) - mtrr_if = &amd_mtrr_ops; -- size_or_mask = SIZE_OR_MASK_BITS(32); -- size_and_mask = 0; -- } - break; - case X86_VENDOR_CENTAUR: -- if (cpu_feature_enabled(X86_FEATURE_CENTAUR_MCR)) { -+ if (cpu_feature_enabled(X86_FEATURE_CENTAUR_MCR)) - mtrr_if = ¢aur_mtrr_ops; -- size_or_mask = SIZE_OR_MASK_BITS(32); -- size_and_mask = 0; -- } - break; - case X86_VENDOR_CYRIX: -- if (cpu_feature_enabled(X86_FEATURE_CYRIX_ARR)) { -+ if (cpu_feature_enabled(X86_FEATURE_CYRIX_ARR)) - mtrr_if = &cyrix_mtrr_ops; -- size_or_mask = SIZE_OR_MASK_BITS(32); -- size_and_mask = 0; -- } - break; - default: - break; -@@ -703,7 +658,7 @@ void __init mtrr_bp_init(void) - /* BIOS may override */ - if (get_mtrr_state()) { - memory_caching_control |= CACHE_MTRR; -- changed_by_mtrr_cleanup = mtrr_cleanup(phys_addr); -+ changed_by_mtrr_cleanup = mtrr_cleanup(); - } else { - mtrr_if = NULL; - why = "by BIOS"; -diff --git a/arch/x86/kernel/cpu/mtrr/mtrr.h b/arch/x86/kernel/cpu/mtrr/mtrr.h -index 02eb5871492d0..a00987e6cc1c1 100644 ---- a/arch/x86/kernel/cpu/mtrr/mtrr.h -+++ b/arch/x86/kernel/cpu/mtrr/mtrr.h -@@ -51,7 +51,6 @@ void fill_mtrr_var_range(unsigned int index, - u32 base_lo, u32 base_hi, u32 mask_lo, u32 mask_hi); - bool get_mtrr_state(void); - --extern u64 size_or_mask, size_and_mask; - extern const struct mtrr_ops *mtrr_if; - - #define is_cpu(vnd) (mtrr_if && mtrr_if->vendor == X86_VENDOR_##vnd) -@@ -60,6 +59,7 @@ extern unsigned int num_var_ranges; - extern u64 mtrr_tom2; - extern struct mtrr_state_type mtrr_state; - -+void mtrr_set_mask(void); - void mtrr_state_warn(void); - const char *mtrr_attrib_to_str(int x); - void mtrr_wrmsr(unsigned, unsigned, unsigned); -@@ -70,4 +70,4 @@ extern const struct mtrr_ops cyrix_mtrr_ops; - extern const struct mtrr_ops centaur_mtrr_ops; - - extern int changed_by_mtrr_cleanup; --extern int mtrr_cleanup(unsigned address_bits); -+extern int mtrr_cleanup(void); --- -2.39.2 - diff --git a/queue-6.4/x86-mtrr-replace-size_or_mask-and-size_and_mask-with.patch b/queue-6.4/x86-mtrr-replace-size_or_mask-and-size_and_mask-with.patch deleted file mode 100644 index 07facbd41b5..00000000000 --- a/queue-6.4/x86-mtrr-replace-size_or_mask-and-size_and_mask-with.patch +++ /dev/null @@ -1,360 +0,0 @@ -From 2b57641bf13d6ffdbdb771be98eb6e9acf40bf54 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Tue, 2 May 2023 14:09:17 +0200 -Subject: x86/mtrr: Replace size_or_mask and size_and_mask with a much easier - concept -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -From: Juergen Gross - -[ Upstream commit d053b481a5f16dbd4f020c6b3ebdf9173fdef0e2 ] - -Replace size_or_mask and size_and_mask with the much easier concept of -high reserved bits. - -While at it, instead of using constants in the MTRR code, use some new - - [ bp: - - Drop mtrr_set_mask() - - Unbreak long lines - - Move struct mtrr_state_type out of the uapi header as it doesn't - belong there. It also fixes a HDRTEST breakage "unknown type name ‘bool’" - as Reported-by: kernel test robot - - Massage. - ] - -Signed-off-by: Juergen Gross -Signed-off-by: Borislav Petkov (AMD) -Link: https://lore.kernel.org/r/20230502120931.20719-3-jgross@suse.com -Signed-off-by: Borislav Petkov (AMD) -Stable-dep-of: a153f254e5cd ("x86/xen: Set MTRR state when running as Xen PV initial domain") -Signed-off-by: Sasha Levin ---- - arch/x86/include/asm/mtrr.h | 32 +++++++++++++- - arch/x86/include/uapi/asm/mtrr.h | 8 ---- - arch/x86/kernel/cpu/mtrr/cleanup.c | 2 +- - arch/x86/kernel/cpu/mtrr/generic.c | 70 +++++++++++++----------------- - arch/x86/kernel/cpu/mtrr/mtrr.c | 4 +- - arch/x86/kernel/cpu/mtrr/mtrr.h | 2 +- - 6 files changed, 65 insertions(+), 53 deletions(-) - -diff --git a/arch/x86/include/asm/mtrr.h b/arch/x86/include/asm/mtrr.h -index f1cb81330a645..1bae790a553a5 100644 ---- a/arch/x86/include/asm/mtrr.h -+++ b/arch/x86/include/asm/mtrr.h -@@ -23,8 +23,35 @@ - #ifndef _ASM_X86_MTRR_H - #define _ASM_X86_MTRR_H - -+#include - #include - -+/* Defines for hardware MTRR registers. */ -+#define MTRR_CAP_VCNT GENMASK(7, 0) -+#define MTRR_CAP_FIX BIT_MASK(8) -+#define MTRR_CAP_WC BIT_MASK(10) -+ -+#define MTRR_DEF_TYPE_TYPE GENMASK(7, 0) -+#define MTRR_DEF_TYPE_FE BIT_MASK(10) -+#define MTRR_DEF_TYPE_E BIT_MASK(11) -+ -+#define MTRR_DEF_TYPE_ENABLE (MTRR_DEF_TYPE_FE | MTRR_DEF_TYPE_E) -+#define MTRR_DEF_TYPE_DISABLE ~(MTRR_DEF_TYPE_TYPE | MTRR_DEF_TYPE_ENABLE) -+ -+#define MTRR_PHYSBASE_TYPE GENMASK(7, 0) -+#define MTRR_PHYSBASE_RSVD GENMASK(11, 8) -+ -+#define MTRR_PHYSMASK_RSVD GENMASK(10, 0) -+#define MTRR_PHYSMASK_V BIT_MASK(11) -+ -+struct mtrr_state_type { -+ struct mtrr_var_range var_ranges[MTRR_MAX_VAR_RANGES]; -+ mtrr_type fixed_ranges[MTRR_NUM_FIXED_RANGES]; -+ unsigned char enabled; -+ bool have_fixed; -+ mtrr_type def_type; -+}; -+ - /* - * The following functions are for use by other drivers that cannot use - * arch_phys_wc_add and arch_phys_wc_del. -@@ -129,7 +156,8 @@ struct mtrr_gentry32 { - #endif /* CONFIG_COMPAT */ - - /* Bit fields for enabled in struct mtrr_state_type */ --#define MTRR_STATE_MTRR_FIXED_ENABLED 0x01 --#define MTRR_STATE_MTRR_ENABLED 0x02 -+#define MTRR_STATE_SHIFT 10 -+#define MTRR_STATE_MTRR_FIXED_ENABLED (MTRR_DEF_TYPE_FE >> MTRR_STATE_SHIFT) -+#define MTRR_STATE_MTRR_ENABLED (MTRR_DEF_TYPE_E >> MTRR_STATE_SHIFT) - - #endif /* _ASM_X86_MTRR_H */ -diff --git a/arch/x86/include/uapi/asm/mtrr.h b/arch/x86/include/uapi/asm/mtrr.h -index 376563f2bac1f..ab194c8316259 100644 ---- a/arch/x86/include/uapi/asm/mtrr.h -+++ b/arch/x86/include/uapi/asm/mtrr.h -@@ -81,14 +81,6 @@ typedef __u8 mtrr_type; - #define MTRR_NUM_FIXED_RANGES 88 - #define MTRR_MAX_VAR_RANGES 256 - --struct mtrr_state_type { -- struct mtrr_var_range var_ranges[MTRR_MAX_VAR_RANGES]; -- mtrr_type fixed_ranges[MTRR_NUM_FIXED_RANGES]; -- unsigned char enabled; -- unsigned char have_fixed; -- mtrr_type def_type; --}; -- - #define MTRRphysBase_MSR(reg) (0x200 + 2 * (reg)) - #define MTRRphysMask_MSR(reg) (0x200 + 2 * (reg) + 1) - -diff --git a/arch/x86/kernel/cpu/mtrr/cleanup.c b/arch/x86/kernel/cpu/mtrr/cleanup.c -index 70314093bb9b5..ca2d567e729e2 100644 ---- a/arch/x86/kernel/cpu/mtrr/cleanup.c -+++ b/arch/x86/kernel/cpu/mtrr/cleanup.c -@@ -890,7 +890,7 @@ int __init mtrr_trim_uncached_memory(unsigned long end_pfn) - return 0; - - rdmsr(MSR_MTRRdefType, def, dummy); -- def &= 0xff; -+ def &= MTRR_DEF_TYPE_TYPE; - if (def != MTRR_TYPE_UNCACHABLE) - return 0; - -diff --git a/arch/x86/kernel/cpu/mtrr/generic.c b/arch/x86/kernel/cpu/mtrr/generic.c -index fd77c5da4a7a6..e81d832475a1f 100644 ---- a/arch/x86/kernel/cpu/mtrr/generic.c -+++ b/arch/x86/kernel/cpu/mtrr/generic.c -@@ -40,15 +40,8 @@ u64 mtrr_tom2; - struct mtrr_state_type mtrr_state; - EXPORT_SYMBOL_GPL(mtrr_state); - --static u64 size_or_mask, size_and_mask; -- --void __init mtrr_set_mask(void) --{ -- unsigned int phys_addr = boot_cpu_data.x86_phys_bits; -- -- size_or_mask = ~GENMASK_ULL(phys_addr - PAGE_SHIFT - 1, 0); -- size_and_mask = ~size_or_mask & GENMASK_ULL(39, 20); --} -+/* Reserved bits in the high portion of the MTRRphysBaseN MSR. */ -+u32 phys_hi_rsvd; - - /* - * BIOS is expected to clear MtrrFixDramModEn bit, see for example -@@ -81,10 +74,9 @@ static u64 get_mtrr_size(u64 mask) - { - u64 size; - -- mask >>= PAGE_SHIFT; -- mask |= size_or_mask; -+ mask |= (u64)phys_hi_rsvd << 32; - size = -mask; -- size <<= PAGE_SHIFT; -+ - return size; - } - -@@ -183,7 +175,7 @@ static u8 mtrr_type_lookup_variable(u64 start, u64 end, u64 *partial_end, - for (i = 0; i < num_var_ranges; ++i) { - unsigned short start_state, end_state, inclusive; - -- if (!(mtrr_state.var_ranges[i].mask_lo & (1 << 11))) -+ if (!(mtrr_state.var_ranges[i].mask_lo & MTRR_PHYSMASK_V)) - continue; - - base = (((u64)mtrr_state.var_ranges[i].base_hi) << 32) + -@@ -235,7 +227,7 @@ static u8 mtrr_type_lookup_variable(u64 start, u64 end, u64 *partial_end, - if ((start & mask) != (base & mask)) - continue; - -- curr_match = mtrr_state.var_ranges[i].base_lo & 0xff; -+ curr_match = mtrr_state.var_ranges[i].base_lo & MTRR_PHYSBASE_TYPE; - if (prev_match == MTRR_TYPE_INVALID) { - prev_match = curr_match; - continue; -@@ -493,7 +485,7 @@ static void __init print_mtrr_state(void) - high_width = (boot_cpu_data.x86_phys_bits - (32 - PAGE_SHIFT) + 3) / 4; - - for (i = 0; i < num_var_ranges; ++i) { -- if (mtrr_state.var_ranges[i].mask_lo & (1 << 11)) -+ if (mtrr_state.var_ranges[i].mask_lo & MTRR_PHYSMASK_V) - pr_debug(" %u base %0*X%05X000 mask %0*X%05X000 %s\n", - i, - high_width, -@@ -502,7 +494,8 @@ static void __init print_mtrr_state(void) - high_width, - mtrr_state.var_ranges[i].mask_hi, - mtrr_state.var_ranges[i].mask_lo >> 12, -- mtrr_attrib_to_str(mtrr_state.var_ranges[i].base_lo & 0xff)); -+ mtrr_attrib_to_str(mtrr_state.var_ranges[i].base_lo & -+ MTRR_PHYSBASE_TYPE)); - else - pr_debug(" %u disabled\n", i); - } -@@ -520,7 +513,7 @@ bool __init get_mtrr_state(void) - vrs = mtrr_state.var_ranges; - - rdmsr(MSR_MTRRcap, lo, dummy); -- mtrr_state.have_fixed = (lo >> 8) & 1; -+ mtrr_state.have_fixed = lo & MTRR_CAP_FIX; - - for (i = 0; i < num_var_ranges; i++) - get_mtrr_var_range(i, &vrs[i]); -@@ -528,8 +521,8 @@ bool __init get_mtrr_state(void) - get_fixed_ranges(mtrr_state.fixed_ranges); - - rdmsr(MSR_MTRRdefType, lo, dummy); -- mtrr_state.def_type = (lo & 0xff); -- mtrr_state.enabled = (lo & 0xc00) >> 10; -+ mtrr_state.def_type = lo & MTRR_DEF_TYPE_TYPE; -+ mtrr_state.enabled = (lo & MTRR_DEF_TYPE_ENABLE) >> MTRR_STATE_SHIFT; - - if (amd_special_default_mtrr()) { - unsigned low, high; -@@ -642,7 +635,7 @@ static void generic_get_mtrr(unsigned int reg, unsigned long *base, - - rdmsr(MTRRphysMask_MSR(reg), mask_lo, mask_hi); - -- if ((mask_lo & 0x800) == 0) { -+ if (!(mask_lo & MTRR_PHYSMASK_V)) { - /* Invalid (i.e. free) range */ - *base = 0; - *size = 0; -@@ -653,8 +646,8 @@ static void generic_get_mtrr(unsigned int reg, unsigned long *base, - rdmsr(MTRRphysBase_MSR(reg), base_lo, base_hi); - - /* Work out the shifted address mask: */ -- tmp = (u64)mask_hi << (32 - PAGE_SHIFT) | mask_lo >> PAGE_SHIFT; -- mask = size_or_mask | tmp; -+ tmp = (u64)mask_hi << 32 | (mask_lo & PAGE_MASK); -+ mask = (u64)phys_hi_rsvd << 32 | tmp; - - /* Expand tmp with high bits to all 1s: */ - hi = fls64(tmp); -@@ -672,9 +665,9 @@ static void generic_get_mtrr(unsigned int reg, unsigned long *base, - * This works correctly if size is a power of two, i.e. a - * contiguous range: - */ -- *size = -mask; -+ *size = -mask >> PAGE_SHIFT; - *base = (u64)base_hi << (32 - PAGE_SHIFT) | base_lo >> PAGE_SHIFT; -- *type = base_lo & 0xff; -+ *type = base_lo & MTRR_PHYSBASE_TYPE; - - out_put_cpu: - put_cpu(); -@@ -712,9 +705,8 @@ static bool set_mtrr_var_ranges(unsigned int index, struct mtrr_var_range *vr) - bool changed = false; - - rdmsr(MTRRphysBase_MSR(index), lo, hi); -- if ((vr->base_lo & 0xfffff0ffUL) != (lo & 0xfffff0ffUL) -- || (vr->base_hi & (size_and_mask >> (32 - PAGE_SHIFT))) != -- (hi & (size_and_mask >> (32 - PAGE_SHIFT)))) { -+ if ((vr->base_lo & ~MTRR_PHYSBASE_RSVD) != (lo & ~MTRR_PHYSBASE_RSVD) -+ || (vr->base_hi & ~phys_hi_rsvd) != (hi & ~phys_hi_rsvd)) { - - mtrr_wrmsr(MTRRphysBase_MSR(index), vr->base_lo, vr->base_hi); - changed = true; -@@ -722,9 +714,8 @@ static bool set_mtrr_var_ranges(unsigned int index, struct mtrr_var_range *vr) - - rdmsr(MTRRphysMask_MSR(index), lo, hi); - -- if ((vr->mask_lo & 0xfffff800UL) != (lo & 0xfffff800UL) -- || (vr->mask_hi & (size_and_mask >> (32 - PAGE_SHIFT))) != -- (hi & (size_and_mask >> (32 - PAGE_SHIFT)))) { -+ if ((vr->mask_lo & ~MTRR_PHYSMASK_RSVD) != (lo & ~MTRR_PHYSMASK_RSVD) -+ || (vr->mask_hi & ~phys_hi_rsvd) != (hi & ~phys_hi_rsvd)) { - mtrr_wrmsr(MTRRphysMask_MSR(index), vr->mask_lo, vr->mask_hi); - changed = true; - } -@@ -759,11 +750,12 @@ static unsigned long set_mtrr_state(void) - * Set_mtrr_restore restores the old value of MTRRdefType, - * so to set it we fiddle with the saved value: - */ -- if ((deftype_lo & 0xff) != mtrr_state.def_type -- || ((deftype_lo & 0xc00) >> 10) != mtrr_state.enabled) { -+ if ((deftype_lo & MTRR_DEF_TYPE_TYPE) != mtrr_state.def_type || -+ ((deftype_lo & MTRR_DEF_TYPE_ENABLE) >> MTRR_STATE_SHIFT) != mtrr_state.enabled) { - -- deftype_lo = (deftype_lo & ~0xcff) | mtrr_state.def_type | -- (mtrr_state.enabled << 10); -+ deftype_lo = (deftype_lo & MTRR_DEF_TYPE_DISABLE) | -+ mtrr_state.def_type | -+ (mtrr_state.enabled << MTRR_STATE_SHIFT); - change_mask |= MTRR_CHANGE_MASK_DEFTYPE; - } - -@@ -776,7 +768,7 @@ void mtrr_disable(void) - rdmsr(MSR_MTRRdefType, deftype_lo, deftype_hi); - - /* Disable MTRRs, and set the default type to uncached */ -- mtrr_wrmsr(MSR_MTRRdefType, deftype_lo & ~0xcff, deftype_hi); -+ mtrr_wrmsr(MSR_MTRRdefType, deftype_lo & MTRR_DEF_TYPE_DISABLE, deftype_hi); - } - - void mtrr_enable(void) -@@ -830,9 +822,9 @@ static void generic_set_mtrr(unsigned int reg, unsigned long base, - memset(vr, 0, sizeof(struct mtrr_var_range)); - } else { - vr->base_lo = base << PAGE_SHIFT | type; -- vr->base_hi = (base & size_and_mask) >> (32 - PAGE_SHIFT); -- vr->mask_lo = -size << PAGE_SHIFT | 0x800; -- vr->mask_hi = (-size & size_and_mask) >> (32 - PAGE_SHIFT); -+ vr->base_hi = (base >> (32 - PAGE_SHIFT)) & ~phys_hi_rsvd; -+ vr->mask_lo = -size << PAGE_SHIFT | MTRR_PHYSMASK_V; -+ vr->mask_hi = (-size >> (32 - PAGE_SHIFT)) & ~phys_hi_rsvd; - - mtrr_wrmsr(MTRRphysBase_MSR(reg), vr->base_lo, vr->base_hi); - mtrr_wrmsr(MTRRphysMask_MSR(reg), vr->mask_lo, vr->mask_hi); -@@ -885,7 +877,7 @@ static int generic_have_wrcomb(void) - { - unsigned long config, dummy; - rdmsr(MSR_MTRRcap, config, dummy); -- return config & (1 << 10); -+ return config & MTRR_CAP_WC; - } - - int positive_have_wrcomb(void) -diff --git a/arch/x86/kernel/cpu/mtrr/mtrr.c b/arch/x86/kernel/cpu/mtrr/mtrr.c -index 8638019f80680..be35a0b09604d 100644 ---- a/arch/x86/kernel/cpu/mtrr/mtrr.c -+++ b/arch/x86/kernel/cpu/mtrr/mtrr.c -@@ -115,7 +115,7 @@ static void __init set_num_var_ranges(bool use_generic) - else if (is_cpu(CYRIX) || is_cpu(CENTAUR)) - config = 8; - -- num_var_ranges = config & 0xff; -+ num_var_ranges = config & MTRR_CAP_VCNT; - } - - static void __init init_table(void) -@@ -628,7 +628,7 @@ void __init mtrr_bp_init(void) - bool generic_mtrrs = cpu_feature_enabled(X86_FEATURE_MTRR); - const char *why = "(not available)"; - -- mtrr_set_mask(); -+ phys_hi_rsvd = GENMASK(31, boot_cpu_data.x86_phys_bits - 32); - - if (!generic_mtrrs && mtrr_state.enabled) { - /* -diff --git a/arch/x86/kernel/cpu/mtrr/mtrr.h b/arch/x86/kernel/cpu/mtrr/mtrr.h -index a00987e6cc1c1..59e8fb26bf9dd 100644 ---- a/arch/x86/kernel/cpu/mtrr/mtrr.h -+++ b/arch/x86/kernel/cpu/mtrr/mtrr.h -@@ -58,8 +58,8 @@ extern const struct mtrr_ops *mtrr_if; - extern unsigned int num_var_ranges; - extern u64 mtrr_tom2; - extern struct mtrr_state_type mtrr_state; -+extern u32 phys_hi_rsvd; - --void mtrr_set_mask(void); - void mtrr_state_warn(void); - const char *mtrr_attrib_to_str(int x); - void mtrr_wrmsr(unsigned, unsigned, unsigned); --- -2.39.2 - diff --git a/queue-6.4/x86-mtrr-support-setting-mtrr-state-for-software-def.patch b/queue-6.4/x86-mtrr-support-setting-mtrr-state-for-software-def.patch deleted file mode 100644 index 12a82de6874..00000000000 --- a/queue-6.4/x86-mtrr-support-setting-mtrr-state-for-software-def.patch +++ /dev/null @@ -1,198 +0,0 @@ -From f5684fe7a880bbe944919111e25c1e8dc90bf8ad Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Tue, 2 May 2023 14:09:18 +0200 -Subject: x86/mtrr: Support setting MTRR state for software defined MTRRs - -From: Juergen Gross - -[ Upstream commit 29055dc74287467bd7a053d60b4afe753832960d ] - -When running virtualized, MTRR access can be reduced (e.g. in Xen PV -guests or when running as a SEV-SNP guest under Hyper-V). Typically, the -hypervisor will not advertize the MTRR feature in CPUID data, resulting -in no MTRR memory type information being available for the kernel. - -This has turned out to result in problems (Link tags below): - -- Hyper-V SEV-SNP guests using uncached mappings where they shouldn't -- Xen PV dom0 mapping memory as WB which should be UC- instead - -Solve those problems by allowing an MTRR static state override, -overwriting the empty state used today. In case such a state has been -set, don't call get_mtrr_state() in mtrr_bp_init(). - -The set state will only be used by mtrr_type_lookup(), as in all other -cases mtrr_enabled() is being checked, which will return false. Accept -the overwrite call only for selected cases when running as a guest. -Disable X86_FEATURE_MTRR in order to avoid any MTRR modifications by -just refusing them. - - [ bp: Massage. ] - -Signed-off-by: Juergen Gross -Signed-off-by: Borislav Petkov (AMD) -Tested-by: Michael Kelley -Link: https://lore.kernel.org/all/4fe9541e-4d4c-2b2a-f8c8-2d34a7284930@nerdbynature.de/ -Link: https://lore.kernel.org/lkml/BYAPR21MB16883ABC186566BD4D2A1451D7FE9@BYAPR21MB1688.namprd21.prod.outlook.com -Signed-off-by: Borislav Petkov (AMD) -Stable-dep-of: c957f1f3c498 ("x86/hyperv: Set MTRR state when running as SEV-SNP Hyper-V guest") -Signed-off-by: Sasha Levin ---- - arch/x86/include/asm/mtrr.h | 8 ++++ - arch/x86/kernel/cpu/mtrr/generic.c | 60 +++++++++++++++++++++++++++++- - arch/x86/kernel/cpu/mtrr/mtrr.c | 14 ++++++- - arch/x86/kernel/setup.c | 2 + - 4 files changed, 82 insertions(+), 2 deletions(-) - -diff --git a/arch/x86/include/asm/mtrr.h b/arch/x86/include/asm/mtrr.h -index f0eeaf6e5f5f7..f1cb81330a645 100644 ---- a/arch/x86/include/asm/mtrr.h -+++ b/arch/x86/include/asm/mtrr.h -@@ -31,6 +31,8 @@ - */ - # ifdef CONFIG_MTRR - void mtrr_bp_init(void); -+void mtrr_overwrite_state(struct mtrr_var_range *var, unsigned int num_var, -+ mtrr_type def_type); - extern u8 mtrr_type_lookup(u64 addr, u64 end, u8 *uniform); - extern void mtrr_save_fixed_ranges(void *); - extern void mtrr_save_state(void); -@@ -48,6 +50,12 @@ void mtrr_disable(void); - void mtrr_enable(void); - void mtrr_generic_set_state(void); - # else -+static inline void mtrr_overwrite_state(struct mtrr_var_range *var, -+ unsigned int num_var, -+ mtrr_type def_type) -+{ -+} -+ - static inline u8 mtrr_type_lookup(u64 addr, u64 end, u8 *uniform) - { - /* -diff --git a/arch/x86/kernel/cpu/mtrr/generic.c b/arch/x86/kernel/cpu/mtrr/generic.c -index 3922552340b13..fd77c5da4a7a6 100644 ---- a/arch/x86/kernel/cpu/mtrr/generic.c -+++ b/arch/x86/kernel/cpu/mtrr/generic.c -@@ -8,10 +8,12 @@ - #include - #include - #include -- -+#include - #include - #include - #include -+#include -+#include - #include - #include - #include -@@ -250,6 +252,62 @@ static u8 mtrr_type_lookup_variable(u64 start, u64 end, u64 *partial_end, - return mtrr_state.def_type; - } - -+/** -+ * mtrr_overwrite_state - set static MTRR state -+ * -+ * Used to set MTRR state via different means (e.g. with data obtained from -+ * a hypervisor). -+ * Is allowed only for special cases when running virtualized. Must be called -+ * from the x86_init.hyper.init_platform() hook. It can be called only once. -+ * The MTRR state can't be changed afterwards. To ensure that, X86_FEATURE_MTRR -+ * is cleared. -+ */ -+void mtrr_overwrite_state(struct mtrr_var_range *var, unsigned int num_var, -+ mtrr_type def_type) -+{ -+ unsigned int i; -+ -+ /* Only allowed to be called once before mtrr_bp_init(). */ -+ if (WARN_ON_ONCE(mtrr_state_set)) -+ return; -+ -+ /* Only allowed when running virtualized. */ -+ if (!cpu_feature_enabled(X86_FEATURE_HYPERVISOR)) -+ return; -+ -+ /* -+ * Only allowed for special virtualization cases: -+ * - when running as Hyper-V, SEV-SNP guest using vTOM -+ * - when running as Xen PV guest -+ * - when running as SEV-SNP or TDX guest to avoid unnecessary -+ * VMM communication/Virtualization exceptions (#VC, #VE) -+ */ -+ if (!cc_platform_has(CC_ATTR_GUEST_SEV_SNP) && -+ !hv_is_isolation_supported() && -+ !cpu_feature_enabled(X86_FEATURE_XENPV) && -+ !cpu_feature_enabled(X86_FEATURE_TDX_GUEST)) -+ return; -+ -+ /* Disable MTRR in order to disable MTRR modifications. */ -+ setup_clear_cpu_cap(X86_FEATURE_MTRR); -+ -+ if (var) { -+ if (num_var > MTRR_MAX_VAR_RANGES) { -+ pr_warn("Trying to overwrite MTRR state with %u variable entries\n", -+ num_var); -+ num_var = MTRR_MAX_VAR_RANGES; -+ } -+ for (i = 0; i < num_var; i++) -+ mtrr_state.var_ranges[i] = var[i]; -+ num_var_ranges = num_var; -+ } -+ -+ mtrr_state.def_type = def_type; -+ mtrr_state.enabled |= MTRR_STATE_MTRR_ENABLED; -+ -+ mtrr_state_set = 1; -+} -+ - /** - * mtrr_type_lookup - look up memory type in MTRR - * -diff --git a/arch/x86/kernel/cpu/mtrr/mtrr.c b/arch/x86/kernel/cpu/mtrr/mtrr.c -index 1bdab16f16bdc..8638019f80680 100644 ---- a/arch/x86/kernel/cpu/mtrr/mtrr.c -+++ b/arch/x86/kernel/cpu/mtrr/mtrr.c -@@ -625,11 +625,23 @@ int __initdata changed_by_mtrr_cleanup; - */ - void __init mtrr_bp_init(void) - { -+ bool generic_mtrrs = cpu_feature_enabled(X86_FEATURE_MTRR); - const char *why = "(not available)"; - - mtrr_set_mask(); - -- if (cpu_feature_enabled(X86_FEATURE_MTRR)) { -+ if (!generic_mtrrs && mtrr_state.enabled) { -+ /* -+ * Software overwrite of MTRR state, only for generic case. -+ * Note that X86_FEATURE_MTRR has been reset in this case. -+ */ -+ init_table(); -+ pr_info("MTRRs set to read-only\n"); -+ -+ return; -+ } -+ -+ if (generic_mtrrs) { - mtrr_if = &generic_mtrr_ops; - } else { - switch (boot_cpu_data.x86_vendor) { -diff --git a/arch/x86/kernel/setup.c b/arch/x86/kernel/setup.c -index 16babff771bdf..0cccfeb67c3ad 100644 ---- a/arch/x86/kernel/setup.c -+++ b/arch/x86/kernel/setup.c -@@ -1037,6 +1037,8 @@ void __init setup_arch(char **cmdline_p) - /* - * VMware detection requires dmi to be available, so this - * needs to be done after dmi_setup(), for the boot CPU. -+ * For some guest types (Xen PV, SEV-SNP, TDX) it is required to be -+ * called before cache_bp_init() for setting up MTRR state. - */ - init_hypervisor_platform(); - --- -2.39.2 - diff --git a/queue-6.4/x86-resctrl-only-show-tasks-pid-in-current-pid-names.patch b/queue-6.4/x86-resctrl-only-show-tasks-pid-in-current-pid-names.patch deleted file mode 100644 index bded8d00903..00000000000 --- a/queue-6.4/x86-resctrl-only-show-tasks-pid-in-current-pid-names.patch +++ /dev/null @@ -1,55 +0,0 @@ -From 35428613d0bfc142f6a0393c05335cb731ba2e13 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Mon, 15 May 2023 14:04:48 +0800 -Subject: x86/resctrl: Only show tasks' pid in current pid namespace - -From: Shawn Wang - -[ Upstream commit 2997d94b5dd0e8b10076f5e0b6f18410c73e28bd ] - -When writing a task id to the "tasks" file in an rdtgroup, -rdtgroup_tasks_write() treats the pid as a number in the current pid -namespace. But when reading the "tasks" file, rdtgroup_tasks_show() shows -the list of global pids from the init namespace, which is confusing and -incorrect. - -To be more robust, let the "tasks" file only show pids in the current pid -namespace. - -Fixes: e02737d5b826 ("x86/intel_rdt: Add tasks files") -Signed-off-by: Shawn Wang -Signed-off-by: Borislav Petkov (AMD) -Acked-by: Reinette Chatre -Acked-by: Fenghua Yu -Tested-by: Reinette Chatre -Link: https://lore.kernel.org/all/20230116071246.97717-1-shawnwang@linux.alibaba.com/ -Signed-off-by: Sasha Levin ---- - arch/x86/kernel/cpu/resctrl/rdtgroup.c | 8 ++++++-- - 1 file changed, 6 insertions(+), 2 deletions(-) - -diff --git a/arch/x86/kernel/cpu/resctrl/rdtgroup.c b/arch/x86/kernel/cpu/resctrl/rdtgroup.c -index 6ad33f355861f..61cdd9b1bb6d8 100644 ---- a/arch/x86/kernel/cpu/resctrl/rdtgroup.c -+++ b/arch/x86/kernel/cpu/resctrl/rdtgroup.c -@@ -726,11 +726,15 @@ static ssize_t rdtgroup_tasks_write(struct kernfs_open_file *of, - static void show_rdt_tasks(struct rdtgroup *r, struct seq_file *s) - { - struct task_struct *p, *t; -+ pid_t pid; - - rcu_read_lock(); - for_each_process_thread(p, t) { -- if (is_closid_match(t, r) || is_rmid_match(t, r)) -- seq_printf(s, "%d\n", t->pid); -+ if (is_closid_match(t, r) || is_rmid_match(t, r)) { -+ pid = task_pid_vnr(t); -+ if (pid) -+ seq_printf(s, "%d\n", pid); -+ } - } - rcu_read_unlock(); - } --- -2.39.2 - diff --git a/queue-6.4/x86-sev-fix-calculation-of-end-address-based-on-numb.patch b/queue-6.4/x86-sev-fix-calculation-of-end-address-based-on-numb.patch deleted file mode 100644 index bf4b2c6036d..00000000000 --- a/queue-6.4/x86-sev-fix-calculation-of-end-address-based-on-numb.patch +++ /dev/null @@ -1,134 +0,0 @@ -From 7129d909bd423790c8c7a202f74b6864cd6fd0d9 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Tue, 6 Jun 2023 09:51:22 -0500 -Subject: x86/sev: Fix calculation of end address based on number of pages - -From: Tom Lendacky - -[ Upstream commit 5dee19b6b2b194216919b99a1f5af2949a754016 ] - -When calculating an end address based on an unsigned int number of pages, -any value greater than or equal to 0x100000 that is shift PAGE_SHIFT bits -results in a 0 value, resulting in an invalid end address. Change the -number of pages variable in various routines from an unsigned int to an -unsigned long to calculate the end address correctly. - -Fixes: 5e5ccff60a29 ("x86/sev: Add helper for validating pages in early enc attribute changes") -Fixes: dc3f3d2474b8 ("x86/mm: Validate memory when changing the C-bit") -Signed-off-by: Tom Lendacky -Signed-off-by: Borislav Petkov (AMD) -Link: https://lore.kernel.org/r/6a6e4eea0e1414402bac747744984fa4e9c01bb6.1686063086.git.thomas.lendacky@amd.com -Signed-off-by: Sasha Levin ---- - arch/x86/include/asm/sev.h | 16 ++++++++-------- - arch/x86/kernel/sev.c | 14 +++++++------- - 2 files changed, 15 insertions(+), 15 deletions(-) - -diff --git a/arch/x86/include/asm/sev.h b/arch/x86/include/asm/sev.h -index 13dc2a9d23c1e..7ca5c9ec8b52e 100644 ---- a/arch/x86/include/asm/sev.h -+++ b/arch/x86/include/asm/sev.h -@@ -192,12 +192,12 @@ struct snp_guest_request_ioctl; - - void setup_ghcb(void); - void __init early_snp_set_memory_private(unsigned long vaddr, unsigned long paddr, -- unsigned int npages); -+ unsigned long npages); - void __init early_snp_set_memory_shared(unsigned long vaddr, unsigned long paddr, -- unsigned int npages); -+ unsigned long npages); - void __init snp_prep_memory(unsigned long paddr, unsigned int sz, enum psc_op op); --void snp_set_memory_shared(unsigned long vaddr, unsigned int npages); --void snp_set_memory_private(unsigned long vaddr, unsigned int npages); -+void snp_set_memory_shared(unsigned long vaddr, unsigned long npages); -+void snp_set_memory_private(unsigned long vaddr, unsigned long npages); - void snp_set_wakeup_secondary_cpu(void); - bool snp_init(struct boot_params *bp); - void __init __noreturn snp_abort(void); -@@ -212,12 +212,12 @@ static inline int pvalidate(unsigned long vaddr, bool rmp_psize, bool validate) - static inline int rmpadjust(unsigned long vaddr, bool rmp_psize, unsigned long attrs) { return 0; } - static inline void setup_ghcb(void) { } - static inline void __init --early_snp_set_memory_private(unsigned long vaddr, unsigned long paddr, unsigned int npages) { } -+early_snp_set_memory_private(unsigned long vaddr, unsigned long paddr, unsigned long npages) { } - static inline void __init --early_snp_set_memory_shared(unsigned long vaddr, unsigned long paddr, unsigned int npages) { } -+early_snp_set_memory_shared(unsigned long vaddr, unsigned long paddr, unsigned long npages) { } - static inline void __init snp_prep_memory(unsigned long paddr, unsigned int sz, enum psc_op op) { } --static inline void snp_set_memory_shared(unsigned long vaddr, unsigned int npages) { } --static inline void snp_set_memory_private(unsigned long vaddr, unsigned int npages) { } -+static inline void snp_set_memory_shared(unsigned long vaddr, unsigned long npages) { } -+static inline void snp_set_memory_private(unsigned long vaddr, unsigned long npages) { } - static inline void snp_set_wakeup_secondary_cpu(void) { } - static inline bool snp_init(struct boot_params *bp) { return false; } - static inline void snp_abort(void) { } -diff --git a/arch/x86/kernel/sev.c b/arch/x86/kernel/sev.c -index b031244d6d2df..108bbae59c35a 100644 ---- a/arch/x86/kernel/sev.c -+++ b/arch/x86/kernel/sev.c -@@ -645,7 +645,7 @@ static u64 __init get_jump_table_addr(void) - return ret; - } - --static void pvalidate_pages(unsigned long vaddr, unsigned int npages, bool validate) -+static void pvalidate_pages(unsigned long vaddr, unsigned long npages, bool validate) - { - unsigned long vaddr_end; - int rc; -@@ -662,7 +662,7 @@ static void pvalidate_pages(unsigned long vaddr, unsigned int npages, bool valid - } - } - --static void __init early_set_pages_state(unsigned long paddr, unsigned int npages, enum psc_op op) -+static void __init early_set_pages_state(unsigned long paddr, unsigned long npages, enum psc_op op) - { - unsigned long paddr_end; - u64 val; -@@ -701,7 +701,7 @@ static void __init early_set_pages_state(unsigned long paddr, unsigned int npage - } - - void __init early_snp_set_memory_private(unsigned long vaddr, unsigned long paddr, -- unsigned int npages) -+ unsigned long npages) - { - /* - * This can be invoked in early boot while running identity mapped, so -@@ -723,7 +723,7 @@ void __init early_snp_set_memory_private(unsigned long vaddr, unsigned long padd - } - - void __init early_snp_set_memory_shared(unsigned long vaddr, unsigned long paddr, -- unsigned int npages) -+ unsigned long npages) - { - /* - * This can be invoked in early boot while running identity mapped, so -@@ -879,7 +879,7 @@ static void __set_pages_state(struct snp_psc_desc *data, unsigned long vaddr, - sev_es_terminate(SEV_TERM_SET_LINUX, GHCB_TERM_PSC); - } - --static void set_pages_state(unsigned long vaddr, unsigned int npages, int op) -+static void set_pages_state(unsigned long vaddr, unsigned long npages, int op) - { - unsigned long vaddr_end, next_vaddr; - struct snp_psc_desc *desc; -@@ -904,7 +904,7 @@ static void set_pages_state(unsigned long vaddr, unsigned int npages, int op) - kfree(desc); - } - --void snp_set_memory_shared(unsigned long vaddr, unsigned int npages) -+void snp_set_memory_shared(unsigned long vaddr, unsigned long npages) - { - if (!cc_platform_has(CC_ATTR_GUEST_SEV_SNP)) - return; -@@ -914,7 +914,7 @@ void snp_set_memory_shared(unsigned long vaddr, unsigned int npages) - set_pages_state(vaddr, npages, SNP_PAGE_STATE_SHARED); - } - --void snp_set_memory_private(unsigned long vaddr, unsigned int npages) -+void snp_set_memory_private(unsigned long vaddr, unsigned long npages) - { - if (!cc_platform_has(CC_ATTR_GUEST_SEV_SNP)) - return; --- -2.39.2 - diff --git a/queue-6.4/x86-tdx-fix-race-between-set_memory_encrypted-and-lo.patch b/queue-6.4/x86-tdx-fix-race-between-set_memory_encrypted-and-lo.patch deleted file mode 100644 index 3c04fbf7173..00000000000 --- a/queue-6.4/x86-tdx-fix-race-between-set_memory_encrypted-and-lo.patch +++ /dev/null @@ -1,142 +0,0 @@ -From b70de5d8c7558d22965dc021ca78348d6bd281cc Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Tue, 6 Jun 2023 12:56:21 +0300 -Subject: x86/tdx: Fix race between set_memory_encrypted() and - load_unaligned_zeropad() - -From: Kirill A. Shutemov - -[ Upstream commit 195edce08b63d293377f615f4f7f086715d2d212 ] - -tl;dr: There is a race in the TDX private<=>shared conversion code - which could kill the TDX guest. Fix it by changing conversion - ordering to eliminate the window. - -TDX hardware maintains metadata to track which pages are private and -shared. Additionally, TDX guests use the guest x86 page tables to -specify whether a given mapping is intended to be private or shared. -Bad things happen when the intent and metadata do not match. - -So there are two thing in play: - 1. "the page" -- the physical TDX page metadata - 2. "the mapping" -- the guest-controlled x86 page table intent - -For instance, an unrecoverable exit to VMM occurs if a guest touches a -private mapping that points to a shared physical page. - -In summary: - * Private mapping => Private Page == OK (obviously) - * Shared mapping => Shared Page == OK (obviously) - * Private mapping => Shared Page == BIG BOOM! - * Shared mapping => Private Page == OK-ish - (It will read generate a recoverable #VE via handle_mmio()) - -Enter load_unaligned_zeropad(). It can touch memory that is adjacent but -otherwise unrelated to the memory it needs to touch. It will cause one -of those unrecoverable exits (aka. BIG BOOM) if it blunders into a -shared mapping pointing to a private page. - -This is a problem when __set_memory_enc_pgtable() converts pages from -shared to private. It first changes the mapping and second modifies -the TDX page metadata. It's moving from: - - * Shared mapping => Shared Page == OK -to: - * Private mapping => Shared Page == BIG BOOM! - -This means that there is a window with a shared mapping pointing to a -private page where load_unaligned_zeropad() can strike. - -Add a TDX handler for guest.enc_status_change_prepare(). This converts -the page from shared to private *before* the page becomes private. This -ensures that there is never a private mapping to a shared page. - -Leave a guest.enc_status_change_finish() in place but only use it for -private=>shared conversions. This will delay updating the TDX metadata -marking the page private until *after* the mapping matches the metadata. -This also ensures that there is never a private mapping to a shared page. - -[ dhansen: rewrite changelog ] - -Fixes: 7dbde7631629 ("x86/mm/cpa: Add support for TDX shared memory") -Signed-off-by: Kirill A. Shutemov -Signed-off-by: Dave Hansen -Reviewed-by: Kuppuswamy Sathyanarayanan -Link: https://lore.kernel.org/all/20230606095622.1939-3-kirill.shutemov%40linux.intel.com -Signed-off-by: Sasha Levin ---- - arch/x86/coco/tdx/tdx.c | 51 ++++++++++++++++++++++++++++++++++++++--- - 1 file changed, 48 insertions(+), 3 deletions(-) - -diff --git a/arch/x86/coco/tdx/tdx.c b/arch/x86/coco/tdx/tdx.c -index e146b599260f8..64f1343df062f 100644 ---- a/arch/x86/coco/tdx/tdx.c -+++ b/arch/x86/coco/tdx/tdx.c -@@ -840,6 +840,30 @@ static bool tdx_enc_status_changed(unsigned long vaddr, int numpages, bool enc) - return true; - } - -+static bool tdx_enc_status_change_prepare(unsigned long vaddr, int numpages, -+ bool enc) -+{ -+ /* -+ * Only handle shared->private conversion here. -+ * See the comment in tdx_early_init(). -+ */ -+ if (enc) -+ return tdx_enc_status_changed(vaddr, numpages, enc); -+ return true; -+} -+ -+static bool tdx_enc_status_change_finish(unsigned long vaddr, int numpages, -+ bool enc) -+{ -+ /* -+ * Only handle private->shared conversion here. -+ * See the comment in tdx_early_init(). -+ */ -+ if (!enc) -+ return tdx_enc_status_changed(vaddr, numpages, enc); -+ return true; -+} -+ - void __init tdx_early_init(void) - { - u64 cc_mask; -@@ -867,9 +891,30 @@ void __init tdx_early_init(void) - */ - physical_mask &= cc_mask - 1; - -- x86_platform.guest.enc_cache_flush_required = tdx_cache_flush_required; -- x86_platform.guest.enc_tlb_flush_required = tdx_tlb_flush_required; -- x86_platform.guest.enc_status_change_finish = tdx_enc_status_changed; -+ /* -+ * The kernel mapping should match the TDX metadata for the page. -+ * load_unaligned_zeropad() can touch memory *adjacent* to that which is -+ * owned by the caller and can catch even _momentary_ mismatches. Bad -+ * things happen on mismatch: -+ * -+ * - Private mapping => Shared Page == Guest shutdown -+ * - Shared mapping => Private Page == Recoverable #VE -+ * -+ * guest.enc_status_change_prepare() converts the page from -+ * shared=>private before the mapping becomes private. -+ * -+ * guest.enc_status_change_finish() converts the page from -+ * private=>shared after the mapping becomes private. -+ * -+ * In both cases there is a temporary shared mapping to a private page, -+ * which can result in a #VE. But, there is never a private mapping to -+ * a shared page. -+ */ -+ x86_platform.guest.enc_status_change_prepare = tdx_enc_status_change_prepare; -+ x86_platform.guest.enc_status_change_finish = tdx_enc_status_change_finish; -+ -+ x86_platform.guest.enc_cache_flush_required = tdx_cache_flush_required; -+ x86_platform.guest.enc_tlb_flush_required = tdx_tlb_flush_required; - - pr_info("Guest detected\n"); - } --- -2.39.2 - diff --git a/queue-6.4/x86-xen-set-mtrr-state-when-running-as-xen-pv-initia.patch b/queue-6.4/x86-xen-set-mtrr-state-when-running-as-xen-pv-initia.patch deleted file mode 100644 index 10d7296218d..00000000000 --- a/queue-6.4/x86-xen-set-mtrr-state-when-running-as-xen-pv-initia.patch +++ /dev/null @@ -1,123 +0,0 @@ -From 081c089a869cc63fff187d2e0bdf4cab00327d76 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Tue, 2 May 2023 14:09:20 +0200 -Subject: x86/xen: Set MTRR state when running as Xen PV initial domain - -From: Juergen Gross - -[ Upstream commit a153f254e5cdf8fa3a1df90a6ffed3063fede154 ] - -When running as Xen PV initial domain (aka dom0), MTRRs are disabled -by the hypervisor, but the system should nevertheless use correct -cache memory types. This has always kind of worked, as disabled MTRRs -resulted in disabled PAT, too, so that the kernel avoided code paths -resulting in inconsistencies. This bypassed all of the sanity checks -the kernel is doing with enabled MTRRs in order to avoid memory -mappings with conflicting memory types. - -This has been changed recently, leading to PAT being accepted to be -enabled, while MTRRs stayed disabled. The result is that -mtrr_type_lookup() no longer is accepting all memory type requests, -but started to return WB even if UC- was requested. This led to -driver failures during initialization of some devices. - -In reality MTRRs are still in effect, but they are under complete -control of the Xen hypervisor. It is possible, however, to retrieve -the MTRR settings from the hypervisor. - -In order to fix those problems, overwrite the MTRR state via -mtrr_overwrite_state() with the MTRR data from the hypervisor, if the -system is running as a Xen dom0. - -Fixes: 72cbc8f04fe2 ("x86/PAT: Have pat_enabled() properly reflect state when running on Xen") -Signed-off-by: Juergen Gross -Signed-off-by: Borislav Petkov (AMD) -Reviewed-by: Boris Ostrovsky -Tested-by: Michael Kelley -Link: https://lore.kernel.org/r/20230502120931.20719-6-jgross@suse.com -Signed-off-by: Borislav Petkov (AMD) -Signed-off-by: Sasha Levin ---- - arch/x86/xen/enlighten_pv.c | 52 +++++++++++++++++++++++++++++++++++++ - 1 file changed, 52 insertions(+) - -diff --git a/arch/x86/xen/enlighten_pv.c b/arch/x86/xen/enlighten_pv.c -index 093b78c8bbec0..8732b85d56505 100644 ---- a/arch/x86/xen/enlighten_pv.c -+++ b/arch/x86/xen/enlighten_pv.c -@@ -68,6 +68,7 @@ - #include - #include - #include -+#include - #include - #include - #include -@@ -119,6 +120,54 @@ static int __init parse_xen_msr_safe(char *str) - } - early_param("xen_msr_safe", parse_xen_msr_safe); - -+/* Get MTRR settings from Xen and put them into mtrr_state. */ -+static void __init xen_set_mtrr_data(void) -+{ -+#ifdef CONFIG_MTRR -+ struct xen_platform_op op = { -+ .cmd = XENPF_read_memtype, -+ .interface_version = XENPF_INTERFACE_VERSION, -+ }; -+ unsigned int reg; -+ unsigned long mask; -+ uint32_t eax, width; -+ static struct mtrr_var_range var[MTRR_MAX_VAR_RANGES] __initdata; -+ -+ /* Get physical address width (only 64-bit cpus supported). */ -+ width = 36; -+ eax = cpuid_eax(0x80000000); -+ if ((eax >> 16) == 0x8000 && eax >= 0x80000008) { -+ eax = cpuid_eax(0x80000008); -+ width = eax & 0xff; -+ } -+ -+ for (reg = 0; reg < MTRR_MAX_VAR_RANGES; reg++) { -+ op.u.read_memtype.reg = reg; -+ if (HYPERVISOR_platform_op(&op)) -+ break; -+ -+ /* -+ * Only called in dom0, which has all RAM PFNs mapped at -+ * RAM MFNs, and all PCI space etc. is identity mapped. -+ * This means we can treat MFN == PFN regarding MTRR settings. -+ */ -+ var[reg].base_lo = op.u.read_memtype.type; -+ var[reg].base_lo |= op.u.read_memtype.mfn << PAGE_SHIFT; -+ var[reg].base_hi = op.u.read_memtype.mfn >> (32 - PAGE_SHIFT); -+ mask = ~((op.u.read_memtype.nr_mfns << PAGE_SHIFT) - 1); -+ mask &= (1UL << width) - 1; -+ if (mask) -+ mask |= MTRR_PHYSMASK_V; -+ var[reg].mask_lo = mask; -+ var[reg].mask_hi = mask >> 32; -+ } -+ -+ /* Only overwrite MTRR state if any MTRR could be got from Xen. */ -+ if (reg) -+ mtrr_overwrite_state(var, reg, MTRR_TYPE_UNCACHABLE); -+#endif -+} -+ - static void __init xen_pv_init_platform(void) - { - /* PV guests can't operate virtio devices without grants. */ -@@ -135,6 +184,9 @@ static void __init xen_pv_init_platform(void) - - /* pvclock is in shared info area */ - xen_init_time_ops(); -+ -+ if (xen_initial_domain()) -+ xen_set_mtrr_data(); - } - - static void __init xen_pv_guest_late_init(void) --- -2.39.2 - -- 2.47.3