All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 0/4] PCI / DPC: Few improvements
@ 2016-06-06 13:06 Mika Westerberg
  2016-06-06 13:06 ` [PATCH 1/4] PCI / PCIe: Introduce module_pci_port_service() Mika Westerberg
                   ` (6 more replies)
  0 siblings, 7 replies; 9+ messages in thread
From: Mika Westerberg @ 2016-06-06 13:06 UTC (permalink / raw)
  To: Bjorn Helgaas; +Cc: Keith Busch, Mika Westerberg, linux-pci

Hi,

This series includes few improvements for the PCIe DPC driver. First we
introduce module_pci_port_service() which allows reducing of boilerblate
code used in the DPC driver. In addition we convert the driver to use
managed resource functions (devm) to get rid of even more boilerblate.

I do not have hardware supporting DPC so these are only compile tested.

Mika Westerberg (4):
  PCI / PCIe: Introduce module_pci_port_service()
  PCI / DPC: Convert to use module_pcie_port_service()
  PCI / DPC: Convert the driver to use devm_* functions
  PCI / DPC: Fix whitespace in struct dpc_dev

 drivers/pci/pcie/pcie-dpc.c | 30 +++++++-----------------------
 include/linux/pcieport_if.h | 13 +++++++++++++
 2 files changed, 20 insertions(+), 23 deletions(-)

-- 
2.8.1


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

* [PATCH 1/4] PCI / PCIe: Introduce module_pci_port_service()
  2016-06-06 13:06 [PATCH 0/4] PCI / DPC: Few improvements Mika Westerberg
@ 2016-06-06 13:06 ` Mika Westerberg
  2016-06-06 13:06 ` [PATCH 2/4] PCI / DPC: Convert to use module_pcie_port_service() Mika Westerberg
                   ` (5 subsequent siblings)
  6 siblings, 0 replies; 9+ messages in thread
From: Mika Westerberg @ 2016-06-06 13:06 UTC (permalink / raw)
  To: Bjorn Helgaas; +Cc: Keith Busch, Mika Westerberg, linux-pci

As used elsewhere in the kernel already. This will reduce amount of
boilerblate code PCIe port service drivers otherwise need to open-code.

Signed-off-by: Mika Westerberg <mika.westerberg@linux.intel.com>
---
 include/linux/pcieport_if.h | 13 +++++++++++++
 1 file changed, 13 insertions(+)

diff --git a/include/linux/pcieport_if.h b/include/linux/pcieport_if.h
index afcd130ab3a9..9276a85bffde 100644
--- a/include/linux/pcieport_if.h
+++ b/include/linux/pcieport_if.h
@@ -67,4 +67,17 @@ struct pcie_port_service_driver {
 int pcie_port_service_register(struct pcie_port_service_driver *new);
 void pcie_port_service_unregister(struct pcie_port_service_driver *new);
 
+/**
+ * module_pcie_port_service() - Helper macro for registering a PCI driver
+ * @__port_service: pcie_port_service struct
+ *
+ * Helper macro for PCIe port service drivers which do not do anything
+ * special in module init/exit. This eliminates a lot of boilerplate. Each
+ * module may only use this macro once, and calling it replaces
+ * module_init() and module_exit()
+ */
+#define module_pcie_port_service(__port_service) \
+	module_driver(__port_service, pcie_port_service_register, \
+		      pcie_port_service_unregister)
+
 #endif /* _PCIEPORT_IF_H_ */
-- 
2.8.1


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

* [PATCH 2/4] PCI / DPC: Convert to use module_pcie_port_service()
  2016-06-06 13:06 [PATCH 0/4] PCI / DPC: Few improvements Mika Westerberg
  2016-06-06 13:06 ` [PATCH 1/4] PCI / PCIe: Introduce module_pci_port_service() Mika Westerberg
