Commit fa3be0f2 authored by Xiang Chen's avatar Xiang Chen Committed by Martin K. Petersen
Browse files

scsi: hisi_sas: change slot index allocation mode



Currently we find the lowest available empty bit in the IPTT bitmap to
allocate the IPTT for a command.

To reduce possibility of hitting unknown SoC bugs and also aid in the
debugging of those same bugs, change the allocation mode.

The next allocation method is to use the next free slot adjacent to the
most recently allocated slot, in a round-robin fashion.

Signed-off-by: default avatarXiang Chen <chenxiang66@hisilicon.com>
Signed-off-by: default avatarJohn Garry <john.garry@huawei.com>
Signed-off-by: default avatarMartin K. Petersen <martin.petersen@oracle.com>
parent 757db2da
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -274,6 +274,7 @@ struct hisi_hba {
	struct workqueue_struct *wq;

	int slot_index_count;
	int last_slot_index;
	unsigned long *slot_index_tags;
	unsigned long reject_stp_links_msk;

+10 −3
Original line number Diff line number Diff line
@@ -195,11 +195,18 @@ static int hisi_sas_slot_index_alloc(struct hisi_hba *hisi_hba, int *slot_idx)
	unsigned int index;
	void *bitmap = hisi_hba->slot_index_tags;

	index = find_first_zero_bit(bitmap, hisi_hba->slot_index_count);
	index = find_next_zero_bit(bitmap, hisi_hba->slot_index_count,
			hisi_hba->last_slot_index + 1);
	if (index >= hisi_hba->slot_index_count) {
		index = find_next_zero_bit(bitmap, hisi_hba->slot_index_count,
					   0);
		if (index >= hisi_hba->slot_index_count)
			return -SAS_QUEUE_FULL;
	}
	hisi_sas_slot_index_set(hisi_hba, index);
	*slot_idx = index;
	hisi_hba->last_slot_index = index;

	return 0;
}