Linux PCI subsystem development
 help / color / mirror / Atom feed
  • * [PATCH v2] driver core: Check drivers_autoprobe for all added devices
           [not found] <20251001151508.1684592-1-vincent.liu@nutanix.com>
           [not found] ` <2025100209-hefty-catalyst-e5b2@gregkh>
    @ 2025-10-13 18:14 ` Vincent Liu
      2025-10-14  5:14   ` Greg KH
      2025-10-14 20:07   ` Bjorn Helgaas
      2025-10-22 12:07 ` [PATCH v3] " Vincent Liu
      2025-11-20 17:00 ` [PATCH v3 RESEND] " Vincent Liu
      3 siblings, 2 replies; 12+ messages in thread
    From: Vincent Liu @ 2025-10-13 18:14 UTC (permalink / raw)
      To: gregkh, dakr, linux-kernel; +Cc: rafael, bhelgaas, linux-pci, vincent.liu
    
    When a device is hot-plugged, the drivers_autoprobe sysfs attribute is
    not checked. This means that drivers_autoprobe is not working as
    intended, e.g. hot-plugged PCIe devices will still be autoprobed and
    bound to drivers even with drivers_autoprobe disabled.
    
    Make sure all devices check drivers_autoprobe by pushing the
    drivers_autoprobe check into device_initial_probe. This will only
    affect devices on the PCI bus for now as device_initial_probe is only
    called by pci_bus_add_device and bus_probe_device (but bus_probe_device
    already checks for autoprobe). In particular for the PCI devices, only
    hot-plugged PCIe devices/VFs should be affected as the default value of
    pci/drivers_autoprobe remains 1 and can only be cleared from userland.
    
    Any future callers of device_initial_probe will respsect the
    drivers_autoprobe sysfs attribute, but this should be the intended
    purpose of drivers_autoprobe.
    
    Signed-off-by: Vincent Liu <vincent.liu@nutanix.com>
    ---
    v1->v2: Change commit subject to include driver core (no code change)
    	https://lore.kernel.org/20251001151508.1684592-1-vincent.liu@nutanix.com
    ---
     drivers/base/bus.c |  3 +--
     drivers/base/dd.c  | 10 +++++++++-
     2 files changed, 10 insertions(+), 3 deletions(-)
    
    diff --git a/drivers/base/bus.c b/drivers/base/bus.c
    index 5e75e1bce551..320e155c6be7 100644
    --- a/drivers/base/bus.c
    +++ b/drivers/base/bus.c
    @@ -533,8 +533,7 @@ void bus_probe_device(struct device *dev)
     	if (!sp)
     		return;
     
    -	if (sp->drivers_autoprobe)
    -		device_initial_probe(dev);
    +	device_initial_probe(dev);
     
     	mutex_lock(&sp->mutex);
     	list_for_each_entry(sif, &sp->interfaces, node)
    diff --git a/drivers/base/dd.c b/drivers/base/dd.c
    index 13ab98e033ea..37fc57e44e54 100644
    --- a/drivers/base/dd.c
    +++ b/drivers/base/dd.c
    @@ -1077,7 +1077,15 @@ EXPORT_SYMBOL_GPL(device_attach);
     
     void device_initial_probe(struct device *dev)
     {
    -	__device_attach(dev, true);
    +	struct subsys_private *sp = bus_to_subsys(dev->bus);
    +
    +	if (!sp)
    +		return;
    +
    +	if (sp->drivers_autoprobe)
    +		__device_attach(dev, true);
    +
    +	subsys_put(sp);
     }
     
     /*
    -- 
    2.43.7
    
    
    ^ permalink raw reply related	[flat|nested] 12+ messages in thread
  • * [PATCH v3] driver core: Check drivers_autoprobe for all added devices
           [not found] <20251001151508.1684592-1-vincent.liu@nutanix.com>
           [not found] ` <2025100209-hefty-catalyst-e5b2@gregkh>
      2025-10-13 18:14 ` [PATCH v2] driver core: " Vincent Liu
    @ 2025-10-22 12:07 ` Vincent Liu
      2025-11-04 13:16   ` Vincent Liu
      2025-11-20 17:00 ` [PATCH v3 RESEND] " Vincent Liu
      3 siblings, 1 reply; 12+ messages in thread
    From: Vincent Liu @ 2025-10-22 12:07 UTC (permalink / raw)
      To: gregkh; +Cc: dakr, linux-kernel, rafael, bhelgaas, linux-pci, vincent.liu
    
    When a device is hot-plugged, the drivers_autoprobe sysfs attribute is
    not checked (at least for PCI devices). This means that
    drivers_autoprobe is not working as intended, e.g. hot-plugged PCI
    devices will still be autoprobed and bound to drivers even with
    drivers_autoprobe disabled.
    
    The problem likely started when device_add() was removed from
    pci_bus_add_device() in commit 4f535093cf8f ("PCI: Put pci_dev in device
    tree as early as possible") which means that the check for
    drivers_autoprobe which used to happen in bus_probe_device() is no
    longer present (previously bus_add_device() calls bus_probe_device()).
    Conveniently, in commit 91703041697c ("PCI: Allow built-in drivers to
    use async initial probing") device_attach() was replaced with
    device_initial_probe() which faciliates this change to push the check
    for drivers_autoprobe into device_initial_probe().
    
    Make sure all devices check drivers_autoprobe by pushing the
    drivers_autoprobe check into device_initial_probe(). This will only
    affect devices on the PCI bus for now as device_initial_probe() is only
    called by pci_bus_add_device() and bus_probe_device(), but
    bus_probe_device() already checks for autoprobe, so callers of
    bus_probe_device() should not observe changes on autoprobing.
    Note also that pushing this check into device_initial_probe() rather
    than device_attach() makes it only affect automatic probing of
    drivers (e.g. when a device is hot-plugged), userspace can still choose
    to manually bind a driver by writing to drivers_probe sysfs attribute,
    even with autoprobe disabled.
    
    Any future callers of device_initial_probe() will respect the
    drivers_autoprobe sysfs attribute, which is the intended purpose of
    drivers_autoprobe.
    
    Signed-off-by: Vincent Liu <vincent.liu@nutanix.com>
    
    Link: https://lore.kernel.org/20251001151508.1684592-1-vincent.liu@nutanix.com
    ---
    v1->v2: Change commit subject to include driver core (no code change)
    	https://lore.kernel.org/20251001151508.1684592-1-vincent.liu@nutanix.com
    v2->v3: Updated commit message to use PCI and include history (no code change)
    	https://lore.kernel.org/20251013181459.517736-1-vincent.liu@nutanix.com/
    ---
     drivers/base/bus.c |  3 +--
     drivers/base/dd.c  | 10 +++++++++-
     2 files changed, 10 insertions(+), 3 deletions(-)
    
    diff --git a/drivers/base/bus.c b/drivers/base/bus.c
    index 5e75e1bce551..320e155c6be7 100644
    --- a/drivers/base/bus.c
    +++ b/drivers/base/bus.c
    @@ -533,8 +533,7 @@ void bus_probe_device(struct device *dev)
     	if (!sp)
     		return;
     
    -	if (sp->drivers_autoprobe)
    -		device_initial_probe(dev);
    +	device_initial_probe(dev);
     
     	mutex_lock(&sp->mutex);
     	list_for_each_entry(sif, &sp->interfaces, node)
    diff --git a/drivers/base/dd.c b/drivers/base/dd.c
    index 13ab98e033ea..37fc57e44e54 100644
    --- a/drivers/base/dd.c
    +++ b/drivers/base/dd.c
    @@ -1077,7 +1077,15 @@ EXPORT_SYMBOL_GPL(device_attach);
     
     void device_initial_probe(struct device *dev)
     {
    -	__device_attach(dev, true);
    +	struct subsys_private *sp = bus_to_subsys(dev->bus);
    +
    +	if (!sp)
    +		return;
    +
    +	if (sp->drivers_autoprobe)
    +		__device_attach(dev, true);
    +
    +	subsys_put(sp);
     }
     
     /*
    -- 
    2.43.7
    
    
    ^ permalink raw reply related	[flat|nested] 12+ messages in thread
  • * [PATCH v3 RESEND] driver core: Check drivers_autoprobe for all added devices
           [not found] <20251001151508.1684592-1-vincent.liu@nutanix.com>
                       ` (2 preceding siblings ...)
      2025-10-22 12:07 ` [PATCH v3] " Vincent Liu
    @ 2025-11-20 17:00 ` Vincent Liu
      3 siblings, 0 replies; 12+ messages in thread
    From: Vincent Liu @ 2025-11-20 17:00 UTC (permalink / raw)
      To: gregkh; +Cc: dakr, linux-kernel, rafael, bhelgaas, linux-pci, vincent.liu
    
    When a device is hot-plugged, the drivers_autoprobe sysfs attribute is
    not checked (at least for PCI devices). This means that
    drivers_autoprobe is not working as intended, e.g. hot-plugged PCI
    devices will still be autoprobed and bound to drivers even with
    drivers_autoprobe disabled.
    
    The problem likely started when device_add() was removed from
    pci_bus_add_device() in commit 4f535093cf8f ("PCI: Put pci_dev in device
    tree as early as possible") which means that the check for
    drivers_autoprobe which used to happen in bus_probe_device() is no
    longer present (previously bus_add_device() calls bus_probe_device()).
    Conveniently, in commit 91703041697c ("PCI: Allow built-in drivers to
    use async initial probing") device_attach() was replaced with
    device_initial_probe() which faciliates this change to push the check
    for drivers_autoprobe into device_initial_probe().
    
    Make sure all devices check drivers_autoprobe by pushing the
    drivers_autoprobe check into device_initial_probe(). This will only
    affect devices on the PCI bus for now as device_initial_probe() is only
    called by pci_bus_add_device() and bus_probe_device(), but
    bus_probe_device() already checks for autoprobe, so callers of
    bus_probe_device() should not observe changes on autoprobing.
    Note also that pushing this check into device_initial_probe() rather
    than device_attach() makes it only affect automatic probing of
    drivers (e.g. when a device is hot-plugged), userspace can still choose
    to manually bind a driver by writing to drivers_probe sysfs attribute,
    even with autoprobe disabled.
    
    Any future callers of device_initial_probe() will respect the
    drivers_autoprobe sysfs attribute, which is the intended purpose of
    drivers_autoprobe.
    
    Signed-off-by: Vincent Liu <vincent.liu@nutanix.com>
    
    Link: https://lore.kernel.org/20251001151508.1684592-1-vincent.liu@nutanix.com
    ---
    v1->v2: Change commit subject to include driver core (no code change)
    	https://lore.kernel.org/20251001151508.1684592-1-vincent.liu@nutanix.com
    v2->v3: Updated commit message to use PCI and include history (no code change)
    	https://lore.kernel.org/20251013181459.517736-1-vincent.liu@nutanix.com/
    ---
     drivers/base/bus.c |  3 +--
     drivers/base/dd.c  | 10 +++++++++-
     2 files changed, 10 insertions(+), 3 deletions(-)
    
    diff --git a/drivers/base/bus.c b/drivers/base/bus.c
    index 5e75e1bce551..320e155c6be7 100644
    --- a/drivers/base/bus.c
    +++ b/drivers/base/bus.c
    @@ -533,8 +533,7 @@ void bus_probe_device(struct device *dev)
     	if (!sp)
     		return;
     
    -	if (sp->drivers_autoprobe)
    -		device_initial_probe(dev);
    +	device_initial_probe(dev);
     
     	mutex_lock(&sp->mutex);
     	list_for_each_entry(sif, &sp->interfaces, node)
    diff --git a/drivers/base/dd.c b/drivers/base/dd.c
    index 13ab98e033ea..37fc57e44e54 100644
    --- a/drivers/base/dd.c
    +++ b/drivers/base/dd.c
    @@ -1077,7 +1077,15 @@ EXPORT_SYMBOL_GPL(device_attach);
     
     void device_initial_probe(struct device *dev)
     {
    -	__device_attach(dev, true);
    +	struct subsys_private *sp = bus_to_subsys(dev->bus);
    +
    +	if (!sp)
    +		return;
    +
    +	if (sp->drivers_autoprobe)
    +		__device_attach(dev, true);
    +
    +	subsys_put(sp);
     }
     
     /*
    -- 
    2.43.7
    
    
    ^ permalink raw reply related	[flat|nested] 12+ messages in thread

  • end of thread, other threads:[~2025-11-20 17:01 UTC | newest]
    
    Thread overview: 12+ messages (download: mbox.gz follow: Atom feed
    -- links below jump to the message on this page --
         [not found] <20251001151508.1684592-1-vincent.liu@nutanix.com>
         [not found] ` <2025100209-hefty-catalyst-e5b2@gregkh>
    2025-10-02 12:04   ` [PATCH] driver core: PCI: Check drivers_autoprobe for all added devices Vincent Liu
    2025-10-13 18:14 ` [PATCH v2] driver core: " Vincent Liu
    2025-10-14  5:14   ` Greg KH
    2025-10-14 12:10     ` Vincent Liu
    2025-10-21 12:49       ` Vincent Liu
    2025-10-22 10:32         ` Greg KH
    2025-10-14 20:07   ` Bjorn Helgaas
    2025-10-15 10:23     ` Vincent Liu
    2025-10-15 16:53       ` Bjorn Helgaas
    2025-10-22 12:07 ` [PATCH v3] " Vincent Liu
    2025-11-04 13:16   ` Vincent Liu
    2025-11-20 17:00 ` [PATCH v3 RESEND] " Vincent Liu
    

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