@ 2016-06-06 13:06 ` Mika Westerberg
  2016-06-06 13:06 ` [PATCH 3/4] PCI / DPC: Convert the driver to use devm_* functions Mika Westerberg
                   ` (4 subsequent siblings)
  6 siblings, 0 replies; 9+ messages in thread
From: Mika Westerberg @ 2016-06-06 13:06 UTC (permalink / raw)
  To: Bjorn Helgaas; +Cc: Keith Busch, Mika Westerberg, linux-pci

There is no need to open-code this in the driver. Use the helper we just
introduced to remove the boilerblate code from the driver.

Signed-off-by: Mika Westerberg <mika.westerberg@linux.intel.com>
---
 drivers/pci/pcie/pcie-dpc.c | 13 +------------
 1 file changed, 1 insertion(+), 12 deletions(-)

diff --git a/drivers/pci/pcie/pcie-dpc.c b/drivers/pci/pcie/pcie-dpc.c
index ab552f1bc08f..533c548607d7 100644
--- a/drivers/pci/pcie/pcie-dpc.c
+++ b/drivers/pci/pcie/pcie-dpc.c
@@ -144,20 +144,9 @@ static struct pcie_port_service_driver dpcdriver = {
 	.remove		= dpc_remove,
 };
 
-static int __init dpc_service_init(void)
-{
-	return pcie_port_service_register(&dpcdriver);
-}
-
-static void __exit dpc_service_exit(void)
-{
-	pcie_port_service_unregister(&dpcdriver);
-}
+module_pcie_port_service(dpcdriver);
 
 MODULE_DESCRIPTION("PCI Express Downstream Port Containment driver");
 MODULE_AUTHOR("Keith Busch <keith.busch@intel.com>");
 MODULE_LICENSE("GPL");
 MODULE_VERSION("0.1");
-
-module_init(dpc_service_init);
-module_exit(dpc_service_exit);
-- 
2.8.1


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

* [PATCH 3/4] PCI / DPC: Convert the driver to use devm_* functions
  2016-06-06 13:06 [PATCH 0/4] PCI / DPC: Few improvements Mika Westerberg
  2016-06-06 13:06 ` [PATCH 1/4] PCI / PCIe: Introduce module_pci_port_service() Mika Westerberg
  2016-06-06 13:06 ` [PATCH 2/4] PCI / DPC: Convert to use module_pcie_port_service() Mika Westerberg
@ 2016-06-06 13:06 ` Mika Westerberg
  2016-06-06 13:06 ` [PATCH 4/4] PCI / DPC: Fix whitespace in struct dpc_dev Mika Westerberg
                   ` (3 subsequent siblings)
  6 siblings, 0 replies; 9+ messages in thread
From: Mika Westerberg @ 2016-06-06 13:06 UTC (permalink / raw)
  To: Bjorn Helgaas; +Cc: Keith Busch, Mika Westerberg, linux-pci

These will automatically release the resources when the driver is removed
so no need to do that explicitly in the driver.

Signed-off-by: Mika Westerberg <mika.westerberg@linux.intel.com>
---
 drivers/pci/pcie/pcie-dpc.c | 13 ++++---------
 1 file changed, 4 insertions(+), 9 deletions(-)

diff --git a/drivers/pci/pcie/pcie-dpc.c b/drivers/pci/pcie/pcie-dpc.c
index 533c548607d7..8a061645f217 100644
--- a/drivers/pci/pcie/pcie-dpc.c
+++ b/drivers/pci/pcie/pcie-dpc.c
@@ -89,7 +89,7 @@ static int dpc_probe(struct pcie_device *dev)
 	int status;
 	u16 ctl, cap;
 
-	dpc = kzalloc(sizeof(*dpc), GFP_KERNEL);
+	dpc = devm_kzalloc(&dev->device, sizeof(*dpc), GFP_KERNEL);
 	if (!dpc)
 		return -ENOMEM;
 
@@ -98,11 +98,12 @@ static int dpc_probe(struct pcie_device *dev)
 	INIT_WORK(&dpc->work, interrupt_event_handler);
 	set_service_data(dev, dpc);
 
