1. 29 10月, 2016 3 次提交
    • L
      i40e: fix confusing dmesg info for ethtool -L option · 12815057
      Lihong Yang 提交于
      Ethtool -L option with the combined parameter is for changing the number of
      multi-purpose channels of the specified network device. The pre-set maximum
      for the combined channels is cpu dependent. Currently, for an i40e device,
      when the user sets a value between 64 and the maximum that the cpu can
      support for the combined parameter, the i40e driver displays the confusing
      info in dmesg to only show 64 as the RSS count regardless of what the
      accepted user input is as long as it is larger than 64.
      
      This patch fixes the message in the i40e driver when the user uses
      ethtool -L to change the number of the combined channels to consistently
      display the user requested value if it is valid and accepted by ethtool.
      
      Change-ID: Ia80a68bc844b779a49e0f76e7d3dcc915032d9af
      Signed-off-by: NLihong Yang <lihong.yang@intel.com>
      Tested-by: NAndrew Bowers <andrewx.bowers@intel.com>
      Signed-off-by: NJeff Kirsher <jeffrey.t.kirsher@intel.com>
      12815057
    • B
    • 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. 18 10月, 2016 1 次提交
    • J
      ethernet/intel: use core min/max MTU checking · 91c527a5
      Jarod Wilson 提交于
      e100: min_mtu 68, max_mtu 1500
      - remove e100_change_mtu entirely, is identical to old eth_change_mtu,
        and no longer serves a purpose. No need to set min_mtu or max_mtu
        explicitly, as ether_setup() will already set them to 68 and 1500.
      
      e1000: min_mtu 46, max_mtu 16110
      
      e1000e: min_mtu 68, max_mtu varies based on adapter
      
      fm10k: min_mtu 68, max_mtu 15342
      - remove fm10k_change_mtu entirely, does nothing now
      
      i40e: min_mtu 68, max_mtu 9706
      
      i40evf: min_mtu 68, max_mtu 9706
      
      igb: min_mtu 68, max_mtu 9216
      - There are two different "max" frame sizes claimed and both checked in
        the driver, the larger value wasn't relevant though, so I've set max_mtu
        to the smaller of the two values here to retain identical behavior.
      
      igbvf: min_mtu 68, max_mtu 9216
      - Same issue as igb duplicated
      
      ixgb: min_mtu 68, max_mtu 16114
      - Also remove pointless old == new check, as that's done in dev_set_mtu
      
      ixgbe: min_mtu 68, max_mtu 9710
      
      ixgbevf: min_mtu 68, max_mtu dependent on hardware/firmware
      - Some hw can only handle up to max_mtu 1504 on a vf, others 9710
      
      CC: netdev@vger.kernel.org
      CC: intel-wired-lan@lists.osuosl.org
      CC: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
      Signed-off-by: NJarod Wilson <jarod@redhat.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      91c527a5
  3. 04 10月, 2016 4 次提交
  4. 25 9月, 2016 7 次提交
  5. 23 9月, 2016 2 次提交
  6. 02 9月, 2016 1 次提交
  7. 26 8月, 2016 1 次提交
  8. 20 8月, 2016 4 次提交
    • J
      i40e: use alloc_workqueue instead of create_singlethread_workqueue · 6992a6c9
      Jacob Keller 提交于
      Replace calls to create_singlethread_workqueue instead with alloc_workqueue
      as is style with other Intel drivers. This provides more control over
      workqueue creation, and allows explicit setting of the desired mode of
      operation. It also makes it more obvious that driver name constant is
      passed to a format "%s".
      
      Change-ID: I6192b44caf5140336cd54c5b350d51c73b541fdb
      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>
      6992a6c9
    • J
      i40e: use configured RSS key and lookup table in i40e_vsi_config_rss · 552b9962
      Jacob Keller 提交于
      A previous refactor added support to store user configuration for VSIs,
      so that extra VSIs such as for VMDq can use this information when
      configuring. Unfortunately the i40e_vsi_config_rss function was missed
      in this refactor, and the values were being ignored. Fix this by
      checking for the fields and using those instead of always using the
      default values.
      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>
      552b9962
    • J
      i40e: fix broken i40e_config_rss_aq function · 776b2e15
      Jacob Keller 提交于
      X722 hardware requires using the admin queue to configure RSS. This
      function was previously re-written in commit e69ff813 ("i40e: rework
      the functions to configure RSS with similar parameters").
      However, the previous refactor did not work correctly for a few reasons
      
      (a) it does not check whether seed is NULL before using it, resulting in
      a NULL pointer dereference
      
      [  402.954721] BUG: unable to handle kernel NULL pointer dereference at           (null)
      [  402.955568] IP: [<ffffffffa0090ccf>] i40e_config_rss_aq.constprop.65+0x2f/0x1c0 [i40e]
      [  402.956402] PGD ad610067 PUD accc0067 PMD 0
      [  402.957235] Oops: 0000 [#1] SMP
      [  402.958064] Modules linked in: ip6t_rpfilter ip6t_REJECT nf_reject_ipv6 xt_conntrack ip_set nfnetlink ebtable_filter ebtable_
      broute bridge stp llc ebtable_nat ebtables ip6table_mangle ip6table_raw ip6table_nat nf_conntrack_ipv6 nf_defrag_ipv6 nf_nat_ipv
      6 ip6table_security ip6table_filter ip6_tables iptable_mangle iptable_raw iptable_nat nf_conntrack_ipv4_ nf_defrag_ipv4_ nf_nat_ip
      v4_ nf_nat nf_conntrack iptable_security intel_rapl i86_kg_temp_thermal coretemp kvm_intel kvm irqbypass crct10dif_clMl crc32_
      pclMl ghash_clMlni_intel iTCO_wdt iTCO_vendor_support shpchp sb_edac dcdbas pcspkr joydev ipmi_devintf wmi edac_core ipmi_ssif
       acpi_ad acpi_ower_meter ipmi_si ipmi_msghandler mei_me nfsd lpc_ich mei ioatdma tpm_tis auth_rpcgss tpm nfs_acl lockd grace s
      unrpc ifs nngag200 i2c_algo_bit drm_kms_helper ttm drm iigbe bnx2x i40e dca mdio ptp pps_core libcrc32c fjes crc32c_intel
      [  402.965563] CPU: 22 PID: 2461 Conm: ethtool Not tainted 4.6.0-rc7_1.2-ABNidQ+ #20
      [  402.966719] Hardware name: Dell Inc. PowerEdge R720/0C4Y3R, BIOS 2.5.2 01/28/2015
      [  402.967862] task: ffff880219b51dc0 ti: ffff8800b3408000 task.ti: ffff8800b3408000
      [  402.969046] RIP: 0010:[<ffffffffa0090ccf>]  [<ffffffffa0090ccf>] i40e_config_rss_aq.constprop.65+0x2f/0x1c0 [i40e]
      [  402.970339] RSP: 0018:ffff8800b340ba90  EFLAGS: 00010246
      [  402.971616] RAX: 0000000000000000 RBX: ffff88042ec14000 RCX: 0000000000000200
      [  402.972961] RDX: ffff880428eb9200 RSI: 0000000000000000 RDI: ffff88042ec14000
      [  402.974312] RBP: ffff8800b340baf8 R08: ffff880237ada8f0 R09: ffff880428eb9200
      [  402.975709] R10: ffff880428eb9200 R11: 0000000000000000 R12: ffff88042ec2e000
      [  402.977104] R13: ffff88042ec2e000 R14: ffff88042ec14000 R15: ffff88022ea00800
      [  402.978541] FS:  00007f84fd054700(0000) GS:ffff880237ac0000(0000) knlGS:0000000000000000
      [  402.980003] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
      [  402.981508] CR2: 0000000000000000 CR3: 000000003289e000 CR4: 00000000000406e0
      [  402.983028] Stack:
      [  402.984578]  0000000002000200 0000000000000000 ffff88023ffeda68 ffff88023ffef000
      [  402.986187]  0000000000000268 ffff8800b340bbf8 ffff88023ffedd80 0000000088ce4f1d
      [  402.987844]  ffff88042ec14000 ffff88022ea00800 ffff88042ec2e000 ffff88042ec14000
      [  402.989509] Call Trace:
      [  402.991200]  [<ffffffffa009636f>] i40e_config_rss+0x11f/0x1c0 [i40e]
      [  402.992924]  [<ffffffffa00a1ae0>] i40e_set_rifh+0ic0/0x130 [i40e]
      [  402.994684]  [<ffffffff816d54b7>] ethtool_set_rifh+0x1f7/0x300
      [  402.996446]  [<ffffffff8136d02b>] ? cred_has_capability+0io6b/0x100
      [  402.998203]  [<ffffffff8136d102>] ? selinux_capable+0x12/0x20
      [  402.999968]  [<ffffffff8136277b>] ? security_capable+0x4b/0x70
      [  403.001707]  [<ffffffff816d6da3>] dev_ethtool+0x1423/0x2290
      [  403.003461]  [<ffffffff816eab41>] dev_ioctl+0x191/0io630
      [  403.005186]  [<ffffffff811cf80a>] ? lru_cache_add+0x3a/0i80
      [  403.006942]  [<ffffffff817f2a8e>] ? _raw_spin_unlock+0ie/0x20
      [  403.008691]  [<ffffffff816adb95>] sock_do_ioctl+0x45/0i50
      [  403.010421]  [<ffffffff816ae229>] sock_ioctl+0x209/0x2d0
      [  403.012173]  [<ffffffff81262194>] do_vfs_ioctl+0u4/0io6c0
      [  403.013911]  [<ffffffff81262829>] SyS_ioctl+0x79/0x90
      [  403.015710]  [<ffffffff817f2e72>] entry_SYSCALL_64_fastpath+0x1a/0u4
      [  403.017500] Code: 90 55 48 89 e5 41 57 41 56 41 55 41 54 53 48 89 fb 48 83 ec 40 4c 8b a7 e0 05 00 00 65 48 8b 04 25 28 00 00 00 48 89 45 d0 31 c0 <48> 8b 06 41 0f b7 bc 24 f2 0f 00 00 48 89 45 9c 48 8b 46 08 48
      [  403.021454] RIP  [<ffffffffa0090ccf>] i40e_config_rss_aq.constprop.65+0x2f/0x1c0 [i40e]
      [  403.023395]  RSP <ffff8800b340ba90>
      [  403.025271] CR2: 0000000000000000
      [  403.027169] ---[ end trace 64561b528cf61cf0 ]---
      
      (b) it does not even bother to use the passed in *lut parameter which
      defines the requested lookup table. Instead it uses its own round robin
      table.
      
      Fix these issues by re-writing it to be similar to i40e_config_rss_reg
      and i40e_get_rss_aq.
      
      Fixes: e69ff813 ("i40e: rework the functions to configure RSS with similar parameters", 2015-10-21)
      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>
      776b2e15
    • J
      i40e: move i40e_vsi_config_rss below i40e_get_rss_aq · 0582b964
      Jacob Keller 提交于
      Move this function below the two functions related to configuring RSS
      via the admin queue. This helps co-locate the two functions, and made it
      easier to spot a bug in the first i40e_config_rss_aq function as
      compared to the i40e_get_rss_aq function.
      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>
      0582b964
  9. 19 8月, 2016 4 次提交
  10. 17 8月, 2016 1 次提交
    • D
      i40e: check for and deal with non-contiguous TCs · fbfe12c6
      Dave Ertman 提交于
      The i40e driver was causing a kernel panic when
      non-contiguous Traffic Classes, or Traffic Classes not
      starting with TC0, were configured on a link partner switch.
      i40e does not support non-contiguous TCs.
      
      To fix this, the patch changes the logic when determining
      the total number of TCs enabled.  Before, this would use the
      highest TC number enabled and assume that all TCs below it were
      also enabled.  Now, we create a bitmask of enabled TCs and scan
      it to determine not only the number of TCs, but also if the set
      of enabled TCs starts at zero and is contiguous.  If not, then
      DCB is disabled by only returning one TC.
      Signed-off-by: NDave Ertman <david.m.ertman@intel.com>
      Tested-by: NAndrew Bowers <andrewx.bowers@intel.com>
      Signed-off-by: NJeff Kirsher <jeffrey.t.kirsher@intel.com>
      fbfe12c6
  11. 22 7月, 2016 5 次提交
  12. 15 7月, 2016 2 次提交
    • G
      i40e: use valid online CPU on q_vector initialization · 7f6c5539
      Guilherme G. Piccoli 提交于
      Currently, the q_vector initialization routine sets the affinity_mask
      of a q_vector based on v_idx value. Meaning a loop iterates on v_idx,
      which is an incremental value, and the cpumask is created based on
      this value.
      
      This is a problem in systems with multiple logical CPUs per core (like in
      SMT scenarios). If we disable some logical CPUs, by turning SMT off for
      example, we will end up with a sparse cpu_online_mask, i.e., only the first
      CPU in a core is online, and incremental filling in q_vector cpumask might
      lead to multiple offline CPUs being assigned to q_vectors.
      
      Example: if we have a system with 8 cores each one containing 8 logical
      CPUs (SMT == 8 in this case), we have 64 CPUs in total. But if SMT is
      disabled, only the 1st CPU in each core remains online, so the
      cpu_online_mask in this case would have only 8 bits set, in a sparse way.
      
      In general case, when SMT is off the cpu_online_mask has only C bits set:
      0, 1*N, 2*N, ..., C*(N-1)  where
      C == # of cores;
      N == # of logical CPUs per core.
      In our example, only bits 0, 8, 16, 24, 32, 40, 48, 56 would be set.
      
      This patch changes the way q_vector's affinity_mask is created: it iterates
      on v_idx, but consumes the CPU index from the cpu_online_mask instead of
      just using the v_idx incremental value.
      
      No functional changes were introduced.
      Signed-off-by: NGuilherme G Piccoli <gpiccoli@linux.vnet.ibm.com>
      Tested-by: NAndrew Bowers <andrewx.bowers@intel.com>
      Signed-off-by: NJeff Kirsher <jeffrey.t.kirsher@intel.com>
      7f6c5539
    • K
      i40e: enable VSI broadcast promiscuous mode instead of adding broadcast filter · f6bd0962
      Kiran Patil 提交于
      This patch sets VSI broadcast promiscuous mode during VSI add sequence
      and prevents adding MAC filter if specified MAC address is broadcast.
      
      Change-ID: Ia62251fca095bc449d0497fc44bec3a5a0136773
      Signed-off-by: NKiran Patil <kiran.patil@intel.com>
      Tested-by: NAndrew Bowers <andrewx.bowers@intel.com>
      Signed-off-by: NJeff Kirsher <jeffrey.t.kirsher@intel.com>
      f6bd0962
  13. 28 6月, 2016 5 次提交