]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
RDMA/hns: Fix insufficient extend DB for VFs.
authorChengchang Tang <tangchengchang@huawei.com>
Wed, 10 Jul 2024 13:37:04 +0000 (21:37 +0800)
committerLeon Romanovsky <leon@kernel.org>
Thu, 11 Jul 2024 10:25:12 +0000 (13:25 +0300)
VFs and its PF will share the memory of the extend DB. Currently,
the number of extend DB allocated by driver is only enough for PF.
This leads to a probability of DB loss and some other problems in
scenarios where both PF and VFs use a large number of QPs.

Fixes: 6b63597d3540 ("RDMA/hns: Add TSQ link table support")
Signed-off-by: Chengchang Tang <tangchengchang@huawei.com>
Signed-off-by: Junxian Huang <huangjunxian6@hisilicon.com>
Link: https://lore.kernel.org/r/20240710133705.896445-8-huangjunxian6@hisilicon.com
Signed-off-by: Leon Romanovsky <leon@kernel.org>
drivers/infiniband/hw/hns/hns_roce_hw_v2.c

index cbbc142afc1be5e123edc600124df935484bbfc2..aecd137c1e6052a07ebf7f9b640afded6a396548 100644 (file)
@@ -2463,14 +2463,16 @@ static int set_llm_cfg_to_hw(struct hns_roce_dev *hr_dev,
 static struct hns_roce_link_table *
 alloc_link_table_buf(struct hns_roce_dev *hr_dev)
 {
+       u16 total_sl = hr_dev->caps.sl_num * hr_dev->func_num;
        struct hns_roce_v2_priv *priv = hr_dev->priv;
        struct hns_roce_link_table *link_tbl;
        u32 pg_shift, size, min_size;
 
        link_tbl = &priv->ext_llm;
        pg_shift = hr_dev->caps.llm_buf_pg_sz + PAGE_SHIFT;
-       size = hr_dev->caps.num_qps * HNS_ROCE_V2_EXT_LLM_ENTRY_SZ;
-       min_size = HNS_ROCE_EXT_LLM_MIN_PAGES(hr_dev->caps.sl_num) << pg_shift;
+       size = hr_dev->caps.num_qps * hr_dev->func_num *
+              HNS_ROCE_V2_EXT_LLM_ENTRY_SZ;
+       min_size = HNS_ROCE_EXT_LLM_MIN_PAGES(total_sl) << pg_shift;
 
        /* Alloc data table */
        size = max(size, min_size);