-	status = request_irq(dev->irq, dpc_irq, IRQF_SHARED, "pcie-dpc", dpc);
+	status = devm_request_irq(&dev->device, dev->irq, dpc_irq, IRQF_SHARED,
+				  "pcie-dpc", dpc);
 	if (status) {
 		dev_warn(&dev->device, "request IRQ%d failed: %d\n", dev->irq,
 			 status);
-		goto out;
+		return status;
 	}
 
 	pci_read_config_word(pdev, dpc->cap_pos + PCI_EXP_DPC_CAP, &cap);
@@ -117,9 +118,6 @@ static int dpc_probe(struct pcie_device *dev)
 		FLAG(cap, PCI_EXP_DPC_CAP_SW_TRIGGER), (cap >> 8) & 0xf,
 		FLAG(cap, PCI_EXP_DPC_CAP_DL_ACTIVE));
 	return status;
- out:
-	kfree(dpc);
-	return status;
 }
 
 static void dpc_remove(struct pcie_device *dev)
@@ -131,9 +129,6 @@ static void dpc_remove(struct pcie_device *dev)
 	pci_read_config_word(pdev, dpc->cap_pos + PCI_EXP_DPC_CTL, &ctl);
 	ctl &= ~(PCI_EXP_DPC_CTL_EN_NONFATAL | PCI_EXP_DPC_CTL_INT_EN);
 	pci_write_config_word(pdev, dpc->cap_pos + PCI_EXP_DPC_CTL, ctl);
