diff mbox

[1/4] PCI: Remove service driver load/unload messages

Message ID 20161116221310.15842.25671.stgit@bhelgaas-glaptop.roam.corp.google.com (mailing list archive)
State New, archived
Delegated to: Bjorn Helgaas
Headers show

Commit Message

Bjorn Helgaas Nov. 16, 2016, 10:13 p.m. UTC
Remove the "service driver %s loaded" and unloaded messages.  I don't think
these add any useful information.

Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
---
 drivers/pci/pcie/portdrv_core.c |    3 ---
 1 file changed, 3 deletions(-)


--
To unsubscribe from this list: send the line "unsubscribe linux-pci" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Comments

Lukas Wunner Nov. 17, 2016, 1:40 p.m. UTC | #1
On Wed, Nov 16, 2016 at 04:13:10PM -0600, Bjorn Helgaas wrote:
> Remove the "service driver %s loaded" and unloaded messages.  I don't think
> these add any useful information.

I think those particular ones have a value to some extent because
they communicate for which of the port's capabilities a driver is
available and loaded.  For ports below a hotplug port they also
comunicate the steps to unbind the ports from their drivers when
the device is unplugged.

E.g. when I plug in the Apple Thunderbolt Ethernet adapter I get this
because a new hotplug port appears below the hotplug port of the host
controller:
[  141.926865] pciehp 0000:0a:00.0:pcie204: service driver pciehp loaded

On unplug I get this:
[  202.497548] pciehp 0000:0a:00.0:pcie204: unloading service driver pciehp

Thanks,

Lukas

> 
> Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
> ---
>  drivers/pci/pcie/portdrv_core.c |    3 ---
>  1 file changed, 3 deletions(-)
> 
> diff --git a/drivers/pci/pcie/portdrv_core.c b/drivers/pci/pcie/portdrv_core.c
> index e9270b4..9698289 100644
> --- a/drivers/pci/pcie/portdrv_core.c
> +++ b/drivers/pci/pcie/portdrv_core.c
> @@ -499,7 +499,6 @@ static int pcie_port_probe_service(struct device *dev)
>  	if (status)
>  		return status;
>  
> -	dev_printk(KERN_DEBUG, dev, "service driver %s loaded\n", driver->name);
>  	get_device(dev);
>  	return 0;
>  }
> @@ -524,8 +523,6 @@ static int pcie_port_remove_service(struct device *dev)
>  	pciedev = to_pcie_device(dev);
>  	driver = to_service_driver(dev->driver);
>  	if (driver && driver->remove) {
> -		dev_printk(KERN_DEBUG, dev, "unloading service driver %s\n",
> -			driver->name);
>  		driver->remove(pciedev);
>  		put_device(dev);
>  	}
> 
--
To unsubscribe from this list: send the line "unsubscribe linux-pci" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Bjorn Helgaas Nov. 17, 2016, 8:49 p.m. UTC | #2
On Thu, Nov 17, 2016 at 02:40:42PM +0100, Lukas Wunner wrote:
> On Wed, Nov 16, 2016 at 04:13:10PM -0600, Bjorn Helgaas wrote:
> > Remove the "service driver %s loaded" and unloaded messages.  I don't think
> > these add any useful information.
> 
> I think those particular ones have a value to some extent because
> they communicate for which of the port's capabilities a driver is
> available and loaded.  For ports below a hotplug port they also
> comunicate the steps to unbind the ports from their drivers when
> the device is unplugged.

None of the service drivers can be modules anymore.  I think if we
want a clue about whether a service driver is attached to a device, we
should add something to the service driver, where we can print more
useful information.  In general I want to move towards thinking about
the service drivers as optional parts of the PCI core instead of
separate "drivers."

> E.g. when I plug in the Apple Thunderbolt Ethernet adapter I get this
> because a new hotplug port appears below the hotplug port of the host
> controller:
> [  141.926865] pciehp 0000:0a:00.0:pcie204: service driver pciehp loaded

For example, for pciehp, you should already see something like this:

  pciehp 0000:80:02.0:pcie04: Slot #6 AttnBtn+ PwrCtrl+ MRL- AttnInd+ PwrInd+ HotPlug+ Surprise- Interlock- NoCompl- LLActRep+

Is that enough?  Or maybe we don't emit this message in your case for
some reason?

> On unplug I get this:
> [  202.497548] pciehp 0000:0a:00.0:pcie204: unloading service driver pciehp

I'm not sure we print anything when we remove a device; maybe we
should.

> > Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
> > ---
> >  drivers/pci/pcie/portdrv_core.c |    3 ---
> >  1 file changed, 3 deletions(-)
> > 
> > diff --git a/drivers/pci/pcie/portdrv_core.c b/drivers/pci/pcie/portdrv_core.c
> > index e9270b4..9698289 100644
> > --- a/drivers/pci/pcie/portdrv_core.c
> > +++ b/drivers/pci/pcie/portdrv_core.c
> > @@ -499,7 +499,6 @@ static int pcie_port_probe_service(struct device *dev)
> >  	if (status)
> >  		return status;
> >  
> > -	dev_printk(KERN_DEBUG, dev, "service driver %s loaded\n", driver->name);
> >  	get_device(dev);
> >  	return 0;
> >  }
> > @@ -524,8 +523,6 @@ static int pcie_port_remove_service(struct device *dev)
> >  	pciedev = to_pcie_device(dev);
> >  	driver = to_service_driver(dev->driver);
> >  	if (driver && driver->remove) {
> > -		dev_printk(KERN_DEBUG, dev, "unloading service driver %s\n",
> > -			driver->name);
> >  		driver->remove(pciedev);
> >  		put_device(dev);
> >  	}
> > 
> --
> To unsubscribe from this list: send the line "unsubscribe linux-pci" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
--
To unsubscribe from this list: send the line "unsubscribe linux-pci" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Lukas Wunner Nov. 18, 2016, 10 a.m. UTC | #3
On Thu, Nov 17, 2016 at 02:49:34PM -0600, Bjorn Helgaas wrote:
> On Thu, Nov 17, 2016 at 02:40:42PM +0100, Lukas Wunner wrote:
> > On Wed, Nov 16, 2016 at 04:13:10PM -0600, Bjorn Helgaas wrote:
> > > Remove the "service driver %s loaded" and unloaded messages.  I don't think
> > > these add any useful information.
> > 
> > I think those particular ones have a value to some extent because
> > they communicate for which of the port's capabilities a driver is
> > available and loaded.  For ports below a hotplug port they also
> > comunicate the steps to unbind the ports from their drivers when
> > the device is unplugged.
> 
> None of the service drivers can be modules anymore.  I think if we
> want a clue about whether a service driver is attached to a device, we
> should add something to the service driver, where we can print more
> useful information.  In general I want to move towards thinking about
> the service drivers as optional parts of the PCI core instead of
> separate "drivers."

The issue with making the port services modules was that user space
doesn't load them when they're needed.  We could have solved this in
the kernel by amending get_port_device_capability() to call
find_module() and then try_module_get() to load the module for a port
service and acquire a reference on it upon discovery of the services
supported by a probed port.  Then in pcie_port_device_remove() the
references on the loaded modules would have to be released with
module_put().

Most users just run the kernel that comes with their distro, and
distro vendors frequently use a "one size fits all" kernel package
regardless if the machine is a tiny netbook or a big-iron server.
They will enable all port services to support all configurations
and because this is all compiled in, the kernel keeps that code
resident in memory even if the port services are never used.
An uncompressed x86_64 vmlinux with the standard Debian configuration
currently clocks in at around 30 MByte...


> > E.g. when I plug in the Apple Thunderbolt Ethernet adapter I get this
> > because a new hotplug port appears below the hotplug port of the host
> > controller:
> > [  141.926865] pciehp 0000:0a:00.0:pcie204: service driver pciehp loaded
> 
> For example, for pciehp, you should already see something like this:
> 
>   pciehp 0000:80:02.0:pcie04: Slot #6 AttnBtn+ PwrCtrl+ MRL- AttnInd+ PwrInd+ HotPlug+ Surprise- Interlock- NoCompl- LLActRep+
> 
> Is that enough?  Or maybe we don't emit this message in your case for
> some reason?

It's sufficient but I'm not sure all port services print such a
welcome message.

Thanks,

Lukas

