mirror of
https://github.com/edk2-porting/linux-next.git
synced 2024-12-22 20:23:57 +08:00
scsi: smartpqi: correct event acknowledgment timeout issue
the driver no longer waits for the firmware to consume the event ack IU. Reviewed-by: Scott Teel <scott.teel@microsemi.com> Reviewed-by: Scott Benesh <scott.benesh@microsemi.com> Reviewed-by: Johannes Thumshirn <jthumshirn@suse.de> Reviewed-by: Tomas Henzl <thenzl@redhat.com> Signed-off-by: Kevin Barnett <kevin.barnett@microsemi.com> Signed-off-by: Don Brace <don.brace@microsemi.com> Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
This commit is contained in:
parent
e57a1f9b2f
commit
5e6429df9c
@ -634,13 +634,6 @@ struct pqi_encryption_info {
|
|||||||
|
|
||||||
#define RAID_MAP_MAX_ENTRIES 1024
|
#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_PHYSICAL_DEVICE_BUS 0
|
||||||
#define PQI_RAID_VOLUME_BUS 1
|
#define PQI_RAID_VOLUME_BUS 1
|
||||||
#define PQI_HBA_BUS 2
|
#define PQI_HBA_BUS 2
|
||||||
@ -884,6 +877,13 @@ struct pqi_event {
|
|||||||
__le32 additional_event_id;
|
__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 {
|
struct pqi_ctrl_info {
|
||||||
unsigned int ctrl_id;
|
unsigned int ctrl_id;
|
||||||
struct pci_dev *pci_dev;
|
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]);
|
writel(iq_pi, queue_group->iq_pi[RAID_PATH]);
|
||||||
|
|
||||||
spin_unlock_irqrestore(&queue_group->submit_lock[RAID_PATH], flags);
|
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,
|
static void pqi_acknowledge_event(struct pqi_ctrl_info *ctrl_info,
|
||||||
|
Loading…
Reference in New Issue
Block a user