diff options
Diffstat (limited to 'drivers/message/fusion/mptscsih.c')
| -rw-r--r-- | drivers/message/fusion/mptscsih.c | 28 | 
1 files changed, 24 insertions, 4 deletions
| diff --git a/drivers/message/fusion/mptscsih.c b/drivers/message/fusion/mptscsih.c index 525d9aea2012..cdac5578fdf2 100644 --- a/drivers/message/fusion/mptscsih.c +++ b/drivers/message/fusion/mptscsih.c | |||
| @@ -893,6 +893,7 @@ mptscsih_flush_running_cmds(MPT_SCSI_HOST *hd) | |||
| 893 | * when a lun is disable by mid-layer. | 893 | * when a lun is disable by mid-layer. | 
| 894 | * Do NOT access the referenced scsi_cmnd structure or | 894 | * Do NOT access the referenced scsi_cmnd structure or | 
| 895 | * members. Will cause either a paging or NULL ptr error. | 895 | * members. Will cause either a paging or NULL ptr error. | 
| 896 | * (BUT, BUT, BUT, the code does reference it! - mdr) | ||
| 896 | * @hd: Pointer to a SCSI HOST structure | 897 | * @hd: Pointer to a SCSI HOST structure | 
| 897 | * @vdevice: per device private data | 898 | * @vdevice: per device private data | 
| 898 | * | 899 | * | 
| @@ -2557,13 +2558,25 @@ mptscsih_ioc_reset(MPT_ADAPTER *ioc, int reset_phase) | |||
| 2557 | hd->cmdPtr = NULL; | 2558 | hd->cmdPtr = NULL; | 
| 2558 | } | 2559 | } | 
| 2559 | 2560 | ||
| 2560 | /* 7. Set flag to force DV and re-read IOC Page 3 | 2561 | /* 7. SPI: Set flag to force DV and re-read IOC Page 3 | 
| 2561 | */ | 2562 | */ | 
| 2562 | if (ioc->bus_type == SPI) { | 2563 | if (ioc->bus_type == SPI) { | 
| 2563 | ioc->spi_data.forceDv = MPT_SCSICFG_NEED_DV | MPT_SCSICFG_RELOAD_IOC_PG3; | 2564 | ioc->spi_data.forceDv = MPT_SCSICFG_NEED_DV | MPT_SCSICFG_RELOAD_IOC_PG3; | 
| 2564 | ddvtprintk(("Set reload IOC Pg3 Flag\n")); | 2565 | ddvtprintk(("Set reload IOC Pg3 Flag\n")); | 
| 2565 | } | 2566 | } | 
| 2566 | 2567 | ||
| 2568 | /* 7. FC: Rescan for blocked rports which might have returned. | ||
| 2569 | */ | ||
| 2570 | else if (ioc->bus_type == FC) { | ||
| 2571 | int work_count; | ||
| 2572 | unsigned long flags; | ||
| 2573 | |||
| 2574 | spin_lock_irqsave(&ioc->fc_rescan_work_lock, flags); | ||
| 2575 | work_count = ++ioc->fc_rescan_work_count; | ||
| 2576 | spin_unlock_irqrestore(&ioc->fc_rescan_work_lock, flags); | ||
| 2577 | if (work_count == 1) | ||
| 2578 | schedule_work(&ioc->fc_rescan_work); | ||
| 2579 | } | ||
| 2567 | dtmprintk((MYIOC_s_WARN_FMT "Post-Reset complete.\n", ioc->name)); | 2580 | dtmprintk((MYIOC_s_WARN_FMT "Post-Reset complete.\n", ioc->name)); | 
| 2568 | 2581 | ||
| 2569 | } | 2582 | } | 
| @@ -2587,6 +2600,8 @@ mptscsih_event_process(MPT_ADAPTER *ioc, EventNotificationReply_t *pEvReply) | |||
| 2587 | { | 2600 | { | 
| 2588 | MPT_SCSI_HOST *hd; | 2601 | MPT_SCSI_HOST *hd; | 
| 2589 | u8 event = le32_to_cpu(pEvReply->Event) & 0xFF; | 2602 | u8 event = le32_to_cpu(pEvReply->Event) & 0xFF; | 
| 2603 | int work_count; | ||
| 2604 | unsigned long flags; | ||
| 2590 | 2605 | ||
| 2591 | devtprintk((MYIOC_s_INFO_FMT "MPT event (=%02Xh) routed to SCSI host driver!\n", | 2606 | devtprintk((MYIOC_s_INFO_FMT "MPT event (=%02Xh) routed to SCSI host driver!\n", | 
| 2592 | ioc->name, event)); | 2607 | ioc->name, event)); | 
| @@ -2608,11 +2623,18 @@ mptscsih_event_process(MPT_ADAPTER *ioc, EventNotificationReply_t *pEvReply) | |||
| 2608 | /* FIXME! */ | 2623 | /* FIXME! */ | 
| 2609 | break; | 2624 | break; | 
| 2610 | 2625 | ||
| 2626 | case MPI_EVENT_RESCAN: /* 06 */ | ||
| 2627 | spin_lock_irqsave(&ioc->fc_rescan_work_lock, flags); | ||
| 2628 | work_count = ++ioc->fc_rescan_work_count; | ||
| 2629 | spin_unlock_irqrestore(&ioc->fc_rescan_work_lock, flags); | ||
| 2630 | if (work_count == 1) | ||
| 2631 | schedule_work(&ioc->fc_rescan_work); | ||
| 2632 | break; | ||
| 2633 | |||
| 2611 | /* | 2634 | /* | 
| 2612 | * CHECKME! Don't think we need to do | 2635 | * CHECKME! Don't think we need to do | 
| 2613 | * anything for these, but... | 2636 | * anything for these, but... | 
| 2614 | */ | 2637 | */ | 
| 2615 | case MPI_EVENT_RESCAN: /* 06 */ | ||
| 2616 | case MPI_EVENT_LINK_STATUS_CHANGE: /* 07 */ | 2638 | case MPI_EVENT_LINK_STATUS_CHANGE: /* 07 */ | 
| 2617 | case MPI_EVENT_LOOP_STATE_CHANGE: /* 08 */ | 2639 | case MPI_EVENT_LOOP_STATE_CHANGE: /* 08 */ | 
| 2618 | /* | 2640 | /* | 
| @@ -3952,8 +3974,6 @@ mptscsih_synchronize_cache(MPT_SCSI_HOST *hd, VirtDevice *vdevice) | |||
| 3952 | 3974 | ||
| 3953 | /* Search IOC page 3 to determine if this is hidden physical disk | 3975 | /* Search IOC page 3 to determine if this is hidden physical disk | 
| 3954 | */ | 3976 | */ | 
| 3955 | /* Search IOC page 3 to determine if this is hidden physical disk | ||
| 3956 | */ | ||
| 3957 | static int | 3977 | static int | 
| 3958 | mptscsih_is_phys_disk(MPT_ADAPTER *ioc, int id) | 3978 | mptscsih_is_phys_disk(MPT_ADAPTER *ioc, int id) | 
| 3959 | { | 3979 | { | 
