
On 2021/1/4 15:06, Leon Romanovsky wrote:
On Mon, Jan 04, 2021 at 02:35:15PM +0800, Weihang Li wrote:
From: Yangyang Li <liyangyang20@huawei.com>
In order to improve performance by balancing the load between different banks of cache, the CQC cache is desigend to choose one of 4 banks according to lower 2 bits of CQN. The hns driver needs to count the number of CQ on each bank and then assigns the CQ being created to the bank with the minimum load first.
Signed-off-by: Yangyang Li <liyangyang20@huawei.com> Signed-off-by: Weihang Li <liweihang@huawei.com> --- drivers/infiniband/hw/hns/hns_roce_cq.c | 114 +++++++++++++++++++++++----- drivers/infiniband/hw/hns/hns_roce_device.h | 10 ++- drivers/infiniband/hw/hns/hns_roce_main.c | 8 +- 3 files changed, 104 insertions(+), 28 deletions(-)
diff --git a/drivers/infiniband/hw/hns/hns_roce_cq.c b/drivers/infiniband/hw/hns/hns_roce_cq.c index 8533fc2..00350a3 100644 --- a/drivers/infiniband/hw/hns/hns_roce_cq.c +++ b/drivers/infiniband/hw/hns/hns_roce_cq.c @@ -38,11 +38,74 @@ #include "hns_roce_hem.h" #include "hns_roce_common.h"
<...>
+ id = ida_alloc_range(&bank->ida, bank->min, bank->max, GFP_ATOMIC);
Do you create CQ in atomic context? It is probably GFP_KERNEL and not GFP_ATOMIC.
Thanks
Hi Leon, Thanks for your reminder, we should use GFP_KERNEL and the spin lock of banks needs to be changed to mutex lock. Weihang