1. 17 May, 2018 4 commits
    • Pavel Tatashin's avatar
      ixgbe: release lock for the duration of ixgbe_suspend_close() · 6710f970
      Pavel Tatashin authored
      Currently, during device_shutdown() ixgbe holds rtnl_lock for the duration
      of lengthy ixgbe_close_suspend(). On machines with multiple ixgbe cards
      this lock prevents scaling if device_shutdown() function is multi-threaded.
      
      It is not necessary to hold this lock during ixgbe_close_suspend()
      as it is not held when ixgbe_close() is called also during shutdown but for
      kexec case.
      Signed-off-by: default avatarPavel Tatashin <pasha.tatashin@oracle.com>
      Tested-by: default avatarAndrew Bowers <andrewx.bowers@intel.com>
      Signed-off-by: default avatarJeff Kirsher <jeffrey.t.kirsher@intel.com>
      6710f970
    • Mauro S M Rodrigues's avatar
      ixgbe/ixgbevf: Free IRQ when PCI error recovery removes the device · b212d815
      Mauro S M Rodrigues authored
      Since commit f7f37e7f ("ixgbe: handle close/suspend race with
      netif_device_detach/present") ixgbe_close_suspend is called, from
      ixgbe_close, only if the device is present, i.e. if it isn't detached.
      That exposed a situation where IRQs weren't freed if a PCI error
      recovery system opts to remove the device. For such case the pci channel
      state is set to pci_channel_io_perm_failure and ixgbe_io_error_detected
      was returning PCI_ERS_RESULT_DISCONNECT before calling
      ixgbe_close_suspend consequentially not freeing IRQ and crashing when
      the remove handler calls pci_disable_device, hitting a BUG_ON at
      free_msi_irqs, which asserts that there is no non-free IRQ associated
      with the device to be removed:
      
      BUG_ON(irq_has_action(entry->irq + i));
      
      The issue is fixed by calling the ixgbe_close_suspend before evaluate
      the pci channel state.
      Reported-by: default avatarNaresh Bannoth <nbannoth@in.ibm.com>
      Reported-by: default avatarAbdul Haleem <abdhalee@in.ibm.com>
      Signed-off-by: default avatarMauro S M Rodrigues <maurosr@linux.vnet.ibm.com>
      Reviewed-by: default avatarAlexander Duyck <alexander.h.duyck@intel.com>
      Tested-by: default avatarAndrew Bowers <andrewx.bowers@intel.com>
      Signed-off-by: default avatarJeff Kirsher <jeffrey.t.kirsher@intel.com>
      b212d815
    • Cathy Zhou's avatar
      ixgbe: cleanup sparse warnings · 9cfbfa70
      Cathy Zhou authored
      Sparse complains valid conversions between restricted types, force
      attribute is used to avoid those warnings.
      Signed-off-by: default avatarCathy Zhou <cathy.zhou@oracle.com>
      Reviewed-by: default avatarShannon Nelson <shannon.nelson@oracle.com>
      Tested-by: default avatarAndrew Bowers <andrewx.bowers@intel.com>
      Signed-off-by: default avatarJeff Kirsher <jeffrey.t.kirsher@intel.com>
      9cfbfa70
    • David S. Miller's avatar
      Merge git://git.kernel.org/pub/scm/linux/kernel/git/bpf/bpf-next · b9f672af
      David S. Miller authored
      Daniel Borkmann says:
      
      ====================
      pull-request: bpf-next 2018-05-17
      
      The following pull-request contains BPF updates for your *net-next* tree.
      
      The main changes are:
      
      1) Provide a new BPF helper for doing a FIB and neighbor lookup
         in the kernel tables from an XDP or tc BPF program. The helper
         provides a fast-path for forwarding packets. The API supports
         IPv4, IPv6 and MPLS protocols, but currently IPv4 and IPv6 are
         implemented in this initial work, from David (Ahern).
      
      2) Just a tiny diff but huge feature enabled for nfp driver by
         extending the BPF offload beyond a pure host processing offload.
         Offloaded XDP programs are allowed to set the RX queue index and
         thus opening the door for defining a fully programmable RSS/n-tuple
         filter replacement. Once BPF decided on a queue already, the device
         data-path will skip the conventional RSS processing completely,
         from Jakub.
      
      3) The original sockmap implementation was array based similar to
         devmap. However unlike devmap where an ifindex has a 1:1 mapping
         into the map there are use cases with sockets that need to be
         referenced using longer keys. Hence, sockhash map is added reusing
         as much of the sockmap code as possible, from John.
      
      4) Introduce BTF ID. The ID is allocatd through an IDR similar as
         with BPF maps and progs. It also makes BTF accessible to user
         space via BPF_BTF_GET_FD_BY_ID and adds exposure of the BTF data
         through BPF_OBJ_GET_INFO_BY_FD, from Martin.
      
      5) Enable BPF stackmap with build_id also in NMI context. Due to the
         up_read() of current->mm->mmap_sem build_id cannot be parsed.
         This work defers the up_read() via a per-cpu irq_work so that
         at least limited support can be enabled, from Song.
      
      6) Various BPF JIT follow-up cleanups and fixups after the LD_ABS/LD_IND
         JIT conversion as well as implementation of an optimized 32/64 bit
         immediate load in the arm64 JIT that allows to reduce the number of
         emitted instructions; in case of tested real-world programs they
         were shrinking by three percent, from Daniel.
      
      7) Add ifindex parameter to the libbpf loader in order to enable
         BPF offload support. Right now only iproute2 can load offloaded
         BPF and this will also enable libbpf for direct integration into
         other applications, from David (Beckett).
      
      8) Convert the plain text documentation under Documentation/bpf/ into
         RST format since this is the appropriate standard the kernel is
         moving to for all documentation. Also add an overview README.rst,
         from Jesper.
      
      9) Add __printf verification attribute to the bpf_verifier_vlog()
         helper. Though it uses va_list we can still allow gcc to check
         the format string, from Mathieu.
      
      10) Fix a bash reference in the BPF selftest's Makefile. The '|& ...'
          is a bash 4.0+ feature which is not guaranteed to be available
          when calling out to shell, therefore use a more portable variant,
          from Joe.
      
      11) Fix a 64 bit division in xdp_umem_reg() by using div_u64()
          instead of relying on the gcc built-in, from Björn.
      
      12) Fix a sock hashmap kmalloc warning reported by syzbot when an
          overly large key size is used in hashmap then causing overflows
          in htab->elem_size. Reject bogus attr->key_size early in the
          sock_hash_alloc(), from Yonghong.
      
      13) Ensure in BPF selftests when urandom_read is being linked that
          --build-id is always enabled so that test_stacktrace_build_id[_nmi]
          won't be failing, from Alexei.
      
      14) Add bitsperlong.h as well as errno.h uapi headers into the tools
          header infrastructure which point to one of the arch specific
          uapi headers. This was needed in order to fix a build error on
          some systems for the BPF selftests, from Sirio.
      
      15) Allow for short options to be used in the xdp_monitor BPF sample
          code. And also a bpf.h tools uapi header sync in order to fix a
          selftest build failure. Both from Prashant.
      
      16) More formally clarify the meaning of ID in the direct packet access
          section of the BPF documentation, from Wang.
      ====================
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      b9f672af
  2. 16 May, 2018 36 commits