Skip to content

Commit 28bc6fb

Browse files
committed
Merge tag 'scsi-misc' of git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi
Pull SCSI updates from James Bottomley: "This is mostly updates of the usual driver suspects: arcmsr, scsi_debug, mpt3sas, lpfc, cxlflash, qla2xxx, aacraid, megaraid_sas, hisi_sas. We also have a rework of the libsas hotplug handling to make it more robust, a slew of 32 bit time conversions and fixes, and a host of the usual minor updates and style changes. The biggest potential for regressions is the libsas hotplug changes, but so far they seem stable under testing" * tag 'scsi-misc' of git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi: (313 commits) scsi: qla2xxx: Fix logo flag for qlt_free_session_done() scsi: arcmsr: avoid do_gettimeofday scsi: core: Add VENDOR_SPECIFIC sense code definitions scsi: qedi: Drop cqe response during connection recovery scsi: fas216: fix sense buffer initialization scsi: ibmvfc: Remove unneeded semicolons scsi: hisi_sas: fix a bug in hisi_sas_dev_gone() scsi: hisi_sas: directly attached disk LED feature for v2 hw scsi: hisi_sas: devicetree: bindings: add LED feature for v2 hw scsi: megaraid_sas: NVMe passthrough command support scsi: megaraid: use ktime_get_real for firmware time scsi: fnic: use 64-bit timestamps scsi: qedf: Fix error return code in __qedf_probe() scsi: devinfo: fix format of the device list scsi: qla2xxx: Update driver version to 10.00.00.05-k scsi: qla2xxx: Add XCB counters to debugfs scsi: qla2xxx: Fix queue ID for async abort with Multiqueue scsi: qla2xxx: Fix warning for code intentation in __qla24xx_handle_gpdb_event() scsi: qla2xxx: Fix warning during port_name debug print scsi: qla2xxx: Fix warning in qla2x00_async_iocb_timeout() ...
2 parents 0be600a + a239034 commit 28bc6fb

File tree

161 files changed

+8932
-4525
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

161 files changed

+8932
-4525
lines changed

Documentation/devicetree/bindings/scsi/hisilicon-sas.txt

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,10 @@ Main node required properties:
88
(b) "hisilicon,hip06-sas-v2" for v2 hw in hip06 chipset
99
(c) "hisilicon,hip07-sas-v2" for v2 hw in hip07 chipset
1010
- sas-addr : array of 8 bytes for host SAS address
11-
- reg : Address and length of the SAS register
11+
- reg : Contains two regions. The first is the address and length of the SAS
12+
register. The second is the address and length of CPLD register for
13+
SGPIO control. The second is optional, and should be set only when
14+
we use a CPLD for directly attached disk LED control.
1215
- hisilicon,sas-syscon: phandle of syscon used for sas control
1316
- ctrl-reset-reg : offset to controller reset register in ctrl reg
1417
- ctrl-reset-sts-reg : offset to controller reset status register in ctrl reg

Documentation/driver-api/scsi.rst

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -224,6 +224,14 @@ mid to lowlevel SCSI driver interface
224224
.. kernel-doc:: drivers/scsi/hosts.c
225225
:export:
226226

227+
drivers/scsi/scsi_common.c
228+
~~~~~~~~~~~~~~~~~~~~~~~~~~
229+
230+
general support functions
231+
232+
.. kernel-doc:: drivers/scsi/scsi_common.c
233+
:export:
234+
227235
Transport classes
228236
-----------------
229237

@@ -332,5 +340,5 @@ todo
332340
~~~~
333341

334342
Parallel (fast/wide/ultra) SCSI, USB, SATA, SAS, Fibre Channel,
335-
FireWire, ATAPI devices, Infiniband, I20, iSCSI, Parallel ports,
343+
FireWire, ATAPI devices, Infiniband, I2O, iSCSI, Parallel ports,
336344
netlink...

drivers/message/fusion/mptbase.c

