1. 08 9月, 2016 11 次提交
  2. 07 9月, 2016 29 次提交
    • D
      rxrpc: Add tracepoint for working out where aborts happen · 5a42976d
      David Howells 提交于
      Add a tracepoint for working out where local aborts happen.  Each
      tracepoint call is labelled with a 3-letter code so that they can be
      distinguished - and the DATA sequence number is added too where available.
      
      rxrpc_kernel_abort_call() also takes a 3-letter code so that AFS can
      indicate the circumstances when it aborts a call.
      Signed-off-by: NDavid Howells <dhowells@redhat.com>
      5a42976d
    • D
      rxrpc: Fix returns of call completion helpers · e8d6bbb0
      David Howells 提交于
      rxrpc_set_call_completion() returns bool, not int, so the ret variable
      should match this.
      
      rxrpc_call_completed() and __rxrpc_call_completed() should return the value
      of rxrpc_set_call_completion().
      Signed-off-by: NDavid Howells <dhowells@redhat.com>
      e8d6bbb0
    • D
      rxrpc: Calls shouldn't hold socket refs · 8d94aa38
      David Howells 提交于
      rxrpc calls shouldn't hold refs on the sock struct.  This was done so that
      the socket wouldn't go away whilst the call was in progress, such that the
      call could reach the socket's queues.
      
      However, we can mark the socket as requiring an RCU release and rely on the
      RCU read lock.
      
      To make this work, we do:
      
       (1) rxrpc_release_call() removes the call's call user ID.  This is now
           only called from socket operations and not from the call processor:
      
      	rxrpc_accept_call() / rxrpc_kernel_accept_call()
      	rxrpc_reject_call() / rxrpc_kernel_reject_call()
      	rxrpc_kernel_end_call()
      	rxrpc_release_calls_on_socket()
      	rxrpc_recvmsg()
      
           Though it is also called in the cleanup path of
           rxrpc_accept_incoming_call() before we assign a user ID.
      
       (2) Pass the socket pointer into rxrpc_release_call() rather than getting
           it from the call so that we can get rid of uninitialised calls.
      
       (3) Fix call processor queueing to pass a ref to the work queue and to
           release that ref at the end of the processor function (or to pass it
           back to the work queue if we have to requeue).
      
       (4) Skip out of the call processor function asap if the call is complete
           and don't requeue it if the call is complete.
      
       (5) Clean up the call immediately that the refcount reaches 0 rather than
           trying to defer it.  Actual deallocation is deferred to RCU, however.
      
       (6) Don't hold socket refs for allocated calls.
      
       (7) Use the RCU read lock when queueing a message on a socket and treat
           the call's socket pointer according to RCU rules and check it for
           NULL.
      
           We also need to use the RCU read lock when viewing a call through
           procfs.
      
       (8) Transmit the final ACK/ABORT to a client call in rxrpc_release_call()
           if this hasn't been done yet so that we can then disconnect the call.
           Once the call is disconnected, it won't have any access to the
           connection struct and the UDP socket for the call work processor to be
           able to send the ACK.  Terminal retransmission will be handled by the
           connection processor.
      
       (9) Release all calls immediately on the closing of a socket rather than
           trying to defer this.  Incomplete calls will be aborted.
      
      The call refcount model is much simplified.  Refs are held on the call by:
      
       (1) A socket's user ID tree.
      
       (2) A socket's incoming call secureq and acceptq.
      
       (3) A kernel service that has a call in progress.
      
       (4) A queued call work processor.  We have to take care to put any call
           that we failed to queue.
      
       (5) sk_buffs on a socket's receive queue.  A future patch will get rid of
           this.
      
      Whilst we're at it, we can do:
      
       (1) Get rid of the RXRPC_CALL_EV_RELEASE event.  Release is now done
           entirely from the socket routines and never from the call's processor.
      
       (2) Get rid of the RXRPC_CALL_DEAD state.  Calls now end in the
           RXRPC_CALL_COMPLETE state.
      
       (3) Get rid of the rxrpc_call::destroyer work item.  Calls are now torn
           down when their refcount reaches 0 and then handed over to RCU for
           final cleanup.
      
       (4) Get rid of the rxrpc_call::deadspan timer.  Calls are cleaned up
           immediately they're finished with and don't hang around.
           Post-completion retransmission is handled by the connection processor
           once the call is disconnected.
      
       (5) Get rid of the dead call expiry setting as there's no longer a timer
           to set.
      
       (6) rxrpc_destroy_all_calls() can just check that the call list is empty.
      Signed-off-by: NDavid Howells <dhowells@redhat.com>
      8d94aa38
    • D
      rxrpc: Use rxrpc_is_service_call() rather than rxrpc_conn_is_service() · 6543ac52
      David Howells 提交于
      Use rxrpc_is_service_call() rather than rxrpc_conn_is_service() if the call
      is available just in case call->conn is NULL.
      Signed-off-by: NDavid Howells <dhowells@redhat.com>
      6543ac52
    • D
      rxrpc: Pass the connection pointer to rxrpc_post_packet_to_call() · 8b7fac50
      David Howells 提交于
      Pass the connection pointer to rxrpc_post_packet_to_call() as the call
      might get disconnected whilst we're looking at it, but the connection
      pointer determined by rxrpc_data_read() is guaranteed by RCU for the
      duration of the call.
      Signed-off-by: NDavid Howells <dhowells@redhat.com>
      8b7fac50
    • D
      rxrpc: Cache the security index in the rxrpc_call struct · 278ac0cd
      David Howells 提交于
      Cache the security index in the rxrpc_call struct so that we can get at it
      even when the call has been disconnected and the connection pointer
      cleared.
      Signed-off-by: NDavid Howells <dhowells@redhat.com>
      278ac0cd
    • D
      rxrpc: Use call->peer rather than call->conn->params.peer · f4fdb352
      David Howells 提交于
      Use call->peer rather than call->conn->params.peer to avoid the possibility
      of call->conn being NULL and, whilst we're at it, check it for NULL before we
      access it.
      Signed-off-by: NDavid Howells <dhowells@redhat.com>
      f4fdb352
    • D
      rxrpc: Improve the call tracking tracepoint · fff72429
      David Howells 提交于
      Improve the call tracking tracepoint by showing more differentiation
      between some of the put and get events, including:
      
        (1) Getting and putting refs for the socket call user ID tree.
      
        (2) Getting and putting refs for queueing and failing to queue the call
            processor work item.
      
      Note that these aren't necessarily used in this patch, but will be taken
      advantage of in future patches.
      
      An enum is added for the event subtype numbers rather than coding them
      directly as decimal numbers and a table of 3-letter strings is provided
      rather than a sequence of ?: operators.
      Signed-off-by: NDavid Howells <dhowells@redhat.com>
      fff72429
    • D
      rxrpc: Delete unused rxrpc_kernel_free_skb() · e796cb41
      David Howells 提交于
      Delete rxrpc_kernel_free_skb() as it's unused.
      Signed-off-by: NDavid Howells <dhowells@redhat.com>
      e796cb41
    • D
      rxrpc: Whitespace cleanup · 71a17de3
      David Howells 提交于
      Remove some whitespace.
      Signed-off-by: NDavid Howells <dhowells@redhat.com>
      71a17de3
    • A
      ptp: ixp46x: remove NO_IRQ handling · cf86799e
      Arnd Bergmann 提交于
      gpio_to_irq does not return NO_IRQ but instead returns a negative
      error code on failure. Returning NO_IRQ from the function has no
      negative effects as we only compare the result to the expected
      interrupt number, but it's better to return a proper failure
      code for consistency, and we should remove NO_IRQ from the kernel
      entirely.
      Signed-off-by: NArnd Bergmann <arnd@arndb.de>
      Acked-by: NRichard Cochran <richardcochran@gmail.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      cf86799e
    • B
      72a31d85
    • A
      perf, bpf: fix conditional call to bpf_overflow_handler · f1e4ba5b
      Arnd Bergmann 提交于
      The newly added bpf_overflow_handler function is only built of both
      CONFIG_EVENT_TRACING and CONFIG_BPF_SYSCALL are enabled, but the caller
      only checks the latter:
      
      kernel/events/core.c: In function 'perf_event_alloc':
      kernel/events/core.c:9106:27: error: 'bpf_overflow_handler' undeclared (first use in this function)
      
      This changes the caller so we also skip this call if CONFIG_EVENT_TRACING
      is disabled entirely.
      Signed-off-by: NArnd Bergmann <arnd@arndb.de>
      Fixes: aa6a5f3c ("perf, bpf: add perf events core support for BPF_PROG_TYPE_PERF_EVENT programs")
      Acked-by: NAlexei Starovoitov <ast@kernel.org>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      f1e4ba5b
    • B
      net: arc_emac: mark arc_mdio_reset() static · 3f591997
      Baoyou Xie 提交于
      We get 1 warning when building kernel with W=1:
      drivers/net/ethernet/arc/emac_mdio.c:107:5: warning: no previous prototype for 'arc_mdio_reset' [-Wmissing-prototypes]
      
      In fact, this function is only used in the file in which it is
      declared and don't need a declaration, but can be made static.
      so this patch marks this function with 'static'.
      Signed-off-by: NBaoyou Xie <baoyou.xie@linaro.org>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      3f591997
    • B
      lan78xx: mark symbols static where possible · e0c79ff6
      Baoyou Xie 提交于
      We get a few warnings when building kernel with W=1:
      drivers/net/usb/lan78xx.c:1182:6: warning: no previous prototype for 'lan78xx_defer_kevent' [-Wmissing-prototypes]
      drivers/net/usb/lan78xx.c:1409:5: warning: no previous prototype for 'lan78xx_nway_reset' [-Wmissing-prototypes]
      drivers/net/usb/lan78xx.c:2000:5: warning: no previous prototype for 'lan78xx_set_mac_addr' [-Wmissing-prototypes]
      ....
      
      In fact, these functions are only used in the file in which they are
      declared and don't need a declaration, but can be made static.
      so this patch marks these functions with 'static'.
      Signed-off-by: NBaoyou Xie <baoyou.xie@linaro.org>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      e0c79ff6
    • D
      Merge branch 'qed-get_regs' · c63ad410
      David S. Miller 提交于
      c63ad410
    • T
      qed: Add infrastructure for debug data collection · 4102426f
      Tomer Tayar 提交于
      Adds support for several infrastructure operations that are done as part of
      debug data collection.
      Signed-off-by: NTomer Tayar <Tomer.Tayar@qlogic.com>
      Signed-off-by: NYuval Mintz <Yuval.Mintz@qlogic.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      4102426f
    • A
    • J
      qed: Remove OOM messages · 2591c280
      Joe Perches 提交于
      These messages are unnecessary as OOM allocation failures already do
      a dump_stack() giving more or less the same information.
      
      $ size drivers/net/ethernet/qlogic/qed/built-in.o* (defconfig x86-64)
         text	   data	    bss	    dec	    hex	filename
       127817	  27969	  32800	 188586	  2e0aa	drivers/net/ethernet/qlogic/qed/built-in.o.new
       132474	  27969	  32800	 193243	  2f2db	drivers/net/ethernet/qlogic/qed/built-in.o.old
      
      Miscellanea:
      
      o Change allocs to the generally preferred forms where possible.
      Signed-off-by: NJoe Perches <joe@perches.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      2591c280
    • D
      Merge tag 'rxrpc-rewrite-20160904-2' of... · c7ee5672
      David S. Miller 提交于
      Merge tag 'rxrpc-rewrite-20160904-2' of git://git.kernel.org/pub/scm/linux/kernel/git/dhowells/linux-fs
      
      David Howells says:
      
      ====================
      rxrpc: Split output code from sendmsg code
      
      Here's a set of small patches that split the packet transmission code from
      the sendmsg code and simply rearrange the new file to make it more
      logically laid out ready for being rewritten.  An enum is also moved out of
      the header file to there as it's only used there.  This needs to be applied
      on top of the just-posted fixes patch set.
      ====================
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      c7ee5672
    • D
      Merge tag 'rxrpc-rewrite-20160904-1' of... · 0122c6d5
      David S. Miller 提交于
      Merge tag 'rxrpc-rewrite-20160904-1' of git://git.kernel.org/pub/scm/linux/kernel/git/dhowells/linux-fs
      
      David Howells says:
      
      ====================
      rxrpc: Small fixes
      
      Here's a set of small fix patches:
      
       (1) Fix some uninitialised variables.
      
       (2) Set the client call state before making it live by attaching it to the
           conn struct.
      
       (3) Randomise the epoch and starting client conn ID values, and don't
           change the epoch when the client conn ID rolls round.
      
       (4) Replace deprecated create_singlethread_workqueue() calls.
      ====================
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      0122c6d5
    • H
      vxlan: Update tx_errors statistics if vxlan_build_skb return err. · 5e1e61a3
      Haishuang Yan 提交于
      If vxlan_build_skb return err < 0, tx_errors should be also increased.
      Signed-off-by: NHaishuang Yan <yanhaishuang@cmss.chinamobile.com>
      Acked-by: NJiri Benc <jbenc@redhat.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      5e1e61a3
    • B
      net/mlx4_en: protect ring->xdp_prog with rcu_read_lock · 326fe02d
      Brenden Blanco 提交于
      Depending on the preempt mode, the bpf_prog stored in xdp_prog may be
      freed despite the use of call_rcu inside bpf_prog_put. The situation is
      possible when running in PREEMPT_RCU=y mode, for instance, since the rcu
      callback for destroying the bpf prog can run even during the bh handling
      in the mlx4 rx path.
      
      Several options were considered before this patch was settled on:
      
      Add a napi_synchronize loop in mlx4_xdp_set, which would occur after all
      of the rings are updated with the new program.
      This approach has the disadvantage that as the number of rings
      increases, the speed of update will slow down significantly due to
      napi_synchronize's msleep(1).
      
      Add a new rcu_head in bpf_prog_aux, to be used by a new bpf_prog_put_bh.
      The action of the bpf_prog_put_bh would be to then call bpf_prog_put
      later. Those drivers that consume a bpf prog in a bh context (like mlx4)
      would then use the bpf_prog_put_bh instead when the ring is up. This has
      the problem of complexity, in maintaining proper refcnts and rcu lists,
      and would likely be harder to review. In addition, this approach to
      freeing must be exclusive with other frees of the bpf prog, for instance
      a _bh prog must not be referenced from a prog array that is consumed by
      a non-_bh prog.
      
      The placement of rcu_read_lock in this patch is functionally the same as
      putting an rcu_read_lock in napi_poll. Actually doing so could be a
      potentially controversial change, but would bring the implementation in
      line with sk_busy_loop (though of course the nature of those two paths
      is substantially different), and would also avoid future copy/paste
      problems with future supporters of XDP. Still, this patch does not take
      that opinionated option.
      
      Testing was done with kernels in either PREEMPT_RCU=y or
      CONFIG_PREEMPT_VOLUNTARY=y+PREEMPT_RCU=n modes, with neither exhibiting
      any drawback. With PREEMPT_RCU=n, the extra call to rcu_read_lock did
      not show up in the perf report whatsoever, and with PREEMPT_RCU=y the
      overhead of rcu_read_lock (according to perf) was the same before/after.
      In the rx path, rcu_read_lock is eventually called for every packet
      from netif_receive_skb_internal, so the napi poll call's rcu_read_lock
      is easily amortized.
      
      v2:
      Remove extra rcu_read_lock in mlx4_en_process_rx_cq body
      Annotate xdp_prog with __rcu, and convert all usages to rcu_assign or
      rcu_dereference[_protected] as appropriate.
      Add explicit mutex lock around rcu_assign instead of xchg loop.
      
      Fixes: d576acf0 ("net/mlx4_en: add page recycle to prepare rx ring for tx support")
      Acked-by: NDaniel Borkmann <daniel@iogearbox.net>
      Acked-by: NAlexei Starovoitov <alexei.starovoitov@gmail.com>
      Signed-off-by: NBrenden Blanco <bblanco@plumgrid.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      326fe02d
    • D
      Merge branch 'mediatek-rx-path-enhancements' · bc58493b
      David S. Miller 提交于
      Sean Wang says:
      
      ====================
      net: ethernet: mediatek: add enhancements to RX path
      
      Changes since v1:
      - fix message typos and add coverletter
      
      Changes since v2:
      - split from the previous series for submitting add enhancements as
      a series targeting 'net-next' and add indents before comments.
      
      Changes since v3:
      - merge the patch using PDMA RX path
      - fixed the input of mtk_poll_rx is with the remaining budget
      
      Changes since v4:
      - save one wmb and register update when no packet is being handled
      inside mtk_poll_rx call
      - fixed incorrect return packet count from mtk_napi_rx
      ====================
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      bc58493b
    • S
      net: ethernet: mediatek: enhance RX path by aggregating more SKBs into NAPI · 41156cea
      Sean Wang 提交于
      The patch adds support for aggregating more SKBs feed into NAPI in
      order to get more benefits from generic receive offload (GRO) by
      peeking at the RX ring status and moving more packets right before
      returning from NAPI RX polling handler if NAPI budgets are still
      available and some packets already present in hardware.
      Signed-off-by: NSean Wang <sean.wang@mediatek.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      41156cea
    • S
      net: ethernet: mediatek: enhance RX path by reducing the frequency of the memory barrier used · 635372ad
      Sean Wang 提交于
      The patch makes move wmb() to outside the loop that could help
      RX path handling more faster although that RX descriptors aren't
      freed for DMA to use as soon as possible, but based on my experiment
      and the result shows it still can reach about 943Mbpis without
      performance drop that is tested based on the setup with one port
      using Giga PHY and 256 RX descriptors for DMA to move.
      Signed-off-by: NSean Wang <sean.wang@mediatek.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      635372ad
    • D
      Merge branch 'hso-neatening' · 0da4d283
      David S. Miller 提交于
      Joe Perches says:
      
      ====================
      hso: neatening
      
      This seems to be the only code in the kernel that uses
      macro defines with a trailing underscore.  Fix that.
      ====================
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      0da4d283
    • J
      hso: Convert printk to pr_<level> · 3981cce6
      Joe Perches 提交于
      Use a more common logging style
      
      Miscellanea:
      
      o Add pr_fmt to prefix each output message
      o Realign arguments
      Signed-off-by: NJoe Perches <joe@perches.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      3981cce6
    • J
      hso: Use a more common logging style · 95a69117
      Joe Perches 提交于
      Macros that end in an underscore are just odd.
      Add hso_dbg(level, fmt, ...) and use it everwhere instead.
      
      Several uses had additional unnecessary newlines as the
      macro added a newline.  Remove the newline from the macro
      and add newlines to each use as appropriate.
      
      Remove now unused D<digit> macros.
      Signed-off-by: NJoe Perches <joe@perches.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      95a69117