1. 21 Feb, 2017 18 commits
    • Thomas Petazzoni's avatar
      net: mvpp2: handle too large value in mvpp2_rx_time_coal_set() · ab42676a
      Thomas Petazzoni authored
      When configuring the MVPP2_ISR_RX_THRESHOLD_REG with the RX coalescing
      time threshold, we do not check for the maximum allowed value supported
      by the driver, which means we might overflow and use a bogus value. This
      commit adds a check for this situation, and if a value higher than what
      is supported by the hardware is provided, then we use the maximum value
      supported by the hardware.
      
      In order to achieve this in a way that avoids overflow and rounding
      errors, we introduce two utility functions mvpp2_usec_to_cycles() and
      cycles_to_usec(). Many thanks to Russell King for suggesting this
      implementation.
      Signed-off-by: default avatarThomas Petazzoni <thomas.petazzoni@free-electrons.com>
      Acked-by: default avatarRussell King <rmk+kernel@armlinux.org.uk>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      ab42676a
    • Thomas Petazzoni's avatar
      net: mvpp2: handle too large value handling in mvpp2_rx_pkts_coal_set() · f8b0d5f8
      Thomas Petazzoni authored
      Currently, mvpp2_rx_pkts_coal_set() does the following to avoid setting
      a too large value for the RX coalescing by packet number:
      
        val = (pkts & MVPP2_OCCUPIED_THRESH_MASK);
      
      This means that if you set a value that is slightly higher the the
      maximum number of packets, you in fact get a very low value. It makes a
      lot more sense to simply check if the value is too high, and if it's too
      high, limit it to the maximum possible value.
      Signed-off-by: default avatarThomas Petazzoni <thomas.petazzoni@free-electrons.com>
      Acked-by: default avatarRussell King <rmk+kernel@armlinux.org.uk>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      f8b0d5f8
    • Thomas Petazzoni's avatar
      net: mvpp2: remove useless arguments in mvpp2_rx_{pkts, time}_coal_set · d63f9e41
      Thomas Petazzoni authored
      As noticed by Russell King, the last argument of
      mvpp2_rx_{pkts,time}_coal_set() is useless, since the packet/time
      coalescing value is already stored in the 'struct mvpp2_rx_queue *'
      passed as argument to these functions. So passing the packet/time value
      as an additional argument, and setting them again in the mvpp2_rx_queue
      structure is useles.
      
      This commit therefore gets rid of this additional argument, assuming the
      caller has assigned the appropriate value to rxq->pkts_coal or
      rxq->time_coal before calling the respective functions.
      Signed-off-by: default avatarThomas Petazzoni <thomas.petazzoni@free-electrons.com>
      Acked-by: default avatarRussell King <rmk+kernel@armlinux.org.uk>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      d63f9e41
    • Thomas Petazzoni's avatar
      net: mvpp2: fix DMA address calculation in mvpp2_txq_inc_put() · 239a3b66
      Thomas Petazzoni authored
      When TX descriptors are filled in, the buffer DMA address is split
      between the tx_desc->buf_phys_addr field (high-order bits) and
      tx_desc->packet_offset field (5 low-order bits).
      
      However, when we re-calculate the DMA address from the TX descriptor in
      mvpp2_txq_inc_put(), we do not take tx_desc->packet_offset into
      account. This means that when the DMA address is not aligned on a 32
      bytes boundary, we end up calling dma_unmap_single() with a DMA address
      that was not the one returned by dma_map_single().
      
      This inconsistency is detected by the kernel when DMA_API_DEBUG is
      enabled. We fix this problem by properly calculating the DMA address in
      mvpp2_txq_inc_put().
      
      Cc: <stable@vger.kernel.org>
      Signed-off-by: default avatarThomas Petazzoni <thomas.petazzoni@free-electrons.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      239a3b66
    • Lee Ryder's avatar
      macsec: fix validation failed in asynchronous operation. · b3bdc3ac
      Lee Ryder authored
      MACSec test failed when asynchronous crypto operations is used. It
      encounters packet validation failed since macsec_skb_cb(skb)->valid
      is always 'false'.
      
      This patch adds missing "macsec_skb_cb(skb)->valid = true" in
      macsec_decrypt_done() when "err == 0".
      Signed-off-by: default avatarRyder Lee <ryder.lee@mediatek.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      b3bdc3ac
    • Gao Feng's avatar
      net: sock: Use USEC_PER_SEC macro instead of literal 1000000 · 8ccde4c5
      Gao Feng authored
      The USEC_PER_SEC is used once in sock_set_timeout as the max value of
      tv_usec. But there are other similar codes which use the literal
      1000000 in this file.
      It is minor cleanup to keep consitent.
      Signed-off-by: default avatarGao Feng <fgao@ikuai8.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      8ccde4c5
    • Jason Wang's avatar
      virtio-net: switch to use build_skb() for small buffer · f6b10209
      Jason Wang authored
      This patch switch to use build_skb() for small buffer which can have
      better performance for both TCP and XDP (since we can work at page
      before skb creation). It also remove lots of XDP codes since both
      mergeable and small buffer use page frag during refill now.
      
                             Before   | After
      XDP_DROP(xdp1) 64B  :  11.1Mpps | 14.4Mpps
      
      Tested with xdp1/xdp2/xdp_ip_tx_tunnel and netperf.
      Signed-off-by: default avatarJason Wang <jasowang@redhat.com>
      Acked-by: default avatarMichael S. Tsirkin <mst@redhat.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      f6b10209
    • Paolo Abeni's avatar
      ip: fix IP_CHECKSUM handling · ca4ef457
      Paolo Abeni authored
      The skbs processed by ip_cmsg_recv() are not guaranteed to
      be linear e.g. when sending UDP packets over loopback with
      MSGMORE.
      Using csum_partial() on [potentially] the whole skb len
      is dangerous; instead be on the safe side and use skb_checksum().
      
      Thanks to syzkaller team to detect the issue and provide the
      reproducer.
      
      v1 -> v2:
       - move the variable declaration in a tighter scope
      
      Fixes: ad6f939a ("ip: Add offset parameter to ip_cmsg_recv")
      Reported-by: default avatarAndrey Konovalov <andreyknvl@google.com>
      Signed-off-by: default avatarPaolo Abeni <pabeni@redhat.com>
      Acked-by: default avatarEric Dumazet <edumazet@google.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      ca4ef457
    • Roopa Prabhu's avatar
      vxlan: remove unused variable saddr in neigh_reduce · 8dcd81a9
      Roopa Prabhu authored
      silences the below warning:
          drivers/net/vxlan.c: In function ‘neigh_reduce’:
          drivers/net/vxlan.c:1599:25: warning: variable ‘saddr’ set but not used
          [-Wunused-but-set-variable]
      Signed-off-by: default avatarRoopa Prabhu <roopa@cumulusnetworks.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      8dcd81a9
    • Roopa Prabhu's avatar
      vxlan: add changelink support · 8bcdc4f3
      Roopa Prabhu authored
      This patch adds changelink rtnl op support for vxlan netdevs.
      code changes involve:
          - refactor vxlan_newlink into vxlan_nl2conf to be
          used by vxlan_newlink and vxlan_changelink
          - vxlan_nl2conf and vxlan_dev_configure take a
          changelink argument to isolate changelink checks
          and updates.
          - Allow changing only a few attributes:
              - return -EOPNOTSUPP for attributes that cannot
              be changed for now. Incremental patches can
              make the non-supported one available in the future
              if needed.
      Signed-off-by: default avatarRoopa Prabhu <roopa@cumulusnetworks.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      8bcdc4f3
    • Tobias Klauser's avatar
      rtnl: simplify error return path in rtnl_create_link() · d1892e4e
      Tobias Klauser authored
      There is only one possible error path which reaches the err label, so
      return ERR_PTR(-ENOMEM) directly if alloc_netdev_mqs() fails. This also
      allows to omit the err variable.
      Signed-off-by: default avatarTobias Klauser <tklauser@distanz.ch>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      d1892e4e
    • Jason Wang's avatar
      virito-net: set queues after reset during xdp_set · 017b29c3
      Jason Wang authored
      We set queues before reset which will cause a crash[1]. This is
      because is_xdp_raw_buffer_queue() depends on the old xdp queue pairs
      number to do the correct detection. So fix this by
      
      - passing xdp queue pairs and current queue pairs to virtnet_reset()
      - change vi->xdp_qp after reset but before refill, to make sure both
        free_unused_bufs() and refill can make correct detection of XDP.
      - remove the duplicated queue pairs setting before virtnet_reset()
        since we will do it inside virtnet_reset()
      
      [1]
      
      [   74.328168] general protection fault: 0000 [#1] SMP
      [   74.328625] Modules linked in: nfsd xfs libcrc32c virtio_net virtio_pci
      [   74.329117] CPU: 0 PID: 2849 Comm: xdp2 Not tainted 4.10.0-rc7+ #499
      [   74.329577] Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS rel-1.10.1-0-g8891697-prebuilt.qemu-project.org 04/01/2014
      [   74.330424] task: ffff88007a894000 task.stack: ffffc90004388000
      [   74.330844] RIP: 0010:skb_release_head_state+0x28/0x80
      [   74.331298] RSP: 0018:ffffc9000438b8d0 EFLAGS: 00010206
      [   74.331676] RAX: 0000000000000000 RBX: ffff88007ad96300 RCX: 0000000000000000
      [   74.332217] RDX: ffff88007fc137a8 RSI: ffff88007fc0db28 RDI: 0001bf00000001be
      [   74.332758] RBP: ffffc9000438b8d8 R08: 000000000005008f R09: 00000000000005f9
      [   74.333274] R10: ffff88007d001700 R11: ffffffff820a8a4d R12: ffff88007ad96300
      [   74.333787] R13: 0000000000000002 R14: ffff880036604000 R15: 000077ff80000000
      [   74.334308] FS:  00007fc70d8a7b40(0000) GS:ffff88007fc00000(0000) knlGS:0000000000000000
      [   74.334891] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
      [   74.335314] CR2: 00007fff4144a710 CR3: 000000007ab56000 CR4: 00000000003406f0
      [   74.335830] DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
      [   74.336373] DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400
      [   74.336895] Call Trace:
      [   74.337086]  skb_release_all+0xd/0x30
      [   74.337356]  consume_skb+0x2c/0x90
      [   74.337607]  free_unused_bufs+0x1ff/0x270 [virtio_net]
      [   74.337988]  ? vp_synchronize_vectors+0x3b/0x60 [virtio_pci]
      [   74.338398]  virtnet_xdp+0x21e/0x440 [virtio_net]
      [   74.338741]  dev_change_xdp_fd+0x101/0x140
      [   74.339048]  do_setlink+0xcf4/0xd20
      [   74.339304]  ? symcmp+0xf/0x20
      [   74.339529]  ? mls_level_isvalid+0x52/0x60
      [   74.339828]  ? mls_range_isvalid+0x43/0x50
      [   74.340135]  ? nla_parse+0xa0/0x100
      [   74.340400]  rtnl_setlink+0xd4/0x120
      [   74.340664]  ? cpumask_next_and+0x30/0x50
      [   74.340966]  rtnetlink_rcv_msg+0x7f/0x1f0
      [   74.341259]  ? sock_has_perm+0x59/0x60
      [   74.341586]  ? napi_consume_skb+0xe2/0x100
      [   74.342010]  ? rtnl_newlink+0x890/0x890
      [   74.342435]  netlink_rcv_skb+0x92/0xb0
      [   74.342846]  rtnetlink_rcv+0x23/0x30
      [   74.343277]  netlink_unicast+0x162/0x210
      [   74.343677]  netlink_sendmsg+0x2db/0x390
      [   74.343968]  sock_sendmsg+0x33/0x40
      [   74.344233]  SYSC_sendto+0xee/0x160
      [   74.344482]  ? SYSC_bind+0xb0/0xe0
      [   74.344806]  ? sock_alloc_file+0x92/0x110
      [   74.345106]  ? fd_install+0x20/0x30
      [   74.345360]  ? sock_map_fd+0x3f/0x60
      [   74.345586]  SyS_sendto+0x9/0x10
      [   74.345790]  entry_SYSCALL_64_fastpath+0x1a/0xa9
      [   74.346086] RIP: 0033:0x7fc70d1b8f6d
      [   74.346312] RSP: 002b:00007fff4144a708 EFLAGS: 00000246 ORIG_RAX: 000000000000002c
      [   74.346785] RAX: ffffffffffffffda RBX: 00000000ffffffff RCX: 00007fc70d1b8f6d
      [   74.347244] RDX: 000000000000002c RSI: 00007fff4144a720 RDI: 0000000000000003
      [   74.347683] RBP: 0000000000000003 R08: 0000000000000000 R09: 0000000000000000
      [   74.348544] R10: 0000000000000000 R11: 0000000000000246 R12: 00007fff4144bd90
      [   74.349082] R13: 0000000000000002 R14: 0000000000000002 R15: 00007fff4144cda0
      [   74.349607] Code: 00 00 00 55 48 89 e5 53 48 89 fb 48 8b 7f 58 48 85 ff 74 0e 40 f6 c7 01 74 3d 48 c7 43 58 00 00 00 00 48 8b 7b 68 48 85 ff 74 05 <f0> ff 0f 74 20 48 8b 43 60 48 85 c0 74 14 65 8b 15 f3 ab 8d 7e
      [   74.351008] RIP: skb_release_head_state+0x28/0x80 RSP: ffffc9000438b8d0
      [   74.351625] ---[ end trace fe6e19fd11cfc80b ]---
      
      Fixes: 2de2f7f4 ("virtio_net: XDP support for adjust_head")
      Cc: John Fastabend <john.fastabend@gmail.com>
      Signed-off-by: default avatarJason Wang <jasowang@redhat.com>
      Acked-by: default avatarMichael S. Tsirkin <mst@redhat.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      017b29c3
    • Michael Walle's avatar
      dpaa_eth: implement ioctl() for PHY-related ops · 1763413a
      Michael Walle authored
      This commit adds the ndo_do_ioctl() callback which allows the userspace to
      access PHY registers, for example. This will make mii-diag and similar
      tools work.
      Signed-off-by: default avatarMichael Walle <michael@walle.cc>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      1763413a
    • Philippe Reynes's avatar
      net: qualcomm: qca: use new api ethtool_{get|set}_link_ksettings · 2cf8a897
      Philippe Reynes authored
      The ethtool api {get|set}_settings is deprecated.
      We move this driver to new api {get|set}_link_ksettings.
      
      As I don't have the hardware, I'd be very pleased if
      someone may test this patch.
      Signed-off-by: default avatarPhilippe Reynes <tremyfr@gmail.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      2cf8a897
    • David S. Miller's avatar
      Merge branch 'bnxt_en-probe-and-open-bugs' · 836dacdd
      David S. Miller authored
      Michael Chan says:
      
      ====================
      bnxt_en: Fix probe and open bugs.
      
      Fix 3 issues related to bnxt_init_one() and bnxt_open().  Don't probe
      bridge devices and fixup some error code paths.
      ====================
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      836dacdd
    • Sathya Perla's avatar
      bnxt_en: fix pci cleanup in bnxt_init_one() failure path · 17086399
      Sathya Perla authored
      In the bnxt_init_one() failure path, bar1 and bar2 are not
      being unmapped.  This commit fixes this issue.  Reorganize the
      code so that bnxt_init_one()'s failure path and bnxt_remove_one()
      can call the same function to do the PCI cleanup.
      Signed-off-by: default avatarMichael Chan <michael.chan@broadcom.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      17086399
    • Michael Chan's avatar
      bnxt_en: Fix NULL pointer dereference in a failure path during open. · daf1f1e7
      Michael Chan authored
      If bnxt_hwrm_ring_free() is called during a failure path in bnxt_open(),
      it is possible that the completion rings have not been allocated yet.
      In that case, the completion doorbell has not been initialized, and
      calling bnxt_disable_int() will crash.  Fix it by checking that the
      completion ring has been initialized before writing to the completion
      ring doorbell.
      Signed-off-by: default avatarMichael Chan <michael.chan@broadcom.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      daf1f1e7
    • Ray Jui's avatar
      bnxt_en: Reject driver probe against all bridge devices · 4e00338a
      Ray Jui authored
      There are additional SoC devices that use the same device ID for
      bridge and NIC devices.  The bnxt driver should reject probe against
      all bridge devices since it's meant to be used with only endpoint
      devices.
      Signed-off-by: default avatarRay Jui <ray.jui@broadcom.com>
      Signed-off-by: default avatarMichael Chan <michael.chan@broadcom.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      4e00338a
  2. 20 Feb, 2017 22 commits