{
struct ib_device *ibdev;
struct mlx4_dev *dev;
+ int err = 0;
unsigned long flags;
spin_lock_irqsave(&ibdev->event_handler_lock, &flags);
-
// set device to RESET_PENDING mode
if (!(dev->flags & (MLX4_FLAG_RESET_CLIENT | MLX4_FLAG_RESET_DRIVER))) {
PIO_WORKITEM reset_work;
reset_work = IoAllocateWorkItem( dev->pdev->p_self_do );
if (!reset_work) {
mlx4_err(dev, "mlx4_reset_request IoAllocateWorkItem failed, reset will not be propagated\n");
- return -EFAULT;
+ err = -EFAULT;
+ goto err_workitem;
}
event_handler->rsrv_ptr = reset_work;
IoQueueWorkItem( reset_work, card_reset_wi, DelayedWorkQueue, event_handler );
}
+err_workitem:
spin_unlock_irqrestore(&ibdev->event_handler_lock, flags);
-
-
- return 0;
+ return err;
}
int mlx4_reset_cb_register( struct ib_event_handler *event_handler )