Linux PCI subsystem development
 help / color / mirror / Atom feed
* [PATCH v5 0/2] PCI: Introduce pci_clear/set_config_dword()
@ 2026-11-12  3:19 Hans Zhang
  2026-11-12  3:19 ` [PATCH v5 1/2] " Hans Zhang
  2026-11-12  3:19 ` [PATCH v5 2/2] PCI/AER: Use pci_clear/set_config_dword to simplify code Hans Zhang
  0 siblings, 2 replies; 5+ messages in thread
From: Hans Zhang @ 2026-11-12  3:19 UTC (permalink / raw)
  To: mahesh, bhelgaas
  Cc: oohall, mani, lukas, linuxppc-dev, linux-pci, linux-kernel,
	Hans Zhang

Hi,

This series introduces auxiliary functions for the PCI configuration space
and simplifies the read and write operations of the AER driver, reducing a
lot of repetitive code.

Patch 1 adds pci_clear_config_dword() and pci_set_config_dword() helpers
to reduce repetitive read-modify-write sequences when modifying PCI config
space. These helpers improve code readability and maintainability.

Patch 2 refactors the PCIe AER driver to use these new helpers,
eliminating manual read-modify-write patterns and intermediate variable
in several functions. This results in cleaner and more concise code.

Changes for v5:
- Rebase onto v7.4-rc2.

Changes for v4:
- Introduce pci_clear/set_config_dword() (Lukas)

Changes for v3:
- Rebase to v6.17-rc1.
- Modify the patch commit messages.
- Add Acked-by: Manivannan Sadhasivam <mani@kernel.org>

Changes for v2:
- Modify the patch commit messages.
- Add new optimizations for the functions disable_ecrc_checking,
  aer_enable_irq, and aer_disable_irq.

v4 patch:
https://patchwork.kernel.org/project/linux-pci/patch/20251101162219.12016-2-18255117159@163.com/

v3 series:
https://patchwork.kernel.org/project/linux-pci/patch/20250816161743.340684-1-18255117159@163.com/

Hans Zhang (2):
  PCI: Introduce pci_clear/set_config_dword()
  PCI/AER: Use pci_clear/set_config_dword to simplify code

 drivers/pci/pcie/aer.c | 29 ++++++++++-------------------
 include/linux/pci.h    | 12 ++++++++++++
 2 files changed, 22 insertions(+), 19 deletions(-)


base-commit: 79eb6679ef6a0d5ea68da53a8321fb1dc72299b9
-- 
2.43.0


^ permalink raw reply	[flat|nested] 5+ messages in thread

* [PATCH v5 1/2] PCI: Introduce pci_clear/set_config_dword()
  2026-11-12  3:19 [PATCH v5 0/2] PCI: Introduce pci_clear/set_config_dword() Hans Zhang
@ 2026-11-12  3:19 ` Hans Zhang
  2026-11-12  3:25   ` sashiko-bot
  2026-11-12  3:19 ` [PATCH v5 2/2] PCI/AER: Use pci_clear/set_config_dword to simplify code Hans Zhang
  1 sibling, 1 reply; 5+ messages in thread
From: Hans Zhang @ 2026-11-12  3:19 UTC (permalink / raw)
  To: mahesh, bhelgaas
  Cc: oohall, mani, lukas, linuxppc-dev, linux-pci, linux-kernel,
	Hans Zhang

Add helper functions to clear or set bits in PCI config space.
These helpers reduce code duplication and improve readability for config
space modifications by encapsulating common read-modify-write patterns.

Signed-off-by: Hans Zhang <18255117159@163.com>
---
 include/linux/pci.h | 12 ++++++++++++
 1 file changed, 12 insertions(+)

diff --git a/include/linux/pci.h b/include/linux/pci.h
index aa3765a20a96..be277d745d5d 100644
--- a/include/linux/pci.h
+++ b/include/linux/pci.h
@@ -1420,6 +1420,18 @@ static inline int pcie_capability_clear_dword(struct pci_dev *dev, int pos,
 	return pcie_capability_clear_and_set_dword(dev, pos, clear, 0);
 }
 
+static inline void pci_clear_config_dword(const struct pci_dev *dev, int pos,
+					  u32 clear)
+{
+	pci_clear_and_set_config_dword(dev, pos, clear, 0);
+}
+
+static inline void pci_set_config_dword(const struct pci_dev *dev, int pos,
+					u32 set)
+{
+	pci_clear_and_set_config_dword(dev, pos, 0, set);
+}
+
 /* User-space driven config access */
 int pci_user_read_config_byte(struct pci_dev *dev, int where, u8 *val);
 int pci_user_read_config_word(struct pci_dev *dev, int where, u16 *val);
-- 
2.43.0


^ permalink raw reply related	[flat|nested] 5+ messages in thread

* [PATCH v5 2/2] PCI/AER: Use pci_clear/set_config_dword to simplify code
  2026-11-12  3:19 [PATCH v5 0/2] PCI: Introduce pci_clear/set_config_dword() Hans Zhang
  2026-11-12  3:19 ` [PATCH v5 1/2] " Hans Zhang
