{"id":807372,"url":"http://patchwork.ozlabs.org/api/1.0/covers/807372/?format=json","project":{"id":7,"url":"http://patchwork.ozlabs.org/api/1.0/projects/7/?format=json","name":"Linux network development","link_name":"netdev","list_id":"netdev.vger.kernel.org","list_email":"netdev@vger.kernel.org","web_url":null,"scm_url":null,"webscm_url":null},"msgid":"<1504054078-10173-1-git-send-email-subashab@codeaurora.org>","date":"2017-08-30T00:47:55","name":"[net-next,0/3,v10] Add support for rmnet driver","submitter":{"id":65547,"url":"http://patchwork.ozlabs.org/api/1.0/people/65547/?format=json","name":"Subash Abhinov Kasiviswanathan","email":"subashab@codeaurora.org"},"series":[{"id":511,"url":"http://patchwork.ozlabs.org/api/1.0/series/511/?format=json","date":"2017-08-30T00:47:55","name":"Add support for rmnet driver","version":10,"mbox":"http://patchwork.ozlabs.org/series/511/mbox/"}],"headers":{"Return-Path":"<netdev-owner@vger.kernel.org>","X-Original-To":"patchwork-incoming@ozlabs.org","Delivered-To":"patchwork-incoming@ozlabs.org","Authentication-Results":["ozlabs.org;\n\tspf=none (mailfrom) smtp.mailfrom=vger.kernel.org\n\t(client-ip=209.132.180.67; helo=vger.kernel.org;\n\tenvelope-from=netdev-owner@vger.kernel.org;\n\treceiver=<UNKNOWN>)","ozlabs.org; dkim=pass (1024-bit key;\n\tunprotected) header.d=codeaurora.org header.i=@codeaurora.org\n\theader.b=\"RObwdiWZ\"; \n\tdkim=pass (1024-bit key) header.d=codeaurora.org\n\theader.i=@codeaurora.org header.b=\"boNvrjqf\"; \n\tdkim-atps=neutral","pdx-caf-mail.web.codeaurora.org;\n\tdmarc=none (p=none dis=none)\n\theader.from=codeaurora.org","pdx-caf-mail.web.codeaurora.org;\n\tspf=none smtp.mailfrom=subashab@codeaurora.org"],"Received":["from vger.kernel.org (vger.kernel.org [209.132.180.67])\n\tby ozlabs.org (Postfix) with ESMTP id 3xhn2q0HQFz9s9Y\n\tfor <patchwork-incoming@ozlabs.org>;\n\tWed, 30 Aug 2017 10:49:39 +1000 (AEST)","(majordomo@vger.kernel.org) by vger.kernel.org via listexpand\n\tid S1751801AbdH3Ath (ORCPT <rfc822;patchwork-incoming@ozlabs.org>);\n\tTue, 29 Aug 2017 20:49:37 -0400","from smtp.codeaurora.org ([198.145.29.96]:45574 \"EHLO\n\tsmtp.codeaurora.org\" rhost-flags-OK-OK-OK-OK) by vger.kernel.org\n\twith ESMTP id S1751290AbdH3Atg (ORCPT\n\t<rfc822;netdev@vger.kernel.org>); Tue, 29 Aug 2017 20:49:36 -0400","by smtp.codeaurora.org (Postfix, from userid 1000)\n\tid 8492360725; Wed, 30 Aug 2017 00:49:35 +0000 (UTC)","from subashab-lnx.qualcomm.com (unknown [129.46.15.92])\n\t(using TLSv1.2 with cipher ECDHE-RSA-AES128-SHA256 (128/128 bits))\n\t(No client certificate requested)\n\t(Authenticated sender: subashab@codeaurora.org)\n\tby smtp.codeaurora.org (Postfix) with ESMTPSA id 7F4CF60725;\n\tWed, 30 Aug 2017 00:49:33 +0000 (UTC)"],"DKIM-Signature":["v=1; a=rsa-sha256; c=relaxed/simple; d=codeaurora.org;\n\ts=default; t=1504054175;\n\tbh=aj6oDguCHID4pD5IbYCA9TilxuaaWjH72uA9/WUhCCQ=;\n\th=From:To:Cc:Subject:Date:From;\n\tb=RObwdiWZRYX99OlinbvsBhy3MVlNki4iTkZESy2r+OVEvXTFLdphNvFf7sOoYr6wk\n\tXw9RIylFoHJzKjhtwSOpfym+DmpPf6UXrh0e/K2YU8fjjQhNDGhF+3+AJMrkmi6Ntq\n\tf3va75+cx4a20eMrFRcn+Q0lm/UfgKXSnLsbUjog=","v=1; a=rsa-sha256; c=relaxed/simple; d=codeaurora.org;\n\ts=default; t=1504054174;\n\tbh=aj6oDguCHID4pD5IbYCA9TilxuaaWjH72uA9/WUhCCQ=;\n\th=From:To:Cc:Subject:Date:From;\n\tb=boNvrjqfVF8n/Se4QLF6Z+Rfm/m8KPJzISGFuV01iP9jvk/haIAiueWwYp0GoPVJK\n\tWTrKuOIrQDmWfQ8ibNTGEBbrOgQPPIA2MNiiDseIXSbItSt8G1VaVjJ4+dT2Tck0Xy\n\t/IzAuxQEDQEzfeRqgcXrGIwTYQPEDQlDMuxDPYo0="],"X-Spam-Checker-Version":"SpamAssassin 3.4.0 (2014-02-07) on\n\tpdx-caf-mail.web.codeaurora.org","X-Spam-Level":"","X-Spam-Status":"No, score=-2.8 required=2.0 tests=ALL_TRUSTED,BAYES_00,\n\tDKIM_SIGNED,\n\tT_DKIM_INVALID autolearn=no autolearn_force=no version=3.4.0","DMARC-Filter":"OpenDMARC Filter v1.3.2 smtp.codeaurora.org 7F4CF60725","From":"Subash Abhinov Kasiviswanathan <subashab@codeaurora.org>","To":"netdev@vger.kernel.org, davem@davemloft.net,\n\tfengguang.wu@intel.com, dcbw@redhat.com, jiri@resnulli.us,\n\tstephen@networkplumber.org, David.Laight@ACULAB.COM,\n\tmarcel@holtmann.org, andrew@lunn.ch","Cc":"Subash Abhinov Kasiviswanathan <subashab@codeaurora.org>","Subject":"[PATCH net-next 0/3 v10] Add support for rmnet driver","Date":"Tue, 29 Aug 2017 18:47:55 -0600","Message-Id":"<1504054078-10173-1-git-send-email-subashab@codeaurora.org>","X-Mailer":"git-send-email 1.9.1","Sender":"netdev-owner@vger.kernel.org","Precedence":"bulk","List-ID":"<netdev.vger.kernel.org>","X-Mailing-List":"netdev@vger.kernel.org"},"content":"Hi David\n\nI have updated the locking scheme as follows -\n\nThe shared resource which needs to be protected is realdev->rx_handler_data.\n\nFor the writer path, this is using rtnl_lock(). The writer paths are\nrmnet_newlink(), rmnet_dellink() and rmnet_force_unassociate_device(). These\npaths are already called with rtnl_lock() acquired in. There is also an\nASSERT_RTNL() to ensure that we are calling with rtnl acquired. For\ndereference here, we will need to use rtnl_dereference(). Dev list writing\nneeds to happen with rtnl_lock() acquired for netdev_master_upper_dev_link().\n\nFor the reader path, the real_dev->rx_handler_data is called in the TX / RX\npath. We only need rcu_read_lock() for these scenarios. In these cases,\nthe rcu_read_lock() is held in __dev_queue_xmit() and\nnetif_receive_skb_internal(), so readers need to use rcu_dereference_rtnl()\nto get the relevant information. For dev list reading, we again acquire\nrcu_read_lock() in rmnet_dellink() for netdev_master_upper_dev_get_rcu().\nWe also use unregister_netdevice_many() to free all rmnet devices in\nrmnet_force_unassociate_device() so we dont lose the rtnl_lock() and free in\nsame context.\n\nI have also added this as a comment in rmnet_config.c.\n\n--\nv1: Same as the RFC patch with some minor fixes for issues reported by\nkbuild test robot.\n\nv1->v2: Change datatypes and remove config IOCTL as mentioned by David.\nAlso fix checkpatch issues and remove some unused code.\n\nv2->v3: Move location to drivers/net and rename to rmnet. Change the\nuserspace - netlink communication from custom netlink to rtnl_link_ops.\nRefactor some code. Use a fixed config for ingress and egress.\n\nv3->v4: Move location to drivers/net/ethernet/qualcomm/.\nFix comments from Stephen and Jiri -\nSplit the ether and arp type changes into seperate patches.\nRemove debug and custom logging and switch to standard netdevice log.\nRemove module parameters. Refactor and change some code style issues.\n\nv4->v5: Rename some structs and variables. Move the initializer\nbefore the for loop start. Put the arp type in correct sequence.\n\nv5->v6: Fix comments from Dan -\nUse the upper link API. As a result, remove all the refcounting logic.\nDevice refcount is explicitly held on real_dev on rx_handler\nregistration only. Modifiy the flow control struct. Remove the unused\nethernet mode handling.\n\nv6->v7: Fix comments from David - Add newline to end of Makefile. Remove\ninline from .c files. Move the module init/exit to rmnet config. Fix an\nerror reported by kbuild test robot for an unused file.\n\nv7->v8: Use a smaller value for ETH_P_MAP as mentioned by David. Change\nnetdev_info to netdev_dbg as mentioned by Andew. Fix comments from\nStephen regarding netdev_priv and sparse related errors of using 0 as NULL\n\nv8->v9: Fix comments from David - Remove the CFLAG rule. Change the way\nrmnet devices are freed. Instead of using a workqueue to unregister devices\nindividually, go through the list and free all devices within the rtnl_lock().\n\nv9->v10: Fix the locking scheme as mentioned by David. Change comment near\nMAP type definition as mentioned by Dan. Refactor some code.\n\nSubash Abhinov Kasiviswanathan (3):\n  net: ether: Add support for multiplexing and aggregation type\n  net: arp: Add support for raw IP device\n  drivers: net: ethernet: qualcomm: rmnet: Initial implementation\n\n Documentation/networking/rmnet.txt                 |  82 ++++\n drivers/net/ethernet/qualcomm/Kconfig              |   2 +\n drivers/net/ethernet/qualcomm/Makefile             |   2 +\n drivers/net/ethernet/qualcomm/rmnet/Kconfig        |  12 +\n drivers/net/ethernet/qualcomm/rmnet/Makefile       |  10 +\n drivers/net/ethernet/qualcomm/rmnet/rmnet_config.c | 419 +++++++++++++++++++++\n drivers/net/ethernet/qualcomm/rmnet/rmnet_config.h |  56 +++\n .../net/ethernet/qualcomm/rmnet/rmnet_handlers.c   | 271 +++++++++++++\n .../net/ethernet/qualcomm/rmnet/rmnet_handlers.h   |  26 ++\n drivers/net/ethernet/qualcomm/rmnet/rmnet_map.h    |  88 +++++\n .../ethernet/qualcomm/rmnet/rmnet_map_command.c    | 107 ++++++\n .../net/ethernet/qualcomm/rmnet/rmnet_map_data.c   | 105 ++++++\n .../net/ethernet/qualcomm/rmnet/rmnet_private.h    |  45 +++\n drivers/net/ethernet/qualcomm/rmnet/rmnet_vnd.c    | 170 +++++++++\n drivers/net/ethernet/qualcomm/rmnet/rmnet_vnd.h    |  29 ++\n include/uapi/linux/if_arp.h                        |   1 +\n include/uapi/linux/if_ether.h                      |   3 +\n 17 files changed, 1428 insertions(+)\n create mode 100644 Documentation/networking/rmnet.txt\n create mode 100644 drivers/net/ethernet/qualcomm/rmnet/Kconfig\n create mode 100644 drivers/net/ethernet/qualcomm/rmnet/Makefile\n create mode 100644 drivers/net/ethernet/qualcomm/rmnet/rmnet_config.c\n create mode 100644 drivers/net/ethernet/qualcomm/rmnet/rmnet_config.h\n create mode 100644 drivers/net/ethernet/qualcomm/rmnet/rmnet_handlers.c\n create mode 100644 drivers/net/ethernet/qualcomm/rmnet/rmnet_handlers.h\n create mode 100644 drivers/net/ethernet/qualcomm/rmnet/rmnet_map.h\n create mode 100644 drivers/net/ethernet/qualcomm/rmnet/rmnet_map_command.c\n create mode 100644 drivers/net/ethernet/qualcomm/rmnet/rmnet_map_data.c\n create mode 100644 drivers/net/ethernet/qualcomm/rmnet/rmnet_private.h\n create mode 100644 drivers/net/ethernet/qualcomm/rmnet/rmnet_vnd.c\n create mode 100644 drivers/net/ethernet/qualcomm/rmnet/rmnet_vnd.h"}