You've already forked linux-apfs
mirror of
https://github.com/linux-apfs/linux-apfs.git
synced 2026-05-01 15:00:59 -07:00
rapidio: update enumerator registration mechanism
Update enumeration/discovery method registration mechanism to allow loading enumeration/discovery methods before all mports are registered. Existing statically linked RapidIO subsystem expects that all available RapidIO mport devices are initialized and registered before the enumeration/discovery method is registered. Switching to loadable mport device drivers creates situation when mport device driver can be loaded after enumeration/discovery method is attached (e.g., loadable mport driver in a system with statically linked RapidIO core and enumerator). This also will happen in a system with hot-pluggable RapidIO controllers. To remove the dependency on the initialization/registration order this patch introduces enumeration/discovery registration mechanism that supports arbitrary registration order of mports and enumerator/discovery methods. The following registration rules are implemented: - only one enumeration/discovery method can be registered for given mport ID (including RIO_MPORT_ANY); - when new enumeration/discovery methods tries to attach to the registered mport device, method with matching mport ID will replace a default method previously registered for given mport (if any); - enumeration/discovery method with target ID=RIO_MPORT_ANY will be attached only to mports that do not have another enumerator attached to them; - when new mport device is registered with RapidIO subsystem, registration routine searches for the enumeration/discovery method with the best matching mport ID; Signed-off-by: Alexandre Bounine <alexandre.bounine@idt.com> Cc: Matt Porter <mporter@kernel.crashing.org> Cc: Li Yang <leoli@freescale.com> Cc: Kumar Gala <galak@kernel.crashing.org> Cc: Andre van Herk <andre.van.herk@Prodrive.nl> Cc: Micha Nelissen <micha.nelissen@Prodrive.nl> Cc: Stef van Os <stef.van.os@Prodrive.nl> Cc: Jean Delvare <jdelvare@suse.de> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
committed by
Linus Torvalds
parent
e6161d6426
commit
9edbc30b43
@@ -286,7 +286,6 @@ static ssize_t bus_scan_store(struct bus_type *bus, const char *buf,
|
||||
size_t count)
|
||||
{
|
||||
long val;
|
||||
struct rio_mport *port = NULL;
|
||||
int rc;
|
||||
|
||||
if (kstrtol(buf, 0, &val) < 0)
|
||||
@@ -300,21 +299,7 @@ static ssize_t bus_scan_store(struct bus_type *bus, const char *buf,
|
||||
if (val < 0 || val >= RIO_MAX_MPORTS)
|
||||
return -EINVAL;
|
||||
|
||||
port = rio_find_mport((int)val);
|
||||
|
||||
if (!port) {
|
||||
pr_debug("RIO: %s: mport_%d not available\n",
|
||||
__func__, (int)val);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
if (!port->nscan)
|
||||
return -EINVAL;
|
||||
|
||||
if (port->host_deviceid >= 0)
|
||||
rc = port->nscan->enumerate(port, 0);
|
||||
else
|
||||
rc = port->nscan->discover(port, RIO_SCAN_ENUM_NO_WAIT);
|
||||
rc = rio_mport_scan((int)val);
|
||||
exit:
|
||||
if (!rc)
|
||||
rc = count;
|
||||
|
||||
Reference in New Issue
Block a user