aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/block/rsxx/core.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/block/rsxx/core.c')
-rw-r--r--drivers/block/rsxx/core.c17
1 files changed, 14 insertions, 3 deletions
diff --git a/drivers/block/rsxx/core.c b/drivers/block/rsxx/core.c
index 774f810c6a9c..aca3f198e5cd 100644
--- a/drivers/block/rsxx/core.c
+++ b/drivers/block/rsxx/core.c
@@ -368,15 +368,26 @@ static void rsxx_eeh_failure(struct pci_dev *dev)
368{ 368{
369 struct rsxx_cardinfo *card = pci_get_drvdata(dev); 369 struct rsxx_cardinfo *card = pci_get_drvdata(dev);
370 int i; 370 int i;
371 int cnt = 0;
371 372
372 dev_err(&dev->dev, "IBM FlashSystem PCI: disabling failed card.\n"); 373 dev_err(&dev->dev, "IBM FlashSystem PCI: disabling failed card.\n");
373 374
374 card->eeh_state = 1; 375 card->eeh_state = 1;
376 card->halt = 1;
377
378 for (i = 0; i < card->n_targets; i++) {
379 spin_lock_bh(&card->ctrl[i].queue_lock);
380 cnt = rsxx_cleanup_dma_queue(&card->ctrl[i],
381 &card->ctrl[i].queue);
382 spin_unlock_bh(&card->ctrl[i].queue_lock);
375 383
376 for (i = 0; i < card->n_targets; i++) 384 cnt += rsxx_dma_cancel(&card->ctrl[i]);
377 del_timer_sync(&card->ctrl[i].activity_timer);
378 385
379 rsxx_eeh_cancel_dmas(card); 386 if (cnt)
387 dev_info(CARD_TO_DEV(card),
388 "Freed %d queued DMAs on channel %d\n",
389 cnt, card->ctrl[i].id);
390 }
380} 391}
381 392
382static int rsxx_eeh_fifo_flush_poll(struct rsxx_cardinfo *card) 393static int rsxx_eeh_fifo_flush_poll(struct rsxx_cardinfo *card)