Received: by 2002:a25:7ec1:0:0:0:0:0 with SMTP id z184csp4732806ybc; Tue, 26 Nov 2019 13:48:32 -0800 (PST) X-Google-Smtp-Source: APXvYqwFm8WHJxpRvgCRHWsYdVd+bQXpy2iLOChefqoPJsDU4bOX9KR8b+oNHz0tUEmeZTF4Fluj X-Received: by 2002:a17:906:1e16:: with SMTP id g22mr30679785ejj.78.1574804912753; Tue, 26 Nov 2019 13:48:32 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1574804912; cv=none; d=google.com; s=arc-20160816; b=LMQSXC6QbcD3M+aerAGMkg6XEw89DQ4YWBG/93JgRXPNd4EgeTWQ+ZB5gTOvdjEurG zCfhn60Qvtow739feIbCsXrSYQ32/CKBKjmXUMZAJsUCekAi6mT8olURN67QLzU0AwfI +zjHfzWxCTbybgrMF4NEphcUt79L8yE/18cf9Y9OjdYRvBPK1jNY9v8sEa/eDlrKAVD+ c/znYfKpV5c325De+lI6oWXMSgI+cioP51Ya7/i/8EK/tjjOZ+UlbMeYFZg8StT+mSqt zLfeSuzxr6DBNyXe9VRcvSXr3pg+7Fukng6Wlsk7ltK/cxJZLY+dJs9FXPuUNRmA6jPk 1JTg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from; bh=6k7w5Q1N3NdDBR871E61NFVoL9TICYCgJ3JXVxLVQNg=; b=EOoH9IuoQpsSIOrauAyoBUl/NOoweEZFlqUeIXTDjM0bYgyjANxOUxZIjqOhGiMepE 2okKq1nX9QBhD9E1KtJ6ZR8W1T3KP7MtGmFT/5VqRFwz6jlKajhfMNjTHXbhYDaf8xaT QwoRAkvII2CbY6POQllK/Mb8tEbATz8g/NjVQ+7r8EAfNYiqnt6Wr8XCG//JIFoWZWDV ZpeRgaKhuZR3/EFdqehhwGJkPg9MPJPLgn26gPUDvno0DdoChGwbm13caYYTcYxk3iHF KOgSB8hACw4lfYnM8M5nZSk6/qiH4o0H4GaBB5t7oztbltsLvoVP4Cj2N4/fQmf7UhA6 oYNQ== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-wireless-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-wireless-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 v9si9453522edf.36.2019.11.26.13.48.07; Tue, 26 Nov 2019 13:48:32 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-wireless-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-wireless-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-wireless-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727060AbfKZVrU (ORCPT + 99 others); Tue, 26 Nov 2019 16:47:20 -0500 Received: from smail.rz.tu-ilmenau.de ([141.24.186.67]:46400 "EHLO smail.rz.tu-ilmenau.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727016AbfKZVrT (ORCPT ); Tue, 26 Nov 2019 16:47:19 -0500 Received: from localhost.localdomain (unknown [141.24.207.101]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smail.rz.tu-ilmenau.de (Postfix) with ESMTPSA id 0B3FA58007F; Tue, 26 Nov 2019 22:47:17 +0100 (CET) From: Markus Theil To: nbd@nbd.name Cc: linux-wireless@vger.kernel.org, lorenzo.bianconi@redhat.com, Stanislaw Gruszka , Markus Theil Subject: [PATCH v9 4/6] mt76: mt76x02: remove a copy call for usb speedup Date: Tue, 26 Nov 2019 22:47:02 +0100 Message-Id: <20191126214704.27297-5-markus.theil@tu-ilmenau.de> X-Mailer: git-send-email 2.24.0 In-Reply-To: <20191126214704.27297-1-markus.theil@tu-ilmenau.de> References: <20191126214704.27297-1-markus.theil@tu-ilmenau.de> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Sender: linux-wireless-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-wireless@vger.kernel.org This patch removes a mt76_wr_copy call from the beacon path to hw. The skb which is used in this place gets therefore build with txwi inside its data. For mt76 usb drivers, this saves one synchronuous copy call over usb, which lets the beacon work complete faster. In mmio case, there is not enough headroom to put the txwi into the skb, it is therefore using an additional mt76_wr_copy, which is fast over mmio. Thanks Stanislaw for pointing this out. Signed-off-by: Markus Theil --- .../wireless/mediatek/mt76/mt76x02_beacon.c | 20 +++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/drivers/net/wireless/mediatek/mt76/mt76x02_beacon.c b/drivers/net/wireless/mediatek/mt76/mt76x02_beacon.c index 1c4bdf88f712..68a4f512319e 100644 --- a/drivers/net/wireless/mediatek/mt76/mt76x02_beacon.c +++ b/drivers/net/wireless/mediatek/mt76/mt76x02_beacon.c @@ -26,15 +26,27 @@ static int mt76x02_write_beacon(struct mt76x02_dev *dev, int offset, struct sk_buff *skb) { int beacon_len = dev->beacon_ops->slot_size; - struct mt76x02_txwi txwi; if (WARN_ON_ONCE(beacon_len < skb->len + sizeof(struct mt76x02_txwi))) return -ENOSPC; - mt76x02_mac_write_txwi(dev, &txwi, skb, NULL, NULL, skb->len); + /* USB devices already reserve enough skb headroom for txwi's. This + * helps to save slow copies over USB. + */ + if (mt76_is_usb(&dev->mt76)) { + struct mt76x02_txwi *txwi; + + mt76_insert_hdr_pad(skb); + txwi = (struct mt76x02_txwi *)(skb->data - sizeof(*txwi)); + mt76x02_mac_write_txwi(dev, txwi, skb, NULL, NULL, skb->len); + skb_push(skb, sizeof(*txwi)); + } else { + struct mt76x02_txwi txwi; - mt76_wr_copy(dev, offset, &txwi, sizeof(txwi)); - offset += sizeof(txwi); + mt76x02_mac_write_txwi(dev, &txwi, skb, NULL, NULL, skb->len); + mt76_wr_copy(dev, offset, &txwi, sizeof(txwi)); + offset += sizeof(txwi); + } mt76_wr_copy(dev, offset, skb->data, skb->len); return 0; -- 2.24.0