Lines changed: 30 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -958,7 +958,7 @@ mpt_put_msg_frame(u8 cb_idx, MPT_ADAPTER *ioc, MPT_FRAME_HDR *mf)
958958
{
959959
u32 mf_dma_addr;
960960
int req_offset;
961-
u16 req_idx; /* Request index */
961+
u16 req_idx; /* Request index */
962962

963963
/* ensure values are reset properly! */
964964
mf->u.frame.hwhdr.msgctxu.fld.cb_idx = cb_idx; /* byte */
@@ -994,7 +994,7 @@ mpt_put_msg_frame_hi_pri(u8 cb_idx, MPT_ADAPTER *ioc, MPT_FRAME_HDR *mf)
994994
{
995995
u32 mf_dma_addr;
996996
int req_offset;
997-
u16 req_idx; /* Request index */
997+
u16 req_idx; /* Request index */
998998

999999
/* ensure values are reset properly! */
10001000
mf->u.frame.hwhdr.msgctxu.fld.cb_idx = cb_idx;
@@ -1128,11 +1128,12 @@ mpt_add_sge_64bit_1078(void *pAddr, u32 flagslength, dma_addr_t dma_addr)
11281128
static void
11291129
mpt_add_chain(void *pAddr, u8 next, u16 length, dma_addr_t dma_addr)
11301130
{
1131-
SGEChain32_t *pChain = (SGEChain32_t *) pAddr;
1132-
pChain->Length = cpu_to_le16(length);
1133-
pChain->Flags = MPI_SGE_FLAGS_CHAIN_ELEMENT;
1134-
pChain->NextChainOffset = next;
1135-
pChain->Address = cpu_to_le32(dma_addr);
1131+
SGEChain32_t *pChain = (SGEChain32_t *) pAddr;
1132+
1133+
pChain->Length = cpu_to_le16(length);
1134+
pChain->Flags = MPI_SGE_FLAGS_CHAIN_ELEMENT;
1135+
pChain->NextChainOffset = next;
1136+
pChain->Address = cpu_to_le32(dma_addr);
11361137
}
11371138

11381139
/*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*/
@@ -1147,18 +1148,18 @@ mpt_add_chain(void *pAddr, u8 next, u16 length, dma_addr_t dma_addr)
11471148
static void
11481149
mpt_add_chain_64bit(void *pAddr, u8 next, u16 length, dma_addr_t dma_addr)
11491150
{
1150-
SGEChain64_t *pChain = (SGEChain64_t *) pAddr;
1151-
u32 tmp = dma_addr & 0xFFFFFFFF;
1151+
SGEChain64_t *pChain = (SGEChain64_t *) pAddr;
1152+
u32 tmp = dma_addr & 0xFFFFFFFF;
11521153

1153-
pChain->Length = cpu_to_le16(length);
1154-
pChain->Flags = (MPI_SGE_FLAGS_CHAIN_ELEMENT |
1155-
MPI_SGE_FLAGS_64_BIT_ADDRESSING);
1154+
pChain->Length = cpu_to_le16(length);
1155+
pChain->Flags = (MPI_SGE_FLAGS_CHAIN_ELEMENT |
1156+
MPI_SGE_FLAGS_64_BIT_ADDRESSING);
11561157

1157-
pChain->NextChainOffset = next;
1158+
pChain->NextChainOffset = next;
11581159

1159-
pChain->Address.Low = cpu_to_le32(tmp);
1160-
tmp = (u32)(upper_32_bits(dma_addr));
1161-
pChain->Address.High = cpu_to_le32(tmp);
1160+
pChain->Address.Low = cpu_to_le32(tmp);
1161+
tmp = (u32)(upper_32_bits(dma_addr));
1162+
pChain->Address.High = cpu_to_le32(tmp);
11621163
}
11631164

11641165
/*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*/
@@ -1360,7 +1361,7 @@ mpt_host_page_alloc(MPT_ADAPTER *ioc, pIOCInit_t ioc_init)
13601361
ioc->add_sge(psge, flags_length, ioc->HostPageBuffer_dma);
13611362
ioc->facts.HostPageBufferSGE = ioc_init->HostPageBufferSGE;
13621363

1363-
return 0;
1364+
return 0;
13641365
}
13651366

13661367
/*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*/
@@ -2152,7 +2153,7 @@ mpt_suspend(struct pci_dev *pdev, pm_message_t state)
21522153
device_state);
21532154

