提交 7bea75c2 编写于 作者: L Lang Cheng 提交者: Xie XiuQi

RDMA/hns: Remove jiffies operation in disable interrupt context

driver inclusion
category: bugfix
bugzilla: NA
CVE: NA

When clear hem,the father function may use spin_lock_irqsave,
then jiffies may not work.
We can use only the xdelay() for delay control.
Signed-off-by: NLang Cheng <chenglang@huawei.com>
Reviewed-by: NHanjun Guo <guohanjun@huawei.com>
Signed-off-by: NYang Yingliang <yangyingliang@huawei.com>
上级 65d1d345
...@@ -417,18 +417,19 @@ static int hns_roce_set_hem(struct hns_roce_dev *hr_dev, ...@@ -417,18 +417,19 @@ static int hns_roce_set_hem(struct hns_roce_dev *hr_dev,
bt_cmd = hr_dev->reg_base + ROCEE_BT_CMD_H_REG; bt_cmd = hr_dev->reg_base + ROCEE_BT_CMD_H_REG;
end = msecs_to_jiffies(HW_SYNC_TIMEOUT_MSECS) + jiffies; end = HW_SYNC_TIMEOUT_MSECS;
while (1) { while (end > 0) {
if (readl(bt_cmd) >> BT_CMD_SYNC_SHIFT) { if (!(readl(bt_cmd) >> BT_CMD_SYNC_SHIFT))
if (!(time_before(jiffies, end))) {
dev_err(dev, "Write bt_cmd err,hw_sync is not zero.\n");
spin_unlock_irqrestore(lock, flags);
return -EBUSY;
}
} else {
break; break;
}
mdelay(HW_SYNC_SLEEP_TIME_INTERVAL); mdelay(HW_SYNC_SLEEP_TIME_INTERVAL);
end -= HW_SYNC_SLEEP_TIME_INTERVAL;
}
if (end <= 0) {
dev_err(dev, "Write bt_cmd err,hw_sync is not zero.\n");
spin_unlock_irqrestore(lock, flags);
return -EBUSY;
} }
bt_cmd_l = cpu_to_le32(bt_ba); bt_cmd_l = cpu_to_le32(bt_ba);
......
...@@ -2526,19 +2526,18 @@ static void hns_roce_v1_clear_hem(struct hns_roce_dev *hr_dev, ...@@ -2526,19 +2526,18 @@ static void hns_roce_v1_clear_hem(struct hns_roce_dev *hr_dev,
bt_cmd = hr_dev->reg_base + ROCEE_BT_CMD_H_REG; bt_cmd = hr_dev->reg_base + ROCEE_BT_CMD_H_REG;
end = msecs_to_jiffies(HW_SYNC_TIMEOUT_MSECS) + jiffies; end = HW_SYNC_TIMEOUT_MSECS;
while (1) { while (end > 0) {
if (readl(bt_cmd) >> BT_CMD_SYNC_SHIFT) { if (!(readl(bt_cmd) >> BT_CMD_SYNC_SHIFT))
if (!(time_before(jiffies, end))) {
dev_err(dev, "Write bt_cmd err,hw_sync is not zero.\n");
spin_unlock_irqrestore(&hr_dev->bt_cmd_lock,
flags);
return;
}
} else {
break; break;
}
msleep(HW_SYNC_SLEEP_TIME_INTERVAL); mdelay(HW_SYNC_SLEEP_TIME_INTERVAL);
end -= HW_SYNC_SLEEP_TIME_INTERVAL;
}
if (end <= 0) {
dev_err(dev, "Write bt_cmd err,hw_sync is not zero.\n");
spin_unlock_irqrestore(&hr_dev->bt_cmd_lock, flags);
return;
} }
bt_cmd_val[0] = cpu_to_le32(bt_ba); bt_cmd_val[0] = cpu_to_le32(bt_ba);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册