1. 29 10月, 2016 1 次提交
    • A
      i40e/i40evf: fix interrupt affinity bug · 96db776a
      Alan Brady 提交于
      There exists a bug in which a 'perfect storm' can occur and cause
      interrupts to fail to be correctly affinitized. This causes unexpected
      behavior and has a substantial impact on performance when it happens.
      
      The bug occurs if there is heavy traffic, any number of CPUs that have
      an i40e interrupt are pegged at 100%, and the interrupt afffinity for
      those CPUs is changed.  Instead of moving to the new CPU, the interrupt
      continues to be polled while there is heavy traffic.
      
      The bug is most readily realized as the driver is first brought up and
      all interrupts start on CPU0. If there is heavy traffic and the
      interrupt starts polling before the interrupt is affinitized, the
      interrupt will be stuck on CPU0 until traffic stops. The bug, however,
      can also be wrought out more simply by affinitizing all the interrupts
      to a single CPU and then attempting to move any of those interrupts off
      while there is heavy traffic.
      
      This patch fixes the bug by registering for update notifications from
      the kernel when the interrupt affinity changes. When that fires, we
      cache the intended affinity mask. Then, while polling, if the cpu is
      pegged at 100% and we failed to clean the rings, we check to make sure
      we have the correct affinity and stop polling if we're firing on the
      wrong CPU.  When the kernel successfully moves the interrupt, it will
      start polling on the correct CPU. The performance impact is minimal
      since the only time this section gets executed is when performance is
      already compromised by the CPU.
      
      Change-ID: I4410a880159b9dba1f8297aa72bef36dca34e830
      Signed-off-by: NAlan Brady <alan.brady@intel.com>
      Tested-by: NAndrew Bowers <andrewx.bowers@intel.com>
      Signed-off-by: NJeff Kirsher <jeffrey.t.kirsher@intel.com>
      96db776a
  2. 25 9月, 2016 1 次提交
  3. 20 8月, 2016 2 次提交
  4. 14 5月, 2016 1 次提交
  5. 06 5月, 2016 2 次提交
  6. 28 4月, 2016 1 次提交
  7. 27 4月, 2016 1 次提交
  8. 26 4月, 2016 1 次提交
  9. 18 2月, 2016 1 次提交
  10. 04 2月, 2016 1 次提交
    • M
      i40evf: allow channel bonding of VFs · 209dc4da
      Mitch Williams 提交于
      In some modes, bonding would not enslave VF interfaces. This is due to
      bonding calling change_mtu and the immediately calling open. Because of
      the asynchronous nature of the admin queue mechanism, the VF returns
      -EBUSY to the open call, because it knows the previous operation hasn't
      finished yet. This causes bonding to fail with a less-than-useful error
      message.
      
      To fix this, remove the check for pending operations at the beginning of
      open. But this introduces a new bug where the driver will panic on a
      quick close/open cycle. To fix that, we add a new driver state,
      __I40EVF_DOWN_PENDING, that the driver enters when down is called. The
      driver finally transitions to a fully DOWN state when it receives
      confirmation from the PF driver that all the queues are disabled. This
      allows open to complete even if there is a pending mtu change, and
      bonding is finally happy.
      
      Change-ID: I06f4c7e435d5bacbfceaa7c3f209e0ff04be21cc
      Signed-off-by: NMitch Williams <mitch.a.williams@intel.com>
      Tested-by: NAndrew Bowers <andrewx.bowers@intel.com>
      Signed-off-by: NJeff Kirsher <jeffrey.t.kirsher@intel.com>
      209dc4da
  11. 03 12月, 2015 1 次提交
  12. 02 12月, 2015 5 次提交
  13. 20 10月, 2015 1 次提交
  14. 16 10月, 2015 2 次提交
    • M
      i40evf: relax and stagger init timing a bit · 3f7e5c33
      Mitch Williams 提交于
      On some devices, in some systems, in some configurations, the VFs would
      fail to initialize the first time you loaded the driver.
      
      To correct this, increase the delay time for the init task slightly, and
      wait longer before giving up.
      
      If we enable VFs and load the VF driver in the same kernel as the PF
      driver, we can totally overwhelm the PF driver with AQ requests because
      all of the instances try to initialize at the same time.
      
      To help alleviate this, stagger the initial scheduling of the init task
      using the PCIe function as a multiplier. We mask off the function to
      only three bits so no instance has to wait too long.
      
      With these two changes, initializing 128 VFs on a single device goes
      from four minutes to just a few seconds.
      
      Change-ID: If3d8720c1c4e838ab36d8781d9ec295a62380936
      Signed-off-by: NMitch Williams <mitch.a.williams@intel.com>
      Tested-by: NAndrew Bowers <andrewx.bowers@intel.com>
      Signed-off-by: NJeff Kirsher <jeffrey.t.kirsher@intel.com>
      3f7e5c33
    • A
      i40e/i40evf: Drop useless "IN_NETPOLL" flag · 8b650359
      Alexander Duyck 提交于
      The code in i40e and i40evf is using an "IN_NETPOLL" flag that has never
      added any value due to the fact that the Rx clean-up is handled in NAPI.
      As such the flag was set, the queue was scheduled via NAPI, and then polled
      from the netpoll controller and if any Rx packets were processed the were
      processed in the wrong context.
      
      In addition the flag itself just added an unneeded conditional to the
      hot-path so it can safely be dropped and save us a few instructions.
      Signed-off-by: NAlexander Duyck <aduyck@mirantis.com>
      Tested-by: NAndrew Bowers <andrewx.bowers@intel.com>
      Signed-off-by: NJeff Kirsher <jeffrey.t.kirsher@intel.com>
      8b650359
  15. 14 10月, 2015 1 次提交
  16. 09 10月, 2015 2 次提交
  17. 06 8月, 2015 3 次提交
  18. 23 7月, 2015 3 次提交
  19. 26 6月, 2015 1 次提交
  20. 15 4月, 2015 1 次提交
  21. 27 3月, 2015 1 次提交
    • M
      i40evf: delay releasing rings · e284fc88
      Mitch Williams 提交于
      When the VF interface is closed, we cannot immediately free our rings
      and RX buffers, because the hardware hasn't yet stopped accessing this
      memory. This shows up as a panic or memory corruption when the device is
      brought down while under heavy stress.
      
      To fix this, delay releasing resources until we receive acknowledgment
      from the PF driver that the rings have indeed been stopped. Because of
      this delay, we also need to check to make sure that all of our admin
      queue requests have been handled before allowing the device to be
      opened.
      
      Change-ID: I44edd35529ce2fa2a9512437a3a8e6f14ed8ed63
      Signed-off-by: NMitch Williams <mitch.a.williams@intel.com>
      Tested-by: NJim Young <james.m.young@intel.com>
      Signed-off-by: NJeff Kirsher <jeffrey.t.kirsher@intel.com>
      e284fc88
  22. 21 11月, 2014 1 次提交
    • M
      i40evf: make checkpatch happy · 75a64435
      Mitch Williams 提交于
      This patch is the result of running checkpatch on the i40evf driver with
      the --strict option. The vast majority of changes are adding/removing
      blank lines, aligning function parameters, and correcting over-long
      lines.
      
      The only possible functional change is changing the flags member of the
      adapter structure to be non-volatile. However, according to the kernel
      documentation, this is not necessary and the volatile should be removed.
      
      Change-ID: Ie8c6414800924f529bef831e8845292b970fe2ed
      Signed-off-by: NMitch Williams <mitch.a.williams@intel.com>
      Signed-off-by: NJeff Kirsher <jeffrey.t.kirsher@intel.com>
      75a64435
  23. 11 11月, 2014 1 次提交
  24. 05 6月, 2014 2 次提交
  25. 21 5月, 2014 1 次提交
  26. 28 3月, 2014 1 次提交
  27. 22 2月, 2014 1 次提交