Commit 86ea8acc authored by David Kershner's avatar David Kershner Committed by Greg Kroah-Hartman

staging: unisys: Don't hold device responses until driver loads

Currently if a driver is not loaded for a device, we will not
respond to the device create until it is done. This causes
s-Par to not mark the partition running if the driver for the
device is not loaded. Since there are several devices that
could be assigned to a guest that don't have an actual
driver this will cause us to never go running.

If the device driver is loaded, we WILL continue to only
respond to the device PAUSE message when the device driver
has responded that it is done with the device.
Signed-off-by: default avatarDavid Kershner <david.kershner@unisys.com>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent 5e54654c
...@@ -70,7 +70,6 @@ static const struct attribute_group *visorbus_bus_groups[] = { ...@@ -70,7 +70,6 @@ static const struct attribute_group *visorbus_bus_groups[] = {
NULL, NULL,
}; };
/** This describes the TYPE of bus. /** This describes the TYPE of bus.
* (Don't confuse this with an INSTANCE of the bus.) * (Don't confuse this with an INSTANCE of the bus.)
*/ */
...@@ -745,19 +744,6 @@ visordriver_probe_device(struct device *xdev) ...@@ -745,19 +744,6 @@ visordriver_probe_device(struct device *xdev)
away: away:
if (rc != 0) if (rc != 0)
put_device(&dev->device); put_device(&dev->device);
/* We could get here more than once if the child driver module is
* unloaded and re-loaded while devices are present. That's why we
* need a flag to be sure that we only respond to the device_create
* once. We cannot respond to the device_create prior to here,
* because until we call drv->probe() above, the channel has not been
* initialized.
*/
if (!dev->responded_to_device_create) {
dev->responded_to_device_create = true;
if (chipset_responders.device_create)
(*chipset_responders.device_create)(dev, rc);
}
return rc; return rc;
} }
...@@ -1305,15 +1291,15 @@ chipset_device_create(struct visor_device *dev_info) ...@@ -1305,15 +1291,15 @@ chipset_device_create(struct visor_device *dev_info)
POSTCODE_SEVERITY_INFO); POSTCODE_SEVERITY_INFO);
rc = create_visor_device(dev_info); rc = create_visor_device(dev_info);
if (rc < 0) { if (chipset_responders.device_create)
chipset_responders.device_create(dev_info, rc);
if (rc < 0)
POSTCODE_LINUX_4(DEVICE_CREATE_FAILURE_PC, dev_no, bus_no, POSTCODE_LINUX_4(DEVICE_CREATE_FAILURE_PC, dev_no, bus_no,
POSTCODE_SEVERITY_ERR); POSTCODE_SEVERITY_ERR);
if (chipset_responders.device_create) else
(*chipset_responders.device_create)(dev_info, rc); POSTCODE_LINUX_4(DEVICE_CREATE_SUCCESS_PC, dev_no, bus_no,
} POSTCODE_SEVERITY_INFO);
POSTCODE_LINUX_4(DEVICE_CREATE_SUCCESS_PC, dev_no, bus_no,
POSTCODE_SEVERITY_INFO);
} }
static void static void
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment