From: Greg Kroah-Hartman Date: Tue, 15 Jul 2025 12:15:19 +0000 (+0200) Subject: drop a bunch of patches that were "skipping" stable releases X-Git-Tag: v5.4.296~17 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=63c9f8ac446a6412cd5d7a6061e1650ac4b50e11;p=thirdparty%2Fkernel%2Fstable-queue.git drop a bunch of patches that were "skipping" stable releases i.e. only going to older ones, not newer ones, something went wrong here... --- diff --git a/queue-5.10/bluetooth-hci-set-extended-advertising-data-synchron.patch b/queue-5.10/bluetooth-hci-set-extended-advertising-data-synchron.patch deleted file mode 100644 index a790c88638..0000000000 --- a/queue-5.10/bluetooth-hci-set-extended-advertising-data-synchron.patch +++ /dev/null @@ -1,97 +0,0 @@ -From 8766e406adb9b3c4bd8c0506a71bbbf99a43906d Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Sat, 12 Jul 2025 02:08:03 -0400 -Subject: Bluetooth: HCI: Set extended advertising data synchronously - -From: Christian Eggers - -[ Upstream commit 89fb8acc38852116d38d721ad394aad7f2871670 ] - -Currently, for controllers with extended advertising, the advertising -data is set in the asynchronous response handler for extended -adverstising params. As most advertising settings are performed in a -synchronous context, the (asynchronous) setting of the advertising data -is done too late (after enabling the advertising). - -Move setting of adverstising data from asynchronous response handler -into synchronous context to fix ordering of HCI commands. - -Signed-off-by: Christian Eggers -Fixes: a0fb3726ba55 ("Bluetooth: Use Set ext adv/scan rsp data if controller supports") -Cc: stable@vger.kernel.org -v2: https://lore.kernel.org/linux-bluetooth/20250626115209.17839-1-ceggers@arri.de/ -Signed-off-by: Luiz Augusto von Dentz -Signed-off-by: Sasha Levin ---- - net/bluetooth/hci_event.c | 33 --------------------------------- - net/bluetooth/hci_request.c | 3 +++ - 2 files changed, 3 insertions(+), 33 deletions(-) - -diff --git a/net/bluetooth/hci_event.c b/net/bluetooth/hci_event.c -index 7f26c1aab9a06..2cc4aaba09abe 100644 ---- a/net/bluetooth/hci_event.c -+++ b/net/bluetooth/hci_event.c -@@ -1726,36 +1726,6 @@ static void hci_cc_set_adv_param(struct hci_dev *hdev, struct sk_buff *skb) - hci_dev_unlock(hdev); - } - --static void hci_cc_set_ext_adv_param(struct hci_dev *hdev, struct sk_buff *skb) --{ -- struct hci_rp_le_set_ext_adv_params *rp = (void *) skb->data; -- struct hci_cp_le_set_ext_adv_params *cp; -- struct adv_info *adv_instance; -- -- BT_DBG("%s status 0x%2.2x", hdev->name, rp->status); -- -- if (rp->status) -- return; -- -- cp = hci_sent_cmd_data(hdev, HCI_OP_LE_SET_EXT_ADV_PARAMS); -- if (!cp) -- return; -- -- hci_dev_lock(hdev); -- hdev->adv_addr_type = cp->own_addr_type; -- if (!hdev->cur_adv_instance) { -- /* Store in hdev for instance 0 */ -- hdev->adv_tx_power = rp->tx_power; -- } else { -- adv_instance = hci_find_adv_instance(hdev, -- hdev->cur_adv_instance); -- if (adv_instance) -- adv_instance->tx_power = rp->tx_power; -- } -- /* Update adv data as tx power is known now */ -- hci_req_update_adv_data(hdev, hdev->cur_adv_instance); -- hci_dev_unlock(hdev); --} - - static void hci_cc_read_rssi(struct hci_dev *hdev, struct sk_buff *skb) - { -@@ -3601,9 +3571,6 @@ static void hci_cmd_complete_evt(struct hci_dev *hdev, struct sk_buff *skb, - hci_cc_le_read_num_adv_sets(hdev, skb); - break; - -- case HCI_OP_LE_SET_EXT_ADV_PARAMS: -- hci_cc_set_ext_adv_param(hdev, skb); -- break; - - case HCI_OP_LE_SET_EXT_ADV_ENABLE: - hci_cc_le_set_ext_adv_enable(hdev, skb); -diff --git a/net/bluetooth/hci_request.c b/net/bluetooth/hci_request.c -index 7ce6db1ac558a..743ba58941f8b 100644 ---- a/net/bluetooth/hci_request.c -+++ b/net/bluetooth/hci_request.c -@@ -2179,6 +2179,9 @@ int __hci_req_setup_ext_adv_instance(struct hci_request *req, u8 instance) - - hci_req_add(req, HCI_OP_LE_SET_EXT_ADV_PARAMS, sizeof(cp), &cp); - -+ /* Update adv data after setting ext adv params */ -+ __hci_req_update_adv_data(req, instance); -+ - if (own_addr_type == ADDR_LE_DEV_RANDOM && - bacmp(&random_addr, BDADDR_ANY)) { - struct hci_cp_le_set_adv_set_rand_addr cp; --- -2.39.5 - diff --git a/queue-5.10/btrfs-fix-inode-lookup-error-handling-during-log-rep.patch b/queue-5.10/btrfs-fix-inode-lookup-error-handling-during-log-rep.patch deleted file mode 100644 index 962c53a9e2..0000000000 --- a/queue-5.10/btrfs-fix-inode-lookup-error-handling-during-log-rep.patch +++ /dev/null @@ -1,340 +0,0 @@ -From e15b371eabf4c0fe7cff14155cb392813ab5709a Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Wed, 18 Jun 2025 15:58:31 +0100 -Subject: btrfs: fix inode lookup error handling during log replay - -From: Filipe Manana - -[ Upstream commit 5f61b961599acbd2bed028d3089105a1f7d224b8 ] - -When replaying log trees we use read_one_inode() to get an inode, which is -just a wrapper around btrfs_iget_logging(), which in turn is a wrapper for -btrfs_iget(). But read_one_inode() always returns NULL for any error -that btrfs_iget_logging() / btrfs_iget() may return and this is a problem -because: - -1) In many callers of read_one_inode() we convert the NULL into -EIO, - which is not accurate since btrfs_iget() may return -ENOMEM and -ENOENT - for example, besides -EIO and other errors. So during log replay we - may end up reporting a false -EIO, which is confusing since we may - not have had any IO error at all; - -2) When replaying directory deletes, at replay_dir_deletes(), we assume - the NULL returned from read_one_inode() means that the inode doesn't - exist and then proceed as if no error had happened. This is wrong - because unless btrfs_iget() returned ERR_PTR(-ENOENT), we had an - actual error and the target inode may exist in the target subvolume - root - this may later result in the log replay code failing at a - later stage (if we are "lucky") or succeed but leaving some - inconsistency in the filesystem. - -So fix this by not ignoring errors from btrfs_iget_logging() and as -a consequence remove the read_one_inode() wrapper and just use -btrfs_iget_logging() directly. Also since btrfs_iget_logging() is -supposed to be called only against subvolume roots, just like -read_one_inode() which had a comment about it, add an assertion to -btrfs_iget_logging() to check that the target root corresponds to a -subvolume root. - -Fixes: 5d4f98a28c7d ("Btrfs: Mixed back reference (FORWARD ROLLING FORMAT CHANGE)") -Reviewed-by: Johannes Thumshirn -Reviewed-by: Qu Wenruo -Signed-off-by: Filipe Manana -Signed-off-by: David Sterba -Signed-off-by: Sasha Levin ---- - fs/btrfs/tree-log.c | 153 ++++++++++++++++++++++++-------------------- - 1 file changed, 84 insertions(+), 69 deletions(-) - -diff --git a/fs/btrfs/tree-log.c b/fs/btrfs/tree-log.c -index dd1c40019412c..503be060fa8f3 100644 ---- a/fs/btrfs/tree-log.c -+++ b/fs/btrfs/tree-log.c -@@ -4,10 +4,12 @@ - */ - - #include -+#include - #include - #include - #include - #include -+#include - #include "misc.h" - #include "ctree.h" - #include "tree-log.h" -@@ -129,6 +131,27 @@ static noinline int replay_dir_deletes(struct btrfs_trans_handle *trans, - * and once to do all the other items. - */ - -+static struct inode *btrfs_iget_logging(u64 objectid, struct btrfs_root *root) -+{ -+ unsigned int nofs_flag; -+ struct inode *inode; -+ -+ /* Only meant to be called for subvolume roots and not for log roots. */ -+ ASSERT(is_fstree(root->root_key.objectid)); -+ -+ /* -+ * We're holding a transaction handle whether we are logging or -+ * replaying a log tree, so we must make sure NOFS semantics apply -+ * because btrfs_alloc_inode() may be triggered and it uses GFP_KERNEL -+ * to allocate an inode, which can recurse back into the filesystem and -+ * attempt a transaction commit, resulting in a deadlock. -+ */ -+ nofs_flag = memalloc_nofs_save(); -+ inode = btrfs_iget(root->fs_info->sb, objectid, root); -+ memalloc_nofs_restore(nofs_flag); -+ -+ return inode; -+} - /* - * start a sub transaction and setup the log tree - * this increments the log tree writer count to make the people -@@ -543,20 +566,6 @@ static noinline int overwrite_item(struct btrfs_trans_handle *trans, - return 0; - } - --/* -- * simple helper to read an inode off the disk from a given root -- * This can only be called for subvolume roots and not for the log -- */ --static noinline struct inode *read_one_inode(struct btrfs_root *root, -- u64 objectid) --{ -- struct inode *inode; -- -- inode = btrfs_iget(root->fs_info->sb, objectid, root); -- if (IS_ERR(inode)) -- inode = NULL; -- return inode; --} - - /* replays a single extent in 'eb' at 'slot' with 'key' into the - * subvolume 'root'. path is released on entry and should be released -@@ -610,11 +619,9 @@ static noinline int replay_one_extent(struct btrfs_trans_handle *trans, - goto out; - } - -- inode = read_one_inode(root, key->objectid); -- if (!inode) { -- ret = -EIO; -- goto out; -- } -+ inode = btrfs_iget_logging(key->objectid, root); -+ if (IS_ERR(inode)) -+ return PTR_ERR(inode); - - /* - * first check to see if we already have this extent in the -@@ -871,9 +878,10 @@ static noinline int drop_one_dir_item(struct btrfs_trans_handle *trans, - read_extent_buffer(leaf, name, (unsigned long)(di + 1), name_len); - btrfs_release_path(path); - -- inode = read_one_inode(root, location.objectid); -- if (!inode) { -- ret = -EIO; -+ inode = btrfs_iget_logging(location.objectid, root); -+ if (IS_ERR(inode)) { -+ ret = PTR_ERR(inode); -+ inode = NULL; - goto out; - } - -@@ -1115,10 +1123,10 @@ static inline int __add_inode_ref(struct btrfs_trans_handle *trans, - kfree(victim_name); - return ret; - } else if (!ret) { -- ret = -ENOENT; -- victim_parent = read_one_inode(root, -- parent_objectid); -- if (victim_parent) { -+ victim_parent = btrfs_iget_logging(parent_objectid, root); -+ if (IS_ERR(victim_parent)) { -+ ret = PTR_ERR(victim_parent); -+ } else { - inc_nlink(&inode->vfs_inode); - btrfs_release_path(path); - -@@ -1278,9 +1286,9 @@ static int unlink_old_inode_refs(struct btrfs_trans_handle *trans, - struct inode *dir; - - btrfs_release_path(path); -- dir = read_one_inode(root, parent_id); -- if (!dir) { -- ret = -ENOENT; -+ dir = btrfs_iget_logging(parent_id, root); -+ if (IS_ERR(dir)) { -+ ret = PTR_ERR(dir); - kfree(name); - goto out; - } -@@ -1386,9 +1394,9 @@ static int add_link(struct btrfs_trans_handle *trans, struct btrfs_root *root, - */ - btrfs_dir_item_key_to_cpu(path->nodes[0], dir_item, &key); - btrfs_release_path(path); -- other_inode = read_one_inode(root, key.objectid); -- if (!other_inode) { -- ret = -ENOENT; -+ other_inode = btrfs_iget_logging(key.objectid, root); -+ if (IS_ERR(other_inode)) { -+ ret = PTR_ERR(other_inode); - goto out; - } - ret = btrfs_unlink_inode(trans, root, BTRFS_I(dir), BTRFS_I(other_inode), -@@ -1464,15 +1472,17 @@ static noinline int add_inode_ref(struct btrfs_trans_handle *trans, - * copy the back ref in. The link count fixup code will take - * care of the rest - */ -- dir = read_one_inode(root, parent_objectid); -- if (!dir) { -- ret = -ENOENT; -+ dir = btrfs_iget_logging(parent_objectid, root); -+ if (IS_ERR(dir)) { -+ ret = PTR_ERR(dir); -+ dir = NULL; - goto out; - } - -- inode = read_one_inode(root, inode_objectid); -- if (!inode) { -- ret = -EIO; -+ inode = btrfs_iget_logging(inode_objectid, root); -+ if (IS_ERR(inode)) { -+ ret = PTR_ERR(inode); -+ inode = NULL; - goto out; - } - -@@ -1484,11 +1494,13 @@ static noinline int add_inode_ref(struct btrfs_trans_handle *trans, - * parent object can change from one array - * item to another. - */ -- if (!dir) -- dir = read_one_inode(root, parent_objectid); - if (!dir) { -- ret = -ENOENT; -- goto out; -+ dir = btrfs_iget_logging(parent_objectid, root); -+ if (IS_ERR(dir)) { -+ ret = PTR_ERR(dir); -+ dir = NULL; -+ goto out; -+ } - } - } else { - ret = ref_get_fields(eb, ref_ptr, &namelen, &name, -@@ -1807,9 +1819,9 @@ static noinline int fixup_inode_link_counts(struct btrfs_trans_handle *trans, - break; - - btrfs_release_path(path); -- inode = read_one_inode(root, key.offset); -- if (!inode) { -- ret = -EIO; -+ inode = btrfs_iget_logging(key.offset, root); -+ if (IS_ERR(inode)) { -+ ret = PTR_ERR(inode); - break; - } - -@@ -1844,9 +1856,9 @@ static noinline int link_to_fixup_dir(struct btrfs_trans_handle *trans, - int ret = 0; - struct inode *inode; - -- inode = read_one_inode(root, objectid); -- if (!inode) -- return -EIO; -+ inode = btrfs_iget_logging(objectid, root); -+ if (IS_ERR(inode)) -+ return PTR_ERR(inode); - - key.objectid = BTRFS_TREE_LOG_FIXUP_OBJECTID; - key.type = BTRFS_ORPHAN_ITEM_KEY; -@@ -1884,14 +1896,14 @@ static noinline int insert_one_name(struct btrfs_trans_handle *trans, - struct inode *dir; - int ret; - -- inode = read_one_inode(root, location->objectid); -- if (!inode) -- return -ENOENT; -+ inode = btrfs_iget_logging(location->objectid, root); -+ if (IS_ERR(inode)) -+ return PTR_ERR(inode); - -- dir = read_one_inode(root, dirid); -- if (!dir) { -+ dir = btrfs_iget_logging(dirid, root); -+ if (IS_ERR(dir)) { - iput(inode); -- return -EIO; -+ return PTR_ERR(dir); - } - - ret = btrfs_add_link(trans, BTRFS_I(dir), BTRFS_I(inode), name, -@@ -1939,9 +1951,9 @@ static noinline int replay_one_name(struct btrfs_trans_handle *trans, - bool update_size = (key->type == BTRFS_DIR_INDEX_KEY); - bool name_added = false; - -- dir = read_one_inode(root, key->objectid); -- if (!dir) -- return -EIO; -+ dir = btrfs_iget_logging(key->objectid, root); -+ if (IS_ERR(dir)) -+ return PTR_ERR(dir); - - name_len = btrfs_dir_name_len(eb, di); - name = kmalloc(name_len, GFP_NOFS); -@@ -2287,10 +2299,10 @@ static noinline int check_item_in_log(struct btrfs_trans_handle *trans, - btrfs_dir_item_key_to_cpu(eb, di, &location); - btrfs_release_path(path); - btrfs_release_path(log_path); -- inode = read_one_inode(root, location.objectid); -- if (!inode) { -+ inode = btrfs_iget_logging(location.objectid, root); -+ if (IS_ERR(inode)) { - kfree(name); -- return -EIO; -+ return PTR_ERR(inode); - } - - ret = link_to_fixup_dir(trans, root, -@@ -2466,14 +2478,17 @@ static noinline int replay_dir_deletes(struct btrfs_trans_handle *trans, - if (!log_path) - return -ENOMEM; - -- dir = read_one_inode(root, dirid); -- /* it isn't an error if the inode isn't there, that can happen -- * because we replay the deletes before we copy in the inode item -- * from the log -+ dir = btrfs_iget_logging(dirid, root); -+ /* -+ * It isn't an error if the inode isn't there, that can happen because -+ * we replay the deletes before we copy in the inode item from the log. - */ -- if (!dir) { -+ if (IS_ERR(dir)) { - btrfs_free_path(log_path); -- return 0; -+ ret = PTR_ERR(dir); -+ if (ret == -ENOENT) -+ ret = 0; -+ return ret; - } - again: - range_start = 0; -@@ -2633,9 +2648,9 @@ static int replay_one_buffer(struct btrfs_root *log, struct extent_buffer *eb, - struct inode *inode; - u64 from; - -- inode = read_one_inode(root, key.objectid); -- if (!inode) { -- ret = -EIO; -+ inode = btrfs_iget_logging(key.objectid, root); -+ if (IS_ERR(inode)) { -+ ret = PTR_ERR(inode); - break; - } - from = ALIGN(i_size_read(inode), --- -2.39.5 - diff --git a/queue-5.10/revert-usb-host-xhci-mvebu-make-usb-3.0-phy-optional.patch b/queue-5.10/revert-usb-host-xhci-mvebu-make-usb-3.0-phy-optional.patch deleted file mode 100644 index c5332d9a4b..0000000000 --- a/queue-5.10/revert-usb-host-xhci-mvebu-make-usb-3.0-phy-optional.patch +++ /dev/null @@ -1,184 +0,0 @@ -From 720a670541807bcc58302ef5309baead96c5b16f Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Thu, 3 Feb 2022 22:44:43 +0100 -Subject: Revert "usb: host: xhci: mvebu: make USB 3.0 PHY optional for Armada - 3720" -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -From: Pali Rohár - -[ Upstream commit 8e10548f7f4814e530857d2049d6af6bc78add53 ] - -This reverts commit 3241929b67d28c83945d3191c6816a3271fd6b85. - -Armada 3720 phy driver (phy-mvebu-a3700-comphy.c) does not return --EOPNOTSUPP from phy_power_on() callback anymore. - -So remove XHCI_SKIP_PHY_INIT flag from xhci_mvebu_a3700_plat_setup() and -then also whole xhci_mvebu_a3700_plat_setup() function which is there just -to handle -EOPNOTSUPP for XHCI_SKIP_PHY_INIT. - -xhci plat_setup callback is not used by any other xhci plat driver, so -remove this callback completely. - -Signed-off-by: Pali Rohár -Signed-off-by: Marek Behún -Acked-by: Miquel Raynal -Acked-by: Greg Kroah-Hartman -Link: https://lore.kernel.org/r/20220203214444.1508-5-kabel@kernel.org -Signed-off-by: Vinod Koul -Stable-dep-of: cd65ee81240e ("xhci: Disable stream for xHC controller with XHCI_BROKEN_STREAMS") -Signed-off-by: Sasha Levin ---- - drivers/usb/host/xhci-mvebu.c | 42 ----------------------------------- - drivers/usb/host/xhci-mvebu.h | 6 ----- - drivers/usb/host/xhci-plat.c | 20 +---------------- - drivers/usb/host/xhci-plat.h | 1 - - 4 files changed, 1 insertion(+), 68 deletions(-) - -diff --git a/drivers/usb/host/xhci-mvebu.c b/drivers/usb/host/xhci-mvebu.c -index eabccf25796b2..87f1597a0e5ab 100644 ---- a/drivers/usb/host/xhci-mvebu.c -+++ b/drivers/usb/host/xhci-mvebu.c -@@ -8,7 +8,6 @@ - #include - #include - #include --#include - - #include - #include -@@ -75,47 +74,6 @@ int xhci_mvebu_mbus_init_quirk(struct usb_hcd *hcd) - return 0; - } - --int xhci_mvebu_a3700_plat_setup(struct usb_hcd *hcd) --{ -- struct xhci_hcd *xhci = hcd_to_xhci(hcd); -- struct device *dev = hcd->self.controller; -- struct phy *phy; -- int ret; -- -- /* Old bindings miss the PHY handle */ -- phy = of_phy_get(dev->of_node, "usb3-phy"); -- if (IS_ERR(phy) && PTR_ERR(phy) == -EPROBE_DEFER) -- return -EPROBE_DEFER; -- else if (IS_ERR(phy)) -- goto phy_out; -- -- ret = phy_init(phy); -- if (ret) -- goto phy_put; -- -- ret = phy_set_mode(phy, PHY_MODE_USB_HOST_SS); -- if (ret) -- goto phy_exit; -- -- ret = phy_power_on(phy); -- if (ret == -EOPNOTSUPP) { -- /* Skip initializatin of XHCI PHY when it is unsupported by firmware */ -- dev_warn(dev, "PHY unsupported by firmware\n"); -- xhci->quirks |= XHCI_SKIP_PHY_INIT; -- } -- if (ret) -- goto phy_exit; -- -- phy_power_off(phy); --phy_exit: -- phy_exit(phy); --phy_put: -- of_phy_put(phy); --phy_out: -- -- return 0; --} -- - int xhci_mvebu_a3700_init_quirk(struct usb_hcd *hcd) - { - struct xhci_hcd *xhci = hcd_to_xhci(hcd); -diff --git a/drivers/usb/host/xhci-mvebu.h b/drivers/usb/host/xhci-mvebu.h -index 01bf3fcb3eca5..3be021793cc8b 100644 ---- a/drivers/usb/host/xhci-mvebu.h -+++ b/drivers/usb/host/xhci-mvebu.h -@@ -12,7 +12,6 @@ struct usb_hcd; - - #if IS_ENABLED(CONFIG_USB_XHCI_MVEBU) - int xhci_mvebu_mbus_init_quirk(struct usb_hcd *hcd); --int xhci_mvebu_a3700_plat_setup(struct usb_hcd *hcd); - int xhci_mvebu_a3700_init_quirk(struct usb_hcd *hcd); - #else - static inline int xhci_mvebu_mbus_init_quirk(struct usb_hcd *hcd) -@@ -20,11 +19,6 @@ static inline int xhci_mvebu_mbus_init_quirk(struct usb_hcd *hcd) - return 0; - } - --static inline int xhci_mvebu_a3700_plat_setup(struct usb_hcd *hcd) --{ -- return 0; --} -- - static inline int xhci_mvebu_a3700_init_quirk(struct usb_hcd *hcd) - { - return 0; -diff --git a/drivers/usb/host/xhci-plat.c b/drivers/usb/host/xhci-plat.c -index 83c7dffa945c3..ae67985178b02 100644 ---- a/drivers/usb/host/xhci-plat.c -+++ b/drivers/usb/host/xhci-plat.c -@@ -44,16 +44,6 @@ static void xhci_priv_plat_start(struct usb_hcd *hcd) - priv->plat_start(hcd); - } - --static int xhci_priv_plat_setup(struct usb_hcd *hcd) --{ -- struct xhci_plat_priv *priv = hcd_to_xhci_priv(hcd); -- -- if (!priv->plat_setup) -- return 0; -- -- return priv->plat_setup(hcd); --} -- - static int xhci_priv_init_quirk(struct usb_hcd *hcd) - { - struct xhci_plat_priv *priv = hcd_to_xhci_priv(hcd); -@@ -121,7 +111,6 @@ static const struct xhci_plat_priv xhci_plat_marvell_armada = { - }; - - static const struct xhci_plat_priv xhci_plat_marvell_armada3700 = { -- .plat_setup = xhci_mvebu_a3700_plat_setup, - .init_quirk = xhci_mvebu_a3700_init_quirk, - }; - -@@ -344,14 +333,7 @@ static int xhci_plat_probe(struct platform_device *pdev) - - hcd->tpl_support = of_usb_host_tpl_support(sysdev->of_node); - xhci->shared_hcd->tpl_support = hcd->tpl_support; -- -- if (priv) { -- ret = xhci_priv_plat_setup(hcd); -- if (ret) -- goto disable_usb_phy; -- } -- -- if ((xhci->quirks & XHCI_SKIP_PHY_INIT) || (priv && (priv->quirks & XHCI_SKIP_PHY_INIT))) -+ if (priv && (priv->quirks & XHCI_SKIP_PHY_INIT)) - hcd->skip_phy_initialization = 1; - - if (priv && (priv->quirks & XHCI_SG_TRB_CACHE_SIZE_QUIRK)) -diff --git a/drivers/usb/host/xhci-plat.h b/drivers/usb/host/xhci-plat.h -index 29f15298e315f..f3abce238207e 100644 ---- a/drivers/usb/host/xhci-plat.h -+++ b/drivers/usb/host/xhci-plat.h -@@ -15,7 +15,6 @@ struct usb_hcd; - struct xhci_plat_priv { - const char *firmware_name; - unsigned long long quirks; -- int (*plat_setup)(struct usb_hcd *); - void (*plat_start)(struct usb_hcd *); - int (*init_quirk)(struct usb_hcd *); - int (*suspend_quirk)(struct usb_hcd *); --- -2.39.5 - diff --git a/queue-5.10/series b/queue-5.10/series index be5ee0fc06..32ff78e589 100644 --- a/queue-5.10/series +++ b/queue-5.10/series @@ -180,26 +180,10 @@ rtc-lib_test-add-module_license.patch pwm-mediatek-ensure-to-disable-clocks-in-error-path.patch netlink-fix-rmem-check-in-netlink_broadcast_deliver.patch netlink-make-sure-we-allow-at-least-one-dump-skb.patch -bluetooth-hci-set-extended-advertising-data-synchron.patch -btrfs-fix-inode-lookup-error-handling-during-log-rep.patch -xhci-allow-rpm-on-the-usb-controller-1022-43f7-by-de.patch -usb-xhci-init-root-hub-ssp-rate.patch -xhci-add-bus-number-to-some-debug-messages.patch -revert-usb-host-xhci-mvebu-make-usb-3.0-phy-optional.patch -xhci-factor-out-parts-of-xhci_gen_setup.patch -xhci-prepare-for-operation-w-o-shared-hcd.patch -usb-host-xhci-plat-create-shared-hcd-after-having-ad.patch -usb-host-xhci-plat-prepare-operation-w-o-shared-hcd.patch -xhci-disable-stream-for-xhc-controller-with-xhci_bro.patch input-xpad-add-support-for-amazon-game-controller.patch input-xpad-add-vid-for-turtle-beach-controllers.patch input-xpad-support-acer-ngr-200-controller.patch -usb-dwc3-clean-up-probe-declarations.patch -usb-xhci-move-extcaps-related-macros-to-respective-h.patch -usb-dwc3-abort-suspend-on-soft-disconnect-failure.patch -smb-client-fix-readdir-returning-wrong-type-with-pos.patch dma-buf-fix-timeout-handling-in-dma_resv_wait_timeou.patch -usb-xhci-quirk-for-data-loss-in-isoc-transfers.patch wifi-zd1211rw-fix-potential-null-pointer-dereference.patch md-raid1-fix-stack-memory-use-after-return-in-raid1_.patch net-appletalk-fix-device-refcount-leak-in-atrtr_crea.patch diff --git a/queue-5.10/smb-client-fix-readdir-returning-wrong-type-with-pos.patch b/queue-5.10/smb-client-fix-readdir-returning-wrong-type-with-pos.patch deleted file mode 100644 index 14f221f749..0000000000 --- a/queue-5.10/smb-client-fix-readdir-returning-wrong-type-with-pos.patch +++ /dev/null @@ -1,58 +0,0 @@ -From 31fa9af762eed42996a29d41a1927a98bd6fb5df Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Sun, 29 Jun 2025 19:05:05 +0200 -Subject: smb: client: fix readdir returning wrong type with POSIX extensions - -From: Philipp Kerling - -[ Upstream commit b8f89cb723b9e66f5dbd7199e4036fee34fb0de0 ] - -When SMB 3.1.1 POSIX Extensions are negotiated, userspace applications -using readdir() or getdents() calls without stat() on each individual file -(such as a simple "ls" or "find") would misidentify file types and exhibit -strange behavior such as not descending into directories. The reason for -this behavior is an oversight in the cifs_posix_to_fattr conversion -function. Instead of extracting the entry type for cf_dtype from the -properly converted cf_mode field, it tries to extract the type from the -PDU. While the wire representation of the entry mode is similar in -structure to POSIX stat(), the assignments of the entry types are -different. Applying the S_DT macro to cf_mode instead yields the correct -result. This is also what the equivalent function -smb311_posix_info_to_fattr in inode.c already does for stat() etc.; which -is why "ls -l" would give the correct file type but "ls" would not (as -identified by the colors). - -Cc: stable@vger.kernel.org -Signed-off-by: Philipp Kerling -Signed-off-by: Steve French -Signed-off-by: Sasha Levin ---- - fs/cifs/readdir.c | 4 ++-- - 1 file changed, 2 insertions(+), 2 deletions(-) - -diff --git a/fs/cifs/readdir.c b/fs/cifs/readdir.c -index 9e62d75f24651..2691785cee700 100644 ---- a/fs/cifs/readdir.c -+++ b/fs/cifs/readdir.c -@@ -276,7 +276,6 @@ cifs_posix_to_fattr(struct cifs_fattr *fattr, struct smb2_posix_info *info, - - if (fattr->cf_cifsattrs & ATTR_DIRECTORY) { - fattr->cf_mode |= S_IFDIR; -- fattr->cf_dtype = DT_DIR; - } else { - /* - * mark anything that is not a dir as regular -@@ -284,8 +283,9 @@ cifs_posix_to_fattr(struct cifs_fattr *fattr, struct smb2_posix_info *info, - * attribute and will be marked as needing revaluation - */ - fattr->cf_mode |= S_IFREG; -- fattr->cf_dtype = DT_REG; - } -+ /* Use S_DT to extract file type from cf_mode for cf_dtype */ -+ fattr->cf_dtype = S_DT(fattr->cf_mode); - - if (reparse_file_needs_reval(fattr)) - fattr->cf_flags |= CIFS_FATTR_NEED_REVAL; --- -2.39.5 - diff --git a/queue-5.10/usb-dwc3-abort-suspend-on-soft-disconnect-failure.patch b/queue-5.10/usb-dwc3-abort-suspend-on-soft-disconnect-failure.patch deleted file mode 100644 index a5e178f8a1..0000000000 --- a/queue-5.10/usb-dwc3-abort-suspend-on-soft-disconnect-failure.patch +++ /dev/null @@ -1,152 +0,0 @@ -From 28907062b07677367be1e4229fe70a0990bedef9 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Sat, 12 Jul 2025 04:38:08 -0400 -Subject: usb: dwc3: Abort suspend on soft disconnect failure - -From: Kuen-Han Tsai - -[ Upstream commit 630a1dec3b0eba2a695b9063f1c205d585cbfec9 ] - -When dwc3_gadget_soft_disconnect() fails, dwc3_suspend_common() keeps -going with the suspend, resulting in a period where the power domain is -off, but the gadget driver remains connected. Within this time frame, -invoking vbus_event_work() will cause an error as it attempts to access -DWC3 registers for endpoint disabling after the power domain has been -completely shut down. - -Abort the suspend sequence when dwc3_gadget_suspend() cannot halt the -controller and proceeds with a soft connect. - -Fixes: 9f8a67b65a49 ("usb: dwc3: gadget: fix gadget suspend/resume") -Cc: stable -Acked-by: Thinh Nguyen -Signed-off-by: Kuen-Han Tsai -Link: https://lore.kernel.org/r/20250528100315.2162699-1-khtsai@google.com -Signed-off-by: Greg Kroah-Hartman -Signed-off-by: Sasha Levin ---- - drivers/usb/dwc3/core.c | 34 +++++++++++++++++++++++++++------- - drivers/usb/dwc3/core.h | 2 ++ - drivers/usb/dwc3/gadget.c | 25 ++++++++++++++++++++++--- - 3 files changed, 51 insertions(+), 10 deletions(-) - -diff --git a/drivers/usb/dwc3/core.c b/drivers/usb/dwc3/core.c -index 3537afd17a26e..102ad4d2d4ebc 100644 ---- a/drivers/usb/dwc3/core.c -+++ b/drivers/usb/dwc3/core.c -@@ -1733,16 +1733,29 @@ static int dwc3_core_init_for_resume(struct dwc3 *dwc) - - static int dwc3_suspend_common(struct dwc3 *dwc, pm_message_t msg) - { -- unsigned long flags; - u32 reg; -+ int ret; -+ -+ if (!pm_runtime_suspended(dwc->dev) && !PMSG_IS_AUTO(msg)) { -+ dwc->susphy_state = (dwc3_readl(dwc->regs, DWC3_GUSB2PHYCFG(0)) & -+ DWC3_GUSB2PHYCFG_SUSPHY) || -+ (dwc3_readl(dwc->regs, DWC3_GUSB3PIPECTL(0)) & -+ DWC3_GUSB3PIPECTL_SUSPHY); -+ /* -+ * TI AM62 platform requires SUSPHY to be -+ * enabled for system suspend to work. -+ */ -+ if (!dwc->susphy_state) -+ dwc3_enable_susphy(dwc, true); -+ } - - switch (dwc->current_dr_role) { - case DWC3_GCTL_PRTCAP_DEVICE: - if (pm_runtime_suspended(dwc->dev)) - break; -- spin_lock_irqsave(&dwc->lock, flags); -- dwc3_gadget_suspend(dwc); -- spin_unlock_irqrestore(&dwc->lock, flags); -+ ret = dwc3_gadget_suspend(dwc); -+ if (ret) -+ return ret; - synchronize_irq(dwc->irq_gadget); - dwc3_core_exit(dwc); - break; -@@ -1773,9 +1786,9 @@ static int dwc3_suspend_common(struct dwc3 *dwc, pm_message_t msg) - break; - - if (dwc->current_otg_role == DWC3_OTG_ROLE_DEVICE) { -- spin_lock_irqsave(&dwc->lock, flags); -- dwc3_gadget_suspend(dwc); -- spin_unlock_irqrestore(&dwc->lock, flags); -+ ret = dwc3_gadget_suspend(dwc); -+ if (ret) -+ return ret; - synchronize_irq(dwc->irq_gadget); - } - -@@ -1986,6 +1999,13 @@ static void dwc3_complete(struct device *dev) - reg |= DWC3_GUCTL3_SPLITDISABLE; - dwc3_writel(dwc->regs, DWC3_GUCTL3, reg); - } -+ -+ /* -+ * Restore SUSPHY state to the original setting -+ * if it was cleared during suspend -+ */ -+ if (!dwc->susphy_state) -+ dwc3_enable_susphy(dwc, false); - } - #else - #define dwc3_complete NULL -diff --git a/drivers/usb/dwc3/core.h b/drivers/usb/dwc3/core.h -index 4ccbd2dc1bf81..97d361ab3e86f 100644 ---- a/drivers/usb/dwc3/core.h -+++ b/drivers/usb/dwc3/core.h -@@ -1269,6 +1269,8 @@ struct dwc3 { - unsigned dis_split_quirk:1; - - u16 imod_interval; -+ -+ unsigned susphy_state:1; - }; - - #define INCRX_BURST_MODE 0 -diff --git a/drivers/usb/dwc3/gadget.c b/drivers/usb/dwc3/gadget.c -index f3103baa74590..422efb4e61434 100644 ---- a/drivers/usb/dwc3/gadget.c -+++ b/drivers/usb/dwc3/gadget.c -@@ -4106,12 +4106,31 @@ void dwc3_gadget_exit(struct dwc3 *dwc) - - int dwc3_gadget_suspend(struct dwc3 *dwc) - { -+ unsigned long flags; -+ int ret; -+ - if (!dwc->gadget_driver) - return 0; - -- dwc3_gadget_run_stop(dwc, false, false); -- dwc3_disconnect_gadget(dwc); -- __dwc3_gadget_stop(dwc); -+ ret = dwc3_gadget_soft_disconnect(dwc); -+ /* -+ * Attempt to reset the controller's state. Likely no -+ * communication can be established until the host -+ * performs a port reset. -+ */ -+ if (ret && dwc->softconnect) { -+ /* Soft connect logic - similar to pullup when is_on is true */ -+ dwc3_core_soft_reset(dwc); -+ dwc3_event_buffers_setup(dwc); -+ __dwc3_gadget_start(dwc); -+ dwc3_gadget_run_stop(dwc, true, false); -+ return -EAGAIN; -+ } -+ -+ spin_lock_irqsave(&dwc->lock, flags); -+ if (dwc->gadget_driver) -+ dwc3_disconnect_gadget(dwc); -+ spin_unlock_irqrestore(&dwc->lock, flags); - - return 0; - } --- -2.39.5 - diff --git a/queue-5.10/usb-dwc3-clean-up-probe-declarations.patch b/queue-5.10/usb-dwc3-clean-up-probe-declarations.patch deleted file mode 100644 index cdec588007..0000000000 --- a/queue-5.10/usb-dwc3-clean-up-probe-declarations.patch +++ /dev/null @@ -1,42 +0,0 @@ -From 2aa5523414e8be871a769f12dd0570ae2e0017bb Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Tue, 4 Apr 2023 09:25:24 +0200 -Subject: USB: dwc3: clean up probe declarations - -From: Johan Hovold - -[ Upstream commit 9a4d7dd1990383df8ffa09d6879cecb0534405e1 ] - -Clean up the probe variable declarations by removing the stray newlines. - -Acked-by: Thinh Nguyen -Signed-off-by: Johan Hovold -Link: https://lore.kernel.org/r/20230404072524.19014-12-johan+linaro@kernel.org -Signed-off-by: Greg Kroah-Hartman -Stable-dep-of: 630a1dec3b0e ("usb: dwc3: Abort suspend on soft disconnect failure") -Signed-off-by: Sasha Levin ---- - drivers/usb/dwc3/core.c | 4 +--- - 1 file changed, 1 insertion(+), 3 deletions(-) - -diff --git a/drivers/usb/dwc3/core.c b/drivers/usb/dwc3/core.c -index 1264683d45f20..3537afd17a26e 100644 ---- a/drivers/usb/dwc3/core.c -+++ b/drivers/usb/dwc3/core.c -@@ -1526,12 +1526,10 @@ static int dwc3_probe(struct platform_device *pdev) - { - struct device *dev = &pdev->dev; - struct resource *res, dwc_res; -+ void __iomem *regs; - struct dwc3 *dwc; -- - int ret; - -- void __iomem *regs; -- - dwc = devm_kzalloc(dev, sizeof(*dwc), GFP_KERNEL); - if (!dwc) - return -ENOMEM; --- -2.39.5 - diff --git a/queue-5.10/usb-host-xhci-plat-create-shared-hcd-after-having-ad.patch b/queue-5.10/usb-host-xhci-plat-create-shared-hcd-after-having-ad.patch deleted file mode 100644 index b7085c3bc1..0000000000 --- a/queue-5.10/usb-host-xhci-plat-create-shared-hcd-after-having-ad.patch +++ /dev/null @@ -1,107 +0,0 @@ -From d77936304f8496621ce7b5796f3cf35a88e667ba Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Thu, 12 May 2022 01:04:44 +0300 -Subject: usb: host: xhci-plat: create shared hcd after having added main hcd - -From: Heiner Kallweit - -[ Upstream commit 0cf1ea040a7e2cae4776216d16d33d3898ea58de ] - -This patch is in preparation of an extension where in case of a -root hub with no ports no shared hcd will be created. -Whether one of the root hubs has no ports we figure our in -usb_add_hcd() for the primary hcd. Therefore create the shared hcd -only after this call. - -Signed-off-by: Heiner Kallweit -Signed-off-by: Mathias Nyman -Link: https://lore.kernel.org/r/20220511220450.85367-4-mathias.nyman@linux.intel.com -Signed-off-by: Greg Kroah-Hartman -Stable-dep-of: cd65ee81240e ("xhci: Disable stream for xHC controller with XHCI_BROKEN_STREAMS") -Signed-off-by: Sasha Levin ---- - drivers/usb/host/xhci-plat.c | 29 ++++++++++++++++------------- - 1 file changed, 16 insertions(+), 13 deletions(-) - -diff --git a/drivers/usb/host/xhci-plat.c b/drivers/usb/host/xhci-plat.c -index ae67985178b02..b363063edab91 100644 ---- a/drivers/usb/host/xhci-plat.c -+++ b/drivers/usb/host/xhci-plat.c -@@ -290,12 +290,6 @@ static int xhci_plat_probe(struct platform_device *pdev) - device_set_wakeup_capable(&pdev->dev, true); - - xhci->main_hcd = hcd; -- xhci->shared_hcd = __usb_create_hcd(driver, sysdev, &pdev->dev, -- dev_name(&pdev->dev), hcd); -- if (!xhci->shared_hcd) { -- ret = -ENOMEM; -- goto disable_clk; -- } - - /* imod_interval is the interrupt moderation value in nanoseconds. */ - xhci->imod_interval = 40000; -@@ -323,16 +317,16 @@ static int xhci_plat_probe(struct platform_device *pdev) - if (IS_ERR(hcd->usb_phy)) { - ret = PTR_ERR(hcd->usb_phy); - if (ret == -EPROBE_DEFER) -- goto put_usb3_hcd; -+ goto disable_clk; - hcd->usb_phy = NULL; - } else { - ret = usb_phy_init(hcd->usb_phy); - if (ret) -- goto put_usb3_hcd; -+ goto disable_clk; - } - - hcd->tpl_support = of_usb_host_tpl_support(sysdev->of_node); -- xhci->shared_hcd->tpl_support = hcd->tpl_support; -+ - if (priv && (priv->quirks & XHCI_SKIP_PHY_INIT)) - hcd->skip_phy_initialization = 1; - -@@ -343,12 +337,21 @@ static int xhci_plat_probe(struct platform_device *pdev) - if (ret) - goto disable_usb_phy; - -+ xhci->shared_hcd = __usb_create_hcd(driver, sysdev, &pdev->dev, -+ dev_name(&pdev->dev), hcd); -+ if (!xhci->shared_hcd) { -+ ret = -ENOMEM; -+ goto dealloc_usb2_hcd; -+ } -+ -+ xhci->shared_hcd->tpl_support = hcd->tpl_support; -+ - if (HCC_MAX_PSA(xhci->hcc_params) >= 4) - xhci->shared_hcd->can_do_streams = 1; - - ret = usb_add_hcd(xhci->shared_hcd, irq, IRQF_SHARED); - if (ret) -- goto dealloc_usb2_hcd; -+ goto put_usb3_hcd; - - device_enable_async_suspend(&pdev->dev); - pm_runtime_put_noidle(&pdev->dev); -@@ -362,15 +365,15 @@ static int xhci_plat_probe(struct platform_device *pdev) - return 0; - - -+put_usb3_hcd: -+ usb_put_hcd(xhci->shared_hcd); -+ - dealloc_usb2_hcd: - usb_remove_hcd(hcd); - - disable_usb_phy: - usb_phy_shutdown(hcd->usb_phy); - --put_usb3_hcd: -- usb_put_hcd(xhci->shared_hcd); -- - disable_clk: - clk_disable_unprepare(xhci->clk); - --- -2.39.5 - diff --git a/queue-5.10/usb-host-xhci-plat-prepare-operation-w-o-shared-hcd.patch b/queue-5.10/usb-host-xhci-plat-prepare-operation-w-o-shared-hcd.patch deleted file mode 100644 index 4c7e019e41..0000000000 --- a/queue-5.10/usb-host-xhci-plat-prepare-operation-w-o-shared-hcd.patch +++ /dev/null @@ -1,78 +0,0 @@ -From ccc922bf9c9e3149575629e8328d7cf3612aaef1 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Thu, 12 May 2022 01:04:45 +0300 -Subject: usb: host: xhci-plat: prepare operation w/o shared hcd - -From: Heiner Kallweit - -[ Upstream commit e0fe986972f5b6b12086c73569206dd29c520be9 ] - -This patch prepares xhci-plat for the following scenario -- If either of the root hubs has no ports, then omit shared hcd -- Main hcd can be USB3 if there are no USB2 ports - -Signed-off-by: Heiner Kallweit -Signed-off-by: Mathias Nyman -Link: https://lore.kernel.org/r/20220511220450.85367-5-mathias.nyman@linux.intel.com -Signed-off-by: Greg Kroah-Hartman -Stable-dep-of: cd65ee81240e ("xhci: Disable stream for xHC controller with XHCI_BROKEN_STREAMS") -Signed-off-by: Sasha Levin ---- - drivers/usb/host/xhci-plat.c | 31 ++++++++++++++++++------------- - 1 file changed, 18 insertions(+), 13 deletions(-) - -diff --git a/drivers/usb/host/xhci-plat.c b/drivers/usb/host/xhci-plat.c -index b363063edab91..c7fe96c9ba6a4 100644 ---- a/drivers/usb/host/xhci-plat.c -+++ b/drivers/usb/host/xhci-plat.c -@@ -180,7 +180,7 @@ static int xhci_plat_probe(struct platform_device *pdev) - struct device *sysdev, *tmpdev; - struct xhci_hcd *xhci; - struct resource *res; -- struct usb_hcd *hcd; -+ struct usb_hcd *hcd, *usb3_hcd; - int ret; - int irq; - struct xhci_plat_priv *priv = NULL; -@@ -337,21 +337,26 @@ static int xhci_plat_probe(struct platform_device *pdev) - if (ret) - goto disable_usb_phy; - -- xhci->shared_hcd = __usb_create_hcd(driver, sysdev, &pdev->dev, -- dev_name(&pdev->dev), hcd); -- if (!xhci->shared_hcd) { -- ret = -ENOMEM; -- goto dealloc_usb2_hcd; -- } -+ if (!xhci_has_one_roothub(xhci)) { -+ xhci->shared_hcd = __usb_create_hcd(driver, sysdev, &pdev->dev, -+ dev_name(&pdev->dev), hcd); -+ if (!xhci->shared_hcd) { -+ ret = -ENOMEM; -+ goto dealloc_usb2_hcd; -+ } - -- xhci->shared_hcd->tpl_support = hcd->tpl_support; -+ xhci->shared_hcd->tpl_support = hcd->tpl_support; -+ } - -- if (HCC_MAX_PSA(xhci->hcc_params) >= 4) -- xhci->shared_hcd->can_do_streams = 1; -+ usb3_hcd = xhci_get_usb3_hcd(xhci); -+ if (usb3_hcd && HCC_MAX_PSA(xhci->hcc_params) >= 4) -+ usb3_hcd->can_do_streams = 1; - -- ret = usb_add_hcd(xhci->shared_hcd, irq, IRQF_SHARED); -- if (ret) -- goto put_usb3_hcd; -+ if (xhci->shared_hcd) { -+ ret = usb_add_hcd(xhci->shared_hcd, irq, IRQF_SHARED); -+ if (ret) -+ goto put_usb3_hcd; -+ } - - device_enable_async_suspend(&pdev->dev); - pm_runtime_put_noidle(&pdev->dev); --- -2.39.5 - diff --git a/queue-5.10/usb-xhci-init-root-hub-ssp-rate.patch b/queue-5.10/usb-xhci-init-root-hub-ssp-rate.patch deleted file mode 100644 index 311c082076..0000000000 --- a/queue-5.10/usb-xhci-init-root-hub-ssp-rate.patch +++ /dev/null @@ -1,41 +0,0 @@ -From fab985a4bbc03ee869aff52710282024fc1c2a6b Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Wed, 10 Mar 2021 19:43:15 -0800 -Subject: usb: xhci: Init root hub SSP rate - -From: Thinh Nguyen - -[ Upstream commit cd8d66cfae4989ed4b99c98b0c24d0eecba7005f ] - -Initialize USB 3.x root hub SuperSpeed Plus rate. - -Acked-by: Mathias Nyman -Signed-off-by: Thinh Nguyen -Link: https://lore.kernel.org/r/f1698a96d5f9dfaefb857b95e5db6135ae0c9e93.1615432770.git.Thinh.Nguyen@synopsys.com -Signed-off-by: Greg Kroah-Hartman -Stable-dep-of: cd65ee81240e ("xhci: Disable stream for xHC controller with XHCI_BROKEN_STREAMS") -Signed-off-by: Sasha Levin ---- - drivers/usb/host/xhci.c | 2 ++ - 1 file changed, 2 insertions(+) - -diff --git a/drivers/usb/host/xhci.c b/drivers/usb/host/xhci.c -index 908445cff24f8..e45353286e1b9 100644 ---- a/drivers/usb/host/xhci.c -+++ b/drivers/usb/host/xhci.c -@@ -5272,10 +5272,12 @@ int xhci_gen_setup(struct usb_hcd *hcd, xhci_get_quirks_t get_quirks) - hcd->self.root_hub->speed = USB_SPEED_SUPER_PLUS; - hcd->self.root_hub->rx_lanes = 2; - hcd->self.root_hub->tx_lanes = 2; -+ hcd->self.root_hub->ssp_rate = USB_SSP_GEN_2x2; - break; - case 1: - hcd->speed = HCD_USB31; - hcd->self.root_hub->speed = USB_SPEED_SUPER_PLUS; -+ hcd->self.root_hub->ssp_rate = USB_SSP_GEN_2x1; - break; - } - xhci_info(xhci, "Host supports USB 3.%x %sSuperSpeed\n", --- -2.39.5 - diff --git a/queue-5.10/usb-xhci-move-extcaps-related-macros-to-respective-h.patch b/queue-5.10/usb-xhci-move-extcaps-related-macros-to-respective-h.patch deleted file mode 100644 index 4d7c38158e..0000000000 --- a/queue-5.10/usb-xhci-move-extcaps-related-macros-to-respective-h.patch +++ /dev/null @@ -1,104 +0,0 @@ -From 404887679202c521a4a732b5ae58a85c0933e981 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Mon, 28 Aug 2023 19:00:23 +0530 -Subject: usb: xhci: Move extcaps related macros to respective header file - -From: Krishna Kurapati - -[ Upstream commit 60958b3abacc4eeea21236aa61bfacd1c3520168 ] - -DWC3 driver needs access to XHCI Extended Capabilities registers to -read number of usb2 ports and usb3 ports present on multiport controller. -Since the extcaps header is sufficient to parse this info, move port_count -related macros and structure from xhci.h to xhci-ext-caps.h. - -Signed-off-by: Krishna Kurapati -Link: https://lore.kernel.org/r/20230828133033.11988-4-quic_kriskura@quicinc.com -Acked-by: Mathias Nyman -Signed-off-by: Greg Kroah-Hartman -Stable-dep-of: 630a1dec3b0e ("usb: dwc3: Abort suspend on soft disconnect failure") -Signed-off-by: Sasha Levin ---- - drivers/usb/host/xhci-ext-caps.h | 27 +++++++++++++++++++++++++++ - drivers/usb/host/xhci.h | 27 --------------------------- - 2 files changed, 27 insertions(+), 27 deletions(-) - -diff --git a/drivers/usb/host/xhci-ext-caps.h b/drivers/usb/host/xhci-ext-caps.h -index e8af0a125f84b..96eb36a587382 100644 ---- a/drivers/usb/host/xhci-ext-caps.h -+++ b/drivers/usb/host/xhci-ext-caps.h -@@ -79,6 +79,33 @@ - /* true: Controller Not Ready to accept doorbell or op reg writes after reset */ - #define XHCI_STS_CNR (1 << 11) - -+/** -+ * struct xhci_protocol_caps -+ * @revision: major revision, minor revision, capability ID, -+ * and next capability pointer. -+ * @name_string: Four ASCII characters to say which spec this xHC -+ * follows, typically "USB ". -+ * @port_info: Port offset, count, and protocol-defined information. -+ */ -+struct xhci_protocol_caps { -+ u32 revision; -+ u32 name_string; -+ u32 port_info; -+}; -+ -+#define XHCI_EXT_PORT_MAJOR(x) (((x) >> 24) & 0xff) -+#define XHCI_EXT_PORT_MINOR(x) (((x) >> 16) & 0xff) -+#define XHCI_EXT_PORT_PSIC(x) (((x) >> 28) & 0x0f) -+#define XHCI_EXT_PORT_OFF(x) ((x) & 0xff) -+#define XHCI_EXT_PORT_COUNT(x) (((x) >> 8) & 0xff) -+ -+#define XHCI_EXT_PORT_PSIV(x) (((x) >> 0) & 0x0f) -+#define XHCI_EXT_PORT_PSIE(x) (((x) >> 4) & 0x03) -+#define XHCI_EXT_PORT_PLT(x) (((x) >> 6) & 0x03) -+#define XHCI_EXT_PORT_PFD(x) (((x) >> 8) & 0x01) -+#define XHCI_EXT_PORT_LP(x) (((x) >> 14) & 0x03) -+#define XHCI_EXT_PORT_PSIM(x) (((x) >> 16) & 0xffff) -+ - #include - - /** -diff --git a/drivers/usb/host/xhci.h b/drivers/usb/host/xhci.h -index 166978caa6db3..bf3798ce716f3 100644 ---- a/drivers/usb/host/xhci.h -+++ b/drivers/usb/host/xhci.h -@@ -555,33 +555,6 @@ struct xhci_doorbell_array { - #define DB_VALUE(ep, stream) ((((ep) + 1) & 0xff) | ((stream) << 16)) - #define DB_VALUE_HOST 0x00000000 - --/** -- * struct xhci_protocol_caps -- * @revision: major revision, minor revision, capability ID, -- * and next capability pointer. -- * @name_string: Four ASCII characters to say which spec this xHC -- * follows, typically "USB ". -- * @port_info: Port offset, count, and protocol-defined information. -- */ --struct xhci_protocol_caps { -- u32 revision; -- u32 name_string; -- u32 port_info; --}; -- --#define XHCI_EXT_PORT_MAJOR(x) (((x) >> 24) & 0xff) --#define XHCI_EXT_PORT_MINOR(x) (((x) >> 16) & 0xff) --#define XHCI_EXT_PORT_PSIC(x) (((x) >> 28) & 0x0f) --#define XHCI_EXT_PORT_OFF(x) ((x) & 0xff) --#define XHCI_EXT_PORT_COUNT(x) (((x) >> 8) & 0xff) -- --#define XHCI_EXT_PORT_PSIV(x) (((x) >> 0) & 0x0f) --#define XHCI_EXT_PORT_PSIE(x) (((x) >> 4) & 0x03) --#define XHCI_EXT_PORT_PLT(x) (((x) >> 6) & 0x03) --#define XHCI_EXT_PORT_PFD(x) (((x) >> 8) & 0x01) --#define XHCI_EXT_PORT_LP(x) (((x) >> 14) & 0x03) --#define XHCI_EXT_PORT_PSIM(x) (((x) >> 16) & 0xffff) -- - #define PLT_MASK (0x03 << 6) - #define PLT_SYM (0x00 << 6) - #define PLT_ASYM_RX (0x02 << 6) --- -2.39.5 - diff --git a/queue-5.10/usb-xhci-quirk-for-data-loss-in-isoc-transfers.patch b/queue-5.10/usb-xhci-quirk-for-data-loss-in-isoc-transfers.patch deleted file mode 100644 index c3938aab5c..0000000000 --- a/queue-5.10/usb-xhci-quirk-for-data-loss-in-isoc-transfers.patch +++ /dev/null @@ -1,120 +0,0 @@ -From 7ddf51a70191e6b03869cd20216ed1fd91823335 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Fri, 27 Jun 2025 17:41:19 +0300 -Subject: usb: xhci: quirk for data loss in ISOC transfers - -From: Raju Rangoju - -[ Upstream commit cbc889ab0122366f6cdbe3c28d477c683ebcebc2 ] - -During the High-Speed Isochronous Audio transfers, xHCI -controller on certain AMD platforms experiences momentary data -loss. This results in Missed Service Errors (MSE) being -generated by the xHCI. - -The root cause of the MSE is attributed to the ISOC OUT endpoint -being omitted from scheduling. This can happen when an IN -endpoint with a 64ms service interval either is pre-scheduled -prior to the ISOC OUT endpoint or the interval of the ISOC OUT -endpoint is shorter than that of the IN endpoint. Consequently, -the OUT service is neglected when an IN endpoint with a service -interval exceeding 32ms is scheduled concurrently (every 64ms in -this scenario). - -This issue is particularly seen on certain older AMD platforms. -To mitigate this problem, it is recommended to adjust the service -interval of the IN endpoint to not exceed 32ms (interval 8). This -adjustment ensures that the OUT endpoint will not be bypassed, -even if a smaller interval value is utilized. - -Cc: stable -Signed-off-by: Raju Rangoju -Signed-off-by: Mathias Nyman -Link: https://lore.kernel.org/r/20250627144127.3889714-2-mathias.nyman@linux.intel.com -Signed-off-by: Greg Kroah-Hartman -Signed-off-by: Sasha Levin ---- - drivers/usb/host/xhci-mem.c | 4 ++++ - drivers/usb/host/xhci-pci.c | 26 ++++++++++++++++++++++++++ - drivers/usb/host/xhci.h | 1 + - 3 files changed, 31 insertions(+) - -diff --git a/drivers/usb/host/xhci-mem.c b/drivers/usb/host/xhci-mem.c -index 0891f0d21af16..5b1aa82f7701d 100644 ---- a/drivers/usb/host/xhci-mem.c -+++ b/drivers/usb/host/xhci-mem.c -@@ -1480,6 +1480,10 @@ int xhci_endpoint_init(struct xhci_hcd *xhci, - /* Periodic endpoint bInterval limit quirk */ - if (usb_endpoint_xfer_int(&ep->desc) || - usb_endpoint_xfer_isoc(&ep->desc)) { -+ if ((xhci->quirks & XHCI_LIMIT_ENDPOINT_INTERVAL_9) && -+ interval >= 9) { -+ interval = 8; -+ } - if ((xhci->quirks & XHCI_LIMIT_ENDPOINT_INTERVAL_7) && - udev->speed >= USB_SPEED_HIGH && - interval >= 7) { -diff --git a/drivers/usb/host/xhci-pci.c b/drivers/usb/host/xhci-pci.c -index 202c176eb894a..4153bed4062c9 100644 ---- a/drivers/usb/host/xhci-pci.c -+++ b/drivers/usb/host/xhci-pci.c -@@ -64,11 +64,22 @@ - #define PCI_DEVICE_ID_INTEL_ALDER_LAKE_PCH_XHCI 0x51ed - #define PCI_DEVICE_ID_INTEL_ALDER_LAKE_N_PCH_XHCI 0x54ed - -+#define PCI_DEVICE_ID_AMD_ARIEL_TYPEC_XHCI 0x13ed -+#define PCI_DEVICE_ID_AMD_ARIEL_TYPEA_XHCI 0x13ee -+#define PCI_DEVICE_ID_AMD_STARSHIP_XHCI 0x148c -+#define PCI_DEVICE_ID_AMD_FIREFLIGHT_15D4_XHCI 0x15d4 -+#define PCI_DEVICE_ID_AMD_FIREFLIGHT_15D5_XHCI 0x15d5 -+#define PCI_DEVICE_ID_AMD_RAVEN_15E0_XHCI 0x15e0 -+#define PCI_DEVICE_ID_AMD_RAVEN_15E1_XHCI 0x15e1 -+#define PCI_DEVICE_ID_AMD_RAVEN2_XHCI 0x15e5 -+#define PCI_DEVICE_ID_AMD_RENOIR_XHCI 0x1639 - #define PCI_DEVICE_ID_AMD_PROMONTORYA_4 0x43b9 - #define PCI_DEVICE_ID_AMD_PROMONTORYA_3 0x43ba - #define PCI_DEVICE_ID_AMD_PROMONTORYA_2 0x43bb - #define PCI_DEVICE_ID_AMD_PROMONTORYA_1 0x43bc - -+#define PCI_DEVICE_ID_ATI_NAVI10_7316_XHCI 0x7316 -+ - #define PCI_DEVICE_ID_ASMEDIA_1042_XHCI 0x1042 - #define PCI_DEVICE_ID_ASMEDIA_1042A_XHCI 0x1142 - #define PCI_DEVICE_ID_ASMEDIA_1142_XHCI 0x1242 -@@ -163,6 +174,21 @@ static void xhci_pci_quirks(struct device *dev, struct xhci_hcd *xhci) - if (pdev->vendor == PCI_VENDOR_ID_NEC) - xhci->quirks |= XHCI_NEC_HOST; - -+ if (pdev->vendor == PCI_VENDOR_ID_AMD && -+ (pdev->device == PCI_DEVICE_ID_AMD_ARIEL_TYPEC_XHCI || -+ pdev->device == PCI_DEVICE_ID_AMD_ARIEL_TYPEA_XHCI || -+ pdev->device == PCI_DEVICE_ID_AMD_STARSHIP_XHCI || -+ pdev->device == PCI_DEVICE_ID_AMD_FIREFLIGHT_15D4_XHCI || -+ pdev->device == PCI_DEVICE_ID_AMD_FIREFLIGHT_15D5_XHCI || -+ pdev->device == PCI_DEVICE_ID_AMD_RAVEN_15E0_XHCI || -+ pdev->device == PCI_DEVICE_ID_AMD_RAVEN_15E1_XHCI || -+ pdev->device == PCI_DEVICE_ID_AMD_RAVEN2_XHCI)) -+ xhci->quirks |= XHCI_LIMIT_ENDPOINT_INTERVAL_9; -+ -+ if (pdev->vendor == PCI_VENDOR_ID_ATI && -+ pdev->device == PCI_DEVICE_ID_ATI_NAVI10_7316_XHCI) -+ xhci->quirks |= XHCI_LIMIT_ENDPOINT_INTERVAL_9; -+ - if (pdev->vendor == PCI_VENDOR_ID_AMD && xhci->hci_version == 0x96) - xhci->quirks |= XHCI_AMD_0x96_HOST; - -diff --git a/drivers/usb/host/xhci.h b/drivers/usb/host/xhci.h -index bf3798ce716f3..18b89c1576388 100644 ---- a/drivers/usb/host/xhci.h -+++ b/drivers/usb/host/xhci.h -@@ -1877,6 +1877,7 @@ struct xhci_hcd { - #define XHCI_RESET_TO_DEFAULT BIT_ULL(44) - #define XHCI_TRB_OVERFETCH BIT_ULL(45) - #define XHCI_ZHAOXIN_HOST BIT_ULL(46) -+#define XHCI_LIMIT_ENDPOINT_INTERVAL_9 BIT_ULL(47) - - unsigned int num_active_eps; - unsigned int limit_active_eps; --- -2.39.5 - diff --git a/queue-5.10/xhci-add-bus-number-to-some-debug-messages.patch b/queue-5.10/xhci-add-bus-number-to-some-debug-messages.patch deleted file mode 100644 index e096274c14..0000000000 --- a/queue-5.10/xhci-add-bus-number-to-some-debug-messages.patch +++ /dev/null @@ -1,89 +0,0 @@ -From 18e1d600069cb425c0766c63485544ecc2554b6d Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Fri, 20 Aug 2021 15:35:03 +0300 -Subject: xhci: Add bus number to some debug messages - -From: Mathias Nyman - -[ Upstream commit 669bc5a188b40a4edc9c2a42e5b32f19182767d9 ] - -As we register two usb buses for each xHC, and systems with several -hosts are more and more common it is getting hard to follow the -flow of debug messages without knowing which bus they belong to - -Signed-off-by: Mathias Nyman -Link: https://lore.kernel.org/r/20210820123503.2605901-7-mathias.nyman@linux.intel.com -Signed-off-by: Greg Kroah-Hartman -Stable-dep-of: cd65ee81240e ("xhci: Disable stream for xHC controller with XHCI_BROKEN_STREAMS") -Signed-off-by: Sasha Levin ---- - drivers/usb/host/xhci-hub.c | 6 ++++-- - drivers/usb/host/xhci-ring.c | 3 ++- - drivers/usb/host/xhci.c | 6 ++++-- - 3 files changed, 10 insertions(+), 5 deletions(-) - -diff --git a/drivers/usb/host/xhci-hub.c b/drivers/usb/host/xhci-hub.c -index e92f920256b2e..ab28e0971e4a0 100644 ---- a/drivers/usb/host/xhci-hub.c -+++ b/drivers/usb/host/xhci-hub.c -@@ -1597,7 +1597,8 @@ int xhci_hub_status_data(struct usb_hcd *hcd, char *buf) - status = 1; - } - if (!status && !reset_change) { -- xhci_dbg(xhci, "%s: stopping port polling.\n", __func__); -+ xhci_dbg(xhci, "%s: stopping usb%d port polling\n", -+ __func__, hcd->self.busnum); - clear_bit(HCD_FLAG_POLL_RH, &hcd->flags); - } - spin_unlock_irqrestore(&xhci->lock, flags); -@@ -1629,7 +1630,8 @@ int xhci_bus_suspend(struct usb_hcd *hcd) - if (bus_state->resuming_ports || /* USB2 */ - bus_state->port_remote_wakeup) { /* USB3 */ - spin_unlock_irqrestore(&xhci->lock, flags); -- xhci_dbg(xhci, "suspend failed because a port is resuming\n"); -+ xhci_dbg(xhci, "usb%d bus suspend to fail because a port is resuming\n", -+ hcd->self.busnum); - return -EBUSY; - } - } -diff --git a/drivers/usb/host/xhci-ring.c b/drivers/usb/host/xhci-ring.c -index 954cd962e113c..6cf1688c39d4a 100644 ---- a/drivers/usb/host/xhci-ring.c -+++ b/drivers/usb/host/xhci-ring.c -@@ -1929,7 +1929,8 @@ static void handle_port_status(struct xhci_hcd *xhci, - * bits are still set. When an event occurs, switch over to - * polling to avoid losing status changes. - */ -- xhci_dbg(xhci, "%s: starting port polling.\n", __func__); -+ xhci_dbg(xhci, "%s: starting usb%d port polling.\n", -+ __func__, hcd->self.busnum); - set_bit(HCD_FLAG_POLL_RH, &hcd->flags); - spin_unlock(&xhci->lock); - /* Pass this up to the core */ -diff --git a/drivers/usb/host/xhci.c b/drivers/usb/host/xhci.c -index e45353286e1b9..26ee29e684c5d 100644 ---- a/drivers/usb/host/xhci.c -+++ b/drivers/usb/host/xhci.c -@@ -1017,7 +1017,8 @@ int xhci_suspend(struct xhci_hcd *xhci, bool do_wakeup) - xhci_dbc_suspend(xhci); - - /* Don't poll the roothubs on bus suspend. */ -- xhci_dbg(xhci, "%s: stopping port polling.\n", __func__); -+ xhci_dbg(xhci, "%s: stopping usb%d port polling.\n", -+ __func__, hcd->self.busnum); - clear_bit(HCD_FLAG_POLL_RH, &hcd->flags); - del_timer_sync(&hcd->rh_timer); - clear_bit(HCD_FLAG_POLL_RH, &xhci->shared_hcd->flags); -@@ -1289,7 +1290,8 @@ int xhci_resume(struct xhci_hcd *xhci, bool hibernated) - usb_asmedia_modifyflowcontrol(to_pci_dev(hcd->self.controller)); - - /* Re-enable port polling. */ -- xhci_dbg(xhci, "%s: starting port polling.\n", __func__); -+ xhci_dbg(xhci, "%s: starting usb%d port polling.\n", -+ __func__, hcd->self.busnum); - set_bit(HCD_FLAG_POLL_RH, &xhci->shared_hcd->flags); - usb_hcd_poll_rh_status(xhci->shared_hcd); - set_bit(HCD_FLAG_POLL_RH, &hcd->flags); --- -2.39.5 - diff --git a/queue-5.10/xhci-allow-rpm-on-the-usb-controller-1022-43f7-by-de.patch b/queue-5.10/xhci-allow-rpm-on-the-usb-controller-1022-43f7-by-de.patch deleted file mode 100644 index 017de187fa..0000000000 --- a/queue-5.10/xhci-allow-rpm-on-the-usb-controller-1022-43f7-by-de.patch +++ /dev/null @@ -1,46 +0,0 @@ -From 147b99ebb9b28be96ae25773e60c53ab43d898aa Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Mon, 4 Mar 2024 11:13:27 +0530 -Subject: xhci: Allow RPM on the USB controller (1022:43f7) by default - -From: Basavaraj Natikar - -[ Upstream commit 28cbed496059fe1868203b76e9e0ef285733524d ] - -Enable runtime PM by default for older AMD 1022:43f7 xHCI 1.1 host as it -is proven to work. -Driver enables runtime PM by default for newer xHCI 1.2 host. - -Link: https://lore.kernel.org/all/12335218.O9o76ZdvQC@natalenko.name/ -Cc: Mario Limonciello -Tested-by: Oleksandr Natalenko -Signed-off-by: Basavaraj Natikar -Acked-by: Mathias Nyman -Link: https://lore.kernel.org/r/20240304054327.2564500-1-Basavaraj.Natikar@amd.com -Signed-off-by: Greg Kroah-Hartman -Stable-dep-of: cbc889ab0122 ("usb: xhci: quirk for data loss in ISOC transfers") -Signed-off-by: Sasha Levin ---- - drivers/usb/host/xhci-pci.c | 5 ++++- - 1 file changed, 4 insertions(+), 1 deletion(-) - -diff --git a/drivers/usb/host/xhci-pci.c b/drivers/usb/host/xhci-pci.c -index 2be84d5e9261d..202c176eb894a 100644 ---- a/drivers/usb/host/xhci-pci.c -+++ b/drivers/usb/host/xhci-pci.c -@@ -186,8 +186,11 @@ static void xhci_pci_quirks(struct device *dev, struct xhci_hcd *xhci) - xhci->quirks |= XHCI_RESET_ON_RESUME; - } - -- if (pdev->vendor == PCI_VENDOR_ID_AMD) -+ if (pdev->vendor == PCI_VENDOR_ID_AMD) { - xhci->quirks |= XHCI_TRUST_TX_LENGTH; -+ if (pdev->device == 0x43f7) -+ xhci->quirks |= XHCI_DEFAULT_PM_RUNTIME_ALLOW; -+ } - - if ((pdev->vendor == PCI_VENDOR_ID_AMD) && - ((pdev->device == PCI_DEVICE_ID_AMD_PROMONTORYA_4) || --- -2.39.5 - diff --git a/queue-5.10/xhci-disable-stream-for-xhc-controller-with-xhci_bro.patch b/queue-5.10/xhci-disable-stream-for-xhc-controller-with-xhci_bro.patch deleted file mode 100644 index 80cc5306bf..0000000000 --- a/queue-5.10/xhci-disable-stream-for-xhc-controller-with-xhci_bro.patch +++ /dev/null @@ -1,39 +0,0 @@ -From 12b3dffca6f9d80893e84ecfef4bb5fd9b77f853 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Fri, 27 Jun 2025 17:41:20 +0300 -Subject: xhci: Disable stream for xHC controller with XHCI_BROKEN_STREAMS - -From: Hongyu Xie - -[ Upstream commit cd65ee81240e8bc3c3119b46db7f60c80864b90b ] - -Disable stream for platform xHC controller with broken stream. - -Fixes: 14aec589327a6 ("storage: accept some UAS devices if streams are unavailable") -Cc: stable -Signed-off-by: Hongyu Xie -Signed-off-by: Mathias Nyman -Link: https://lore.kernel.org/r/20250627144127.3889714-3-mathias.nyman@linux.intel.com -Signed-off-by: Greg Kroah-Hartman -Signed-off-by: Sasha Levin ---- - drivers/usb/host/xhci-plat.c | 3 ++- - 1 file changed, 2 insertions(+), 1 deletion(-) - -diff --git a/drivers/usb/host/xhci-plat.c b/drivers/usb/host/xhci-plat.c -index c7fe96c9ba6a4..06c303c1e353a 100644 ---- a/drivers/usb/host/xhci-plat.c -+++ b/drivers/usb/host/xhci-plat.c -@@ -349,7 +349,8 @@ static int xhci_plat_probe(struct platform_device *pdev) - } - - usb3_hcd = xhci_get_usb3_hcd(xhci); -- if (usb3_hcd && HCC_MAX_PSA(xhci->hcc_params) >= 4) -+ if (usb3_hcd && HCC_MAX_PSA(xhci->hcc_params) >= 4 && -+ !(xhci->quirks & XHCI_BROKEN_STREAMS)) - usb3_hcd->can_do_streams = 1; - - if (xhci->shared_hcd) { --- -2.39.5 - diff --git a/queue-5.10/xhci-factor-out-parts-of-xhci_gen_setup.patch b/queue-5.10/xhci-factor-out-parts-of-xhci_gen_setup.patch deleted file mode 100644 index 8298ad2037..0000000000 --- a/queue-5.10/xhci-factor-out-parts-of-xhci_gen_setup.patch +++ /dev/null @@ -1,162 +0,0 @@ -From 85016548b24f809655c16c15da229c898e2721b0 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Thu, 12 May 2022 01:04:42 +0300 -Subject: xhci: factor out parts of xhci_gen_setup() - -From: Heiner Kallweit - -[ Upstream commit 57f23cd0bf2f56d339f810a913a9c0c5abfcfc7e ] - -Factoring out parts of xhci_gen_setup() has two motivations: -- When adding functionaliy to omit shared hcd if not needed in a - subsequent patch, we'll have to call xhci_hcd_init_usb3_data() - from two places. -- It reduces size of xhci_gen_setup() and makes it better readable. - -Signed-off-by: Heiner Kallweit -Signed-off-by: Mathias Nyman -Link: https://lore.kernel.org/r/20220511220450.85367-2-mathias.nyman@linux.intel.com -Signed-off-by: Greg Kroah-Hartman -Stable-dep-of: cd65ee81240e ("xhci: Disable stream for xHC controller with XHCI_BROKEN_STREAMS") -Signed-off-by: Sasha Levin ---- - drivers/usb/host/xhci.c | 104 +++++++++++++++++++++------------------- - 1 file changed, 54 insertions(+), 50 deletions(-) - -diff --git a/drivers/usb/host/xhci.c b/drivers/usb/host/xhci.c -index 26ee29e684c5d..f2e868089ec1e 100644 ---- a/drivers/usb/host/xhci.c -+++ b/drivers/usb/host/xhci.c -@@ -5217,6 +5217,57 @@ static int xhci_get_frame(struct usb_hcd *hcd) - return readl(&xhci->run_regs->microframe_index) >> 3; - } - -+static void xhci_hcd_init_usb2_data(struct xhci_hcd *xhci, struct usb_hcd *hcd) -+{ -+ xhci->usb2_rhub.hcd = hcd; -+ hcd->speed = HCD_USB2; -+ hcd->self.root_hub->speed = USB_SPEED_HIGH; -+ /* -+ * USB 2.0 roothub under xHCI has an integrated TT, -+ * (rate matching hub) as opposed to having an OHCI/UHCI -+ * companion controller. -+ */ -+ hcd->has_tt = 1; -+} -+ -+static void xhci_hcd_init_usb3_data(struct xhci_hcd *xhci, struct usb_hcd *hcd) -+{ -+ unsigned int minor_rev; -+ -+ /* -+ * Early xHCI 1.1 spec did not mention USB 3.1 capable hosts -+ * should return 0x31 for sbrn, or that the minor revision -+ * is a two digit BCD containig minor and sub-minor numbers. -+ * This was later clarified in xHCI 1.2. -+ * -+ * Some USB 3.1 capable hosts therefore have sbrn 0x30, and -+ * minor revision set to 0x1 instead of 0x10. -+ */ -+ if (xhci->usb3_rhub.min_rev == 0x1) -+ minor_rev = 1; -+ else -+ minor_rev = xhci->usb3_rhub.min_rev / 0x10; -+ -+ switch (minor_rev) { -+ case 2: -+ hcd->speed = HCD_USB32; -+ hcd->self.root_hub->speed = USB_SPEED_SUPER_PLUS; -+ hcd->self.root_hub->rx_lanes = 2; -+ hcd->self.root_hub->tx_lanes = 2; -+ hcd->self.root_hub->ssp_rate = USB_SSP_GEN_2x2; -+ break; -+ case 1: -+ hcd->speed = HCD_USB31; -+ hcd->self.root_hub->speed = USB_SPEED_SUPER_PLUS; -+ hcd->self.root_hub->ssp_rate = USB_SSP_GEN_2x1; -+ break; -+ } -+ xhci_info(xhci, "Host supports USB 3.%x %sSuperSpeed\n", -+ minor_rev, minor_rev ? "Enhanced " : ""); -+ -+ xhci->usb3_rhub.hcd = hcd; -+} -+ - int xhci_gen_setup(struct usb_hcd *hcd, xhci_get_quirks_t get_quirks) - { - struct xhci_hcd *xhci; -@@ -5225,7 +5276,6 @@ int xhci_gen_setup(struct usb_hcd *hcd, xhci_get_quirks_t get_quirks) - * quirks - */ - struct device *dev = hcd->self.sysdev; -- unsigned int minor_rev; - int retval; - - /* Accept arbitrarily long scatter-gather lists */ -@@ -5240,60 +5290,14 @@ int xhci_gen_setup(struct usb_hcd *hcd, xhci_get_quirks_t get_quirks) - xhci = hcd_to_xhci(hcd); - - if (usb_hcd_is_primary_hcd(hcd)) { -- xhci->main_hcd = hcd; -- xhci->usb2_rhub.hcd = hcd; -- /* Mark the first roothub as being USB 2.0. -- * The xHCI driver will register the USB 3.0 roothub. -- */ -- hcd->speed = HCD_USB2; -- hcd->self.root_hub->speed = USB_SPEED_HIGH; -- /* -- * USB 2.0 roothub under xHCI has an integrated TT, -- * (rate matching hub) as opposed to having an OHCI/UHCI -- * companion controller. -- */ -- hcd->has_tt = 1; -+ xhci_hcd_init_usb2_data(xhci, hcd); - } else { -- /* -- * Early xHCI 1.1 spec did not mention USB 3.1 capable hosts -- * should return 0x31 for sbrn, or that the minor revision -- * is a two digit BCD containig minor and sub-minor numbers. -- * This was later clarified in xHCI 1.2. -- * -- * Some USB 3.1 capable hosts therefore have sbrn 0x30, and -- * minor revision set to 0x1 instead of 0x10. -- */ -- if (xhci->usb3_rhub.min_rev == 0x1) -- minor_rev = 1; -- else -- minor_rev = xhci->usb3_rhub.min_rev / 0x10; -- -- switch (minor_rev) { -- case 2: -- hcd->speed = HCD_USB32; -- hcd->self.root_hub->speed = USB_SPEED_SUPER_PLUS; -- hcd->self.root_hub->rx_lanes = 2; -- hcd->self.root_hub->tx_lanes = 2; -- hcd->self.root_hub->ssp_rate = USB_SSP_GEN_2x2; -- break; -- case 1: -- hcd->speed = HCD_USB31; -- hcd->self.root_hub->speed = USB_SPEED_SUPER_PLUS; -- hcd->self.root_hub->ssp_rate = USB_SSP_GEN_2x1; -- break; -- } -- xhci_info(xhci, "Host supports USB 3.%x %sSuperSpeed\n", -- minor_rev, -- minor_rev ? "Enhanced " : ""); -- -- xhci->usb3_rhub.hcd = hcd; -- /* xHCI private pointer was set in xhci_pci_probe for the second -- * registered roothub. -- */ -+ xhci_hcd_init_usb3_data(xhci, hcd); - return 0; - } - - mutex_init(&xhci->mutex); -+ xhci->main_hcd = hcd; - xhci->cap_regs = hcd->regs; - xhci->op_regs = hcd->regs + - HC_LENGTH(readl(&xhci->cap_regs->hc_capbase)); --- -2.39.5 - diff --git a/queue-5.10/xhci-prepare-for-operation-w-o-shared-hcd.patch b/queue-5.10/xhci-prepare-for-operation-w-o-shared-hcd.patch deleted file mode 100644 index e375b8d5ae..0000000000 --- a/queue-5.10/xhci-prepare-for-operation-w-o-shared-hcd.patch +++ /dev/null @@ -1,293 +0,0 @@ -From 047d50cb07e81cd5241655702b2da260b1a42ae9 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Thu, 12 May 2022 01:04:43 +0300 -Subject: xhci: prepare for operation w/o shared hcd - -From: Heiner Kallweit - -[ Upstream commit 873f323618c202cd0675324a1027dcecc7745d0b ] - -This patch prepares xhci for the following scenario: -- If either of the root hubs has no ports, then omit shared hcd -- Main hcd can be USB3 if there are no USB2 ports - -Signed-off-by: Heiner Kallweit -Signed-off-by: Mathias Nyman -Link: https://lore.kernel.org/r/20220511220450.85367-3-mathias.nyman@linux.intel.com -Signed-off-by: Greg Kroah-Hartman -Stable-dep-of: cd65ee81240e ("xhci: Disable stream for xHC controller with XHCI_BROKEN_STREAMS") -Signed-off-by: Sasha Levin ---- - drivers/usb/host/xhci-hub.c | 3 ++- - drivers/usb/host/xhci-mem.c | 11 ++++---- - drivers/usb/host/xhci.c | 53 ++++++++++++++++++++++++------------- - drivers/usb/host/xhci.h | 26 ++++++++++++++++++ - 4 files changed, 68 insertions(+), 25 deletions(-) - -diff --git a/drivers/usb/host/xhci-hub.c b/drivers/usb/host/xhci-hub.c -index ab28e0971e4a0..3e165d4050873 100644 ---- a/drivers/usb/host/xhci-hub.c -+++ b/drivers/usb/host/xhci-hub.c -@@ -621,6 +621,7 @@ static int xhci_enter_test_mode(struct xhci_hcd *xhci, - u16 test_mode, u16 wIndex, unsigned long *flags) - __must_hold(&xhci->lock) - { -+ struct usb_hcd *usb3_hcd = xhci_get_usb3_hcd(xhci); - int i, retval; - - /* Disable all Device Slots */ -@@ -641,7 +642,7 @@ static int xhci_enter_test_mode(struct xhci_hcd *xhci, - xhci_dbg(xhci, "Disable all port (PP = 0)\n"); - /* Power off USB3 ports*/ - for (i = 0; i < xhci->usb3_rhub.num_ports; i++) -- xhci_set_port_power(xhci, xhci->shared_hcd, i, false, flags); -+ xhci_set_port_power(xhci, usb3_hcd, i, false, flags); - /* Power off USB2 ports*/ - for (i = 0; i < xhci->usb2_rhub.num_ports; i++) - xhci_set_port_power(xhci, xhci->main_hcd, i, false, flags); -diff --git a/drivers/usb/host/xhci-mem.c b/drivers/usb/host/xhci-mem.c -index 5b0e009783229..0891f0d21af16 100644 ---- a/drivers/usb/host/xhci-mem.c -+++ b/drivers/usb/host/xhci-mem.c -@@ -1099,7 +1099,7 @@ static u32 xhci_find_real_port_number(struct xhci_hcd *xhci, - struct usb_hcd *hcd; - - if (udev->speed >= USB_SPEED_SUPER) -- hcd = xhci->shared_hcd; -+ hcd = xhci_get_usb3_hcd(xhci); - else - hcd = xhci->main_hcd; - -@@ -2415,10 +2415,11 @@ static int xhci_setup_port_arrays(struct xhci_hcd *xhci, gfp_t flags) - xhci->usb2_rhub.num_ports = USB_MAXCHILDREN; - } - -- /* -- * Note we could have all USB 3.0 ports, or all USB 2.0 ports. -- * Not sure how the USB core will handle a hub with no ports... -- */ -+ if (!xhci->usb2_rhub.num_ports) -+ xhci_info(xhci, "USB2 root hub has no ports\n"); -+ -+ if (!xhci->usb3_rhub.num_ports) -+ xhci_info(xhci, "USB3 root hub has no ports\n"); - - xhci_create_rhub_port_array(xhci, &xhci->usb2_rhub, flags); - xhci_create_rhub_port_array(xhci, &xhci->usb3_rhub, flags); -diff --git a/drivers/usb/host/xhci.c b/drivers/usb/host/xhci.c -index f2e868089ec1e..9ba1825dcbcc3 100644 ---- a/drivers/usb/host/xhci.c -+++ b/drivers/usb/host/xhci.c -@@ -490,6 +490,10 @@ static void compliance_mode_recovery(struct timer_list *t) - - xhci = from_timer(xhci, t, comp_mode_recovery_timer); - rhub = &xhci->usb3_rhub; -+ hcd = rhub->hcd; -+ -+ if (!hcd) -+ return; - - for (i = 0; i < rhub->num_ports; i++) { - temp = readl(rhub->ports[i]->addr); -@@ -503,7 +507,6 @@ static void compliance_mode_recovery(struct timer_list *t) - i + 1); - xhci_dbg_trace(xhci, trace_xhci_dbg_quirks, - "Attempting compliance mode recovery"); -- hcd = xhci->shared_hcd; - - if (hcd->state == HC_STATE_SUSPENDED) - usb_hcd_resume_root_hub(hcd); -@@ -616,14 +619,11 @@ static int xhci_run_finished(struct xhci_hcd *xhci) - xhci_halt(xhci); - return -ENODEV; - } -- xhci->shared_hcd->state = HC_STATE_RUNNING; - xhci->cmd_ring_state = CMD_RING_STATE_RUNNING; - - if (xhci->quirks & XHCI_NEC_HOST) - xhci_ring_cmd_db(xhci); - -- xhci_dbg_trace(xhci, trace_xhci_dbg_init, -- "Finished xhci_run for USB3 roothub"); - return 0; - } - -@@ -698,7 +698,7 @@ int xhci_run(struct usb_hcd *hcd) - xhci_free_command(xhci, command); - } - xhci_dbg_trace(xhci, trace_xhci_dbg_init, -- "Finished xhci_run for USB2 roothub"); -+ "Finished %s for main hcd", __func__); - - set_bit(HCD_FLAG_DEFER_RH_REGISTER, &hcd->flags); - -@@ -706,6 +706,9 @@ int xhci_run(struct usb_hcd *hcd) - - xhci_debugfs_init(xhci); - -+ if (xhci_has_one_roothub(xhci)) -+ return xhci_run_finished(xhci); -+ - return 0; - } - EXPORT_SYMBOL_GPL(xhci_run); -@@ -1004,7 +1007,7 @@ int xhci_suspend(struct xhci_hcd *xhci, bool do_wakeup) - return 0; - - if (hcd->state != HC_STATE_SUSPENDED || -- xhci->shared_hcd->state != HC_STATE_SUSPENDED) -+ (xhci->shared_hcd && xhci->shared_hcd->state != HC_STATE_SUSPENDED)) - return -EINVAL; - - /* Clear root port wake on bits if wakeup not allowed. */ -@@ -1021,15 +1024,18 @@ int xhci_suspend(struct xhci_hcd *xhci, bool do_wakeup) - __func__, hcd->self.busnum); - clear_bit(HCD_FLAG_POLL_RH, &hcd->flags); - del_timer_sync(&hcd->rh_timer); -- clear_bit(HCD_FLAG_POLL_RH, &xhci->shared_hcd->flags); -- del_timer_sync(&xhci->shared_hcd->rh_timer); -+ if (xhci->shared_hcd) { -+ clear_bit(HCD_FLAG_POLL_RH, &xhci->shared_hcd->flags); -+ del_timer_sync(&xhci->shared_hcd->rh_timer); -+ } - - if (xhci->quirks & XHCI_SUSPEND_DELAY) - usleep_range(1000, 1500); - - spin_lock_irq(&xhci->lock); - clear_bit(HCD_FLAG_HW_ACCESSIBLE, &hcd->flags); -- clear_bit(HCD_FLAG_HW_ACCESSIBLE, &xhci->shared_hcd->flags); -+ if (xhci->shared_hcd) -+ clear_bit(HCD_FLAG_HW_ACCESSIBLE, &xhci->shared_hcd->flags); - /* step 1: stop endpoint */ - /* skipped assuming that port suspend has done */ - -@@ -1129,7 +1135,8 @@ int xhci_resume(struct xhci_hcd *xhci, bool hibernated) - msleep(100); - - set_bit(HCD_FLAG_HW_ACCESSIBLE, &hcd->flags); -- set_bit(HCD_FLAG_HW_ACCESSIBLE, &xhci->shared_hcd->flags); -+ if (xhci->shared_hcd) -+ set_bit(HCD_FLAG_HW_ACCESSIBLE, &xhci->shared_hcd->flags); - - spin_lock_irq(&xhci->lock); - -@@ -1190,7 +1197,8 @@ int xhci_resume(struct xhci_hcd *xhci, bool hibernated) - - /* Let the USB core know _both_ roothubs lost power. */ - usb_root_hub_lost_power(xhci->main_hcd->self.root_hub); -- usb_root_hub_lost_power(xhci->shared_hcd->self.root_hub); -+ if (xhci->shared_hcd) -+ usb_root_hub_lost_power(xhci->shared_hcd->self.root_hub); - - xhci_dbg(xhci, "Stop HCD\n"); - xhci_halt(xhci); -@@ -1230,12 +1238,13 @@ int xhci_resume(struct xhci_hcd *xhci, bool hibernated) - - xhci_dbg(xhci, "Start the primary HCD\n"); - retval = xhci_run(hcd->primary_hcd); -- if (!retval) { -+ if (!retval && secondary_hcd) { - xhci_dbg(xhci, "Start the secondary HCD\n"); - retval = xhci_run(secondary_hcd); - } - hcd->state = HC_STATE_SUSPENDED; -- xhci->shared_hcd->state = HC_STATE_SUSPENDED; -+ if (xhci->shared_hcd) -+ xhci->shared_hcd->state = HC_STATE_SUSPENDED; - goto done; - } - -@@ -1273,7 +1282,8 @@ int xhci_resume(struct xhci_hcd *xhci, bool hibernated) - } - - if (pending_portevent) { -- usb_hcd_resume_root_hub(xhci->shared_hcd); -+ if (xhci->shared_hcd) -+ usb_hcd_resume_root_hub(xhci->shared_hcd); - usb_hcd_resume_root_hub(hcd); - } - } -@@ -1292,8 +1302,10 @@ int xhci_resume(struct xhci_hcd *xhci, bool hibernated) - /* Re-enable port polling. */ - xhci_dbg(xhci, "%s: starting usb%d port polling.\n", - __func__, hcd->self.busnum); -- set_bit(HCD_FLAG_POLL_RH, &xhci->shared_hcd->flags); -- usb_hcd_poll_rh_status(xhci->shared_hcd); -+ if (xhci->shared_hcd) { -+ set_bit(HCD_FLAG_POLL_RH, &xhci->shared_hcd->flags); -+ usb_hcd_poll_rh_status(xhci->shared_hcd); -+ } - set_bit(HCD_FLAG_POLL_RH, &hcd->flags); - usb_hcd_poll_rh_status(hcd); - -@@ -5289,9 +5301,7 @@ int xhci_gen_setup(struct usb_hcd *hcd, xhci_get_quirks_t get_quirks) - - xhci = hcd_to_xhci(hcd); - -- if (usb_hcd_is_primary_hcd(hcd)) { -- xhci_hcd_init_usb2_data(xhci, hcd); -- } else { -+ if (!usb_hcd_is_primary_hcd(hcd)) { - xhci_hcd_init_usb3_data(xhci, hcd); - return 0; - } -@@ -5373,6 +5383,11 @@ int xhci_gen_setup(struct usb_hcd *hcd, xhci_get_quirks_t get_quirks) - return retval; - xhci_dbg(xhci, "Called HCD init\n"); - -+ if (xhci_hcd_is_usb3(hcd)) -+ xhci_hcd_init_usb3_data(xhci, hcd); -+ else -+ xhci_hcd_init_usb2_data(xhci, hcd); -+ - xhci_info(xhci, "hcc params 0x%08x hci version 0x%x quirks 0x%016llx\n", - xhci->hcc_params, xhci->hci_version, xhci->quirks); - -diff --git a/drivers/usb/host/xhci.h b/drivers/usb/host/xhci.h -index 2d2e9c59add62..166978caa6db3 100644 ---- a/drivers/usb/host/xhci.h -+++ b/drivers/usb/host/xhci.h -@@ -1914,6 +1914,8 @@ struct xhci_hcd { - unsigned hw_lpm_support:1; - /* Broken Suspend flag for SNPS Suspend resume issue */ - unsigned broken_suspend:1; -+ /* Indicates that omitting hcd is supported if root hub has no ports */ -+ unsigned allow_single_roothub:1; - /* cached usb2 extened protocol capabilites */ - u32 *ext_caps; - unsigned int num_ext_caps; -@@ -1967,6 +1969,30 @@ static inline struct usb_hcd *xhci_to_hcd(struct xhci_hcd *xhci) - return xhci->main_hcd; - } - -+static inline struct usb_hcd *xhci_get_usb3_hcd(struct xhci_hcd *xhci) -+{ -+ if (xhci->shared_hcd) -+ return xhci->shared_hcd; -+ -+ if (!xhci->usb2_rhub.num_ports) -+ return xhci->main_hcd; -+ -+ return NULL; -+} -+ -+static inline bool xhci_hcd_is_usb3(struct usb_hcd *hcd) -+{ -+ struct xhci_hcd *xhci = hcd_to_xhci(hcd); -+ -+ return hcd == xhci_get_usb3_hcd(xhci); -+} -+ -+static inline bool xhci_has_one_roothub(struct xhci_hcd *xhci) -+{ -+ return xhci->allow_single_roothub && -+ (!xhci->usb2_rhub.num_ports || !xhci->usb3_rhub.num_ports); -+} -+ - #define xhci_dbg(xhci, fmt, args...) \ - dev_dbg(xhci_to_hcd(xhci)->self.controller , fmt , ## args) - #define xhci_err(xhci, fmt, args...) \ --- -2.39.5 - diff --git a/queue-5.15/btrfs-fix-inode-lookup-error-handling-during-log-rep.patch b/queue-5.15/btrfs-fix-inode-lookup-error-handling-during-log-rep.patch deleted file mode 100644 index 861e5f5842..0000000000 --- a/queue-5.15/btrfs-fix-inode-lookup-error-handling-during-log-rep.patch +++ /dev/null @@ -1,311 +0,0 @@ -From 6adb7d09869b148ebee4563459ec4a0750bd11b8 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Wed, 18 Jun 2025 15:58:31 +0100 -Subject: btrfs: fix inode lookup error handling during log replay - -From: Filipe Manana - -[ Upstream commit 5f61b961599acbd2bed028d3089105a1f7d224b8 ] - -When replaying log trees we use read_one_inode() to get an inode, which is -just a wrapper around btrfs_iget_logging(), which in turn is a wrapper for -btrfs_iget(). But read_one_inode() always returns NULL for any error -that btrfs_iget_logging() / btrfs_iget() may return and this is a problem -because: - -1) In many callers of read_one_inode() we convert the NULL into -EIO, - which is not accurate since btrfs_iget() may return -ENOMEM and -ENOENT - for example, besides -EIO and other errors. So during log replay we - may end up reporting a false -EIO, which is confusing since we may - not have had any IO error at all; - -2) When replaying directory deletes, at replay_dir_deletes(), we assume - the NULL returned from read_one_inode() means that the inode doesn't - exist and then proceed as if no error had happened. This is wrong - because unless btrfs_iget() returned ERR_PTR(-ENOENT), we had an - actual error and the target inode may exist in the target subvolume - root - this may later result in the log replay code failing at a - later stage (if we are "lucky") or succeed but leaving some - inconsistency in the filesystem. - -So fix this by not ignoring errors from btrfs_iget_logging() and as -a consequence remove the read_one_inode() wrapper and just use -btrfs_iget_logging() directly. Also since btrfs_iget_logging() is -supposed to be called only against subvolume roots, just like -read_one_inode() which had a comment about it, add an assertion to -btrfs_iget_logging() to check that the target root corresponds to a -subvolume root. - -Fixes: 5d4f98a28c7d ("Btrfs: Mixed back reference (FORWARD ROLLING FORMAT CHANGE)") -Reviewed-by: Johannes Thumshirn -Reviewed-by: Qu Wenruo -Signed-off-by: Filipe Manana -Signed-off-by: David Sterba -Signed-off-by: Sasha Levin ---- - fs/btrfs/tree-log.c | 139 +++++++++++++++++++++++++------------------- - 1 file changed, 78 insertions(+), 61 deletions(-) - -diff --git a/fs/btrfs/tree-log.c b/fs/btrfs/tree-log.c -index 7049a19e07baf..0ee7ae8f21398 100644 ---- a/fs/btrfs/tree-log.c -+++ b/fs/btrfs/tree-log.c -@@ -584,18 +584,25 @@ static noinline int overwrite_item(struct btrfs_trans_handle *trans, - return 0; - } - --/* -- * simple helper to read an inode off the disk from a given root -- * This can only be called for subvolume roots and not for the log -- */ --static noinline struct inode *read_one_inode(struct btrfs_root *root, -- u64 objectid) -+static struct inode *btrfs_iget_logging(u64 objectid, struct btrfs_root *root) - { -+ unsigned int nofs_flag; - struct inode *inode; - -+ /* Only meant to be called for subvolume roots and not for log roots. */ -+ ASSERT(is_fstree(btrfs_root_id(root))); -+ -+ /* -+ * We're holding a transaction handle whether we are logging or -+ * replaying a log tree, so we must make sure NOFS semantics apply -+ * because btrfs_alloc_inode() may be triggered and it uses GFP_KERNEL -+ * to allocate an inode, which can recurse back into the filesystem and -+ * attempt a transaction commit, resulting in a deadlock. -+ */ -+ nofs_flag = memalloc_nofs_save(); - inode = btrfs_iget(root->fs_info->sb, objectid, root); -- if (IS_ERR(inode)) -- inode = NULL; -+ memalloc_nofs_restore(nofs_flag); -+ - return inode; - } - -@@ -652,9 +659,9 @@ static noinline int replay_one_extent(struct btrfs_trans_handle *trans, - goto out; - } - -- inode = read_one_inode(root, key->objectid); -- if (!inode) { -- ret = -EIO; -+ inode = btrfs_iget_logging(key->objectid, root); -+ if (IS_ERR(inode)) { -+ ret = PTR_ERR(inode); - goto out; - } - -@@ -936,9 +943,9 @@ static noinline int drop_one_dir_item(struct btrfs_trans_handle *trans, - read_extent_buffer(leaf, name, (unsigned long)(di + 1), name_len); - btrfs_release_path(path); - -- inode = read_one_inode(root, location.objectid); -- if (!inode) { -- ret = -EIO; -+ inode = btrfs_iget_logging(location.objectid, root); -+ if (IS_ERR(inode)) { -+ ret = PTR_ERR(inode); - goto out; - } - -@@ -1173,10 +1180,12 @@ static inline int __add_inode_ref(struct btrfs_trans_handle *trans, - kfree(victim_name); - return ret; - } else if (!ret) { -- ret = -ENOENT; -- victim_parent = read_one_inode(root, -- parent_objectid); -- if (victim_parent) { -+ victim_parent = btrfs_iget_logging(parent_objectid, root); -+ if (IS_ERR(victim_parent)) { -+ ret = PTR_ERR(victim_parent); -+ kfree(victim_name); -+ return ret; -+ } else { - inc_nlink(&inode->vfs_inode); - btrfs_release_path(path); - -@@ -1333,9 +1342,9 @@ static int unlink_old_inode_refs(struct btrfs_trans_handle *trans, - struct inode *dir; - - btrfs_release_path(path); -- dir = read_one_inode(root, parent_id); -- if (!dir) { -- ret = -ENOENT; -+ dir = btrfs_iget_logging(parent_id, root); -+ if (IS_ERR(dir)) { -+ ret = PTR_ERR(dir); - kfree(name); - goto out; - } -@@ -1432,9 +1441,9 @@ static int add_link(struct btrfs_trans_handle *trans, struct btrfs_root *root, - */ - btrfs_dir_item_key_to_cpu(path->nodes[0], dir_item, &key); - btrfs_release_path(path); -- other_inode = read_one_inode(root, key.objectid); -- if (!other_inode) { -- ret = -ENOENT; -+ other_inode = btrfs_iget_logging(key.objectid, root); -+ if (IS_ERR(other_inode)) { -+ ret = PTR_ERR(other_inode); - goto out; - } - ret = unlink_inode_for_log_replay(trans, BTRFS_I(dir), BTRFS_I(other_inode), -@@ -1506,15 +1515,17 @@ static noinline int add_inode_ref(struct btrfs_trans_handle *trans, - * copy the back ref in. The link count fixup code will take - * care of the rest - */ -- dir = read_one_inode(root, parent_objectid); -- if (!dir) { -- ret = -ENOENT; -+ dir = btrfs_iget_logging(parent_objectid, root); -+ if (IS_ERR(dir)) { -+ ret = PTR_ERR(dir); -+ dir = NULL; - goto out; - } - -- inode = read_one_inode(root, inode_objectid); -- if (!inode) { -- ret = -EIO; -+ inode = btrfs_iget_logging(inode_objectid, root); -+ if (IS_ERR(inode)) { -+ ret = PTR_ERR(inode); -+ inode = NULL; - goto out; - } - -@@ -1526,11 +1537,13 @@ static noinline int add_inode_ref(struct btrfs_trans_handle *trans, - * parent object can change from one array - * item to another. - */ -- if (!dir) -- dir = read_one_inode(root, parent_objectid); - if (!dir) { -- ret = -ENOENT; -- goto out; -+ dir = btrfs_iget_logging(parent_objectid, root); -+ if (IS_ERR(dir)) { -+ ret = PTR_ERR(dir); -+ dir = NULL; -+ goto out; -+ } - } - } else { - ret = ref_get_fields(eb, ref_ptr, &namelen, &name, -@@ -1834,9 +1847,9 @@ static noinline int fixup_inode_link_counts(struct btrfs_trans_handle *trans, - break; - - btrfs_release_path(path); -- inode = read_one_inode(root, key.offset); -- if (!inode) { -- ret = -EIO; -+ inode = btrfs_iget_logging(key.offset, root); -+ if (IS_ERR(inode)) { -+ ret = PTR_ERR(inode); - break; - } - -@@ -1871,9 +1884,9 @@ static noinline int link_to_fixup_dir(struct btrfs_trans_handle *trans, - int ret = 0; - struct inode *inode; - -- inode = read_one_inode(root, objectid); -- if (!inode) -- return -EIO; -+ inode = btrfs_iget_logging(objectid, root); -+ if (IS_ERR(inode)) -+ return PTR_ERR(inode); - - key.objectid = BTRFS_TREE_LOG_FIXUP_OBJECTID; - key.type = BTRFS_ORPHAN_ITEM_KEY; -@@ -1911,14 +1924,14 @@ static noinline int insert_one_name(struct btrfs_trans_handle *trans, - struct inode *dir; - int ret; - -- inode = read_one_inode(root, location->objectid); -- if (!inode) -- return -ENOENT; -+ inode = btrfs_iget_logging(location->objectid, root); -+ if (IS_ERR(inode)) -+ return PTR_ERR(inode); - -- dir = read_one_inode(root, dirid); -- if (!dir) { -+ dir = btrfs_iget_logging(dirid, root); -+ if (IS_ERR(dir)) { - iput(inode); -- return -EIO; -+ return PTR_ERR(dir); - } - - ret = btrfs_add_link(trans, BTRFS_I(dir), BTRFS_I(inode), name, -@@ -1966,9 +1979,9 @@ static noinline int replay_one_name(struct btrfs_trans_handle *trans, - bool update_size = (key->type == BTRFS_DIR_INDEX_KEY); - bool name_added = false; - -- dir = read_one_inode(root, key->objectid); -- if (!dir) -- return -EIO; -+ dir = btrfs_iget_logging(key->objectid, root); -+ if (IS_ERR(dir)) -+ return PTR_ERR(dir); - - name_len = btrfs_dir_name_len(eb, di); - name = kmalloc(name_len, GFP_NOFS); -@@ -2318,9 +2331,10 @@ static noinline int check_item_in_log(struct btrfs_trans_handle *trans, - btrfs_dir_item_key_to_cpu(eb, di, &location); - btrfs_release_path(path); - btrfs_release_path(log_path); -- inode = read_one_inode(root, location.objectid); -- if (!inode) { -- ret = -EIO; -+ inode = btrfs_iget_logging(location.objectid, root); -+ if (IS_ERR(inode)) { -+ ret = PTR_ERR(inode); -+ inode = NULL; - goto out; - } - -@@ -2472,14 +2486,17 @@ static noinline int replay_dir_deletes(struct btrfs_trans_handle *trans, - if (!log_path) - return -ENOMEM; - -- dir = read_one_inode(root, dirid); -- /* it isn't an error if the inode isn't there, that can happen -- * because we replay the deletes before we copy in the inode item -- * from the log -+ dir = btrfs_iget_logging(dirid, root); -+ /* -+ * It isn't an error if the inode isn't there, that can happen because -+ * we replay the deletes before we copy in the inode item from the log. - */ -- if (!dir) { -+ if (IS_ERR(dir)) { - btrfs_free_path(log_path); -- return 0; -+ ret = PTR_ERR(dir); -+ if (ret == -ENOENT) -+ ret = 0; -+ return ret; - } - - range_start = 0; -@@ -2634,9 +2651,9 @@ static int replay_one_buffer(struct btrfs_root *log, struct extent_buffer *eb, - struct inode *inode; - u64 from; - -- inode = read_one_inode(root, key.objectid); -- if (!inode) { -- ret = -EIO; -+ inode = btrfs_iget_logging(key.objectid, root); -+ if (IS_ERR(inode)) { -+ ret = PTR_ERR(inode); - break; - } - from = ALIGN(i_size_read(inode), --- -2.39.5 - diff --git a/queue-5.15/series b/queue-5.15/series index 1e7732a5a2..98524b9e90 100644 --- a/queue-5.15/series +++ b/queue-5.15/series @@ -47,12 +47,10 @@ usb-cdnsp-remove-trb_flush_endpoint-command.patch usb-cdnsp-replace-snprintf-with-the-safer-scnprintf-.patch usb-cdnsp-fix-issue-with-cv-bad-descriptor-test.patch usb-dwc3-abort-suspend-on-soft-disconnect-failure.patch -smb-client-fix-readdir-returning-wrong-type-with-pos.patch dma-buf-add-dma_resv_for_each_fence_unlocked-v8.patch dma-buf-use-new-iterator-in-dma_resv_wait_timeout.patch dma-buf-fix-timeout-handling-in-dma_resv_wait_timeou.patch platform-x86-think-lmi-fix-sysfs-group-cleanup.patch -btrfs-fix-inode-lookup-error-handling-during-log-rep.patch wifi-zd1211rw-fix-potential-null-pointer-dereference.patch md-raid1-fix-stack-memory-use-after-return-in-raid1_.patch raid10-cleanup-memleak-at-raid10_make_request.patch @@ -74,3 +72,6 @@ vt-add-missing-notification-when-switching-back-to-t.patch hid-add-ignore-quirk-for-smartlinktechnology.patch hid-quirks-add-quirk-for-2-chicony-electronics-hp-5m.patch input-atkbd-do-not-skip-atkbd_deactivate-when-skipping-atkbd_cmd_getid.patch +vhost-scsi-protect-vq-log_used-with-vq-mutex.patch +x86-mm-disable-hugetlb-page-table-sharing-on-32-bit.patch +x86-fix-x86_feature_verw_clear-definition.patch diff --git a/queue-5.15/smb-client-fix-readdir-returning-wrong-type-with-pos.patch b/queue-5.15/smb-client-fix-readdir-returning-wrong-type-with-pos.patch deleted file mode 100644 index 5939a925b4..0000000000 --- a/queue-5.15/smb-client-fix-readdir-returning-wrong-type-with-pos.patch +++ /dev/null @@ -1,57 +0,0 @@ -From e0a5ae8bdad18a7b15daf2cd56ef88c44925427f Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Sat, 12 Jul 2025 03:52:17 -0400 -Subject: smb: client: fix readdir returning wrong type with POSIX extensions - -From: Philipp Kerling - -[ Upstream commit b8f89cb723b9e66f5dbd7199e4036fee34fb0de0 ] - -When SMB 3.1.1 POSIX Extensions are negotiated, userspace applications -using readdir() or getdents() calls without stat() on each individual file -(such as a simple "ls" or "find") would misidentify file types and exhibit -strange behavior such as not descending into directories. The reason for -this behavior is an oversight in the cifs_posix_to_fattr conversion -function. Instead of extracting the entry type for cf_dtype from the -properly converted cf_mode field, it tries to extract the type from the -PDU. While the wire representation of the entry mode is similar in -structure to POSIX stat(), the assignments of the entry types are -different. Applying the S_DT macro to cf_mode instead yields the correct -result. This is also what the equivalent function -smb311_posix_info_to_fattr in inode.c already does for stat() etc.; which -is why "ls -l" would give the correct file type but "ls" would not (as -identified by the colors). - -Cc: stable@vger.kernel.org -Signed-off-by: Philipp Kerling -Signed-off-by: Steve French -Signed-off-by: Sasha Levin ---- - fs/cifs/readdir.c | 3 +-- - 1 file changed, 1 insertion(+), 2 deletions(-) - -diff --git a/fs/cifs/readdir.c b/fs/cifs/readdir.c -index 6aa3c267f4ca4..6512fece737ed 100644 ---- a/fs/cifs/readdir.c -+++ b/fs/cifs/readdir.c -@@ -262,7 +262,6 @@ cifs_posix_to_fattr(struct cifs_fattr *fattr, struct smb2_posix_info *info, - - if (fattr->cf_cifsattrs & ATTR_DIRECTORY) { - fattr->cf_mode |= S_IFDIR; -- fattr->cf_dtype = DT_DIR; - } else { - /* - * mark anything that is not a dir as regular -@@ -270,8 +269,8 @@ cifs_posix_to_fattr(struct cifs_fattr *fattr, struct smb2_posix_info *info, - * attribute and will be marked as needing revaluation - */ - fattr->cf_mode |= S_IFREG; -- fattr->cf_dtype = DT_REG; - } -+ fattr->cf_dtype = S_DT(fattr->cf_mode); - - if (reparse_file_needs_reval(fattr)) - fattr->cf_flags |= CIFS_FATTR_NEED_REVAL; --- -2.39.5 - diff --git a/queue-6.1/series b/queue-6.1/series index fe7f2d267a..66043ef234 100644 --- a/queue-6.1/series +++ b/queue-6.1/series @@ -81,3 +81,8 @@ vt-add-missing-notification-when-switching-back-to-t.patch hid-add-ignore-quirk-for-smartlinktechnology.patch hid-quirks-add-quirk-for-2-chicony-electronics-hp-5m.patch input-atkbd-do-not-skip-atkbd_deactivate-when-skipping-atkbd_cmd_getid.patch +vhost-scsi-protect-vq-log_used-with-vq-mutex.patch +x86-mm-disable-hugetlb-page-table-sharing-on-32-bit.patch +x86-fix-x86_feature_verw_clear-definition.patch +kasan-remove-kasan_find_vm_area-to-prevent-possible-deadlock.patch +ksmbd-fix-potential-use-after-free-in-oplock-lease-break-ack.patch