-
-	free_irq(dev->irq, dpc);
-	kfree(dpc);
 }
 
 static struct pcie_port_service_driver dpcdriver = {
-- 
2.8.1


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

* [PATCH 4/4] PCI / DPC: Fix whitespace in struct dpc_dev
  2016-06-06 13:06 [PATCH 0/4] PCI / DPC: Few improvements Mika Westerberg
                   ` (2 preceding siblings ...)
  2016-06-06 13:06 ` [PATCH 3/4] PCI / DPC: Convert the driver to use devm_* functions Mika Westerberg
@ 2016-06-06 13:06 ` Mika Westerberg
  2016-06-06 14:44 ` [PATCH 0/4] PCI / DPC: Few improvements Keith Busch
                   ` (2 subsequent siblings)
  6 siblings, 0 replies; 9+ messages in thread
From: Mika Westerberg @ 2016-06-06 13:06 UTC (permalink / raw)
  To: Bjorn Helgaas; +Cc: Keith Busch, Mika Westerberg, linux-pci

There is unnecesary space before tab in the two lines. Remove these.

Signed-off-by: Mika Westerberg <mika.westerberg@linux.intel.com>
---
 drivers/pci/pcie/pcie-dpc.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/drivers/pci/pcie/pcie-dpc.c b/drivers/pci/pcie/pcie-dpc.c
index 8a061645f217..197d9ec18713 100644
--- a/drivers/pci/pcie/pcie-dpc.c
+++ b/drivers/pci/pcie/pcie-dpc.c
@@ -15,8 +15,8 @@
 
 struct dpc_dev {
 	struct pcie_device	*dev;
-	struct work_struct 	work;
-	int 			cap_pos;
+	struct work_struct	work;
+	int			cap_pos;
 };
 
 static void dpc_wait_link_inactive(struct pci_dev *pdev)
-- 
2.8.1


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

* Re: [PATCH 0/4] PCI / DPC: Few improvements
  2016-06-06 13:06 [PATCH 0/4] PCI / DPC: Few improvements Mika Westerberg
                   ` (3 preceding siblings ...)
  2016-06-06 13:06 ` [PATCH 4/4] PCI / DPC: Fix whitespace in struct dpc_dev Mika Westerberg
@ 2016-06-06 14:44 ` Keith Busch
  2016-06-17  9:57 ` Mika Westerberg
  2016-06-21 18:57 ` Bjorn Helgaas
  6 siblings, 0 replies; 9+ messages in thread
From: Keith Busch @ 2016-06-06 14:44 UTC (permalink / raw)
  To: Mika Westerberg; +Cc: Bjorn Helgaas, linux-pci

On Mon, Jun 06, 2016 at 04:06:04PM +0300, Mika Westerberg wrote:
> Hi,
> 
> This series includes few improvements for the PCIe DPC driver. First we
> introduce module_pci_port_service() which allows reducing of boilerblate
> code used in the DPC driver. In addition we convert the driver to use
> managed resource functions (devm) to get rid of even more boilerblate.
> 
> I do not have hardware supporting DPC so these are only compile tested.
> 
> Mika Westerberg (4):
>   PCI / PCIe: Introduce module_pci_port_service()
>   PCI / DPC: Convert to use module_pcie_port_service()
>   PCI / DPC: Convert the driver to use devm_* functions
>   PCI / DPC: Fix whitespace in struct dpc_dev
> 
>  drivers/pci/pcie/pcie-dpc.c | 30 +++++++-----------------------
>  include/linux/pcieport_if.h | 13 +++++++++++++
>  2 files changed, 20 insertions(+), 23 deletions(-)

Thanks, these look good to me.

Acked-by: Keith Busch <keith.busch@intel.com>

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

* Re: [PATCH 0/4] PCI / DPC: Few improvements
  2016-06-06 13:06 [PATCH 0/4] PCI / DPC: Few improvements Mika Westerberg
                   ` (4 preceding siblings ...)
  2016-06-06 14:44 ` [PATCH 0/4] PCI / DPC: Few improvements Keith Busch
@ 2016-06-17  9:57 ` Mika Westerberg
  2016-06-21 18:57 ` Bjorn Helgaas
  6 siblings, 0 replies; 9+ messages in thread
From: Mika Westerberg @ 2016-06-17  9:57 UTC (permalink / raw)
  To: Bjorn Helgaas; +Cc: Keith Busch, linux-pci

Gentle ping on this.

On Mon, Jun 06, 2016 at 04:06:04PM +0300, Mika Westerberg wrote:
> Hi,
> 
> This series includes few improvements for the PCIe DPC driver. First we
> introduce module_pci_port_service() which allows reducing of boilerblate
> code used in the DPC driver. In addition we convert the driver to use
> managed resource functions (devm) to get rid of even more boilerblate.
> 
> I do not have hardware supporting DPC so these are only compile tested.
> 
> Mika Westerberg (4):
>   PCI / PCIe: Introduce module_pci_port_service()
>   PCI / DPC: Convert to use module_pcie_port_service()
>   PCI / DPC: Convert the driver to use devm_* functions
>   PCI / DPC: Fix whitespace in struct dpc_dev
> 
>  drivers/pci/pcie/pcie-dpc.c | 30 +++++++-----------------------
>  include/linux/pcieport_if.h | 13 +++++++++++++
>  2 files changed, 20 insertions(+), 23 deletions(-)
> 
> -- 
> 2.8.1

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

* Re: [PATCH 0/4] PCI / DPC: Few improvements
  2016-06-06 13:06 [PATCH 0/4] PCI / DPC: Few improvements Mika Westerberg
                   ` (5 preceding siblings ...)
  2016-06-17  9:57 ` Mika Westerberg
@ 2016-06-21 18:57 ` Bjorn Helgaas
  2016-06-22 10:09   ` Mika Westerberg
  6 siblings, 1 reply; 9+ messages in thread
From: Bjorn Helgaas @ 2016-06-21 18:57 UTC (permalink / raw)
  To: Mika Westerberg; +Cc: Bjorn Helgaas, Keith Busch, linux-pci

On Mon, Jun 06, 2016 at 04:06:04PM +0300, Mika Westerberg wrote:
> Hi,
> 
> This series includes few improvements for the PCIe DPC driver. First we
> introduce module_pci_port_service() which allows reducing of boilerblate
> code used in the DPC driver. In addition we convert the driver to use
> managed resource functions (devm) to get rid of even more boilerblate.
> 
> I do not have hardware supporting DPC so these are only compile tested.
> 
> Mika Westerberg (4):
>   PCI / PCIe: Introduce module_pci_port_service()
>   PCI / DPC: Convert to use module_pcie_port_service()
>   PCI / DPC: Convert the driver to use devm_* functions
>   PCI / DPC: Fix whitespace in struct dpc_dev
> 
>  drivers/pci/pcie/pcie-dpc.c | 30 +++++++-----------------------
>  include/linux/pcieport_if.h | 13 +++++++++++++
>  2 files changed, 20 insertions(+), 23 deletions(-)

I applied the last two, with Keith's acks, to pci/dpc for v4.8.

I didn't apply the first two because I don't think these port drivers
should be modules.  I think DPC and thunderbolt are the only candidates
right now, and I think it's a stretch to think about either one as a
module.

Bjorn

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

* Re: [PATCH 0/4] PCI / DPC: Few improvements
  2016-06-21 18:57 ` Bjorn Helgaas
@ 2016-06-22 10:09   ` Mika Westerberg
  0 siblings, 0 replies; 9+ messages in thread
From: Mika Westerberg @ 2016-06-22 10:09 UTC (permalink / raw)
  To: Bjorn Helgaas; +Cc: Bjorn Helgaas, Keith Busch, linux-pci

On Tue, Jun 21, 2016 at 01:57:20PM -0500, Bjorn Helgaas wrote:
> On Mon, Jun 06, 2016 at 04:06:04PM +0300, Mika Westerberg wrote:
> > Hi,
> > 
> > This series includes few improvements for the PCIe DPC driver. First we
> > introduce module_pci_port_service() which allows reducing of boilerblate
> > code used in the DPC driver. In addition we convert the driver to use
> > managed resource functions (devm) to get rid of even more boilerblate.
> > 
> > I do not have hardware supporting DPC so these are only compile tested.
> > 
> > Mika Westerberg (4):
> >   PCI / PCIe: Introduce module_pci_port_service()
> >   PCI / DPC: Convert to use module_pcie_port_service()
> >   PCI / DPC: Convert the driver to use devm_* functions
> >   PCI / DPC: Fix whitespace in struct dpc_dev
> > 
> >  drivers/pci/pcie/pcie-dpc.c | 30 +++++++-----------------------
> >  include/linux/pcieport_if.h | 13 +++++++++++++
> >  2 files changed, 20 insertions(+), 23 deletions(-)
> 
> I applied the last two, with Keith's acks, to pci/dpc for v4.8.
> 
> I didn't apply the first two because I don't think these port drivers
> should be modules.  I think DPC and thunderbolt are the only candidates
> right now, and I think it's a stretch to think about either one as a
> module.

Understood. Thanks.

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

end of thread, other threads:[~2016-06-22 10:09 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2016-06-06 13:06 [PATCH 0/4] PCI / DPC: Few improvements Mika Westerberg
2016-06-06 13:06 ` [PATCH 1/4] PCI / PCIe: Introduce module_pci_port_service() Mika Westerberg
2016-06-06 13:06 ` [PATCH 2/4] PCI / DPC: Convert to use module_pcie_port_service() Mika Westerberg
2016-06-06 13:06 ` [PATCH 3/4] PCI / DPC: Convert the driver to use devm_* functions Mika Westerberg
2016-06-06 13:06 ` [PATCH 4/4] PCI / DPC: Fix whitespace in struct dpc_dev Mika Westerberg
2016-06-06 14:44 ` [PATCH 0/4] PCI / DPC: Few improvements Keith Busch
2016-06-17  9:57 ` Mika Westerberg
2016-06-21 18:57 ` Bjorn Helgaas
2016-06-22 10:09   ` Mika Westerberg

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.