net: hns3: simplify hclge_cmd_csq_clean
authorHuazhong Tan <tanhuazhong@huawei.com>
Mon, 2 Jul 2018 07:50:21 +0000 (15:50 +0800)
committerDavid S. Miller <davem@davemloft.net>
Mon, 2 Jul 2018 13:49:14 +0000 (22:49 +0900)
csq is used as a ring buffer, the value of the desc will be replaced
in next use. This patch removes the unnecessary memset, and just
updates the next_to_clean.

Signed-off-by: Huazhong Tan <tanhuazhong@huawei.com>
Signed-off-by: Peng Li <lipeng321@huawei.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_cmd.c

index 054a913..0839e84 100644 (file)
@@ -151,31 +151,20 @@ static int hclge_cmd_csq_clean(struct hclge_hw *hw)
 {
        struct hclge_dev *hdev = container_of(hw, struct hclge_dev, hw);
        struct hclge_cmq_ring *csq = &hw->cmq.csq;
-       u16 ntc = csq->next_to_clean;
-       struct hclge_desc *desc;
-       int clean = 0;
        u32 head;
+       int clean;
 
-       desc = &csq->desc[ntc];
        head = hclge_read_dev(hw, HCLGE_NIC_CSQ_HEAD_REG);
        rmb(); /* Make sure head is ready before touch any data */
 
        if (!is_valid_csq_clean_head(csq, head)) {
-               dev_warn(&hdev->pdev->dev, "wrong head (%d, %d-%d)\n", head,
-                          csq->next_to_use, csq->next_to_clean);
+               dev_warn(&hdev->pdev->dev, "wrong cmd head (%d, %d-%d)\n", head,
+                        csq->next_to_use, csq->next_to_clean);
                return 0;
        }
 
-       while (head != ntc) {
-               memset(desc, 0, sizeof(*desc));
-               ntc++;
-               if (ntc == csq->desc_num)
-                       ntc = 0;
-               desc = &csq->desc[ntc];
-               clean++;
-       }
-       csq->next_to_clean = ntc;
-
+       clean = (head - csq->next_to_clean + csq->desc_num) % csq->desc_num;
+       csq->next_to_clean = head;
        return clean;
 }