1. 06 Apr, 2016 6 commits
    • David S. Miller's avatar
      Merge branch 'vxlan-gpe' · 6f555635
      David S. Miller authored
      Jiri Benc says:
      
      ====================
      vxlan: implement Generic Protocol Extension (GPE)
      
      v3: just rebased on top of the current net-next, no changes
      
      This patchset implements VXLAN-GPE. It follows the same model as the tun/tap
      driver: depending on the chosen mode, the vxlan interface is created either
      as ARPHRD_ETHER (non-GPE) or ARPHRD_NONE (GPE).
      
      Note that the internal fdb control plane cannot be used together with
      VXLAN-GPE and attempt to configure it will be rejected by the driver. In
      fact, COLLECT_METADATA is required to be set for now. This can be relaxed in
      the future by adding support for static PtP configuration; it will be
      backward compatible and won't affect existing users.
      
      The previous version of the patchset supported two GPE modes, L2 and L3. The
      L2 mode (now called "ether mode" in the code) was removed from this version.
      It can be easily added later if there's demand. The L3 mode is now called
      "raw mode" and supports also encapsulated Ethernet headers (via ETH_P_TEB).
      
      The only limitation of not having "ether mode" for GPE is for ip route based
      encapsulation: with such setup, only IP packets can be encapsulated. Meaning
      no Ethernet encapsulation. It seems there's not much use for this, though.
      If it turns out to be useful, we'll add it.
      ====================
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      6f555635
    • Jiri Benc's avatar
      vxlan: implement GPE · e1e5314d
      Jiri Benc authored
      Implement VXLAN-GPE. Only COLLECT_METADATA is supported for now (it is
      possible to support static configuration, too, if there is demand for it).
      
      The GPE header parsing has to be moved before iptunnel_pull_header, as we
      need to know the protocol.
      
      v2: Removed what was called "L2 mode" in v1 of the patchset. Only "L3 mode"
          (now called "raw mode") is added by this patch. This mode does not allow
          Ethernet header to be encapsulated in VXLAN-GPE when using ip route to
          specify the encapsulation, IP header is encapsulated instead. The patch
          does support Ethernet to be encapsulated, though, using ETH_P_TEB in
          skb->protocol. This will be utilized by other COLLECT_METADATA users
          (openvswitch in particular).
      
          If there is ever demand for Ethernet encapsulation with VXLAN-GPE using
          ip route, it's easy to add a new flag switching the interface to
          "Ethernet mode" (called "L2 mode" in v1 of this patchset). For now,
          leave this out, it seems we don't need it.
      
          Disallowed more flag combinations, especially RCO with GPE.
          Added comment explaining that GBP and GPE cannot be set together.
      Signed-off-by: default avatarJiri Benc <jbenc@redhat.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      e1e5314d
    • Jiri Benc's avatar
      ip_tunnel: implement __iptunnel_pull_header · a6d5bbf3
      Jiri Benc authored
      Allow calling of iptunnel_pull_header without special casing ETH_P_TEB inner
      protocol.
      Signed-off-by: default avatarJiri Benc <jbenc@redhat.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      a6d5bbf3
    • Jiri Benc's avatar
      vxlan: move fdb code to common location in vxlan_xmit · 47e5d1b0
      Jiri Benc authored
      Handle VXLAN_F_COLLECT_METADATA before VXLAN_F_PROXY. The latter does not
      make sense with the former, as it needs populated fdb which does not happen
      in metadata mode.
      
      After this cleanup, the fdb code in vxlan_xmit is moved to a common location
      and can be later skipped for VXLAN-GPE which does not necessarily carry
      inner Ethernet header.
      
      v2: changed commit description to not reference L3 mode
      Signed-off-by: default avatarJiri Benc <jbenc@redhat.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      47e5d1b0
    • Jiri Benc's avatar
      vxlan: move Ethernet initialization to a separate function · 0c867c9b
      Jiri Benc authored
      This will allow to initialize vxlan in ARPHRD_NONE mode based on the passed
      rtnl attributes.
      
      v2: renamed "l2mode" to "ether".
      Signed-off-by: default avatarJiri Benc <jbenc@redhat.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      0c867c9b
    • Hariprasad Shenai's avatar
      cxgb4/cxgb4vf: Deprecate module parameter dflt_msg_enable · 8a21ec4e
      Hariprasad Shenai authored
      Message level can be set through ethtool, so deprecate module parameter
      which is used to set the same.
      Signed-off-by: default avatarHariprasad Shenai <hariprasad@chelsio.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      8a21ec4e
  2. 05 Apr, 2016 34 commits
    • Aaron Conole's avatar
      net/core/dev: Warn on a too-short GRO frame · 4da46ceb
      Aaron Conole authored
      When signaling that a GRO frame is ready to be processed, the network stack
      correctly checks length and aborts processing when a frame is less than 14
      bytes. However, such a condition is really indicative of a broken driver,
      and should be loudly signaled, rather than silently dropped as the case is
      today.
      
      Convert the condition to use net_warn_ratelimited() to ensure the stack
      loudly complains about such broken drivers.
      Signed-off-by: default avatarAaron Conole <aconole@bytheb.org>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      4da46ceb
    • Thomas Falcon's avatar
      ibmvnic: enable RX checksum offload · 9be02cdf
      Thomas Falcon authored
      Enable RX Checksum offload feature in the ibmvnic driver.
      Signed-off-by: default avatarThomas Falcon <tlfalcon@linux.vnet.ibm.com>
      Cc: John Allen <jallen@linux.vnet.ibm.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      9be02cdf
    • Thomas Falcon's avatar
      ibmvnic: map L2/L3/L4 header descriptors to firmware · ad7775dc
      Thomas Falcon authored
      Allow the VNIC driver to provide descriptors containing
      L2/L3/L4 headers to firmware.  This feature is needed
      for greater hardware compatibility and enablement of checksum
      and TCP offloading features.
      
      A new function is included for the hypervisor call,
      H_SEND_SUBCRQ_INDIRECT, allowing a DMA-mapped array of SCRQ
      descriptor elements to be sent to the VNIC server.
      
      These additions will help fully enable checksum offloading as
      well as other features as they are included later.
      Signed-off-by: default avatarThomas Falcon <tlfalcon@linux.vnet.ibm.com>
      Cc: John Allen <jallen@linux.vnet.ibm.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      ad7775dc
    • David S. Miller's avatar
      Merge branch 'bcmgenet-cleanups' · 590ddaa4
      David S. Miller authored
      Petri Gynther says:
      
      ====================
      bcmgenet cleanups
      
      Three cleanup patches for bcmgenet.
      ====================
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      590ddaa4
    • Petri Gynther's avatar
      net: bcmgenet: cleanup for dmadesc_set() · 7ee40625
      Petri Gynther authored
      dmadesc_set() is used for setting the Tx buffer DMA address, length,
      and status bits on a Tx ring descriptor when a frame is being Tx'ed.
      
      Always set the Tx buffer DMA address first, before updating the length
      and status bits, i.e. giving the Tx descriptor to the hardware.
      
      The reason this is a cleanup rather than a fix is that the hardware
      won't transmit anything from a Tx ring until the TDMA producer index
      has been incremented. As long as the dmadesc_set() writes complete
      before the TDMA producer index write, life is good.
      Signed-off-by: default avatarPetri Gynther <pgynther@google.com>
      Acked-by: default avatarFlorian Fainelli <f.fainelli@gmail.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      7ee40625
    • Petri Gynther's avatar
      net: bcmgenet: cleanup for bcmgenet_xmit_frag() · 824ba603
      Petri Gynther authored
      Add frag_size = skb_frag_size(frag) and use it when needed.
      Signed-off-by: default avatarPetri Gynther <pgynther@google.com>
      Acked-by: default avatarFlorian Fainelli <f.fainelli@gmail.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      824ba603
    • Petri Gynther's avatar
      net: bcmgenet: cleanup for bcmgenet_xmit() · f5a9ec20
      Petri Gynther authored
      1. Readability: Move nr_frags assignment a few lines down in order
         to bundle index -> ring -> txq calculations together.
      2. Readability: Add parentheses around nr_frags + 1.
      3. Minor fix: Stop the Tx queue and throw the error message only if
         the Tx queue hasn't already been stopped.
      Signed-off-by: default avatarPetri Gynther <pgynther@google.com>
      Acked-by: default avatarFlorian Fainelli <f.fainelli@gmail.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      f5a9ec20
    • David S. Miller's avatar
      Merge branch 'udp-peek' · 66f87790
      David S. Miller authored
      Willem de Bruijn says:
      
      ====================
      udp: support SO_PEEK_OFF
      
      Support peeking at a non-zero offset for UDP sockets. Match the
      existing behavior on Unix datagram sockets.
      
      1/3 makes the sk_peek_offset functions safe to use outside locks
      2/3 removes udp headers before enqueue, to simplify offset arithmetic
      3/3 introduces SO_PEEK_OFFSET support, with Unix socket peek semantics.
      
      Changes
        v1->v2
          - squash patches 3 and 4
      ====================
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      66f87790
    • samanthakumar's avatar
      udp: enable MSG_PEEK at non-zero offset · 627d2d6b
      samanthakumar authored
      Enable peeking at UDP datagrams at the offset specified with socket
      option SOL_SOCKET/SO_PEEK_OFF. Peek at any datagram in the queue, up
      to the end of the given datagram.
      
      Implement the SO_PEEK_OFF semantics introduced in commit ef64a54f
      ("sock: Introduce the SO_PEEK_OFF sock option"). Increase the offset
      on peek, decrease it on regular reads.
      
      When peeking, always checksum the packet immediately, to avoid
      recomputation on subsequent peeks and final read.
      
      The socket lock is not held for the duration of udp_recvmsg, so
      peek and read operations can run concurrently. Only the last store
      to sk_peek_off is preserved.
      Signed-off-by: default avatarSam Kumar <samanthakumar@google.com>
      Signed-off-by: default avatarWillem de Bruijn <willemb@google.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      627d2d6b
    • samanthakumar's avatar
      udp: remove headers from UDP packets before queueing · e6afc8ac
      samanthakumar authored
      Remove UDP transport headers before queueing packets for reception.
      This change simplifies a follow-up patch to add MSG_PEEK support.
      Signed-off-by: default avatarSam Kumar <samanthakumar@google.com>
      Signed-off-by: default avatarWillem de Bruijn <willemb@google.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      e6afc8ac
    • Willem de Bruijn's avatar
      sock: convert sk_peek_offset functions to WRITE_ONCE · b9bb53f3
      Willem de Bruijn authored
      Make the peek offset interface safe to use in lockless environments.
      Use READ_ONCE and WRITE_ONCE to avoid race conditions between testing
      and updating the peek offset.
      Suggested-by: default avatarEric Dumazet <edumazet@google.com>
      Signed-off-by: default avatarWillem de Bruijn <willemb@google.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      b9bb53f3
    • David S. Miller's avatar
      Merge branch '40GbE' of git://git.kernel.org/pub/scm/linux/kernel/git/jkirsher/next-queue · e43d15c8
      David S. Miller authored
      Jeff Kirsher says:
      
      ====================
      40GbE Intel Wired LAN Driver Updates 2016-04-05
      
      This series contains updates to i40e and i40evf only.
      
      Stefan converts dev_close() to ndo_stop() for ethtool offline self test,
      since dev_close() causes IFF_UP to be cleared which will remove the
      interface routes and addresses.
      
      Alex bumps up the size of the transmit data buffer to 12K rather than 8K,
      which provides a gain in throughput and a reduction in overhead for
      putting together the frame.  Fixed an issue in the polling routines where
      we were using bitwise operators to avoid the side effects of the
      logical operators.  Then added support for bulk transmit clean for skbs.
      
      Jesse fixed a sparse issue in the type casting in the transmit code and
      fixed i40e_aq_set_phy_debug() to use i40e_status as a return code.
      
      Catherine cleans up duplicated code.
      
      Shannon fixed the cleaning up of the interrupt handling to clean up the
      IRQs only if we actually got them set up.  Also fixed up the error
      scenarios where we were trying to remove a non-existent timer or
      worktask, which causes the kernel heartburn.
      
      Mitch changes the notification of resets to the reset interrupt handler,
      instead of the actual reset initiation code.  This allows the VFs to get
      properly notified for all resets, including resets initiated by different
      PFs on the same physical device.  Also moved the clearing of VFLR bit
      after reset processing, instead of before which could lead to double
      resets on VF init.  Fixed code comment to match the actual function name.
      ====================
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      e43d15c8
    • David S. Miller's avatar
      Merge branch 'bnxt_en-next' · f1cc8094
      David S. Miller authored
      Michael Chan says:
      
      ====================
      bnxt_en: Updates for net-next.
      
      Update to latest firmware interface, add EEE feature, unsupported SFP+
      module warning, and ethtool -s improvements.
      
      v2: Removed the GEEPROM patch and added more comments to the get_eee patch.
      ====================
      f1cc8094
    • Michael Chan's avatar
      bnxt_en: Improve ethtool .get_settings(). · 29c262fe
      Michael Chan authored
      If autoneg is off, we should always report the speed and duplex settings
      even if it is link down so the user knows the current settings.  The
      unknown speed and duplex should only be used for autoneg when link is
      down.
      Signed-off-by: default avatarMichael Chan <michael.chan@broadcom.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      29c262fe
    • Michael Chan's avatar
      bnxt_en: Check for valid forced speed during ethtool -s. · 9d9cee08
      Michael Chan authored
      Check that the forced speed is a valid speed supported by firmware.
      If not supported, return -EINVAL.
      Signed-off-by: default avatarMichael Chan <michael.chan@broadcom.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      9d9cee08
    • Michael Chan's avatar
      bnxt_en: Add unsupported SFP+ module warnings. · 4bb13abf
      Michael Chan authored
      Add the PORT_CONN_NOT_ALLOWED async event handling logic.  The driver
      will print an appropriate warning to reflect the SFP+ module enforcement
      policy done in the firmware.
      Signed-off-by: default avatarMichael Chan <michael.chan@broadcom.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      4bb13abf
    • Michael Chan's avatar
      bnxt_en: Set async event bits when registering with the firmware. · 25be8623
      Michael Chan authored
      Currently, the driver only sets bit 0 of the async_event_fwd fields.
      To be compatible with the latest spec, we need to set the
      appropriate event bits handled by the driver.  We should be handling
      link change and PF driver unload events, so these 2 bits should be
      set.
      Signed-off-by: default avatarMichael Chan <michael.chan@broadcom.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      25be8623
    • Michael Chan's avatar
      bnxt_en: Add get_eee() and set_eee() ethtool support. · 72b34f04
      Michael Chan authored
      Allow users to get|set EEE parameters.
      
      v2: Added comment for preserving the tx_lpi_timer value in get_eee.
      Signed-off-by: default avatarMichael Chan <michael.chan@broadcom.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      72b34f04
    • Michael Chan's avatar
      bnxt_en: Add EEE setup code. · 939f7f0c
      Michael Chan authored
      1. Add bnxt_hwrm_set_eee() function to setup EEE firmware parameters based
      on the bp->eee settings.
      2. The new function bnxt_eee_config_ok() will check if EEE parameters need
      to be modified due to autoneg changes.
      3. bnxt_hwrm_set_link() has added a new parameter to update EEE.  If the
      parameter is set, it will call bnxt_hwrm_set_eee().
      Signed-off-by: default avatarMichael Chan <michael.chan@broadcom.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      939f7f0c
    • Michael Chan's avatar
      bnxt_en: Add basic EEE support. · 170ce013
      Michael Chan authored
      Get EEE capability and the initial EEE settings from firmware.
      Add "EEE is active | not active" to link up dmesg.
      Signed-off-by: default avatarMichael Chan <michael.chan@broadcom.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      170ce013
    • Michael Chan's avatar
      bnxt_en: Improve flow control autoneg with Firmware 1.2.1 interface. · c9ee9516
      Michael Chan authored
      Make use of the new AUTONEG_PAUSE bit in the new interface to better
      control autoneg flow control settings, independent of RX and TX
      advertisement settings.
      Signed-off-by: default avatarMichael Chan <michael.chan@broadcom.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      c9ee9516
    • Michael Chan's avatar
      bnxt_en: Update to Firmware 1.2.2 spec. · 11f15ed3
      Michael Chan authored
      Use new field names in API structs and stop using deprecated fields
      auto_link_speed and auto_duplex in phy_cfg/phy_qcfg structs.
      
      Update copyright year to 2016.
      Signed-off-by: default avatarMichael Chan <michael.chan@broadcom.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      11f15ed3
    • David S. Miller's avatar
      Merge branch '100GbE' of git://git.kernel.org/pub/scm/linux/kernel/git/jkirsher/next-queue · 04c85bfb
      David S. Miller authored
      Jeff Kirsher says:
      
      ====================
      100GbE Intel Wired LAN Driver Updates 2016-04-05
      
      This series contains updates to fm10k only.
      
      Bruce provides nearly half of the patches in the series, most of which do
      general cleanup of the driver.  These include semantic cleanups,
      checkpatch.pl fixes, update driver to use BIT() kernel macro, use
      BUILD_BUG_ON() where appropriate and use ether_addr_copy() instead of
      memcpy().
      
      Jake provides the remaining patches in the series, starting with a fix
      for a possible NULL pointer deference.  Next delays initialization of the
      service timer and service task until late in probe().  If we do not wait,
      failures in probe do not properly cleanup the service timer or service
      task items which result in a kernel panic.  Added better reporting during
      error conditions.  Fixed another possible kernel panic where we were
      clearing the interrupt scheme before we freed the mailbox IRQ.  Added
      helper functions for setting strings and data for ethtool stats.  Fixed
      comment mis-spelled words.
      
      v2: Dropped patch 3 from the original submission, until a better solution
          can be worked up based on feedback from Joe Perches and David Miller.
      ====================
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      04c85bfb
    • Jacob Keller's avatar
      fm10k: use ethtool_rxfh_indir_default for default redirection table · 0ea7fae4
      Jacob Keller authored
      The fm10k driver used its own code for generating a default indirection
      table on device load, which was not the same as the default generated by
      ethtool when indir_size of 0 is passed to SRXFH. Take advantage of
      ethtool_rxfh_indir_default() and simplify code to write the redirection
      table to reduce some code duplication.
      Signed-off-by: default avatarJacob Keller <jacob.e.keller@intel.com>
      Tested-by: default avatarKrishneil Singh <Krishneil.k.singh@intel.com>
      Signed-off-by: default avatarJeff Kirsher <jeffrey.t.kirsher@intel.com>
      0ea7fae4
    • Jacob Keller's avatar
      fm10k: fix a minor typo in some comments · d8ec92f2
      Jacob Keller authored
      s/funciton/function to resolve a typo, and cleanup grammar on a few
      comments regarding processing the VF mailboxes.
      Signed-off-by: default avatarJacob Keller <jacob.e.keller@intel.com>
      Tested-by: default avatarKrishneil Singh <Krishneil.k.singh@intel.com>
      Signed-off-by: default avatarJeff Kirsher <jeffrey.t.kirsher@intel.com>
      d8ec92f2
    • Jacob Keller's avatar
      fm10k: correctly clean up when init_queueing_scheme fails · 4be37c42
      Jacob Keller authored
      Fix a kernel panic that occurs during surprise removal. Clear the
      interface queue counts upon fm10k_init_msix_capability failure. This
      prevents further code (fm10k_update_stats etc.) from attempting to
      access unallocated queue vector or ring memory.
      
      [  628.692648] BUG: unable to handle kernel NULL pointer dereference at 0000000000000068
      [  628.692805] IP: [<ffffffffa0475caf>] fm10k_update_stats+0x7f/0x2c0 [fm10k]
      [  628.693173] PGD 0
      [  628.693759] Oops: 0000 [#1] SMP
      [  628.699321] CPU: 10 PID: 8164 Comm: kworker/10:0 Tainted: G           OE  ------------   3.10.0-327.el7.x86_64 #1
      [  628.700096] Hardware name: Supermicro X9DAi/X9DAi, BIOS 3.2 05/09/2015
      [  628.700894] Workqueue: pciehp-1 pciehp_power_thread
      [  628.701686] task: ffff88086559c500 ti: ffff8808593c0000 task.ti: ffff8808593c0000
      [  628.702493] RIP: 0010:[<ffffffffa0475caf>]  [<ffffffffa0475caf>] fm10k_update_stats+0x7f/0x2c0 [fm10k]
      [  628.703310] RSP: 0018:ffff8808593c3b00  EFLAGS: 00010282
      [  628.704132] RAX: 0000000000000000 RBX: ffff880860760000 RCX: 0000000000000000
      [  628.704963] RDX: ffff880860760b08 RSI: 0000000000000000 RDI: 0000000000000000
      [  628.705794] RBP: ffff8808593c3b40 R08: 0000000000000000 R09: 0000000000000000
      [  628.706604] R10: 0000000000000000 R11: ffff880860760c40 R12: 0000000000000080
      [  628.707420] R13: ffff8808607608c0 R14: ffff880860779ec0 R15: ffff880860779f40
      [  628.708238] FS:  0000000000000000(0000) GS:ffff88086f000000(0000) knlGS:0000000000000000
      [  628.709071] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
      [  628.709923] CR2: 0000000000000068 CR3: 000000000194a000 CR4: 00000000001407e0
      [  628.710752] DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
      [  628.711596] DR3: 0000000000000000 DR6: 00000000ffff0ff0 DR7: 0000000000000400
      [  628.712438] Stack:
      [  628.713255]  ffff880860764458 ffff8808607608c0 ffff880860760000 ffff880860760000
      [  628.714088]  0000000000000080 ffff8808607608c0 ffff880860779ec0 ffff880860779f40
      [  628.714925]  ffff8808593c3b88 ffffffffa04780c5 ffff880860764458 0000000a8163cb5b
      [  628.715752] Call Trace:
      [  628.716560]  [<ffffffffa04780c5>] fm10k_down+0x155/0x1f0 [fm10k]
      [  628.717367]  [<ffffffffa0479958>] fm10k_close+0x28/0xd0 [fm10k]
      [  628.718184]  [<ffffffff81526365>] __dev_close_many+0x85/0xd0
      [  628.718986]  [<ffffffff815264d8>] dev_close_many+0x98/0x120
      [  628.719764]  [<ffffffff81527ab8>] rollback_registered_many+0xa8/0x230
      [  628.720527]  [<ffffffff81527c80>] rollback_registered+0x40/0x70
      [  628.721294]  [<ffffffff81529198>] unregister_netdevice_queue+0x48/0x80
      [  628.722052]  [<ffffffff815291ec>] unregister_netdev+0x1c/0x30
      [  628.722816]  [<ffffffffa04762b8>] fm10k_remove+0xd8/0xe0 [fm10k]
      [  628.723581]  [<ffffffff81328c7b>] pci_device_remove+0x3b/0xb0
      [  628.724340]  [<ffffffff813f5fbf>] __device_release_driver+0x7f/0xf0
      [  628.725088]  [<ffffffff813f6053>] device_release_driver+0x23/0x30
      [  628.725814]  [<ffffffff81321fe4>] pci_stop_bus_device+0x94/0xa0
      [  628.726535]  [<ffffffff813220d2>] pci_stop_and_remove_bus_device+0x12/0x20
      [  628.727249]  [<ffffffff8133de40>] pciehp_unconfigure_device+0xb0/0x1b0
      [  628.727964]  [<ffffffff8133d822>] pciehp_disable_slot+0x52/0xd0
      [  628.728664]  [<ffffffff8133d98a>] pciehp_power_thread+0xea/0x150
      [  628.729358]  [<ffffffff8109d5fb>] process_one_work+0x17b/0x470
      [  628.730036]  [<ffffffff8109e3cb>] worker_thread+0x11b/0x400
      [  628.730730]  [<ffffffff8109e2b0>] ? rescuer_thread+0x400/0x400
      [  628.731385]  [<ffffffff810a5aef>] kthread+0xcf/0xe0
      [  628.732036]  [<ffffffff810a5a20>] ? kthread_create_on_node+0x140/0x140
      [  628.732674]  [<ffffffff81645858>] ret_from_fork+0x58/0x90
      [  628.733289]  [<ffffffff810a5a20>] ? kthread_create_on_node+0x140/0x140
      [  628.733883] Code: 83 e8 01 48 8d 97 40 02 00 00 45 31 c0 4c 8d 9c c7 48 02 0
      [  628.735202] RIP  [<ffffffffa0475caf>] fm10k_update_stats+0x7f/0x2c0 [fm10k]
      [  628.735732]  RSP <ffff8808593c3b00>
      [  628.736285] CR2: 0000000000000068
      [  628.736846] ---[ end trace 9156088b311aff42 ]---
      Signed-off-by: default avatarJacob Keller <jacob.e.keller@intel.com>
      Tested-by: default avatarKrishneil Singh <Krishneil.k.singh@intel.com>
      Signed-off-by: default avatarJeff Kirsher <jeffrey.t.kirsher@intel.com>
      4be37c42
    • Bruce Allan's avatar
      fm10k: prevent possibly uninitialized variable · c4114e3d
      Bruce Allan authored
      If 'attr_flag < (1 << (2 * FM10K_TEST_MSG_NESTED))' is ever false, err
      will be used uninitialized.
      Signed-off-by: default avatarBruce Allan <bruce.w.allan@intel.com>
      Tested-by: default avatarKrishneil Singh <Krishneil.k.singh@intel.com>
      Signed-off-by: default avatarJeff Kirsher <jeffrey.t.kirsher@intel.com>
      c4114e3d
    • Jacob Keller's avatar
      fm10k: add helper functions to set strings and data for ethtool stats · d2e0721b
      Jacob Keller authored
      Reduce duplicate code and the amount of indentation by adding
      fm10k_add_stat_strings and fm10k_add_ethtool_stats functions which help
      add fm10k_stat structures to the ethtool stats callbacks. This helps
      increase ease of use for future stat additions, and increases code
      readability. Skip handling of the per-queue stats as these will be
      reworked in a following patch.
      Signed-off-by: default avatarJacob Keller <jacob.e.keller@intel.com>
      Tested-by: default avatarKrishneil Singh <Krishneil.k.singh@intel.com>
      Signed-off-by: default avatarJeff Kirsher <jeffrey.t.kirsher@intel.com>
      d2e0721b
    • Jacob Keller's avatar
      fm10k: free MBX IRQ before clearing interrupt scheme · c8ed563b
      Jacob Keller authored
      During fm10k_io_error_detected we were clearing the interrupt scheme
      before we freed the MBX IRQ. This causes a kernel panic because the MBX
      IRQ are assigned after MSI-X initialization. Clearing the interrupt
      scheme results in removing the MSI-X entry table. Fix this by freeing
      the MBX IRQ before we clear the interrupt scheme, as we do elsewhere in
      the driver.
      Signed-off-by: default avatarJacob Keller <jacob.e.keller@intel.com>
      Tested-by: default avatarKrishneil Singh <Krishneil.k.singh@intel.com>
      Signed-off-by: default avatarJeff Kirsher <jeffrey.t.kirsher@intel.com>
      c8ed563b
    • Jacob Keller's avatar
      fm10k: print error message when stop_hw fails · 61e0217e
      Jacob Keller authored
      fm10k_stop_hw_generic calls fm10k_disable_queues_generic, which may
      return an error code indicating that the queues were not stopped within
      the time limit. Notify the user by displaying a message in the kernel
      message ring, in a similar way to how we notify the user when reset_hw
      fails. There isn't much we can do to recover from this error, so
      currently nothing else is done.
      Signed-off-by: default avatarJacob Keller <jacob.e.keller@intel.com>
      Tested-by: default avatarKrishneil Singh <Krishneil.k.singh@intel.com>
      Signed-off-by: default avatarJeff Kirsher <jeffrey.t.kirsher@intel.com>
      61e0217e
    • Jacob Keller's avatar
      fm10k: base queue scheme covered by RSS · b3525696
      Jacob Keller authored
      In fm10k_set_num_queues, we previously assigned the base template. This
      would always be overwritten by either fm10k_set_qos_queues or
      fm10k_set_rss_queues. In either case, we don't need the base values, so
      we can just remove them.
      Signed-off-by: default avatarJacob Keller <jacob.e.keller@intel.com>
      Tested-by: default avatarKrishneil Singh <Krishneil.k.singh@intel.com>
      Signed-off-by: default avatarJeff Kirsher <jeffrey.t.kirsher@intel.com>
      b3525696
    • Jacob Keller's avatar
      fm10k: don't initialize service task until later in probe · e72319bb
      Jacob Keller authored
      Delay initialization of the service timer and service task until late
      probe. If we don't wait, failures in probe do not properly cleanup the
      service timer or service task items, which results in the kernel panic
      below, potentially freezing the whole system. In addition, ensure that
      the SERVICE_DISABLE bit is set before we request the MBX IRQ since the
      MBX interrupt attempts to schedule the service task otherwise. This
      prevents a similar trace from occurring after this change.
      
      We didn't notice this issue before because probe almost always completes
      successfully. I discovered it due to a mis-ordered mailbox handler
      array, which resulted in the following failure when requesting mailbox
      interrupt.
      
      [  555.325619] ------------[ cut here ]------------
      [  555.325628] WARNING: CPU: 0 PID: 4941 at lib/list_debug.c:33 __list_add+0xa0/0xd0()
      [  555.325631] list_add corruption. prev->next should be next (ffffffff81f46648), but was           (null). (prev=ffff8807fad5d0e8).
      <snip>
      [  555.325722] CPU: 0 PID: 4941 Comm: insmod Tainted: G           OE   4.0.4-303.fc22.x86_64 #1
      [  555.325725] Hardware name: Intel Corporation S2600CO/S2600CO, BIOS SE5C600.86B.02.03.8x23.060520140825 06/05/2014
      [  555.325727]  0000000000000000 00000000b4f161b3 ffff88081a21f8e8 ffffffff81783124
      [  555.325734]  0000000000000000 ffff88081a21f940 ffff88081a21f928 ffffffff8109c66a
      [  555.325740]  0000000064000000 ffff8807fad5d0e8 ffff8807fad5d0e8 ffffffff81f46648
      [  555.325746] Call Trace:
      [  555.325752]  [<ffffffff81783124>] dump_stack+0x45/0x57
      [  555.325757]  [<ffffffff8109c66a>] warn_slowpath_common+0x8a/0xc0
      [  555.325759]  [<ffffffff8109c6f5>] warn_slowpath_fmt+0x55/0x70
      [  555.325763]  [<ffffffff813ba270>] __list_add+0xa0/0xd0
      [  555.325768]  [<ffffffff81102d1d>] __internal_add_timer+0x9d/0x110
      [  555.325771]  [<ffffffff81102dbf>] internal_add_timer+0x2f/0xc0
      [  555.325774]  [<ffffffff81104e5a>] mod_timer+0x12a/0x230
      [  555.325782]  [<ffffffffa03d54ca>] fm10k_probe+0x69a/0xc80 [fm10k]
      [  555.325787]  [<ffffffff813e8355>] local_pci_probe+0x45/0xa0
      [  555.325791]  [<ffffffff8129cf42>] ? sysfs_do_create_link_sd.isra.2+0x72/0xc0
      [  555.325794]  [<ffffffff813e96b9>] pci_device_probe+0xf9/0x150
      [  555.325799]  [<ffffffff814d7e73>] driver_probe_device+0xa3/0x400
      [  555.325802]  [<ffffffff814d82ab>] __driver_attach+0x9b/0xa0
      [  555.325805]  [<ffffffff814d8210>] ? __device_attach+0x40/0x40
      [  555.325808]  [<ffffffff814d5bd3>] bus_for_each_dev+0x73/0xc0
      [  555.325811]  [<ffffffff814d78ce>] driver_attach+0x1e/0x20
      [  555.325815]  [<ffffffff814d7480>] bus_add_driver+0x180/0x250
      [  555.325819]  [<ffffffffa03b2000>] ? 0xffffffffa03b2000
      [  555.325823]  [<ffffffff814d8aa4>] driver_register+0x64/0xf0
      [  555.325826]  [<ffffffff813e7bec>] __pci_register_driver+0x4c/0x50
      [  555.325832]  [<ffffffffa03d6ca3>] fm10k_register_pci_driver+0x23/0x30 [fm10k]
      [  555.325838]  [<ffffffffa03b2080>] fm10k_init_module+0x80/0x1000 [fm10k]
      [  555.325843]  [<ffffffff81002128>] do_one_initcall+0xb8/0x200
      [  555.325848]  [<ffffffff811e10d2>] ? __vunmap+0xa2/0x100
      [  555.325852]  [<ffffffff811fe239>] ? kmem_cache_alloc_trace+0x1b9/0x240
      [  555.325855]  [<ffffffff8178230e>] ? do_init_module+0x28/0x1cb
      [  555.325858]  [<ffffffff81782346>] do_init_module+0x60/0x1cb
      [  555.325862]  [<ffffffff8112168e>] load_module+0x205e/0x26b0
      [  555.325866]  [<ffffffff8111d110>] ? store_uevent+0x70/0x70
      [  555.325870]  [<ffffffff812234b0>] ? kernel_read+0x50/0x80
      [  555.325873]  [<ffffffff81121f3e>] SyS_finit_module+0xbe/0xf0
      [  555.325878]  [<ffffffff81789749>] system_call_fastpath+0x12/0x17
      [  555.325880] ---[ end trace 9e0f58d071eafd2a ]---
      Signed-off-by: default avatarJacob Keller <jacob.e.keller@intel.com>
      Tested-by: default avatarKrishneil Singh <Krishneil.k.singh@intel.com>
      Signed-off-by: default avatarJeff Kirsher <jeffrey.t.kirsher@intel.com>
      e72319bb
    • Jacob Keller's avatar
      fm10k: prevent null pointer dereference of msix_entries table · de66c610
      Jacob Keller authored
      According to the C standard dereferencing a variable before it is
      checked invokes undefined behavior, and thus compilers are free to
      assume the check for NULL isn't necessary. Prevent this by re-ordering
      the NULL check of msix_entries in fm10k_free_mbx_irq.
      Signed-off-by: default avatarJacob Keller <jacob.e.keller@intel.com>
      Tested-by: default avatarKrishneil Singh <Krishneil.k.singh@intel.com>
      Signed-off-by: default avatarJeff Kirsher <jeffrey.t.kirsher@intel.com>
      de66c610
    • Bruce Allan's avatar
      fm10k: use ether_addr_copy to copy MAC address · 11c49f79
      Bruce Allan authored
      Cleanup the remaining instances of using memcpy() instead of the preferred
      ether_addr_copy().
      Signed-off-by: default avatarBruce Allan <bruce.w.allan@intel.com>
      Tested-by: default avatarKrishneil Singh <Krishneil.k.singh@intel.com>
      Signed-off-by: default avatarJeff Kirsher <jeffrey.t.kirsher@intel.com>
      11c49f79