1. 06 Apr, 2016 7 commits
  2. 05 Apr, 2016 33 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