1. 28 11月, 2018 15 次提交
  2. 27 11月, 2018 15 次提交
    • D
      Merge branch 'virtio-support-packed-ring' · 02c72d5e
      David S. Miller 提交于
      Tiwei Bie says:
      
      ====================
      virtio: support packed ring
      
      This patch set implements packed ring support in virtio driver.
      
      A performance test between pktgen (pktgen_sample03_burst_single_flow.sh)
      and DPDK vhost (testpmd/rxonly/vhost-PMD) has been done, I saw
      ~30% performance gain in packed ring in this case.
      
      To make this patch set work with below patch set for vhost,
      some hacks are needed to set the _F_NEXT flag in indirect
      descriptors (this should be fixed in vhost):
      
      https://lkml.org/lkml/2018/7/3/33
      
      v2 -> v3:
      - Use leXX instead of virtioXX (MST);
      - Refactor split ring first (MST);
      - Add debug helpers (MST);
      - Put split/packed ring specific fields in sub structures (MST);
      - Handle normal descriptors and indirect descriptors differently (MST);
      - Track the DMA addr/len related info in a separate structure (MST);
      - Calculate AVAIL/USED flags only when wrap counter wraps (MST);
      - Define a struct/union to read event structure (MST);
      - Define a macro for wrap counter bit in uapi (MST);
      - Define the AVAIL/USED bits as shifts instead of values (MST);
      - s/_F_/_FLAG_/ in VRING_PACKED_EVENT_* as they are values (MST);
      - Drop the notify workaround for QEMU's tx-timer in packed ring (MST);
      
      v1 -> v2:
      - Use READ_ONCE() to read event off_wrap and flags together (Jason);
      - Add comments related to ccw (Jason);
      
      RFC v6 -> v1:
      - Avoid extra virtio_wmb() in virtqueue_enable_cb_delayed_packed()
        when event idx is off (Jason);
      - Fix bufs calculation in virtqueue_enable_cb_delayed_packed() (Jason);
      - Test the state of the desc at used_idx instead of last_used_idx
        in virtqueue_enable_cb_delayed_packed() (Jason);
      - Save wrap counter (as part of queue state) in the return value
        of virtqueue_enable_cb_prepare_packed();
      - Refine the packed ring definitions in uapi;
      - Rebase on the net-next tree;
      
      RFC v5 -> RFC v6:
      - Avoid tracking addr/len/flags when DMA API isn't used (MST/Jason);
      - Define wrap counter as bool (Jason);
      - Use ALIGN() in vring_init_packed() (Jason);
      - Avoid using pointer to track `next` in detach_buf_packed() (Jason);
      - Add comments for barriers (Jason);
      - Don't enable RING_PACKED on ccw for now (noticed by Jason);
      - Refine the memory barrier in virtqueue_poll();
      - Add a missing memory barrier in virtqueue_enable_cb_delayed_packed();
      - Remove the hacks in virtqueue_enable_cb_prepare_packed();
      
      RFC v4 -> RFC v5:
      - Save DMA addr, etc in desc state (Jason);
      - Track used wrap counter;
      
      RFC v3 -> RFC v4:
      - Make ID allocation support out-of-order (Jason);
      - Various fixes for EVENT_IDX support;
      
      RFC v2 -> RFC v3:
      - Split into small patches (Jason);
      - Add helper virtqueue_use_indirect() (Jason);
      - Just set id for the last descriptor of a list (Jason);
      - Calculate the prev in virtqueue_add_packed() (Jason);
      - Fix/improve desc suppression code (Jason/MST);
      - Refine the code layout for XXX_split/packed and wrappers (MST);
      - Fix the comments and API in uapi (MST);
      - Remove the BUG_ON() for indirect (Jason);
      - Some other refinements and bug fixes;
      
      RFC v1 -> RFC v2:
      - Add indirect descriptor support - compile test only;
      - Add event suppression supprt - compile test only;
      - Move vring_packed_init() out of uapi (Jason, MST);
      - Merge two loops into one in virtqueue_add_packed() (Jason);
      - Split vring_unmap_one() for packed ring and split ring (Jason);
      - Avoid using '%' operator (Jason);
      - Rename free_head -> next_avail_idx (Jason);
      - Add comments for virtio_wmb() in virtqueue_add_packed() (Jason);
      - Some other refinements and bug fixes;
      ====================
      Acked-by: NMichael S. Tsirkin <mst@redhat.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      02c72d5e
    • T
      virtio_ring: advertize packed ring layout · f959a128
      Tiwei Bie 提交于
      Advertize the packed ring layout support.
      Signed-off-by: NTiwei Bie <tiwei.bie@intel.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      f959a128
    • T
      virtio_ring: disable packed ring on unsupported transports · 3a814fdf
      Tiwei Bie 提交于
      Currently, ccw, vop and remoteproc need some legacy virtio
      APIs to create or access virtio rings, which are not supported
      by packed ring. So disable packed ring on these transports
      for now.
      Signed-off-by: NTiwei Bie <tiwei.bie@intel.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      3a814fdf
    • T
      virtio_ring: leverage event idx in packed ring · f51f9826
      Tiwei Bie 提交于
      Leverage the EVENT_IDX feature in packed ring to suppress
      events when it's available.
      Signed-off-by: NTiwei Bie <tiwei.bie@intel.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      f51f9826
    • T
      virtio_ring: introduce packed ring support · 1ce9e605
      Tiwei Bie 提交于
      Introduce the packed ring support. Packed ring can only be
      created by vring_create_virtqueue() and each chunk of packed
      ring will be allocated individually. Packed ring can not be
      created on preallocated memory by vring_new_virtqueue() or
      the likes currently.
      Signed-off-by: NTiwei Bie <tiwei.bie@intel.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      1ce9e605
    • T
      virtio_ring: cache whether we will use DMA API · fb3fba6b
      Tiwei Bie 提交于
      Cache whether we will use DMA API, instead of doing the
      check every time. We are going to check whether DMA API
      is used more often in packed ring.
      Signed-off-by: NTiwei Bie <tiwei.bie@intel.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      fb3fba6b
    • T
      virtio_ring: extract split ring handling from ring creation · d79dca75
      Tiwei Bie 提交于
      Introduce a specific function to create the split ring.
      And also move the DMA allocation and size information to
      the .split sub-structure.
      Signed-off-by: NTiwei Bie <tiwei.bie@intel.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      d79dca75
    • T
      virtio_ring: allocate desc state for split ring separately · cbeedb72
      Tiwei Bie 提交于
      Put the split ring's desc state into the .split sub-structure,
      and allocate desc state for split ring separately, this makes
      the code more readable and more consistent with what we will
      do for packed ring.
      Signed-off-by: NTiwei Bie <tiwei.bie@intel.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      cbeedb72
    • T
      virtio_ring: introduce helper for indirect feature · 2f18c2d1
      Tiwei Bie 提交于
      Introduce a helper to check whether we will use indirect
      feature. It will be used by packed ring too.
      Signed-off-by: NTiwei Bie <tiwei.bie@intel.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      2f18c2d1
    • T
      virtio_ring: introduce debug helpers · 4d6a105e
      Tiwei Bie 提交于
      Introduce debug helpers for last_add_time update, check and
      invalid. They will be used by packed ring too.
      Signed-off-by: NTiwei Bie <tiwei.bie@intel.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      4d6a105e
    • T
      virtio_ring: put split ring fields in a sub struct · e593bf97
      Tiwei Bie 提交于
      Put the split ring specific fields in a sub-struct named
      as "split" to avoid misuse after introducing packed ring.
      There is no functional change.
      Signed-off-by: NTiwei Bie <tiwei.bie@intel.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      e593bf97
    • T
      virtio_ring: put split ring functions together · e6f633e5
      Tiwei Bie 提交于
      Put the xxx_split() functions together to make the
      code more readable and avoid misuse after introducing
      the packed ring. There is no functional change.
      Signed-off-by: NTiwei Bie <tiwei.bie@intel.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      e6f633e5
    • T
      virtio_ring: add _split suffix for split ring functions · 138fd251
      Tiwei Bie 提交于
      Add _split suffix for split ring specific functions. This
      is a preparation for introducing the packed ring support.
      There is no functional change.
      Signed-off-by: NTiwei Bie <tiwei.bie@intel.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      138fd251
    • T
      virtio: add packed ring types and macros · 89a9157e
      Tiwei Bie 提交于
      Add types and macros for packed ring.
      Signed-off-by: NTiwei Bie <tiwei.bie@intel.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      89a9157e
    • D
      Merge git://git.kernel.org/pub/scm/linux/kernel/git/bpf/bpf-next · 4afe60a9
      David S. Miller 提交于
      Daniel Borkmann says:
      
      ====================
      pull-request: bpf-next 2018-11-26
      
      The following pull-request contains BPF updates for your *net-next* tree.
      
      The main changes are:
      
      1) Extend BTF to support function call types and improve the BPF
         symbol handling with this info for kallsyms and bpftool program
         dump to make debugging easier, from Martin and Yonghong.
      
      2) Optimize LPM lookups by making longest_prefix_match() handle
         multiple bytes at a time, from Eric.
      
      3) Adds support for loading and attaching flow dissector BPF progs
         from bpftool, from Stanislav.
      
      4) Extend the sk_lookup() helper to be supported from XDP, from Nitin.
      
      5) Enable verifier to support narrow context loads with offset > 0
         to adapt to LLVM code generation (currently only offset of 0 was
         supported). Add test cases as well, from Andrey.
      
      6) Simplify passing device functions for offloaded BPF progs by
         adding callbacks to bpf_prog_offload_ops instead of ndo_bpf.
         Also convert nfp and netdevsim to make use of them, from Quentin.
      
      7) Add support for sock_ops based BPF programs to send events to
         the perf ring-buffer through perf_event_output helper, from
         Sowmini and Daniel.
      
      8) Add read / write support for skb->tstamp from tc BPF and cg BPF
         programs to allow for supporting rate-limiting in EDT qdiscs
         like fq from BPF side, from Vlad.
      
      9) Extend libbpf API to support map in map types and add test cases
         for it as well to BPF kselftests, from Nikita.
      
      10) Account the maximum packet offset accessed by a BPF program in
          the verifier and use it for optimizing nfp JIT, from Jiong.
      
      11) Fix error handling regarding kprobe_events in BPF sample loader,
          from Daniel T.
      
      12) Add support for queue and stack map type in bpftool, from David.
      ====================
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      4afe60a9
  3. 26 11月, 2018 8 次提交
  4. 25 11月, 2018 2 次提交
    • W
      selftests/net: add txring_overwrite · 358be656
      Willem de Bruijn 提交于
      Packet sockets with PACKET_TX_RING send skbs with user data in frags.
      
      Before commit 5cd8d46e ("packet: copy user buffers before orphan
      or clone") ring slots could be released prematurely, possibly allowing
      a process to overwrite data still in flight.
      
      This test opens two packet sockets, one to send and one to read.
      The sender has a tx ring of one slot. It sends two packets with
      different payload, then reads both and verifies their payload.
      
      Before the above commit, both receive calls return the same data as
      the send calls use the same buffer. From the commit, the clone
      needed for looping onto a packet socket triggers an skb_copy_ubufs
      to create a private copy. The separate sends each arrive correctly.
      Signed-off-by: NWillem de Bruijn <willemb@google.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      358be656
    • C
      net: qualcomm: rmnet: move null check on dev before dereferecing it · 3c18aa14
      Colin Ian King 提交于
      Currently dev is dereferenced by the call dev_net(dev) before dev is null
      checked.  Fix this by null checking dev before the potential null
      pointer dereference.
      
      Detected by CoverityScan, CID#1462955 ("Dereference before null check")
      
      Fixes: 23790ef1 ("net: qualcomm: rmnet: Allow to configure flags for existing devices")
      Signed-off-by: NColin Ian King <colin.king@canonical.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      3c18aa14