From patchwork Wed Apr 5 10:32:10 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Amit Pundir X-Patchwork-Id: 96814 Delivered-To: patch@linaro.org Received: by 10.140.89.233 with SMTP id v96csp196045qgd; Wed, 5 Apr 2017 03:33:31 -0700 (PDT) X-Received: by 10.99.110.202 with SMTP id j193mr28746156pgc.127.1491388411891; Wed, 05 Apr 2017 03:33:31 -0700 (PDT) Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id f16si20271056pli.143.2017.04.05.03.33.31; Wed, 05 Apr 2017 03:33:31 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of stable-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@linaro.org; spf=pass (google.com: best guess record for domain of stable-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=stable-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S933467AbdDEKda (ORCPT + 6 others); Wed, 5 Apr 2017 06:33:30 -0400 Received: from mail-pg0-f53.google.com ([74.125.83.53]:33890 "EHLO mail-pg0-f53.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S933470AbdDEKdZ (ORCPT ); Wed, 5 Apr 2017 06:33:25 -0400 Received: by mail-pg0-f53.google.com with SMTP id 21so6031737pgg.1 for ; Wed, 05 Apr 2017 03:33:06 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=svPl+qa3WWfj1THCd0+ysyLD3KrIs6wEKjnI4EF1Qok=; b=T1A9PkIWIRaz4yxGWKjVOGVnPUzGU7HwTdu/rvh5FZCmOrUSMLoF22FIlQVBJbk6vd g8aq2Mik0JKEw0AtqARbwZIf1aUXm44RIY6IpwemmHyxz0bnn1S2GJZFfb5vEP59UljM Y8AmaW9OGSZXMHN4FBy20ZyYvkiSPO9AfMykk= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=svPl+qa3WWfj1THCd0+ysyLD3KrIs6wEKjnI4EF1Qok=; b=jDz9t3R8zRJPVEA4Y770KmXy09OErgHmrEcq39qEdc1t2ZVbpZhrh5ZAbxpm6EOQsF u2DxhS0rE6NuemBUZj+jXSjQmwVFIsOs8Y6UAvNCHk2F4xmHP47MXJcex875SMnYb3Qr TFg59QGRRtGbo5VVl1ZMCqeTyExX2cJYjH+V1J0uHZb9cTiPdWt1Y//pH0JYRn4wCyuD MgtY57cVQV6g8YwY2Rd18ptPMsckqwtyDuPvzgbKlz77EKmUuI70Ge/PM0/bbgr1AOBt v/dHG5LIch9i1IDHcj3BiDq67CXIS4CVYzd2qjMoYBW6J9aZZf9yvHdbxkx9jB0nrdsF 03xg== X-Gm-Message-State: AFeK/H0HAa36zOM4GG97dWZ+Qqo9mW/HH1S/1EObZUWa+Vk0tGgmtyD1oxm1w/ZJY1k5Gi31 X-Received: by 10.98.211.81 with SMTP id q78mr27713151pfg.97.1491388386191; Wed, 05 Apr 2017 03:33:06 -0700 (PDT) Received: from localhost.localdomain ([106.51.240.246]) by smtp.gmail.com with ESMTPSA id a62sm36732075pgc.60.2017.04.05.03.33.04 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Wed, 05 Apr 2017 03:33:05 -0700 (PDT) From: Amit Pundir To: stable@vger.kernel.org Cc: gregkh@linuxfoundation.org, =?utf-8?b?UmFmYcWCIE1pxYJlY2tp?= , "David S . Miller" Subject: [PATCH v2 for-4.9 18/32] net: add devm version of alloc_etherdev_mqs function Date: Wed, 5 Apr 2017 16:02:10 +0530 Message-Id: <1491388344-13521-19-git-send-email-amit.pundir@linaro.org> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1491388344-13521-1-git-send-email-amit.pundir@linaro.org> References: <1491388344-13521-1-git-send-email-amit.pundir@linaro.org> MIME-Version: 1.0 Sender: stable-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: stable@vger.kernel.org From: Rafał Miłecki This patch adds devm_alloc_etherdev_mqs function and devm_alloc_etherdev macro. These can be used for simpler netdev allocation without having to care about calling free_netdev. Thanks to this change drivers, their error paths and removal paths may get simpler by a bit. Signed-off-by: Rafał Miłecki Signed-off-by: David S. Miller (cherry picked from commit 40be0dda0725886b623d67868db3219a2e74683b) Signed-off-by: Amit Pundir --- include/linux/etherdevice.h | 5 +++++ net/ethernet/eth.c | 28 ++++++++++++++++++++++++++++ 2 files changed, 33 insertions(+) -- 2.7.4 diff --git a/include/linux/etherdevice.h b/include/linux/etherdevice.h index 6fec9e8..83ae88c 100644 --- a/include/linux/etherdevice.h +++ b/include/linux/etherdevice.h @@ -54,6 +54,11 @@ struct net_device *alloc_etherdev_mqs(int sizeof_priv, unsigned int txqs, #define alloc_etherdev(sizeof_priv) alloc_etherdev_mq(sizeof_priv, 1) #define alloc_etherdev_mq(sizeof_priv, count) alloc_etherdev_mqs(sizeof_priv, count, count) +struct net_device *devm_alloc_etherdev_mqs(struct device *dev, int sizeof_priv, + unsigned int txqs, + unsigned int rxqs); +#define devm_alloc_etherdev(dev, sizeof_priv) devm_alloc_etherdev_mqs(dev, sizeof_priv, 1, 1) + struct sk_buff **eth_gro_receive(struct sk_buff **head, struct sk_buff *skb); int eth_gro_complete(struct sk_buff *skb, int nhoff); diff --git a/net/ethernet/eth.c b/net/ethernet/eth.c index 24d7aff..fbf1de9 100644 --- a/net/ethernet/eth.c +++ b/net/ethernet/eth.c @@ -391,6 +391,34 @@ struct net_device *alloc_etherdev_mqs(int sizeof_priv, unsigned int txqs, } EXPORT_SYMBOL(alloc_etherdev_mqs); +static void devm_free_netdev(struct device *dev, void *res) +{ + free_netdev(*(struct net_device **)res); +} + +struct net_device *devm_alloc_etherdev_mqs(struct device *dev, int sizeof_priv, + unsigned int txqs, unsigned int rxqs) +{ + struct net_device **dr; + struct net_device *netdev; + + dr = devres_alloc(devm_free_netdev, sizeof(*dr), GFP_KERNEL); + if (!dr) + return NULL; + + netdev = alloc_etherdev_mqs(sizeof_priv, txqs, rxqs); + if (!netdev) { + devres_free(dr); + return NULL; + } + + *dr = netdev; + devres_add(dev, dr); + + return netdev; +} +EXPORT_SYMBOL(devm_alloc_etherdev_mqs); + ssize_t sysfs_format_mac(char *buf, const unsigned char *addr, int len) { return scnprintf(buf, PAGE_SIZE, "%*phC\n", len, addr);