From 64dcc29ed16f8670c861a8f0d0a655b1c12618a4 Mon Sep 17 00:00:00 2001 From: Steven Song Date: Tue, 1 Aug 2023 09:04:11 +0800 Subject: [PATCH] Fix the bugs of 3SNIC driver compilation failure while using clang 3snic inclusion category: bugfix bugzilla: https://gitee.com/openeuler/kernel/issues/I7PGHA CVE: NA --------------------------------- 1.fix a serial of uninitialized bugs 2.fix the bug that expression does not compute the number of elements Reviewed-by: Chen Mou Reviewed-by: Wan Renyong Reviewed-by: Yang Gan Reviewed-by: Wen Liang Signed-off-by: Steven Song --- .../ethernet/3snic/sssnic/hw/sss_adapter_mgmt.c | 17 ++++++++++++----- .../net/ethernet/3snic/sssnic/hw/sss_hwif_ceq.c | 2 +- .../3snic/sssnic/hw/sss_hwif_ctrlq_init.c | 2 +- .../ethernet/3snic/sssnic/nic/sss_nic_rss_cfg.c | 2 +- .../net/ethernet/3snic/sssnic/nic/sss_nic_rx.c | 6 +++--- .../net/ethernet/3snic/sssnic/nic/sss_nic_tx.c | 2 +- 6 files changed, 19 insertions(+), 12 deletions(-) diff --git a/drivers/net/ethernet/3snic/sssnic/hw/sss_adapter_mgmt.c b/drivers/net/ethernet/3snic/sssnic/hw/sss_adapter_mgmt.c index 232a3c2e187c..9abffd91deaa 100644 --- a/drivers/net/ethernet/3snic/sssnic/hw/sss_adapter_mgmt.c +++ b/drivers/net/ethernet/3snic/sssnic/hw/sss_adapter_mgmt.c @@ -217,7 +217,7 @@ static unsigned char sss_get_pci_bus_id(struct sss_pci_adapter *adapter) return bus_id; } -static bool sss_alloc_card_id(void) +static bool sss_alloc_card_id(u8 *id) { unsigned char i; @@ -225,6 +225,7 @@ static bool sss_alloc_card_id(void) for (i = 0; i < SSS_CARD_CNT_MAX; i++) { if (test_and_set_bit(i, &g_index_bit_map) == 0) { sss_chip_node_unlock(); + *id = i; return true; } } @@ -233,10 +234,15 @@ static bool sss_alloc_card_id(void) return false; } +static void sss_free_card_id(u8 id) +{ + clear_bit(id, &g_index_bit_map); +} + int sss_alloc_chip_node(struct sss_pci_adapter *adapter) { struct sss_card_node *chip_node = NULL; - unsigned char i; + unsigned char card_id; unsigned char bus_id; bus_id = sss_get_pci_bus_id(adapter); @@ -250,14 +256,15 @@ int sss_alloc_chip_node(struct sss_pci_adapter *adapter) chip_node->bus_id = bus_id; - if (snprintf(chip_node->chip_name, IFNAMSIZ, "%s%u", SSS_CHIP_NAME, i) < 0) { + if (!sss_alloc_card_id(&card_id)) { kfree(chip_node); + sdk_err(&adapter->pcidev->dev, "chip node is exceed\n"); return -EINVAL; } - if (!sss_alloc_card_id()) { + if (snprintf(chip_node->chip_name, IFNAMSIZ, "%s%u", SSS_CHIP_NAME, card_id) < 0) { + sss_free_card_id(card_id); kfree(chip_node); - sdk_err(&adapter->pcidev->dev, "chip node is exceed\n"); return -EINVAL; } diff --git a/drivers/net/ethernet/3snic/sssnic/hw/sss_hwif_ceq.c b/drivers/net/ethernet/3snic/sssnic/hw/sss_hwif_ceq.c index cb0ba8a8c1ef..ffc3d4bdb429 100644 --- a/drivers/net/ethernet/3snic/sssnic/hw/sss_hwif_ceq.c +++ b/drivers/net/ethernet/3snic/sssnic/hw/sss_hwif_ceq.c @@ -302,7 +302,7 @@ int sss_hwif_init_ceq(struct sss_hwdev *hwdev) act_num = sss_alloc_irq(hwdev, SSS_SERVICE_TYPE_INTF, irq_desc, ceq_num); if (act_num == 0) { sdk_err(hwdev->dev_hdl, "Fail to alloc irq, ceq_num: %u\n", ceq_num); - return ret; + return -EINVAL; } if (act_num < ceq_num) { diff --git a/drivers/net/ethernet/3snic/sssnic/hw/sss_hwif_ctrlq_init.c b/drivers/net/ethernet/3snic/sssnic/hw/sss_hwif_ctrlq_init.c index b177cbf7aff7..2919357a5973 100644 --- a/drivers/net/ethernet/3snic/sssnic/hw/sss_hwif_ctrlq_init.c +++ b/drivers/net/ethernet/3snic/sssnic/hw/sss_hwif_ctrlq_init.c @@ -293,7 +293,7 @@ static int sss_init_ctrlq(struct sss_hwdev *hwdev) { u8 i; u8 q_type; - int ret; + int ret = -ENOMEM; struct sss_ctrlq_info *ctrlq_info = NULL; ctrlq_info = kzalloc(sizeof(*ctrlq_info), GFP_KERNEL); diff --git a/drivers/net/ethernet/3snic/sssnic/nic/sss_nic_rss_cfg.c b/drivers/net/ethernet/3snic/sssnic/nic/sss_nic_rss_cfg.c index cd6d22531055..a52e7a45f574 100644 --- a/drivers/net/ethernet/3snic/sssnic/nic/sss_nic_rss_cfg.c +++ b/drivers/net/ethernet/3snic/sssnic/nic/sss_nic_rss_cfg.c @@ -104,7 +104,7 @@ static void sss_nic_fill_indir_tbl(struct sss_nic_rss_indirect_table *indir_tbl, indir_tbl->entry[i] = (u16)indir_table[i]; temp_entry = (u32 *)indir_tbl->entry; - tbl_size = sizeof(indir_tbl->entry) / sizeof(u32); + tbl_size = sizeof(indir_tbl->entry) / (sizeof(u32)); for (i = 0; i < tbl_size; i++) temp_entry[i] = cpu_to_be32(temp_entry[i]); } diff --git a/drivers/net/ethernet/3snic/sssnic/nic/sss_nic_rx.c b/drivers/net/ethernet/3snic/sssnic/nic/sss_nic_rx.c index a80f51a69cd2..fa3d5ccf2887 100644 --- a/drivers/net/ethernet/3snic/sssnic/nic/sss_nic_rx.c +++ b/drivers/net/ethernet/3snic/sssnic/nic/sss_nic_rx.c @@ -674,9 +674,9 @@ do { \ #define sss_nic_xdp_update_rx_info(rq_desc, wqe_num) \ do { \ struct sss_nic_rx_desc *_rx_desc = NULL; \ - u16 _wqe_num = wqe_num; \ + u16 _wqe_cnt = wqe_num; \ \ - while (_wqe_num > 0) { \ + while (_wqe_cnt > 0) { \ _rx_desc = &(rq_desc)->rx_desc_group[(rq_desc)->ci & (rq_desc)->qid_mask]; \ if (likely(page_to_nid(_rx_desc->page) == numa_node_id())) \ sss_nic_rx_reuse_dma_page((rq_desc), _rx_desc); \ @@ -686,7 +686,7 @@ do { \ _rx_desc->buf_daddr = 0; \ _rx_desc->page = NULL; \ \ - _wqe_num--; \ + _wqe_cnt--; \ } \ } while (0) diff --git a/drivers/net/ethernet/3snic/sssnic/nic/sss_nic_tx.c b/drivers/net/ethernet/3snic/sssnic/nic/sss_nic_tx.c index 774cd9f4b5ba..021054c1cf84 100644 --- a/drivers/net/ethernet/3snic/sssnic/nic/sss_nic_tx.c +++ b/drivers/net/ethernet/3snic/sssnic/nic/sss_nic_tx.c @@ -666,7 +666,7 @@ static netdev_tx_t sss_nic_send_one_skb(struct sk_buff *skb, struct sss_nic_sq_desc *sq_desc) { u32 qinfo = 0; - u32 offload; + u32 offload = 0; u16 pi = 0; u16 owner; u16 sge_cnt; -- GitLab