Received: by 2002:ad5:474a:0:0:0:0:0 with SMTP id i10csp2308600imu; Sun, 16 Dec 2018 22:43:05 -0800 (PST) X-Google-Smtp-Source: AFSGD/U1nJpySSQaCw3dclN98NWLpf7x6jzaVW3+pJKjNF/tZCtqm+Zch+ErGY2miX6RtGHis82r X-Received: by 2002:a17:902:4464:: with SMTP id k91mr11857681pld.13.1545028985381; Sun, 16 Dec 2018 22:43:05 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1545028985; cv=none; d=google.com; s=arc-20160816; b=sXAjK41AbsJTq1uqHwWpxD9M0gstjeqCWO2TrwL9dLPiYvVx0fSzN+FNI8/etdxOzG o0fDy3BbIgKRwmh+t42NOs9xlIacAv56CVK+FrVzMSwCZibsIVGyHMEETH7OjBScfZ+3 NToj7b1Hr+cnU7DoXlWFT9gfHRx/Yp+e7SMKW57Sstxe/UAhr2sI6ZyWG7SIVLE1/vZm BsyT6Nm3GWTeHP4jo5eGXfp+2w7jDaVlaMkZwuwINObNX5CcixFzO+pw+jxYIBSHIrWU WU/D6I8JgE46kq4VY3q/OSowhF3EHyOkNmgZGEaWQc4DnKfDsXpNBYW59PkHkA59C6XH VwOg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:mime-version:message-id:date:subject:cc :to:from; bh=OAHFFRD6IlNAp8QSZgPq8/rsfsc/9ZvUZ+ceE5QL/BE=; b=HMJsa8XC3OdvNdcAzlwZsV6D0bxsECaZkjNPtMKjLzSNX47V9kKtsy7rPJTmt7xM8d TdH7YK7ylzjsPBy8VeuQBVBD913o686/yR5fsGEzRaqCjK/3T4CgMC80orySRFWPPWaE bz00tFPJ4IdEddg9dATNXl2lQiywo6uxeZyrCXjl5+vX3gCyxvtDLFIkFYaHv3yKe8oE lq7MdPOd7FN1nJsbh8Vg8wHzfQBBSsVENH3hyHBf/OzfnL85hZ8NvVTGhBJPp5/jrzMa 0ru8TVGdZ0Z32k4x8bxeIRXxkxh9BPu/0I5GJeRBFBPfh2zpoC2yXemuQpAdjajWVtCN n93g== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id o28si10358564pgm.238.2018.12.16.22.42.50; Sun, 16 Dec 2018 22:43:05 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1731350AbeLQG0e (ORCPT + 99 others); Mon, 17 Dec 2018 01:26:34 -0500 Received: from szxga05-in.huawei.com ([45.249.212.191]:16141 "EHLO huawei.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1726256AbeLQG0e (ORCPT ); Mon, 17 Dec 2018 01:26:34 -0500 Received: from DGGEMS408-HUB.china.huawei.com (unknown [172.30.72.58]) by Forcepoint Email with ESMTP id 71010EBA08F52; Mon, 17 Dec 2018 14:26:29 +0800 (CST) Received: from localhost.localdomain (10.175.34.53) by DGGEMS408-HUB.china.huawei.com (10.3.19.208) with Microsoft SMTP Server id 14.3.408.0; Mon, 17 Dec 2018 14:26:22 +0800 From: Xue Chaojing To: CC: , , , , , , , , Subject: [PATCH 1/1] net-next/hinic:optmize rx refill buffer mechanism Date: Sun, 16 Dec 2018 22:32:34 +0000 Message-ID: <20181216223234.24031-1-xuechaojing@huawei.com> X-Mailer: git-send-email 2.17.1 MIME-Version: 1.0 Content-Type: text/plain X-Originating-IP: [10.175.34.53] X-CFilter-Loop: Reflected Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org In rx_alloc_pkts(), there is no need to schedule a different tasklet for refill and it will cause some extra overhead. this patch remove it. Suggested-by: Neil Horman Signed-off-by: Xue Chaojing --- drivers/net/ethernet/huawei/hinic/hinic_rx.c | 23 +++++--------------- drivers/net/ethernet/huawei/hinic/hinic_rx.h | 2 -- 2 files changed, 5 insertions(+), 20 deletions(-) diff --git a/drivers/net/ethernet/huawei/hinic/hinic_rx.c b/drivers/net/ethernet/huawei/hinic/hinic_rx.c index f86f2e693224..0098b206e7e9 100644 --- a/drivers/net/ethernet/huawei/hinic/hinic_rx.c +++ b/drivers/net/ethernet/huawei/hinic/hinic_rx.c @@ -43,6 +43,7 @@ #define RX_IRQ_NO_LLI_TIMER 0 #define RX_IRQ_NO_CREDIT 0 #define RX_IRQ_NO_RESEND_TIMER 0 +#define HINIC_RX_BUFFER_WRITE 16 /** * hinic_rxq_clean_stats - Clean the statistics of specific queue @@ -229,7 +230,6 @@ static int rx_alloc_pkts(struct hinic_rxq *rxq) wmb(); /* write all the wqes before update PI */ hinic_rq_update(rxq->rq, prod_idx); - tasklet_schedule(&rxq->rx_task); } return i; @@ -258,17 +258,6 @@ static void free_all_rx_skbs(struct hinic_rxq *rxq) } } -/** - * rx_alloc_task - tasklet for queue allocation - * @data: rx queue - **/ -static void rx_alloc_task(unsigned long data) -{ - struct hinic_rxq *rxq = (struct hinic_rxq *)data; - - (void)rx_alloc_pkts(rxq); -} - /** * rx_recv_jumbo_pkt - Rx handler for jumbo pkt * @rxq: rx queue @@ -333,6 +322,7 @@ static int rxq_recv(struct hinic_rxq *rxq, int budget) struct hinic_qp *qp = container_of(rxq->rq, struct hinic_qp, rq); u64 pkt_len = 0, rx_bytes = 0; struct hinic_rq_wqe *rq_wqe; + unsigned int free_wqebbs; int num_wqes, pkts = 0; struct hinic_sge sge; struct sk_buff *skb; @@ -376,8 +366,9 @@ static int rxq_recv(struct hinic_rxq *rxq, int budget) rx_bytes += pkt_len; } - if (pkts) - tasklet_schedule(&rxq->rx_task); /* rx_alloc_pkts */ + free_wqebbs = hinic_get_rq_free_wqebbs(rxq->rq); + if (free_wqebbs > HINIC_RX_BUFFER_WRITE) + rx_alloc_pkts(rxq); u64_stats_update_begin(&rxq->rxq_stats.syncp); rxq->rxq_stats.pkts += pkts; @@ -494,8 +485,6 @@ int hinic_init_rxq(struct hinic_rxq *rxq, struct hinic_rq *rq, sprintf(rxq->irq_name, "hinic_rxq%d", qp->q_id); - tasklet_init(&rxq->rx_task, rx_alloc_task, (unsigned long)rxq); - pkts = rx_alloc_pkts(rxq); if (!pkts) { err = -ENOMEM; @@ -512,7 +501,6 @@ int hinic_init_rxq(struct hinic_rxq *rxq, struct hinic_rq *rq, err_req_rx_irq: err_rx_pkts: - tasklet_kill(&rxq->rx_task); free_all_rx_skbs(rxq); devm_kfree(&netdev->dev, rxq->irq_name); return err; @@ -528,7 +516,6 @@ void hinic_clean_rxq(struct hinic_rxq *rxq) rx_free_irq(rxq); - tasklet_kill(&rxq->rx_task); free_all_rx_skbs(rxq); devm_kfree(&netdev->dev, rxq->irq_name); } diff --git a/drivers/net/ethernet/huawei/hinic/hinic_rx.h b/drivers/net/ethernet/huawei/hinic/hinic_rx.h index ab3fabab91b2..f8ed3fa6c8ee 100644 --- a/drivers/net/ethernet/huawei/hinic/hinic_rx.h +++ b/drivers/net/ethernet/huawei/hinic/hinic_rx.h @@ -42,8 +42,6 @@ struct hinic_rxq { char *irq_name; - struct tasklet_struct rx_task; - struct napi_struct napi; }; -- 2.17.1