1. 08 9月, 2020 2 次提交
  2. 06 9月, 2020 3 次提交
  3. 01 9月, 2020 1 次提交
  4. 19 8月, 2020 1 次提交
  5. 15 8月, 2020 1 次提交
  6. 04 8月, 2020 1 次提交
  7. 28 7月, 2020 2 次提交
  8. 24 7月, 2020 1 次提交
    • J
      sfc: convert to new udp_tunnel infrastructure · 205a55f4
      Jakub Kicinski 提交于
      Check MC_CMD_DRV_ATTACH_EXT_OUT_FLAG_TRUSTED, before setting
      the info, which will hopefully protect us from -EPERM errors
      the previous code was gracefully ignoring. Ed reports this
      is not the 100% correct bit, but it's the best approximation
      we have. Shared code reports the port information back to user
      space, so we really want to know what was added and what failed.
      Ignoring -EPERM is not an option.
      
      The driver does not call udp_tunnel_get_rx_info(), so its own
      management of table state is not really all that problematic,
      we can leave it be. This allows the driver to continue with its
      copious table syncing, and matching the ports to TX frames,
      which it will reportedly do one day.
      
      Leave the feature checking in the callbacks, as the device may
      remove the capabilities on reset.
      
      Inline the loop from __efx_ef10_udp_tnl_lookup_port() into
      efx_ef10_udp_tnl_has_port(), since it's the only caller now.
      
      With new infra this driver gains port replace - when space frees
      up in a full table a new port will be selected for offload.
      Plus efx will no longer sleep in an atomic context.
      
      v2:
       - amend the commit message about TRUSTED not being 100%
       - add TUNNEL_ENCAP_UDP_PORT_ENTRY_INVALID to mark unsed
         entries
      Signed-off-by: NJakub Kicinski <kuba@kernel.org>
      Acked-By: NEdward Cree <ecree@solarflare.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      205a55f4
  9. 03 7月, 2020 4 次提交
    • E
      sfc: assign TXQs without gaps · a81dcd85
      Edward Cree 提交于
      Since we only allocate VIs for the number of TXQs we actually need, we
       cannot naively use "channel * TXQ_TYPES + txq" for the TXQ number, as
       this has gaps (when efx->tx_queues_per_channel < EFX_TXQ_TYPES) and
       thus overruns the driver's VI allocations, causing the firmware to
       reject the MC_CMD_INIT_TXQ based on INSTANCE.
      Thus, we distinguish INSTANCE (stored in tx_queue->queue) from LABEL
       (tx_queue->label); the former is allocated starting from 0 in
       efx_set_channels(), while the latter is simply the txq type (index in
       channel->tx_queue array).
      To simplify things, rather than changing tx_queues_per_channel after
       setting up TXQs, make Siena always probe its HIGHPRI queues at start
       of day, rather than deferring it until tc mqprio enables them.
      Signed-off-by: NEdward Cree <ecree@solarflare.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      a81dcd85
    • E
      sfc: make tx_queues_per_channel variable at runtime · f9cac93e
      Edward Cree 提交于
      Siena needs four TX queues (csum * highpri), EF10 needs two (csum),
       and EF100 only needs one (as checksumming is controlled entirely by
       the transmit descriptor).  Rather than having various bits of ad-hoc
       code to decide which queues to set up etc., put the knowledge of how
       many TXQs a channel has in one place.
      Signed-off-by: NEdward Cree <ecree@solarflare.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      f9cac93e
    • E
      sfc: remove max_interrupt_mode · bc324421
      Edward Cree 提交于
      All NICs supported by this driver are capable of MSI-X interrupts (only
       Falcon A1 wasn't, and that's now hived off into its own driver), so no
       need for a nic-type parameter.  Besides, the code that checked it was
       buggy anyway (the following assignment that checked min_interrupt_mode
       overrode it).
      Signed-off-by: NEdward Cree <ecree@solarflare.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      bc324421
    • E
      sfc: support setting MTU even if not privileged to configure MAC fully · af3c38d3
      Edward Cree 提交于
      Unprivileged functions (such as VFs) may set their MTU by use of the
       'control' field of MC_CMD_SET_MAC_EXT, as used in efx_mcdi_set_mtu().
      If calling efx_ef10_mac_reconfigure() from efx_change_mtu(), and the
       NIC supports the above (SET_MAC_ENHANCED capability), use it rather
       than efx_mcdi_set_mac().
      Signed-off-by: NEdward Cree <ecree@solarflare.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      af3c38d3
  10. 30 6月, 2020 2 次提交
  11. 12 5月, 2020 4 次提交
  12. 17 3月, 2020 1 次提交
    • J
      sfc: fix XDP-redirect in this driver · 86e85bf6
      Jesper Dangaard Brouer 提交于
      XDP-redirect is broken in this driver sfc. XDP_REDIRECT requires
      tailroom for skb_shared_info when creating an SKB based on the
      redirected xdp_frame (both in cpumap and veth).
      
      The fix requires some initial explaining. The driver uses RX page-split
      when possible. It reserves the top 64 bytes in the RX-page for storing
      dma_addr (struct efx_rx_page_state). It also have the XDP recommended
      headroom of XDP_PACKET_HEADROOM (256 bytes). As it doesn't reserve any
      tailroom, it can still fit two standard MTU (1500) frames into one page.
      
      The sizeof struct skb_shared_info in 320 bytes. Thus drivers like ixgbe
      and i40e, reduce their XDP headroom to 192 bytes, which allows them to
      fit two frames with max 1536 bytes into a 4K page (192+1536+320=2048).
      
      The fix is to reduce this drivers headroom to 128 bytes and add the 320
      bytes tailroom. This account for reserved top 64 bytes in the page, and
      still fit two frame in a page for normal MTUs.
      
      We must never go below 128 bytes of headroom for XDP, as one cacheline
      is for xdp_frame area and next cacheline is reserved for metadata area.
      
      Fixes: eb9a36be ("sfc: perform XDP processing on received packets")
      Signed-off-by: NJesper Dangaard Brouer <brouer@redhat.com>
      Acked-by: NEdward Cree <ecree@solarflare.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      86e85bf6
  13. 06 3月, 2020 1 次提交
    • T
      sfc: complete the next packet when we receive a timestamp · 3b4f06c7
      Tom Zhao 提交于
      We now ignore the "completion" event when using tx queue timestamping,
      and only pay attention to the two (high and low) timestamp events. The
      NIC will send a pair of timestamp events for every packet transmitted.
      The current firmware may merge the completion events, and it is possible
      that future versions may reorder the completion and timestamp events.
      As such the completion event is not useful.
      
      Without this patch in place a merged completion event on a queue with
      timestamping will cause a "spurious TX completion" error. This affects
      SFN8000-series adapters.
      Signed-off-by: NTom Zhao <tzhao@solarflare.com>
      Acked-by: NMartin Habets <mhabets@solarflare.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      3b4f06c7
  14. 27 2月, 2020 1 次提交
  15. 11 1月, 2020 1 次提交
  16. 09 1月, 2020 1 次提交
  17. 03 1月, 2020 1 次提交
  18. 21 12月, 2019 1 次提交
    • E
      sfc: fix channel allocation with brute force · 8700aff0
      Edward Cree 提交于
      It was possible for channel allocation logic to get confused between what
       it had and what it wanted, and end up trying to use the same channel for
       both PTP and regular TX.  This led to a kernel panic:
          BUG: unable to handle page fault for address: 0000000000047635
          #PF: supervisor write access in kernel mode
          #PF: error_code(0x0002) - not-present page
          PGD 0 P4D 0
          Oops: 0002 [#1] SMP PTI
          CPU: 0 PID: 0 Comm: swapper/0 Tainted: G        W         5.4.0-rc3-ehc14+ #900
          Hardware name: Dell Inc. PowerEdge R710/0M233H, BIOS 6.4.0 07/23/2013
          RIP: 0010:native_queued_spin_lock_slowpath+0x188/0x1e0
          Code: f3 90 48 8b 32 48 85 f6 74 f6 eb e8 c1 ee 12 83 e0 03 83 ee 01 48 c1 e0 05 48 63 f6 48 05 c0 98 02 00 48 03 04 f5 a0 c6 ed 81 <48> 89 10 8b 42 08 85 c0 75 09 f3 90 8b 42 08 85 c0 74 f7 48 8b 32
          RSP: 0018:ffffc90000003d28 EFLAGS: 00010006
          RAX: 0000000000047635 RBX: 0000000000000246 RCX: 0000000000040000
          RDX: ffff888627a298c0 RSI: 0000000000003ffe RDI: ffff88861f6b8dd4
          RBP: ffff8886225c6e00 R08: 0000000000040000 R09: 0000000000000000
          R10: 0000000616f080c6 R11: 00000000000000c0 R12: ffff88861f6b8dd4
          R13: ffffc90000003dc8 R14: ffff88861942bf00 R15: ffff8886150f2000
          FS:  0000000000000000(0000) GS:ffff888627a00000(0000) knlGS:0000000000000000
          CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
          CR2: 0000000000047635 CR3: 000000000200a000 CR4: 00000000000006f0
          Call Trace:
           <IRQ>
           _raw_spin_lock_irqsave+0x22/0x30
           skb_queue_tail+0x1b/0x50
           sock_queue_err_skb+0x9d/0xf0
           __skb_complete_tx_timestamp+0x9d/0xc0
           efx_dequeue_buffer+0x126/0x180 [sfc]
           efx_xmit_done+0x73/0x1c0 [sfc]
           efx_ef10_ev_process+0x56a/0xfe0 [sfc]
           ? tick_sched_do_timer+0x60/0x60
           ? timerqueue_add+0x5d/0x70
           ? enqueue_hrtimer+0x39/0x90
           efx_poll+0x111/0x380 [sfc]
           ? rcu_accelerate_cbs+0x50/0x160
           net_rx_action+0x14a/0x400
           __do_softirq+0xdd/0x2d0
           irq_exit+0xa0/0xb0
           do_IRQ+0x53/0xe0
           common_interrupt+0xf/0xf
           </IRQ>
      
      In the long run we intend to rewrite the channel allocation code, but for
       'net' fix this by allocating extra_channels, and giving them TX queues,
       even if we do not in fact need them (e.g. on NICs without MAC TX
       timestamping), and thereby using simpler logic to assign the channels
       once they're allocated.
      
      Fixes: 3990a8ff ("sfc: allocate channels for XDP tx queues")
      Signed-off-by: NEdward Cree <ecree@solarflare.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      8700aff0
  19. 23 11月, 2019 3 次提交
  20. 01 11月, 2019 4 次提交
  21. 19 6月, 2019 1 次提交
  22. 04 7月, 2018 1 次提交
  23. 25 4月, 2018 1 次提交
    • E
      sfc: ARFS filter IDs · f8d62037
      Edward Cree 提交于
      Associate an arbitrary ID with each ARFS filter, allowing to properly query
       for expiry.  The association is maintained in a hash table, which is
       protected by a spinlock.
      
      v3: fix build warnings when CONFIG_RFS_ACCEL is disabled (thanks lkp-robot).
      v2: fixed uninitialised variable (thanks davem and lkp-robot).
      
      Fixes: 3af0f342 ("sfc: replace asynchronous filter operations")
      Signed-off-by: NEdward Cree <ecree@solarflare.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      f8d62037
  24. 15 4月, 2018 1 次提交
    • E
      sfc: limit ARFS workitems in flight per channel · f993740e
      Edward Cree 提交于
      A misconfigured system (e.g. with all interrupts affinitised to all CPUs)
       may produce a storm of ARFS steering events.  With the existing sfc ARFS
       implementation, that could create a backlog of workitems that grinds the
       system to a halt.  To prevent this, limit the number of workitems that
       may be in flight for a given SFC device to 8 (EFX_RPS_MAX_IN_FLIGHT), and
       return EBUSY from our ndo_rx_flow_steer method if the limit is reached.
      Given this limit, also store the workitems in an array of slots within the
       struct efx_nic, rather than dynamically allocating for each request.
      The limit should not negatively impact performance, because it is only
       likely to be hit in cases where ARFS will be ineffective anyway.
      Signed-off-by: NEdward Cree <ecree@solarflare.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      f993740e