1. 22 5月, 2014 10 次提交
    • A
      net: filter: cleanup invocation of internal BPF · 5fe821a9
      Alexei Starovoitov 提交于
      Kernel API for classic BPF socket filters is:
      
      sk_unattached_filter_create() - validate classic BPF, convert, JIT
      SK_RUN_FILTER() - run it
      sk_unattached_filter_destroy() - destroy socket filter
      
      Cleanup internal BPF kernel API as following:
      
      sk_filter_select_runtime() - final step of internal BPF creation.
        Try to JIT internal BPF program, if JIT is not available select interpreter
      SK_RUN_FILTER() - run it
      sk_filter_free() - free internal BPF program
      
      Disallow direct calls to BPF interpreter. Execution of the BPF program should
      be done with SK_RUN_FILTER() macro.
      
      Example of internal BPF create, run, destroy:
      
        struct sk_filter *fp;
      
        fp = kzalloc(sk_filter_size(prog_len), GFP_KERNEL);
        memcpy(fp->insni, prog, prog_len * sizeof(fp->insni[0]));
        fp->len = prog_len;
      
        sk_filter_select_runtime(fp);
      
        SK_RUN_FILTER(fp, ctx);
      
        sk_filter_free(fp);
      
      Sockets, seccomp, testsuite, tracing are using different ways to populate
      sk_filter, so first steps of program creation are not common.
      Signed-off-by: NAlexei Starovoitov <ast@plumgrid.com>
      Acked-by: NDaniel Borkmann <dborkman@redhat.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      5fe821a9
    • D
      Merge branch 'enic-next' · 21ea04fa
      David S. Miller 提交于
      Govindarajulu Varadarajan says:
      
      ====================
      enic: Add adaptive coalescing interrupt support
      
      This series add support for adaptive coalescing interrupt and updates
      enic Maintainers.
      
      v1->v2:
      	* Add commit log
      	* do vnic_intr_coalescing_timer_set only while enabling intr
      	* use ktime_get instead of hrtimer
      	* make enic_set_rx_coal_setting return type void
      	* change func name enic_apply_int_moderation to enic_calc_int_moderation
      ====================
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      21ea04fa
    • G
      MAINTAINERS: Update enic maintainers · c327e8f4
      Govindarajulu Varadarajan 提交于
      Cc: Sujith Sankar <ssujith@cisco.com>
      Cc: Christian Benvenuti <benve@cisco.com>
      Cc: Neel Patel <neepatel@cisco.com>
      Signed-off-by: NGovindarajulu Varadarajan <_govind@gmx.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      c327e8f4
    • S
      enic: Add support for adaptive interrupt coalescing · 7c2ce6e6
      Sujith Sankar 提交于
      This patch adds support for adaptive interrupt coalescing.
      
      For small pkts with low pkt rate, we can decrease the coalescing interrupt
      dynamically which decreases the latency. This however increases the cpu
      utilization. Based on testing with different coal intr and pkt rate we came up
      with a table(mod_table) with rx_rate and coalescing interrupt value where we
      get low latency without significant increase in cpu. mod_table table stores
      the coalescing timer percentage value for different throughputs.
      
      Function enic_calc_int_moderation() calculates the desired coalescing intr timer
      value. This function is called in driver rx napi_poll. The actual value is set
      by enic_set_int_moderation() which is called when napi_poll is complete. i.e
      when we unmask the rx intr.
      
      Adaptive coal intr is support only when driver is using msix intr. Because
      intr is not shared.
      
      Struct mod_range is used to store only the default adaptive coalescing intr
      value.
      
      Adaptive coal intr calue is calculated by
      
      timer = range_start + ((rx_coal->range_end - range_start) *
      		       mod_table[index].range_percent / 100);
      
      rx_coal->range_end is the rx-usecs-high value set using ethtool.
      range_start is rx-usecs-low, set using ethtool, if rx_small_pkt_bytes_cnt is
      greater than 2 * rx_large_pkt_bytes_cnt. i.e small pkts are dominant. Else its
      rx-usecs-low + 3.
      
      Cc: Christian Benvenuti <benve@cisco.com>
      Cc: Neel Patel <neepatel@cisco.com>
      Signed-off-by: NSujith Sankar <ssujith@cisco.com>
      Signed-off-by: NGovindarajulu Varadarajan <_govind@gmx.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      7c2ce6e6
    • M
      vxge: Use time_before() · f6e92d10
      Manuel Schölling 提交于
      To be future-proof and for better readability the time comparisons are modified
      to use time_before() instead of plain, error-prone math.
      Signed-off-by: NManuel Schölling <manuel.schoelling@gmx.de>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      f6e92d10
    • H
      ieee802154: Introduce the use of the managed version of kzalloc · 12b5c38f
      Himangi Saraogi 提交于
      This patch moves data allocated using kzalloc to managed data allocated
      using devm_kzalloc and cleans now unnecessary kfrees in probe and remove
      functions. An explicit linux/device.h include is added to make sure
      the devm_*() routine declarations are unambiguously available.
      
      The following Coccinelle semantic patch was used for making the change:
      
      @platform@
      identifier p, probefn, removefn;
      @@
      struct platform_driver p = {
        .probe = probefn,
        .remove = removefn,
      };
      
      @prb@
      identifier platform.probefn, pdev;
      expression e, e1, e2;
      @@
      probefn(struct platform_device *pdev, ...) {
        <+...
      - e = kzalloc(e1, e2)
      + e = devm_kzalloc(&pdev->dev, e1, e2)
        ...
      ?-kfree(e);
        ...+>
      }
      
      @rem depends on prb@
      identifier platform.removefn;
      expression e;
      @@
      removefn(...) {
        <...
      - kfree(e);
        ...>
      }
      Signed-off-by: NHimangi Saraogi <himangi774@gmail.com>
      Acked-by: NJulia Lawall <julia.lawall@lip6.fr>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      12b5c38f
    • P
      atm: idt77252: Remove redundant error check · 7e910357
      Peter Senna Tschudin 提交于
      Remove double checks, convert printk to pr_warn, and move the call to
      pr_warn to the first check. The simplified version of the coccinelle
      semantic patch that find this issue is as follows:
      
      // <smpl>
      @@
      expression E; identifier pr; expression list es;
      @@
      while(...){
      ...
      -       if (E) break;
      +       if (E){
      +               pr(es);
      +               break;
      +       }
      ...
      }
      - if(E) pr(es);
      // </smpl>
      
      Tested by compilation only.
      Signed-off-by: NPeter Senna Tschudin <peter.senna@gmail.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      7e910357
    • L
      ipv6: slight optimization in ip6_dst_gc · 14956643
      Li RongQing 提交于
      entries is always greater than rt_max_size here, since if entries is less
      than rt_max_size, the fib6_run_gc function will be skipped
      Signed-off-by: NLi RongQing <roy.qing.li@gmail.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      14956643
    • X
      net-tun: restructure tun_do_read for better sleep/wakeup efficiency · 9e641bdc
      Xi Wang 提交于
      tun_do_read always adds current thread to wait queue, even if a packet
      is ready to read. This is inefficient because both sleeper and waker
      want to acquire the wait queue spin lock when packet rate is high.
      
      We restructure the read function and use common kernel networking
      routines to handle receive, sleep and wakeup. With the change
      available packets are checked first before the reading thread is added
      to the wait queue.
      
      Ran performance tests with the following configuration:
      
       - my packet generator -> tap1 -> br0 -> tap0 -> my packet consumer
       - sender pinned to one core and receiver pinned to another core
       - sender send small UDP packets (64 bytes total) as fast as it can
       - sandy bridge cores
       - throughput are receiver side goodput numbers
      
      The results are
      
      baseline: 731k pkts/sec, cpu utilization at 1.50 cpus
       changed: 783k pkts/sec, cpu utilization at 1.53 cpus
      
      The performance difference is largely determined by packet rate and
      inter-cpu communication cost. For example, if the sender and
      receiver are pinned to different cpu sockets, the results are
      
      baseline: 558k pkts/sec, cpu utilization at 1.71 cpus
       changed: 690k pkts/sec, cpu utilization at 1.67 cpus
      Co-authored-by: NEric Dumazet <edumazet@google.com>
      Signed-off-by: NXi Wang <xii@google.com>
      Acked-by: NMichael S. Tsirkin <mst@redhat.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      9e641bdc
    • T
      net: tunnels - enable module autoloading · f98f89a0
      Tom Gundersen 提交于
      Enable the module alias hookup to allow tunnel modules to be autoloaded on demand.
      
      This is in line with how most other netdev kinds work, and will allow userspace
      to create tunnels without having CAP_SYS_MODULE.
      Signed-off-by: NTom Gundersen <teg@jklm.no>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      f98f89a0
  2. 21 5月, 2014 2 次提交
    • D
      Merge tag 'linux-can-next-for-3.16-20140519' of git://gitorious.org/linux-can/linux-can-next · 2a7ede54
      David S. Miller 提交于
      Marc Kleine-Budde says:
      
      ====================
      pull-request: can-next 2014-05-19
      
      this is a pull request of 13 patches for net-next/master.
      
      A patch by Dan Carpenter fixes a coccinelle warning in the mcp251x
      driver. Jean Delvare contributes three patches to tightening the
      Kconfig dependencies for some drivers. Then come three patches by Pavel
      Machek that improve the c_can driver support on the socfpga platform.
      Sergei Shtylyov's patch brings support for the CAN hardware found on
      Renesas R-Car CAN controllers. Four patches by Oliver Hartkopp, the
      first cleans up the guard macros in the CAN headers the other three
      improve the EFF frame filtering. Maximilian Schneider's patch adds
      support for the GS_USB CAN devices.
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      2a7ede54
    • B
      net: cdc_ncm: fix 64bit division build error · 7d10d261
      Bjørn Mork 提交于
      The upper timer_interval limit is arbitrary and much higher
      than anything usable in the real world.  Reducing it from 15s
      to ~4s to make the timer_interval fit in an u32 does not make
      much difference.  The limit is still outside the practical
      bounds.
      
      This eliminates the need for a 64bit timer_interval, fixing a
      build error related to 64bit division:
      
       drivers/built-in.o: In function `cdc_ncm_get_coalesce':
       ak8975.c:(.text+0x1ac994): undefined reference to `__aeabi_uldivmod'
      Reported-by: NStephen Rothwell <sfr@canb.auug.org.au>
      Signed-off-by: NBjørn Mork <bjorn@mork.no>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      7d10d261
  3. 19 5月, 2014 21 次提交
  4. 18 5月, 2014 3 次提交
  5. 17 5月, 2014 4 次提交
    • D
      Merge branch 'cdc_ncm-coalesce' · 33fcc5e0
      David S. Miller 提交于
      Bjørn Mork says:
      
      ====================
      cdc_ncm: add buffer tuning and stats using ethtool
      
      Quoting the previous description of this series (skip to the
      changelog below if you only want a summary of the changes):
      
      "I have got quite a few reports from frustrated users of OpenWRT
      hosts trying to use some powerful LTE modem, but not achieving
      full speed.  This is typically caused by a combination of
      big buffers and little memory, giving in allocation errors and
      bad performance as a result.
      
      This series is an attempt to let users adjust the size of these
      buffers without having to rebuild the driver.
      
      Patches 1 - 4 are mostly rearranging existing code, in preparing
      for the dynamic buffer size changes.
      
      Patch 5 adds userspace control (ab)using the ethtool coalescing
      API. This isn't a perfect match, which is the main reason why I
      post this series as a RFC.
      
      Patch 6 is an unrelated framing optimization, reducing the
      overhead quite a bit and allowing for better use of smaller
      buffers.
      
      Patch 7 changes the way we calculate frame padding cutoff. The
      problem with big buffers is made much worse by the current padding
      strategy where zero padding often can account for more than 90% of
      the frames.
      
      Patch 8 add some counters giving some insight into how well the
      NCM/MBIM protocol works, supporting further tuning.
      
      Patch 9 reduce the initial maximum buffer size from 32kB to 16kB
      in an attempt to make the default better suit all. It is still
      possible to tune this up again to the old fixed max, using the
      new tuning knobs.
      
      I must admit that I had higher hopes for this series before I
      tested it on my own modems.  One really unexpected result was
      that one of the MBIM modems accepted the new rx buffer size we
      set, but happily continued sending buffers of the same size as
      before.  Needless to say:  This did not work very well...
      
      So don't really expect to be able to use any values with any
      given device. Firmware implementations are still... I don't
      think I have words suitable for a public mailing list.
      
      But I am hoping this will help the many users who have had success
      rebuilding the driver with lower fixed limits.
      
      Please test and/or comment!"
      
      Changes:
      
      ** RFC -> v1 **
      
      Patch 10 - a follow-up to a comment Joe Perches made in November
                 2013.  I don't always forget :-)
      Patch 11 - removes the redundant "connected" driver state, and the
                 associated .check_connect callbacks.
      
      ** v1 -> v2 **
      
      Patch 1  - Better handling of minium rx buffer size, based on feedback
                 from Oliver Neukum and Enrico Mioso
      Patch 5  - fixed locking around timer interval update
      Patch 9  - fixed whitespace error
      Patch 12 - new fix related to the tuneable tx timer
      
      ...and spelling fixes all over the commit messages.  I have finally
      added a spelling hook, which I'm sure may of you will appreciate :-)
      ====================
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      33fcc5e0
    • B
      net: cdc_ncm: do not start timer on an empty skb · 046c6594
      Bjørn Mork 提交于
      We can end up with a freshly allocated tx_curr_skb with no frames
      in it.  In this case it does not make any sense to start the timer.
      This avoids the timer periodically trying to start tx when there
      is nothing in the queue.
      Signed-off-by: NBjørn Mork <bjorn@mork.no>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      046c6594
    • B
      net: cdc_ncm: remove redundant "disconnected" flag · fa83dbee
      Bjørn Mork 提交于
      Calling netif_carrier_{on,off} is sufficient.  There is no need
      to duplicate the carrier state in a driver specific flag.
      Acked-by: NEnrico Mioso <mrkiko.rs@gmail.com>
      Signed-off-by: NBjørn Mork <bjorn@mork.no>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      fa83dbee
    • B
      net: cdc_ncm: fix argument alignment · 916f7640
      Bjørn Mork 提交于
      Reported-by: NJoe Perches <joe@perches.com>
      Signed-off-by: NBjørn Mork <bjorn@mork.no>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      916f7640