> 
> > On unplug I get this:
> > [  202.497548] pciehp 0000:0a:00.0:pcie204: unloading service driver pciehp
> 
> I'm not sure we print anything when we remove a device; maybe we
> should.
> 
> > > Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
> > > ---
> > >  drivers/pci/pcie/portdrv_core.c |    3 ---
> > >  1 file changed, 3 deletions(-)
> > > 
> > > diff --git a/drivers/pci/pcie/portdrv_core.c b/drivers/pci/pcie/portdrv_core.c
> > > index e9270b4..9698289 100644
> > > --- a/drivers/pci/pcie/portdrv_core.c
> > > +++ b/drivers/pci/pcie/portdrv_core.c
> > > @@ -499,7 +499,6 @@ static int pcie_port_probe_service(struct device *dev)
> > >  	if (status)
> > >  		return status;
> > >  
> > > -	dev_printk(KERN_DEBUG, dev, "service driver %s loaded\n", driver->name);
> > >  	get_device(dev);
> > >  	return 0;
> > >  }
> > > @@ -524,8 +523,6 @@ static int pcie_port_remove_service(struct device *dev)
> > >  	pciedev = to_pcie_device(dev);
> > >  	driver = to_service_driver(dev->driver);
> > >  	if (driver && driver->remove) {
> > > -		dev_printk(KERN_DEBUG, dev, "unloading service driver %s\n",
> > > -			driver->name);
> > >  		driver->remove(pciedev);
> > >  		put_device(dev);
> > >  	}
> > > 
--
To unsubscribe from this list: send the line "unsubscribe linux-pci" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Bjorn Helgaas Nov. 18, 2016, 2:45 p.m. UTC | #4
On Fri, Nov 18, 2016 at 11:00:43AM +0100, Lukas Wunner wrote:
> On Thu, Nov 17, 2016 at 02:49:34PM -0600, Bjorn Helgaas wrote:
> > On Thu, Nov 17, 2016 at 02:40:42PM +0100, Lukas Wunner wrote:
> > > On Wed, Nov 16, 2016 at 04:13:10PM -0600, Bjorn Helgaas wrote:
> > > > Remove the "service driver %s loaded" and unloaded messages.  I don't think
> > > > these add any useful information.
> > > 
> > > I think those particular ones have a value to some extent because
> > > they communicate for which of the port's capabilities a driver is
> > > available and loaded.  For ports below a hotplug port they also
> > > comunicate the steps to unbind the ports from their drivers when
> > > the device is unplugged.
> > 
> > None of the service drivers can be modules anymore.  I think if we
> > want a clue about whether a service driver is attached to a device, we
> > should add something to the service driver, where we can print more
> > useful information.  In general I want to move towards thinking about
> > the service drivers as optional parts of the PCI core instead of
> > separate "drivers."
> 
> The issue with making the port services modules was that user space
> doesn't load them when they're needed.  We could have solved this in
> the kernel by amending get_port_device_capability() to call
> find_module() and then try_module_get() to load the module for a port
> service and acquire a reference on it upon discovery of the services
> supported by a probed port.  Then in pcie_port_device_remove() the
> references on the loaded modules would have to be released with
> module_put().

That's a possibility, although I'm skeptical of find_module() because
there are only a handful of callers, and a generally useful feature
should be much more common.  But obviously I don't know much about
this and I'm sure it could be done.

My more serious objection is that a driver generally owns a piece of
hardware exclusively, and that's not the case with these service
drivers.  They have to cooperate with each other and the core much
more than normal drivers do.

I also think there are some pieces that can't reasonably be done as
modules because they really should be done during device enumeration.
I think there are some AER/firmware-first issues that would be
complicated if AER were a module.

> > > E.g. when I plug in the Apple Thunderbolt Ethernet adapter I get this
> > > because a new hotplug port appears below the hotplug port of the host
> > > controller:
> > > [  141.926865] pciehp 0000:0a:00.0:pcie204: service driver pciehp loaded
> > 
> > For example, for pciehp, you should already see something like this:
> > 
> >   pciehp 0000:80:02.0:pcie04: Slot #6 AttnBtn+ PwrCtrl+ MRL- AttnInd+ PwrInd+ HotPlug+ Surprise- Interlock- NoCompl- LLActRep+
> > 
> > Is that enough?  Or maybe we don't emit this message in your case for
> > some reason?
> 
> It's sufficient but I'm not sure all port services print such a
> welcome message.

I'm not sure about that either.  If there are some where we need a
message, I'd rather add it to the service instead of logging the
registration/unregistration.  We don't do that for any other driver
registration interfaces, AFAIK.

Bjorn
--
To unsubscribe from this list: send the line "unsubscribe linux-pci" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
diff mbox

Patch

diff --git a/drivers/pci/pcie/portdrv_core.c b/drivers/pci/pcie/portdrv_core.c
index e9270b4..9698289 100644
--- a/drivers/pci/pcie/portdrv_core.c
+++ b/drivers/pci/pcie/portdrv_core.c
@@ -499,7 +499,6 @@  static int pcie_port_probe_service(struct device *dev)
 	if (status)
 		return status;
 
-	dev_printk(KERN_DEBUG, dev, "service driver %s loaded\n", driver->name);
 	get_device(dev);
 	return 0;
 }
@@ -524,8 +523,6 @@  static int pcie_port_remove_service(struct device *dev)
 	pciedev = to_pcie_device(dev);
 	driver = to_service_driver(dev->driver);
 	if (driver && driver->remove) {
-		dev_printk(KERN_DEBUG, dev, "unloading service driver %s\n",
-			driver->name);
 		driver->remove(pciedev);
 		put_device(dev);
 	}