@ 2026-11-12  3:19 ` Hans Zhang
  2026-11-12  3:23   ` sashiko-bot
  1 sibling, 1 reply; 5+ messages in thread
From: Hans Zhang @ 2026-11-12  3:19 UTC (permalink / raw)
  To: mahesh, bhelgaas
  Cc: oohall, mani, lukas, linuxppc-dev, linux-pci, linux-kernel,
	Hans Zhang

Replace manual read-modify-write sequences in multiple functions with
pci_clear/set_config_dword helper to reduce code duplication.

Signed-off-by: Hans Zhang <18255117159@163.com>
---
 drivers/pci/pcie/aer.c | 29 ++++++++++-------------------
 1 file changed, 10 insertions(+), 19 deletions(-)

diff --git a/drivers/pci/pcie/aer.c b/drivers/pci/pcie/aer.c
index 8708ca3257bb..7ce1cda8bc80 100644
--- a/drivers/pci/pcie/aer.c
+++ b/drivers/pci/pcie/aer.c
@@ -201,14 +201,12 @@ static int enable_ecrc_checking(struct pci_dev *dev)
 static int disable_ecrc_checking(struct pci_dev *dev)
 {
 	int aer = dev->aer_cap;
-	u32 reg32;
 
 	if (!aer)
 		return -ENODEV;
 
-	pci_read_config_dword(dev, aer + PCI_ERR_CAP, &reg32);
-	reg32 &= ~(PCI_ERR_CAP_ECRC_GENE | PCI_ERR_CAP_ECRC_CHKE);
-	pci_write_config_dword(dev, aer + PCI_ERR_CAP, reg32);
+	pci_clear_config_dword(dev, aer + PCI_ERR_CAP,
+			       PCI_ERR_CAP_ECRC_GENE | PCI_ERR_CAP_ECRC_CHKE);
 
 	return 0;
 }