21542155
/* put ioc into READY_STATE */
2155-
if(SendIocReset(ioc, MPI_FUNCTION_IOC_MESSAGE_UNIT_RESET, CAN_SLEEP)) {
2156+
if (SendIocReset(ioc, MPI_FUNCTION_IOC_MESSAGE_UNIT_RESET, CAN_SLEEP)) {
21562157
printk(MYIOC_s_ERR_FMT
21572158
"pci-suspend: IOC msg unit reset failed!\n", ioc->name);
21582159
}
@@ -6348,7 +6349,7 @@ mpt_config(MPT_ADAPTER *ioc, CONFIGPARMS *pCfg)
63486349
u8 page_type = 0, extend_page;
63496350
unsigned long timeleft;
63506351
unsigned long flags;
6351-
int in_isr;
6352+
int in_isr;
63526353
u8 issue_hard_reset = 0;
63536354
u8 retry_count = 0;
63546355

@@ -7697,7 +7698,7 @@ mpt_display_event_info(MPT_ADAPTER *ioc, EventNotificationReply_t *pEventReply)
76977698
break;
76987699
}
76997700
if (ds)
7700-
strncpy(evStr, ds, EVENT_DESCR_STR_SZ);
7701+
strlcpy(evStr, ds, EVENT_DESCR_STR_SZ);
77017702

77027703

