|
@@ -3261,6 +3261,7 @@ static int __devinit ehea_probe_adapter(struct platform_device *dev,
|
|
|
struct ehea_adapter *adapter;
|
|
|
const u64 *adapter_handle;
|
|
|
int ret;
|
|
|
+ int i;
|
|
|
|
|
|
if (!dev || !dev->dev.of_node) {
|
|
|
pr_err("Invalid ibmebus device probed\n");
|
|
@@ -3314,17 +3315,9 @@ static int __devinit ehea_probe_adapter(struct platform_device *dev,
|
|
|
tasklet_init(&adapter->neq_tasklet, ehea_neq_tasklet,
|
|
|
(unsigned long)adapter);
|
|
|
|
|
|
- ret = ibmebus_request_irq(adapter->neq->attr.ist1,
|
|
|
- ehea_interrupt_neq, IRQF_DISABLED,
|
|
|
- "ehea_neq", adapter);
|
|
|
- if (ret) {
|
|
|
- dev_err(&dev->dev, "requesting NEQ IRQ failed\n");
|
|
|
- goto out_kill_eq;
|
|
|
- }
|
|
|
-
|
|
|
ret = ehea_create_device_sysfs(dev);
|
|
|
if (ret)
|
|
|
- goto out_free_irq;
|
|
|
+ goto out_kill_eq;
|
|
|
|
|
|
ret = ehea_setup_ports(adapter);
|
|
|
if (ret) {
|
|
@@ -3332,15 +3325,28 @@ static int __devinit ehea_probe_adapter(struct platform_device *dev,
|
|
|
goto out_rem_dev_sysfs;
|
|
|
}
|
|
|
|
|
|
+ ret = ibmebus_request_irq(adapter->neq->attr.ist1,
|
|
|
+ ehea_interrupt_neq, IRQF_DISABLED,
|
|
|
+ "ehea_neq", adapter);
|
|
|
+ if (ret) {
|
|
|
+ dev_err(&dev->dev, "requesting NEQ IRQ failed\n");
|
|
|
+ goto out_shutdown_ports;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
ret = 0;
|
|
|
goto out;
|
|
|
|
|
|
+out_shutdown_ports:
|
|
|
+ for (i = 0; i < EHEA_MAX_PORTS; i++)
|
|
|
+ if (adapter->port[i]) {
|
|
|
+ ehea_shutdown_single_port(adapter->port[i]);
|
|
|
+ adapter->port[i] = NULL;
|
|
|
+ }
|
|
|
+
|
|
|
out_rem_dev_sysfs:
|
|
|
ehea_remove_device_sysfs(dev);
|
|
|
|
|
|
-out_free_irq:
|
|
|
- ibmebus_free_irq(adapter->neq->attr.ist1, adapter);
|
|
|
-
|
|
|
out_kill_eq:
|
|
|
ehea_destroy_eq(adapter->neq);
|
|
|
|