RDMA/cxgb4: Dispatch FATAL event on EEH errors
authorSteve Wise <swise@opengridcomputing.com>
Fri, 11 Mar 2011 22:30:53 +0000 (22:30 +0000)
committerRoland Dreier <roland@purestorage.com>
Mon, 14 Mar 2011 19:09:13 +0000 (12:09 -0700)
This at least kicks the user mode applications that are watching for
device events.

Signed-off-by: Steve Wise <swise@opengridcomputing.com>
Signed-off-by: Roland Dreier <roland@purestorage.com>
drivers/infiniband/hw/cxgb4/device.c

index 1a65ee6235bfb891ead73ff13e70f62bfaa2f5be..fadb326e41e024792166b5c83bdac80d2eeeb36d 100644 (file)
@@ -522,8 +522,16 @@ static int c4iw_uld_state_change(void *handle, enum cxgb4_state new_state)
        case CXGB4_STATE_START_RECOVERY:
                printk(KERN_INFO MOD "%s: Fatal Error\n",
                       pci_name(dev->rdev.lldi.pdev));
-               if (dev->registered)
+               dev->rdev.flags |= T4_FATAL_ERROR;
+               if (dev->registered) {
+                       struct ib_event event;
+
+                       memset(&event, 0, sizeof event);
+                       event.event  = IB_EVENT_DEVICE_FATAL;
+                       event.device = &dev->ibdev;
+                       ib_dispatch_event(&event);
                        c4iw_unregister_device(dev);
+               }
                break;
        case CXGB4_STATE_DETACH:
                printk(KERN_INFO MOD "%s: Detach\n",