1. 25 Jan, 2018 10 commits
  2. 24 Jan, 2018 30 commits
    • David S. Miller's avatar
      Merge branch '100GbE' of git://git.kernel.org/pub/scm/linux/kernel/git/jkirsher/next-queue · be1b6e8b
      David S. Miller authored
      Jeff Kirsher says:
      
      ====================
      100GbE Intel Wired LAN Driver Updates 2018-01-24
      
      This series contains updates to fm10k only.
      
      Alex fixes MACVLAN offload for fm10k, where we were not seeing unicast
      packets being received because we did not correctly configure the
      default VLAN ID for the port and defaulting to 0.
      
      Jake cleans up unnecessary parenthesis in a couple of "if" statements.
      Fixed the driver to stop adding VLAN 0 into the VLAN table, since it
      would cause the VLAN table to be inconsistent between the PF and VF.
      Also fixed an issue where we were assuming that VLAN 1 is enabled when
      the default VLAN ID is not set, so resolve by not requesting any filters
      for the default_vid if it has not yet been assigned.
      
      Ngai fixes an issue which was generating a dmesg regarding unbale to
      kill a particular VLAN ID for the device.  This is due to
      ndo_vlan_rx_kill_vid() exits with an error and the handler for this ndo
      is fm10k_update_vid() which exits prematurely under PF VLAN management.
      So to resolve, we must check the VLAN update action type before exiting
      fm10k_update_vid(), and act appropriately based on the action type.
      Also corrected code comment typos.
      ====================
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      be1b6e8b
    • Ngai-Mint Kwan's avatar
      fm10k: clarify action when updating the VLAN table · e0752a68
      Ngai-Mint Kwan authored
      Clarify the comment for when entering promiscuous mode that we update
      the VLAN table. Add a comment distinguishing the case where we're
      exiting promiscuous mode and need to clear the entire VLAN table.
      Signed-off-by: default avatarNgai-Mint Kwan <ngai-mint.kwan@intel.com>
      Signed-off-by: default avatarJacob Keller <jacob.e.keller@gmail.com>
      Tested-by: default avatarKrishneil Singh <krishneil.k.singh@intel.com>
      Signed-off-by: default avatarJeff Kirsher <jeffrey.t.kirsher@intel.com>
      e0752a68
    • Ngai-Mint Kwan's avatar
    • Jacob Keller's avatar
      fm10k: don't assume VLAN 1 is enabled · 74d2950c
      Jacob Keller authored
      Since commit 856dfd69e84f ("fm10k: Fix multicast mode synch issues",
      2016-03-03) we've incorrectly assumed that VLAN 1 is enabled when the
      default VID is not set.
      
      This occurs because we check the default_vid and if it's zero, start
      several loops over the active_vlans bitmask at 1, instead of checking to
      ensure that that bit is active.
      
      This happened because of commit d9ff3ee8efe9 ("fm10k: Add support for
      VLAN 0 w/o default VLAN", 2014-08-07) which mistakenly assumed that we
      should send requests for MAC and VLAN filters with VLAN 0 when the
      default_vid isn't set.
      
      However, the switch generally considers this an invalid configuration,
      so the only time we'd have a default_vid of 0 is when the switch is
      down.
      
      Instead, lets just not request any filters for the default_vid if it's
      not yet been assigned.
      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>
      74d2950c
    • Jacob Keller's avatar
      fm10k: stop adding VLAN 0 to the VLAN table · 8c2c5039
      Jacob Keller authored
      Currently, when the driver loads, it sends a request to add VLAN 0 to the
      VLAN table. For the PF, this is honored, and VLAN 0 is indeed set. For
      the VF, this request is silently converted into a request for the
      default VLAN as defined by either the switch vid or the PF vid.
      
      This results in the odd behavior that the VLAN table doesn't appear
      consistent between the PF and the VF.
      
      Furthermore, setting a MAC filter with VLAN 0 is generally considered an
      invalid configuration by the switch, and since commit 856dfd69e84f
      ("fm10k: Fix multicast mode synch issues", 2016-03-03) we've had code
      which prevents us from ever sending such a request.
      
      Since there's not really a good reason to keep VLAN 0 in the VLAN table,
      stop requesting it in fm10k_restore_rx_state().
      
      This might seem to indicate that we would no longer properly configure
      the MAC and VLAN tables for the default vid. However, due to the way
      that fm10k_find_next_vlan() behaves, it will always return the
      default_vid as enabled.
      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>
      8c2c5039
    • Ngai-Mint Kwan's avatar
      fm10k: fix "failed to kill vid" message for VF · cf315ea5
      Ngai-Mint Kwan authored
      When a VF is under PF VLAN assignment:
      
      ip link set <pf> vf <#> vlan <vid>
      
      This will remove all previous entries in the VLAN table including those
      generated by VLAN interfaces created on the VF. The issue arises when
      the VF is under PF VLAN assignment and one or more of these VLAN
      interfaces of the VF are deleted. When deleting these VLAN interfaces,
      the following message will be generated in "dmesg":
      
      failed to kill vid 0081/<vid> for device <vf>
      
      This is due to the fact that "ndo_vlan_rx_kill_vid" exits with an error.
      The handler for this ndo is "fm10k_update_vid". Any calls to this
      function while under PF VLAN management will exit prematurely and, thus,
      it will generate the failure message.
      
      Additionally, since "fm10k_update_vid" exits prematurely, none of the
      VLAN update is performed. So, even though the actual VLAN interfaces of
      the VF will be deleted, the active_vlans bitmask is not cleared. When
      the VF is no longer under PF VLAN assignment, the driver mistakenly
      restores the previous entries of the VLAN table based on an
      unsynchronized list of active VLANs.
      
      The solution to this issue involves checking the VLAN update action type
      before exiting "fm10k_update_vid". If the VLAN update action type is to
      "add", this action will not be permitted while the VF is under PF VLAN
      assignment and the VLAN update is abandoned like before.
      
      However, if the VLAN update action type is to "kill", then we need to
      also clear the active_vlans bitmask. However, we don't need to actually
      queue any messages to the PF, because the MAC and VLAN tables have
      already been cleared, and the PF would silently ignore these requests
      anyways.
      Signed-off-by: default avatarNgai-Mint Kwan <ngai-mint.kwan@intel.com>
      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>
      cf315ea5
    • Jacob Keller's avatar
      fm10k: cleanup unnecessary parenthesis in fm10k_iov.c · c8eeacb3
      Jacob Keller authored
      This fixes a few warnings found by checkpatch.pl --strict
      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>
      c8eeacb3
    • Wei Yongjun's avatar
      cxgb4: make symbol pedits static · 1d174e95
      Wei Yongjun authored
      Fixes the following sparse warning:
      
      drivers/net/ethernet/chelsio/cxgb4/cxgb4_tc_flower.c:46:27: warning:
       symbol 'pedits' was not declared. Should it be static?
      
      Fixes: 27ece1f3 ("cxgb4: add tc flower support for ETH-DMAC rewrite")
      Signed-off-by: default avatarWei Yongjun <weiyongjun1@huawei.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      1d174e95
    • William Tu's avatar
      net: erspan: fix use-after-free · b423d13c
      William Tu authored
      When building the erspan header for either v1 or v2, the eth_hdr()
      does not point to the right inner packet's eth_hdr,
      causing kasan report use-after-free and slab-out-of-bouds read.
      
      The patch fixes the following syzkaller issues:
      [1] BUG: KASAN: slab-out-of-bounds in erspan_xmit+0x22d4/0x2430 net/ipv4/ip_gre.c:735
      [2] BUG: KASAN: slab-out-of-bounds in erspan_build_header+0x3bf/0x3d0 net/ipv4/ip_gre.c:698
      [3] BUG: KASAN: use-after-free in erspan_xmit+0x22d4/0x2430 net/ipv4/ip_gre.c:735
      [4] BUG: KASAN: use-after-free in erspan_build_header+0x3bf/0x3d0 net/ipv4/ip_gre.c:698
      
      [2] CPU: 0 PID: 3654 Comm: syzkaller377964 Not tainted 4.15.0-rc9+ #185
      Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 01/01/2011
      Call Trace:
       __dump_stack lib/dump_stack.c:17 [inline]
       dump_stack+0x194/0x257 lib/dump_stack.c:53
       print_address_description+0x73/0x250 mm/kasan/report.c:252
       kasan_report_error mm/kasan/report.c:351 [inline]
       kasan_report+0x25b/0x340 mm/kasan/report.c:409
       __asan_report_load_n_noabort+0xf/0x20 mm/kasan/report.c:440
       erspan_build_header+0x3bf/0x3d0 net/ipv4/ip_gre.c:698
       erspan_xmit+0x3b8/0x13b0 net/ipv4/ip_gre.c:740
       __netdev_start_xmit include/linux/netdevice.h:4042 [inline]
       netdev_start_xmit include/linux/netdevice.h:4051 [inline]
       packet_direct_xmit+0x315/0x6b0 net/packet/af_packet.c:266
       packet_snd net/packet/af_packet.c:2943 [inline]
       packet_sendmsg+0x3aed/0x60b0 net/packet/af_packet.c:2968
       sock_sendmsg_nosec net/socket.c:638 [inline]
       sock_sendmsg+0xca/0x110 net/socket.c:648
       SYSC_sendto+0x361/0x5c0 net/socket.c:1729
       SyS_sendto+0x40/0x50 net/socket.c:1697
       do_syscall_32_irqs_on arch/x86/entry/common.c:327 [inline]
       do_fast_syscall_32+0x3ee/0xf9d arch/x86/entry/common.c:389
       entry_SYSENTER_compat+0x54/0x63 arch/x86/entry/entry_64_compat.S:129
      RIP: 0023:0xf7fcfc79
      RSP: 002b:00000000ffc6976c EFLAGS: 00000286 ORIG_RAX: 0000000000000171
      RAX: ffffffffffffffda RBX: 0000000000000004 RCX: 0000000020011000
      RDX: 0000000000000000 RSI: 0000000000000000 RDI: 0000000020008000
      RBP: 000000000000001c R08: 0000000000000000 R09: 0000000000000000
      R10: 0000000000000000 R11: 0000000000000000 R12: 0000000000000000
      R13: 0000000000000000 R14: 0000000000000000 R15: 0000000000000000
      
      Fixes: f551c91d ("net: erspan: introduce erspan v2 for ip_gre")
      Fixes: 84e54fe0 ("gre: introduce native tunnel support for ERSPAN")
      Reported-by: syzbot+9723f2d288e49b492cf0@syzkaller.appspotmail.com
      Reported-by: syzbot+f0ddeb2b032a8e1d9098@syzkaller.appspotmail.com
      Reported-by: syzbot+f14b3703cd8d7670203f@syzkaller.appspotmail.com
      Reported-by: syzbot+eefa384efad8d7997f20@syzkaller.appspotmail.com
      Signed-off-by: default avatarWilliam Tu <u9012063@gmail.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      b423d13c
    • Alexander Duyck's avatar
      fm10k: Fix configuration for macvlan offload · 85062f85
      Alexander Duyck authored
      The fm10k driver didn't work correctly when macvlan offload was enabled.
      Specifically what would occur is that we would see no unicast packets being
      received. This was traced down to us not correctly configuring the default
      VLAN ID for the port and defaulting to 0.
      
      To correct this we either use the default ID provided by the switch or
      simply use 1. With that we are able to pass and receive traffic without any
      issues.
      
      In addition we were not repopulating the filter table following a reset. To
      correct that I have added a bit of code to fm10k_restore_rx_state that will
      repopulate the Rx filter configuration for the macvlan interfaces.
      Signed-off-by: default avatarAlexander Duyck <alexander.h.duyck@intel.com>
      Tested-by: default avatarKrishneil Singh <krishneil.k.singh@intel.com>
      Signed-off-by: default avatarJeff Kirsher <jeffrey.t.kirsher@intel.com>
      85062f85
    • Wang Dongsheng's avatar
      net: qcom/emac: extend DMA mask to 46bits · df262dbd
      Wang Dongsheng authored
      Bit TPD3[31] is used as a timestamp bit if PTP is enabled, but
      it's used as an address bit if PTP is disabled.  Since PTP isn't
      supported by the driver, we can extend the DMA address to 46 bits.
      Signed-off-by: default avatarWang Dongsheng <dongsheng.wang@hxt-semitech.com>
      Acked-by: default avatarTimur Tabi <timur@codeaurora.org>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      df262dbd
    • Thomas Winter's avatar
      ip_tunnel: Use mark in skb by default · 5c38bd1b
      Thomas Winter authored
      This allows marks set by connmark in iptables
      to be used for route lookups.
      Signed-off-by: default avatarThomas Winter <thomas.winter@alliedtelesis.co.nz>
      Cc: "David S. Miller" <davem@davemloft.net>
      Cc: Alexey Kuznetsov <kuznet@ms2.inr.ac.ru>
      Cc: Hideaki YOSHIFUJI <yoshfuji@linux-ipv6.org>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      5c38bd1b
    • Niklas Cassel's avatar
      net: stmmac: do not use a bitwise AND operator with a bool operand · d8f8b954
      Niklas Cassel authored
      Doing a bitwise AND between a bool and an int is generally not a good idea.
      The bool will be promoted to an int with value 0 or 1,
      the int is generally regarded as true with a non-zero value,
      thus ANDing them has the potential to yield an undesired result.
      
      This commit fixes the following smatch warnings:
      
      drivers/net/ethernet/stmicro/stmmac/enh_desc.c:344 enh_desc_prepare_tx_desc() warn: maybe use && instead of &
      drivers/net/ethernet/stmicro/stmmac/dwmac4_descs.c:337 dwmac4_rd_prepare_tx_desc() warn: maybe use && instead of &
      drivers/net/ethernet/stmicro/stmmac/dwmac4_descs.c:380 dwmac4_rd_prepare_tso_tx_desc() warn: maybe use && instead of &
      Signed-off-by: default avatarNiklas Cassel <niklas.cassel@axis.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      d8f8b954
    • David S. Miller's avatar
      Merge branch '1GbE' of git://git.kernel.org/pub/scm/linux/kernel/git/jkirsher/next-queue · 98fe9cd7
      David S. Miller authored
      Jeff Kirsher says:
      
      ====================
      1GbE Intel Wired LAN Driver Updates 2018-01-24
      
      This series contains updates to igb and e1000e only.
      
      Corinna Vinschen implements the ability to set the VF MAC to
      00:00:00:00:00:00 via RTM_SETLINK on the PF, to prevent receiving
      "invlaid argument" when libvirt attempts to restore the MAC address back
      to its original state of 00:00:00:00:00:00.
      
      Zhang Shengju adds a new function igb_get_max_rss_queues() to get the
      maxium number of RSS queues and to reduce code duplication.
      
      Matt fixes an issue with e1000e where when setting HTHREST, we should
      only be setting bit 8.  Also added a dev_info() message to alert when
      C-states have been disabled, to help in debugging.
      
      Jesus adds code comments to clarify the idlescope configuration
      constraints.
      
      Lyude Paul fixes a kernel crash on hotplug of igb, by checking to ensure
      that we are in the process of dismantling the netdev on hotplug events.
      
      Markus Elfring removes a duplicate message for a memory allocation
      failure.
      
      Daniel Hua fixes an issue where transmit timestamps will stop being put
      into the socket when link is repeatedly up/down due to TSYNCTXCTL's TXTT
      bit (Transmit timestamp valid bit) not clearing in the timeout logic of
      ptp_tx_work(), which in turn causes no new timestamp to be loaded to the
      TXSTMP register.
      ====================
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      98fe9cd7
    • David S. Miller's avatar
      Merge branch 'net-sched-propagate-extack-to-cls-offloads-on-destroy-and-only-with-skip_sw' · 131f1ed3
      David S. Miller authored
      Jakub Kicinski says:
      
      ====================
      net: sched: propagate extack to cls offloads on destroy and only with skip_sw
      
      This series some of Jiri's comments and the fact that today drivers
      may produce extack even if there is no skip_sw flag (meaning the
      driver failure is not really a problem), and warning messages will
      only confuse the users.
      
      First patch propagates extack to destroy as requested by Jiri, extack
      is then propagated to the driver callback for each classifier.  I chose
      not to provide the extack on error paths.  As a rule of thumb it seems
      best to keep the extack of the condition which caused the error.  E.g.
      
           err = this_will_fail(arg, extack);
           if (err) {
              undo_things(arg, NULL /* don't pass extack */);
      	return err;
           }
      
      Note that NL_SET_ERR_MSG() will ignore the message if extack is NULL.
      I was pondering whether we should make NL_SET_ERR_MSG() refuse to
      overwrite the msg, but there seem to be cases in the tree where extack
      is set like this:
      
           err = this_will_fail(arg, extack);
           if (err) {
              undo_things(arg, NULL /* don't pass extack */);
      	NL_SET_ERR_MSG(extack, "extack is set after undo call :/");
      	return err;
           }
      
      I think not passing extack to undo calls is reasonable.
      
      v2:
       - rename the temporary tc_cls_common_offload_init().
      ====================
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      131f1ed3
    • Jakub Kicinski's avatar
      net: sched: remove tc_cls_common_offload_init_deprecated() · c846adb6
      Jakub Kicinski authored
      All users are now converted to tc_cls_common_offload_init().
      Signed-off-by: default avatarJakub Kicinski <jakub.kicinski@netronome.com>
      Reviewed-by: default avatarSimon Horman <simon.horman@netronome.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      c846adb6
    • Jakub Kicinski's avatar
      cls_u32: propagate extack to delete callback · 458e704d
      Jakub Kicinski authored
      Propagate extack on removal of offloaded filter.  Don't pass
      extack from error paths.
      Signed-off-by: default avatarJakub Kicinski <jakub.kicinski@netronome.com>
      Reviewed-by: default avatarSimon Horman <simon.horman@netronome.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      458e704d
    • Jakub Kicinski's avatar
      cls_u32: pass offload flags to tc_cls_common_offload_init() · f40fe58d
      Jakub Kicinski authored
      Pass offload flags to the new implementation of
      tc_cls_common_offload_init().  Extack will now only
      be set if user requested skip_sw.  hnodes need to
      hold onto the flags now to be able to reuse them
      on filter removal.
      Signed-off-by: default avatarJakub Kicinski <jakub.kicinski@netronome.com>
      Reviewed-by: default avatarSimon Horman <simon.horman@netronome.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      f40fe58d
    • Jakub Kicinski's avatar
      cls_flower: propagate extack to delete callback · 1b0f8037
      Jakub Kicinski authored
      Propagate extack on removal of offloaded filter.  Don't pass
      extack from error paths.
      Signed-off-by: default avatarJakub Kicinski <jakub.kicinski@netronome.com>
      Reviewed-by: default avatarSimon Horman <simon.horman@netronome.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      1b0f8037
    • Jakub Kicinski's avatar
      cls_flower: pass offload flags to tc_cls_common_offload_init() · ea205940
      Jakub Kicinski authored
      Pass offload flags to the new implementation of
      tc_cls_common_offload_init().  Extack will now only
      be set if user requested skip_sw.
      Signed-off-by: default avatarJakub Kicinski <jakub.kicinski@netronome.com>
      Reviewed-by: default avatarSimon Horman <simon.horman@netronome.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      ea205940
    • Jakub Kicinski's avatar
      cls_matchall: propagate extack to delete callback · b505b29f
      Jakub Kicinski authored
      Propagate extack on removal of offloaded filter.  Don't pass
      extack from error paths.
      Signed-off-by: default avatarJakub Kicinski <jakub.kicinski@netronome.com>
      Reviewed-by: default avatarSimon Horman <simon.horman@netronome.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      b505b29f
    • Jakub Kicinski's avatar
      cls_matchall: pass offload flags to tc_cls_common_offload_init() · 93da52b5
      Jakub Kicinski authored
      Pass offload flags to the new implementation of
      tc_cls_common_offload_init().  Extack will now only
      be set if user requested skip_sw.
      Signed-off-by: default avatarJakub Kicinski <jakub.kicinski@netronome.com>
      Reviewed-by: default avatarSimon Horman <simon.horman@netronome.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      93da52b5
    • Jakub Kicinski's avatar
      cls_bpf: propagate extack to offload delete callback · 0e908a45
      Jakub Kicinski authored
      Propagate extack on removal of offloaded filter.
      Signed-off-by: default avatarJakub Kicinski <jakub.kicinski@netronome.com>
      Reviewed-by: default avatarSimon Horman <simon.horman@netronome.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      0e908a45
    • Jakub Kicinski's avatar
      cls_bpf: pass offload flags to tc_cls_common_offload_init() · a6ffd6b5
      Jakub Kicinski authored
      Pass offload flags to the new implementation of
      tc_cls_common_offload_init().  Extack will now only
      be set if user requested skip_sw.
      Signed-off-by: default avatarJakub Kicinski <jakub.kicinski@netronome.com>
      Reviewed-by: default avatarSimon Horman <simon.horman@netronome.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      a6ffd6b5
    • Jakub Kicinski's avatar
      cls_bpf: remove gen_flags from bpf_offload · f558fdea
      Jakub Kicinski authored
      cls_bpf now guarantees that only device-bound programs are
      allowed with skip_sw.  The drivers no longer pay attention to
      flags on filter load, therefore the bpf_offload member can be
      removed.  If flags are needed again they should probably be
      added to struct tc_cls_common_offload instead.
      Signed-off-by: default avatarJakub Kicinski <jakub.kicinski@netronome.com>
      Reviewed-by: default avatarSimon Horman <simon.horman@netronome.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      f558fdea
    • Jakub Kicinski's avatar
      net: sched: prepare for reimplementation of tc_cls_common_offload_init() · 34832e1c
      Jakub Kicinski authored
      Rename the tc_cls_common_offload_init() helper function to
      tc_cls_common_offload_init_deprecated() and add a new implementation
      which also takes flags argument.  We will only set extack if flags
      indicate that offload is forced (skip_sw) otherwise driver errors
      should be ignored, as they don't influence the overall filter
      installation.
      
      Note that we need the tc_skip_hw() helper for new version, therefore
      it is added later in the file.
      Signed-off-by: default avatarJakub Kicinski <jakub.kicinski@netronome.com>
      Reviewed-by: default avatarSimon Horman <simon.horman@netronome.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      34832e1c
    • Jakub Kicinski's avatar
      net: sched: propagate extack to cls->destroy callbacks · 715df5ec
      Jakub Kicinski authored
      Propagate extack to cls->destroy callbacks when called from
      non-error paths.  On error paths pass NULL to avoid overwriting
      the failure message.
      Signed-off-by: default avatarJakub Kicinski <jakub.kicinski@netronome.com>
      Reviewed-by: default avatarSimon Horman <simon.horman@netronome.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      715df5ec
    • Daniel Hua's avatar
      igb: Clear TXSTMP when ptp_tx_work() is timeout · 3a532852
      Daniel Hua authored
      Problem description:
      After ethernet cable connect and disconnect for several iterations on a
      device with i210, tx timestamp will stop being put into the socket.
      
      Steps to reproduce:
      1. Setup a device with i210 and wire it to a 802.1AS capable switch (
      Extreme Networks Summit x440 is used in our case)
      2. Have the gptp daemon running on the device and make sure it is synced
      with the switch
      3. Have the switch disable and enable the port, wait for the device gets
      resynced with the switch
      4. Iterates step 3 until the device is not albe to get resynced
      5. Review the log in dmesg and you will see warning message "igb : clearing
      Tx timestamp hang"
      
      Root cause:
      If ptp_tx_work() gets scheduled just before the port gets disabled, a LINK
      DOWN event will be processed before ptp_tx_work(), which may cause timeout
      in ptp_tx_work(). In the timeout logic, the TSYNCTXCTL's TXTT bit (Transmit
      timestamp valid bit) is not cleared, causing no new timestamp loaded to
      TXSTMP register. Consequently therefore, no new interrupt is triggerred by
      TSICR.TXTS bit and no more Tx timestamp send to the socket.
      Signed-off-by: default avatarDaniel Hua <daniel.hua@ni.com>
      Tested-by: default avatarAaron Brown <aaron.f.brown@intel.com>
      Signed-off-by: default avatarJeff Kirsher <jeffrey.t.kirsher@intel.com>
      3a532852
    • Markus Elfring's avatar
      igb: Delete an error message for a failed memory allocation in igb_enable_sriov() · 13169bad
      Markus Elfring authored
      Omit an extra message for a memory allocation failure in this function.
      
      This issue was detected by using the Coccinelle software.
      Signed-off-by: default avatarMarkus Elfring <elfring@users.sourceforge.net>
      Tested-by: default avatarAaron Brown <aaron.f.brown@intel.com>
      Signed-off-by: default avatarJeff Kirsher <jeffrey.t.kirsher@intel.com>
      13169bad
    • Lyude Paul's avatar
      igb: Free IRQs when device is hotplugged · 888f2293
      Lyude Paul authored
      Recently I got a Caldigit TS3 Thunderbolt 3 dock, and noticed that upon
      hotplugging my kernel would immediately crash due to igb:
      
      [  680.825801] kernel BUG at drivers/pci/msi.c:352!
      [  680.828388] invalid opcode: 0000 [#1] SMP
      [  680.829194] Modules linked in: igb(O) thunderbolt i2c_algo_bit joydev vfat fat btusb btrtl btbcm btintel bluetooth ecdh_generic hp_wmi sparse_keymap rfkill wmi_bmof iTCO_wdt intel_rapl x86_pkg_temp_thermal coretemp crc32_pclmul snd_pcm rtsx_pci_ms mei_me snd_timer memstick snd pcspkr mei soundcore i2c_i801 tpm_tis psmouse shpchp wmi tpm_tis_core tpm video hp_wireless acpi_pad rtsx_pci_sdmmc mmc_core crc32c_intel serio_raw rtsx_pci mfd_core xhci_pci xhci_hcd i2c_hid i2c_core [last unloaded: igb]
      [  680.831085] CPU: 1 PID: 78 Comm: kworker/u16:1 Tainted: G           O     4.15.0-rc3Lyude-Test+ #6
      [  680.831596] Hardware name: HP HP ZBook Studio G4/826B, BIOS P71 Ver. 01.03 06/09/2017
      [  680.832168] Workqueue: kacpi_hotplug acpi_hotplug_work_fn
      [  680.832687] RIP: 0010:free_msi_irqs+0x180/0x1b0
      [  680.833271] RSP: 0018:ffffc9000030fbf0 EFLAGS: 00010286
      [  680.833761] RAX: ffff8803405f9c00 RBX: ffff88033e3d2e40 RCX: 000000000000002c
      [  680.834278] RDX: 0000000000000000 RSI: 00000000000000ac RDI: ffff880340be2178
      [  680.834832] RBP: 0000000000000000 R08: ffff880340be1ff0 R09: ffff8803405f9c00
      [  680.835342] R10: 0000000000000000 R11: 0000000000000040 R12: ffff88033d63a298
      [  680.835822] R13: ffff88033d63a000 R14: 0000000000000060 R15: ffff880341959000
      [  680.836332] FS:  0000000000000000(0000) GS:ffff88034f440000(0000) knlGS:0000000000000000
      [  680.836817] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
      [  680.837360] CR2: 000055e64044afdf CR3: 0000000001c09002 CR4: 00000000003606e0
      [  680.837954] Call Trace:
      [  680.838853]  pci_disable_msix+0xce/0xf0
      [  680.839616]  igb_reset_interrupt_capability+0x5d/0x60 [igb]
      [  680.840278]  igb_remove+0x9d/0x110 [igb]
      [  680.840764]  pci_device_remove+0x36/0xb0
      [  680.841279]  device_release_driver_internal+0x157/0x220
      [  680.841739]  pci_stop_bus_device+0x7d/0xa0
      [  680.842255]  pci_stop_bus_device+0x2b/0xa0
      [  680.842722]  pci_stop_bus_device+0x3d/0xa0
      [  680.843189]  pci_stop_and_remove_bus_device+0xe/0x20
      [  680.843627]  trim_stale_devices+0xf3/0x140
      [  680.844086]  trim_stale_devices+0x94/0x140
      [  680.844532]  trim_stale_devices+0xa6/0x140
      [  680.845031]  ? get_slot_status+0x90/0xc0
      [  680.845536]  acpiphp_check_bridge.part.5+0xfe/0x140
      [  680.846021]  acpiphp_hotplug_notify+0x175/0x200
      [  680.846581]  ? free_bridge+0x100/0x100
      [  680.847113]  acpi_device_hotplug+0x8a/0x490
      [  680.847535]  acpi_hotplug_work_fn+0x1a/0x30
      [  680.848076]  process_one_work+0x182/0x3a0
      [  680.848543]  worker_thread+0x2e/0x380
      [  680.848963]  ? process_one_work+0x3a0/0x3a0
      [  680.849373]  kthread+0x111/0x130
      [  680.849776]  ? kthread_create_worker_on_cpu+0x50/0x50
      [  680.850188]  ret_from_fork+0x1f/0x30
      [  680.850601] Code: 43 14 85 c0 0f 84 d5 fe ff ff 31 ed eb 0f 83 c5 01 39 6b 14 0f 86 c5 fe ff ff 8b 7b 10 01 ef e8 b7 e4 d2 ff 48 83 78 70 00 74 e3 <0f> 0b 49 8d b5 a0 00 00 00 e8 62 6f d3 ff e9 c7 fe ff ff 48 8b
      [  680.851497] RIP: free_msi_irqs+0x180/0x1b0 RSP: ffffc9000030fbf0
      
      As it turns out, normally the freeing of IRQs that would fix this is called
      inside of the scope of __igb_close(). However, since the device is
      already gone by the point we try to unregister the netdevice from the
      driver due to a hotplug we end up seeing that the netif isn't present
      and thus, forget to free any of the device IRQs.
      
      So: make sure that if we're in the process of dismantling the netdev, we
      always allow __igb_close() to be called so that IRQs may be freed
      normally. Additionally, only allow igb_close() to be called from
      __igb_close() if it hasn't already been called for the given adapter.
      Signed-off-by: default avatarLyude Paul <lyude@redhat.com>
      Fixes: 9474933c ("igb: close/suspend race in netif_device_detach")
      Cc: Todd Fujinaka <todd.fujinaka@intel.com>
      Cc: Stephen Hemminger <stephen@networkplumber.org>
      Cc: stable@vger.kernel.org
      Tested-by: default avatarAaron Brown <aaron.f.brown@intel.com>
      Signed-off-by: default avatarJeff Kirsher <jeffrey.t.kirsher@intel.com>
      888f2293