Commit 5e6429df authored by Kevin Barnett's avatar Kevin Barnett Committed by Martin K. Petersen

scsi: smartpqi: correct event acknowledgment timeout issue

the driver no longer waits for the firmware to consume
the event ack IU.
Reviewed-by: default avatarScott Teel <scott.teel@microsemi.com>
Reviewed-by: default avatarScott Benesh <scott.benesh@microsemi.com>
Reviewed-by: default avatarJohannes Thumshirn <jthumshirn@suse.de>
Reviewed-by: default avatarTomas Henzl <thenzl@redhat.com>
Signed-off-by: default avatarKevin Barnett <kevin.barnett@microsemi.com>
Signed-off-by: default avatarDon Brace <don.brace@microsemi.com>
Signed-off-by: default avatarMartin K. Petersen <martin.petersen@oracle.com>
parent e57a1f9b
......@@ -634,13 +634,6 @@ struct pqi_encryption_info {
#define RAID_MAP_MAX_ENTRIES 1024
#define PQI_RESERVED_IO_SLOTS_LUN_RESET 1
#define PQI_RESERVED_IO_SLOTS_EVENT_ACK 1
#define PQI_RESERVED_IO_SLOTS_SYNCHRONOUS_REQUESTS 3
#define PQI_RESERVED_IO_SLOTS \
(PQI_RESERVED_IO_SLOTS_LUN_RESET + PQI_RESERVED_IO_SLOTS_EVENT_ACK + \
PQI_RESERVED_IO_SLOTS_SYNCHRONOUS_REQUESTS)
#define PQI_PHYSICAL_DEVICE_BUS 0
#define PQI_RAID_VOLUME_BUS 1
#define PQI_HBA_BUS 2
......@@ -884,6 +877,13 @@ struct pqi_event {
__le32 additional_event_id;
};
#define PQI_RESERVED_IO_SLOTS_LUN_RESET 1
#define PQI_RESERVED_IO_SLOTS_EVENT_ACK PQI_NUM_SUPPORTED_EVENTS
#define PQI_RESERVED_IO_SLOTS_SYNCHRONOUS_REQUESTS 3
#define PQI_RESERVED_IO_SLOTS \
(PQI_RESERVED_IO_SLOTS_LUN_RESET + PQI_RESERVED_IO_SLOTS_EVENT_ACK + \
PQI_RESERVED_IO_SLOTS_SYNCHRONOUS_REQUESTS)
struct pqi_ctrl_info {
unsigned int ctrl_id;
struct pci_dev *pci_dev;
......
......@@ -2642,26 +2642,6 @@ static void pqi_start_event_ack(struct pqi_ctrl_info *ctrl_info,
writel(iq_pi, queue_group->iq_pi[RAID_PATH]);
spin_unlock_irqrestore(&queue_group->submit_lock[RAID_PATH], flags);
/*
* We have to special-case this type of request because the firmware
* does not generate an interrupt when this type of request completes.
* Therefore, we have to poll until we see that the firmware has
* consumed the request before we move on.
*/
timeout = (PQI_EVENT_ACK_TIMEOUT * HZ) + jiffies;
while (1) {
if (*queue_group->iq_ci[RAID_PATH] == iq_pi)
break;
if (time_after(jiffies, timeout)) {
dev_err(&ctrl_info->pci_dev->dev,
"completing event acknowledge timed out\n");
break;
}
usleep_range(1000, 2000);
}
}
static void pqi_acknowledge_event(struct pqi_ctrl_info *ctrl_info,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment