All of lore.kernel.org
 help / color / mirror / Atom feed
From: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
To: stable@vger.kernel.org
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
	patches@lists.linux.dev, Johan Hovold <johan+linaro@kernel.org>,
	Bjorn Helgaas <bhelgaas@google.com>
Subject: [PATCH 6.7 109/124] PCI/ASPM: Fix deadlock when enabling ASPM
Date: Tue, 13 Feb 2024 18:22:11 +0100	[thread overview]
Message-ID: <20240213171856.915220041@linuxfoundation.org> (raw)
In-Reply-To: <20240213171853.722912593@linuxfoundation.org>

6.7-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Johan Hovold <johan+linaro@kernel.org>

commit 1e560864159d002b453da42bd2c13a1805515a20 upstream.

A last minute revert in 6.7-final introduced a potential deadlock when
enabling ASPM during probe of Qualcomm PCIe controllers as reported by
lockdep:

  ============================================
  WARNING: possible recursive locking detected
  6.7.0 #40 Not tainted
  --------------------------------------------
  kworker/u16:5/90 is trying to acquire lock:
  ffffacfa78ced000 (pci_bus_sem){++++}-{3:3}, at: pcie_aspm_pm_state_change+0x58/0xdc

              but task is already holding lock:
  ffffacfa78ced000 (pci_bus_sem){++++}-{3:3}, at: pci_walk_bus+0x34/0xbc

              other info that might help us debug this:
   Possible unsafe locking scenario:

         CPU0
         ----
    lock(pci_bus_sem);
    lock(pci_bus_sem);

               *** DEADLOCK ***

  Call trace:
   print_deadlock_bug+0x25c/0x348
   __lock_acquire+0x10a4/0x2064
   lock_acquire+0x1e8/0x318
   down_read+0x60/0x184
   pcie_aspm_pm_state_change+0x58/0xdc
   pci_set_full_power_state+0xa8/0x114
   pci_set_power_state+0xc4/0x120
   qcom_pcie_enable_aspm+0x1c/0x3c [pcie_qcom]
   pci_walk_bus+0x64/0xbc
   qcom_pcie_host_post_init_2_7_0+0x28/0x34 [pcie_qcom]

The deadlock can easily be reproduced on machines like the Lenovo ThinkPad
X13s by adding a delay to increase the race window during asynchronous
probe where another thread can take a write lock.

Add a new pci_set_power_state_locked() and associated helper functions that
can be called with the PCI bus semaphore held to avoid taking the read lock
twice.

Link: https://lore.kernel.org/r/ZZu0qx2cmn7IwTyQ@hovoldconsulting.com
Link: https://lore.kernel.org/r/20240130100243.11011-1-johan+linaro@kernel.org
Fixes: f93e71aea6c6 ("Revert "PCI/ASPM: Remove pcie_aspm_pm_state_change()"")
Signed-off-by: Johan Hovold <johan+linaro@kernel.org>
Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
Cc: <stable@vger.kernel.org>	# 6.7
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
 drivers/pci/bus.c                      |   49 +++++++++++++-------
 drivers/pci/controller/dwc/pcie-qcom.c |    2 
 drivers/pci/pci.c                      |   78 ++++++++++++++++++++++-----------
 drivers/pci/pci.h                      |    4 -
 drivers/pci/pcie/aspm.c                |   13 +++--
 include/linux/pci.h                    |    5 ++
 6 files changed, 101 insertions(+), 50 deletions(-)

--- a/drivers/pci/bus.c
+++ b/drivers/pci/bus.c
@@ -386,21 +386,8 @@ void pci_bus_add_devices(const struct pc
 }
 EXPORT_SYMBOL(pci_bus_add_devices);
 