@@ -1272,15 +1270,12 @@ static bool find_source_device(struct pci_dev *parent,
 void pci_aer_unmask_internal_errors(struct pci_dev *dev)
 {
 	int aer = dev->aer_cap;
-	u32 mask;
 
-	pci_read_config_dword(dev, aer + PCI_ERR_UNCOR_MASK, &mask);
-	mask &= ~PCI_ERR_UNC_INTN;
-	pci_write_config_dword(dev, aer + PCI_ERR_UNCOR_MASK, mask);
+	pci_clear_config_dword(dev, aer + PCI_ERR_UNCOR_MASK,
+			       PCI_ERR_UNC_INTN);
 
-	pci_read_config_dword(dev, aer + PCI_ERR_COR_MASK, &mask);
-	mask &= ~PCI_ERR_COR_INTERNAL;
-	pci_write_config_dword(dev, aer + PCI_ERR_COR_MASK, mask);
+	pci_clear_config_dword(dev, aer + PCI_ERR_COR_MASK,
+			       PCI_ERR_COR_INTERNAL);
 }
 
 /*
@@ -1682,23 +1677,19 @@ static irqreturn_t aer_irq(int irq, void *context)
 static void aer_enable_irq(struct pci_dev *pdev)
 {
 	int aer = pdev->aer_cap;
-	u32 reg32;
 
 	/* Enable Root Port's interrupt in response to error messages */
-	pci_read_config_dword(pdev, aer + PCI_ERR_ROOT_COMMAND, &reg32);
-	reg32 |= ROOT_PORT_INTR_ON_MESG_MASK;
-	pci_write_config_dword(pdev, aer + PCI_ERR_ROOT_COMMAND, reg32);
+	pci_set_config_dword(pdev, aer + PCI_ERR_ROOT_COMMAND,
+			     ROOT_PORT_INTR_ON_MESG_MASK);
 }
 
 static void aer_disable_irq(struct pci_dev *pdev)
 {
 	int aer = pdev->aer_cap;
-	u32 reg32;
 
 	/* Disable Root Port's interrupt in response to error messages */
-	pci_read_config_dword(pdev, aer + PCI_ERR_ROOT_COMMAND, &reg32);
-	reg32 &= ~ROOT_PORT_INTR_ON_MESG_MASK;
-	pci_write_config_dword(pdev, aer + PCI_ERR_ROOT_COMMAND, reg32);
+	pci_clear_config_dword(pdev, aer + PCI_ERR_ROOT_COMMAND,
+			       ROOT_PORT_INTR_ON_MESG_MASK);
 }
 
 static int clear_status_iter(struct pci_dev *dev, void *data)
-- 
2.43.0


^ permalink raw reply related	[flat|nested] 5+ messages in thread

* Re: [PATCH v5 2/2] PCI/AER: Use pci_clear/set_config_dword to simplify code
  2026-11-12  3:19 ` [PATCH v5 2/2] PCI/AER: Use pci_clear/set_config_dword to simplify code Hans Zhang
@ 2026-11-12  3:23   ` sashiko-bot
  0 siblings, 0 replies; 5+ messages in thread
From: sashiko-bot @ 2026-11-12  3:23 UTC (permalink / raw)
  To: Hans Zhang; +Cc: linux-pci

> Replace manual read-modify-write sequences in multiple functions with
> pci_clear/set_config_dword helper to reduce code duplication.
> 
> Signed-off-by: Hans Zhang <18255117159@163.com>

Sashiko has reviewed this patch and found no issues.

-- 
Sashiko AI review · https://sashiko.dev/#/patchset/20261112031921.1255661-1-18255117159@163.com?part=2


^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH v5 1/2] PCI: Introduce pci_clear/set_config_dword()
  2026-11-12  3:19 ` [PATCH v5 1/2] " Hans Zhang
@ 2026-11-12  3:25   ` sashiko-bot
  0 siblings, 0 replies; 5+ messages in thread
From: sashiko-bot @ 2026-11-12  3:25 UTC (permalink / raw)
  To: Hans Zhang; +Cc: linux-pci

> Add helper functions to clear or set bits in PCI config space.
> These helpers reduce code duplication and improve readability for config
> space modifications by encapsulating common read-modify-write patterns.
> 
> Signed-off-by: Hans Zhang <18255117159@163.com>

Sashiko has reviewed this patch and found no issues.

-- 
Sashiko AI review · https://sashiko.dev/#/patchset/20261112031921.1255661-1-18255117159@163.com?part=1


^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2026-11-12  3:25 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-11-12  3:19 [PATCH v5 0/2] PCI: Introduce pci_clear/set_config_dword() Hans Zhang
2026-11-12  3:19 ` [PATCH v5 1/2] " Hans Zhang
2026-11-12  3:25   ` sashiko-bot
2026-11-12  3:19 ` [PATCH v5 2/2] PCI/AER: Use pci_clear/set_config_dword to simplify code Hans Zhang
2026-11-12  3:23   ` sashiko-bot

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox