diff --git a/drivers/infiniband/hw/hns/hns_roce_hw_v1.c b/drivers/infiniband/hw/hns/hns_roce_hw_v1.c index 87e519f514ee3c20218e750e20177026e4c560c4..6f308c69d4b1684f94f94366699576044a3f2be9 100644 --- a/drivers/infiniband/hw/hns/hns_roce_hw_v1.c +++ b/drivers/infiniband/hw/hns/hns_roce_hw_v1.c @@ -1812,9 +1812,12 @@ static int hns_roce_v1_set_gid(struct hns_roce_dev *hr_dev, u8 port, { u32 *p = NULL; u8 gid_idx = 0; + unsigned long flags; gid_idx = hns_get_gid_index(hr_dev, port, gid_index); + spin_lock_irqsave(&hr_dev->iboe.lock, flags); + p = (u32 *)&gid->raw[0]; roce_raw_write(*p, hr_dev->reg_base + ROCEE_PORT_GID_L_0_REG + (HNS_ROCE_V1_GID_NUM * gid_idx)); @@ -1831,6 +1834,8 @@ static int hns_roce_v1_set_gid(struct hns_roce_dev *hr_dev, u8 port, roce_raw_write(*p, hr_dev->reg_base + ROCEE_PORT_GID_H_0_REG + (HNS_ROCE_V1_GID_NUM * gid_idx)); + spin_unlock_irqrestore(&hr_dev->iboe.lock, flags); + return 0; } diff --git a/drivers/infiniband/hw/hns/hns_roce_main.c b/drivers/infiniband/hw/hns/hns_roce_main.c index 7308c950ebf0fd152bc3716d2f7cf8b746539079..1ad25e9491d846d510b6b2b544d9a336aeb956e5 100644 --- a/drivers/infiniband/hw/hns/hns_roce_main.c +++ b/drivers/infiniband/hw/hns/hns_roce_main.c @@ -99,7 +99,6 @@ static int hns_roce_add_gid(const union ib_gid *gid, { struct hns_roce_dev *hr_dev = to_hr_dev(attr->device); u8 port = attr->port_num - 1; - unsigned long flags; int ret; if (port >= hr_dev->caps.num_ports || @@ -109,7 +108,6 @@ static int hns_roce_add_gid(const union ib_gid *gid, return -EINVAL; } - spin_lock_irqsave(&hr_dev->iboe.lock, flags); #ifdef CONFIG_KERNEL_419 ret = hr_dev->hw->set_gid(hr_dev, port, attr->index, &attr->gid, attr); #else @@ -121,8 +119,6 @@ static int hns_roce_add_gid(const union ib_gid *gid, dev_err(hr_dev->dev, "set gid failed(%d), index = %d", ret, attr->index); - spin_unlock_irqrestore(&hr_dev->iboe.lock, flags); - return ret; }