From 9f0a5ff2dda729c7406edb2016e1458f995dffb7 Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Fri, 27 Sep 2024 10:02:21 +0200 Subject: [PATCH] 6.10-stable patches added patches: bluetooth-btintel_pcie-allocate-memory-for-driver-private-data.patch can-mcp251xfd-move-mcp251xfd_timestamp_start-stop-into-mcp251xfd_chip_start-stop.patch can-mcp251xfd-properly-indent-labels.patch nvme-pci-qdepth-1-quirk.patch --- ...ocate-memory-for-driver-private-data.patch | 32 ++++ ...-stop-into-mcp251xfd_chip_start-stop.patch | 106 +++++++++++++ ...can-mcp251xfd-properly-indent-labels.patch | 145 ++++++++++++++++++ queue-6.10/nvme-pci-qdepth-1-quirk.patch | 84 ++++++++++ queue-6.10/series | 4 + 5 files changed, 371 insertions(+) create mode 100644 queue-6.10/bluetooth-btintel_pcie-allocate-memory-for-driver-private-data.patch create mode 100644 queue-6.10/can-mcp251xfd-move-mcp251xfd_timestamp_start-stop-into-mcp251xfd_chip_start-stop.patch create mode 100644 queue-6.10/can-mcp251xfd-properly-indent-labels.patch create mode 100644 queue-6.10/nvme-pci-qdepth-1-quirk.patch diff --git a/queue-6.10/bluetooth-btintel_pcie-allocate-memory-for-driver-private-data.patch b/queue-6.10/bluetooth-btintel_pcie-allocate-memory-for-driver-private-data.patch new file mode 100644 index 00000000000..e77b8dfb76f --- /dev/null +++ b/queue-6.10/bluetooth-btintel_pcie-allocate-memory-for-driver-private-data.patch @@ -0,0 +1,32 @@ +From 7ffaa200251871980af12e57649ad57c70bf0f43 Mon Sep 17 00:00:00 2001 +From: Kiran K +Date: Thu, 12 Sep 2024 16:21:00 +0530 +Subject: Bluetooth: btintel_pcie: Allocate memory for driver private data + +From: Kiran K + +commit 7ffaa200251871980af12e57649ad57c70bf0f43 upstream. + +Fix driver not allocating memory for struct btintel_data which is used +to store internal data. + +Fixes: 6e65a09f9275 ("Bluetooth: btintel_pcie: Add *setup* function to download firmware") +Signed-off-by: Kiran K +Signed-off-by: Luiz Augusto von Dentz +Cc: Thomas Leroy +Signed-off-by: Greg Kroah-Hartman +--- + drivers/bluetooth/btintel_pcie.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +--- a/drivers/bluetooth/btintel_pcie.c ++++ b/drivers/bluetooth/btintel_pcie.c +@@ -1208,7 +1208,7 @@ static int btintel_pcie_setup_hdev(struc + int err; + struct hci_dev *hdev; + +- hdev = hci_alloc_dev(); ++ hdev = hci_alloc_dev_priv(sizeof(struct btintel_data)); + if (!hdev) + return -ENOMEM; + diff --git a/queue-6.10/can-mcp251xfd-move-mcp251xfd_timestamp_start-stop-into-mcp251xfd_chip_start-stop.patch b/queue-6.10/can-mcp251xfd-move-mcp251xfd_timestamp_start-stop-into-mcp251xfd_chip_start-stop.patch new file mode 100644 index 00000000000..a29c942265e --- /dev/null +++ b/queue-6.10/can-mcp251xfd-move-mcp251xfd_timestamp_start-stop-into-mcp251xfd_chip_start-stop.patch @@ -0,0 +1,106 @@ +From a7801540f325d104de5065850a003f1d9bdc6ad3 Mon Sep 17 00:00:00 2001 +From: Marc Kleine-Budde +Date: Wed, 11 Jan 2023 12:10:04 +0100 +Subject: can: mcp251xfd: move mcp251xfd_timestamp_start()/stop() into mcp251xfd_chip_start/stop() + +From: Marc Kleine-Budde + +commit a7801540f325d104de5065850a003f1d9bdc6ad3 upstream. + +The mcp251xfd wakes up from Low Power or Sleep Mode when SPI activity +is detected. To avoid this, make sure that the timestamp worker is +stopped before shutting down the chip. + +Split the starting of the timestamp worker out of +mcp251xfd_timestamp_init() into the separate function +mcp251xfd_timestamp_start(). + +Call mcp251xfd_timestamp_init() before mcp251xfd_chip_start(), move +mcp251xfd_timestamp_start() to mcp251xfd_chip_start(). In this way, +mcp251xfd_timestamp_stop() can be called unconditionally by +mcp251xfd_chip_stop(). + +Signed-off-by: Marc Kleine-Budde +Signed-off-by: Greg Kroah-Hartman +--- + drivers/net/can/spi/mcp251xfd/mcp251xfd-core.c | 8 +++++--- + drivers/net/can/spi/mcp251xfd/mcp251xfd-timestamp.c | 7 +++++-- + drivers/net/can/spi/mcp251xfd/mcp251xfd.h | 1 + + 3 files changed, 11 insertions(+), 5 deletions(-) + +--- a/drivers/net/can/spi/mcp251xfd/mcp251xfd-core.c ++++ b/drivers/net/can/spi/mcp251xfd/mcp251xfd-core.c +@@ -744,6 +744,7 @@ static void mcp251xfd_chip_stop(struct m + + mcp251xfd_chip_interrupts_disable(priv); + mcp251xfd_chip_rx_int_disable(priv); ++ mcp251xfd_timestamp_stop(priv); + mcp251xfd_chip_sleep(priv); + } + +@@ -763,6 +764,8 @@ static int mcp251xfd_chip_start(struct m + if (err) + goto out_chip_stop; + ++ mcp251xfd_timestamp_start(priv); ++ + err = mcp251xfd_set_bittiming(priv); + if (err) + goto out_chip_stop; +@@ -1610,11 +1613,12 @@ static int mcp251xfd_open(struct net_dev + if (err) + goto out_mcp251xfd_ring_free; + ++ mcp251xfd_timestamp_init(priv); ++ + err = mcp251xfd_chip_start(priv); + if (err) + goto out_transceiver_disable; + +- mcp251xfd_timestamp_init(priv); + clear_bit(MCP251XFD_FLAGS_DOWN, priv->flags); + can_rx_offload_enable(&priv->offload); + +@@ -1648,7 +1652,6 @@ out_destroy_workqueue: + out_can_rx_offload_disable: + can_rx_offload_disable(&priv->offload); + set_bit(MCP251XFD_FLAGS_DOWN, priv->flags); +- mcp251xfd_timestamp_stop(priv); + out_transceiver_disable: + mcp251xfd_transceiver_disable(priv); + out_mcp251xfd_ring_free: +@@ -1674,7 +1677,6 @@ static int mcp251xfd_stop(struct net_dev + free_irq(ndev->irq, priv); + destroy_workqueue(priv->wq); + can_rx_offload_disable(&priv->offload); +- mcp251xfd_timestamp_stop(priv); + mcp251xfd_chip_stop(priv, CAN_STATE_STOPPED); + mcp251xfd_transceiver_disable(priv); + mcp251xfd_ring_free(priv); +--- a/drivers/net/can/spi/mcp251xfd/mcp251xfd-timestamp.c ++++ b/drivers/net/can/spi/mcp251xfd/mcp251xfd-timestamp.c +@@ -48,9 +48,12 @@ void mcp251xfd_timestamp_init(struct mcp + cc->shift = 1; + cc->mult = clocksource_hz2mult(priv->can.clock.freq, cc->shift); + +- timecounter_init(&priv->tc, &priv->cc, ktime_get_real_ns()); +- + INIT_DELAYED_WORK(&priv->timestamp, mcp251xfd_timestamp_work); ++} ++ ++void mcp251xfd_timestamp_start(struct mcp251xfd_priv *priv) ++{ ++ timecounter_init(&priv->tc, &priv->cc, ktime_get_real_ns()); + schedule_delayed_work(&priv->timestamp, + MCP251XFD_TIMESTAMP_WORK_DELAY_SEC * HZ); + } +--- a/drivers/net/can/spi/mcp251xfd/mcp251xfd.h ++++ b/drivers/net/can/spi/mcp251xfd/mcp251xfd.h +@@ -957,6 +957,7 @@ int mcp251xfd_ring_alloc(struct mcp251xf + int mcp251xfd_handle_rxif(struct mcp251xfd_priv *priv); + int mcp251xfd_handle_tefif(struct mcp251xfd_priv *priv); + void mcp251xfd_timestamp_init(struct mcp251xfd_priv *priv); ++void mcp251xfd_timestamp_start(struct mcp251xfd_priv *priv); + void mcp251xfd_timestamp_stop(struct mcp251xfd_priv *priv); + + void mcp251xfd_tx_obj_write_sync(struct work_struct *work); diff --git a/queue-6.10/can-mcp251xfd-properly-indent-labels.patch b/queue-6.10/can-mcp251xfd-properly-indent-labels.patch new file mode 100644 index 00000000000..e08053b5fe1 --- /dev/null +++ b/queue-6.10/can-mcp251xfd-properly-indent-labels.patch @@ -0,0 +1,145 @@ +From 51b2a721612236335ddec4f3fb5f59e72a204f3a Mon Sep 17 00:00:00 2001 +From: Marc Kleine-Budde +Date: Thu, 25 Apr 2024 10:14:45 +0200 +Subject: can: mcp251xfd: properly indent labels + +From: Marc Kleine-Budde + +commit 51b2a721612236335ddec4f3fb5f59e72a204f3a upstream. + +To fix the coding style, remove the whitespace in front of labels. + +Signed-off-by: Marc Kleine-Budde +Signed-off-by: Greg Kroah-Hartman +--- + drivers/net/can/spi/mcp251xfd/mcp251xfd-core.c | 34 +++++++++++------------ + drivers/net/can/spi/mcp251xfd/mcp251xfd-dump.c | 2 - + drivers/net/can/spi/mcp251xfd/mcp251xfd-regmap.c | 2 - + drivers/net/can/spi/mcp251xfd/mcp251xfd-tef.c | 2 - + 4 files changed, 20 insertions(+), 20 deletions(-) + +--- a/drivers/net/can/spi/mcp251xfd/mcp251xfd-core.c ++++ b/drivers/net/can/spi/mcp251xfd/mcp251xfd-core.c +@@ -791,7 +791,7 @@ static int mcp251xfd_chip_start(struct m + + return 0; + +- out_chip_stop: ++out_chip_stop: + mcp251xfd_dump(priv); + mcp251xfd_chip_stop(priv, CAN_STATE_STOPPED); + +@@ -1576,7 +1576,7 @@ static irqreturn_t mcp251xfd_irq(int irq + handled = IRQ_HANDLED; + } while (1); + +- out_fail: ++out_fail: + can_rx_offload_threaded_irq_finish(&priv->offload); + + netdev_err(priv->ndev, "IRQ handler returned %d (intf=0x%08x).\n", +@@ -1641,22 +1641,22 @@ static int mcp251xfd_open(struct net_dev + + return 0; + +- out_free_irq: ++out_free_irq: + free_irq(spi->irq, priv); +- out_destroy_workqueue: ++out_destroy_workqueue: + destroy_workqueue(priv->wq); +- out_can_rx_offload_disable: ++out_can_rx_offload_disable: + can_rx_offload_disable(&priv->offload); + set_bit(MCP251XFD_FLAGS_DOWN, priv->flags); + mcp251xfd_timestamp_stop(priv); +- out_transceiver_disable: ++out_transceiver_disable: + mcp251xfd_transceiver_disable(priv); +- out_mcp251xfd_ring_free: ++out_mcp251xfd_ring_free: + mcp251xfd_ring_free(priv); +- out_pm_runtime_put: ++out_pm_runtime_put: + mcp251xfd_chip_stop(priv, CAN_STATE_STOPPED); + pm_runtime_put(ndev->dev.parent); +- out_close_candev: ++out_close_candev: + close_candev(ndev); + + return err; +@@ -1820,9 +1820,9 @@ mcp251xfd_register_get_dev_id(const stru + *effective_speed_hz_slow = xfer[0].effective_speed_hz; + *effective_speed_hz_fast = xfer[1].effective_speed_hz; + +- out_kfree_buf_tx: ++out_kfree_buf_tx: + kfree(buf_tx); +- out_kfree_buf_rx: ++out_kfree_buf_rx: + kfree(buf_rx); + + return err; +@@ -1936,13 +1936,13 @@ static int mcp251xfd_register(struct mcp + + return 0; + +- out_unregister_candev: ++out_unregister_candev: + unregister_candev(ndev); +- out_chip_sleep: ++out_chip_sleep: + mcp251xfd_chip_sleep(priv); +- out_runtime_disable: ++out_runtime_disable: + pm_runtime_disable(ndev->dev.parent); +- out_runtime_put_noidle: ++out_runtime_put_noidle: + pm_runtime_put_noidle(ndev->dev.parent); + mcp251xfd_clks_and_vdd_disable(priv); + +@@ -2162,9 +2162,9 @@ static int mcp251xfd_probe(struct spi_de + + return 0; + +- out_can_rx_offload_del: ++out_can_rx_offload_del: + can_rx_offload_del(&priv->offload); +- out_free_candev: ++out_free_candev: + spi->max_speed_hz = priv->spi_max_speed_hz_orig; + + free_candev(ndev); +--- a/drivers/net/can/spi/mcp251xfd/mcp251xfd-dump.c ++++ b/drivers/net/can/spi/mcp251xfd/mcp251xfd-dump.c +@@ -94,7 +94,7 @@ static void mcp251xfd_dump_registers(con + kfree(buf); + } + +- out: ++out: + mcp251xfd_dump_header(iter, MCP251XFD_DUMP_OBJECT_TYPE_REG, reg); + } + +--- a/drivers/net/can/spi/mcp251xfd/mcp251xfd-regmap.c ++++ b/drivers/net/can/spi/mcp251xfd/mcp251xfd-regmap.c +@@ -397,7 +397,7 @@ mcp251xfd_regmap_crc_read(void *context, + + return err; + } +- out: ++out: + memcpy(val_buf, buf_rx->data, val_len); + + return 0; +--- a/drivers/net/can/spi/mcp251xfd/mcp251xfd-tef.c ++++ b/drivers/net/can/spi/mcp251xfd/mcp251xfd-tef.c +@@ -219,7 +219,7 @@ int mcp251xfd_handle_tefif(struct mcp251 + total_frame_len += frame_len; + } + +- out_netif_wake_queue: ++out_netif_wake_queue: + len = i; /* number of handled goods TEFs */ + if (len) { + struct mcp251xfd_tef_ring *ring = priv->tef; diff --git a/queue-6.10/nvme-pci-qdepth-1-quirk.patch b/queue-6.10/nvme-pci-qdepth-1-quirk.patch new file mode 100644 index 00000000000..cbb288df0ca --- /dev/null +++ b/queue-6.10/nvme-pci-qdepth-1-quirk.patch @@ -0,0 +1,84 @@ +From 83bdfcbdbe5d901c5fa432decf12e1725a840a56 Mon Sep 17 00:00:00 2001 +From: Keith Busch +Date: Wed, 11 Sep 2024 10:39:59 -0700 +Subject: nvme-pci: qdepth 1 quirk + +From: Keith Busch + +commit 83bdfcbdbe5d901c5fa432decf12e1725a840a56 upstream. + +Another device has been reported to be unreliable if we have more than +one outstanding command. In this new case, data corruption may occur. +Since we have two devices now needing this quirky behavior, make a +generic quirk flag. + +The same Apple quirk is clearly not "temporary", so update the comment +while moving it. + +Link: https://lore.kernel.org/linux-nvme/191d810a4e3.fcc6066c765804.973611676137075390@collabora.com/ +Reported-by: Robert Beckett +Reviewed-by: Christoph Hellwig hch@lst.de> +Signed-off-by: Keith Busch +Cc: "Gagniuc, Alexandru" +Signed-off-by: Greg Kroah-Hartman +--- + drivers/nvme/host/nvme.h | 5 +++++ + drivers/nvme/host/pci.c | 18 +++++++++--------- + 2 files changed, 14 insertions(+), 9 deletions(-) + +--- a/drivers/nvme/host/nvme.h ++++ b/drivers/nvme/host/nvme.h +@@ -90,6 +90,11 @@ enum nvme_quirks { + NVME_QUIRK_NO_DEEPEST_PS = (1 << 5), + + /* ++ * Problems seen with concurrent commands ++ */ ++ NVME_QUIRK_QDEPTH_ONE = (1 << 6), ++ ++ /* + * Set MEDIUM priority on SQ creation + */ + NVME_QUIRK_MEDIUM_PRIO_SQ = (1 << 7), +--- a/drivers/nvme/host/pci.c ++++ b/drivers/nvme/host/pci.c +@@ -2528,15 +2528,8 @@ static int nvme_pci_enable(struct nvme_d + else + dev->io_sqes = NVME_NVM_IOSQES; + +- /* +- * Temporary fix for the Apple controller found in the MacBook8,1 and +- * some MacBook7,1 to avoid controller resets and data loss. +- */ +- if (pdev->vendor == PCI_VENDOR_ID_APPLE && pdev->device == 0x2001) { ++ if (dev->ctrl.quirks & NVME_QUIRK_QDEPTH_ONE) { + dev->q_depth = 2; +- dev_warn(dev->ctrl.device, "detected Apple NVMe controller, " +- "set queue depth=%u to work around controller resets\n", +- dev->q_depth); + } else if (pdev->vendor == PCI_VENDOR_ID_SAMSUNG && + (pdev->device == 0xa821 || pdev->device == 0xa822) && + NVME_CAP_MQES(dev->ctrl.cap) == 0) { +@@ -3401,6 +3394,8 @@ static const struct pci_device_id nvme_i + NVME_QUIRK_BOGUS_NID, }, + { PCI_VDEVICE(REDHAT, 0x0010), /* Qemu emulated controller */ + .driver_data = NVME_QUIRK_BOGUS_NID, }, ++ { PCI_DEVICE(0x1217, 0x8760), /* O2 Micro 64GB Steam Deck */ ++ .driver_data = NVME_QUIRK_QDEPTH_ONE }, + { PCI_DEVICE(0x126f, 0x2262), /* Silicon Motion generic */ + .driver_data = NVME_QUIRK_NO_DEEPEST_PS | + NVME_QUIRK_BOGUS_NID, }, +@@ -3535,7 +3530,12 @@ static const struct pci_device_id nvme_i + { PCI_DEVICE(PCI_VENDOR_ID_AMAZON, 0xcd02), + .driver_data = NVME_QUIRK_DMA_ADDRESS_BITS_48, }, + { PCI_DEVICE(PCI_VENDOR_ID_APPLE, 0x2001), +- .driver_data = NVME_QUIRK_SINGLE_VECTOR }, ++ /* ++ * Fix for the Apple controller found in the MacBook8,1 and ++ * some MacBook7,1 to avoid controller resets and data loss. ++ */ ++ .driver_data = NVME_QUIRK_SINGLE_VECTOR | ++ NVME_QUIRK_QDEPTH_ONE }, + { PCI_DEVICE(PCI_VENDOR_ID_APPLE, 0x2003) }, + { PCI_DEVICE(PCI_VENDOR_ID_APPLE, 0x2005), + .driver_data = NVME_QUIRK_SINGLE_VECTOR | diff --git a/queue-6.10/series b/queue-6.10/series index 27c1ec7d829..40bb7b0129d 100644 --- a/queue-6.10/series +++ b/queue-6.10/series @@ -50,3 +50,7 @@ powercap-intel_rapl-add-support-for-amd-family-1ah.patch powercap-intel_rapl-fix-the-energy-pkg-event-for-amd.patch netfilter-nft_socket-make-cgroupsv2-matching-work-with-namespaces.patch netfilter-nft_socket-fix-a-null-vs-is_err-bug-in-nft_socket_cgroup_subtree_level.patch +bluetooth-btintel_pcie-allocate-memory-for-driver-private-data.patch +nvme-pci-qdepth-1-quirk.patch +can-mcp251xfd-properly-indent-labels.patch +can-mcp251xfd-move-mcp251xfd_timestamp_start-stop-into-mcp251xfd_chip_start-stop.patch -- 2.47.3