-/** pci_walk_bus - walk devices on/under bus, calling callback.
- *  @top      bus whose devices should be walked
- *  @cb       callback to be called for each device found
- *  @userdata arbitrary pointer to be passed to callback.
- *
- *  Walk the given bus, including any bridged devices
- *  on buses under this bus.  Call the provided callback
- *  on each device found.
- *
- *  We check the return of @cb each time. If it returns anything
- *  other than 0, we break out.
- *
- */
-void pci_walk_bus(struct pci_bus *top, int (*cb)(struct pci_dev *, void *),
-		  void *userdata)
+static void __pci_walk_bus(struct pci_bus *top, int (*cb)(struct pci_dev *, void *),
+			   void *userdata, bool locked)
 {
 	struct pci_dev *dev;
 	struct pci_bus *bus;
@@ -408,7 +395,8 @@ void pci_walk_bus(struct pci_bus *top, i
 	int retval;
 
 	bus = top;
-	down_read(&pci_bus_sem);
+	if (!locked)
+		down_read(&pci_bus_sem);
 	next = top->devices.next;
 	for (;;) {
 		if (next == &bus->devices) {
@@ -431,10 +419,37 @@ void pci_walk_bus(struct pci_bus *top, i
 		if (retval)
 			break;
 	}
-	up_read(&pci_bus_sem);
+	if (!locked)
+		up_read(&pci_bus_sem);
+}
+
+/**
+ *  pci_walk_bus - walk devices on/under bus, calling callback.
+ *  @top: bus whose devices should be walked
+ *  @cb: callback to be called for each device found
+ *  @userdata: arbitrary pointer to be passed to callback
+ *
+ *  Walk the given bus, including any bridged devices
+ *  on buses under this bus.  Call the provided callback
+ *  on each device found.
+ *
+ *  We check the return of @cb each time. If it returns anything
+ *  other than 0, we break out.
+ */
+void pci_walk_bus(struct pci_bus *top, int (*cb)(struct pci_dev *, void *), void *userdata)
+{
+	__pci_walk_bus(top, cb, userdata, false);
 }
 EXPORT_SYMBOL_GPL(pci_walk_bus);
 
+void pci_walk_bus_locked(struct pci_bus *top, int (*cb)(struct pci_dev *, void *), void *userdata)
+{
+	lockdep_assert_held(&pci_bus_sem);
+
+	__pci_walk_bus(top, cb, userdata, true);
+}
+EXPORT_SYMBOL_GPL(pci_walk_bus_locked);
+
 struct pci_bus *pci_bus_get(struct pci_bus *bus)
 {
 	if (bus)
--- a/drivers/pci/controller/dwc/pcie-qcom.c
+++ b/drivers/pci/controller/dwc/pcie-qcom.c
@@ -972,7 +972,7 @@ static int qcom_pcie_enable_aspm(struct
 	 * Downstream devices need to be in D0 state before enabling PCI PM
 	 * substates.
 	 */
-	pci_set_power_state(pdev, PCI_D0);
+	pci_set_power_state_locked(pdev, PCI_D0);
 	pci_enable_link_state_locked(pdev, PCIE_LINK_STATE_ALL);
 
 	return 0;
--- a/drivers/pci/pci.c
+++ b/drivers/pci/pci.c
@@ -1291,6 +1291,7 @@ end:
 /**
  * pci_set_full_power_state - Put a PCI device into D0 and update its state
  * @dev: PCI device to power up
+ * @locked: whether pci_bus_sem is held
  *
  * Call pci_power_up() to put @dev into D0, read from its PCI_PM_CTRL register
  * to confirm the state change, restore its BARs if they might be lost and
@@ -1300,7 +1301,7 @@ end:
  * to D0, it is more efficient to use pci_power_up() directly instead of this
  * function.
  */
-static int pci_set_full_power_state(struct pci_dev *dev)
+static int pci_set_full_power_state(struct pci_dev *dev, bool locked)
 {
 	u16 pmcsr;
 	int ret;
@@ -1336,7 +1337,7 @@ static int pci_set_full_power_state(stru
 	}
 
 	if (dev->bus->self)
-		pcie_aspm_pm_state_change(dev->bus->self);
+		pcie_aspm_pm_state_change(dev->bus->self, locked);
 
 	return 0;
 }
@@ -1365,10 +1366,22 @@ void pci_bus_set_current_state(struct pc
 		pci_walk_bus(bus, __pci_dev_set_current_state, &state);
 }
 
+static void __pci_bus_set_current_state(struct pci_bus *bus, pci_power_t state, bool locked)
+{
+	if (!bus)
+		return;
+
+	if (locked)
+		pci_walk_bus_locked(bus, __pci_dev_set_current_state, &state);
+	else
+		pci_walk_bus(bus, __pci_dev_set_current_state, &state);
+}
+
 /**
  * pci_set_low_power_state - Put a PCI device into a low-power state.
  * @dev: PCI device to handle.
  * @state: PCI power state (D1, D2, D3hot) to put the device into.
+ * @locked: whether pci_bus_sem is held
  *
  * Use the device's PCI_PM_CTRL register to put it into a low-power state.
  *
@@ -1379,7 +1392,7 @@ void pci_bus_set_current_state(struct pc
  * 0 if device already is in the requested state.
  * 0 if device's power state has been successfully changed.
  */
-static int pci_set_low_power_state(struct pci_dev *dev, pci_power_t state)
+static int pci_set_low_power_state(struct pci_dev *dev, pci_power_t state, bool locked)
 {
 	u16 pmcsr;
 
@@ -1433,29 +1446,12 @@ static int pci_set_low_power_state(struc
 				     pci_power_name(state));
 
 	if (dev->bus->self)
-		pcie_aspm_pm_state_change(dev->bus->self);
+		pcie_aspm_pm_state_change(dev->bus->self, locked);
 
 	return 0;
 }
 
-/**
- * pci_set_power_state - Set the power state of a PCI device
- * @dev: PCI device to handle.
- * @state: PCI power state (D0, D1, D2, D3hot) to put the device into.
- *
- * Transition a device to a new power state, using the platform firmware and/or
- * the device's PCI PM registers.
- *
- * RETURN VALUE:
- * -EINVAL if the requested state is invalid.
- * -EIO if device does not support PCI PM or its PM capabilities register has a
- * wrong version, or device doesn't support the requested state.
- * 0 if the transition is to D1 or D2 but D1 and D2 are not supported.
- * 0 if device already is in the requested state.
- * 0 if the transition is to D3 but D3 is not supported.
- * 0 if device's power state has been successfully changed.
- */
-int pci_set_power_state(struct pci_dev *dev, pci_power_t state)
+static int __pci_set_power_state(struct pci_dev *dev, pci_power_t state, bool locked)
 {
 	int error;
 
@@ -1479,7 +1475,7 @@ int pci_set_power_state(struct pci_dev *
 		return 0;
 
 	if (state == PCI_D0)
-		return pci_set_full_power_state(dev);
+		return pci_set_full_power_state(dev, locked);
 
 	/*
 	 * This device is quirked not to be put into D3, so don't put it in
@@ -1493,16 +1489,16 @@ int pci_set_power_state(struct pci_dev *
 		 * To put the device in D3cold, put it into D3hot in the native
 		 * way, then put it into D3cold using platform ops.
 		 */
-		error = pci_set_low_power_state(dev, PCI_D3hot);
+		error = pci_set_low_power_state(dev, PCI_D3hot, locked);
 
 		if (pci_platform_power_transition(dev, PCI_D3cold))
 			return error;
 
 		/* Powering off a bridge may power off the whole hierarchy */
 		if (dev->current_state == PCI_D3cold)
-			pci_bus_set_current_state(dev->subordinate, PCI_D3cold);
+			__pci_bus_set_current_state(dev->subordinate, PCI_D3cold, locked);
 	} else {
-		error = pci_set_low_power_state(dev, state);
+		error = pci_set_low_power_state(dev, state, locked);
 
 		if (pci_platform_power_transition(dev, state))
 			return error;
@@ -1510,8 +1506,38 @@ int pci_set_power_state(struct pci_dev *
 
 	return 0;
 }
+
+/**
+ * pci_set_power_state - Set the power state of a PCI device
+ * @dev: PCI device to handle.
+ * @state: PCI power state (D0, D1, D2, D3hot) to put the device into.
+ *
+ * Transition a device to a new power state, using the platform firmware and/or
+ * the device's PCI PM registers.
+ *
+ * RETURN VALUE:
+ * -EINVAL if the requested state is invalid.
+ * -EIO if device does not support PCI PM or its PM capabilities register has a
+ * wrong version, or device doesn't support the requested state.
+ * 0 if the transition is to D1 or D2 but D1 and D2 are not supported.
+ * 0 if device already is in the requested state.
+ * 0 if the transition is to D3 but D3 is not supported.
+ * 0 if device's power state has been successfully changed.
+ */
+int pci_set_power_state(struct pci_dev *dev, pci_power_t state)
+{
+	return __pci_set_power_state(dev, state, false);
+}
 EXPORT_SYMBOL(pci_set_power_state);
 
+int pci_set_power_state_locked(struct pci_dev *dev, pci_power_t state)
+{
+	lockdep_assert_held(&pci_bus_sem);
+
+	return __pci_set_power_state(dev, state, true);
+}
+EXPORT_SYMBOL(pci_set_power_state_locked);
+
 #define PCI_EXP_SAVE_REGS	7
 
 static struct pci_cap_saved_state *_pci_find_saved_cap(struct pci_dev *pci_dev,
--- a/drivers/pci/pci.h
+++ b/drivers/pci/pci.h
@@ -569,12 +569,12 @@ int pcie_retrain_link(struct pci_dev *pd
 #ifdef CONFIG_PCIEASPM
 void pcie_aspm_init_link_state(struct pci_dev *pdev);
 void pcie_aspm_exit_link_state(struct pci_dev *pdev);
-void pcie_aspm_pm_state_change(struct pci_dev *pdev);
+void pcie_aspm_pm_state_change(struct pci_dev *pdev, bool locked);
 void pcie_aspm_powersave_config_link(struct pci_dev *pdev);
 #else
 static inline void pcie_aspm_init_link_state(struct pci_dev *pdev) { }
 static inline void pcie_aspm_exit_link_state(struct pci_dev *pdev) { }
-static inline void pcie_aspm_pm_state_change(struct pci_dev *pdev) { }
+static inline void pcie_aspm_pm_state_change(struct pci_dev *pdev, bool locked) { }
 static inline void pcie_aspm_powersave_config_link(struct pci_dev *pdev) { }
 #endif
 
--- a/drivers/pci/pcie/aspm.c
+++ b/drivers/pci/pcie/aspm.c
@@ -1008,8 +1008,11 @@ void pcie_aspm_exit_link_state(struct pc
 	up_read(&pci_bus_sem);
 }
 
-/* @pdev: the root port or switch downstream port */
-void pcie_aspm_pm_state_change(struct pci_dev *pdev)
+/*
+ * @pdev: the root port or switch downstream port
+ * @locked: whether pci_bus_sem is held
+ */
+void pcie_aspm_pm_state_change(struct pci_dev *pdev, bool locked)
 {
 	struct pcie_link_state *link = pdev->link_state;
 
@@ -1019,12 +1022,14 @@ void pcie_aspm_pm_state_change(struct pc
 	 * Devices changed PM state, we should recheck if latency
 	 * meets all functions' requirement
 	 */
-	down_read(&pci_bus_sem);
+	if (!locked)
+		down_read(&pci_bus_sem);
 	mutex_lock(&aspm_lock);
 	pcie_update_aspm_capable(link->root);
 	pcie_config_aspm_path(link);
 	mutex_unlock(&aspm_lock);
-	up_read(&pci_bus_sem);
+	if (!locked)
+		up_read(&pci_bus_sem);
 }
 
 void pcie_aspm_powersave_config_link(struct pci_dev *pdev)
--- a/include/linux/pci.h
+++ b/include/linux/pci.h
@@ -1417,6 +1417,7 @@ int pci_load_and_free_saved_state(struct
 				  struct pci_saved_state **state);
 int pci_platform_power_transition(struct pci_dev *dev, pci_power_t state);
 int pci_set_power_state(struct pci_dev *dev, pci_power_t state);
+int pci_set_power_state_locked(struct pci_dev *dev, pci_power_t state);
 pci_power_t pci_choose_state(struct pci_dev *dev, pm_message_t state);
 bool pci_pme_capable(struct pci_dev *dev, pci_power_t state);
 void pci_pme_active(struct pci_dev *dev, bool enable);
@@ -1620,6 +1621,8 @@ int pci_scan_bridge(struct pci_bus *bus,
 
 void pci_walk_bus(struct pci_bus *top, int (*cb)(struct pci_dev *, void *),
 		  void *userdata);
+void pci_walk_bus_locked(struct pci_bus *top, int (*cb)(struct pci_dev *, void *),
+			 void *userdata);
 int pci_cfg_space_size(struct pci_dev *dev);
 unsigned char pci_bus_max_busnr(struct pci_bus *bus);
 void pci_setup_bridge(struct pci_bus *bus);
@@ -2019,6 +2022,8 @@ static inline int pci_save_state(struct
 static inline void pci_restore_state(struct pci_dev *dev) { }
 static inline int pci_set_power_state(struct pci_dev *dev, pci_power_t state)
 { return 0; }
+static inline int pci_set_power_state_locked(struct pci_dev *dev, pci_power_t state)
+{ return 0; }
 static inline int pci_wake_from_d3(struct pci_dev *dev, bool enable)
 { return 0; }
 static inline pci_power_t pci_choose_state(struct pci_dev *dev,



  parent reply	other threads:[~2024-02-13 17:39 UTC|newest]

Thread overview: 145+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-02-13 17:20 [PATCH 6.7 000/124] 6.7.5-rc1 review Greg Kroah-Hartman
2024-02-13 17:20 ` [PATCH 6.7 001/124] ext4: regenerate buddy after block freeing failed if under fc replay Greg Kroah-Hartman
2024-02-13 17:20 ` [PATCH 6.7 002/124] dmaengine: fsl-dpaa2-qdma: Fix the size of dma pools Greg Kroah-Hartman
2024-02-13 17:20 ` [PATCH 6.7 003/124] dmaengine: ti: k3-udma: Report short packet errors Greg Kroah-Hartman
2024-02-13 17:20 ` [PATCH 6.7 004/124] dmaengine: fsl-qdma: Fix a memory leak related to the status queue DMA Greg Kroah-Hartman
2024-02-13 17:20 ` [PATCH 6.7 005/124] dmaengine: fsl-qdma: Fix a memory leak related to the queue command DMA Greg Kroah-Hartman
2024-02-13 17:20 ` [PATCH 6.7 006/124] phy: qcom-qmp-usb: fix register offsets for ipq8074/ipq6018 Greg Kroah-Hartman
2024-02-13 17:20 ` [PATCH 6.7 007/124] phy: qcom-qmp-usb: fix serdes init sequence for IPQ6018 Greg Kroah-Hartman
2024-02-13 17:20 ` [PATCH 6.7 008/124] phy: renesas: rcar-gen3-usb2: Fix returning wrong error code Greg Kroah-Hartman
2024-02-13 17:20 ` [PATCH 6.7 009/124] perf tests: Add perf script test Greg Kroah-Hartman
2024-02-13 17:20 ` [PATCH 6.7 010/124] perf test: Fix perf script tests on s390 Greg Kroah-Hartman
2024-02-13 17:20 ` [PATCH 6.7 011/124] perf evlist: Fix evlist__new_default() for > 1 core PMU Greg Kroah-Hartman
2024-02-13 17:20 ` [PATCH 6.7 012/124] dmaengine: fix is_slave_direction() return false when DMA_DEV_TO_DEV Greg Kroah-Hartman
2024-02-13 17:20 ` [PATCH 6.7 013/124] phy: ti: phy-omap-usb2: Fix NULL pointer dereference for SRP Greg Kroah-Hartman
2024-02-13 17:20 ` [PATCH 6.7 014/124] cifs: avoid redundant calls to disable multichannel Greg Kroah-Hartman
2024-02-13 17:20 ` [PATCH 6.7 015/124] cifs: failure to add channel on iface should bump up weight Greg Kroah-Hartman
2024-02-13 17:20 ` [PATCH 6.7 016/124] drm/msms/dp: fixed link clock divider bits be over written in BPC unknown case Greg Kroah-Hartman
2024-02-13 17:20 ` [PATCH 6.7 017/124] drm/msm/dp: return correct Colorimetry for DP_TEST_DYNAMIC_RANGE_CEA case Greg Kroah-Hartman
2024-02-13 17:20 ` [PATCH 6.7 018/124] drm/msm/dpu: check for valid hw_pp in dpu_encoder_helper_phys_cleanup Greg Kroah-Hartman
2024-02-13 17:20 ` [PATCH 6.7 019/124] wifi: iwlwifi: mvm: skip adding debugfs symlink for reconfig Greg Kroah-Hartman
2024-02-13 17:20 ` [PATCH 6.7 020/124] x86/efistub: Give up if memory attribute protocol returns an error Greg Kroah-Hartman
2024-02-13 17:20 ` [PATCH 6.7 021/124] x86/efistub: Avoid placing the kernel below LOAD_PHYSICAL_ADDR Greg Kroah-Hartman
2024-02-13 17:20 ` [PATCH 6.7 022/124] net: stmmac: xgmac: fix handling of DPP safety error for DMA channels Greg Kroah-Hartman
2024-02-13 17:20 ` [PATCH 6.7 023/124] wifi: cfg80211: consume both probe response and beacon IEs Greg Kroah-Hartman
2024-02-13 17:20 ` [PATCH 6.7 024/124] wifi: cfg80211: detect stuck ECSA element in probe resp Greg Kroah-Hartman
2024-02-13 17:20 ` [PATCH 6.7 025/124] wifi: mac80211: improve CSA/ECSA connection refusal Greg Kroah-Hartman
2024-02-13 17:20 ` [PATCH 6.7 026/124] wifi: mac80211: fix RCU use in TDLS fast-xmit Greg Kroah-Hartman
2024-02-13 17:20 ` [PATCH 6.7 027/124] wifi: mac80211: fix unsolicited broadcast probe config Greg Kroah-Hartman
2024-02-13 17:20 ` [PATCH 6.7 028/124] wifi: mac80211: fix waiting for beacons logic Greg Kroah-Hartman
2024-02-13 17:20 ` [PATCH 6.7 029/124] wifi: iwlwifi: exit eSR only after the FW does Greg Kroah-Hartman
2024-02-13 17:20 ` [PATCH 6.7 030/124] wifi: brcmfmac: Adjust n_channels usage for __counted_by Greg Kroah-Hartman
2024-02-13 17:20 ` [PATCH 6.7 031/124] netdevsim: avoid potential loop in nsim_dev_trap_report_work() Greg Kroah-Hartman
2024-02-13 17:20 ` [PATCH 6.7 032/124] net: atlantic: Fix DMA mapping for PTP hwts ring Greg Kroah-Hartman
2024-02-13 17:20 ` [PATCH 6.7 033/124] selftests: net: cut more slack for gro fwd tests Greg Kroah-Hartman
2024-02-13 17:20 ` [PATCH 6.7 034/124] selftests/net: convert unicast_extensions.sh to run it in unique namespace Greg Kroah-Hartman
2024-02-13 17:20 ` [PATCH 6.7 035/124] selftests/net: convert pmtu.sh " Greg Kroah-Hartman
2024-02-13 17:20 ` [PATCH 6.7 036/124] selftests/net: change shebang to bash to support "source" Greg Kroah-Hartman
2024-02-13 17:20 ` [PATCH 6.7 037/124] selftests: net: fix tcp listener handling in pmtu.sh Greg Kroah-Hartman
2024-02-13 17:21 ` [PATCH 6.7 038/124] selftests: net: avoid just another constant wait Greg Kroah-Hartman
2024-02-13 17:21 ` [PATCH 6.7 039/124] tsnep: Fix mapping for zero copy XDP_TX action Greg Kroah-Hartman
2024-02-13 17:21 ` [PATCH 6.7 040/124] tunnels: fix out of bounds access when building IPv6 PMTU error Greg Kroah-Hartman
2024-02-13 17:21 ` [PATCH 6.7 041/124] atm: idt77252: fix a memleak in open_card_ubr0 Greg Kroah-Hartman
2024-02-13 17:21 ` [PATCH 6.7 042/124] octeontx2-pf: Fix a memleak otx2_sq_init Greg Kroah-Hartman
2024-02-13 17:21 ` [PATCH 6.7 043/124] hwmon: (aspeed-pwm-tacho) mutex for tach reading Greg Kroah-Hartman
2024-02-13 17:21 ` [PATCH 6.7 044/124] hwmon: (coretemp) Fix out-of-bounds memory access Greg Kroah-Hartman
2024-02-13 17:21 ` [PATCH 6.7 045/124] hwmon: (coretemp) Fix bogus core_id to attr name mapping Greg Kroah-Hartman
2024-02-13 17:21 ` [PATCH 6.7 046/124] inet: read sk->sk_family once in inet_recv_error() Greg Kroah-Hartman
2024-02-13 17:21 ` [PATCH 6.7 047/124] drm/i915/gvt: Fix uninitialized variable in handle_mmio() Greg Kroah-Hartman
2024-02-13 17:21 ` [PATCH 6.7 048/124] x86/efistub: Use 1:1 file:memory mapping for PE/COFF .compat section Greg Kroah-Hartman
2024-02-13 17:21 ` [PATCH 6.7 049/124] rxrpc: Fix generation of serial numbers to skip zero Greg Kroah-Hartman
2024-02-13 17:21 ` [PATCH 6.7 050/124] rxrpc: Fix delayed ACKs to not set the reference serial number Greg Kroah-Hartman
2024-02-13 17:21 ` [PATCH 6.7 051/124] rxrpc: Fix response to PING RESPONSE ACKs to a dead call Greg Kroah-Hartman
2024-02-13 17:21 ` [PATCH 6.7 052/124] rxrpc: Fix counting of new acks and nacks Greg Kroah-Hartman
2024-02-13 17:21 ` [PATCH 6.7 053/124] selftests: net: let big_tcp test cope with slow env Greg Kroah-Hartman
2024-02-13 17:21 ` [PATCH 6.7 054/124] tipc: Check the bearer type before calling tipc_udp_nl_bearer_add() Greg Kroah-Hartman
2024-02-13 17:21 ` [PATCH 6.7 055/124] af_unix: Call kfree_skb() for dead unix_(sk)->oob_skb in GC Greg Kroah-Hartman
2024-02-13 17:21 ` [PATCH 6.7 056/124] devlink: avoid potential loop in devlink_rel_nested_in_notify_work() Greg Kroah-Hartman
2024-02-13 17:21 ` [PATCH 6.7 057/124] ppp_async: limit MRU to 64K Greg Kroah-Hartman
2024-02-13 17:21 ` [PATCH 6.7 058/124] selftests: cmsg_ipv6: repeat the exact packet Greg Kroah-Hartman
2024-02-13 17:21 ` [PATCH 6.7 059/124] netfilter: nft_compat: narrow down revision to unsigned 8-bits Greg Kroah-Hartman
2024-02-13 17:21 ` [PATCH 6.7 060/124] netfilter: nft_compat: reject unused compat flag Greg Kroah-Hartman
2024-02-13 17:21 ` [PATCH 6.7 061/124] netfilter: nft_compat: restrict match/target protocol to u16 Greg Kroah-Hartman
2024-02-13 17:21 ` [PATCH 6.7 062/124] drm/amd/display: Fix panel_cntl could be null in dcn21_set_backlight_level() Greg Kroah-Hartman
2024-02-13 17:21 ` [PATCH 6.7 063/124] drm/amd/display: Add NULL test for timing generator in dcn21_set_pipe() Greg Kroah-Hartman
2024-02-13 17:21 ` [PATCH 6.7 064/124] drm/amd/display: Implement bounds check for stream encoder creation in DCN301 Greg Kroah-Hartman
2024-02-13 17:21 ` [PATCH 6.7 065/124] netfilter: nft_set_pipapo: remove static in nft_pipapo_get() Greg Kroah-Hartman
2024-02-13 17:21 ` [PATCH 6.7 066/124] netfilter: nft_ct: reject direction for ct id Greg Kroah-Hartman
2024-02-13 17:21 ` [PATCH 6.7 067/124] netfilter: nf_tables: use timestamp to check for set element timeout Greg Kroah-Hartman
2024-02-13 17:21 ` [PATCH 6.7 068/124] netfilter: nfnetlink_queue: un-break NF_REPEAT Greg Kroah-Hartman
2024-02-13 17:21 ` [PATCH 6.7 069/124] netfilter: nft_set_pipapo: store index in scratch maps Greg Kroah-Hartman
2024-02-13 17:21 ` [PATCH 6.7 070/124] netfilter: nft_set_pipapo: add helper to release pcpu scratch area Greg Kroah-Hartman
2024-02-13 17:21 ` [PATCH 6.7 071/124] netfilter: nft_set_pipapo: remove scratch_aligned pointer Greg Kroah-Hartman
2024-02-13 17:21 ` [PATCH 6.7 072/124] fs/ntfs3: Fix an NULL dereference bug Greg Kroah-Hartman
2024-02-13 17:21 ` [PATCH 6.7 073/124] mm: Introduce flush_cache_vmap_early() Greg Kroah-Hartman
2024-02-14  9:04   ` Jiri Slaby
2024-02-14  9:59     ` Jiri Slaby
2024-02-14 14:29       ` Greg Kroah-Hartman
2024-02-13 17:21 ` [PATCH 6.7 074/124] riscv: mm: execute local TLB flush after populating vmemmap Greg Kroah-Hartman
2024-02-13 17:21 ` [PATCH 6.7 075/124] riscv: Fix set_huge_pte_at() for NAPOT mapping Greg Kroah-Hartman
2024-02-13 17:21 ` [PATCH 6.7 076/124] riscv: Fix hugetlb_mask_last_page() when NAPOT is enabled Greg Kroah-Hartman
2024-02-13 17:21 ` [PATCH 6.7 077/124] scsi: core: Move scsi_host_busy() out of host lock if it is for per-command Greg Kroah-Hartman
2024-02-13 17:21 ` [PATCH 6.7 078/124] riscv: Flush the tlb when a page directory is freed Greg Kroah-Hartman
2024-02-13 17:21 ` [PATCH 6.7 079/124] libceph: rename read_sparse_msg_*() to read_partial_sparse_msg_*() Greg Kroah-Hartman
2024-02-13 17:21 ` [PATCH 6.7 080/124] libceph: just wait for more data to be available on the socket Greg Kroah-Hartman
2024-02-13 17:21 ` [PATCH 6.7 081/124] ceph: always set initial i_blkbits to CEPH_FSCRYPT_BLOCK_SHIFT Greg Kroah-Hartman
2024-02-13 17:21 ` [PATCH 6.7 082/124] riscv: Fix arch_hugetlb_migration_supported() for NAPOT Greg Kroah-Hartman
2024-02-13 17:21 ` [PATCH 6.7 083/124] riscv: declare overflow_stack as exported from traps.c Greg Kroah-Hartman
2024-02-13 17:21 ` [PATCH 6.7 084/124] nvme-host: fix the updating of the firmware version Greg Kroah-Hartman
2024-02-13 17:21 ` [PATCH 6.7 085/124] selftests: core: include linux/close_range.h for CLOSE_RANGE_* macros Greg Kroah-Hartman
2024-02-13 17:21 ` [PATCH 6.7 086/124] blk-iocost: Fix an UBSAN shift-out-of-bounds warning Greg Kroah-Hartman
2024-02-13 17:21 ` [PATCH 6.7 087/124] ALSA: usb-audio: Add delay quirk for MOTU M Series 2nd revision Greg Kroah-Hartman
2024-02-13 17:21 ` [PATCH 6.7 088/124] ALSA: usb-audio: Add a quirk for Yamaha YIT-W12TX transmitter Greg Kroah-Hartman
2024-02-13 17:21 ` [PATCH 6.7 089/124] ALSA: usb-audio: add quirk for RODE NT-USB+ Greg Kroah-Hartman
2024-02-13 17:21 ` [PATCH 6.7 090/124] USB: serial: qcserial: add new usb-id for Dell Wireless DW5826e Greg Kroah-Hartman
2024-02-13 17:21 ` [PATCH 6.7 091/124] USB: serial: option: add Fibocom FM101-GL variant Greg Kroah-Hartman
2024-02-13 17:21 ` [PATCH 6.7 092/124] USB: serial: cp210x: add ID for IMST iM871A-USB Greg Kroah-Hartman
2024-02-13 17:21 ` [PATCH 6.7 093/124] Revert "usb: typec: tcpm: fix cc role at port reset" Greg Kroah-Hartman
2024-02-16  6:54   ` Thorsten Leemhuis
2024-02-16 18:46     ` Greg Kroah-Hartman
2024-02-17  7:37       ` Thorsten Leemhuis
2024-02-17 15:38       ` Mark Brown
2024-02-17 16:11         ` Greg Kroah-Hartman
2024-02-19 12:40           ` Mark Brown
2024-02-20  8:16             ` Greg Kroah-Hartman
2024-02-13 17:21 ` [PATCH 6.7 094/124] Revert "drm/amd/pm: fix the high voltage and temperature issue" Greg Kroah-Hartman
2024-02-13 17:21 ` [PATCH 6.7 095/124] x86/lib: Revert to _ASM_EXTABLE_UA() for {get,put}_user() fixups Greg Kroah-Hartman
2024-02-13 17:21 ` [PATCH 6.7 096/124] usb: dwc3: host: Set XHCI_SG_TRB_CACHE_SIZE_QUIRK Greg Kroah-Hartman
2024-02-13 17:21 ` [PATCH 6.7 097/124] usb: host: xhci-plat: Add support for XHCI_SG_TRB_CACHE_SIZE_QUIRK Greg Kroah-Hartman
2024-02-13 17:22 ` [PATCH 6.7 098/124] xhci: process isoc TD properly when there was a transaction error mid TD Greg Kroah-Hartman
2024-02-13 17:22 ` [PATCH 6.7 099/124] xhci: handle isoc Babble and Buffer Overrun events properly Greg Kroah-Hartman
2024-02-13 17:22 ` [PATCH 6.7 100/124] usb: dwc3: pci: add support for the Intel Arrow Lake-H Greg Kroah-Hartman
2024-02-13 17:22 ` [PATCH 6.7 101/124] hrtimer: Report offline hrtimer enqueue Greg Kroah-Hartman
2024-02-13 17:22 ` [PATCH 6.7 102/124] Input: i8042 - fix strange behavior of touchpad on Clevo NS70PU Greg Kroah-Hartman
2024-02-13 17:22 ` [PATCH 6.7 103/124] Input: atkbd - skip ATKBD_CMD_SETLEDS when skipping ATKBD_CMD_GETID Greg Kroah-Hartman
2024-02-13 17:22 ` [PATCH 6.7 104/124] wifi: iwlwifi: mvm: fix a battery life regression Greg Kroah-Hartman
2024-02-13 17:22 ` [PATCH 6.7 105/124] io_uring/net: fix sr->len for IORING_OP_RECV with MSG_WAITALL and buffers Greg Kroah-Hartman
2024-02-13 17:22 ` [PATCH 6.7 106/124] io_uring/poll: move poll execution helpers higher up Greg Kroah-Hartman
2024-02-13 17:22 ` [PATCH 6.7 107/124] io_uring/net: un-indent mshot retry path in io_recv_finish() Greg Kroah-Hartman
2024-02-13 17:22 ` [PATCH 6.7 108/124] io_uring/rw: ensure poll based multishot read retries appropriately Greg Kroah-Hartman
2024-02-13 17:22 ` Greg Kroah-Hartman [this message]
2024-02-13 17:22 ` [PATCH 6.7 110/124] new helper: user_path_locked_at() Greg Kroah-Hartman
2024-02-13 17:22 ` [PATCH 6.7 111/124] bch2_ioctl_subvolume_destroy(): fix locking Greg Kroah-Hartman
2024-02-13 17:22 ` [PATCH 6.7 112/124] bcachefs: Dont pass memcmp() as a pointer Greg Kroah-Hartman
2024-02-13 17:22 ` [PATCH 6.7 113/124] bcachefs: rebalance should wakeup on shutdown if disabled Greg Kroah-Hartman
2024-02-13 17:22 ` [PATCH 6.7 114/124] bcachefs: Add missing bch2_moving_ctxt_flush_all() Greg Kroah-Hartman
2024-02-13 17:22 ` [PATCH 6.7 115/124] bcachefs: bch2_kthread_io_clock_wait() no longer sleeps until full amount Greg Kroah-Hartman
2024-02-13 17:22 ` [PATCH 6.7 116/124] bcachefs: kvfree bch_fs::snapshots in bch2_fs_snapshots_exit Greg Kroah-Hartman
2024-02-13 17:22 ` [PATCH 6.7 117/124] bcachefs: grab s_umount only if snapshotting Greg Kroah-Hartman
2024-02-13 17:22 ` [PATCH 6.7 118/124] bcachefs: fix incorrect usage of REQ_OP_FLUSH Greg Kroah-Hartman
2024-02-13 17:22 ` [PATCH 6.7 119/124] bcachefs: unlock parent dir if entry is not found in subvolume deletion Greg Kroah-Hartman
2024-02-13 17:22 ` [PATCH 6.7 120/124] bcachefs: time_stats: Check for last_event == 0 when updating freq stats Greg Kroah-Hartman
2024-02-13 17:22 ` [PATCH 6.7 121/124] Revert "ASoC: amd: Add new dmi entries for acp5x platform" Greg Kroah-Hartman
2024-02-13 17:22 ` [PATCH 6.7 122/124] io_uring/poll: add requeue return code from poll multishot handling Greg Kroah-Hartman
2024-02-13 17:22 ` [PATCH 6.7 123/124] io_uring/net: limit inline multishot retries Greg Kroah-Hartman
2024-02-13 17:22 ` [PATCH 6.7 124/124] net: Fix from address in memcpy_to_iter_csum() Greg Kroah-Hartman
2024-02-13 18:21 ` [PATCH 6.7 000/124] 6.7.5-rc1 review Luna Jernberg
2024-02-13 19:04 ` SeongJae Park
2024-02-13 22:19 ` Florian Fainelli
2024-02-13 22:47 ` Allen
2024-02-14  0:13 ` Shuah Khan
2024-02-14  7:22 ` Bagas Sanjaya
2024-02-14  9:08 ` Jon Hunter
2024-02-14  9:59 ` Naresh Kamboju
2024-02-14 11:13 ` Ron Economos
2024-02-14 12:19 ` Ricardo B. Marliere

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20240213171856.915220041@linuxfoundation.org \
    --to=gregkh@linuxfoundation.org \
    --cc=bhelgaas@google.com \
    --cc=johan+linaro@kernel.org \
    --cc=patches@lists.linux.dev \
    --cc=stable@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.