1. 30 Aug, 2017 13 commits
    • David S. Miller's avatar
      Merge branch 'net_sched-idr' · f379fdf1
      David S. Miller authored
      Chris Mi says:
      
      ====================
      net/sched: Improve getting objects by indexes
      
      Using current TC code, it is very slow to insert a lot of rules.
      
      In order to improve the rules update rate in TC,
      we introduced the following two changes:
              1) changed cls_flower to use IDR to manage the filters.
              2) changed all act_xxx modules to use IDR instead of
                 a small hash table
      
      But IDR has a limitation that it uses int. TC handle uses u32.
      To make sure there is no regression, we add several new IDR APIs
      to support unsigned long.
      
      v2
      ==
      
      Addressed Hannes's comment:
      express idr_alloc in terms of idr_alloc_ext and most of the other functions
      ====================
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      f379fdf1
    • Chris Mi's avatar
      net/sched: Change act_api and act_xxx modules to use IDR · 65a206c0
      Chris Mi authored
      Typically, each TC filter has its own action. All the actions of the
      same type are saved in its hash table. But the hash buckets are too
      small that it degrades to a list. And the performance is greatly
      affected. For example, it takes about 0m11.914s to insert 64K rules.
      If we convert the hash table to IDR, it only takes about 0m1.500s.
      The improvement is huge.
      
      But please note that the test result is based on previous patch that
      cls_flower uses IDR.
      Signed-off-by: default avatarChris Mi <chrism@mellanox.com>
      Signed-off-by: default avatarJiri Pirko <jiri@mellanox.com>
      Acked-by: default avatarJamal Hadi Salim <jhs@mojatatu.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      65a206c0
    • Chris Mi's avatar
      net/sched: Change cls_flower to use IDR · c15ab236
      Chris Mi authored
      Currently, all filters with the same priority are linked in a doubly
      linked list. Every filter should have a unique handle. To make the
      handle unique, we need to iterate the list every time to see if the
      handle exists or not when inserting a new filter. It is time-consuming.
      For example, it takes about 5m3.169s to insert 64K rules.
      
      This patch changes cls_flower to use IDR. With this patch, it
      takes about 0m1.127s to insert 64K rules. The improvement is huge.
      
      But please note that in this testing, all filters share the same action.
      If every filter has a unique action, that is another bottleneck.
      Follow-up patch in this patchset addresses that.
      Signed-off-by: default avatarChris Mi <chrism@mellanox.com>
      Signed-off-by: default avatarJiri Pirko <jiri@mellanox.com>
      Acked-by: default avatarJamal Hadi Salim <jhs@mojatatu.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      c15ab236
    • Chris Mi's avatar
      idr: Add new APIs to support unsigned long · 388f79fd
      Chris Mi authored
      The following new APIs are added:
      
      int idr_alloc_ext(struct idr *idr, void *ptr, unsigned long *index,
                        unsigned long start, unsigned long end, gfp_t gfp);
      void *idr_remove_ext(struct idr *idr, unsigned long id);
      void *idr_find_ext(const struct idr *idr, unsigned long id);
      void *idr_replace_ext(struct idr *idr, void *ptr, unsigned long id);
      void *idr_get_next_ext(struct idr *idr, unsigned long *nextid);
      Signed-off-by: default avatarChris Mi <chrism@mellanox.com>
      Signed-off-by: default avatarJiri Pirko <jiri@mellanox.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      388f79fd
    • David S. Miller's avatar
      Merge branch 'add-rmnet-driver' · c2f8a6ce
      David S. Miller authored
      Subash Abhinov Kasiviswanathan says:
      
      ====================
      net: Add support for rmnet driver
      
      This patch series adds support for the rmnet driver which is required to
      support recent chipsets using Qualcomm Technologies, Inc. modems. The data
      from hardware follows the multiplexing and aggregation protocol (MAP).
      
      This driver can be used to register onto any physical network device in
      IP mode. Physical transports include USB, HSIC, PCIe and IP accelerator.
      
      rmnet driver helps to decode these packets and queue them to network
      stack (and encode and transmit it to the physical device).
      
      v1: Same as the RFC patch with some minor fixes for issues reported by
      kbuild test robot.
      
      v1->v2: Change datatypes and remove config IOCTL as mentioned by David.
      Also fix checkpatch issues and remove some unused code.
      
      v2->v3: Move location to drivers/net and rename to rmnet. Change the
      userspace - netlink communication from custom netlink to rtnl_link_ops.
      Refactor some code. Use a fixed config for ingress and egress.
      
      v3->v4: Move location to drivers/net/ethernet/qualcomm/.
      Fix comments from Stephen and Jiri -
      Split the ether and arp type changes into seperate patches.
      Remove debug and custom logging and switch to standard netdevice log.
      Remove module parameters. Refactor and change some code style issues.
      
      v4->v5: Rename some structs and variables. Move the initializer
      before the for loop start. Put the arp type in correct sequence.
      
      v5->v6: Fix comments from Dan -
      Use the upper link API. As a result, remove all the refcounting logic.
      Device refcount is explicitly held on real_dev on rx_handler
      registration only. Modifiy the flow control struct. Remove the unused
      ethernet mode handling.
      
      v6->v7: Fix comments from David - Add newline to end of Makefile. Remove
      inline from .c files. Move the module init/exit to rmnet config. Fix an
      error reported by kbuild test robot for an unused file.
      
      v7->v8: Use a smaller value for ETH_P_MAP as mentioned by David. Change
      netdev_info to netdev_dbg as mentioned by Andew. Fix comments from
      Stephen regarding netdev_priv and sparse related errors of using 0 as NULL
      
      v8->v9: Fix comments from David - Remove the CFLAG rule. Change the way
      rmnet devices are freed. Instead of using a workqueue to unregister devices
      individually, go through the list and free all devices within the rtnl_lock().
      
      v9->v10: Actually fix the locking as mentioned by David. The locking scheme is
      mentioned in a comment in rmnet_config.c. Change comment near MAP type
      definition as mentioned by Dan. Refactor some code.
      
      v10->v11: Allow RMNET to compile as a module as mentioned by David
      ====================
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      c2f8a6ce
    • Subash Abhinov Kasiviswanathan's avatar
      drivers: net: ethernet: qualcomm: rmnet: Initial implementation · ceed73a2
      Subash Abhinov Kasiviswanathan authored
      RmNet driver provides a transport agnostic MAP (multiplexing and
      aggregation protocol) support in embedded module. Module provides
      virtual network devices which can be attached to any IP-mode
      physical device. This will be used to provide all MAP functionality
      on future hardware in a single consistent location.
      Signed-off-by: default avatarSubash Abhinov Kasiviswanathan <subashab@codeaurora.org>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      ceed73a2
    • Subash Abhinov Kasiviswanathan's avatar
      net: arp: Add support for raw IP device · cdf4969c
      Subash Abhinov Kasiviswanathan authored
      Define the raw IP type. This is needed for raw IP net devices
      like rmnet.
      Signed-off-by: default avatarSubash Abhinov Kasiviswanathan <subashab@codeaurora.org>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      cdf4969c
    • Subash Abhinov Kasiviswanathan's avatar
      net: ether: Add support for multiplexing and aggregation type · 7373ae7e
      Subash Abhinov Kasiviswanathan authored
      Define the Qualcomm multiplexing and aggregation (MAP) ether type 0x00F9.
      This is needed for receiving data in the MAP protocol like RMNET. This is
      not an officially registered ID.
      Signed-off-by: default avatarSubash Abhinov Kasiviswanathan <subashab@codeaurora.org>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      7373ae7e
    • David S. Miller's avatar
      Merge branch 'tcp-readd-hp' · 2c667d40
      David S. Miller authored
      Florian Westphal says:
      
      ====================
      tcp: re-add header prediction
      
      Eric reported a performance regression caused by header prediction
      removal.
      
      We now call tcp_ack() much more frequently, for some workloads
      this brings in enough cache line misses to become noticeable.
      
      We could possibly still kill HP provided we find a different
      way to suppress unneeded tcp_ack, but given we're late in
      the cycle it seems preferable to revert.
      ====================
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      2c667d40
    • Florian Westphal's avatar
      tcp: Revert "tcp: remove header prediction" · 31770e34
      Florian Westphal authored
      This reverts commit 45f119bf.
      
      Eric Dumazet says:
        We found at Google a significant regression caused by
        45f119bf tcp: remove header prediction
      
        In typical RPC  (TCP_RR), when a TCP socket receives data, we now call
        tcp_ack() while we used to not call it.
      
        This touches enough cache lines to cause a slowdown.
      
      so problem does not seem to be HP removal itself but the tcp_ack()
      call.  Therefore, it might be possible to remove HP after all, provided
      one finds a way to elide tcp_ack for most cases.
      Reported-by: default avatarEric Dumazet <edumazet@google.com>
      Signed-off-by: default avatarFlorian Westphal <fw@strlen.de>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      31770e34
    • Florian Westphal's avatar
      tcp: Revert "tcp: remove CA_ACK_SLOWPATH" · c1d2b4c3
      Florian Westphal authored
      This change was a followup to the header prediction removal,
      so first revert this as a prerequisite to back out hp removal.
      Signed-off-by: default avatarFlorian Westphal <fw@strlen.de>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      c1d2b4c3
    • Greg KH's avatar
      staging: irda: fix init level for irda core · 0da93d2e
      Greg KH authored
      When moving the IRDA code out of net/ into drivers/staging/irda/net, the
      link order changes when IRDA is built into the kernel.  That causes a
      kernel crash at boot time as netfilter isn't initialized yet.
      
      To fix this, move the init call level of the irda core to be
      device_initcall() as the link order keeps this being initialized at the
      correct time.
      Reported-by: default avatarkernel test robot <fengguang.wu@intel.com>
      Reported-by: default avatarGeert Uytterhoeven <geert@linux-m68k.org>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      0da93d2e
    • Florian Fainelli's avatar
      net: bcmgenet: Do not return from void function · d081a16d
      Florian Fainelli authored
      A stray return was added in the macro bcmgenet_##name##_writel where it
      should not, drop it.
      Reported-by: default avatarkbuild test robot <fengguang.wu@intel.com>
      Fixes: 69d2ea9c ("net: bcmgenet: Use correct I/O accessors")
      Signed-off-by: default avatarFlorian Fainelli <f.fainelli@gmail.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      d081a16d
  2. 29 Aug, 2017 27 commits