1. 15 2月, 2018 4 次提交
  2. 13 2月, 2018 1 次提交
    • A
      i40e/i40evf: Add support for new mechanism of updating adaptive ITR · a0073a4b
      Alexander Duyck 提交于
      This patch replaces the existing mechanism for determining the correct
      value to program for adaptive ITR with yet another new and more
      complicated approach.
      
      The basic idea from a 30K foot view is that this new approach will push the
      Rx interrupt moderation up so that by default it starts in low latency and
      is gradually pushed up into a higher latency setup as long as doing so
      increases the number of packets processed, if the number of packets drops
      to 4 to 1 per packet we will reset and just base our ITR on the size of the
      packets being received. For Tx we leave it floating at a high interrupt
      delay and do not pull it down unless we start processing more than 112
      packets per interrupt. If we start exceeding that we will cut our interrupt
      rates in half until we are back below 112.
      
      The side effect of these patches are that we will be processing more
      packets per interrupt. This is both a good and a bad thing as it means we
      will not be blocking processing in the case of things like pktgen and XDP,
      but we will also be consuming a bit more CPU in the cases of things such as
      network throughput tests using netperf.
      
      One delta from this versus the ixgbe version of the changes is that I have
      made the interrupt moderation a bit more aggressive when we are in bulk
      mode by moving our "goldilocks zone" up from 48 to 96 to 56 to 112. The
      main motivation behind moving this is to address the fact that we need to
      update less frequently, and have more fine grained control due to the
      separate Tx and Rx ITR times.
      Signed-off-by: NAlexander Duyck <alexander.h.duyck@intel.com>
      Tested-by: NAndrew Bowers <andrewx.bowers@intel.com>
      Signed-off-by: NJeff Kirsher <jeffrey.t.kirsher@intel.com>
      a0073a4b
  3. 27 1月, 2018 1 次提交
  4. 24 1月, 2018 1 次提交
  5. 11 1月, 2018 1 次提交
  6. 06 10月, 2017 1 次提交
    • J
      i40e/i40evf: organize and re-number feature flags · b74f571f
      Jacob Keller 提交于
      Now that we've reduced the number of flags, organize similar flags
      together and re-number them accordingly.
      
      Since we don't yet have more than 32 flags, we'll use a u32 for both the
      hw_features and flag field. Should we gain more flags in the future, we
      may need to convert to a u64 or separate flags out into two fields.
      
      One alternative approach considered, but not implemented here, was to
      use an enumeration for the flag variables, and create a macro
      I40E_FLAG() which used string concatenation to generate BIT_ULL values.
      This has the advantage of making the actual bit values compile-time
      dynamic so that we do not need to worry about matching the order to the
      bit value. However, this does produce a high level of code churn, and
      makes it more difficult to read a dumped flags value when debugging.
      
      Change-ID: I8653fff69453cd547d6fe98d29dfa9d8710387d1
      Signed-off-by: NJacob Keller <jacob.e.keller@intel.com>
      Reviewed-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>
      b74f571f
  7. 03 10月, 2017 1 次提交
  8. 28 8月, 2017 2 次提交
  9. 26 8月, 2017 3 次提交
    • S
      i40e/i40evf: rename vf_offload_flags to vf_cap_flags in struct virtchnl_vf_resource · fbb113f7
      Stefan Assmann 提交于
      The current name of vf_offload_flags indicates that the bitmap is
      limited to offload related features. Make this more generic by renaming
      it to vf_cap_flags, which allows for other capabilities besides
      offloading to be added.
      Signed-off-by: NStefan Assmann <sassmann@kpanic.de>
      Tested-by: NAndrew Bowers <andrewx.bowers@intel.com>
      Signed-off-by: NJeff Kirsher <jeffrey.t.kirsher@intel.com>
      fbb113f7
    • J
      i40e: separate hw_features from runtime changing flags · d36e41dc
      Jacob Keller 提交于
      The number of flags found in pf->flags has grown quite large, and there
      are a lot of different types of flags. Most of the flags are simply
      hardware features which are enabled on some firmware or some MAC types.
      Other flags are dynamic run-time flags which enable or disable certain
      features of the driver.
      
      Separate these two types of flags into pf->hw_features and pf->flags.
      The hw_features list will contain a set of features which are enabled at
      init time. This will not contain toggles or otherwise dynamically
      changing features. These flags should not need atomic protections, as
      they will be set once during init and then be essentially read only.
      
      Everything else will remain in the flags variable. These flags may be
      modified at any time during run time. A future patch may wish to convert
      these flags into set_bit/clear_bit/test_bit or similar approach to
      ensure atomic correctness.
      
      The I40E_FLAG_MFP_ENABLED flag may be a good fit for hw_features but
      currently is used by ethtool in the private flags settings, and thus has
      been left as part of flags.
      
      Additionally, I40E_FLAG_DCB_CAPABLE may be a good fit for the
      hw_features but this patch has not tried to untangle it yet.
      Signed-off-by: NJacob Keller <jacob.e.keller@intel.com>
      Tested-by: NAndrew Bowers <andrewx.bowers@intel.com>
      Signed-off-by: NJeff Kirsher <jeffrey.t.kirsher@intel.com>
      d36e41dc
    • S
      i40evf: prevent VF close returning before state transitions to DOWN · fe2647ab
      Sudheer Mogilappagari 提交于
      Currently i40evf_close() can return before state transitions to
      __I40EVF_DOWN because of the latency involved in processing and
      receiving response from PF driver and scheduling of VF watchdog_task.
      Due to this inconsistency an immediate call to i40evf_open() fails
      because state is still DOWN_PENDING.
      
      When a VF interface is in up state and we try to add it as slave,
      The bonding driver calls dev_close() and dev_open() in short duration
      resulting in dev_open returning error. The ifenslave command needs
      to be run again for dev_open to succeed.
      
      This fix ensures that watchdog timer is scheduled immediately after
      admin queue operations are scheduled in i40evf_down(). In addition a
      wait condition is added at the end of i40evf_close so that function
      wont return when state is still DOWN_PENDING. The timeout value is
      chosen after some profiling and includes some buffer.
      Signed-off-by: NSudheer Mogilappagari <sudheer.mogilappagari@intel.com>
      Tested-by: NAndrew Bowers <andrewx.bowers@intel.com>
      Signed-off-by: NJeff Kirsher <jeffrey.t.kirsher@intel.com>
      fe2647ab
  10. 26 7月, 2017 1 次提交
  11. 02 6月, 2017 3 次提交
    • J
      virtchnl: finish conversion to virtchnl interface · ff3f4cc2
      Jesse Brandeburg 提交于
      This patch implements the complete version of the virtchnl.h file
      with final renames, and fixes the related code in i40e and i40evf.
      
      It also expands comments, and adds details on the usage of
      certain fields.
      
      In addition, due to the changes a couple of casts are needed
      to prevent errors found by sparse after renaming some fields.
      Signed-off-by: NJesse Brandeburg <jesse.brandeburg@intel.com>
      Tested-by: NAndrew Bowers <andrewx.bowers@intel.com>
      Signed-off-by: NJeff Kirsher <jeffrey.t.kirsher@intel.com>
      ff3f4cc2
    • J
      virtchnl: rename i40e to generic virtchnl · 310a2ad9
      Jesse Brandeburg 提交于
      This morphs all the i40e and i40evf references to/in virtchnl.h
      to be generic, using only automated methods. Updates all the
      callers to use the new names.  A followup patch provides separate
      clean ups for messy line conversions from these "automatic"
      changes, to make them more reviewable.
      
      Was executed with the following sed script:
      sed -i -f transform_script drivers/net/ethernet/intel/i40e/i40e_client.c
      sed -i -f transform_script drivers/net/ethernet/intel/i40e/i40e_prototype.h
      sed -i -f transform_script drivers/net/ethernet/intel/i40e/i40e_virtchnl_pf.c
      sed -i -f transform_script drivers/net/ethernet/intel/i40e/i40e_virtchnl_pf.h
      sed -i -f transform_script drivers/net/ethernet/intel/i40evf/i40e_common.c
      sed -i -f transform_script drivers/net/ethernet/intel/i40evf/i40e_prototype.h
      sed -i -f transform_script drivers/net/ethernet/intel/i40evf/i40evf.h
      sed -i -f transform_script drivers/net/ethernet/intel/i40evf/i40evf_client.c
      sed -i -f transform_script drivers/net/ethernet/intel/i40evf/i40evf_main.c
      sed -i -f transform_script drivers/net/ethernet/intel/i40evf/i40evf_virtchnl.c
      sed -i -f transform_script include/linux/avf/virtchnl.h
      
      transform_script:
      ----8<----
      s/I40E_VIRTCHNL_SUPPORTED_QTYPES/SAVE_ME_SUPPORTED_QTYPES/g
      s/I40E_VIRTCHNL_VF_CAP/SAVE_ME_VF_CAP/g
      
      s/I40E_VIRTCHNL_/VIRTCHNL_/g
      s/i40e_virtchnl_/virtchnl_/g
      s/i40e_vfr_/virtchnl_vfr_/g
      s/I40E_VFR_/VIRTCHNL_VFR_/g
      
      s/VIRTCHNL_OP_ADD_ETHER_ADDRESS/VIRTCHNL_OP_ADD_ETH_ADDR/g
      s/VIRTCHNL_OP_DEL_ETHER_ADDRESS/VIRTCHNL_OP_DEL_ETH_ADDR/g
      s/VIRTCHNL_OP_FCOE/VIRTCHNL_OP_RSVD/g
      
      s/SAVE_ME_SUPPORTED_QTYPES/I40E_VIRTCHNL_SUPPORTED_QTYPES/g
      s/SAVE_ME_VF_CAP/I40E_VIRTCHNL_VF_CAP/g
      ----8<----
      Signed-off-by: NJesse Brandeburg <jesse.brandeburg@intel.com>
      Tested-by: NAndrew Bowers <andrewx.bowers@intel.com>
      Signed-off-by: NJeff Kirsher <jeffrey.t.kirsher@intel.com>
      310a2ad9
    • J
      i40e/i40evf: create and use new unified header file · 681bdf80
      Jesse Brandeburg 提交于
      This moves a header for i40evf to include/linux/avf/virtchnl.h.
      The directory name AVF is an acronym for the Intel(R) Adaptive
      Virtual Function.
      
      This first step creates the new file, which is a rename of
      drivers/net/ethernet/intel/i40evf/i40e_virtchnl.h to
      include/linux/avf/virtchnl.h, and should show up in git
      as a rename when using git log --follow.
      
      To keep things building after the move, the changes to the i40evf
      driver are made to point to the new include file location.
      Signed-off-by: NJesse Brandeburg <jesse.brandeburg@intel.com>
      Tested-by: NAndrew Bowers <andrewx.bowers@intel.com>
      Signed-off-by: NJeff Kirsher <jeffrey.t.kirsher@intel.com>
      681bdf80
  12. 30 4月, 2017 3 次提交
    • J
      i40evf: remove I40E_FLAG_FDIR_ATR_ENABLED · 707636c6
      Jacob Keller 提交于
      The flag used by the common code and PF code is I40E_FLAG_FD_ATR_ENABLED,
      not *FDIR*. It turns out none of the txrx code actually shared with the
      VF driver actually checks the ATR flag. This is made even more obvious
      by the typo in the VF header file.
      
      Let's just remove the flag from the VF driver since it's not needed.
      Signed-off-by: NJacob Keller <jacob.e.keller@intel.com>
      Tested-by: NAndrew Bowers <andrewx.bowers@intel.com>
      Signed-off-by: NJeff Kirsher <jeffrey.t.kirsher@intel.com>
      707636c6
    • J
      i40e: use DECLARE_BITMAP for state fields · 0da36b97
      Jacob Keller 提交于
      Instead of assuming our flags fit within an unsigned long, use
      DECLARE_BITMAP which will ensure that we always allocate enough space.
      Additionally, use __I40E_STATE_SIZE__ markers as the last element of the
      enumeration so that the size of the BITMAP is compile-time assigned
      rather than programmer-time assigned. This ensures that potential future
      flag additions do not actually overrun the array. This is especially
      important as 32bit systems would only have 32bit longs instead of 64bit
      longs as we generally have assumed in the prior code.
      
      This change also removes a dereference of the state fields throughout
      the code, so it does have a bit of code churn. The conversions were
      automated using sed replacements with an alternation
      
        s/&(vsi->back|vsi|pf)->state/\1->state/
        s/&adapter->vsi.state/adapter->vsi.state/
      
      For debugfs, we modify the printing so that we can display chunks of the
      state value on new lines. This ensures that we can print the entire set
      of state values. Additionally, we now print them as 08lx to ensure that
      they display nicely.
      Signed-off-by: NJacob Keller <jacob.e.keller@intel.com>
      Tested-by: NAndrew Bowers <andrewx.bowers@intel.com>
      Signed-off-by: NJeff Kirsher <jeffrey.t.kirsher@intel.com>
      0da36b97
    • J
      i40e: separate PF and VSI state flags · d19cb64b
      Jacob Keller 提交于
      Avoid using the same named flags for both vsi->state and pf->state. This
      makes code review easier, as it is more likely that future authors will
      use the correct state field when checking bits. Previous commits already
      found issues with at least one check, and possibly others may be
      incorrect.
      
      This reduces confusion as it is more clear what each flag represents,
      and which flags are valid for which state field.
      Signed-off-by: NJacob Keller <jacob.e.keller@intel.com>
      Tested-by: NAndrew Bowers <andrewx.bowers@intel.com>
      Signed-off-by: NJeff Kirsher <jeffrey.t.kirsher@intel.com>
      d19cb64b
  13. 20 4月, 2017 2 次提交
  14. 08 4月, 2017 1 次提交
  15. 29 3月, 2017 2 次提交
  16. 15 3月, 2017 1 次提交
  17. 12 2月, 2017 1 次提交
  18. 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
  19. 25 9月, 2016 1 次提交
  20. 20 8月, 2016 2 次提交
  21. 14 5月, 2016 1 次提交
  22. 06 5月, 2016 2 次提交
  23. 28 4月, 2016 1 次提交
  24. 27 4月, 2016 1 次提交
  25. 26 4月, 2016 1 次提交
  26. 18 2月, 2016 1 次提交