Skip to content

Commit d8d08d1

Browse files
Ranjan Kumarmartinkpetersen
authored andcommitted
scsi: mpi3mr: Trigger support
Add functions to process automatic diag triggers. If a condition defined in the triggers is met, the driver will call appropriate controller functions to save the diagnostic information. Reported-by: kernel test robot <[email protected]> Closes: https://lore.kernel.org/oe-kbuild-all/[email protected]/ Co-developed-by: Sathya Prakash <[email protected]> Signed-off-by: Sathya Prakash <[email protected]> Signed-off-by: Ranjan Kumar <[email protected]> Link: https://lore.kernel.org/r/[email protected] Signed-off-by: Martin K. Petersen <[email protected]>
1 parent fc44449 commit d8d08d1

File tree

4 files changed

+564
-8
lines changed

4 files changed

+564
-8
lines changed

drivers/scsi/mpi3mr/mpi3mr.h

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -193,7 +193,12 @@ extern atomic64_t event_counter;
193193
#define MPI3MR_DEFAULT_HDB_MIN_SZ (2 * 1024 * 1024)
194194
#define MPI3MR_MAX_NUM_HDB 2
195195

196+
#define MPI3MR_HDB_TRIGGER_TYPE_UNKNOWN 0
197+
#define MPI3MR_HDB_TRIGGER_TYPE_FAULT 1
198+
#define MPI3MR_HDB_TRIGGER_TYPE_ELEMENT 2
196199
#define MPI3MR_HDB_TRIGGER_TYPE_GLOBAL 3
200+
#define MPI3MR_HDB_TRIGGER_TYPE_SOFT_RESET 4
201+
#define MPI3MR_HDB_TRIGGER_TYPE_FW_RELEASED 5
197202

198203
/* SGE Flag definition */
199204
#define MPI3MR_SGEFLAGS_SYSTEM_SIMPLE_END_OF_LIST \
@@ -218,6 +223,7 @@ extern atomic64_t event_counter;
218223
#define MPI3MR_WRITE_SAME_MAX_LEN_256_BLKS 256
219224
#define MPI3MR_WRITE_SAME_MAX_LEN_2048_BLKS 2048
220225

226+
#define MPI3MR_DRIVER_EVENT_PROCESS_TRIGGER (0xFFFD)
221227

222228
/**
223229
* struct mpi3mr_nvme_pt_sge - Structure to store SGEs for NVMe
@@ -303,6 +309,7 @@ enum mpi3mr_reset_reason {
303309
MPI3MR_RESET_FROM_FIRMWARE = 27,
304310
MPI3MR_RESET_FROM_CFG_REQ_TIMEOUT = 29,
305311
MPI3MR_RESET_FROM_SAS_TRANSPORT_TIMEOUT = 30,
312+
MPI3MR_RESET_FROM_TRIGGER = 31,
306313
};
307314

308315
#define MPI3MR_RESET_REASON_OSTYPE_LINUX 1
@@ -878,6 +885,24 @@ union mpi3mr_trigger_data {
878885
union mpi3_driver2_trigger_element element;
879886
};
880887

888+
/**
889+
* struct trigger_event_data - store trigger related
890+
* information.
891+
*
892+
* @trace_hdb: Trace diag buffer descriptor reference
893+
* @fw_hdb: FW diag buffer descriptor reference
894+
* @trigger_type: Trigger type
895+
* @trigger_specific_data: Trigger specific data
896+
* @snapdump: Snapdump enable or disable flag
897+
*/
898+
struct trigger_event_data {
899+
struct diag_buffer_desc *trace_hdb;
900+
struct diag_buffer_desc *fw_hdb;
901+
u8 trigger_type;
902+
union mpi3mr_trigger_data trigger_specific_data;
903+
bool snapdump;
904+
};
905+
881906
/**
882907
* struct diag_buffer_desc - memory descriptor structure to
883908
* store virtual, dma addresses, size, buffer status for host
@@ -1113,6 +1138,9 @@ struct scmd_priv {
11131138
* @ioctl_chain_sge: DMA buffer descriptor for IOCTL chain
11141139
* @ioctl_resp_sge: DMA buffer descriptor for Mgmt cmd response
11151140
* @ioctl_sges_allocated: Flag for IOCTL SGEs allocated or not
1141+
* @trace_release_trigger_active: Trace trigger active flag
1142+
* @fw_release_trigger_active: Fw release trigger active flag
1143+
* @snapdump_trigger_active: Snapdump trigger active flag
11161144
*/
11171145
struct mpi3mr_ioc {
11181146
struct list_head list;
@@ -1310,6 +1338,9 @@ struct mpi3mr_ioc {
13101338
struct diag_buffer_desc diag_buffers[MPI3MR_MAX_NUM_HDB];
13111339
struct mpi3_driver_page2 *driver_pg2;
13121340
spinlock_t trigger_lock;
1341+
bool snapdump_trigger_active;
1342+
bool trace_release_trigger_active;
1343+
bool fw_release_trigger_active;
13131344
};
13141345

13151346
/**
@@ -1513,4 +1544,16 @@ struct diag_buffer_desc *mpi3mr_diag_buffer_for_type(struct mpi3mr_ioc *mrioc,
15131544
u8 buf_type);
15141545
int mpi3mr_issue_diag_buf_post(struct mpi3mr_ioc *mrioc,
15151546
struct diag_buffer_desc *diag_buffer);
1547+
void mpi3mr_set_trigger_data_in_all_hdb(struct mpi3mr_ioc *mrioc,
1548+
u8 type, union mpi3mr_trigger_data *trigger_data, bool force);
1549+
void mpi3mr_reply_trigger(struct mpi3mr_ioc *mrioc, u16 iocstatus,
1550+
u32 iocloginfo);
1551+
void mpi3mr_hdb_trigger_data_event(struct mpi3mr_ioc *mrioc,
1552+
struct trigger_event_data *event_data);
1553+
void mpi3mr_scsisense_trigger(struct mpi3mr_ioc *mrioc, u8 senseky, u8 asc,
1554+
u8 ascq);
1555+
void mpi3mr_event_trigger(struct mpi3mr_ioc *mrioc, u8 event);
1556+
void mpi3mr_global_trigger(struct mpi3mr_ioc *mrioc, u64 trigger_data);
1557+
void mpi3mr_hdbstatuschg_evt_th(struct mpi3mr_ioc *mrioc,
1558+
struct mpi3_event_notification_reply *event_reply);
15161559
#endif /*MPI3MR_H_INCLUDED*/

0 commit comments

Comments
 (0)