From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from lists.gentoo.org (pigeon.gentoo.org [208.92.234.80]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits)) (No client certificate requested) by finch.gentoo.org (Postfix) with ESMTPS id E5271158089 for ; Wed, 6 Sep 2023 22:14:31 +0000 (UTC) Received: from pigeon.gentoo.org (localhost [127.0.0.1]) by pigeon.gentoo.org (Postfix) with SMTP id 1FC6E2BC020; Wed, 6 Sep 2023 22:14:31 +0000 (UTC) Received: from smtp.gentoo.org (woodpecker.gentoo.org [140.211.166.183]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits)) (No client certificate requested) by pigeon.gentoo.org (Postfix) with ESMTPS id B6BC62BC020 for ; Wed, 6 Sep 2023 22:14:30 +0000 (UTC) Received: from oystercatcher.gentoo.org (oystercatcher.gentoo.org [148.251.78.52]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits)) (No client certificate requested) by smtp.gentoo.org (Postfix) with ESMTPS id 9B761335C94 for ; Wed, 6 Sep 2023 22:14:29 +0000 (UTC) Received: from localhost.localdomain (localhost [IPv6:::1]) by oystercatcher.gentoo.org (Postfix) with ESMTP id 438DA106B for ; Wed, 6 Sep 2023 22:14:28 +0000 (UTC) From: "Mike Pagano" To: gentoo-commits@lists.gentoo.org Content-Transfer-Encoding: 8bit Content-type: text/plain; charset=UTF-8 Reply-To: gentoo-dev@lists.gentoo.org, "Mike Pagano" Message-ID: <1694038449.9a88bbc80d292195f44fd0c75e13123e4e8eb02a.mpagano@gentoo> Subject: [gentoo-commits] proj/linux-patches:6.5 commit in: / X-VCS-Repository: proj/linux-patches X-VCS-Files: 0000_README 1001_linux-6.5.2.patch X-VCS-Directories: / X-VCS-Committer: mpagano X-VCS-Committer-Name: Mike Pagano X-VCS-Revision: 9a88bbc80d292195f44fd0c75e13123e4e8eb02a X-VCS-Branch: 6.5 Date: Wed, 6 Sep 2023 22:14:28 +0000 (UTC) Precedence: bulk List-Post: List-Help: List-Unsubscribe: List-Subscribe: List-Id: Gentoo Linux mail X-BeenThere: gentoo-commits@lists.gentoo.org X-Auto-Response-Suppress: DR, RN, NRN, OOF, AutoReply X-Archives-Salt: 21f10786-89ed-4202-9992-9a964bb65706 X-Archives-Hash: b2837dccf11c44c2a17febc037751c6f commit: 9a88bbc80d292195f44fd0c75e13123e4e8eb02a Author: Mike Pagano gentoo org> AuthorDate: Wed Sep 6 22:14:09 2023 +0000 Commit: Mike Pagano gentoo org> CommitDate: Wed Sep 6 22:14:09 2023 +0000 URL: https://gitweb.gentoo.org/proj/linux-patches.git/commit/?id=9a88bbc8 Linux patch 6.5.2 Signed-off-by: Mike Pagano gentoo.org> 0000_README | 4 + 1001_linux-6.5.2.patch | 1052 ++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 1056 insertions(+) diff --git a/0000_README b/0000_README index f7da0ce2..465e90aa 100644 --- a/0000_README +++ b/0000_README @@ -47,6 +47,10 @@ Patch: 1000_linux-6.5.1.patch From: https://www.kernel.org Desc: Linux 6.5.1 +Patch: 1001_linux-6.5.2.patch +From: https://www.kernel.org +Desc: Linux 6.5.2 + Patch: 1500_XATTR_USER_PREFIX.patch From: https://bugs.gentoo.org/show_bug.cgi?id=470644 Desc: Support for namespace user.pax.* on tmpfs. diff --git a/1001_linux-6.5.2.patch b/1001_linux-6.5.2.patch new file mode 100644 index 00000000..82cc18a9 --- /dev/null +++ b/1001_linux-6.5.2.patch @@ -0,0 +1,1052 @@ +diff --git a/Documentation/devicetree/bindings/serial/nxp,sc16is7xx.txt b/Documentation/devicetree/bindings/serial/nxp,sc16is7xx.txt +index 0fa8e3e43bf80..1a7e4bff0456f 100644 +--- a/Documentation/devicetree/bindings/serial/nxp,sc16is7xx.txt ++++ b/Documentation/devicetree/bindings/serial/nxp,sc16is7xx.txt +@@ -23,6 +23,9 @@ Optional properties: + 1 = active low. + - irda-mode-ports: An array that lists the indices of the port that + should operate in IrDA mode. ++- nxp,modem-control-line-ports: An array that lists the indices of the port that ++ should have shared GPIO lines configured as ++ modem control lines. + + Example: + sc16is750: sc16is750@51 { +@@ -35,6 +38,26 @@ Example: + #gpio-cells = <2>; + }; + ++ sc16is752: sc16is752@53 { ++ compatible = "nxp,sc16is752"; ++ reg = <0x53>; ++ clocks = <&clk20m>; ++ interrupt-parent = <&gpio3>; ++ interrupts = <7 IRQ_TYPE_EDGE_FALLING>; ++ nxp,modem-control-line-ports = <1>; /* Port 1 as modem control lines */ ++ gpio-controller; /* Port 0 as GPIOs */ ++ #gpio-cells = <2>; ++ }; ++ ++ sc16is752: sc16is752@54 { ++ compatible = "nxp,sc16is752"; ++ reg = <0x54>; ++ clocks = <&clk20m>; ++ interrupt-parent = <&gpio3>; ++ interrupts = <7 IRQ_TYPE_EDGE_FALLING>; ++ nxp,modem-control-line-ports = <0 1>; /* Ports 0 and 1 as modem control lines */ ++ }; ++ + * spi as bus + + Required properties: +@@ -59,6 +82,9 @@ Optional properties: + 1 = active low. + - irda-mode-ports: An array that lists the indices of the port that + should operate in IrDA mode. ++- nxp,modem-control-line-ports: An array that lists the indices of the port that ++ should have shared GPIO lines configured as ++ modem control lines. + + Example: + sc16is750: sc16is750@0 { +@@ -70,3 +96,23 @@ Example: + gpio-controller; + #gpio-cells = <2>; + }; ++ ++ sc16is752: sc16is752@1 { ++ compatible = "nxp,sc16is752"; ++ reg = <1>; ++ clocks = <&clk20m>; ++ interrupt-parent = <&gpio3>; ++ interrupts = <7 IRQ_TYPE_EDGE_FALLING>; ++ nxp,modem-control-line-ports = <1>; /* Port 1 as modem control lines */ ++ gpio-controller; /* Port 0 as GPIOs */ ++ #gpio-cells = <2>; ++ }; ++ ++ sc16is752: sc16is752@2 { ++ compatible = "nxp,sc16is752"; ++ reg = <2>; ++ clocks = <&clk20m>; ++ interrupt-parent = <&gpio3>; ++ interrupts = <7 IRQ_TYPE_EDGE_FALLING>; ++ nxp,modem-control-line-ports = <0 1>; /* Ports 0 and 1 as modem control lines */ ++ }; +diff --git a/Makefile b/Makefile +index 062b9694e0547..c47558bc00aa8 100644 +--- a/Makefile ++++ b/Makefile +@@ -1,7 +1,7 @@ + # SPDX-License-Identifier: GPL-2.0 + VERSION = 6 + PATCHLEVEL = 5 +-SUBLEVEL = 1 ++SUBLEVEL = 2 + EXTRAVERSION = + NAME = Hurr durr I'ma ninja sloth + +diff --git a/arch/arm/mach-pxa/sharpsl_pm.c b/arch/arm/mach-pxa/sharpsl_pm.c +index d29bdcd5270e0..72fa2e3fd3531 100644 +--- a/arch/arm/mach-pxa/sharpsl_pm.c ++++ b/arch/arm/mach-pxa/sharpsl_pm.c +@@ -216,8 +216,6 @@ void sharpsl_battery_kick(void) + { + schedule_delayed_work(&sharpsl_bat, msecs_to_jiffies(125)); + } +-EXPORT_SYMBOL(sharpsl_battery_kick); +- + + static void sharpsl_battery_thread(struct work_struct *private_) + { +diff --git a/arch/arm/mach-pxa/spitz.c b/arch/arm/mach-pxa/spitz.c +index d01ea54b0b782..cc691b199429c 100644 +--- a/arch/arm/mach-pxa/spitz.c ++++ b/arch/arm/mach-pxa/spitz.c +@@ -9,7 +9,6 @@ + */ + + #include +-#include /* symbol_get ; symbol_put */ + #include + #include + #include +@@ -518,17 +517,6 @@ static struct gpiod_lookup_table spitz_ads7846_gpio_table = { + }, + }; + +-static void spitz_bl_kick_battery(void) +-{ +- void (*kick_batt)(void); +- +- kick_batt = symbol_get(sharpsl_battery_kick); +- if (kick_batt) { +- kick_batt(); +- symbol_put(sharpsl_battery_kick); +- } +-} +- + static struct gpiod_lookup_table spitz_lcdcon_gpio_table = { + .dev_id = "spi2.1", + .table = { +@@ -556,7 +544,7 @@ static struct corgi_lcd_platform_data spitz_lcdcon_info = { + .max_intensity = 0x2f, + .default_intensity = 0x1f, + .limit_mask = 0x0b, +- .kick_battery = spitz_bl_kick_battery, ++ .kick_battery = sharpsl_battery_kick, + }; + + static struct spi_board_info spitz_spi_devices[] = { +diff --git a/arch/mips/alchemy/devboards/db1000.c b/arch/mips/alchemy/devboards/db1000.c +index 79d66faa84828..012da042d0a4f 100644 +--- a/arch/mips/alchemy/devboards/db1000.c ++++ b/arch/mips/alchemy/devboards/db1000.c +@@ -14,7 +14,6 @@ + #include + #include + #include +-#include + #include + #include + #include +@@ -167,12 +166,7 @@ static struct platform_device db1x00_audio_dev = { + + static irqreturn_t db1100_mmc_cd(int irq, void *ptr) + { +- void (*mmc_cd)(struct mmc_host *, unsigned long); +- /* link against CONFIG_MMC=m */ +- mmc_cd = symbol_get(mmc_detect_change); +- mmc_cd(ptr, msecs_to_jiffies(500)); +- symbol_put(mmc_detect_change); +- ++ mmc_detect_change(ptr, msecs_to_jiffies(500)); + return IRQ_HANDLED; + } + +diff --git a/arch/mips/alchemy/devboards/db1200.c b/arch/mips/alchemy/devboards/db1200.c +index 1864eb935ca57..76080c71a2a7b 100644 +--- a/arch/mips/alchemy/devboards/db1200.c ++++ b/arch/mips/alchemy/devboards/db1200.c +@@ -10,7 +10,6 @@ + #include + #include + #include +-#include + #include + #include + #include +@@ -340,14 +339,7 @@ static irqreturn_t db1200_mmc_cd(int irq, void *ptr) + + static irqreturn_t db1200_mmc_cdfn(int irq, void *ptr) + { +- void (*mmc_cd)(struct mmc_host *, unsigned long); +- +- /* link against CONFIG_MMC=m */ +- mmc_cd = symbol_get(mmc_detect_change); +- if (mmc_cd) { +- mmc_cd(ptr, msecs_to_jiffies(200)); +- symbol_put(mmc_detect_change); +- } ++ mmc_detect_change(ptr, msecs_to_jiffies(200)); + + msleep(100); /* debounce */ + if (irq == DB1200_SD0_INSERT_INT) +@@ -431,14 +423,7 @@ static irqreturn_t pb1200_mmc1_cd(int irq, void *ptr) + + static irqreturn_t pb1200_mmc1_cdfn(int irq, void *ptr) + { +- void (*mmc_cd)(struct mmc_host *, unsigned long); +- +- /* link against CONFIG_MMC=m */ +- mmc_cd = symbol_get(mmc_detect_change); +- if (mmc_cd) { +- mmc_cd(ptr, msecs_to_jiffies(200)); +- symbol_put(mmc_detect_change); +- } ++ mmc_detect_change(ptr, msecs_to_jiffies(200)); + + msleep(100); /* debounce */ + if (irq == PB1200_SD1_INSERT_INT) +diff --git a/arch/mips/alchemy/devboards/db1300.c b/arch/mips/alchemy/devboards/db1300.c +index e70e529ddd914..ff61901329c62 100644 +--- a/arch/mips/alchemy/devboards/db1300.c ++++ b/arch/mips/alchemy/devboards/db1300.c +@@ -17,7 +17,6 @@ + #include + #include + #include +-#include + #include + #include + #include +@@ -459,14 +458,7 @@ static irqreturn_t db1300_mmc_cd(int irq, void *ptr) + + static irqreturn_t db1300_mmc_cdfn(int irq, void *ptr) + { +- void (*mmc_cd)(struct mmc_host *, unsigned long); +- +- /* link against CONFIG_MMC=m. We can only be called once MMC core has +- * initialized the controller, so symbol_get() should always succeed. +- */ +- mmc_cd = symbol_get(mmc_detect_change); +- mmc_cd(ptr, msecs_to_jiffies(200)); +- symbol_put(mmc_detect_change); ++ mmc_detect_change(ptr, msecs_to_jiffies(200)); + + msleep(100); /* debounce */ + if (irq == DB1300_SD1_INSERT_INT) +diff --git a/drivers/firmware/stratix10-svc.c b/drivers/firmware/stratix10-svc.c +index 2d674126160fe..cab11af28c231 100644 +--- a/drivers/firmware/stratix10-svc.c ++++ b/drivers/firmware/stratix10-svc.c +@@ -756,7 +756,7 @@ svc_create_memory_pool(struct platform_device *pdev, + paddr = begin; + size = end - begin; + va = devm_memremap(dev, paddr, size, MEMREMAP_WC); +- if (!va) { ++ if (IS_ERR(va)) { + dev_err(dev, "fail to remap shared memory\n"); + return ERR_PTR(-EINVAL); + } +diff --git a/drivers/fsi/fsi-master-ast-cf.c b/drivers/fsi/fsi-master-ast-cf.c +index 5f608ef8b53ca..cde281ec89d7b 100644 +--- a/drivers/fsi/fsi-master-ast-cf.c ++++ b/drivers/fsi/fsi-master-ast-cf.c +@@ -1441,3 +1441,4 @@ static struct platform_driver fsi_master_acf = { + + module_platform_driver(fsi_master_acf); + MODULE_LICENSE("GPL"); ++MODULE_FIRMWARE(FW_FILE_NAME); +diff --git a/drivers/gpu/drm/amd/amdgpu/gmc_v10_0.c b/drivers/gpu/drm/amd/amdgpu/gmc_v10_0.c +index 0c8a479895761..c184f64342aa0 100644 +--- a/drivers/gpu/drm/amd/amdgpu/gmc_v10_0.c ++++ b/drivers/gpu/drm/amd/amdgpu/gmc_v10_0.c +@@ -109,9 +109,11 @@ static int gmc_v10_0_process_interrupt(struct amdgpu_device *adev, + struct amdgpu_irq_src *source, + struct amdgpu_iv_entry *entry) + { ++ uint32_t vmhub_index = entry->client_id == SOC15_IH_CLIENTID_VMC ? ++ AMDGPU_MMHUB0(0) : AMDGPU_GFXHUB(0); ++ struct amdgpu_vmhub *hub = &adev->vmhub[vmhub_index]; + bool retry_fault = !!(entry->src_data[1] & 0x80); + bool write_fault = !!(entry->src_data[1] & 0x20); +- struct amdgpu_vmhub *hub = &adev->vmhub[entry->vmid_src]; + struct amdgpu_task_info task_info; + uint32_t status = 0; + u64 addr; +diff --git a/drivers/gpu/drm/amd/amdgpu/gmc_v11_0.c b/drivers/gpu/drm/amd/amdgpu/gmc_v11_0.c +index c571f0d959946..dd9744b583949 100644 +--- a/drivers/gpu/drm/amd/amdgpu/gmc_v11_0.c ++++ b/drivers/gpu/drm/amd/amdgpu/gmc_v11_0.c +@@ -97,7 +97,9 @@ static int gmc_v11_0_process_interrupt(struct amdgpu_device *adev, + struct amdgpu_irq_src *source, + struct amdgpu_iv_entry *entry) + { +- struct amdgpu_vmhub *hub = &adev->vmhub[entry->vmid_src]; ++ uint32_t vmhub_index = entry->client_id == SOC21_IH_CLIENTID_VMC ? ++ AMDGPU_MMHUB0(0) : AMDGPU_GFXHUB(0); ++ struct amdgpu_vmhub *hub = &adev->vmhub[vmhub_index]; + uint32_t status = 0; + u64 addr; + +diff --git a/drivers/hid/wacom.h b/drivers/hid/wacom.h +index 4da50e19808ef..166a76c9bcad3 100644 +--- a/drivers/hid/wacom.h ++++ b/drivers/hid/wacom.h +@@ -150,6 +150,7 @@ struct wacom_remote { + struct input_dev *input; + bool registered; + struct wacom_battery battery; ++ ktime_t active_time; + } remotes[WACOM_MAX_REMOTES]; + }; + +diff --git a/drivers/hid/wacom_sys.c b/drivers/hid/wacom_sys.c +index 76e5353aca0c7..eb833455abd50 100644 +--- a/drivers/hid/wacom_sys.c ++++ b/drivers/hid/wacom_sys.c +@@ -2523,6 +2523,18 @@ fail: + return; + } + ++static void wacom_remote_destroy_battery(struct wacom *wacom, int index) ++{ ++ struct wacom_remote *remote = wacom->remote; ++ ++ if (remote->remotes[index].battery.battery) { ++ devres_release_group(&wacom->hdev->dev, ++ &remote->remotes[index].battery.bat_desc); ++ remote->remotes[index].battery.battery = NULL; ++ remote->remotes[index].active_time = 0; ++ } ++} ++ + static void wacom_remote_destroy_one(struct wacom *wacom, unsigned int index) + { + struct wacom_remote *remote = wacom->remote; +@@ -2537,9 +2549,7 @@ static void wacom_remote_destroy_one(struct wacom *wacom, unsigned int index) + remote->remotes[i].registered = false; + spin_unlock_irqrestore(&remote->remote_lock, flags); + +- if (remote->remotes[i].battery.battery) +- devres_release_group(&wacom->hdev->dev, +- &remote->remotes[i].battery.bat_desc); ++ wacom_remote_destroy_battery(wacom, i); + + if (remote->remotes[i].group.name) + devres_release_group(&wacom->hdev->dev, +@@ -2547,7 +2557,6 @@ static void wacom_remote_destroy_one(struct wacom *wacom, unsigned int index) + + remote->remotes[i].serial = 0; + remote->remotes[i].group.name = NULL; +- remote->remotes[i].battery.battery = NULL; + wacom->led.groups[i].select = WACOM_STATUS_UNKNOWN; + } + } +@@ -2632,6 +2641,9 @@ static int wacom_remote_attach_battery(struct wacom *wacom, int index) + if (remote->remotes[index].battery.battery) + return 0; + ++ if (!remote->remotes[index].active_time) ++ return 0; ++ + if (wacom->led.groups[index].select == WACOM_STATUS_UNKNOWN) + return 0; + +@@ -2647,6 +2659,7 @@ static void wacom_remote_work(struct work_struct *work) + { + struct wacom *wacom = container_of(work, struct wacom, remote_work); + struct wacom_remote *remote = wacom->remote; ++ ktime_t kt = ktime_get(); + struct wacom_remote_data data; + unsigned long flags; + unsigned int count; +@@ -2673,6 +2686,10 @@ static void wacom_remote_work(struct work_struct *work) + serial = data.remote[i].serial; + if (data.remote[i].connected) { + ++ if (kt - remote->remotes[i].active_time > WACOM_REMOTE_BATTERY_TIMEOUT ++ && remote->remotes[i].active_time != 0) ++ wacom_remote_destroy_battery(wacom, i); ++ + if (remote->remotes[i].serial == serial) { + wacom_remote_attach_battery(wacom, i); + continue; +diff --git a/drivers/hid/wacom_wac.c b/drivers/hid/wacom_wac.c +index 174bf03908d7c..6c056f8844e70 100644 +--- a/drivers/hid/wacom_wac.c ++++ b/drivers/hid/wacom_wac.c +@@ -1134,6 +1134,7 @@ static int wacom_remote_irq(struct wacom_wac *wacom_wac, size_t len) + if (index < 0 || !remote->remotes[index].registered) + goto out; + ++ remote->remotes[i].active_time = ktime_get(); + input = remote->remotes[index].input; + + input_report_key(input, BTN_0, (data[9] & 0x01)); +diff --git a/drivers/hid/wacom_wac.h b/drivers/hid/wacom_wac.h +index ee21bb260f22f..2e7cc5e7a0cb7 100644 +--- a/drivers/hid/wacom_wac.h ++++ b/drivers/hid/wacom_wac.h +@@ -13,6 +13,7 @@ + #define WACOM_NAME_MAX 64 + #define WACOM_MAX_REMOTES 5 + #define WACOM_STATUS_UNKNOWN 255 ++#define WACOM_REMOTE_BATTERY_TIMEOUT 21000000000ll + + /* packet length for individual models */ + #define WACOM_PKGLEN_BBFUN 9 +diff --git a/drivers/mmc/host/Kconfig b/drivers/mmc/host/Kconfig +index 159a3e9490aed..554e67103c1a1 100644 +--- a/drivers/mmc/host/Kconfig ++++ b/drivers/mmc/host/Kconfig +@@ -526,11 +526,12 @@ config MMC_ALCOR + of Alcor Micro PCI-E card reader + + config MMC_AU1X +- tristate "Alchemy AU1XX0 MMC Card Interface support" ++ bool "Alchemy AU1XX0 MMC Card Interface support" + depends on MIPS_ALCHEMY ++ depends on MMC=y + help + This selects the AMD Alchemy(R) Multimedia card interface. +- If you have a Alchemy platform with a MMC slot, say Y or M here. ++ If you have a Alchemy platform with a MMC slot, say Y here. + + If unsure, say N. + +diff --git a/drivers/net/ethernet/freescale/enetc/enetc_ptp.c b/drivers/net/ethernet/freescale/enetc/enetc_ptp.c +index 17c097cef7d45..5243fc0310589 100644 +--- a/drivers/net/ethernet/freescale/enetc/enetc_ptp.c ++++ b/drivers/net/ethernet/freescale/enetc/enetc_ptp.c +@@ -8,7 +8,7 @@ + #include "enetc.h" + + int enetc_phc_index = -1; +-EXPORT_SYMBOL(enetc_phc_index); ++EXPORT_SYMBOL_GPL(enetc_phc_index); + + static struct ptp_clock_info enetc_ptp_caps = { + .owner = THIS_MODULE, +diff --git a/drivers/net/wireless/ath/ath11k/dp_tx.c b/drivers/net/wireless/ath/ath11k/dp_tx.c +index a34833de7c676..b85a4a03b37ab 100644 +--- a/drivers/net/wireless/ath/ath11k/dp_tx.c ++++ b/drivers/net/wireless/ath/ath11k/dp_tx.c +@@ -344,7 +344,7 @@ ath11k_dp_tx_htt_tx_complete_buf(struct ath11k_base *ab, + dma_unmap_single(ab->dev, skb_cb->paddr, msdu->len, DMA_TO_DEVICE); + + if (!skb_cb->vif) { +- dev_kfree_skb_any(msdu); ++ ieee80211_free_txskb(ar->hw, msdu); + return; + } + +@@ -369,7 +369,7 @@ ath11k_dp_tx_htt_tx_complete_buf(struct ath11k_base *ab, + "dp_tx: failed to find the peer with peer_id %d\n", + ts->peer_id); + spin_unlock_bh(&ab->base_lock); +- dev_kfree_skb_any(msdu); ++ ieee80211_free_txskb(ar->hw, msdu); + return; + } + spin_unlock_bh(&ab->base_lock); +@@ -566,12 +566,12 @@ static void ath11k_dp_tx_complete_msdu(struct ath11k *ar, + dma_unmap_single(ab->dev, skb_cb->paddr, msdu->len, DMA_TO_DEVICE); + + if (unlikely(!rcu_access_pointer(ab->pdevs_active[ar->pdev_idx]))) { +- dev_kfree_skb_any(msdu); ++ ieee80211_free_txskb(ar->hw, msdu); + return; + } + + if (unlikely(!skb_cb->vif)) { +- dev_kfree_skb_any(msdu); ++ ieee80211_free_txskb(ar->hw, msdu); + return; + } + +@@ -624,7 +624,7 @@ static void ath11k_dp_tx_complete_msdu(struct ath11k *ar, + "dp_tx: failed to find the peer with peer_id %d\n", + ts->peer_id); + spin_unlock_bh(&ab->base_lock); +- dev_kfree_skb_any(msdu); ++ ieee80211_free_txskb(ar->hw, msdu); + return; + } + arsta = (struct ath11k_sta *)peer->sta->drv_priv; +diff --git a/drivers/net/wireless/mediatek/mt76/mt76_connac_mac.c b/drivers/net/wireless/mediatek/mt76/mt76_connac_mac.c +index d39a3cc5e381f..be4d63db5f64a 100644 +--- a/drivers/net/wireless/mediatek/mt76/mt76_connac_mac.c ++++ b/drivers/net/wireless/mediatek/mt76/mt76_connac_mac.c +@@ -495,6 +495,7 @@ void mt76_connac2_mac_write_txwi(struct mt76_dev *dev, __le32 *txwi, + BSS_CHANGED_BEACON_ENABLED)); + bool inband_disc = !!(changed & (BSS_CHANGED_UNSOL_BCAST_PROBE_RESP | + BSS_CHANGED_FILS_DISCOVERY)); ++ bool amsdu_en = wcid->amsdu; + + if (vif) { + struct mt76_vif *mvif = (struct mt76_vif *)vif->drv_priv; +@@ -554,12 +555,14 @@ void mt76_connac2_mac_write_txwi(struct mt76_dev *dev, __le32 *txwi, + txwi[4] = 0; + + val = FIELD_PREP(MT_TXD5_PID, pid); +- if (pid >= MT_PACKET_ID_FIRST) ++ if (pid >= MT_PACKET_ID_FIRST) { + val |= MT_TXD5_TX_STATUS_HOST; ++ amsdu_en = amsdu_en && !is_mt7921(dev); ++ } + + txwi[5] = cpu_to_le32(val); + txwi[6] = 0; +- txwi[7] = wcid->amsdu ? cpu_to_le32(MT_TXD7_HW_AMSDU) : 0; ++ txwi[7] = amsdu_en ? cpu_to_le32(MT_TXD7_HW_AMSDU) : 0; + + if (is_8023) + mt76_connac2_mac_write_txwi_8023(txwi, skb, wcid); +diff --git a/drivers/net/wireless/mediatek/mt76/mt7921/main.c b/drivers/net/wireless/mediatek/mt76/mt7921/main.c +index 3b6adb29cbef1..0e3ada1e008cd 100644 +--- a/drivers/net/wireless/mediatek/mt76/mt7921/main.c ++++ b/drivers/net/wireless/mediatek/mt76/mt7921/main.c +@@ -1363,7 +1363,7 @@ mt7921_set_antenna(struct ieee80211_hw *hw, u32 tx_ant, u32 rx_ant) + return -EINVAL; + + if ((BIT(hweight8(tx_ant)) - 1) != tx_ant) +- tx_ant = BIT(ffs(tx_ant) - 1) - 1; ++ return -EINVAL; + + mt7921_mutex_acquire(dev); + +diff --git a/drivers/net/wireless/realtek/rtw88/usb.c b/drivers/net/wireless/realtek/rtw88/usb.c +index 4a57efdba97bb..875a61c9c80d4 100644 +--- a/drivers/net/wireless/realtek/rtw88/usb.c ++++ b/drivers/net/wireless/realtek/rtw88/usb.c +@@ -844,7 +844,7 @@ int rtw_usb_probe(struct usb_interface *intf, const struct usb_device_id *id) + + ret = rtw_core_init(rtwdev); + if (ret) +- goto err_release_hw; ++ goto err_free_rx_bufs; + + ret = rtw_usb_intf_init(rtwdev, intf); + if (ret) { +@@ -890,6 +890,9 @@ err_destroy_usb: + err_deinit_core: + rtw_core_deinit(rtwdev); + ++err_free_rx_bufs: ++ rtw_usb_free_rx_bufs(rtwusb); ++ + err_release_hw: + ieee80211_free_hw(hw); + +diff --git a/drivers/pinctrl/pinctrl-amd.c b/drivers/pinctrl/pinctrl-amd.c +index 4dff656af3ad2..74241b2ff21e3 100644 +--- a/drivers/pinctrl/pinctrl-amd.c ++++ b/drivers/pinctrl/pinctrl-amd.c +@@ -748,7 +748,7 @@ static int amd_pinconf_get(struct pinctrl_dev *pctldev, + break; + + default: +- dev_err(&gpio_dev->pdev->dev, "Invalid config param %04x\n", ++ dev_dbg(&gpio_dev->pdev->dev, "Invalid config param %04x\n", + param); + return -ENOTSUPP; + } +@@ -798,7 +798,7 @@ static int amd_pinconf_set(struct pinctrl_dev *pctldev, unsigned int pin, + break; + + default: +- dev_err(&gpio_dev->pdev->dev, ++ dev_dbg(&gpio_dev->pdev->dev, + "Invalid config param %04x\n", param); + ret = -ENOTSUPP; + } +diff --git a/drivers/rtc/rtc-ds1685.c b/drivers/rtc/rtc-ds1685.c +index 0f707be0eb87f..04dbf35cf3b70 100644 +--- a/drivers/rtc/rtc-ds1685.c ++++ b/drivers/rtc/rtc-ds1685.c +@@ -1432,7 +1432,7 @@ ds1685_rtc_poweroff(struct platform_device *pdev) + unreachable(); + } + } +-EXPORT_SYMBOL(ds1685_rtc_poweroff); ++EXPORT_SYMBOL_GPL(ds1685_rtc_poweroff); + /* ----------------------------------------------------------------------- */ + + +diff --git a/drivers/staging/rtl8712/os_intfs.c b/drivers/staging/rtl8712/os_intfs.c +index a2f3645be0cc8..b18e6d9c832b8 100644 +--- a/drivers/staging/rtl8712/os_intfs.c ++++ b/drivers/staging/rtl8712/os_intfs.c +@@ -327,6 +327,7 @@ int r8712_init_drv_sw(struct _adapter *padapter) + mp871xinit(padapter); + init_default_value(padapter); + r8712_InitSwLeds(padapter); ++ mutex_init(&padapter->mutex_start); + + return 0; + +diff --git a/drivers/staging/rtl8712/usb_intf.c b/drivers/staging/rtl8712/usb_intf.c +index 37364d3101e21..df05213f922f4 100644 +--- a/drivers/staging/rtl8712/usb_intf.c ++++ b/drivers/staging/rtl8712/usb_intf.c +@@ -567,7 +567,6 @@ static int r871xu_drv_init(struct usb_interface *pusb_intf, + if (rtl871x_load_fw(padapter)) + goto deinit_drv_sw; + init_completion(&padapter->rx_filter_ready); +- mutex_init(&padapter->mutex_start); + return 0; + + deinit_drv_sw: +diff --git a/drivers/tty/serial/qcom_geni_serial.c b/drivers/tty/serial/qcom_geni_serial.c +index daaf2a64e7f1f..54b22cbc0fcef 100644 +--- a/drivers/tty/serial/qcom_geni_serial.c ++++ b/drivers/tty/serial/qcom_geni_serial.c +@@ -126,6 +126,7 @@ struct qcom_geni_serial_port { + dma_addr_t rx_dma_addr; + bool setup; + unsigned int baud; ++ unsigned long clk_rate; + void *rx_buf; + u32 loopback; + bool brk; +@@ -1249,6 +1250,7 @@ static void qcom_geni_serial_set_termios(struct uart_port *uport, + baud * sampling_rate, clk_rate, clk_div); + + uport->uartclk = clk_rate; ++ port->clk_rate = clk_rate; + dev_pm_opp_set_rate(uport->dev, clk_rate); + ser_clk_cfg = SER_CLK_EN; + ser_clk_cfg |= clk_div << CLK_DIV_SHFT; +@@ -1513,10 +1515,13 @@ static void qcom_geni_serial_pm(struct uart_port *uport, + + if (new_state == UART_PM_STATE_ON && old_state == UART_PM_STATE_OFF) { + geni_icc_enable(&port->se); ++ if (port->clk_rate) ++ dev_pm_opp_set_rate(uport->dev, port->clk_rate); + geni_se_resources_on(&port->se); + } else if (new_state == UART_PM_STATE_OFF && + old_state == UART_PM_STATE_ON) { + geni_se_resources_off(&port->se); ++ dev_pm_opp_set_rate(uport->dev, 0); + geni_icc_disable(&port->se); + } + } +diff --git a/drivers/tty/serial/sc16is7xx.c b/drivers/tty/serial/sc16is7xx.c +index 2e7e7c409cf2e..faeb3dc371c05 100644 +--- a/drivers/tty/serial/sc16is7xx.c ++++ b/drivers/tty/serial/sc16is7xx.c +@@ -1342,9 +1342,18 @@ static int sc16is7xx_gpio_direction_output(struct gpio_chip *chip, + state |= BIT(offset); + else + state &= ~BIT(offset); +- sc16is7xx_port_write(port, SC16IS7XX_IOSTATE_REG, state); ++ ++ /* ++ * If we write IOSTATE first, and then IODIR, the output value is not ++ * transferred to the corresponding I/O pin. ++ * The datasheet states that each register bit will be transferred to ++ * the corresponding I/O pin programmed as output when writing to ++ * IOSTATE. Therefore, configure direction first with IODIR, and then ++ * set value after with IOSTATE. ++ */ + sc16is7xx_port_update(port, SC16IS7XX_IODIR_REG, BIT(offset), + BIT(offset)); ++ sc16is7xx_port_write(port, SC16IS7XX_IOSTATE_REG, state); + + return 0; + } +@@ -1436,6 +1445,12 @@ static int sc16is7xx_probe(struct device *dev, + s->p[i].port.fifosize = SC16IS7XX_FIFO_SIZE; + s->p[i].port.flags = UPF_FIXED_TYPE | UPF_LOW_LATENCY; + s->p[i].port.iobase = i; ++ /* ++ * Use all ones as membase to make sure uart_configure_port() in ++ * serial_core.c does not abort for SPI/I2C devices where the ++ * membase address is not applicable. ++ */ ++ s->p[i].port.membase = (void __iomem *)~0; + s->p[i].port.iotype = UPIO_PORT; + s->p[i].port.uartclk = freq; + s->p[i].port.rs485_config = sc16is7xx_config_rs485; +diff --git a/drivers/usb/chipidea/ci_hdrc_imx.c b/drivers/usb/chipidea/ci_hdrc_imx.c +index 336ef6dd8e7d8..873539f9a2c0a 100644 +--- a/drivers/usb/chipidea/ci_hdrc_imx.c ++++ b/drivers/usb/chipidea/ci_hdrc_imx.c +@@ -175,10 +175,12 @@ static struct imx_usbmisc_data *usbmisc_get_init_data(struct device *dev) + if (of_usb_get_phy_mode(np) == USBPHY_INTERFACE_MODE_ULPI) + data->ulpi = 1; + +- of_property_read_u32(np, "samsung,picophy-pre-emp-curr-control", +- &data->emp_curr_control); +- of_property_read_u32(np, "samsung,picophy-dc-vol-level-adjust", +- &data->dc_vol_level_adjust); ++ if (of_property_read_u32(np, "samsung,picophy-pre-emp-curr-control", ++ &data->emp_curr_control)) ++ data->emp_curr_control = -1; ++ if (of_property_read_u32(np, "samsung,picophy-dc-vol-level-adjust", ++ &data->dc_vol_level_adjust)) ++ data->dc_vol_level_adjust = -1; + + return data; + } +diff --git a/drivers/usb/chipidea/usbmisc_imx.c b/drivers/usb/chipidea/usbmisc_imx.c +index 9ee9621e2ccca..1c7932f22218a 100644 +--- a/drivers/usb/chipidea/usbmisc_imx.c ++++ b/drivers/usb/chipidea/usbmisc_imx.c +@@ -659,13 +659,15 @@ static int usbmisc_imx7d_init(struct imx_usbmisc_data *data) + usbmisc->base + MX7D_USBNC_USB_CTRL2); + /* PHY tuning for signal quality */ + reg = readl(usbmisc->base + MX7D_USB_OTG_PHY_CFG1); +- if (data->emp_curr_control && data->emp_curr_control <= ++ if (data->emp_curr_control >= 0 && ++ data->emp_curr_control <= + (TXPREEMPAMPTUNE0_MASK >> TXPREEMPAMPTUNE0_BIT)) { + reg &= ~TXPREEMPAMPTUNE0_MASK; + reg |= (data->emp_curr_control << TXPREEMPAMPTUNE0_BIT); + } + +- if (data->dc_vol_level_adjust && data->dc_vol_level_adjust <= ++ if (data->dc_vol_level_adjust >= 0 && ++ data->dc_vol_level_adjust <= + (TXVREFTUNE0_MASK >> TXVREFTUNE0_BIT)) { + reg &= ~TXVREFTUNE0_MASK; + reg |= (data->dc_vol_level_adjust << TXVREFTUNE0_BIT); +diff --git a/drivers/usb/dwc3/dwc3-meson-g12a.c b/drivers/usb/dwc3/dwc3-meson-g12a.c +index e99c7489dba02..2c07c038b584d 100644 +--- a/drivers/usb/dwc3/dwc3-meson-g12a.c ++++ b/drivers/usb/dwc3/dwc3-meson-g12a.c +@@ -926,6 +926,12 @@ static int __maybe_unused dwc3_meson_g12a_resume(struct device *dev) + return ret; + } + ++ if (priv->drvdata->usb_post_init) { ++ ret = priv->drvdata->usb_post_init(priv); ++ if (ret) ++ return ret; ++ } ++ + return 0; + } + +diff --git a/drivers/usb/serial/option.c b/drivers/usb/serial/option.c +index 8ac98e60fff56..7994a4549a6c8 100644 +--- a/drivers/usb/serial/option.c ++++ b/drivers/usb/serial/option.c +@@ -259,6 +259,7 @@ static void option_instat_callback(struct urb *urb); + #define QUECTEL_PRODUCT_EM05G 0x030a + #define QUECTEL_PRODUCT_EM060K 0x030b + #define QUECTEL_PRODUCT_EM05G_CS 0x030c ++#define QUECTEL_PRODUCT_EM05GV2 0x030e + #define QUECTEL_PRODUCT_EM05CN_SG 0x0310 + #define QUECTEL_PRODUCT_EM05G_SG 0x0311 + #define QUECTEL_PRODUCT_EM05CN 0x0312 +@@ -1188,6 +1189,8 @@ static const struct usb_device_id option_ids[] = { + .driver_info = RSVD(6) | ZLP }, + { USB_DEVICE_INTERFACE_CLASS(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_EM05G, 0xff), + .driver_info = RSVD(6) | ZLP }, ++ { USB_DEVICE_INTERFACE_CLASS(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_EM05GV2, 0xff), ++ .driver_info = RSVD(4) | ZLP }, + { USB_DEVICE_INTERFACE_CLASS(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_EM05G_CS, 0xff), + .driver_info = RSVD(6) | ZLP }, + { USB_DEVICE_INTERFACE_CLASS(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_EM05G_GR, 0xff), +@@ -2232,6 +2235,10 @@ static const struct usb_device_id option_ids[] = { + .driver_info = RSVD(0) | RSVD(1) | RSVD(6) }, + { USB_DEVICE_INTERFACE_CLASS(0x0489, 0xe0db, 0xff), /* Foxconn T99W265 MBIM */ + .driver_info = RSVD(3) }, ++ { USB_DEVICE_INTERFACE_CLASS(0x0489, 0xe0ee, 0xff), /* Foxconn T99W368 MBIM */ ++ .driver_info = RSVD(3) }, ++ { USB_DEVICE_INTERFACE_CLASS(0x0489, 0xe0f0, 0xff), /* Foxconn T99W373 MBIM */ ++ .driver_info = RSVD(3) }, + { USB_DEVICE(0x1508, 0x1001), /* Fibocom NL668 (IOT version) */ + .driver_info = RSVD(4) | RSVD(5) | RSVD(6) }, + { USB_DEVICE(0x1782, 0x4d10) }, /* Fibocom L610 (AT mode) */ +diff --git a/drivers/usb/typec/tcpm/tcpci.c b/drivers/usb/typec/tcpm/tcpci.c +index fc708c289a73a..0ee3e6e29bb17 100644 +--- a/drivers/usb/typec/tcpm/tcpci.c ++++ b/drivers/usb/typec/tcpm/tcpci.c +@@ -602,6 +602,10 @@ static int tcpci_init(struct tcpc_dev *tcpc) + if (time_after(jiffies, timeout)) + return -ETIMEDOUT; + ++ ret = tcpci_write16(tcpci, TCPC_FAULT_STATUS, TCPC_FAULT_STATUS_ALL_REG_RST_TO_DEFAULT); ++ if (ret < 0) ++ return ret; ++ + /* Handle vendor init */ + if (tcpci->data->init) { + ret = tcpci->data->init(tcpci, tcpci->data); +diff --git a/drivers/usb/typec/tcpm/tcpm.c b/drivers/usb/typec/tcpm/tcpm.c +index cc1d839264977..bf97b81ff5b07 100644 +--- a/drivers/usb/typec/tcpm/tcpm.c ++++ b/drivers/usb/typec/tcpm/tcpm.c +@@ -2753,6 +2753,13 @@ static void tcpm_pd_ctrl_request(struct tcpm_port *port, + port->sink_cap_done = true; + tcpm_set_state(port, ready_state(port), 0); + break; ++ /* ++ * Some port partners do not support GET_STATUS, avoid soft reset the link to ++ * prevent redundant power re-negotiation ++ */ ++ case GET_STATUS_SEND: ++ tcpm_set_state(port, ready_state(port), 0); ++ break; + case SRC_READY: + case SNK_READY: + if (port->vdm_state > VDM_STATE_READY) { +diff --git a/fs/erofs/zdata.c b/fs/erofs/zdata.c +index de4f12152b62f..9c9350eb17040 100644 +--- a/fs/erofs/zdata.c ++++ b/fs/erofs/zdata.c +@@ -1038,6 +1038,8 @@ hitted: + cur = end - min_t(erofs_off_t, offset + end - map->m_la, end); + if (!(map->m_flags & EROFS_MAP_MAPPED)) { + zero_user_segment(page, cur, end); ++ ++spiltted; ++ tight = false; + goto next_part; + } + if (map->m_flags & EROFS_MAP_FRAGMENT) { +diff --git a/fs/nilfs2/alloc.c b/fs/nilfs2/alloc.c +index 6ce8617b562d5..7342de296ec3c 100644 +--- a/fs/nilfs2/alloc.c ++++ b/fs/nilfs2/alloc.c +@@ -205,7 +205,8 @@ static int nilfs_palloc_get_block(struct inode *inode, unsigned long blkoff, + int ret; + + spin_lock(lock); +- if (prev->bh && blkoff == prev->blkoff) { ++ if (prev->bh && blkoff == prev->blkoff && ++ likely(buffer_uptodate(prev->bh))) { + get_bh(prev->bh); + *bhp = prev->bh; + spin_unlock(lock); +diff --git a/fs/nilfs2/inode.c b/fs/nilfs2/inode.c +index 35bc793053180..acf7a266f72f5 100644 +--- a/fs/nilfs2/inode.c ++++ b/fs/nilfs2/inode.c +@@ -1025,7 +1025,7 @@ int nilfs_load_inode_block(struct inode *inode, struct buffer_head **pbh) + int err; + + spin_lock(&nilfs->ns_inode_lock); +- if (ii->i_bh == NULL) { ++ if (ii->i_bh == NULL || unlikely(!buffer_uptodate(ii->i_bh))) { + spin_unlock(&nilfs->ns_inode_lock); + err = nilfs_ifile_get_inode_block(ii->i_root->ifile, + inode->i_ino, pbh); +@@ -1034,7 +1034,10 @@ int nilfs_load_inode_block(struct inode *inode, struct buffer_head **pbh) + spin_lock(&nilfs->ns_inode_lock); + if (ii->i_bh == NULL) + ii->i_bh = *pbh; +- else { ++ else if (unlikely(!buffer_uptodate(ii->i_bh))) { ++ __brelse(ii->i_bh); ++ ii->i_bh = *pbh; ++ } else { + brelse(*pbh); + *pbh = ii->i_bh; + } +diff --git a/fs/smb/server/auth.c b/fs/smb/server/auth.c +index 5e5e120edcc22..15e5684e328c1 100644 +--- a/fs/smb/server/auth.c ++++ b/fs/smb/server/auth.c +@@ -355,6 +355,9 @@ int ksmbd_decode_ntlmssp_auth_blob(struct authenticate_message *authblob, + if (blob_len < (u64)sess_key_off + sess_key_len) + return -EINVAL; + ++ if (sess_key_len > CIFS_KEY_SIZE) ++ return -EINVAL; ++ + ctx_arc4 = kmalloc(sizeof(*ctx_arc4), GFP_KERNEL); + if (!ctx_arc4) + return -ENOMEM; +diff --git a/fs/smb/server/oplock.c b/fs/smb/server/oplock.c +index 844b303baf293..90edd8522d291 100644 +--- a/fs/smb/server/oplock.c ++++ b/fs/smb/server/oplock.c +@@ -1492,7 +1492,7 @@ struct create_context *smb2_find_context_vals(void *open_req, const char *tag, i + name_len < 4 || + name_off + name_len > cc_len || + (value_off & 0x7) != 0 || +- (value_off && (value_off < name_off + name_len)) || ++ (value_len && value_off < name_off + (name_len < 8 ? 8 : name_len)) || + ((u64)value_off + value_len > cc_len)) + return ERR_PTR(-EINVAL); + +diff --git a/fs/smb/server/smb2pdu.c b/fs/smb/server/smb2pdu.c +index 7cc1b0c47d0a2..687b750a35bf7 100644 +--- a/fs/smb/server/smb2pdu.c ++++ b/fs/smb/server/smb2pdu.c +@@ -4308,7 +4308,7 @@ static int smb2_get_ea(struct ksmbd_work *work, struct ksmbd_file *fp, + if (!strncmp(name, XATTR_USER_PREFIX, XATTR_USER_PREFIX_LEN)) + name_len -= XATTR_USER_PREFIX_LEN; + +- ptr = (char *)(&eainfo->name + name_len + 1); ++ ptr = eainfo->name + name_len + 1; + buf_free_len -= (offsetof(struct smb2_ea_info, name) + + name_len + 1); + /* bailout if xattr can't fit in buf_free_len */ +diff --git a/fs/smb/server/smb2pdu.h b/fs/smb/server/smb2pdu.h +index 2767c08a534a3..d12cfd3b09278 100644 +--- a/fs/smb/server/smb2pdu.h ++++ b/fs/smb/server/smb2pdu.h +@@ -361,7 +361,7 @@ struct smb2_ea_info { + __u8 Flags; + __u8 EaNameLength; + __le16 EaValueLength; +- char name[1]; ++ char name[]; + /* optionally followed by value */ + } __packed; /* level 15 Query */ + +diff --git a/fs/smb/server/transport_rdma.c b/fs/smb/server/transport_rdma.c +index c06efc020bd95..7578200f63b1d 100644 +--- a/fs/smb/server/transport_rdma.c ++++ b/fs/smb/server/transport_rdma.c +@@ -1366,24 +1366,35 @@ static int smb_direct_rdma_xmit(struct smb_direct_transport *t, + LIST_HEAD(msg_list); + char *desc_buf; + int credits_needed; +- unsigned int desc_buf_len; +- size_t total_length = 0; ++ unsigned int desc_buf_len, desc_num = 0; + + if (t->status != SMB_DIRECT_CS_CONNECTED) + return -ENOTCONN; + ++ if (buf_len > t->max_rdma_rw_size) ++ return -EINVAL; ++ + /* calculate needed credits */ + credits_needed = 0; + desc_buf = buf; + for (i = 0; i < desc_len / sizeof(*desc); i++) { ++ if (!buf_len) ++ break; ++ + desc_buf_len = le32_to_cpu(desc[i].length); ++ if (!desc_buf_len) ++ return -EINVAL; ++ ++ if (desc_buf_len > buf_len) { ++ desc_buf_len = buf_len; ++ desc[i].length = cpu_to_le32(desc_buf_len); ++ buf_len = 0; ++ } + + credits_needed += calc_rw_credits(t, desc_buf, desc_buf_len); + desc_buf += desc_buf_len; +- total_length += desc_buf_len; +- if (desc_buf_len == 0 || total_length > buf_len || +- total_length > t->max_rdma_rw_size) +- return -EINVAL; ++ buf_len -= desc_buf_len; ++ desc_num++; + } + + ksmbd_debug(RDMA, "RDMA %s, len %#x, needed credits %#x\n", +@@ -1395,7 +1406,7 @@ static int smb_direct_rdma_xmit(struct smb_direct_transport *t, + + /* build rdma_rw_ctx for each descriptor */ + desc_buf = buf; +- for (i = 0; i < desc_len / sizeof(*desc); i++) { ++ for (i = 0; i < desc_num; i++) { + msg = kzalloc(offsetof(struct smb_direct_rdma_rw_msg, sg_list) + + sizeof(struct scatterlist) * SG_CHUNK_SIZE, GFP_KERNEL); + if (!msg) { +diff --git a/include/linux/usb/tcpci.h b/include/linux/usb/tcpci.h +index 85e95a3251d34..83376473ac765 100644 +--- a/include/linux/usb/tcpci.h ++++ b/include/linux/usb/tcpci.h +@@ -103,6 +103,7 @@ + #define TCPC_POWER_STATUS_SINKING_VBUS BIT(0) + + #define TCPC_FAULT_STATUS 0x1f ++#define TCPC_FAULT_STATUS_ALL_REG_RST_TO_DEFAULT BIT(7) + + #define TCPC_ALERT_EXTENDED 0x21 + +diff --git a/kernel/module/main.c b/kernel/module/main.c +index ff7cc4e292990..98fedfdb8db52 100644 +--- a/kernel/module/main.c ++++ b/kernel/module/main.c +@@ -1295,12 +1295,20 @@ void *__symbol_get(const char *symbol) + }; + + preempt_disable(); +- if (!find_symbol(&fsa) || strong_try_module_get(fsa.owner)) { +- preempt_enable(); +- return NULL; ++ if (!find_symbol(&fsa)) ++ goto fail; ++ if (fsa.license != GPL_ONLY) { ++ pr_warn("failing symbol_get of non-GPLONLY symbol %s.\n", ++ symbol); ++ goto fail; + } ++ if (strong_try_module_get(fsa.owner)) ++ goto fail; + preempt_enable(); + return (void *)kernel_symbol_value(fsa.sym); ++fail: ++ preempt_enable(); ++ return NULL; + } + EXPORT_SYMBOL_GPL(__symbol_get); + +diff --git a/kernel/trace/trace.c b/kernel/trace/trace.c +index 8e64aaad53619..2656ca3b9b39c 100644 +--- a/kernel/trace/trace.c ++++ b/kernel/trace/trace.c +@@ -9486,7 +9486,7 @@ static struct trace_array *trace_array_create(const char *name) + if (!alloc_cpumask_var(&tr->tracing_cpumask, GFP_KERNEL)) + goto out_free_tr; + +- if (!alloc_cpumask_var(&tr->pipe_cpumask, GFP_KERNEL)) ++ if (!zalloc_cpumask_var(&tr->pipe_cpumask, GFP_KERNEL)) + goto out_free_tr; + + tr->trace_flags = global_trace.trace_flags & ~ZEROED_TRACE_FLAGS; +@@ -10431,7 +10431,7 @@ __init static int tracer_alloc_buffers(void) + if (trace_create_savedcmd() < 0) + goto out_free_temp_buffer; + +- if (!alloc_cpumask_var(&global_trace.pipe_cpumask, GFP_KERNEL)) ++ if (!zalloc_cpumask_var(&global_trace.pipe_cpumask, GFP_KERNEL)) + goto out_free_savedcmd; + + /* TODO: make the number of buffers hot pluggable with CPUS */ +diff --git a/sound/usb/stream.c b/sound/usb/stream.c +index f10f4e6d3fb85..3d4add94e367d 100644 +--- a/sound/usb/stream.c ++++ b/sound/usb/stream.c +@@ -1093,6 +1093,7 @@ static int __snd_usb_parse_audio_interface(struct snd_usb_audio *chip, + int i, altno, err, stream; + struct audioformat *fp = NULL; + struct snd_usb_power_domain *pd = NULL; ++ bool set_iface_first; + int num, protocol; + + dev = chip->dev; +@@ -1223,11 +1224,19 @@ static int __snd_usb_parse_audio_interface(struct snd_usb_audio *chip, + return err; + } + ++ set_iface_first = false; ++ if (protocol == UAC_VERSION_1 || ++ (chip->quirk_flags & QUIRK_FLAG_SET_IFACE_FIRST)) ++ set_iface_first = true; ++ + /* try to set the interface... */ + usb_set_interface(chip->dev, iface_no, 0); ++ if (set_iface_first) ++ usb_set_interface(chip->dev, iface_no, altno); + snd_usb_init_pitch(chip, fp); + snd_usb_init_sample_rate(chip, fp, fp->rate_max); +- usb_set_interface(chip->dev, iface_no, altno); ++ if (!set_iface_first) ++ usb_set_interface(chip->dev, iface_no, altno); + } + return 0; + }