habanalabs/gaudi: fix shift out of bounds

When validating NIC queues, queue offset calculation must be
performed only for NIC queues.

Signed-off-by: Ofir Bitton <obitton@habana.ai>
Reviewed-by: Oded Gabbay <ogabbay@kernel.org>
Signed-off-by: Oded Gabbay <ogabbay@kernel.org>
This commit is contained in:
Ofir Bitton 2022-06-15 16:11:31 +03:00 committed by Oded Gabbay
parent d64a29af12
commit 01622098ae

View File

@ -5692,15 +5692,17 @@ static int gaudi_parse_cb_no_ext_queue(struct hl_device *hdev,
{
struct asic_fixed_properties *asic_prop = &hdev->asic_prop;
struct gaudi_device *gaudi = hdev->asic_specific;
u32 nic_mask_q_id = 1 << (HW_CAP_NIC_SHIFT +
((parser->hw_queue_id - GAUDI_QUEUE_ID_NIC_0_0) >> 2));
u32 nic_queue_offset, nic_mask_q_id;
if ((parser->hw_queue_id >= GAUDI_QUEUE_ID_NIC_0_0) &&
(parser->hw_queue_id <= GAUDI_QUEUE_ID_NIC_9_3) &&
(!(gaudi->hw_cap_initialized & nic_mask_q_id))) {
dev_err(hdev->dev, "h/w queue %d is disabled\n",
parser->hw_queue_id);
return -EINVAL;
(parser->hw_queue_id <= GAUDI_QUEUE_ID_NIC_9_3)) {
nic_queue_offset = parser->hw_queue_id - GAUDI_QUEUE_ID_NIC_0_0;
nic_mask_q_id = 1 << (HW_CAP_NIC_SHIFT + (nic_queue_offset >> 2));
if (!(gaudi->hw_cap_initialized & nic_mask_q_id)) {
dev_err(hdev->dev, "h/w queue %d is disabled\n", parser->hw_queue_id);
return -EINVAL;
}
}
/* For internal queue jobs just check if CB address is valid */