77037704
devtprintk(ioc, printk(MYIOC_s_DEBUG_FMT
@@ -8092,15 +8093,15 @@ mpt_spi_log_info(MPT_ADAPTER *ioc, u32 log_info)
80928093
static void
80938094
mpt_sas_log_info(MPT_ADAPTER *ioc, u32 log_info, u8 cb_idx)
80948095
{
8095-
union loginfo_type {
8096-
u32 loginfo;
8097-
struct {
8098-
u32 subcode:16;
8099-
u32 code:8;
8100-
u32 originator:4;
8101-
u32 bus_type:4;
8102-
}dw;
8103-
};
8096+
union loginfo_type {
8097+
u32 loginfo;
8098+
struct {
8099+
u32 subcode:16;
8100+
u32 code:8;
8101+
u32 originator:4;
8102+
u32 bus_type:4;
8103+
} dw;
8104+
};
81048105
union loginfo_type sas_loginfo;
81058106
char *originator_desc = NULL;
81068107
char *code_desc = NULL;

drivers/message/fusion/mptctl.c

Lines changed: 7 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -2481,24 +2481,13 @@ mptctl_hp_hostinfo(unsigned long arg, unsigned int data_size)
24812481
else
24822482
karg.host_no = -1;
24832483

2484-
/* Reformat the fw_version into a string
2485-
*/
2486-
karg.fw_version[0] = ioc->facts.FWVersion.Struct.Major >= 10 ?
2487-
((ioc->facts.FWVersion.Struct.Major / 10) + '0') : '0';
2488-
karg.fw_version[1] = (ioc->facts.FWVersion.Struct.Major % 10 ) + '0';
2489-
karg.fw_version[2] = '.';
2490-
karg.fw_version[3] = ioc->facts.FWVersion.Struct.Minor >= 10 ?
2491-
((ioc->facts.FWVersion.Struct.Minor / 10) + '0') : '0';
2492-
karg.fw_version[4] = (ioc->facts.FWVersion.Struct.Minor % 10 ) + '0';
2493-
karg.fw_version[5] = '.';
2494-
karg.fw_version[6] = ioc->facts.FWVersion.Struct.Unit >= 10 ?
2495-
((ioc->facts.FWVersion.Struct.Unit / 10) + '0') : '0';
2496-
karg.fw_version[7] = (ioc->facts.FWVersion.Struct.Unit % 10 ) + '0';
2497-
karg.fw_version[8] = '.';
2498-
karg.fw_version[9] = ioc->facts.FWVersion.Struct.Dev >= 10 ?
2499-
((ioc->facts.FWVersion.Struct.Dev / 10) + '0') : '0';
2500-
karg.fw_version[10] = (ioc->facts.FWVersion.Struct.Dev % 10 ) + '0';
2501-
karg.fw_version[11] = '\0';
2484+
/* Reformat the fw_version into a string */
2485+
snprintf(karg.fw_version, sizeof(karg.fw_version),
2486+
"%.2hhu.%.2hhu.%.2hhu.%.2hhu",
2487+
ioc->facts.FWVersion.Struct.Major,
2488+
ioc->facts.FWVersion.Struct.Minor,
2489+
ioc->facts.FWVersion.Struct.Unit,
2490+
ioc->facts.FWVersion.Struct.Dev);
25022491

25032492
/* Issue a config request to get the device serial number
25042493
*/

drivers/message/fusion/mptsas.c

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1165,7 +1165,6 @@ mptsas_schedule_target_reset(void *iocp)
11651165
* issue target reset to next device in the queue
11661166
*/
11671167

1168-
head = &hd->target_reset_list;
11691168
if (list_empty(head))
11701169
return;
11711170

drivers/scsi/3w-9xxx.c

Lines changed: 11 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -369,7 +369,6 @@ static int twa_aen_drain_queue(TW_Device_Extension *tw_dev, int no_check_reset)
369369
static void twa_aen_queue_event(TW_Device_Extension *tw_dev, TW_Command_Apache_Header *header)
370370
{
371371
u32 local_time;
372-
struct timeval time;
373372
TW_Event *event;
374373
unsigned short aen;
375374
char host[16];
@@ -392,8 +391,8 @@ static void twa_aen_queue_event(TW_Device_Extension *tw_dev, TW_Command_Apache_H
392391
memset(event, 0, sizeof(TW_Event));
393392

394393
event->severity = TW_SEV_OUT(header->status_block.severity__reserved);
395-
do_gettimeofday(&time);
396-
local_time = (u32)(time.tv_sec - (sys_tz.tz_minuteswest * 60));
394+
/* event->time_stamp_sec overflows in y2106 */
395+
local_time = (u32)(ktime_get_real_seconds() - (sys_tz.tz_minuteswest * 60));
397396
event->time_stamp_sec = local_time;
398397
event->aen_code = aen;
399398
event->retrieved = TW_AEN_NOT_RETRIEVED;
@@ -473,11 +472,10 @@ static char *twa_aen_severity_lookup(unsigned char severity_code)
473472
static void twa_aen_sync_time(TW_Device_Extension *tw_dev, int request_id)
474473
{
475474
u32 schedulertime;
476-
struct timeval utc;
477475
TW_Command_Full *full_command_packet;
478476
TW_Command *command_packet;
479477
TW_Param_Apache *param;
480-
u32 local_time;
478+
time64_t local_time;
481479

482480
/* Fill out the command packet */
483481
full_command_packet = tw_dev->command_packet_virt[request_id];
@@ -499,9 +497,8 @@ static void twa_aen_sync_time(TW_Device_Extension *tw_dev, int request_id)
499497

500498
/* Convert system time in UTC to local time seconds since last
501499
Sunday 12:00AM */
502-
do_gettimeofday(&utc);
503-
local_time = (u32)(utc.tv_sec - (sys_tz.tz_minuteswest * 60));
504-
schedulertime = local_time - (3 * 86400);
500+
local_time = (ktime_get_real_seconds() - (sys_tz.tz_minuteswest * 60));
501+
div_u64_rem(local_time - (3 * 86400), 604800, &schedulertime);
505502
schedulertime = cpu_to_le32(schedulertime % 604800);
506503

507504
memcpy(param->data, &schedulertime, sizeof(u32));
@@ -648,8 +645,7 @@ static long twa_chrdev_ioctl(struct file *file, unsigned int cmd, unsigned long
648645
TW_Command_Full *full_command_packet;
649646
TW_Compatibility_Info *tw_compat_info;
650647
TW_Event *event;
651-
struct timeval current_time;
652-
u32 current_time_ms;
648+
ktime_t current_time;
653649
TW_Device_Extension *tw_dev = twa_device_extension_list[iminor(inode)];
654650
int retval = TW_IOCTL_ERROR_OS_EFAULT;
655651
void __user *argp = (void __user *)arg;
@@ -840,17 +836,17 @@ static long twa_chrdev_ioctl(struct file *file, unsigned int cmd, unsigned long
840836
break;
841837
case TW_IOCTL_GET_LOCK:
842838
tw_lock = (TW_Lock *)tw_ioctl->data_buffer;
843-
do_gettimeofday(&current_time);
844-
current_time_ms = (current_time.tv_sec * 1000) + (current_time.tv_usec / 1000);
839+
current_time = ktime_get();
845840

846-
if ((tw_lock->force_flag == 1) || (tw_dev->ioctl_sem_lock == 0) || (current_time_ms >= tw_dev->ioctl_msec)) {
841+
if ((tw_lock->force_flag == 1) || (tw_dev->ioctl_sem_lock == 0) ||
842+
ktime_after(current_time, tw_dev->ioctl_time)) {
847843
tw_dev->ioctl_sem_lock = 1;
848-
tw_dev->ioctl_msec = current_time_ms + tw_lock->timeout_msec;
844+
tw_dev->ioctl_time = ktime_add_ms(current_time, tw_lock->timeout_msec);
849845
tw_ioctl->driver_command.status = 0;
850846
tw_lock->time_remaining_msec = tw_lock->timeout_msec;
851847
} else {
852848
tw_ioctl->driver_command.status = TW_IOCTL_ERROR_STATUS_LOCKED;
853-
tw_lock->time_remaining_msec = tw_dev->ioctl_msec - current_time_ms;
849+
tw_lock->time_remaining_msec = ktime_ms_delta(tw_dev->ioctl_time, current_time);
854850
}
855851
break;
856852
case TW_IOCTL_RELEASE_LOCK:

drivers/scsi/3w-9xxx.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -666,7 +666,7 @@ typedef struct TAG_TW_Device_Extension {
666666
unsigned char event_queue_wrapped;
667667
unsigned int error_sequence_id;
668668
int ioctl_sem_lock;
669-
u32 ioctl_msec;
669+
ktime_t ioctl_time;
670670
int chrdev_request_id;
671671
wait_queue_head_t ioctl_wqueue;
672672
struct mutex ioctl_lock;

drivers/scsi/3w-sas.c

Lines changed: 6 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -221,7 +221,6 @@ static char *twl_aen_severity_lookup(unsigned char severity_code)
221221
static void twl_aen_queue_event(TW_Device_Extension *tw_dev, TW_Command_Apache_Header *header)
222222
{
223223
u32 local_time;
224-
struct timeval time;
225224
TW_Event *event;
226225
unsigned short aen;
227226
char host[16];
@@ -240,8 +239,8 @@ static void twl_aen_queue_event(TW_Device_Extension *tw_dev, TW_Command_Apache_H
240239
memset(event, 0, sizeof(TW_Event));
241240

242241
event->severity = TW_SEV_OUT(header->status_block.severity__reserved);
243-
do_gettimeofday(&time);
244-
local_time = (u32)(time.tv_sec - (sys_tz.tz_minuteswest * 60));
242+
/* event->time_stamp_sec overflows in y2106 */
243+
local_time = (u32)(ktime_get_real_seconds() - (sys_tz.tz_minuteswest * 60));
245244
event->time_stamp_sec = local_time;
246245
event->aen_code = aen;
247246
event->retrieved = TW_AEN_NOT_RETRIEVED;
@@ -408,11 +407,10 @@ static int twl_aen_read_queue(TW_Device_Extension *tw_dev, int request_id)
408407
static void twl_aen_sync_time(TW_Device_Extension *tw_dev, int request_id)
409408
{
410409
u32 schedulertime;
411-
struct timeval utc;
412410
TW_Command_Full *full_command_packet;
413411
TW_Command *command_packet;
414412
TW_Param_Apache *param;
415-
u32 local_time;
413+
time64_t local_time;
416414

417415
/* Fill out the command packet */
418416
full_command_packet = tw_dev->command_packet_virt[request_id];
@@ -434,10 +432,9 @@ static void twl_aen_sync_time(TW_Device_Extension *tw_dev, int request_id)
434432

435433
/* Convert system time in UTC to local time seconds since last
436434
Sunday 12:00AM */
437-
do_gettimeofday(&utc);
438-
local_time = (u32)(utc.tv_sec - (sys_tz.tz_minuteswest * 60));
439-
schedulertime = local_time - (3 * 86400);
440-
schedulertime = cpu_to_le32(schedulertime % 604800);
435+
local_time = (ktime_get_real_seconds() - (sys_tz.tz_minuteswest * 60));
436+
div_u64_rem(local_time - (3 * 86400), 604800, &schedulertime);
437+
schedulertime = cpu_to_le32(schedulertime);
441438

442439
memcpy(param->data, &schedulertime, sizeof(u32));
443440

0 commit comments

Comments
 (0)