Skip to content

Commit 058311b

Browse files
Murthy Bhatmartinkpetersen
authored andcommitted
scsi: smartpqi: Add fw log to kdump
Add controller logs to kdump. Driver allocates DMA memory and communicates this address to FW. In the event of system crash, host driver notifies the firmware about the crash and firmware posts all the necessary logs in the pre-allocated host buffer for firmware debugging. Once firmware notifies the completion of the log uploading to the host memory and host continues with the OS crash dump saving. This is a "feature" driven capability and is backward compatible with existing controller FW. Rename some prefixes for OFA (Online-Firmware Activation ofa_*) buffers to host_memory_*. So, not a lot of actual functional changes to smartpqi_init.c, mainly determining the memory size allocation. Added a function to notify the controller to copy debug data into host memory before continuing kdump. Most of the functional changes are in smartpqi_sis.c where the actual handshaking is done. Reviewed-by: Scott Benesh <[email protected]> Reviewed-by: Mike McGowen <[email protected]> Signed-off-by: Murthy Bhat <[email protected]> Signed-off-by: Don Brace <[email protected]> Link: https://lore.kernel.org/r/[email protected] Signed-off-by: Martin K. Petersen <[email protected]>
1 parent 5b4ded3 commit 058311b

File tree

4 files changed

+221
-100
lines changed

4 files changed

+221
-100
lines changed

drivers/scsi/smartpqi/smartpqi.h

Lines changed: 21 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -505,7 +505,7 @@ struct pqi_vendor_general_request {
505505
__le64 buffer_address;
506506
__le32 buffer_length;
507507
u8 reserved[40];
508-
} ofa_memory_allocation;
508+
} host_memory_allocation;
509509
} data;
510510
};
511511

@@ -517,21 +517,30 @@ struct pqi_vendor_general_response {
517517
u8 reserved[2];
518518
};
519519

520-
#define PQI_VENDOR_GENERAL_CONFIG_TABLE_UPDATE 0
521-
#define PQI_VENDOR_GENERAL_HOST_MEMORY_UPDATE 1
520+
#define PQI_VENDOR_GENERAL_CONFIG_TABLE_UPDATE 0
521+
#define PQI_VENDOR_GENERAL_OFA_MEMORY_UPDATE 1
522+
#define PQI_VENDOR_GENERAL_CTRL_LOG_MEMORY_UPDATE 2
522523

523524
#define PQI_OFA_VERSION 1
524525
#define PQI_OFA_SIGNATURE "OFA_QRM"
525-
#define PQI_OFA_MAX_SG_DESCRIPTORS 64
526+
#define PQI_CTRL_LOG_VERSION 1
527+
#define PQI_CTRL_LOG_SIGNATURE "FW_DATA"
528+
#define PQI_HOST_MAX_SG_DESCRIPTORS 64
526529

527-
struct pqi_ofa_memory {
528-
__le64 signature; /* "OFA_QRM" */
530+
struct pqi_host_memory {
531+
__le64 signature; /* "OFA_QRM", "FW_DATA", etc. */
529532
__le16 version; /* version of this struct (1 = 1st version) */
530533
u8 reserved[62];
531534
__le32 bytes_allocated; /* total allocated memory in bytes */
532535
__le16 num_memory_descriptors;
533536
u8 reserved1[2];
534-
struct pqi_sg_descriptor sg_descriptor[PQI_OFA_MAX_SG_DESCRIPTORS];
537+
struct pqi_sg_descriptor sg_descriptor[PQI_HOST_MAX_SG_DESCRIPTORS];
538+
};
539+
540+
struct pqi_host_memory_descriptor {
541+
struct pqi_host_memory *host_memory;
542+
dma_addr_t host_memory_dma_handle;
543+
void **host_chunk_virt_address;
535544
};
536545

537546
struct pqi_aio_error_info {
@@ -867,7 +876,8 @@ struct pqi_config_table_firmware_features {
867876
#define PQI_FIRMWARE_FEATURE_FW_TRIAGE 17
868877
#define PQI_FIRMWARE_FEATURE_RPL_EXTENDED_FORMAT_4_5 18
869878
#define PQI_FIRMWARE_FEATURE_MULTI_LUN_DEVICE_SUPPORT 21
870-
#define PQI_FIRMWARE_FEATURE_MAXIMUM 21
879+
#define PQI_FIRMWARE_FEATURE_CTRL_LOGGING 22
880+
#define PQI_FIRMWARE_FEATURE_MAXIMUM 22
871881

872882
struct pqi_config_table_debug {
873883
struct pqi_config_table_section_header header;
@@ -1357,6 +1367,7 @@ struct pqi_ctrl_info {
13571367
u8 firmware_triage_supported : 1;
13581368
u8 rpl_extended_format_4_5_supported : 1;
13591369
u8 multi_lun_device_supported : 1;
1370+
u8 ctrl_logging_supported : 1;
13601371
u8 enable_r1_writes : 1;
13611372
u8 enable_r5_writes : 1;
13621373
u8 enable_r6_writes : 1;
@@ -1398,13 +1409,12 @@ struct pqi_ctrl_info {
13981409
wait_queue_head_t block_requests_wait;
13991410

14001411
struct mutex ofa_mutex;
1401-
struct pqi_ofa_memory *pqi_ofa_mem_virt_addr;
1402-
dma_addr_t pqi_ofa_mem_dma_handle;
1403-
void **pqi_ofa_chunk_virt_addr;
14041412
struct work_struct ofa_memory_alloc_work;
14051413
struct work_struct ofa_quiesce_work;
14061414
u32 ofa_bytes_requested;
14071415
u16 ofa_cancel_reason;
1416+
struct pqi_host_memory_descriptor ofa_memory;
1417+
struct pqi_host_memory_descriptor ctrl_log_memory;
14081418
enum pqi_ctrl_removal_state ctrl_removal_state;
14091419
};
14101420

0 commit comments

Comments
 (0)