From patchwork Tue Aug 20 12:45:50 2013 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Florian Fainelli X-Patchwork-Id: 268506 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@ozlabs.org Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id D66262C00E9 for ; Tue, 20 Aug 2013 22:46:23 +1000 (EST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751315Ab3HTMqO (ORCPT ); Tue, 20 Aug 2013 08:46:14 -0400 Received: from mms1.broadcom.com ([216.31.210.17]:3445 "EHLO mms1.broadcom.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751279Ab3HTMqN (ORCPT ); Tue, 20 Aug 2013 08:46:13 -0400 Received: from [10.9.208.57] by mms1.broadcom.com with ESMTP (Broadcom SMTP Relay (Email Firewall v6.5)); Tue, 20 Aug 2013 05:42:11 -0700 X-Server-Uuid: 06151B78-6688-425E-9DE2-57CB27892261 Received: from IRVEXCHSMTP1.corp.ad.broadcom.com (10.9.207.51) by IRVEXCHCAS08.corp.ad.broadcom.com (10.9.208.57) with Microsoft SMTP Server (TLS) id 14.1.438.0; Tue, 20 Aug 2013 05:46:04 -0700 Received: from mail-irva-13.broadcom.com (10.10.10.20) by IRVEXCHSMTP1.corp.ad.broadcom.com (10.9.207.51) with Microsoft SMTP Server id 14.1.438.0; Tue, 20 Aug 2013 05:46:04 -0700 Received: from fainelli-desktop.broadcom.com ( dhcp-lab-brsb-10.bri.broadcom.com [10.178.7.10]) by mail-irva-13.broadcom.com (Postfix) with ESMTP id 81FACF2D73; Tue, 20 Aug 2013 05:46:02 -0700 (PDT) From: "Florian Fainelli" To: netdev@vger.kernel.org cc: amwang@redhat.com, jiri@resnulli.us, stephen@networkplumber.org, kaber@trash.net, davem@davemloft.net, vyasevic@redhat.com, johannes@sipsolutions.net, eric.dumazet@gmail.com, "Florian Fainelli" Subject: [PATCH 1/3] net: add a new NETDEV_CHANGEROOM event type Date: Tue, 20 Aug 2013 13:45:50 +0100 Message-ID: <1377002752-4622-2-git-send-email-f.fainelli@gmail.com> X-Mailer: git-send-email 1.8.1.2 In-Reply-To: <1377002752-4622-1-git-send-email-f.fainelli@gmail.com> References: <1377002752-4622-1-git-send-email-f.fainelli@gmail.com> MIME-Version: 1.0 X-WSS-ID: 7E0DBBA931W86001479-01-01 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org The event NETDEV_CHANGEROOM event can be used by devices/subsystems which need to adjust their needed_headroom and/or needed_tailroom requirements dynamically. Two helper functions are introduced: - dev_set_headroom(dev, new_headroom) - dev_set_taioroom(dev, new_tailroom) which will notify listeners of such a change. Signed-off-by: Florian Fainelli --- include/linux/netdevice.h | 3 +++ net/core/dev.c | 46 ++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 49 insertions(+) diff --git a/include/linux/netdevice.h b/include/linux/netdevice.h index 077363d..2b3e56c 100644 --- a/include/linux/netdevice.h +++ b/include/linux/netdevice.h @@ -1652,6 +1652,7 @@ struct packet_offload { #define NETDEV_JOIN 0x0014 #define NETDEV_CHANGEUPPER 0x0015 #define NETDEV_RESEND_IGMP 0x0016 +#define NETDEV_CHANGEROOM 0x0017 /* needed_headroom/tailroom change */ extern int register_netdevice_notifier(struct notifier_block *nb); extern int unregister_netdevice_notifier(struct notifier_block *nb); @@ -2329,6 +2330,8 @@ extern int dev_change_net_namespace(struct net_device *, struct net *, const char *); extern int dev_set_mtu(struct net_device *, int); extern void dev_set_group(struct net_device *, int); +extern int dev_set_headroom(struct net_device *, unsigned short); +extern int dev_set_tailroom(struct net_device *, unsigned short); extern int dev_set_mac_address(struct net_device *, struct sockaddr *); extern int dev_change_carrier(struct net_device *, diff --git a/net/core/dev.c b/net/core/dev.c index 1ed2b66..be712be 100644 --- a/net/core/dev.c +++ b/net/core/dev.c @@ -4931,6 +4931,52 @@ int dev_set_mtu(struct net_device *dev, int new_mtu) EXPORT_SYMBOL(dev_set_mtu); /** + * dev_set_headroom - Change device needed headroom + * @dev: device + * @new_headroom: new headroom size + * + * Change the network device headroom space. + */ +int dev_set_headroom(struct net_device *dev, unsigned short new_headroom) +{ + if (dev->needed_headroom == new_headroom) + return 0; + + if (!netif_device_present(dev)) + return -ENODEV; + + dev->needed_headroom = new_headroom; + + call_netdevice_notifiers(NETDEV_CHANGEROOM, dev); + + return 0; +} +EXPORT_SYMBOL(dev_set_headroom); + +/** + * dev_set_tailroom - Change device needed tailroom + * @dev: device + * @new_tailroom: new tailroom size + * + * Change the network device tailroom space. + */ +int dev_set_tailroom(struct net_device *dev, unsigned short new_tailroom) +{ + if (dev->needed_tailroom == new_tailroom) + return 0; + + if (!netif_device_present(dev)) + return -ENODEV; + + dev->needed_tailroom = new_tailroom; + + call_netdevice_notifiers(NETDEV_CHANGEROOM, dev); + + return 0; +} +EXPORT_SYMBOL(dev_set_tailroom); + +/** * dev_set_group - Change group this device belongs to * @dev: device * @new_group: group this device should belong to