]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
6.10-stable patches
authorGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Fri, 27 Sep 2024 08:02:21 +0000 (10:02 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Fri, 27 Sep 2024 08:02:21 +0000 (10:02 +0200)
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

queue-6.10/bluetooth-btintel_pcie-allocate-memory-for-driver-private-data.patch [new file with mode: 0644]
queue-6.10/can-mcp251xfd-move-mcp251xfd_timestamp_start-stop-into-mcp251xfd_chip_start-stop.patch [new file with mode: 0644]
queue-6.10/can-mcp251xfd-properly-indent-labels.patch [new file with mode: 0644]
queue-6.10/nvme-pci-qdepth-1-quirk.patch [new file with mode: 0644]
queue-6.10/series

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 (file)
index 0000000..e77b8df
--- /dev/null
@@ -0,0 +1,32 @@
+From 7ffaa200251871980af12e57649ad57c70bf0f43 Mon Sep 17 00:00:00 2001
+From: Kiran K <kiran.k@intel.com>
+Date: Thu, 12 Sep 2024 16:21:00 +0530
+Subject: Bluetooth: btintel_pcie: Allocate memory for driver private data
+
+From: Kiran K <kiran.k@intel.com>
+
+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 <kiran.k@intel.com>
+Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
+Cc: Thomas Leroy <thomas.leroy@suse.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ 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 (file)
index 0000000..a29c942
--- /dev/null
@@ -0,0 +1,106 @@
+From a7801540f325d104de5065850a003f1d9bdc6ad3 Mon Sep 17 00:00:00 2001
+From: Marc Kleine-Budde <mkl@pengutronix.de>
+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 <mkl@pengutronix.de>
+
+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 <mkl@pengutronix.de>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ 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 (file)
index 0000000..e08053b
--- /dev/null
@@ -0,0 +1,145 @@
+From 51b2a721612236335ddec4f3fb5f59e72a204f3a Mon Sep 17 00:00:00 2001
+From: Marc Kleine-Budde <mkl@pengutronix.de>
+Date: Thu, 25 Apr 2024 10:14:45 +0200
+Subject: can: mcp251xfd: properly indent labels
+
+From: Marc Kleine-Budde <mkl@pengutronix.de>
+
+commit 51b2a721612236335ddec4f3fb5f59e72a204f3a upstream.
+
+To fix the coding style, remove the whitespace in front of labels.
+
+Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ 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 (file)
index 0000000..cbb288d
--- /dev/null
@@ -0,0 +1,84 @@
+From 83bdfcbdbe5d901c5fa432decf12e1725a840a56 Mon Sep 17 00:00:00 2001
+From: Keith Busch <kbusch@kernel.org>
+Date: Wed, 11 Sep 2024 10:39:59 -0700
+Subject: nvme-pci: qdepth 1 quirk
+
+From: Keith Busch <kbusch@kernel.org>
+
+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 <bob.beckett@collabora.com>
+Reviewed-by: Christoph Hellwig hch@lst.de>
+Signed-off-by: Keith Busch <kbusch@kernel.org>
+Cc: "Gagniuc, Alexandru" <alexandru.gagniuc@hp.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ 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 |
index 27c1ec7d82980d670f8c339537d2aedb69d448c7..40bb7b0129dee2eaef674b2443efe7800a5479cf 100644 (file)
@@ -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