aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/message/fusion/mptbase.h1
-rw-r--r--drivers/message/fusion/mptsas.c16
-rw-r--r--drivers/message/fusion/mptscsih.c19
3 files changed, 17 insertions, 19 deletions
diff --git a/drivers/message/fusion/mptbase.h b/drivers/message/fusion/mptbase.h
index 47053ac65068..5c2ce949fe80 100644
--- a/drivers/message/fusion/mptbase.h
+++ b/drivers/message/fusion/mptbase.h
@@ -631,6 +631,7 @@ typedef struct _MPT_ADAPTER
631 struct mutex sas_topology_mutex; 631 struct mutex sas_topology_mutex;
632 MPT_SAS_MGMT sas_mgmt; 632 MPT_SAS_MGMT sas_mgmt;
633 int num_ports; 633 int num_ports;
634 struct work_struct mptscsih_persistTask;
634 635
635 struct list_head fc_rports; 636 struct list_head fc_rports;
636 spinlock_t fc_rport_lock; /* list and ri flags */ 637 spinlock_t fc_rport_lock; /* list and ri flags */
diff --git a/drivers/message/fusion/mptsas.c b/drivers/message/fusion/mptsas.c
index 190bd940bb01..90660bfa148c 100644
--- a/drivers/message/fusion/mptsas.c
+++ b/drivers/message/fusion/mptsas.c
@@ -1534,6 +1534,16 @@ mptscsih_send_raid_event(MPT_ADAPTER *ioc,
1534 schedule_work(&ev->work); 1534 schedule_work(&ev->work);
1535} 1535}
1536 1536
1537/*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*/
1538/* work queue thread to clear the persitency table */
1539static void
1540mptscsih_sas_persist_clear_table(void * arg)
1541{
1542 MPT_ADAPTER *ioc = (MPT_ADAPTER *)arg;
1543
1544 mptbase_sas_persist_operation(ioc, MPI_SAS_OP_CLEAR_NOT_PRESENT);
1545}
1546
1537static int 1547static int
1538mptsas_event_process(MPT_ADAPTER *ioc, EventNotificationReply_t *reply) 1548mptsas_event_process(MPT_ADAPTER *ioc, EventNotificationReply_t *reply)
1539{ 1549{
@@ -1552,6 +1562,12 @@ mptsas_event_process(MPT_ADAPTER *ioc, EventNotificationReply_t *reply)
1552 mptscsih_send_raid_event(ioc, 1562 mptscsih_send_raid_event(ioc,
1553 (EVENT_DATA_RAID *)reply->Data); 1563 (EVENT_DATA_RAID *)reply->Data);
1554 break; 1564 break;
1565 case MPI_EVENT_PERSISTENT_TABLE_FULL:
1566 INIT_WORK(&ioc->mptscsih_persistTask,
1567 mptscsih_sas_persist_clear_table,
1568 (void *)ioc);
1569 schedule_work(&ioc->mptscsih_persistTask);
1570 break;
1555 default: 1571 default:
1556 rc = mptscsih_event_process(ioc, reply); 1572 rc = mptscsih_event_process(ioc, reply);
1557 break; 1573 break;
diff --git a/drivers/message/fusion/mptscsih.c b/drivers/message/fusion/mptscsih.c
index cdac5578fdf2..56c3d1f78f05 100644
--- a/drivers/message/fusion/mptscsih.c
+++ b/drivers/message/fusion/mptscsih.c
@@ -162,8 +162,6 @@ static void mptscsih_synchronize_cache(MPT_SCSI_HOST *hd, VirtDevice *vdevice);
162static void mptscsih_negotiate_to_asyn_narrow(MPT_SCSI_HOST *hd, VirtTarget *vtarget); 162static void mptscsih_negotiate_to_asyn_narrow(MPT_SCSI_HOST *hd, VirtTarget *vtarget);
163static int mptscsih_is_phys_disk(MPT_ADAPTER *ioc, int id); 163static int mptscsih_is_phys_disk(MPT_ADAPTER *ioc, int id);
164 164
165static struct work_struct mptscsih_persistTask;
166
167#ifdef MPTSCSIH_ENABLE_DOMAIN_VALIDATION 165#ifdef MPTSCSIH_ENABLE_DOMAIN_VALIDATION
168static int mptscsih_do_raid(MPT_SCSI_HOST *hd, u8 action, INTERNAL_CMD *io); 166static int mptscsih_do_raid(MPT_SCSI_HOST *hd, u8 action, INTERNAL_CMD *io);
169static void mptscsih_domainValidation(void *hd); 167static void mptscsih_domainValidation(void *hd);
@@ -2585,16 +2583,6 @@ mptscsih_ioc_reset(MPT_ADAPTER *ioc, int reset_phase)
2585} 2583}
2586 2584
2587/*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*/ 2585/*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*/
2588/* work queue thread to clear the persitency table */
2589static void
2590mptscsih_sas_persist_clear_table(void * arg)
2591{
2592 MPT_ADAPTER *ioc = (MPT_ADAPTER *)arg;
2593
2594 mptbase_sas_persist_operation(ioc, MPI_SAS_OP_CLEAR_NOT_PRESENT);
2595}
2596
2597/*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*/
2598int 2586int
2599mptscsih_event_process(MPT_ADAPTER *ioc, EventNotificationReply_t *pEvReply) 2587mptscsih_event_process(MPT_ADAPTER *ioc, EventNotificationReply_t *pEvReply)
2600{ 2588{
@@ -2656,13 +2644,6 @@ mptscsih_event_process(MPT_ADAPTER *ioc, EventNotificationReply_t *pEvReply)
2656 break; 2644 break;
2657 } 2645 }
2658 2646
2659 /* Persistent table is full. */
2660 case MPI_EVENT_PERSISTENT_TABLE_FULL:
2661 INIT_WORK(&mptscsih_persistTask,
2662 mptscsih_sas_persist_clear_table,(void *)ioc);
2663 schedule_work(&mptscsih_persistTask);
2664 break;
2665
2666 case MPI_EVENT_NONE: /* 00 */ 2647 case MPI_EVENT_NONE: /* 00 */
2667 case MPI_EVENT_LOG_DATA: /* 01 */ 2648 case MPI_EVENT_LOG_DATA: /* 01 */
2668 case MPI_EVENT_STATE_CHANGE: /* 02 */ 2649 case MPI_EVENT_STATE_CHANGE: /* 02 */